From 13ddd4a48686349ccac6f70371abaaa11c020b17 Mon Sep 17 00:00:00 2001 From: Ariiees Date: Mon, 10 Jun 2024 17:10:32 -0400 Subject: [PATCH 001/306] ROS Node configuration Signed-off-by: Ariiees --- sensing/pointcloud_preprocessor/README.md | 25 ++-- ...roximate_downsample_filter_param_file.yaml | 6 + .../blockage_diagnostics_param_file.yaml | 4 + .../concatenate_and_time_sync_param_file.yaml | 12 ++ .../concatenate_pointclouds_param_file.yaml | 8 ++ .../config/crop_box_filter_param_file.yaml | 10 ++ .../distortion_corrector_param_file.yaml | 5 + ...dual_return_outlier_filter_param_file.yaml | 19 +++ .../config/filter_param_file.yaml | 9 ++ .../lanelet2_map_filter_param_file.yaml | 4 + .../passthrough_filter_unit16_param_file.yaml | 7 ++ ...xel_grid_downsample_filter_param_file.yaml | 5 + .../pointcloud_accumulator_param_file.yaml | 4 + ...s_search_2d_outlier_filter_param_file.yaml | 4 + .../random_downsample_filter_param_file.yaml | 3 + .../ring_outlier_filter_param_file.yaml | 14 +++ .../config/time_synchronizer_param_file.yaml | 11 ++ ...tor_map_inside_area_filter_param_file.yaml | 5 + ...xel_grid_downsample_filter_param_file.yaml | 5 + .../voxel_grid_outlier_filter_param_file.yaml | 6 + .../launch/blockage_diag.launch.xml | 2 + .../dual_return_outlier_filter.launch.xml | 8 +- .../launch/polygon_remover.launch.py | 7 +- .../launch/preprocessor.launch.py | 20 ++- .../random_downsample_filter.launch.xml | 7 +- .../launch/ring_passthrough_filter.launch.xml | 7 +- .../schema/blockage_diag.schema.json | 103 +++++++++++++++ .../dual_return_outlier_filter.schema.json | 117 ++++++++++++++++++ .../schema/filter.schema.json | 59 +++++++++ .../random_downsample_filter.schema.json | 33 +++++ .../ring_passthrough_filter.schema.json | 91 ++++++++++++++ .../concatenate_and_time_sync_nodelet.cpp | 18 +-- .../concatenate_pointclouds.cpp | 10 +- .../crop_box_filter_nodelet.cpp | 14 +-- .../distortion_corrector.cpp | 4 +- .../approximate_downsample_filter_nodelet.cpp | 6 +- ...kup_based_voxel_grid_downsample_filter.cpp | 6 +- .../random_downsample_filter_nodelet.cpp | 2 +- .../voxel_grid_downsample_filter_nodelet.cpp | 6 +- .../pointcloud_preprocessor/src/filter.cpp | 12 +- .../dual_return_outlier_filter_nodelet.cpp | 34 ++--- ...adius_search_2d_outlier_filter_nodelet.cpp | 4 +- .../ring_outlier_filter_nodelet.cpp | 26 ++-- .../voxel_grid_outlier_filter_nodelet.cpp | 8 +- .../passthrough_filter_uint16_nodelet.cpp | 10 +- .../pointcloud_accumulator_nodelet.cpp | 4 +- .../time_synchronizer_nodelet.cpp | 16 +-- .../lanelet2_map_filter_nodelet.cpp | 4 +- .../vector_map_inside_area_filter.cpp | 6 +- 49 files changed, 693 insertions(+), 117 deletions(-) create mode 100644 sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.yaml create mode 100644 sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/README.md b/sensing/pointcloud_preprocessor/README.md index 5c6402efdf23d..43b91632083c6 100644 --- a/sensing/pointcloud_preprocessor/README.md +++ b/sensing/pointcloud_preprocessor/README.md @@ -45,14 +45,23 @@ Detail description of each filter's algorithm is in the following links. ### Node Parameters -| Name | Type | Default Value | Description | -| ------------------ | ------ | ------------- | ------------------------------------- | -| `input_frame` | string | " " | input frame id | -| `output_frame` | string | " " | output frame id | -| `max_queue_size` | int | 5 | max queue size of input/output topics | -| `use_indices` | bool | false | flag to use pointcloud indices | -| `latched_indices` | bool | false | flag to latch pointcloud indices | -| `approximate_sync` | bool | false | flag to use approximate sync option | +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/filter.schema.json") }} + +### blockage_diag + +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json") }} + +### dual_return_outlier_filter + +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json") }} + +### random_downsample_filter + +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json") }} + +### ring_passthrough_filter + +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml new file mode 100644 index 0000000000000..68fbb61647d21 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml @@ -0,0 +1,6 @@ +/**: + ros__parameters: + ## Paramters in approximate_downsample_filter_nodelet.cpp + voxel_size_x: 0.3 + voxel_size_y: 0.3 + voxel_size_z: 0.1 \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml b/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml index 13ddd8a7c7590..589f7155132cd 100644 --- a/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml @@ -14,3 +14,7 @@ max_distance_range: 200.0 horizontal_resolution: 0.4 blockage_kernel: 10 + + + + diff --git a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml new file mode 100644 index 0000000000000..47505eaf29580 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml @@ -0,0 +1,12 @@ +/**: + ros__parameters: + ## Paramters in concatenate_and_time_sync_nodelet.cpp + input_twist_topic_type: twist + output_frame: "" + input_topics: [] + max_queue_size: 5 + timeout_sec: 0.1 + input_offset: [] + publish_synchronized_pointcloud: true + keep_input_frame_in_synchronized_pointcloud: true + synchronized_pointcloud_postfix: pointcloud \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml new file mode 100644 index 0000000000000..6365ee1aafac7 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml @@ -0,0 +1,8 @@ +/**: + ros__parameters: + ## Paramters in concatenate_pointclouds.cpp + output_frame: "" + input_topics: [] + max_queue_size: 5 + timeout_sec: 0.033 + input_offset: [] \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml new file mode 100644 index 0000000000000..0a2bc74df9df0 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml @@ -0,0 +1,10 @@ +/**: + ros__parameters: + ## Paramters in crop_box_filter_nodelet.cpp + min_x: -1.0 + min_y: -1.0 + min_z: -1.0 + max_x: 1.0 + max_y: 1.0 + max_z: 1.0 + negative: false \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml b/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml new file mode 100644 index 0000000000000..6ac0af6304b2c --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + ## Paramters in distortion_corrector.cpp + time_stamp_field_name: "time_stamp" + use_imu: true \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml new file mode 100644 index 0000000000000..2527dc5f691d0 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml @@ -0,0 +1,19 @@ +/**: + ros__parameters: + x_max: 18.0 + x_min: -12.0 + y_max: 2.0 + y_min: -2.0 + z_max: 10.0 + z_min: 0.0 + min_azimuth_deg: 135.0 + max_azimuth_deg: 225.0 + max_distance: 12.0 + vertical_bins: 128 + max_azimuth_diff: 50.0 + weak_first_distance_ratio: 1.004 + general_distance_ratio: 1.03 + weak_first_local_noise_threshold: 2 + roi_mode: "Fixed_xyz_ROI" + visibility_error_threshold: 0.5 + visibility_warn_threshold: 0.7 \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/filter_param_file.yaml new file mode 100644 index 0000000000000..f4bfa91ea84aa --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/filter_param_file.yaml @@ -0,0 +1,9 @@ +/**: + ros__parameters: + ## Paramters in filter.cpp + input_frame: "" + output_frame: "" + max_queue_size: 5 + use_indices: false + latched_indices: false + approximate_sync: false \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml new file mode 100644 index 0000000000000..295cd8db0df42 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml @@ -0,0 +1,4 @@ +/**: + ros__parameters: + voxel_size_x: 0.04 + voxel_size_y: 0.04 \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml b/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml new file mode 100644 index 0000000000000..66caaa38edd95 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml @@ -0,0 +1,7 @@ +/**: + ros__parameters: + filter_limit_min: 0 + filter_limit_max: 127 + filter_field_name: "ring" + keep_organized: false + filter_limit_negative: false \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml new file mode 100644 index 0000000000000..7ec5f72152905 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + voxel_size_x: 1.0 + voxel_size_y: 1.0 + voxel_size_z: 1.0 \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml b/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml new file mode 100644 index 0000000000000..e38e27ecf133b --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml @@ -0,0 +1,4 @@ +/**: + ros__parameters: + accumulation_time_sec: 2.0 + pointcloud_buffer_size: 50 \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml new file mode 100644 index 0000000000000..15a00ea650a3e --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml @@ -0,0 +1,4 @@ +/**: + ros__parameters: + min_neighbors: 5 + search_radius: 0.2 \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml new file mode 100644 index 0000000000000..bb1799bf30691 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml @@ -0,0 +1,3 @@ +/**: + ros__parameters: + sample_num: 1500 \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml new file mode 100644 index 0000000000000..d93d616bdf77a --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml @@ -0,0 +1,14 @@ +/**: + ros__parameters: + distance_ratio: 1.03 + object_length_threshold: 0.1 + num_points_threshold: 4 + max_rings_num: 128 + max_points_num_per_ring: 4000 + publish_outlier_pointcloud: false + min_azimuth_deg: 0.0 + max_azimuth_deg: 360.0 + max_distance: 12.0 + vertical_bins: 128 + horizontal_bins: 36 + noise_threshold: 2 \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml b/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml new file mode 100644 index 0000000000000..5b94f626a4f48 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml @@ -0,0 +1,11 @@ +/**: + ros__parameters: + input_twist_topic_type: "twist" + output_frame: "" + keep_input_frame_in_synchronized_pointcloud: false + input_topics: [] + synchronized_pointcloud_postfix: "pointcloud" + max_queue_size: 5 + timeout_sec: 0.1 + input_offset: [] + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml new file mode 100644 index 0000000000000..40a5c96a9ca8f --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + polygon_type: "no_obstacle_segmentation_area" + use_z_filter: false + z_threshold: 0.0f \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml new file mode 100644 index 0000000000000..6350d8541dc01 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + voxel_size_x: 0.3 + voxel_size_y: 0.3 + voxel_size_z: 0.1 \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.yaml new file mode 100644 index 0000000000000..2ff4c64d5f835 --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.yaml @@ -0,0 +1,6 @@ +/**: + ros__parameters: + voxel_size_x: 0.3 + voxel_size_y: 0.3 + voxel_size_z: 0.1 + voxel_points_threshold: 2 diff --git a/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml b/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml index 5a93cb950b827..90902ccf7a5d3 100644 --- a/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml @@ -6,6 +6,7 @@ + @@ -14,5 +15,6 @@ + diff --git a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml index db51e9bafc90e..9f04075f79bfd 100644 --- a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml @@ -1,21 +1,23 @@ - - + + + - + + diff --git a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py index 98bc5a6dd2699..6ba7e3154ab55 100644 --- a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py +++ b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py @@ -29,6 +29,10 @@ def generate_launch_description(): get_package_share_directory("autoware_vehicle_info_utils"), "config/polygon_remover.yaml" ) + shared_filter_file = os.path.join( + get_package_share_directory("pointcloude_preprocessor"), "config/filter_param_file.yaml" + ) + with open(param_file, "r") as f: polygon_remover_param = yaml.safe_load(f)["/**"]["ros__parameters"] @@ -40,7 +44,8 @@ def generate_launch_description(): { "polygon_vertices": polygon_remover_param["polygon_vertices"], "will_visualize": polygon_remover_param["will_visualize"], - } + }, + shared_filter_file ], ) diff --git a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py index d82c23152aee4..a4cef7f75caf2 100644 --- a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py +++ b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py @@ -20,6 +20,9 @@ from launch.substitutions import PythonExpression from launch_ros.actions import ComposableNodeContainer from launch_ros.descriptions import ComposableNode +import os +import yaml +from ament_index_python.packages import get_package_share_directory def launch_setup(context, *args, **kwargs): @@ -33,6 +36,11 @@ def launch_setup(context, *args, **kwargs): separate_concatenate_node_and_time_sync_node.lower() == "true" ) + shared_filter_file = os.path.join( + get_package_share_directory("pointcloud_preprocessor"), "config/filter_param_file.yaml" + ) + + if not is_separate_concatenate_node_and_time_sync_node: sync_and_concat_component = ComposableNode( package=pkg, @@ -49,7 +57,8 @@ def launch_setup(context, *args, **kwargs): "approximate_sync": True, "publish_synchronized_pointcloud": False, "input_twist_topic_type": "twist", - } + }, + shared_filter_file ], ) concat_components = [sync_and_concat_component] @@ -67,7 +76,8 @@ def launch_setup(context, *args, **kwargs): "input_topics": LaunchConfiguration("input_points_raw_list"), "output_frame": LaunchConfiguration("tf_output_frame"), "approximate_sync": True, - } + }, + shared_filter_file ], ) @@ -81,7 +91,8 @@ def launch_setup(context, *args, **kwargs): "input_topics": LaunchConfiguration("input_points_raw_list"), "output_frame": LaunchConfiguration("tf_output_frame"), "approximate_sync": True, - } + }, + shared_filter_file ], ) concat_components = [time_sync_component, concat_component] @@ -117,7 +128,8 @@ def launch_setup(context, *args, **kwargs): "min_z": -2.0, "max_z": 3.0, "negative": False, - } + }, + shared_filter_file ], ) diff --git a/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml index edd4f6e92aa8d..7374452e2e9fb 100644 --- a/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml @@ -1,17 +1,18 @@ - - + + - + + diff --git a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml index c121a7f0af6ac..34bd5fa71d72c 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml @@ -1,7 +1,6 @@ - @@ -9,11 +8,11 @@ - + + - @@ -21,5 +20,7 @@ + + diff --git a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json new file mode 100644 index 0000000000000..789155d175104 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json @@ -0,0 +1,103 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "blockage_diag", + "type": "object", + "definitions": { + "blockage_diag": { + "type": "object", + "properties": { + "blockage_ratio_threshold": { + "type": "number", + "description": "blockage ration threshold", + "default": "0.1" + }, + "blockage_count_threshold": { + "type": "number", + "description": "blockage count threshold", + "default": "50" + }, + "blockage_buffering_frames": { + "type": "number", + "description": "blockage buffering frames", + "default": "2" + }, + "blockage_buffering_interval": { + "type": "number", + "description": "blockage buffering interval", + "default": "1" + }, + "enable_dust_diag": { + "type": "boolean", + "description": "enable dust diag", + "default": "false" + }, + "publish_debug_image": { + "type": "boolean", + "description": "eanble debug", + "default": "false" + }, + "dust_ratio_threshold": { + "type": "number", + "description": "dust ration threshold", + "default": "0.2" + }, + "dust_count_threshold": { + "type": "number", + "description": "dust count threshold", + "default": "10" + }, + "dust_kernel_size": { + "type": "number", + "description": "dust kernel size", + "default": "2" + }, + "dust_buffering_frames": { + "type": "number", + "description": "dust buffering frames", + "default": "10" + }, + "dust_buffering_interval": { + "type": "number", + "description": "dust buffering interval", + "default": "1" + }, + "max_distance_range": { + "type": "number", + "description": "max distance range", + "default": "200.0" + }, + "horizontal_resolution": { + "type": "number", + "description": "horizontal resolution", + "default": "INSERT_DEFAULT" + }, + "blockage_kernel": { + "type": "number", + "description": "blockage kernel", + "default": "10" + } + }, + "required": ["blockage_ratio_threshold", "blockage_count_threshold", + "blockage_buffering_frames", "blockage_buffering_interval", + "enable_dust_diag", "publish_debug_image", "dust_ratio_threshold", + "dust_count_threshold", "dust_kernel_size", "dust_buffering_frames", + "dust_buffering_interval", "max_distance_range", + "horizontal_resolution", "blockage_kernel"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/blockage_diag" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json new file mode 100644 index 0000000000000..8e94d8662eb93 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json @@ -0,0 +1,117 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "dual_return_outlier_filter", + "type": "object", + "definitions": { + "dual_return_outlier_filter": { + "type": "object", + "properties": { + "x_max": { + "type": "number", + "description": "max distance on x", + "default": "18.0" + }, + "x_min": { + "type": "number", + "description": "min distance on x", + "default": "-12.0" + }, + "y_max": { + "type": "number", + "description": "max distance on y", + "default": "2.0" + }, + "y_min": { + "type": "number", + "description": "min distance on y", + "default": "-2.0" + }, + "z_max": { + "type": "number", + "description": "max distance on z", + "default": "10.0" + }, + "z_min": { + "type": "number", + "description": "min distance on z", + "default": "0.0" + }, + "min_azimuth_deg": { + "type": "number", + "description": "minium azimuth degree", + "default": "135.0" + }, + "max_azimuth_deg": { + "type": "number", + "description": "maximum azimuth degree", + "default": "225.0" + }, + "max_distance": { + "type": "number", + "description": "maximum distance", + "default": "12.0" + }, + "vertical_bins": { + "type": "number", + "description": "vertical bins", + "default": "128" + }, + "max_azimuth_diff": { + "type": "number", + "description": "max azimuth diff", + "default": "50" + }, + "weak_first_distance_ratio": { + "type": "number", + "description": "weak first distance ratio", + "default": "1.004" + }, + "general_distance_ratio": { + "type": "number", + "description": "general distance ratio", + "default": "1.03" + }, + "weak_first_local_noise_threshold": { + "type": "number", + "description": "weak first local noise threshold", + "default": "2" + }, + "roi_mode": { + "type": "string", + "description": "roi mode", + "default": "Fixed_xyz_ROI" + }, + "visibility_error_threshold": { + "type": "number", + "description": "visibility error threshold", + "default": "0.5" + }, + "visibility_warn_threshold": { + "type": "number", + "description": "visibility warn threshold", + "default": "0.7" + } + }, + "required": ["x_max", "x_min", "y_max", "y_min", "z_max", + "z_min", "min_azimuth_deg", "max_azimuth_deg", "max_distance", + "vertical_bins", "max_azimuth_diff", "weak_first_distance_ratio", + "general_distance_ratio", "weak_first_local_noise_threshold", + "roi_mode", "visibility_error_threshold", "visibility_warn_threshold"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/dual_return_outlier_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/filter.schema.json b/sensing/pointcloud_preprocessor/schema/filter.schema.json new file mode 100644 index 0000000000000..267b1735cf439 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/filter.schema.json @@ -0,0 +1,59 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "filter", + "type": "object", + "definitions": { + "filter": { + "type": "object", + "properties": { + "input_frame": { + "type": "string", + "description": "input frame", + "default": "" + }, + "output_frame": { + "type": "string", + "description": "output frame", + "default": "" + }, + "max_queue_size": { + "type": "number", + "description": "max queue size of input", + "default": 5 + }, + "use_indices": { + "type": "boolean", + "description": "flag to use pointcloud", + "default": false + }, + "latched_indices": { + "type": "boolean", + "description": "flag to latch pointcloud", + "default": false + }, + "approximate_sync": { + "type": "boolean", + "description": "flag to use approximate sync", + "default": false + } + }, + "required": ["input_frame", "output_frame", "max_queue_size", + "use_indices", "latched_indices", "approximate_sync"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json new file mode 100644 index 0000000000000..703e77a61d436 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json @@ -0,0 +1,33 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "random_downsample_filter", + "type": "object", + "definitions": { + "random_downsample_filter": { + "type": "object", + "properties": { + "sample_num": { + "type": "number", + "description": "sample numbers", + "default": "1500" + } + }, + "required": ["sample_num"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/random_downsample_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json b/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json new file mode 100644 index 0000000000000..1d657a3be3c9e --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json @@ -0,0 +1,91 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ring_outlier_filter", + "type": "object", + "definitions": { + "ring_outlier_filter": { + "type": "object", + "properties": { + "distance_ratio": { + "type": "number", + "description": "distance ratio", + "default": "1.03" + }, + "object_length_threshold": { + "type": "number", + "description": "object length threshold", + "default": "0.1" + }, + "num_points_threshold": { + "type": "number", + "description": "number points threshold", + "default": "4" + }, + "max_rings_num": { + "type": "number", + "description": "max rings number", + "default": "128" + }, + "max_points_num_per_ring": { + "type": "number", + "description": "maximum points number per ring", + "default": "4000" + }, + "publish_outlier_pointcloud": { + "type": "boolean", + "description": "enable publish outlier pointcloud", + "default": "false" + }, + "min_azimuth_deg": { + "type": "number", + "description": "minimu azimuth degree", + "default": "0.0" + }, + "max_azimuth_deg": { + "type": "number", + "description": "maximum azimuth degree", + "default": "360.0" + }, + "max_distance": { + "type": "number", + "description": "maximum distance", + "default": "12.0" + }, + "vertical_bins": { + "type": "number", + "description": "vertical bins", + "default": "128" + }, + "horizontal_bins": { + "type": "number", + "description": "horizontal bins", + "default": "36" + }, + "noise_threshold": { + "type": "number", + "description": "noise threshold", + "default": "2" + } + }, + "required": ["distance_ratio", "object_length_threshold", + "num_points_threshold", "max_rings_num", "max_points_num_per_ring", + "publish_outlier_pointcloud", "min_azimuth_deg", "max_azimuth_deg", + "max_distance", "vertical_bins", "horizontal_bins", "noise_threshold"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/ring_outlier_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index 4fd28e02cc74f..ab431d2f5e61e 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -71,7 +71,7 @@ namespace pointcloud_preprocessor PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchronizerComponent( const rclcpp::NodeOptions & node_options) : Node("point_cloud_concatenator_component", node_options), - input_twist_topic_type_(declare_parameter("input_twist_topic_type", "twist")) + input_twist_topic_type_(declare_parameter("input_twist_topic_type")) { // initialize debug tool { @@ -85,12 +85,12 @@ PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchro // Set parameters { - output_frame_ = static_cast(declare_parameter("output_frame", "")); + output_frame_ = declare_parameter("output_frame"); if (output_frame_.empty()) { RCLCPP_ERROR(get_logger(), "Need an 'output_frame' parameter to be set before continuing!"); return; } - declare_parameter("input_topics", std::vector()); + declare_parameter>("input_topics"); input_topics_ = get_parameter("input_topics").as_string_array(); if (input_topics_.empty()) { RCLCPP_ERROR(get_logger(), "Need a 'input_topics' parameter to be set before continuing!"); @@ -102,21 +102,21 @@ PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchro } // Optional parameters - maximum_queue_size_ = static_cast(declare_parameter("max_queue_size", 5)); - timeout_sec_ = static_cast(declare_parameter("timeout_sec", 0.1)); + maximum_queue_size_ = declare_parameter("max_queue_size"); + timeout_sec_ = declare_parameter("timeout_sec"); - input_offset_ = declare_parameter("input_offset", std::vector{}); + input_offset_ = declare_parameter>("input_offset"); if (!input_offset_.empty() && input_topics_.size() != input_offset_.size()) { RCLCPP_ERROR(get_logger(), "The number of topics does not match the number of offsets."); return; } // Check if publish synchronized pointcloud - publish_synchronized_pointcloud_ = declare_parameter("publish_synchronized_pointcloud", true); + publish_synchronized_pointcloud_ = declare_parameter("publish_synchronized_pointcloud"); keep_input_frame_in_synchronized_pointcloud_ = - declare_parameter("keep_input_frame_in_synchronized_pointcloud", true); + declare_parameter("keep_input_frame_in_synchronized_pointcloud"); synchronized_pointcloud_postfix_ = - declare_parameter("synchronized_pointcloud_postfix", "pointcloud"); + declare_parameter("synchronized_pointcloud_postfix"); } // Initialize not_subscribed_topic_names_ diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp index 29f0bf61a1ab7..b395acc1456f5 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp @@ -47,12 +47,12 @@ PointCloudConcatenationComponent::PointCloudConcatenationComponent( // Set parameters { - output_frame_ = static_cast(declare_parameter("output_frame", "")); + output_frame_ = declare_parameter("output_frame"); if (output_frame_.empty()) { RCLCPP_ERROR(get_logger(), "Need an 'output_frame' parameter to be set before continuing!"); return; } - declare_parameter("input_topics", std::vector()); + declare_parameter>("input_topics"); input_topics_ = get_parameter("input_topics").as_string_array(); if (input_topics_.empty()) { RCLCPP_ERROR(get_logger(), "Need a 'input_topics' parameter to be set before continuing!"); @@ -64,11 +64,11 @@ PointCloudConcatenationComponent::PointCloudConcatenationComponent( } // Optional parameters - maximum_queue_size_ = static_cast(declare_parameter("max_queue_size", 5)); + maximum_queue_size_ = declare_parameter("max_queue_size"); /** input pointclouds should be */ - timeout_sec_ = static_cast(declare_parameter("timeout_sec", 0.033)); + timeout_sec_ = declare_parameter("timeout_sec"); - input_offset_ = declare_parameter("input_offset", std::vector{}); + input_offset_ = declare_parameter>("input_offset"); if (!input_offset_.empty() && input_topics_.size() != input_offset_.size()) { RCLCPP_ERROR(get_logger(), "The number of topics does not match the number of offsets."); return; diff --git a/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp index 620e9e42a6864..e95caa8e28572 100644 --- a/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp @@ -73,13 +73,13 @@ CropBoxFilterComponent::CropBoxFilterComponent(const rclcpp::NodeOptions & optio // set initial parameters { auto & p = param_; - p.min_x = static_cast(declare_parameter("min_x", -1.0)); - p.min_y = static_cast(declare_parameter("min_y", -1.0)); - p.min_z = static_cast(declare_parameter("min_z", -1.0)); - p.max_x = static_cast(declare_parameter("max_x", 1.0)); - p.max_y = static_cast(declare_parameter("max_y", 1.0)); - p.max_z = static_cast(declare_parameter("max_z", 1.0)); - p.negative = static_cast(declare_parameter("negative", false)); + p.min_x = declare_parameter("min_x"); + p.min_y = declare_parameter("min_y"); + p.min_z = declare_parameter("min_z"); + p.max_x = declare_parameter("max_x"); + p.max_y = declare_parameter("max_y"); + p.max_z = declare_parameter("max_z"); + p.negative = declare_parameter("negative"); if (tf_input_frame_.empty()) { throw std::invalid_argument("Crop box requires non-empty input_frame"); } diff --git a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp index e7aa1f24409e6..6ac11f0ff9fa6 100644 --- a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp +++ b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp @@ -37,8 +37,8 @@ DistortionCorrectorComponent::DistortionCorrectorComponent(const rclcpp::NodeOpt } // Parameter - time_stamp_field_name_ = declare_parameter("time_stamp_field_name", "time_stamp"); - use_imu_ = declare_parameter("use_imu", true); + time_stamp_field_name_ = declare_parameter("time_stamp_field_name"); + use_imu_ = declare_parameter("use_imu"); // Publisher undistorted_points_pub_ = diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/approximate_downsample_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/approximate_downsample_filter_nodelet.cpp index 6a9a5818b19ce..cf57715e36c76 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/approximate_downsample_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/approximate_downsample_filter_nodelet.cpp @@ -64,9 +64,9 @@ ApproximateDownsampleFilterComponent::ApproximateDownsampleFilterComponent( : Filter("ApproximateDownsampleFilter", options) { { - voxel_size_x_ = static_cast(declare_parameter("voxel_size_x", 0.3)); - voxel_size_y_ = static_cast(declare_parameter("voxel_size_y", 0.3)); - voxel_size_z_ = static_cast(declare_parameter("voxel_size_z", 0.1)); + voxel_size_x_ = declare_parameter("voxel_size_x"); + voxel_size_y_ = declare_parameter("voxel_size_y"); + voxel_size_z_ = declare_parameter("voxel_size_z"); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/pickup_based_voxel_grid_downsample_filter.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/pickup_based_voxel_grid_downsample_filter.cpp index 83c9058fd5fa5..d78af1edfbe2a 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/pickup_based_voxel_grid_downsample_filter.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/pickup_based_voxel_grid_downsample_filter.cpp @@ -66,9 +66,9 @@ PickupBasedVoxelGridDownsampleFilterComponent::PickupBasedVoxelGridDownsampleFil } // Initialization of voxel sizes from parameters - voxel_size_x_ = static_cast(declare_parameter("voxel_size_x", 1.0)); - voxel_size_y_ = static_cast(declare_parameter("voxel_size_y", 1.0)); - voxel_size_z_ = static_cast(declare_parameter("voxel_size_z", 1.0)); + voxel_size_x_ = declare_parameter("voxel_size_x"); + voxel_size_y_ = declare_parameter("voxel_size_y"); + voxel_size_z_ = declare_parameter("voxel_size_z"); using std::placeholders::_1; set_param_res_ = this->add_on_set_parameters_callback( diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp index 6216b1dad97e8..95ce78204b64a 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp @@ -58,7 +58,7 @@ RandomDownsampleFilterComponent::RandomDownsampleFilterComponent( { // set initial parameters { - sample_num_ = static_cast(declare_parameter("sample_num", 1500)); + sample_num_ = declare_parameter("sample_num"); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp index f11f37397a142..ad6e49514714a 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp @@ -66,9 +66,9 @@ VoxelGridDownsampleFilterComponent::VoxelGridDownsampleFilterComponent( { // set initial parameters { - voxel_size_x_ = static_cast(declare_parameter("voxel_size_x", 0.3)); - voxel_size_y_ = static_cast(declare_parameter("voxel_size_y", 0.3)); - voxel_size_z_ = static_cast(declare_parameter("voxel_size_z", 0.1)); + voxel_size_x_ = declare_parameter("voxel_size_x"); + voxel_size_y_ = declare_parameter("voxel_size_y"); + voxel_size_z_ = declare_parameter("voxel_size_z"); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/filter.cpp b/sensing/pointcloud_preprocessor/src/filter.cpp index c9bb6dfc0fc66..6eda86a710f99 100644 --- a/sensing/pointcloud_preprocessor/src/filter.cpp +++ b/sensing/pointcloud_preprocessor/src/filter.cpp @@ -68,14 +68,14 @@ pointcloud_preprocessor::Filter::Filter( { // Set parameters (moved from NodeletLazy onInit) { - tf_input_frame_ = static_cast(declare_parameter("input_frame", "")); - tf_output_frame_ = static_cast(declare_parameter("output_frame", "")); - max_queue_size_ = static_cast(declare_parameter("max_queue_size", 5)); + tf_input_frame_ = declare_parameter("input_frame"); + tf_output_frame_ = declare_parameter("output_frame"); + max_queue_size_ = declare_parameter("max_queue_size"); // ---[ Optional parameters - use_indices_ = static_cast(declare_parameter("use_indices", false)); - latched_indices_ = static_cast(declare_parameter("latched_indices", false)); - approximate_sync_ = static_cast(declare_parameter("approximate_sync", false)); + use_indices_ = declare_parameter("use_indices"); + latched_indices_ = declare_parameter("latched_indices"); + approximate_sync_ = declare_parameter("approximate_sync"); RCLCPP_DEBUG_STREAM( this->get_logger(), diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp index 275c56eaefcc7..6a03206cb7afa 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp @@ -38,29 +38,29 @@ DualReturnOutlierFilterComponent::DualReturnOutlierFilterComponent( { // set initial parameters { - x_max_ = static_cast(declare_parameter("x_max", 18.0)); - x_min_ = static_cast(declare_parameter("x_min", -12.0)); - y_max_ = static_cast(declare_parameter("y_max", 2.0)); - y_min_ = static_cast(declare_parameter("y_min", -2.0)); - z_max_ = static_cast(declare_parameter("z_max", 10.0)); - z_min_ = static_cast(declare_parameter("z_min", 0.0)); - min_azimuth_deg_ = static_cast(declare_parameter("min_azimuth_deg", 135.0)); - max_azimuth_deg_ = static_cast(declare_parameter("max_azimuth_deg", 225.0)); - max_distance_ = static_cast(declare_parameter("max_distance", 12.0)); - vertical_bins_ = static_cast(declare_parameter("vertical_bins", 128)); - max_azimuth_diff_ = static_cast(declare_parameter("max_azimuth_diff", 50.0)); + x_max_ = declare_parameter("x_max"); + x_min_ = declare_parameter("x_min"); + y_max_ = declare_parameter("y_max"); + y_min_ = declare_parameter("y_min"); + z_max_ = declare_parameter("z_max"); + z_min_ = declare_parameter("z_min"); + min_azimuth_deg_ = declare_parameter("min_azimuth_deg"); + max_azimuth_deg_ = declare_parameter("max_azimuth_deg"); + max_distance_ = declare_parameter("max_distance"); + vertical_bins_ = declare_parameter("vertical_bins"); + max_azimuth_diff_ = declare_parameter("max_azimuth_diff"); weak_first_distance_ratio_ = - static_cast(declare_parameter("weak_first_distance_ratio", 1.004)); + declare_parameter("weak_first_distance_ratio"); general_distance_ratio_ = - static_cast(declare_parameter("general_distance_ratio", 1.03)); + declare_parameter("general_distance_ratio"); weak_first_local_noise_threshold_ = - static_cast(declare_parameter("weak_first_local_noise_threshold", 2)); - roi_mode_ = static_cast(declare_parameter("roi_mode", "Fixed_xyz_ROI")); + declare_parameter("weak_first_local_noise_threshold"); + roi_mode_ = declare_parameter("roi_mode"); visibility_error_threshold_ = - static_cast(declare_parameter("visibility_error_threshold", 0.5)); + declare_parameter("visibility_error_threshold"); visibility_warn_threshold_ = - static_cast(declare_parameter("visibility_warn_threshold", 0.7)); + declare_parameter("visibility_warn_threshold"); } updater_.setHardwareID("dual_return_outlier_filter"); updater_.add( diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp index bbf01e0bdf223..25543a4782c4e 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp @@ -28,8 +28,8 @@ RadiusSearch2DOutlierFilterComponent::RadiusSearch2DOutlierFilterComponent( { // set initial parameters { - min_neighbors_ = static_cast(declare_parameter("min_neighbors", 5)); - search_radius_ = static_cast(declare_parameter("search_radius", 0.2)); + min_neighbors_ = declare_parameter("min_neighbors"); + search_radius_ = declare_parameter("search_radius"); } kd_tree_ = pcl::make_shared>(false); diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp index e05f44240b53a..c49b4320ad95c 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp @@ -43,22 +43,22 @@ RingOutlierFilterComponent::RingOutlierFilterComponent(const rclcpp::NodeOptions // set initial parameters { - distance_ratio_ = static_cast(declare_parameter("distance_ratio", 1.03)); + distance_ratio_ = declare_parameter("distance_ratio"); object_length_threshold_ = - static_cast(declare_parameter("object_length_threshold", 0.1)); - num_points_threshold_ = static_cast(declare_parameter("num_points_threshold", 4)); - max_rings_num_ = static_cast(declare_parameter("max_rings_num", 128)); + declare_parameter("object_length_threshold"); + num_points_threshold_ = declare_parameter("num_points_threshold"); + max_rings_num_ = declare_parameter("max_rings_num"); max_points_num_per_ring_ = - static_cast(declare_parameter("max_points_num_per_ring", 4000)); + declare_parameter("max_points_num_per_ring"); publish_outlier_pointcloud_ = - static_cast(declare_parameter("publish_outlier_pointcloud", false)); - - min_azimuth_deg_ = static_cast(declare_parameter("min_azimuth_deg", 0.0)); - max_azimuth_deg_ = static_cast(declare_parameter("max_azimuth_deg", 360.0)); - max_distance_ = static_cast(declare_parameter("max_distance", 12.0)); - vertical_bins_ = static_cast(declare_parameter("vertical_bins", 128)); - horizontal_bins_ = static_cast(declare_parameter("horizontal_bins", 36)); - noise_threshold_ = static_cast(declare_parameter("noise_threshold", 2)); + declare_parameter("publish_outlier_pointcloud"); + + min_azimuth_deg_ = declare_parameter("min_azimuth_deg"); + max_azimuth_deg_ = declare_parameter("max_azimuth_deg"); + max_distance_ = declare_parameter("max_distance"); + vertical_bins_ = declare_parameter("vertical_bins"); + horizontal_bins_ = declare_parameter("horizontal_bins"); + noise_threshold_ = declare_parameter("noise_threshold"); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp index 8745c20a7cb0b..b420d6eceb46e 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp @@ -28,10 +28,10 @@ VoxelGridOutlierFilterComponent::VoxelGridOutlierFilterComponent( { // set initial parameters { - voxel_size_x_ = static_cast(declare_parameter("voxel_size_x", 0.3)); - voxel_size_y_ = static_cast(declare_parameter("voxel_size_y", 0.3)); - voxel_size_z_ = static_cast(declare_parameter("voxel_size_z", 0.1)); - voxel_points_threshold_ = static_cast(declare_parameter("voxel_points_threshold", 2)); + voxel_size_x_ = declare_parameter("voxel_size_x"); + voxel_size_y_ = declare_parameter("voxel_size_y"); + voxel_size_z_ = declare_parameter("voxel_size_z"); + voxel_points_threshold_ = declare_parameter("voxel_points_threshold"); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp b/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp index 130e3e3de7934..0a68dfad4f230 100644 --- a/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp @@ -29,15 +29,15 @@ PassThroughFilterUInt16Component::PassThroughFilterUInt16Component( { // set initial parameters { - int filter_min = static_cast(declare_parameter("filter_limit_min", 0)); - int filter_max = static_cast(declare_parameter("filter_limit_max", 127)); + int filter_min = declare_parameter("filter_limit_min"); + int filter_max = declare_parameter("filter_limit_max"); impl_.setFilterLimits(filter_min, filter_max); impl_.setFilterFieldName( - static_cast(declare_parameter("filter_field_name", "ring"))); - impl_.setKeepOrganized(static_cast(declare_parameter("keep_organized", false))); + declare_parameter("filter_field_name")); + impl_.setKeepOrganized(declare_parameter("keep_organized")); impl_.setFilterLimitsNegative( - static_cast(declare_parameter("filter_limit_negative", false))); + declare_parameter("filter_limit_negative")); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp index cfaffece4169f..a9c93fdfb9921 100644 --- a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp @@ -23,9 +23,9 @@ PointcloudAccumulatorComponent::PointcloudAccumulatorComponent(const rclcpp::Nod { // set initial parameters { - accumulation_time_sec_ = static_cast(declare_parameter("accumulation_time_sec", 2.0)); + accumulation_time_sec_ = declare_parameter("accumulation_time_sec"); pointcloud_buffer_.set_capacity( - static_cast(declare_parameter("pointcloud_buffer_size", 50))); + declare_parameter("pointcloud_buffer_size")); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp b/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp index 890dcdb974cf3..31d080da64f33 100644 --- a/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp @@ -42,7 +42,7 @@ namespace pointcloud_preprocessor PointCloudDataSynchronizerComponent::PointCloudDataSynchronizerComponent( const rclcpp::NodeOptions & node_options) : Node("point_cloud_time_synchronizer_component", node_options), - input_twist_topic_type_(declare_parameter("input_twist_topic_type", "twist")) + input_twist_topic_type_(declare_parameter("input_twist_topic_type")) { // initialize debug tool { @@ -57,14 +57,14 @@ PointCloudDataSynchronizerComponent::PointCloudDataSynchronizerComponent( // Set parameters std::string synchronized_pointcloud_postfix; { - output_frame_ = static_cast(declare_parameter("output_frame", "")); + output_frame_ = declare_parameter("output_frame"); keep_input_frame_in_synchronized_pointcloud_ = - static_cast(declare_parameter("keep_input_frame_in_synchronized_pointcloud", false)); + declare_parameter("keep_input_frame_in_synchronized_pointcloud"); if (output_frame_.empty() && !keep_input_frame_in_synchronized_pointcloud_) { RCLCPP_ERROR(get_logger(), "Need an 'output_frame' parameter to be set before continuing!"); return; } - declare_parameter("input_topics", std::vector()); + declare_parameter>("input_topics"); input_topics_ = get_parameter("input_topics").as_string_array(); if (input_topics_.empty()) { RCLCPP_ERROR(get_logger(), "Need a 'input_topics' parameter to be set before continuing!"); @@ -76,13 +76,13 @@ PointCloudDataSynchronizerComponent::PointCloudDataSynchronizerComponent( } // output topic name postfix synchronized_pointcloud_postfix = - declare_parameter("synchronized_pointcloud_postfix", "pointcloud"); + declare_parameter("synchronized_pointcloud_postfix"); // Optional parameters - maximum_queue_size_ = static_cast(declare_parameter("max_queue_size", 5)); - timeout_sec_ = static_cast(declare_parameter("timeout_sec", 0.1)); + maximum_queue_size_ = declare_parameter("max_queue_size"); + timeout_sec_ = declare_parameter("timeout_sec"); - input_offset_ = declare_parameter("input_offset", std::vector{}); + input_offset_ = declare_parameter>("input_offset"); // If input_offset_ is not defined, set all offsets to 0 if (input_offset_.empty()) { diff --git a/sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp index 8f7cb2abec6a4..a44eeea3879fc 100644 --- a/sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp @@ -39,8 +39,8 @@ Lanelet2MapFilterComponent::Lanelet2MapFilterComponent(const rclcpp::NodeOptions // Set parameters { - voxel_size_x_ = declare_parameter("voxel_size_x", 0.04); - voxel_size_y_ = declare_parameter("voxel_size_y", 0.04); + voxel_size_x_ = declare_parameter("voxel_size_x"); + voxel_size_y_ = declare_parameter("voxel_size_y"); } // Set publisher diff --git a/sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp b/sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp index def7652848642..c5828b9bd29f6 100644 --- a/sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp +++ b/sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp @@ -68,7 +68,7 @@ VectorMapInsideAreaFilterComponent::VectorMapInsideAreaFilterComponent( : Filter("VectorMapInsideAreaFilter", node_options) { polygon_type_ = - static_cast(declare_parameter("polygon_type", "no_obstacle_segmentation_area")); + declare_parameter("polygon_type"); using std::placeholders::_1; // Set subscriber @@ -77,8 +77,8 @@ VectorMapInsideAreaFilterComponent::VectorMapInsideAreaFilterComponent( std::bind(&VectorMapInsideAreaFilterComponent::mapCallback, this, _1)); // Set parameters - use_z_filter_ = declare_parameter("use_z_filter", false); - z_threshold_ = declare_parameter("z_threshold", 0.0f); // defined in the base_link frame + use_z_filter_ = declare_parameter("use_z_filter"); + z_threshold_ = declare_parameter("z_threshold"); // defined in the base_link frame } void VectorMapInsideAreaFilterComponent::filter( From ddcec1a9150fa7ca369a9f2d6b21692e0d7431c9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 10 Jun 2024 21:21:00 +0000 Subject: [PATCH 002/306] style(pre-commit): autofix Signed-off-by: Ariiees --- ...roximate_downsample_filter_param_file.yaml | 2 +- .../blockage_diagnostics_param_file.yaml | 4 - .../concatenate_and_time_sync_param_file.yaml | 2 +- .../concatenate_pointclouds_param_file.yaml | 2 +- .../config/crop_box_filter_param_file.yaml | 2 +- .../distortion_corrector_param_file.yaml | 2 +- ...dual_return_outlier_filter_param_file.yaml | 2 +- .../config/filter_param_file.yaml | 2 +- .../lanelet2_map_filter_param_file.yaml | 2 +- .../passthrough_filter_unit16_param_file.yaml | 2 +- ...xel_grid_downsample_filter_param_file.yaml | 2 +- .../pointcloud_accumulator_param_file.yaml | 2 +- ...s_search_2d_outlier_filter_param_file.yaml | 2 +- .../random_downsample_filter_param_file.yaml | 2 +- .../ring_outlier_filter_param_file.yaml | 2 +- .../config/time_synchronizer_param_file.yaml | 1 - ...tor_map_inside_area_filter_param_file.yaml | 2 +- ...xel_grid_downsample_filter_param_file.yaml | 2 +- .../launch/polygon_remover.launch.py | 2 +- .../launch/preprocessor.launch.py | 14 +- .../schema/blockage_diag.schema.json | 210 ++++++++------- .../dual_return_outlier_filter.schema.json | 246 +++++++++--------- .../schema/filter.schema.json | 118 +++++---- .../random_downsample_filter.schema.json | 64 ++--- .../ring_passthrough_filter.schema.json | 186 ++++++------- .../concatenate_and_time_sync_nodelet.cpp | 3 +- .../dual_return_outlier_filter_nodelet.cpp | 15 +- .../ring_outlier_filter_nodelet.cpp | 9 +- .../passthrough_filter_uint16_nodelet.cpp | 6 +- .../pointcloud_accumulator_nodelet.cpp | 3 +- .../vector_map_inside_area_filter.cpp | 3 +- 31 files changed, 469 insertions(+), 447 deletions(-) diff --git a/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml index 68fbb61647d21..4ff82bec2989e 100644 --- a/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml @@ -3,4 +3,4 @@ ## Paramters in approximate_downsample_filter_nodelet.cpp voxel_size_x: 0.3 voxel_size_y: 0.3 - voxel_size_z: 0.1 \ No newline at end of file + voxel_size_z: 0.1 diff --git a/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml b/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml index 589f7155132cd..13ddd8a7c7590 100644 --- a/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml @@ -14,7 +14,3 @@ max_distance_range: 200.0 horizontal_resolution: 0.4 blockage_kernel: 10 - - - - diff --git a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml index 47505eaf29580..ee2de6f4e6e30 100644 --- a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml @@ -9,4 +9,4 @@ input_offset: [] publish_synchronized_pointcloud: true keep_input_frame_in_synchronized_pointcloud: true - synchronized_pointcloud_postfix: pointcloud \ No newline at end of file + synchronized_pointcloud_postfix: pointcloud diff --git a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml index 6365ee1aafac7..bc95eedaf85d7 100644 --- a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml @@ -5,4 +5,4 @@ input_topics: [] max_queue_size: 5 timeout_sec: 0.033 - input_offset: [] \ No newline at end of file + input_offset: [] diff --git a/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml index 0a2bc74df9df0..24c3a677ba580 100644 --- a/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml @@ -7,4 +7,4 @@ max_x: 1.0 max_y: 1.0 max_z: 1.0 - negative: false \ No newline at end of file + negative: false diff --git a/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml b/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml index 6ac0af6304b2c..7d055c5bee45f 100644 --- a/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml @@ -2,4 +2,4 @@ ros__parameters: ## Paramters in distortion_corrector.cpp time_stamp_field_name: "time_stamp" - use_imu: true \ No newline at end of file + use_imu: true diff --git a/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml index 2527dc5f691d0..5454176d7f319 100644 --- a/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml @@ -16,4 +16,4 @@ weak_first_local_noise_threshold: 2 roi_mode: "Fixed_xyz_ROI" visibility_error_threshold: 0.5 - visibility_warn_threshold: 0.7 \ No newline at end of file + visibility_warn_threshold: 0.7 diff --git a/sensing/pointcloud_preprocessor/config/filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/filter_param_file.yaml index f4bfa91ea84aa..2d856406cb19b 100644 --- a/sensing/pointcloud_preprocessor/config/filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/filter_param_file.yaml @@ -6,4 +6,4 @@ max_queue_size: 5 use_indices: false latched_indices: false - approximate_sync: false \ No newline at end of file + approximate_sync: false diff --git a/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml index 295cd8db0df42..2aae4c5e886ea 100644 --- a/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml @@ -1,4 +1,4 @@ /**: ros__parameters: voxel_size_x: 0.04 - voxel_size_y: 0.04 \ No newline at end of file + voxel_size_y: 0.04 diff --git a/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml b/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml index 66caaa38edd95..86d0c02b2c1ae 100644 --- a/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml @@ -4,4 +4,4 @@ filter_limit_max: 127 filter_field_name: "ring" keep_organized: false - filter_limit_negative: false \ No newline at end of file + filter_limit_negative: false diff --git a/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml index 7ec5f72152905..3a996929e91ef 100644 --- a/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml @@ -2,4 +2,4 @@ ros__parameters: voxel_size_x: 1.0 voxel_size_y: 1.0 - voxel_size_z: 1.0 \ No newline at end of file + voxel_size_z: 1.0 diff --git a/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml b/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml index e38e27ecf133b..37ce94696db42 100644 --- a/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml @@ -1,4 +1,4 @@ /**: ros__parameters: accumulation_time_sec: 2.0 - pointcloud_buffer_size: 50 \ No newline at end of file + pointcloud_buffer_size: 50 diff --git a/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml index 15a00ea650a3e..8d2d32584c86d 100644 --- a/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml @@ -1,4 +1,4 @@ /**: ros__parameters: min_neighbors: 5 - search_radius: 0.2 \ No newline at end of file + search_radius: 0.2 diff --git a/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml index bb1799bf30691..53be849e0af22 100644 --- a/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml @@ -1,3 +1,3 @@ /**: ros__parameters: - sample_num: 1500 \ No newline at end of file + sample_num: 1500 diff --git a/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml index d93d616bdf77a..76bf68958f504 100644 --- a/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml @@ -11,4 +11,4 @@ max_distance: 12.0 vertical_bins: 128 horizontal_bins: 36 - noise_threshold: 2 \ No newline at end of file + noise_threshold: 2 diff --git a/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml b/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml index 5b94f626a4f48..f2e361e4b0258 100644 --- a/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml @@ -8,4 +8,3 @@ max_queue_size: 5 timeout_sec: 0.1 input_offset: [] - \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml index 40a5c96a9ca8f..0d260f8553333 100644 --- a/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml @@ -2,4 +2,4 @@ ros__parameters: polygon_type: "no_obstacle_segmentation_area" use_z_filter: false - z_threshold: 0.0f \ No newline at end of file + z_threshold: 0.0f diff --git a/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml index 6350d8541dc01..239e47f09632b 100644 --- a/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml @@ -2,4 +2,4 @@ ros__parameters: voxel_size_x: 0.3 voxel_size_y: 0.3 - voxel_size_z: 0.1 \ No newline at end of file + voxel_size_z: 0.1 diff --git a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py index 6ba7e3154ab55..fd92c77bd1c49 100644 --- a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py +++ b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py @@ -45,7 +45,7 @@ def generate_launch_description(): "polygon_vertices": polygon_remover_param["polygon_vertices"], "will_visualize": polygon_remover_param["will_visualize"], }, - shared_filter_file + shared_filter_file, ], ) diff --git a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py index a4cef7f75caf2..cc3cc58c45a66 100644 --- a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py +++ b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py @@ -12,6 +12,9 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os + +from ament_index_python.packages import get_package_share_directory import launch from launch.actions import DeclareLaunchArgument from launch.actions import LogInfo @@ -20,9 +23,7 @@ from launch.substitutions import PythonExpression from launch_ros.actions import ComposableNodeContainer from launch_ros.descriptions import ComposableNode -import os import yaml -from ament_index_python.packages import get_package_share_directory def launch_setup(context, *args, **kwargs): @@ -40,7 +41,6 @@ def launch_setup(context, *args, **kwargs): get_package_share_directory("pointcloud_preprocessor"), "config/filter_param_file.yaml" ) - if not is_separate_concatenate_node_and_time_sync_node: sync_and_concat_component = ComposableNode( package=pkg, @@ -58,7 +58,7 @@ def launch_setup(context, *args, **kwargs): "publish_synchronized_pointcloud": False, "input_twist_topic_type": "twist", }, - shared_filter_file + shared_filter_file, ], ) concat_components = [sync_and_concat_component] @@ -77,7 +77,7 @@ def launch_setup(context, *args, **kwargs): "output_frame": LaunchConfiguration("tf_output_frame"), "approximate_sync": True, }, - shared_filter_file + shared_filter_file, ], ) @@ -92,7 +92,7 @@ def launch_setup(context, *args, **kwargs): "output_frame": LaunchConfiguration("tf_output_frame"), "approximate_sync": True, }, - shared_filter_file + shared_filter_file, ], ) concat_components = [time_sync_component, concat_component] @@ -129,7 +129,7 @@ def launch_setup(context, *args, **kwargs): "max_z": 3.0, "negative": False, }, - shared_filter_file + shared_filter_file, ], ) diff --git a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json index 789155d175104..fb931ff09b01d 100644 --- a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json +++ b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json @@ -1,103 +1,113 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "blockage_diag", - "type": "object", - "definitions": { - "blockage_diag": { - "type": "object", - "properties": { - "blockage_ratio_threshold": { - "type": "number", - "description": "blockage ration threshold", - "default": "0.1" - }, - "blockage_count_threshold": { - "type": "number", - "description": "blockage count threshold", - "default": "50" - }, - "blockage_buffering_frames": { - "type": "number", - "description": "blockage buffering frames", - "default": "2" - }, - "blockage_buffering_interval": { - "type": "number", - "description": "blockage buffering interval", - "default": "1" - }, - "enable_dust_diag": { - "type": "boolean", - "description": "enable dust diag", - "default": "false" - }, - "publish_debug_image": { - "type": "boolean", - "description": "eanble debug", - "default": "false" - }, - "dust_ratio_threshold": { - "type": "number", - "description": "dust ration threshold", - "default": "0.2" - }, - "dust_count_threshold": { - "type": "number", - "description": "dust count threshold", - "default": "10" - }, - "dust_kernel_size": { - "type": "number", - "description": "dust kernel size", - "default": "2" - }, - "dust_buffering_frames": { - "type": "number", - "description": "dust buffering frames", - "default": "10" - }, - "dust_buffering_interval": { - "type": "number", - "description": "dust buffering interval", - "default": "1" - }, - "max_distance_range": { - "type": "number", - "description": "max distance range", - "default": "200.0" - }, - "horizontal_resolution": { - "type": "number", - "description": "horizontal resolution", - "default": "INSERT_DEFAULT" - }, - "blockage_kernel": { - "type": "number", - "description": "blockage kernel", - "default": "10" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "blockage_diag", + "type": "object", + "definitions": { + "blockage_diag": { + "type": "object", + "properties": { + "blockage_ratio_threshold": { + "type": "number", + "description": "blockage ration threshold", + "default": "0.1" }, - "required": ["blockage_ratio_threshold", "blockage_count_threshold", - "blockage_buffering_frames", "blockage_buffering_interval", - "enable_dust_diag", "publish_debug_image", "dust_ratio_threshold", - "dust_count_threshold", "dust_kernel_size", "dust_buffering_frames", - "dust_buffering_interval", "max_distance_range", - "horizontal_resolution", "blockage_kernel"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/blockage_diag" - } + "blockage_count_threshold": { + "type": "number", + "description": "blockage count threshold", + "default": "50" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } \ No newline at end of file + "blockage_buffering_frames": { + "type": "number", + "description": "blockage buffering frames", + "default": "2" + }, + "blockage_buffering_interval": { + "type": "number", + "description": "blockage buffering interval", + "default": "1" + }, + "enable_dust_diag": { + "type": "boolean", + "description": "enable dust diag", + "default": "false" + }, + "publish_debug_image": { + "type": "boolean", + "description": "eanble debug", + "default": "false" + }, + "dust_ratio_threshold": { + "type": "number", + "description": "dust ration threshold", + "default": "0.2" + }, + "dust_count_threshold": { + "type": "number", + "description": "dust count threshold", + "default": "10" + }, + "dust_kernel_size": { + "type": "number", + "description": "dust kernel size", + "default": "2" + }, + "dust_buffering_frames": { + "type": "number", + "description": "dust buffering frames", + "default": "10" + }, + "dust_buffering_interval": { + "type": "number", + "description": "dust buffering interval", + "default": "1" + }, + "max_distance_range": { + "type": "number", + "description": "max distance range", + "default": "200.0" + }, + "horizontal_resolution": { + "type": "number", + "description": "horizontal resolution", + "default": "INSERT_DEFAULT" + }, + "blockage_kernel": { + "type": "number", + "description": "blockage kernel", + "default": "10" + } + }, + "required": [ + "blockage_ratio_threshold", + "blockage_count_threshold", + "blockage_buffering_frames", + "blockage_buffering_interval", + "enable_dust_diag", + "publish_debug_image", + "dust_ratio_threshold", + "dust_count_threshold", + "dust_kernel_size", + "dust_buffering_frames", + "dust_buffering_interval", + "max_distance_range", + "horizontal_resolution", + "blockage_kernel" + ], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/blockage_diag" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json index 8e94d8662eb93..3baab9fd0123b 100644 --- a/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json @@ -1,117 +1,131 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "dual_return_outlier_filter", - "type": "object", - "definitions": { - "dual_return_outlier_filter": { - "type": "object", - "properties": { - "x_max": { - "type": "number", - "description": "max distance on x", - "default": "18.0" - }, - "x_min": { - "type": "number", - "description": "min distance on x", - "default": "-12.0" - }, - "y_max": { - "type": "number", - "description": "max distance on y", - "default": "2.0" - }, - "y_min": { - "type": "number", - "description": "min distance on y", - "default": "-2.0" - }, - "z_max": { - "type": "number", - "description": "max distance on z", - "default": "10.0" - }, - "z_min": { - "type": "number", - "description": "min distance on z", - "default": "0.0" - }, - "min_azimuth_deg": { - "type": "number", - "description": "minium azimuth degree", - "default": "135.0" - }, - "max_azimuth_deg": { - "type": "number", - "description": "maximum azimuth degree", - "default": "225.0" - }, - "max_distance": { - "type": "number", - "description": "maximum distance", - "default": "12.0" - }, - "vertical_bins": { - "type": "number", - "description": "vertical bins", - "default": "128" - }, - "max_azimuth_diff": { - "type": "number", - "description": "max azimuth diff", - "default": "50" - }, - "weak_first_distance_ratio": { - "type": "number", - "description": "weak first distance ratio", - "default": "1.004" - }, - "general_distance_ratio": { - "type": "number", - "description": "general distance ratio", - "default": "1.03" - }, - "weak_first_local_noise_threshold": { - "type": "number", - "description": "weak first local noise threshold", - "default": "2" - }, - "roi_mode": { - "type": "string", - "description": "roi mode", - "default": "Fixed_xyz_ROI" - }, - "visibility_error_threshold": { - "type": "number", - "description": "visibility error threshold", - "default": "0.5" - }, - "visibility_warn_threshold": { - "type": "number", - "description": "visibility warn threshold", - "default": "0.7" - } - }, - "required": ["x_max", "x_min", "y_max", "y_min", "z_max", - "z_min", "min_azimuth_deg", "max_azimuth_deg", "max_distance", - "vertical_bins", "max_azimuth_diff", "weak_first_distance_ratio", - "general_distance_ratio", "weak_first_local_noise_threshold", - "roi_mode", "visibility_error_threshold", "visibility_warn_threshold"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/dual_return_outlier_filter" - } - }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } \ No newline at end of file + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "dual_return_outlier_filter", + "type": "object", + "definitions": { + "dual_return_outlier_filter": { + "type": "object", + "properties": { + "x_max": { + "type": "number", + "description": "max distance on x", + "default": "18.0" + }, + "x_min": { + "type": "number", + "description": "min distance on x", + "default": "-12.0" + }, + "y_max": { + "type": "number", + "description": "max distance on y", + "default": "2.0" + }, + "y_min": { + "type": "number", + "description": "min distance on y", + "default": "-2.0" + }, + "z_max": { + "type": "number", + "description": "max distance on z", + "default": "10.0" + }, + "z_min": { + "type": "number", + "description": "min distance on z", + "default": "0.0" + }, + "min_azimuth_deg": { + "type": "number", + "description": "minium azimuth degree", + "default": "135.0" + }, + "max_azimuth_deg": { + "type": "number", + "description": "maximum azimuth degree", + "default": "225.0" + }, + "max_distance": { + "type": "number", + "description": "maximum distance", + "default": "12.0" + }, + "vertical_bins": { + "type": "number", + "description": "vertical bins", + "default": "128" + }, + "max_azimuth_diff": { + "type": "number", + "description": "max azimuth diff", + "default": "50" + }, + "weak_first_distance_ratio": { + "type": "number", + "description": "weak first distance ratio", + "default": "1.004" + }, + "general_distance_ratio": { + "type": "number", + "description": "general distance ratio", + "default": "1.03" + }, + "weak_first_local_noise_threshold": { + "type": "number", + "description": "weak first local noise threshold", + "default": "2" + }, + "roi_mode": { + "type": "string", + "description": "roi mode", + "default": "Fixed_xyz_ROI" + }, + "visibility_error_threshold": { + "type": "number", + "description": "visibility error threshold", + "default": "0.5" + }, + "visibility_warn_threshold": { + "type": "number", + "description": "visibility warn threshold", + "default": "0.7" + } + }, + "required": [ + "x_max", + "x_min", + "y_max", + "y_min", + "z_max", + "z_min", + "min_azimuth_deg", + "max_azimuth_deg", + "max_distance", + "vertical_bins", + "max_azimuth_diff", + "weak_first_distance_ratio", + "general_distance_ratio", + "weak_first_local_noise_threshold", + "roi_mode", + "visibility_error_threshold", + "visibility_warn_threshold" + ], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/dual_return_outlier_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/filter.schema.json b/sensing/pointcloud_preprocessor/schema/filter.schema.json index 267b1735cf439..af794a0f27231 100644 --- a/sensing/pointcloud_preprocessor/schema/filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/filter.schema.json @@ -1,59 +1,65 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "filter", - "type": "object", - "definitions": { - "filter": { - "type": "object", - "properties": { - "input_frame": { - "type": "string", - "description": "input frame", - "default": "" - }, - "output_frame": { - "type": "string", - "description": "output frame", - "default": "" - }, - "max_queue_size": { - "type": "number", - "description": "max queue size of input", - "default": 5 - }, - "use_indices": { - "type": "boolean", - "description": "flag to use pointcloud", - "default": false - }, - "latched_indices": { - "type": "boolean", - "description": "flag to latch pointcloud", - "default": false - }, - "approximate_sync": { - "type": "boolean", - "description": "flag to use approximate sync", - "default": false - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "filter", + "type": "object", + "definitions": { + "filter": { + "type": "object", + "properties": { + "input_frame": { + "type": "string", + "description": "input frame", + "default": "" }, - "required": ["input_frame", "output_frame", "max_queue_size", - "use_indices", "latched_indices", "approximate_sync"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/filter" - } + "output_frame": { + "type": "string", + "description": "output frame", + "default": "" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } \ No newline at end of file + "max_queue_size": { + "type": "number", + "description": "max queue size of input", + "default": 5 + }, + "use_indices": { + "type": "boolean", + "description": "flag to use pointcloud", + "default": false + }, + "latched_indices": { + "type": "boolean", + "description": "flag to latch pointcloud", + "default": false + }, + "approximate_sync": { + "type": "boolean", + "description": "flag to use approximate sync", + "default": false + } + }, + "required": [ + "input_frame", + "output_frame", + "max_queue_size", + "use_indices", + "latched_indices", + "approximate_sync" + ], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json index 703e77a61d436..7fe756ff35721 100644 --- a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json @@ -1,33 +1,33 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "random_downsample_filter", - "type": "object", - "definitions": { - "random_downsample_filter": { - "type": "object", - "properties": { - "sample_num": { - "type": "number", - "description": "sample numbers", - "default": "1500" - } - }, - "required": ["sample_num"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/random_downsample_filter" - } - }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } \ No newline at end of file + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "random_downsample_filter", + "type": "object", + "definitions": { + "random_downsample_filter": { + "type": "object", + "properties": { + "sample_num": { + "type": "number", + "description": "sample numbers", + "default": "1500" + } + }, + "required": ["sample_num"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/random_downsample_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json b/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json index 1d657a3be3c9e..79aead4283818 100644 --- a/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json @@ -1,91 +1,101 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ring_outlier_filter", - "type": "object", - "definitions": { - "ring_outlier_filter": { - "type": "object", - "properties": { - "distance_ratio": { - "type": "number", - "description": "distance ratio", - "default": "1.03" - }, - "object_length_threshold": { - "type": "number", - "description": "object length threshold", - "default": "0.1" - }, - "num_points_threshold": { - "type": "number", - "description": "number points threshold", - "default": "4" - }, - "max_rings_num": { - "type": "number", - "description": "max rings number", - "default": "128" - }, - "max_points_num_per_ring": { - "type": "number", - "description": "maximum points number per ring", - "default": "4000" - }, - "publish_outlier_pointcloud": { - "type": "boolean", - "description": "enable publish outlier pointcloud", - "default": "false" - }, - "min_azimuth_deg": { - "type": "number", - "description": "minimu azimuth degree", - "default": "0.0" - }, - "max_azimuth_deg": { - "type": "number", - "description": "maximum azimuth degree", - "default": "360.0" - }, - "max_distance": { - "type": "number", - "description": "maximum distance", - "default": "12.0" - }, - "vertical_bins": { - "type": "number", - "description": "vertical bins", - "default": "128" - }, - "horizontal_bins": { - "type": "number", - "description": "horizontal bins", - "default": "36" - }, - "noise_threshold": { - "type": "number", - "description": "noise threshold", - "default": "2" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ring_outlier_filter", + "type": "object", + "definitions": { + "ring_outlier_filter": { + "type": "object", + "properties": { + "distance_ratio": { + "type": "number", + "description": "distance ratio", + "default": "1.03" }, - "required": ["distance_ratio", "object_length_threshold", - "num_points_threshold", "max_rings_num", "max_points_num_per_ring", - "publish_outlier_pointcloud", "min_azimuth_deg", "max_azimuth_deg", - "max_distance", "vertical_bins", "horizontal_bins", "noise_threshold"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/ring_outlier_filter" - } + "object_length_threshold": { + "type": "number", + "description": "object length threshold", + "default": "0.1" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } \ No newline at end of file + "num_points_threshold": { + "type": "number", + "description": "number points threshold", + "default": "4" + }, + "max_rings_num": { + "type": "number", + "description": "max rings number", + "default": "128" + }, + "max_points_num_per_ring": { + "type": "number", + "description": "maximum points number per ring", + "default": "4000" + }, + "publish_outlier_pointcloud": { + "type": "boolean", + "description": "enable publish outlier pointcloud", + "default": "false" + }, + "min_azimuth_deg": { + "type": "number", + "description": "minimu azimuth degree", + "default": "0.0" + }, + "max_azimuth_deg": { + "type": "number", + "description": "maximum azimuth degree", + "default": "360.0" + }, + "max_distance": { + "type": "number", + "description": "maximum distance", + "default": "12.0" + }, + "vertical_bins": { + "type": "number", + "description": "vertical bins", + "default": "128" + }, + "horizontal_bins": { + "type": "number", + "description": "horizontal bins", + "default": "36" + }, + "noise_threshold": { + "type": "number", + "description": "noise threshold", + "default": "2" + } + }, + "required": [ + "distance_ratio", + "object_length_threshold", + "num_points_threshold", + "max_rings_num", + "max_points_num_per_ring", + "publish_outlier_pointcloud", + "min_azimuth_deg", + "max_azimuth_deg", + "max_distance", + "vertical_bins", + "horizontal_bins", + "noise_threshold" + ], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/ring_outlier_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index ab431d2f5e61e..b022871a2d9ba 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -115,8 +115,7 @@ PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchro publish_synchronized_pointcloud_ = declare_parameter("publish_synchronized_pointcloud"); keep_input_frame_in_synchronized_pointcloud_ = declare_parameter("keep_input_frame_in_synchronized_pointcloud"); - synchronized_pointcloud_postfix_ = - declare_parameter("synchronized_pointcloud_postfix"); + synchronized_pointcloud_postfix_ = declare_parameter("synchronized_pointcloud_postfix"); } // Initialize not_subscribed_topic_names_ diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp index 6a03206cb7afa..d17abafcde4ed 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp @@ -49,18 +49,13 @@ DualReturnOutlierFilterComponent::DualReturnOutlierFilterComponent( max_distance_ = declare_parameter("max_distance"); vertical_bins_ = declare_parameter("vertical_bins"); max_azimuth_diff_ = declare_parameter("max_azimuth_diff"); - weak_first_distance_ratio_ = - declare_parameter("weak_first_distance_ratio"); - general_distance_ratio_ = - declare_parameter("general_distance_ratio"); + weak_first_distance_ratio_ = declare_parameter("weak_first_distance_ratio"); + general_distance_ratio_ = declare_parameter("general_distance_ratio"); - weak_first_local_noise_threshold_ = - declare_parameter("weak_first_local_noise_threshold"); + weak_first_local_noise_threshold_ = declare_parameter("weak_first_local_noise_threshold"); roi_mode_ = declare_parameter("roi_mode"); - visibility_error_threshold_ = - declare_parameter("visibility_error_threshold"); - visibility_warn_threshold_ = - declare_parameter("visibility_warn_threshold"); + visibility_error_threshold_ = declare_parameter("visibility_error_threshold"); + visibility_warn_threshold_ = declare_parameter("visibility_warn_threshold"); } updater_.setHardwareID("dual_return_outlier_filter"); updater_.add( diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp index c49b4320ad95c..4e204927d7d49 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp @@ -44,14 +44,11 @@ RingOutlierFilterComponent::RingOutlierFilterComponent(const rclcpp::NodeOptions // set initial parameters { distance_ratio_ = declare_parameter("distance_ratio"); - object_length_threshold_ = - declare_parameter("object_length_threshold"); + object_length_threshold_ = declare_parameter("object_length_threshold"); num_points_threshold_ = declare_parameter("num_points_threshold"); max_rings_num_ = declare_parameter("max_rings_num"); - max_points_num_per_ring_ = - declare_parameter("max_points_num_per_ring"); - publish_outlier_pointcloud_ = - declare_parameter("publish_outlier_pointcloud"); + max_points_num_per_ring_ = declare_parameter("max_points_num_per_ring"); + publish_outlier_pointcloud_ = declare_parameter("publish_outlier_pointcloud"); min_azimuth_deg_ = declare_parameter("min_azimuth_deg"); max_azimuth_deg_ = declare_parameter("max_azimuth_deg"); diff --git a/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp b/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp index 0a68dfad4f230..cd81a17198e18 100644 --- a/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp @@ -33,11 +33,9 @@ PassThroughFilterUInt16Component::PassThroughFilterUInt16Component( int filter_max = declare_parameter("filter_limit_max"); impl_.setFilterLimits(filter_min, filter_max); - impl_.setFilterFieldName( - declare_parameter("filter_field_name")); + impl_.setFilterFieldName(declare_parameter("filter_field_name")); impl_.setKeepOrganized(declare_parameter("keep_organized")); - impl_.setFilterLimitsNegative( - declare_parameter("filter_limit_negative")); + impl_.setFilterLimitsNegative(declare_parameter("filter_limit_negative")); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp index a9c93fdfb9921..730fdb3fb6ccd 100644 --- a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp @@ -24,8 +24,7 @@ PointcloudAccumulatorComponent::PointcloudAccumulatorComponent(const rclcpp::Nod // set initial parameters { accumulation_time_sec_ = declare_parameter("accumulation_time_sec"); - pointcloud_buffer_.set_capacity( - declare_parameter("pointcloud_buffer_size")); + pointcloud_buffer_.set_capacity(declare_parameter("pointcloud_buffer_size")); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp b/sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp index c5828b9bd29f6..b1270e64c5bb2 100644 --- a/sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp +++ b/sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp @@ -67,8 +67,7 @@ VectorMapInsideAreaFilterComponent::VectorMapInsideAreaFilterComponent( const rclcpp::NodeOptions & node_options) : Filter("VectorMapInsideAreaFilter", node_options) { - polygon_type_ = - declare_parameter("polygon_type"); + polygon_type_ = declare_parameter("polygon_type"); using std::placeholders::_1; // Set subscriber From e3454f05fc30e3552d6b00fda48b8b509f05b8ee Mon Sep 17 00:00:00 2001 From: Yuxin Wang <87698138+Ariiees@users.noreply.github.com> Date: Tue, 11 Jun 2024 09:30:42 -0400 Subject: [PATCH 003/306] Update concatenate_and_time_sync_param_file.yaml solve string problem Signed-off-by: Ariiees --- .../config/concatenate_and_time_sync_param_file.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml index ee2de6f4e6e30..084fb8f38448c 100644 --- a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml @@ -1,7 +1,7 @@ /**: ros__parameters: ## Paramters in concatenate_and_time_sync_nodelet.cpp - input_twist_topic_type: twist + input_twist_topic_type: "twist" output_frame: "" input_topics: [] max_queue_size: 5 @@ -9,4 +9,4 @@ input_offset: [] publish_synchronized_pointcloud: true keep_input_frame_in_synchronized_pointcloud: true - synchronized_pointcloud_postfix: pointcloud + synchronized_pointcloud_postfix: "pointcloud" From ccb12c8fabf174605276ef28b4f846f6f0e75e04 Mon Sep 17 00:00:00 2001 From: Yuxin Wang <87698138+Ariiees@users.noreply.github.com> Date: Tue, 11 Jun 2024 09:33:25 -0400 Subject: [PATCH 004/306] Update preprocessor.launch.py Signed-off-by: Ariiees --- .../pointcloud_preprocessor/launch/preprocessor.launch.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py index cc3cc58c45a66..6dd9a5f9d7233 100644 --- a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py +++ b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py @@ -58,7 +58,7 @@ def launch_setup(context, *args, **kwargs): "publish_synchronized_pointcloud": False, "input_twist_topic_type": "twist", }, - shared_filter_file, + shared_filter_file ], ) concat_components = [sync_and_concat_component] @@ -77,7 +77,7 @@ def launch_setup(context, *args, **kwargs): "output_frame": LaunchConfiguration("tf_output_frame"), "approximate_sync": True, }, - shared_filter_file, + shared_filter_file ], ) @@ -92,7 +92,7 @@ def launch_setup(context, *args, **kwargs): "output_frame": LaunchConfiguration("tf_output_frame"), "approximate_sync": True, }, - shared_filter_file, + shared_filter_file ], ) concat_components = [time_sync_component, concat_component] @@ -129,7 +129,7 @@ def launch_setup(context, *args, **kwargs): "max_z": 3.0, "negative": False, }, - shared_filter_file, + shared_filter_file ], ) From 367c969a2f060ade4fbe835da18070e7fcee23dd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:35:40 +0000 Subject: [PATCH 005/306] style(pre-commit): autofix Signed-off-by: Ariiees --- .../pointcloud_preprocessor/launch/preprocessor.launch.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py index 6dd9a5f9d7233..cc3cc58c45a66 100644 --- a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py +++ b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py @@ -58,7 +58,7 @@ def launch_setup(context, *args, **kwargs): "publish_synchronized_pointcloud": False, "input_twist_topic_type": "twist", }, - shared_filter_file + shared_filter_file, ], ) concat_components = [sync_and_concat_component] @@ -77,7 +77,7 @@ def launch_setup(context, *args, **kwargs): "output_frame": LaunchConfiguration("tf_output_frame"), "approximate_sync": True, }, - shared_filter_file + shared_filter_file, ], ) @@ -92,7 +92,7 @@ def launch_setup(context, *args, **kwargs): "output_frame": LaunchConfiguration("tf_output_frame"), "approximate_sync": True, }, - shared_filter_file + shared_filter_file, ], ) concat_components = [time_sync_component, concat_component] @@ -129,7 +129,7 @@ def launch_setup(context, *args, **kwargs): "max_z": 3.0, "negative": False, }, - shared_filter_file + shared_filter_file, ], ) From b5f44b1514c2f2b3e3b2d95f8d34fb06c441aca7 Mon Sep 17 00:00:00 2001 From: Ariiees Date: Fri, 14 Jun 2024 22:36:14 -0400 Subject: [PATCH 006/306] update two .launch.py file to sovle the launch error (add paramter dict update) Signed-off-by: Ariiees --- .../concatenate_and_time_sync_param_file.yaml | 4 +- .../concatenate_pointclouds_param_file.yaml | 4 +- .../config/time_synchronizer_param_file.yaml | 4 +- .../launch/polygon_remover.launch.py | 25 +++--- .../launch/preprocessor.launch.py | 87 +++++++++++-------- 5 files changed, 70 insertions(+), 54 deletions(-) diff --git a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml index 084fb8f38448c..f347021aa0f65 100644 --- a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml @@ -3,10 +3,10 @@ ## Paramters in concatenate_and_time_sync_nodelet.cpp input_twist_topic_type: "twist" output_frame: "" - input_topics: [] + input_topics: [""] max_queue_size: 5 timeout_sec: 0.1 - input_offset: [] + input_offset: {} publish_synchronized_pointcloud: true keep_input_frame_in_synchronized_pointcloud: true synchronized_pointcloud_postfix: "pointcloud" diff --git a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml index bc95eedaf85d7..944fae4f9a734 100644 --- a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml @@ -2,7 +2,7 @@ ros__parameters: ## Paramters in concatenate_pointclouds.cpp output_frame: "" - input_topics: [] + input_topics: [""] max_queue_size: 5 timeout_sec: 0.033 - input_offset: [] + input_offset: {} diff --git a/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml b/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml index f2e361e4b0258..4b3f296738020 100644 --- a/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml @@ -3,8 +3,8 @@ input_twist_topic_type: "twist" output_frame: "" keep_input_frame_in_synchronized_pointcloud: false - input_topics: [] + input_topics: [""] synchronized_pointcloud_postfix: "pointcloud" max_queue_size: 5 timeout_sec: 0.1 - input_offset: [] + input_offset: {} diff --git a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py index fd92c77bd1c49..534976510f87d 100644 --- a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py +++ b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py @@ -20,32 +20,31 @@ from launch_ros.descriptions import ComposableNode import yaml +def load_parameter_dic(share_direc_path, yaml_path): + param_file = os.path.join( + get_package_share_directory(share_direc_path), yaml_path) + + with open(param_file, "r") as f: + param_dic = yaml.safe_load(f)["/**"]["ros__parameters"] + + return param_dic def generate_launch_description(): ns = "pointcloud_preprocessor" pkg = "pointcloud_preprocessor" - param_file = os.path.join( - get_package_share_directory("autoware_vehicle_info_utils"), "config/polygon_remover.yaml" - ) + polygon_remover_param = load_parameter_dic("autoware_vehicle_info_utils", "config/polygon_remover.yaml") - shared_filter_file = os.path.join( - get_package_share_directory("pointcloude_preprocessor"), "config/filter_param_file.yaml" - ) + param = load_parameter_dic("pointcloud_preprocessor", "config/filter_param_file.yaml") - with open(param_file, "r") as f: - polygon_remover_param = yaml.safe_load(f)["/**"]["ros__parameters"] + param.update(polygon_remover_param) my_component = ComposableNode( package=pkg, plugin="pointcloud_preprocessor::PolygonRemoverComponent", name="polygon_remover", parameters=[ - { - "polygon_vertices": polygon_remover_param["polygon_vertices"], - "will_visualize": polygon_remover_param["will_visualize"], - }, - shared_filter_file, + param ], ) diff --git a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py index cc3cc58c45a66..1f5b498d77546 100644 --- a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py +++ b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py @@ -25,6 +25,14 @@ from launch_ros.descriptions import ComposableNode import yaml +def load_parameter_dic(share_direc_path, yaml_path): + param_file = os.path.join( + get_package_share_directory(share_direc_path), yaml_path) + + with open(param_file, "r") as f: + param_dic = yaml.safe_load(f)["/**"]["ros__parameters"] + + return param_dic def launch_setup(context, *args, **kwargs): ns = "pointcloud_preprocessor" @@ -37,9 +45,46 @@ def launch_setup(context, *args, **kwargs): separate_concatenate_node_and_time_sync_node.lower() == "true" ) - shared_filter_file = os.path.join( - get_package_share_directory("pointcloud_preprocessor"), "config/filter_param_file.yaml" - ) + ## ---------------------- Set up Example parameters --------------------------- + ## you could modify thie part and change the parameter directly in .yaml file. + filter_param = load_parameter_dic("pointcloud_preprocessor", "config/filter_param_file.yaml") + + sync_and_concat_param = load_parameter_dic("pointcloud_preprocessor", "config/concatenate_and_time_sync_param_file.yaml") + + time_sync_param = load_parameter_dic("pointcloud_preprocessor", "config/time_synchronizer_param_file.yaml") + + concat_param = load_parameter_dic("pointcloud_preprocessor", "config/concatenate_pointclouds_param_file.yaml") + + crop_box_param = load_parameter_dic("pointcloud_preprocessor", "config/crop_box_filter_param_file.yaml") + + sync_and_concat_updated_param = {"input_topics": LaunchConfiguration("input_points_raw_list"), + "output_frame": LaunchConfiguration("tf_output_frame"), + "approximate_sync": True, + "publish_synchronized_pointcloud": False} + updated_param = {"input_topics": LaunchConfiguration("input_points_raw_list"), + "output_frame": LaunchConfiguration("tf_output_frame"), + "approximate_sync": True} + crop_box_updated_param = {"input_frame": LaunchConfiguration("tf_output_frame"), + "output_frame": LaunchConfiguration("tf_output_frame"), + "min_x": -200.0, + "max_x": 1000.0, + "min_y": -50.0, + "max_y": 50.0, + "min_z": -2.0, + "max_z": 3.0, + "negative": False} + + sync_and_concat_updated = {**filter_param, **sync_and_concat_param} + sync_and_concat_updated.update(sync_and_concat_updated_param) + + time_sync_param.update(updated_param) + + concat_param_updated = {**filter_param, **concat_param} + concat_param_updated.update(updated_param) + + crop_box_updated = {**filter_param, **crop_box_param} + crop_box_updated.update(crop_box_updated_param) + ## ---------------------- -------------------------- --------------------------- if not is_separate_concatenate_node_and_time_sync_node: sync_and_concat_component = ComposableNode( @@ -51,14 +96,7 @@ def launch_setup(context, *args, **kwargs): ("output", "points_raw/concatenated"), ], parameters=[ - { - "input_topics": LaunchConfiguration("input_points_raw_list"), - "output_frame": LaunchConfiguration("tf_output_frame"), - "approximate_sync": True, - "publish_synchronized_pointcloud": False, - "input_twist_topic_type": "twist", - }, - shared_filter_file, + sync_and_concat_updated ], ) concat_components = [sync_and_concat_component] @@ -72,12 +110,7 @@ def launch_setup(context, *args, **kwargs): ("output", "points_raw/concatenated"), ], parameters=[ - { - "input_topics": LaunchConfiguration("input_points_raw_list"), - "output_frame": LaunchConfiguration("tf_output_frame"), - "approximate_sync": True, - }, - shared_filter_file, + time_sync_param ], ) @@ -87,12 +120,7 @@ def launch_setup(context, *args, **kwargs): name="concatenate_filter", remappings=[("output", "points_raw/concatenated")], parameters=[ - { - "input_topics": LaunchConfiguration("input_points_raw_list"), - "output_frame": LaunchConfiguration("tf_output_frame"), - "approximate_sync": True, - }, - shared_filter_file, + concat_param_updated ], ) concat_components = [time_sync_component, concat_component] @@ -118,18 +146,7 @@ def launch_setup(context, *args, **kwargs): ("output", LaunchConfiguration("output_points_raw")), ], parameters=[ - { - "input_frame": LaunchConfiguration("tf_output_frame"), - "output_frame": LaunchConfiguration("tf_output_frame"), - "min_x": -200.0, - "max_x": 1000.0, - "min_y": -50.0, - "max_y": 50.0, - "min_z": -2.0, - "max_z": 3.0, - "negative": False, - }, - shared_filter_file, + crop_box_updated ], ) From c7fdcd322ffd9af46eb0a666ed04bd8582d826e3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 15 Jun 2024 02:38:43 +0000 Subject: [PATCH 007/306] style(pre-commit): autofix Signed-off-by: Ariiees --- .../launch/polygon_remover.launch.py | 13 ++-- .../launch/preprocessor.launch.py | 77 ++++++++++--------- 2 files changed, 49 insertions(+), 41 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py index 534976510f87d..e286ed74ba1ed 100644 --- a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py +++ b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py @@ -20,20 +20,23 @@ from launch_ros.descriptions import ComposableNode import yaml + def load_parameter_dic(share_direc_path, yaml_path): - param_file = os.path.join( - get_package_share_directory(share_direc_path), yaml_path) + param_file = os.path.join(get_package_share_directory(share_direc_path), yaml_path) with open(param_file, "r") as f: param_dic = yaml.safe_load(f)["/**"]["ros__parameters"] return param_dic + def generate_launch_description(): ns = "pointcloud_preprocessor" pkg = "pointcloud_preprocessor" - polygon_remover_param = load_parameter_dic("autoware_vehicle_info_utils", "config/polygon_remover.yaml") + polygon_remover_param = load_parameter_dic( + "autoware_vehicle_info_utils", "config/polygon_remover.yaml" + ) param = load_parameter_dic("pointcloud_preprocessor", "config/filter_param_file.yaml") @@ -43,9 +46,7 @@ def generate_launch_description(): package=pkg, plugin="pointcloud_preprocessor::PolygonRemoverComponent", name="polygon_remover", - parameters=[ - param - ], + parameters=[param], ) # set container to run all required components in the same process diff --git a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py index 1f5b498d77546..75c1108174fb3 100644 --- a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py +++ b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py @@ -25,15 +25,16 @@ from launch_ros.descriptions import ComposableNode import yaml + def load_parameter_dic(share_direc_path, yaml_path): - param_file = os.path.join( - get_package_share_directory(share_direc_path), yaml_path) + param_file = os.path.join(get_package_share_directory(share_direc_path), yaml_path) with open(param_file, "r") as f: param_dic = yaml.safe_load(f)["/**"]["ros__parameters"] return param_dic + def launch_setup(context, *args, **kwargs): ns = "pointcloud_preprocessor" pkg = "pointcloud_preprocessor" @@ -49,30 +50,44 @@ def launch_setup(context, *args, **kwargs): ## you could modify thie part and change the parameter directly in .yaml file. filter_param = load_parameter_dic("pointcloud_preprocessor", "config/filter_param_file.yaml") - sync_and_concat_param = load_parameter_dic("pointcloud_preprocessor", "config/concatenate_and_time_sync_param_file.yaml") + sync_and_concat_param = load_parameter_dic( + "pointcloud_preprocessor", "config/concatenate_and_time_sync_param_file.yaml" + ) - time_sync_param = load_parameter_dic("pointcloud_preprocessor", "config/time_synchronizer_param_file.yaml") + time_sync_param = load_parameter_dic( + "pointcloud_preprocessor", "config/time_synchronizer_param_file.yaml" + ) - concat_param = load_parameter_dic("pointcloud_preprocessor", "config/concatenate_pointclouds_param_file.yaml") + concat_param = load_parameter_dic( + "pointcloud_preprocessor", "config/concatenate_pointclouds_param_file.yaml" + ) - crop_box_param = load_parameter_dic("pointcloud_preprocessor", "config/crop_box_filter_param_file.yaml") + crop_box_param = load_parameter_dic( + "pointcloud_preprocessor", "config/crop_box_filter_param_file.yaml" + ) - sync_and_concat_updated_param = {"input_topics": LaunchConfiguration("input_points_raw_list"), - "output_frame": LaunchConfiguration("tf_output_frame"), - "approximate_sync": True, - "publish_synchronized_pointcloud": False} - updated_param = {"input_topics": LaunchConfiguration("input_points_raw_list"), - "output_frame": LaunchConfiguration("tf_output_frame"), - "approximate_sync": True} - crop_box_updated_param = {"input_frame": LaunchConfiguration("tf_output_frame"), - "output_frame": LaunchConfiguration("tf_output_frame"), - "min_x": -200.0, - "max_x": 1000.0, - "min_y": -50.0, - "max_y": 50.0, - "min_z": -2.0, - "max_z": 3.0, - "negative": False} + sync_and_concat_updated_param = { + "input_topics": LaunchConfiguration("input_points_raw_list"), + "output_frame": LaunchConfiguration("tf_output_frame"), + "approximate_sync": True, + "publish_synchronized_pointcloud": False, + } + updated_param = { + "input_topics": LaunchConfiguration("input_points_raw_list"), + "output_frame": LaunchConfiguration("tf_output_frame"), + "approximate_sync": True, + } + crop_box_updated_param = { + "input_frame": LaunchConfiguration("tf_output_frame"), + "output_frame": LaunchConfiguration("tf_output_frame"), + "min_x": -200.0, + "max_x": 1000.0, + "min_y": -50.0, + "max_y": 50.0, + "min_z": -2.0, + "max_z": 3.0, + "negative": False, + } sync_and_concat_updated = {**filter_param, **sync_and_concat_param} sync_and_concat_updated.update(sync_and_concat_updated_param) @@ -81,7 +96,7 @@ def launch_setup(context, *args, **kwargs): concat_param_updated = {**filter_param, **concat_param} concat_param_updated.update(updated_param) - + crop_box_updated = {**filter_param, **crop_box_param} crop_box_updated.update(crop_box_updated_param) ## ---------------------- -------------------------- --------------------------- @@ -95,9 +110,7 @@ def launch_setup(context, *args, **kwargs): ("~/input/twist", "/sensing/vehicle_velocity_converter/twist_with_covariance"), ("output", "points_raw/concatenated"), ], - parameters=[ - sync_and_concat_updated - ], + parameters=[sync_and_concat_updated], ) concat_components = [sync_and_concat_component] else: @@ -109,9 +122,7 @@ def launch_setup(context, *args, **kwargs): ("~/input/twist", "/sensing/vehicle_velocity_converter/twist_with_covariance"), ("output", "points_raw/concatenated"), ], - parameters=[ - time_sync_param - ], + parameters=[time_sync_param], ) concat_component = ComposableNode( @@ -119,9 +130,7 @@ def launch_setup(context, *args, **kwargs): plugin="pointcloud_preprocessor::PointCloudConcatenationComponent", name="concatenate_filter", remappings=[("output", "points_raw/concatenated")], - parameters=[ - concat_param_updated - ], + parameters=[concat_param_updated], ) concat_components = [time_sync_component, concat_component] @@ -145,9 +154,7 @@ def launch_setup(context, *args, **kwargs): ), ("output", LaunchConfiguration("output_points_raw")), ], - parameters=[ - crop_box_updated - ], + parameters=[crop_box_updated], ) # set container to run all required components in the same process From 03132f6b56a0fb2c3fabff37df1ee4e514e831ca Mon Sep 17 00:00:00 2001 From: Ariiees Date: Mon, 17 Jun 2024 10:31:01 -0400 Subject: [PATCH 008/306] change all size_t to uint16_t Signed-off-by: Ariiees --- .../launch/distortion_corrector.launch.xml | 20 ++++++++++++++ .../schema/blockage_diag.schema.json | 26 +++++++++---------- .../schema/filter.schema.json | 12 ++++----- .../random_downsample_filter_nodelet.cpp | 2 +- .../pointcloud_preprocessor/src/filter.cpp | 2 +- ...adius_search_2d_outlier_filter_nodelet.cpp | 2 +- .../ring_outlier_filter_nodelet.cpp | 2 +- .../pointcloud_accumulator_nodelet.cpp | 2 +- 8 files changed, 44 insertions(+), 24 deletions(-) create mode 100644 sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml b/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml new file mode 100644 index 0000000000000..90902ccf7a5d3 --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json index fb931ff09b01d..8d8efdb2ca09c 100644 --- a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json +++ b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json @@ -8,22 +8,22 @@ "properties": { "blockage_ratio_threshold": { "type": "number", - "description": "blockage ration threshold", + "description": "The threshold of blockage area ratio.If the blockage value exceeds this threshold, the diagnostic state will be set to ERROR.", "default": "0.1" }, "blockage_count_threshold": { "type": "number", - "description": "blockage count threshold", + "description": "The threshold of number continuous blockage frames", "default": "50" }, "blockage_buffering_frames": { "type": "number", - "description": "blockage buffering frames", + "description": "The number of buffering about blockage detection [range:1-200]", "default": "2" }, "blockage_buffering_interval": { "type": "number", - "description": "blockage buffering interval", + "description": "The interval of buffering about blockage detection", "default": "1" }, "enable_dust_diag": { @@ -38,42 +38,42 @@ }, "dust_ratio_threshold": { "type": "number", - "description": "dust ration threshold", + "description": "The threshold of dusty area ratio", "default": "0.2" }, "dust_count_threshold": { "type": "number", - "description": "dust count threshold", + "description": "The threshold of number continuous frames include dusty area", "default": "10" }, "dust_kernel_size": { "type": "number", - "description": "dust kernel size", + "description": "The kernel size of morphology processing in dusty area detection", "default": "2" }, "dust_buffering_frames": { "type": "number", - "description": "dust buffering frames", + "description": "The number of buffering about dusty area detection [range:1-200]", "default": "10" }, "dust_buffering_interval": { "type": "number", - "description": "dust buffering interval", + "description": "The interval of buffering about dusty area detection", "default": "1" }, "max_distance_range": { "type": "number", - "description": "max distance range", + "description": "Maximum view range for the LiDAR", "default": "200.0" }, "horizontal_resolution": { "type": "number", - "description": "horizontal resolution", - "default": "INSERT_DEFAULT" + "description": "The horizontal resolution of depth map image [deg/pixel]", + "default": "0.4" }, "blockage_kernel": { "type": "number", - "description": "blockage kernel", + "description": "The kernel size of morphology processing the detected blockage area", "default": "10" } }, diff --git a/sensing/pointcloud_preprocessor/schema/filter.schema.json b/sensing/pointcloud_preprocessor/schema/filter.schema.json index af794a0f27231..13104a85b8f65 100644 --- a/sensing/pointcloud_preprocessor/schema/filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/filter.schema.json @@ -8,32 +8,32 @@ "properties": { "input_frame": { "type": "string", - "description": "input frame", + "description": "input frame id", "default": "" }, "output_frame": { "type": "string", - "description": "output frame", + "description": "output frame id", "default": "" }, "max_queue_size": { "type": "number", - "description": "max queue size of input", + "description": "max queue size of input/output topics", "default": 5 }, "use_indices": { "type": "boolean", - "description": "flag to use pointcloud", + "description": "flag to use pointcloud indices", "default": false }, "latched_indices": { "type": "boolean", - "description": "flag to latch pointcloud", + "description": "flag to latch pointcloud indices", "default": false }, "approximate_sync": { "type": "boolean", - "description": "flag to use approximate sync", + "description": "lag to use approximate sync option", "default": false } }, diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp index 95ce78204b64a..ffb4fa1f7da91 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp @@ -58,7 +58,7 @@ RandomDownsampleFilterComponent::RandomDownsampleFilterComponent( { // set initial parameters { - sample_num_ = declare_parameter("sample_num"); + sample_num_ = declare_parameter("sample_num"); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/filter.cpp b/sensing/pointcloud_preprocessor/src/filter.cpp index 6eda86a710f99..b535da896ce77 100644 --- a/sensing/pointcloud_preprocessor/src/filter.cpp +++ b/sensing/pointcloud_preprocessor/src/filter.cpp @@ -70,7 +70,7 @@ pointcloud_preprocessor::Filter::Filter( { tf_input_frame_ = declare_parameter("input_frame"); tf_output_frame_ = declare_parameter("output_frame"); - max_queue_size_ = declare_parameter("max_queue_size"); + max_queue_size_ = declare_parameter("max_queue_size"); // ---[ Optional parameters use_indices_ = declare_parameter("use_indices"); diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp index 25543a4782c4e..aa12e227165ab 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp @@ -28,7 +28,7 @@ RadiusSearch2DOutlierFilterComponent::RadiusSearch2DOutlierFilterComponent( { // set initial parameters { - min_neighbors_ = declare_parameter("min_neighbors"); + min_neighbors_ = declare_parameter("min_neighbors"); search_radius_ = declare_parameter("search_radius"); } diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp index 4e204927d7d49..8e38d203269a4 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp @@ -47,7 +47,7 @@ RingOutlierFilterComponent::RingOutlierFilterComponent(const rclcpp::NodeOptions object_length_threshold_ = declare_parameter("object_length_threshold"); num_points_threshold_ = declare_parameter("num_points_threshold"); max_rings_num_ = declare_parameter("max_rings_num"); - max_points_num_per_ring_ = declare_parameter("max_points_num_per_ring"); + max_points_num_per_ring_ = declare_parameter("max_points_num_per_ring"); publish_outlier_pointcloud_ = declare_parameter("publish_outlier_pointcloud"); min_azimuth_deg_ = declare_parameter("min_azimuth_deg"); diff --git a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp index 730fdb3fb6ccd..a28415dae2a56 100644 --- a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp @@ -24,7 +24,7 @@ PointcloudAccumulatorComponent::PointcloudAccumulatorComponent(const rclcpp::Nod // set initial parameters { accumulation_time_sec_ = declare_parameter("accumulation_time_sec"); - pointcloud_buffer_.set_capacity(declare_parameter("pointcloud_buffer_size")); + pointcloud_buffer_.set_capacity(declare_parameter("pointcloud_buffer_size")); } using std::placeholders::_1; From ad384fc1a2be3df399bffb4d834b61984b69381a Mon Sep 17 00:00:00 2001 From: Ariiees Date: Mon, 17 Jun 2024 20:22:04 -0400 Subject: [PATCH 009/306] add other launch file Signed-off-by: Ariiees --- ...tor_map_inside_area_filter_param_file.yaml | 2 +- .../approximate_downsample_filter.launch.xml | 16 +++++++++++++++ .../launch/distortion_corrector.launch.xml | 20 +++---------------- .../dual_return_outlier_filter.launch.xml | 1 - .../launch/lanelet2_map_filter.launch.xml | 6 ++++++ ...ed_voxel_grid_downsample_filter.launch.xml | 16 +++++++++++++++ .../launch/pointcloud_accumulator.launch.xml | 16 +++++++++++++++ ...radius_search_2d_outlier_filter.launch.xml | 16 +++++++++++++++ .../launch/ring_outlier_filter.launch.xml | 16 +++++++++++++++ .../vector_map_inside_area_filter.launch.xml | 12 +++++++++++ .../voxel_grid_downsample_filter.launch.xml | 16 +++++++++++++++ .../voxel_grid_outlier_filter.launch.xml | 16 +++++++++++++++ 12 files changed, 134 insertions(+), 19 deletions(-) create mode 100644 sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml create mode 100644 sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml diff --git a/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml index 0d260f8553333..e7df8c9641a8b 100644 --- a/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml @@ -2,4 +2,4 @@ ros__parameters: polygon_type: "no_obstacle_segmentation_area" use_z_filter: false - z_threshold: 0.0f + z_threshold: 0.0 diff --git a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml new file mode 100644 index 0000000000000..92995f33c47d4 --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml b/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml index 90902ccf7a5d3..ae0f3141c2097 100644 --- a/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml @@ -1,20 +1,6 @@ - - - - - - - - - - - - - - - - - + + + diff --git a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml index 9f04075f79bfd..0961dd4aca014 100644 --- a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml @@ -7,7 +7,6 @@ - diff --git a/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml new file mode 100644 index 0000000000000..6573544c4a987 --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml new file mode 100644 index 0000000000000..f77d42bf17196 --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml new file mode 100644 index 0000000000000..a4c9bb311a063 --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml new file mode 100644 index 0000000000000..469b4d22a724e --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml new file mode 100644 index 0000000000000..312df90a65b92 --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml new file mode 100644 index 0000000000000..c1350801c55dc --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml new file mode 100644 index 0000000000000..72ed333f4dd47 --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml new file mode 100644 index 0000000000000..29b220f99e798 --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + From 402e515c06fc79b5d565265b30132a2fc717cc07 Mon Sep 17 00:00:00 2001 From: Ariiees Date: Thu, 20 Jun 2024 11:47:18 -0400 Subject: [PATCH 010/306] Add other schema file Signed-off-by: Ariiees --- .../approximate_downsample_filter.schema.json | 44 +++++++++++++++++++ .../schema/distortion_corrector.schema.json | 39 ++++++++++++++++ .../schema/lanelet2_map_filter.schema.json | 39 ++++++++++++++++ ...d_voxel_grid_downsample_filter.schema.json | 0 4 files changed, 122 insertions(+) create mode 100644 sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json new file mode 100644 index 0000000000000..3e7807afdef81 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "approximate_downsample_filter", + "type": "object", + "definitions": { + "approximate_downsample_filter": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "voxel size x [m]", + "default": "0.3" + }, + "voxel_size_y": { + "type": "number", + "description": "voxel size y [m]", + "default": "0.3" + }, + "voxel_size_z": { + "type": "number", + "description": "voxel size z [m]", + "default": "0.1" + } + }, + "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/approximate_downsample_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json b/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json new file mode 100644 index 0000000000000..8aaa1c1e54eb6 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "distortion_corrector", + "type": "object", + "definitions": { + "distortion_corrector": { + "type": "object", + "properties": { + "time_stamp_field_name": { + "type": "string", + "description": "time stamp field name", + "default": "time_stamp" + }, + "use_imu": { + "type": "boolean", + "description": "use gyroscope for yaw rate if true, else use vehicle status", + "default": "true" + } + }, + "required": ["time_stamp_field_name", "use_imu"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/distortion_corrector" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json b/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json new file mode 100644 index 0000000000000..788949efee01d --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "lanelet2_map_filter", + "type": "object", + "definitions": { + "lanelet2_map_filter": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "voxel size", + "default": "0.04" + }, + "voxel_size_y": { + "type": "number", + "description": "voxel size", + "default": "0.04" + } + }, + "required": ["voxel_size_x", "voxel_size_y"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/lanelet2_map_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json new file mode 100644 index 0000000000000..e69de29bb2d1d From fed5dc60b8a8ab4f3b36efe651c94242d5fdfb62 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 20 Jun 2024 15:53:03 +0000 Subject: [PATCH 011/306] style(pre-commit): autofix Signed-off-by: Ariiees --- .../approximate_downsample_filter.launch.xml | 4 +- .../launch/pointcloud_accumulator.launch.xml | 4 +- .../approximate_downsample_filter.schema.json | 81 +++++++++---------- .../schema/distortion_corrector.schema.json | 73 +++++++++-------- .../schema/lanelet2_map_filter.schema.json | 73 +++++++++-------- 5 files changed, 116 insertions(+), 119 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml index 92995f33c47d4..627ebbcd842b0 100644 --- a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml @@ -1,4 +1,4 @@ - + @@ -13,4 +13,4 @@ - \ No newline at end of file + diff --git a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml index a4c9bb311a063..231334b29f169 100644 --- a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml @@ -1,4 +1,4 @@ - + @@ -13,4 +13,4 @@ - \ No newline at end of file + diff --git a/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json index 3e7807afdef81..40cff46455aa1 100644 --- a/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json @@ -1,44 +1,43 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "approximate_downsample_filter", - "type": "object", - "definitions": { - "approximate_downsample_filter": { - "type": "object", - "properties": { - "voxel_size_x": { - "type": "number", - "description": "voxel size x [m]", - "default": "0.3" - }, - "voxel_size_y": { - "type": "number", - "description": "voxel size y [m]", - "default": "0.3" - }, - "voxel_size_z": { - "type": "number", - "description": "voxel size z [m]", - "default": "0.1" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "approximate_downsample_filter", + "type": "object", + "definitions": { + "approximate_downsample_filter": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "voxel size x [m]", + "default": "0.3" }, - "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/approximate_downsample_filter" - } + "voxel_size_y": { + "type": "number", + "description": "voxel size y [m]", + "default": "0.3" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } - \ No newline at end of file + "voxel_size_z": { + "type": "number", + "description": "voxel size z [m]", + "default": "0.1" + } + }, + "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/approximate_downsample_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json b/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json index 8aaa1c1e54eb6..9529e58a107ac 100644 --- a/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json +++ b/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json @@ -1,39 +1,38 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "distortion_corrector", - "type": "object", - "definitions": { - "distortion_corrector": { - "type": "object", - "properties": { - "time_stamp_field_name": { - "type": "string", - "description": "time stamp field name", - "default": "time_stamp" - }, - "use_imu": { - "type": "boolean", - "description": "use gyroscope for yaw rate if true, else use vehicle status", - "default": "true" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "distortion_corrector", + "type": "object", + "definitions": { + "distortion_corrector": { + "type": "object", + "properties": { + "time_stamp_field_name": { + "type": "string", + "description": "time stamp field name", + "default": "time_stamp" }, - "required": ["time_stamp_field_name", "use_imu"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/distortion_corrector" - } - }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } - \ No newline at end of file + "use_imu": { + "type": "boolean", + "description": "use gyroscope for yaw rate if true, else use vehicle status", + "default": "true" + } + }, + "required": ["time_stamp_field_name", "use_imu"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/distortion_corrector" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json b/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json index 788949efee01d..0236c7ad89baf 100644 --- a/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json @@ -1,39 +1,38 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "lanelet2_map_filter", - "type": "object", - "definitions": { - "lanelet2_map_filter": { - "type": "object", - "properties": { - "voxel_size_x": { - "type": "number", - "description": "voxel size", - "default": "0.04" - }, - "voxel_size_y": { - "type": "number", - "description": "voxel size", - "default": "0.04" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "lanelet2_map_filter", + "type": "object", + "definitions": { + "lanelet2_map_filter": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "voxel size", + "default": "0.04" }, - "required": ["voxel_size_x", "voxel_size_y"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/lanelet2_map_filter" - } - }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } - \ No newline at end of file + "voxel_size_y": { + "type": "number", + "description": "voxel size", + "default": "0.04" + } + }, + "required": ["voxel_size_x", "voxel_size_y"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/lanelet2_map_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} From 772e937d2519303992fa096f17abfe5c62792edb Mon Sep 17 00:00:00 2001 From: Ariiees Date: Mon, 24 Jun 2024 11:17:13 -0400 Subject: [PATCH 012/306] add schema Signed-off-by: Ariiees --- .../config/crop_box_filter_param_file.yaml | 2 +- .../schema/crop_box_filter.schema.json | 58 ++++++++++++ .../schema/passthrough_filter.schema.json | 54 +++++++++++ .../schema/ring_outlier_filter.schema.json | 92 +++++++++++++++++++ .../vector_map_insdie_area_filter.schema.json | 44 +++++++++ .../voxel_grid_downsample_filter.schema.json | 44 +++++++++ .../voxel_grid_outlier_filter.schema.json | 49 ++++++++++ 7 files changed, 342 insertions(+), 1 deletion(-) create mode 100644 sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml index 24c3a677ba580..a4bdbdfadef3c 100644 --- a/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml +++ b/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml @@ -7,4 +7,4 @@ max_x: 1.0 max_y: 1.0 max_z: 1.0 - negative: false + # negative: false diff --git a/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json b/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json new file mode 100644 index 0000000000000..44d8a40baecbf --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json @@ -0,0 +1,58 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "INSERT_TITLE", + "type": "object", + "definitions": { + "crop_box_filter": { + "type": "object", + "properties": { + "min_x": { + "type": "number", + "description": "x-coordinate minimum value for crop range", + "default": "-1.0" + }, + "min_y": { + "type": "number", + "description": "y-coordinate minimum value for crop range", + "default": "-1.0" + }, + "min_z": { + "type": "number", + "description": "z-coordinate minimum value for crop range", + "default": "-1.0" + }, + "max_x": { + "type": "number", + "description": "x-coordinate maximum value for crop range", + "default": "1.0" + }, + "max_y": { + "type": "number", + "description": "y-coordinate maximum value for crop range", + "default": "1.0" + }, + "max_z": { + "type": "number", + "description": "z-coordinate maximum value for crop range", + "default": "1.0" + } + }, + "required": ["min_x", "min_y", "min_z", "max_x", "max_y", "max_z"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/crop_box_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json b/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json new file mode 100644 index 0000000000000..632470417ac53 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json @@ -0,0 +1,54 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "passthrough_filter", + "type": "object", + "definitions": { + "passthrough_filter": { + "type": "object", + "properties": { + "filter_limit_min": { + "type": "number", + "description": "minimum allowed field value", + "default": "0" + }, + "filter_limit_max": { + "type": "number", + "description": "maximum allowed field value", + "default": "127" + }, + "filter_field_name": { + "type": "string", + "description": "filtering field name", + "default": "ring" + }, + "keep_organized": { + "type": "boolean", + "description": "flag to keep indices structure", + "default": "false" + }, + "filter_limit_negative": { + "type": "boolean", + "description": "flag to return whether the data is inside limit or not", + "default": "false" + } + }, + "required": ["filter_limit_min", "filter_limit_max", "filter_field_name", + "keep_organized", "filter_limit_negative"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/passthrough_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json new file mode 100644 index 0000000000000..e6b04c6b11321 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json @@ -0,0 +1,92 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ring_outlier_filter", + "type": "object", + "definitions": { + "ring_outlier_filter": { + "type": "object", + "properties": { + "distance_ratio": { + "type": "number", + "description": "distance_ratio", + "default": "1.03" + }, + "object_length_threshold": { + "type": "number", + "description": "object_length_threshold", + "default": "0.1" + }, + "num_points_threshold": { + "type": "number", + "description": "num_points_threshold", + "default": "4" + }, + "max_rings_num": { + "type": "number", + "description": "max_rings_num", + "default": "128" + }, + "max_points_num_per_ring": { + "type": "number", + "description": "Set this value large enough such that HFoV / resolution < max_points_num_per_ring", + "default": "4000" + }, + "publish_outlier_pointcloud": { + "type": "boolean", + "description": "Flag to publish outlier pointcloud and visibility score. Due to performance concerns, please set to false during experiments.", + "default": "false" + }, + "min_azimuth_deg": { + "type": "number", + "description": "The left limit of azimuth for visibility score calculation", + "default": "0.0" + }, + "max_azimuth_deg": { + "type": "number", + "description": "The right limit of azimuth for visibility score calculation", + "default": "360.0" + }, + "max_distance": { + "type": "number", + "description": "The limit distance for visibility score calculation", + "default": "12.0" + }, + "vertical_bins": { + "type": "number", + "description": "The number of vertical bin for visibility histogram", + "default": "128" + }, + "horizontal_bins": { + "type": "number", + "description": "The number of horizontal bin for visibility histogram", + "default": "36" + }, + "noise_threshold": { + "type": "number", + "description": "The threshold value for distinguishing noise from valid points in the frequency image", + "default": "2" + } + }, + "required": ["distance_ratio", "object_length_threshold", "num_points_threshold", + "max_rings_num", "max_points_num_per_ring", "publish_outlier_pointcloud", + "min_azimuth_deg", "max_azimuth_deg", "max_distance", "vertical_bins", + "horizontal_bins", "noise_threshold"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/ring_outlier_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json b/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json new file mode 100644 index 0000000000000..366469e3b8473 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "vector_map_inside_area_filter", + "type": "object", + "definitions": { + "vector_map_inside_area_filter": { + "type": "object", + "properties": { + "polygon_type": { + "type": "string", + "description": "polygon type to be filtered", + "default": "no_obstacle_segmentation_area" + }, + "use_z_filter": { + "type": "boolean", + "description": "use z value for filtering", + "default": "false" + }, + "z_threshold": { + "type": "number", + "description": "z threshold for filtering", + "default": "0.0" + } + }, + "required": ["polygon_type", "use_z_filter", "z_threshold"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/vector_map_inside_area_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json new file mode 100644 index 0000000000000..75584cd89cba0 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "voxel_grid_downsample_filter", + "type": "object", + "definitions": { + "voxel_grid_downsample_filter": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "voxel size x [m]", + "default": "0.3" + }, + "voxel_size_y": { + "type": "number", + "description": "voxel size y [m]", + "default": "0.3" + }, + "voxel_size_z": { + "type": "number", + "description": "voxel size z [m]", + "default": "0.1" + } + }, + "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/voxel_grid_downsample_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json new file mode 100644 index 0000000000000..abbce452f3a2b --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "voxel_grid_outlier_filter", + "type": "object", + "definitions": { + "voxel_grid_outlier_filter": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "the voxel size along x-axis [m]", + "default": "0.3" + }, + "voxel_size_y": { + "type": "number", + "description": "the voxel size along y-axis [m]", + "default": "0.3" + }, + "voxel_size_z": { + "type": "number", + "description": "the voxel size along z-axis [m]", + "default": "0.1" + }, + "voxel_points_threshold": { + "type": "number", + "description": "the minimum number of points in each voxel", + "default": "2" + } + }, + "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z", "voxel_points_threshold"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/voxel_grid_outlier_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } + \ No newline at end of file From e10e2b0be9e50c9e080e1bf051e32469c1623b6d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:24:43 +0000 Subject: [PATCH 013/306] style(pre-commit): autofix --- .../schema/crop_box_filter.schema.json | 110 +++++------ .../schema/passthrough_filter.schema.json | 107 +++++----- .../schema/ring_outlier_filter.schema.json | 187 +++++++++--------- .../vector_map_insdie_area_filter.schema.json | 81 ++++---- .../voxel_grid_downsample_filter.schema.json | 81 ++++---- .../voxel_grid_outlier_filter.schema.json | 91 +++++---- 6 files changed, 334 insertions(+), 323 deletions(-) diff --git a/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json b/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json index 44d8a40baecbf..a9beb7a75d552 100644 --- a/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json @@ -1,58 +1,58 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "INSERT_TITLE", - "type": "object", - "definitions": { - "crop_box_filter": { - "type": "object", - "properties": { - "min_x": { - "type": "number", - "description": "x-coordinate minimum value for crop range", - "default": "-1.0" - }, - "min_y": { - "type": "number", - "description": "y-coordinate minimum value for crop range", - "default": "-1.0" - }, - "min_z": { - "type": "number", - "description": "z-coordinate minimum value for crop range", - "default": "-1.0" - }, - "max_x": { - "type": "number", - "description": "x-coordinate maximum value for crop range", - "default": "1.0" - }, - "max_y": { - "type": "number", - "description": "y-coordinate maximum value for crop range", - "default": "1.0" - }, - "max_z": { - "type": "number", - "description": "z-coordinate maximum value for crop range", - "default": "1.0" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "INSERT_TITLE", + "type": "object", + "definitions": { + "crop_box_filter": { + "type": "object", + "properties": { + "min_x": { + "type": "number", + "description": "x-coordinate minimum value for crop range", + "default": "-1.0" }, - "required": ["min_x", "min_y", "min_z", "max_x", "max_y", "max_z"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/crop_box_filter" - } + "min_y": { + "type": "number", + "description": "y-coordinate minimum value for crop range", + "default": "-1.0" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } \ No newline at end of file + "min_z": { + "type": "number", + "description": "z-coordinate minimum value for crop range", + "default": "-1.0" + }, + "max_x": { + "type": "number", + "description": "x-coordinate maximum value for crop range", + "default": "1.0" + }, + "max_y": { + "type": "number", + "description": "y-coordinate maximum value for crop range", + "default": "1.0" + }, + "max_z": { + "type": "number", + "description": "z-coordinate maximum value for crop range", + "default": "1.0" + } + }, + "required": ["min_x", "min_y", "min_z", "max_x", "max_y", "max_z"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/crop_box_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json b/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json index 632470417ac53..92a1b7988ec05 100644 --- a/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json @@ -1,54 +1,59 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "passthrough_filter", - "type": "object", - "definitions": { - "passthrough_filter": { - "type": "object", - "properties": { - "filter_limit_min": { - "type": "number", - "description": "minimum allowed field value", - "default": "0" - }, - "filter_limit_max": { - "type": "number", - "description": "maximum allowed field value", - "default": "127" - }, - "filter_field_name": { - "type": "string", - "description": "filtering field name", - "default": "ring" - }, - "keep_organized": { - "type": "boolean", - "description": "flag to keep indices structure", - "default": "false" - }, - "filter_limit_negative": { - "type": "boolean", - "description": "flag to return whether the data is inside limit or not", - "default": "false" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "passthrough_filter", + "type": "object", + "definitions": { + "passthrough_filter": { + "type": "object", + "properties": { + "filter_limit_min": { + "type": "number", + "description": "minimum allowed field value", + "default": "0" }, - "required": ["filter_limit_min", "filter_limit_max", "filter_field_name", - "keep_organized", "filter_limit_negative"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/passthrough_filter" - } + "filter_limit_max": { + "type": "number", + "description": "maximum allowed field value", + "default": "127" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } \ No newline at end of file + "filter_field_name": { + "type": "string", + "description": "filtering field name", + "default": "ring" + }, + "keep_organized": { + "type": "boolean", + "description": "flag to keep indices structure", + "default": "false" + }, + "filter_limit_negative": { + "type": "boolean", + "description": "flag to return whether the data is inside limit or not", + "default": "false" + } + }, + "required": [ + "filter_limit_min", + "filter_limit_max", + "filter_field_name", + "keep_organized", + "filter_limit_negative" + ], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/passthrough_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json index e6b04c6b11321..358a1b6da1635 100644 --- a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json @@ -1,92 +1,101 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ring_outlier_filter", - "type": "object", - "definitions": { - "ring_outlier_filter": { - "type": "object", - "properties": { - "distance_ratio": { - "type": "number", - "description": "distance_ratio", - "default": "1.03" - }, - "object_length_threshold": { - "type": "number", - "description": "object_length_threshold", - "default": "0.1" - }, - "num_points_threshold": { - "type": "number", - "description": "num_points_threshold", - "default": "4" - }, - "max_rings_num": { - "type": "number", - "description": "max_rings_num", - "default": "128" - }, - "max_points_num_per_ring": { - "type": "number", - "description": "Set this value large enough such that HFoV / resolution < max_points_num_per_ring", - "default": "4000" - }, - "publish_outlier_pointcloud": { - "type": "boolean", - "description": "Flag to publish outlier pointcloud and visibility score. Due to performance concerns, please set to false during experiments.", - "default": "false" - }, - "min_azimuth_deg": { - "type": "number", - "description": "The left limit of azimuth for visibility score calculation", - "default": "0.0" - }, - "max_azimuth_deg": { - "type": "number", - "description": "The right limit of azimuth for visibility score calculation", - "default": "360.0" - }, - "max_distance": { - "type": "number", - "description": "The limit distance for visibility score calculation", - "default": "12.0" - }, - "vertical_bins": { - "type": "number", - "description": "The number of vertical bin for visibility histogram", - "default": "128" - }, - "horizontal_bins": { - "type": "number", - "description": "The number of horizontal bin for visibility histogram", - "default": "36" - }, - "noise_threshold": { - "type": "number", - "description": "The threshold value for distinguishing noise from valid points in the frequency image", - "default": "2" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ring_outlier_filter", + "type": "object", + "definitions": { + "ring_outlier_filter": { + "type": "object", + "properties": { + "distance_ratio": { + "type": "number", + "description": "distance_ratio", + "default": "1.03" }, - "required": ["distance_ratio", "object_length_threshold", "num_points_threshold", - "max_rings_num", "max_points_num_per_ring", "publish_outlier_pointcloud", - "min_azimuth_deg", "max_azimuth_deg", "max_distance", "vertical_bins", - "horizontal_bins", "noise_threshold"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/ring_outlier_filter" - } + "object_length_threshold": { + "type": "number", + "description": "object_length_threshold", + "default": "0.1" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } - \ No newline at end of file + "num_points_threshold": { + "type": "number", + "description": "num_points_threshold", + "default": "4" + }, + "max_rings_num": { + "type": "number", + "description": "max_rings_num", + "default": "128" + }, + "max_points_num_per_ring": { + "type": "number", + "description": "Set this value large enough such that HFoV / resolution < max_points_num_per_ring", + "default": "4000" + }, + "publish_outlier_pointcloud": { + "type": "boolean", + "description": "Flag to publish outlier pointcloud and visibility score. Due to performance concerns, please set to false during experiments.", + "default": "false" + }, + "min_azimuth_deg": { + "type": "number", + "description": "The left limit of azimuth for visibility score calculation", + "default": "0.0" + }, + "max_azimuth_deg": { + "type": "number", + "description": "The right limit of azimuth for visibility score calculation", + "default": "360.0" + }, + "max_distance": { + "type": "number", + "description": "The limit distance for visibility score calculation", + "default": "12.0" + }, + "vertical_bins": { + "type": "number", + "description": "The number of vertical bin for visibility histogram", + "default": "128" + }, + "horizontal_bins": { + "type": "number", + "description": "The number of horizontal bin for visibility histogram", + "default": "36" + }, + "noise_threshold": { + "type": "number", + "description": "The threshold value for distinguishing noise from valid points in the frequency image", + "default": "2" + } + }, + "required": [ + "distance_ratio", + "object_length_threshold", + "num_points_threshold", + "max_rings_num", + "max_points_num_per_ring", + "publish_outlier_pointcloud", + "min_azimuth_deg", + "max_azimuth_deg", + "max_distance", + "vertical_bins", + "horizontal_bins", + "noise_threshold" + ], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/ring_outlier_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json b/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json index 366469e3b8473..2040f8474146e 100644 --- a/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json @@ -1,44 +1,43 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "vector_map_inside_area_filter", - "type": "object", - "definitions": { - "vector_map_inside_area_filter": { - "type": "object", - "properties": { - "polygon_type": { - "type": "string", - "description": "polygon type to be filtered", - "default": "no_obstacle_segmentation_area" - }, - "use_z_filter": { - "type": "boolean", - "description": "use z value for filtering", - "default": "false" - }, - "z_threshold": { - "type": "number", - "description": "z threshold for filtering", - "default": "0.0" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "vector_map_inside_area_filter", + "type": "object", + "definitions": { + "vector_map_inside_area_filter": { + "type": "object", + "properties": { + "polygon_type": { + "type": "string", + "description": "polygon type to be filtered", + "default": "no_obstacle_segmentation_area" }, - "required": ["polygon_type", "use_z_filter", "z_threshold"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/vector_map_inside_area_filter" - } + "use_z_filter": { + "type": "boolean", + "description": "use z value for filtering", + "default": "false" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } - \ No newline at end of file + "z_threshold": { + "type": "number", + "description": "z threshold for filtering", + "default": "0.0" + } + }, + "required": ["polygon_type", "use_z_filter", "z_threshold"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/vector_map_inside_area_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json index 75584cd89cba0..24f4051f621b9 100644 --- a/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json @@ -1,44 +1,43 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "voxel_grid_downsample_filter", - "type": "object", - "definitions": { - "voxel_grid_downsample_filter": { - "type": "object", - "properties": { - "voxel_size_x": { - "type": "number", - "description": "voxel size x [m]", - "default": "0.3" - }, - "voxel_size_y": { - "type": "number", - "description": "voxel size y [m]", - "default": "0.3" - }, - "voxel_size_z": { - "type": "number", - "description": "voxel size z [m]", - "default": "0.1" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "voxel_grid_downsample_filter", + "type": "object", + "definitions": { + "voxel_grid_downsample_filter": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "voxel size x [m]", + "default": "0.3" }, - "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/voxel_grid_downsample_filter" - } + "voxel_size_y": { + "type": "number", + "description": "voxel size y [m]", + "default": "0.3" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } - \ No newline at end of file + "voxel_size_z": { + "type": "number", + "description": "voxel size z [m]", + "default": "0.1" + } + }, + "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/voxel_grid_downsample_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json index abbce452f3a2b..5d51581e9de7f 100644 --- a/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json @@ -1,49 +1,48 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "voxel_grid_outlier_filter", - "type": "object", - "definitions": { - "voxel_grid_outlier_filter": { - "type": "object", - "properties": { - "voxel_size_x": { - "type": "number", - "description": "the voxel size along x-axis [m]", - "default": "0.3" - }, - "voxel_size_y": { - "type": "number", - "description": "the voxel size along y-axis [m]", - "default": "0.3" - }, - "voxel_size_z": { - "type": "number", - "description": "the voxel size along z-axis [m]", - "default": "0.1" - }, - "voxel_points_threshold": { - "type": "number", - "description": "the minimum number of points in each voxel", - "default": "2" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "voxel_grid_outlier_filter", + "type": "object", + "definitions": { + "voxel_grid_outlier_filter": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "the voxel size along x-axis [m]", + "default": "0.3" }, - "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z", "voxel_points_threshold"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/voxel_grid_outlier_filter" - } + "voxel_size_y": { + "type": "number", + "description": "the voxel size along y-axis [m]", + "default": "0.3" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } - \ No newline at end of file + "voxel_size_z": { + "type": "number", + "description": "the voxel size along z-axis [m]", + "default": "0.1" + }, + "voxel_points_threshold": { + "type": "number", + "description": "the minimum number of points in each voxel", + "default": "2" + } + }, + "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z", "voxel_points_threshold"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/voxel_grid_outlier_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} From 0e1aabeaae4628b0b8068dbc797ddce908530824 Mon Sep 17 00:00:00 2001 From: Ariiees Date: Tue, 2 Jul 2024 10:36:14 -0400 Subject: [PATCH 014/306] solve problem Signed-off-by: Ariiees --- ...e_downsample_filter_param_file.param.yaml} | 0 ...lockage_diagnostics_param_file.param.yaml} | 0 ...enate_and_time_sync_param_file.param.yaml} | 0 ...atenate_pointclouds_param_file.param.yaml} | 0 ... => crop_box_filter_param_file.param.yaml} | 0 ...istortion_corrector_param_file.param.yaml} | 0 ...turn_outlier_filter_param_file.param.yaml} | 0 ...file.yaml => filter_param_file.param.yaml} | 0 ...lanelet2_map_filter_param_file.param.yaml} | 0 ...rough_filter_unit16_param_file.param.yaml} | 0 ...d_downsample_filter_param_file.param.yaml} | 0 ...ntcloud_accumulator_param_file.param.yaml} | 0 ...h_2d_outlier_filter_param_file.param.yaml} | 0 ...m_downsample_filter_param_file.param.yaml} | 0 ...ring_outlier_filter_param_file.param.yaml} | 0 ...> time_synchronizer_param_file.param.yaml} | 0 ..._inside_area_filter_param_file.param.yaml} | 0 ...d_downsample_filter_param_file.param.yaml} | 0 ...grid_outlier_filter_param_file.param.yaml} | 0 .../approximate_downsample_filter.launch.xml | 4 +- .../launch/blockage_diag.launch.xml | 4 +- .../launch/distortion_corrector.launch.xml | 2 +- .../dual_return_outlier_filter.launch.xml | 4 +- .../launch/lanelet2_map_filter.launch.xml | 2 +- ...ed_voxel_grid_downsample_filter.launch.xml | 4 +- .../launch/pointcloud_accumulator.launch.xml | 4 +- ...radius_search_2d_outlier_filter.launch.xml | 4 +- .../random_downsample_filter.launch.xml | 4 +- .../launch/ring_outlier_filter.launch.xml | 4 +- .../launch/ring_passthrough_filter.launch.xml | 4 +- .../vector_map_inside_area_filter.launch.xml | 4 +- .../voxel_grid_downsample_filter.launch.xml | 4 +- .../voxel_grid_outlier_filter.launch.xml | 4 +- .../approximate_downsample_filter.schema.json | 2 +- .../schema/blockage_diag.schema.json | 2 +- .../schema/crop_box_filter.schema.json | 2 +- .../schema/distortion_corrector.schema.json | 2 +- .../dual_return_outlier_filter.schema.json | 2 +- .../schema/filter.schema.json | 2 +- .../schema/lanelet2_map_filter.schema.json | 6 +-- .../schema/passthrough_filter.schema.json | 2 +- ...d_voxel_grid_downsample_filter.schema.json | 43 +++++++++++++++++++ .../random_downsample_filter.schema.json | 4 +- .../schema/ring_outlier_filter.schema.json | 2 +- .../ring_passthrough_filter.schema.json | 14 +++--- .../vector_map_insdie_area_filter.schema.json | 2 +- .../voxel_grid_downsample_filter.schema.json | 2 +- .../voxel_grid_outlier_filter.schema.json | 2 +- 48 files changed, 92 insertions(+), 49 deletions(-) rename sensing/pointcloud_preprocessor/config/{approximate_downsample_filter_param_file.yaml => approximate_downsample_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{blockage_diagnostics_param_file.yaml => blockage_diagnostics_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{concatenate_and_time_sync_param_file.yaml => concatenate_and_time_sync_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{concatenate_pointclouds_param_file.yaml => concatenate_pointclouds_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{crop_box_filter_param_file.yaml => crop_box_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{distortion_corrector_param_file.yaml => distortion_corrector_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{dual_return_outlier_filter_param_file.yaml => dual_return_outlier_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{filter_param_file.yaml => filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{lanelet2_map_filter_param_file.yaml => lanelet2_map_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{passthrough_filter_unit16_param_file.yaml => passthrough_filter_unit16_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{pickup_based_voxel_grid_downsample_filter_param_file.yaml => pickup_based_voxel_grid_downsample_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{pointcloud_accumulator_param_file.yaml => pointcloud_accumulator_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{radius_search_2d_outlier_filter_param_file.yaml => radius_search_2d_outlier_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{random_downsample_filter_param_file.yaml => random_downsample_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{ring_outlier_filter_param_file.yaml => ring_outlier_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{time_synchronizer_param_file.yaml => time_synchronizer_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{vector_map_inside_area_filter_param_file.yaml => vector_map_inside_area_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{voxel_grid_downsample_filter_param_file.yaml => voxel_grid_downsample_filter_param_file.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{voxel_grid_outlier_filter_param_file.yaml => voxel_grid_outlier_filter_param_file.param.yaml} (100%) diff --git a/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml b/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml rename to sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.yaml rename to sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.yaml rename to sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml b/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.yaml rename to sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml b/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.yaml rename to sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml b/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.yaml rename to sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml b/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.yaml rename to sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.yaml b/sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.yaml rename to sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.param.yaml diff --git a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml index 627ebbcd842b0..6444e1058c379 100644 --- a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml b/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml index 90902ccf7a5d3..acb7f50a23d47 100644 --- a/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml @@ -5,8 +5,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml b/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml index ae0f3141c2097..c002a009db5c7 100644 --- a/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml @@ -1,5 +1,5 @@ - + diff --git a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml index 0961dd4aca014..734c51121ed6a 100644 --- a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml @@ -6,8 +6,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml index 6573544c4a987..eeeda4508fac0 100644 --- a/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml @@ -1,5 +1,5 @@ - + diff --git a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml index f77d42bf17196..1abcc79816fc8 100644 --- a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml index 231334b29f169..75d15c9b44c27 100644 --- a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml index 469b4d22a724e..83a7a018d3489 100644 --- a/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml index 7374452e2e9fb..419f7af133189 100644 --- a/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml @@ -4,8 +4,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml index 312df90a65b92..41f6e24a3966b 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml index 34bd5fa71d72c..299d45f23f27a 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml @@ -8,8 +8,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml index c1350801c55dc..bad52bb580a6f 100644 --- a/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml @@ -1,8 +1,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml index 72ed333f4dd47..1bb269cda9079 100644 --- a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml index 29b220f99e798..a60f403c99f55 100644 --- a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json index 40cff46455aa1..f7b10ee304bb8 100644 --- a/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "approximate_downsample_filter", + "title": "Parameter for approximate downsample filter", "type": "object", "definitions": { "approximate_downsample_filter": { diff --git a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json index 8d8efdb2ca09c..d2c06d057e8b6 100644 --- a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json +++ b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "blockage_diag", + "title": "Parameter for blockage diag filter", "type": "object", "definitions": { "blockage_diag": { diff --git a/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json b/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json index a9beb7a75d552..f8d820d86ae37 100644 --- a/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "INSERT_TITLE", + "title": "Parameter for crop box filter", "type": "object", "definitions": { "crop_box_filter": { diff --git a/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json b/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json index 9529e58a107ac..bb1d86bd9e783 100644 --- a/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json +++ b/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "distortion_corrector", + "title": "Parameter for distortion corrector", "type": "object", "definitions": { "distortion_corrector": { diff --git a/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json index 3baab9fd0123b..4c8f7641d367b 100644 --- a/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "dual_return_outlier_filter", + "title": "Parameter for dual return outlier filter", "type": "object", "definitions": { "dual_return_outlier_filter": { diff --git a/sensing/pointcloud_preprocessor/schema/filter.schema.json b/sensing/pointcloud_preprocessor/schema/filter.schema.json index 13104a85b8f65..1c77e63085981 100644 --- a/sensing/pointcloud_preprocessor/schema/filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "filter", + "title": "Parameter for filter", "type": "object", "definitions": { "filter": { diff --git a/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json b/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json index 0236c7ad89baf..af23858ddbb1b 100644 --- a/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "lanelet2_map_filter", + "title": "Parameter for lanelet2 map filter", "type": "object", "definitions": { "lanelet2_map_filter": { @@ -8,12 +8,12 @@ "properties": { "voxel_size_x": { "type": "number", - "description": "voxel size", + "description": "voxel size along x-axis [m]", "default": "0.04" }, "voxel_size_y": { "type": "number", - "description": "voxel size", + "description": "voxel size along y-axis [m]", "default": "0.04" } }, diff --git a/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json b/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json index 92a1b7988ec05..2510b7fae4b28 100644 --- a/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "passthrough_filter", + "title": "Parameter for passthrough filter", "type": "object", "definitions": { "passthrough_filter": { diff --git a/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json index e69de29bb2d1d..41e6facdd71b4 100644 --- a/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json @@ -0,0 +1,43 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameter for pickup based voxel grid downsample filter", + "type": "object", + "definitions": { + "pickup_based_voxel_grid_downsample_fitler": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "voxel size along x-axis [m]", + "default": "1.0" + }, + "voxel_size_y": { + "type": "number", + "description": "voxel size along y-axis [m]", + "default": "1.0" + }, + "voxel_size_z": { + "type": "number", + "description": "voxel size along z-axis [m]", + "default": "1.0" + } + }, + "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/pickup_based_voxel_grid_downsample_fitler" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json index 7fe756ff35721..569bf79749a6f 100644 --- a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "random_downsample_filter", + "title": "Paramter for random downsample filter", "type": "object", "definitions": { "random_downsample_filter": { @@ -8,7 +8,7 @@ "properties": { "sample_num": { "type": "number", - "description": "sample numbers", + "description": "number of indices to be sampled", "default": "1500" } }, diff --git a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json index 358a1b6da1635..1549d7adcdce1 100644 --- a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ring_outlier_filter", + "title": "Parameter for ring outlier filter", "type": "object", "definitions": { "ring_outlier_filter": { diff --git a/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json b/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json index 79aead4283818..9c98445080dd2 100644 --- a/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ring_outlier_filter", + "title": "Parameter for ring outlier filter", "type": "object", "definitions": { "ring_outlier_filter": { @@ -17,17 +17,17 @@ "default": "0.1" }, "num_points_threshold": { - "type": "number", + "type": "integer", "description": "number points threshold", "default": "4" }, "max_rings_num": { - "type": "number", + "type": "integer", "description": "max rings number", "default": "128" }, "max_points_num_per_ring": { - "type": "number", + "type": "integer", "description": "maximum points number per ring", "default": "4000" }, @@ -52,17 +52,17 @@ "default": "12.0" }, "vertical_bins": { - "type": "number", + "type": "integer", "description": "vertical bins", "default": "128" }, "horizontal_bins": { - "type": "number", + "type": "integer", "description": "horizontal bins", "default": "36" }, "noise_threshold": { - "type": "number", + "type": "integer", "description": "noise threshold", "default": "2" } diff --git a/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json b/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json index 2040f8474146e..e50549faf7331 100644 --- a/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "vector_map_inside_area_filter", + "title": "Parameter for vector map inside area filter", "type": "object", "definitions": { "vector_map_inside_area_filter": { diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json index 24f4051f621b9..47972b04e2589 100644 --- a/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "voxel_grid_downsample_filter", + "title": "Parameter for voxel grid downsample filter", "type": "object", "definitions": { "voxel_grid_downsample_filter": { diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json index 5d51581e9de7f..043f9b96eee3b 100644 --- a/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "voxel_grid_outlier_filter", + "title": "Parameter for voxel grid outlier filter", "type": "object", "definitions": { "voxel_grid_outlier_filter": { From 17924c4d7964e4ea1a4f67fae93e7f12962bf105 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 2 Jul 2024 14:39:43 +0000 Subject: [PATCH 015/306] style(pre-commit): autofix --- ...d_voxel_grid_downsample_filter.schema.json | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json index 41e6facdd71b4..eec3617c59086 100644 --- a/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json @@ -1,43 +1,43 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Parameter for pickup based voxel grid downsample filter", - "type": "object", - "definitions": { - "pickup_based_voxel_grid_downsample_fitler": { - "type": "object", - "properties": { - "voxel_size_x": { - "type": "number", - "description": "voxel size along x-axis [m]", - "default": "1.0" - }, - "voxel_size_y": { - "type": "number", - "description": "voxel size along y-axis [m]", - "default": "1.0" - }, - "voxel_size_z": { - "type": "number", - "description": "voxel size along z-axis [m]", - "default": "1.0" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameter for pickup based voxel grid downsample filter", + "type": "object", + "definitions": { + "pickup_based_voxel_grid_downsample_fitler": { + "type": "object", + "properties": { + "voxel_size_x": { + "type": "number", + "description": "voxel size along x-axis [m]", + "default": "1.0" }, - "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/pickup_based_voxel_grid_downsample_fitler" - } + "voxel_size_y": { + "type": "number", + "description": "voxel size along y-axis [m]", + "default": "1.0" }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } \ No newline at end of file + "voxel_size_z": { + "type": "number", + "description": "voxel size along z-axis [m]", + "default": "1.0" + } + }, + "required": ["voxel_size_x", "voxel_size_y", "voxel_size_z"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/pickup_based_voxel_grid_downsample_fitler" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} From d52bf3e7361dbc04d9b02a70b47473763af249d7 Mon Sep 17 00:00:00 2001 From: Ariiees Date: Thu, 11 Jul 2024 13:52:40 -0400 Subject: [PATCH 016/306] rename variable in function Signed-off-by: Ariiees --- .../launch/polygon_remover.launch.py | 8 ++++---- .../pointcloud_preprocessor/launch/preprocessor.launch.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py index e286ed74ba1ed..d06ca64088efc 100644 --- a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py +++ b/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py @@ -21,11 +21,11 @@ import yaml -def load_parameter_dic(share_direc_path, yaml_path): - param_file = os.path.join(get_package_share_directory(share_direc_path), yaml_path) +def load_parameter_dic(package_share_directory, yaml_file_path): + param_file = os.path.join(get_package_share_directory(package_share_directory), yaml_file_path) - with open(param_file, "r") as f: - param_dic = yaml.safe_load(f)["/**"]["ros__parameters"] + with open(param_file, "r") as file: + param_dic = yaml.safe_load(file)["/**"]["ros__parameters"] return param_dic diff --git a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py index 75c1108174fb3..459ce07aef525 100644 --- a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py +++ b/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py @@ -26,11 +26,11 @@ import yaml -def load_parameter_dic(share_direc_path, yaml_path): - param_file = os.path.join(get_package_share_directory(share_direc_path), yaml_path) +def load_parameter_dic(package_share_directory, yaml_file_path): + param_file = os.path.join(get_package_share_directory(package_share_directory), yaml_file_path) - with open(param_file, "r") as f: - param_dic = yaml.safe_load(f)["/**"]["ros__parameters"] + with open(param_file, "r") as file: + param_dic = yaml.safe_load(file)["/**"]["ros__parameters"] return param_dic From 0837e6c005950080d43fe90a3377ac341ee3e1c9 Mon Sep 17 00:00:00 2001 From: Ariiees Date: Fri, 19 Jul 2024 10:30:01 -0400 Subject: [PATCH 017/306] resovle comments Signed-off-by: Ariiees --- sensing/pointcloud_preprocessor/README.md | 20 +--- ... approximate_downsample_filter.param.yaml} | 0 ...m.yaml => blockage_diagnostics.param.yaml} | 4 + ...l => concatenate_and_time_sync.param.yaml} | 0 ...aml => concatenate_pointclouds.param.yaml} | 0 ....param.yaml => crop_box_filter.param.yaml} | 2 +- ...m.yaml => distortion_corrector.param.yaml} | 0 ... => dual_return_outlier_filter.param.yaml} | 0 ...aram_file.param.yaml => filter.param.yaml} | 0 ...am.yaml => lanelet2_map_filter.param.yaml} | 0 ...l => passthrough_filter_unit16.param.yaml} | 0 ...d_voxel_grid_downsample_filter.param.yaml} | 0 ...yaml => pointcloud_accumulator.param.yaml} | 0 ...adius_search_2d_outlier_filter.param.yaml} | 0 ...ml => random_downsample_filter.param.yaml} | 0 ...am.yaml => ring_outlier_filter.param.yaml} | 0 ...aram.yaml => time_synchronizer.param.yaml} | 0 ... vector_map_inside_area_filter.param.yaml} | 0 ...> voxel_grid_downsample_filter.param.yaml} | 0 ...l => voxel_grid_outlier_filter.param.yaml} | 0 .../docs/blockage_diag.md | 2 + .../docs/crop-box-filter.md | 2 + .../docs/distortion-corrector.md | 2 + .../docs/downsample-filter.md | 8 ++ .../docs/dual-return-outlier-filter.md | 2 + .../docs/passthrough-filter.md | 2 + .../docs/pointcloud-accumulator.md | 2 + .../docs/radius-search-2d-outlier-filter.md | 2 + .../docs/ring-outlier-filter.md | 2 + .../docs/vector-map-filter.md | 2 + .../docs/vector-map-inside-area-filter.md | 2 + .../docs/voxel-grid-outlier-filter.md | 2 + .../approximate_downsample_filter.launch.xml | 4 +- .../launch/blockage_diag.launch.xml | 12 +-- .../launch/crop_box_filter.launch.xml | 15 +++ .../launch/distortion_corrector.launch.xml | 6 -- .../dual_return_outlier_filter.launch.xml | 10 +- .../launch/lanelet2_map_filter.launch.xml | 2 +- ...ed_voxel_grid_downsample_filter.launch.xml | 4 +- .../launch/pointcloud_accumulator.launch.xml | 4 +- ...radius_search_2d_outlier_filter.launch.xml | 4 +- .../random_downsample_filter.launch.xml | 6 +- .../launch/ring_outlier_filter.launch.xml | 4 +- .../launch/ring_passthrough_filter.launch.xml | 12 +-- .../vector_map_inside_area_filter.launch.xml | 4 +- .../voxel_grid_downsample_filter.launch.xml | 4 +- .../voxel_grid_outlier_filter.launch.xml | 4 +- .../approximate_downsample_filter.schema.json | 6 +- .../schema/blockage_diag.schema.json | 46 ++++++-- .../schema/distortion_corrector.schema.json | 38 ------- .../dual_return_outlier_filter.schema.json | 36 +++---- .../schema/filter.schema.json | 11 +- .../schema/passthrough_filter.schema.json | 4 +- .../schema/pointcloud_accumulator.schema.json | 39 +++++++ .../random_downsample_filter.schema.json | 11 +- .../schema/ring_outlier_filter.schema.json | 26 ++--- .../ring_passthrough_filter.schema.json | 101 ------------------ ...vector_map_inside_area_filter.schema.json} | 0 .../voxel_grid_downsample_filter.schema.json | 6 +- .../voxel_grid_outlier_filter.schema.json | 2 +- .../concatenate_and_time_sync_nodelet.cpp | 2 +- .../random_downsample_filter_nodelet.cpp | 2 +- ...adius_search_2d_outlier_filter_nodelet.cpp | 2 +- .../ring_outlier_filter_nodelet.cpp | 2 +- .../pointcloud_accumulator_nodelet.cpp | 2 +- 65 files changed, 211 insertions(+), 276 deletions(-) rename sensing/pointcloud_preprocessor/config/{approximate_downsample_filter_param_file.param.yaml => approximate_downsample_filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{blockage_diagnostics_param_file.param.yaml => blockage_diagnostics.param.yaml} (79%) rename sensing/pointcloud_preprocessor/config/{concatenate_and_time_sync_param_file.param.yaml => concatenate_and_time_sync.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{concatenate_pointclouds_param_file.param.yaml => concatenate_pointclouds.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{crop_box_filter_param_file.param.yaml => crop_box_filter.param.yaml} (88%) rename sensing/pointcloud_preprocessor/config/{distortion_corrector_param_file.param.yaml => distortion_corrector.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{dual_return_outlier_filter_param_file.param.yaml => dual_return_outlier_filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{filter_param_file.param.yaml => filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{lanelet2_map_filter_param_file.param.yaml => lanelet2_map_filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{passthrough_filter_unit16_param_file.param.yaml => passthrough_filter_unit16.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{pickup_based_voxel_grid_downsample_filter_param_file.param.yaml => pickup_based_voxel_grid_downsample_filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{pointcloud_accumulator_param_file.param.yaml => pointcloud_accumulator.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{radius_search_2d_outlier_filter_param_file.param.yaml => radius_search_2d_outlier_filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{random_downsample_filter_param_file.param.yaml => random_downsample_filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{ring_outlier_filter_param_file.param.yaml => ring_outlier_filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{time_synchronizer_param_file.param.yaml => time_synchronizer.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{vector_map_inside_area_filter_param_file.param.yaml => vector_map_inside_area_filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{voxel_grid_downsample_filter_param_file.param.yaml => voxel_grid_downsample_filter.param.yaml} (100%) rename sensing/pointcloud_preprocessor/config/{voxel_grid_outlier_filter_param_file.param.yaml => voxel_grid_outlier_filter.param.yaml} (100%) create mode 100644 sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml delete mode 100644 sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml delete mode 100644 sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json create mode 100644 sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json delete mode 100644 sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json rename sensing/pointcloud_preprocessor/schema/{vector_map_insdie_area_filter.schema.json => vector_map_inside_area_filter.schema.json} (100%) diff --git a/sensing/pointcloud_preprocessor/README.md b/sensing/pointcloud_preprocessor/README.md index 43b91632083c6..4f96861242cc8 100644 --- a/sensing/pointcloud_preprocessor/README.md +++ b/sensing/pointcloud_preprocessor/README.md @@ -41,28 +41,10 @@ Detail description of each filter's algorithm is in the following links. | ----------------- | ------------------------------- | --------------- | | `~/output/points` | `sensor_msgs::msg::PointCloud2` | filtered points | -## Parameters - -### Node Parameters +## Core Parameters {{ json_to_markdown("sensing/pointcloud_preprocessor/schema/filter.schema.json") }} -### blockage_diag - -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json") }} - -### dual_return_outlier_filter - -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json") }} - -### random_downsample_filter - -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json") }} - -### ring_passthrough_filter - -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json") }} - ## Assumptions / Known limits `pointcloud_preprocessor::Filter` is implemented based on pcl_perception [1] because diff --git a/sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/approximate_downsample_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/blockage_diagnostics.param.yaml similarity index 79% rename from sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/blockage_diagnostics.param.yaml index 13ddd8a7c7590..75503a3caf159 100644 --- a/sensing/pointcloud_preprocessor/config/blockage_diagnostics_param_file.param.yaml +++ b/sensing/pointcloud_preprocessor/config/blockage_diagnostics.param.yaml @@ -14,3 +14,7 @@ max_distance_range: 200.0 horizontal_resolution: 0.4 blockage_kernel: 10 + angle_range: [0.0, 360.0] + vertical_bins: 40 + is_channel_order_top2down: true + horizontal_ring_id: 18 diff --git a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/concatenate_and_time_sync_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/concatenate_pointclouds_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml similarity index 88% rename from sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml index a4bdbdfadef3c..24c3a677ba580 100644 --- a/sensing/pointcloud_preprocessor/config/crop_box_filter_param_file.param.yaml +++ b/sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml @@ -7,4 +7,4 @@ max_x: 1.0 max_y: 1.0 max_z: 1.0 - # negative: false + negative: false diff --git a/sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/distortion_corrector.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/distortion_corrector_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/distortion_corrector.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/dual_return_outlier_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/dual_return_outlier_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/lanelet2_map_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/lanelet2_map_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/lanelet2_map_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/passthrough_filter_unit16_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/passthrough_filter_unit16.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/pointcloud_accumulator.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/pointcloud_accumulator_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/pointcloud_accumulator.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/random_downsample_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/random_downsample_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/random_downsample_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/ring_outlier_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/ring_outlier_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/ring_outlier_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/time_synchronizer.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/time_synchronizer_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/time_synchronizer.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.param.yaml b/sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter_param_file.param.yaml rename to sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/docs/blockage_diag.md b/sensing/pointcloud_preprocessor/docs/blockage_diag.md index 082ae180fa3c9..65735e1bf3694 100644 --- a/sensing/pointcloud_preprocessor/docs/blockage_diag.md +++ b/sensing/pointcloud_preprocessor/docs/blockage_diag.md @@ -51,6 +51,8 @@ This implementation inherits `pointcloud_preprocessor::Filter` class, please ref ## Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json") }} + | Name | Type | Description | | ----------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- | | `blockage_ratio_threshold` | float | The threshold of blockage area ratio.If the blockage value exceeds this threshold, the diagnostic state will be set to ERROR. | diff --git a/sensing/pointcloud_preprocessor/docs/crop-box-filter.md b/sensing/pointcloud_preprocessor/docs/crop-box-filter.md index b6bd960c99919..553d91c6d3729 100644 --- a/sensing/pointcloud_preprocessor/docs/crop-box-filter.md +++ b/sensing/pointcloud_preprocessor/docs/crop-box-filter.md @@ -20,6 +20,8 @@ This implementation inherit `pointcloud_preprocessor::Filter` class, please refe ### Core Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json") }} + | Name | Type | Default Value | Description | | ------- | ------ | ------------- | ----------------------------------------- | | `min_x` | double | -1.0 | x-coordinate minimum value for crop range | diff --git a/sensing/pointcloud_preprocessor/docs/distortion-corrector.md b/sensing/pointcloud_preprocessor/docs/distortion-corrector.md index dcb03cc792cae..02f977dcc2cb8 100644 --- a/sensing/pointcloud_preprocessor/docs/distortion-corrector.md +++ b/sensing/pointcloud_preprocessor/docs/distortion-corrector.md @@ -39,6 +39,8 @@ $ ExactPointTime = TimeStamp + TimeOffset $ ### Core Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json") }} + | Name | Type | Default Value | Description | | ---------------------- | ------ | ------------- | ----------------------------------------------------------- | | `timestamp_field_name` | string | "time_stamp" | time stamp field name | diff --git a/sensing/pointcloud_preprocessor/docs/downsample-filter.md b/sensing/pointcloud_preprocessor/docs/downsample-filter.md index 25faf62b765bc..c0fc7a0d4af8f 100644 --- a/sensing/pointcloud_preprocessor/docs/downsample-filter.md +++ b/sensing/pointcloud_preprocessor/docs/downsample-filter.md @@ -36,6 +36,8 @@ These implementations inherit `pointcloud_preprocessor::Filter` class, please re #### Approximate Downsample Filter +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json") }} + | Name | Type | Default Value | Description | | -------------- | ------ | ------------- | ---------------- | | `voxel_size_x` | double | 0.3 | voxel size x [m] | @@ -44,12 +46,16 @@ These implementations inherit `pointcloud_preprocessor::Filter` class, please re ### Random Downsample Filter +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json") }} + | Name | Type | Default Value | Description | | ------------ | ---- | ------------- | ------------------------------- | | `sample_num` | int | 1500 | number of indices to be sampled | ### Voxel Grid Downsample Filter +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json") }} + | Name | Type | Default Value | Description | | -------------- | ------ | ------------- | ---------------- | | `voxel_size_x` | double | 0.3 | voxel size x [m] | @@ -58,6 +64,8 @@ These implementations inherit `pointcloud_preprocessor::Filter` class, please re ### Pickup Based Voxel Grid Downsample Filter +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json") }} + | Name | Type | Default Value | Description | | -------------- | ------ | ------------- | ---------------- | | `voxel_size_x` | double | 1.0 | voxel size x [m] | diff --git a/sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md b/sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md index c5a0b75e9b33b..cc32aa3df4b62 100644 --- a/sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md +++ b/sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md @@ -46,6 +46,8 @@ This implementation inherits `pointcloud_preprocessor::Filter` class, please ref ### Node Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json") }} + This implementation inherits `pointcloud_preprocessor::Filter` class, please refer [README](../README.md). ### Core Parameters diff --git a/sensing/pointcloud_preprocessor/docs/passthrough-filter.md b/sensing/pointcloud_preprocessor/docs/passthrough-filter.md index 4d28f08da28cc..6b9e129021e75 100644 --- a/sensing/pointcloud_preprocessor/docs/passthrough-filter.md +++ b/sensing/pointcloud_preprocessor/docs/passthrough-filter.md @@ -25,6 +25,8 @@ The `passthrough_filter` is a node that removes points on the outside of a range ### Core Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json") }} + | Name | Type | Default Value | Description | | ----------------------- | ------ | ------------- | ------------------------------------------------------ | | `filter_limit_min` | int | 0 | minimum allowed field value | diff --git a/sensing/pointcloud_preprocessor/docs/pointcloud-accumulator.md b/sensing/pointcloud_preprocessor/docs/pointcloud-accumulator.md index d9fa56ca9c995..a76df48803cbb 100644 --- a/sensing/pointcloud_preprocessor/docs/pointcloud-accumulator.md +++ b/sensing/pointcloud_preprocessor/docs/pointcloud-accumulator.md @@ -24,6 +24,8 @@ The `pointcloud_accumulator` is a node that accumulates pointclouds for a given ### Core Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json") }} + | Name | Type | Default Value | Description | | ------------------------ | ------ | ------------- | ----------------------- | | `accumulation_time_sec` | double | 2.0 | accumulation period [s] | diff --git a/sensing/pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md b/sensing/pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md index 19d5c348afff5..ba22d2312d4a1 100644 --- a/sensing/pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md +++ b/sensing/pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md @@ -24,6 +24,8 @@ This implementation inherits `pointcloud_preprocessor::Filter` class, please ref ### Core Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/radius_search_2d_outlier_filter.schema.json") }} + | Name | Type | Description | | --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------ | | `min_neighbors` | int | If points in the circle centered on reference point is less than `min_neighbors`, a reference point is judged as outlier | diff --git a/sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md b/sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md index e87023ef00149..ddad51998dcd3 100644 --- a/sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md +++ b/sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md @@ -56,6 +56,8 @@ This implementation inherits `pointcloud_preprocessor::Filter` class, please ref ### Core Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json") }} + | Name | Type | Default Value | Description | | ---------------------------- | ------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------- | | `distance_ratio` | double | 1.03 | | diff --git a/sensing/pointcloud_preprocessor/docs/vector-map-filter.md b/sensing/pointcloud_preprocessor/docs/vector-map-filter.md index c38a4c719fcf3..52623e42c7f06 100644 --- a/sensing/pointcloud_preprocessor/docs/vector-map-filter.md +++ b/sensing/pointcloud_preprocessor/docs/vector-map-filter.md @@ -23,6 +23,8 @@ The `vector_map_filter` is a node that removes points on the outside of lane by ## Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json") }} + ### Core Parameters | Name | Type | Default Value | Description | diff --git a/sensing/pointcloud_preprocessor/docs/vector-map-inside-area-filter.md b/sensing/pointcloud_preprocessor/docs/vector-map-inside-area-filter.md index 8e31dfb203d2b..b7e05c91354c0 100644 --- a/sensing/pointcloud_preprocessor/docs/vector-map-inside-area-filter.md +++ b/sensing/pointcloud_preprocessor/docs/vector-map-inside-area-filter.md @@ -33,6 +33,8 @@ This implementation inherits `pointcloud_preprocessor::Filter` class, so please ### Core Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/vector_map_inside_area_filter.schema.json") }} + | Name | Type | Description | | -------------- | ------ | --------------------------- | | `polygon_type` | string | polygon type to be filtered | diff --git a/sensing/pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md b/sensing/pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md index 0c1905e810fec..2e06027671a8d 100644 --- a/sensing/pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md +++ b/sensing/pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md @@ -23,6 +23,8 @@ This implementation inherits `pointcloud_preprocessor::Filter` class, please ref ### Core Parameters +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json") }} + | Name | Type | Default Value | Description | | ------------------------ | ------ | ------------- | ------------------------------------------ | | `voxel_size_x` | double | 0.3 | the voxel size along x-axis [m] | diff --git a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml index 6444e1058c379..200b2cea44f69 100644 --- a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml b/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml index acb7f50a23d47..6d1aa1f906828 100644 --- a/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml @@ -1,19 +1,11 @@ - - - - - - + + - - - - diff --git a/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml new file mode 100644 index 0000000000000..67d23a150b6ee --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml b/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml deleted file mode 100644 index c002a009db5c7..0000000000000 --- a/sensing/pointcloud_preprocessor/launch/distortion_corrector.launch.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml index 734c51121ed6a..a0fe1d7ef94c4 100644 --- a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml @@ -3,19 +3,13 @@ - - - - - + + - - - diff --git a/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml index eeeda4508fac0..dafd5c283b072 100644 --- a/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml @@ -1,5 +1,5 @@ - + diff --git a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml index 1abcc79816fc8..83f46e2a4c482 100644 --- a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml index 75d15c9b44c27..eebb98ffc575c 100644 --- a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml index 83a7a018d3489..b15b4bb12e37d 100644 --- a/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml index 419f7af133189..a844b3f10a46a 100644 --- a/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml @@ -1,15 +1,13 @@ - - - + + - diff --git a/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml index 41f6e24a3966b..16f2b714379ce 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml index 299d45f23f27a..e09883a2c1378 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml @@ -2,22 +2,14 @@ - - - - - - + + - - - - diff --git a/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml index bad52bb580a6f..638c8d924844f 100644 --- a/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml @@ -1,8 +1,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml index 1bb269cda9079..6a98f85b8edd9 100644 --- a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml index a60f403c99f55..240786771f0de 100644 --- a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json index f7b10ee304bb8..5590f3ab2eef3 100644 --- a/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json @@ -8,17 +8,17 @@ "properties": { "voxel_size_x": { "type": "number", - "description": "voxel size x [m]", + "description": "the voxel size along x-axis [m]", "default": "0.3" }, "voxel_size_y": { "type": "number", - "description": "voxel size y [m]", + "description": "the voxel size along y-axis [m]", "default": "0.3" }, "voxel_size_z": { "type": "number", - "description": "voxel size z [m]", + "description": "the voxel size along z-axis [m]", "default": "0.1" } }, diff --git a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json index d2c06d057e8b6..567b99ea5fad4 100644 --- a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json +++ b/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json @@ -17,12 +17,12 @@ "default": "50" }, "blockage_buffering_frames": { - "type": "number", + "type": "integer", "description": "The number of buffering about blockage detection [range:1-200]", "default": "2" }, "blockage_buffering_interval": { - "type": "number", + "type": "integer", "description": "The interval of buffering about blockage detection", "default": "1" }, @@ -42,22 +42,22 @@ "default": "0.2" }, "dust_count_threshold": { - "type": "number", + "type": "integer", "description": "The threshold of number continuous frames include dusty area", "default": "10" }, "dust_kernel_size": { - "type": "number", + "type": "integer", "description": "The kernel size of morphology processing in dusty area detection", "default": "2" }, "dust_buffering_frames": { - "type": "number", + "type": "integer", "description": "The number of buffering about dusty area detection [range:1-200]", "default": "10" }, "dust_buffering_interval": { - "type": "number", + "type": "integer", "description": "The interval of buffering about dusty area detection", "default": "1" }, @@ -72,9 +72,35 @@ "default": "0.4" }, "blockage_kernel": { - "type": "number", + "type": "integer", "description": "The kernel size of morphology processing the detected blockage area", "default": "10" + }, + "angle_range": { + "type": "array", + "description": "The effective range of LiDAR", + "minItems": 2, + "maxItems": 2, + "items": { + "type": "number", + "minimum": 0.0, + "maximum": 360.0 + } + }, + "vertical_bins": { + "type": "integer", + "description": "The LiDAR channel", + "default": "40" + }, + "is_channel_order_top2down": { + "type": "boolean", + "description": "If the lidar channels are indexed from top to down", + "default": "true" + }, + "horizontal_ring_id": { + "type": "integer", + "description": "The id of horizontal ring of the LiDAR", + "default": "18" } }, "required": [ @@ -91,7 +117,11 @@ "dust_buffering_interval", "max_distance_range", "horizontal_resolution", - "blockage_kernel" + "blockage_kernel", + "angle_range", + "vertical_bins", + "is_channel_order_top2down", + "horizontal_ring_id" ], "additionalProperties": false } diff --git a/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json b/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json deleted file mode 100644 index bb1d86bd9e783..0000000000000 --- a/sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Parameter for distortion corrector", - "type": "object", - "definitions": { - "distortion_corrector": { - "type": "object", - "properties": { - "time_stamp_field_name": { - "type": "string", - "description": "time stamp field name", - "default": "time_stamp" - }, - "use_imu": { - "type": "boolean", - "description": "use gyroscope for yaw rate if true, else use vehicle status", - "default": "true" - } - }, - "required": ["time_stamp_field_name", "use_imu"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/distortion_corrector" - } - }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false -} diff --git a/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json index 4c8f7641d367b..726b0eac07624 100644 --- a/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json @@ -8,72 +8,72 @@ "properties": { "x_max": { "type": "number", - "description": "max distance on x", + "description": "Maximum of x for `Fixed_xyz_ROI` mode", "default": "18.0" }, "x_min": { "type": "number", - "description": "min distance on x", + "description": "Minimum of x for `Fixed_xyz_ROI` mode", "default": "-12.0" }, "y_max": { "type": "number", - "description": "max distance on y", + "description": "Maximum of y for `Fixed_xyz_ROI` mode", "default": "2.0" }, "y_min": { "type": "number", - "description": "min distance on y", + "description": "Minimum of y for `Fixed_xyz_ROI` mode", "default": "-2.0" }, "z_max": { "type": "number", - "description": "max distance on z", + "description": "Maximum of z for `Fixed_xyz_ROI` mode", "default": "10.0" }, "z_min": { "type": "number", - "description": "min distance on z", + "description": "Minimum of z for `Fixed_xyz_ROI` mode", "default": "0.0" }, "min_azimuth_deg": { "type": "number", - "description": "minium azimuth degree", + "description": "The left limit of azimuth for `Fixed_azimuth_ROI` mode", "default": "135.0" }, "max_azimuth_deg": { "type": "number", - "description": "maximum azimuth degree", + "description": "The right limit of azimuth for `Fixed_azimuth_ROI` mode", "default": "225.0" }, "max_distance": { "type": "number", - "description": "maximum distance", + "description": "The limit distance for for `Fixed_azimuth_ROI` mode", "default": "12.0" }, "vertical_bins": { - "type": "number", - "description": "vertical bins", + "type": "integer", + "description": "The number of vertical bin for visibility histogram", "default": "128" }, "max_azimuth_diff": { "type": "number", - "description": "max azimuth diff", + "description": "Threshold for ring_outlier_filter", "default": "50" }, "weak_first_distance_ratio": { "type": "number", - "description": "weak first distance ratio", + "description": "Threshold for ring_outlier_filter", "default": "1.004" }, "general_distance_ratio": { "type": "number", - "description": "general distance ratio", + "description": "Threshold for ring_outlier_filter", "default": "1.03" }, "weak_first_local_noise_threshold": { - "type": "number", - "description": "weak first local noise threshold", + "type": "integer", + "description": "The parameter for determining whether it is noise", "default": "2" }, "roi_mode": { @@ -83,12 +83,12 @@ }, "visibility_error_threshold": { "type": "number", - "description": "visibility error threshold", + "description": "When the percentage of white pixels in the binary histogram falls below this parameter the diagnostic status becomes ERR", "default": "0.5" }, "visibility_warn_threshold": { "type": "number", - "description": "visibility warn threshold", + "description": "When the percentage of white pixels in the binary histogram falls below this parameter the diagnostic status becomes WARN", "default": "0.7" } }, diff --git a/sensing/pointcloud_preprocessor/schema/filter.schema.json b/sensing/pointcloud_preprocessor/schema/filter.schema.json index 1c77e63085981..f73d721bbffc5 100644 --- a/sensing/pointcloud_preprocessor/schema/filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/filter.schema.json @@ -16,10 +16,11 @@ "description": "output frame id", "default": "" }, - "max_queue_size": { - "type": "number", - "description": "max queue size of input/output topics", - "default": 5 + "max_queue_size": { + "type": "integer", + "minimum": 0, + "description": "max queue size of input/output topics", + "default": 5 }, "use_indices": { "type": "boolean", @@ -33,7 +34,7 @@ }, "approximate_sync": { "type": "boolean", - "description": "lag to use approximate sync option", + "description": "flag to use approximate sync option", "default": false } }, diff --git a/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json b/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json index 2510b7fae4b28..d205509c2541f 100644 --- a/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json @@ -7,12 +7,12 @@ "type": "object", "properties": { "filter_limit_min": { - "type": "number", + "type": "integer", "description": "minimum allowed field value", "default": "0" }, "filter_limit_max": { - "type": "number", + "type": "integer", "description": "maximum allowed field value", "default": "127" }, diff --git a/sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json b/sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json new file mode 100644 index 0000000000000..305e36f21a7b3 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameter for pointcloud accumulator", + "type": "object", + "definitions": { + "pointcloud_accumulator": { + "type": "object", + "properties": { + "accumulation_time_sec": { + "type": "number", + "description": "accumulation period [s]", + "default": "2.0" + }, + "pointcloud_buffer_size": { + "type": "integer", + "description": "buffer size", + "default": "50" + } + }, + "required": ["accumulation_time_sec", "pointcloud_buffer_size"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/approximate_downsample_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false + } + \ No newline at end of file diff --git a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json index 569bf79749a6f..59cfa72d2e215 100644 --- a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json @@ -6,11 +6,12 @@ "random_downsample_filter": { "type": "object", "properties": { - "sample_num": { - "type": "number", - "description": "number of indices to be sampled", - "default": "1500" - } + "sample_num": { + "type": "integer", + "minimum": 0, + "description": "number of indices to be sampled", + "default": "1500" + } }, "required": ["sample_num"], "additionalProperties": false diff --git a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json index 1549d7adcdce1..b7931986b47d3 100644 --- a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json @@ -17,20 +17,22 @@ "default": "0.1" }, "num_points_threshold": { - "type": "number", + "type": "integer", "description": "num_points_threshold", "default": "4" }, "max_rings_num": { - "type": "number", - "description": "max_rings_num", - "default": "128" - }, - "max_points_num_per_ring": { - "type": "number", - "description": "Set this value large enough such that HFoV / resolution < max_points_num_per_ring", - "default": "4000" + "type": "integer", + "minimum": 1, + "description": "max_rings_num", + "default": "128" }, + "max_points_num_per_ring": { + "type": "integer", + "minimum": 0, + "description": "Set this value large enough such that HFoV / resolution < max_points_num_per_ring", + "default": "4000" + }, "publish_outlier_pointcloud": { "type": "boolean", "description": "Flag to publish outlier pointcloud and visibility score. Due to performance concerns, please set to false during experiments.", @@ -52,17 +54,17 @@ "default": "12.0" }, "vertical_bins": { - "type": "number", + "type": "integer", "description": "The number of vertical bin for visibility histogram", "default": "128" }, "horizontal_bins": { - "type": "number", + "type": "integer", "description": "The number of horizontal bin for visibility histogram", "default": "36" }, "noise_threshold": { - "type": "number", + "type": "integer", "description": "The threshold value for distinguishing noise from valid points in the frequency image", "default": "2" } diff --git a/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json b/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json deleted file mode 100644 index 9c98445080dd2..0000000000000 --- a/sensing/pointcloud_preprocessor/schema/ring_passthrough_filter.schema.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Parameter for ring outlier filter", - "type": "object", - "definitions": { - "ring_outlier_filter": { - "type": "object", - "properties": { - "distance_ratio": { - "type": "number", - "description": "distance ratio", - "default": "1.03" - }, - "object_length_threshold": { - "type": "number", - "description": "object length threshold", - "default": "0.1" - }, - "num_points_threshold": { - "type": "integer", - "description": "number points threshold", - "default": "4" - }, - "max_rings_num": { - "type": "integer", - "description": "max rings number", - "default": "128" - }, - "max_points_num_per_ring": { - "type": "integer", - "description": "maximum points number per ring", - "default": "4000" - }, - "publish_outlier_pointcloud": { - "type": "boolean", - "description": "enable publish outlier pointcloud", - "default": "false" - }, - "min_azimuth_deg": { - "type": "number", - "description": "minimu azimuth degree", - "default": "0.0" - }, - "max_azimuth_deg": { - "type": "number", - "description": "maximum azimuth degree", - "default": "360.0" - }, - "max_distance": { - "type": "number", - "description": "maximum distance", - "default": "12.0" - }, - "vertical_bins": { - "type": "integer", - "description": "vertical bins", - "default": "128" - }, - "horizontal_bins": { - "type": "integer", - "description": "horizontal bins", - "default": "36" - }, - "noise_threshold": { - "type": "integer", - "description": "noise threshold", - "default": "2" - } - }, - "required": [ - "distance_ratio", - "object_length_threshold", - "num_points_threshold", - "max_rings_num", - "max_points_num_per_ring", - "publish_outlier_pointcloud", - "min_azimuth_deg", - "max_azimuth_deg", - "max_distance", - "vertical_bins", - "horizontal_bins", - "noise_threshold" - ], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/ring_outlier_filter" - } - }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false -} diff --git a/sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json b/sensing/pointcloud_preprocessor/schema/vector_map_inside_area_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/vector_map_insdie_area_filter.schema.json rename to sensing/pointcloud_preprocessor/schema/vector_map_inside_area_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json index 47972b04e2589..6cb35812e5372 100644 --- a/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json @@ -8,17 +8,17 @@ "properties": { "voxel_size_x": { "type": "number", - "description": "voxel size x [m]", + "description": "the voxel size along x-axis [m]", "default": "0.3" }, "voxel_size_y": { "type": "number", - "description": "voxel size y [m]", + "description": "the voxel size along y-axis [m]", "default": "0.3" }, "voxel_size_z": { "type": "number", - "description": "voxel size z [m]", + "description": "the voxel size along z-axis [m]", "default": "0.1" } }, diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json index 043f9b96eee3b..b108e550d9532 100644 --- a/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json @@ -22,7 +22,7 @@ "default": "0.1" }, "voxel_points_threshold": { - "type": "number", + "type": "integer", "description": "the minimum number of points in each voxel", "default": "2" } diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index b022871a2d9ba..a45de33d0d4c7 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -115,7 +115,7 @@ PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchro publish_synchronized_pointcloud_ = declare_parameter("publish_synchronized_pointcloud"); keep_input_frame_in_synchronized_pointcloud_ = declare_parameter("keep_input_frame_in_synchronized_pointcloud"); - synchronized_pointcloud_postfix_ = declare_parameter("synchronized_pointcloud_postfix"); + synchronized_pointcloud_postfix_ = declare_parameter("synchronized_pointcloud_postfix"); } // Initialize not_subscribed_topic_names_ diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp index ffb4fa1f7da91..87933efb77c31 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp @@ -58,7 +58,7 @@ RandomDownsampleFilterComponent::RandomDownsampleFilterComponent( { // set initial parameters { - sample_num_ = declare_parameter("sample_num"); + sample_num_ = declare_parameter("sample_num"); } using std::placeholders::_1; diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp index aa12e227165ab..f12945f68b7dc 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp @@ -28,7 +28,7 @@ RadiusSearch2DOutlierFilterComponent::RadiusSearch2DOutlierFilterComponent( { // set initial parameters { - min_neighbors_ = declare_parameter("min_neighbors"); + min_neighbors_ = declare_parameter("min_neighbors"); search_radius_ = declare_parameter("search_radius"); } diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp index 8e38d203269a4..3bc43df2e4557 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp @@ -47,7 +47,7 @@ RingOutlierFilterComponent::RingOutlierFilterComponent(const rclcpp::NodeOptions object_length_threshold_ = declare_parameter("object_length_threshold"); num_points_threshold_ = declare_parameter("num_points_threshold"); max_rings_num_ = declare_parameter("max_rings_num"); - max_points_num_per_ring_ = declare_parameter("max_points_num_per_ring"); + max_points_num_per_ring_ = declare_parameter("max_points_num_per_ring"); publish_outlier_pointcloud_ = declare_parameter("publish_outlier_pointcloud"); min_azimuth_deg_ = declare_parameter("min_azimuth_deg"); diff --git a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp index a28415dae2a56..ef46d45d8f3ed 100644 --- a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp @@ -24,7 +24,7 @@ PointcloudAccumulatorComponent::PointcloudAccumulatorComponent(const rclcpp::Nod // set initial parameters { accumulation_time_sec_ = declare_parameter("accumulation_time_sec"); - pointcloud_buffer_.set_capacity(declare_parameter("pointcloud_buffer_size")); + pointcloud_buffer_.set_capacity(declare_parameter("pointcloud_buffer_size")); } using std::placeholders::_1; From 48f858a88457842fd8ca271ed21e958905cc8a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Fatih=20C=C4=B1r=C4=B1t?= Date: Tue, 2 Jul 2024 18:05:25 +0300 Subject: [PATCH 018/306] ci(codecov.yaml): make ci succeed regardless of coverage (#7793) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: M. Fatih Cırıt --- codecov.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/codecov.yaml b/codecov.yaml index 8ca2196768dac..a4f3298cd4ab6 100644 --- a/codecov.yaml +++ b/codecov.yaml @@ -1,11 +1,15 @@ +# https://docs.codecov.com/docs/commit-status#project-status + coverage: status: project: default: - target: auto + target: 0% # Make CI always succeed + threshold: 100% # Make CI always succeed patch: default: - target: auto + target: 0% # Make CI always succeed + threshold: 100% # Make CI always succeed comment: show_carryforward_flags: true From e4df5dc74e480cca2654c7052c200300ffb12a32 Mon Sep 17 00:00:00 2001 From: Kotaro Yoshimoto Date: Wed, 3 Jul 2024 09:21:45 +0900 Subject: [PATCH 019/306] chore(ci): add problem matcher for cppcheck (#7794) * chore(ci): add problem matcher for cppcheck Signed-off-by: Kotaro Yoshimoto * chore(ci): setup problem matcher in cppcheck-differential Signed-off-by: Kotaro Yoshimoto * test(ci): add diff to occur cppcheck errors Signed-off-by: Kotaro Yoshimoto * style(pre-commit): autofix * Revert "test(ci): add diff to occur cppcheck errors " This reverts commit 1c00fd5978bf64957e9d685253ba9ebe1642c196. Signed-off-by: Kotaro Yoshimoto * chore(ci): setup problem matchers cppcheck-daily Signed-off-by: Kotaro Yoshimoto --------- Signed-off-by: Kotaro Yoshimoto Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/cppcheck-problem-matcher.json | 16 ++++++++++++++++ .github/workflows/cppcheck-daily.yaml | 1 + .github/workflows/cppcheck-differential.yaml | 4 ++++ 3 files changed, 21 insertions(+) create mode 100644 .github/cppcheck-problem-matcher.json diff --git a/.github/cppcheck-problem-matcher.json b/.github/cppcheck-problem-matcher.json new file mode 100644 index 0000000000000..3b18feccd9bd2 --- /dev/null +++ b/.github/cppcheck-problem-matcher.json @@ -0,0 +1,16 @@ +{ + "problemMatcher": [ + { + "owner": "cppcheck", + "pattern": [ + { + "regexp": "^([^:]+):(\\d+):(\\d*):\\s(style|portability|performance|warning|error):\\s(.*)$", + "file": 1, + "line": 2, + "column": 3, + "message": 5 + } + ] + } + ] +} diff --git a/.github/workflows/cppcheck-daily.yaml b/.github/workflows/cppcheck-daily.yaml index 34779b586bd6e..6defc8de4894a 100644 --- a/.github/workflows/cppcheck-daily.yaml +++ b/.github/workflows/cppcheck-daily.yaml @@ -18,6 +18,7 @@ jobs: run: | sudo snap install cppcheck + # cspell: ignore suppr - name: Run Cppcheck on all files continue-on-error: true id: cppcheck diff --git a/.github/workflows/cppcheck-differential.yaml b/.github/workflows/cppcheck-differential.yaml index d34247dcef24e..90fae29730afb 100644 --- a/.github/workflows/cppcheck-differential.yaml +++ b/.github/workflows/cppcheck-differential.yaml @@ -53,6 +53,7 @@ jobs: done echo "full-paths=$paths" >> $GITHUB_OUTPUT + # cspell: ignore suppr - name: Run Cppcheck on modified packages if: ${{ steps.get-modified-packages.outputs.modified-packages != '' }} continue-on-error: true @@ -62,6 +63,9 @@ jobs: cppcheck --enable=all --inconclusive --check-level=exhaustive --error-exitcode=1 --suppressions-list=.cppcheck_suppressions --inline-suppr ${{ steps.get-full-paths.outputs.full-paths }} 2> cppcheck-report.txt shell: bash + - name: Setup Problem Matchers for cppcheck + run: echo "::add-matcher::.github/cppcheck-problem-matcher.json" + - name: Show cppcheck-report result if: ${{ steps.get-modified-packages.outputs.modified-packages != '' }} run: | From 69bcf9bc1dfa5de9873516d3f2b013700dd69847 Mon Sep 17 00:00:00 2001 From: atsushi yano <55824710+atsushi421@users.noreply.github.com> Date: Wed, 3 Jul 2024 00:42:50 +0000 Subject: [PATCH 020/306] fix(faster_voxel_grid_downsample_filter): typo in if statement in get_min_max_voxel() (#7796) fix if condition in get_min_max_voxel() Signed-off-by: atsushi421 --- .../downsample_filter/faster_voxel_grid_downsample_filter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp index 9c07a4ec47cba..0ca28f5f9a455 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp @@ -107,7 +107,7 @@ bool FasterVoxelGridDownsampleFilter::get_min_max_voxel( for (size_t global_offset = 0; global_offset + input->point_step <= input->data.size(); global_offset += input->point_step) { Eigen::Vector4f point = get_point_from_global_offset(input, global_offset); - if (std::isfinite(point[0]) && std::isfinite(point[1]), std::isfinite(point[2])) { + if (std::isfinite(point[0]) && std::isfinite(point[1]) && std::isfinite(point[2])) { min_point = min_point.cwiseMin(point.head<3>()); max_point = max_point.cwiseMax(point.head<3>()); } From 998a30bd8663b9d82e4646567ffd134fc948e520 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Wed, 3 Jul 2024 09:46:26 +0900 Subject: [PATCH 021/306] feat(autoware_behavior_path_planner): remove max_module_size param (#7764) * feat(behavior_path_planner): remove max_module_size param The max_module_size param has been removed from the behavior_path_planner scene_module_manager.param.yaml file. This param was unnecessary and has been removed to simplify the configuration. Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../config/scene_module_manager.param.yaml | 11 ----------- .../docs/behavior_path_planner_manager_design.md | 2 -- .../interface/scene_module_manager_interface.hpp | 12 ++++++++++-- .../behavior_path_planner_common/parameters.hpp | 1 - 4 files changed, 10 insertions(+), 16 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/config/scene_module_manager.param.yaml b/planning/behavior_path_planner/autoware_behavior_path_planner/config/scene_module_manager.param.yaml index 6cf8719b2ef83..ef6cb82d1412a 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/config/scene_module_manager.param.yaml +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/config/scene_module_manager.param.yaml @@ -9,7 +9,6 @@ enable_simultaneous_execution_as_candidate_module: true keep_last: false priority: 6 - max_module_size: 1 external_request_lane_change_right: enable_rtc: false @@ -17,7 +16,6 @@ enable_simultaneous_execution_as_candidate_module: true keep_last: false priority: 6 - max_module_size: 1 lane_change_left: enable_rtc: false @@ -25,7 +23,6 @@ enable_simultaneous_execution_as_candidate_module: true keep_last: false priority: 5 - max_module_size: 1 lane_change_right: enable_rtc: false @@ -33,7 +30,6 @@ enable_simultaneous_execution_as_candidate_module: true keep_last: false priority: 5 - max_module_size: 1 start_planner: enable_rtc: false @@ -41,7 +37,6 @@ enable_simultaneous_execution_as_candidate_module: false keep_last: false priority: 0 - max_module_size: 1 side_shift: enable_rtc: false @@ -49,7 +44,6 @@ enable_simultaneous_execution_as_candidate_module: false keep_last: false priority: 2 - max_module_size: 1 goal_planner: enable_rtc: false @@ -57,7 +51,6 @@ enable_simultaneous_execution_as_candidate_module: false keep_last: true priority: 1 - max_module_size: 1 static_obstacle_avoidance: enable_rtc: false @@ -65,7 +58,6 @@ enable_simultaneous_execution_as_candidate_module: false keep_last: false priority: 4 - max_module_size: 1 avoidance_by_lane_change: enable_rtc: false @@ -73,7 +65,6 @@ enable_simultaneous_execution_as_candidate_module: false keep_last: false priority: 3 - max_module_size: 1 dynamic_obstacle_avoidance: enable_rtc: false @@ -81,7 +72,6 @@ enable_simultaneous_execution_as_candidate_module: true keep_last: false priority: 7 - max_module_size: 1 sampling_planner: enable_module: true @@ -90,4 +80,3 @@ enable_simultaneous_execution_as_candidate_module: false keep_last: true priority: 16 - max_module_size: 1 diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/docs/behavior_path_planner_manager_design.md b/planning/behavior_path_planner/autoware_behavior_path_planner/docs/behavior_path_planner_manager_design.md index 5ffdcafdb2497..09627d2d5d91e 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/docs/behavior_path_planner_manager_design.md +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/docs/behavior_path_planner_manager_design.md @@ -88,7 +88,6 @@ struct ModuleConfigParameters bool enable_simultaneous_execution_as_approved_module{false}; bool enable_simultaneous_execution_as_candidate_module{false}; uint8_t priority{0}; - uint8_t max_module_size{0}; }; ``` @@ -101,7 +100,6 @@ Code is [here](https://github.com/autowarefoundation/autoware.universe/blob/b173 | `enable_simultaneous_execution_as_candidate_module` | bool | if true, the manager allows its scene modules to run with other scene modules as **candidate module**. | | `enable_simultaneous_execution_as_approved_module` | bool | if true, the manager allows its scene modules to run with other scene modules as **approved module**. | | `priority` | uint8_t | the manager decides execution priority based on this parameter. The smaller the number is, the higher the priority is. | -| `max_module_size` | uint8_t | the sub-manager can run some modules simultaneously. this parameter set the maximum number of the launched modules. | ### Scene modules diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_manager_interface.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_manager_interface.hpp index 5b9c0389e29c5..fab9a6ba45113 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_manager_interface.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_manager_interface.hpp @@ -205,7 +205,16 @@ class SceneModuleManagerInterface }); } - bool canLaunchNewModule() const { return observers_.size() < config_.max_module_size; } + /** + * Determine if a new module can be launched. It ensures that only one instance of a particular + * scene module type is registered at a time. + * + * When this returns true: + * - A new instance of the scene module can be launched. + * - No other instance of the same name of scene module is currently active or registered. + * + */ + bool canLaunchNewModule() const { return observers_.empty(); } /** * Determine if the module is always executable, regardless of the state of other modules. @@ -290,7 +299,6 @@ class SceneModuleManagerInterface *node, ns + "enable_simultaneous_execution_as_candidate_module"); config_.keep_last = getOrDeclareParameter(*node, ns + "keep_last"); config_.priority = getOrDeclareParameter(*node, ns + "priority"); - config_.max_module_size = getOrDeclareParameter(*node, ns + "max_module_size"); } // init rtc configuration diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/parameters.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/parameters.hpp index bbc249f5a0daf..a45e8366f45d8 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/parameters.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/parameters.hpp @@ -25,7 +25,6 @@ struct ModuleConfigParameters bool enable_simultaneous_execution_as_candidate_module{false}; bool keep_last{false}; uint8_t priority{0}; - uint8_t max_module_size{0}; }; struct BehaviorPathPlannerParameters From 38b5e246b57d0428cfd43b628a73c1366ec93c51 Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Wed, 3 Jul 2024 10:19:09 +0900 Subject: [PATCH 022/306] fix(lidar_apollo_segmentation_tvm): add virtual destructor to lidar_apollo_segmentation_tvm (#7762) * fix(lidar_apollo_segmentation_tvm): add virtual destructor to lidar_apollo_segmentation_tvm Signed-off-by: Y.Hisaki * small change Signed-off-by: Y.Hisaki --------- Signed-off-by: Y.Hisaki --- .../lidar_apollo_segmentation_tvm/feature_generator.hpp | 2 -- .../include/lidar_apollo_segmentation_tvm/feature_map.hpp | 3 ++- .../lidar_apollo_segmentation_tvm.hpp | 5 ----- .../src/feature_generator.cpp | 5 +---- .../src/lidar_apollo_segmentation_tvm.cpp | 7 +------ 5 files changed, 4 insertions(+), 18 deletions(-) diff --git a/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/feature_generator.hpp b/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/feature_generator.hpp index 5cecda966d198..84cf7957d2e7e 100644 --- a/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/feature_generator.hpp +++ b/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/feature_generator.hpp @@ -37,8 +37,6 @@ namespace lidar_apollo_segmentation_tvm class LIDAR_APOLLO_SEGMENTATION_TVM_LOCAL FeatureGenerator { private: - const bool use_intensity_feature_; - const bool use_constant_feature_; const float min_height_; const float max_height_; std::shared_ptr map_ptr_; diff --git a/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/feature_map.hpp b/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/feature_map.hpp index 349dfc7f1f0ad..f78f11c8aed56 100644 --- a/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/feature_map.hpp +++ b/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/feature_map.hpp @@ -15,7 +15,7 @@ #ifndef LIDAR_APOLLO_SEGMENTATION_TVM__FEATURE_MAP_HPP_ #define LIDAR_APOLLO_SEGMENTATION_TVM__FEATURE_MAP_HPP_ -#include +#include #include namespace autoware @@ -45,6 +45,7 @@ struct FeatureMapInterface virtual void initializeMap(std::vector & map) = 0; virtual void resetMap(std::vector & map) = 0; explicit FeatureMapInterface(int32_t _channels, int32_t _width, int32_t _height, int32_t _range); + virtual ~FeatureMapInterface() {} }; /// \brief FeatureMap with no extra feature channels. diff --git a/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/lidar_apollo_segmentation_tvm.hpp b/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/lidar_apollo_segmentation_tvm.hpp index 7f8c5f51f73a6..044f319c4d335 100644 --- a/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/lidar_apollo_segmentation_tvm.hpp +++ b/perception/lidar_apollo_segmentation_tvm/include/lidar_apollo_segmentation_tvm/lidar_apollo_segmentation_tvm.hpp @@ -164,12 +164,7 @@ class LIDAR_APOLLO_SEGMENTATION_TVM_PUBLIC ApolloLidarSegmentation tvm_utility::Version version_check() const; private: - const int32_t range_; - const float score_threshold_; const float z_offset_; - const float objectness_thresh_; - const int32_t min_pts_num_; - const float height_thresh_; const pcl::PointCloud::Ptr pcl_pointcloud_ptr_; // Earliest supported model version. const std::array model_version_from{2, 0, 0}; diff --git a/perception/lidar_apollo_segmentation_tvm/src/feature_generator.cpp b/perception/lidar_apollo_segmentation_tvm/src/feature_generator.cpp index edf8276065163..fd038efc60ffb 100644 --- a/perception/lidar_apollo_segmentation_tvm/src/feature_generator.cpp +++ b/perception/lidar_apollo_segmentation_tvm/src/feature_generator.cpp @@ -35,10 +35,7 @@ inline float normalizeIntensity(float intensity) FeatureGenerator::FeatureGenerator( const int32_t width, const int32_t height, const int32_t range, const bool use_intensity_feature, const bool use_constant_feature, const float min_height, const float max_height) -: use_intensity_feature_(use_intensity_feature), - use_constant_feature_(use_constant_feature), - min_height_(min_height), - max_height_(max_height) +: min_height_(min_height), max_height_(max_height) { // select feature map type if (use_constant_feature && use_intensity_feature) { diff --git a/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp b/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp index e78cd57b3a4a1..9d41770eb5331 100644 --- a/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp +++ b/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp @@ -109,12 +109,7 @@ ApolloLidarSegmentation::ApolloLidarSegmentation( int32_t range, float score_threshold, bool use_intensity_feature, bool use_constant_feature, float z_offset, float min_height, float max_height, float objectness_thresh, int32_t min_pts_num, float height_thresh, const std::string & data_path) -: range_(range), - score_threshold_(score_threshold), - z_offset_(z_offset), - objectness_thresh_(objectness_thresh), - min_pts_num_(min_pts_num), - height_thresh_(height_thresh), +: z_offset_(z_offset), pcl_pointcloud_ptr_(new pcl::PointCloud), PreP(std::make_shared( config, range, use_intensity_feature, use_constant_feature, min_height, max_height)), From de3d511f986af7d4a1db275e1aa7d805105d5b0b Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Wed, 3 Jul 2024 10:20:03 +0900 Subject: [PATCH 023/306] fix(detected_object_validation): add virtual destructor to obstacle_pointcloud_based_validator (#7761) fix(obstacle_pointcloud_based_validator): add virtual destructor to obstacle_pointcloud_based_validator Signed-off-by: Y.Hisaki --- .../obstacle_pointcloud_based_validator/debugger.hpp | 3 --- .../obstacle_pointcloud_based_validator.hpp | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/debugger.hpp b/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/debugger.hpp index afb1f8a729567..d338580d95418 100644 --- a/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/debugger.hpp +++ b/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/debugger.hpp @@ -24,9 +24,6 @@ #include #include -#include -#include - namespace obstacle_pointcloud_based_validator { class Debugger diff --git a/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp b/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp index 47685dec7dbdc..a16bb63fd0c87 100644 --- a/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp +++ b/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp @@ -75,6 +75,8 @@ class Validator const autoware_perception_msgs::msg::DetectedObject & object) = 0; size_t getThresholdPointCloud(const autoware_perception_msgs::msg::DetectedObject & object); virtual pcl::PointCloud::Ptr getDebugNeighborPointCloud() = 0; + + virtual ~Validator() = default; }; class Validator2D : public Validator From 6cffcccc451a96193ee333a92c0199a679c14f4e Mon Sep 17 00:00:00 2001 From: Esteve Fernandez <33620+esteve@users.noreply.github.com> Date: Wed, 3 Jul 2024 03:20:18 +0200 Subject: [PATCH 024/306] refactor(livox_tag_filter): prefix package and namespace with autoware (#7788) Signed-off-by: Esteve Fernandez --- .../autoware_livox_tag_filter/CMakeLists.txt | 26 +++++++++++++++++++ .../README.md | 0 .../config/livox_tag_filter.param.yaml | 0 .../launch/livox_tag_filter.launch.xml | 4 +-- .../package.xml | 4 +-- .../schema/livox_tag_filter.schema.json | 0 .../src}/livox_tag_filter_node.cpp | 8 +++--- .../src}/livox_tag_filter_node.hpp | 10 +++---- sensing/livox/livox_tag_filter/CMakeLists.txt | 25 ------------------ 9 files changed, 39 insertions(+), 38 deletions(-) create mode 100644 sensing/livox/autoware_livox_tag_filter/CMakeLists.txt rename sensing/livox/{livox_tag_filter => autoware_livox_tag_filter}/README.md (100%) rename sensing/livox/{livox_tag_filter => autoware_livox_tag_filter}/config/livox_tag_filter.param.yaml (100%) rename sensing/livox/{livox_tag_filter => autoware_livox_tag_filter}/launch/livox_tag_filter.launch.xml (52%) rename sensing/livox/{livox_tag_filter => autoware_livox_tag_filter}/package.xml (88%) rename sensing/livox/{livox_tag_filter => autoware_livox_tag_filter}/schema/livox_tag_filter.schema.json (100%) rename sensing/livox/{livox_tag_filter/src/livox_tag_filter_node => autoware_livox_tag_filter/src}/livox_tag_filter_node.cpp (92%) rename sensing/livox/{livox_tag_filter/include/livox_tag_filter => autoware_livox_tag_filter/src}/livox_tag_filter_node.hpp (84%) delete mode 100644 sensing/livox/livox_tag_filter/CMakeLists.txt diff --git a/sensing/livox/autoware_livox_tag_filter/CMakeLists.txt b/sensing/livox/autoware_livox_tag_filter/CMakeLists.txt new file mode 100644 index 0000000000000..00f7693c58b18 --- /dev/null +++ b/sensing/livox/autoware_livox_tag_filter/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_livox_tag_filter) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +find_package(PCL REQUIRED) + +ament_auto_add_library(${PROJECT_NAME} SHARED + src/livox_tag_filter_node.cpp + src/livox_tag_filter_node.hpp +) + +target_link_libraries(${PROJECT_NAME} + ${PCL_LIBRARIES} +) + +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::livox_tag_filter::LivoxTagFilterNode" + EXECUTABLE ${PROJECT_NAME}_node +) + +ament_auto_package(INSTALL_TO_SHARE + launch + config +) diff --git a/sensing/livox/livox_tag_filter/README.md b/sensing/livox/autoware_livox_tag_filter/README.md similarity index 100% rename from sensing/livox/livox_tag_filter/README.md rename to sensing/livox/autoware_livox_tag_filter/README.md diff --git a/sensing/livox/livox_tag_filter/config/livox_tag_filter.param.yaml b/sensing/livox/autoware_livox_tag_filter/config/livox_tag_filter.param.yaml similarity index 100% rename from sensing/livox/livox_tag_filter/config/livox_tag_filter.param.yaml rename to sensing/livox/autoware_livox_tag_filter/config/livox_tag_filter.param.yaml diff --git a/sensing/livox/livox_tag_filter/launch/livox_tag_filter.launch.xml b/sensing/livox/autoware_livox_tag_filter/launch/livox_tag_filter.launch.xml similarity index 52% rename from sensing/livox/livox_tag_filter/launch/livox_tag_filter.launch.xml rename to sensing/livox/autoware_livox_tag_filter/launch/livox_tag_filter.launch.xml index 331db891358f7..9b3fa9bcbcaf8 100644 --- a/sensing/livox/livox_tag_filter/launch/livox_tag_filter.launch.xml +++ b/sensing/livox/autoware_livox_tag_filter/launch/livox_tag_filter.launch.xml @@ -1,9 +1,9 @@ - + - + diff --git a/sensing/livox/livox_tag_filter/package.xml b/sensing/livox/autoware_livox_tag_filter/package.xml similarity index 88% rename from sensing/livox/livox_tag_filter/package.xml rename to sensing/livox/autoware_livox_tag_filter/package.xml index 2b3d429480ef7..e9f588db6479c 100644 --- a/sensing/livox/livox_tag_filter/package.xml +++ b/sensing/livox/autoware_livox_tag_filter/package.xml @@ -1,9 +1,9 @@ - livox_tag_filter + autoware_livox_tag_filter 0.1.0 - The livox_tag_filter package + The autoware_livox_tag_filter package Ryohsuke Mitsudome Kenzo Lobos-Tsunekawa Apache License 2.0 diff --git a/sensing/livox/livox_tag_filter/schema/livox_tag_filter.schema.json b/sensing/livox/autoware_livox_tag_filter/schema/livox_tag_filter.schema.json similarity index 100% rename from sensing/livox/livox_tag_filter/schema/livox_tag_filter.schema.json rename to sensing/livox/autoware_livox_tag_filter/schema/livox_tag_filter.schema.json diff --git a/sensing/livox/livox_tag_filter/src/livox_tag_filter_node/livox_tag_filter_node.cpp b/sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.cpp similarity index 92% rename from sensing/livox/livox_tag_filter/src/livox_tag_filter_node/livox_tag_filter_node.cpp rename to sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.cpp index 9a131db7d3c8e..10da7b931f4ae 100644 --- a/sensing/livox/livox_tag_filter/src/livox_tag_filter_node/livox_tag_filter_node.cpp +++ b/sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "livox_tag_filter/livox_tag_filter_node.hpp" +#include "livox_tag_filter_node.hpp" #include @@ -34,7 +34,7 @@ POINT_CLOUD_REGISTER_POINT_STRUCT( LivoxPoint, (float, x, x)(float, y, y)(float, z, z)(float, intensity, intensity)( std::uint8_t, tag, tag)(std::uint8_t, line, line)) -namespace livox_tag_filter +namespace autoware::livox_tag_filter { LivoxTagFilterNode::LivoxTagFilterNode(const rclcpp::NodeOptions & node_options) : Node("livox_tag_filter", node_options) @@ -84,7 +84,7 @@ void LivoxTagFilterNode::onPointCloud(const sensor_msgs::msg::PointCloud2::Const pub_pointcloud_->publish(std::move(tag_filtered_msg_ptr)); } -} // namespace livox_tag_filter +} // namespace autoware::livox_tag_filter #include -RCLCPP_COMPONENTS_REGISTER_NODE(livox_tag_filter::LivoxTagFilterNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::livox_tag_filter::LivoxTagFilterNode) diff --git a/sensing/livox/livox_tag_filter/include/livox_tag_filter/livox_tag_filter_node.hpp b/sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.hpp similarity index 84% rename from sensing/livox/livox_tag_filter/include/livox_tag_filter/livox_tag_filter_node.hpp rename to sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.hpp index 8968f61262934..96d80707c3c63 100644 --- a/sensing/livox/livox_tag_filter/include/livox_tag_filter/livox_tag_filter_node.hpp +++ b/sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIVOX_TAG_FILTER__LIVOX_TAG_FILTER_NODE_HPP_ -#define LIVOX_TAG_FILTER__LIVOX_TAG_FILTER_NODE_HPP_ +#ifndef LIVOX_TAG_FILTER_NODE_HPP_ +#define LIVOX_TAG_FILTER_NODE_HPP_ #include @@ -22,7 +22,7 @@ #include #include -namespace livox_tag_filter +namespace autoware::livox_tag_filter { class LivoxTagFilterNode : public rclcpp::Node { @@ -41,6 +41,6 @@ class LivoxTagFilterNode : public rclcpp::Node // Publisher rclcpp::Publisher::SharedPtr pub_pointcloud_; }; -} // namespace livox_tag_filter +} // namespace autoware::livox_tag_filter -#endif // LIVOX_TAG_FILTER__LIVOX_TAG_FILTER_NODE_HPP_ +#endif // LIVOX_TAG_FILTER_NODE_HPP_ diff --git a/sensing/livox/livox_tag_filter/CMakeLists.txt b/sensing/livox/livox_tag_filter/CMakeLists.txt deleted file mode 100644 index 36c500aefa74d..0000000000000 --- a/sensing/livox/livox_tag_filter/CMakeLists.txt +++ /dev/null @@ -1,25 +0,0 @@ -cmake_minimum_required(VERSION 3.14) -project(livox_tag_filter) - -find_package(autoware_cmake REQUIRED) -autoware_package() - -find_package(PCL REQUIRED) - -ament_auto_add_library(livox_tag_filter SHARED - src/livox_tag_filter_node/livox_tag_filter_node.cpp -) - -target_link_libraries(livox_tag_filter - ${PCL_LIBRARIES} -) - -rclcpp_components_register_node(livox_tag_filter - PLUGIN "livox_tag_filter::LivoxTagFilterNode" - EXECUTABLE livox_tag_filter_node -) - -ament_auto_package(INSTALL_TO_SHARE - launch - config -) From 7a2de7dd5bec1a86f34a33c005c6fd42da452561 Mon Sep 17 00:00:00 2001 From: Kenzo Lobos Tsunekawa Date: Wed, 3 Jul 2024 11:12:05 +0900 Subject: [PATCH 025/306] chore: updated maintainers for the autoware_point_types package (#7797) Signed-off-by: Kenzo Lobos-Tsunekawa --- common/autoware_point_types/package.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/common/autoware_point_types/package.xml b/common/autoware_point_types/package.xml index e05b604e90d13..ef19431d86514 100644 --- a/common/autoware_point_types/package.xml +++ b/common/autoware_point_types/package.xml @@ -4,7 +4,8 @@ autoware_point_types 0.1.0 The point types definition to use point_cloud_msg_wrapper - Taichi Higashide + David Wong + Max Schmeller Apache License 2.0 ament_cmake_core From f58af9e7ac5409b1f85a0e7599982e7561a3892b Mon Sep 17 00:00:00 2001 From: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Date: Wed, 3 Jul 2024 11:29:42 +0900 Subject: [PATCH 026/306] fix(ground_segmentation): fix bug (#7771) --- launch/tier4_perception_launch/package.xml | 1 + .../src/ransac_ground_filter_nodelet.cpp | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index 6ec706a4aad32..57d4b209efeef 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -19,6 +19,7 @@ detected_object_feature_remover detected_object_validation detection_by_tracker + elevation_map_loader euclidean_cluster ground_segmentation image_projection_based_fusion diff --git a/perception/ground_segmentation/src/ransac_ground_filter_nodelet.cpp b/perception/ground_segmentation/src/ransac_ground_filter_nodelet.cpp index d7fa777dc58c9..aa224e7adc5bf 100644 --- a/perception/ground_segmentation/src/ransac_ground_filter_nodelet.cpp +++ b/perception/ground_segmentation/src/ransac_ground_filter_nodelet.cpp @@ -292,12 +292,13 @@ void RANSACGroundFilterComponent::filter( no_ground_cloud_msg_ptr->header = input->header; no_ground_cloud_msg_ptr->fields = input->fields; no_ground_cloud_msg_ptr->point_step = point_step; + no_ground_cloud_msg_ptr->data.resize(input->data.size()); size_t output_size = 0; // use not downsampled pointcloud for extract pointcloud that higher than height threshold for (size_t global_size = 0; global_size < input->data.size(); global_size += point_step) { - float x = *reinterpret_cast(input->data[global_size + x_offset]); - float y = *reinterpret_cast(input->data[global_size + y_offset]); - float z = *reinterpret_cast(input->data[global_size + z_offset]); + float x = *reinterpret_cast(&input->data[global_size + x_offset]); + float y = *reinterpret_cast(&input->data[global_size + y_offset]); + float z = *reinterpret_cast(&input->data[global_size + z_offset]); const Eigen::Vector3d transformed_point = plane_affine.inverse() * Eigen::Vector3d(x, y, z); if (std::abs(transformed_point.z()) > height_threshold_) { std::memcpy( From 5e04dae16f86fa298946717f13addc35971d9a7d Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Wed, 3 Jul 2024 11:31:44 +0900 Subject: [PATCH 027/306] fix(euclidean_cluster): fix max_cluster_size bug (#7734) Signed-off-by: badai-nguyen --- .../lib/voxel_grid_based_euclidean_cluster.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp b/perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp index 34c52bb7836b8..126f877afddb0 100644 --- a/perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp +++ b/perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp @@ -117,7 +117,7 @@ bool VoxelGridBasedEuclideanCluster::cluster( voxel_grid_.getCentroidIndexAt(voxel_grid_.getGridCoordinates(point.x, point.y, point.z)); if (map.find(index) != map.end()) { auto & cluster_data_size = clusters_data_size.at(map[index]); - if (cluster_data_size + point_step > std::size_t(max_cluster_size_ * point_step)) { + if (cluster_data_size > std::size_t(max_cluster_size_ * point_step)) { continue; } std::memcpy( From 30baa82e1a78cfb4e772878c438219b1c8c6c517 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Wed, 3 Jul 2024 12:23:18 +0900 Subject: [PATCH 028/306] test(ground_segmentation): add ransac_ground_filter test and update test pcd file (#7776) * chore(ground_segmentation test): add intensity Signed-off-by: badai-nguyen * chore: add ransac ground segmentation test Signed-off-by: badai-nguyen * style(pre-commit): autofix --------- Signed-off-by: badai-nguyen Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- perception/ground_segmentation/CMakeLists.txt | 7 + .../ground_segmentation/test/data/test.pcd | 131080 +++++++-------- .../test/test_ransac_ground_filter.cpp | 228 + .../test/test_ray_ground_filter.cpp | 50 +- .../test/test_scan_ground_filter.cpp | 45 +- 5 files changed, 65862 insertions(+), 65548 deletions(-) create mode 100644 perception/ground_segmentation/test/test_ransac_ground_filter.cpp diff --git a/perception/ground_segmentation/CMakeLists.txt b/perception/ground_segmentation/CMakeLists.txt index 656ffec486c3c..9531437e80752 100644 --- a/perception/ground_segmentation/CMakeLists.txt +++ b/perception/ground_segmentation/CMakeLists.txt @@ -100,4 +100,11 @@ if(BUILD_TESTING) ground_segmentation ${YAML_CPP_LIBRARIES} ) + ament_add_ros_isolated_gtest(test_ransac_ground_filter + test/test_ransac_ground_filter.cpp + ) + target_link_libraries(test_ransac_ground_filter + ground_segmentation + ${YAML_CPP_LIBRARIES}) + endif() diff --git a/perception/ground_segmentation/test/data/test.pcd b/perception/ground_segmentation/test/data/test.pcd index f9ad91ab980c1..2df8ca09a18f9 100644 --- a/perception/ground_segmentation/test/data/test.pcd +++ b/perception/ground_segmentation/test/data/test.pcd @@ -1,65547 +1,65547 @@ # .PCD v0.7 - Point Cloud Data file format VERSION 0.7 -FIELDS x y z -SIZE 4 4 4 -TYPE F F F -COUNT 1 1 1 +FIELDS x y z intensity +SIZE 4 4 4 4 +TYPE F F F F +COUNT 1 1 1 1 WIDTH 1024 HEIGHT 64 VIEWPOINT 0 0 0 1 0 0 0 POINTS 65536 DATA ascii --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -3.5351443 13.340423 5.4857445 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9488316 -2.2632864 3.2971976 -7.969614 -2.3221679 3.3115354 -0 -0 0 -0 -0 0 -0 -0 0 -7.9979534 -2.5449817 3.3479314 -7.9919157 -2.5971713 3.3519754 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.3939185 -2.2862976 1.9880397 -4.3830962 -2.3149531 1.9895103 -4.3425841 -2.3277383 1.9777459 -4.3355713 -2.3583412 1.9810547 -4.3120642 -2.3799541 1.9770106 -4.2689838 -2.3904581 1.9641433 -4.226747 -2.4009831 1.9516436 -4.2022672 -2.421299 1.9472319 -4.1961622 -2.4522016 1.9512759 -4.0786486 -2.4171882 1.9042183 -4.0924315 -2.4594212 1.9174533 -4.0486789 -2.4670575 1.9042183 -3.5857356 -2.2150939 1.6961354 -3.6603353 -2.2923615 1.7373109 -3.9154494 -2.4858129 1.8634106 -3.9704947 -2.5551016 1.896498 -3.8963318 -2.5412979 1.8689251 -3.8643763 -2.5543842 1.8612047 -0 -0 0 -0 -0 0 -0 -0 0 -4.0545526 -2.8255713 1.983628 -4.1655059 -2.9410751 2.0457587 -0 -0 0 -2.9402294 -2.1300862 1.465259 -2.9308519 -2.1508391 1.4670972 -2.9026759 -2.1576812 1.4597443 -3.7584021 -2.830193 1.8898804 -3.729876 -2.8447387 1.8843659 -3.560034 -2.7498541 1.8082649 -2.903774 -2.2712555 1.4873172 -3.2279439 -2.5570679 1.657901 -2.8372459 -2.2758653 1.4678324 -2.8520942 -2.3166943 1.4825379 -2.8529043 -2.3465614 1.4902583 -4.0857925 -3.4035554 2.1321537 -2.9418752 -2.4809532 1.5512862 -3.968065 -3.3887992 2.0928164 -3.0216296 -2.612391 1.6090053 -3.0048437 -2.6302695 1.6086377 -2.8209605 -2.4999571 1.5200369 -2.7502079 -2.4675174 1.490626 -2.7370803 -2.4862223 1.4917289 -2.7265639 -2.5073781 1.4943023 -2.7097666 -2.5227928 1.4935671 -2.7307694 -2.5738277 1.5134195 -3.9565771 -3.776047 2.1920786 -2.922313 -2.8230159 1.6362104 -2.9428232 -2.8779671 1.6571658 -2.9647501 -2.9352386 1.6792241 -3.0267956 -3.0337141 1.7240759 -3.2267456 -3.2741785 1.8472345 -2.7448459 -2.8193479 1.5854765 -2.8125589 -2.9246423 1.6340046 -2.8419425 -2.9917531 1.6612098 -2.8413439 -3.0281284 1.6715037 -2.9010746 -3.1301036 1.7170907 -2.8403811 -3.1025622 1.6928266 -2.9740608 -3.288969 1.7828979 -2.9216201 -3.27108 1.7637807 -2.8861182 -3.2715065 1.7545898 -2.8916416 -3.3186088 1.7700306 -2.8178585 -3.2742455 1.7376785 -2.7182388 -3.1979189 1.6891503 -2.6573219 -3.1653798 1.6637833 -2.65921 -3.2074044 1.6770183 -2.5900083 -3.1632047 1.6461366 -2.5851634 -3.19712 1.6553277 -2.5202522 -3.156225 1.6266519 -2.6896348 -3.4112108 1.7472371 -3.2374752 -4.1586623 2.1134043 -2.7036643 -3.5169663 1.7836332 -3.1980014 -4.2136374 2.1211245 -2.661417 -3.5513682 1.7843684 -2.6451054 -3.575109 1.7880448 -2.6286023 -3.598783 1.7917212 -2.6075585 -3.616353 1.7924565 -2.5815465 -3.6269801 1.789883 -2.5458829 -3.6237247 1.7806921 -2.5172436 -3.6301055 1.7762804 -2.4838967 -3.6293633 1.7685601 -0 -0 0 -2.0138299 -3.0210435 1.465259 -1.995766 -3.0341206 1.4656266 -1.9806536 -3.0517709 1.4682001 -1.9593848 -3.0599499 1.4663619 -1.9480187 -3.0837107 1.4718764 -1.8897341 -3.0324516 1.4424654 -1.8657378 -3.0352728 1.4384214 -1.8331047 -3.0235972 1.4277599 -1.7944851 -3.0012579 1.4123192 -1.4432333 -2.447331 1.1531346 -1.9252216 -3.3117361 1.544301 -1.4140165 -2.4664714 1.1538699 -1.4061716 -2.4880581 1.159752 -1.3605776 -2.4421954 1.1351203 -1.3415416 -2.4431596 1.1318116 -1.5273064 -2.8227546 1.298719 -1.4780405 -2.7721558 1.2718816 -1.3758643 -2.6189535 1.1994569 -1.2726371 -2.4588253 1.1244588 -1.4596828 -2.8635299 1.3005573 -1.5083795 -3.0046031 1.3590117 -1.5471606 -3.1297009 1.4101133 -1.2155716 -2.4968436 1.1277676 -1.6833229 -3.5133278 1.5700357 -1.6506341 -3.5000355 1.5597419 -1.3032149 -2.8073275 1.2534996 -1.3122176 -2.8728023 1.278499 -1.2812352 -2.8511059 1.2656317 -1.2479396 -2.8231835 1.250191 -0.96055067 -2.2089436 0.98218304 -0.98094124 -2.2943356 1.0163734 -1.4671522 -3.4922237 1.5273898 -1.451726 -3.515775 1.5336396 -0.95775992 -2.3594043 1.0365934 -0.94395304 -2.3669646 1.0373287 -1.3840559 -3.5349722 1.5306984 -0.92617327 -2.4078865 1.0498284 -1.034101 -2.7389631 1.1873249 -1.2651724 -3.4150715 1.4696707 -0.91946858 -2.5285463 1.0935773 -1.2212965 -3.4250836 1.4674648 -1.2824463 -3.6678033 1.5659916 -1.147539 -3.3474326 1.4288628 -1.0044848 -2.9894094 1.2766608 -0.92832136 -2.819711 1.203501 -0.91527796 -2.8386321 1.2090155 -0.88190609 -2.7936389 1.1880602 -0.86913449 -2.813216 1.1939423 -0.87200856 -2.8852689 1.2215152 -1.0609206 -3.5907371 1.5101107 -0.74529344 -2.5794404 1.0913714 -0.74156076 -2.6269298 1.1090181 -0.98428309 -3.5719984 1.4946699 -0.90323919 -3.3579288 1.4045987 -0.87696052 -3.3418174 1.3957754 -0.8720938 -3.4084051 1.4207748 -0.77364761 -3.1023574 1.2939398 -0.93363732 -3.8454344 1.5942998 -0.6883145 -2.9115889 1.2126919 -0.56100941 -2.4389904 1.0193144 -0.53651738 -2.3997266 1.0020355 -0.52985567 -2.4402378 1.0171087 -0.69069278 -3.2798038 1.3549676 -0.52457225 -2.5677502 1.0660044 -0.51925474 -2.6238372 1.0873275 -0.50820684 -2.6534638 1.097989 -0.48566574 -2.6226959 1.0843863 -0.46989065 -2.6274574 1.0851216 -0.45502153 -2.6376233 1.0880626 -0.43609169 -2.6238513 1.0814452 -0 -0 0 -1.1900495 -7.762095 3.1343341 -1.1526712 -7.8391781 3.1622744 -0.4601472 -3.2636645 1.3329093 -0.31973183 -2.3705482 0.97556555 -0.30376211 -2.3613963 0.97115391 -0.2902799 -2.3715239 0.97446269 -0.27636421 -2.3788033 0.97666848 -0.26358441 -2.3970942 0.98328596 -0.25278741 -2.4365935 0.99835908 -0.2726002 -2.7963135 1.1406349 -0.32369035 -3.5490437 1.438789 -0.30944133 -3.6399217 1.4740822 -0.28491774 -3.6139383 1.4630531 -0.2642138 -3.6360245 1.4711411 -0.14874732 -2.229893 0.9134348 -0.13773625 -2.275322 0.93108141 -0.1515798 -2.7924387 1.1354879 -0 -0 0 -0 -0 0 -0.10584817 -2.9555397 1.1990893 -0.09674453 -3.264751 1.3211449 -0.07662455 -3.2615643 1.3196745 -0.057400484 -3.3084648 1.3380563 -0.036806334 -3.2817872 1.3273948 -0.016379403 -3.2205741 1.3031307 --0.0033832951 -3.2215438 1.3034984 --0.023754396 -3.3014376 1.3351152 --0.043998457 -3.3002996 1.3347476 --0.064930029 -3.3343697 1.3483502 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.2875165 -3.6561685 1.5623153 --1.3096116 -3.6473243 1.5619477 --0 -0 0 --0 -0 0 --0 -0 0 --1.2623429 -3.2620118 1.4126868 --1.2768747 -3.2403631 1.4068046 --1.2925746 -3.2221115 1.4023929 --1.3672057 -3.3484123 1.4597443 --0 -0 0 --0 -0 0 --0 -0 0 --1.6324087 -3.7330129 1.6406221 --1.6942242 -3.8104403 1.6784889 --1.7191058 -3.8033624 1.6799593 --1.7280372 -3.7614794 1.6663568 --3.4012337 -7.2827697 3.2074938 --3.3617082 -7.0844979 3.1299224 --3.4010749 -7.0553608 3.126246 --3.435302 -7.015986 3.1181579 --1.5158021 -3.0497537 1.3762907 --1.5256811 -3.0229638 1.3685702 --1.5514156 -3.0276127 1.3748201 --1.5665278 -3.0114374 1.371879 --3.8539882 -7.2953944 3.291683 --3.8494501 -7.1798215 3.2505076 --3.8938768 -7.1568832 3.2508752 --0 -0 0 --1.963174 -3.5063548 1.6185639 --0 -0 0 --1.6604819 -2.8825824 1.3450414 --1.7443253 -2.9855349 1.3968784 --2.5319765 -4.2722263 1.9931866 --2.4340219 -4.0501914 1.8979685 --2.3741081 -3.8962257 1.8336319 --2.3114216 -3.7415707 1.7685601 --2.2548313 -3.6004455 1.7093704 --2.2494552 -3.5433683 1.6891503 --2.0068421 -3.1189981 1.4961405 --2.0015466 -3.069243 1.4784939 --2.0162375 -3.0506985 1.4755528 --3.0559394 -4.5616546 2.2005343 --3.3822131 -4.9820976 2.4104555 --5.5705485 -8.0968809 3.9151964 --5.9259624 -8.5011845 4.1265879 --5.617444 -7.9542336 3.8795354 --2.4865239 -3.4765773 1.7196642 --5.7479281 -7.9306288 3.9019616 --5.7810683 -7.8742228 3.8916676 --5.2070746 -7.0021439 3.4795458 --6.2706671 -8.3248425 4.1501169 --0 -0 0 --5.3561201 -6.9323382 3.4931483 --5.4266415 -6.9352269 3.5111625 --5.4667821 -6.8988843 3.509692 --5.5229812 -6.8826165 3.5185153 --0 -0 0 --5.6111627 -6.8193488 3.5210888 --3.2154152 -3.8600426 2.0159802 --5.7106171 -6.7691679 3.5310149 --5.7955399 -6.7849073 3.5574849 --0 -0 0 --2.5653198 -2.9306891 1.5696681 --3.1848421 -3.593298 1.9281148 --3.2142854 -3.5819924 1.9325265 --2.6782527 -2.9483502 1.6045936 --2.7107763 -2.9476006 1.6130493 --2.7357845 -2.9383969 1.6170933 --2.6810229 -2.844429 1.5751827 --2.6798017 -2.8084192 1.5645211 --3.6238074 -3.750788 2.0917137 --3.6545587 -3.7364583 2.0961251 --2.7441311 -2.7718306 1.5718739 --3.6645756 -3.6558704 2.0762727 --3.0416284 -2.9976826 1.7181937 --2.9079962 -2.8310995 1.6343722 --2.9192784 -2.8074033 1.6310636 --2.897332 -2.752301 1.6097406 --2.9114518 -2.7319269 1.60827 --3.1819541 -2.9491045 1.7450312 --3.2281199 -2.9552636 1.7601044 --3.1047533 -2.8075726 1.6847386 --3.0310392 -2.7073402 1.6365781 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --4.0260353 -3.2550223 2.0766404 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --4.1973372 -3.1856363 2.1130366 --0 -0 0 --0 -0 0 --4.0404425 -2.9510167 2.0078921 --4.0524378 -2.9218197 2.004951 --5.7965436 -4.1248894 2.8424296 --5.7479191 -4.0374074 2.8067689 --5.9415059 -4.1191325 2.8880167 --5.9336619 -4.0600224 2.8722084 --5.9337969 -4.0068879 2.8604438 --6.0116749 -4.0059772 2.8858109 --6.0454674 -3.9751446 2.8902225 --6.0947127 -3.9541686 2.9019871 --5.8548775 -3.7477822 2.7780931 --0 -0 0 --5.8593774 -3.6500895 2.758976 --6.6519008 -4.0871687 3.1163197 --5.8520279 -3.5465903 2.7350795 --0 -0 0 --5.8975129 -3.4759259 2.7361825 --7.3709908 -4.2833204 3.400136 --6.9573288 -3.9861174 3.1997736 --7.448103 -4.2067189 3.4115329 --8.5829649 -4.7782664 3.9133582 --5.3604932 -2.9418387 2.4472191 --7.0816903 -3.8296542 3.2126408 --5.3789544 -2.8666542 2.4394989 --7.1429749 -3.7502418 3.2192583 --7.0915041 -3.6679022 3.1861708 --7.4113755 -3.7758327 3.3181529 --6.7660689 -3.3950613 3.022572 --6.5841584 -3.2534051 2.9332361 --6.1498766 -2.9920983 2.733609 --5.5289569 -2.6483071 2.453469 --5.5249124 -2.6048181 2.4446456 --5.6707153 -2.6311216 2.5012619 --8.741827 -3.990366 3.8288016 --6.3278465 -2.8420353 2.7722108 --7.4408937 -3.2869997 3.2457283 --9.1157608 -3.9599135 3.9589453 --7.5157361 -3.2104137 3.2608013 --7.5344357 -3.1638777 3.2604337 --7.0370374 -2.904434 3.0394835 --7.0400748 -2.8552613 3.0332336 --7.0531421 -2.8102901 3.0313954 --0 -0 0 --0 -0 0 --0 -0 0 --11.876719 -4.3968048 5.0364914 --9.6377573 -3.5010831 4.0835743 --12.423872 -4.4267273 5.2438388 --0 -0 0 --12.581958 -4.3097863 5.2875876 --6.6447129 -2.2311912 2.8008866 --10.984507 -3.6127696 4.6012082 --12.161667 -3.9172733 5.0809755 --10.909163 -3.4402344 4.5519447 --8.6302633 -2.6637287 3.6004984 --6.5862746 -1.9889675 2.7497849 --6.6090579 -1.9516762 2.7541966 --6.6521826 -1.9201082 2.7670639 --10.963908 -3.0911138 4.5331955 --6.9110589 -1.9032298 2.8637526 --6.9172182 -1.859341 2.8615468 --6.9554844 -1.823935 2.872576 --8.8469801 -2.2616866 3.6398358 --8.8020334 -2.1927555 3.6159394 --7.1505589 -1.7350441 2.9387507 --7.0850415 -1.6731945 2.9078691 --9.7028913 -2.2282095 3.9655628 --8.9484997 -1.9973418 3.6545413 --8.8406134 -1.9164068 3.6060131 --8.6965828 -1.8294104 3.5431471 --12.220451 -2.4920003 4.9603901 --11.055835 -2.1840565 4.4850349 --12.245544 -2.3409765 4.9585519 --12.293514 -2.2720454 4.9721546 --12.074682 -2.1550901 4.8787746 --12.106009 -2.0841146 4.8861275 --0 -0 0 --12.306999 -1.9635129 4.9567142 --0 -0 0 --0 -0 0 --12.912019 -1.8169399 5.1846495 --12.359775 -1.6620073 4.9600224 --12.980387 -1.6643806 5.2033987 --12.585098 -1.5353028 5.042006 --12.480654 -1.444909 4.9967866 --12.347844 -1.3528196 4.9405379 --13.035825 -1.347235 5.2107515 --12.942953 -1.2574307 5.1706791 --12.948573 -1.1778222 5.1699438 --12.942583 -1.0972505 5.1647968 --12.960197 -1.018689 5.1692085 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --2.2283025 14.441788 5.6277099 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -3.5173154 13.328074 5.3104157 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9587998 -2.2579985 3.1991751 -7.9833579 -2.3179851 3.2145569 -0 -0 0 -0 -0 0 -0 -0 0 -7.9721351 -2.528451 3.2338736 -7.9760156 -2.5836496 3.2417433 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.5665121 -2.3713434 2.001184 -4.4742198 -2.358393 1.9675586 -4.4481368 -2.3796356 1.9625506 -4.4211411 -2.4002018 1.9571849 -4.3809733 -2.4133184 1.9460957 -4.3245082 -2.4169226 1.9278522 -4.2998481 -2.4378858 1.9235595 -4.2645698 -2.4525859 1.9146166 -0 -0 0 -4.1594014 -2.4605229 1.8813491 -4.1570392 -2.4936831 1.8870724 -3.5791581 -2.1770656 1.6348827 -4.096714 -2.5263748 1.873837 -4.1769505 -2.6113558 1.9171207 -4.229475 -2.6804204 1.9482419 -4.1257329 -2.650305 1.9085355 -4.0139146 -2.6134157 1.8648942 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -2.9812517 -2.0741069 1.4213262 -2.9951856 -2.1111879 1.4338462 -4.2688856 -3.0481434 2.0394595 -4.411274 -3.1908438 2.115653 -4.3577137 -3.1930161 2.099556 -2.9792175 -2.2113259 1.4513743 -2.954396 -2.221148 1.4460086 -0 -0 0 -3.5547788 -2.7413387 1.7497095 -2.85781 -2.2320478 1.4191798 -3.5230682 -2.7864926 1.7507826 -2.8586316 -2.2897143 1.4331307 -2.8633866 -2.3225043 1.4424313 -2.8259878 -2.3210661 1.4309845 -2.8325162 -2.3556764 1.4413582 -3.1709054 -2.6701195 1.61807 -3.1729393 -2.7052765 1.6273706 -2.9159236 -2.5172422 1.5057471 -2.9911327 -2.6143544 1.5518925 -2.910691 -2.5757306 1.5189826 -3.9069021 -3.500097 2.0394595 -3.9517601 -3.5842261 2.0738003 -4.0204935 -3.6917708 2.1210189 -2.6927042 -2.5033407 1.4384965 -2.9710882 -2.7962718 1.5930299 -2.9619882 -2.8221788 1.5973225 -2.6844838 -2.5894303 1.4588864 -2.5903668 -2.5295277 1.4170336 -2.5794466 -2.5499694 1.4195375 -2.6093006 -2.6113234 1.4442199 -3.0747807 -3.1150594 1.7067835 -3.0503933 -3.1285188 1.7039219 -3.1017566 -3.220484 1.7429129 -0 -0 0 -3.1988683 -3.4039197 1.8194642 -3.1086664 -3.3488889 1.7804731 -3.0262058 -3.3004527 1.7454169 -2.9833283 -3.2940433 1.7325392 -3.0128736 -3.3679614 1.7611564 -2.9463909 -3.3346038 1.7346854 -0 -0 0 -2.780859 -3.2262249 1.6617113 -2.7525353 -3.233273 1.6567034 -2.856456 -3.397331 1.7303928 -2.7568014 -3.3199675 1.6831744 -2.580035 -3.1462049 1.5887372 -2.5248275 -3.117712 1.5669166 -2.5342321 -3.1688781 1.5844446 -2.5147405 -3.1843684 1.5844446 -2.7691016 -3.5509748 1.7550752 -3.2349966 -4.2012148 2.0612803 -6.3218999 -8.3145418 4.0312228 -3.2566442 -4.3384266 2.1081409 -3.2377479 -4.3688302 2.1131492 -2.6693509 -3.6485643 1.7618718 -2.9022789 -4.0183864 1.9289253 -2.7566648 -3.8665659 1.8491546 -2.7554626 -3.9154806 1.8641787 -2.8358138 -4.0826306 1.934291 -2.5920851 -3.781101 1.7861966 -0 -0 0 -0 -0 0 -0 -0 0 -2.0174885 -3.1037309 1.4481548 -1.9615993 -3.0586727 1.4220415 -1.9283129 -3.0477676 1.4116678 -0 -0 0 -0 -0 0 -1.9038813 -3.1354229 1.4352771 -1.8303829 -3.0565207 1.3948551 -1.8310663 -3.1006596 1.4095215 -1.4792532 -2.5405247 1.1562585 -1.4468958 -2.5204005 1.1433808 -1.74746 -3.0875175 1.3891317 -1.4722849 -2.6390824 1.1877375 -1.6779367 -3.0514531 1.3640915 -1.7130287 -3.1610293 1.4073752 -1.673802 -3.1344147 1.391278 -1.3953326 -2.652107 1.1780792 -1.253523 -2.4185429 1.073626 -1.7712772 -3.4690762 1.5222021 -1.7285572 -3.4373331 1.5039586 -1.5039153 -3.0370066 1.3283199 -1.1544933 -2.3680022 1.0392853 -0 -0 0 -0 -0 0 -0 -0 0 -1.5219746 -3.326256 1.4313422 -1.3631231 -3.0281451 1.3022066 -0.98788905 -2.2312961 0.96488041 -0.98275709 -2.2570064 0.97310787 -1.4108392 -3.2947917 1.4030826 -1.109008 -2.6346688 1.1251372 -1.3820856 -3.3403308 1.4148872 -1.4122251 -3.4733117 1.4663984 -1.4012817 -3.5079265 1.4771298 -0.91300511 -2.3272901 0.98777425 -0.914828 -2.3746731 1.0049446 -1.3034269 -3.4457855 1.4413582 -1.0195658 -2.7463887 1.1523236 -1.2354646 -3.3913302 1.4127409 -0.93171871 -2.6074486 1.0907965 -1.1606973 -3.3119428 1.3744653 -1.1027155 -3.2094951 1.3301085 -1.0511039 -3.1215091 1.2918329 -0.96578658 -2.9274874 1.2109891 -0.91678512 -2.8373935 1.1723558 -0.88160646 -2.7868762 1.1498196 -0.83050478 -2.6825149 1.1058205 -1.108956 -3.6607962 1.4953734 -0.68077648 -2.2985542 0.94842547 -0.71213126 -2.4596548 1.0110258 -0.72245842 -2.5538311 1.0467974 -0.61048567 -2.2098873 0.90836126 -0.61199802 -2.2694898 0.93053967 -0.88192892 -3.3514552 1.3576527 -0.88154954 -3.4354951 1.3887739 -0.77319473 -3.0920646 1.2510532 -0.5702669 -2.3418915 0.95343345 -0.68907267 -2.9068749 1.174502 -0.67017376 -2.9064987 1.1727134 -0.53952879 -2.4075747 0.97525418 -0.76066244 -3.4939001 1.3998631 -0.7278142 -3.444597 1.378758 -1.6000967 -7.8071303 3.0829175 -0.5221234 -2.6307561 1.0575289 -0.49962485 -2.6008968 1.044651 -0.48177928 -2.5938144 1.0407162 -0.46486467 -2.591207 1.0385699 -0.45134741 -2.6078124 1.0439357 -0.44256344 -2.6538239 1.0607483 -0.42597538 -2.6546454 1.0600328 -0.41252726 -2.6756673 1.0671872 -0.47651643 -3.2213202 1.2775242 -0.42777121 -3.0198505 1.198469 -0.42302915 -3.1242092 1.2378178 -0.34709805 -2.6877637 1.0682603 -0.29262173 -2.3812051 0.94914091 -0.28093112 -2.407999 0.95879924 -0.39386666 -3.5643206 1.4037981 -0.36694661 -3.5183735 1.3851968 -0.24349649 -2.4833934 0.98598564 -0.33315513 -3.6249008 1.4245455 -0.3053968 -3.5626783 1.3998631 -0.1725345 -2.1709547 0.86436218 -0.26192799 -3.5698831 1.401294 -0.14412448 -2.1468203 0.8543461 -0.13134812 -2.1541889 0.85685015 -0.18827684 -3.4305067 1.3462057 -0.16767967 -3.4409246 1.3497829 -0.14497009 -3.4045694 1.3354743 -0 -0 0 -0.09784437 -3.230613 1.2682236 -0 -0 0 -0 -0 0 -0 -0 0 -0.017159967 -2.997654 1.1784369 --0.0012378512 -3.0126441 1.1841604 --0.019141575 -2.9219999 1.1494619 --0.037468899 -2.9535754 1.1616242 --0 -0 0 --0.073826902 -2.9575608 1.1634128 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.3275921 -3.5673773 1.488219 --0 -0 0 --1.3537803 -3.5055168 1.4696178 --1.2819891 -3.2598848 1.3719614 --1.3019673 -3.2519572 1.3719614 --1.3166118 -3.2309349 1.3665956 --1.5459689 -3.7283058 1.5762172 --0 -0 0 --1.5978633 -3.7236428 1.5822984 --1.6341243 -3.7445815 1.5951762 --1.6892567 -3.8070409 1.625582 --1.7102811 -3.7914968 1.6234357 --1.7296219 -3.7724421 1.6198586 --3.3138368 -7.1130314 3.0360565 --3.4117515 -7.2073565 3.0847061 --3.3672869 -7.0019779 3.0063663 --3.4085476 -6.9778285 3.0049353 --1.5100595 -3.0433414 1.3315394 --1.5337458 -3.0440266 1.335832 --1.5574971 -3.0445354 1.3401246 --0 -0 0 --4.5365858 -8.6073332 3.7572122 --3.9185266 -7.3252358 3.2124107 --3.952708 -7.2813573 3.2038255 --4.0054202 -7.2716904 3.2102644 --4.0431304 -7.2347488 3.2048986 --1.9653987 -3.4663429 1.5565429 --1.7571442 -3.055114 1.3801888 --1.7735047 -3.0402415 1.3784002 --4.2080531 -7.1140561 3.1963134 --4.2540264 -7.0921059 3.198102 --4.3037705 -7.0762424 3.2027524 --2.1945751 -3.5585785 1.6316632 --2.212904 -3.5395029 1.6291592 --2.2220848 -3.5061381 1.6202163 --1.973063 -3.0712881 1.4284805 --1.9959466 -3.0653846 1.4313422 --2.9660904 -4.4951081 2.093117 --2.9941351 -4.4776001 2.0934746 --5.6766043 -8.3780136 3.9067376 --4.6449747 -6.7655478 3.1737773 --5.6883388 -8.1773968 3.8459258 --4.8685846 -6.9080305 3.267499 --5.7209778 -8.0127344 3.801569 --5.712574 -7.8980293 3.7640088 --5.1963515 -7.0922008 3.3980653 --5.2536831 -7.0789309 3.4070082 --5.2835536 -7.028646 3.398423 --5.3260155 -6.9953513 3.3980653 --5.3950672 -6.9965587 3.4145203 --0 -0 0 --5.4990549 -6.9532652 3.4259672 --5.5270228 -6.9011698 3.4170244 --3.0406733 -3.7489965 1.8792027 --3.0677679 -3.7353206 1.8817067 --3.1007793 -3.7286336 1.8877879 --3.1891553 -3.7874031 1.926779 --0 -0 0 --3.193902 -3.6999109 1.9024543 --3.2005677 -3.6619613 1.8931537 --3.1889439 -3.6037874 1.8734792 --0 -0 0 --3.3878753 -3.7352438 1.9618351 --3.4151516 -3.7192011 1.9643391 --2.8167703 -3.0299134 1.6148505 --2.6580439 -2.8241906 1.5157632 --3.5377803 -3.7131813 1.994745 --0 -0 0 --0 -0 0 --3.6363811 -3.6786492 2.0115578 --3.656903 -3.6542871 2.0104845 --2.8558874 -2.8189151 1.5672743 --2.8971982 -2.8248098 1.580152 --3.0974085 -2.9831979 1.6774509 --3.142715 -2.9898853 1.6917595 --3.1507947 -2.9609523 1.6863937 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --3.0400126 -2.6860507 1.584087 --0 -0 0 --0 -0 0 --9.7467957 -8.2986126 4.9337406 --9.8089666 -8.2482672 4.9394641 --0 -0 0 --0 -0 0 --10.020809 -8.1162796 4.9698696 --10.052919 -8.0406408 4.9612846 --4.1582689 -3.283993 2.0598493 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --5.7904873 -4.1823874 2.7663386 --0 -0 0 --5.8451939 -4.1137013 2.7681272 --5.832746 -4.0516515 2.7505991 --5.8790617 -4.0305724 2.7606151 --5.9624605 -4.0341978 2.7878017 --5.9777822 -3.9913137 2.783509 --0 -0 0 --10.41997 -6.774271 4.7910118 --6.0070062 -3.8528748 2.7638347 --5.9579372 -3.7700014 2.7309248 --6.0110588 -3.7521651 2.744518 --5.8868637 -3.6246257 2.6783404 --5.8507285 -3.5530486 2.6522272 --6.7944961 -4.0693984 3.0639584 --6.8137093 -4.0243068 3.0614545 --6.8229418 -3.9734933 3.0546579 --6.8390961 -3.9269035 3.0510807 --0 -0 0 --0 -0 0 --8.3985767 -4.6189861 3.7017663 --0 -0 0 --5.4588671 -2.9154003 2.4007528 --5.4807844 -2.8840249 2.4025414 --7.3553977 -3.8131602 3.2038255 --7.3761611 -3.7666824 3.2027524 --7.4116478 -3.7276466 3.208118 --0 -0 0 --6.6586351 -3.2471168 2.8679299 --5.5411325 -2.6601284 2.3846555 --6.7857866 -3.2066591 2.9051325 --6.4615669 -3.0050642 2.7598999 --6.4017649 -2.929606 2.72699 --0 -0 0 --7.4481616 -3.2985964 3.1505258 --7.4365845 -3.2390344 3.1372902 --7.5103979 -3.2165072 3.1598263 --7.5265503 -3.1689141 3.1583955 --7.0341835 -2.9109023 2.94627 --7.0475869 -2.8659275 2.9444814 --9.0100918 -3.5998328 3.7468386 --9.4553471 -3.7106318 3.9210463 --9.3725033 -3.6119092 3.8777626 --0 -0 0 --9.4633932 -3.5141785 3.8970792 --8.1669436 -2.9757993 3.3597896 --11.683909 -4.176425 4.7831421 --11.679354 -4.094151 4.7709799 --11.695424 -4.0193753 4.7674026 --6.6852784 -2.2515917 2.7323556 --12.555272 -4.1433487 5.0947127 --11.177422 -3.6127009 4.5298791 --8.6192713 -2.7274806 3.4932177 --11.010397 -3.4100575 4.4454579 --6.6618299 -2.0183804 2.696584 --6.7054262 -1.9867527 2.7091041 --6.7094178 -1.9432331 2.7058847 --6.753562 -1.9111842 2.7187624 --6.9208746 -1.9127531 2.7806473 --6.8937125 -1.8597903 2.7652655 --8.616292 -2.2679834 3.4431376 --7.1285739 -1.8296207 2.8493288 --7.0880289 -1.7729274 2.828939 --8.3916521 -2.0444453 3.3386843 --8.6420975 -2.0493805 3.4324059 --0 -0 0 --0 -0 0 --9.8681707 -2.1491308 3.8988678 --11.120977 -2.350642 4.3842888 --11.14251 -2.2838609 4.3871503 --12.192241 -2.4212019 4.7917271 --12.216954 -2.3482854 4.7956619 --10.135106 -1.8836448 3.9789963 --0 -0 0 --7.407197 -1.2827176 2.9097829 --7.452693 -1.2435471 2.9244492 --13.220005 -2.1228821 5.1591015 --13.15618 -2.0299046 5.1294112 --7.5463734 -1.1168239 2.9523511 --7.5928411 -1.076136 2.9677329 --12.465825 -1.6890745 4.8489618 --12.538931 -1.6206957 4.8732867 --12.496737 -1.537341 4.8532543 --0 -0 0 --12.904492 -1.4269906 5.0034952 --12.546136 -1.3094808 4.8621974 --12.512114 -1.2283674 4.8460999 --12.526855 -1.1522559 4.8489618 --12.963538 -1.1122645 5.0142264 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.0174923 12.465459 4.880219 --3.9350059 12.471094 4.8729267 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --3.3725743 12.855971 4.9521027 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --2.5183342 14.614471 5.5219612 --2.4221671 14.590794 5.5073762 --0 0 0 --2.2241714 14.497064 5.4615374 --2.1355865 14.513221 5.4625793 --2.0433569 14.503765 5.4542451 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.2782444 13.675879 5.1167054 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.6838136 13.523218 5.0767698 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -3.5343249 13.346725 5.1430974 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9327807 -2.2572198 3.084522 -7.9556952 -2.3166065 3.0987599 -7.9530139 -2.3688598 3.1032743 -7.9688287 -2.4269073 3.1150813 -7.977067 -2.4830072 3.12411 -7.9822345 -2.5384462 3.1320972 -7.9691844 -2.5882459 3.1331389 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.4509439 -2.2804103 1.8822975 -4.4310451 -2.3046474 1.8798667 -4.3206344 -2.2809832 1.8395842 -4.3412695 -2.326061 1.8541692 -4.3236203 -2.350862 1.8527802 -4.2869477 -2.3651109 1.8434041 -4.2887187 -2.4005351 1.8503493 -4.2934775 -2.4379227 1.8586837 -4.2727504 -2.4609435 1.8562528 -4.333674 -2.5315959 1.8888955 -0 -0 0 -4.1447458 -2.4898968 1.820832 -4.123785 -2.5118654 1.8184012 -3.6216605 -2.2364304 1.6065707 -4.2190108 -2.6414349 1.873616 -4.2335982 -2.6868775 1.8871592 -4.2619796 -2.7417333 1.9069532 -4.2859182 -2.7944758 1.9250109 -4.2749491 -2.8248584 1.927789 -4.2855825 -2.8698266 1.9402905 -4.2415137 -2.8781593 1.9284835 -4.1666002 -2.8648007 1.9027861 -4.2943487 -2.9916575 1.9684188 -4.3900504 -3.0985489 2.0201609 -4.6890006 -3.3529501 2.1649697 -4.550642 -3.2963636 2.1111438 -3.7358308 -2.7409861 1.7461704 -4.3314991 -3.219342 2.0288424 -4.4082952 -3.3186371 2.0736394 -2.9257209 -2.2302921 1.3926567 -2.9090126 -2.2459087 1.3912677 -2.8944387 -2.2631381 1.3909204 -2.8753529 -2.2767787 1.3884896 -3.2314277 -2.5913415 1.5642047 -2.8355517 -2.3024304 1.3829334 -2.8546824 -2.3471932 1.3989074 -4.1342349 -3.4427083 2.0225918 -3.5496297 -2.9927506 1.7496431 -4.1344604 -3.5297248 2.0434277 -4.0361176 -3.4887791 2.0059233 -2.9139822 -2.5497921 1.4641929 -3.1979263 -2.8332458 1.6124742 -4.0333309 -3.6182258 2.0368297 -4.1963673 -3.8112838 2.1295488 -4.1459861 -3.8122003 2.1160057 -4.0772233 -3.7953873 2.0930862 -2.9914689 -2.8187177 1.5523977 -3.9631822 -3.7810354 2.0587072 -2.9532819 -2.8519573 1.5506613 -2.8653376 -2.8011708 1.5141988 -2.60355 -2.5765347 1.3867532 -2.5751083 -2.5798466 1.3801552 -3.2950873 -3.3423972 1.7683953 -3.211725 -3.2980402 1.7350581 -3.2382243 -3.3663571 1.760061 -3.2149246 -3.3834431 1.7586719 -3.2159178 -3.4263594 1.7704788 -2.93924 -3.1701987 1.6312264 -2.9304962 -3.1999335 1.6371299 -2.9403651 -3.2505486 1.6534512 -2.9659622 -3.3195906 1.6788014 -2.9238265 -3.3131118 1.6666472 -2.8399956 -3.2581604 1.6308792 -2.8022127 -3.2549102 1.6208085 -2.6923127 -3.1662841 1.5694135 -2.692126 -3.20573 1.580526 -2.8220186 -3.4026845 1.6673417 -2.804651 -3.4242897 1.6694254 -2.7093041 -3.3495457 1.6256702 -2.6734891 -3.3470519 1.6166414 -2.6459348 -3.3545556 1.6124742 -2.601109 -3.3396475 1.5978892 -2.7177219 -3.5339901 1.6812322 -3.1092567 -4.0951738 1.934387 -3.0896938 -4.1216798 1.9378597 -3.0392494 -4.1066337 1.9222327 -2.9913192 -4.0941548 1.907995 -2.9557221 -4.0979786 1.901397 -2.9495518 -4.1427794 1.9135512 -2.9413254 -4.1853557 1.9246637 -2.9829111 -4.3004284 1.9684188 -0 -0 0 -0 -0 0 -1.5631424 -2.3435853 1.073522 -1.5332762 -2.3296258 1.0631042 -1.5067031 -2.3201094 1.0547698 -1.9757673 -3.0843713 1.3867532 -2.030911 -3.2137854 1.4381481 -1.9273558 -3.0916698 1.3794607 -1.8941119 -3.080267 1.3693901 -1.9665512 -3.2426035 1.4346756 -1.7407036 -2.9100909 1.286047 -1.6932929 -2.8706279 1.2645167 -1.612036 -2.7715068 1.2176361 -1.6239051 -2.8317933 1.2391665 -1.6424732 -2.9053922 1.266253 -1.7309074 -3.106319 1.3471652 -1.5119535 -2.7526855 1.1933278 -1.48299 -2.7396395 1.1839516 -1.8167723 -3.4066186 1.4600258 -1.808042 -3.4409497 1.4697491 -1.3284779 -2.5657349 1.1002612 -1.3480449 -2.6431897 1.1290841 -0 -0 0 -1.3911172 -2.8125453 1.1922859 -1.5728154 -3.2300086 1.3607085 -0 -0 0 -1.19595 -2.5340085 1.0679657 -0 -0 0 -1.4806108 -3.2403362 1.3495961 -1.4464848 -3.2177086 1.3367474 -1.4039767 -3.1750562 1.3159115 -1.2873102 -2.9599857 1.2256233 -1.2790707 -2.9911129 1.2349993 -1.3768864 -3.2755828 1.3461235 -1.3624865 -3.2978387 1.3516797 -0.93548101 -2.3033001 0.95093817 -1.1191926 -2.8055553 1.1488781 -1.3155659 -3.3581629 1.3659174 -0.88148838 -2.2903671 0.9391312 -1.2570434 -3.3284295 1.3478597 -1.2411559 -3.3483915 1.3527215 -1.0159535 -2.7927337 1.1308204 -1.2046949 -3.3766205 1.3579304 -1.1820973 -3.3786373 1.3558469 -0.93124443 -2.714263 1.0929687 -1.0903969 -3.2435391 1.2975067 -0.97200859 -2.9508591 1.1808263 -0.92800176 -2.8764353 1.1495726 -0.90187186 -2.8552454 1.1391547 -0.88765472 -2.8714778 1.1433219 -0.86053032 -2.8454499 1.1311677 -0.67148358 -2.2696822 0.90683573 -0.67002767 -2.3170068 0.92350435 -0.72935832 -2.5819154 1.0238634 -0.99237162 -3.5989435 1.4127979 -0.89480436 -3.3242228 1.3051465 -0.86820567 -3.306066 1.2961175 -0.86439747 -3.3758373 1.3207732 -0.55912429 -2.2390945 0.88495821 -0.55797994 -2.2944283 0.90475219 -0.71395534 -3.0178981 1.1787426 -0.67778945 -2.9454489 1.1495726 -1.7732919 -7.937593 3.042156 -1.7243557 -7.9474077 3.0418088 -1.6633947 -7.9000249 3.0199313 -0.56462443 -2.7618065 1.0742165 -0.53748655 -2.7137005 1.0547698 -0 -0 0 -0.48538953 -2.6186569 1.0165708 -0.48942322 -2.7342119 1.058937 -0.57100636 -3.3082948 1.2735455 -0.50050187 -3.009222 1.1599904 -0.45778561 -2.8603652 1.1030394 -0.47689712 -3.1022689 1.1926332 -0.41391754 -2.8063891 1.0808145 -0.40100482 -2.83952 1.0922742 -1.1222435 -8.3318501 3.1435568 -0.30848584 -2.3949683 0.92454618 -0.30094379 -2.4554601 0.94642371 -0.48725328 -4.1955085 1.5944165 -0.46610013 -4.2403674 1.6100434 -0.39096361 -3.7683568 1.4332864 -0.25638482 -2.6245117 1.0068475 -0.34205475 -3.7439196 1.4225214 -0.31891748 -3.7440794 1.4218268 -0.29358429 -3.7160494 1.4107144 -0.16334519 -2.2362468 0.86064976 -0 -0 0 -0.13273562 -2.1856627 0.84120303 -0.11982811 -2.1958001 0.84467566 -0.38495651 -8.0152416 3.0018735 -0.12509248 -2.9691539 1.1308204 -0.28776881 -8.0531006 3.014375 -0 -0 0 -0 -0 0 -0.051817916 -2.9497643 1.1228334 -0 -0 0 -0 -0 0 --0.0025166934 -2.9746001 1.1318622 --0.020463962 -2.9332681 1.1165826 --0 -0 0 --0.055518344 -2.884979 1.0988722 --0.071889311 -2.833024 1.0797727 --0.089181274 -2.8297179 1.0787309 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.2623287 -3.8089852 1.5162823 --1.2859772 -3.8020563 1.5166296 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.3829854 -3.7098613 1.4964883 --0 -0 0 --1.4294226 -3.6952341 1.4975301 --1.4427828 -3.6628385 1.4881541 --1.3097955 -3.266638 1.333622 --1.326623 -3.2507265 1.3304967 --1.3609419 -3.2771628 1.3443872 --0 -0 0 --1.4166181 -3.2963963 1.3589722 --1.6033075 -3.6682525 1.5128098 --1.6901891 -3.8031521 1.5714972 --1.684904 -3.7294776 1.5457997 --1.6881772 -3.6764638 1.5284365 --3.5192962 -7.5388932 3.1112614 --3.4171493 -7.2045288 2.9831214 --3.4551833 -7.1707544 2.9779124 --3.4323134 -7.0129766 2.9216557 --1.5533986 -3.1266925 1.3232042 --1.5438126 -3.0601788 1.2995902 --1.5625604 -3.0506485 1.2995902 --1.5860115 -3.0501537 1.3034101 --3.7299178 -7.0635953 2.9883304 --4.0270786 -7.514153 3.1873119 --1.6477121 -3.0311525 1.3079245 --4.7525563 -8.6119089 3.6727858 --1.6554585 -2.9583402 1.2856997 --0 -0 0 --2.0339153 -3.5317445 1.539549 --0 -0 0 --4.1609583 -7.0221148 3.0529213 --4.2310209 -7.0414615 3.0723679 --2.1302247 -3.4975822 1.5468415 --2.2073472 -3.5745926 1.5860822 --2.23123 -3.5641601 1.5874712 --1.9760761 -3.1142023 1.3961294 --1.9961623 -3.1035957 1.3968239 --1.9798149 -3.0370948 1.3728627 --4.5222263 -6.8423429 3.0675063 --2.805625 -4.1897559 1.8975772 --2.8807931 -4.2453928 1.9302199 --4.8084459 -6.9920459 3.1727269 --2.4221952 -3.4773126 1.5996255 --5.614943 -7.9536338 3.6356285 --2.2813573 -3.1910596 1.4829451 --0 -0 0 --5.7270961 -7.8035769 3.6147928 --5.2723818 -7.0925202 3.3029506 --2.7945225 -3.7124004 1.7510321 --5.3590212 -7.0272856 3.3029506 --5.4501977 -7.0566077 3.3321207 --5.5003281 -7.0318956 3.3362877 --5.5451183 -7.0002189 3.3373296 --5.6085076 -6.991663 3.3494837 --5.6199598 -6.9185443 3.3310788 --5.6658802 -6.8882756 3.3331625 --3.1804004 -3.8193786 1.8708379 --3.1330309 -3.7159269 1.8302081 --3.2544374 -3.812151 1.8864647 --3.2544577 -3.765156 1.8732687 --3.2169597 -3.6759727 1.839237 --3.2786446 -3.7003744 1.8611145 --2.7168946 -3.0290346 1.5371181 --2.7411048 -3.0185535 1.5402435 --3.4261954 -3.7263601 1.9048697 --2.7153091 -2.9174347 1.5062118 --2.9113526 -3.0897245 1.6024035 --2.9839962 -3.1281075 1.6312264 --2.8441377 -2.9451892 1.5464942 --2.8090398 -2.8733821 1.5183659 --2.9368126 -2.9673705 1.5763588 --3.6633739 -3.6559441 1.9468884 --3.0752063 -3.031811 1.6294901 --3.0903912 -3.0096145 1.6277537 --0 -0 0 --0 -0 0 --0 -0 0 --3.8546121 -3.5734437 1.9767531 --3.7934556 -3.4737461 1.9350815 --3.8835654 -3.5126657 1.9694606 --9.7001419 -8.6637611 4.8465347 --4.0044436 -3.5335991 2.0080068 --9.7972441 -8.5366812 4.8423676 --9.1037607 -7.8347945 4.4780884 --9.7662077 -8.3010378 4.7767348 --9.8758583 -8.2903929 4.8052106 --4.100122 -3.4001241 2.0027978 --4.1136513 -3.368962 1.9993252 --10.068353 -8.14081 4.8250046 --4.2756085 -3.4147627 2.0566237 --4.3612885 -3.4395528 2.0871828 --4.3941512 -3.4219439 2.0927389 --10.085174 -7.7529716 4.7409668 --0 -0 0 --0 -0 0 --0 -0 0 --9.955842 -7.2719579 4.5958109 --10.096124 -7.2798309 4.6395659 --10.14977 -7.2242699 4.643733 --10.244553 -7.1974316 4.6666522 --0 -0 0 --4.553926 -3.1174552 2.0739868 --10.407163 -7.02916 4.6808901 --10.471947 -6.9797316 4.6906137 --5.9472709 -3.9120827 2.6664174 --5.9491353 -3.8612258 2.6566942 --5.9340148 -3.7998769 2.6396782 --5.9825912 -3.779418 2.6507907 --5.9666667 -3.7183418 2.6337748 --5.9661994 -3.6674235 2.6237042 --6.1048775 -3.7012222 2.6740572 --0 -0 0 --6.9779205 -4.1140914 3.0300019 --5.9263005 -3.4454525 2.5688365 --7.0107942 -4.0183616 3.0227094 --7.0059242 -3.9586649 3.0102079 --7.0472879 -3.9251828 3.0175004 --6.9660096 -3.8241198 2.9730506 --0 -0 0 --5.4822054 -2.9228804 2.3309615 --5.560647 -2.9210112 2.3563116 --5.5626392 -2.8786507 2.3497136 --7.3198423 -3.7308221 3.0727153 --7.376123 -3.7026618 3.0866058 --8.2730579 -4.0893888 3.4477592 --5.600409 -2.7260895 2.3368649 --6.7469664 -3.2328751 2.8008082 --6.8930621 -3.2509997 2.8525505 --5.6453853 -2.6205692 2.3351285 --6.5724411 -3.001817 2.7060053 --8.2793884 -3.7198672 3.3915026 --7.4477 -3.2915556 3.0456285 --7.4643159 -3.2443008 3.0442395 --7.4564862 -3.1866508 3.0331273 --7.0323496 -2.954567 2.8549812 --7.0538135 -2.9127929 2.8563702 --9.2631941 -3.7583733 3.7321677 --9.0743895 -3.6171131 3.6477828 --9.068469 -3.5504289 3.6366704 --9.0594454 -3.4829445 3.624516 --9.0674849 -3.4223258 3.6193073 --9.1199722 -3.3783474 3.6318085 --0 -0 0 --7.1953073 -2.5656886 2.8591485 --11.777955 -4.1176863 4.6506782 --11.806548 -4.0465565 4.6520672 --6.7505932 -2.2680326 2.6674592 --12.634768 -4.1577888 4.9559226 --12.615413 -4.0658059 4.9385595 --11.43367 -3.6077704 4.4701014 --11.253085 -3.4750338 4.3916202 --6.7451701 -2.0382037 2.6396782 --6.7746372 -2.0018239 2.6462762 --12.359385 -3.5687296 4.7940979 --6.9602518 -1.9640995 2.7084363 --6.9721723 -1.9213552 2.7084363 --7.3352103 -1.9729927 2.8431742 --7.0351372 -1.8461179 2.7237158 --8.3191948 -2.1283779 3.2102313 --8.444931 -2.1054065 3.2532918 --11.524285 -2.7976859 4.4218321 --9.7159128 -2.2958333 3.7273059 --11.236947 -2.5823655 4.2999425 --9.7204742 -2.1713231 3.7186244 --9.7831039 -2.1223688 3.7373767 --11.150431 -2.3472888 4.2499366 --11.156354 -2.2771399 4.2468114 --9.936429 -1.9648417 3.7811317 --12.255588 -2.3451099 4.6510258 --12.267902 -2.2695258 4.650331 --7.5254445 -1.3449479 2.861232 --7.5307832 -1.2982699 2.8601902 --7.536757 -1.2517303 2.8594956 --7.5868936 -1.2122619 2.8754697 --7.6498051 -1.1742148 2.8963056 --13.105766 -1.9285986 4.9357815 --12.64562 -1.7817259 4.7593718 --12.521553 -1.685968 4.7090187 --12.907439 -1.6573207 4.8493128 --0 -0 0 --0 -0 0 --0 -0 0 --13.277231 -1.3745013 4.9732857 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.7673697 12.830887 4.9288197 --4.6404943 12.728098 4.8786168 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.0049858 12.648129 4.7782111 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --3.4584489 12.80934 4.7785482 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --3.0439706 14.3882 5.2933788 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --2.5240614 14.558211 5.3179746 --2.4295659 14.542779 5.3068562 --0 0 0 --2.2445951 14.530557 5.2920308 --2.1627116 14.593417 5.3098884 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.5140709 15.351512 5.5507941 -0 0 0 -0 0 0 -1.7257905 14.718821 5.3338103 -1.8088037 14.649085 5.3125839 -1.8959908 14.617168 5.3051715 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -3.4893136 13.568455 5.0440497 -3.56338 13.512194 5.0312467 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9522214 -2.2546356 2.9884343 -7.9744072 -2.3138804 3.0019114 -0 -0 0 -0 -0 0 -0 -0 0 -8.022027 -2.5427341 3.0420063 -7.9955244 -2.5884292 3.0379632 -8.0232964 -2.6519165 3.0544727 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.2086215 -2.2505832 1.7384205 -4.25349 -2.3082442 1.7623426 -4.2730637 -2.352917 1.7761567 -0 -0 0 -0 -0 0 -0 -0 0 -4.0440316 -2.3579698 1.7057382 -4.1137772 -2.4325726 1.7407789 -3.638485 -2.1818137 1.5487283 -3.5799751 -2.1767097 1.5298603 -3.6082308 -2.2243233 1.5473806 -3.6001041 -2.2499135 1.5497391 -3.6085021 -2.2860675 1.5591732 -4.1838732 -2.686619 1.8098499 -4.1957197 -2.7307272 1.8219793 -4.1930327 -2.7657506 1.8280441 -3.9121814 -2.6151178 1.7144984 -3.8290186 -2.5936685 1.6855223 -3.7881899 -2.6000664 1.6747406 -3.7304211 -2.5942369 1.6565462 -4.251698 -2.9955499 1.891724 -4.2332377 -3.0215814 1.891724 -3.9582469 -2.8621519 1.7785152 -4.2436953 -3.1083493 1.9129506 -3.0184319 -2.2396128 1.3755459 -3.0099022 -2.2620506 1.3779043 -2.9719901 -2.2622304 1.3671225 -2.9528332 -2.2764001 1.3647641 -2.9699819 -2.3188078 1.3789152 -3.5451162 -2.8029261 1.647786 -3.327925 -2.6645799 1.5561408 -3.0087137 -2.4394877 1.4166514 -3.6246452 -2.9758308 1.7087705 -2.8655963 -2.3823395 1.3640902 -2.825712 -2.3786583 1.3522975 -2.8304124 -2.4124401 1.3613948 -2.8226855 -2.4359124 1.3647641 -2.8559031 -2.4953067 1.3876754 -2.8292544 -2.5028031 1.3822844 -3.2767849 -2.9346466 1.6046588 -3.2043068 -2.9053726 1.5783782 -8.5782776 -7.8735571 4.1973424 -3.0690889 -2.8521886 1.5298603 -3.0213552 -2.842582 1.5150353 -2.8681726 -2.7318571 1.447986 -2.8723691 -2.7696619 1.4584309 -2.670023 -2.6063902 1.3657749 -2.6472826 -2.6161067 1.3624055 -2.6405003 -2.6416225 1.3671225 -3.3089888 -3.3511279 1.7158461 -3.2568059 -3.3390186 1.6996734 -3.2486699 -3.3718207 1.7060751 -3.2064977 -3.3691857 1.6949563 -6.8252258 -7.2595615 3.5962577 -3.0700829 -3.3061776 1.6450906 -3.019824 -3.2923441 1.6292548 -2.997669 -3.3087184 1.628244 -2.9622405 -3.3102119 1.6201577 -2.9113169 -3.293761 1.6036481 -2.6811206 -3.0711386 1.4894285 -2.6394744 -3.0611508 1.4769621 -2.6853569 -3.1532652 1.5126767 -2.9211295 -3.4730108 1.6545247 -2.9063828 -3.4988353 1.6582309 -2.7540684 -3.3571975 1.584443 -2.7393446 -3.3813481 1.5878123 -2.7150161 -3.393682 1.5857908 -2.6970603 -3.4139709 1.5874754 -2.9482753 -3.7793434 1.7458329 -3.0600641 -3.9726381 1.8250117 -3.0886431 -4.0610304 1.8563462 -3.0727136 -4.0919514 1.8617371 -3.0542774 -4.1198039 1.8657804 -3.0200431 -4.1263113 1.8603895 -2.9648888 -4.1035552 1.8421952 -2.9648054 -4.156929 1.857694 -2.9208131 -4.1488681 1.8462384 -2.9017491 -4.1759896 1.8502815 -2.852638 -4.1595526 1.8354566 -1.5904398 -2.3501728 1.0460274 -1.5707595 -2.3520582 1.0426581 -1.5552616 -2.3600798 1.0419842 -0 -0 0 -0 -0 0 -0 -0 0 -2.0744133 -3.3222978 1.4321502 -2.0875692 -3.3894744 1.4550616 -1.8032148 -2.9685163 1.2734557 -1.7777071 -2.9674103 1.2684017 -1.7403064 -2.9458389 1.2549245 -1.7345225 -2.977613 1.2636847 -1.7903227 -3.1171911 1.3169198 -1.86164 -3.2878737 1.3826214 -1.6390326 -2.936691 1.2340349 -1.6300606 -2.9631906 1.2407734 -1.4718131 -2.7149053 1.135651 -1.8456211 -3.4546397 1.4321502 -0 -0 0 -1.3426906 -2.5894234 1.0743296 -1.3584772 -2.6596572 1.0992625 -1.378107 -2.7394311 1.1279016 -1.3771585 -2.7798932 1.140705 -1.4257231 -2.9228325 1.194277 -1.1717166 -2.4401336 0.99919397 -0 -0 0 -0 -0 0 -0 -0 0 -1.4401979 -3.1978283 1.2855853 -0 -0 0 -1.6133797 -3.7029245 1.4759512 -1.2575958 -2.9356132 1.1733873 -0.9409104 -2.234386 0.89811468 -1.510007 -3.647614 1.4432689 -1.5028566 -3.6943104 1.457757 -1.4029186 -3.5102522 1.3832953 -1.3565756 -3.4556947 1.3590362 -0.89428616 -2.3201764 0.92035216 -1.0417123 -2.7526813 1.0837636 -1.3540645 -3.6451197 1.4220423 -1.3265125 -3.6392064 1.4166514 -1.0140158 -2.8361058 1.1083596 -2.7564788 -7.8593793 3.0110085 -2.5499015 -7.415834 2.8368154 -1.1107993 -3.2968276 1.2754773 -0.9435184 -2.8583488 1.1076857 -0.93262643 -2.8846886 1.1154351 -0.90922379 -2.8724048 1.1086966 -0.90133768 -2.9094059 1.1204891 -0.85614765 -2.82478 1.086796 -0.69023681 -2.3289945 0.89979935 -0.69559354 -2.4010086 0.92506915 -0.74730295 -2.6398578 1.0123342 -0.67762399 -2.4511065 0.94056797 -0.82505691 -3.0569589 1.1636163 -0.73624384 -2.7961087 1.0652324 -0.57686961 -2.2470396 0.86071539 -0.56329983 -2.2514503 0.86105227 -0 -0 0 -0.70110661 -2.9553266 1.1174568 -0.68613726 -2.9733336 1.1225107 -0.60334283 -2.6899426 1.0170513 -0.70655417 -3.2427878 1.2181991 -1.6931121 -8.0038071 2.9581103 -0.56981337 -2.7789891 1.0456904 -0 -0 0 -0.54776609 -2.8486431 1.0686017 -0.49272928 -2.6501606 0.9951508 -0.47529307 -2.6466472 0.99279231 -0.45775768 -2.6420922 0.99009687 -0.43595138 -2.6114197 0.97796732 -0.42485225 -2.644722 0.98908603 -0.43449363 -2.8147671 1.0497336 -0.47685173 -3.2197249 1.1952878 -0.47826004 -3.3717394 1.2491968 -0.32753405 -2.4164424 0.90316868 -0.31971207 -2.4725635 0.92271066 -0.29785591 -2.4202797 0.90316868 -0.46451992 -3.9734759 1.4621371 -0.40436238 -3.653399 1.3458959 -0.26383263 -2.5264859 0.93955719 -0.36401612 -3.7039995 1.3624055 -0.33454019 -3.633034 1.3361249 -0 -0 0 -0.17994809 -2.2590835 0.8415103 -0.1615186 -2.1981721 0.81927288 -0.19468874 -2.8905146 1.0672541 -0.1401795 -2.2920856 0.85229212 -0.44456643 -8.065115 2.9210479 -0.39599335 -8.0864992 2.9277866 -0.3879835 -9.0595436 3.2754993 -0 -0 0 -0.090755068 -2.9804201 1.0975778 -0.07357002 -3.0261006 1.1137505 -0.16201985 -8.8742962 3.2067654 -0.036257796 -3.0126538 1.1086966 -0.017573215 -2.9798665 1.0969039 --0.00071277423 -2.9940412 1.1019579 --0.019019175 -2.983624 1.0982517 --0 -0 0 --0.054602839 -2.9276252 1.0783727 --0 -0 0 --0.089278884 -2.8862681 1.0638847 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.3577158 -3.7921112 1.4719081 --0 -0 0 --0 -0 0 --0 -0 0 --1.4324058 -3.7110937 1.4540508 --1.4499847 -3.6890903 1.4489968 --1.345302 -3.3619232 1.3263539 --1.3286239 -3.2620437 1.2909762 --1.3424875 -3.239043 1.2852484 --1.3700171 -3.2489641 1.2923239 --1.4444708 -3.3677006 1.3418528 --1.6412401 -3.7626762 1.4995364 --1.6730744 -3.7723315 1.5072858 --1.7016063 -3.7740116 1.5120028 --1.4709945 -3.2096901 1.2940085 --1.4994043 -3.2193816 1.301421 --3.5053949 -7.4085407 2.9635012 --3.4659514 -7.2103834 2.8934197 --3.5700223 -7.3116632 2.9422746 --1.5884165 -3.2027032 1.3098443 --1.5542644 -3.0860958 1.2670541 --1.5680283 -3.0664408 1.2630109 --1.6128362 -3.1069033 1.2832267 --1.6792622 -3.1869142 1.3196152 --1.7072196 -3.1923263 1.326017 --4.1527805 -7.6531348 3.1464548 --1.6999496 -3.0870066 1.2916501 --1.752835 -3.1373453 1.3165829 --1.8518891 -3.267427 1.3745351 --1.9633939 -3.4151807 1.4402366 --1.9805187 -3.3965619 1.4375411 --4.1738653 -7.0590587 2.9651859 --1.8714858 -3.1208622 1.3327556 --2.0441699 -3.3619452 1.4385519 --2.1966591 -3.5633457 1.5285125 --1.983494 -3.173718 1.369818 --1.9727021 -3.1137638 1.3496021 --1.9815972 -3.0857549 1.3428636 --2.535074 -3.8950505 1.6936086 --1.9638506 -2.9771042 1.3068119 --1.9773723 -2.9579532 1.3037796 --2.7066529 -3.9958467 1.7576255 --2.0929 -3.0491362 1.3539822 --2.5437126 -3.6577559 1.6248747 --5.7088404 -8.1033821 3.5777264 --2.697248 -3.7787747 1.691924 --5.5883031 -7.7290378 3.4436278 --5.5666409 -7.6004114 3.4018486 --5.5021033 -7.416388 3.3351362 --5.3919711 -7.1754885 3.24248 --2.6801784 -3.5211842 1.6140929 --5.5106573 -7.1490498 3.2606745 --5.517921 -7.0683446 3.2394478 --5.5553489 -7.026968 3.2360785 --5.5824738 -6.9729033 3.2269814 --5.6257467 -6.93925 3.2273183 --6.1443305 -7.4846144 3.4958522 --6.1925468 -7.4496689 3.4972 --6.2648163 -7.4432278 3.5120249 --3.177614 -3.7283471 1.7835692 --3.2299538 -3.7429972 1.7997419 --3.272681 -3.7457986 1.8105236 --0 -0 0 --3.3278224 -3.7158771 1.8155776 --3.0754797 -3.3919501 1.6690127 --2.8371232 -3.090694 1.5318818 --2.7297804 -2.9373474 1.4655064 --2.7922642 -2.9678628 1.4887546 --2.7857487 -2.9247644 1.4759512 --0 -0 0 --2.9832036 -3.0561161 1.5588362 --3.025722 -3.0618653 1.5709658 --3.0650933 -3.0638785 1.5814106 --3.6907704 -3.6444154 1.8866701 --3.7272158 -3.6355076 1.8937457 --3.7555544 -3.6184492 1.896778 --3.800873 -3.6174085 1.9082336 --3.8326006 -3.6030478 1.9129506 --3.8256612 -3.5525532 1.8987995 --9.6843596 -8.8837643 4.7333994 --9.9012499 -8.9714813 4.8119044 --4.0180883 -3.5958154 1.960121 --4.0584168 -3.587307 1.9688812 --9.0356369 -7.8891559 4.3230176 --9.0895777 -7.8384848 4.3257132 --4.0291471 -3.4314086 1.9244063 --4.0602131 -3.4151073 1.9291234 --4.1911697 -3.4815845 1.9803369 --10.008539 -8.2114697 4.6633177 --4.3213615 -3.5010195 2.0207686 --10.107818 -8.0874424 4.662981 --4.335927 -3.4255447 2.0079651 --0 -0 0 --9.7477875 -7.5092845 4.4338679 --0 -0 0 --9.8580256 -7.403234 4.4422913 --9.938055 -7.3684034 4.4577899 --0 -0 0 --4.4973297 -3.2494435 2.0160515 --10.236031 -7.3012366 4.5298934 --4.4960656 -3.1652806 1.9981942 --4.6143661 -3.2064109 2.0413213 --0 -0 0 --10.490877 -7.10114 4.5639234 --0 -0 0 --0 -0 0 --10.638751 -6.9191546 4.5720096 --5.9693708 -3.8302002 2.5686183 --6.0381041 -3.8222075 2.5878234 --5.9887719 -3.7397013 2.5571625 --6.021225 -3.7088103 2.5612059 --0 -0 0 --0 -0 0 --6.0755029 -3.5896871 2.555815 --7.1403308 -4.1600184 2.9877603 --7.1436791 -4.1034646 2.9786632 --7.1433258 -4.0451713 2.9682183 --5.5879459 -3.1191564 2.3206372 --7.1907787 -3.9562991 2.9675446 --5.6738067 -3.076381 2.3401792 --7.0760279 -3.7807856 2.9015059 --5.5670033 -2.9306383 2.2818902 --7.1544871 -3.7105744 2.9146464 --5.6520152 -2.8873765 2.301769 --7.3592811 -3.7029123 2.9786632 --5.6195321 -2.7843554 2.2748146 --5.6373568 -2.7502348 2.2751515 --5.6481853 -2.7127392 2.2727928 --6.8197703 -3.2241735 2.7300081 --6.8462539 -3.1854455 2.7327037 --0 -0 0 --7.833405 -3.5285251 3.1050124 --7.4468908 -3.2995853 2.945307 --7.4790802 -3.2590961 2.9500241 --8.5703182 -3.6722696 3.3671446 --7.0491004 -2.969312 2.7677445 --7.1933222 -2.9782343 2.8165994 --8.1245422 -3.3055882 3.1693661 --8.1770191 -3.2686067 3.1818326 --0 -0 0 --9.7020187 -3.7408521 3.7515829 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --7.0748296 -2.4326298 2.7077708 --6.8210669 -2.298656 2.6063545 --11.310612 -3.7347462 4.2930307 --8.4693279 -2.7389388 3.2158625 --6.8541436 -2.1701548 2.6033223 --6.7702031 -2.0979543 2.5669336 --6.7829485 -2.0563736 2.5669336 --0 -0 0 --8.3766375 -2.4277871 3.1515088 --6.9881468 -1.9788975 2.6296027 --7.0636792 -1.9535531 2.653188 --7.0864406 -1.9131198 2.6572311 --8.2971258 -2.1855032 3.1009691 --12.144081 -3.1194363 4.517427 --13.588713 -3.4018221 5.043376 --0 -0 0 --11.413449 -2.7088046 4.2283401 --11.381233 -2.6274955 4.2104826 --9.6351233 -2.1621394 3.5642493 --11.352825 -2.4745967 4.1885824 --11.340161 -2.3990433 4.1784744 --7.4145412 -1.5209603 2.7391052 --13.298775 -2.643389 4.8826599 --12.348571 -2.3758206 4.5305672 --7.5023732 -1.3955928 2.7613428 --7.5358157 -1.3540298 2.7704399 --11.506126 -1.9948175 4.2094717 --11.657448 -1.947455 4.2600117 --11.582726 -1.861989 4.2286768 --12.675161 -1.9579346 4.6201906 --12.609633 -1.8686664 4.5922256 --0 -0 0 --0 -0 0 --13.26563 -1.7169974 4.8172956 --13.326376 -1.6417869 4.8354897 --13.363318 -1.5631599 4.8452606 --14.200845 -1.5728874 5.1434445 --14.16528 -1.4810224 5.1272717 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.8620868 12.869967 4.7813468 --0 0 0 --4.7060485 12.934881 4.7836318 --4.5938754 12.871816 4.7500134 --4.5101266 12.886378 4.7451172 --0 0 0 --4.3061695 12.805464 4.6958318 --4.2142091 12.791245 4.6811442 --4.1225858 12.776381 4.6664567 --4.038136 12.782507 4.6596022 --3.9573948 12.799819 4.656991 --0 0 0 --3.7965391 12.835635 4.6527481 --0 0 0 --3.6253827 12.833956 4.6357756 --3.5402844 12.833179 4.6276159 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --3.4319389 14.503819 5.1772618 --0 0 0 --0 0 0 --3.2031078 14.742807 5.2402558 --3.0737939 14.578126 5.1753035 --0 0 0 --0 0 0 --2.8567019 14.902383 5.2702837 --0 0 0 --0 0 0 --2.5137489 14.557501 5.1318932 --0 0 0 --2.3335729 14.578852 5.1289558 --2.243644 14.590094 5.1279764 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.197776 13.778579 4.8064795 -1.2823849 13.771911 4.8068056 -1.3692008 13.787298 4.8149652 -1.6021663 15.183949 5.3029232 -1.6914172 15.139075 5.2908468 -1.6214185 13.748495 4.8110485 -1.8277707 14.720396 5.1527824 -0 0 0 -1.9875312 14.545141 5.0999064 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -2.4858918 14.793329 5.2105541 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -3.5117285 13.617551 4.8867722 -3.5558169 13.446797 4.83357 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9638782 -2.2630739 2.8895721 -7.9534726 -2.3129532 2.8908777 -0 -0 0 -0 -0 0 -0 -0 0 -8.0042171 -2.5423696 2.9306977 -7.9938612 -2.5931857 2.932656 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.2773299 -1.9943608 1.6603756 -0 -0 0 -4.2533855 -2.0471101 1.660702 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.1857266 -2.2407985 1.6701674 -4.1968126 -2.2799823 1.6799592 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -3.6001163 -2.1308901 1.4753107 -3.6299205 -2.1787336 1.4926095 -3.6108325 -2.1975238 1.4903249 -3.5683265 -2.2017612 1.4785746 -3.5547495 -2.2236147 1.4785746 -3.5809453 -2.270705 1.4948943 -4.1560469 -2.6715076 1.7367517 -4.7303023 -3.0820198 1.9802409 -4.4116058 -2.9129999 1.8562115 -4.4117146 -2.9521086 1.8637186 -3.6105134 -2.4479358 1.536999 -3.5915303 -2.4673662 1.535367 -3.5685668 -2.4839547 1.5321032 -3.537812 -2.494905 1.5255753 -4.3921347 -3.1382687 1.8947259 -3.7059791 -2.6822758 1.6104375 -3.9851692 -2.921891 1.7370781 -2.989182 -2.2196095 1.3163573 -2.9558702 -2.2231305 1.307871 -2.9399183 -2.2395065 1.3068918 -2.9470716 -2.2736769 1.3160309 -2.9777441 -2.3266492 1.3356144 -3.03159 -2.3988585 1.3656427 -3.3744774 -2.7041945 1.5239433 -3.3343394 -2.7057831 1.5134987 -3.7849634 -3.1103857 1.7223903 -3.6517558 -3.0386019 1.6711466 -3.1603851 -2.6625228 1.4576855 -3.2388923 -2.7628651 1.5007694 -4.109426 -3.5496757 1.9058232 -3.3050485 -2.8901641 1.5467908 -3.2964509 -2.9185371 1.551034 -3.2707403 -2.9317667 1.5474436 -3.2407932 -2.9409785 1.5418949 -3.212944 -2.9518526 1.5373254 -3.1788564 -2.9567006 1.5298184 -8.3893776 -7.9023185 4.0104065 -3.0157938 -2.8747952 1.4694357 -2.9498188 -2.8466289 1.4462618 -2.7680428 -2.7041168 1.3669482 -2.7278829 -2.6977799 1.3555244 -2.6859024 -2.6890459 1.3431215 -3.3343456 -3.3798857 1.6701674 -2.6579776 -2.7272205 1.3457327 -6.8826609 -7.1519289 3.4581492 -6.8699036 -7.2269135 3.4738159 -7.4283867 -7.9112167 3.7780144 -6.8154073 -7.3481011 3.4914412 -2.7071428 -2.9538476 1.4142752 -2.5627708 -2.8309157 1.3493229 -2.5692863 -2.8733704 1.3617259 -2.7530198 -3.1172724 1.4668245 -2.9947212 -3.4333534 1.6039096 -2.9322753 -3.4036725 1.5820413 -2.6198549 -3.0788507 1.4266782 -3.0143027 -3.5870562 1.6486255 -2.995857 -3.6098492 1.6505839 -2.8975785 -3.5352995 1.6091319 -2.8716702 -3.547868 1.6068472 -2.7749197 -3.4716311 1.5653952 -2.7816668 -3.5242138 1.5810621 -3.1782174 -4.0781136 1.8160652 -2.9911988 -3.887001 1.7243487 -1.8999722 -2.4998713 1.1149727 -1.8619156 -2.4812319 1.1019169 -1.8505927 -2.4979279 1.1042017 -2.9646215 -4.0546327 1.7651478 -2.9889069 -4.1409717 1.7941968 -3.0051141 -4.2177491 1.8190027 -3.0215774 -4.2964258 1.8444613 -3.0172498 -4.3467264 1.8578435 -2.9146867 -4.2544107 1.8114957 -2.8975246 -4.2855291 1.8170444 -1.6025525 -2.4009187 1.0274993 -1.5929867 -2.4186025 1.0307633 -1.5642182 -2.4069264 1.0219506 -0 -0 0 -1.5360787 -2.4283376 1.0229298 -1.5491537 -2.4826357 1.0412078 -2.02408 -3.289216 1.3643371 -1.9822913 -3.2660129 1.3499757 -1.5851966 -2.6478209 1.0963683 -1.9137292 -3.2420578 1.3307185 -1.9398977 -3.3329961 1.3623787 -1.7816391 -3.1045816 1.2667454 -1.7318552 -3.0611467 1.2452035 -1.7691731 -3.1724498 1.2850236 -1.6277245 -2.9612081 1.1975502 -1.636071 -3.020185 1.2168074 -1.6401951 -3.0727019 1.2334534 -1.6125164 -3.0659735 1.2269255 -1.4724296 -2.8416128 1.1358619 -1.3055322 -2.5575547 1.022277 -1.3848429 -2.7547269 1.0953891 -1.3796474 -2.7868958 1.1045281 -0 -0 0 -1.2411476 -2.5862668 1.0212978 -1.4870458 -3.1486266 1.233127 -1.4485883 -3.1165411 1.2174602 -1.0585836 -2.3137872 0.90934497 -1.4699205 -3.2668498 1.2677246 -1.6665977 -3.7659702 1.4527895 -0.9140349 -2.0988405 0.82121885 -0.89928126 -2.1000638 0.81958687 -0.88930899 -2.1125133 0.82219803 -0.87849575 -2.1231718 0.8241564 -1.5094017 -3.7146032 1.4152544 -1.4631177 -3.6649706 1.393386 -1.437499 -3.6659584 1.3904485 -1.4030993 -3.6438327 1.3790247 -1.319263 -3.4896684 1.3189684 -1.3500646 -3.6386189 1.3708649 -1.2459687 -3.4220948 1.2882874 -1.1480778 -3.2142317 1.2093003 -1.0097076 -2.8821812 1.0852709 -2.5113697 -7.3176689 2.7022226 -1.1055872 -3.2849932 1.2275783 -1.0277487 -3.1166458 1.1639316 -1.1615337 -3.5969765 1.3359408 -0.89947259 -2.8441958 1.0607914 -0.90796256 -2.9336481 1.091146 -0.89076567 -2.9418783 1.0921252 -0.77969462 -2.6327541 0.97886676 -0.75328994 -2.6020741 0.96613741 -0.67360413 -2.3810515 0.88519192 -1.9915779 -7.2173347 2.6160548 -0.8811844 -3.2690234 1.1998349 -0.84310269 -3.2058012 1.1753554 -0.8039549 -3.1349118 1.1482648 -0.76960003 -3.0792563 1.1267228 -0.75024509 -3.0820835 1.12607 -0.69759458 -2.944052 1.0754791 -0.69329274 -3.008153 1.0966947 -1.9395058 -8.667902 3.097811 -0.65793079 -3.0238237 1.0993059 -0.68946451 -3.2655067 1.1831888 -0.60203725 -2.9399867 1.0669929 -1.603388 -8.0925684 2.8794541 -1.553169 -8.0994692 2.878475 -0.50615114 -2.7256508 0.98800576 -0.68452978 -3.8192022 1.3705385 -0.4641445 -2.6822894 0.97070694 -0.45449963 -2.7261138 0.9850682 -0.51914519 -3.237535 1.1629524 -0.50099337 -3.2518706 1.1668692 -0.60014039 -4.0628333 1.4488729 -0.411506 -2.9067905 1.0444717 -0.34627289 -2.5579801 0.92207432 -0.46518531 -3.6063135 1.286329 -0.29441002 -2.3950322 0.86397636 -0.28265476 -2.4221442 0.87278897 -0.27429822 -2.4830258 0.89335173 -0.25974053 -2.4912434 0.8956365 -0.34938586 -3.5680845 1.2687038 -0.21349148 -2.3229246 0.83623296 -0.19409788 -2.2639143 0.8153438 -0.18348004 -2.3065236 0.82970506 -0.22153033 -3.0240846 1.0777639 -0.54335886 -8.1287098 2.8438773 -0.21301986 -3.4992721 1.2412869 -0.1603885 -2.9276028 1.0431662 -0.14151132 -2.9096491 1.0366384 -0.12448998 -2.930295 1.0434926 -0.31582186 -8.7555571 3.0560327 -0.08747983 -2.8966439 1.0314161 -0.070732906 -2.9405947 1.0464301 -0.050453726 -2.8133864 1.002367 -0.033383735 -2.8306561 1.0082421 -0 -0 0 --0.0014491337 -2.9357736 1.0444717 --0 -0 0 --0 -0 0 --0 -0 0 --0.072847039 -2.9093406 1.0356592 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.4343574 -3.7118115 1.4048098 --1.4512172 -3.6879895 1.3992611 --0 -0 0 --1.4727938 -3.6121421 1.3777192 --1.3528273 -3.2608373 1.249773 --1.3687634 -3.2428973 1.2461827 --1.4289404 -3.3282297 1.2814332 --1.6215588 -3.7134922 1.4299421 --1.6615857 -3.7423434 1.4446298 --1.6638941 -3.6864221 1.427331 --1.4936244 -3.2560804 1.2677246 --3.426326 -7.3464847 2.8298423 --3.4903693 -7.3654666 2.8451829 --3.6027596 -7.4835768 2.8987112 --3.6465335 -7.4570847 2.8970792 --3.7384818 -7.5276866 2.9329824 --1.5600933 -3.0950949 1.2275783 --1.5751768 -3.0778925 1.2246407 --1.5922885 -3.0648148 1.2233353 --1.7072465 -3.2372234 1.2944889 --1.7159195 -3.2058563 1.286329 --2.3179026 -4.266572 1.7073762 --2.3358207 -4.237371 1.7015011 --2.3608537 -4.2213092 1.7008483 --2.3783112 -4.1919475 1.6949733 --2.3973842 -4.1658077 1.6904038 --1.8065374 -3.095633 1.2683774 --2.4343555 -4.1124892 1.6809384 --2.0964859 -3.4929764 1.4374491 --2.1390193 -3.5147614 1.451484 --2.16998 -3.5168521 1.4576855 --1.9743664 -3.1565411 1.3163573 --1.9891397 -3.1371839 1.3134197 --4.7146616 -7.3329048 3.0410187 --2.5870144 -3.9709113 1.6672299 --2.5607922 -3.8784614 1.6355698 --2.5861192 -3.865032 1.636549 --2.6219912 -3.8670821 1.644056 --2.6836863 -3.9062266 1.6672299 --2.6249509 -3.7710118 1.6172917 --5.5826745 -7.9137878 3.3749189 --2.6759768 -3.7454362 1.6202292 --2.6002245 -3.5926738 1.5621313 --2.6647105 -3.6345756 1.5869372 --5.3270226 -7.1712198 3.1154363 --5.3936601 -7.1686087 3.1284921 --2.8234162 -3.7059414 1.6394864 --5.4864221 -7.1086144 3.1314297 --5.5212035 -7.0636468 3.1265337 --5.5585737 -7.0222254 3.1232698 --0 -0 0 --3.023351 -3.7254596 1.6874663 --6.137116 -7.4663253 3.3680646 --6.2438951 -7.5018988 3.4010303 --0 -0 0 --3.1193905 -3.6566114 1.6904038 --6.5830221 -7.6195641 3.5077608 --6.6620164 -7.6160197 3.5247333 --3.2463384 -3.6664989 1.7217375 --3.322418 -3.7063243 1.749481 --3.2783794 -3.6123891 1.7152097 --2.7273219 -2.9686859 1.4227614 --2.7712438 -2.9795737 1.4358171 --2.9016092 -3.0815358 1.4922832 --2.9335103 -3.077354 1.498811 --2.8814275 -2.985858 1.4635606 --3.6489663 -3.7346404 1.8336904 --2.8885972 -2.920711 1.4491993 --0 -0 0 --0 -0 0 --3.7198834 -3.6248393 1.8242249 --8.4209251 -8.10359 4.0662193 --3.7949181 -3.6082201 1.8389127 --3.8224995 -3.5900426 1.8415239 --3.834059 -3.55688 1.836628 --3.8606908 -3.5377567 1.8389127 --3.8844283 -3.5159039 1.8398919 --3.9193196 -3.5039701 1.8460933 --3.9768879 -3.5117564 1.8627394 --9.0898409 -7.9259853 4.1951447 --4.0325766 -3.4737911 1.8686144 --4.0934186 -3.482662 1.886566 --4.122673 -3.4641666 1.8901564 --4.1729517 -3.4629443 1.9032122 --4.244575 -3.478605 1.9257333 --4.3128715 -3.4905431 1.9466225 --10.16694 -8.123662 4.5244756 --4.4607611 -3.5204866 1.9929702 --4.5039034 -3.5098948 2.0024357 --4.6662126 -3.5905349 2.0637975 --4.5594335 -3.4640794 2.0079844 --9.8819666 -7.411037 4.2960005 --4.5628538 -3.379185 1.9913383 --4.603344 -3.3656251 1.9998245 --4.6223755 -3.33621 1.9991717 --4.7890487 -3.4119651 2.0611863 --10.438712 -7.3392496 4.4370022 --10.552668 -7.3230162 4.4660511 --10.485095 -7.1812248 4.4190507 --11.399846 -7.7052875 4.7819996 --11.408377 -7.6094966 4.7660065 --11.497492 -7.5674114 4.7836318 --10.65976 -6.9227748 4.4197035 --10.723526 -6.8710041 4.4285159 --10.745507 -6.7924519 4.4203563 --10.788588 -6.7273908 4.4210091 --6.0944395 -3.7491479 2.5014908 --6.06318 -3.6788399 2.4796224 --6.1034846 -3.6522424 2.4868031 --5.6853242 -3.3549161 2.3102243 --5.6445212 -3.2843261 2.2857449 --5.6703072 -3.2529216 2.2880297 --6.0662036 -3.43065 2.4371912 --5.8749366 -3.2751153 2.3533082 --5.6703987 -3.1156912 2.2648559 --6.1474419 -3.3287585 2.4446983 --5.7765956 -3.0823483 2.29162 --5.6882977 -2.9905632 2.2498417 --5.6637306 -2.9334412 2.2331955 --5.6824651 -2.8990633 2.2335219 --7.2780199 -3.6566083 2.8432245 --7.4019918 -3.6621675 2.8823917 --7.4829612 -3.6452353 2.9049127 --8.0208597 -3.846463 3.1023805 --7.9528422 -3.7540143 3.0674565 --7.4553447 -3.4634855 2.8693359 --6.9150534 -3.1611412 2.6562011 --7.4455581 -3.3484819 2.8497522 --7.4564548 -3.2985289 2.8461618 --7.0258102 -3.0566938 2.6764376 --7.0505176 -3.0161283 2.6787224 --8.2757454 -3.4801326 3.1307769 --8.2812176 -3.422791 3.1249018 --0 -0 0 --0 -0 0 --7.2682137 -2.8487768 2.7263756 --7.2670302 -2.796999 2.7195215 --11.474594 -4.335072 4.2662988 --11.490342 -4.2606411 4.262382 --11.476295 -4.175518 4.247694 --11.446504 -4.0853281 4.227458 --11.220648 -3.9272957 4.1357412 --11.430506 -3.9221656 4.2036309 --0 -0 0 --6.8541508 -2.2587466 2.5227063 --11.918173 -3.8457489 4.3550773 --6.8552141 -2.1662104 2.5132411 --0 -0 0 --12.618476 -3.81668 4.5829 --11.304659 -3.3438516 4.10147 --7.0624981 -2.0424647 2.5693805 --7.052156 -1.9926697 2.5612206 --7.3758869 -2.0353026 2.6728473 --8.1941891 -2.2069554 2.9610524 --12.885714 -3.3851762 4.631206 --12.756985 -3.2678275 4.5780039 --12.787801 -3.1922369 4.5819206 --14.189487 -3.4496603 5.0731425 --6.72188 -1.5912009 2.4159758 --11.441453 -2.6335404 4.0848241 --7.4530334 -1.6678392 2.6679513 --11.401784 -2.4774907 4.0596919 --13.552397 -2.8576038 4.8133335 --13.368713 -2.7333241 4.742506 --7.5390086 -1.4937927 2.6845973 --7.5730977 -1.4523089 2.6934099 --7.6664433 -1.4214827 2.7231116 --11.459195 -2.0514824 4.0505528 --11.526523 -1.9906167 4.0698099 --11.606587 -1.9311723 4.0936365 --11.785291 -1.8866481 4.152061 --12.765476 -1.9632058 4.4905305 --11.819713 -1.7436745 4.1563039 --0 -0 0 --13.909497 -1.8776538 4.8773065 --11.906993 -1.5331749 4.1762142 --12.930402 -1.5842578 4.5290451 --13.430932 -1.5619524 4.6997485 --13.433686 -1.4787889 4.697464 --13.415241 -1.3935038 4.6879983 --13.44894 -1.3136419 4.6968112 --13.484986 -1.233677 4.7066031 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --6.932714 13.372181 5.0473719 --6.8285255 13.371375 5.0312567 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.7541237 13.046803 4.6555562 --4.6212835 12.928319 4.6034198 --4.5873837 13.086255 4.6492367 --0 0 0 --4.3583021 12.939261 4.5781412 --4.7926559 14.522626 5.124155 --4.1294441 12.776008 4.5026221 --4.0289311 12.731455 4.4782915 --3.9454029 12.738717 4.4722877 --0 0 0 --0 0 0 --3.7110484 12.811914 4.4732356 --3.6199629 12.790625 4.4580688 --3.5363574 12.794306 4.4517493 --3.8075359 14.111909 4.8988614 --0 0 0 --0 0 0 --0 0 0 --3.3827968 13.884003 4.790164 --0 0 0 --3.3426971 14.490252 4.9835439 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --2.9517183 14.863285 5.0777059 --0 0 0 --0 0 0 --0 0 0 --2.5156231 14.52459 4.9402547 --0 0 0 --2.3349378 14.540316 4.9355149 --2.2200637 14.388402 4.8795862 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.1007953 14.860456 4.9936552 -1.1158608 13.904858 4.6767273 -1.2000967 13.885461 4.6726193 -0 0 0 -1.5074058 15.256675 5.1367941 -1.5992076 15.230154 5.1311069 -1.6929425 15.222884 5.1320548 -1.7796789 15.155672 5.1130958 -0 0 0 -1.922276 14.799625 5.0012388 -2.0060112 14.735847 4.98386 -2.0961235 14.721381 4.9832277 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -2.9822171 14.968464 5.1140437 -0 0 0 -0 0 0 -0 0 0 -3.3984084 15.112 5.1895628 -3.481662 15.050191 5.1756597 -3.5618713 14.977778 5.1582808 -0 0 0 -0 0 0 -3.5080793 13.63158 4.7187524 -3.5628488 13.500632 4.6811509 -3.6565187 13.518815 4.6950541 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9589763 -2.2580483 2.7862172 -7.9440598 -2.3065767 2.7859013 -0 -0 0 -0 -0 0 -0 -0 0 -8.0152922 -2.5421367 2.8314025 -7.9887118 -2.5877616 2.8276107 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.3058949 -2.0062079 1.6129826 -4.2797832 -2.0260963 1.607927 -4.2869368 -2.061775 1.6151946 -0 -0 0 -4.2740622 -2.1205511 1.6199342 -4.2652068 -2.1488705 1.6215142 -4.2282896 -2.1629045 1.6126667 -4.2199912 -2.1914313 1.6145626 -4.2324848 -2.2309959 1.6243579 -4.2170424 -2.2560291 1.623726 -4.2106252 -2.2859354 1.6265699 -4.2089853 -2.318594 1.6313095 -4.1681762 -2.3295662 1.6211982 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -3.717253 -2.2610459 1.479955 -3.6782739 -2.2683759 1.4701596 -3.800251 -2.3758907 1.5235603 -3.8192611 -2.4204922 1.5368315 -3.689383 -2.370049 1.4913303 -4.4675179 -2.9087005 1.8063626 -4.5652099 -3.0123401 1.8524957 -4.093915 -2.7376075 1.671123 -3.6222532 -2.4545555 1.4881705 -4.4683151 -3.0679379 1.8360647 -4.0093393 -2.7892039 1.6575359 -4.0107627 -2.8268688 1.6651194 -3.9894807 -2.8486688 1.6635395 -4.163352 -3.0115387 1.7422186 -4.478488 -3.2814975 1.879986 -4.0613213 -3.0143442 1.7153603 -3.0188928 -2.2696271 1.288787 -3.0101941 -2.2921307 1.2909988 -3.5776253 -2.758954 1.5355675 -3.4634166 -2.7049441 1.4944901 -3.4400563 -2.7208478 1.4916463 -3.332207 -2.6689587 1.4527807 -3.2494454 -2.6355715 1.4243425 -3.755276 -3.0841544 1.6493204 -3.7990205 -3.1593046 1.6764947 -3.8231115 -3.2192185 1.6954535 -3.4920926 -2.9773386 1.5592661 -3.047843 -2.6311018 1.3718897 -3.903235 -3.4114084 1.7573856 -3.2242355 -2.8531373 1.464788 -3.2102017 -2.8760321 1.4663678 -3.212173 -2.9135213 1.4752153 -3.2165997 -2.9537089 1.4853266 -3.131007 -2.9107349 1.4546766 -3.1110153 -2.9279411 1.4537287 -3.031852 -2.8887324 1.4256064 -2.9771922 -2.8717163 1.4085435 -2.8108423 -2.7447793 1.3393438 -2.7615576 -2.7299614 1.3241768 -2.7279878 -2.730078 1.3162773 -2.9651437 -3.0040057 1.4366658 -6.93962 -7.1166544 3.3413947 -6.9590116 -7.2246981 3.3717287 -3.3181083 -3.4876542 1.6341534 -3.3167894 -3.5293791 1.6439488 -2.5255949 -2.7208662 1.2673002 -2.5242426 -2.7530937 1.2748839 -2.5971127 -2.8676772 1.319437 -2.5851617 -2.8899224 1.3222809 -2.8991106 -3.2811029 1.4891185 -2.671788 -3.0615246 1.384213 -2.6300309 -3.0512729 1.3725218 -2.6161797 -3.073132 1.3750496 -2.570406 -3.0571766 1.3611465 -2.8916619 -3.4823484 1.5384114 -2.8497829 -3.4750841 1.527668 -3.0565257 -3.7741358 1.6483725 -2.9586384 -3.6994653 1.608559 -3.2258055 -4.0846014 1.7643372 -2.7368009 -3.5095611 1.5131329 -2.6660089 -3.4623942 1.4862746 -1.8901178 -2.4863207 1.0710766 -1.866282 -2.4864905 1.0663369 -2.6029558 -3.5124047 1.4869065 -2.8945491 -3.9563186 1.6635395 -2.9407761 -4.0716791 1.7036691 -3.0462859 -4.2727261 1.7785563 -3.0636985 -4.3534055 1.8038348 -3.0277264 -4.3588758 1.7984631 -3.0170195 -4.4008465 1.8079425 -2.9516764 -4.3627 1.7851919 -1.6250331 -2.4342182 1.0056686 -1.6236393 -2.4647417 1.0138842 -1.6167599 -2.4873846 1.0189399 -0 -0 0 -0 -0 0 -1.5400531 -2.467629 0.99966502 -2.0019698 -3.2517869 1.3026901 -1.9962626 -3.2875261 1.3118535 -1.6191795 -2.7039223 1.080556 -1.9340554 -3.2750154 1.2976344 -1.9010313 -3.2646852 1.2891029 -1.8648998 -3.2483144 1.2783597 -1.8196932 -3.2151113 1.2612966 -1.8309079 -3.2817254 1.2824674 -1.7750721 -3.2280552 1.2578208 -1.7204174 -3.17466 1.2334905 -1.6450297 -3.0805485 1.1939929 -1.6291898 -3.0964615 1.1962048 -1.544654 -2.9800568 1.1488078 -1.6277487 -3.1880417 1.2230631 -1.273057 -2.5317702 0.9747026 -1.41879 -2.8651536 1.095723 -1.8058559 -3.7035303 1.4031718 -1.7559937 -3.6580923 1.3823171 -1.5328389 -3.2441924 1.2259068 -1.4572852 -3.1339605 1.1819856 -0.9728955 -2.1265831 0.80976093 -0.9430781 -2.0953133 0.79617375 -0.92866683 -2.0975904 0.79490983 -0.930556 -2.1371722 0.8072331 -0.92190778 -2.1533072 0.81102484 -1.5441921 -3.6681473 1.3564067 -1.5198414 -3.6731699 1.3548268 -1.2095336 -2.9749458 1.1004628 -1.4735955 -3.6889012 1.3538789 -0.92197472 -2.3501434 0.87169307 -1.3992136 -3.6314571 1.3270205 -0.89373696 -2.3630555 0.872325 -1.2310067 -3.3157153 1.2088439 -1.2181102 -3.3437088 1.2161115 -1.1905445 -3.3314652 1.20916 -1.1468529 -3.2724526 1.1857774 -1.0157318 -2.956419 1.0720245 -1.0947962 -3.251214 1.1734542 -1.0334941 -3.1326363 1.1295329 -0.96405995 -2.9836421 1.0751843 -0.91395789 -2.8890967 1.0401105 -0.89256412 -2.8828685 1.0360028 -0.71389288 -2.3571167 0.85115433 -0.70588636 -2.3832846 0.85873789 -0.72160852 -2.4923701 0.89507556 -0.69131511 -2.4438026 0.87674874 -0.67226261 -2.433367 0.87169307 -0.88916713 -3.2966573 1.1680825 -0.83752131 -3.1827757 1.1270051 -0.84510642 -3.2935359 1.1633428 -0.76846558 -3.0731621 1.0859276 -0.74892068 -3.0750539 1.0849797 -0.70507717 -2.9743519 1.0489579 -0.7017439 -3.0433357 1.0710766 -0.69198447 -3.0873923 1.0846637 -0.70372075 -3.2324884 1.1326927 -0.67013675 -3.1717682 1.1105741 -1.7039543 -8.3137445 2.8573129 -0.43838498 -2.2091496 0.78100669 -0.42715016 -2.2239101 0.78511447 -0.50279617 -2.7068739 0.94784427 -0.42162439 -2.3503826 0.8261919 -0.51617885 -2.9820752 1.0388466 -0.44991851 -2.6978896 0.94184065 -0.5180614 -3.2279956 1.1197375 -0.42517012 -2.7575924 0.96016753 -0.43019542 -2.908438 1.0100924 -0.35906735 -2.5352743 0.88370031 -0 -0 0 -1.0361618 -8.0176125 2.7233372 -0.29774055 -2.4228046 0.84388679 -0.28793311 -2.4679341 0.85842186 -0.28603181 -2.5894172 0.89855134 -0.26146835 -2.5080836 0.87074512 -0.24727957 -2.5219157 0.87485284 -0.25301218 -2.7539105 0.95195204 -0.24852315 -2.9000406 1.000297 -0.65619779 -8.2432222 2.7849534 -0.20950966 -2.8565073 0.98481399 -0.49840802 -7.4100518 2.5043628 -0.52225018 -8.546526 2.8825912 -0.48360604 -8.8006134 2.966326 -0.11495217 -2.3613844 0.81829238 -0.10600515 -2.4919078 0.86158168 -0.088807203 -2.4403641 0.84420276 -0.091910809 -3.0354645 1.0423224 -0.072938599 -3.021744 1.0375826 -0 -0 0 -0.031256661 -2.6391377 0.90992665 -0 -0 0 --0.0012016643 -2.8850529 0.99176556 --0 -0 0 --0 -0 0 --0.055139288 -2.9291263 1.0066166 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.4244105 -3.7569149 1.369046 --3.1026649 -8.0355034 2.8996542 --1.4641579 -3.7232587 1.3633583 --3.2225444 -8.0505543 2.9189291 --1.4828923 -3.6391118 1.3396598 --1.4132721 -3.4082046 1.2597167 --1.3751665 -3.2595973 1.20916 --1.3865379 -3.2310438 1.2018924 --1.4146838 -3.2416067 1.2088439 --1.6465309 -3.7107267 1.3829491 --1.6579573 -3.6754723 1.3737856 --3.4800603 -7.591218 2.8121276 --3.4933219 -7.4983392 2.7859013 --3.4938052 -7.3807168 2.7505116 --3.5850749 -7.454906 2.7859013 --3.6482382 -7.4685736 2.7991724 --3.6834555 -7.4247994 2.7912729 --1.5598642 -3.0958784 1.1854614 --1.5779667 -3.0845594 1.1848295 --1.595552 -3.072293 1.1838815 --1.8107724 -3.435112 1.3241768 --0 -0 0 --1.6767259 -3.0882652 1.2012604 --4.1343498 -7.5057831 2.8848031 --4.1507072 -7.4272671 2.8645804 --4.1943307 -7.3983574 2.8633165 --1.8631504 -3.2394712 1.2755158 --1.9871904 -3.4066451 1.3443995 --2.0433142 -3.4540012 1.3674661 --2.0981405 -3.4975402 1.3892686 --2.1333649 -3.5072982 1.3981161 --1.9536767 -3.1678736 1.2704601 --1.9720719 -3.1542172 1.2698282 --1.9949434 -3.1476676 1.27204 --4.6142359 -7.1835122 2.8743758 --2.0939803 -3.2159801 1.3090097 --5.313343 -8.0529184 3.2440727 --2.4955633 -3.7318923 1.5260881 --2.5141575 -3.7102258 1.5235603 --2.5771482 -3.7533937 1.5472589 --2.6754346 -3.8457744 1.5911801 --2.7077258 -3.8416944 1.5962358 --2.71526 -3.8026147 1.5870723 --2.7535534 -3.8066397 1.5956038 --2.7948015 -3.8141637 1.6057152 --2.826633 -3.8083718 1.6104548 --2.8738899 -3.8228095 1.623726 --5.436327 -7.1402512 3.0197268 --5.4922023 -7.1225386 3.0263622 --5.6403241 -7.2225595 3.0829227 --5.9728994 -7.5524702 3.2377532 --5.6941338 -7.1098471 3.0645959 --6.1171207 -7.5427165 3.2652433 --6.1675014 -7.5101728 3.2674551 --3.0962195 -3.7231498 1.6436328 --3.1141176 -3.6982753 1.6411049 --6.4899573 -7.6127076 3.3625653 --3.1791039 -3.6827655 1.6512163 --3.2316079 -3.6974816 1.6663834 --3.2674365 -3.6925054 1.6730189 --2.7101791 -3.0250449 1.383581 --2.7509966 -3.0329568 1.3946403 --2.7958624 -3.0446742 1.4075955 --3.4197261 -3.6786151 1.7036691 --3.4532864 -3.6693091 1.7090406 --3.4940593 -3.6672857 1.7178881 --3.5118852 -3.6409972 1.7156763 --3.5480785 -3.6336362 1.7223119 --3.5749757 -3.6165209 1.7245237 --3.6145468 -3.6119552 1.7327392 --3.6852536 -3.6377008 1.7554898 --0 -0 0 --3.7596817 -3.621165 1.7693928 --3.7728946 -3.5895257 1.7652851 --8.5580873 -8.0433464 3.942389 --9.8275318 -9.1235952 4.4969344 --10.067929 -9.2324142 4.5803533 --0 -0 0 --0 -0 0 --9.9226408 -8.7684631 4.4410057 --10.072751 -8.7916403 4.4836631 --9.1434755 -7.8821878 4.0514021 --9.1887779 -7.8234758 4.0501385 --9.9838047 -8.3952951 4.3752818 --10.462833 -8.6890945 4.5604463 --10.678072 -8.7577047 4.6302781 --9.7967682 -7.9348083 4.2296152 --4.6092963 -3.6863945 1.9965827 --4.6176829 -3.6468694 1.9905791 --10.450634 -8.1505003 4.4447975 --4.6139798 -3.5528793 1.9703563 --4.6145468 -3.5084219 1.9615089 --4.6291585 -3.4749148 1.958665 --4.6603022 -3.4537899 1.9627728 --4.7258153 -3.4576259 1.9810996 --4.7346363 -3.4196746 1.9760439 --10.366869 -7.3918414 4.2713246 --10.387201 -7.3106174 4.2612128 --0 -0 0 --11.275842 -7.7309289 4.5841451 --11.484934 -7.7711291 4.6492367 --11.548181 -7.71105 4.6555562 --0 -0 0 --10.674701 -6.939889 4.2713246 --10.724269 -6.87887 4.274168 --10.763068 -6.8109083 4.2729044 --0 -0 0 --0 -0 0 --6.0924811 -3.6998796 2.4048293 --6.1118131 -3.6604772 2.4035652 --6.0769753 -3.5891297 2.3814466 --6.0414944 -3.5183489 2.359328 --0 -0 0 --6.0792613 -3.4411411 2.3574321 --6.0041561 -3.3501439 2.3207784 --5.9813704 -3.2894633 2.3043475 --5.8988471 -3.1970878 2.2654819 --5.9376006 -3.1711142 2.2727494 --0 -0 0 --5.7553892 -2.9835954 2.1899626 --5.9806004 -3.0539491 2.2673779 --7.6842189 -3.8647504 2.8955464 --7.7154393 -3.8213181 2.8983903 --7.3584151 -3.5884128 2.7574632 --7.6385908 -3.6672149 2.8528891 --7.8934093 -3.7301414 2.9385197 --7.5393543 -3.5063789 2.8001204 --7.3795605 -3.3771338 2.7337646 --6.9226046 -3.1167593 2.5593436 --7.0014544 -3.1007364 2.5811462 --7.027307 -3.0607491 2.583674 --7.1488667 -3.0616527 2.6209598 --0 -0 0 --0 -0 0 --12.673143 -5.1539111 4.5873046 --12.666644 -5.0609155 4.5737176 --11.588187 -4.5477309 4.1768465 --11.567183 -4.4577756 4.1594672 --11.582782 -4.3823519 4.1553597 --11.599669 -4.3075652 4.1518841 --11.652624 -4.2460551 4.1613631 --11.60252 -4.1473293 4.1345048 --11.691318 -4.0983458 4.1569395 --0 -0 0 --11.696673 -3.9397254 4.1414566 --6.9112802 -2.280601 2.4547541 --6.9233379 -2.2375677 2.4541221 --6.9088964 -2.1861701 2.4443266 --12.283762 -3.804481 4.3136659 --7.7968864 -2.3623445 2.7441919 --7.1617365 -2.1219804 2.5185821 --7.0342817 -2.0373421 2.4699211 --7.0046568 -1.9822561 2.4553859 --6.9471884 -1.920027 2.4313715 --6.9441824 -1.873409 2.4263158 --7.0298648 -1.8503304 2.4519103 --8.1539555 -2.0928521 2.8345623 --8.2080612 -2.0531433 2.8487813 --8.246315 -2.0090301 2.8576288 --8.2354078 -1.95292 2.8497293 --7.6176648 -1.7571014 2.6345468 --7.5903459 -1.7018151 2.6215916 --11.505288 -2.505734 3.9525003 --9.5024309 -2.0084727 3.2655594 --13.386608 -2.7439086 4.581933 --13.358524 -2.6528463 4.5667658 --12.503407 -2.4033551 4.2713246 --10.401426 -1.9331516 3.5543652 --10.419629 -1.8704669 3.5565772 --11.717255 -2.0293243 3.9913659 --12.640038 -2.1093714 4.2988148 --12.678036 -2.0358362 4.3073463 --11.915776 -1.8384825 4.0463467 --0 -0 0 --13.722245 -1.9451712 4.646709 --11.948539 -1.6189679 4.0466623 --11.996825 -1.5506102 4.0596175 --13.606 -1.6738364 4.596468 --13.616957 -1.59043 4.5967841 --13.64249 -1.5086213 4.6021557 --13.609971 -1.4205493 4.5882525 --13.641092 -1.3392388 4.5958362 --13.654721 -1.256035 4.5977321 --13.739685 -1.1788805 4.6236424 --14.013367 -1.1157967 4.712749 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --7.1660256 13.427445 4.9030929 --7.0799561 13.464418 4.9006538 --6.9774961 13.46955 4.8869352 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --5.0347905 13.320206 4.5893874 --0 0 0 --4.7716122 13.108021 4.4964037 --4.65555 13.03749 4.462564 --4.592145 13.113452 4.4787216 --4.4760404 13.037788 4.4436622 --0 0 0 --4.7640491 14.452166 4.9021783 --4.1191597 12.758146 4.3226314 --4.025877 12.735958 4.3067784 --3.9327407 12.712197 4.2906203 --3.8585274 12.748851 4.2948885 --3.7837422 12.784159 4.298852 --3.7012599 12.793411 4.2942786 --3.6188064 12.802134 4.2897058 --0 0 0 --3.8055112 14.122925 4.7131624 --3.7163622 14.136798 4.7101135 --3.6104012 14.084605 4.6854196 --3.7401226 14.972301 4.9710774 --3.4172578 14.045488 4.6582866 --0 0 0 --3.1153517 13.524858 4.4738441 --3.328917 14.86905 4.9085803 --0 0 0 --3.0927303 14.655308 4.8256574 --0 0 0 --0 0 0 --2.8014607 14.600317 4.789988 --2.7076545 14.594757 4.7826715 --2.6931045 15.030149 4.9189458 --2.5095413 14.51802 4.7473073 --2.4182239 14.519993 4.7430391 --2.3131196 14.434874 4.7107234 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0.81921959 14.649478 4.7277961 -0 0 0 -0 0 0 -1.0895079 14.642365 4.7311492 -0 0 0 -1.2107738 13.956124 4.5153055 -1.2969135 13.954122 4.5171347 -1.3811935 13.932633 4.5128665 -0 0 0 -1.549423 13.890971 4.5052447 -1.7858816 15.164722 4.9189458 -1.8696331 15.078813 4.8948617 -1.9469832 14.950894 4.8573632 -2.0426781 14.967919 4.8668141 -2.1098416 14.782566 4.8110237 -0 0 0 -0 0 0 -2.503921 15.498081 5.0564394 -2.6218405 15.618615 5.1006451 -0 0 0 -0 0 0 -2.8420336 15.21009 4.9841866 -2.6228056 13.575597 4.4570765 -3.0254872 15.159124 4.9793091 -3.2120478 15.594548 5.1277776 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -3.7003736 15.536858 5.143631 -0 0 0 -0 0 0 -3.503114 13.593955 4.5247564 -3.5652835 13.492098 4.4982328 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9603682 -2.2605774 2.6800222 -7.9362879 -2.3064537 2.6766689 -0 -0 0 -0 -0 0 -0 -0 0 -8.0207138 -2.5460739 2.7248373 -7.9632673 -2.5817232 2.7108135 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.3467875 -2.0911608 1.5751941 -4.3313079 -2.1165378 1.5742795 -4.3515067 -2.1595945 1.5861692 -4.2760949 -2.1549504 1.5639142 -4.2610965 -2.1802793 1.5633044 -4.2070751 -2.1853013 1.5486709 -4.1851635 -2.2066302 1.5456222 -4.1354418 -2.2129371 1.5325131 -4.197938 -2.2796483 1.5602558 -4.1621861 -2.2934077 1.5523293 -4.1463737 -2.3179734 1.5517195 -4.1635489 -2.3612325 1.5633044 -0 -0 0 -4.0701046 -2.3746955 1.539525 -3.816972 -2.2584319 1.4508095 -3.9091935 -2.3455381 1.4904418 -3.9142525 -2.3813655 1.4977586 -3.7788074 -2.3308082 1.4523338 -3.7951152 -2.373147 1.4639187 -4.817184 -3.0539186 1.8568888 -4.0388904 -2.5951667 1.5678774 -4.1170483 -2.681253 1.6038513 -3.8779912 -2.5595129 1.5184894 -3.8598387 -2.5816705 1.5175748 -3.8171251 -2.587131 1.5072094 -3.8553402 -2.6477201 1.528245 -3.9570465 -2.7534962 1.5742795 -3.9657598 -2.7958398 1.5843401 -3.9183097 -2.7985256 1.5724504 -3.8941212 -2.8174889 1.5697066 -3.8544872 -2.8249972 1.5608655 -4.0228696 -2.9865925 1.6349475 -3.8644326 -2.9058669 1.5788525 -3.7268391 -2.8383212 1.530684 -3.8737211 -2.9879827 1.5971444 -4.0113964 -3.1336839 1.6605561 -3.617208 -2.8615174 1.5075142 -3.9258213 -3.145148 1.6413497 -3.3385336 -2.7082257 1.4072139 -3.2821214 -2.6960044 1.3907512 -3.7523322 -3.1212282 1.593486 -3.6588235 -3.0815952 1.5623899 -3.2102051 -2.737416 1.3816053 -3.2164111 -2.7769849 1.391361 -3.2595294 -2.8493371 1.4169695 -3.2583842 -2.8838055 1.4239814 -3.2533925 -2.9151881 1.429469 -3.2890406 -2.983743 1.4526386 -4.3618584 -4.0065746 1.9270076 -3.8602321 -3.5895495 1.7184803 -3.1260984 -2.9425676 1.4053847 -2.6227193 -2.4990163 1.1907603 -2.6278937 -2.534905 1.1999062 -3.0359843 -2.964998 1.3895317 -3.006901 -2.9728541 1.3846539 -3.079453 -3.0822287 1.4258106 -3.0952611 -3.1363242 1.4416635 -2.8885303 -2.9628944 1.3556918 -3.3649666 -3.4945285 1.5840352 -2.6163709 -2.7503211 1.2462455 -2.5890145 -2.7552149 1.2413677 -2.5545723 -2.7521963 1.2331364 -2.5517919 -2.7832677 1.2398434 -2.5877099 -2.8574822 1.2651471 -3.0157132 -3.3717594 1.4791619 -2.6488955 -2.9982533 1.3117914 -2.622937 -3.0058367 1.308133 -2.5596919 -2.9699183 1.2861828 -2.5340152 -2.9768634 1.2825243 -2.7981369 -3.3285093 1.4230669 -2.8311801 -3.4101136 1.4498949 -2.8192577 -3.4384708 1.4544679 -3.3127608 -4.0916543 1.7163463 -3.0426264 -3.8053761 1.5907422 -3.1165702 -3.9473333 1.6410449 -2.9547212 -3.7898405 1.5694017 -2.9947169 -3.8901742 1.6026319 -3.0019026 -3.9494278 1.6190946 -3.1307685 -4.1719589 1.7007983 -3.077338 -4.1535869 1.6858599 -1.8376935 -2.5116897 1.0273529 -1.8005106 -2.4927993 1.0154632 -3.0484395 -4.2770109 1.712383 -3.0374784 -4.3174491 1.7209193 -3.0098436 -4.3344407 1.7203095 -2.9831915 -4.3528271 1.7203095 -2.985764 -4.4144454 1.7370771 -3.0051339 -4.5024023 1.7639052 -1.6462533 -2.4986029 0.98894006 -1.6303724 -2.5078583 0.98863524 -1.6190648 -2.5242298 0.99107414 -1.5908222 -2.5139916 0.9834525 -0 -0 0 -1.5378944 -2.497632 0.97003847 -1.5087069 -2.4842229 0.96150231 -0 -0 0 -1.4529393 -2.4598978 0.94564933 -1.5460666 -2.6548071 1.0145487 -1.5330653 -2.6700265 1.0166827 -1.5879169 -2.8053918 1.0630221 -1.6801164 -3.0114026 1.1349701 -1.1039144 -2.0066648 0.76425511 -1.1174303 -2.0611377 0.78163236 -0 -0 0 -1.0796436 -2.051091 0.77309614 -1.0696661 -2.0627513 0.77492535 -1.0673766 -2.0896366 0.78224206 -1.0686454 -2.1242299 0.79230261 -1.2904265 -2.6053591 0.96180713 -1.3232191 -2.7134027 0.99747628 -1.236941 -2.576344 0.9459542 -1.1954949 -2.5296266 0.92674774 -0 -0 0 -1.4340264 -3.1339707 1.1343603 -1.0233283 -2.272387 0.82888633 -0.99087042 -2.2368169 0.81425285 -0.94558924 -2.1703694 0.78894907 -1.2135835 -2.8337288 1.0179021 -1.1954347 -2.839366 1.0172925 -1.5447334 -3.73385 1.3245957 -0 -0 0 -1.2033324 -3.0121489 1.0694243 -1.0006155 -2.5495198 0.90784615 -0.93739808 -2.4320648 0.86547005 -0.88609797 -2.3415527 0.83254468 -0.87138259 -2.3460526 0.83223981 -2.9209597 -8.0227909 2.7641649 -0 -0 0 -0 -0 0 -1.1505467 -3.3486197 1.164542 -1.0209706 -3.0315485 1.0550957 -1.075086 -3.2584641 1.1294825 -1.0544871 -3.2631867 1.1288728 -0.9216634 -2.9126997 1.0090611 -0.90630668 -2.9264891 1.0118049 -1.2019286 -3.9684668 1.3584356 -0.80709648 -2.7236876 0.94046664 -0.7075485 -2.4422247 0.84504414 -0.69177306 -2.4437706 0.84412956 -0.71020824 -2.5691557 0.88437164 -0.89830208 -3.3303092 1.1352749 -0.88027143 -3.3449695 1.1383235 -0.85216534 -3.320785 1.1285679 -0.77247107 -3.0884783 1.0502177 -0.75170535 -3.0857565 1.0477788 -0.71081823 -2.9976325 1.0172925 -0.70288306 -3.047415 1.0322309 -1.6037482 -7.1605682 2.3800359 -0.64823854 -2.9767046 1.0063174 -0.60165393 -2.8464344 0.96241689 -1.6600522 -8.1098204 2.6809371 -0.4259792 -2.143589 0.73072004 -0.41030684 -2.1330676 0.72645193 -0.40068391 -2.1542737 0.73254919 -0.39551735 -2.2016907 0.74718267 -0.38427064 -2.2172148 0.75145078 -0.37566319 -2.249594 0.76120645 -0.36381093 -2.264082 0.76516968 -0.35556093 -2.302983 0.77705938 -0.37007123 -2.499212 0.83986145 -1.0767257 -7.6097941 2.4913113 -1.0249128 -7.5785046 2.4791167 -0.38595203 -2.9863958 0.99503738 -0.33284974 -2.7051127 0.9035781 -0.29048172 -2.4857376 0.83223981 -0.26896644 -2.4306731 0.81394798 -0.75985593 -7.2975607 2.3797309 -0.28749117 -2.9285824 0.97308713 -0.75727099 -8.2566595 2.685205 -0.70546043 -8.2478657 2.6809371 -0.22699393 -2.8507783 0.94656396 -0.17827718 -2.4246778 0.80937499 -0.16295144 -2.4190743 0.80724096 -0.14804749 -2.4190779 0.80693609 -0.13252704 -2.407578 0.80297285 -0.11738355 -2.4007356 0.80053395 -0.10240944 -2.3957014 0.79870474 -0.089563742 -2.4476805 0.81516743 -0.074800134 -2.4567518 0.81791121 -0.061516691 -2.5323825 0.84199548 -0.049969375 -2.7583947 0.91424835 -0.033714347 -2.8167417 0.93284506 -0 -0 0 --0.00098079373 -2.9931364 0.98924494 --0 -0 0 --0.040754862 -3.2271686 1.0642415 --0.060828868 -3.2411411 1.0688145 --0.081003696 -3.2521319 1.0724729 --0.10158478 -3.2715642 1.0788751 --0.12240735 -3.2908654 1.0852772 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --3.2738461 -8.0295534 2.8068459 --1.4789355 -3.5662708 1.2669764 --1.4341017 -3.3992009 1.2121007 --1.403814 -3.2713251 1.1706392 --1.4253849 -3.2661409 1.1718587 --1.4496511 -3.2669082 1.1752121 --1.6123245 -3.5739121 1.2861828 --1.6501125 -3.5985758 1.2983774 --3.4473314 -7.3948674 2.6428289 --1.6839527 -3.5565388 1.2907557 --3.6394396 -7.5631099 2.7178254 --3.6962364 -7.562026 2.7254472 --3.5218737 -7.0947862 2.5666127 --1.7642951 -3.5013855 1.2861828 --1.5878283 -3.1039214 1.1471647 --1.6081613 -3.0966554 1.1480793 --1.6426858 -3.1162121 1.1587495 --1.6671703 -3.1161494 1.1624079 --4.0370798 -7.4323263 2.7385564 --4.07617 -7.3957386 2.7342882 --1.7433085 -3.1190135 1.1749073 --4.8331237 -8.5197315 3.1665857 --0 -0 0 --1.8474797 -3.1670012 1.204784 --2.076968 -3.5104654 1.3367902 --2.0979784 -3.4968386 1.3364854 --2.0886915 -3.4334614 1.3175838 --1.9646614 -3.1855454 1.2291732 --1.9816447 -3.1693935 1.2276489 --2.0571663 -3.2456443 1.2611839 --2.4432318 -3.8025589 1.4779425 --2.1415553 -3.2887788 1.2874023 --2.4225333 -3.6705635 1.4389198 --5.4849162 -8.1980886 3.1885359 --2.5769749 -3.8021483 1.5014169 --2.61374 -3.8058884 1.5090386 --5.4520454 -7.8331151 3.0861015 --2.7535701 -3.905833 1.5608655 --2.7802527 -3.8927383 1.5623899 --2.3763001 -3.2846565 1.3288637 --2.4020414 -3.2776945 1.3319124 --0 -0 0 --5.4206061 -7.2070255 2.9178164 --5.4664574 -7.1759019 2.918731 --0 -0 0 --5.7036586 -7.2996306 2.9964714 --5.9753146 -7.5512609 3.1135395 --6.0245142 -7.5181708 3.1150637 --6.1197476 -7.5417004 3.1400626 --0 -0 0 --6.3885107 -7.678329 3.2284732 --6.4864416 -7.6994343 3.253777 --6.4773092 -7.5935578 3.2260344 --6.5561557 -7.5911479 3.2418873 --2.7019899 -3.0910623 1.3453264 --2.7215369 -3.0751381 1.3456314 --2.7638774 -3.084619 1.3569113 --0 -0 0 --0 -0 0 --0 -0 0 --8.6149187 -9.1489391 4.053741 --8.6610355 -9.0855675 4.0491681 --8.718605 -9.0343084 4.0500827 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --8.3756571 -8.162446 3.77479 --8.4516592 -8.1359968 3.7863748 --9.9474792 -9.4587641 4.4250655 --8.6140413 -8.0909986 3.8141174 --9.9434042 -9.2252245 4.3729339 --10.02159 -9.1839848 4.3823848 --3.9385812 -3.566144 1.7318944 --3.968909 -3.5495269 1.7355528 --3.9977531 -3.5314109 1.7386014 --0 -0 0 --9.2197847 -7.9430208 3.9266124 --9.9335499 -8.452199 4.2061729 --9.9764738 -8.3837366 4.2025146 --10.438169 -8.662941 4.3732386 --10.695914 -8.7665482 4.4579911 --0 -0 0 --10.185168 -8.1411333 4.2049537 --10.269321 -8.1056252 4.2189775 --4.6064377 -3.5910547 1.9007891 --10.820907 -8.3274641 4.401896 --10.872558 -8.261488 4.4022007 --9.9554472 -7.4688444 4.0150232 --10.032469 -7.4308567 4.0275226 --0 -0 0 --10.250327 -7.399147 4.0778251 --10.357589 -7.3803215 4.1022143 --11.284574 -7.9367809 4.4473205 --0 -0 0 --11.168975 -7.6523805 4.3650074 --11.40587 -7.7122555 4.4384794 --11.30403 -7.542757 4.381165 --5.5047865 -3.6252449 2.1410222 --10.738415 -6.9765067 4.1302619 --10.772199 -6.9048333 4.1269083 --5.5842676 -3.5319576 2.1462049 --5.602602 -3.4956107 2.1449854 --0 -0 0 --0 -0 0 --0 -0 0 --6.1813025 -3.6489258 2.3288186 --6.1838193 -3.5994339 2.321502 --6.1752224 -3.5438881 2.3102219 --6.188561 -3.5012424 2.3071733 --6.1874671 -3.4506831 2.2989421 --6.1551032 -3.3833003 2.2794306 --6.0718975 -3.2892358 2.2416275 --6.0003772 -3.2030473 2.2083974 --6.0005288 -3.1559761 2.2013855 --5.8447208 -3.0284307 2.1382785 --6.3501582 -3.2409434 2.3132706 --6.3129067 -3.1732697 2.2928448 --6.2870169 -3.1120894 2.2766869 --0 -0 0 --7.3887095 -3.5449965 2.6544137 --7.3974032 -3.4934947 2.6498408 --7.3798323 -3.4299815 2.636122 --7.3920774 -3.3806751 2.6330733 --6.9749141 -3.1383619 2.4794216 --6.9905558 -3.0939643 2.4782021 --6.9910688 -3.0430334 2.4718001 --0 -0 0 --0 -0 0 --7.0080495 -2.8981903 2.4586909 --7.0071707 -2.8476083 2.4522886 --7.0307035 -2.8070304 2.4544227 --12.666869 -4.9663892 4.3863478 --12.642886 -4.8677034 4.3677511 --12.709933 -4.8041763 4.3805556 --11.698878 -4.3402634 4.0253887 --11.685016 -4.2537422 4.0116696 --11.675018 -4.1691556 3.999475 --7.5870075 -2.6573865 2.6044159 --11.53703 -3.9609537 3.9357584 --11.469042 -3.8591177 3.9046621 --6.94628 -2.2904317 2.3724144 --6.9556713 -2.2463043 2.3708899 --12.455346 -3.9372015 4.212575 --6.9927216 -2.1638737 2.3742435 --7.0386844 -2.1308556 2.3852186 --7.0799375 -2.0960035 2.3946693 --7.1109633 -2.0578144 2.4007666 --7.9959707 -2.2606962 2.6909974 --13.022402 -3.5949106 4.3555565 --9.5496731 -2.5736136 3.1970723 --7.3914447 -1.9436845 2.4775925 --7.5508456 -1.936121 2.5263708 --8.2177134 -2.0533538 2.7425196 --8.2107239 -1.9981657 2.7361174 --9.6231976 -2.2792487 3.1967673 --8.1445999 -1.876528 2.7065456 --7.8882923 -1.7666138 2.6187446 --11.726802 -2.5502198 3.8726516 --13.212747 -2.7884226 4.3537273 --13.333179 -2.7284837 4.3875675 --12.601352 -2.4983318 4.1433711 --12.594932 -2.4168382 4.1363592 --10.431385 -1.9355965 3.4272447 --11.850222 -2.1235769 3.884846 --12.715178 -2.1980555 4.1616631 --13.770296 -2.2934277 4.4997573 --11.950309 -1.9151847 3.905272 --11.968425 -1.842837 3.9074061 --12.021905 -1.7756234 3.9211249 --0 -0 0 --13.627469 -1.8420259 4.432992 --13.72164 -1.7690843 4.4598203 --0 -0 0 --14.678865 -1.7095648 4.7616358 --14.672039 -1.6175876 4.7561483 --14.490335 -1.5076376 4.6945658 --13.573237 -1.3281609 4.3967133 --13.692098 -1.2550136 4.4323821 --13.375002 -1.1432647 4.3281188 --13.346637 -1.058393 4.3168387 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --25.98941 -0.78004181 8.3541565 --25.991804 -0.62051368 8.3535471 --26.000835 -0.46112037 8.3553762 --26.016508 -0.30172759 8.3596439 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.766324 12.839646 5.0033722 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --7.7504902 11.758425 4.3718767 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --7.6417823 12.405594 4.5220923 --0 0 0 --0 0 0 --7.6469607 12.941532 4.6643558 --0 0 0 --7.4785275 13.018653 4.6587596 --7.4060411 13.0776 4.6634722 --7.3568697 13.178702 4.6832066 --0 0 0 --0 0 0 --0 0 0 --7.1233916 13.530318 4.7441764 --7.0881987 13.666238 4.7762814 --6.9998627 13.700963 4.7733359 --0 0 0 --0 0 0 --0 0 0 --7.0372348 14.650781 5.0407786 --6.9500666 14.699733 5.0428405 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --5.1022782 13.478307 4.4731989 --4.9742112 13.387532 4.4331412 --4.8098054 13.192449 4.3592114 --4.6814561 13.08944 4.3159142 --4.5798593 13.057501 4.2961798 --4.4778991 13.022098 4.2755618 --4.3911977 13.029406 4.2690821 --4.306673 13.042493 4.2646642 --4.725348 14.610778 4.764205 --4.057725 12.814669 4.1742401 --3.9679856 12.803725 4.1627526 --3.8932309 12.840635 4.1668763 --3.7983394 12.810225 4.1494985 --3.7233906 12.846141 4.1536222 --3.6484044 12.882537 4.15804 --3.9285307 14.203361 4.5733428 --3.8726962 14.343446 4.6104546 --3.7449298 14.216309 4.5624447 --3.6476429 14.200145 4.5500741 --0 0 0 --3.4343948 14.085076 4.4997077 --3.5341821 14.890638 4.7483001 --3.2842953 14.225793 4.5312233 --3.3135147 14.765047 4.6952825 --3.2061641 14.708536 4.6711302 --0 0 0 --3.0369513 14.802941 4.6888027 --0 0 0 --2.8064919 14.586659 4.609571 --2.710294 14.567904 4.5983787 --0 0 0 --2.521033 14.540746 4.5798225 --2.4297178 14.543688 4.5759935 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.1777644 14.708683 4.5792336 -0 0 0 -1.2965311 14.026062 4.3727603 -1.3899771 14.092974 4.396029 -1.55581 14.841676 4.6307783 -1.5513223 13.971327 4.363924 -1.7614106 15.022683 4.6932206 -1.857887 15.046685 4.7041187 -1.9541097 15.065329 4.7135439 -2.0311949 14.94037 4.6784935 -2.1240399 14.936141 4.6811447 -2.1992283 14.812229 4.6466832 -0 0 0 -2.4728913 15.355879 4.8251748 -2.5464079 15.216944 4.7865901 -2.6976016 15.534343 4.8908577 -2.7321053 15.179847 4.7851176 -2.5446346 13.656819 4.3129687 -2.9085982 15.095443 4.7695069 -3.0104942 15.124174 4.784234 -3.186305 15.50981 4.9114752 -3.2879465 15.520819 4.921195 -0 0 0 -0 0 0 -3.587065 15.51819 4.9403405 -3.5123358 14.780907 4.7138386 -0 0 0 -0 0 0 -3.4848986 13.551285 4.3438954 -3.5575047 13.489912 4.3312302 -3.6314838 13.435541 4.3209214 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -5.1746893 14.740621 4.8463821 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -18.737032 -2.7818556 5.8696165 -0 -0 0 -17.777811 -2.8628545 5.5812612 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9562387 -2.2557745 2.5801854 -7.9450011 -2.3053493 2.581069 -0 -0 0 -0 -0 0 -0 -0 0 -7.9889736 -2.5322592 2.6143522 -7.97965 -2.5832908 2.6164141 -7.9772596 -2.6367025 2.6208322 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.3844395 -2.1409361 1.5351549 -4.4371457 -2.2004859 1.5578346 -4.3791757 -2.2053227 1.5425185 -4.3400345 -2.2191017 1.5336822 -4.3076758 -2.2360055 1.5272024 -4.2236986 -2.2254269 1.5027555 -4.1568708 -2.2229147 1.4841994 -4.1406331 -2.2470117 1.4833158 -4.1811829 -2.3023334 1.502461 -4.1644745 -2.3265474 1.5015773 -4.1642551 -2.3600652 1.5065845 -3.9641047 -2.2788999 1.4406074 -3.8955579 -2.271415 1.4211677 -3.8708532 -2.2889524 1.4173386 -3.855916 -2.3121691 1.4170442 -3.8024595 -2.3119576 1.4029062 -3.7825074 -2.3317356 1.4008443 -3.7875795 -2.367054 1.4079133 -4.1968269 -2.6587098 1.5625472 -4.3082967 -2.7665021 1.6093792 -3.985265 -2.5937788 1.4968647 -3.9493306 -2.6050301 1.4895011 -3.7966135 -2.5378797 1.4388402 -3.8616779 -2.6157868 1.4688833 -3.5902588 -2.4642386 1.3734521 -3.8230104 -2.6586142 1.466527 -3.6964684 -2.6044223 1.4249967 -4.0646834 -2.9012904 1.5704999 -3.8346074 -2.7727647 1.4897957 -3.673346 -2.690654 1.4347166 -4.0021486 -2.9693534 1.5672599 -3.9976058 -3.0041871 1.5725616 -3.9562831 -3.0112975 1.5637254 -4.0217481 -3.1002722 1.5964195 -4.0229888 -3.1407673 1.604372 -3.2232163 -2.5484624 1.2977551 -3.2313919 -2.5873027 1.3071804 -3.1627481 -2.5643547 1.286268 -3.1462154 -2.5831063 1.2859734 -3.3074219 -2.7495778 1.3569578 -3.2714784 -2.7538209 1.3492998 -3.2857964 -2.8004949 1.3619649 -3.2171791 -2.7762799 1.3410527 -3.7247493 -3.2542932 1.5557728 -3.4749281 -3.0738587 1.4612253 -3.9251683 -3.5152278 1.6553276 -3.957334 -3.5880263 1.6777127 -3.8697662 -3.552146 1.6503204 -4.385561 -4.0753961 1.8765277 -2.671092 -2.5131054 1.1616772 -2.6639261 -2.5373559 1.1652118 -2.6379874 -2.5437047 1.1607937 -2.6120713 -2.5498312 1.1563755 -2.5868592 -2.5564075 1.152252 -2.6285563 -2.6296761 1.1772879 -3.3839314 -3.4270124 1.5157152 -2.6961863 -2.7643425 1.221469 -2.7017198 -2.8042305 1.2314835 -2.6172571 -2.7501516 1.2014403 -2.5885501 -2.7536271 1.1961386 -3.1569047 -3.3996599 1.4612253 -3.1579502 -3.442909 1.4712396 -2.5483351 -2.8128459 1.2011458 -2.7783132 -3.1047146 1.3154275 -2.6731291 -3.0243313 1.27537 -2.6029811 -2.9816492 1.2512177 -2.5877576 -3.0011833 1.2526904 -2.559999 -3.0060923 1.2482723 -2.5230498 -2.9998047 1.239436 -2.5900929 -3.1181369 1.2806717 -2.8127735 -3.4287457 1.3981935 -3.2645602 -4.0295377 1.6297026 -3.240968 -4.0509849 1.6302916 -2.8688638 -3.631402 1.4576907 -2.6119728 -3.3483145 1.340169 -2.9500611 -3.8298528 1.5213115 -0 -0 0 -1.8847613 -2.5101967 0.99879628 -1.8761539 -2.5309258 1.0023308 -1.8402683 -2.5146298 0.99172729 -1.8304014 -2.5336199 0.99467272 -1.8331348 -2.5704768 1.0043925 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -1.6404116 -2.5918403 0.97670573 -1.5475332 -2.478653 0.93193555 -1.9142323 -3.1080976 1.1563755 -1.8911555 -3.113251 1.1540192 -1.8621931 -3.1084015 1.1481284 -0 -0 0 -0 -0 0 -1.748014 -3.0435443 1.1130781 -1.6110997 -2.8454959 1.0391483 -1.5665916 -2.806932 1.022065 -0 -0 0 -1.1079054 -2.0438416 0.74784756 -1.1020997 -2.0632439 0.75226569 -1.0956521 -2.0818057 0.75638926 -1.0837377 -2.0901859 0.75697833 -1.0743706 -2.1036043 0.75933462 -1.0756189 -2.1383271 0.76905447 -1.5186296 -3.0653734 1.0856857 -1.4947635 -3.0643275 1.0821513 -1.4813122 -3.0846398 1.0859803 -1.4856415 -3.142915 1.1027691 -1.4707639 -3.1615024 1.1060091 -1.4728222 -3.2173867 1.1219143 -1.4518753 -3.2237494 1.1210307 -0.97791815 -2.207751 0.77553439 -0.96626228 -2.2180901 0.7770071 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -1.1630541 -2.9628751 1.0123452 -0 -0 0 -0.90160137 -2.382591 0.81647557 -0 -0 0 -0 -0 0 -2.8810444 -8.0558968 2.6682532 -1.015885 -2.8972676 0.97758931 -0.82560539 -2.4018967 0.81411922 -0.81970376 -2.4331791 0.82266092 -0.78917587 -2.3909762 0.80734479 -0.78948909 -2.4421458 0.82236636 -0.91989815 -2.9061122 0.97081488 -0.78294259 -2.5274127 0.84681326 -1.2776659 -4.2148852 1.3887682 -0.74072903 -2.4992659 0.83473706 -0.72059077 -2.4872425 0.82943535 -2.2100646 -7.8043094 2.5312917 -2.3881271 -8.6346941 2.7925494 -0.89615822 -3.3202722 1.091282 -0.87284702 -3.3146193 1.0877476 -0.78567523 -3.0598235 1.0049816 -0.77547342 -3.0988867 1.0158796 -0.73606771 -3.0200279 0.98937094 -0.72282028 -3.0468028 0.99643993 -0.70583183 -3.0586295 0.99879628 -0.74167317 -3.3062701 1.0756714 -0.72137231 -3.3107588 1.0756714 -0.60213345 -2.8476529 0.92840105 -1.6685641 -8.1339092 2.5904944 -1.6232822 -8.1674261 2.597858 -0.422849 -2.199481 0.72163343 -0.41843578 -2.2508888 0.73694956 -0.59259981 -3.2993255 1.0644789 -0.38914967 -2.2464383 0.73400414 -0.35299423 -2.1149387 0.69217938 -0.38248882 -2.3812504 0.77465075 -0.38975793 -2.5252175 0.81883186 -0.5704217 -3.8509967 1.2311889 -1.2401172 -8.7384653 2.7516081 -1.0354795 -7.6332326 2.4055228 -1.1378199 -8.7918825 2.7636843 -0.32017848 -2.601429 0.8391552 -0.29077274 -2.4884958 0.80351573 -0.27886546 -2.5206275 0.81294107 -0.26041195 -2.4937775 0.80410486 -0.81426293 -8.28055 2.5957961 -0.76765007 -8.3310671 2.6099341 -0.23485552 -2.7352273 0.87744546 -0.59098649 -7.4082093 2.3218732 -0.64077705 -8.7049952 2.721565 -0.58664429 -8.6982746 2.7183251 -0.15285935 -2.4988439 0.80292666 -0.13452321 -2.4453461 0.78613788 -0.11914203 -2.4384894 0.78378153 -0.10360449 -2.425808 0.77965796 -0.088332281 -2.4158931 0.77641803 -0.073419347 -2.4135239 0.77553439 -0.059075832 -2.4330361 0.78142518 -0 -0 0 -0.045765329 -3.794307 1.2008512 -0 -0 0 --0.0007253568 -3.1093898 0.98966551 --0.020329379 -3.1934214 1.0155851 --0.040361222 -3.2285924 1.0264831 --0.060436152 -3.2426162 1.0309012 --0.081297159 -3.2813537 1.0429773 --0.10216509 -3.3046727 1.0503409 --0.12282832 -3.3144884 1.0535809 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --3.2775512 -8.0485611 2.7097833 --3.316632 -8.0035791 2.7015362 --3.3827543 -8.0235853 2.715085 --1.419319 -3.3090436 1.1410594 --1.4227886 -3.2617297 1.1280997 --1.4443249 -3.2564328 1.1292778 --1.4792018 -3.2806156 1.1404704 --1.6505629 -3.6016188 1.2523959 --3.4894292 -7.4933925 2.5790074 --3.6272957 -7.6662054 2.6452789 --1.7136794 -3.5645981 1.250334 --3.7345147 -7.6485958 2.6547043 --3.7890165 -7.6409483 2.660006 --1.644487 -3.2652888 1.1581428 --1.5914135 -3.1121857 1.10866 --1.6012353 -3.0845499 1.1024746 --1.6522002 -3.1355426 1.1236815 --1.6781671 -3.1379871 1.1280997 --1.6937439 -3.1209114 1.1257433 --4.0716705 -7.3950267 2.6332028 --4.3555675 -7.7970719 2.7840078 --0 -0 0 --4.8337994 -8.4091749 3.0208185 --4.8934879 -8.3933916 3.0258257 --4.3928924 -7.4295287 2.6915219 --2.0969419 -3.4969201 1.2880353 --1.9555382 -3.2161446 1.1914259 --1.9747338 -3.2032716 1.1911314 --2.0743611 -3.3191442 1.2376688 --2.2056513 -3.4815421 1.3015841 --2.3978665 -3.734122 1.3990772 --2.4306366 -3.7345574 1.4046735 --2.4708679 -3.7458992 1.4143933 --2.4953988 -3.7330513 1.4152769 --0 -0 0 --5.3387132 -7.7790046 2.9392307 --0 -0 0 --2.3600671 -3.3495908 1.2942207 --2.3689175 -3.3187115 1.2880353 --0 -0 0 --5.6849246 -7.7619238 2.9966662 --2.4210625 -3.2630324 1.2836171 --5.4525352 -7.256093 2.8287778 --5.8169947 -7.6430397 2.9916589 --5.9390388 -7.704844 3.0296547 --5.9456296 -7.6162796 3.0093312 --5.9691377 -7.5504165 2.9978442 --6.2572284 -7.815794 3.1171331 --6.1413813 -7.5753312 3.0370181 --6.2853665 -7.6564288 3.0844393 --6.2882457 -7.5648046 3.0632322 --2.6516728 -3.1501064 1.300406 --2.6622739 -3.1235936 1.2962824 --2.6857598 -3.1122642 1.2983443 --2.7016623 -3.0921276 1.2968715 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --8.6294432 -9.2868347 3.9386075 --0 -0 0 --8.7091465 -9.1449451 3.9235859 --8.7684107 -9.0947742 3.9250586 --8.8353977 -9.0524273 3.9300656 --0 -0 0 --9.7540913 -9.7514172 4.2823362 --9.8185005 -9.696084 4.2843981 --9.8798618 -9.6376581 4.2852817 --8.506115 -8.1962585 3.6720481 --8.5354805 -8.1241446 3.6632118 --8.6185875 -8.1030407 3.6773498 --8.6618423 -8.0441532 3.6746988 --9.97367 -9.1491737 4.2028103 --0 -0 0 --8.7123108 -7.7973137 3.6349359 --8.7241917 -7.7120614 3.6202087 --10.469459 -9.1411285 4.3150306 --10.559363 -9.1060505 4.3288736 --9.2873468 -7.9101973 3.791337 --10.018002 -8.4270353 4.0661435 --10.575972 -8.7861738 4.2690821 --9.7084179 -7.9652214 3.9017897 --10.164737 -8.2357941 4.0634928 --10.214333 -8.1726723 4.0631981 --0 -0 0 --10.328171 -8.0578804 4.0687943 --10.767289 -8.2947168 4.2204828 --10.600451 -8.0630236 4.1362443 --9.9566584 -7.4773111 3.8690958 --9.9670401 -7.3898945 3.855547 --10.006798 -7.3246474 3.8534851 --10.169287 -7.3481874 3.8982553 --10.38923 -7.4105186 3.9645269 --0 -0 0 --11.24372 -7.8136635 4.2514095 --11.370258 -7.7985811 4.2808638 --11.389406 -7.7093825 4.2702603 --11.143272 -7.4434743 4.1615748 --10.787399 -7.1104064 4.0134206 --5.6036668 -3.6442544 2.0915425 --5.6275306 -3.6108348 2.0921314 --5.658462 -3.5818598 2.0953715 --5.6908708 -3.5536535 2.0992005 --5.7443004 -3.5382161 2.1106875 --5.7634521 -3.5014143 2.1098039 --5.8577843 -3.509702 2.136018 --5.830668 -3.4450092 2.1186402 --0 -0 0 --6.2462187 -3.5878906 2.251478 --6.2257075 -3.5254788 2.2364564 --5.9802098 -3.3381464 2.1422033 --6.0767698 -3.3433137 2.1690066 --6.088769 -3.3014088 2.1660612 --6.0161982 -3.2144434 2.1336617 --6.097537 -3.2099688 2.1551633 --5.9321866 -3.076571 2.0909534 --6.3747478 -3.2566457 2.2376347 --7.3703284 -3.7084715 2.5742946 --7.404932 -3.6691189 2.5784183 --7.4006815 -3.6106229 2.5692875 --7.4666286 -3.5862484 2.5843091 --7.3589029 -3.4790924 2.540128 --7.3896422 -3.4383085 2.5433679 --6.4600458 -2.9576414 2.2211404 --6.9799433 -3.1440406 2.3907957 --6.9929876 -3.0984433 2.3887341 --7.1494083 -3.1154194 2.4349768 --7.1200786 -3.0507898 2.4187772 --0 -0 0 --0 -0 0 --7.0537605 -2.8698699 2.3784251 --7.076561 -2.8286633 2.3801923 --7.0244017 -2.7579441 2.3572183 --12.704009 -4.8984709 4.2278461 --12.704332 -4.8092628 4.2181263 --12.703146 -4.7199025 4.2081122 --12.756108 -4.6507072 4.2160649 --12.75831 -4.5630164 4.2075229 --11.469485 -4.02282 3.7774935 --11.64758 -4.0052018 3.8275654 --7.6429982 -2.5756907 2.5171537 --6.9898758 -2.3078907 2.3000772 --6.992085 -2.2611351 2.2962482 --0 -0 0 --7.0503411 -2.1847801 2.3062625 --7.0892205 -2.1492436 2.3145096 --7.3661413 -2.1839514 2.3993375 --7.9310336 -2.2986171 2.5763564 --7.5312271 -2.1327176 2.4438131 --7.5745659 -2.0948746 2.4535329 --7.3058858 -1.9723755 2.363698 --7.3723726 -1.9418744 2.3810759 --0 -0 0 --9.4592047 -2.3679128 3.0367236 --9.4837685 -2.3123181 3.0399635 --9.5740223 -2.2721813 3.064116 --9.8820238 -2.2813325 3.1571908 --13.232113 -2.9694583 4.2110577 --10.272488 -2.2390759 3.2717671 --10.337455 -2.1868832 3.287967 --10.414336 -2.1364741 3.3079956 --12.434939 -2.4716594 3.9389019 --12.569051 -2.418247 3.9763086 --11.968271 -2.2265737 3.7833843 --12.024034 -2.1607032 3.7966387 --12.027649 -2.0852516 3.7936933 --12.058126 -2.0144045 3.7992897 --0 -0 0 --14.57052 -2.2507696 4.5754046 --13.66805 -2.0255497 4.2899942 --13.715229 -1.9466156 4.3008924 --13.671044 -1.8548419 4.2835145 --13.692594 -1.7722727 4.2867546 --0 -0 0 --13.730395 -1.606109 4.2920561 --14.610034 -1.6182204 4.5618558 --13.450628 -1.4062837 4.1995707 --0 -0 0 --13.39455 -1.2344506 4.1771855 --13.406633 -1.1526494 4.178658 --13.430601 -1.0717349 4.18396 --0 -0 0 --14.557347 -0.98206294 4.5282779 --26.00354 -1.5943285 8.0609999 --14.639867 -0.80729616 4.5503683 --12.228724 -0.59903485 3.8048859 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.7189627 12.959994 4.817697 --9.6523829 13.037113 4.824214 --9.5772991 13.103063 4.8267641 --9.5893011 13.289908 4.8735161 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --7.8926206 12.153441 4.3130579 --0 0 0 --7.7459593 12.254245 4.3147578 --7.7122264 12.368276 4.3379922 --7.690948 12.504407 4.3688769 --7.6115913 12.547263 4.3674603 --7.5580897 12.633235 4.3810611 --7.4887142 12.693416 4.3858776 --7.4270816 12.767312 4.3955116 --7.3619609 12.835938 4.4034452 --0 0 0 --7.4401007 13.349206 4.5468183 --7.3862133 13.445882 4.5641022 --0 0 0 --0 0 0 --7.1606655 13.623705 4.5788364 --0 0 0 --7.4730501 14.65204 4.8910837 --0 0 0 --0 0 0 --7.1655593 14.712099 4.8664322 --7.0656176 14.7359 4.8599153 --0 0 0 --6.8878884 14.829325 4.8624654 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.9983459 13.480413 4.2793398 --4.8834119 13.422506 4.2515717 --4.7613211 13.341119 4.2167201 --4.5878377 13.108478 4.1348333 --4.5213218 13.177202 4.147584 --4.3777361 13.018347 4.089498 --4.3067751 13.072289 4.0979981 --4.2947884 13.310217 4.1637344 --4.2806196 13.550311 4.2300377 --3.9872653 12.896462 4.0197949 --3.9000096 12.894064 4.0115781 --3.8118463 12.887403 4.0022273 --3.7500072 12.970434 4.0206451 --3.6729577 13.002429 4.0234785 --3.954124 14.333823 4.424696 --3.8785627 14.404118 4.4388633 --3.7784154 14.383121 4.4252629 --3.6596406 14.287117 4.3889947 --3.9355171 15.766443 4.8327141 --3.1995857 13.160494 4.033112 --3.3443849 14.133675 4.3226914 --3.3676915 14.632445 4.4677649 --3.3000293 14.75204 4.4977994 --3.2405918 14.915398 4.5411515 --3.1863928 15.112359 4.5947037 --3.0215967 14.779277 4.4884491 --3.0813487 15.557671 4.7173924 --2.8062553 14.639112 4.4354634 --0 0 0 --2.5934629 14.488361 4.3802109 --2.5019054 14.488881 4.3756771 --2.3854272 14.338405 4.3260918 --2.2695274 14.178528 4.2739563 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --1.2493594 13.65657 4.0832644 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0.82194906 14.652458 4.3674603 -0.91148144 14.641396 4.3657603 -1.0039891 14.674755 4.3773775 -1.1057233 14.825161 4.4238462 -0 0 0 -0 0 0 -1.2319305 13.230565 3.9574587 -1.3975085 14.072098 4.2096367 -1.4841291 14.066119 4.2104869 -0 0 0 -0 0 0 -0 0 0 -1.8118825 13.895179 4.1716681 -2.0493684 14.997408 4.5037498 -2.1357868 14.945627 4.4921327 -2.2125866 14.832647 4.4623814 -0 0 0 -2.2259254 13.763005 4.1507006 -2.5470836 15.157303 4.5726027 -2.392179 13.720482 4.1464505 -2.7980623 15.485407 4.680841 -2.9059021 15.53676 4.7015252 -2.9492629 15.250294 4.6207714 -3.0704081 15.370152 4.6624231 -3.1026747 15.050463 4.5717525 -3.1913741 15.014257 4.5666523 -3.3560855 15.326021 4.6669569 -3.466305 15.377175 4.6887746 -3.5627592 15.36496 4.691608 -0 0 0 -0 0 0 -0 0 0 -3.5118711 13.618104 4.1866856 -3.574518 13.517493 4.162601 -3.6907666 13.618411 4.2002864 -3.7950435 13.670357 4.223237 -0 0 0 -0 0 0 -0 0 0 -4.6297302 15.217217 4.7309933 -0 0 0 -4.7803955 15.046838 4.6961417 -4.8714466 15.013574 4.6950083 -4.9571424 14.964284 4.6890578 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -17.876446 -2.4430115 5.3622875 -18.946239 -2.7078075 5.686152 -17.829945 -2.659934 5.3577542 -17.813288 -2.7692864 5.3577542 -17.788385 -2.8773091 5.3554873 -18.720871 -3.146198 5.6402502 -18.704992 -3.261667 5.6413836 -18.70067 -3.3792775 5.6462002 -0 -0 0 -18.098507 -3.5003045 5.4778929 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9672441 -2.2640309 2.4786766 -7.943994 -2.3101952 2.4758432 -0 -0 0 -0 -0 0 -0 -0 0 -8.0000677 -2.5410511 2.5115447 -7.9606085 -2.5823934 2.5041778 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.3195152 -2.078958 1.4478642 -4.2911711 -2.0978374 1.4427639 -4.3117142 -2.140769 1.4538145 -4.3216157 -2.1788476 1.4614648 -4.2671943 -2.1843381 1.4478642 -4.2562633 -2.2118073 1.4487143 -4.2663598 -2.2504153 1.4566479 -4.3294001 -2.3177588 1.4824324 -4.3108845 -2.34199 1.4810157 -4.2913942 -2.3656178 1.4793156 -4.2801461 -2.3937781 1.480449 -4.1961551 -2.3806996 1.4569312 -4.1681709 -2.3987451 1.4523977 -4.172421 -2.4353991 1.4589148 -4.0592065 -2.4027977 1.4251965 -4.0904264 -2.4553103 1.4410639 -4.0457964 -2.4624054 1.4308635 -4.0077629 -2.4730768 1.4229298 -4.3859606 -2.7438896 1.5600692 -4.3609438 -2.7656116 1.5572357 -4.2591991 -2.7378485 1.5274844 -3.8309767 -2.4957988 1.3824114 -3.9860282 -2.6318533 1.4427639 -3.8582361 -2.5815694 1.4030956 -3.8375614 -2.6019642 1.4013954 -3.8207335 -2.6249189 1.4011121 -4.5018039 -3.1339235 1.6521566 -3.8650253 -2.7257929 1.42888 -3.9332666 -2.8102472 1.4597647 -4.1311064 -2.9901369 1.5382515 -3.6247454 -2.6574993 1.3594602 -3.6037524 -2.6762586 1.3577602 -3.9665594 -2.9837806 1.4980165 -4.0229216 -3.065038 1.5257844 -4.0139074 -3.0972831 1.5294678 -3.446327 -2.6930099 1.3237587 -3.1688387 -2.5075297 1.2254376 -3.1870623 -2.5539227 1.2381883 -3.1854775 -2.5849154 1.2435719 -3.1954844 -2.6257296 1.2534889 -3.2065833 -2.6679902 1.2639728 -3.2436802 -2.7327366 1.284657 -3.2049677 -2.7339103 1.2761565 -3.5886726 -3.0996578 1.4325635 -4.0329528 -3.5270383 1.6144716 -3.0464225 -2.6970534 1.2336547 -4.1578593 -3.727375 1.6813412 -3.0684769 -2.7845192 1.2557557 -3.1508851 -2.8948059 1.2957075 -3.1597414 -2.9389117 1.3064746 -4.2954803 -4.04531 1.7748454 -4.2754354 -4.0762239 1.7768288 -2.6842716 -2.5902238 1.1336336 -2.6580408 -2.5965898 1.1293834 -2.6393316 -2.6101522 1.12825 -3.0026782 -3.0063889 1.2869238 -3.4696555 -3.5171118 1.4912162 -2.8538125 -2.9282813 1.2396049 -3.6762414 -3.8192749 1.5977542 -3.927572 -4.1309452 1.7156261 -3.4525292 -3.6760163 1.5215341 -3.4018693 -3.6668932 1.5093503 -3.2601192 -3.5575731 1.4572146 -2.8399637 -3.137301 1.2818235 -3.3382707 -3.7338951 1.5113337 -3.3451245 -3.7881012 1.5246509 -2.7080014 -3.1044667 1.248672 -2.6275778 -3.049804 1.2209041 -2.5988746 -3.0541801 1.2163706 -2.7571039 -3.2808306 1.2976909 -3.0908144 -3.7243261 1.4614648 -2.5385704 -3.097048 1.2146705 -2.5894868 -3.1990547 1.2475387 -2.5524502 -3.1931541 1.2393216 -2.5351853 -3.2117674 1.240455 -2.5113051 -3.2219665 1.2384716 -1.9190785 -2.4931109 0.96107596 -1.8735843 -2.4651246 0.94634199 -1.8601491 -2.4788761 0.94719201 -1.8466158 -2.4925556 0.94804204 -1.835248 -2.5092592 0.9500255 -1.837772 -2.5453608 0.95909256 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -1.9223447 -3.1237788 1.1152161 -1.5062653 -2.4811699 0.88910609 -1.5269505 -2.5504458 0.90979034 -1.5141959 -2.5647233 0.91149044 -0 -0 0 -1.56371 -2.7245414 0.95965922 -0 -0 0 -1.5647026 -2.8055174 0.98062682 -1.5506905 -2.8209496 0.98261023 -1.5319828 -2.8278811 0.9817602 -1.5231775 -2.8533053 0.98714381 -1.1077017 -2.1053472 0.73439926 -1.0996126 -2.1214726 0.73751605 -1.0817825 -2.1187818 0.73439926 -1.1234246 -2.2342191 0.77038419 -1.5612063 -3.1539955 1.0712975 -1.5409846 -3.1617911 1.0707308 -1.220991 -2.5442207 0.86530507 -1.2008553 -2.5421243 0.86218822 -0 -0 0 -1.4728909 -3.220463 1.0778145 -1.4629334 -3.2513072 1.0848981 -1.4476104 -3.2707474 1.0882983 -0.97850591 -2.2470894 0.75565016 -0.98656887 -2.3041945 0.77208424 -0 -0 0 -0 -0 0 -0 -0 0 -1.1752385 -2.9432356 0.96787626 -0 -0 0 -1.160037 -3.0120349 0.98516035 -0.91958904 -2.4314556 0.79956883 -0.90631926 -2.4415483 0.80098552 -0 -0 0 -0.85501927 -2.3928723 0.78228468 -0.83081901 -2.3709173 0.77378434 -0.81687802 -2.3777847 0.774351 -0.81205189 -2.4118412 0.78341812 -1.0219465 -3.0990298 0.99564415 -0.93666822 -2.899883 0.93189132 -0.91452509 -2.8918583 0.92764115 -0.89138305 -2.8800066 0.9222576 -1.2306463 -4.0659328 1.2866404 -0.80077219 -2.7040379 0.86473835 -0.71945906 -2.4850223 0.79588532 -2.1892292 -7.7482171 2.4103901 -2.0297203 -7.3556457 2.2860014 -0.89944184 -3.336849 1.0525967 -0.88430941 -3.3627114 1.0588303 -0.79871422 -3.1144454 0.98147684 -0.77378452 -3.0960255 0.97439325 -0.72669005 -2.9851604 0.93925834 -0.90416867 -3.8173687 1.1905861 -0.8850292 -3.8415368 1.1962531 -0.75156671 -3.3555458 1.0474964 -0.62145966 -2.8558967 0.89505637 -0 -0 0 -1.6718701 -8.1748495 2.4968107 -0.66023725 -3.328764 1.0341792 -0.63474649 -3.3063796 1.0262455 -0.54858696 -2.9547117 0.91942412 -0.58939499 -3.2874873 1.0183119 -0.41556242 -2.4008093 0.75139999 -0.41403741 -2.4827805 0.77520108 -0 -0 0 -1.2914627 -8.394908 2.5410128 -1.1593639 -7.8561864 2.3778055 -1.1482676 -8.1261921 2.4562922 -0.36666042 -2.7091048 0.83923721 -0.33081689 -2.5619688 0.79475194 -0.39282465 -3.1988745 0.98374361 -0.28341195 -2.4286602 0.75395012 -0.26672214 -2.4141479 0.74913323 -0.25893331 -2.4834654 0.76925081 -0.2806693 -2.8639374 0.88173914 -0.68085206 -7.4364133 2.2378325 -0.73194492 -8.5756502 2.5744474 -0.20176166 -2.5378299 0.78370142 -0.18528001 -2.5265858 0.78001791 -0.16888015 -2.5142787 0.7760511 -0.47131333 -7.7658672 2.3302033 -0.17707089 -3.2343638 0.9885605 -0.14220688 -2.9240704 0.89647311 -0 -0 0 -0 -0 0 -0.083876245 -2.7756937 0.85198778 -0.067228854 -2.7924547 0.85680467 -0.050580457 -2.820622 0.86502171 -0 -0 0 -0.018215202 -3.2506642 0.99196064 --0.00169653 -3.2123542 0.98062682 --0.024286063 -3.6217737 1.1016155 --0.047392238 -3.6886821 1.1214497 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --3.3269718 -8.1557379 2.6339502 --3.3258288 -8.0120592 2.5945652 --3.3685825 -7.9764838 2.5897481 --3.4159472 -7.9521399 2.5886147 --1.4569523 -3.3368294 1.1072824 --1.4411834 -3.2463222 1.0809313 --1.4610754 -3.2374179 1.0809313 --1.4925165 -3.2536671 1.0891483 --3.5832558 -7.6828346 2.5361958 --3.680037 -7.7655592 2.5704806 --3.7076428 -7.7013588 2.55688 --1.7033963 -3.4848371 1.1775522 --3.8249123 -7.7016592 2.5721807 --1.6367487 -3.2470446 1.1058657 --1.6019918 -3.130245 1.0704474 --1.6132047 -3.1050408 1.0653472 --1.6375983 -3.1052616 1.0687474 --4.052114 -7.5671806 2.5676472 --4.2056441 -7.7393384 2.6339502 --0 -0 0 --1.9390413 -3.467521 1.2053201 --1.8670125 -3.2912588 1.149501 --4.3809109 -7.6105251 2.6260164 --4.3951216 -7.5280161 2.6070323 --2.0215995 -3.4155896 1.2041868 --1.9956112 -3.3250182 1.1772689 --1.9521285 -3.2078671 1.1410006 --1.9763093 -3.2031727 1.1435508 --2.1592572 -3.4519293 1.2345047 --2.3222051 -3.662112 1.3127083 --2.3539691 -3.6623132 1.3178084 --5.3447008 -8.2014961 2.9238129 --5.3848801 -8.1533442 2.9184294 --0 -0 0 --5.4226131 -7.9953818 2.8858447 --5.456902 -7.9406204 2.8781943 --5.4951081 -7.892036 2.8728106 --5.5174427 -7.8213415 2.8594935 --0 -0 0 --2.3736527 -3.279799 1.2277044 --5.5169611 -7.52282 2.787807 --5.4257426 -7.30408 2.7198038 --5.7011323 -7.5771527 2.8331423 --2.434824 -3.1961524 1.2186373 --2.4596636 -3.1879845 1.2211875 --5.8845296 -7.5283484 2.8546765 --5.9300165 -7.4913483 2.8543932 --6.0844569 -7.5902462 2.9056787 --2.5861244 -3.1869664 1.2441385 --2.6111121 -3.1777055 1.2466886 --2.6686037 -3.2073202 1.2642561 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --8.648077 -9.1809387 3.7579832 --8.7174854 -9.1415815 3.7636502 --8.7114611 -9.0237589 3.737299 --0 -0 0 --8.7952318 -8.8895912 3.7262485 --0 -0 0 --0 -0 0 --0 -0 0 --9.9513187 -9.5760145 4.1118822 --8.6480761 -8.220541 3.5568078 --8.6976547 -8.166667 3.5565243 --8.7490063 -8.1144495 3.557091 --10.113316 -9.2647858 4.0838308 --8.8386793 -7.9981103 3.5534074 --8.9276342 -7.9795122 3.5692749 --9.2453346 -8.1619329 3.6752462 --9.3436747 -8.147274 3.6942306 --9.2190723 -7.9396081 3.6262274 --9.3406715 -7.9450202 3.654562 --10.047233 -8.4402008 3.9084399 --10.585999 -8.7824926 4.095448 --9.7056675 -7.952239 3.7387156 --10.178519 -8.2357388 3.8999395 --10.049035 -8.0294695 3.8319366 --11.558808 -9.1199656 4.3816276 --10.697592 -8.334589 4.0382123 --11.69418 -8.9961452 4.3906946 --11.75145 -8.9259615 4.3915448 --10.062725 -7.5465703 3.7477827 --10.123486 -7.4955258 3.7531664 --10.190192 -7.4485464 3.7608168 --10.328256 -7.4526505 3.7945349 --10.291766 -7.3307247 3.7647836 --10.321647 -7.256959 3.7593999 --5.8242869 -4.0424013 2.1261942 --5.8371115 -3.9984608 2.1219442 --10.728403 -7.2515345 3.8574376 --5.8705797 -3.9164195 2.1165605 --5.8520408 -3.8523841 2.1015432 --5.8321338 -3.788202 2.0862424 --11.435295 -7.3269711 4.0441628 --11.452474 -7.2392478 4.0345287 --11.512954 -7.1789875 4.0401959 --6.5392981 -4.0227132 2.2998853 --6.0046306 -3.6433282 2.1066434 --6.5758252 -3.9347785 2.2956352 --5.9563732 -3.5147972 2.0749087 --5.9338903 -3.4526289 2.0598912 --5.9716024 -3.4256954 2.0655582 --6.2012224 -3.5069778 2.1363947 --6.2125716 -3.4632599 2.1329947 --6.9826617 -3.8364241 2.3854558 --6.107852 -3.3073297 2.0836923 --0 -0 0 --6.109776 -3.2120523 2.0709419 --5.9956598 -3.1052814 2.0264566 --6.3503585 -3.2396522 2.1378114 --6.4532466 -3.2423768 2.1652961 --6.4334769 -3.1831622 2.1522622 --6.4770298 -3.1553836 2.1601958 --7.4457979 -3.5707812 2.4713097 --7.3478794 -3.46855 2.4322078 --7.3733726 -3.4254186 2.4336245 --6.9816704 -3.191582 2.299602 --7.0054955 -3.1506493 2.3010187 --7.6649718 -3.3907351 2.5078611 --7.6592493 -3.332166 2.4993608 --0 -0 0 --0 -0 0 --0 -0 0 --7.1318207 -2.8967946 2.3058355 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --12.850957 -4.7650113 4.0809975 --12.948448 -4.7109833 4.1025319 --12.820848 -4.5756907 4.0535131 --12.808854 -4.4830012 4.0410457 --7.2599745 -2.4915791 2.2993186 --9.5749588 -3.2201416 3.0161836 --7.0577278 -2.3257976 2.2270653 --7.0645642 -2.280093 2.2247987 --7.0948825 -2.2419014 2.2298989 --0 -0 0 --7.8424673 -2.3725576 2.4523253 --7.8154931 -2.3121557 2.4395747 --7.5402422 -2.1805449 2.3506043 --7.4971814 -2.1183398 2.3333201 --12.676182 -3.4969888 3.916657 --9.3812017 -2.526479 2.9019954 --7.9189153 -2.0808289 2.4506254 --9.4096413 -2.4106913 2.9014287 --7.8470836 -1.9593472 2.4211574 --7.9372368 -1.9301856 2.4449584 --9.8835888 -2.3390706 3.0323343 --9.543541 -2.196888 2.9249463 --9.6682129 -2.1631935 2.9586644 --9.5866499 -2.0832725 2.9300466 --13.307814 -2.8060536 4.0498295 --16.924376 -3.4599841 5.1353278 --12.136136 -2.403944 3.6868634 --12.683763 -2.4315834 3.8472373 --12.704102 -2.3547597 3.8489373 --13.471644 -2.4115512 4.0750475 --13.541 -2.3383057 4.0914812 --13.977021 -2.3253353 4.2178535 --14.432317 -2.3101296 4.3498926 --13.70118 -2.1070209 4.127183 --14.568687 -2.1489339 4.3824778 --13.566472 -1.916208 4.0795808 --14.116856 -1.9056277 4.2402382 --12.166956 -1.5666224 3.6559787 --13.998295 -1.7150004 4.1983027 --0 -0 0 --13.447279 -1.4802841 4.0285788 --13.435122 -1.3955672 4.0223451 --14.478093 -1.4140753 4.3294921 --0 -0 0 --0 -0 0 --12.183281 -0.96410418 3.6423781 --0 -0 0 --0 -0 0 --0 -0 0 --12.221466 -0.66581059 3.6477618 --12.225322 -0.59080851 3.6477618 --12.2268 -0.51570362 3.6471951 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.6164227 12.969851 4.6066418 --9.5917854 13.103917 4.6330857 --9.6295414 13.326287 4.6903353 --9.516861 13.342043 4.6753411 --0 0 0 --9.3463774 13.449134 4.6723423 --0 0 0 --9.6773624 14.296613 4.9234219 --8.1625042 12.219631 4.1955366 --0 0 0 --0 0 0 --7.9003439 12.311934 4.1767263 --7.8272238 12.364243 4.1780896 --7.7838283 12.464264 4.1955366 --0 0 0 --7.6947346 12.664915 4.2307043 --7.6010537 12.685481 4.2219806 --7.5338421 12.750104 4.2279782 --7.4617643 12.806898 4.2315221 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --7.355269 13.564284 4.4038157 --7.2678204 13.601523 4.4013619 --7.1766062 13.63139 4.3967276 --7.0941596 13.67773 4.3975453 --0 0 0 --0 0 0 --0 0 0 --7.1955614 14.747843 4.6813388 --7.1049347 14.791717 4.6813388 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --5.0276985 13.531475 4.1219306 --4.9406214 13.551223 4.118659 --0 0 0 --4.6236391 13.182308 3.9899843 --4.5279608 13.167668 3.9771714 --4.4400125 13.174234 3.9709013 --4.335259 13.129056 3.9493644 --4.7209597 14.597211 4.3787351 --4.3446136 13.720598 4.109663 --4.3056321 13.893118 4.1530089 --4.1831722 13.796819 4.1167507 --3.8421361 12.957918 3.8613095 --3.8003252 13.111546 3.8997483 --4.3724041 15.438703 4.57829 --3.6919811 13.348217 3.9559073 --3.8966897 14.432302 4.2675076 --3.8119831 14.470825 4.2718692 --0 0 0 --3.5848112 14.319585 4.2143474 --3.490726 14.316073 4.2069869 --3.1755037 13.37958 3.9281003 --3.4455223 14.924057 4.3716469 --3.3422968 14.893285 4.3566527 --3.2500305 14.909753 4.3555627 --3.1576881 14.925649 4.3544722 --3.1731818 15.466881 4.5055013 --2.8992507 14.585812 4.2454257 --0 0 0 --2.7020895 14.523811 4.2176189 --2.5974345 14.453945 4.1928105 --0 0 0 --2.4078159 14.41261 4.172092 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0.91078293 14.79216 4.2309771 -1.0014638 14.785334 4.2307043 -1.1006011 14.893091 4.2631454 -0 0 0 -1.2901394 14.958025 4.2857728 -0 0 0 -0 0 0 -1.4857255 14.172935 4.0695882 -1.6060988 14.464771 4.1554623 -0 0 0 -1.7389249 14.08303 4.0524135 -1.7964736 13.849782 3.9888937 -0 0 0 -2.1522479 15.134535 4.3631959 -2.2159684 14.924995 4.3070369 -0 0 0 -2.3809066 14.784592 4.274868 -2.3205879 13.86727 4.0156102 -2.4023404 13.833811 4.0101581 -2.4779761 13.767676 3.9954367 -2.8846943 15.482171 4.4940515 -2.9255798 15.183589 4.4130845 -3.0252626 15.198379 4.422626 -2.8296247 13.773401 4.015883 -3.2428434 15.307884 4.4654269 -3.0263317 13.865479 4.0529585 -3.4251778 15.243468 4.4586115 -3.2231205 13.943537 4.0867629 -3.3017211 13.89448 4.0783119 -3.3755064 13.827225 4.0646811 -0 0 0 -3.5245674 13.705558 4.0415087 -3.5649309 13.518076 3.9929831 -3.6917372 13.658487 4.0406909 -3.809104 13.757047 4.0764036 -3.9052517 13.77507 4.0886712 -4.4867039 15.463987 4.5941014 -4.5659018 15.383592 4.5785623 -0 0 0 -4.6998968 15.150887 4.5264926 -4.7913194 15.117177 4.5251298 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -18.924847 -2.2188385 5.4307604 -18.938566 -2.3383358 5.4386663 -0 -0 0 -0 -0 0 -0 -0 0 -17.909508 -2.6590116 5.1619611 -17.859577 -2.7637031 5.1524196 -17.287548 -2.7839158 4.9932117 -0 -0 0 -17.191416 -2.9853172 4.9757643 -17.971968 -3.2345657 5.205852 -18.079472 -3.3685672 5.2426553 -18.457148 -3.5562458 5.3576994 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9619851 -2.2574034 2.3766422 -7.9489083 -2.3064828 2.3769147 -0 -0 0 -0 -0 0 -0 -0 0 -8.0192308 -2.5418482 2.4153538 -7.9641228 -2.578265 2.4036312 -7.9892616 -2.6406689 2.4158988 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.3128614 -2.1388626 1.3957695 -4.3761382 -2.2037935 1.4200323 -4.34026 -2.2192171 1.4129442 -4.4170823 -2.2927847 1.4418415 -0 -0 0 -0 -0 0 -4.3504529 -2.360853 1.4342083 -14.025976 -7.7222481 4.5684757 -4.3161139 -2.411247 1.4325726 -4.2384567 -2.4021108 1.4121264 -13.985727 -8.0390434 4.6025529 -4.5037341 -2.6259599 1.5089051 -4.4726291 -2.644731 1.503998 -4.2236147 -2.5326138 1.4271203 -3.6703188 -2.2316296 1.2488294 -3.5861182 -2.2106946 1.2253844 -3.5765657 -2.2352061 1.2267474 -4.3536348 -2.7580314 1.4920028 -4.377111 -2.8106828 1.5056337 -3.9146399 -2.547821 1.3551496 -3.9302571 -2.5924511 1.3657817 -3.8710806 -2.5876486 1.3510604 -3.8527405 -2.6097341 1.3502425 -3.457459 -2.3731065 1.2199321 -3.5589542 -2.4750156 1.2600065 -3.4587526 -2.4369652 1.230564 -4.3044076 -3.0723729 1.5301691 -4.2199802 -3.0513761 1.5072694 -3.6880937 -2.7014544 1.3270701 -3.6351304 -2.6970921 1.3142571 -3.691586 -2.7742512 1.3401557 -3.0390217 -2.3132427 1.1138843 -3.0415356 -2.344768 1.1198819 -3.0619786 -2.3906188 1.1324222 -3.0615931 -2.4206982 1.137602 -3.0887439 -2.4731095 1.1528685 -3.1482506 -2.5526023 1.1801301 -3.1600444 -2.5944579 1.1902169 -3.1825407 -2.6457787 1.2043929 -3.2023163 -2.6956134 1.2177511 -3.1930392 -2.7214518 1.2204772 -3.6388521 -3.1400979 1.3935885 -3.9383357 -3.4408731 1.5135396 -3.0624082 -2.7090123 1.1902169 -3.0292428 -2.7129903 1.1839467 -2.99757 -2.7179561 1.1782218 -3.2728775 -3.004329 1.2905396 -3.9669669 -3.6864569 1.5661545 -3.0963039 -2.9130831 1.236289 -2.6470878 -2.5213211 1.0675396 -2.6308749 -2.5368481 1.0672671 -2.9347458 -2.8647504 1.1937609 -2.8171885 -2.783977 1.1539589 -2.8694389 -2.8706112 1.1817658 -3.3730147 -3.4159586 1.3919528 -3.3654282 -3.4503646 1.3974051 -3.3028021 -3.4279957 1.3805029 -3.2757359 -3.4419248 1.3780494 -2.8676879 -3.0505054 1.2180237 -2.8842726 -3.1061122 1.2327449 -2.8918262 -3.1528196 1.2439222 -2.9053748 -3.2068648 1.2578256 -7.0686097 -7.8981495 3.0350101 -2.8664401 -3.2429976 1.2580982 -2.3453004 -2.6865408 1.0421864 -2.8100903 -3.2589855 1.2510103 -2.9509993 -3.4651358 1.3213452 -2.3728733 -2.8212864 1.0762633 -2.5989923 -3.1288486 1.1842194 -2.5504515 -3.1090345 1.1711338 -3.6415894 -4.4948444 1.6708391 -2.5006859 -3.1258249 1.165954 -2.48981 -3.1516786 1.1697707 -2.4804862 -3.1797919 1.1744051 -2.4491849 -3.1797087 1.1689528 -2.4389484 -3.2069287 1.1733147 -1.8824648 -2.5071387 0.92005432 -1.8842374 -2.5418277 0.92823279 -1.8509883 -2.5292745 0.91978168 -1.8467046 -2.5561807 0.92523402 -1.8645091 -2.6144595 0.94159096 -1.879451 -2.6699047 0.9568575 -2.0705838 -2.9800298 1.0599064 -2.0577018 -3.0006127 1.0626326 -1.995026 -2.9478493 1.040278 -1.9950718 -2.9872363 1.049547 -1.8930405 -2.8725004 1.0064737 -1.8423309 -2.8332503 0.98929882 -1.8909039 -2.9473376 1.023921 -1.8717545 -2.9572587 1.0233759 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -1.5543251 -2.6683521 0.90669614 -1.5455915 -2.6911874 0.91105795 -0 -0 0 -0 -0 0 -0 -0 0 -1.5033892 -2.773133 0.92550665 -1.4836246 -2.7772141 0.92387092 -0 -0 0 -1.1291419 -2.1777213 0.72676951 -1.1175095 -2.1880355 0.72785997 -1.1243898 -2.2352448 0.74067289 -1.0982645 -2.2171018 0.73276705 -1.5453639 -3.1680307 1.0304638 -1.5242298 -3.1739843 1.0293734 -1.266603 -2.6796665 0.87152863 -1.6670179 -3.5832407 1.1515054 -1.6401935 -3.5829046 1.148234 -1.4790728 -3.284121 1.0522732 -1.4452511 -3.2623477 1.0427315 -0 -0 0 -0.9598158 -2.240736 0.72240764 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -1.1553363 -3.0528092 0.95658487 -0.91841763 -2.4727221 0.7791118 -0.91179717 -2.5018125 0.78619981 -0.85333306 -2.3868732 0.74994189 -0.83835298 -2.3911564 0.74966925 -0.82429111 -2.3980751 0.75021446 -0.81079048 -2.4067345 0.75130492 -1.0735724 -3.2521722 1.0021118 -0.8247202 -2.5510712 0.79137951 -0.87179244 -2.754205 0.85026461 -1.2405409 -4.0038204 1.2193868 -0 -0 0 -0.77253324 -2.6065168 0.80201155 -0 -0 0 -2.3042157 -8.1367207 2.4278941 -0.91834593 -3.3213332 1.0081093 -0.89970505 -3.3334074 1.0100176 -0.87653852 -3.3286312 1.0070188 -0.79648799 -3.1019127 0.93913746 -0.77370119 -3.0918086 0.93477559 -0.73169333 -3.0020897 0.90724134 -1.8302795 -7.712358 2.2776825 -0.88679457 -3.8423679 1.1490518 -0.74394536 -3.3163939 0.9947511 -0.63648468 -2.9213777 0.87888926 -1.8113401 -8.5625734 2.5115871 -1.6800596 -8.1899338 2.4006324 -0.63381803 -3.1902165 0.95331347 -0.52387464 -2.7244852 0.81782329 -0.47071487 -2.5318496 0.76139176 -0.47440308 -2.6416955 0.79219735 -0.44980147 -2.5962098 0.77829391 -0.43703422 -2.6179001 0.78374624 -0.42126834 -2.6224325 0.78429151 -0.40693232 -2.636378 0.78756291 -0.38905534 -2.6274045 0.78429151 -0.38185152 -2.6926119 0.80228412 -1.1536301 -8.5038748 2.4633341 -0.39238527 -3.0339136 0.89851761 -1.0489523 -8.515481 2.4627888 -0.28390288 -2.4297805 0.7248612 -0.82794392 -7.476769 2.1631837 -0.28038365 -2.6847475 0.79655921 -0.73556495 -7.4806213 2.1615481 -0.23231331 -2.5241578 0.74994189 -0.21871717 -2.5475831 0.75621206 -0.20407666 -2.5613451 0.75975603 -0.19047691 -2.5913346 0.7679345 -0.21694233 -3.2202549 0.94622546 -0 -0 0 -0.16993554 -3.0872214 0.90778661 -0.15584125 -3.1871858 0.93586606 -0.13228503 -3.0948417 0.90942228 -0.097263031 -2.6590855 0.78565454 -0.077886924 -2.5596182 0.75730252 -0.062415004 -2.5696664 0.76002866 -0.043020103 -2.3718369 0.70386976 -0.030525491 -2.5413773 0.75185019 -0.017621834 -2.9879336 0.87834406 --0.00078264094 -3.634532 1.061542 --0.018985949 -2.9783039 0.87561786 --0 -0 0 --0 -0 0 --0.071123593 -2.868763 0.84481227 --0.087480702 -2.8278825 0.8333624 --0.10557649 -2.8474834 0.83908731 --0.12267359 -2.8381307 0.8366338 --0.1396599 -2.828676 0.83418024 --0.15781184 -2.8421757 0.83826947 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.5506976 -3.7415516 1.1793122 --0 -0 0 --0 -0 0 --3.4637685 -7.9420433 2.486779 --1.5437759 -3.4807246 1.110613 --1.4638876 -3.2466414 1.0408232 --1.4817772 -3.2332246 1.0394602 --1.5446359 -3.3165262 1.0683575 --3.5942547 -7.5963659 2.4129002 --1.7456803 -3.6311791 1.1733147 --0 -0 0 --3.8856223 -7.8357863 2.5099514 --1.6880449 -3.3517997 1.0950738 --1.6047877 -3.1383476 1.0304638 --1.6333209 -3.1463749 1.0361887 --1.6400403 -3.1124594 1.0285555 --4.2715859 -7.9886599 2.5985518 --4.3228173 -7.9665279 2.5999148 --0 -0 0 --4.3780274 -7.8372831 2.5753794 --0 -0 0 --1.906913 -3.3169138 1.1157926 --4.5055542 -7.7279406 2.5663829 --2.0659678 -3.4936893 1.1817658 --1.9488441 -3.2498949 1.1054332 --1.9642504 -3.2304766 1.1029797 --2.2187715 -3.5992231 1.2297462 --2.2688546 -3.6304178 1.2447401 --2.26998 -3.5831034 1.2335628 --5.2745333 -8.2147226 2.7978342 --5.315393 -8.1676884 2.792927 --2.1490958 -3.2579932 1.137602 --2.1514037 -3.2183478 1.1286056 --2.1721895 -3.2066798 1.1291509 --2.1891026 -3.1893246 1.1277878 --2.2152216 -3.1853118 1.1310592 --0 -0 0 --0 -0 0 --0 -0 0 --5.384624 -7.3518734 2.6138182 --0 -0 0 --2.4286368 -3.2316103 1.1771313 --5.6967468 -7.4850311 2.6969662 --2.5039389 -3.2480483 1.1937609 --2.5161252 -3.2227638 1.1902169 --2.5388355 -3.2110384 1.1915799 --2.5849464 -3.2284484 1.203575 --2.6089482 -3.2177584 1.2054833 --2.6310847 -3.2046642 1.2065738 --2.6611536 -3.2010384 1.2112083 --6.6692491 -7.9237733 2.9663107 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --8.7789488 -9.4477406 3.6860173 --8.769515 -9.3222141 3.6582105 --9.2166872 -9.6779146 3.8185089 --8.7730713 -9.0996084 3.6132288 --8.8273964 -9.0442295 3.6126835 --8.9449358 -9.0528612 3.6377642 --9.0146036 -9.0120907 3.6434891 --9.0984821 -8.9850035 3.6549392 --9.1410456 -8.916914 3.650032 --0 -0 0 --10.042142 -9.5582924 3.9599965 --0 -0 0 --10.131892 -9.4094601 3.9496372 --8.7892027 -8.062561 3.4112203 --0 -0 0 --8.8860474 -7.9528136 3.410675 --9.0860519 -8.0319624 3.4679244 --11.128164 -9.7162924 4.2176189 --9.3893967 -8.0970535 3.5448022 --9.526063 -8.1135292 3.5772436 --9.3827686 -7.892652 3.5058181 --10.539599 -8.7559557 3.914197 --9.5830488 -7.8623562 3.5439844 --9.6886711 -7.8500471 3.5649757 --0 -0 0 --11.500927 -9.086977 4.1849051 --10.672756 -8.3267374 3.8673069 --11.752573 -9.0537872 4.2353387 --0 -0 0 --11.826634 -8.8817272 4.2225261 --10.118818 -7.5024357 3.6009612 --10.232981 -7.4902167 3.6249514 --10.348151 -7.4774408 3.6492143 --12.15853 -8.6726217 4.2634182 --12.212302 -8.5984087 4.2636909 --11.379963 -7.9083495 3.9583609 --10.6539 -7.307219 3.6922874 --10.743153 -7.2719131 3.7075541 --10.849173 -7.2470093 3.7285454 --11.62283 -7.6611085 3.9760809 --11.674459 -7.5927954 3.9777167 --5.8753433 -3.7698607 2.0097008 --5.9097447 -3.7409444 2.0135176 --5.9480925 -3.7142956 2.0186973 --5.9724092 -3.6787384 2.0192425 --5.9940467 -3.6415234 2.0189698 --6.0121517 -3.6022034 2.0176067 --6.0275145 -3.5613301 2.0154259 --6.0417714 -3.5199194 2.0129724 --6.0565815 -3.4789474 2.0107913 --6.0761395 -3.4407711 2.010246 --6.1114182 -3.4113967 2.0148807 --6.4036613 -3.5231862 2.102663 --6.2128711 -3.3687074 2.0342364 --6.7535949 -3.6084867 2.20135 --6.2690663 -3.3002803 2.0391433 --6.1781697 -3.2041619 2.0037034 --6.214849 -3.174948 2.0091558 --6.2170243 -3.1281049 2.0037034 --6.8145542 -3.3765543 2.1866288 --6.8195801 -3.3270831 2.1817217 --7.3584838 -3.5343001 2.3447461 --7.3330626 -3.4668744 2.3300247 --7.354197 -3.4218142 2.3300247 --7.0050244 -3.2071881 2.2147081 --7.0210629 -3.162565 2.2136178 --0 -0 0 --0 -0 0 --0 -0 0 --7.2171459 -3.0401082 2.2506936 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --13.11417 -5.0566363 4.0142469 --13.173744 -4.9869752 4.0229707 --13.212213 -4.9090648 4.0254245 --9.4890461 -3.4594746 2.8935223 --9.4955997 -3.3960013 2.8891604 --13.194111 -4.627779 3.9935284 --13.050302 -4.4875984 3.942004 --13.611863 -4.5875168 4.101757 --7.0773973 -2.3367934 2.1435554 --7.1007566 -2.2962842 2.1462815 --7.7586079 -2.4565792 2.3376582 --7.8167276 -2.4223142 2.350471 --10.11392 -3.0664158 3.0262864 --7.6115699 -2.2567308 2.2812266 --10.075937 -2.9203742 3.0042045 --12.541238 -3.5517361 3.7250013 --9.9543028 -2.7531569 2.9581323 --7.9442458 -2.1447492 2.3632839 --9.3760815 -2.4697573 2.7790236 --10.498113 -2.6965842 3.1028914 --9.5139475 -2.3816187 2.810647 --9.5489454 -2.3282123 2.8166447 --8.7495699 -2.0764818 2.5797412 --10.806742 -2.4948471 3.1743169 --8.734026 -1.9598945 2.5680187 --13.289118 -2.8967214 3.8855724 --0 -0 0 --12.157807 -2.4942086 3.5483463 --17.031769 -3.3855045 4.9520464 --12.709968 -2.4453635 3.6991029 --18.451136 -3.4328568 5.3495207 --13.8782 -2.4939549 4.02706 --0 -0 0 --14.178215 -2.3686509 4.1047559 --14.189632 -2.281152 4.1039376 --14.265166 -2.2035921 4.1216578 --13.594129 -2.0145926 3.9256468 --13.777698 -1.9554836 3.9747179 --13.883821 -1.8837168 4.0017066 --13.610779 -1.7616808 3.9204671 --0 -0 0 --12.304038 -1.4392209 3.5418034 --12.347063 -1.3675116 3.5516176 --12.476748 -1.304435 3.5862398 --12.337063 -1.2133478 3.5442569 --12.354814 -1.1385977 3.5472558 --14.563436 -1.25214 4.1734548 --12.314148 -0.98261201 3.5319893 --12.25182 -0.90201753 3.5126336 --12.228325 -0.82488126 3.5044551 --12.210109 -0.74842072 3.4979122 --12.208707 -0.67316878 3.4962766 --12.194349 -0.59734994 3.4910967 --0 -0 0 --12.181532 -0.44695535 3.4856446 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.5579128 12.904791 4.3739557 --9.5486259 13.059047 4.4060597 --9.4920444 13.150267 4.4170222 --9.4464645 13.257792 4.433466 --9.3893709 13.35025 4.4449506 --0 0 0 --0 0 0 --0 0 0 --9.6798267 14.507372 4.7474608 --9.572051 14.538272 4.7383256 --9.5294657 14.668781 4.7615557 --7.9699287 12.434185 4.0252461 --7.8785238 12.459191 4.0176773 --7.8356433 12.561358 4.0349035 --7.833281 12.730887 4.0735331 --7.7890701 12.834832 4.0912819 --7.6402788 12.765585 4.0544796 --7.5647502 12.817213 4.0560455 --7.4893613 12.869228 4.0578728 --0 0 0 --7.6383314 13.503819 4.2267461 --0 0 0 --0 0 0 --7.4436355 13.743994 4.2580671 --7.3064485 13.690613 4.2277899 --7.5978456 14.449508 4.4459944 --7.4695296 14.419565 4.4227648 --0 0 0 --7.4172711 14.759426 4.4981966 --7.2863274 14.723329 4.4736614 --7.1764016 14.727839 4.4616551 --7.1096931 14.821209 4.4765325 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --6.7161517 15.177985 4.5195994 --6.6321383 15.240153 4.5258636 --6.5407796 15.285886 4.5274296 --6.4547234 15.344419 4.5329108 --6.3630314 15.389979 4.5347381 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --5.0356131 13.573686 3.9464214 --4.9452991 13.585279 3.9409401 --0 0 0 --4.5606747 13.023561 3.7629313 --4.5251775 13.180954 3.7999947 --4.4306736 13.168214 3.7885103 --4.3461657 13.18415 3.7853782 --4.716783 14.609701 4.1828966 --4.2465868 13.434392 3.8414953 --4.3702898 14.126974 4.0302057 --4.5407186 15.003576 4.2703347 --3.8764324 13.097434 3.7250848 --4.3951483 15.192632 4.3081813 --3.7553153 13.285219 3.7647583 --0 0 0 --0 0 0 --3.8183124 14.524736 4.092587 --4.0018125 15.612061 4.3896165 --3.3357358 13.352952 3.753274 --3.2473531 13.346905 3.7459657 --3.1889684 13.466152 3.7736328 --3.5210791 15.286947 4.2734671 --3.3567972 14.993626 4.1862893 --3.2499716 14.946022 4.1674967 --3.1510303 14.931678 4.1581006 --3.029947 14.806976 4.1184268 --2.9596772 14.929451 4.1471381 --2.7972834 14.578536 4.0456052 --2.6959858 14.531832 4.0281177 --2.6035359 14.530046 4.0231581 --2.4906657 14.40877 3.9855728 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --1.6130095 13.849237 3.8018217 --1.5291646 13.869429 3.804693 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.0063182 14.746469 4.0283785 -1.0867429 14.605243 3.991837 -1.2336169 15.308412 4.1844625 -1.1675084 13.457905 3.6843674 -0 0 0 -1.5313886 15.446417 4.2288342 -0 0 0 -1.5844963 14.205173 3.8965685 -1.6726445 14.203813 3.8989174 -1.7433637 14.061079 3.8628981 -1.8242445 14.008956 3.8516748 -2.0876586 15.297328 4.2063875 -2.1876233 15.327234 4.218133 -2.2420599 15.048093 4.1455722 -2.3221998 14.955832 4.1241693 -2.2591155 13.983571 3.8618541 -2.5765436 15.3489 4.2400575 -2.4149675 13.8654 3.8373191 -2.4955382 13.825623 3.8305328 -2.8682086 15.350114 4.2541523 -2.9760809 15.403311 4.2737279 -2.750356 13.781132 3.8315771 -3.1255267 15.174644 4.221004 -2.9607913 13.941805 3.8856061 -3.1847765 14.556137 4.0607438 -0 0 0 -3.24176 13.992151 3.9153612 -3.3154721 13.921288 3.9012666 -3.3925676 13.866926 3.8918703 -0 0 0 -3.5232024 13.671882 3.8493257 -3.5611384 13.476417 3.8007777 -4.2887063 15.834929 4.4676585 -4.3635874 15.728321 4.4452114 -4.4410157 15.634393 4.4264188 -4.5570779 15.67637 4.4459944 -4.6240077 15.550034 4.4183273 -4.5859127 15.082674 4.2943478 -0 0 0 -0 0 0 -0 0 0 -4.7568173 14.368097 4.1241693 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -19.051399 -1.1830405 5.1930051 -0 -0 0 -0 -0 0 -18.819519 -1.5168271 5.136888 -18.378048 -1.5947745 5.0196943 -18.366955 -1.7074206 5.0194335 -18.597248 -1.844009 5.0849471 -0 -0 0 -0 -0 0 -20.160229 -2.3745694 5.5205727 -18.941086 -2.3488221 5.1924829 -0 -0 0 -0 -0 0 -0 -0 0 -18.992311 -2.8300321 5.2238045 -17.316721 -2.6889637 4.7701688 -17.293224 -2.7940881 4.768342 -18.012606 -3.0238936 4.9703636 -18.328466 -3.1926935 5.0622392 -0 -0 0 -18.669365 -3.4886775 5.1671653 -18.672251 -3.607928 5.1739511 -0 -0 0 -18.672897 -3.8463395 5.1867409 -18.622507 -3.9552248 5.1794324 -18.62995 -4.0764337 5.1883068 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9429574 -2.2556305 2.264473 -7.9345293 -2.3059423 2.2660389 -0 -0 0 -0 -0 0 -0 -0 0 -8.0163164 -2.5446775 2.3059735 -7.9702501 -2.583988 2.2973602 -7.9927335 -2.6455896 2.3083227 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -13.713062 -7.233243 4.223875 -13.656507 -7.3108692 4.220221 -13.618177 -7.3982134 4.2223091 -13.579289 -7.4853625 4.2243972 -0 -0 0 -3.6129067 -2.0487735 1.1549195 -13.930318 -8.0167198 4.3776097 -3.5699859 -2.0827348 1.1494383 -3.5745833 -2.1149282 1.1549195 -3.6103697 -2.1661375 1.1703191 -4.4430242 -2.7032471 1.4381154 -4.4822145 -2.7649338 1.455864 -3.4864147 -2.1799989 1.1436961 -3.4843855 -2.2085886 1.1473502 -3.4886324 -2.2414114 1.1530924 -3.4998863 -2.2791123 1.1611837 -3.8676622 -2.5526919 1.2849025 -3.8182313 -2.5538261 1.27394 -4.7852001 -3.2436228 1.5949823 -4.1008716 -2.8164334 1.377039 -4.1627374 -2.8966994 1.4031399 -4.1511955 -2.9266384 1.405228 -3.4851928 -2.4890263 1.1898948 -3.4362309 -2.4860239 1.1786714 -3.420912 -2.5070615 1.1786714 -3.4093394 -2.5308826 1.1799765 -3.3104343 -2.4890761 1.1517874 -3.926255 -2.9902732 1.3663375 -3.0824704 -2.377351 1.0844468 -3.070107 -2.3980033 1.0852298 -3.597297 -2.8457577 1.272113 -3.2822385 -2.6292987 1.169014 -3.301271 -2.6779814 1.1812814 -3.3086419 -2.7178011 1.1896338 -3.3156474 -2.7578115 1.1979861 -3.2964487 -2.776238 1.197203 -3.2220716 -2.7475405 1.1768444 -3.3088844 -2.8568692 1.2139077 -3.4693148 -3.0328226 1.2778552 -3.3415115 -2.9574168 1.2384427 -3.5094631 -3.144763 1.3060442 -3.7274146 -3.3816373 1.3926996 -3.7236545 -3.4201207 1.3989638 -3.0353944 -2.8222075 1.1525704 -3.0334806 -2.8553398 1.1583126 -3.1158123 -2.9691572 1.195637 -4.0435286 -3.9013262 1.5511327 -2.9624581 -2.893151 1.1515263 -3.7784836 -3.7361238 1.4686534 -3.7050123 -3.7086895 1.4493388 -3.6320219 -3.680496 1.430024 -3.3257554 -3.4116304 1.3201388 -3.3409078 -3.4695311 1.3342333 -3.2576985 -3.4249003 1.3099594 -3.2676816 -3.4778981 1.3222269 -3.2324934 -3.4830205 1.3167456 -2.9925928 -3.2643545 1.2293073 -7.0592561 -7.7982173 2.8760195 -2.8802524 -3.2202265 1.2000742 -2.3716555 -2.684263 1.0004015 -2.32532 -2.6645703 0.98813409 -2.2893965 -2.6561143 0.98004276 -2.2693028 -2.6657002 0.9784767 -2.2411048 -2.6655314 0.97351754 -2.1877213 -2.6346593 0.95785689 -2.126848 -2.5935273 0.9388032 -3.4462864 -4.256649 1.5127642 -3.3947916 -4.2460427 1.5018017 -2.3735721 -3.0058274 1.0674812 -2.3568642 -3.0226192 1.0682641 -2.3064849 -2.9957099 1.0541697 -2.312587 -3.0420899 1.065132 -2.3691788 -3.1566136 1.0990633 -2.3371267 -3.1540241 1.0933211 -2.219738 -3.0342672 1.0484273 -1.9270881 -2.6681864 0.92183757 -0 -0 0 -0 -0 0 -2.1379998 -3.0783119 1.0452952 -1.9826844 -2.8922729 0.98004276 -1.9930142 -2.9459701 0.99361527 -1.9631144 -2.9404767 0.98787308 -1.9020405 -2.887156 0.96673125 -1.869566 -2.8761051 0.95942301 -1.8529251 -2.8891478 0.95994502 -1.8429006 -2.9127018 0.96386015 -1.8423629 -2.9518039 0.97273451 -1.8742918 -3.0444515 0.9985745 -1.8896277 -3.1120148 1.0163232 -1.8501741 -3.0895882 1.0056218 -1.8468809 -3.1274867 1.0139741 -1.9058189 -3.2730942 1.0559967 -1.5773122 -2.7471561 0.88842827 -1.8503029 -3.2693465 1.0476444 -1.4903668 -2.6710272 0.85893416 -1.5450733 -2.8095653 0.89886868 -0 -0 0 -0 -0 0 -0 -0 0 -1.4499083 -2.7969201 0.88373011 -1.1041408 -2.1617 0.68823361 -1.1341965 -2.2546916 0.71433461 -1.0950825 -2.2105608 0.69893503 -0 -0 0 -1.5400141 -3.208261 0.99413729 -1.5219481 -3.2211418 0.99518132 -1.2056401 -2.5922074 0.80490506 -1.5429109 -3.3721452 1.0345938 -1.6128675 -3.5831575 1.0943651 -1.4951644 -3.3767002 1.0304177 -1.5984305 -3.6708391 1.114463 -1.5823314 -3.6956658 1.1189001 -1.6498179 -3.9197567 1.1818035 -0 -0 0 -0 -0 0 -1.6135263 -4.0400147 1.2081655 -1.5865932 -4.0444465 1.2065995 -1.5416343 -4.0018535 1.1914608 -1.4917989 -3.9444144 1.1721461 -0.90730238 -2.4428999 0.73652047 -0 -0 0 -0 -0 0 -0.9505384 -2.7115653 0.80882019 -0 -0 0 -1.1230887 -3.3351343 0.98343593 -1.1007906 -3.3364615 0.98186982 -0.80661255 -2.4952223 0.74095762 -0.80321282 -2.537864 0.75165904 -0.77792817 -2.5113885 0.74278468 -0.76334256 -2.5188863 0.74356771 -0.75252861 -2.539259 0.74800491 -1.1655135 -4.0257044 1.1650989 -1.1502404 -4.0662227 1.1744952 -0.9211148 -3.3334143 0.96699226 -0.90064406 -3.3390036 0.96699226 -0.87989402 -3.3435333 0.96673125 -0.79178745 -3.0851648 0.89312643 -0.75834161 -3.0318973 0.87694383 -0.74177712 -3.0449355 0.87929291 -1.8493965 -7.8073606 2.2013085 -1.7148148 -7.4422731 2.0969045 -0.70500034 -3.1447401 0.90330583 -0.64591277 -2.9660048 0.85266989 -1.8136501 -8.5918665 2.4062014 -0.64544892 -3.1496181 0.90121776 -0.64637685 -3.2557869 0.92940682 -0.52201581 -2.7155073 0.77958709 -0.48316643 -2.5990658 0.74669981 -0.45291427 -2.5221634 0.72477502 -1.3296909 -7.6891913 2.1417983 -0.43159851 -2.5856178 0.74069661 -0.52564436 -3.2745125 0.9286238 -0.43242916 -2.802531 0.79864085 -0.41043249 -2.7726619 0.78976649 -0.38760298 -2.7340271 0.77854306 -0.37017387 -2.7315707 0.77723801 -0.35204941 -2.723259 0.77436692 -0.34214687 -2.7809412 0.78950548 -0.32764363 -2.805042 0.79550868 -0.85177046 -7.7207561 2.1321409 -0.26814166 -2.5678511 0.72999519 -0.3997533 -4.0768738 1.1395199 -0.37200162 -4.049449 1.1314286 -0.28210005 -3.2898812 0.92470866 -0.20588118 -2.5842438 0.73286629 -0.55906743 -7.6380825 2.1026468 -0 -0 0 -0.17547823 -2.8708827 0.80960327 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0.083948635 -2.7620208 0.77906507 -0.065481894 -2.6987898 0.76183844 -0 -0 0 -0.043922469 -3.700377 1.0325058 -0.017295396 -2.9765854 0.8367483 --0 -0 0 --0 -0 0 --0.035740983 -2.8412638 0.8002069 --0.053340152 -2.8496776 0.80255598 --0.071409687 -2.8724573 0.80882019 --0.089881979 -2.8989811 0.81612849 --0.10835639 -2.9167035 0.82108766 --0.13071819 -3.0182118 0.84875476 --0.15091726 -3.0510976 0.85789007 --0.16914983 -3.0414398 0.85554099 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.6125426 -3.7572858 1.1374317 --1.6232015 -3.7190127 1.1290795 --1.6220888 -3.6551664 1.1131579 --1.5559024 -3.4489455 1.0549526 --1.4880551 -3.2454364 0.99726945 --1.5063087 -3.2327454 0.99622542 --1.5310764 -3.2339103 0.99935752 --3.7909751 -7.877903 2.395761 --3.9706931 -8.1233311 2.4766741 --3.9298694 -7.9163837 2.4216011 --3.8857896 -7.7085266 2.3660059 --1.6185573 -3.1639414 0.99283224 --1.6294818 -3.137676 0.98787308 --1.6527574 -3.1353028 0.99022216 --1.8492194 -3.4561505 1.091755 --1.8842176 -3.470185 1.0995853 --4.3952641 -7.9745078 2.4939008 --4.438457 -7.9372787 2.4907687 --0 -0 0 --4.771008 -8.2913332 2.6184025 --2.0136259 -3.4516041 1.1123748 --1.9560801 -3.3062763 1.0706133 --1.9519831 -3.2536573 1.0578238 --1.9794396 -3.2539876 1.0617388 --0 -0 0 --2.0637684 -3.3006485 1.0844468 --5.1882873 -8.1823578 2.6515508 --5.2785921 -8.2128935 2.6716485 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --2.2937937 -3.340266 1.1275134 --0 -0 0 --0 -0 0 --0 -0 0 --5.3791308 -7.4328094 2.5126934 --2.3934639 -3.2659969 1.1267304 --2.4278488 -3.2706232 1.1332556 --2.4565766 -3.2672358 1.1371708 --2.4683867 -3.2413514 1.1335167 --5.7520432 -7.4553638 2.5779459 --5.8184857 -7.4465504 2.5870812 --5.8628693 -7.4091949 2.5865593 --5.9112396 -7.3768477 2.5878644 --5.9935012 -7.3861589 2.603786 --6.0092878 -7.313447 2.5912576 --6.1065373 -7.3395071 2.6134434 --6.6490932 -7.8924565 2.8222513 --6.7099261 -7.8661976 2.8274715 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --8.6585331 -9.4243155 3.492264 --8.6767454 -9.3286028 3.4766033 --9.1746082 -9.7432108 3.6504359 --9.2149 -9.6664715 3.6428666 --8.8349171 -9.15481 3.4719052 --9.334178 -9.5540438 3.6433887 --8.9893656 -9.0889387 3.4883487 --9.0374508 -9.0261059 3.4854777 --9.0727329 -8.9508247 3.4779084 --0 -0 0 --0 -0 0 --8.8210764 -8.3878841 3.3231294 --8.7991934 -8.2648745 3.2959845 --8.8370008 -8.1989107 3.2912862 --8.8793135 -8.1373606 3.2884152 --8.9254971 -8.0794859 3.2871101 --10.148006 -9.073247 3.7125564 --10.189738 -8.9986687 3.7075973 --11.098161 -9.6802225 4.013762 --11.193188 -9.6428137 4.0265512 --9.142664 -7.7793779 3.2777138 --9.359477 -7.8653378 3.3374851 --10.154163 -8.4272785 3.5998001 --9.6389694 -7.9004092 3.4016936 --9.6122246 -7.7803898 3.3755925 --9.6545048 -7.7170453 3.3737655 --10.641335 -8.3992033 3.6974177 --11.674937 -9.0991821 4.0341206 --10.922632 -8.405735 3.7584941 --11.612768 -8.8238344 3.9753935 --11.719976 -8.7923813 3.9934032 --10.236111 -7.5816612 3.4760814 --10.277762 -7.5152926 3.4745152 --10.3683 -7.4842887 3.4893928 --10.351916 -7.3762803 3.4687731 --10.555699 -7.4242344 3.5212362 --11.391712 -7.9080992 3.7814631 --11.709204 -8.0224476 3.8696845 --11.229586 -7.5930796 3.6971569 --10.872842 -7.255095 3.5661297 --0 -0 0 --11.421687 -7.4203248 3.7146444 --11.456436 -7.3433313 3.7112513 --6.0720186 -3.8403308 1.9744909 --6.0930109 -3.8014688 1.9737078 --6.2724414 -3.8601158 2.0232997 --6.1408525 -3.7274134 1.9742298 --6.3955469 -3.8284557 2.0473127 --6.7739167 -3.9986248 2.1587639 --16.049862 -9.340023 5.0528426 --7.0192499 -4.0280805 2.2201014 --7.0119033 -3.9668775 2.2101829 --6.7587094 -3.7691345 2.1243105 --6.7284088 -3.6983068 2.107867 --6.4216113 -3.4786041 2.0065951 --7.1846461 -3.8349564 2.2339349 --0 -0 0 --6.3054004 -3.2670267 1.952044 --6.8567452 -3.4993863 2.1133482 --6.8125324 -3.4243095 2.0935113 --6.8758106 -3.4034212 2.1063008 --6.4591794 -3.148083 1.9747518 --7.3096108 -3.5070601 2.2240164 --7.3536892 -3.472858 2.2308028 --7.0176711 -3.2617204 2.1243105 --7.0252614 -3.2129803 2.1206565 --16.710625 -7.5171466 4.9862852 --7.2486658 -3.2081544 2.1752076 --0 -0 0 --0 -0 0 --0 -0 0 --7.3394885 -3.0351975 2.1793838 --7.3678122 -2.9941022 2.1822548 --7.36901 -2.9420397 2.1772957 --7.3788342 -2.8935983 2.1749465 --7.3865404 -2.8444536 2.1720755 --0 -0 0 --0 -0 0 --0 -0 0 --6.9659138 -2.4880347 2.031913 --10.547152 -3.6937063 3.0535061 --13.295999 -4.5646629 3.8328819 --7.0901318 -2.3861694 2.054621 --7.1046395 -2.3426201 2.054621 --10.423329 -3.3655548 2.9934738 --7.6842136 -2.429493 2.2109659 --7.5062284 -2.3226864 2.1564147 --7.6284437 -2.3092935 2.1869531 --7.7952046 -2.3076334 2.2300196 --9.4135008 -2.7237413 2.681567 --9.5117846 -2.6890302 2.7045357 --9.0237455 -2.491432 2.5630684 --9.3539162 -2.5208824 2.6512897 --9.3953505 -2.4703104 2.6585979 --13.353741 -3.4231164 3.7592771 --8.8283587 -2.2058454 2.4923346 --13.597348 -3.3082643 3.8156552 --11.443679 -2.7102003 3.2116783 --11.462915 -2.6405821 3.2124612 --13.28572 -2.9745657 3.7130785 --8.9145079 -1.9389203 2.4985988 --16.964348 -3.5798209 4.7197938 --12.274249 -2.5118806 3.4194422 --12.745847 -2.5269654 3.545249 --17.091833 -3.2793207 4.7375426 --17.218887 -3.1942749 4.7670369 --17.206806 -3.0829456 4.7584233 --13.512699 -2.3358471 3.7397015 --13.479165 -2.2449651 3.726651 --13.46409 -2.1576364 3.7188206 --12.390348 -1.9077607 3.4215302 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --12.383633 -1.5195079 3.4053476 --12.375463 -1.441486 3.4006495 --12.401346 -1.3674272 3.4053476 --12.423906 -1.2928056 3.4092629 --12.428722 -1.2162678 3.4084797 --0 -0 0 --0 -0 0 --0 -0 0 --12.387434 -0.90596288 3.390209 --12.397575 -0.83026004 3.3915141 --12.345586 -0.75072271 3.3761146 --12.317187 -0.67316949 3.3672402 --12.336514 -0.59832674 3.3714163 --12.2898 -0.52050078 3.3578439 --12.295656 -0.4451867 3.3586268 --12.320349 -0.37039867 3.36463 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --13.202861 -0.24123573 3.4471555 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --14.49124 13.800355 5.2073269 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --13.77984 14.300405 5.1680169 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --14.041852 15.884225 5.5150437 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.6517925 13.185892 4.2581363 --9.5395155 13.201707 4.2443652 --9.4425898 13.237924 4.2373548 --9.3622999 13.297196 4.2378554 --0 0 0 --8.9393911 13.033449 4.1194258 --0 0 0 --9.6704273 14.476931 4.5345559 --9.5622339 14.506895 4.5255423 --9.5015469 14.60912 4.5390625 --9.3949957 14.641071 4.5310502 --7.9196873 12.510294 3.8612838 --7.8935475 12.639948 3.8860714 --7.9823971 12.958512 3.9681962 --9.1399364 15.043462 4.5843816 --7.6913991 12.83625 3.9020958 --7.6346564 12.92071 3.913363 --0 0 0 --0 0 0 --0 0 0 --7.6394815 13.684928 4.0853739 --0 0 0 --7.4663563 13.769135 4.08287 --7.3976998 13.844575 4.0916333 --0 0 0 --7.5348339 14.527309 4.2643957 --0 0 0 --7.4195328 14.744944 4.300951 --7.2747545 14.680889 4.2694035 --7.4617691 15.293423 4.4329014 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --6.8646669 15.238826 4.3545327 --0 0 0 --6.6624479 15.288193 4.3450179 --6.5711851 15.335014 4.3467708 --6.4837337 15.391106 4.3512774 --6.3928776 15.439544 4.3537812 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.9705324 13.633257 3.7849181 --4.8884172 13.668057 3.78617 --4.7551088 13.557104 3.7476113 --4.516614 13.134674 3.6241741 --0 0 0 --4.3587341 13.200142 3.6271787 --4.7245727 14.608381 4.0027485 --4.2347093 13.373547 3.6599784 --4.0941014 13.210629 3.6089008 --4.4703312 14.743828 4.0165195 --3.9030526 13.163343 3.5828614 --3.8305664 13.21587 3.5906231 --3.7470286 13.230742 3.5883696 --4.2857695 15.494803 4.1897826 --4.0172257 14.878689 4.0177712 --3.9145105 14.859993 4.0062537 --3.859633 15.025325 4.0440612 --3.6923575 14.749132 3.96419 --3.3036063 13.548751 3.638696 --3.213479 13.539565 3.6309342 --3.1427567 13.612798 3.645206 --3.3509095 14.93166 3.9897289 --3.2544844 14.930182 3.9839702 --3.1501875 14.890199 3.9681962 --3.0605149 14.917783 3.9704497 --2.9043634 14.611529 3.8848195 --2.7927008 14.514991 3.854774 --2.4055169 12.929955 3.4333844 --2.5891938 14.408095 3.8179681 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --1.7183523 13.94771 3.6664882 --0 0 0 --1.5423723 13.925407 3.6554716 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0.76601869 13.822833 3.6124063 -0.84820276 13.775354 3.6013894 -1.0181246 15.031404 3.9283857 -0 0 0 -1.1706795 14.620173 3.8252292 -1.2439808 14.422694 3.7759044 -1.4203818 15.366297 4.0230293 -1.5194858 15.40643 4.0357985 -1.6187321 15.442072 4.0475664 -1.7250954 15.536733 4.0748582 -1.8595078 15.859517 4.1617398 -1.7586956 14.243183 3.7436054 -1.8423216 14.203321 3.736094 -1.9595591 14.413354 3.7939317 -2.0200229 14.204564 3.7426038 -2.2531421 15.175412 3.9997439 -2.3093536 14.923068 3.9373994 -2.2816019 14.167844 3.7433548 -2.3643374 14.12875 3.736845 -2.4239891 13.958495 3.696033 -2.7412474 15.230649 4.0342965 -2.5700977 13.793498 3.6607294 -2.9583473 15.353673 4.0758595 -2.790385 14.018242 3.7285824 -2.8818014 14.027411 3.7355931 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -3.7413266 15.744674 4.2173243 -0 0 0 -0 0 0 -3.5121336 13.657202 3.6790073 -3.544028 13.438804 3.6264274 -3.6531949 13.515874 3.6529677 -0 0 0 -0 0 0 -4.5055981 15.529114 4.213819 -4.5156841 15.214381 4.1364517 -4.6140132 15.203063 4.1409583 -4.5480266 14.661264 4.0019975 -0 0 0 -4.7278981 14.60527 4.0022478 -4.8247166 14.598047 4.0082569 -0 0 0 -0 0 0 -5.1320424 14.619128 4.0390539 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -19.129284 -1.4135461 4.9927511 -18.960051 -1.5180711 4.9511881 -18.410221 -1.5878042 4.8109751 -0 -0 0 -18.030937 -1.7782663 4.717834 -18.633038 -1.9531484 4.877326 -18.704416 -2.0767348 4.8991089 -0 -0 0 -20.041937 -2.4745457 5.2546487 -18.90593 -2.4521711 4.9624553 -17.642445 -2.3984809 4.6367106 -17.771172 -2.5271301 4.6742678 -17.42877 -2.5876474 4.5888882 -19.821695 -3.0672908 5.2193451 -17.525698 -2.8222611 4.6229401 -17.516645 -2.9311814 4.6251931 -17.834095 -3.0969048 4.7133269 -17.790936 -3.2019877 4.7070675 -17.865179 -3.3286445 4.7318554 -0 -0 0 -18.869362 -3.755883 5.0077739 -18.831736 -3.8686705 5.0040183 -0 -0 0 -19.004181 -4.1477771 5.0626073 -19.07472 -4.2859535 5.0881457 -19.690437 -4.551383 5.2586546 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9512043 -2.2543473 2.1694663 -7.9353623 -2.3025529 2.1689653 -0 -0 0 -0 -0 0 -0 -0 0 -8.0102863 -2.5390136 2.2052705 -7.9807405 -2.5836439 2.201515 -7.9739299 -2.635602 2.2040186 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -18.354799 -7.7378683 5.1835408 -0 -0 0 -0 -0 0 -19.036779 -8.4413309 5.4176459 -18.957266 -8.5456467 5.4098845 -18.889511 -8.6549501 5.4056277 -18.868523 -8.7858105 5.4148917 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -13.644713 -7.5123491 4.0603361 -3.4944417 -1.9522945 1.0672934 -3.4596543 -1.9608123 1.0605332 -3.4727392 -1.9964769 1.0680445 -3.4855156 -2.0323753 1.0755559 -3.4779799 -2.0566802 1.0770582 -3.4943573 -2.0954056 1.0858215 -3.4789524 -2.1152983 1.0850704 -3.4477758 -2.1254296 1.0795621 -3.4149642 -2.1342323 1.073553 -3.2145085 -2.0365136 1.0162159 -3.0797484 -1.9777409 0.97865891 -3.04808 -1.9839275 0.97264981 -3.9289241 -2.591572 1.2493197 -3.9282422 -2.6258519 1.254077 -3.9296918 -2.6618493 1.2595853 -3.8765647 -2.6607125 1.2480677 -3.5525444 -2.4705589 1.1511707 -3.975008 -2.8006375 1.2896309 -3.5850029 -2.55896 1.1712011 -3.6014018 -2.6041651 1.1814667 -3.5197439 -2.5781636 1.1604348 -3.4781988 -2.580677 1.1521722 -3.6573484 -2.7485259 1.215268 -4.4732428 -3.4047143 1.4859288 -3.9477057 -3.0432036 1.3211788 -4.1243305 -3.2198727 1.3852761 -4.3179159 -3.4138281 1.4556328 -4.3180499 -3.4571991 1.4626435 -3.5326464 -2.8642097 1.2082573 -3.5471833 -2.9122453 1.2190237 -3.3758724 -2.8064728 1.1674454 -3.3645144 -2.8321211 1.1694485 -3.2733848 -2.7899184 1.1444105 -4.1350965 -3.5682557 1.4446161 -4.0642729 -3.5508864 1.4278406 -3.5724759 -3.1601334 1.2655944 -3.4808929 -3.1174109 1.2405564 -3.458113 -3.1354592 1.2393045 -3.0600595 -2.8090074 1.1063527 -3.0867395 -2.8685887 1.1218762 -3.0676696 -2.886148 1.1213756 -3.0877626 -2.9409697 1.134896 -3.1323886 -3.0203354 1.1574303 -3.7733991 -3.6832476 1.395792 -3.3636804 -3.323921 1.2550784 -3.0009673 -3.0021684 1.1298884 -3.3668566 -3.409723 1.2713531 -2.9246888 -2.9985743 1.1153663 -3.6183331 -3.755434 1.3807693 -3.5905497 -3.7726562 1.3790165 -3.3206286 -3.5322323 1.2858752 -3.0485318 -3.2829728 1.1907308 -3.8405397 -4.1869688 1.5014523 -3.8108761 -4.206151 1.4999501 -2.3729031 -2.6517608 0.95236903 -2.3469689 -2.6553905 0.94861329 -2.3249006 -2.663178 0.94635987 -2.3059869 -2.6744604 0.9453584 -2.2713277 -2.6671858 0.93809736 -2.236222 -2.6588461 0.93058592 -2.1641839 -2.6054969 0.90805173 -2.1211355 -2.5857949 0.897035 -2.079021 -2.5664163 0.88626868 -2.2084043 -2.7605491 0.94635987 -2.2046292 -2.7907593 0.95186824 -2.3149121 -2.9675806 1.0054495 -3.2633018 -4.2364435 1.4150712 -3.1926994 -4.197825 1.3960423 -3.1697888 -4.2212067 1.3972943 -3.0982738 -4.1791396 1.3775142 -2.3520324 -3.213747 1.0620354 -1.9330635 -2.6756866 0.88576794 -1.9868879 -2.7860184 0.91706544 -1.9502475 -2.7704511 0.90830213 -1.9437094 -2.7974706 0.91305935 -1.9385556 -2.8269088 0.91856772 -1.9271433 -2.8475695 0.92132187 -1.9101725 -2.8601456 0.92157227 -1.9394766 -2.9429452 0.94360572 -1.8897105 -2.9060953 0.92858291 -1.8666147 -2.9094875 0.92607909 -1.8430308 -2.9118881 0.92332494 -1.8671818 -2.9904771 0.94385606 -1.8553988 -3.0125935 0.94711101 -1.8278298 -3.0090282 0.94260418 -1.8337166 -3.0608795 0.95487279 -1.7868266 -3.024564 0.94060117 -1.7809072 -3.05722 0.94711101 -1.7394484 -3.0286343 0.93534315 -1.8863882 -3.3315716 1.022225 -0 -0 0 -1.4369717 -2.6122806 0.80314255 -1.4735291 -2.7180698 0.83168584 -0 -0 0 -0 -0 0 -0 -0 0 -1.6953447 -3.3189731 0.99593514 -1.0965726 -2.1799667 0.66318011 -1.0853254 -2.1909914 0.66443199 -1.633966 -3.3496165 0.99593514 -1.5517595 -3.2312949 0.95912927 -1.6382605 -3.465692 1.023477 -1.5438497 -3.3185594 0.97865891 -1.2078551 -2.638732 0.78261137 -1.4847172 -3.2966504 0.96714145 -1.4672071 -3.3118942 0.96889406 -1.4348674 -3.2933214 0.96113229 -0 -0 0 -0 -0 0 -0.97323596 -2.3513341 0.69022113 -1.6123279 -3.9633372 1.1386517 -1.5948074 -3.990236 1.1434089 -1.5288911 -3.894511 1.1141145 -1.507056 -3.9092386 1.1156168 -1.4816699 -3.9147904 1.1146152 -1.4687496 -3.9537563 1.1228778 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0.87459105 -2.5960238 0.74054754 -1.0474787 -3.1731563 0.89628386 -0.96601659 -2.987922 0.84420484 -0.87167054 -2.7538202 0.77910602 -0.80717862 -2.6056085 0.73754299 -1.2243811 -4.0391603 1.123629 -0.80872321 -2.7285576 0.76808935 -0.76069844 -2.6256037 0.73904526 -1.196525 -4.2258887 1.1679462 -0.92200762 -3.3345702 0.92683023 -0.9012773 -3.3392301 0.92657989 -0.83464855 -3.1696274 0.87975883 -0.81349808 -3.1681252 0.87800616 -0.75877279 -3.0321832 0.84044915 -1.0539333 -4.3235011 1.182969 -2.0416145 -8.6026802 2.3186927 -1.9798608 -8.5763693 2.3084271 -0.66208071 -2.951648 0.81440961 -0.65158743 -2.9906542 0.82367367 -0.75487435 -3.5695329 0.97565436 -0.71310914 -3.4773617 0.95011556 -0.5558427 -2.7979846 0.76984197 -1.5335064 -7.9712815 2.1314085 -0.47807437 -2.5714014 0.7084989 -0.4607462 -2.5657105 0.70624548 -0.58724916 -3.3888538 0.92157227 -0.47485933 -2.8442755 0.77785414 -1.3325311 -8.2898607 2.2035179 -1.2130492 -7.8539281 2.0873415 -0.46955323 -3.1704853 0.86098033 -0.39293984 -2.770721 0.75582069 -0.37736368 -2.7836328 0.7585749 -0.35592604 -2.7522912 0.74981159 -0.97570491 -7.921073 2.0961049 -0.3081733 -2.6372147 0.71876448 -0.307657 -2.7805083 0.75557035 -0.28182942 -2.6985717 0.73378724 -0.39901462 -4.0597434 1.0870734 -0.3707197 -4.0254807 1.077559 -0.23335418 -2.7177708 0.73754299 -0.32668567 -4.0972824 1.0950856 -0.21747991 -2.9579508 0.79913646 -0 -0 0 -0 -0 0 -0.14161086 -2.5738151 0.69873405 -0 -0 0 -0 -0 0 -0 -0 0 -0.072781116 -2.392653 0.65116185 -0.058500823 -2.4095082 0.65541834 -0.052129805 -2.8696148 0.77434886 -0.034097295 -2.8350301 0.76533514 -0.017010482 -2.8864968 0.77860528 --0 -0 0 --0.024089793 -3.7955611 1.0137122 --0.036602817 -2.9250438 0.78862047 --0.055410307 -2.9712272 0.80063874 --0.074929088 -3.0230954 0.81415927 --0.093208812 -3.0138695 0.8119058 --0 -0 0 --0 -0 0 --0.15104902 -3.0599921 0.8244248 --0.17314157 -3.1189411 0.83994842 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.6342411 -3.684751 1.0745544 --1.6393141 -3.6358187 1.0635377 --1.5704551 -3.4267743 1.0069518 --1.5044085 -3.2301292 0.95362091 --1.5233718 -3.2190871 0.95312017 --1.5577738 -3.2402201 0.96188343 --4.0190325 -8.2313795 2.4010677 --1.6008596 -3.2277989 0.9638865 --1.6267302 -3.2300215 0.96739179 --1.6178743 -3.1639469 0.9511171 --1.63146 -3.1427891 0.94786215 --1.6534204 -3.1378589 0.94936442 --1.7452223 -3.2634056 0.98917484 --4.216866 -7.7712507 2.3186927 --0 -0 0 --1.8923361 -3.3870971 1.0354952 --1.9006737 -3.3535218 1.0289853 --4.8805599 -8.49053 2.5648162 --1.9977565 -3.4261312 1.057779 --1.9399071 -3.2804658 1.0177182 --1.9604969 -3.2693315 1.0179685 --2.0524354 -3.3755419 1.0537729 --0 -0 0 --5.2436328 -8.3913469 2.5911062 --5.2287126 -8.2543249 2.5590575 --4.634335 -7.2175713 2.250339 --4.7556286 -7.3074737 2.2868943 --0 -0 0 --2.3132961 -3.4605799 1.1086061 --0 -0 0 --2.3407979 -3.4103785 1.1018459 --2.3030949 -3.3116932 1.0753056 --2.3233716 -3.2974994 1.0753056 --2.3458104 -3.2863336 1.0763071 --2.3897543 -3.3048303 1.0868231 --5.5406957 -7.5649838 2.4571528 --5.6095047 -7.5611691 2.4669178 --5.6726594 -7.5490541 2.4741788 --0 -0 0 --5.752459 -7.4627705 2.4689207 --5.8207788 -7.4563336 2.478435 --5.8898354 -7.4500985 2.4881999 --5.9433031 -7.4236441 2.4914548 --5.9302139 -7.3148379 2.4674184 --6.5487118 -7.9772449 2.7012734 --6.5987735 -7.9384017 2.7017741 --6.6230459 -7.8688745 2.6920092 --6.6636682 -7.8192458 2.6890047 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --8.7945089 -9.3487854 3.3515103 --8.832345 -9.2743158 3.3442492 --8.902523 -9.2338867 3.3492568 --8.9089746 -9.1278162 3.3307288 --9.0798092 -9.1893702 3.3730428 --9.3236198 -9.3210402 3.4416471 --0 -0 0 --9.1053505 -8.8820915 3.3217149 --10.456363 -10.075586 3.7874217 --10.51869 -10.011905 3.7876723 --10.593326 -9.9597759 3.7924294 --10.531513 -9.7806082 3.7491136 --8.9640198 -8.2229357 3.1779969 --8.9856091 -8.1417751 3.1679816 --8.9834566 -8.039999 3.1499543 --11.038198 -9.7577467 3.8422551 --10.24754 -8.9473553 3.550312 --9.13799 -7.8802357 3.1527085 --11.153289 -9.4995556 3.8209727 --10.08007 -8.479249 3.4386425 --9.5979767 -7.9736419 3.25912 --10.172137 -8.3457012 3.4348867 --9.7447491 -7.8954864 3.275645 --10.585231 -8.4694529 3.5380433 --11.554635 -9.1294146 3.8405023 --10.899801 -8.5038862 3.6073985 --11.599073 -8.9355288 3.8187194 --11.673717 -8.8794298 3.8252292 --11.687725 -8.777401 3.8122094 --11.765471 -8.7233973 3.8199711 --10.349319 -7.5753779 3.3490064 --10.428563 -7.5355492 3.3595223 --10.479333 -7.4747925 3.3610246 --11.381516 -8.0134382 3.6319358 --11.439216 -7.9495292 3.63469 --0 -0 0 --0 -0 0 --11.349335 -7.5811281 3.5618293 --11.36088 -7.4884353 3.5510631 --11.422846 -7.4291425 3.5560706 --11.413623 -7.3238807 3.5392952 --0 -0 0 --6.1790481 -3.8585339 1.9160817 --6.2174444 -3.8296876 1.9205885 --0 -0 0 --0 -0 0 --0 -0 0 --16.024742 -9.33671 4.8285017 --16.070818 -9.2319384 4.8252468 --16.189501 -9.1684618 4.8437748 --16.42889 -9.171361 4.8981075 --16.30673 -8.9723692 4.8455276 --6.6942406 -3.6297469 2.0014613 --6.4747381 -3.4594738 1.9306037 --7.4792929 -3.9374752 2.21804 --6.3663063 -3.3017476 1.8867872 --6.7045732 -3.4251649 1.9791774 --6.9373441 -3.4905849 2.0405204 --15.636847 -7.7484837 4.5453219 --15.714549 -7.6672511 4.5540853 --7.2107363 -3.4633276 2.100862 --7.1101923 -3.3614943 2.0660594 --7.0156975 -3.2642951 2.0332594 --7.0435171 -3.2248137 2.0355129 --7.2511888 -3.2662365 2.0888438 --0 -0 0 --7.3386507 -3.1978946 2.1023643 --7.3928394 -3.1676776 2.1121292 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --6.9245663 -2.4285681 1.9298525 --7.1050467 -2.4430215 1.9751713 --7.107059 -2.3950508 1.971666 --9.3445282 -3.0854781 2.5770848 --13.265327 -4.2901711 3.6376946 --7.6391158 -2.4187386 2.1043675 --7.638092 -2.3669479 2.100111 --8.9393663 -2.7102587 2.4478889 --8.9697514 -2.6594856 2.4516444 --7.5929585 -2.2006171 2.0765753 --12.601976 -3.5689392 3.4193633 --9.163681 -2.5344553 2.4909542 --9.1846685 -2.4796946 2.4924564 --9.0414925 -2.381609 2.4501421 --8.9246569 -2.292361 2.4150889 --9.0597067 -2.26789 2.4473879 --11.040213 -2.6918733 2.9709325 --8.9935989 -2.1344068 2.4226005 --13.23641 -3.0558498 3.5453043 --17.454811 -3.9172132 4.658494 --17.139875 -3.7362123 4.5688577 --17.046921 -3.6065235 4.5383115 --12.414035 -2.5467827 3.3094463 --12.338269 -2.4524417 3.2854099 --12.253262 -2.3574803 3.25912 --17.292105 -3.2171929 4.5808759 --17.389654 -3.1250734 4.6014071 --13.398255 -2.3229203 3.5488098 --12.436339 -2.0776002 3.2929213 --12.45172 -2.0017142 3.2936723 --12.437935 -1.9212829 3.2869122 --12.420759 -1.8406705 3.2794008 --12.41169 -1.7615659 3.2741427 --12.4309 -1.6865478 3.2763963 --12.443894 -1.6106143 3.2771473 --18.299534 -2.2546167 4.8004594 --17.60914 -2.0599339 4.6171813 --17.600279 -1.9495022 4.6116729 --17.353853 -1.8144846 4.5445709 --17.311668 -1.7027558 4.5307999 --12.49378 -1.1514089 3.276897 --17.256987 -1.4837989 4.5115209 --12.503109 -0.99769616 3.2758954 --12.675067 -0.93319172 3.3189609 --12.530831 -0.84529692 3.2801518 --12.453644 -0.76335597 3.2588696 --12.393326 -0.68335426 3.242094 --12.512357 -0.61293787 3.2718894 --13.101074 -0.56123835 3.4233692 --13.129426 -0.48176482 3.4298792 --13.166004 -0.40223086 3.4386425 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --15.93369 14.45571 5.3166413 --15.846123 14.55452 5.3171186 --15.966307 14.846572 5.387486 --15.539049 14.628056 5.2741823 --15.397684 14.674214 5.2567697 --15.276605 14.738747 5.246274 --14.339737 14.005674 4.9557405 --14.212098 14.052427 4.9414282 --14.150314 14.164101 4.9500155 --14.029716 14.216786 4.9383273 --13.951709 14.31234 4.9416666 --13.906062 14.441751 4.9566946 --14.897361 15.662586 5.3416872 --0 0 0 --0 0 0 --14.452336 15.765907 5.2856321 --0 0 0 --14.19563 15.872578 5.262733 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --13.445587 16.399881 5.2412648 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.3955259 13.354053 4.0428729 --9.3898439 13.521535 4.0757904 --9.0805273 13.248848 3.9775145 --8.8777418 13.124925 3.9243217 --8.6132107 12.903704 3.8429818 --9.5674076 14.525702 4.304544 --9.4992657 14.616707 4.3140855 --10.096014 15.745707 4.626564 --8.0421772 12.713133 3.727293 --7.9383168 12.721044 3.7153664 --8.0087395 13.011013 3.7850182 --7.8622379 12.950327 3.7535317 --7.900846 13.195804 3.8100641 --0 0 0 --0 0 0 --0 0 0 --7.8338146 13.843842 3.9393492 --0 0 0 --0 0 0 --7.4888539 13.821744 3.8935509 --7.5904918 14.216973 3.9908724 --7.8426099 14.908768 4.170011 --7.5713806 14.60998 4.0741205 --7.4511309 14.596478 4.057662 --7.4115868 14.741705 4.085093 --7.5579491 15.26559 4.2162867 --0 0 0 --0 0 0 --7.0637498 14.953401 4.0943961 --6.8584776 14.752522 4.0283222 --6.7722721 14.804042 4.0309463 --6.806438 15.123397 4.1058455 --6.7288437 15.19951 4.1151485 --6.6583233 15.293046 4.1292219 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.87184 13.635846 3.5889435 --4.7672119 13.605908 3.5734389 --4.5476923 13.239037 3.4706309 --4.4477868 13.211467 3.4563191 --0 0 0 --4.3148746 13.356543 3.4799337 --4.2527485 13.445731 3.4961541 --4.534205 14.64793 3.7986145 --4.3648872 14.413365 3.731348 --3.9331322 13.280557 3.4343739 --3.8450909 13.282052 3.4286492 --4.3406262 15.346328 3.9496062 --3.7329938 13.513584 3.4758787 --0 0 0 --0 0 0 --0 0 0 --3.4103539 13.641639 3.4861357 --3.5828948 14.71535 3.7523391 --3.4529102 14.569796 3.7101185 --3.3856897 14.687235 3.7344489 --3.3799863 15.084898 3.8293853 --3.2582552 14.971553 3.795752 --2.8672135 13.574534 3.4400988 --2.647716 12.926844 3.2733638 --2.8702738 14.465065 3.6545403 --2.7673657 14.408968 3.6361732 --2.6734076 14.396077 3.6287787 --2.3615534 13.165725 3.3177311 --2.3571889 13.622067 3.4279335 --2.2815428 13.684171 3.4398601 --0 0 0 --0 0 0 --0 0 0 --1.9738768 13.939891 3.4904292 --1.8901285 13.965213 3.4937687 --1.8006761 13.947653 3.4866128 --1.7104453 13.920847 3.4773099 --1.6195995 13.884779 3.4658604 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0.60667741 13.965749 3.4658604 -0.69153911 13.945274 3.4618053 -0.77573943 13.916528 3.455842 -0.858051 13.862073 3.4436767 -0.94170439 13.836201 3.4386675 -1.0233454 13.786581 3.4279335 -1.1023095 13.710346 3.4107592 -1.2655667 14.616652 3.6359346 -1.3313466 14.351396 3.5724847 -1.3586968 13.730255 3.4212546 -1.6192689 15.397324 3.8351102 -1.7119935 15.371655 3.8312936 -0 0 0 -1.8524985 14.962056 3.7354031 -2.0614378 15.850826 3.958432 -1.9404377 14.237694 3.5617509 -2.0014346 14.04093 3.5159523 -2.062808 13.862211 3.4746861 -2.1449969 13.831059 3.470154 -2.4251742 15.027539 3.7711833 -2.3677473 14.12071 3.5491085 -2.4338603 13.988237 3.519769 -2.4974029 13.849753 3.4889982 -2.5853672 13.850398 3.4930532 -2.7073133 14.02593 3.5409985 -2.9175696 14.631906 3.6969993 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -3.272347 14.135326 3.5960996 -3.3482227 14.069633 3.58465 -3.4155724 13.971471 3.5650902 -3.9540949 15.753993 4.0218816 -3.5177238 13.660481 3.4971082 -3.5409596 13.409541 3.438906 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -4.5051465 15.160094 3.9169271 -4.6415739 15.275257 3.9536612 -4.5859737 14.766089 3.830101 -4.6750212 14.733045 3.8289082 -4.779109 14.746576 3.8398807 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -19.294235 -1.4326347 4.7844734 -19.332514 -1.5548126 4.7961617 -19.228762 -1.6652721 4.7730236 -18.50552 -1.7170559 4.5972247 -0 -0 0 -0 -0 0 -18.181232 -2.025121 4.5256643 -18.793447 -2.2101805 4.680234 -18.848925 -2.3340502 4.6974087 -18.851582 -2.4519169 4.7017021 -18.891029 -2.5750213 4.7152987 -17.573132 -2.5052223 4.3923244 -17.543982 -2.6109996 4.3889847 -17.562178 -2.723959 4.397572 -0 -0 0 -19.158476 -3.2128987 4.8037944 -25.040569 -4.357832 6.2753072 -18.057728 -3.2565513 4.5392609 -17.27943 -3.225738 4.3498654 -17.240242 -3.3280194 4.3450947 -17.248068 -3.4394403 4.3522506 -17.254223 -3.5508864 4.3591681 -19.099747 -4.0531354 4.828125 -0 -0 0 -19.822615 -4.4614744 5.0230069 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9573369 -2.2582183 2.0639992 -7.9423985 -2.30673 2.0637608 -0 -0 0 -0 -0 0 -0 -0 0 -8.005579 -2.5397322 2.095247 -7.9815311 -2.5861106 2.0931003 -7.958137 -2.6325946 2.091192 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -18.53302 -7.6872053 4.9605112 -0 -0 0 -18.380178 -7.8895364 4.9452448 -0 -0 0 -18.431097 -8.1806927 4.9853187 -19.130293 -8.631978 5.1873565 -19.004587 -8.7159958 5.1677966 -19.0819 -8.8935757 5.2033381 -18.994495 -8.9951124 5.1945124 -19.106091 -9.1919155 5.2400723 -0 -0 0 -18.990112 -9.4248209 5.2395949 -0 -0 0 -0 -0 0 -0 -0 0 -14.19519 -7.4844346 3.9739366 -14.141294 -7.5672698 3.9717898 -14.102276 -7.6580682 3.9739366 -3.5101979 -1.9331498 1.0165988 -3.540652 -1.9783486 1.0285255 -3.4701614 -1.9669763 1.0120666 -3.4714949 -1.9959806 1.0158832 -3.4709253 -2.0240963 1.0192226 -3.4784982 -2.0572257 1.0249474 -14.57066 -8.7427568 4.2060294 -3.4214656 -2.0805743 1.0158832 -3.2747416 -2.0189254 0.97724074 -3.1956 -1.997269 0.95791954 -4.1863685 -2.6528018 1.2496459 -3.4445372 -2.2122169 1.0378282 -3.2331595 -2.1045139 0.97986466 -3.2242382 -2.1269875 0.98105729 -3.2571354 -2.1775095 0.9946537 -3.3257053 -2.2530353 1.0189841 -3.2597866 -2.2376597 1.0034795 -3.6572981 -2.5438647 1.1265627 -9.1021357 -6.4164433 2.767673 -9.0625935 -6.4721723 2.767673 -3.9277022 -2.8407571 1.2229302 -3.9297788 -2.8791568 1.2288935 -3.5206258 -2.6125927 1.1091498 -4.6206179 -3.4735103 1.4521608 -4.6015358 -3.5035617 1.4528764 -3.9455938 -3.0423541 1.2560863 -3.984247 -3.1113484 1.2739764 -4.0442853 -3.1984043 1.2987839 -3.4493613 -2.7622674 1.1177369 -3.4217896 -2.7748141 1.1143975 -3.6500671 -2.99735 1.192398 -3.7973442 -3.1575704 1.2453524 -3.3344831 -2.8072965 1.102948 -3.4716222 -2.959415 1.1528014 -4.1288681 -3.5639679 1.3720137 -4.0374684 -3.5285096 1.349353 -3.5627203 -3.1521969 1.2007467 -3.5903196 -3.2161272 1.2162513 -3.3979084 -3.0814805 1.1590033 -3.1851206 -2.9242337 1.0943607 -3.1898744 -2.964885 1.1019938 -3.1716223 -2.9844019 1.1019938 -3.1595774 -3.0098367 1.1041405 -3.0746591 -2.9651062 1.0814799 -3.9289517 -3.8362329 1.3810779 -3.7803543 -3.7366731 1.3379034 -3.3215415 -3.3235092 1.1864346 -2.804523 -2.8405838 1.0127822 -7.4261637 -7.6173339 2.6453052 -3.1978364 -3.3197229 1.1644895 -2.4345362 -2.5581679 0.89971739 -2.4148042 -2.5688109 0.89828616 -3.062206 -3.2982931 1.1377738 -2.3686631 -2.5825012 0.89303845 -3.1120977 -3.4356916 1.1709299 -2.2778845 -2.5454984 0.87133193 -2.2557938 -2.5521488 0.86894655 -2.2841425 -2.6164358 0.88540536 -3.0065591 -3.4874892 1.1632968 -3.1569276 -3.7077749 1.2284164 -2.2249732 -2.6453979 0.88135034 -2.2111804 -2.6619892 0.88230443 -2.1732566 -2.6492205 0.87395579 -2.1587937 -2.6647699 0.8746714 -2.1545305 -2.6931365 0.87944204 -2.1692557 -2.7459421 0.89184576 -2.1577396 -2.766094 0.8939926 -2.1531658 -2.7954423 0.89900178 -2.1359727 -2.8086014 0.89900178 -2.156585 -2.8721449 0.91450649 -2.0984557 -2.8306999 0.89780915 -2.0420644 -2.7902193 0.88158888 -2.0186524 -2.7940354 0.87896496 -1.9873801 -2.786598 0.87300164 -2.0048871 -2.8479857 0.88779074 -1.9823897 -2.8530548 0.8856439 -1.9571608 -2.8539495 0.88230443 -1.9434208 -2.8715358 0.88397419 -0 -0 0 -2.4549816 -3.7256889 1.1282325 -2.4347208 -3.7447538 1.1294252 -1.8765575 -2.9249053 0.88588244 -1.8715529 -2.9568832 0.89184576 -1.8533746 -2.9683111 0.89184576 -1.8590493 -3.0184991 0.90305686 -1.9437951 -3.2000332 0.95195621 -1.9520568 -3.2585614 0.96531409 -1.917709 -3.2462254 0.95839661 -1.9060596 -3.2721992 0.9624517 -1.8656437 -3.248457 0.95243329 -1.7949862 -3.1702487 0.92714876 -1.8000969 -3.2253065 0.93955249 -1.7531404 -3.1869309 0.92571753 -1.7252265 -3.1822579 0.92142391 -1.3878291 -2.597368 0.75564319 -1.7642512 -3.3518836 0.96269023 -1.7552674 -3.3850646 0.9688921 -1.7375543 -3.4018259 0.9705618 -1.7114146 -3.4020112 0.96769941 -1.6844764 -3.4002633 0.96435994 -0 -0 0 -1.5863277 -3.3033533 0.93239647 -1.4884734 -3.1488161 0.88779074 -1.57719 -3.3903813 0.95076352 -1.6217936 -3.5430644 0.98940599 -1.2927791 -2.8701463 0.80549669 -1.580158 -3.5671396 0.99059862 -1.4256804 -3.2722411 0.90902019 -0 -0 0 -0 -0 0 -0 -0 0 -0.96395534 -2.3687832 0.66046834 -0.94508135 -2.3638306 0.65760595 -1.551405 -3.9526522 1.075278 -0 -0 0 -0 -0 0 -1.4706157 -3.9595981 1.0697918 -0.90668285 -2.4866107 0.6824134 -1.1494747 -3.214617 0.87085485 -0 -0 0 -1.2862592 -3.7419133 1.0041951 -0.8246302 -2.4464459 0.66643167 -1.1918876 -3.6107724 0.96626824 -0.96377289 -2.9803653 0.80168015 -0.9419542 -2.9751112 0.79881775 -0.88922995 -2.8695078 0.7701937 -1.281041 -4.2272906 1.1172599 -0.74064112 -2.497489 0.67215645 -0.80656421 -2.7827754 0.74395502 -0.8639906 -3.0511992 0.81122148 -0.92047697 -3.3288474 0.88063473 -0.89700121 -3.3231807 0.87777233 -0.81953746 -3.1116672 0.82267106 -0.80163532 -3.1213405 0.82386374 -0.75633281 -3.021621 0.79738653 -2.1605661 -8.8717213 2.2751014 -1.8978877 -8.0059814 2.0532651 -0.68663001 -2.9744654 0.78212041 -0.66942739 -2.9833605 0.78331304 -1.8414493 -8.4589901 2.1586969 -1.8061622 -8.548995 2.1784952 -1.5088332 -7.3640065 1.8786587 -0.55387694 -2.7864659 0.73012012 -1.6040061 -8.3490391 2.1205316 -0.50563943 -2.7176218 0.71127594 -1.5915722 -8.8708935 2.2460003 -0.49525714 -2.8566351 0.74443209 -1.3017317 -7.8044281 1.9757419 -1.3402274 -8.3511629 2.1097977 -1.217099 -7.8927603 1.9938704 -0.43224317 -2.9169247 0.75659734 -1.203428 -8.495573 2.1398528 -1.1135279 -8.2237091 2.0706782 -1.01533 -7.8605371 1.9790813 -0.95086533 -7.7345653 1.9464022 -0.31063217 -2.6548636 0.6888538 -0.3111656 -2.8092332 0.72654212 -0.28979847 -2.7714872 0.71676224 -0.26559326 -2.6997585 0.69863367 -0.27182609 -2.9498749 0.75993681 -0.25959918 -3.0201867 0.77687263 -0.65546143 -8.2416553 2.063045 -0.21386594 -2.9049828 0.74777156 -0.5552488 -8.2636127 2.066623 -0.17436479 -2.8443816 0.7322669 -0 -0 0 -0.13520572 -2.7590079 0.71079892 -0 -0 0 -0.091548368 -2.4906616 0.64448661 -0.11588217 -3.8054953 0.96746087 -0.063097827 -2.5799453 0.66619313 -0.044785943 -2.4414339 0.63208288 -0.032754149 -2.6931691 0.69386303 -0 -0 0 --0 -0 0 --0.018783344 -2.9865918 0.76590014 --0.037270185 -2.9990442 0.76900107 --0.056131396 -3.0230329 0.77496439 --0.075410187 -3.0517564 0.78212041 --0.094801009 -3.0725908 0.78736812 --0 -0 0 --0.13452624 -3.1177666 0.79881775 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.3709383 -3.6173697 0.98248851 --1.3938082 -3.6107013 0.98296559 --0 -0 0 --0 -0 0 --0 -0 0 --1.4905584 -3.5960393 0.98845184 --1.51184 -3.5850363 0.98797476 --0 -0 0 --0 -0 0 --1.6177635 -3.6471367 1.0123051 --1.6469024 -3.6521895 1.0163603 --1.6656368 -3.6340711 1.0142134 --1.5906628 -3.4151745 0.957681 --1.5334378 -3.2403486 0.91283673 --1.5490807 -3.2221274 0.91045141 --1.5739393 -3.223032 0.91331381 --1.5962765 -3.2185328 0.91474497 --1.6116239 -3.2000058 0.91235965 --1.6276891 -3.1831408 0.91045141 --1.642265 -3.163614 0.90782756 --1.6675346 -3.1646447 0.91092849 --1.858309 -3.4745774 1.00014 --0 -0 0 --0 -0 0 --4.9883356 -8.9239759 2.5434515 --1.9094806 -3.3687961 0.98344266 --1.9940435 -3.468128 1.0149291 --1.9330565 -3.3149147 0.97485542 --1.9414897 -3.2829332 0.96913064 --1.9930791 -3.3234186 0.98415822 --0 -0 0 --4.5520983 -7.3808045 2.1622751 --5.1817794 -8.2872458 2.4330103 --5.2408514 -8.2684183 2.4368269 --4.8184395 -7.5000091 2.2219083 --2.1951485 -3.3723092 1.0206538 --2.2152643 -3.3579659 1.0204153 --2.2406864 -3.3515747 1.0225621 --2.2666583 -3.3458016 1.0249474 --2.2750487 -3.31422 1.0196997 --5.4312844 -7.8061948 2.3681293 --5.3850636 -7.6393843 2.3280556 --5.4120803 -7.5785403 2.3197072 --5.445385 -7.5270944 2.3142209 --5.4897456 -7.4911904 2.3135052 --5.5813427 -7.5189619 2.3323493 --5.6548071 -7.5210524 2.3435605 --5.6931992 -7.4761705 2.3404596 --5.7739625 -7.4864631 2.354533 --5.8287582 -7.4623728 2.3581109 --5.8461156 -7.3906736 2.3469 --6.4214711 -8.016283 2.5551395 --6.4827747 -7.9918137 2.5599103 --6.56498 -7.9924054 2.5727911 --6.5356402 -7.8579059 2.5427358 --6.635036 -7.8785605 2.5622957 --6.7279968 -7.8901615 2.5792315 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.1599503 -9.6121922 3.2936392 --9.1553707 -9.4901152 3.2712171 --9.1808558 -9.4004145 3.2597675 --9.3489838 -9.4557695 3.2984099 --9.0392447 -9.0310459 3.1707945 --9.1636152 -9.0436211 3.1946478 --9.2015476 -8.9702778 3.1886845 --9.2473202 -8.9048939 3.1855836 --10.466419 -9.9555988 3.5803564 --10.524478 -9.8885307 3.5794022 --10.602751 -9.8402815 3.5853655 --10.673669 -9.7848825 3.5889435 --9.0201006 -8.1679659 3.021234 --9.0490551 -8.0936928 3.0143166 --9.0730715 -8.0155153 3.0059679 --9.1081791 -7.9475627 3.0014358 --11.077679 -9.5466843 3.6242466 --10.274445 -8.7452927 3.346355 --9.7108717 -8.1634665 3.1483724 --10.219585 -8.4845734 3.2948318 --9.7029209 -7.9556437 3.1142621 --10.553902 -8.5455055 3.3678231 --9.7482386 -7.7947392 3.0980418 --9.8324699 -7.7636619 3.1094913 --9.9028988 -7.7210965 3.1166472 --11.613118 -8.9402437 3.6321182 --11.692498 -8.8876219 3.6397512 --11.667581 -8.7562599 3.6154208 --10.418704 -7.7196908 3.2173085 --10.383569 -7.5954232 3.1922624 --11.758276 -8.4905586 3.5946684 --11.340389 -8.0834627 3.4529796 --11.352444 -7.9874654 3.4417684 --0 -0 0 --11.438392 -7.8398666 3.4384289 --11.346309 -7.6748719 3.3969243 --11.360877 -7.5835438 3.3873827 --11.178477 -7.3630686 3.3201163 --11.524743 -7.4901218 3.4083738 --0 -0 0 --16.154535 -10.218793 4.7274637 --16.208693 -10.114338 4.7250786 --16.145563 -9.9378338 4.6890597 --0 -0 0 --0 -0 0 --0 -0 0 --16.09251 -9.3685951 4.6060505 --6.4541826 -3.7054133 1.8602916 --16.263741 -9.2029276 4.6222706 --11.349741 -6.3310995 3.2244644 --11.413905 -6.2753735 3.2316206 --11.473543 -6.2167854 3.2375839 --6.5056949 -3.4741335 1.8438329 --6.5045424 -3.4223964 1.837631 --6.5055876 -3.3721452 1.8321446 --7.4292016 -3.7930646 2.0811737 --7.4662185 -3.7543869 2.08499 --7.4690967 -3.6985955 2.0795038 --16.126154 -7.8611112 4.4388385 --7.043746 -3.381058 1.9514114 --7.0020123 -3.3083286 1.9344755 --7.0186577 -3.2636654 1.9335214 --7.2089977 -3.2984962 1.9795583 --7.1679945 -3.2267041 1.9630996 --7.1610169 -3.1708696 1.9559436 --7.1830096 -3.1280334 1.9566592 --17.039738 -7.2946162 4.5850592 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --17.843155 -6.872942 4.7288952 --9.5460978 -3.6105046 2.5391579 --6.9331818 -2.5740821 1.848842 --9.5431461 -3.4761417 2.5269926 --6.9358964 -2.4786808 1.8414475 --7.099453 -2.4880862 1.8800899 --7.1063194 -2.4416392 1.8779432 --7.6163435 -2.5646501 2.006274 --7.5028167 -2.4752913 1.9728794 --7.5631461 -2.4438329 1.9845675 --7.6307778 -2.4140689 1.9981639 --7.6027713 -2.3539953 1.9871914 --9.5159817 -2.8821986 2.4745152 --12.615694 -3.7362895 3.264061 --9.0077124 -2.6080825 2.3356888 --9.0188742 -2.5514419 2.334496 --8.8714781 -2.4510756 2.2929914 --8.8132133 -2.3768802 2.2743857 --12.325208 -3.2425737 3.1626842 --13.062623 -3.3509445 3.3446853 --12.302831 -3.0757759 3.1471796 --13.167869 -3.2062407 3.3611441 --0 -0 0 --9.1417208 -2.107796 2.336643 --17.794241 -3.9868371 4.5113525 --17.612448 -3.8327811 4.4595909 --12.465667 -2.6330962 3.1617301 --12.771765 -2.6159668 3.2344828 --12.750425 -2.5301828 3.2251801 --17.281569 -3.3188355 4.3546362 --13.299939 -2.4699411 3.3549423 --17.342024 -3.1102843 4.3598838 --0 -0 0 --17.296505 -2.8835087 4.3393698 --17.387707 -2.7891638 4.3577371 --17.798016 -2.7430463 4.4555354 --16.562719 -2.4487998 4.1447268 --0 -0 0 --16.505871 -2.2337801 4.123497 --16.51445 -2.1318386 4.1223044 --18.18223 -2.2336771 4.5318666 --18.064407 -2.1067801 4.4994259 --17.747835 -1.9595779 4.4180861 --12.720368 -1.325868 3.1736569 --17.263128 -1.6919402 4.2928557 --12.762758 -1.1721541 3.1803358 --12.797771 -1.0962223 3.1872532 --17.338783 -1.3776617 4.304544 --12.558438 -0.92065406 3.1252346 --18.100481 -1.2148103 4.4882145 --17.995152 -1.0968784 4.4605451 --13.072644 -0.71667093 3.2480793 --13.146635 -0.63983798 3.2652538 --13.165837 -0.55981845 3.2690701 --13.198139 -0.48008031 3.2762263 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --36.584564 30.398211 11.136353 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --16.173849 14.65772 5.1279888 --16.040552 14.717184 5.1143489 --16.010597 14.871662 5.1336718 --15.872931 14.92626 5.1188955 --15.529244 14.783669 5.0377383 --15.359006 14.802316 5.0120497 --14.443298 14.091784 4.7431169 --14.339932 14.163718 4.7376609 --14.256887 14.255571 4.7390251 --14.30466 14.479948 4.7840366 --14.057752 14.405755 4.7312956 --14.981514 15.541999 5.0718379 --14.878481 15.625874 5.0693374 --14.757636 15.690626 5.060926 --13.951194 15.016801 4.8174543 --13.245785 14.434145 4.6058087 --13.167434 14.526692 4.609446 --0 0 0 --13.046238 14.752836 4.6299062 --12.978533 14.859012 4.6380901 --13.446264 15.586491 4.837914 --13.379428 15.702798 4.8483715 --13.396943 15.920204 4.8897457 --13.557941 16.31366 4.9843154 --13.28027 16.18051 4.9190712 --13.278851 16.382732 4.9554443 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --11.360662 15.514688 4.5214691 --0 0 0 --0 0 0 --0 0 0 --9.3688612 13.47647 3.864027 --9.2342033 13.458224 3.842658 --9.0373297 13.346108 3.7951458 --8.8275757 13.210228 3.7414956 --8.4933138 12.880424 3.6341953 --10.18959 15.660995 4.3941636 --10.10067 15.734695 4.397346 --8.208416 12.961355 3.6139629 --7.9971552 12.800878 3.5559933 --8.0262623 13.024632 3.6039603 --7.8627343 12.93633 3.5664506 --7.7161169 12.872409 3.5359881 --7.610723 12.875082 3.5239396 --0 0 0 --9.0286913 15.710681 4.2625389 --7.8496137 13.855181 3.7499068 --7.7649269 13.903934 3.7501342 --7.6752415 13.94364 3.7480881 --7.6591959 14.118866 3.7821879 --0 0 0 --7.67733 14.576251 3.8783491 --7.7949715 15.022422 3.983376 --7.5404286 14.752607 3.9001727 --7.628428 15.15348 3.992924 --0 0 0 --0 0 0 --0 0 0 --7.0223007 14.845803 3.8663003 --6.9528599 14.935402 3.8783491 --6.9357147 15.140684 3.9201779 --6.8694921 15.242439 3.9354091 --0 0 0 --0 0 0 --0 0 0 --6.8080473 16.15304 4.1245489 --6.6972513 16.166618 4.1175013 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.8504496 13.821189 3.4518757 --4.7810788 13.895811 3.4630148 --4.4505024 13.197755 3.2838778 --4.379827 13.256252 3.2916071 --4.3011041 13.291215 3.293653 --4.2435908 13.393479 3.3122942 --4.5034413 14.522381 3.5819092 --4.4269724 14.591674 3.592139 --4.298296 14.486927 3.5600853 --3.8810658 13.381356 3.2850144 --3.8156157 13.463943 3.2993364 --4.2592673 15.388554 3.7599094 --4.1718774 15.440722 3.7662747 --3.5753345 13.562969 3.3068383 --3.4922888 13.585595 3.3070657 --3.4419987 13.739015 3.338892 --3.5956697 14.735255 3.5732706 --3.4763792 14.635767 3.544172 --0 0 0 --3.3759089 15.030778 3.6287394 --3.3272126 15.25101 3.6764789 --3.2404311 15.30353 3.6842082 --2.8187261 13.727235 3.3038831 --2.8828692 14.490199 3.4814286 --2.7417815 14.237 3.417094 --2.6595445 14.281318 3.4236865 --2.3773618 13.216259 3.1672568 --2.4869218 14.32919 3.4275513 --2.2379732 13.381785 3.1997652 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --1.8946189 13.945911 3.3179774 --1.8112663 13.974657 3.3220694 --0 0 0 --1.6269456 13.887506 3.2966084 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0.85325205 13.896908 3.2827413 -0.93555313 13.847689 3.2725112 -1.0222212 13.864996 3.2779672 -1.1094469 13.885643 3.2843325 -1.1919551 13.847528 3.2770579 -1.3415639 14.541047 3.4414184 -1.4406811 14.633331 3.4650607 -1.6299505 15.575314 3.6883001 -1.7213045 15.527271 3.6794341 -1.8231119 15.572515 3.6926193 -1.8511941 15.013996 3.5639498 -2.0753579 16.02219 3.8040116 -2.0126376 14.82321 3.5246217 -2.0216796 14.234022 3.3886776 -0 0 0 -2.1448877 13.876117 3.3102484 -2.2383399 13.914613 3.3225241 -2.4970512 14.937951 3.5680418 -2.4400461 14.065522 3.3650351 -2.496151 13.882557 3.3252521 -2.8106096 15.099124 3.6178274 -2.8330777 14.717257 3.5312142 -0 0 0 -2.8543012 13.905833 3.3463938 -0 0 0 -3.0871804 14.156149 3.4148207 -3.1727028 14.131239 3.4134567 -3.25453 14.090631 3.4084554 -0 0 0 -3.8543277 15.800831 3.8292453 -0 0 0 -3.5101669 13.659427 3.3247974 -3.5507388 13.473781 3.2852418 -4.2927351 15.89327 3.8756211 -4.3870573 15.855368 3.8728931 -4.4967365 15.872188 3.8835776 -4.2846413 14.777118 3.6241927 -4.477684 15.095989 3.7083051 -4.4933534 14.814753 3.646471 -4.5864773 14.794344 3.6482897 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -27.761995 4.6433468 6.6033683 -27.764967 4.4688911 6.5974579 -27.771654 4.2953186 6.5926838 -27.775331 4.1215463 6.5874553 -27.784674 3.9488497 6.583818 -27.782326 3.7747514 6.5776796 -27.766335 3.5992033 6.5685863 -27.736673 3.4224434 6.5565381 -27.718462 3.2476566 6.5474448 -27.709799 3.0744035 6.5408521 -27.703928 2.9017849 6.5351691 -27.694077 2.7290678 6.5288038 -27.68412 2.5566704 6.5226655 -27.687643 2.3857524 6.5199375 -27.673609 2.2135673 6.5133452 -27.667248 2.0422895 6.5087986 -27.659826 1.8711731 6.504252 -27.649403 1.7001053 6.4992504 -27.64473 1.5296125 6.4958405 -27.639004 1.3592411 6.4924307 -27.629313 1.188872 6.4883385 -27.61565 1.0185653 6.4835649 -27.611647 0.84880036 6.4812913 -27.60368 0.67905098 6.4783359 -27.609274 0.50970119 6.4787908 -27.605064 0.34020019 6.4771996 -27.593 0.17072773 6.4740167 -27.590607 0.0014168681 6.4733348 -27.577436 -0.16779909 6.4703794 -27.571018 -0.33694845 6.469243 -27.563564 -0.50602543 6.4681063 -27.556046 -0.6750474 6.4671969 -27.553331 -0.84417504 6.4676514 -27.535955 -1.0127938 6.4649234 -27.521441 -1.1813983 6.4631047 -27.519508 -1.3505306 6.464469 -27.51362 -1.5195228 6.4651508 -27.506695 -1.6884936 6.4658327 -27.498732 -1.8574365 6.4665151 -27.492643 -2.0265601 6.4678788 -27.483574 -2.1955237 6.4687881 -27.463764 -2.3636177 6.4674244 -27.457472 -2.5328925 6.46947 -27.433661 -2.7005577 6.4676514 -27.449503 -2.8722818 6.4753809 -27.431364 -3.0406547 6.4753809 -27.434435 -3.2115171 6.4806094 -27.397783 -3.3777657 6.4767447 -27.411308 -3.5503142 6.4849286 -27.392868 -3.7189641 6.4858379 -27.351215 -3.8843722 6.4815187 -27.364433 -4.057693 6.4903846 -17.612123 -2.7222714 4.1927481 -18.391178 -2.9583247 4.3809781 -18.372681 -3.0711153 4.3809781 -19.190166 -3.3289108 4.5792112 -18.489838 -3.3244309 4.4180331 -0 -0 0 -17.421576 -3.3535876 4.1741071 -17.495228 -3.4792233 4.1966128 -19.230698 -3.9471273 4.6153569 -0 -0 0 -0 -0 0 -20.01659 -4.4938979 4.8215461 -0 -0 0 -20.175962 -4.790482 4.8733778 -20.168894 -4.9197273 4.8788338 -20.177057 -5.0530872 4.888154 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9709044 -2.2584317 1.9664935 -7.9578323 -2.3075688 1.9667208 -0 -0 0 -0 -0 0 -0 -0 0 -8.0946903 -2.5642109 2.0146878 -7.9972682 -2.5874546 1.9946826 -8.0117559 -2.6465547 2.0021844 -0 -0 0 -19.934326 -6.856811 4.9536257 -0 -0 0 -19.830343 -7.0943594 4.949079 -0 -0 0 -0 -0 0 -0 -0 0 -20.584295 -7.9391079 5.1827755 -0 -0 0 -18.720284 -7.485393 4.7390251 -0 -0 0 -0 -0 0 -18.543434 -7.8135791 4.7299318 -18.385942 -7.8804111 4.7021971 -18.32653 -7.9884076 4.6994696 -18.269157 -8.0971556 4.6974235 -19.172693 -8.638731 4.941577 -19.153856 -8.7720232 4.9504428 -19.084663 -8.8823986 4.9465785 -19.047409 -9.007658 4.9511251 -0 -0 0 -19.111347 -9.3265629 4.9968185 -0 -0 0 -14.42692 -7.2611532 3.802875 -14.404641 -7.3610592 3.8087857 -0 -0 0 -0 -0 0 -0 -0 0 -14.222221 -7.7137427 3.8094676 -14.116608 -7.7689371 3.7940092 -3.5874407 -2.0034215 0.99169719 -3.6267681 -2.0546722 1.0055645 -3.9729526 -2.2830663 1.1021801 -3.1477752 -1.8347521 0.88303286 -3.8373268 -2.2682304 1.0730817 -3.1433995 -1.8842549 0.88803416 -3.1259532 -1.8999671 0.88644284 -3.8645701 -2.381386 1.0921776 -3.1569149 -1.9722322 0.9014467 -3.8079045 -2.4114401 1.0846757 -3.1439486 -2.0181875 0.90462935 -3.1551793 -2.0528393 0.91122198 -3.1506541 -2.0775204 0.91349524 -3.1427059 -2.1000593 0.91485924 -3.1200843 -2.1127517 0.91213125 -3.0998344 -2.1268988 0.91008532 -3.1171122 -2.1669986 0.91872388 -3.1196814 -2.1972976 0.92327052 -3.5865526 -2.5591247 1.0610332 -3.5518401 -2.5673933 1.0555773 -3.4676588 -2.5390928 1.0357995 -3.4840848 -2.5841041 1.04512 -3.4557052 -2.596076 1.0414827 -4.307754 -3.2775903 1.2960937 -4.0630827 -3.1310043 1.2299403 -3.9992657 -3.1211298 1.2167552 -4.0732541 -3.2192702 1.2444896 -4.0290937 -3.2247324 1.2372149 -3.9903166 -3.234066 1.2315316 -3.6722841 -3.0138667 1.1415085 -3.414789 -2.8378158 1.0689899 -3.2885168 -2.7671838 1.0357995 -2.9512284 -2.5145078 0.93759239 -2.9047723 -2.5058558 0.92804444 -2.902545 -2.5351617 0.93213642 -2.9066331 -2.5703392 0.93827438 -2.8915327 -2.5887752 0.93850172 -3.3006127 -2.9916325 1.0723997 -3.7156053 -3.4094682 1.2097079 -3.6739235 -3.4129832 1.2031152 -3.6777427 -3.4588101 1.2110718 -3.6881905 -3.5115261 1.2213017 -2.9730926 -2.865768 0.99647117 -0 -0 0 -2.9169159 -2.8815072 0.9896512 -3.9052806 -3.9053192 1.3217821 -2.837534 -2.8727486 0.97510201 -2.9259551 -2.9988291 1.0105656 -3.2217686 -3.3427405 1.1162747 -2.4336352 -2.5563562 0.85643512 -2.4072289 -2.559891 0.85279781 -2.3934648 -2.5767536 0.8534798 -2.3604898 -2.5727365 0.84756923 -2.8685317 -3.1650999 1.0296615 -2.3599205 -2.6363339 0.85848111 -2.3191855 -2.6230443 0.84984255 -2.2902343 -2.6225567 0.84529591 -2.2308435 -2.5864208 0.82983738 -2.2452476 -2.6356394 0.84074926 -2.2578764 -2.6836405 0.85120648 -2.2780912 -2.7416308 0.86461908 -2.2334235 -2.7216842 0.85438913 -2.2473416 -2.7731624 0.86575574 -2.5948043 -3.2422929 1.0019271 -2.4112117 -3.051116 0.94032037 -2.354697 -3.0174904 0.92599851 -2.1482909 -2.788142 0.8541618 -2.0432763 -2.685802 0.82028949 -2.0384569 -2.71386 0.82483608 -2.0919652 -2.8209555 0.85234314 -2.0976305 -2.8651659 0.86143643 -2.0879979 -2.8890316 0.86461908 -2.0272417 -2.8415449 0.8473419 -2.3103485 -3.2806621 0.96919143 -1.9966661 -2.8726048 0.84916055 -1.9437402 -2.8334124 0.83461136 -1.9285023 -2.848511 0.83552068 -1.9218094 -2.8764837 0.84006727 -1.7995843 -2.7296925 0.79573768 -1.9102653 -2.9365816 0.85029721 -1.9158846 -2.9851243 0.8605271 -1.8761693 -2.963093 0.85120648 -1.8600168 -2.9778528 0.85211581 -1.8069682 -2.9328353 0.83665729 -1.7894444 -2.9446998 0.83688462 -1.7783521 -2.9673176 0.84006727 -2.0123529 -3.4048655 0.9557789 -2.0478203 -3.5139008 0.98192197 -1.6443385 -2.8619254 0.80301231 -1.6205064 -2.8609464 0.80005699 -1.598648 -2.863184 0.798011 -1.5932597 -2.8951199 0.80392164 -1.5782517 -2.9099772 0.80528563 -1.5562348 -2.9118772 0.80323964 -1.6340972 -3.103169 0.85120648 -1.6881373 -3.2540295 0.8882615 -1.2816468 -2.5082104 0.69002867 -1.6717247 -3.3214703 0.90053737 -1.6932704 -3.4162958 0.92258853 -1.1314548 -2.318723 0.6347872 -1.6600778 -3.4552495 0.92736244 -1.5384887 -3.2532201 0.87257564 -1.6479663 -3.5406907 0.94418496 -1.635944 -3.5719838 0.94964093 -1.2038479 -2.6719503 0.71662641 -1.301101 -2.935678 0.78209782 -1.4173442 -3.2515714 0.8605271 -1.4088783 -3.2870574 0.867347 -1.5982256 -3.7927787 0.99328852 -1.5782779 -3.8106108 0.99533451 -1.5772656 -3.8752413 1.0092016 -1.5596061 -3.9002173 1.0130663 -1.5274551 -3.8888667 1.0078378 -0 -0 0 -0 -0 0 -0 -0 0 -0.90924048 -2.4934566 0.65206438 -1.1268955 -3.1499667 0.81346953 -0.86954355 -2.4786983 0.64569908 -0.84671372 -2.4618871 0.64024311 -0.85524291 -2.5371656 0.65752029 -1.0694171 -3.2377002 0.82847339 -0.95507807 -2.952352 0.75686407 -0.93782723 -2.9609418 0.75754607 -1.3240594 -4.2706609 1.0762644 -1.2961338 -4.2731133 1.0749004 -0.80837113 -2.7256348 0.69616663 -0.7916317 -2.7305436 0.69616663 -0.78203225 -2.7606461 0.70230454 -0.91653663 -3.3125527 0.83483869 -0.88603288 -3.2805099 0.8257454 -0.816733 -3.0994396 0.78073382 -0.79988205 -3.1128809 0.78277981 -0.75686204 -3.0223241 0.75981939 -2.1118062 -8.6549768 2.1122127 -1.910114 -8.0424538 1.9621742 -0.75810844 -3.2824352 0.8189255 -0.78021199 -3.475153 0.86393708 -0.769669 -3.5293496 0.87575829 -1.8057796 -8.5289564 2.0676558 -0.5956341 -2.9022713 0.72412837 -0.66789615 -3.3585856 0.83188337 -0.5439502 -2.826169 0.70435053 -0.54246849 -2.9146578 0.72458303 -0.51043481 -2.8393402 0.70594186 -0.49899909 -2.8769598 0.71412581 -0.49884874 -2.984659 0.73890489 -1.275537 -7.9265876 1.9067054 -0.62935412 -4.0713005 0.99419785 -1.2049016 -8.1217747 1.9492162 -1.1524408 -8.1106968 1.9448969 -0.44246262 -3.259093 0.80028433 -0.99235326 -7.6577773 1.835096 -0.49093276 -3.98141 0.9689641 -0.30974975 -2.6467102 0.65456504 -0.44440055 -4.0084281 0.97396535 -0.29632151 -2.8323932 0.6973033 -0.39938015 -4.056221 0.98396796 -0.26458663 -2.8687856 0.70503253 -0.24948753 -2.8994617 0.71185249 -0.2335559 -2.9242353 0.7173084 -0.21603894 -2.9314404 0.71867239 -0.19785067 -2.929796 0.7179904 -0.18034829 -2.9387307 0.71980906 -0.15784664 -2.8590786 0.70094055 -0 -0 0 -0.10629153 -2.4784441 0.61159939 -0.14167534 -3.8502254 0.93190908 -0.081616797 -2.6664464 0.65524697 -0.063888393 -2.6114063 0.6422891 -0.047594074 -2.5971444 0.63887918 -0.034432627 -2.8223221 0.69139266 -0.017525187 -2.8886986 0.70685118 --0.00019807987 -2.9160187 0.71321648 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.4053142 -3.6427696 0.94395763 --1.4294193 -3.6386104 0.94509429 --1.4517184 -3.629771 0.94509429 --1.464052 -3.5964415 0.93895638 --1.4793849 -3.5711958 0.9348644 --1.5133692 -3.5907683 0.94213897 --1.5511016 -3.618113 0.95145959 --3.572871 -8.1961308 2.1197147 --3.61323 -8.1517963 2.1140313 --1.6422383 -3.6439967 0.96555412 --1.6653774 -3.6356223 0.96600878 --1.686421 -3.6226866 0.96532679 --1.5878899 -3.3569698 0.89940071 --1.554059 -3.2339303 0.87007499 --1.5713104 -3.2190828 0.86871099 --1.5962219 -3.2198513 0.87143898 --1.6115707 -3.2012978 0.86916566 --1.6338419 -3.196552 0.87052965 --1.6543216 -3.1881957 0.87098432 --1.663871 -3.1590285 0.86598307 --4.771822 -8.928031 2.3956947 --4.8840818 -9.0047312 2.4238839 --4.3251314 -7.8586564 2.1265347 --5.005609 -8.9645243 2.4293399 --0 -0 0 --1.9580307 -3.4072204 0.94986826 --1.9421277 -3.3320382 0.93281841 --1.9605544 -3.3167052 0.93190908 --2.0409389 -3.4048495 0.95918882 --2.0562294 -3.3831081 0.95668817 --2.0943162 -3.398617 0.96441746 --2.1269956 -3.4046993 0.9696461 --2.1462836 -3.389116 0.9689641 --2.1644084 -3.3717852 0.96782744 --2.2163854 -3.4066036 0.98123997 --0 -0 0 --0 -0 0 --5.1743231 -7.6423783 2.1870048 --5.2971382 -7.7213039 2.2183764 --5.3560867 -7.7054486 2.2231505 --5.3937345 -7.6589036 2.2192857 --5.5401645 -7.7651896 2.2592962 --5.5705943 -7.7073717 2.2524762 --5.6131792 -7.66676 2.2506576 --0 -0 0 --5.9010062 -7.8558092 2.3261313 --5.7244573 -7.5241637 2.2395182 --5.799046 -7.5259252 2.2504301 --6.1021171 -7.8195634 2.3479552 --6.3407745 -8.0234156 2.4197919 --6.3521619 -7.9372177 2.4056973 --6.4847393 -8.0017443 2.4368417 --6.5046816 -7.9264221 2.4261572 --6.5749764 -7.9125762 2.4341137 --6.5456648 -7.7796822 2.4059248 --6.7220998 -7.8906002 2.4523003 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.2110987 -9.4406729 3.1115608 --9.2572193 -9.3721981 3.1076961 --9.4150791 -9.4157619 3.1408865 --9.2489147 -9.136754 3.0674586 --9.199564 -8.9771309 3.0331316 --9.4094181 -9.0698767 3.0833716 --9.4176416 -8.9669781 3.0681405 --9.4192829 -8.858984 3.0510907 --10.541466 -9.7932749 3.3914056 --9.0279198 -8.2844553 2.892868 --9.0554943 -8.2079763 2.8855937 --9.1281776 -8.1723957 2.8926408 --9.1351118 -8.0781698 2.8792284 --9.1867065 -8.0238876 2.8799102 --9.2335548 -7.9654598 2.8792284 --9.3356247 -7.9541278 2.895596 --9.4379015 -7.9418416 2.9119639 --10.373182 -8.6207504 3.1811242 --9.7446613 -7.9978013 2.9753895 --9.7890129 -7.9341793 2.9740255 --10.794674 -8.6401291 3.2602353 --11.483112 -9.0761528 3.4493749 --9.963335 -7.7760191 2.9828913 --11.538862 -8.8923483 3.4332345 --11.573833 -8.8066368 3.4275513 --11.643223 -8.7471542 3.4320979 --11.580136 -8.5891056 3.3982255 --10.391239 -7.6088467 3.0390422 --11.382402 -8.2278461 3.3111577 --11.283648 -8.051507 3.2684193 --11.332839 -7.98212 3.2684193 --0 -0 0 --11.331174 -7.7746778 3.2404575 --11.406887 -7.7241158 3.2484143 --11.437873 -7.6431575 3.2438676 --11.03661 -7.277442 3.118608 --11.541416 -7.5091262 3.2468228 --0 -0 0 --16.731785 -10.59636 4.6558218 --16.817961 -10.506911 4.6617322 --16.171635 -9.9656715 4.4669094 --16.954784 -10.305303 4.6642332 --16.030445 -9.609252 4.3955274 --11.133944 -6.58144 3.0517726 --11.211977 -6.5350676 3.0620027 --11.247643 -6.4637232 3.0608659 --11.301496 -6.4027481 3.0647306 --11.368626 -6.3489528 3.0722325 --6.5344515 -3.5966365 1.7737166 --15.683574 -8.5080671 4.1977491 --15.856574 -8.476409 4.2298031 --6.5288954 -3.438535 1.7550755 --6.5688872 -3.4082775 1.7600768 --6.5532579 -3.349292 1.7505288 --16.192032 -8.1512766 4.2643576 --6.3644032 -3.1548603 1.6907407 --16.32497 -7.9686217 4.2732234 --6.9968567 -3.3620884 1.844644 --7.0252771 -3.3228409 1.8466899 --7.2971401 -3.3968096 1.9114794 --7.2284265 -3.3110073 1.8885188 --6.3386021 -2.8564441 1.6555043 --6.354229 -2.8167081 1.6550497 --0 -0 0 --7.2511191 -3.1084404 1.874197 --0 -0 0 --17.532312 -7.2630448 4.4625902 --17.582861 -7.1579022 4.4641814 --17.709633 -7.0831532 4.485096 --7.1273403 -2.7997992 1.8200922 --7.0862389 -2.7335799 1.8055429 --7.0546126 -2.6717658 1.7934943 --7.0991697 -2.6389492 1.8005416 --7.0237441 -2.561965 1.7778085 --7.0448332 -2.5207887 1.7791725 --7.1483788 -2.5084746 1.8009963 --0 -0 0 --7.4766736 -2.5210807 1.8744243 --7.5243645 -2.4858508 1.882381 --0 -0 0 --8.6172371 -2.7301407 2.1426752 --8.722188 -2.7046185 2.1642716 --8.7749615 -2.6620762 2.1731374 --8.8060675 -2.6126163 2.1767747 --8.7209244 -2.5292349 2.1522231 --8.6688213 -2.4565575 2.1358552 --8.8648663 -2.45346 2.1797302 --12.485043 -3.3732152 3.0515454 --9.0157785 -2.3765147 2.2090559 --12.421751 -3.1930785 3.0265388 --13.109899 -3.2843697 3.1874895 --9.2784252 -2.2639558 2.2620239 --9.3319349 -2.216435 2.2715719 --9.3795166 -2.1670265 2.2797558 --14.534804 -3.2645001 3.5100725 --17.654331 -3.8515921 4.2507176 --12.620757 -2.6723003 3.0440433 --12.753293 -2.6187105 3.0717778 --17.247555 -3.4315288 4.1377339 --13.222427 -2.5463655 3.1758955 --17.40612 -3.2415485 4.1656957 --0 -0 0 --17.085747 -2.9654155 4.0806737 --17.181419 -2.8735368 4.0990877 --16.90741 -2.7211666 4.0302062 --17.150909 -2.6525044 4.0838566 --16.532068 -2.4530132 3.9340451 --17.186989 -2.4425218 4.0849929 --16.541626 -2.2473323 3.9294984 --18.366825 -2.3806617 4.3559718 --17.298622 -2.1343391 4.1013608 --17.613159 -2.0635176 4.1722884 --0 -0 0 --12.696747 -1.32968 3.0126717 --12.753122 -1.2565249 3.0240383 --12.774168 -1.1795034 3.027221 --12.802509 -1.10294 3.0322223 --11.957718 -0.95625693 2.8328526 --12.997661 -0.95923042 3.0749605 --18.007992 -1.2180955 4.2459435 --18.038456 -1.1090122 4.2513995 --18.050755 -0.99863243 4.2527633 --18.04487 -0.88728213 4.2500353 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --20.389574 12.244471 5.2879868 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --16.064939 14.765859 4.8540974 --15.969747 14.860162 4.8528028 --0 0 0 --14.074835 13.422752 4.3302369 --14.018902 13.534636 4.3384361 --0 0 0 --14.971972 14.814183 4.6866693 --14.291673 14.315598 4.5024118 --14.213163 14.412754 4.5054326 --0 0 0 --0 0 0 --14.700869 15.466779 4.7477288 --14.074382 14.990726 4.5762014 --13.832088 14.914989 4.5274401 --13.853748 15.123429 4.5645504 --13.258235 14.652776 4.3990641 --0 0 0 --13.130409 14.874401 4.4167562 --13.268607 15.218184 4.4939976 --13.336811 15.487257 4.5488 --0 0 0 --13.390674 15.94136 4.6329455 --13.653555 16.458368 4.7578692 --0 0 0 --12.477162 15.421443 4.4158931 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --11.553669 15.6055 4.3231173 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.3025932 13.583058 3.6704493 --9.1408911 13.52419 3.6395957 --9.1449594 13.710815 3.6743329 --9.0123501 13.693258 3.6549146 --8.8313828 13.599249 3.6156466 --8.2384405 12.858109 3.4070086 --8.1374798 12.873749 3.3979468 --8.0805483 12.959067 3.4072244 --7.9712143 12.960163 3.3947105 --0 0 0 --0 0 0 --9.6769886 16.403231 4.2409134 --9.1058531 15.653686 4.0342174 --8.9994316 15.691475 4.0296865 --7.9073257 13.985149 3.5826356 --7.7652798 13.932756 3.5571764 --7.7557936 14.11879 3.592129 --7.8712049 14.539658 3.6859839 --8.6292048 16.176399 4.0838413 --7.6431317 14.541803 3.6626821 --7.651176 14.776595 3.7095015 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --7.1350245 15.117964 3.7265463 --7.021565 15.117178 3.7157583 --6.9400387 15.184844 3.7217996 --7.1169853 15.828291 3.8674362 --7.0647492 15.973467 3.8920326 --6.9942532 16.080091 3.9073515 --6.9077411 16.151434 3.9142559 --6.7914796 16.153008 3.9045467 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.8697519 13.914187 3.2900679 --4.7430973 13.823735 3.2620194 --4.6236496 13.749843 3.2380702 --4.450305 13.50807 3.1752846 --4.336761 13.440334 3.1532774 --4.2462716 13.441551 3.1474519 --4.1657343 13.473883 3.1489623 --4.4110937 14.584324 3.3994572 --4.3395195 14.671979 3.4134815 --3.882586 13.429145 3.1215611 --4.1448154 14.673383 3.4018307 --3.7255447 13.50496 3.1282494 --4.1400738 15.375617 3.5511351 --3.5652418 13.571383 3.1332119 --3.5116951 13.709352 3.1597502 --0 0 0 --0 0 0 --3.4819486 14.715242 3.3739977 --3.2435944 14.093058 3.2281454 --3.3411684 14.93601 3.4145603 --3.2962956 15.17188 3.4633217 --3.1054718 14.728424 3.3586791 --2.783164 13.612588 3.1027901 --2.5892165 13.071938 2.9772189 --2.5080411 13.082783 2.97614 --2.6612628 14.35855 3.2594304 --2.364332 13.207733 2.9975002 --2.2955358 13.293196 3.0134661 --0 0 0 --2.2772341 14.226699 3.2162788 --2.1802559 14.177671 3.2022545 --2.0942192 14.197545 3.2037647 --1.9801786 14.019655 3.1612604 --1.8977736 14.058637 3.1673017 --1.7926604 13.923779 3.1347222 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0.63959974 20.287649 4.5177307 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.0411924 13.960876 3.126092 -1.1253403 13.935732 3.1219923 -0 0 0 -1.3012522 13.974345 3.1338592 -1.4355513 14.454843 3.2423854 -2.1475451 20.348764 4.553978 -1.7000556 15.21634 3.4158549 -1.8150197 15.388899 3.4566331 -1.8877391 15.203053 3.4177966 -2.0695505 15.86992 3.5690429 -2.1671519 15.858857 3.5694745 -2.2671835 15.864594 3.5737896 -2.2288499 14.941613 3.3707614 -2.1924856 14.104641 3.1867199 -2.2643268 14.000316 3.1664386 -2.5243824 15.022274 3.3985941 -2.4477074 14.038809 3.1815417 -2.536581 14.0389 3.1849937 -2.8250692 15.104754 3.428153 -2.9351315 15.177251 3.4484344 -2.8077648 14.0559 3.1998811 -2.9044101 14.089092 3.2113163 -2.9824779 14.031847 3.2024703 -3.096518 14.141096 3.2313817 -3.1905308 14.154216 3.2387176 -3.6497486 15.739987 3.602917 -3.3191445 13.925933 3.1959975 -3.844486 15.701602 3.6046431 -3.9502809 15.715595 3.6132734 -3.5217404 13.656362 3.1489623 -3.562768 13.473075 3.1120677 -0 0 0 -4.3279781 15.589456 3.6076636 -4.1244664 14.510677 3.3660147 -4.3348198 14.902314 3.4620271 -4.4401045 14.922229 3.472815 -4.5435219 14.933939 3.4818769 -0 0 0 -4.771688 15.019438 3.5148878 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -27.967991 9.0230293 6.5262218 -27.980928 8.8380184 6.5165129 -27.999182 8.6552076 6.5083141 -27.991943 8.4651575 6.4945054 -27.975002 8.2730312 6.478755 -27.971769 8.0857706 6.4664569 -27.947559 7.8932886 6.4496279 -27.937105 7.7055626 6.4362507 -27.920687 7.5169935 6.4217949 -27.920952 7.3336291 6.4114385 -27.903938 7.1464272 6.3974142 -27.890419 6.9608927 6.384469 -27.881369 6.7771769 6.372818 -27.880619 6.5960832 6.3633246 -27.874889 6.4143777 6.3529682 -27.869888 6.233418 6.3430433 -27.838909 6.0473728 6.3275089 -27.837273 5.8683877 6.3188787 -27.8431 5.6914101 6.3121901 -27.840141 5.5130649 6.3037753 -27.82933 5.3336844 6.2938504 -27.814487 5.1541109 6.2832785 -27.818676 4.9785318 6.2772369 -27.801552 4.7996082 6.266665 -27.792913 4.6226845 6.2582502 -27.800507 4.4488239 6.2537193 -27.793501 4.2729678 6.2461681 -27.771862 4.0953717 6.2355957 -27.750059 3.9183383 6.2252393 -27.741646 3.7436855 6.2181196 -27.738914 3.5701559 6.2125096 -27.726376 3.3957326 6.2049584 -27.727291 3.2232885 6.2006431 -27.718399 3.0500004 6.194386 -27.712311 2.8773463 6.188992 -27.710009 2.7053556 6.1846771 -27.707611 2.5335908 6.1805778 -27.699286 2.3615427 6.1753993 -27.683077 2.1891534 6.1687107 -27.661903 2.0167685 6.1611595 -27.662066 1.8462205 6.1585703 -27.664103 1.6759235 6.1566286 -27.655338 1.5051408 6.1525292 -27.649424 1.3347168 6.1492925 -27.643435 1.1644633 6.1462722 -27.632496 0.9941932 6.1423883 -27.621483 0.82413036 6.1387205 -27.617235 0.65442479 6.1367788 -27.603157 0.4846485 6.132895 -27.598776 0.31519184 6.1313848 -27.586521 0.14577134 6.1283641 -27.559555 -0.02347465 6.122323 -27.56768 -0.19263825 6.1242647 -27.559145 -0.36169672 6.1227546 -27.547621 -0.53062004 6.1208124 -27.524323 -0.69914234 6.1164975 -27.525372 -0.86820018 6.1177921 -27.509768 -1.0367082 6.1156344 -27.505816 -1.2056139 6.1162815 -27.502777 -1.3746076 6.1173606 -27.505524 -1.5439928 6.1199493 -27.493582 -1.712613 6.1195183 -27.485479 -1.8814783 6.1201653 -27.465628 -2.049509 6.1184392 -27.475893 -2.2198846 6.1236176 -27.458836 -2.3881779 6.1229701 -27.449499 -2.5571609 6.1242647 -27.450783 -2.727278 6.1281486 -19.142721 -2.0201931 4.2860069 -27.432714 -3.0658889 6.1320319 -27.402719 -3.2328961 6.1296587 -27.38818 -3.4016976 6.1309533 -27.400681 -3.5741062 6.138505 -27.360821 -3.7397852 6.1346211 -17.715664 -2.5318556 3.9869661 -27.376608 -4.0847764 6.1488609 -17.680365 -2.7486134 3.9863188 -17.718109 -2.865937 3.9986172 -18.536016 -3.1151202 4.185895 -19.047535 -3.3214195 4.3049936 -17.743069 -3.2061744 4.0167408 -17.622284 -3.2961266 3.9940863 -18.868132 -3.6492028 4.2791023 -0 -0 0 -18.066435 -3.7246625 4.1086535 -19.905672 -4.2314668 4.5293818 -0 -0 0 -0 -0 0 -0 -0 0 -19.672356 -4.6892614 4.5013332 -20.480663 -5.0149922 4.6918473 -20.418255 -5.1327071 4.6847277 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9567866 -2.2610579 1.8604555 -7.9277625 -2.3054724 1.8570035 -0 -0 0 -0 -0 0 -0 -0 0 -8.0130367 -2.5451725 1.8904459 -7.9814801 -2.5891674 1.886778 -7.9672971 -2.6387062 1.8872095 -0 -0 0 -19.982899 -6.8933196 4.7034984 -19.966936 -7.0252023 4.7097554 -19.969408 -7.1640739 4.7205434 -0 -0 0 -0 -0 0 -0 -0 0 -20.609943 -7.9700565 4.9153728 -20.54339 -8.0895681 4.9112735 -20.51512 -8.2241888 4.9164515 -18.712191 -7.6349139 4.4983125 -18.651464 -7.7439685 4.4950762 -0 -0 0 -18.578356 -7.9822912 4.5006862 -18.435974 -8.0554705 4.4782472 -18.345154 -8.1502008 4.4683223 -19.355528 -8.7417507 4.7255058 -19.198587 -8.8130894 4.7004776 -18.131855 -8.4584208 4.4536505 -19.236341 -9.1178732 4.7365093 -19.18795 -9.2395468 4.738451 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -14.234418 -7.9640884 3.636791 -14.154714 -8.033926 3.6290238 -14.020533 -8.0719013 3.6074479 -4.022862 -2.3480542 1.0619353 -3.9453681 -2.3353741 1.0457535 -4.0314136 -2.4198675 1.0716444 -4.1065593 -2.4994082 1.0949463 -4.1210561 -2.5430257 1.1027136 -3.0608408 -1.9144654 0.83042699 -3.0787179 -1.9520432 0.83819425 -3.0765376 -1.9772352 0.84078336 -3.1142459 -2.0286012 0.8539446 -3.1799529 -2.0993412 0.87465733 -3.1467266 -2.1052332 0.86926341 -3.1814251 -2.1568439 0.88199311 -3.1737638 -2.180196 0.88350344 -3.3502262 -2.3318877 0.93463808 -3.0949118 -2.1823866 0.86947918 -4.3166857 -3.0843341 1.2049829 -4.2336197 -3.0643733 1.1875064 -4.386375 -3.2161984 1.2345417 -4.356369 -3.2354815 1.2317368 -4.3450165 -3.2686095 1.2341101 -3.8100176 -2.9027495 1.0910627 -3.5463474 -2.7363229 1.0224515 -3.8987265 -3.0467172 1.1260154 -3.9358428 -3.11483 1.1417657 -4.1741457 -3.3453798 1.2146919 -3.4561434 -2.8046813 1.0161946 -3.5738797 -2.9368374 1.0548153 -3.6601021 -3.0455503 1.0848056 -3.1254575 -2.6330802 0.93571687 -2.9547594 -2.5203559 0.89083922 -2.9333289 -2.5333312 0.88911313 -2.9485939 -2.5782866 0.898175 -3.0701301 -2.7180543 0.93873745 -3.5447969 -3.1775529 1.0845898 -3.4211335 -3.1047237 1.0535207 -3.788053 -3.4805129 1.1693828 -3.7215929 -3.4617822 1.15579 -7.8344712 -7.3795209 2.4108541 -3.6321967 -3.4627116 1.1415499 -2.9892242 -2.8846776 0.95060414 -2.9993982 -2.9302669 0.95923448 -3.5157895 -3.4774702 1.1253681 -2.4727414 -2.4755032 0.80583054 -2.4746449 -2.5080111 0.81122452 -2.4707916 -2.5350394 0.81489241 -2.4646683 -2.5600033 0.817913 -2.4536228 -2.5800323 0.81942332 -2.4223745 -2.5786653 0.81446087 -2.401195 -2.5877521 0.81273484 -2.2144549 -2.4159434 0.75685352 -2.2847514 -2.5236166 0.78490204 -2.245801 -2.5113769 0.77713478 -2.2135489 -2.5060756 0.77152503 -2.4580007 -2.8176992 0.85890704 -2.1972828 -2.5500693 0.77648747 -2.1303558 -2.5032525 0.75901109 -2.1237481 -2.5267451 0.76203167 -2.4024487 -2.8944583 0.86386949 -2.1983919 -2.6817825 0.79892629 -2.1198683 -2.6185479 0.77713478 -2.0927911 -2.6177738 0.77325112 -1.9333594 -2.4488769 0.72211647 -1.9434991 -2.493047 0.73117828 -2.0609205 -2.6775234 0.77929235 -2.9084334 -3.8277781 1.0949463 -2.8638041 -3.8174274 1.0871789 -2.0397544 -2.7534602 0.78986448 -2.0643032 -2.822686 0.80539906 -2.1737716 -3.0110965 0.85329729 -2.4713187 -3.4681942 0.97369027 -1.9013753 -2.7028351 0.76289475 -1.4344498 -2.0654216 0.58834654 -2.4285777 -3.5445163 0.98210484 -2.4040496 -3.555306 0.98102605 -1.9303629 -2.8924727 0.80108386 -1.8894979 -2.8691885 0.79180628 -1.4905936 -2.2935355 0.63710785 -1.4469967 -2.2565949 0.62502539 -1.4628578 -2.3124802 0.63732356 -1.4594895 -2.3388133 0.64185452 -2.3253858 -3.7791851 1.0131739 -2.3117745 -3.8092451 1.0172734 -1.8011482 -3.0088463 0.80755663 -1.7707461 -2.9996564 0.80237842 -2.2628677 -3.8882906 1.0267668 -1.693972 -2.9517014 0.78468627 -1.1059217 -1.9539117 0.52879733 -1.0896342 -1.9529841 0.52685553 -1.0795107 -1.9630566 0.52771854 -1.9366235 -3.5754588 0.93118596 -1.9091341 -3.5769358 0.92859685 -1.5601062 -2.9662404 0.77325112 -1.4880064 -2.8717012 0.74736017 -0 -0 0 -1.3172375 -2.6201184 0.68069094 -1.3227799 -2.6719139 0.69147885 -1.6633233 -3.4130187 0.87163675 -1.653747 -3.4469337 0.87746221 -1.1571167 -2.4494326 0.63128239 -1.6117345 -3.467854 0.87767798 -0.94231993 -2.0593543 0.53311247 -0.92926586 -2.0642068 0.5328967 -1.1637888 -2.6289072 0.66796124 -0 -0 0 -1.2635052 -2.9518373 0.74218196 -0 -0 0 -1.5612717 -3.7757182 0.9355011 -1.5263208 -3.7562757 0.92859685 -0 -0 0 -0 -0 0 -0 -0 0 -0.93997538 -2.4854324 0.61984718 -0.92029524 -2.4792507 0.61704236 -0 -0 0 -0.89636439 -2.5087507 0.6213575 -1.1631271 -3.3206539 0.81014574 -1.1607889 -3.3803747 0.8224439 -1.1260238 -3.3457839 0.81273484 -1.1005858 -3.337791 0.80928272 -0.74674314 -2.311106 0.56935984 -0.92162895 -2.9143522 0.70809221 -1.3160574 -4.2540035 1.0166261 -0.70181584 -2.3169825 0.56763375 -1.2634784 -4.2688966 1.0164104 -0.78123605 -2.698765 0.65350544 -0.65506846 -2.3154125 0.56439739 -0.91263866 -3.3049386 0.79029602 -0.85858625 -3.1850727 0.7616002 -0.81298494 -3.0911164 0.7389456 -0.78770524 -3.0714526 0.73333591 -0.7643525 -3.0582275 0.72923648 -1.9808564 -8.1457348 1.885052 -0.71620178 -3.0227163 0.71909589 -0.76485324 -3.3191912 0.78533357 -0.84888601 -3.7907486 0.89105499 -1.8721596 -8.6146049 1.9806328 -0.60314023 -2.8559349 0.6776703 -0.68336135 -3.3379185 0.78554934 -0.55837655 -2.8142707 0.66666669 -0.56351644 -2.9346421 0.69298917 -0.56470913 -3.0417364 0.71629101 -1.6148627 -9.0188971 2.0572269 -1.4523753 -8.4080038 1.9180629 -1.392749 -8.3685961 1.9072751 -1.2767415 -7.9729905 1.8168725 -0.51222759 -3.3249638 0.77605599 -1.3220695 -8.9598598 2.0339251 -1.1686655 -8.2706957 1.8783635 -1.0398294 -7.6990376 1.7493402 -0.34885809 -2.7021894 0.63473451 -0.36893734 -3.0037649 0.70140368 -0.29414392 -2.5210123 0.59352469 -0.27995083 -2.5344167 0.5961138 -0.26459628 -2.5380292 0.59654534 -0.2742455 -2.7981117 0.65393692 -0.37767407 -4.1192803 0.94672054 -0.23118255 -2.6991098 0.63128239 -0.23546615 -2.964272 0.68975276 -0.21684752 -2.9598179 0.6884582 -0.19023442 -2.8344359 0.66040969 -0.1796246 -2.9476361 0.68522185 -0.13428099 -2.4475296 0.57432228 -0.1868566 -3.8498323 0.88436645 -0 -0 0 -0.091661945 -2.5178938 0.58942533 -0.083015271 -2.7467959 0.63991266 -0.065212995 -2.7072306 0.63106662 -0.048480812 -2.7007456 0.6295563 -0.032175057 -2.7244256 0.63473451 -0.015442338 -2.7216423 0.6340872 --0.0013021802 -2.7714846 0.64509088 --0.018451825 -2.7919292 0.64962178 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.4127504 -3.5903182 0.88522953 --1.45801 -3.6395862 0.89903802 --1.4766252 -3.6215308 0.89688045 --1.5010656 -3.6178129 0.898175 --0 -0 0 --1.5337832 -3.5722065 0.89170223 --3.5951931 -8.2296867 2.0170958 --1.5846411 -3.5691774 0.89558589 --1.631031 -3.6136694 0.90874714 --1.6552105 -3.6080306 0.90982592 --1.6760793 -3.5951519 0.90917861 --3.8396711 -8.1022978 2.0138595 --1.6340641 -3.3957257 0.86537975 --1.5836434 -3.2400327 0.82956392 --1.5982807 -3.2197609 0.82697487 --1.6180067 -3.2098935 0.82697487 --1.6403426 -3.2051196 0.82826942 --1.6595275 -3.194128 0.82805365 --1.6508372 -3.1303451 0.81467664 --4.262115 -7.9592214 2.027668 --4.2996798 -7.9123302 2.0224898 --4.8994389 -8.8853111 2.2747109 --4.9810448 -8.9036512 2.287009 --1.9890355 -3.506211 0.92341864 --1.9262176 -3.3475497 0.88609254 --1.9388425 -3.3221767 0.88264042 --1.984568 -3.353065 0.89364403 --2.0599036 -3.4320664 0.9171617 --2.0900652 -3.4343739 0.9210453 --4.6005778 -7.4535737 1.9681188 --4.7115016 -7.5294929 1.9953043 --0 -0 0 --4.7417479 -7.375021 1.9700606 --4.9234133 -7.5551963 2.0252945 --5.1225338 -7.7562246 2.08657 --5.2319546 -7.8171473 2.1111662 --5.2650204 -7.7630796 2.105341 --0 -0 0 --5.3057575 -7.620163 2.0844123 --5.4047694 -7.6616616 2.1044779 --5.4692822 -7.6529794 2.1111662 --5.5350361 -7.6453748 2.1182864 --0 -0 0 --5.750155 -7.7406831 2.1633797 --5.7470465 -7.6381598 2.1448245 --5.8559594 -7.6842918 2.1674793 --5.9185133 -7.6683116 2.1730888 --5.9407949 -7.6003127 2.1642427 --6.1485505 -7.7673502 2.2216344 --6.3549085 -7.927546 2.2777314 --6.4415913 -7.9354024 2.2911084 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.2696991 -9.1419201 2.9094708 --9.4704113 -9.2258997 2.9541328 --9.2538261 -8.9049425 2.8704185 --9.3210316 -8.8601017 2.8743024 --10.576204 -9.9301834 3.238286 --10.636936 -9.8651018 3.238286 --10.636783 -9.7442493 3.2201624 --0 -0 0 --10.750462 -9.6084318 3.218652 --0 -0 0 --9.3373747 -8.1417818 2.7700913 --9.3183413 -8.0250835 2.7500257 --9.5094795 -8.0885773 2.7912354 --9.4811697 -7.9647646 2.7687967 --9.4840174 -7.8684115 2.7556355 --10.390205 -8.5130005 3.0007365 --9.8288593 -7.9528704 2.8264041 --11.319342 -9.0442915 3.2341866 --11.42982 -9.0182095 3.2497213 --11.404826 -8.8855028 3.2272823 --11.417337 -8.7832098 3.2156315 --11.467904 -8.7106266 3.2147684 --0 -0 0 --10.361403 -7.671648 2.8814223 --10.405915 -7.6061988 2.880775 --11.410564 -8.23347 3.1418421 --11.262027 -8.0216951 3.0879028 --11.274289 -7.9266114 3.0779779 --11.313087 -7.850605 3.0753887 --11.518147 -7.8886204 3.1174614 --11.491903 -7.7674985 3.0976119 --11.117727 -7.4156666 2.9856334 --0 -0 0 --0 -0 0 --0 -0 0 --11.120554 -7.0294771 2.939677 --11.079787 -6.9089355 2.9178853 --11.096187 -6.824965 2.9111969 --6.4583311 -3.9185085 1.7018734 --11.185807 -6.6922936 2.9129231 --11.236753 -6.6294861 2.9155121 --6.4458017 -3.7503664 1.6805134 --6.5076571 -3.733089 1.6904383 --6.5355406 -3.6959717 1.6917328 --16.490772 -9.1907167 4.2042346 --17.911091 -9.8386364 4.5481529 --15.979739 -8.6506767 4.0478101 --16.009256 -8.5400572 4.0419846 --15.987885 -8.4030561 4.0236449 --6.6151223 -3.4259772 1.6787874 --6.594265 -3.3640308 1.6684309 --16.266373 -8.1708927 4.0549297 --6.4407449 -3.1867566 1.6205326 --6.5040717 -3.1685522 1.6313206 --6.9926958 -3.3535666 1.7463195 --7.0855532 -3.3447661 1.7640117 --7.3751688 -3.4262526 1.8296021 --18.021492 -8.2362499 4.4109306 --7.3222561 -3.2930508 1.8067318 --7.34411 -3.2488501 1.8071634 --7.3495793 -3.1974957 1.8037112 --7.333148 -3.1369829 1.7950809 --7.3504581 -3.0911717 1.7946494 --7.3846283 -3.0523508 1.7983173 --17.804831 -7.2300439 4.2788868 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --7.0772219 -2.6247294 1.7005789 --7.0959463 -2.5822563 1.7012261 --7.1512027 -2.5527775 1.7105038 --7.2883906 -2.5514183 1.7389839 --7.4609237 -2.5605094 1.7756627 --7.9013195 -2.6574991 1.8746955 --8.3060732 -2.7369571 1.9650981 --8.5187922 -2.7491913 2.0106232 --8.5550537 -2.7030447 2.0151541 --8.5145712 -2.6329119 2.0019927 --8.5791683 -2.5953138 2.0132122 --8.6801405 -2.5678196 2.0328462 --12.760314 -3.6892769 2.9677255 --8.4770136 -2.3950329 1.9791224 --8.6976957 -2.3998239 2.0263734 --12.548852 -3.3791566 2.9042926 --8.7765455 -2.3060539 2.0378087 --12.494781 -3.2006865 2.8827169 --12.499027 -3.1201773 2.8792648 --18.53351 -4.5053811 4.2471704 --18.572208 -4.3942742 4.2497592 --14.639268 -3.369261 3.3519905 --14.642513 -3.2755373 3.3481069 --12.639428 -2.7462873 2.8906999 --12.7277 -2.683785 2.9068818 --13.074938 -2.673286 2.981534 --13.024044 -2.5797346 2.9664309 --13.041546 -2.5001395 2.9668624 --17.524992 -3.2478781 3.9710002 --17.03228 -3.0486226 3.8560011 --17.143038 -2.9600003 3.8767138 --17.029881 -2.8329742 3.8473709 --17.609062 -2.8183575 3.9731576 --17.343246 -2.6667953 3.9099405 --0 -0 0 --16.394268 -2.3153749 3.6911621 --18.354172 -2.4772646 4.1250515 --13.632271 -1.7551541 3.0697789 --13.159148 -1.6122634 2.9621158 --16.510166 -1.919781 3.7054021 --11.903553 -1.3104857 2.6788256 --13.068105 -1.3574758 2.9357934 --12.912921 -1.2613328 2.8995459 --12.102633 -1.1073334 2.7180936 --13.331189 -1.1371825 2.9890854 --12.053987 -0.9538852 2.7045007 --18.062517 -1.3173078 4.0344329 --12.024838 -0.80322808 2.6956546 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --20.383766 12.386823 5.0115385 --20.309046 12.51269 5.0119472 --0 0 0 --0 0 0 --22.251036 14.280746 5.5515699 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --19.266722 13.391662 4.9304214 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --19.171679 14.400386 5.0376921 --19.053352 14.495228 5.0299277 --0 0 0 --16.891403 13.180895 4.5050163 --0 0 0 --16.788761 13.435504 4.5211577 --0 0 0 --0 0 0 --36.820732 30.59444 10.02527 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --16.236031 14.533629 4.5812297 --16.129866 14.61786 4.57653 --0 0 0 --15.963612 14.828021 4.5806165 --0 0 0 --16.684437 15.88336 4.8411312 --14.014641 13.506725 4.0955486 --13.9308 13.59178 4.0953441 --13.846444 13.676313 4.09514 --0 0 0 --14.255471 14.430159 4.2667732 --14.156405 14.506848 4.2637081 --15.159565 15.726705 4.5922632 --14.587554 15.320343 4.4484181 --14.017765 14.904009 4.3035517 --14.359807 15.456607 4.4365673 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --12.987053 15.242305 4.2126269 --13.727167 16.312611 4.4829493 --13.59303 16.355879 4.4719157 --12.576354 15.322899 4.170536 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --11.718069 15.597549 4.1049476 --11.455936 15.445083 4.0467148 --11.471416 15.665934 4.085741 --0 0 0 --0 0 0 --0 0 0 --9.3948317 13.513826 3.4682701 --0 0 0 --9.2475004 13.656466 3.4754214 --9.1004391 13.61854 3.4517198 --8.6039095 13.048136 3.2952065 --8.840807 13.588063 3.4165759 --8.8397627 13.770561 3.4484506 --9.4511852 14.923619 3.7199988 --8.1208286 12.998827 3.2320702 --9.9123907 16.085176 3.9766312 --9.8246937 16.164099 3.9811263 --9.7253275 16.224077 3.9811263 --0 0 0 --8.2797642 14.205082 3.4647965 --8.966054 15.601692 3.7888563 --7.9320674 14.00071 3.3916481 --7.9290652 14.197824 3.4272008 --0 0 0 --8.622014 15.89361 3.8070412 --7.8242221 14.636611 3.4970798 --7.7712188 14.754498 3.5136304 --7.6760316 14.793215 3.5115871 --0 0 0 --8.150672 16.19083 3.8164403 --0 0 0 --0 0 0 --0 0 0 --7.1644254 15.146249 3.5301807 --7.7063746 16.553923 3.8442285 --7.217339 15.755434 3.6501195 --7.1446638 15.852969 3.662379 --7.0175014 15.829392 3.6470547 --6.9789295 16.00675 3.6777034 --0 0 0 --0 0 0 --0 0 0 --6.2178421 15.273808 3.4750128 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.7295804 13.746148 3.0671797 --4.6589108 13.815722 3.07617 --4.5457959 13.758537 3.0573721 --4.4841971 13.856953 3.0729008 --0 0 0 --4.193768 13.523859 2.9883101 --4.4176679 14.561008 3.2089815 --4.3338094 14.60661 3.213068 --4.2345586 14.600021 3.2059166 --3.8357882 13.535118 2.9693079 --4.2809682 15.46695 3.3826578 --4.1336365 15.2992 3.3407712 --0 0 0 --3.5317132 13.738945 2.9938269 --0 0 0 --0 0 0 --3.491802 14.700689 3.1867099 --3.4028568 14.727561 3.1879358 --3.3034153 14.708049 3.1793542 --3.0941606 14.182892 3.0628889 --2.8344908 13.386638 2.889008 --2.8732104 13.992537 3.0144639 --2.8469033 14.309448 3.0782132 --2.7707126 14.387205 3.0910857 --2.4613779 13.217354 2.8391528 --2.6074708 14.495271 3.1070232 --0 0 0 --0 0 0 --2.2727013 14.121366 3.0183461 --0 0 0 --2.0703559 13.953564 2.9772766 --1.9889698 13.996049 2.9836106 --1.9097762 14.057459 2.9940312 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.2002687 13.944143 2.9541879 -1.2982129 14.071033 2.9823847 -1.3779106 13.995584 2.9682863 -1.5156074 14.482423 3.0722878 -1.6994423 15.330015 3.2522984 -1.7824348 15.224989 3.2324789 -1.8912697 15.339096 3.2588367 -2.0221901 15.611646 3.3187041 -2.6104188 19.226767 4.0828805 -2.7712827 19.512772 4.1466298 -0 0 0 -0 0 0 -2.2668018 14.091578 3.012012 -2.363874 14.141129 3.0254974 -2.4482558 14.112854 3.0226369 -2.5356705 14.102384 3.0236585 -2.6180339 14.064425 3.018959 -2.7179735 14.119229 3.0340791 -0 0 0 -2.8544288 13.906454 2.9960744 -2.9403114 13.891551 2.9966874 -3.0267444 13.878986 2.9979134 -0 0 0 -0 0 0 -0 0 0 -3.5566483 14.580366 3.1654601 -3.9104693 15.614203 3.3926697 -3.5331042 13.748695 2.9958701 -3.5540438 13.486323 2.9439716 -4.1959372 15.534854 3.3916481 -4.0139704 14.506861 3.1746547 -4.1250525 14.560131 3.1916137 -4.3778634 15.098658 3.314209 -4.4297862 14.934491 3.2843773 -4.3790054 14.437708 3.1820104 -0 0 0 -4.8478751 15.304898 3.3838837 -0 0 0 -4.8007741 14.534104 3.2277794 -5.1118808 15.16298 3.3728502 -5.1198139 14.884173 3.3182955 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -28.219585 12.718421 6.4937134 -28.19776 12.50099 6.4710331 -28.098957 12.251443 6.43119 -28.117821 12.054884 6.4185219 -28.119997 11.852093 6.40238 -28.118938 11.64898 6.3858294 -28.10194 11.440423 6.3660102 -28.089808 11.235058 6.347621 -28.075306 11.029917 6.3290272 -28.067566 10.828548 6.3122725 -28.053837 10.625957 6.2944965 -28.064375 10.433496 6.2824411 -28.057974 10.235602 6.2669125 -28.051126 10.038511 6.2515879 -28.037376 9.8399448 6.2350378 -27.998182 9.6336451 6.2131748 -28.026155 9.4513474 6.2064323 -28.018557 9.2577057 6.1921296 -28.006845 9.0636091 6.1772137 -28.001276 8.8723717 6.1639323 -27.983196 8.6780643 6.1481996 -27.965662 8.4848833 6.132875 -27.965582 8.2978134 6.1216373 -27.95862 8.1094284 6.1091733 -27.934391 7.9169044 6.093236 -27.908855 7.7249837 6.0772986 -27.904699 7.5398035 6.0662651 -27.917309 7.3597074 6.0591135 -27.90316 7.1731596 6.0464454 -27.885878 6.9865875 6.0333686 -27.891132 6.8063002 6.0254002 -27.882845 6.6232705 6.0147753 -27.867641 6.4392767 6.0029244 -27.868423 6.2595811 5.9947515 -27.846054 6.0753193 5.9818788 -27.830135 5.8931904 5.9706407 -27.825499 5.714046 5.962059 -27.820671 5.5353723 5.9536819 -27.795477 5.3532696 5.9412179 -27.789307 5.1754494 5.9330449 -27.786819 4.9987736 5.9258938 -27.790928 4.8236623 5.9203768 -27.792967 4.6485276 5.9146557 -27.779409 4.4712162 5.90587 -27.749245 4.291852 5.8938146 -27.740198 4.1163321 5.8864589 -27.741673 3.9427378 5.8815551 -27.731394 3.7678306 5.8744035 -27.737488 3.5954638 5.8709302 -27.729881 3.4216051 5.8648005 -27.695908 3.2450135 5.8533583 -27.71335 3.0747976 5.8529496 -27.720987 2.9035718 5.8507018 -27.717823 2.7314081 5.8464112 -27.69507 2.557682 5.8382382 -27.681959 2.3852627 5.8323126 -27.664848 2.2128663 5.8257742 -27.650572 2.0410583 5.8200531 -27.649878 1.8705 5.8173971 -27.646179 1.6999069 5.814332 -27.630676 1.5288347 5.8090196 -27.629759 1.3587863 5.8069763 -27.612148 1.1881332 5.8016639 -27.620874 1.0187582 5.8020725 -27.614864 0.84889936 5.7996206 -27.593132 0.67879134 5.7941041 -27.588947 0.50932568 5.7924695 -27.579807 0.33988854 5.7900176 -27.581373 0.17065564 5.7900176 -27.576029 0.0014159139 5.7887917 -27.553003 -0.16765076 5.7840919 -27.575926 -0.33700839 5.7892003 -27.536148 -0.50552249 5.781436 -27.510998 -0.67394447 5.7769403 -27.524935 -0.84330541 5.7808228 -27.526091 -1.0124311 5.7822533 -27.515448 -1.1811411 5.781436 -27.510616 -1.3500944 5.7820487 -27.506701 -1.5191407 5.7830706 -27.496862 -1.6878902 5.7830706 -27.475245 -1.8558503 5.7808228 -27.474079 -2.0251918 5.7830706 -27.468941 -2.194355 5.7847052 -27.464712 -2.3636992 5.7867484 -27.46139 -2.5332539 5.7892003 -27.449226 -2.7020895 5.7900176 -19.183884 -2.0074954 4.0589743 -19.058344 -2.112659 4.0352726 -27.418173 -3.2096136 5.7949214 -27.397963 -3.3777878 5.7949214 -27.388371 -3.5473437 5.7973733 -27.368999 -3.7157238 5.797986 -27.33987 -3.8827612 5.7967601 -27.314564 -4.0502987 5.796556 -17.846228 -2.7584515 3.8021374 -17.829933 -2.8680573 3.8023417 -18.754337 -3.1349037 4.0017633 -0 -0 0 -17.808805 -3.2019975 3.8096976 -18.92539 -3.5227454 4.0510054 -18.159403 -3.4955997 3.8928578 -0 -0 0 -19.934204 -4.0915084 4.2804627 -0 -0 0 -18.197266 -3.9683557 3.9204419 -18.18499 -4.0827246 3.9230981 -19.693304 -4.5484276 4.2516527 -20.380299 -4.838995 4.4051013 -20.399677 -4.976017 4.4157262 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9314537 -2.247256 1.7535729 -7.9231567 -2.2975156 1.7547989 -0 -0 0 -0 -0 0 -0 -0 0 -7.9763722 -2.5267365 1.779318 -7.9653749 -2.5771375 1.7803396 -7.9280334 -2.6189024 1.7756401 -0 -0 0 -19.928196 -6.8547025 4.4316635 -19.952269 -7.0001831 4.4463749 -19.851795 -7.1020331 4.4337068 -0 -0 0 -0 -0 0 -0 -0 0 -20.451509 -7.887897 4.6082006 -20.434616 -8.0257607 4.6153517 -20.411345 -8.1615334 4.6212773 -18.775074 -7.6412506 4.2639122 -20.438984 -8.4649582 4.6504955 -0 -0 0 -18.575459 -7.9616351 4.2512441 -18.493055 -8.0609903 4.2436843 -19.470646 -8.6296444 4.4782495 -19.318262 -8.7043171 4.4555693 -19.424692 -8.8960533 4.4923482 -19.351992 -9.006813 4.4882617 -19.298132 -9.1262217 4.4886703 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.1571341 -2.1569605 1.0104423 -4.1481519 -2.1847081 1.0114639 -4.1208553 -2.2027373 1.0081947 -4.1218905 -2.2359145 1.0116682 -4.0291924 -2.2177441 0.99287027 -0 -0 0 -0 -0 0 -14.040711 -8.0673895 3.4128981 -4.0851955 -2.3810148 1.0198412 -4.0882068 -2.4164953 1.024132 -4.0917749 -2.452605 1.0286272 -4.1059289 -2.4954574 1.0357785 -4.9339685 -3.0402336 1.2425556 -4.0949225 -2.5581014 1.0406823 -4.8508 -3.0717509 1.2313178 -4.8054981 -3.084538 1.2247794 -3.1732295 -2.0645807 0.82307601 -3.1580498 -2.082396 0.82246304 -3.1582365 -2.110435 0.82573223 -3.1322579 -2.1209934 0.82246304 -3.2338114 -2.2188041 0.85147721 -3.2048635 -2.2279897 0.84759504 -3.258364 -2.2949555 0.86475831 -3.2330644 -2.306946 0.86189777 -3.1894927 -2.3055251 0.85433775 -3.1839747 -2.3314128 0.85658532 -4.0400443 -2.9963753 1.0827733 -4.3886728 -3.2968304 1.1786019 -4.4704213 -3.4013386 1.2053684 -4.4339585 -3.4167554 1.2012819 -3.0499923 -2.3804095 0.84044367 -3.0322568 -2.3966513 0.83962631 -3.4592631 -2.7687321 0.9577263 -3.4308012 -2.7806611 0.95466143 -4.3770084 -3.5921419 1.2147675 -3.3090813 -2.7499843 0.9309597 -3.173044 -2.6700349 0.89847201 -3.3257582 -2.83355 0.94485384 -3.310533 -2.8558211 0.94546682 -3.2811503 -2.8657784 0.94219762 -3.9103405 -3.4577396 1.1224124 -3.1793621 -2.8464153 0.92360401 -3.1545832 -2.8592963 0.92156076 -4.1893787 -3.8441386 1.2196712 -3.1192577 -2.8977928 0.92156076 -3.1042712 -2.91956 0.92237806 -3.0926797 -2.9446268 0.92421699 -3.0245087 -2.9153185 0.90970987 -2.4803562 -2.4204407 0.75626165 -4.4211407 -4.3671904 1.3300068 -2.4587736 -2.4590018 0.75871354 -2.4484551 -2.4789169 0.76014382 -2.4755874 -2.5373302 0.77281201 -3.4457479 -3.5750909 1.0692879 -3.4223964 -3.5947485 1.0688792 -2.4204159 -2.573911 0.77036011 -2.374594 -2.556442 0.76116544 -2.3078988 -2.5154295 0.74543244 -2.2819018 -2.5179389 0.74216324 -2.2513907 -2.5151191 0.73746371 -2.2197037 -2.5105538 0.73235559 -2.1733465 -2.4887381 0.72254801 -2.1829731 -2.5309331 0.73051667 -3.2955871 -3.8683259 1.0936025 -3.2787225 -3.8967133 1.0958501 -2.3881702 -2.874079 0.81285971 -2.1916254 -2.6707597 0.75401407 -1.8713092 -2.3092513 0.65328175 -1.8277417 -2.2840071 0.64347416 -1.8519355 -2.3435607 0.65634662 -1.9959264 -2.5578303 0.71008414 -2.2084608 -2.8662152 0.78813636 -2.1825335 -2.8688059 0.78527582 -2.9686811 -3.9520004 1.0645884 -2.9560397 -3.9858658 1.0686749 -3.4306417 -4.6855154 1.2450075 -3.393225 -4.6945777 1.2419426 -1.4526799 -2.0363824 0.55500132 -1.4395938 -2.0444572 0.55479699 -1.429816 -2.0572708 0.55581862 -1.4271352 -2.080534 0.55949646 -1.4176358 -2.0941148 0.56072241 -2.1063943 -3.1526952 0.82430196 -1.668286 -2.5305848 0.66554129 -1.631906 -2.5087738 0.65757257 -1.6022034 -2.4964981 0.6520558 -1.5281934 -2.4136586 0.62917137 -2.3551736 -3.7703943 0.96079117 -1.8877504 -3.0639174 0.78404987 -2.3107615 -3.8023579 0.96160847 -1.8268569 -3.0482306 0.77465093 -2.2704027 -3.841383 0.96426469 -2.2527053 -3.8653901 0.96671665 -2.2372375 -3.893568 0.97019017 -1.0971544 -1.9372418 0.49758595 -1.0857244 -1.9447919 0.49779028 -1.0737709 -1.9514172 0.49779028 -1.0697125 -1.9725964 0.5012638 -1.0742031 -2.0102012 0.50861949 -1.0677792 -2.0280139 0.51127577 -1.0765067 -2.0753651 0.52087903 -1.0677621 -2.089776 0.52271795 -1.1024592 -2.1907182 0.54478508 -1.124216 -2.2684815 0.56133538 -1.2275075 -2.5154912 0.61711621 -0 -0 0 -1.3074732 -2.7648613 0.67126238 -1.6726525 -3.5937159 0.86026317 -0.95625317 -2.0883086 0.51229739 -0.94945508 -2.1075232 0.51536226 -0.92698365 -2.0918319 0.51045841 -1.1883987 -2.7264977 0.6536904 -1.4096477 -3.288852 0.77975905 -1.3829776 -3.2821047 0.77628553 -1.2268081 -2.9622445 0.70211548 -0 -0 0 -0 -0 0 -1.4398285 -3.6658325 0.85495073 -0 -0 0 -0 -0 0 -0 -0 0 -0.92268527 -2.5303099 0.59504908 -1.2547965 -3.5073521 0.81040782 -0.8961035 -2.5543735 0.59790963 -0.87627268 -2.5477905 0.59525341 -1.1321529 -3.3582535 0.77260768 -0.78198081 -2.3678093 0.55336672 -0.77437007 -2.3939838 0.55806619 -0.72359139 -2.2848427 0.53313851 -0.71042818 -2.2920446 0.53375149 -1.2488784 -4.1173701 0.9309597 -1.2428055 -4.1897092 0.94505817 -0.67139119 -2.3160148 0.53620338 -0.78582877 -2.7740414 0.63468814 -0.89649397 -3.2401462 0.73460317 -1.0691329 -3.9581242 0.88866436 -0.81698632 -3.1004007 0.70211548 -0.78941643 -3.0721726 0.69496411 -0.77007526 -3.0750594 0.69455546 -1.9605894 -8.0353508 1.759294 -0.78612804 -3.3109488 0.74318486 -0.77417278 -3.3519535 0.7509492 -1.7964767 -7.9994001 1.744174 -0.92684174 -4.2496991 0.94076729 -0.89932901 -4.2486024 0.93933702 -0.55776972 -2.7178972 0.61200804 -1.6506275 -8.2974205 1.7987288 -1.6048684 -8.3343067 1.8044499 -0.78457546 -4.2145391 0.92769051 -0.59663439 -3.3184624 0.73664641 -0.57324791 -3.3047001 0.73296857 -1.4066339 -8.4117327 1.8130317 -1.2933881 -8.0374861 1.7321188 -1.2530249 -8.1033144 1.7443783 -0.43938029 -2.9633756 0.65818554 -0.39267397 -2.7653992 0.61589026 -0.37688464 -2.7764866 0.61772919 -0.50444382 -3.8941724 0.85249883 -0.31928572 -2.590482 0.57768142 -0.2932452 -2.505862 0.55949646 -0.28650084 -2.5854485 0.5758425 -0.27195728 -2.5998144 0.57849872 -0.26348901 -2.6774204 0.59443611 -0.38129604 -4.1323447 0.89908499 -0.24322076 -2.8267455 0.62508488 -0.21517667 -2.6945019 0.59709233 -0.18177357 -2.46733 0.54928023 -0.17627931 -2.6109927 0.5791117 -0 -0 0 -0.2107076 -3.8141928 0.83022738 -0.15372883 -3.1329648 0.68760836 -0.12351527 -2.8785918 0.63427949 -0.10296266 -2.8010364 0.61793351 -0.082644351 -2.6998577 0.59668368 -0 -0 0 -0 -0 0 -0.033272944 -2.7283287 0.60240477 -0.016574102 -2.7353337 0.60383505 --0.00021054308 -2.7255948 0.6017918 --0.016987955 -2.7343521 0.60363072 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0.10707791 -2.9017801 0.63897902 --0.12509073 -2.9059587 0.64000064 --0.14229541 -2.892426 0.63734436 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.5102159 -3.5832844 0.84453017 --1.5306315 -3.5703514 0.84371287 --0 -0 0 --1.53546 -3.4635944 0.82368898 --1.6290644 -3.6147573 0.86046749 --1.6524363 -3.6073637 0.86108047 --1.669583 -3.5865066 0.85862857 --3.9977851 -8.4531279 1.9846648 --3.9987094 -8.3225555 1.9601457 --1.624126 -3.3273139 0.80570835 --1.6049541 -3.2374704 0.78711474 --1.6256688 -3.2293105 0.78752339 --1.6423349 -3.2131729 0.78609312 --1.6566105 -3.1926079 0.78364122 --1.6944124 -3.2170296 0.79181427 --4.6744313 -8.7457981 2.1027648 --4.6986055 -8.6627398 2.0898921 --4.8437018 -8.8009825 2.1297357 --4.926722 -8.8232336 2.1421995 --1.95681 -3.4539909 0.86148912 --1.9199349 -3.3409135 0.83717442 --1.9507482 -3.3468316 0.84146529 --2.004616 -3.3912623 0.85515505 --2.0374634 -3.3990505 0.86005884 --5.0392127 -8.2920885 2.0582218 --2.1098297 -3.4237974 0.87231839 --2.1333909 -3.4149384 0.87334001 --0 -0 0 --5.0905075 -7.9311295 1.9999892 --5.1582918 -7.929286 2.007345 --5.1858349 -7.865612 1.9993762 --5.132854 -7.6822472 1.9613717 --5.2325773 -7.7284265 1.980987 --0 -0 0 --5.3823333 -7.7432108 2.0012152 --5.4449606 -7.7316494 2.006732 --5.4962783 -7.7036729 2.0081623 --5.6013556 -7.7499361 2.0287991 --5.6580548 -7.7280588 2.0320683 --5.6884575 -7.6703935 2.0261428 --5.7618704 -7.670567 2.0353374 --5.9220304 -7.783874 2.0743635 --6.1029124 -7.9203124 2.1199281 --6.2314887 -7.9853601 2.1471033 --6.3884015 -8.0836859 2.1834731 --6.4482794 -8.0573282 2.1869466 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.4965363 -9.0421028 2.7698865 --9.4256287 -8.864953 2.733721 --10.21708 -9.4918966 2.9437673 --9.6426115 -8.8485613 2.7645741 --10.648286 -9.6517887 3.0326488 --10.546133 -9.4419622 2.9874928 --10.718996 -9.4788876 3.019572 --10.119325 -8.8385105 2.8373139 --9.3973379 -8.1067581 2.6233854 --9.4558439 -8.0565634 2.6258373 --9.5178328 -8.0091066 2.6293108 --9.5938988 -7.9730806 2.6366665 --10.376602 -8.5164909 2.834862 --9.7647829 -7.9145393 2.656486 --11.269012 -9.0198145 3.0457256 --11.228149 -8.8746214 3.020185 --11.251525 -8.7814674 3.012012 --11.292789 -8.7027035 3.0087428 --0 -0 0 --0 -0 0 --10.388875 -7.7054849 2.7326994 --11.408978 -8.3541203 2.9844279 --11.224407 -8.1136312 2.9237435 --11.250075 -8.0275488 2.9176137 --11.311924 -7.9673877 2.9208829 --11.359795 -7.8972702 2.9206786 --11.336201 -7.7781267 2.9024937 --11.442883 -7.7484913 2.9174094 --11.029548 -7.3702846 2.8017614 --11.043509 -7.2819915 2.7939968 --11.058444 -7.1948733 2.7866411 --11.123801 -7.1406341 2.7919536 --11.13598 -7.0523419 2.7841892 --11.17074 -6.9786935 2.782146 --0 -0 0 --11.242991 -6.8334589 2.7790811 --11.236012 -6.7351527 2.7672303 --11.239206 -6.6436663 2.7580357 --11.319509 -6.5977483 2.7676389 --0 -0 0 --16.511518 -9.354641 3.9939988 --16.56348 -9.250288 3.9927728 --16.603632 -9.139513 3.9888906 --17.904451 -9.7129173 4.2845492 --7.1657405 -3.8303301 1.7288496 --6.7144852 -3.5362909 1.6168795 --16.102623 -8.3555079 3.8195052 --6.5987377 -3.3725393 1.5796922 --7.1998763 -3.6242683 1.7153642 --16.434361 -8.1472664 3.8615961 --6.9860611 -3.4098217 1.6554968 --7.0042048 -3.3656199 1.6548839 --7.2662992 -3.4368553 1.7106646 --7.340497 -3.4169948 1.7229242 --17.876211 -8.1888943 4.1370263 --0 -0 0 --0 -0 0 --7.2642164 -3.1669605 1.686963 --17.460897 -7.4858069 3.9982896 --17.557014 -7.3998199 4.0097318 --17.611132 -7.2956991 4.011775 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --7.0245495 -2.6603782 1.6007377 --7.0948763 -2.6373529 1.612793 --7.1403527 -2.6045058 1.6193314 --7.2640333 -2.599236 1.6432374 --7.3768301 -2.5886548 1.6646916 --8.3145094 -2.8605764 1.8681995 --8.2205963 -2.7719672 1.8436804 --8.3573523 -2.7610934 1.8700384 --8.203701 -2.6546025 1.8326468 --8.3038206 -2.6308281 1.8510361 --8.3422461 -2.5867865 1.8559399 --12.997601 -3.9433017 2.8679626 --13.019675 -3.8629189 2.8675539 --12.872025 -3.7333264 2.8303668 --8.6951761 -2.4640272 1.9192808 --8.7422085 -2.4195073 1.9262278 --8.8107548 -2.3803756 1.9378743 --12.56316 -3.3117449 2.7447546 --12.567126 -3.230453 2.741281 --0 -0 0 --13.844016 -3.3781669 3.0073125 --18.486477 -4.391129 3.9989026 --18.5331 -4.2822437 4.0031934 --18.498856 -4.1549301 3.9903209 --12.70812 -2.7723806 2.7478194 --12.986334 -2.7497184 2.8036003 --0 -0 0 --17.918394 -3.5650127 3.8462718 --14.568879 -2.8057046 3.1297033 --17.810665 -3.3168964 3.8143971 --17.419296 -3.1335366 3.7271502 --17.412153 -3.0220745 3.7216334 --17.499886 -2.9268064 3.7363448 --13.080485 -2.1051524 2.7982876 --13.133787 -2.031137 2.8068695 --17.063738 -2.5319147 3.6335692 --18.255516 -2.5943995 3.8816199 --13.266917 -1.8023552 2.8275063 --13.429169 -1.7405497 2.859381 --13.343413 -1.6462479 2.8391528 --12.136978 -1.4218189 2.5835419 --12.93063 -1.4344451 2.7484324 --12.150591 -1.2724665 2.5829289 --12.196163 -1.2016324 2.5908976 --13.229723 -1.2215811 2.8060522 --18.143642 -1.563243 3.8340123 --12.20353 -0.97592252 2.5882413 --13.40519 -0.98931837 2.8385398 --0 -0 0 --0 -0 0 --13.599995 -0.75230438 2.8759313 --13.585777 -0.6679284 2.8720491 --13.62385 -0.58602846 2.8792005 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --20.435835 12.616043 4.7449198 --20.341404 12.730784 4.7410693 --0 0 0 --22.348505 14.371747 5.2460542 --22.533649 14.687045 5.310164 --22.641247 14.955929 5.3567543 --0 0 0 --22.463318 15.237604 5.3584871 --0 0 0 --22.339058 15.556982 5.373889 --19.327091 13.636112 4.6736865 --19.265411 13.770423 4.6790771 --21.034779 15.231133 5.128231 --0 0 0 --20.850224 15.491041 5.1291933 --19.018103 14.311652 4.7027574 --19.373989 14.766563 4.8123021 --0 0 0 --0 0 0 --16.856291 13.345014 4.2511005 --16.771793 13.446349 4.2505231 --0 0 0 --16.662373 13.697892 4.2649622 --36.815735 30.648039 9.4312897 --0 0 0 --16.338001 13.943026 4.2470579 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --34.83448 31.627344 9.2639875 --0 0 0 --16.018766 14.905782 4.3259916 --0 0 0 --0 0 0 --16.496319 15.926762 4.5317979 --14.01311 13.696174 3.8774157 --14.966 14.808273 4.1636958 --15.96743 15.994355 4.4671106 --14.29673 14.497504 4.0277753 --0 0 0 --14.642303 15.217062 4.1762099 --14.083565 14.817243 4.0437546 --12.903003 13.742938 3.7314839 --0 0 0 --12.735373 13.902414 3.7320616 --12.615595 13.942456 3.7220504 --12.51673 14.004967 3.7182 --13.432534 15.216695 4.0152612 --13.224132 15.167167 3.9809926 --0 0 0 --13.850725 16.285145 4.2274203 --13.778941 16.403639 4.236084 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --11.902407 15.872003 3.9253535 --11.45098 15.466781 3.8086853 --11.389444 15.582703 3.8198516 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.2206383 13.463374 3.2345848 --9.1378546 13.519697 3.2345848 --9.1276827 13.684909 3.2603827 --8.9777317 13.640652 3.2368951 --8.861268 13.645276 3.2251513 --8.3491497 13.030927 3.069401 --8.6664152 13.710685 3.2153325 --8.1761522 13.112417 3.0647805 --8.0919437 13.156487 3.0634327 --9.7331476 16.045158 3.7149272 --7.8865628 13.182373 3.046876 --8.4461727 14.316609 3.2942667 --8.3265934 14.313876 3.2819452 --8.1731968 14.250628 3.2561471 --7.9571476 14.073281 3.2049365 --8.7294836 15.663067 3.551091 --8.6204576 15.693112 3.5458927 --8.4754257 15.655961 3.5258706 --7.8213434 14.66174 3.293304 --7.7819033 14.805876 3.3146739 --0 0 0 --8.1840553 16.04632 3.5670702 --8.0497684 16.025204 3.551476 --8.0017519 16.176329 3.5738084 --7.3554363 15.10202 3.328728 --7.3585029 15.346848 3.3722379 --7.7621069 16.446892 3.6011467 --7.2473216 15.603313 3.408432 --7.1942682 15.741204 3.4286468 --6.8513041 15.237305 3.3108234 --0 0 0 --0 0 0 --16.3929 38.333405 8.2126255 --0 0 0 --6.3641915 15.400392 3.3023524 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --6.113812 16.184147 3.4272993 --6.0457721 16.306005 3.4450114 --0 0 0 --5.7146316 16.012976 3.3687725 --0 0 0 --0 0 0 --4.5783978 13.615236 2.8512735 --4.4966121 13.648664 2.8524287 --4.4097681 13.666659 2.8505034 --0 0 0 --4.2234697 13.660681 2.8383746 --4.1338892 13.667552 2.8345242 --0 0 0 --4.2353253 14.64959 3.0249283 --3.8461461 13.615728 2.8089187 --3.8360965 13.905837 2.86321 --4.1287103 15.333402 3.1485274 --3.6240356 13.795262 2.8314438 --3.9672546 15.488432 3.1698973 --3.8766589 15.530573 3.1735554 --3.7745717 15.526415 3.1679721 --3.6686158 15.5044 3.1589236 --3.3863986 14.713756 2.99528 --3.3031197 14.76586 3.0016332 --3.3388731 15.367925 3.118494 --3.0022681 14.238766 2.8880453 --2.9228997 14.296338 2.8959386 --2.6224372 13.239733 2.6810842 --2.5527844 13.316291 2.693213 --2.6317279 14.199126 2.8662903 --0 0 0 --0 0 0 --0 0 0 --5.0895672 31.805557 6.352478 --2.1600513 14.046214 2.8212402 --2.0610874 13.972803 2.8041058 --4.4940791 31.828749 6.3395791 --0 0 0 --4.0291457 31.306299 6.2257986 --3.8209989 31.199913 6.2000008 --3.629601 31.223747 6.2001929 --3.4320467 31.191782 6.1896043 --3.259131 31.390871 6.2248359 --3.0732257 31.47962 6.2385049 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0.77456135 20.561413 4.0699377 -0.89688116 20.469021 4.052803 -1.0205477 20.424911 4.0452948 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.8965255 20.361275 4.0451021 -1.3829834 13.925963 2.7786927 -1.4744853 13.974792 2.7900515 -1.6218086 14.516479 2.8988264 -1.7339674 14.702134 2.9375234 -1.8677025 15.041788 3.0068314 -1.8865764 14.467625 2.8955536 -2.0440388 14.958428 2.9950874 -2.8265126 19.776442 3.9524992 -3.1468344 21.092253 4.2170243 -2.4238386 15.592167 3.1288903 -2.2600386 13.973816 2.8102663 -0 0 0 -2.4401174 13.995297 2.8202775 -2.5564923 14.14905 2.8539689 -2.603195 13.918966 2.811229 -2.6960068 13.941268 2.8189299 -2.7763059 13.898482 2.8137317 -3.3261192 16.133928 3.2650032 -2.9403257 13.833611 2.8077636 -3.0753374 14.044406 2.8537762 -3.617564 16.047955 3.2605753 -0 0 0 -3.7514098 15.738901 3.2074392 -0 0 0 -3.6832068 14.653408 2.9973977 -3.4975333 13.562525 2.781003 -3.545553 13.407996 2.75405 -3.9707911 14.651321 3.0112593 -4.0740061 14.674902 3.0210779 -4.3190885 15.195192 3.1323557 -4.3763289 15.044974 3.1071353 -4.4817176 15.062043 3.1161838 -4.6126208 15.160996 3.1421742 -4.537394 14.591752 3.0310891 -4.6509147 14.639388 3.0466833 -4.9108968 15.135126 3.1548808 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -28.208961 15.269977 6.3262949 -28.192163 15.037952 6.3018446 -28.224836 14.833645 6.288753 -28.222078 14.611909 6.2681532 -28.205427 14.384526 6.2448583 -28.21862 14.173755 6.2284937 -28.191589 13.944223 6.2036586 -28.18663 13.727159 6.1840215 -28.207502 13.523832 6.1703525 -28.170145 13.293967 6.144362 -28.150616 13.074163 6.1226068 -28.162476 12.870193 6.107975 -28.144253 12.653694 6.0871825 -28.14867 12.448621 6.0715885 -28.130938 12.234969 6.0515661 -28.116156 12.023935 6.0325065 -28.115225 11.820009 6.0167198 -28.091087 11.607555 5.9963126 -28.0945 11.407657 5.9820657 -28.108368 11.21288 5.9703221 -28.092581 11.007268 5.95261 -28.079912 10.804034 5.9358606 -28.077744 10.605879 5.9216137 -28.065002 10.404746 5.9054422 -28.043476 10.201488 5.8877301 -28.034378 10.003833 5.8729057 -28.021133 9.8057022 5.8575039 -27.99909 9.6055641 5.8405623 -27.998903 9.4138842 5.828433 -28.000217 9.2234907 5.8168821 -27.999315 9.0331345 5.8051381 -27.989649 8.8407726 5.7918539 -27.95149 8.6404676 5.7729869 -27.956076 8.4543123 5.7631683 -27.95661 8.2675934 5.7527723 -27.916313 8.0697422 5.7342901 -27.919973 7.8854985 5.725049 -27.902559 7.6960359 5.7117648 -27.92083 7.5170321 5.7059894 -27.907583 7.3301182 5.6940527 -27.889292 7.1426768 5.6813464 -27.892607 6.9614382 5.6732607 -27.88998 6.7792697 5.6642122 -27.861341 6.5915232 5.6501579 -27.859182 6.4107642 5.6416869 -27.84724 6.228353 5.6314831 -27.845615 6.0488296 5.62359 -27.840918 5.8691559 5.6153116 -27.812952 5.6852489 5.6026049 -27.800144 5.5051465 5.5931716 -27.796778 5.3274469 5.5858555 -27.802891 5.1519623 5.5806575 -27.793409 4.9740114 5.5725718 -27.787628 4.797205 5.5654483 -27.764267 4.6179214 5.5550518 -27.761072 4.4425154 5.5488915 -27.752893 4.2667265 5.5419607 -27.761076 4.0937815 5.5384951 -27.752636 3.9187021 5.5319495 -27.752819 3.7451928 5.527329 -27.732452 3.5693245 5.518858 -27.706104 3.3932509 5.5094242 -27.696186 3.2196741 5.5034561 -27.685183 3.0463469 5.497488 -27.684809 2.8744919 5.4938302 -27.689228 2.7033279 5.4913273 -27.676956 2.5307889 5.485744 -27.668497 2.3589191 5.4811234 -27.653103 2.1867845 5.475348 -27.650341 2.0159261 5.4722676 -27.639671 1.8447267 5.4678397 -27.626961 1.6736751 5.4632192 -27.612215 1.5027956 5.458406 -27.618956 1.3332473 5.4580212 -27.614851 1.1632605 5.4557109 -27.60774 0.9933036 5.4530153 -27.604486 0.82362396 5.4512825 -27.600191 0.65402168 5.4495502 -27.575232 0.48415941 5.4439669 -27.575722 0.31492952 5.4435821 -27.575172 0.14571187 5.4431968 -27.566715 -0.023481054 5.4414639 -27.560165 -0.19258541 5.440309 -27.548653 -0.36155859 5.4383836 -27.537085 -0.53041667 5.4366512 -27.52154 -0.69907153 5.434341 -27.530464 -0.86836106 5.437036 -27.543249 -1.0379714 5.4406939 -27.524597 -1.2064379 5.4383836 -27.521578 -1.3755481 5.4393463 -27.523396 -1.5449969 5.4414639 -27.49577 -1.7127492 5.4379988 -27.4867 -1.881562 5.4383836 -27.48736 -2.0511317 5.4408865 -27.478168 -2.2200685 5.4416566 -27.442522 -2.3867581 5.4374213 -27.447878 -2.5570097 5.4414639 -19.407928 -1.9278613 3.8595111 -27.424192 -2.8946753 5.4433894 -19.336973 -2.1607568 3.8504624 -27.406096 -3.2332947 5.4472399 -27.401321 -3.4033303 5.4503202 -27.38187 -3.5716515 5.4507051 -27.371105 -3.7411914 5.4530153 -27.355406 -3.9101782 5.4545555 -27.355162 -4.0815754 5.4593687 -27.33736 -4.2505531 5.4609089 -18.961611 -3.0671592 3.8015621 -18.904694 -3.1771026 3.7940536 -17.824377 -3.1080544 3.5828571 -18.984987 -3.4306726 3.8181188 -17.68651 -3.3081441 3.5632198 -0 -0 0 -19.777925 -3.9512682 3.990041 -19.678347 -4.0570893 3.9750242 -18.45233 -3.9224334 3.7341793 -18.489264 -4.0490198 3.7465007 -18.422909 -4.1531096 3.7382224 -19.679916 -4.5636315 3.9965868 -19.69068 -4.6936307 4.0044799 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9518347 -2.2596498 1.654942 -7.9434733 -2.3100436 1.6560972 -0 -0 0 -0 -0 0 -0 -0 0 -8.0134478 -2.5453031 1.6826652 -7.9855456 -2.5904868 1.6801624 -7.9732265 -2.640671 1.6809325 -0 -0 0 -0 -0 0 -19.989122 -7.0330095 4.1904564 -19.942822 -7.1545339 4.1898789 -0 -0 0 -0 -0 0 -0 -0 0 -21.100204 -8.1596746 4.4715385 -20.448051 -8.0520191 4.3446665 -20.463839 -8.2036285 4.3585281 -18.919456 -7.7194958 4.0420218 -20.564629 -8.5384321 4.4016528 -20.509138 -8.6633081 4.4010754 -18.713755 -8.0404758 4.0291228 -18.599327 -8.1268568 4.0152612 -0 -0 0 -19.304846 -8.7188568 4.1889162 -19.359783 -8.8870964 4.2124038 -19.320896 -9.0131874 4.2158694 -19.314884 -9.1551075 4.2266502 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.1667295 -2.165252 0.95435458 -4.1611757 -2.1949003 0.95608729 -4.1528196 -2.2231715 0.95724243 -4.149446 -2.2542346 0.95955271 -4.1484251 -2.2867618 0.96244055 -4.1445918 -2.3179233 0.96475077 -4.1328516 -2.3447638 0.96532834 -4.1192369 -2.370568 0.96552086 -4.1630821 -2.429945 0.97880489 -4.1962199 -2.4839473 0.98977864 -4.1573453 -2.4955013 0.98438805 -4.0966964 -2.4934022 0.97399187 -4.0687957 -2.5107594 0.97110403 -4.9716082 -3.1104605 1.1836482 -4.0177927 -2.547883 0.96648347 -4.8769407 -3.1351409 1.1705568 -3.1756678 -2.0686388 0.77665681 -3.1580024 -2.0848401 0.77550173 -3.159013 -2.1134584 0.77877456 -3.1874006 -2.1608977 0.78859317 -3.1805511 -2.1848617 0.79013336 -3.2057366 -2.2312555 0.7993744 -4.2912316 -3.0265319 1.0633221 -4.4058962 -3.1481061 1.0954732 -3.1029253 -2.2455673 0.78455025 -3.0487354 -2.2349629 0.77473164 -3.0136976 -2.2378256 0.76953351 -3.0022621 -2.2580454 0.77011108 -2.8221216 -2.1497147 0.72910392 -3.0527782 -2.3552833 0.78955579 -2.8009403 -2.1884153 0.73045158 -3.3644609 -2.66242 0.87484306 -3.3932307 -2.7192311 0.88620186 -2.7921798 -2.2655795 0.73853749 -2.7979336 -2.2988727 0.74354303 -3.6231489 -3.0147865 0.95782 -3.8176641 -3.216579 1.0124962 -3.315686 -2.8284087 0.88812703 -3.304951 -2.8544748 0.88985974 -3.2977133 -2.8837461 0.89255506 -3.2006264 -2.8336527 0.87176269 -3.1298504 -2.8054101 0.85770857 -3.3835623 -3.0706096 0.9295193 -4.2142458 -3.8722844 1.1559252 -4.2421279 -3.9462025 1.1697867 -4.0842729 -3.8463237 1.1337851 -3.9881656 -3.8022299 1.1141478 -2.5550308 -2.4654324 0.72968149 -2.4998565 -2.4419649 0.71870774 -2.4848258 -2.4572577 0.71870774 -2.4662354 -2.4689856 0.71774513 -2.3993659 -2.4316661 0.70330596 -3.4751003 -3.5661485 1.0099934 -3.4456694 -3.5796256 1.0078757 -4.0732813 -4.2842631 1.1928893 -2.4813521 -2.64149 0.7441206 -3.0722728 -3.3114517 0.91931564 -2.538228 -2.7694306 0.77011108 -2.5152621 -2.7784035 0.76837838 -2.2621205 -2.5296392 0.69887793 -2.2407122 -2.5368502 0.69714528 -2.2805603 -2.6141632 0.71370214 -2.3387506 -2.7143669 0.73603469 -3.5445297 -4.1661687 1.1062545 -3.5069087 -4.173562 1.1025965 -3.192421 -3.8468192 1.0138439 -2.3168271 -2.8263597 0.75008881 -3.3795013 -4.1756101 1.0870023 -1.666422 -2.0840647 0.55660421 -1.7642169 -2.2344675 0.59164321 -1.763137 -2.2615075 0.5956862 -2.0669081 -2.6853077 0.69791538 -2.4266617 -3.193398 0.8199743 -3.2035038 -4.2704773 1.0804565 -3.2379608 -4.3720784 1.1004788 -3.2186003 -4.4021635 1.1029816 -1.5167984 -2.1004529 0.54139501 -2.1493928 -3.0161462 0.7597149 -1.4756719 -2.0972328 0.53619689 -1.4985762 -2.1578474 0.5485183 -2.4710743 -3.6065767 0.89082235 -1.4912138 -2.2045314 0.55525655 -2.9051988 -4.3542466 1.0600492 -2.8541529 -4.335103 1.0513856 -1.9495008 -3.0003088 0.73507208 -1.9606969 -3.0584862 0.7458533 -1.9125357 -3.0240064 0.73507208 -2.7759767 -4.4504738 1.0621669 -1.886077 -3.0648019 0.73911506 -1.8667274 -3.0754781 0.73892254 -1.8463103 -3.0843477 0.73834497 -1.825356 -3.0922377 0.73757488 -1.804868 -3.1008348 0.73699731 -1.1150951 -1.9422154 0.47247213 -1.1070203 -1.9558549 0.47401232 -1.085923 -1.946324 0.47035438 -1.0867147 -1.9761733 0.47555247 -1.5398082 -2.8423386 0.66730434 -1.5338839 -2.873379 0.67211741 -1.4975085 -2.847122 0.66422403 -1.4773039 -2.8510282 0.66306889 -1.4709272 -2.8818939 0.66788191 -1.5078281 -2.9996016 0.69175464 -1.0504521 -2.1212862 0.49749997 -1.0301129 -2.1126935 0.49422711 -1.042158 -2.1711814 0.50558591 -1.0401229 -2.2014964 0.51078397 -1.0067563 -2.1651168 0.50154293 -1.0040563 -2.194459 0.50654852 -1.0155185 -2.2560692 0.51848489 -1.1663524 -2.6347048 0.59838152 -1.1904726 -2.7344995 0.61821127 -1.1829312 -2.763407 0.62283176 -0.92067808 -2.1871364 0.49865511 -0.91248673 -2.2054412 0.5013504 -0.86719108 -2.1328063 0.48479354 -0.85408807 -2.1380873 0.48479354 -1.4176204 -3.6152184 0.79494643 -1.4066862 -3.653156 0.80110711 -0.85376722 -2.2571797 0.50654852 -1.3699362 -3.6922259 0.80572766 -1.349268 -3.7060952 0.8068828 -1.3495857 -3.7790003 0.82035929 -1.2278513 -3.5056355 0.76183265 -0.88123721 -2.5654087 0.56526774 -1.1334575 -3.3678966 0.73025906 -1.3568203 -4.1157598 0.88331401 -0.96852827 -2.9986508 0.65132505 -0.96961492 -3.0662956 0.66403151 -0.96671975 -3.1237516 0.67462021 -0.73565996 -2.4289119 0.53099883 -1.2527479 -4.2326064 0.89910078 -1.2243013 -4.231729 0.89736813 -0.90016824 -3.1833653 0.68212855 -0.91088033 -3.2985625 0.7044611 -0.62943405 -2.3337851 0.50731862 -0 -0 0 -0.76700383 -2.990608 0.63881111 -0.727732 -2.9114733 0.62186915 -0.70684129 -2.9034879 0.61936641 -1.7956061 -7.5860276 1.5625315 -0.77170599 -3.3489766 0.70734894 -0.65584755 -2.9274983 0.62167662 -0.63745588 -2.9295495 0.62129158 -0.90583348 -4.2920847 0.8937102 -0.68908906 -3.3659451 0.70715642 -0.82088685 -4.1401968 0.86117399 -0.61449128 -3.2006712 0.67250246 -0.79432881 -4.2811813 0.88735694 -0.756984 -4.2241535 0.87503558 -1.4532217 -8.4129076 1.7080781 -1.4025395 -8.427474 1.7092333 -1.2940658 -8.0812778 1.6387702 -1.2610027 -8.1967258 1.6601402 -0.42153633 -2.8513172 0.59857404 -0.39786091 -2.8101254 0.58991051 -0.38166037 -2.8202937 0.59145069 -0.36146805 -2.8001971 0.58702272 -0.32710764 -2.6621034 0.55929953 -0.31450504 -2.6962266 0.56565273 -0.44429594 -4.0285649 0.82825273 -0.26903582 -2.5808051 0.5421651 -0.25481552 -2.5990102 0.54543793 -0.37524828 -4.0927391 0.83941901 -0.35262817 -4.1242971 0.84519464 -0 -0 0 -0.22026549 -3.0067258 0.62456447 -0.17105308 -2.5468566 0.53388661 -0.15488897 -2.5390427 0.53215396 -0.13930678 -2.5399454 0.53215396 -0.12315207 -2.5289905 0.52984369 -0.10874612 -2.55617 0.53504175 -0.097817309 -2.6891782 0.56103224 -0.083477534 -2.7623112 0.57527888 -0.066271484 -2.7519801 0.57316113 -0.049831212 -2.7778447 0.57816666 -0.032875054 -2.785948 0.57970685 -0.015821325 -2.7939475 0.58124703 --0.0013319679 -2.8047862 0.58336478 --0 -0 0 --0 -0 0 --0.054398123 -2.8788509 0.59799647 --0.074033201 -2.9559598 0.61320567 --0.09232413 -2.9603541 0.61416829 --0.15288396 -4.0834937 0.83479846 --0.17802295 -4.0844393 0.8351835 --0.20313028 -4.0842505 0.83537602 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.3976498 -3.6839237 0.80611271 --1.4188116 -3.6716177 0.80534261 --1.4474266 -3.6783645 0.80861551 --1.4747168 -3.6812546 0.81111825 --1.4917152 -3.6585083 0.80823046 --1.4994582 -3.6139424 0.80072206 --1.5132031 -3.5847871 0.79648662 --1.5394323 -3.5853522 0.79860431 --1.5782995 -3.6145036 0.8068828 --1.5793295 -3.5572236 0.79667914 --1.6205164 -3.5903919 0.80592018 --1.6462011 -3.588407 0.80765289 --1.6656988 -3.5729032 0.80649775 --1.6674136 -3.5200536 0.79725671 --3.9383912 -8.1804905 1.8143502 --1.6807317 -3.4385049 0.78397268 --1.6223371 -3.268183 0.74893367 --1.6335201 -3.2406447 0.74508321 --1.6524788 -3.2288139 0.74469817 --1.6736175 -3.2212255 0.74527574 --1.7130466 -3.2482126 0.75355422 --4.6946917 -8.7667761 1.9841546 --4.6710677 -8.5955505 1.9523885 --4.7673225 -8.6457796 1.9701005 --1.9590058 -3.5031981 0.82055181 --1.9223312 -3.3887067 0.79744923 --1.9283978 -3.351336 0.79167354 --1.9553583 -3.3504562 0.79417634 --2.0483892 -3.4608212 0.822092 --4.5401993 -7.5618076 1.7635244 --5.0703621 -8.3283405 1.9460353 --4.6749253 -7.5739908 1.7793112 --4.7041292 -7.517714 1.772958 --4.6755147 -7.3710504 1.7456199 --5.1012416 -7.93399 1.8836582 --5.0935626 -7.8162231 1.8634434 --0 -0 0 --5.1940093 -7.760468 1.8651761 --5.2327147 -7.7154589 1.8620957 --5.372788 -7.8182535 1.8942468 --5.5182419 -7.9252515 1.9277457 --5.6697335 -8.0371675 1.9627846 --5.7035341 -7.9806738 1.9575865 --5.6954155 -7.8668437 1.9385269 --5.7046905 -7.7787366 1.9256279 --5.730073 -7.7136559 1.9183121 --5.9348469 -7.8876934 1.9697155 --6.0140672 -7.8917112 1.9797266 --5.9622335 -7.7249432 1.9475754 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.6291275 -9.3804913 2.6704955 --9.715497 -9.3491259 2.6783888 --9.7193317 -9.238636 2.6639497 --0 -0 0 --9.6607199 -8.9598694 2.6181295 --9.5816441 -8.7778063 2.5825129 --10.451052 -9.4568548 2.7983301 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.515502 -8.0936995 2.4839416 --9.5687418 -8.0383167 2.4849043 --10.399595 -8.6278725 2.6841645 --10.393128 -8.5153952 2.6691477 --9.8157835 -7.9422927 2.5103171 --9.8091316 -7.8378158 2.4964557 --11.125926 -8.7784758 2.8135393 --11.361503 -8.8517551 2.8587818 --11.264705 -8.6658115 2.8214326 --11.355176 -8.6250162 2.8306737 --10.278115 -7.7080717 2.5536346 --10.400933 -7.700911 2.5721166 --11.118252 -8.1267805 2.7349904 --11.075593 -7.9918089 2.7126577 --11.124421 -7.9236999 2.7126577 --11.231435 -7.8964877 2.7267118 --11.432861 -7.9337068 2.7632911 --11.085403 -7.5922933 2.6691477 --0 -0 0 --11.050379 -7.3707528 2.6391144 --0 -0 0 --11.083209 -7.1977201 2.6258304 --11.092461 -7.1073475 2.6177444 --11.174849 -7.0637913 2.6267929 --16.404156 -10.228343 3.8258197 --16.418961 -10.098197 3.814846 --16.589685 -10.063417 3.8398738 --16.4608 -9.8475924 3.7963638 --0 -0 0 --16.609245 -9.6616259 3.8029096 --16.318346 -9.3589029 3.723783 --16.508726 -9.3339338 3.7538166 --16.448252 -9.1670227 3.7274411 --16.558378 -9.0956869 3.7395699 --0 -0 0 --7.0337224 -3.7528515 1.5971855 --7.0974436 -3.7310774 1.606234 --7.1393752 -3.6973834 1.6104695 --6.6216784 -3.37801 1.4914908 --6.6370192 -3.3346741 1.4903357 --7.1446509 -3.5348923 1.596993 --7.0029902 -3.4115071 1.5613763 --7.0273304 -3.3701701 1.5621464 --7.2848272 -3.4387975 1.6135498 --7.0726085 -3.2857468 1.563109 --7.3148751 -3.3438406 1.611047 --7.34868 -3.3049297 1.6139349 --0 -0 0 --7.2402029 -3.1499298 1.5821687 --7.2693191 -3.1096892 1.5842865 --7.5895 -3.1916573 1.6483963 --7.2361917 -2.9910216 1.5692698 --6.8234406 -2.7715919 1.4780143 --7.7791243 -3.1041343 1.676312 --7.3978343 -2.8995593 1.5919874 --6.9777079 -2.6856923 1.4999619 --7.3998113 -2.7960763 1.5850565 --7.1656389 -2.657505 1.5324981 --7.1882653 -2.6158354 1.5338458 --8.1986475 -2.9265027 1.7409993 --7.3615379 -2.5770123 1.5633016 --8.2283735 -2.8237619 1.7398442 --8.1274166 -2.7335083 1.7153939 --8.2316484 -2.7124441 1.7334911 --22.478064 -7.2521124 4.6669483 --21.552715 -6.8078952 4.4674954 --21.623144 -6.684505 4.4734635 --0 -0 0 --12.850449 -3.8009193 2.6622169 --12.892384 -3.7274482 2.6660674 --0 -0 0 --0 -0 0 --12.266141 -3.3030555 2.5253339 --12.377292 -3.2516577 2.5438159 --12.559566 -3.2172759 2.5767372 --12.127777 -3.0275366 2.4854817 --12.314901 -2.9940825 2.5195582 --13.877181 -3.2837138 2.8308661 --13.856903 -3.1892624 2.8227804 --12.756728 -2.8538415 2.5977221 --12.796055 -2.780304 2.6021502 --14.326144 -3.0206845 2.9055648 --0 -0 0 --17.780355 -3.5214019 3.5892103 --12.848867 -2.4632196 2.5998399 --17.888805 -3.3152783 3.6024942 --12.340092 -2.2090931 2.4926052 --17.648682 -3.0472717 3.5468554 --17.681566 -2.9413385 3.5497432 --16.848526 -2.6966839 3.3807089 --19.048977 -2.928961 3.8142684 --12.960258 -1.9118161 2.6033053 --18.200247 -2.5703037 3.639266 --16.947557 -2.2875047 3.3882172 --12.920258 -1.6635444 2.588866 --12.94191 -1.5856669 2.5911763 --12.31392 -1.4321479 2.4652669 --12.262 -1.3499123 2.4533308 --13.569175 -1.40948 2.7095773 --13.435953 -1.3123746 2.6816616 --18.009323 -1.6471906 3.5811243 --18.051355 -1.5394059 3.5874774 --13.455877 -1.0646857 2.6812766 --13.540452 -0.98780698 2.6966784 --13.482615 -0.90046078 2.6841645 --13.585837 -0.82364583 2.7034166 --13.611212 -0.7413882 2.7074597 --13.658631 -0.65993744 2.7159307 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --22.104933 13.053596 4.7448764 --21.937504 13.136936 4.7262831 --20.871149 12.673018 4.5147147 --0 0 0 --20.53216 12.814661 4.4753613 --0 0 0 --22.256115 14.273046 4.8858619 --0 0 0 --0 0 0 --18.67576 12.468023 4.1545787 --0 0 0 --22.31811 15.29882 4.9994082 --0 0 0 --22.109385 15.557961 4.9950757 --19.377745 13.814364 4.4009876 --0 0 0 --0 0 0 --19.289299 14.294021 4.4396186 --19.465544 14.610491 4.5002728 --0 0 0 --0 0 0 --16.405643 12.792651 3.8514872 --16.854061 13.309397 3.9747818 --16.07305 12.85357 3.8105092 --15.968654 12.931524 3.8045521 --16.61459 13.62423 3.9767675 --16.549599 13.741627 3.9812803 --16.447655 13.828357 3.9771285 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --16.108416 14.769099 4.0442815 --0 0 0 --15.891557 14.933333 4.0356169 --0 0 0 --0 0 0 --14.114628 13.761519 3.6512914 --14.085925 13.90314 3.6657329 --15.950619 15.937958 4.1717281 --14.262076 14.426776 3.7565341 --14.189779 14.530904 3.7608666 --14.187758 14.708307 3.783973 --14.402572 15.115515 3.8652067 --0 0 0 --12.949559 13.928955 3.523845 --0 0 0 --12.730736 14.035093 3.5110281 --12.636502 14.104153 3.5088618 --0 0 0 --0 0 0 --13.979698 16.193384 3.9596181 --13.869864 16.266882 3.9567299 --0 0 0 --0 0 0 --0 0 0 --12.108291 14.927966 3.5610318 --0 0 0 --0 0 0 --12.588271 16.117241 3.7866807 --0 0 0 --12.061206 15.839338 3.6872149 --9.7041101 12.907568 2.9970901 --11.489558 15.479124 3.5713215 --10.473453 14.292663 3.2853792 --0 0 0 --10.293841 14.415309 3.284296 --9.4979782 13.47491 3.0590081 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.0644569 13.736111 3.0537732 --8.6418772 13.272204 2.9400461 --8.830883 13.746182 3.0319302 --9.4593239 14.924952 3.2763531 --9.7701244 15.626538 3.415714 --8.1627932 13.23584 2.8873343 --0 0 0 --10.162426 16.939823 3.6588733 --10.053286 16.993395 3.657068 --8.3598757 14.331028 3.0783236 --8.2198029 14.291677 3.0591886 --8.0383205 14.176715 3.0243485 --0 0 0 --8.0270147 14.57064 3.086447 --7.9355822 14.61616 3.0857248 --8.3366747 15.582118 3.2767141 --9.1527672 17.362679 3.6355863 --8.1294165 15.653571 3.2705765 --8.0820436 15.798601 3.2902532 --7.6220303 15.127634 3.1422274 --7.5002108 15.115967 3.1303132 --7.4232955 15.194401 3.1369925 --0 0 0 --0 0 0 --0 0 0 --17.409882 37.969414 7.6996136 --0 0 0 --6.7417083 15.193022 3.0839198 --0 0 0 --6.5566988 15.279128 3.0848224 --0 0 0 --6.3690834 15.359347 3.0850029 --0 0 0 --6.1867018 15.452785 3.0882523 --6.3538384 16.156813 3.2196701 --6.0370035 15.632139 3.1088314 --6.1523013 16.22621 3.218226 --5.8309956 15.668173 3.1016107 --5.7418332 15.723058 3.1054015 --5.6382837 15.738548 3.1016107 --5.4656377 15.556634 3.0595496 --5.3181844 15.439228 3.0303056 --0 0 0 --0 0 0 --0 0 0 --4.3951669 13.855054 2.7010386 --4.2619448 13.726771 2.671253 --4.1636295 13.706551 2.6624076 --4.1472397 13.960007 2.7060931 --0 0 0 --4.1694989 14.693007 2.8364279 --3.8041937 13.725932 2.6474245 --3.8267732 14.143978 2.7225204 --3.6417458 13.795357 2.6519375 --0 0 0 --3.5078497 13.981153 2.6788347 --0 0 0 --0 0 0 --3.5348995 15.274692 2.9108019 --3.3197737 14.756808 2.80935 --3.3473995 15.317882 2.9109824 --3.0153582 14.216253 2.7004972 --3.0111179 14.638149 2.7761345 --2.6589663 13.340646 2.5299065 --2.5945778 13.447491 2.5468752 --0 0 0 --5.9235001 32.860924 6.1615906 --5.7224317 32.900528 6.1623125 --2.3818302 14.211361 2.6779323 --5.1446919 31.892385 5.9622974 --2.1731997 14.019857 2.6371348 --4.7212415 31.740059 5.9227638 --4.5222368 31.73922 5.9173484 --4.3275361 31.767344 5.9175286 --4.1217566 31.710394 5.9021845 --3.9359264 31.806345 5.9153624 --3.6641123 31.178339 5.7949562 --3.4779599 31.247156 5.8036213 --3.2949047 31.351053 5.8189654 --3.0913429 31.25812 5.7982059 --2.8988528 31.269644 5.7969418 --2.8646481 33.109474 6.1327076 --2.6612806 33.124466 6.1323466 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0.75478524 20.715277 3.8377676 -0.88263041 20.727943 3.841017 -1.0030507 20.583618 3.8155639 -1.1317551 20.621271 3.8236873 -0 0 0 -0 0 0 -1.5979046 21.779955 4.0413933 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -2.1071398 20.204376 3.7615886 -1.5519289 14.04377 2.6264842 -1.6844698 14.431599 2.6999555 -1.7889481 14.550829 2.7239647 -1.9612192 15.182413 2.8429267 -2.0557914 15.180815 2.8449123 -2.1506937 15.180575 2.847259 -2.2386184 15.132066 2.8407605 -2.3402681 15.175398 2.8514111 -2.2541158 14.043934 2.6438141 -0 0 0 -0 0 0 -2.5346437 14.12495 2.6671011 -2.7351515 14.722229 2.7815502 -2.7053752 14.080226 2.6647544 -2.786166 14.035383 2.6595192 -2.8819056 14.065238 2.6683648 -2.9764898 14.086745 2.675766 -3.0647511 14.076867 2.6773906 -0 0 0 -3.7017839 16.052805 3.0568419 -3.7900033 15.986722 3.0487185 -0 0 0 -3.8806803 15.518209 2.9691095 -3.4678721 13.51437 2.5939908 -3.5329592 13.425303 2.5811739 -3.9717824 14.725271 2.8324566 -0 0 0 -4.2568755 15.045476 2.9030395 -4.2465305 14.664785 2.8353448 -4.5627007 15.402339 2.9815655 -4.4256001 14.609687 2.8349838 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -28.322584 15.37766 5.9482169 -28.202198 15.088976 5.9036288 -28.214207 14.873447 5.8870211 -28.223759 14.657888 5.8702326 -28.236111 14.445013 5.8543472 -28.231106 14.224573 5.8352122 -28.177765 13.981569 5.8065095 -28.172001 13.763938 5.7879162 -28.181469 13.555005 5.7727523 -28.18766 13.345634 5.7572279 -28.134396 13.109696 5.7299695 -28.123112 12.895004 5.7115564 -28.132669 12.691057 5.6976566 -28.132694 12.48389 5.6821318 -28.12583 12.274839 5.665524 -28.086731 12.053157 5.6427784 -28.086756 11.849624 5.6281567 -28.065355 11.638256 5.6095629 -28.077034 11.441704 5.5978293 -28.04353 11.227899 5.5774307 -28.059721 11.035096 5.5671411 -28.045244 10.831179 5.551075 -28.059673 10.639363 5.540966 -28.058979 10.442634 5.5281491 -27.999649 10.225394 5.5041399 -27.986862 10.026528 5.4895177 -27.994965 9.836031 5.4792285 -27.993414 9.6429291 5.4673142 -27.984026 9.4480143 5.4541359 -27.98918 9.2588301 5.4440269 -27.948153 9.0553865 5.4252529 -27.9685 8.8727245 5.4185739 -27.943512 8.676445 5.4034104 -27.949169 8.4905291 5.3943844 -27.945112 8.3023481 5.3837337 -27.923744 8.1098747 5.3700142 -27.926615 7.9252272 5.3611689 -27.920692 7.7387481 5.3508792 -27.907837 7.5510993 5.3395066 -27.89278 7.3636494 5.3279533 -27.878382 7.1771593 5.316761 -27.867517 6.9923205 5.3064713 -27.855436 6.8078861 5.2961817 -27.845972 6.6247745 5.2866144 -27.847767 6.4449186 5.2793937 -27.843607 6.2642112 5.2712703 -27.844044 6.0850577 5.2642298 -27.824089 5.9020534 5.2535791 -27.799086 5.71873 5.2422066 -27.792175 5.539782 5.2344441 -27.779287 5.3602028 5.2257795 -27.775879 5.1829753 5.2191 -27.764568 5.0047703 5.2111573 -27.777311 4.8312821 5.2079082 -27.7589 4.6527848 5.1990623 -27.757797 4.4776726 5.1936469 -27.750731 4.3019953 5.1873288 -27.741581 4.1264291 5.18083 -27.74106 3.9525247 5.1761365 -27.731655 3.77772 5.1699991 -27.728954 3.6041942 5.1653056 -27.708572 3.4287901 5.1575432 -27.699785 3.2552645 5.1521277 -27.701641 3.0832818 5.1488781 -27.690693 2.9101653 5.1434627 -27.687473 2.7381704 5.1396718 -27.67927 2.5659616 5.135159 -27.660196 2.3931088 5.1288404 -27.656712 2.221926 5.1255913 -27.652168 2.0508759 5.1223421 -27.64068 1.879565 5.1180096 -27.624207 1.7082294 5.1129551 -27.620419 1.5379326 5.1104279 -27.620495 1.3679899 5.1088028 -27.613628 1.1978484 5.1060953 -27.607681 1.0279158 5.1037483 -27.602654 0.85816264 5.1017628 -27.587734 0.68828887 5.0981522 -27.575705 0.51870453 5.095264 -27.566566 0.34934372 5.0930977 -27.568192 0.18019187 5.0930977 -27.568777 0.011033243 5.0930977 -27.558491 -0.15806952 5.0912929 -27.547167 -0.32704565 5.0894876 -27.531857 -0.49583566 5.0871406 -27.519447 -0.66454506 5.085516 -27.514851 -0.83338869 5.085516 -27.52298 -1.0027021 5.0880432 -27.543825 -1.1727322 5.0930977 -27.51548 -1.3407109 5.0893068 -27.521467 -1.5103257 5.0920148 -27.51659 -1.6794653 5.0929174 -27.493992 -1.8474813 5.0907512 -27.476252 -2.0157146 5.0896678 -27.464348 -2.1843457 5.0898485 -27.461206 -2.3537467 5.0918341 -27.459961 -2.5234609 5.0943613 -27.43515 -2.6910405 5.0927367 -27.424969 -2.8600428 5.0940003 -27.431345 -3.0309656 5.0985136 -27.429815 -3.2012763 5.1017628 -27.417467 -3.3704822 5.1032071 -27.405048 -3.539783 5.1048317 -27.375015 -3.7068148 5.1033874 -27.355652 -3.8752668 5.1041093 -27.338169 -4.0440521 5.1053729 -27.30798 -4.2109704 5.1044707 -18.099442 -2.904928 3.3976619 -17.999781 -3.0023379 3.3824985 -19.395025 -3.3574755 3.6458759 -19.067167 -3.4213567 3.5886512 -18.734432 -3.4804447 3.530524 -0 -0 0 -19.735138 -3.9174616 3.7260263 -18.686466 -3.8286426 3.5341344 -19.707712 -4.1640234 3.7301784 -0 -0 0 -18.517811 -4.1506553 3.516263 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9501181 -2.2495515 1.5496875 -7.941834 -2.2999315 1.5507706 -0 -0 0 -0 -0 0 -0 -0 0 -8.0686769 -2.5528789 1.5865134 -7.9602036 -2.5724013 1.568642 -7.9638853 -2.6276667 1.572433 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -19.945431 -7.2660003 3.929291 -0 -0 0 -21.082916 -7.9747462 4.1702838 -20.999628 -8.0908747 4.1636047 -0 -0 0 -20.373552 -8.1381817 4.0598063 -19.020294 -7.7333145 3.8016639 -20.190353 -8.3537416 4.0435596 -0 -0 0 -18.819572 -8.0584898 3.7906523 -18.74362 -8.162425 3.7854171 -19.053825 -8.4369631 3.8578053 -19.242962 -8.6623173 3.9063649 -19.284256 -8.8236036 3.9254999 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -3.9597981 -2.1462228 0.8599239 -3.9405215 -2.1671619 0.85866022 -4.1564894 -2.319242 0.90685886 -3.8656945 -2.188226 0.84855115 -3.7575116 -2.1575489 0.82851356 -3.7476022 -2.1825435 0.82923561 -3.7341399 -2.2054973 0.82923561 -4.3205123 -2.5876415 0.95758474 -3.7025902 -2.2486026 0.82833302 -3.7465167 -2.3068569 0.84078884 -3.2883892 -2.0527606 0.74475265 -3.2316785 -2.0450284 0.73518515 -3.2198975 -2.0653501 0.73536569 -3.2112877 -2.0877483 0.73626828 -3.1910245 -2.1025434 0.73464358 -3.3359447 -2.2274816 0.7694838 -3.3433957 -2.2622375 0.77417731 -3.3221505 -2.2777047 0.77255261 -3.3105357 -2.2997293 0.77309418 -3.2971668 -2.3205652 0.77327472 -4.0621414 -2.8962772 0.94891983 -4.3249722 -3.1238446 1.0124626 -2.9736712 -2.1758661 0.70955145 -2.9610546 -2.1946568 0.70973194 -2.9200001 -2.1921194 0.70341378 -4.4819093 -3.4076154 1.0666183 -2.8663819 -2.207386 0.69727612 -2.8341682 -2.210417 0.69294369 -2.800482 -2.2119172 0.68825018 -3.4659157 -2.7720788 0.8478291 -3.5459177 -2.8719032 0.87075502 -3.062 -2.5113053 0.76009679 -4.2330837 -3.5152376 1.0431508 -3.6257107 -3.0487161 0.90270692 -3.606936 -3.0709057 0.90270692 -4.1706429 -3.5951278 1.0438728 -4.0877361 -3.5676219 1.0290704 -3.2726502 -2.8919156 0.83483171 -3.9498129 -3.5335817 1.0059639 -3.5350978 -3.20189 0.90866405 -3.4820354 -3.192945 0.90036017 -3.4263337 -3.1807942 0.89133424 -3.2849002 -3.0872576 0.86064595 -3.3478477 -3.1853158 0.88140565 -3.9998569 -3.8525963 1.0525378 -2.4605813 -2.3994794 0.66406059 -2.4549124 -2.4235141 0.66640735 -2.4942665 -2.4927573 0.68048787 -2.4733922 -2.5024192 0.67904371 -2.4875407 -2.547807 0.68680602 -2.5182955 -2.6111588 0.6990813 -4.1197886 -4.324131 1.129439 -2.4590979 -2.6132169 0.69186056 -3.10202 -3.3370714 0.8694914 -4.1392903 -4.5078955 1.1565168 -2.5381203 -2.7986395 0.72670072 -0 -0 0 -3.3770494 -3.8165646 0.9685964 -2.2524989 -2.5775473 0.66153336 -3.6596911 -4.2396488 1.0612028 -3.3611095 -3.9424436 0.98412102 -3.3748698 -4.0081329 0.9949522 -3.4319746 -4.1270723 1.0184197 -3.2036939 -3.9010358 0.95975095 -1.6449211 -2.0285172 0.51260507 -1.6367477 -2.0439458 0.51386869 -1.6241755 -2.0539503 0.51386869 -1.6145694 -2.0677531 0.51477128 -1.7862597 -2.3167262 0.57019067 -1.8178942 -2.3878965 0.58409065 -1.8168029 -2.4170876 0.58824259 -2.1706829 -2.9249547 0.70178908 -2.1387415 -2.919178 0.69745666 -2.1271312 -2.9410121 0.69944239 -2.1039009 -2.9468048 0.69781768 -1.5224984 -2.1605639 0.51838166 -1.4968544 -2.1521027 0.51441026 -1.5576721 -2.2690847 0.53841931 -1.7031869 -2.5139072 0.59058934 -1.7074139 -2.5537434 0.59708798 -1.9490459 -2.9541101 0.68283463 -1.5745091 -2.4187241 0.56296986 -1.9487993 -3.0340762 0.6951099 -1.952261 -3.0808682 0.70269173 -1.914027 -3.0619323 0.6960125 -1.8972685 -3.0769675 0.69673455 -1.1852036 -1.9490947 0.45195061 -1.8629086 -3.1059222 0.69799823 -1.8157699 -3.0698893 0.68788916 -1.8003685 -3.08692 0.68915278 -1.1198494 -1.9477531 0.44563243 -1.0976889 -1.9366202 0.44184154 -1.1021019 -1.9725099 0.44797918 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -1.5320383 -2.9507058 0.64348143 -1.5416784 -3.0143399 0.65467364 -1.4965984 -2.9710407 0.64384246 -1.5806429 -3.186337 0.68608397 -0 -0 0 -1.4877031 -3.0938122 0.66333854 -0.9594034 -2.0272362 0.44491038 -0.96065587 -2.0625052 0.4508675 -1.4157456 -3.0884855 0.65683985 -1.3789718 -3.0576656 0.64889699 -1.3741479 -3.0975351 0.65521514 -1.3677057 -3.1347551 0.66099179 -1.0167961 -2.3702934 0.50664788 -1.3692803 -3.2464557 0.6799463 -0.89796042 -2.1663587 0.46368435 -0.88799167 -2.1800253 0.46530902 -0 -0 0 -1.1801201 -3.0017376 0.62524897 -1.3679187 -3.542918 0.73031116 -0.83596736 -2.2057595 0.46621162 -0.8227604 -2.2117691 0.46639213 -1.4613956 -4.0026464 0.81533563 -1.3671432 -3.8170912 0.77742666 -1.1849091 -3.3734932 0.6895138 -0.89349049 -2.5949011 0.53697515 -1.3447912 -3.9841878 0.80504608 -1.3274244 -4.0138416 0.80919802 -0.97048563 -2.9964073 0.61134905 -0.90538478 -2.8551147 0.58300751 -0.93626714 -3.0165451 0.61297369 -0.75391626 -2.4829822 0.50953621 -0.73250401 -2.466819 0.50556481 -0.86028296 -2.9633718 0.59961528 -0.84745455 -2.9875185 0.60322565 -0.86956698 -3.1386287 0.63102561 -0.81972086 -3.0309231 0.6095438 -0.79960161 -3.03019 0.60846072 -0.7751081 -3.0121789 0.60412824 -0.74296623 -2.9625003 0.59383863 -0.71333194 -2.9201865 0.58499324 -0.70701116 -2.9733083 0.59419972 -0.68697971 -2.9699247 0.59275556 -0.67241395 -2.990397 0.59582436 -0.92727238 -4.2445846 0.83067977 -0.88141221 -4.1568646 0.81316942 -0.66145527 -3.2171042 0.63608015 -0.65920097 -3.3088803 0.65250736 -0.80605316 -4.1791444 0.81443304 -0.77913219 -4.1772437 0.81316942 -0.76133883 -4.2255039 0.82129276 -1.4650716 -8.4249887 1.6027602 -1.5138397 -9.0333023 1.714321 -1.3133252 -8.14326 1.5471603 -0.43875948 -2.8326023 0.55935949 -0.4356983 -2.931555 0.57723087 -0.39966476 -2.8075876 0.55376339 -0.36092088 -2.6521068 0.52451932 -0.34210524 -2.6347642 0.52090895 -0.32895228 -2.6612167 0.52542192 -0.33707225 -2.8712537 0.56387246 -0.3184689 -2.86447 0.56224781 -0.31456143 -2.9964685 0.58625686 -0.30662528 -3.1040521 0.60575294 -0.29165962 -3.1499467 0.61387628 -0.27385274 -3.1693153 0.61712563 -0.29087606 -3.6248665 0.70070601 -0.20059578 -2.7094638 0.53192061 -0.25511476 -3.7567141 0.72435403 -0 -0 0 -0.20636949 -3.7124233 0.71568906 -0.13520984 -2.7371473 0.53625304 -0.12421154 -2.8715653 0.56080365 -0.10596725 -2.8555644 0.55773485 -0.088780195 -2.8669748 0.55972052 -0.071285278 -2.8713987 0.56044263 -0.053646855 -2.8707986 0.56026208 -0 -0 0 -0 -0 0 -0 -0 0 --0 -0 0 --0.034847755 -2.9055159 0.5665803 --0.052975852 -2.9219654 0.5696491 --0.098953113 -4.0838284 0.7830227 --0.12487228 -4.1116548 0.78825778 --0.14866677 -4.0714946 0.78103703 --0.17657398 -4.1392932 0.79367334 --0.19967186 -4.0909767 0.78500843 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0.28134209 -2.6943617 0.53047645 --0.29927316 -2.7052939 0.5328232 --0.31757694 -2.7180607 0.53553098 --0.33244875 -2.7014177 0.5328232 --0.34876609 -2.697376 0.53246218 --0.36649802 -2.7039573 0.53408682 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.3981568 -3.4993386 0.72489554 --1.4125637 -3.473382 0.72146571 --1.4522743 -3.5091834 0.73031116 --0 -0 0 --1.5072296 -3.5191269 0.73590726 --1.54136 -3.5386696 0.74168384 --1.5606546 -3.5237491 0.74060071 --1.5883024 -3.5275602 0.74330848 --1.6307873 -3.5633626 0.75251502 --1.652621 -3.5532892 0.75251502 --1.6550649 -3.5021737 0.74421114 --3.9382207 -8.203969 1.7034899 --4.0764179 -8.3600044 1.7403158 --1.6262821 -3.2833719 0.70576054 --1.6327002 -3.2460907 0.70016444 --1.654376 -3.2395155 0.70088649 --1.6710539 -3.2231908 0.69962287 --1.7004167 -3.2311563 0.70341378 --4.2590551 -7.9752455 1.6926587 --4.6340613 -8.5508394 1.8183 --1.8994056 -3.4535625 0.75666696 --1.942603 -3.4813547 0.76497084 --1.9140297 -3.3812022 0.74637735 --1.9357197 -3.3711004 0.74673837 --2.0068493 -3.445858 0.76515132 --2.0529609 -3.4758258 0.77417731 --5.0151362 -8.3743525 1.8247987 --5.0674472 -8.3451042 1.8251598 --0 -0 0 --4.9997067 -8.0102749 1.7663105 --5.040349 -7.9661479 1.7634223 --0 -0 0 --5.1168218 -7.8715324 1.756382 --5.1693525 -7.846559 1.7578261 --5.2294154 -7.8326898 1.7617975 --5.3402042 -7.8933277 1.7823768 --5.3957653 -7.8709588 1.7847235 --5.4473257 -7.8425498 1.7858065 --5.5400591 -7.8725247 1.8000675 --5.6876035 -7.9777398 1.8314779 --5.6944103 -7.8844824 1.8183 --5.7200332 -7.8184342 1.8112597 --5.7626281 -7.7760773 1.8096352 --5.9129663 -7.8774486 1.8410454 --5.9147615 -7.7799444 1.826965 --0 -0 0 --5.9989018 -7.6928134 1.8237156 --6.0411143 -7.6496849 1.8222715 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.6610775 -9.2052031 2.48243 --9.7016211 -9.1309195 2.4784586 --9.7978039 -9.1087246 2.4885676 --9.7368746 -8.9413233 2.4595041 --9.642211 -8.7459412 2.4224975 --10.401868 -9.3193302 2.596518 --10.486107 -9.2794485 2.6031973 --0 -0 0 --9.3893738 -8.1055984 2.3098536 --10.700041 -9.1231518 2.6140285 --9.5754051 -8.0632601 2.3307939 --9.5271502 -7.9232216 2.3075068 --10.407844 -8.5482082 2.5051754 --10.998626 -8.9210119 2.6324413 --10.911908 -8.7402134 2.5992258 --10.21706 -8.0812101 2.4241223 --11.128413 -8.6916227 2.6248596 --10.093489 -7.7840295 2.3726742 --10.166883 -7.7416148 2.3786314 --10.387935 -7.8097138 2.4185262 --10.348783 -7.6813412 2.398669 --11.080383 -8.1194315 2.5544572 --11.078993 -8.0143948 2.5429039 --11.250424 -8.03372 2.5705233 --11.176507 -7.8778348 2.5429039 --0 -0 0 --10.921257 -7.4990053 2.4647391 --11.002076 -7.4555798 2.4725015 --0 -0 0 --11.034453 -7.2815413 2.4596846 --11.055021 -7.1981335 2.4544494 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.516806 -9.7713232 3.5554357 --16.65546 -9.7158871 3.5722241 --16.59881 -9.546814 3.5476735 --16.448311 -9.3264084 3.5036268 --16.536135 -9.2425833 3.5101254 --16.564106 -9.1252832 3.5041683 --0 -0 0 --16.683514 -8.9259691 3.5059736 --17.071205 -8.9991083 3.5751123 --17.123482 -8.8928318 3.5745709 --16.267941 -8.322156 3.3870113 --6.6443696 -3.3475056 1.3987736 --7.3097243 -3.6266975 1.5309136 --7.0022082 -3.4207249 1.4635799 --7.0257244 -3.3789747 1.4641215 --7.2303405 -3.4229283 1.5014889 --18.79384 -8.7571621 3.8386703 --19.02335 -8.7224426 3.8742325 --19.088167 -8.6108112 3.8765793 --17.53858 -7.7825861 3.5548942 --17.462503 -7.6209245 3.530163 --17.614685 -7.5590167 3.5512838 --20.77087 -8.7629862 4.1708255 --7.4068489 -3.071188 1.5049188 --7.6459775 -3.1155107 1.5486044 --6.9463396 -2.7808137 1.4065359 --6.9889007 -2.748219 1.4115903 --7.9470057 -3.0688605 1.5968031 --7.1738458 -2.7197874 1.4413761 --7.204226 -2.6808643 1.4440838 --8.1647511 -2.981447 1.6285744 --8.1134453 -2.9064126 1.6150354 --8.0800886 -2.8386419 1.6051069 --8.2545137 -2.8431492 1.6356146 --7.2224979 -2.438163 1.43235 --22.538584 -7.4556904 4.390337 --21.624836 -7.0064964 4.2053046 --23.118702 -7.3341031 4.4847484 --0 -0 0 --0 -0 0 --0 -0 0 --12.9547 -3.7622046 2.5091467 --0 -0 0 --0 -0 0 --12.660972 -3.4254904 2.4405496 --12.704576 -3.3537652 2.4448819 --12.664907 -3.2602987 2.4335093 --12.636019 -3.1703184 2.4243028 --16.910793 -4.1328492 3.2283351 --16.954971 -4.0335617 3.2319455 --17.942434 -4.1523442 3.4133673 --12.758956 -2.870271 2.4335093 --13.989931 -3.057169 2.661505 --14.05461 -2.9810681 2.6701698 --18.308683 -3.7662604 3.4639125 --0 -0 0 --14.13897 -2.7280135 2.676127 --14.371058 -2.6814437 2.7163827 --12.469694 -2.2475345 2.3587744 --12.558833 -2.1841269 2.3728549 --12.579759 -2.1083272 2.374299 --12.607023 -2.0334492 2.3770068 --16.757868 -2.597693 3.1456573 --12.877163 -1.9152035 2.4226782 --17.055286 -2.4298704 3.1951196 --12.58686 -1.7144163 2.3647316 --12.52594 -1.6278967 2.3515537 --0 -0 0 --0 -0 0 --17.862766 -1.9880425 3.331953 --17.904953 -1.8815885 3.3375492 --0 -0 0 --0 -0 0 --20.598967 -1.7820833 3.8280196 --25.183134 -2.0231645 4.6701417 --19.674702 -1.4590977 3.6541798 --19.836367 -1.3487604 3.6823406 --19.092291 -1.1805097 3.5440631 --0 -0 0 --24.665535 -1.2215942 4.5658016 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --22.218649 13.337729 4.4677916 --21.749096 13.238049 4.3902073 --0 0 0 --20.540514 12.850427 4.1793804 --22.339108 14.167235 4.5598807 --0 0 0 --19.238483 12.534328 3.9624817 --18.988485 12.538073 3.927063 --18.875971 12.630774 3.9198105 --21.026838 14.257747 4.3805933 --22.2875 15.313128 4.6605716 --0 0 0 --21.134573 14.905983 4.4588523 --19.455629 13.901275 4.1250715 --0 0 0 --20.837545 15.278487 4.4548044 --19.740065 14.660809 4.240942 --0 0 0 --20.577875 15.678567 4.4602017 --19.611223 15.133081 4.2721443 --19.734674 15.422476 4.3192005 --20.029203 15.851587 4.4042063 --16.174465 12.96277 3.5802951 --16.016562 12.998412 3.5630915 --15.909851 13.074538 3.5571885 --15.833874 13.175696 3.5582004 --16.281862 13.718478 3.6766007 --15.617757 13.323586 3.5462253 --0 0 0 --0 0 0 --0 0 0 --35.261654 31.611563 8.1368523 --0 0 0 --0 0 0 --15.84892 14.74256 3.7373188 --0 0 0 --15.741717 15.00736 3.7550282 --15.646501 15.100928 3.7543535 --14.251448 13.92429 3.442836 --14.127902 13.97404 3.4337282 --14.07811 14.096733 3.4424987 --15.572292 15.785621 3.8277214 --14.130367 14.500697 3.4979882 --14.587942 15.155271 3.6329174 --13.372724 14.064371 3.3542888 --13.303719 14.164842 3.3586738 --13.182367 14.20935 3.3500721 --13.716867 14.968743 3.507602 --13.33308 14.730338 3.4332223 --0 0 0 --0 0 0 --14.071623 16.133614 3.6966715 --13.943417 16.186045 3.6890817 --0 0 0 --13.765931 16.382347 3.6949847 --0 0 0 --0 0 0 --12.256024 15.142687 3.3669384 --12.13765 15.186034 3.3600233 --12.078436 15.303554 3.3694682 --12.473236 16.00481 3.505578 --10.691784 13.893707 3.0333261 --10.599773 13.950416 3.0314708 --0 0 0 --11.679576 15.769832 3.3913941 --9.7350397 13.314032 2.8557255 --9.6768131 13.406284 2.8626406 --10.192023 14.304319 3.0388918 --10.078547 14.330304 3.0313022 --9.3665857 13.493059 2.8440878 --9.2797184 13.544585 2.8429074 --0 0 0 --0 0 0 --0 0 0 --8.9681473 13.804612 2.8503284 --8.8338137 13.782201 2.8346429 --9.4269876 14.908382 3.0517101 --8.3609638 13.40365 2.7366507 --8.1933451 13.316177 2.7088215 --9.5431499 15.725716 3.1810734 --9.8660603 16.485147 3.3208938 --9.8203268 16.639603 3.3396151 --8.3260851 14.307261 2.866014 --8.2018461 14.294812 2.853533 --8.6142416 15.229437 3.0274229 --8.0363674 14.413325 2.8572435 --8.0080585 14.572075 2.8786635 --9.108285 16.818167 3.3062203 --8.2550669 15.468431 3.0336633 --8.9324036 16.988001 3.3176892 --8.8710632 17.125637 3.3337121 --7.6737576 15.039146 2.9225154 --0 0 0 --18.303068 36.988628 7.0951991 --0 0 0 --7.1442285 14.893217 2.8599422 --0 0 0 --8.0465517 17.316439 3.300823 --0 0 0 --0 0 0 --7.7463884 17.506685 3.3092561 --6.6580615 15.299735 2.8886147 --16.395626 38.321285 7.1656995 --6.4881511 15.423901 2.8967104 --0 0 0 --6.2857757 15.47131 2.8909757 --6.4935927 16.268509 3.0307961 --6.4404116 16.427347 3.0527222 --6.0233035 15.645101 2.9021075 --5.9425244 15.722334 2.9095285 --5.8336024 15.725231 2.9034567 --5.7407122 15.770918 2.9053121 --5.6448298 15.808631 2.905818 --4.6667237 13.32648 2.449589 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.618381 14.610932 2.6555245 --4.5114603 14.583437 2.6455734 --4.1732688 13.78911 2.4986694 --0 0 0 --3.9837501 13.770163 2.486357 --3.9613667 14.014407 2.5254865 --3.7934926 13.742001 2.4728642 --3.7265351 13.829737 2.484333 --3.9703002 15.103077 2.705617 --3.8988414 15.210224 2.7202904 --3.8042459 15.229079 2.7194471 --3.7125938 15.259796 2.7207963 --0 0 0 --3.5151005 15.260983 2.7132068 --3.2821152 14.659927 2.6040828 --4.1539197 19.104649 3.3789134 --3.0297434 14.356721 2.544208 --2.7646096 13.509792 2.3930874 --2.6799388 13.517799 2.3915694 --3.6576383 19.064346 3.3551321 --2.7794788 14.982074 2.640851 --2.6089542 14.5603 2.564616 --2.5064752 14.500274 2.5514605 --2.3415482 14.059374 2.4723582 --3.0768898 19.203583 3.3613725 --4.9067411 31.879986 5.5527902 --2.1950588 14.863604 2.6044202 --0 0 0 --1.9254075 14.244731 2.4931035 --1.9907489 15.442099 2.6976898 --3.8371549 31.286627 5.4271374 --3.6435163 31.295876 5.4247761 --0 0 0 --3.2584798 31.331367 5.4235954 --3.0656934 31.345867 5.4227524 --2.8715034 31.344456 5.4193792 --2.6718273 31.276043 5.4047055 --2.5020535 31.571888 5.452774 --0 0 0 --0 0 0 --2.186609 35.995701 6.2041607 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.0317845 20.721964 3.5836682 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.9871548 21.374018 3.7066224 -0 0 0 -2.1111374 20.037439 3.481122 -2.2413714 20.089741 3.4924223 -1.6877978 14.3324 2.5028858 -1.7459745 14.082122 2.4615638 -1.8770516 14.414215 2.5207641 -2.0810797 15.249148 2.6669934 -2.1743288 15.23414 2.6666563 -2.2488699 15.093775 2.6447301 -0 0 0 -2.2640588 14.014153 2.4625759 -2.5653329 15.282146 2.6850402 -2.6346874 15.126287 2.660753 -2.5794351 14.2902 2.518234 -2.7730219 14.840905 2.6169009 -2.9921658 15.486527 2.732434 -2.8327703 14.193903 2.5101383 -2.8657033 13.913668 2.4642625 -3.2068653 15.100051 2.6749206 -3.3053582 15.107051 2.6796432 -3.6150792 16.049976 2.8486419 -3.718833 16.050539 2.8526897 -3.8151913 16.018787 2.8511717 -3.8981783 15.932845 2.8402088 -3.8315787 15.254748 2.7248442 -3.4915702 13.549174 2.4276628 -3.5582671 13.465554 2.4166999 -4.0212517 14.847703 2.6656442 -4.1212416 14.855042 2.6713786 -4.223897 14.870245 2.6786311 -4.2911162 14.761704 2.6639576 -4.3585682 14.657626 2.6501274 -4.4650583 14.685302 2.6599097 -4.5580077 14.667041 2.6615963 -4.6819296 14.745893 2.6808238 -4.7878304 14.764705 2.6894255 -4.9238844 14.872598 2.7142186 -5.0301971 14.886927 2.7223144 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -28.26977 15.309267 5.534575 -28.210119 15.053852 5.5048904 -28.242632 14.849284 5.4934216 -28.223806 14.619048 5.4723387 -28.255028 14.416031 5.4612069 -28.218765 14.179993 5.4374261 -28.195694 13.952375 5.416512 -28.171782 13.726008 5.3957663 -28.161264 13.507709 5.3778882 -28.187462 13.30815 5.3672628 -28.130928 13.070987 5.341289 -28.142471 12.866986 5.3284707 -28.135492 12.655656 5.3124475 -28.115265 12.439713 5.2942324 -28.097065 12.226068 5.2766914 -28.1054 12.025136 5.264379 -28.091431 11.815774 5.2481875 -28.081421 11.609297 5.2330084 -28.083635 11.408953 5.2203588 -28.045084 11.19331 5.2004566 -28.05267 10.997277 5.1893249 -28.060747 10.802281 5.1785307 -28.052738 10.602026 5.1650376 -28.035936 10.399535 5.1501956 -28.02512 10.200347 5.1367025 -27.988781 9.9930687 5.1188245 -27.986309 9.7989969 5.1073556 -28.003023 9.6123734 5.099597 -28.012896 9.4240274 5.0908265 -27.977514 9.2214231 5.0741291 -27.964155 9.0271788 5.0616484 -27.968266 8.839385 5.0525403 -27.952293 8.6460581 5.0400596 -27.946325 8.4566851 5.0296025 -27.935308 8.2665939 5.0184708 -27.928692 8.078599 5.0083513 -27.91703 7.889926 4.9975567 -27.894606 7.6990786 4.985076 -27.898491 7.5162387 4.9774861 -27.901186 7.3336415 4.9698963 -27.883596 7.1464009 4.9589334 -27.874323 6.9620414 4.949657 -27.869587 6.7794628 4.9413924 -27.86462 6.5974317 4.9332967 -27.864235 6.4170446 4.9262133 -27.840563 6.2319593 4.9152503 -27.824339 6.0492911 4.9058051 -27.82139 5.8701091 4.89889 -27.815361 5.6907959 4.8916373 -27.800444 5.5102453 4.8830357 -27.806627 5.3343625 4.8783131 -27.79813 5.156096 4.8712296 -27.791405 4.9786558 4.8646517 -27.76898 4.798975 4.8555441 -27.762901 4.6226707 4.849472 -27.772251 4.4492722 4.8462677 -27.758112 4.2724848 4.8391838 -27.7409 4.0957513 4.8317628 -27.733301 3.920907 4.8261967 -27.73144 3.7472343 4.8218117 -27.721649 3.5728505 4.816246 -27.718592 3.3996875 4.8120294 -27.716412 3.2269247 4.8081503 -27.697479 3.0525894 4.8015723 -27.676474 2.8785067 4.794826 -27.664185 2.7057555 4.7897658 -27.665543 2.5346119 4.7872362 -27.658968 2.3629668 4.7835255 -27.652311 2.1915755 4.7799835 -27.645576 2.020427 4.7766104 -27.635817 1.8493118 4.7729001 -27.630903 1.6787511 4.7702012 -27.631824 1.5086962 4.7686834 -27.627764 1.3385026 4.7664909 -27.620684 1.1683325 4.7639608 -27.601723 0.99790823 4.7595758 -27.60437 0.82843989 4.7590694 -27.594152 0.65869486 4.7565398 -27.582891 0.48910645 4.7540097 -27.576504 0.31974933 4.752492 -27.57696 0.15053171 4.7523232 -27.577366 -0.01868017 4.7523232 -27.556032 -0.18774945 4.7487812 -27.547462 -0.3567369 4.7476006 -27.533915 -0.52555084 4.7457452 -27.5282 -0.69443607 4.7454081 -27.516525 -0.86311626 4.7442274 -27.505787 -1.0317533 4.7433844 -27.498938 -1.2005062 4.7433844 -27.49893 -1.3696065 4.7447333 -27.487057 -1.5381457 4.7442274 -27.488907 -1.707508 4.7462516 -27.469061 -1.8755399 4.7447333 -27.494389 -2.0468338 4.7511425 -27.475416 -2.2150223 4.7501307 -27.460325 -2.3834813 4.7499619 -27.437332 -2.5511994 4.7486129 -27.455492 -2.7229099 4.7545156 -27.448071 -2.8923557 4.7562022 -27.411194 -3.0586417 4.7529979 -27.402679 -3.228045 4.7548532 -27.38529 -3.396488 4.7553592 -27.372732 -3.5656033 4.7568769 -18.774715 -2.5624943 3.2758613 -27.385462 -3.9096012 4.7669969 -27.368755 -4.0787244 4.7683458 -27.350033 -4.2476382 4.7695265 -0 -0 0 -18.124453 -3.0426772 3.1782062 -18.047178 -3.1436768 3.1680865 -19.031485 -3.4356506 3.3426511 -18.991636 -3.5489197 3.3394465 -0 -0 0 -18.765902 -3.7456198 3.3079069 -17.949013 -3.6971834 3.1692672 -17.971304 -3.8168743 3.1771944 -18.03228 -3.9456184 3.1920364 -25.662777 -5.7809763 4.53475 -0 -0 0 -0 -0 0 -18.104269 -4.4296103 3.2227328 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.9478431 -2.2570186 1.4472342 -7.932898 -2.3054678 1.4470655 -0 -0 0 -31.629576 -9.618372 5.6904178 -0 -0 0 -7.9744492 -2.5313807 1.4651122 -7.9709554 -2.5842168 1.4673048 -7.9334278 -2.6259503 1.4634256 -0 -0 0 -24.72106 -8.5232706 4.5079327 -0 -0 0 -20.59716 -7.3852663 3.7776289 -19.891394 -7.2702169 3.6573732 -19.917532 -7.4186263 3.6703603 -0 -0 0 -0 -0 0 -20.772738 -8.1757097 3.8533578 -20.408358 -8.1772518 3.795507 -19.124775 -7.7993932 3.5676453 -20.39933 -8.4656191 3.8127105 -20.382416 -8.6055822 3.8192883 -18.864765 -8.1014719 3.5465627 -0 -0 0 -18.74411 -8.3235588 3.5428522 -19.225409 -8.6789379 3.6428685 -19.238087 -8.8271608 3.6553493 -19.171947 -8.9396219 3.6531568 -0 -0 0 -19.172707 -9.2280865 3.6744082 -0 -0 0 -0 -0 0 -3.9867043 -2.009022 0.7973817 -3.9725473 -2.032548 0.79704434 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -3.8262239 -2.1388941 0.78355145 -3.8267441 -2.1701145 0.78625005 -3.8680298 -2.2250233 0.79704434 -3.7828004 -2.2069724 0.78287679 -3.7149045 -2.198004 0.77208245 -3.7047281 -2.2227862 0.77275711 -3.717962 -2.2618768 0.77815425 -3.7283382 -2.29966 0.78304547 -3.7158287 -2.3235388 0.78338277 -13.50516 -8.5642862 2.769877 -4.1969414 -2.6967764 0.88710958 -4.1885738 -2.7278585 0.88879615 -4.1972547 -2.7703459 0.89402467 -4.2432528 -2.8382592 0.90701163 -4.2559419 -2.8847108 0.91325206 -4.2519717 -2.9202602 0.91611934 -3.3101707 -2.3031361 0.723508 -3.2355669 -2.280793 0.7108584 -3.0787618 -2.1985965 0.68083662 -3.0532372 -2.2087765 0.6783067 -3.0555243 -2.2391264 0.68167996 -3.0306499 -2.2496045 0.67931867 -2.9907968 -2.2486026 0.67375284 -2.9408791 -2.2394311 0.66599447 -2.9473712 -2.2730911 0.67037964 -2.8844416 -2.2528934 0.65975398 -2.8527875 -2.2564797 0.65587473 -2.7919729 -2.2363374 0.64558643 -2.8769236 -2.3335574 0.66734374 -2.886157 -2.3705676 0.67257226 -4.3557572 -3.6234088 1.00298 -2.9563439 -2.4896464 0.69483554 -2.9402623 -2.5070996 0.69466686 -4.2845945 -3.6997485 1.0021366 -3.9702344 -3.4709442 0.93585271 -3.304646 -2.9247713 0.78861129 -3.9640372 -3.5523024 0.94428575 -4.0370479 -3.6626787 0.96621174 -3.4933872 -3.2085249 0.84511286 -3.4656959 -3.2225146 0.84325761 -2.4140322 -2.2719388 0.60072249 -2.4107471 -2.2969108 0.60325241 -2.3788781 -2.2945461 0.59903586 -2.3816738 -2.3256326 0.60308373 -2.4094038 -2.381794 0.61320341 -3.6727753 -3.6764059 0.92269713 -3.5684707 -3.6160672 0.90279508 -4.2712235 -4.38199 1.0805641 -4.2367373 -4.4003034 1.0787089 -3.6215153 -3.8075802 0.93264812 -2.6352131 -2.8044097 0.69196832 -2.6159449 -2.8183584 0.69146234 -2.9015799 -3.1650236 0.76820326 -3.5931232 -3.9683912 0.94951427 -3.4524319 -3.8602939 0.91966122 -3.4064991 -3.8562832 0.91392672 -2.9137311 -3.3392794 0.79181588 -2.3579795 -2.7357368 0.65148956 -2.595345 -3.0489552 0.71861678 -2.36164 -2.8089921 0.66144061 -1.6608073 -1.999657 0.47827429 -1.6485063 -2.00981 0.47827429 -1.6435841 -2.0290816 0.48029822 -1.6797159 -2.0999579 0.49362248 -1.6551974 -2.0955236 0.4904179 -1.6629076 -2.1320748 0.4961524 -1.6660231 -2.1633303 0.50070626 -1.657488 -2.179791 0.50205553 -2.2526784 -3.001296 0.67560816 -3.2742536 -4.4194965 0.97464484 -2.2255673 -3.0422409 0.67847538 -2.188977 -3.0310624 0.67324686 -1.7242435 -2.4182632 0.54169101 -1.6526749 -2.3481693 0.52482486 -1.4437765 -2.0780942 0.46646798 -1.4610786 -2.1308255 0.47557572 -1.4269991 -2.1087203 0.46916658 -1.745528 -2.6143277 0.57137537 -1.8221325 -2.7657719 0.60021651 -1.9909012 -3.0629048 0.65857333 -1.807201 -2.8177996 0.60628831 -1.9505311 -3.0829399 0.65773004 -1.9279265 -3.0889957 0.65654939 -1.927013 -3.1301508 0.66245258 -2.2902298 -3.7722433 0.78861129 -2.3060124 -3.851352 0.80159819 -2.2793322 -3.8603354 0.80058622 -2.2496541 -3.8640251 0.79856229 -1.1292011 -1.9660244 0.42143539 -1.1248801 -1.9866437 0.42413399 -1.0997106 -1.9702631 0.4195801 -1.1080106 -2.0141199 0.42683256 -0 -0 0 -1.1175482 -2.091917 0.4393135 -1.6849127 -3.2023866 0.6526702 -1.6892569 -3.259053 0.66160923 -1.6553421 -3.2421384 0.65638071 -0.9955101 -1.9786743 0.41249633 -0.98990732 -1.997997 0.41502625 -1.4805536 -3.0363529 0.61151683 -1.4474026 -3.0151629 0.60578233 -1.4074144 -2.978529 0.5971806 -0.96175677 -2.0672781 0.423628 -0.9392184 -2.051626 0.4195801 -0.93793291 -2.0825205 0.42430264 -1.3291084 -3.0013547 0.59515667 -0.97522628 -2.2384863 0.45128846 -0.96728826 -2.2580216 0.45381838 -0.95074022 -2.2575541 0.45263776 -1.3612369 -3.2899468 0.64271915 -0.91591692 -2.2517002 0.44943318 -1.344874 -3.3668244 0.65385079 -1.5723934 -4.0082207 0.77022719 -0.86440116 -2.2424209 0.44471067 -1.1279728 -2.9816241 0.57896513 -1.4483055 -3.901557 0.74560261 -1.4149004 -3.8844354 0.74088013 -1.3837487 -3.8726215 0.73716956 -1.1619391 -3.3154104 0.63462341 -1.1319749 -3.2945089 0.62956357 -0.88704842 -2.6334131 0.50897068 -1.3305594 -4.0336661 0.7602762 -0.93035668 -2.8786058 0.55113602 -0.77902508 -2.4613218 0.47523838 -0.75400621 -2.4340389 0.46950391 -0 -0 0 -1.1751598 -3.9676688 0.74155474 -1.151888 -3.9785922 0.7422294 -0.88381213 -3.1233702 0.58891618 -0.88114995 -3.1885943 0.59954184 -0.83926409 -3.1111388 0.58486831 -0.83093143 -3.157222 0.59212077 -0.77484232 -3.0190375 0.56682152 -0.75534803 -3.0199099 0.56614691 -0.7335428 -3.0110791 0.56378561 -0.72595215 -3.0615633 0.57188135 -0.71157646 -3.0851707 0.57525462 -0.50663954 -2.258415 0.42953113 -0.48293254 -2.2162116 0.42160407 -0.47868371 -2.2634978 0.42936248 -0.69984496 -3.4155502 0.63006955 -1.655265 -8.3469639 1.4895681 -1.6030896 -8.3521233 1.4887248 -0.7213257 -3.8833544 0.70934045 -0.6872319 -3.8304634 0.6993894 -0.66841441 -3.861804 0.70411193 -0.65134215 -3.9056969 0.71102703 -0.63095027 -3.9320049 0.71490628 -0.40368822 -2.6157506 0.48637003 -0.38935781 -2.6298797 0.48839396 -0.37348971 -2.6341712 0.48873129 -0.35824335 -2.6432509 0.48991191 -0.37174293 -2.8761113 0.52971601 -0.35648751 -2.8979051 0.53308922 -0.33345801 -2.855001 0.52533084 -0.2586188 -2.3367479 0.43577161 -0.24346051 -2.3304477 0.43442231 -0.2281975 -2.3220878 0.43273571 -0.2142148 -2.3263888 0.4332417 -0.19960088 -2.3237312 0.43256703 -0.26527399 -3.3340383 0.60578233 -0.25622839 -3.491909 0.63259947 -0.22401138 -3.3321252 0.60493898 -0.20308375 -3.3255661 0.60358971 -0.18106377 -3.2972233 0.59852988 -0.16035242 -3.2884271 0.59684324 -0.14062974 -3.3001819 0.59869856 -0.11045332 -3.0261586 0.551642 -0.093329854 -3.0750556 0.55990642 -0.07408423 -3.0598042 0.55720782 -0.057696622 -3.1952174 0.58031446 -0 -0 0 -0.017120764 -2.9443417 0.53730577 --0 -0 0 --0 -0 0 --0 -0 0 --0.074673392 -3.9648466 0.71203899 --0.099522702 -3.9850063 0.71558088 --0 -0 0 --0.08727444 -2.3553133 0.43678358 --0.1014235 -2.3478403 0.43560296 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0.19631267 -2.651288 0.48839396 --0.21828285 -2.7207723 0.50053757 --0.23565528 -2.7272375 0.5018869 --0.25256747 -2.7277031 0.50222421 --0.26959154 -2.7290447 0.50273019 --0.28509152 -2.7155762 0.50070626 --0.30393559 -2.7333674 0.50407946 --0.31966329 -2.722641 0.50256151 --0.33429995 -2.7039995 0.49969429 --0.35559744 -2.7380614 0.50593477 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.4003394 -3.4975095 0.67813808 --1.419912 -3.484288 0.67729473 --1.4473102 -3.4900758 0.67999333 --1.469081 -3.4820375 0.68016201 --1.4841948 -3.4584672 0.67746341 --0 -0 0 --1.5301245 -3.448101 0.67898136 --0 -0 0 --1.6344002 -3.5643373 0.70444924 --1.6524905 -3.5462019 0.70293128 --1.6856143 -3.5600455 0.70748514 --4.0259156 -8.3659573 1.622136 --4.0611525 -8.3083344 1.6158955 --1.667124 -3.359798 0.6752708 --1.6557541 -3.2861378 0.66312718 --1.6736404 -3.2715294 0.6622839 --1.6964099 -3.2664461 0.66329587 --1.7417166 -3.3039243 0.67257226 --4.1222672 -7.7013693 1.5281916 --4.5534477 -8.3826523 1.6658193 --1.8636268 -3.3826551 0.69432956 --1.9084066 -3.4141684 0.7027626 --1.920077 -3.3861063 0.69955808 --1.9531102 -3.395618 0.70377457 --2.0166452 -3.4567764 0.71827948 --4.9548154 -8.3713741 1.6980337 --5.0091319 -8.3458843 1.6990457 --5.0182204 -8.2459526 1.6852154 --4.9936585 -8.0933819 1.6607594 --5.0463614 -8.0676022 1.6617714 --5.170207 -8.1538506 1.6855527 --0 -0 0 --0 -0 0 --0 -0 0 --5.5096431 -8.2350368 1.7288986 --5.5490041 -8.1847601 1.7255255 --0 -0 0 --0 -0 0 --5.7276936 -8.1223125 1.7341272 --5.6473365 -7.9049697 1.6958411 --5.7997708 -8.0138874 1.7262001 --5.3359089 -7.2786646 1.5777781 --5.3775311 -7.2418308 1.5769347 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.6492443 -9.2886229 2.3252854 --0 -0 0 --9.7380743 -9.1465702 2.319551 --9.8099108 -9.1013937 2.3232615 --9.8125191 -8.9924202 2.3109493 --9.9449768 -9.0021524 2.3288274 --9.7134323 -8.6847649 2.2630494 --9.7384605 -8.6002102 2.2566402 --9.8036757 -8.5513077 2.2595074 --9.3891954 -8.0889435 2.1540942 --9.9837017 -8.4948645 2.2765422 --10.690684 -8.9838142 2.4229405 --9.6897211 -8.0418921 2.1881638 --9.8250322 -8.0528831 2.2072225 --10.931623 -8.8481379 2.4399753 --11.025747 -8.8128948 2.4487455 --11.002239 -8.6840143 2.4318795 --11.244246 -8.763566 2.4728642 --11.252498 -8.6595449 2.4630818 --11.311698 -8.595108 2.464431 --10.421956 -7.8187628 2.2628808 --11.016299 -8.1594181 2.3792572 --10.316601 -7.5436864 2.2203779 --10.324329 -7.4525552 2.2122822 --10.353807 -7.3776274 2.208909 --10.444033 -7.3457098 2.218354 --10.948033 -7.6001539 2.3139851 --10.956242 -7.5066538 2.3060579 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.520636 -9.6139441 3.3041964 --0 -0 0 --0 -0 0 --16.662083 -9.2899866 3.2977872 --16.54859 -9.0940676 3.2645609 --0 -0 0 --16.613722 -8.8661776 3.2557905 --16.753311 -8.809021 3.2723193 --16.848183 -8.7273645 3.2802463 --16.322805 -8.3286343 3.1690986 --16.405308 -8.2442541 3.1751704 --6.7482843 -3.3403218 1.3219187 --6.9937253 -3.4085026 1.3647587 --7.0225062 -3.3693621 1.3662766 --7.1553574 -3.3792286 1.3875279 --7.266242 -3.377207 1.4045628 --7.1577401 -3.2735448 1.3802755 --7.2675848 -3.269995 1.3971417 --6.9954586 -3.0961335 1.3424953 --6.9302683 -3.0165799 1.3268099 --7.9382463 -3.3973629 1.5109881 --7.814477 -3.2878325 1.4841709 --6.9272323 -2.8647828 1.3161842 --21.324978 -8.663559 3.9720955 --7.8874035 -3.1489167 1.4867009 --7.7368035 -3.0339141 1.4554986 --7.1785073 -2.7643785 1.3497478 --7.2036328 -2.7234159 1.3512658 --7.9613819 -2.9540589 1.4865322 --8.0293751 -2.9233558 1.4956399 --7.1597118 -2.5572195 1.3343996 --0 -0 0 --0 -0 0 --22.639164 -7.6164479 4.1206861 --21.734346 -7.1639433 3.9493263 --0 -0 0 --27.895897 -8.8165159 5.0395536 --0 -0 0 --27.651974 -8.3676262 4.9769802 --27.802038 -8.2271624 4.9946895 --12.97858 -3.7548132 2.3453562 --13.006118 -3.6764476 2.3461995 --29.331244 -8.0955362 5.2400918 --13.015991 -3.5073364 2.3401277 --12.801801 -3.3655252 2.2984684 --12.774469 -3.2746778 2.2900352 --12.754157 -3.1862035 2.2829514 --17.132206 -4.1679888 3.0505295 --17.12101 -4.0541611 3.0441203 --12.779906 -2.9438238 2.2775543 --12.777529 -2.8608317 2.2740123 --17.801464 -3.8706503 3.1507144 --13.943936 -2.9426668 2.4720209 --14.024499 -2.8698924 2.4829838 --17.949944 -3.5582304 3.1647134 --17.927877 -3.4396698 3.1571236 --0 -0 0 --12.620799 -2.2615881 2.2274618 --13.416322 -2.3191955 2.3632343 --12.805114 -2.132761 2.2547851 --12.824772 -2.0552411 2.2559657 --13.263844 -2.0421705 2.3298392 --18.017107 -2.6605167 3.1498711 --17.216202 -2.4344597 3.0087016 --17.289425 -2.3366942 3.0188212 --17.288773 -2.2286749 3.0162911 --13.690062 -1.6796857 2.3935933 --17.893448 -2.0836902 3.1159701 --22.218739 -2.4490011 3.8584177 --23.329424 -2.4265747 4.0469813 --17.528522 -1.7148474 3.0471563 --20.407835 -1.8699977 3.5401535 --20.388481 -1.7421428 3.5349252 --20.022451 -1.5871984 3.4703279 --19.021233 -1.3904996 3.2969439 --0 -0 0 --23.172037 -1.4080368 4.0058279 --0 -0 0 --18.195065 -0.88191104 3.1505458 --24.721447 -1.0458204 4.2674217 --18.635962 -0.6741432 3.2244194 --23.169842 -0.69554317 3.9999247 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --23.522593 -0.5868091 3.7730711 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --34.080421 13.613082 5.8658638 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --21.683092 13.348796 4.0802255 --20.567739 12.836866 3.886704 --22.071825 13.964481 4.1844411 --0 0 0 --22.945465 14.914599 4.3828278 --19.539709 12.872154 3.7521966 --19.137552 12.776306 3.6905146 --19.054708 12.890725 3.6897297 --22.28009 15.272758 4.3264823 --20.911627 14.524123 4.0799112 --0 0 0 --0 0 0 --19.615908 14.166474 3.8790133 --20.737799 15.171143 4.1171088 --21.867098 16.204191 4.3589711 --20.978176 15.745808 4.2021766 --21.712202 16.50598 4.3680744 --20.017265 15.412215 4.048521 --0 0 0 --18.907373 14.930804 3.8623765 --0 0 0 --37.959785 30.739395 7.7962112 --15.980103 13.10396 3.3179114 --15.913074 13.213121 3.3207364 --15.840016 13.317505 3.322463 --15.81591 13.463739 3.3345482 --15.875886 13.683681 3.364526 --15.883153 13.860705 3.383831 --35.712296 31.552368 7.6069274 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --15.699103 14.934933 3.4772172 --15.536033 14.962471 3.4615221 --15.32301 14.939625 3.4346833 --0 0 0 --14.054945 14.043856 3.1912515 --13.901853 14.062407 3.1761842 --13.98298 14.31914 3.2143233 --14.544867 15.078503 3.3631134 --0 0 0 --13.436132 14.275646 3.1491885 --0 0 0 --13.230543 14.407447 3.1422825 --0 0 0 --0 0 0 --14.919446 16.859144 3.6114109 --14.048764 16.072943 3.426208 --14.823732 17.171034 3.6387205 --0 0 0 --0 0 0 --0 0 0 --12.479717 15.194354 3.1584485 --12.399939 15.287516 3.1619015 --0 0 0 --12.557576 15.876168 3.2505791 --12.608868 16.14361 3.2890322 --12.463133 16.160456 3.276947 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --9.7850008 13.526506 2.6868091 --9.6524591 13.517172 2.6733112 --10.00349 14.19205 2.7930653 --9.8914032 14.217492 2.7861593 --9.2695208 13.499601 2.6361136 --9.1815281 13.548866 2.634701 --9.1388483 13.665697 2.6463156 --0 0 0 --0 0 0 --8.8734818 13.812488 2.6427057 --8.7457371 13.799107 2.6299925 --8.424242 13.474009 2.5590503 --8.2724562 13.413647 2.5381758 --8.2639074 13.585654 2.5607769 --8.1590519 13.600535 2.5541849 --9.7394648 16.462957 3.0735378 --8.2816687 14.196969 2.6456876 --8.2736797 14.385348 2.6709569 --8.5423346 15.065565 2.7860024 --8.1182098 14.52459 2.6780198 --9.0954914 16.510031 3.0292773 --8.179697 15.065759 2.758065 --0 0 0 --7.93571 15.054049 2.7381322 --7.7981262 15.015691 2.722594 --7.7251868 15.101063 2.7293429 --0 0 0 --0 0 0 --0 0 0 --6.9502802 14.45039 2.5819654 --17.552656 37.073128 6.5523701 --8.0835028 17.348164 3.0752642 --8.0020142 17.452198 3.0848382 --0 0 0 --0 0 0 --6.8435025 15.681227 2.7527287 --6.6303096 15.450654 2.7056432 --6.6083241 15.663934 2.7354641 --6.6785479 16.105587 2.8045228 --6.3526173 15.589285 2.7089391 --6.2641859 15.646307 2.7120781 --6.1572199 15.656877 2.7073696 --0 0 0 --0 0 0 --5.1965852 13.963604 2.4014709 --5.012218 13.725273 2.355798 --4.9192462 13.731596 2.3517172 --0 0 0 --4.6519384 13.5052 2.3036902 --0 0 0 --0 0 0 --4.7286015 14.594762 2.4717853 --4.633585 14.606557 2.4689603 --4.5570531 14.677156 2.476023 --4.5599232 15.011009 2.5268753 --4.1158566 13.854378 2.330529 --4.0872397 14.073796 2.362704 --4.1979117 14.793122 2.4774356 --3.8276978 13.810728 2.3112237 --3.9918132 14.753911 2.462682 --3.9710422 15.04263 2.5061576 --3.8727579 15.043759 2.5023909 --3.7337472 14.881404 2.4719422 --0 0 0 --3.5033011 14.726258 2.4392962 --3.5003951 15.12561 2.5009782 --3.2789664 14.575437 2.4079061 --3.1397064 14.367581 2.3708653 --2.90065 13.675521 2.2553492 --0 0 0 --2.837451 14.236009 2.3405738 --2.7902796 14.46164 2.3743184 --2.6634455 14.274611 2.3413584 --2.5710773 14.264442 2.3371208 --2.4642098 14.169028 2.3192284 --2.5333128 15.115042 2.469274 --2.4715078 15.322376 2.5001936 --2.3328092 15.049348 2.4538929 --2.2616403 15.205999 2.4768078 --2.1905868 15.376027 2.50192 --4.2595577 31.268377 5.0487738 --1.9156718 14.7397 2.3958209 --3.8777092 31.335938 5.0515985 --0 0 0 --3.5109055 31.543118 5.0774956 --3.3077965 31.473705 5.063056 --3.1223922 31.572033 5.0756121 --2.9230492 31.530611 5.0660381 --2.7343791 31.604036 5.0749846 --2.5416744 31.635971 5.0774956 --2.3479502 31.656879 5.0784373 --0 0 0 --2.2217679 35.926846 5.7541142 --1.7774844 31.921532 5.1145363 --1.5824637 31.949593 5.1173615 --1.3924747 32.098808 5.1396484 --1.1954939 32.10675 5.1396484 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.2588481 20.623518 3.3172836 -0 0 0 -1.5031663 20.488321 3.2984493 -1.6275994 20.462961 3.2959383 -0 0 0 -1.8410885 20.03331 3.2308033 -1.9819053 20.204454 3.2599962 -2.087404 20.015102 3.231745 -2.2069216 19.972467 3.2270365 -2.3079083 19.774132 3.1975296 -2.4353416 19.809591 3.205534 -4.2000742 32.517609 5.2443352 -1.9220343 14.192905 2.3098114 -2.0414953 14.409661 2.3465378 -4.7545533 32.141697 5.1972499 -2.3188541 15.036515 2.4515386 -2.2484848 14.008844 2.2884657 -5.6703024 33.997036 5.5111527 -2.5831068 14.92122 2.440238 -2.6814148 14.943001 2.4463592 -2.6500413 14.264048 2.3393183 -2.8729711 14.952615 2.4534221 -2.9819689 15.021889 2.4675477 -3.2570343 15.896322 2.6124139 -3.3675761 15.93788 2.6224589 -0 0 0 -3.260524 14.546176 2.4027267 -3.6692457 15.911688 2.628737 -3.7781987 15.936923 2.6365845 -0 0 0 -0 0 0 -3.4803624 13.56305 2.2589591 -3.5393922 13.449751 2.2438917 -4.0114594 14.872388 2.4816732 -4.099483 14.83607 2.4797897 -4.4076676 15.578486 2.6066067 -4.2696991 14.744803 2.4731979 -4.3934698 14.831013 2.4918752 -4.5310545 14.957844 2.5174582 -4.6934342 15.158069 2.5554404 -0 0 0 -4.8660369 15.058922 2.5486915 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.84934 18.331102 3.202709 -0 0 0 -0 0 0 -0 0 0 -8.1604261 17.834789 3.1506009 -8.2393074 17.719009 3.1391435 -8.2862787 17.537748 3.1162286 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -23.842329 14.503205 4.4686804 -0 0 0 -23.896112 14.137117 4.4460793 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -28.203758 15.089809 5.1170473 -28.199717 14.865808 5.0997829 -28.212397 14.651986 5.085814 -28.219999 14.43677 5.0712175 -28.179283 14.198461 5.0483027 -28.191561 13.988414 5.0351186 -28.156179 13.756208 5.0137734 -28.158176 13.543801 4.9993339 -28.150597 13.328086 4.9834819 -28.126213 13.105884 4.9649615 -28.131588 12.898891 4.9519343 -28.125584 12.68786 4.937181 -28.122562 12.479394 4.9232125 -28.103565 12.265122 4.9067326 -28.101151 12.059344 4.8933916 -28.095451 11.853292 4.8797369 -28.072777 11.641334 4.8634138 -28.076914 11.441655 4.8519564 -28.041153 11.226947 4.8339067 -28.026794 11.022146 4.8197813 -28.035858 10.827554 4.8098931 -28.02512 10.626262 4.7968664 -28.006493 10.4231 4.7827406 -27.997561 10.224632 4.7704983 -28.001198 10.031665 4.7606106 -27.990479 9.8344545 4.7485251 -27.974659 9.6364679 4.7358122 -27.959341 9.4396791 4.723413 -27.977354 9.2549181 4.7168207 -27.966909 9.0614643 4.7056775 -27.966442 8.8720713 4.6964173 -27.944899 8.6768761 4.6838613 -27.922016 8.4822798 4.6713052 -27.924309 8.2961674 4.6631436 -27.912092 8.1064901 4.6527848 -27.88435 7.9132318 4.6400714 -27.886698 7.7293253 4.6325378 -27.893559 7.547236 4.625946 -27.88205 7.360816 4.616529 -27.874086 7.1760535 4.6078963 -27.852455 6.9885411 4.5972238 -27.861235 6.8093033 4.5917306 -27.86598 6.6295352 4.5857663 -27.84263 6.4437304 4.5754075 -27.825762 6.2601962 4.5663042 -27.826021 6.0811186 4.560183 -27.819334 5.9010444 4.5531206 -27.801815 5.7192917 4.544488 -27.792801 5.539907 4.537425 -27.78845 5.3619709 4.5313044 -27.789761 5.1855659 4.5262818 -27.775373 5.0067186 4.5189052 -27.770544 4.8301048 4.5132546 -27.74901 4.6511269 4.5050931 -27.739 4.4746404 4.4989719 -27.731777 4.299057 4.4934788 -27.742002 4.126492 4.4909678 -27.725737 3.950341 4.4843755 -27.72401 3.7766786 4.4802947 -27.716301 3.6025493 4.4754295 -27.721222 3.4303555 4.4727612 -27.708399 3.2562771 4.4674249 -27.698412 3.0829222 4.4627161 -27.686359 2.9097097 4.4578509 -27.685019 2.7379274 4.4548688 -27.677694 2.5658157 4.4511018 -27.673239 2.3942373 4.4479628 -27.663782 2.2224941 4.4441962 -27.653261 2.050957 4.4404292 -27.638721 1.8794317 4.4361916 -27.634947 1.7088938 4.4338374 -27.621246 1.5379786 4.4300704 -27.624245 1.3681757 4.4291286 -27.631132 1.198608 4.4289718 -27.621189 1.028419 4.4263034 -27.600327 0.85809028 4.4220657 -27.596188 0.68849987 4.4206533 -27.591005 0.5189926 4.419241 -27.578857 0.34949967 4.4168863 -27.56567 0.18017535 4.4145322 -27.569218 0.011033426 4.4150028 -27.558891 -0.15807182 4.4134336 -27.547527 -0.32704991 4.4118638 -27.533154 -0.495859 4.4099808 -27.535515 -0.66493285 4.4109221 -27.522034 -0.83360612 4.4095097 -27.512453 -1.0023187 4.4088821 -27.520584 -1.171743 4.4112363 -27.509918 -1.3404399 4.4107652 -27.4923 -1.5087254 4.4093528 -27.485483 -1.6775671 4.4098234 -27.477629 -1.8463819 4.4102945 -27.474646 -2.0155969 4.4117069 -27.491297 -2.1864889 4.4164157 -27.468506 -2.354372 4.4150028 -27.459444 -2.5234137 4.4159446 -27.432632 -2.6907938 4.4142184 -17.863907 -1.8630953 2.888021 -27.423069 -3.0300515 4.4182992 -27.398075 -3.1975722 4.4173574 -19.301832 -2.3729291 3.124233 -27.367546 -3.5349395 4.4190836 -18.847492 -2.552238 3.056273 -27.381756 -3.8789644 4.428658 -27.360371 -4.0473361 4.4291286 -27.334045 -4.2149897 4.4289718 -26.264278 -4.2151895 4.2610335 -25.288122 -4.2178612 4.1080055 -18.257132 -3.1605179 2.9782681 -18.996593 -3.4086943 3.1008472 -19.035522 -3.5363741 3.1105783 -18.237568 -3.5040483 2.9850171 -18.208942 -3.6145401 2.9839184 -19.427738 -3.980505 3.1852872 -20.24651 -4.2778544 3.3223059 -20.087673 -4.3732243 3.3008037 -18.341223 -4.1110783 3.020802 -0 -0 0 -0 -0 0 -0 -0 0 -20.003475 -5.0022054 3.3105347 -0 -0 0 -0 -0 0 -0 -0 0 -7.6965175 -2.126888 1.3026528 -7.9503589 -2.2496195 1.3467562 -7.9354572 -2.298085 1.3465993 -0 -0 0 -0 -0 0 -0 -0 0 -7.9218669 -2.5064366 1.354133 -7.9871588 -2.5811105 1.3676308 -7.9111462 -2.6102684 1.3575859 -0 -0 0 -0 -0 0 -0 -0 0 -20.605408 -7.3635182 3.5111189 -20.557055 -7.4887981 3.510648 -19.798727 -7.3504748 3.3899522 -19.732008 -7.4637833 3.3863423 -19.609348 -7.5552464 3.3733153 -0 -0 0 -19.426193 -7.7597799 3.3580909 -19.256535 -7.8293605 3.3372164 -20.264906 -8.3845863 3.5189664 -20.234924 -8.5179672 3.5227332 -18.918505 -8.1008501 3.3042567 -19.040483 -8.2916956 3.3340774 -20.085545 -8.8937807 3.5246167 -19.311937 -8.6933651 3.3993692 -19.321995 -8.8408709 3.4105129 -3.9260204 -1.8259312 0.721775 -3.9192076 -1.8520958 0.72255975 -3.9184539 -1.881237 0.7244432 -3.9290299 -1.9160651 0.72836697 -3.9552562 -1.958982 0.73511589 -4.098453 -2.0613005 0.76273936 -3.960825 -2.0226402 0.74045223 -3.9053752 -2.0246363 0.73276162 -4.0738015 -2.1437478 0.76525062 -4.0143981 -2.1440487 0.7569322 -4.0541339 -2.1973424 0.7665062 -0 -0 0 -3.7543223 -2.0948842 0.71690953 -3.9562738 -2.2394891 0.75614744 -3.9056284 -2.242579 0.74939853 -5.2641764 -3.0655873 1.0017767 -3.7774665 -2.231082 0.73087823 -3.9475718 -2.3643196 0.76493669 -3.9431205 -2.3946478 0.76682013 -3.9418092 -2.4270811 0.76933134 -3.8581409 -2.408345 0.75646132 -3.5703764 -2.2593098 0.70513815 -3.5190356 -2.2571838 0.69807535 -3.5423822 -2.3029537 0.70513815 -3.5158138 -2.3164966 0.70278388 -3.4358225 -2.294158 0.69022775 -3.4028668 -2.302469 0.68661785 -3.4579163 -2.3707678 0.69995874 -3.4627721 -2.4054615 0.70372558 -3.0432959 -2.1419265 0.62509286 -3.2745683 -2.3348372 0.67280614 -3.2457685 -2.3444779 0.669981 -3.2560318 -2.3824258 0.67484647 -3.2159603 -2.383544 0.66982406 -3.3837357 -2.5401793 0.70607984 -3.3900998 -2.5776286 0.71047449 -3.3679597 -2.5935614 0.70921892 -3.2982433 -2.5722754 0.69838923 -3.0777752 -2.4308832 0.65695399 -2.9316778 -2.344867 0.63027221 -2.8581359 -2.3149545 0.61818695 -2.8293676 -2.32055 0.61520487 -2.9472866 -2.4476416 0.64251447 -2.9412842 -2.4733062 0.64439785 -3.4284112 -2.9189374 0.74924153 -4.1607723 -3.5866208 0.90666401 -3.794903 -3.3120856 0.83415234 -3.3185933 -2.9325063 0.73747015 -2.5107055 -2.24632 0.5690611 -2.4829662 -2.2490876 0.56607902 -3.51156 -3.2200139 0.79083371 -4.0954294 -3.801836 0.92173135 -3.9899769 -3.7497959 0.90383887 -2.4441962 -2.3256819 0.56984586 -3.3631885 -3.2394547 0.77576637 -3.3517339 -3.2683032 0.77764976 -3.4792264 -3.4344957 0.81060964 -3.6732662 -3.6707797 0.85895073 -2.4800227 -2.5091257 0.59433031 -3.1490738 -3.2252173 0.75002629 -2.5539517 -2.6481221 0.61834389 -3.7667043 -3.9535825 0.90148461 -3.1426489 -3.3394485 0.76242548 -2.7542608 -2.963026 0.67657298 -3.7099938 -4.0404305 0.90540838 -2.6533291 -2.925647 0.66134864 -3.3807001 -3.7737803 0.83886093 -3.3535538 -3.7900152 0.83791918 -3.3334854 -3.8142388 0.83870393 -2.5710502 -2.9786685 0.65899438 -2.5347829 -2.973346 0.65459973 -1.7530928 -2.0823388 0.46625781 -1.7762793 -2.136337 0.47520405 -1.7512275 -2.1326954 0.47222197 -1.6671832 -2.0559626 0.45432949 -1.6483623 -2.0584455 0.45275998 -1.6344755 -2.0669715 0.45244607 -1.6181145 -2.0722916 0.45150438 -1.6192409 -2.1001682 0.45511425 -1.635044 -2.147779 0.46264794 -1.6396396 -2.1814525 0.46735647 -1.6209258 -2.184335 0.46594393 -1.6308433 -2.2261038 0.47222197 -1.6553588 -2.2888801 0.48258078 -1.6694068 -2.3383758 0.49027142 -1.6624244 -2.3590689 0.49231178 -1.6930416 -2.4340804 0.50486791 -1.7954767 -2.6153917 0.53782773 -1.4458559 -2.1341925 0.44334289 -1.3717917 -2.0518999 0.42592126 -1.3542799 -2.0528598 0.42450869 -1.319563 -2.0271988 0.41807368 -1.3065656 -2.0344265 0.41791672 -1.2898284 -2.0357318 0.41666111 -2.094105 -3.3499391 0.66150558 -2.370575 -3.8443828 0.75143886 -1.8475308 -3.037883 0.59872496 -2.3227117 -3.8723369 0.75128192 -2.3416524 -3.958765 0.76462281 -2.2839751 -3.9159038 0.75410706 -2.2589197 -3.9281321 0.75379312 -1.1216472 -1.9788715 0.39515874 -1.1104476 -1.9874407 0.39547265 -2.2086315 -4.0097017 0.76116985 -2.1797457 -4.0153666 0.75975728 -1.0648248 -1.9909985 0.39249057 -1.0470616 -1.9870111 0.39060715 -1.0343945 -1.9925219 0.39045021 -1.0293461 -2.0128989 0.39296141 -1.6862491 -3.3474236 0.62933052 -1.665678 -3.357707 0.62933052 -1.6424428 -3.3625402 0.62838882 -1.0104599 -2.101634 0.40426195 -1.0178316 -2.1506398 0.41179562 -1.0158792 -2.1810148 0.4160333 -1.0065939 -2.1961844 0.41760284 -1.0036588 -2.2257254 0.42168358 -1.0320454 -2.3266268 0.43816349 -1.01854 -2.3347259 0.4384774 -0.97420496 -2.2710493 0.42639211 -1.3284206 -3.149611 0.57690871 -0.94928885 -2.2901316 0.42764774 -0.93447357 -2.2940838 0.42733383 -0.90936691 -2.2722692 0.42262527 -0.88926256 -2.2621818 0.4199571 -0.9354983 -2.4232924 0.44648191 -0.92166209 -2.4317572 0.44695279 -1.065531 -2.8640585 0.51930743 -1.0455658 -2.864049 0.5182088 -0 -0 0 -1.1776365 -3.3527949 0.59841108 -1.1470704 -3.3310113 0.59354556 -0.91841215 -2.7213535 0.49011445 -0.90790057 -2.7456903 0.4932535 -0.97597045 -3.0133345 0.53704298 -0.93028516 -2.9336019 0.52276039 -0.78047526 -2.514823 0.45213217 -0.96254003 -3.1696978 0.56011486 -1.1498102 -3.8713725 0.67547429 -0.94836199 -3.2666283 0.57424051 -0.87976593 -3.1013703 0.54598922 -0.87179941 -3.1466825 0.55258119 -0.85608673 -3.165319 0.55477852 -0.82202661 -3.1151288 0.54567534 -0.78861517 -3.064642 0.53657216 -0.54337144 -2.1670723 0.38872373 -0.51435387 -2.1060882 0.37820798 -0.50256443 -2.1140084 0.37899274 -0.50094104 -2.1661229 0.38699725 -0.48568946 -2.1604843 0.38558471 -0.46841732 -2.145092 0.38260263 -0.45955032 -2.1682138 0.38589859 -0.7290355 -3.5455928 0.60892683 -0.72966301 -3.6623511 0.62713319 -0.71578538 -3.7113662 0.63435298 -0.69789106 -3.7419012 0.63859069 -0.68192661 -3.7849905 0.64486873 -0.6602127 -3.7978604 0.6462813 -0.65893888 -3.9333322 0.66746974 -0.63778061 -3.9558263 0.67045182 -0.61243695 -3.9528334 0.66935319 -0.4210569 -2.8331316 0.48885885 -0.38025939 -2.6714032 0.46249098 -0.42625383 -3.1316552 0.53594434 -0.37329277 -2.8746798 0.49435216 -0.48628697 -3.9325149 0.66338903 -0.45257983 -3.8540137 0.65036201 -0 -0 0 -0.27000886 -2.5726013 0.44475546 -0.22865242 -2.3157303 0.40347719 -0.2126155 -2.2974219 0.40033814 -0.21026437 -2.4344656 0.42199746 -0.18962739 -2.3648307 0.41069695 -0.17365228 -2.3462517 0.40755793 -0.22861473 -3.3670895 0.57000285 -0.20630418 -3.3418143 0.56576514 -0 -0 0 -0 -0 0 -0.12249351 -2.8319731 0.48415029 -0.10879055 -2.9313636 0.49984547 -0.088161476 -2.8470829 0.48634762 -0.07096155 -2.8584306 0.48807409 -0.073440395 -3.9222758 0.65711099 -0 -0 0 -0.015521063 -2.4296529 0.41980016 -0.00058854802 -2.3714337 0.41054001 --0.014024462 -2.382256 0.41226646 --0.028606316 -2.3791625 0.41179562 --0.043239582 -2.3809171 0.41210952 --0.057919286 -2.383569 0.41258037 --0.072573386 -2.384156 0.41273734 --0.087416574 -2.3895874 0.41367903 --0.17880584 -4.1917305 0.70042962 --0 -0 0 --0 -0 0 --0.16004911 -2.6164074 0.45024875 --0.18166083 -2.6981485 0.4634327 --0.19936885 -2.7127426 0.46594393 --0.2158536 -2.7094991 0.46563002 --0.23416123 -2.7278037 0.46876904 --0.25134614 -2.7312329 0.4695538 --0.26607564 -2.7089984 0.46625781 --0.28177091 -2.6984744 0.46484527 --0.29647949 -2.6800067 0.46217707 --0.31188789 -2.6693087 0.46076453 --0.3310318 -2.6898899 0.46437439 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.4558531 -3.3991375 0.62132597 --0 -0 0 --1.5498358 -3.4993148 0.64188665 --0 -0 0 --1.6349833 -3.5725336 0.65805268 --1.6527092 -3.553479 0.65648317 --1.6765913 -3.5477362 0.65726793 --1.7162772 -3.5747769 0.6638599 --0 -0 0 --1.6451942 -3.3215649 0.62273854 --1.6535648 -3.2875845 0.61850089 --1.6755023 -3.280895 0.6191287 --1.6896938 -3.2591538 0.61708832 --1.7271336 -3.2819374 0.62305248 --0 -0 0 --4.6925631 -8.6587982 1.5988206 --1.9019305 -3.4581542 0.66087782 --1.9043486 -3.4127827 0.65475667 --1.9223346 -3.3958766 0.65381497 --1.9726369 -3.4354076 0.66323209 --2.021508 -3.4710336 0.67202139 --4.9493356 -8.3807135 1.5804572 --4.6470218 -7.759613 1.4710619 --4.9344292 -8.126029 1.5445153 --4.8526907 -7.8819804 1.5046496 --0 -0 0 --5.1217122 -8.0947523 1.5559727 --5.2992358 -8.2626963 1.5936412 --5.3848195 -8.2838488 1.603843 --5.4018626 -8.1995182 1.594112 --5.522809 -8.2721786 1.6143588 --5.4467392 -8.0508108 1.5784168 --0 -0 0 --5.5789275 -8.0320339 1.5878339 --5.6104875 -7.9726133 1.5829685 --5.6822324 -7.9702053 1.5892465 --5.3447881 -7.4003539 1.4844028 --5.3609395 -7.3275652 1.4765552 --0 -0 0 --0 -0 0 --0 -0 0 --5.5512023 -7.209445 1.4796942 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.6996593 -9.1290741 2.1505053 --9.7294531 -9.0451775 2.144855 --9.776041 -8.9772921 2.1429718 --9.8865347 -8.9675674 2.1549001 --9.9501991 -8.9146442 2.1567836 --9.8597527 -8.7251387 2.1260209 --9.8350277 -8.5962305 2.1095409 --9.5160522 -8.2149639 2.0315361 --9.552001 -8.1442451 2.028554 --9.5587339 -8.0492201 2.0196078 --9.6535015 -8.0283089 2.0290248 --9.8430042 -8.0842648 2.057904 --10.868816 -8.8157177 2.2577033 --10.828666 -8.6735344 2.2385552 --10.963787 -8.6718731 2.255192 --10.980988 -8.5764732 2.2479722 --10.994304 -8.478776 2.2401247 --10.36254 -7.8906078 2.1035769 --10.837027 -8.1473656 2.1883307 --0 -0 0 --10.274212 -7.5286541 2.057904 --10.306611 -7.4556298 2.0552359 --10.441376 -7.4559579 2.0726573 --10.851789 -7.6489415 2.1435995 --10.797182 -7.5117068 2.1239805 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.609509 -9.1502972 3.0473268 --16.671415 -9.0515089 3.0484254 --0 -0 0 --16.886948 -8.9019718 3.0674167 --16.812412 -8.7312746 3.0443447 --16.353081 -8.3657131 2.952842 --16.381174 -8.2536602 2.9487612 --6.7991123 -3.373328 1.2398722 --6.8285561 -3.3358815 1.2414417 --7.0144362 -3.3735452 1.2706348 --7.1555066 -3.3874962 1.2918233 --7.1949558 -3.3522873 1.2951192 --16.730425 -7.6710553 2.9586492 --16.690756 -7.5292673 2.9435818 --18.711777 -8.3032103 3.2869918 --16.796377 -7.3301997 2.9460931 --7.5476103 -3.2386723 1.3389087 --7.2033668 -3.0387363 1.2761281 --7.2127538 -2.9906969 1.2745585 --7.8794036 -3.210638 1.3858372 --7.1269708 -2.8531363 1.2536839 --7.1572104 -2.8144128 1.2558813 --7.2102742 -2.7843208 1.2620025 --7.9345841 -3.0082474 1.3822273 --7.9621487 -2.9629498 1.3837968 --8.021925 -2.9292853 1.3908597 --8.1327209 -2.9133184 1.4065548 --0 -0 0 --23.050972 -7.9403257 3.9082062 --22.62579 -7.6388774 3.8287888 --22.215609 -7.3488455 3.7523534 --0 -0 0 --0 -0 0 --13.145429 -4.0814295 2.2211337 --0 -0 0 --13.474749 -4.0030651 2.2675912 --13.517077 -3.925544 2.2705734 --13.000311 -3.6891077 2.181268 --13.510936 -3.7446003 2.2617841 --12.339144 -3.338408 2.0651238 --12.401411 -3.273726 2.0720296 --12.729231 -3.2768598 2.1225681 --12.646602 -3.1729739 2.1057742 --13.746078 -3.3593445 2.2825017 --13.406137 -3.1892147 2.2236447 --12.761556 -2.953238 2.1153483 --17.210663 -3.8718739 2.8371687 --13.6044 -2.972909 2.2467167 --13.810776 -2.9293423 2.2773223 --12.666706 -2.605531 2.0888233 --0 -0 0 --22.573317 -4.3555999 3.6872184 --12.697957 -2.3692193 2.0864692 --12.782235 -2.3038769 2.0977697 --0 -0 0 --13.523499 -2.2665248 2.2128153 --13.550801 -2.1857057 2.2150126 --13.585428 -2.1058471 2.2184653 --13.585395 -2.0205598 2.2164252 --17.41264 -2.4807909 2.8288503 --19.601908 -2.6701357 3.1775966 --20.211418 -2.6269612 3.2727094 --17.847404 -2.2083809 2.8916309 --17.73605 -2.0841887 2.8716979 --22.341146 -2.4865646 3.6060746 --0 -0 0 --17.608261 -1.7412361 2.845644 --20.258028 -1.8778814 3.2669022 --0 -0 0 --18.993877 -1.5258343 3.0619233 --23.295078 -1.7276616 3.7459183 --24.577301 -1.6712115 3.9485428 --24.611736 -1.5219008 3.9524667 --18.624269 -1.0368893 2.998044 --18.376778 -0.91003424 2.9577074 --0 -0 0 --18.686584 -0.69562948 3.0054207 --23.907478 -0.7432273 3.8349099 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --34.825523 13.216201 5.4878278 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --34.529678 14.579529 5.5218735 --34.483212 14.809868 5.5288272 --34.402569 15.025928 5.5305657 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --21.636742 13.352291 3.7565801 --21.686935 13.567721 3.7794702 --20.729282 13.146201 3.6279316 --21.266623 13.670705 3.7355733 --21.221302 13.826324 3.7423823 --22.148329 14.624746 3.9199982 --19.53371 13.070947 3.475234 --19.529299 13.242204 3.4887075 --21.960194 15.088223 3.9350653 --21.893997 15.241342 3.939846 --0 0 0 --0 0 0 --19.673346 14.240005 3.5898297 --19.708479 14.450556 3.6121404 --0 0 0 --19.524921 14.687753 3.6112711 --20.175007 15.371587 3.7475977 --19.242163 14.848266 3.5925822 --0 0 0 --0 0 0 --0 0 0 --37.971275 30.818068 7.1943021 --0 0 0 --36.245609 30.162695 6.9381642 --15.931821 13.423514 3.0842185 --15.834854 13.508815 3.0814657 --15.771884 13.623186 3.0853775 --15.591922 13.635673 3.0666885 --15.814636 14.002654 3.1266665 --15.618649 14.001014 3.1050804 --15.196157 13.791348 3.038583 --15.093035 13.867594 3.0349612 --14.995345 13.948484 3.0324984 --14.878504 14.011062 3.0262687 --14.798698 14.108236 3.0275726 --15.636627 15.091398 3.2157643 --0 0 0 --15.507233 15.338511 3.227499 --0 0 0 --14.012245 14.204035 2.9552803 --13.897898 14.262107 2.9496303 --13.847863 14.386324 2.9575982 --14.409719 15.155132 3.0958083 --0 0 0 --14.038956 15.132784 3.0562577 --13.722581 14.974979 3.0078697 --14.669514 16.207001 3.2345979 --0 0 0 --14.00324 15.857704 3.1314473 --14.617786 16.75988 3.2900848 --13.08371 15.187954 2.9690433 --12.990913 15.268702 2.9691882 --13.663321 16.26022 3.1436169 --13.584775 16.369638 3.1485426 --12.576591 15.345286 2.9389095 --12.686981 15.675213 2.9865732 --12.669628 15.851701 3.0051169 --12.627291 15.999046 3.0181558 --0 0 0 --0 0 0 --14.729075 19.385767 3.5986671 --0 0 0 --24.875486 33.589256 6.1538148 --0 0 0 --0 0 0 --9.8526936 13.828008 2.519933 --9.8268528 13.972377 2.5349998 --9.7082119 13.985266 2.5265973 --9.6484985 14.082936 2.5334063 --0 0 0 --0 0 0 --9.0225821 13.703602 2.4361956 --0 0 0 --9.560586 14.916265 2.6280093 --8.7862635 13.894955 2.4409766 --9.3354559 14.96614 2.6165643 --8.3594942 13.586256 2.3695536 --8.3196011 13.709195 2.3818679 --8.2332945 13.756589 2.3812883 --9.4460802 16.005388 2.755064 --9.3700876 16.101532 2.7615833 --8.2790213 14.429341 2.4696617 --8.2424459 14.572023 2.4851632 --9.0730867 16.273005 2.761873 --8.1001692 14.739713 2.4964633 --0 0 0 --7.9596701 14.914824 2.5092123 --7.9214144 15.064976 2.5260177 --0 0 0 --0 0 0 --8.2922421 16.500814 2.737824 --7.070148 14.286421 2.367815 --8.2446995 16.920664 2.7898338 --7.2344661 15.081365 2.48299 --8.1010637 17.157463 2.8119996 --0 0 0 --9.0475521 19.787825 3.2196758 --7.0159926 15.596367 2.5378973 --6.911356 15.619216 2.5347102 --6.8426261 15.723932 2.5447066 --6.6603975 15.565489 2.5128341 --6.5382962 15.54313 2.5028379 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --13.117701 34.076141 5.3801861 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.8800879 13.935933 2.1958492 --0 0 0 --4.5888319 13.6384 2.1407969 --4.4920545 13.626831 2.1347122 --4.405622 13.645663 2.1334083 --4.572547 14.465891 2.2552476 --4.602685 14.878403 2.3142116 --4.4084377 14.566373 2.2622015 --4.2330756 14.302818 2.2178702 --4.0341773 13.944522 2.1593409 --3.9525752 13.983295 2.161514 --3.8385372 13.905228 2.1460125 --3.7606075 13.956225 2.1502137 --3.9236245 14.925467 2.2934945 --3.8511274 15.024023 2.3047948 --4.9167442 19.684027 3.0045376 --0 0 0 --3.2928972 13.905183 2.1261647 --3.473933 15.08219 2.3000138 --3.2462659 14.499743 2.2094674 --3.1353786 14.418835 2.1944005 --2.923697 13.854012 2.1070414 --2.9433298 14.383522 2.1835349 --6.1977735 31.269936 4.7014503 --3.6844945 19.20437 2.8970408 --2.6347797 14.201775 2.1487651 --5.6204486 31.374823 4.7008705 --2.5785599 14.917491 2.2504668 --5.2233105 31.371159 4.6904397 --2.4220631 15.115078 2.2752404 --2.2189705 14.412825 2.1690476 --2.2346618 15.131916 2.2735019 --2.0712912 14.646668 2.1997609 --4.2511306 31.46171 4.6823268 --4.1004877 31.816931 4.7310047 --3.8469059 31.366158 4.6608853 --3.6660416 31.489418 4.6756625 --0 0 0 --3.3180168 31.904043 4.7304249 --3.1080425 31.779041 4.7091284 --2.9295037 31.977829 4.7356405 --2.9004226 33.953125 5.0233607 --2.6931293 33.984093 5.0253892 --2.4655275 33.739456 4.9871421 --2.1272087 31.791306 4.699132 --1.9373176 31.889685 4.7117362 --1.7256548 31.608528 4.6688533 --1.5469843 31.934776 4.7152133 --1.3537642 32.008911 4.7247748 --1.1587282 32.05518 4.7304249 --1.0688391 35.626064 5.252552 --0 0 0 --0.67108774 37.870327 5.5796781 --0.43772417 37.788643 5.5672188 --0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.5250423 20.489378 3.0422049 -0 0 0 -0 0 0 -1.8998184 20.435175 3.0388727 -1.9855076 20.02338 2.9800539 -2.1165261 20.088556 2.9914989 -2.2071464 19.783138 2.9484713 -2.3462093 19.919569 2.9706371 -4.0382419 32.557838 4.8374872 -4.237042 32.525578 4.836473 -1.9595994 14.359505 2.155864 -2.0320041 14.237505 2.1396379 -2.1464605 14.406796 2.1665847 -5.2643995 33.895004 5.0562472 -2.5123973 15.55052 2.3402889 -2.5259922 15.047894 2.2679965 -5.5864115 32.065086 4.79953 -5.7770758 31.997099 4.7946043 -2.6634626 14.254808 2.1571679 -2.8858876 14.936684 2.2613325 -2.8029315 14.044456 2.1308007 -3.2462828 15.760698 2.3899808 -3.3509469 15.778229 2.3956308 -3.1466501 14.381944 2.1894748 -0 0 0 -3.6548791 15.774602 2.404758 -3.3429649 14.036685 2.1465919 -0 0 0 -0 0 0 -3.5081463 13.613476 2.0922642 -3.5455894 13.417594 2.065897 -4.1605773 15.36198 2.3641932 -4.1436324 14.935726 2.3033459 -4.205451 14.805325 2.2874098 -4.4652901 15.360703 2.3760729 -4.53689 15.257144 2.3644829 -4.5826287 15.071877 2.3404338 -4.4993854 14.478453 2.253799 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.769031 18.401329 2.9584675 -7.8888221 18.369677 2.9610753 -7.971683 18.252922 2.9502096 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -8.5719004 18.092794 2.9652767 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -22.881422 13.884965 3.9527397 -0 0 0 -0 0 0 -0 0 0 -24.054657 13.800767 4.0944271 -0 0 0 -24.267141 13.529593 4.1019602 -24.360107 13.386156 4.1036987 -24.405241 13.216645 4.0976143 -28.195927 15.046278 4.7133298 -28.203642 14.828787 4.6994219 -28.236111 14.62542 4.6898603 -28.183416 14.379498 4.6665354 -28.199503 14.170314 4.6548004 -28.200785 13.954894 4.6408925 -28.19426 13.736959 4.6259708 -28.15044 13.502517 4.6052537 -28.150442 13.290674 4.5919251 -28.152498 13.081009 4.5791764 -28.146744 12.86894 4.565413 -28.106964 12.642825 4.5464349 -28.105288 12.435299 4.5338306 -28.095774 12.225507 4.5202127 -28.093845 12.020193 4.5080428 -28.09137 11.815748 4.4960184 -28.094759 11.614811 4.4851527 -28.075661 11.405714 4.4709554 -28.068842 11.202791 4.4589305 -28.054144 10.997854 4.4458919 -28.039837 10.794232 4.4331431 -28.0389 10.596797 4.4227118 -28.038454 10.400469 4.412571 -28.018991 10.198117 4.3996768 -28.014877 10.002384 4.3893909 -28.01689 9.8097029 4.3802638 -27.990454 9.6080589 4.3669353 -27.979483 9.4127884 4.3562145 -27.977509 9.2214212 4.3470879 -27.962 9.0264826 4.3360772 -27.961195 8.8371506 4.3275294 -27.942106 8.6429071 4.3163743 -27.945366 8.4563951 4.3088408 -27.94644 8.2698879 4.3011627 -27.927271 8.0781879 4.2905865 -27.908709 7.8875747 4.2803006 -27.902214 7.7011786 4.2720428 -27.899261 7.5164461 4.2645092 -27.897009 7.3325434 4.2572656 -27.899302 7.1504259 4.2508912 -27.854334 6.9570494 4.2375627 -27.843618 6.7731471 4.2295947 -27.861546 6.596704 4.2261176 -27.870644 6.41852 4.2214818 -27.891155 6.2432823 4.218729 -27.915403 6.0690856 4.2167006 -27.957926 5.898911 4.2175698 -27.993593 5.7272534 4.2175698 -28.033062 5.5563416 4.2182946 -28.120073 5.3944802 4.2262626 -28.128323 5.2173266 4.2226405 -28.137403 5.0406246 4.2193084 -28.208754 4.8749571 4.2253933 -28.248871 4.7035666 4.2269869 -28.278177 4.5303025 4.2271318 -0 0 0 -0 0 0 -28.458664 4.023427 4.2421985 -28.498505 3.8508518 4.2445168 -28.542204 3.6785707 4.2475591 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -23.718376 -0.88952422 3.5091348 -31.534527 -1.3768581 4.6555252 -31.509672 -1.5695363 4.6532068 -25.026714 -1.4003624 3.7039907 -25.147018 -1.5619384 3.7229693 -0 -0 0 -19.299397 -1.4364026 2.8674865 -25.081461 -2.0219231 3.7181883 -25.061684 -2.1751826 3.7171743 -30.457579 -2.83216 4.5126791 -19.224857 -1.9062793 2.8625607 -18.008385 -1.8972375 2.6852345 -27.40601 -3.058063 4.0715365 -27.404417 -3.2282498 4.0741444 -27.405695 -3.3990197 4.0773315 -27.387266 -3.5674975 4.0777664 -27.375645 -3.7369478 4.07936 -27.366894 -3.9069495 4.081533 -27.36883 -4.0787349 4.0854445 -27.329599 -4.2444639 4.0834165 -17.726768 -2.864166 2.6630688 -0 -0 0 -18.523706 -3.2267153 2.7869363 -19.05662 -3.4401898 2.869225 -19.158674 -3.5801442 2.887624 -19.584192 -3.7841957 2.954411 -25.752081 -5.1404867 3.878854 -20.190418 -4.1590233 3.0522013 -18.452394 -3.9190838 2.7959185 -0 -0 0 -17.566038 -3.9566686 2.6703126 -0 -0 0 -0 -0 0 -20.131296 -4.9257026 3.0684271 -30.965557 -7.7789545 4.708694 -20.159397 -5.195591 3.0820453 -20.235233 -5.3477626 3.0984161 -0 -0 0 -25.30224 -7.0204697 3.8785641 -7.9668097 -2.2624078 1.246488 -7.9242749 -2.3029606 1.2421417 -0 -0 0 -31.390017 -9.5455141 4.8377767 -30.667568 -9.5317583 4.7360749 -8.0464334 -2.5542421 1.2699577 -7.9920211 -2.5910497 1.2640178 -7.9318256 -2.6254196 1.2572087 -0 -0 0 -0 -0 0 -20.602566 -7.2448449 3.2315555 -20.585665 -7.381144 3.2359018 -20.511179 -7.4967852 3.2314107 -24.173601 -9.0041399 3.8109078 -19.690536 -7.4719648 3.1175394 -19.707998 -7.61726 3.1275358 -19.533834 -7.6880288 3.1075432 -20.577408 -8.244998 3.2796538 -20.576818 -8.3916559 3.287622 -19.249193 -7.9882469 3.0853775 -20.217068 -8.5357609 3.2470572 -19.009708 -8.1637268 3.0630667 -19.22493 -8.3962603 3.105515 -19.411777 -8.6200914 3.1437616 -19.390985 -8.7536955 3.1489773 -19.391764 -8.8976851 3.1578145 -3.9865742 -1.8578598 0.67785639 -3.7444093 -1.7729745 0.64047879 -3.8324201 -1.8435539 0.65655982 -3.75437 -1.8344373 0.64569426 -3.7660847 -1.8688811 0.64946097 -3.7987206 -1.9142294 0.65670472 -3.7340598 -1.9104468 0.64801228 -3.6959288 -1.9196333 0.64366603 -3.5974426 -1.8965676 0.62932348 -3.6563926 -1.9564365 0.64105827 -3.6121514 -1.9613563 0.63569796 -3.8911874 -2.1439972 0.6843757 -3.562768 -1.9915274 0.63149661 -3.568553 -2.0236053 0.63453895 -3.67098 -2.1116045 0.65395212 -4.7380409 -2.7646248 0.83707321 -4.7337599 -2.8012061 0.83924633 -4.7266626 -2.8363106 0.84098482 -3.8623078 -2.349745 0.69582075 -3.8074014 -2.3484557 0.68886679 -3.6419368 -2.2773061 0.66278946 -3.525121 -2.2344251 0.64496988 -3.4763882 -2.2335398 0.6388852 -3.3250053 -2.1651604 0.61483604 -3.4082601 -2.2493153 0.63178635 -3.4437325 -2.3032036 0.64047879 -3.4991429 -2.3714943 0.65279311 -3.4820793 -2.3912389 0.65235847 -3.508755 -2.4413919 0.65974706 -3.5228167 -2.4834068 0.66496253 -3.5340786 -2.5239594 0.66974342 -3.6171086 -2.6169605 0.68756294 -3.6041746 -2.6414459 0.68814242 -3.6014025 -2.6735406 0.69060528 -3.5991623 -2.7062955 0.69321305 -2.9402895 -2.2389817 0.57499564 -3.2069225 -2.4733946 0.62686062 -4.0960112 -3.199816 0.79491478 -3.1328819 -2.478174 0.61874765 -3.0535367 -2.4459879 0.60672307 -3.9188781 -3.179265 0.77274901 -4.0154858 -3.2987452 0.79476994 -3.82481 -3.1815455 0.76231807 -3.9898355 -3.3605247 0.79766738 -3.6176252 -3.0850284 0.73001111 -3.4241679 -2.9564583 0.69625539 -3.810374 -3.3311248 0.77492213 -3.3261466 -2.9438107 0.6842308 -3.8951886 -3.4905777 0.79969567 -2.4296334 -2.2036939 0.51414841 -2.402952 -2.2065098 0.51154065 -2.3900924 -2.2218864 0.51168555 -3.5576911 -3.3490446 0.74927938 -3.4898112 -3.3257475 0.73971766 -4.3065476 -4.1552014 0.91008985 -7.9835644 -7.7995706 1.6680722 -3.4469965 -3.4082079 0.74362928 -2.4898667 -2.4917929 0.54964262 -2.5488777 -2.5823972 0.56514418 -2.532294 -2.5972795 0.56499928 -2.5286601 -2.6256006 0.56760705 -2.4143302 -2.5378048 0.54674512 -2.2652776 -2.4104815 0.51820487 -2.2437155 -2.4170816 0.51675612 -2.2047787 -2.4045403 0.51154065 -2.1674092 -2.3930805 0.50661492 -2.0643208 -2.3074863 0.48720178 -2.0756643 -2.3490357 0.49285188 -3.4522681 -3.9567995 0.80273801 -2.9862368 -3.4651227 0.70364398 -1.9057719 -2.2383783 0.46431166 -1.8449011 -2.1939707 0.45359096 -1.8219268 -2.1938279 0.45141783 -1.718749 -2.0955267 0.43070081 -1.7338687 -2.1406448 0.43722016 -1.7145241 -2.1435137 0.43577141 -1.6933712 -2.1438961 0.43388805 -1.6400447 -2.1027353 0.42432633 -1.6391793 -2.1284425 0.42722383 -1.6314756 -2.1455512 0.42852771 -1.5885944 -2.1159449 0.42128399 -1.6509532 -2.2274325 0.43982789 -2.3514285 -3.2143993 0.61700916 -2.3195012 -3.2119181 0.61396682 -1.8261119 -2.5612538 0.4944455 -1.9253304 -2.735903 0.52371013 -1.7702843 -2.5485177 0.48821589 -1.542686 -2.2499571 0.43330854 -1.7383226 -2.5692303 0.48807102 -1.4770703 -2.2119253 0.42331222 -1.5483431 -2.3498726 0.4459126 -2.3811636 -3.6637268 0.67365503 -2.3575706 -3.6766024 0.67336524 -1.299143 -2.0526454 0.38955653 -1.2765752 -2.0446267 0.3868039 -1.2655609 -2.0549493 0.38723853 -1.2529281 -2.062676 0.38723853 -1.628412 -2.7189958 0.49792248 -1.5890697 -2.6905899 0.49140313 -1.5745212 -2.7037103 0.49198264 -2.240304 -3.9028602 0.69277841 -2.1617615 -3.8200719 0.67655247 -1.1366514 -2.0365281 0.37535882 -2.1466444 -3.904413 0.68625909 -2.0891957 -3.8557355 0.675973 -2.0734165 -3.883322 0.67843586 -0 -0 0 -0 -0 0 -0 -0 0 -1.0277236 -2.0427864 0.3686946 -1.0796732 -2.1794178 0.38999113 -1.0957479 -2.2464879 0.39984259 -1.0742413 -2.2371104 0.39723486 -1.0300815 -2.1792371 0.3868039 -1.0546287 -2.2671738 0.39998746 -1.0349383 -2.261004 0.39795923 -1.0190163 -2.2627997 0.39723486 -1.0135194 -2.2880116 0.4002772 -0.99867183 -2.2923729 0.39998746 -0.99470598 -2.3221095 0.4037542 -0.98158985 -2.3309054 0.40418881 -0.95933145 -2.317682 0.40114644 -1.2735229 -3.1320603 0.5289256 -1.2586818 -3.1508434 0.53066409 -1.3032383 -3.3215609 0.55630684 -0.88403666 -2.2934334 0.39375788 -0.86679995 -2.2904844 0.392454 -0.85754651 -2.3087478 0.39448223 -1.1025604 -3.0261867 0.50545597 -1.1179032 -3.1279435 0.52023315 -1.0326474 -2.9461014 0.49096853 -1.1093063 -3.2284617 0.53370643 -2.8818982 -8.5638781 1.3568822 -0.93457723 -2.8321075 0.47054124 -0.97219235 -3.0082211 0.4967635 -0.9605732 -3.0358295 0.50009561 -1.1950994 -3.8602746 0.62555677 -0.95906413 -3.1657701 0.51820487 -1.104687 -3.7294846 0.60339099 -1.0375241 -3.5831628 0.5800662 -0.90977824 -3.2152605 0.5231306 -0.87634557 -3.1711848 0.51559716 -0.87256968 -3.2347813 0.52443451 -0.81950861 -3.1137562 0.50531107 -0.81905401 -3.1915705 0.51632154 -0.52401066 -2.0935302 0.34986097 -0.51045364 -2.0938218 0.34942633 -0.49622902 -2.0911374 0.34855708 -0.49071521 -2.1259623 0.35333794 -0.47960618 -2.1376233 0.3546418 -0.47026393 -2.1579294 0.35724956 -0.73782969 -3.4919715 0.55645168 -1.7183243 -8.394702 1.2885015 -1.6598591 -8.3701468 1.2832861 -1.5691445 -8.1751366 1.2527176 -1.5698285 -8.4589586 1.2935721 -1.3582871 -7.5772653 1.1610122 -1.3885844 -8.0300589 1.2270749 -1.3448107 -8.0716124 1.2320006 -1.3212343 -8.2418938 1.2560496 -0.42914757 -2.7812047 0.4459126 -0.40051612 -2.705478 0.43432269 -0.41090953 -2.8989286 0.46257317 -0 -0 0 -0 -0 0 -0.32424635 -2.6349425 0.42258784 -0.30281088 -2.5916729 0.41592363 -0.26165712 -2.3643267 0.38216794 -0.24714497 -2.3658876 0.38216794 -0.23310487 -2.3722835 0.38289228 -0.21448407 -2.3293293 0.37637296 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0.1184784 -2.7759719 0.44069713 -0.097301111 -2.6619451 0.42389172 -0.081232645 -2.6713932 0.42519557 -0 -0 0 -0.045749377 -2.5198374 0.40288496 -0 -0 0 -0.022604642 -3.9568696 0.61324245 --0.00055414706 -2.4005291 0.38535514 --0.015222455 -2.3915758 0.38405129 --0.029793767 -2.3835223 0.38289228 --0.044929191 -2.4100049 0.3868039 --0.059415925 -2.3978143 0.38506541 --0.07422071 -2.4003716 0.38550004 --0.09596543 -2.5867453 0.41288128 --0 -0 0 --0 -0 0 --0 -0 0 --0.1640223 -2.6576769 0.42374685 --0.18599163 -2.7395408 0.43591627 --0.20404711 -2.7551222 0.43837914 --0.22206211 -2.7676258 0.4404074 --0 -0 0 --0 -0 0 --0.27667972 -2.8004849 0.4459126 --0.29167959 -2.7780707 0.44287026 --0.30828097 -2.7722952 0.44229075 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --3.9773967 -8.9583473 1.4690149 --4.0343251 -8.938283 1.4697393 --1.6270218 -3.548259 0.60541922 --1.6437446 -3.5274482 0.60368073 --1.6640866 -3.5146136 0.60324609 --1.7143747 -3.5640693 0.61295265 --4.365716 -8.9312124 1.4894421 --1.6809691 -3.3876784 0.58759969 --1.6772212 -3.3287089 0.57963157 --1.6809303 -3.285768 0.57427126 --1.6978655 -3.2692466 0.57325715 --1.7525201 -3.3244019 0.58412272 --4.6116252 -8.6153097 1.4646686 --1.8848282 -3.4713089 0.61222833 --1.9037037 -3.4553461 0.61150396 --1.9065144 -3.4107857 0.60599869 --1.9254534 -3.395581 0.60541922 --1.9546431 -3.3982811 0.60788208 --1.9924184 -3.4152765 0.61280781 --4.8895893 -8.2612019 1.4394605 --4.9865322 -8.3082409 1.4526441 --5.0775466 -8.3434114 1.4639443 --5.1405978 -8.3314648 1.4672765 --5.2005439 -8.3140259 1.4697393 --5.3097548 -8.3738708 1.4856755 --5.2818451 -8.2179537 1.464234 --5.407794 -8.3014488 1.4845164 --5.4046497 -8.1863708 1.4701738 --0 -0 0 --0 -0 0 --5.5151935 -8.0284176 1.4600327 --5.2375827 -7.5250707 1.3762953 --5.2842274 -7.4936004 1.3764402 --5.332984 -7.4650612 1.3771646 --5.3937736 -7.4530368 1.3809314 --5.4206796 -7.3942676 1.3762953 --5.5568061 -7.4831915 1.3986059 --5.5758491 -7.4133744 1.3920866 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.0835943 -8.4276543 1.848151 --9.1519136 -8.3871336 1.851483 --9.2134743 -8.3401155 1.8535112 --9.2836542 -8.3005714 1.857278 --10.039772 -8.8662548 1.9950534 --9.3616991 -8.1658611 1.8527869 --9.9169159 -8.5434952 1.9504322 --10.682088 -9.088995 2.0874832 --9.8285923 -8.2594872 1.9136341 --9.7762918 -8.1137266 1.8940761 --10.437372 -8.5546808 2.0098307 --10.666569 -8.6336384 2.0431516 --11.018473 -8.8070812 2.0992181 --11.017158 -8.6957874 2.088932 --10.813533 -8.4279327 2.0412683 --10.825833 -8.331255 2.0340247 --10.426874 -7.9228964 1.9513015 --11.031737 -8.2761478 2.053148 --10.359512 -7.6730442 1.9214573 --10.364064 -7.5783858 1.913779 --10.765799 -7.7711654 1.9779583 --0 -0 0 --10.759991 -7.5678926 1.9599938 --10.870439 -7.5462976 1.971439 --10.870008 -7.4475827 1.9631811 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.59803 -8.9890814 2.797657 --0 -0 0 --16.732489 -8.7980738 2.8018584 --16.791428 -8.6979694 2.8027277 --16.402031 -8.3690519 2.7300007 --16.964094 -8.5250196 2.8137381 --6.4007287 -3.1683533 1.0795928 --6.8576856 -3.342227 1.1508709 --6.8976912 -3.3094995 1.1540582 --7.1156092 -3.3604643 1.1860754 --6.4927082 -3.0178216 1.0822005 --16.567181 -7.5751929 2.7011707 --16.705393 -7.5147934 2.7159479 --7.5452094 -3.3393478 1.2419969 --7.540153 -3.2819352 1.2379404 --7.1244035 -3.0491905 1.1685456 --0 -0 0 --7.3057613 -3.0212555 1.1914357 --7.1655717 -2.9119513 1.1663725 --7.1759524 -2.8649955 1.1652135 --7.8262663 -3.0689814 1.2647421 --7.8837328 -3.0358307 1.2708268 --7.9744062 -3.0146813 1.282127 --7.9296703 -2.9422975 1.2722756 --7.959662 -2.8979855 1.274159 --7.2728148 -2.5975966 1.164634 --7.2727408 -2.5473645 1.1621711 --22.319126 -7.6615591 3.4889972 --7.2396817 -2.4364741 1.1523197 --7.2507362 -2.3907676 1.1517402 --7.2426705 -2.3389387 1.1482632 --22.774033 -7.1979737 3.5310106 --7.4267979 -2.298121 1.1721674 --7.4436002 -2.2533672 1.1726021 --13.294252 -3.9346662 2.0638688 --13.267769 -3.8384504 2.0561905 --13.03113 -3.6835155 2.0166397 --13.213724 -3.6477082 2.0409787 --13.500502 -3.6378491 2.0811088 --13.530225 -3.5569549 2.0822678 --12.781177 -3.2763965 1.9657888 --12.711762 -3.1756165 1.9523156 --0 -0 0 --12.741109 -3.0173333 1.9510117 --12.800844 -2.9486451 1.9572413 --17.11932 -3.8325305 2.6025114 --13.470333 -2.9292059 2.0522788 --17.550383 -3.703445 2.6601713 --13.354042 -2.7327511 2.0296783 --12.741625 -2.5261288 1.9357998 --13.611043 -2.6117232 2.0631444 --22.541164 -4.181241 3.3906276 --18.128094 -3.2479489 2.7304354 --18.055056 -3.1206524 2.7166724 --23.357059 -3.8892636 3.5008769 --16.748619 -2.6836958 2.5174701 --17.741732 -2.7312083 2.6621995 --19.533781 -2.8843784 2.9250016 --17.673002 -2.499022 2.6472776 --18.772486 -2.5370307 2.8075085 --17.825987 -2.2978899 2.6655316 --17.659046 -2.1663125 2.6388748 --17.783064 -2.0708432 2.6552455 --22.515249 -2.4816675 3.3504975 --18.830648 -1.9588691 2.8059149 --20.077196 -1.9640173 2.9875872 --18.922241 -1.7339566 2.816056 --19.860222 -1.697035 2.9523828 --19.84856 -1.5734241 2.9491956 --24.646885 -1.8014007 3.6522706 --18.528658 -1.240274 2.7528908 --18.452957 -1.121524 2.7407215 --23.645403 -1.2912074 3.5011666 --18.72624 -0.90762269 2.7789683 --23.687147 -1.0021144 3.505223 --23.723503 -0.85786086 3.5097141 --23.701618 -0.71147978 3.5058026 --23.706526 -0.56605953 3.5059476 --23.831236 -0.42274091 3.523767 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --22.477659 -0.56464684 3.0501451 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --34.971619 13.220984 5.0491567 --0 0 0 --0 0 0 --33.996078 13.572515 4.9442601 --33.944298 13.793916 4.9489136 --0 0 0 --34.721657 14.608775 5.0870466 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --34.17337 15.628646 5.0746827 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --21.535372 13.435551 3.4388859 --20.793283 13.150518 3.3342557 --20.75893 13.30781 3.3417008 --21.91107 14.236826 3.539129 --22.014517 14.496916 3.5698402 --21.965548 14.658679 3.5763547 --19.766808 13.367425 3.2349432 --28.079525 19.240885 4.6000571 --21.720503 15.080293 3.5810077 --20.854191 14.669294 3.454175 --20.765404 14.798127 3.4544411 --19.796677 14.291767 3.3092613 --0 0 0 --21.142569 15.661596 3.5634587 --19.661861 14.752478 3.3313308 --19.478643 14.802681 3.3157759 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --36.459812 30.262308 6.3899407 --0 0 0 --36.364986 30.945103 6.4391317 --0 0 0 --15.848733 13.825802 2.8552427 --15.625427 13.800753 2.8305144 --15.657928 14.001411 2.8516531 --15.588621 14.112522 2.8547111 --15.316875 14.038482 2.821075 --15.247886 14.148379 2.8242657 --15.909189 14.944678 2.9620004 --15.876085 15.09802 2.9729021 --15.561802 14.982058 2.9316881 --15.518556 15.124992 2.9408615 --0 0 0 --15.216076 15.198721 2.918925 --14.212338 14.371452 2.7452946 --14.01446 14.346371 2.7242887 --14.321213 14.841472 2.800601 --14.298262 15.000807 2.8138957 --14.070065 14.943937 2.7873061 --0 0 0 --14.399239 15.674562 2.8891447 --0 0 0 --14.163466 15.802848 2.880636 --14.04587 15.86645 2.8765144 --0 0 0 --13.856585 16.04512 2.8778439 --13.045848 15.29509 2.7306702 --12.908331 15.323306 2.7216296 --12.851466 15.447174 2.7294736 --12.791678 15.568622 2.7369187 --26.220133 32.313801 5.6160483 --15.201451 18.971331 3.2950358 --14.867661 18.789886 3.248105 --25.667887 32.851089 5.6262856 --25.135271 32.57951 5.5536957 --25.288046 33.196712 5.6318693 --0 0 0 --25.055441 33.742458 5.6716208 --24.796362 33.825218 5.6599212 --0 0 0 --0 0 0 --0 0 0 --9.7694149 14.036939 2.3281026 --9.6735611 14.08273 2.3258424 --9.6153336 14.18366 2.3326228 --21.490816 32.123016 5.2184 --21.291124 32.250969 5.2178679 --21.11231 32.410896 5.2226543 --0 0 0 --8.7893486 13.862568 2.2358363 --8.6930866 13.898591 2.2330444 --9.3638268 15.177262 2.4262185 --8.4049139 13.812029 2.2028651 --20.081013 33.459206 5.2685213 --9.2908611 15.698455 2.480993 --9.2583075 15.864736 2.4980106 --9.1533747 15.90836 2.4960163 --8.2721634 14.583179 2.2830331 --8.2226763 14.705462 2.2940676 --8.1232004 14.739146 2.2915418 --8.0524797 14.825291 2.2971256 --7.959023 14.870051 2.2964609 --8.621273 16.34758 2.5131667 --9.6029062 18.482807 2.8279884 --7.3168445 14.29674 2.1883738 --7.4453621 14.770607 2.2528536 --8.2694902 16.658989 2.5288546 --0 0 0 --7.3114691 15.194511 2.295929 --7.2100387 15.22207 2.2934029 --7.1466541 15.3307 2.3029752 --7.1061764 15.491374 2.3202586 --7.001204 15.513004 2.3170679 --6.8708968 15.476861 2.3055012 --6.7520065 15.464231 2.2975245 --0 0 0 --7.2832637 17.255259 2.5464036 --13.835594 33.347542 4.8769884 --0 0 0 --13.524101 33.761391 4.9126186 --13.37766 33.99868 4.9349537 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.8287835 14.010626 2.0219223 --4.7341599 14.014639 2.018333 --0 0 0 --4.4670639 13.779408 1.9771188 --4.6901097 14.775786 2.113524 --4.5243683 14.562931 2.079622 --4.1530023 13.663004 1.9495986 --4.3037992 14.477702 2.0600786 --4.0475368 13.928033 1.9796449 --3.9701228 13.981209 1.9836333 --0 0 0 --3.7961805 14.021222 1.9825697 --3.7174182 14.07204 1.9864253 --3.8261104 14.851851 2.0913215 --3.7295985 14.853899 2.0883965 --4.853498 19.84425 2.7744102 --0 0 0 --3.4629357 14.951896 2.0927839 --3.2644415 14.499075 2.0276392 --3.038388 13.892387 1.9416217 --3.1072659 14.636933 2.0411999 --0 0 0 --3.825897 19.177074 2.6571498 --2.7478507 14.228436 1.9779166 --3.7518828 20.087734 2.7752078 --2.6339376 14.598562 2.0239167 --2.5325816 14.547075 2.0147433 --5.2531867 31.307142 4.2922816 --5.0600429 31.332916 4.2914839 --4.8705807 31.381983 4.2940097 --2.1892703 14.701898 2.0279052 --4.6718521 32.748291 4.4713631 --3.7066908 27.174856 3.7130256 --4.1326084 31.750546 4.3289752 --3.9421015 31.810715 4.3337612 --3.7575002 31.924862 4.3459926 --3.5578082 31.913826 4.3414726 --0 0 0 --3.1945429 32.244064 4.3804264 --2.986186 32.150558 4.3652701 --2.7751589 32.010288 4.3439984 --2.5724101 31.948668 4.3334956 --2.6947768 36.246563 4.9095607 --2.3845305 34.974964 4.7364621 --2.1759579 35.086868 4.7496238 --1.7970854 32.172382 4.3563628 --1.7792319 35.794949 4.8414912 --1.5579685 35.768555 4.8365722 --1.3402466 35.824982 4.8429537 --1.1275611 36.061371 4.8736649 --0.90821421 36.144894 4.8840346 --0.68634093 36.145821 4.883503 --0.48211867 37.515999 5.0668387 --0.25155583 37.464729 5.0596595 --0.021658994 37.443764 5.0567346 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -1.7387241 20.326189 2.7705545 -3.1655121 34.513851 4.6831498 -3.3735559 34.456295 4.6780977 -2.0988176 20.158644 2.7527397 -2.1926954 19.875456 2.7163117 -3.801544 32.623219 4.4397211 -2.4463336 19.927719 2.7272134 -2.6813946 20.787186 2.8455374 -4.3020468 31.813046 4.3402758 -4.4870319 31.714411 4.3305707 -4.6699557 31.607843 4.3199348 -2.202723 14.299891 1.9748588 -5.0694032 31.622532 4.330039 -2.3599598 14.163265 1.9601015 -2.6045432 15.060692 2.0842752 -5.7639198 32.156036 4.4161892 -2.6479282 14.266522 1.9804425 -2.7182288 14.160458 1.9682113 -2.9378941 14.813354 2.0598128 -3.0058758 14.683384 2.0445237 -3.3151503 15.70327 2.1869113 -3.1881545 14.656045 2.0459862 -0 0 0 -3.2927783 14.290336 2.0011826 -3.4180927 14.428995 2.023119 -0 0 0 -0 0 0 -3.4874129 13.600379 1.917425 -3.5420654 13.469451 1.9022689 -4.1353183 15.342278 2.1655066 -4.1470785 15.018538 2.1240268 -4.1914263 14.823997 2.1004949 -4.34126 15.001742 2.1289458 -4.4757071 15.118326 2.1490211 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -4.684423 14.206776 2.0406682 -4.7715058 14.177765 2.0406682 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.7223105 18.673372 2.7446296 -7.845583 18.64665 2.7476876 -7.9625788 18.604538 2.7486181 -8.0734196 18.548059 2.7475545 -8.2203684 18.573399 2.7585893 -0 0 0 -8.4155226 18.400818 2.7482193 -8.5249271 18.341646 2.7471557 -8.6110687 18.233427 2.7389131 -8.7163534 18.166843 2.7369187 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -34.10363 50.431145 8.2004318 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -14.455091 19.766214 3.3188336 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -38.957561 39.002922 7.4286661 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -22.97711 14.568593 3.683511 -23.058506 14.422604 3.6823144 -0 0 0 -23.906013 14.547659 3.7878754 -23.014139 13.812115 3.6344531 -24.007677 14.208776 3.776176 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -24.477367 13.490537 3.7830894 -24.5292 13.323534 3.7784362 -28.134594 15.059117 4.3146167 -28.184385 14.864011 4.3082352 -28.17128 14.636872 4.2925472 -28.174978 14.419939 4.2796516 -28.20717 14.218682 4.2712755 -28.224638 14.010964 4.2609057 -28.170277 13.769183 4.2400327 -28.135452 13.538915 4.2223506 -28.137381 13.327838 4.2103853 -28.132393 13.114737 4.1976223 -28.137562 12.907571 4.1865878 -28.142155 12.701245 4.1756859 -28.156149 12.500177 4.1663795 -28.072456 12.257376 4.1429806 -28.12528 12.07551 4.1397896 -28.164146 11.888063 4.134738 -28.239307 11.716166 4.1351366 -0 0 0 -28.461 11.40081 4.1467032 -0 0 0 -28.592291 11.04819 4.1457725 -28.667883 10.875708 4.1469688 -0 0 0 -28.747986 10.50438 4.139657 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -31.969593 -0.37390852 4.3227267 -0 -0 0 -31.955662 -0.76603025 4.3217959 -0 -0 0 -24.487577 -0.88788468 3.3209608 -0 -0 0 -0 -0 0 -24.922321 -1.3633667 3.382117 -25.328001 -1.5414827 3.4378223 -30.942961 -2.0737658 4.1940327 -18.403631 -1.3470325 2.5093112 -18.371307 -1.4580483 2.5061204 -25.213417 -2.156687 3.4285161 -19.593655 -1.7972465 2.6733694 -19.954134 -1.9538424 2.723491 -27.41312 -2.8539736 3.7311065 -27.40593 -3.023319 3.732569 -27.414427 -3.1946335 3.7362914 -19.348295 -2.3752151 2.6489069 -18.067278 -2.3305988 2.4776695 -27.390266 -3.7040145 3.7416093 -27.366043 -3.8718696 3.7414765 -27.381969 -4.0456505 3.7469275 -18.7883 -2.893981 2.584028 -0 -0 0 -25.281086 -4.2121553 3.4719901 -19.699688 -3.406671 2.71578 -18.979902 -3.4022834 2.620589 -17.494017 -3.2468739 2.4207675 -26.001348 -4.9908576 3.5855281 -18.657402 -3.7001696 2.5854905 -17.661415 -3.6154344 2.4522762 -0 -0 0 -20.103741 -4.3730497 2.7938206 -20.113281 -4.5045519 2.7988727 -0 -0 0 -0 -0 0 -38.055622 -9.2613182 5.2877989 -30.853674 -7.7095404 4.2999926 -0 -0 0 -0 -0 0 -0 -0 0 -30.587347 -8.4456768 4.2905531 -7.9599328 -2.2508307 1.1436656 -7.9231229 -2.2930179 1.1404748 -7.9431167 -2.3517177 1.1452609 -7.9769168 -2.415056 1.1520413 -7.9922466 -2.4733307 1.1562957 -7.9873157 -2.5256102 1.1577581 -7.9773273 -2.5763993 1.1585559 -7.9519558 -2.6221952 1.1572263 -0 -0 0 -20.838465 -7.1555982 2.9895205 -20.527575 -7.1899552 2.9516304 -20.429869 -7.2967739 2.9440522 -20.415445 -7.4331813 2.9484396 -20.374098 -7.5600319 2.9491043 -0 -0 0 -20.094807 -7.7382531 2.9225147 -19.646488 -7.7043753 2.864815 -19.655914 -7.8475623 2.8730578 -20.433781 -8.3038292 2.9927113 -19.34656 -8.0006895 2.8423467 -19.23407 -8.0927267 2.8331733 -19.331663 -8.2737656 2.8547111 -20.112061 -8.7541466 2.9763587 -19.515076 -8.6371222 2.8967226 -19.487925 -8.7684946 2.9005783 -19.750126 -9.032589 2.947243 -19.421995 -9.0270329 2.9069598 -19.352798 -9.1396847 2.9049654 -3.7396672 -1.7946221 0.59046751 -3.7383857 -1.8223107 0.59192991 -3.7440109 -1.8535682 0.59445596 -3.7688751 -1.8947551 0.5999068 -0 -0 0 -3.7470999 -1.9417742 0.6001727 -3.7316058 -1.9628842 0.59964091 -3.6477935 -1.9474747 0.58873916 -3.5033092 -1.8980684 0.56853104 -3.6522832 -2.0078461 0.59312648 -3.6710572 -2.047596 0.59791261 -3.6955183 -2.0910671 0.60362935 -5.1491642 -2.9552705 0.83043927 -4.9621844 -2.8885925 0.80424845 -4.9469275 -2.9204969 0.80464727 -3.9067163 -2.3389318 0.6448434 -3.8770404 -2.3536024 0.64245027 -3.7814922 -2.3274813 0.62968725 -3.7654579 -2.3495913 0.62942135 -3.7459443 -2.3694727 0.62862366 -3.6420541 -2.3351803 0.61439818 -3.7024565 -2.4060829 0.62636358 -3.7621229 -2.477813 0.63832891 -3.8095038 -2.5426621 0.64843297 -3.8012197 -2.5709856 0.64962953 -0 -0 0 -3.8426569 -2.6683099 0.66159487 -3.7767615 -2.6570544 0.653485 -3.7676516 -2.6853549 0.65468156 -3.7294061 -2.6927588 0.65109193 -3.4928052 -2.5547042 0.61453116 -3.4085717 -2.5253525 0.60309756 -3.4944894 -2.6223562 0.62011498 -4.1001639 -3.1162896 0.72487825 -3.5555122 -2.7369773 0.63593584 -4.1562004 -3.2400966 0.74096501 -4.2148147 -3.3275611 0.7543928 -4.3584418 -3.4845579 0.78257787 -3.5296423 -2.8577073 0.64324796 -3.7427635 -3.0684323 0.68326545 -3.2998326 -2.7393909 0.60934615 -4.4529552 -3.742873 0.81435251 -3.5754452 -3.0430269 0.66385496 -3.8029912 -3.277102 0.70746207 -4.3773317 -3.8189909 0.81328893 -3.3568811 -2.9652941 0.63487226 -2.423209 -2.1672981 0.47014922 -2.3540227 -2.1315734 0.46004516 -2.3679342 -2.1707547 0.46496424 -2.322602 -2.1555815 0.45911452 -2.318723 -2.1786134 0.46084285 -2.3225489 -2.2091918 0.4640336 -2.3882058 -2.2997015 0.47879088 -2.3343022 -2.2755735 0.47134575 -2.3689768 -2.3378847 0.48051921 -2.5782835 -2.5758092 0.52292973 -2.5777626 -2.6070845 0.52585459 -2.5658729 -2.627106 0.52665228 -2.338418 -2.4238462 0.48583713 -2.3330753 -2.4481928 0.48769841 -2.3078182 -2.4516382 0.48570418 -2.2913818 -2.4643011 0.48543829 -2.3171198 -2.5228369 0.49354815 -2.2356594 -2.4643431 0.48038626 -2.102747 -2.3466406 0.45672145 -2.0541461 -2.3209095 0.44980812 -2.0189896 -2.3095942 0.44555378 -1.9905281 -2.3054366 0.44262892 -2.6407723 -3.0965574 0.57996458 -2.6664219 -3.1657627 0.58927095 -1.8710535 -2.2494948 0.42654216 -1.855328 -2.2586358 0.42614332 -1.8351893 -2.2622812 0.42481384 -1.7977225 -2.2441082 0.41976181 -1.6781372 -2.121413 0.39689469 -1.7334347 -2.2191408 0.41178489 -1.6313933 -2.1151662 0.39237443 -1.6105764 -2.114887 0.3906461 -2.3547695 -3.1314745 0.55962348 -2.3361015 -3.1466599 0.5597564 -2.3085463 -3.149744 0.55789512 -2.2862711 -3.1598351 0.55723041 -2.6897213 -3.7657535 0.65481448 -1.9571664 -2.7761779 0.48969263 -2.6376452 -3.7903421 0.653485 -1.9448376 -2.831847 0.49487764 -1.4480084 -2.1365705 0.38027614 -1.4023551 -2.096813 0.37243217 -2.0589311 -3.1194401 0.53542686 -1.5139256 -2.3248024 0.40620106 -1.3731676 -2.1372783 0.37482527 -1.3085457 -2.0644708 0.36192927 -1.3063656 -2.0892665 0.36458823 -1.3075732 -2.1200173 0.36817783 -1.2986623 -2.134774 0.36924142 -1.6440971 -2.7401216 0.46270412 -2.2562535 -3.812906 0.62835777 -2.2188275 -3.8027101 0.62463522 -2.2087991 -3.8394475 0.62822485 -2.2272556 -3.9270666 0.63965839 -1.7576008 -3.1439388 0.51721293 -2.1315339 -3.8681695 0.62649649 -0 -0 0 -1.0591152 -1.9795024 0.33520666 -1.0585082 -2.0078804 0.33853036 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -1.1383092 -2.3296888 0.38187152 -1.0694116 -2.2232065 0.36498708 -1.0633874 -2.2458494 0.36738014 -1.0433054 -2.2388573 0.36538592 -1.0423595 -2.2731433 0.36950731 -1.0247226 -2.2713659 0.36831078 -1.016397 -2.2902927 0.37017205 -1.020569 -2.3382683 0.3762877 -1.0089396 -2.3508613 0.37721834 -0.99526691 -2.358834 0.37748423 -0 -0 0 -0.97298104 -2.3873899 0.3798773 -1.6051421 -4.007997 0.61320168 -1.3018038 -3.3094511 0.51109731 -1.1882319 -3.076082 0.47639781 -1.1844524 -3.123162 0.48211458 -0.85813159 -2.3055835 0.36405644 -0.85893601 -2.3517659 0.36990616 -0 -0 0 -1.1136951 -3.1690547 0.4846406 -1.0661304 -3.0943074 0.47307408 -1.0198432 -3.0200379 0.46164054 -0.91533279 -2.766546 0.42494678 -0.96467119 -2.9766998 0.4537966 -0.95838362 -3.0203497 0.45911452 -0.80338019 -2.5870023 0.39742649 -0.96592844 -3.1788659 0.47972152 -0.75801593 -2.551065 0.39104494 -0.96778411 -3.3313377 0.49939787 -0.91510439 -3.2237561 0.48357701 -0.86351764 -3.1147027 0.4676232 -0.83765483 -3.0950689 0.46416655 -0.80953401 -3.0656536 0.45938042 -0.78798819 -3.0600057 0.45791799 -0.85054576 -3.3887336 0.50272155 -0.84480804 -3.4555042 0.51123029 -0.51205629 -2.1522467 0.33081934 -0.50152457 -2.166935 0.33241472 -0.49017861 -2.1786735 0.33361128 -0.47616592 -2.1787355 0.33321244 -0.46031836 -2.1699822 0.33161703 -0.43979883 -2.1378186 0.32683089 -0.42609137 -2.1375608 0.32643205 -0.43702686 -2.2646966 0.34344944 -0.40401387 -2.1650369 0.32948986 -0.51568717 -2.8599877 0.4238832 -0.48928791 -2.8123236 0.4169699 -0.43511698 -2.5953453 0.3870565 -0.42345071 -2.6243842 0.3906461 -0.40962008 -2.641624 0.39264032 -0.41559649 -2.7930949 0.41284847 -1.2067389 -8.4609671 1.1804923 -1.1531932 -8.4564276 1.1788969 -1.0932238 -8.4014263 1.1705211 -1.0170286 -8.2092886 1.1436656 -0.96385735 -8.1917505 1.1404748 -0.27033642 -2.4282515 0.36179632 -0.87145787 -8.2808304 1.1509777 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0.24333028 -3.9293487 0.56214947 -0.21822049 -3.9129553 0.5597564 -0.19612633 -3.9528267 0.56494141 -0.11789995 -2.7152359 0.39862302 -0.094899423 -2.5465448 0.37588885 -0.078714579 -2.5292478 0.37349579 -0.062994674 -2.5217566 0.37243217 -0.046823677 -2.4854307 0.36751309 -0.031763677 -2.5005369 0.36950731 -0.016193455 -2.4669874 0.36498708 -0.0010460755 -2.450191 0.36272696 --0.013955048 -2.4442048 0.36192927 --0.028396361 -2.3965025 0.35554776 --0.04304751 -2.3933103 0.35514891 --0.057589337 -2.3870559 0.35435122 --0.07649906 -2.5283241 0.37336284 --0.095493145 -2.623883 0.38625881 --0.11415159 -2.6836519 0.39436868 --0.13114455 -2.6937904 0.39583111 --0.14669667 -2.6751215 0.39343804 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --4.0849276 -8.9313383 1.3514639 --1.6362276 -3.5196328 0.55470437 --1.6577928 -3.5095267 0.55470437 --1.6801531 -3.501076 0.55497026 --4.2737918 -8.7687054 1.3425564 --1.6952918 -3.4242332 0.54659456 --1.6735412 -3.328753 0.53383148 --1.6907808 -3.312242 0.53290087 --1.7074251 -3.294765 0.53183728 --1.7497528 -3.3263328 0.5382188 --1.8676695 -3.4982767 0.56600499 --1.876354 -3.4632208 0.56241536 --1.8803824 -3.4203739 0.55762923 --1.8974724 -3.4018466 0.55656564 --1.9290463 -3.4091182 0.5594905 --1.9558475 -3.4075334 0.56108588 --4.8260121 -8.2909212 1.3208858 --4.8893886 -8.2824917 1.3242095 --4.9441891 -8.2591381 1.325273 --0 -0 0 --0 -0 0 --5.1756401 -8.2953901 1.3456142 --5.2253823 -8.2618017 1.3453482 --5.2524428 -8.1928701 1.3394985 --5.2945142 -8.1480207 1.3375043 --5.344955 -8.116209 1.3376373 --5.3897033 -8.07584 1.3364407 --5.4236088 -8.0196295 1.3327181 --0 -0 0 --5.4300456 -7.8205771 1.3111806 --5.3752899 -7.6411924 1.2872498 --5.4295516 -7.6185594 1.2889782 --5.4228244 -7.5111694 1.2767469 --5.4758306 -7.4873548 1.2783422 --5.4709339 -7.3851218 1.2669088 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.2479601 -8.4953012 1.7185344 --9.3013802 -8.4397287 1.7188002 --9.3168259 -8.3500834 1.7122858 --9.4925585 -8.4031305 1.734621 --9.5178261 -8.3218927 1.7299678 --9.9145079 -8.5619793 1.791257 --9.6825733 -8.2584972 1.7411355 --10.629019 -8.9537115 1.8982805 --9.8471889 -8.1923027 1.7523032 --10.432549 -8.5715466 1.845234 --10.625788 -8.6216564 1.8695636 --10.932952 -8.7601995 1.9133036 --10.992716 -8.6978712 1.9143672 --10.841258 -8.470377 1.8795347 --10.52578 -8.1203575 1.817315 --10.416935 -7.9348989 1.7905923 --10.402851 -7.8237681 1.7800894 --10.563655 -7.8436952 1.7989681 --10.7123 -7.8525643 1.8157196 --0 -0 0 --10.759469 -7.6859484 1.8077426 --10.784556 -7.6043634 1.8041531 --10.848096 -7.5499372 1.806945 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.560184 -8.994854 2.5619588 --16.92527 -9.0591164 2.6091554 --16.704386 -8.8094521 2.5672767 --16.760763 -8.7081614 2.5676754 --16.501553 -8.445302 2.5206118 --16.36632 -8.2497549 2.4925597 --16.460131 -8.1707726 2.4990742 --6.9751177 -3.408994 1.0754631 --6.8923049 -3.3162773 1.0600411 --6.9483519 -3.2908959 1.065359 --7.1040573 -3.3114362 1.0854342 --0 -0 0 --0 -0 0 --6.993505 -3.1045032 1.0604399 --0 -0 0 --7.5410814 -3.2374258 1.134891 --7.117034 -3.003772 1.0702782 --7.1188526 -2.9532092 1.067885 --7.1634545 -2.920325 1.0717405 --7.7148652 -3.0900824 1.1488506 --7.716157 -3.0357914 1.1463245 --7.73279 -2.9876745 1.1460587 --7.2023849 -2.7320437 1.0673532 --7.2171555 -2.6871076 1.0670873 --7.2325764 -2.6424334 1.0669544 --7.2785096 -2.6087077 1.0712087 --22.466074 -7.8977752 3.2284288 --22.546906 -7.7710814 3.2330821 --22.615761 -7.6398859 3.2361398 --22.686676 -7.5090718 3.2395964 --0 -0 0 --0 -0 0 --28.253899 -8.7782288 4.0027199 --28.211452 -8.5755863 3.9892921 --28.157139 -8.3706884 3.974402 --0 -0 0 --28.922274 -8.2132492 4.0670671 --13.04069 -3.616704 1.8493555 --13.325721 -3.6078565 1.8859162 --13.565129 -3.5834925 1.9160956 --12.778728 -3.2919786 1.8041531 --12.785229 -3.2101283 1.8022918 --12.728628 -3.1130157 1.7917888 --12.804376 -3.0484006 1.7996328 --0 -0 0 --13.293335 -2.9929376 1.8618526 --13.02679 -2.8490489 1.8227658 --12.695971 -2.6951663 1.7750374 --17.647594 -3.6334617 2.4509468 --13.30252 -2.6537776 1.8536098 --13.301037 -2.5687215 1.8512168 --17.789427 -3.3225708 2.4615827 --13.319853 -2.4031918 1.8496214 --18.013407 -3.1361506 2.4867098 --17.171171 -2.8810575 2.3695824 --18.062277 -2.9167585 2.4883053 --19.732073 -3.0623295 2.7125893 --19.643639 -2.9252837 2.6980977 --17.758696 -2.5332615 2.440311 --17.840683 -2.4333582 2.4493513 --17.994841 -2.342011 2.46823 --17.929201 -2.2216783 2.4574614 --18.952415 -2.2305033 2.5938663 --18.868227 -2.1032991 2.5807045 --18.836422 -1.9828162 2.5747218 --19.892717 -1.9706947 2.7155139 --19.870882 -1.8454813 2.7109938 --0 -0 0 --23.094885 -1.8594199 3.1420124 --18.522675 -1.3768868 2.5255308 --18.56835 -1.2657702 2.5305829 --18.518393 -1.1482543 2.522872 --0 -0 0 --23.784489 -1.1821038 3.2284288 --23.821001 -1.0374368 3.2324173 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --49.190346 8.8730946 6.1095753 --49.306721 9.2068272 6.1308112 --49.370159 9.5325336 6.1457725 --49.388622 9.8508196 6.1554251 --49.450729 10.179098 6.1707482 --49.461143 10.497996 6.1799183 --49.448166 10.812738 6.1864338 --49.583294 11.161511 6.2116508 --49.553528 11.474721 6.216598 --49.610626 11.809136 6.232645 --49.631733 12.136429 6.2444696 --49.69305 12.475061 6.2616029 --49.719391 12.806481 6.2746339 --49.766563 13.144778 6.2905602 --49.70797 13.456119 6.2934561 --0 0 0 --49.297501 13.996497 6.2629299 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --34.876663 13.474014 4.5786843 --0 0 0 --0 0 0 --33.967323 13.846498 4.4926562 --0 0 0 --33.975018 14.338329 4.5164251 --0 0 0 --0 0 0 --0 0 0 --34.306 15.480584 4.6088481 --34.161644 15.668441 4.6023331 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --22.116348 13.642966 3.1927016 --21.761213 13.608914 3.1538501 --21.237984 13.463653 3.090626 --20.744932 13.330202 3.0313835 --21.416365 13.948106 3.1406984 --21.655964 14.294179 3.1881166 --20.094231 13.440985 2.9726238 --19.886482 13.479362 2.954284 --21.640392 14.862921 3.2251582 --21.562639 15.005064 3.2272093 --0 0 0 --20.535986 14.667871 3.1016057 --19.827959 14.346659 3.0089414 --20.281586 14.865369 3.090626 --20.240999 15.027409 3.0983479 --0 0 0 --28.060204 21.372255 4.321444 --0 0 0 --0 0 0 --0 0 0 --40.48867 32.439667 6.3401504 --38.434147 31.182636 6.0498505 --37.305557 30.648432 5.9025288 --36.737522 30.561226 5.8425622 --0 0 0 --22.864954 19.500032 3.6867905 --22.429319 19.367462 3.6361146 --36.022034 31.493464 5.8499222 --0 0 0 --0 0 0 --0 0 0 --15.486316 14.224005 2.5900216 --15.366035 14.288339 2.5845921 --15.387214 14.485105 2.6028111 --39.011269 37.180782 6.5844798 --15.416895 14.874112 2.6380429 --15.369367 15.011436 2.6455235 --0 0 0 --32.464771 32.498547 5.617538 --32.191544 32.62294 5.6048689 --14.069949 14.433651 2.4842057 --14.260657 14.810049 2.5331924 --14.161306 14.888639 2.5317445 --31.279287 33.294609 5.5867705 --30.729362 33.114067 5.5251145 --14.23499 15.52878 2.5947273 --14.135442 15.611417 2.5940032 --13.300241 14.871304 2.4592299 --0 0 0 --27.844465 31.915171 5.1822085 --13.087111 15.186544 2.4709334 --13.018772 15.296043 2.4756391 --12.932337 15.384756 2.477087 --15.202024 18.312141 2.9270155 --16.790483 20.480185 3.2531505 --25.83951 31.916174 5.0254755 --0 0 0 --15.09127 19.114475 2.9943421 --24.946777 32.000408 4.965992 --14.87979 19.329695 2.9991682 --24.560013 32.314407 4.9675603 --24.454218 32.588364 4.986383 --24.657393 33.282604 5.0687914 --0 0 0 --22.518396 31.188242 4.7098379 --22.307592 31.299149 4.7058563 --22.116838 31.437872 4.7062182 --21.861811 31.484106 4.6930666 --21.683928 31.640583 4.696445 --9.6652145 14.289316 2.1310439 --9.521698 14.264956 2.1188574 --9.5355434 14.477318 2.1412997 --9.4643822 14.563023 2.1452813 --21.089981 32.894218 4.7835593 --9.2754068 14.662968 2.1431096 --8.713912 13.964141 2.0348804 --8.6270256 14.015655 2.0346391 --8.4764776 13.962251 2.019557 --9.1289568 15.247319 2.194268 --9.0877123 15.391951 2.2068162 --20.040644 34.426624 4.8759823 --8.3481913 14.54404 2.0725253 --8.2583046 14.594126 2.0724046 --8.109129 14.537885 2.057564 --7.8638849 14.30377 2.01823 --8.7618418 16.171642 2.269799 --8.6596441 16.219845 2.2690749 --7.6135917 14.473331 2.0219703 --8.510643 16.422726 2.2824678 --7.5712428 14.831813 2.0582879 --0 0 0 --0 0 0 --9.1540852 18.77898 2.5734916 --7.3376689 15.289708 2.0955708 --7.2441387 15.33534 2.0956914 --17.568722 37.794498 5.1000414 --7.6185937 16.654436 2.260267 --7.6152463 16.920849 2.2895865 --7.5241356 16.996304 2.2934477 --7.414556 17.030319 2.2918792 --7.366169 17.206909 2.3092537 --0 0 0 --13.91704 33.647541 4.4599581 --13.347781 32.84024 4.3429213 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.6437559 14.078893 1.836159 --4.6088414 14.266768 1.85655 --4.3856401 13.866012 1.8018925 --4.3940945 14.195175 1.840382 --0 0 0 --4.0758433 13.762584 1.7788471 --3.9344723 13.590899 1.7539918 --3.9749861 14.05324 1.8093733 --3.8197148 13.82762 1.7778819 --0 0 0 --3.7115986 14.108665 1.8074427 --3.7628005 14.668697 1.8748897 --3.6065373 14.426663 1.8417093 --3.5177143 14.447556 1.8415885 --3.4374666 14.504609 1.8460529 --3.2418516 14.063038 1.788379 --3.2197251 14.369398 1.8240933 --3.1755996 14.591615 1.8493105 --2.9342566 13.892076 1.7600247 --3.9494147 19.284948 2.4268939 --2.8240094 14.231813 1.7977902 --2.8013873 14.586186 1.8395374 --2.7946303 15.049143 1.8946775 --2.7102962 15.110954 1.9002277 --2.5752311 14.882757 1.8700635 --2.4510658 14.701461 1.8458115 --5.0912061 31.744793 3.9419792 --4.8869567 31.714605 3.9344985 --0 0 0 --4.4978189 31.775135 3.9348605 --3.7045236 27.379257 3.3923881 --4.1058993 31.81514 3.9332919 --3.9004457 31.756969 3.9231567 --3.71402 31.85327 3.9320853 --0 0 0 --3.3443418 32.102806 3.9573026 --3.1356881 32.004166 3.9428236 --2.9364436 31.992157 3.9390833 --2.7423732 32.036278 3.9423411 --2.5419798 32.005001 3.9365497 --2.3683863 32.33186 3.9745564 --2.3541148 35.092358 4.3091373 --2.1368172 35.074436 4.3052764 --1.9237885 35.127525 4.3102231 --1.7057092 35.087109 4.3039489 --1.489082 35.06617 4.3002086 --1.27364 35.067703 4.2993641 --1.0837481 35.914295 4.4014397 --0.86436224 35.961948 4.406507 --0.66900736 37.383919 4.578805 --0.44174156 37.56897 4.6008849 --0.21156955 37.634502 4.6086068 -0.01707652 33.456844 4.1007633 -0.22207171 33.41243 4.0954542 -0.42818928 33.496796 4.1059513 -0.63194519 33.400242 4.0946097 -0.83674884 33.390774 4.0940065 -1.0439395 33.459427 4.103056 -0 0 0 -1.8154525 41.738148 5.1121073 -2.0655594 41.606255 5.0975075 -2.3473713 42.06855 5.1554227 -2.6028142 42.01075 5.1502347 -0 0 0 -0 0 0 -0 0 0 -3.789875 43.744068 5.3710361 -0 0 0 -1.9901762 20.106121 2.4899974 -2.1099751 20.059965 2.4858949 -2.2171874 19.904573 2.4685204 -2.322341 19.746655 2.4509046 -3.9592454 31.966764 3.9493392 -4.1518569 31.915289 3.9460814 -4.3488145 31.898066 3.9471674 -4.5200663 31.699783 3.9261732 -4.7494278 31.906118 3.9550102 -5.0256329 32.395302 4.0188375 -2.3019233 14.264192 1.7904302 -2.3861187 14.230219 1.788017 -2.4704945 14.198684 1.7859658 -2.7175989 15.070305 1.8955221 -2.6645939 14.274639 1.7992381 -2.9220932 15.138164 1.908191 -6.3195586 31.686239 3.9614048 -3.0319791 14.733634 1.8625828 -3.3319581 15.702318 1.9852906 -3.4212441 15.649575 1.9813089 -3.2599297 14.485512 1.8389341 -3.4215391 14.779544 1.8781475 -3.7475746 15.747155 2.0016999 -0 0 0 -9.8092604 39.07515 4.9310017 -3.4981906 13.584654 1.7392718 -3.5457313 13.427606 1.7222592 -4.0579 14.993335 1.9221872 -4.2270188 15.246521 1.9572983 -4.2613792 15.012119 1.9309951 -4.2830524 14.743561 1.9003483 -0 0 0 -4.2549391 14.003192 1.8131136 -0 0 0 -4.5270653 14.266892 1.8535335 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.9109302 18.74649 2.5073719 -8.0371637 18.724051 2.5108709 -0 0 0 -8.3134565 18.730167 2.5249877 -0 0 0 -8.5248814 18.58794 2.5197995 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -33.355286 49.206917 7.2596745 -0 0 0 -34.012188 48.873741 7.2714987 -34.493343 48.922119 7.3098679 -34.634773 48.48822 7.2768078 -34.933384 48.277206 7.2771697 -15.387106 20.993347 3.1978898 -14.670565 19.760399 3.0255921 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -18.378578 20.763559 3.4045746 -18.51226 20.657793 3.405781 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.033295 19.727383 3.3660851 -0 0 0 -38.645 39.081192 6.7145476 -39.023834 38.982944 6.7385583 -39.353447 38.83271 6.7541232 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -25.094265 19.316854 3.8833401 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -23.30426 14.541416 3.3729625 -0 0 0 -0 0 0 -0 0 0 -23.285664 13.747619 3.3209596 -24.221508 14.100378 3.4407716 -0 0 0 -0 0 0 -0 0 0 -24.538506 13.489751 3.4377551 -24.650492 13.355008 3.4418573 -28.157841 15.032268 3.913866 -28.183653 14.824554 3.9048169 -28.194757 14.610241 3.8939579 -28.198992 14.393644 3.8823748 -28.152851 14.153025 3.8641555 -28.197348 13.959317 3.8584847 -28.40383 13.845189 3.8748941 -28.724525 13.784019 3.9067473 -28.988983 13.69272 3.9309993 -0 0 0 -0 0 0 -0 0 0 -31.013781 13.728511 4.1566272 -31.016426 13.502692 4.1458888 -0 0 0 -30.857712 12.985534 4.1034179 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -32.540913 -0.41593677 3.9897592 -32.446434 -0.61386538 3.9786587 -32.074875 -0.80372721 3.9340158 -32.494999 -1.0138153 3.9857774 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -24.561899 -1.5212673 3.0253508 -25.415728 -1.7308002 3.1305633 -0 -0 0 -0 -0 0 -25.318247 -2.1930132 3.1230826 -25.362633 -2.3537366 3.1302013 -18.475163 -1.8286426 2.2907932 -27.460333 -2.8888052 3.390337 -27.426304 -3.0554848 3.3884065 -19.673698 -2.3137565 2.4419758 -19.738928 -2.4443147 2.4517491 -27.400854 -3.5644073 3.3927503 -27.392239 -3.7343466 3.3944395 -27.377653 -3.9036133 3.3955252 -18.663633 -2.7777085 2.3277142 -27.318861 -4.2379155 3.3944395 -19.038763 -3.0728302 2.3782692 -19.942759 -3.3444724 2.4920485 -18.62603 -3.2411997 2.3321784 -18.855885 -3.4005442 2.3630664 -19.123508 -3.5701194 2.3987808 -18.828329 -3.6346905 2.3649969 -18.792044 -3.7474318 2.3633077 -18.070581 -3.7189479 2.2766764 -18.136761 -3.8487208 2.2877767 -0 -0 0 -0 -0 0 -18.117002 -4.1944494 2.2945335 -38.170864 -9.0857782 4.8033466 -36.456802 -8.9144487 4.5959382 -31.852129 -7.9958 4.0258355 -31.259327 -8.051178 3.9576645 -0 -0 0 -31.604692 -8.5550575 4.0138903 -0 -0 0 -7.9445739 -2.2545943 1.0380154 -7.9448895 -2.3074539 1.0398252 -25.744463 -7.651371 3.2986381 -31.690216 -9.6307755 4.0599813 -0 -0 0 -0 -0 0 -7.9638577 -2.5803814 1.0517702 -7.9478745 -2.6291981 1.0517702 -0 -0 0 -24.707998 -8.5139446 3.2106793 -24.713358 -8.6858006 3.2181599 -20.452555 -7.3293829 2.674964 -20.392281 -7.4492888 2.6730335 -0 -0 0 -20.272413 -7.6887622 2.6695344 -24.904766 -9.6211805 3.2793329 -0 -0 0 -19.634439 -7.8631358 2.6049831 -19.530668 -7.9609771 2.5977437 -19.45578 -8.070014 2.5943654 -19.351936 -8.1664667 2.5872464 -20.107836 -8.631238 2.693907 -19.679674 -8.5908089 2.6441965 -19.526787 -8.6670933 2.6309242 -19.575483 -8.8328867 2.6445584 -19.665285 -9.0190535 2.6638634 -3.6715147 -1.7101536 0.52655196 -3.6681294 -1.7360488 0.5275172 -3.6636701 -1.7615362 0.5283618 -3.6715217 -1.7931368 0.53089559 -3.7449222 -1.8575605 0.54235798 -3.6217606 -1.8242059 0.52715522 -3.5504079 -1.8156419 0.51895058 -3.4837036 -1.8085604 0.5113492 -3.5375187 -1.8641677 0.5202778 -3.5548964 -1.9012966 0.52425945 -3.5309505 -1.9164401 0.52257025 -3.6278012 -1.9979615 0.53765237 -3.8849401 -2.170851 0.5751766 -3.8430526 -2.1784854 0.57119489 -3.7762661 -2.1713314 0.56371421 -3.7225747 -2.1709459 0.5580433 -3.7219985 -2.2013299 0.5598532 -4.86518 -2.9183185 0.72382551 -4.7810354 -2.907866 0.7144143 -13.950861 -8.6053934 2.0265551 -4.7239504 -2.9531579 0.71139789 -4.6831045 -2.9677362 0.70814019 -4.7332864 -3.0404232 0.71803403 -4.6305289 -3.0146875 0.70584768 -4.4943023 -2.965385 0.68871444 -3.8109963 -2.5480247 0.59146523 -4.4279928 -3.0002611 0.68437082 -3.9209998 -2.6918335 0.61233878 -3.9060388 -2.7169757 0.61258012 -3.8730683 -2.7294507 0.61016697 -3.8425157 -2.7433548 0.60811585 -3.3615761 -2.4310913 0.53849697 -3.3441939 -2.4499111 0.53813499 -3.3179405 -2.4620996 0.5364458 -3.4495444 -2.5927942 0.55876726 -4.3527751 -3.3140783 0.6992116 -4.2781253 -3.2988858 0.69088626 -4.3188186 -3.3727446 0.70029747 -4.1758199 -3.3024764 0.6813544 -4.4281702 -3.5465291 0.72382551 -3.6824772 -2.9863272 0.61052895 -4.5614972 -3.7461734 0.75169724 -3.6577635 -3.0414498 0.61245948 -3.703567 -3.1181972 0.62271529 -4.3973584 -3.7489774 0.73661512 -3.7852347 -3.2672207 0.64202034 -2.5073633 -2.1906981 0.43895525 -2.4886711 -2.201436 0.43811065 -2.5024688 -2.2411783 0.44257495 -3.9788682 -3.6086092 0.68714595 -2.4718535 -2.2690325 0.4420923 -2.4586112 -2.284833 0.44221297 -2.4705653 -2.3243725 0.4465566 -2.424639 -2.3093526 0.4412477 -2.3461306 -2.2621503 0.4303886 -3.5280545 -3.4446292 0.63357437 -2.3407812 -2.3131068 0.43424964 -2.3510985 -2.3520072 0.4384726 -3.632086 -3.6792798 0.66265261 -3.1971745 -3.2785232 0.59086192 -3.1873255 -3.3088057 0.59267175 -4.2827477 -4.5015264 0.78946275 -2.8705294 -3.0539234 0.5436852 -2.8719938 -3.0933094 0.54730487 -2.9005833 -3.1628311 0.55587149 -3.3828092 -3.7347031 0.64672595 -2.0350592 -2.273958 0.40517136 -2.015811 -2.2804499 0.40420613 -1.9900336 -2.2793109 0.40203431 -1.9721227 -2.2869666 0.40131035 -1.9548361 -2.2952442 0.4007071 -3.5304739 -4.1986508 0.70102143 -3.4019308 -4.0964937 0.68147504 -2.6039016 -3.174547 0.53330874 -2.5762539 -3.1804342 0.53174019 -2.5951228 -3.2442551 0.53922087 -2.5942357 -3.2842712 0.54296124 -2.6869423 -3.4449675 0.5652827 -2.6239746 -3.4071107 0.55695742 -2.5916071 -3.4081302 0.55466497 -3.2379375 -4.3132715 0.68980038 -2.3687699 -3.1955919 0.517744 -2.3497036 -3.2108676 0.51786464 -2.6460648 -3.663065 0.58350188 -2.6004937 -3.6468956 0.57867563 -2.5814948 -3.667655 0.57939953 -1.7368686 -2.4994464 0.40420613 -2.2259755 -3.246222 0.51267642 -1.3440335 -1.9852556 0.32565865 -1.3373375 -2.0017221 0.32686523 -1.328306 -2.0148644 0.32758915 -1.3272766 -2.0404572 0.33012295 -1.3158032 -2.0502341 0.33036426 -1.283565 -2.0272274 0.32589996 -1.322073 -2.1167593 0.33760366 -2.3127112 -3.7556455 0.57035029 -1.6926237 -2.7862427 0.43050927 -1.6092111 -2.6858497 0.41482392 -1.3020242 -2.2032778 0.34532568 -1.2749971 -2.1880612 0.34206796 -1.268465 -2.2078969 0.34375715 -1.2558714 -2.2173665 0.34399846 -1.2388577 -2.2189617 0.34315386 -1.2218717 -2.220432 0.34230927 -1.1571578 -2.1336198 0.32927835 -1.6694865 -3.1250041 0.46489641 -1.0398555 -1.974578 0.305509 -1.0245233 -1.9747515 0.3046644 -1.0047154 -1.9659694 0.30261326 -0.99976707 -1.9862883 0.30454376 -1.0443712 -2.1071515 0.32010844 -1.5107099 -3.0968857 0.45307207 -1.0562254 -2.1985688 0.33072624 -0 -0 0 -1.0572007 -2.2716782 0.33881024 -1.4057637 -3.0707378 0.44474676 -1.4471831 -3.2132852 0.46260393 -1.0682431 -2.4105761 0.35473689 -1.0367912 -2.3788569 0.34966934 -1.0815489 -2.5238907 0.36800915 -1.0156062 -2.4106157 0.35220313 -1.0023133 -2.4204712 0.35268575 -0.98557395 -2.4219775 0.35208246 -0.97363919 -2.4353547 0.35304773 -1.3058934 -3.326633 0.46863675 -1.2843866 -3.331804 0.4682748 -1.5345937 -4.0555286 0.56130105 -1.5055362 -4.0537004 0.5598532 -1.1151729 -3.0591893 0.43002665 -0 -0 0 -1.1710782 -3.3396542 0.46441379 -1.1425039 -3.3233051 0.46139738 -1.0714262 -3.1797192 0.4420923 -1.0217407 -3.0947857 0.4303886 -0.97100329 -3.002753 0.41784033 -0.93370563 -2.9490247 0.41023895 -0.78030342 -2.5175211 0.35461625 -0.74930865 -2.4709558 0.34810078 -0.71835166 -2.4222033 0.34134403 -0.71423841 -2.4637544 0.34604964 -0.6969468 -2.4604485 0.34508437 -0.67760873 -2.4493685 0.34315386 -0 -0 0 -0.80883497 -3.0709713 0.42025346 -0.78948349 -3.0739532 0.42001215 -2.0637798 -8.2533464 1.0683002 -2.000422 -8.213769 1.0617847 -0.549236 -2.3132668 0.32324553 -0.53882122 -2.3330381 0.3252967 -0 -0 0 -0.74417675 -3.4152107 0.4591049 -0.48819882 -2.3066235 0.3208324 -0.47722211 -2.3251359 0.32276291 -0.4619807 -2.3231516 0.32215962 -0.44472292 -2.3103442 0.32022911 -0.47383824 -2.546299 0.34906605 -0.46766517 -2.6019225 0.35558149 -0.4873881 -2.8111374 0.38104007 -0.47894153 -2.8669515 0.38755551 -0.46558464 -2.8963008 0.39081323 -1.337751 -8.6759396 1.1012394 -1.3033572 -8.8116474 1.1169249 -1.1570457 -8.1678162 1.0369295 -1.1079717 -8.1826315 1.0378947 -0 -0 0 -0.30277205 -2.456269 0.33506986 -0.28493664 -2.4344161 0.33217412 -0 -0 0 -0 -0 0 -0 -0 0 -0.22048163 -2.3902597 0.32602063 -0.20403388 -2.3707969 0.32348683 -0.1898759 -2.3769522 0.32409012 -0.17521514 -2.3770826 0.32396945 -0.16135685 -2.389008 0.3252967 -0.23876226 -3.9020042 0.50941873 -0.21318798 -3.8736596 0.505799 -0.18989733 -3.88481 0.50700557 -0.11812375 -2.7562397 0.36957768 -0.14285839 -3.9047046 0.50917739 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0.015123528 -2.4956598 0.33760366 --0.00018604747 -2.4887569 0.33675906 --0.015251162 -2.457936 0.33301872 --0.031655706 -2.561028 0.34556702 --0.047087081 -2.5458977 0.34375715 --0.061512176 -2.4979265 0.33796564 --0.076590069 -2.4895644 0.33700037 --0.09138228 -2.4761517 0.33543184 --0.10618545 -2.4666185 0.33434594 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.6447259 -3.5311546 0.50772953 --1.6574384 -3.5021563 0.50519574 --1.6784656 -3.4910259 0.50507504 --1.676316 -3.4325001 0.49855962 --1.6792501 -3.3856936 0.49361268 --1.6865884 -3.3487325 0.48999298 --1.695798 -3.3162284 0.48697656 --1.7151988 -3.3039989 0.48673525 --1.7743357 -3.367171 0.49687043 --1.8296268 -3.4209871 0.505799 --1.8865913 -3.4759936 0.51496893 --1.886323 -3.4252288 0.50953937 --1.9092422 -3.4170558 0.51002198 --1.9438864 -3.4294536 0.51340038 --1.995091 -3.4699488 0.52076042 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --5.1757789 -8.3917398 1.2326345 --5.1418962 -8.2234783 1.2130882 --5.1736541 -8.1624298 1.2088652 --5.2413507 -8.1580896 1.2128469 --5.2772226 -8.1041489 1.2097098 --5.2661448 -7.9796562 1.1963168 --5.2200704 -7.8052773 1.1755639 --5.2338867 -7.7229776 1.1682039 --5.2671242 -7.6702609 1.1651875 --5.3044491 -7.6239467 1.1631364 --5.3436923 -7.580709 1.1615678 --5.4414601 -7.6196699 1.1723062 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.4585447 -8.5649128 1.5851932 --9.5582781 -8.5490656 1.5929152 --9.5726089 -8.4567404 1.5867617 --9.6018772 -8.3782673 1.583142 --9.9200754 -8.5492306 1.6259751 --10.502296 -8.9391994 1.7105554 --10.360888 -8.7098017 1.6794261 --9.9054241 -8.2237949 1.5990688 --10.36335 -8.4970407 1.6631374 --10.674534 -8.6431646 1.703678 --10.878564 -8.6983786 1.7272061 --10.918486 -8.6210089 1.7251549 --10.690109 -8.3347511 1.6818392 --10.40043 -8.0068216 1.6295948 --10.453315 -7.945858 1.6301981 --10.663853 -8.0031109 1.6548121 --10.669684 -7.9056182 1.6482966 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.56966 -8.977457 2.3248184 --16.642824 -8.8854351 2.327352 --16.708452 -8.7891569 2.3289206 --6.8321691 -3.5413611 0.96960306 --16.441038 -8.3925667 2.2778828 --6.8591475 -3.449228 0.96743125 --17.111282 -8.4715881 2.3549826 --6.9759154 -3.4013298 0.97756642 --6.9805441 -3.3507323 0.97539461 --7.0270033 -3.3201318 0.97889364 --7.0895524 -3.2966185 0.98456448 --0 -0 0 --0 -0 0 --7.5593343 -3.3471715 1.0391014 --7.0727496 -3.0800374 0.97189558 --7.0887775 -3.0354099 0.9715336 --7.1228237 -2.9984021 0.97358477 --7.551137 -3.124227 1.0275183 --7.4901557 -3.0453188 1.0170212 --7.3187838 -2.9234738 0.99216586 --7.4262285 -2.9136682 1.0038695 --7.1493802 -2.7545969 0.96550077 --7.0965071 -2.6843469 0.95645154 --7.0895772 -2.6321189 0.95343512 --7.0962663 -2.5851722 0.95222855 --7.0456209 -2.5178733 0.94366193 --22.45948 -7.8685021 2.9267743 --22.256659 -7.6444588 2.8945589 --0 -0 0 --28.399431 -9.3659611 3.6689332 --27.728039 -8.9563084 3.575907 --26.41004 -8.3520432 3.4009547 --26.457945 -8.1889563 3.4005928 --28.206484 -8.5407696 3.6163268 --28.138424 -8.3320293 3.601124 --29.314226 -8.4848566 3.743499 --28.674141 -8.1092701 3.6561437 --13.068814 -3.6101706 1.6822011 --13.07826 -3.5265553 1.6806326 --0 -0 0 --0 -0 0 --12.760542 -3.1901612 1.6329732 --12.776982 -3.1110997 1.6326113 --0 -0 0 --13.096663 -3.0191624 1.667843 --12.801085 -2.8684471 1.6287502 --0 -0 0 --0 -0 0 --17.935087 -3.6730568 2.2594225 --17.634985 -3.4990127 2.219485 --17.654173 -3.3903663 2.2192438 --13.512884 -2.5094683 1.7047639 --17.728647 -3.1795986 2.2234669 --18.018776 -3.1176205 2.2568886 --18.107088 -3.0185859 2.2654552 --17.975304 -2.8833802 2.2469947 --13.426523 -2.0695989 1.6854589 --13.476287 -1.992691 1.6900438 --17.939819 -2.5399239 2.2364976 --0 -0 0 --18.876392 -2.4365711 2.3476224 --23.61055 -2.9001913 2.9255676 --19.913568 -2.3223197 2.4710541 --19.881069 -2.1949713 2.4653833 --19.791477 -2.0622485 2.4528351 --23.406876 -2.2936633 2.8928697 --24.81534 -2.2779737 3.0631163 --18.57193 -1.5902905 2.2998424 --18.567484 -1.4752055 2.2981532 --19.936506 -1.4608473 2.4639354 --19.970848 -1.3402183 2.4670725 --23.90547 -1.4567512 2.9452348 --23.979378 -1.3136232 2.953198 --0 -0 0 --22.821383 -0.96951759 2.8105819 --22.792181 -0.82821006 2.8063591 --22.750198 -0.68693852 2.800688 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --49.173691 8.8140945 5.5056729 --49.334682 9.1557369 5.5297327 --49.331268 9.4685822 5.5357203 --49.405827 9.7975845 5.5506349 --49.401264 10.11211 5.5569491 --49.422905 10.432901 5.5664206 --49.487148 10.764058 5.5808997 --49.526875 11.091397 5.5928755 --49.582844 11.42387 5.6069193 --49.610481 11.751259 5.6180234 --49.627266 12.077301 5.6281481 --49.665066 12.409774 5.6408854 --49.748791 12.755508 5.6590662 --49.705158 13.069875 5.6630945 --49.822708 13.42816 5.6856298 --0 0 0 --0 0 0 --49.907993 14.441598 5.7244954 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --35.638706 13.72368 4.216907 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --34.648773 15.334766 4.1841378 --0 0 0 --0 0 0 --57.558662 26.751484 6.9857183 --57.432983 27.122831 6.9905081 --57.145386 27.417103 6.9759202 --0 0 0 --0 0 0 --0 0 0 --56.904232 29.040356 7.0311155 --56.815884 29.436068 7.0423288 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --21.56723 13.639976 2.8291807 --0 0 0 --20.790556 13.50879 2.7498169 --21.57984 14.210683 2.8642359 --0 0 0 --20.19006 13.653643 2.7037661 --0 0 0 --21.498138 14.925913 2.9007063 --27.757793 19.52528 3.7511744 --0 0 0 --0 0 0 --20.222666 14.788885 2.7782311 --0 0 0 --0 0 0 --0 0 0 --41.104141 31.636026 5.715024 --40.923363 31.89864 5.7169833 --40.637917 32.078926 5.7045727 --0 0 0 --38.202206 30.924664 5.417273 --0 0 0 --36.947075 30.666742 5.293056 --21.728539 18.261623 3.142935 --0 0 0 --22.451698 19.344439 3.2801075 --37.653824 32.846966 5.5067616 --37.318203 32.959599 5.4872746 --36.681026 32.799675 5.4234786 --36.532875 33.072826 5.4314256 --0 0 0 --15.677733 14.547215 2.37673 --15.359224 14.428074 2.3423281 --14.681884 13.962385 2.2533839 --15.27411 14.705094 2.3564808 --15.077523 14.69516 2.3402596 --0 0 0 --14.6513 14.634612 2.3023739 --14.557734 14.720701 2.3018296 --14.069798 14.403018 2.2395577 --14.230346 14.747307 2.2788587 --13.721211 14.395426 2.21245 --13.665334 14.514086 2.2176754 --31.642708 34.023155 5.1230059 --14.124402 15.375395 2.3209903 --14.037143 15.469869 2.3221877 --15.778446 17.604689 2.6235313 --13.355353 15.086461 2.241082 --13.24094 15.143429 2.2374892 --13.164665 15.24395 2.24032 --0 0 0 --17.006336 20.187796 2.9253101 --27.300606 32.814018 4.7093115 --16.736494 20.369625 2.9217176 --0 0 0 --15.059933 18.794724 2.672086 --14.960365 18.907043 2.6749165 --15.035639 19.243654 2.7089918 --14.923351 19.34342 2.7100804 --24.417732 32.054237 4.4474869 --24.693823 32.832649 4.5337095 --24.49605 32.989136 4.5344715 --24.365459 33.237427 4.5478621 --24.138914 33.355705 4.543725 --0 0 0 --22.338001 31.678562 4.279614 --23.637268 33.961628 4.5660429 --23.450953 34.138802 4.5703974 --23.304073 34.375027 4.5826998 --0 0 0 --9.4657326 14.338724 1.9161143 --9.4160957 14.455672 1.9238439 --9.2772369 14.435406 1.9137193 --9.2390585 14.571813 1.9240617 --19.876472 31.777735 4.1393938 --8.6529293 14.025068 1.8392543 --9.1630621 15.057845 1.9648867 --8.4730072 14.118264 1.8377302 --9.0464478 15.285498 1.9796926 --8.9900656 15.405108 1.9878576 --8.3891878 14.580286 1.8767045 --8.2608185 14.563181 1.868104 --8.7874632 15.715472 2.0063651 --17.765429 32.233513 4.0652552 --8.6357021 15.898993 2.0159452 --7.7775559 14.531032 1.8394721 --17.079142 32.38448 4.0441351 --7.6994829 14.819441 1.8634228 --9.6863127 18.926279 2.3629041 --8.7842579 17.42664 2.1717339 --7.5429749 15.195494 1.8923813 --9.6108818 19.663111 2.4313812 --9.8348885 20.438301 2.5184748 --9.29737 19.628645 2.4130917 --7.7293577 16.580614 2.0379364 --7.6797009 16.741571 2.0516536 --17.059626 37.798691 4.5761676 --0 0 0 --0 0 0 --16.056255 37.396572 4.4915781 --14.200938 33.643406 4.033793 --0 0 0 --13.796021 33.837234 4.0364056 --13.564851 33.863113 4.0295467 --13.385934 34.019711 4.0382562 --0 0 0 --12.974152 34.199074 4.0403247 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.664577 14.695354 1.7229844 --4.4061985 14.182604 1.6609304 --4.2404523 13.950678 1.6313186 --0 0 0 --4.0556202 13.955846 1.6260929 --4.2881856 15.101185 1.7536849 --3.8941514 14.040963 1.6302299 --3.7980516 14.028132 1.6260929 --3.724601 14.099227 1.6315362 --3.6558766 14.191123 1.6393747 --3.6801007 14.656785 1.6894535 --0 0 0 --9.303525 39.074623 4.4334431 --3.2856467 14.186506 1.62925 --3.2371895 14.37805 1.6485195 --3.0813582 14.088834 1.6138998 --3.0398595 14.319454 1.6376328 --2.9918361 14.53159 1.6592973 --2.9887812 14.981528 1.7075254 --2.8687105 14.854158 1.6913042 --3.6908813 19.761164 2.236074 --3.4361041 19.043877 2.1537707 --3.3203819 19.071457 2.1545327 --0 0 0 --3.1623304 19.582792 2.2068977 --4.935914 31.8029 3.5591333 --4.7305779 31.764748 3.5516214 --3.940701 27.623581 3.0903525 --4.3322234 31.760326 3.5449805 --4.1397023 31.805038 3.547049 --4.0102501 32.360584 3.6056194 --3.8610027 32.804157 3.6518877 --3.5970829 32.266083 3.5900514 --3.432966 32.609829 3.6255419 --0 0 0 --2.9891362 32.182316 3.5741568 --2.8034632 32.33672 3.5891805 --2.604996 32.353313 3.5891805 --2.4059148 32.361748 3.5884185 --0 0 0 --2.1559336 34.764042 3.8490458 --1.9382043 34.698208 3.8404453 --1.7269912 34.744198 3.8442554 --1.5126907 34.729309 3.8415339 --1.3197895 35.278328 3.9007576 --1.1254904 35.995171 3.9784884 --0.90648061 36.075928 3.9866533 --0.68901455 36.286545 4.0091887 --0.43817535 34.099369 3.7692463 --0.22248633 33.142174 3.6641898 --0.019068202 33.045498 3.6535208 -0.18345843 33.002251 3.6488395 -0.38596457 33.001495 3.6489484 -0.5896374 33.065098 3.6562424 -0.79403377 33.124458 3.6632099 -0.99101609 32.911301 3.6404567 -1.19949 33.0854 3.6602705 -1.4077799 33.202557 3.6739876 -0 0 0 -2.2460692 41.062817 4.5382819 -2.5032361 41.134586 4.5477533 -2.7641592 41.246399 4.5617971 -0 0 0 -2.1728153 27.379786 3.0424509 -2.3638132 27.635338 3.0720627 -0 0 0 -3.3655202 34.374214 3.8170388 -2.0785728 19.964161 2.2326992 -2.2037561 19.975733 2.2354209 -3.8043902 32.647648 3.6341424 -2.5269549 20.584562 2.3057489 -4.1125541 31.883734 3.5552139 -4.3011851 31.806675 3.5495529 -4.5312161 32.026733 3.5768785 -4.7073045 31.860653 3.5616372 -0 0 0 -5.069294 31.621851 3.5418234 -5.186286 31.128315 3.4905469 -2.4631982 14.243241 1.6174924 -5.5726233 31.088747 3.4934864 -2.6503141 14.27938 1.6250043 -2.8862779 15.03603 1.7112268 -6.2804308 31.669306 3.5703466 -3.008981 14.698554 1.677587 -3.0387526 14.393863 1.6455802 -0 0 0 -8.6171751 38.478222 4.3528814 -8.8408365 38.371346 4.3468938 -3.5400052 14.943693 1.7163436 -9.1848259 37.741295 4.2884326 -3.8744485 15.504775 1.784712 -3.482909 13.582811 1.5701354 -3.5328183 13.434283 1.5557649 -10.146045 37.644653 4.304327 -10.343237 37.459995 4.2905006 -10.789514 38.162033 4.3777032 -4.0946469 14.149461 1.6476486 -11.392443 38.484276 4.4299593 -4.3742456 14.449223 1.6878204 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -8.0682592 18.851473 2.2801652 -0 0 0 -8.3170919 18.791948 2.2850642 -0 0 0 -24.775953 54.175301 6.5586333 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -33.505817 50.881725 6.7065835 -0 0 0 -0 0 0 -33.736034 49.23381 6.5708265 -34.077744 49.083858 6.5785561 -0 0 0 -0 0 0 -14.9857 20.757931 2.8383255 -14.545374 19.889671 2.7330513 -29.440413 39.744041 5.4512396 -29.758295 39.662045 5.464848 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -31.902716 38.919674 5.5458446 -32.140285 38.722424 5.5457358 -0 0 0 -0 0 0 -0 0 0 -36.360596 41.681709 6.0921388 -0 0 0 -0 0 0 -18.665415 20.617914 3.0803366 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -18.986423 19.721273 3.0325441 -0 0 0 -0 0 0 -38.97448 39.019859 6.0743933 -39.519913 39.083344 6.1216416 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -43.907558 37.919525 6.3881478 -44.05999 37.581665 6.3767166 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -23.905628 15.993129 3.1844134 -24.02405 15.859838 3.187135 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -23.440912 14.462457 3.0509427 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -25.851875 14.455627 3.2782567 -24.625511 13.572187 3.1138678 -0 0 0 -28.17663 15.081618 3.5345292 -28.186867 14.865319 3.5244048 -28.177872 14.640298 3.5121026 -28.183992 14.424554 3.5018692 -28.147699 14.188704 3.4866278 -28.183477 13.990531 3.4804225 -28.325054 13.844839 3.4872811 -28.738207 13.828973 3.5272353 -28.930323 13.703444 3.5402992 -30.741903 14.331277 3.7491059 -30.824741 14.140306 3.7485616 -0 0 0 -30.916901 13.725881 3.7390902 -0 0 0 -0 0 0 -31.029688 13.09765 3.7230866 -31.513462 13.074626 3.7709882 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -32.70829 -0.58327883 3.6171591 -32.466583 -0.77827156 3.59114 -32.109459 -0.96688098 3.5526011 -33.016853 -1.1970057 3.6527586 -0 -0 0 -35.59211 -1.7279104 3.93701 -0 -0 0 -18.598263 -1.1320111 2.0750599 -18.599892 -1.2467047 2.0760398 -25.432592 -1.8613571 2.8272212 -25.434566 -2.0184743 2.8287454 -24.81159 -2.1223223 2.7616832 -25.036667 -2.2964013 2.7879202 -0 -0 0 -27.477398 -2.8606648 3.0599785 -27.436604 -3.0267024 3.0574746 -18.611103 -2.1689007 2.0864909 -27.405289 -3.3641326 3.0583456 -19.366869 -2.4982116 2.1730402 -19.372849 -2.6199279 2.1754353 -25.299345 -3.579494 2.8327734 -18.38044 -2.7158179 2.0692899 -27.366814 -4.2151546 3.066946 -18.287819 -2.9318869 2.0628669 -20.294304 -3.3813727 2.287677 -19.009592 -3.2873466 2.1472387 -18.983192 -3.4028733 2.1465855 -19.108561 -3.5464942 2.1629155 -20.102705 -3.8587275 2.2762458 -18.208466 -3.611145 2.0674393 -18.194729 -3.7245963 2.068419 -18.193903 -3.840889 2.0709231 -18.192335 -3.9573116 2.073427 -37.428646 -8.3821344 4.2350874 -37.12756 -8.5542784 4.207109 -37.866585 -8.969573 4.2962708 -0 -0 0 -37.647579 -9.407073 4.2842956 -31.500662 -8.076869 3.5959301 -31.29669 -8.2295561 3.5785115 -0 -0 0 -0 -0 0 -7.9643154 -2.2520697 0.94088483 -7.9551215 -2.3022768 0.9414292 -0 -0 0 -25.779713 -7.8040252 2.9843161 -32.002747 -9.9025221 3.7032728 -0 -0 0 -7.9687304 -2.5736232 0.95155382 -7.9839435 -2.6327417 0.95514643 -0 -0 0 -24.935337 -8.5623159 2.9218266 -26.873146 -9.4124146 3.152842 -0 -0 0 -0 -0 0 -20.259144 -7.5173793 2.4010074 -25.044046 -9.4679956 2.9666796 -20.149599 -7.7593517 2.3991566 -19.664797 -7.711555 2.3477714 -19.753744 -7.8866186 2.3638837 -0 -0 0 -19.547079 -8.0836086 2.3510375 -19.444885 -8.1814222 2.3448322 -20.009361 -8.563798 2.4180994 -0 -0 0 -19.555521 -8.6550217 2.3765123 -19.773098 -8.896801 2.4090636 -3.69098 -1.6884003 0.47896269 -19.644402 -9.1303988 2.4068861 -19.588009 -9.250762 2.4068861 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -5.1218171 -2.6539986 0.66621375 -5.1071959 -2.686301 0.66643149 -5.0669394 -2.7049494 0.66349202 -5.0790906 -2.7516127 0.66708463 -3.4409103 -1.8916698 0.46448341 -3.9275801 -2.190644 0.52697301 -3.9850113 -2.2548378 0.53590006 -3.7564168 -2.1560519 0.50879222 -4.8943543 -2.8491132 0.65467381 -4.8690758 -2.8745432 0.65369403 -4.7941999 -2.8701587 0.64639997 -4.7391081 -2.8768275 0.64160979 -4.6875033 -2.8850129 0.63725513 -4.6604357 -2.907933 0.63605762 -4.6618285 -2.9486945 0.63856155 -3.8486221 -2.4675987 0.53513801 -3.9401045 -2.5604908 0.54907298 -3.8354857 -2.5261221 0.53742421 -3.7934542 -2.5319517 0.53394049 -3.8824253 -2.6258996 0.54776657 -3.8006384 -2.6047213 0.5390572 -3.7870343 -2.6296933 0.53938383 -3.1756659 -2.2342446 0.45969325 -4.5203018 -3.2217011 0.64237189 -4.3126545 -3.1138074 0.61700588 -3.8168433 -2.791666 0.55233896 -3.7525139 -2.7801235 0.54591584 -4.2084908 -3.1580603 0.61069161 -4.1914086 -3.1856279 0.61101824 -4.1899014 -3.2252307 0.61352217 -4.174737 -3.2545455 0.61417538 -4.2350554 -3.3435388 0.62538862 -4.246295 -3.3949099 0.62985218 -4.0044093 -3.2420247 0.59871626 -3.9329326 -3.224313 0.5914222 -3.8480575 -3.1944199 0.58216852 -3.6602044 -3.0766289 0.55810893 -3.5693371 -3.0378292 0.54776657 -3.6131368 -3.1135275 0.55680251 -3.3699851 -2.9402554 0.52425134 -2.542733 -2.2462466 0.40602189 -2.5363126 -2.2684321 0.40711057 -2.5186613 -2.2806163 0.40656623 -4.01792 -3.6829698 0.63137633 -2.5072448 -2.3269033 0.40907016 -3.5123417 -3.2998269 0.56224585 -3.5107572 -3.3391266 0.56507641 -2.4331958 -2.343014 0.4043889 -2.298465 -2.2406466 0.38599038 -2.3059018 -2.2756522 0.38925639 -2.3305779 -2.3283951 0.39524406 -2.3043642 -2.330636 0.39339334 -2.2705703 -2.3248215 0.39034507 -2.8326366 -2.9359992 0.48124892 -2.9304798 -3.0749266 0.49964741 -2.9108758 -3.0921259 0.49953854 -2.937206 -3.1586981 0.5068326 -2.9735873 -3.2374203 0.51586854 -2.0578773 -2.2684226 0.36987808 -2.0399389 -2.2765653 0.36922488 -2.0213194 -2.2838295 0.36846283 -2.0000703 -2.2879574 0.36726528 -1.9742987 -2.2866447 0.36530569 -1.9370072 -2.2714889 0.36138648 -2.8568132 -3.3917646 0.52011436 -2.8531139 -3.429862 0.52305377 -1.8399649 -2.2399383 0.35191506 -1.8499875 -2.2805181 0.35605201 -3.8710866 -4.8315692 0.71248215 -3.2917712 -4.1606693 0.61548173 -1.837687 -2.3525658 0.36138648 -3.2277141 -4.1842232 0.61319554 -2.5845418 -3.3934283 0.501607 -2.7459135 -3.651525 0.53481138 -2.7199006 -3.6635165 0.53415823 -1.8369473 -2.5064392 0.37477711 -1.8471763 -2.5530963 0.37956724 -1.4015644 -1.9625921 0.29857028 -2.4028928 -3.4082694 0.4911558 -2.4131677 -3.467823 0.49714348 -2.3957841 -3.4883001 0.49790552 -2.7904644 -4.1167397 0.57912022 -2.3494804 -3.5124803 0.49725235 -1.606596 -2.4342756 0.35387465 -1.3279381 -2.0392871 0.30096537 -1.3218497 -2.0574317 0.30227175 -1.3001513 -2.0512319 0.30042103 -1.3160069 -2.1046803 0.30629984 -2.6361797 -4.2733684 0.58434582 -2.6099093 -4.289463 0.58434582 -1.7297647 -2.8828588 0.40264702 -2.2127838 -3.7394602 0.51031637 -0 -0 0 -1.2232703 -2.1267064 0.3031427 -0 -0 0 -1.1800995 -2.1111908 0.29933235 -1.1464906 -2.0809572 0.29465109 -1.1374962 -2.0949407 0.295522 -1.118522 -2.0904877 0.29410675 -0 -0 0 -1.06941 -2.0590694 0.28855455 -1.0431687 -2.0390458 0.28528854 -1.0342174 -2.0525093 0.28615946 -1.0631526 -2.1425123 0.29639295 -1.5402156 -3.1519198 0.41865045 -1.0372117 -2.1562932 0.29650182 -1.5056762 -3.1795669 0.41973913 -1.0824964 -2.3229232 0.31511804 -1.0806575 -2.3566272 0.31838405 -1.457528 -3.2302999 0.42256966 -1.0778756 -2.428766 0.3254604 -0 -0 0 -1.0503428 -2.4472909 0.32611361 -1.3546189 -3.2101481 0.41603765 -1.3448009 -3.2422717 0.41886818 -1.3361408 -3.2780766 0.42213419 -1.3237643 -3.3055916 0.42442039 -1.299089 -3.3025515 0.423114 -1.278442 -3.3095334 0.42300513 -1.5218604 -4.0125198 0.50443757 -1.4857638 -3.9910405 0.50084496 -0 -0 0 -1.1468567 -3.2004843 0.40678397 -1.1341208 -3.2271545 0.40907016 -1.1259595 -3.2678852 0.41298938 -0 -0 0 -1.0317321 -3.1181962 0.39415541 -0.97364455 -3.0043771 0.38032931 -0.9181971 -2.8937566 0.36693868 -0.8644402 -2.7835226 0.35365692 -0.80484396 -2.6489654 0.33765349 -0.94607788 -3.1836321 0.39818347 -0.74786294 -2.5746412 0.3280732 -0.89091629 -3.1385839 0.39176032 -0.83178771 -3.0003076 0.37543032 -2.2981727 -8.4889183 0.99760449 -0.66693252 -2.5259049 0.32056141 -0.78683758 -3.0555398 0.38000271 -0.77848482 -3.1017675 0.384684 -2.0827749 -8.5166903 0.99466509 -0.58609223 -2.4631827 0.31174317 -0.56782699 -2.4531748 0.31021905 -0.9639551 -4.2826977 0.5152154 -0.73756319 -3.3737595 0.41266277 -0.72283548 -3.4064207 0.41581991 -0.57521528 -2.7954578 0.34701604 -0.55785733 -2.7979598 0.34690717 -0.54482633 -2.8228025 0.34930226 -0.81661934 -4.3739057 0.52174741 -1.4867004 -8.2409906 0.95155382 -0.51085085 -2.9361608 0.36084214 -0.49414137 -2.9470828 0.36171308 -1.3788197 -8.539772 0.9818188 -1.2812643 -8.2573128 0.9495942 -0 -0 0 -0 -0 0 -1.1395372 -8.3563223 0.95808583 -1.0851628 -8.3394995 0.95547301 -0 -0 0 -0 -0 0 -0.26870921 -2.4136572 0.30042103 -0.25555959 -2.431078 0.30216289 -0 -0 0 -0.35075349 -3.7801521 0.45022184 -0.20484301 -2.3670366 0.29465109 -0.19215053 -2.3910384 0.29715502 -0.1788763 -2.4110076 0.29922348 -0.16272672 -2.3922246 0.29704615 -0.15050687 -2.4328642 0.30140084 -0.13635258 -2.4476368 0.30292496 -0.12883446 -2.5993376 0.31947273 -0.11058958 -2.5474441 0.31370279 -0.096109055 -2.5788689 0.31707767 -0.079817437 -2.5645065 0.31544465 -0 -0 0 -0.050078202 -2.6567297 0.3254604 -0.031807121 -2.5039148 0.3086949 -0 -0 0 -0 -0 0 --0.014061082 -2.4633205 0.30423138 --0.029140629 -2.4602058 0.30390477 --0.043226041 -2.4033284 0.29769936 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.6550375 -3.5036924 0.45882234 --1.6730647 -3.4863014 0.4579514 --1.6778764 -3.4420135 0.45381445 --1.6725072 -3.3781996 0.44728243 --1.6815971 -3.3447809 0.4444519 --1.6948589 -3.3202331 0.44271004 --1.7106267 -3.3009448 0.44162136 --1.7535205 -3.3334973 0.44695583 --1.8464936 -3.4586031 0.4638302 --1.8686273 -3.4489563 0.46404794 --1.886403 -3.4313276 0.46328586 --1.9117789 -3.4275019 0.46426567 --1.9401156 -3.4286852 0.46589866 --4.8411069 -8.4354916 1.0996127 --0 -0 0 --4.9841776 -8.4430761 1.1082132 --0 -0 0 --5.0889592 -8.3838263 1.1085398 --0 -0 0 --5.13095 -8.2237558 1.0960201 --5.1722813 -8.1778355 1.0941694 --5.1762257 -8.0739746 1.0848068 --0 -0 0 --0 -0 0 --5.2312651 -7.838418 1.0665172 --5.2725801 -7.7962909 1.0652108 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.6962147 -8.7980089 1.4683448 --9.7411327 -8.7303867 1.4670385 --9.8548059 -8.7238245 1.4758567 --10.066046 -8.8012581 1.4988276 --10.314712 -8.907609 1.5270241 --9.9857302 -8.5170832 1.4718286 --0 -0 0 --9.8174562 -8.1675653 1.433072 --10.009475 -8.2239218 1.4532124 --10.589272 -8.5920258 1.5278951 --10.533966 -8.4404869 1.5127625 --10.56607 -8.3602724 1.5100409 --10.347713 -8.0847425 1.4725907 --10.406569 -8.0283842 1.4738971 --0 -0 0 --10.412947 -7.8313608 1.4613774 --11.048991 -8.2040882 1.5416123 --0 -0 0 --10.705117 -7.7467651 1.4816266 --0 -0 0 --10.815624 -7.6262708 1.483804 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.608984 -8.8898191 2.0975955 --16.653545 -8.7826395 2.0963979 --16.699183 -8.6761656 2.095418 --16.449472 -8.4186459 2.0581856 --16.325064 -8.2289581 2.0366299 --16.528393 -8.2046595 2.0553551 --6.96982 -3.4064045 0.88405633 --6.9825282 -3.359695 0.88307655 --6.9850445 -3.3082767 0.88089919 --7.0989118 -3.3090374 0.89222133 --7.1516089 -3.2803385 0.89614058 --7.1951594 -3.2470276 0.89897108 --7.0759406 -3.1411026 0.88231444 --7.0868821 -3.0940461 0.88133466 --7.17698 -3.0810943 0.8898263 --7.4540086 -3.1460137 0.92052674 --7.4373631 -3.0853605 0.91628093 --0 -0 0 --0 -0 0 --0 -0 0 --7.629528 -2.947772 0.9302159 --21.321993 -8.0887947 2.5319743 --22.824463 -8.4989719 2.7018065 --21.939705 -8.0165663 2.592613 --22.295406 -7.9918199 2.6283214 --22.416235 -7.8802538 2.6367042 --7.014853 -2.41747 0.84704161 --22.50654 -7.6029878 2.6361599 --22.559374 -7.4669337 2.6369219 --0 -0 0 --0 -0 0 --26.728428 -8.3042564 3.099715 --28.244497 -8.5856304 3.2674789 --28.297598 -8.4124479 3.2675877 --0 -0 0 --28.622461 -8.1281052 3.2930624 --29.21492 -8.1029749 3.35479 --13.031208 -3.5281098 1.5129802 --0 -0 0 --33.868992 -8.7258024 3.8648314 --12.775781 -3.2077558 1.4770542 --12.801016 -3.1307218 1.4777074 --12.83449 -3.0555711 1.4793404 --12.914976 -2.9911189 1.4863079 --0 -0 0 --18.333494 -4.0098276 2.089757 --34.431213 -7.3099308 3.8893263 --0 -0 0 --0 -0 0 --25.295584 -4.8854961 2.855962 --17.893822 -3.3420711 2.0280294 --17.985403 -3.2451003 2.0359766 --18.167543 -3.1629896 2.0540485 --18.122887 -3.0407629 2.0469723 --19.576904 -3.1613796 2.2062445 --19.528154 -3.030678 2.1987326 --17.971279 -2.6762056 2.024328 --18.832695 -2.6864908 2.1178446 --18.833067 -2.5687351 2.1161027 --23.69437 -3.083926 2.6512923 --23.818403 -2.9515643 2.662941 --19.646217 -2.3121715 2.2009101 --19.697577 -2.1957667 2.2050469 --23.499952 -2.4738216 2.6223338 --18.485535 -1.8312622 2.0688546 --18.616188 -1.7289281 2.0820274 --19.936666 -1.7282758 2.2260582 --19.937979 -1.605196 2.2250786 --19.986115 -1.4857033 2.2293243 --23.639547 -1.6115731 2.62941 --23.014015 -1.4271072 2.5597353 --22.887356 -1.2783275 2.5449293 --22.882856 -1.137277 2.543623 --22.843719 -0.99485862 2.538615 --0 -0 0 --22.813471 -0.71318197 2.5341516 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --49.16497 8.8685169 4.8715057 --49.35228 9.2153358 4.8954048 --49.32901 9.5245867 4.8987775 --49.394581 9.8520088 4.9111123 --49.466763 10.182399 4.9243145 --49.421852 10.489655 4.9261456 --49.50922 10.826091 4.9412751 --49.536053 11.150875 4.950623 --49.625729 11.491442 4.9664268 --49.627872 11.813242 4.9737511 --49.66951 12.145668 4.9852185 --49.750443 12.48947 5.0008302 --49.766369 12.818583 5.0101776 --49.730083 13.135141 5.014514 --49.74847 13.467083 5.0245361 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --34.923733 14.486938 3.695251 --0 0 0 --0 0 0 --34.66758 15.134483 3.6969855 --0 0 0 --57.826153 26.094934 6.1768923 --35.176559 16.133978 3.7814994 --0 0 0 --56.627186 26.819172 6.100955 --56.485779 27.177778 6.1035566 --56.537048 27.630938 6.1271667 --0 0 0 --56.269264 28.360733 6.1353579 --56.171276 28.744911 6.1437416 --55.995609 29.089949 6.1439347 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --21.886375 14.254247 2.5634215 --21.158049 13.965493 2.4891224 --21.940622 14.676162 2.5903077 --21.872404 14.82559 2.5929096 --20.085985 13.795231 2.3938155 --21.743561 15.130976 2.5993662 --19.964806 14.075665 2.399694 --19.902361 14.21526 2.402585 --20.117151 14.555927 2.4387226 --20.399944 14.952129 2.4834368 --20.731363 15.391502 2.5345113 --0 0 0 --0 0 0 --0 0 0 --39.839108 31.124235 4.9293256 --0 0 0 --0 0 0 --0 0 0 --39.382446 32.354786 4.9693179 --36.927437 30.719221 4.6852283 --0 0 0 --35.395061 30.186991 4.538558 --23.653843 20.42491 3.0603857 --22.425817 19.60593 2.9186299 --36.930668 32.689892 4.8097343 --21.056126 18.869253 2.7720559 --36.542213 33.154671 4.811758 --0 0 0 --0 0 0 --0 0 0 --15.276191 14.558417 2.0777321 --15.188724 14.65395 2.078021 --14.453432 14.116734 1.9907128 --32.069229 31.711004 4.4011388 --0 0 0 --14.223998 14.413682 1.995242 --14.077626 14.441527 1.9872435 --13.975633 14.51401 1.9854126 --29.834373 31.368567 4.2259436 --29.701309 31.614876 4.2344241 --14.273466 15.380214 2.0661681 --14.081979 15.361844 2.0522912 --0 0 0 --13.483031 15.07571 1.9928328 --15.726168 17.802759 2.3344536 --27.255968 31.240601 4.0486283 --0 0 0 --0 0 0 --27.43457 32.639156 4.1627269 --0 0 0 --15.320852 18.687443 2.374253 --16.569324 20.465256 2.584044 --0 0 0 --0 0 0 --0 0 0 --24.663654 32.040752 3.9493706 --0 0 0 --23.329515 31.089464 3.7978816 --23.014484 31.064871 3.777741 --23.03849 31.499548 3.8130114 --22.802248 31.581406 3.8059766 --22.582043 31.684248 3.80164 --0 0 0 --23.901943 34.422379 4.0919938 --23.752174 34.658707 4.1025939 --0 0 0 --23.323412 34.945091 4.1023049 --21.951807 33.331055 3.8986814 --0 0 0 --9.2569675 14.436951 1.6950589 --9.212369 14.563299 1.7030574 --0 0 0 --0 0 0 --8.5734663 14.122035 1.634155 --8.4902325 14.180353 1.6348296 --19.084608 32.326332 3.6691356 --8.4537792 14.520896 1.6614269 --8.8337011 15.390021 1.7526864 --8.7704716 15.499377 1.7588539 --8.7610149 15.706766 1.7759109 --8.6956406 15.816923 1.7821747 --7.9275703 14.631601 1.6458155 --17.453516 32.693626 3.6227829 --17.230806 32.758698 3.6182537 --7.7530689 14.960632 1.6660526 --7.6733437 15.031859 1.6686544 --7.5832005 15.083106 1.6691363 --9.4978809 19.184553 2.1072204 --9.591054 19.67552 2.153862 --9.4270878 19.64426 2.1442251 --7.7140465 16.33028 1.7832347 --16.076323 34.583755 3.727052 --0 0 0 --17.820328 39.60006 4.2389531 --0 0 0 --16.290606 37.421021 3.9860864 --0 0 0 --0 0 0 --8.4513168 20.431736 2.1753519 --8.3261652 20.484129 2.1754482 --13.250509 33.183208 3.4940367 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --11.750396 37.966431 3.8824918 --4.3772373 14.454158 1.4968323 --4.3031592 14.530373 1.5018433 --4.0744634 14.074622 1.4532744 --3.9376521 13.921208 1.4353501 --3.8807735 14.048727 1.4457577 --3.7983849 14.08669 1.4472033 --3.5594802 13.530237 1.3891903 --3.6408098 14.192983 1.4532744 --3.6535623 14.614833 1.4931703 --3.7671983 15.47256 1.5764313 --3.644655 15.379159 1.5648673 --3.2949762 14.293576 1.4548162 --3.2100387 14.326152 1.456069 --3.2727253 15.038067 1.5246823 --3.1082206 14.716035 1.4908575 --2.9196448 14.255071 1.443445 --3.8652444 19.481417 1.9575624 --3.7627125 19.593719 1.9663318 --5.0660415 27.285955 2.7215595 --3.5005553 19.518892 1.9545752 --5.5263901 31.94595 3.1735203 --5.3139086 31.881077 3.1638837 --4.3977213 27.419754 2.723294 --4.5240064 29.358614 2.9106314 --4.7148318 31.896685 3.1563671 --4.1746869 29.491749 2.9184372 --4.2970395 31.7598 3.1375756 --0 0 0 --3.9916432 32.499714 3.2048397 --3.4792821 29.839401 2.9432034 --3.5998354 32.612534 3.2112963 --3.4004858 32.64193 3.2120671 --3.2155609 32.819687 3.2273896 --3.0127585 32.823929 3.225944 --0 0 0 --2.8344634 35.689247 3.5008788 --2.6625221 36.349228 3.5633247 --2.3870988 35.58429 3.4875803 --0 0 0 --1.9510067 35.624821 3.4889293 --1.6940806 34.84774 3.4125104 --1.4914089 35.12101 3.4380476 --1.2869631 35.434868 3.4676323 --1.0708641 35.48687 3.4719687 --0.86189002 35.858952 3.5074317 --0.60486859 33.793579 3.3069885 --0.40331617 34.292301 3.3549793 --0.18507691 32.895691 3.2195837 -0.016831543 33.007687 3.230377 -0.21920298 32.983074 3.2280641 -0.42148989 32.97414 3.2273896 -0.62354338 32.957001 3.2260404 -0 0 0 -1.0332433 33.116989 3.2425191 -0 0 0 -1.4513342 33.372295 3.2687309 -1.664421 33.530766 3.285017 -1.8636394 33.403648 3.273742 -2.5202339 40.678463 3.9805934 -1.8829477 27.648407 2.7177048 -0 0 0 -0 0 0 -0 0 0 -3.1854582 34.320351 3.3717473 -3.3933351 34.273415 3.3691452 -2.1013374 19.977892 1.9795341 -3.6843455 33.068836 3.2561069 -3.7922683 32.238968 3.1774714 -3.9911129 32.223984 3.1783388 -4.2125216 32.381489 3.1961665 -4.4326501 32.512825 3.2115853 -4.4958773 31.530188 3.1182058 -4.6842747 31.468534 3.1149292 -4.882463 31.472643 3.1182058 -5.078815 31.462727 3.1202295 -5.279182 31.475145 3.1245661 -5.4349976 31.22839 3.1035581 -2.5813613 14.315136 1.4429631 -2.6724377 14.316639 1.4446977 -2.8613875 14.8238 1.4963504 -6.2497854 31.336464 3.1283243 -3.0061541 14.608189 1.4786189 -7.0709863 33.316681 3.3321404 -7.4590092 34.112793 3.4154015 -3.4111657 15.157281 1.5388482 -3.543179 15.30479 1.555616 -3.63218 15.262427 1.5535923 -3.6325998 14.858913 1.5156238 -3.8431952 15.312279 1.5631326 -3.5082722 13.62379 1.3967069 -3.543247 13.4182 1.3783009 -4.1124282 15.194749 1.5586997 -3.9454415 14.231185 1.464453 -4.2297974 14.900893 1.5343189 -4.2431016 14.606076 1.5072398 -4.349659 14.637012 1.5130218 -4.4451771 14.629093 1.5149492 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.9138594 20.485882 2.1608968 -0 0 0 -0 0 0 -0 0 0 -7.8688173 18.970795 2.023092 -7.9676547 18.88089 2.0187554 -8.114768 18.904816 2.0264649 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.144136 31.902866 3.6368525 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -32.686779 50.865173 5.8884659 -32.840183 50.420952 5.8604231 -33.146748 50.215179 5.8600378 -32.371719 48.392654 5.6715441 -0 0 0 -33.851849 49.285599 5.8235145 -0 0 0 -33.586292 47.635696 5.6777115 -14.88233 20.836212 2.513696 -14.663877 20.266329 2.4565504 -14.579053 19.890987 2.4223402 -0 0 0 -29.889103 39.744995 4.8493414 -14.563346 19.12122 2.3617253 -30.341755 39.332661 4.8441377 -30.548206 39.101826 4.8387408 -0 0 0 -30.711447 38.331741 4.7900758 -30.882101 38.06374 4.7802463 -31.160568 37.928905 4.7871847 -0 0 0 -0 0 0 -0 0 0 -36.082199 41.784988 5.379745 -36.391632 41.624252 5.3876472 -36.835693 41.614071 5.4153042 -37.126873 41.428036 5.4206042 -37.474678 41.303387 5.4341922 -0 0 0 -0 0 0 -38.444878 40.836334 5.4647403 -0 0 0 -19.043331 19.737783 2.6900475 -39.228279 40.160931 5.4700408 -38.650219 39.086468 5.356617 -38.802704 38.762054 5.3447638 -19.230791 18.977163 2.6504407 -0 0 0 -39.644413 38.171043 5.3628807 -0 0 0 -0 0 0 -44.073734 40.899242 5.8559904 -0 0 0 -44.370876 40.172939 5.8296819 -43.519932 38.919289 5.6872516 -43.423702 38.356323 5.6440792 -43.664986 38.095047 5.6449466 -44.191986 38.0798 5.6825299 -44.292156 37.695034 5.6656656 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -18.469414 14.582032 2.3129637 -0 0 0 -0 0 0 -25.233669 19.178741 3.1032689 -0 0 0 -25.483118 18.87949 3.1051962 -0 0 0 -0 0 0 -25.809288 18.3951 3.1031725 -0 0 0 -26.876835 18.66284 3.2026231 -0 0 0 -0 0 0 -0 0 0 -24.130493 15.892711 2.8320923 -24.19417 15.722656 2.8282378 -0 0 0 -0 0 0 -0 0 0 -24.036156 14.79394 2.7672374 -23.756351 14.421511 2.7253177 -24.105722 14.431914 2.754806 -23.840681 14.075263 2.7151029 -24.299934 14.146029 2.7569261 -24.106571 13.83614 2.7257032 -25.754696 14.572652 2.8996456 -0 0 0 -0 0 0 -0 0 0 -28.178577 15.043337 3.1272643 -28.182257 14.82382 3.1176276 -28.195797 14.61078 3.1092436 -28.179417 14.383653 3.0977759 -28.178211 14.165773 3.0881393 -28.184317 13.952868 3.0794663 -28.395557 13.841157 3.0930541 -28.680965 13.763117 3.1146402 -28.987177 13.691868 3.1384428 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -31.108519 13.316331 3.3108432 -31.217165 13.136783 3.3137343 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -32.511108 12.065789 3.3920805 -36.643612 13.34409 3.810313 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -32.77787 -0.62014788 3.2086942 -32.764492 -0.8210327 3.2078271 -37.267548 -1.1628867 3.644562 -0 -0 0 -0 -0 0 -0 -0 0 -31.332573 -1.7480181 3.0729134 -0 -0 0 -0 -0 0 -25.46649 -1.8913125 2.5070467 -30.530182 -2.4560628 3.0000598 -25.446321 -2.2041128 2.5075285 -30.664246 -2.8459899 3.0162497 -25.429243 -2.5173895 2.5086849 -27.429701 -2.8855815 2.7049844 -27.432253 -3.0561478 2.7070081 -27.414961 -3.2246442 2.7072008 -27.408489 -3.3945117 2.70855 -27.38221 -3.561981 2.7080681 -27.367727 -3.731004 2.7088392 -19.318449 -2.7541521 1.9239304 -27.387812 -4.0766816 2.7154884 -27.360315 -4.244348 2.7152956 -18.521622 -2.989332 1.8510771 -18.831776 -3.1580904 1.8833599 -0 -0 0 -19.083504 -3.4416084 1.9120773 -19.167698 -3.5783718 1.922485 -18.394821 -3.5509768 1.8484751 -37.693897 -7.5179625 3.7559621 -37.761124 -7.7725883 3.7672369 -37.611458 -7.9826455 3.7572148 -0 -0 0 -37.489304 -8.4387856 3.7550948 -38.166992 -8.8377542 3.8276591 -38.142063 -9.0789223 3.8306465 -0 -0 0 -37.78064 -9.484252 3.8059766 -31.417963 -8.0920429 3.1757369 -31.394667 -8.2917852 3.1784351 -31.403725 -8.5006495 3.1845062 -31.304935 -8.6804113 3.1798806 -7.974371 -2.2630548 0.83720058 -7.9393072 -2.3058317 0.8350805 -31.553928 -9.3782463 3.2217038 -0 -0 0 -32.214005 -10.006304 3.3005321 -0 -0 0 -7.9680457 -2.5817389 0.84558451 -7.9501643 -2.629956 0.84539181 -25.223816 -8.5189247 2.6122794 -0 -0 0 -26.709957 -9.3876295 2.7757177 -25.186419 -9.0260992 2.6249998 -25.174501 -9.1965246 2.629529 -0 -0 0 -0 -0 0 -20.003086 -7.7273216 2.110786 -0 -0 0 -24.267952 -9.7190475 2.5656378 -19.638098 -8.0047741 2.0878506 -19.745825 -8.190341 2.1043293 -19.494371 -8.2265835 2.083225 -19.929192 -8.5545444 2.1343958 -19.879065 -8.6778612 2.1346848 -19.638947 -8.7168846 2.1149297 -19.629547 -8.8572845 2.1196516 -19.876099 -9.1157522 2.1517417 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -5.0937438 -2.7652435 0.59580147 -5.1786733 -2.8526547 0.60707635 -0 -0 0 -4.9173107 -2.7878191 0.58192462 -0 -0 0 -3.8012543 -2.2168591 0.460695 -3.8209872 -2.2599118 0.46445331 -3.8036349 -2.2812657 0.46406785 -3.8728948 -2.3552668 0.47351182 -3.8685355 -2.3852575 0.4746682 -13.600703 -8.5050182 1.5877062 -4.5812507 -2.9031599 0.55976021 -4.5641885 -2.9317534 0.55985659 -4.0081658 -2.6093125 0.49769992 -4.0419207 -2.6667581 0.50348192 -4.0436821 -2.7036841 0.505602 -3.9718163 -2.6910253 0.49914542 -3.2644155 -2.240839 0.41800445 -3.208122 -2.2312613 0.41299337 -3.2033191 -2.2572134 0.41405341 -3.1602511 -2.2559981 0.41058421 -3.1366727 -2.2683444 0.40942779 -3.1315258 -2.2940209 0.41048783 -4.3808408 -3.2512989 0.56284398 -4.301147 -3.2332489 0.55561644 -3.743592 -2.8500576 0.49018329 -4.0318122 -3.1088674 0.52757365 -4.1099191 -3.2095344 0.53952318 -4.5249252 -3.5786936 0.59319955 -4.5098724 -3.6119919 0.59406686 -4.4582534 -3.6157651 0.59040487 -4.5721087 -3.7548916 0.60746187 -4.4778214 -3.7236741 0.59849972 -3.7781322 -3.1810079 0.51282954 -3.7153761 -3.1673133 0.50733662 -3.5783525 -3.0885661 0.49230337 -3.7923739 -3.3142171 0.52227348 -3.9068644 -3.4568372 0.53971589 -3.3133521 -2.9679046 0.46532062 -2.5373011 -2.300616 0.36625543 -2.5282681 -2.3208547 0.36692998 -2.543864 -2.3641152 0.37088102 -2.5322089 -2.3824086 0.37126651 -3.5147178 -3.3483279 0.50463831 -3.964699 -3.8239048 0.56795138 -3.5039809 -3.4211137 0.50878209 -2.332139 -2.3045607 0.35208949 -2.2947412 -2.2955883 0.34890938 -2.2785153 -2.3074999 0.34862027 -2.3039138 -2.3620656 0.35411319 -2.3390825 -2.4277837 0.36105162 -2.2102761 -2.3223627 0.34505469 -2.9524493 -3.1411259 0.45202199 -2.9737422 -3.2029595 0.45780399 -3.0885425 -3.3678966 0.47707739 -3.0023522 -3.3144732 0.46763343 -2.9288793 -3.2734766 0.45992407 -2.592454 -2.9333017 0.41366795 -2.5076644 -2.8726497 0.40383852 -1.8993939 -2.2025607 0.316241 -1.889069 -2.2179637 0.31672281 -1.8658179 -2.2180839 0.31527731 -1.8496299 -2.2264271 0.31489184 -1.8390892 -2.2415829 0.31537369 -1.8284318 -2.2566934 0.31585553 -1.8226304 -2.2779765 0.3171083 -1.8265043 -2.3117731 0.31990293 -2.8336134 -3.6331205 0.48073933 -1.8241036 -2.3679295 0.3240467 -2.1919756 -2.8822904 0.38523972 -1.8851136 -2.5103531 0.3385981 -2.1925824 -2.9577596 0.39111808 -2.2501893 -3.0747976 0.40354943 -1.8420826 -2.5494685 0.33917633 -1.8177396 -2.5485649 0.33773082 -2.7532964 -3.9118774 0.49779627 -2.5810778 -3.7153065 0.47264451 -1.465564 -2.1365781 0.28549993 -1.5053989 -2.2238574 0.29465479 -2.3382058 -3.5013974 0.44228894 -2.3451447 -3.5589049 0.44730002 -2.3671925 -3.6408315 0.45510572 -2.6794841 -4.177319 0.51514232 -1.3986987 -2.2092628 0.28781274 -1.4119873 -2.2608709 0.29272747 -1.4074786 -2.2847505 0.29446205 -1.6816261 -2.7681248 0.3482348 -1.6743232 -2.7946172 0.35006577 -1.7208996 -2.9128373 0.36220801 -1.6003455 -2.7469954 0.34245279 -0 -0 0 -0 -0 0 -0 -0 0 -1.1133974 -2.0230923 0.25822809 -1.133202 -2.0893981 0.26478106 -1.129266 -2.1129954 0.26661202 -1.1176697 -2.1225274 0.26690111 -1.0959247 -2.1125541 0.26507014 -1.6055585 -3.1432056 0.37637395 -1.5746191 -3.1298759 0.37386841 -1.5549433 -3.1385865 0.37377205 -1.5347838 -3.1462789 0.37357932 -1.0839999 -2.2564533 0.27701965 -1.5024347 -3.1783764 0.37502483 -1.4820652 -3.1857302 0.37483206 -1.8243241 -3.9858761 0.45905676 -1.0989567 -2.4394062 0.29369113 -1.4259952 -3.2188416 0.37550664 -1.0772812 -2.4718735 0.29571483 -1.0648354 -2.4848423 0.2963894 -1.0673264 -2.5335314 0.30082229 -1.0407293 -2.5133588 0.29802763 -1.0267869 -2.5233858 0.2984131 -1.0031645 -2.5093019 0.29629302 -0.99210978 -2.5265296 0.29744944 -1.2759948 -3.3100135 0.37810856 -1.2655171 -3.3438492 0.38080683 -1.4929181 -4.0196977 0.44980556 -1.2148521 -3.3329396 0.37810856 -1.1883521 -3.3234589 0.37637395 -1.1738603 -3.3475966 0.37810856 -1.1251721 -3.272836 0.36972463 -1.0441091 -3.0985553 0.35122219 -0 -0 0 -0.97541642 -3.0164175 0.34158549 -0.9664923 -3.0527148 0.34466922 -0.92802799 -2.9948802 0.33821264 -0.89838612 -2.9633651 0.33445433 -0.93076521 -3.1396585 0.351704 -0.90677917 -3.1290567 0.35006577 -0.90733314 -3.2044804 0.35710058 -0.91838777 -3.3212819 0.36827913 -0.8925513 -3.3066726 0.36625543 -0.82262683 -3.1234145 0.3473675 -0.80146849 -3.1206901 0.34659657 -1.0402792 -4.1578269 0.44961283 -1.0265173 -4.2124872 0.45443115 -2.0832169 -8.7882643 0.90909034 -2.0341711 -8.8222198 0.91121042 -0.65445769 -2.9165268 0.3240467 -0.64522499 -2.9603641 0.32799774 -1.7735649 -8.3946028 0.86533976 -0.74020922 -3.6096878 0.39140719 -1.6574422 -8.3503208 0.85888314 -1.6011077 -8.3339415 0.85628122 -1.5374073 -8.276083 0.84963191 -1.4881781 -8.294178 0.85049921 -0.52599859 -3.0343778 0.33281609 -1.4068986 -8.435524 0.86264145 -1.3782774 -8.5884676 0.87680739 -0 -0 0 -0 -0 0 -0.58441126 -4.1213379 0.43766332 -0.56191391 -4.1455598 0.43968701 -0.53621197 -4.146955 0.43949428 -0.5056619 -4.1086745 0.43544689 -0.47133824 -4.033596 0.42783388 -0.41699472 -3.768301 0.40171844 -0.3946898 -3.7787085 0.40248939 -0.3713026 -3.779078 0.40229666 -0.22588345 -2.4491355 0.27277949 -0.20592988 -2.3929555 0.26719022 -0.19140065 -2.3961585 0.26738295 -0.1777847 -2.412178 0.26882845 -0.25766918 -3.8254344 0.40586224 -0.23352647 -3.816015 0.4048022 -0 -0 0 -0.13205652 -2.6941831 0.29581121 -0.11126103 -2.5945032 0.28607813 -0.095952958 -2.6120467 0.28771639 -0.0786044 -2.5688112 0.28347623 -0.063724712 -2.6060622 0.28704181 -0.047981907 -2.6203368 0.28839093 -0 -0 0 -0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.6494948 -3.4853845 0.40798229 --1.6574711 -3.4473932 0.40499493 --1.6755332 -3.4308984 0.40432036 --1.6850471 -3.3973725 0.40181482 --1.6816691 -3.338973 0.39661101 --1.6989509 -3.3223891 0.39593643 --1.7243524 -3.3216178 0.39699647 --1.7799869 -3.3778872 0.40432036 --1.8448298 -3.4493926 0.41337886 --1.8616846 -3.4301362 0.41251156 --1.8841377 -3.4212637 0.41280064 --1.9099523 -3.4183261 0.41376433 --1.9613376 -3.4602201 0.41973907 --0 -0 0 --4.9022655 -8.4031124 0.97654718 --4.9704623 -8.4011421 0.97972727 --5.0208931 -8.3687782 0.97953457 --5.0219603 -8.2553339 0.97018695 --5.0568414 -8.1989517 0.96729594 --5.1920295 -8.3036346 0.98281103 --5.2423487 -8.2707796 0.98271465 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --10.064565 -9.0018129 1.3419706 --0 -0 0 --0 -0 0 --10.122234 -8.7234211 1.3283828 --9.978487 -8.4934263 1.3033274 --10.034986 -8.4358826 1.3039056 --10.36074 -8.6017418 1.338405 --10.040761 -8.2325935 1.2917634 --10.491819 -8.4952459 1.3416815 --10.531308 -8.4207649 1.3401396 --10.456999 -8.2566919 1.3246245 --10.401487 -8.1097612 1.311615 --10.527561 -8.1046762 1.3209625 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --10.640414 -7.5846071 1.2997619 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.464136 -9.051403 1.8536789 --0 -0 0 --16.584507 -8.8543053 1.8548354 --16.667595 -8.7676678 1.8580154 --0 -0 0 --16.457434 -8.4009352 1.8236125 --16.670527 -8.381156 1.8411512 --0 -0 0 --6.9980912 -3.4121382 0.78843892 --6.9982562 -3.3592308 0.78622252 --7.0115361 -3.3128266 0.78545153 --7.013679 -3.2613513 0.78352422 --7.0435152 -3.2228088 0.78458428 --7.0631571 -3.1795299 0.78458428 --7.0852642 -3.1373398 0.78487337 --7.4064612 -3.2253017 0.81677079 --7.4087262 -3.1723542 0.81493986 --7.4161253 -3.1218171 0.81368709 --0 -0 0 --7.4382005 -3.024204 0.81204885 --7.4510703 -2.9762926 0.81147063 --7.5470295 -2.9610436 0.81956547 --7.606854 -2.9307773 0.82390195 --21.53418 -8.1430387 2.263624 --22.121243 -8.2102165 2.3191311 --0 -0 0 --7.603375 -2.717098 0.81638533 --22.552311 -7.9010196 2.3482339 --22.599424 -7.7621694 2.3481376 --22.640024 -7.6211333 2.3474631 --0 -0 0 --28.432882 -9.1839457 2.9274957 --27.817732 -8.7971535 2.8593643 --27.319691 -8.4556341 2.8034713 --28.216053 -8.5436678 2.8889489 --0 -0 0 --28.687832 -8.3035765 2.9261465 --28.738241 -8.1273956 2.9261465 --29.200127 -8.0648355 2.9675844 --12.996867 -3.5046151 1.3379232 --13.009463 -3.4225235 1.3370558 --0 -0 0 --12.797483 -3.199393 1.3118078 --12.819775 -3.1215153 1.3120968 --0 -0 0 --0 -0 0 --0 -0 0 --18.116335 -3.9424014 1.8296835 --18.13434 -3.8299339 1.8291054 --0 -0 0 --0 -0 0 --0 -0 0 --19.611546 -3.6415086 1.96585 --18.17079 -3.2588663 1.8219743 --18.277733 -3.1624084 1.8305509 --18.164249 -3.0281112 1.8175414 --19.703852 -3.1605387 1.9667174 --18.142 -2.7960386 1.8118557 --18.216909 -2.6932538 1.8175414 --24.202427 -3.4261725 2.4012358 --24.693489 -3.3412442 2.4472029 --23.991909 -3.0965636 2.3767586 --19.614183 -2.4094992 1.9479258 --19.648373 -2.2914083 1.9498532 --23.485865 -2.5927455 2.3223114 --23.363722 -2.4342597 2.3089163 --18.429152 -1.8061414 1.8274672 --24.6437 -2.2622256 2.4306278 --25.913628 -2.2184861 2.5527246 --23.714092 -1.8837832 2.3378265 --23.133562 -1.694923 2.2803917 --23.092878 -1.5495503 2.2754769 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --49.183647 8.8158789 4.2746429 --49.28244 9.1460419 4.2879167 --49.380005 9.4779358 4.3012753 --49.371746 9.7908258 4.3056717 --49.433739 10.118757 4.3163247 --49.470165 10.442878 4.3249488 --49.521996 10.771637 4.3350945 --49.52206 11.09032 4.3409281 --49.566685 11.420146 4.3508201 --49.665356 11.764257 4.3656158 --49.617409 12.074903 4.3678141 --49.744427 12.429604 4.3854847 --49.735752 12.752166 4.3914876 --49.805939 13.096374 4.404592 --49.732338 13.403805 4.4052687 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --40.9743 13.509734 3.6956623 --40.899136 13.763754 3.6964231 --40.873283 14.034833 3.7017496 --40.781696 14.283716 3.7013268 --0 0 0 --0 0 0 --0 0 0 --36.704685 13.876146 3.3644054 --0 0 0 --0 0 0 --35.157673 14.036253 3.246969 --0 0 0 --34.986462 14.468158 3.2473073 --0 0 0 --0 0 0 --34.856747 15.171727 3.2604966 --0 0 0 --57.944756 26.071098 5.4262633 --34.413002 15.738235 3.2457008 --56.453014 26.237621 5.317028 --56.298168 26.58692 5.3177042 --56.128582 26.929274 5.3171968 --56.032158 27.307213 5.323792 --55.888554 27.662882 5.326159 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --33.353218 18.332275 3.2642167 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --56.922161 34.072735 5.6639261 --0 0 0 --0 0 0 --0 0 0 --52.169712 32.993538 5.2724714 --0 0 0 --0 0 0 --20.849678 13.729876 2.1530945 --21.263988 14.19051 2.2039921 --0 0 0 --20.231756 13.863505 2.1158938 --20.100475 13.955563 2.1111591 --21.061735 14.815281 2.2198026 --20.066465 14.300056 2.1256168 --20.400875 14.72794 2.1698351 --0 0 0 --0 0 0 --20.750399 15.569189 2.2360356 --0 0 0 --0 0 0 --0 0 0 --41.093483 32.438538 4.4771338 --0 0 0 --0 0 0 --37.843143 31.020292 4.1867981 --37.047916 30.750439 4.1201749 --0 0 0 --35.569702 30.268364 3.9978347 --21.749407 18.739359 2.4708238 --22.498274 19.626373 2.5681379 --37.048405 32.721313 4.2289872 --0 0 0 --36.78664 33.302555 4.2453051 --35.935917 32.935871 4.1709876 --0 0 0 --15.447275 14.510783 1.8331672 --0 0 0 --15.086431 14.524413 1.8117766 --0 0 0 --14.492828 14.299758 1.762401 --14.421734 14.405314 1.7644302 --14.267912 14.427646 1.7565672 --14.183294 14.519197 1.7570745 --14.103626 14.615989 1.7582581 --29.519476 30.969303 3.6651406 --14.167738 15.047674 1.7885262 --14.062926 15.121189 1.7870042 --13.771692 14.991461 1.7621473 --0 0 0 --27.673754 30.876343 3.5530307 --27.600683 31.177618 3.5679955 --15.459797 17.680996 2.0277107 --27.52211 31.868408 3.6077328 --0 0 0 --0 0 0 --26.006786 31.258938 3.4851391 --0 0 0 --16.523836 20.364277 2.260047 --15.343698 19.148848 2.1169083 --25.157007 31.793215 3.4749088 --15.343751 19.637983 2.1494591 --25.211111 32.677807 3.5368822 --23.56642 30.936703 3.3347292 --0 0 0 --0 0 0 --23.129068 31.550877 3.3542597 --22.931536 31.687357 3.3537524 --22.763897 31.865572 3.3577261 --0 0 0 --23.600088 33.908211 3.5402641 --23.363941 34.012135 3.5361211 --23.102247 34.077328 3.5281737 --23.529343 35.170002 3.6253188 --21.920347 33.204067 3.4108219 --34.679203 53.237862 5.4260097 --34.316334 53.394325 5.4204292 --20.808161 32.817635 3.3320239 --9.1331596 14.602147 1.4962457 --19.802177 32.095314 3.2347941 --0 0 0 --8.5495348 14.245773 1.4445872 --8.9035006 15.043977 1.5181435 --8.4433832 14.468377 1.4562548 --8.4120941 14.620096 1.4660623 --8.3010883 14.634169 1.4624268 --18.438381 32.974251 3.240459 --10.295351 18.680185 1.8446656 --8.004632 14.737204 1.4578612 --7.953084 14.858956 1.4648787 --7.8715229 14.925984 1.4666542 --7.8266506 15.06419 1.4752779 --16.640186 32.512962 3.1339293 --8.0089912 15.888705 1.5446068 --7.9596429 16.03483 1.5538225 --9.5479498 19.534361 1.8797528 --14.963616 31.096052 2.9629743 --0 0 0 --14.519845 31.146387 2.9507148 --14.51667 31.645161 2.9890149 --14.358707 31.814468 2.9965396 --14.187082 31.955704 3.0015278 --8.851491 20.272406 1.9117962 --8.7269354 20.326336 1.9117962 --0 0 0 --0 0 0 --13.74491 33.711884 3.1239526 --13.420712 33.503296 3.0972357 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --4.2587996 14.654939 1.3297719 --4.0397711 14.226458 1.2896963 --3.9840956 14.365237 1.2997575 --3.8130615 14.083565 1.2728715 --3.6464005 13.803237 1.2462391 --3.8689122 15.017977 1.3507396 --3.6034176 14.351413 1.2903727 --0 0 0 --0 0 0 --3.3242543 14.353183 1.2849617 --3.3155789 14.726174 1.3156525 --3.1898136 14.584657 1.3016176 --4.1627145 19.608027 1.735684 --3.1225317 15.166303 1.3487105 --3.9009187 19.553078 1.7266375 --3.8022232 19.687197 1.7361913 --3.6250012 19.408478 1.7101507 --4.9281535 27.312273 2.3897429 --4.6890278 26.931667 2.3544021 --4.5382013 27.046408 2.3618422 --3.1750858 19.661768 1.7247773 --4.916924 31.680557 2.7551568 --4.7393236 31.823469 2.7648797 --0 0 0 --4.2932248 31.474447 2.7302153 --0 0 0 --0 0 0 --3.8209047 32.463509 2.8084216 --3.3548877 30.093817 2.6041551 --2.7580588 26.199614 2.2701929 --3.6572714 36.914024 3.1823747 --3.4267392 36.893108 3.1787393 --0 0 0 --2.1680055 26.926842 2.3270087 --2.0022273 26.932682 2.3264167 --0 0 0 --0 0 0 --2.0227957 36.212273 3.1122849 --1.8322293 36.860924 3.1663954 --1.5655987 35.943687 3.0875971 --1.3423028 35.879932 3.0814252 --0.84262997 26.951986 2.3228657 --0 0 0 --0.62224817 32.772358 2.8161154 --0.3484396 27.122343 2.3363934 --0.22552204 33.593578 2.8853598 --0 0 0 -0.18052746 32.473858 2.7903285 -0.41778681 35.725224 3.0663757 -0.59458828 33.342918 2.8644764 -0 0 0 -0 0 0 -0.97238076 26.818995 2.3119593 -1.1421533 26.935968 2.322443 -1.3201605 27.191198 2.3447635 -1.8520793 33.858585 2.9120767 -0 0 0 -2.0660541 30.827871 2.6564898 -2.1320636 29.132174 2.5133512 -0 0 0 -1.7086952 19.975061 1.7359376 -3.1591237 34.444191 2.969738 -3.3709922 34.430107 2.9702454 -2.0787637 19.965994 1.7381359 -2.1944604 19.891459 1.7328939 -2.3560252 20.217094 1.7618937 -3.9715476 32.354069 2.8007278 -4.1591597 32.24509 2.7935412 -4.4049997 32.57444 2.8239784 -4.7165885 33.337063 2.8917007 -4.9094019 33.228638 2.884937 -5.1192636 33.237282 2.888319 -5.3500757 33.373482 2.9027765 -5.2925968 31.766447 2.767416 -5.4673796 31.617516 2.7574396 -5.6176815 31.340137 2.7364717 -2.6702423 14.386765 1.2764224 -2.7669194 14.414145 1.2802271 -2.9057031 14.651017 1.3022094 -6.4500532 31.510094 2.7639496 -8.071084 38.234028 3.3505397 -8.3042603 38.177944 3.3500323 -8.524642 38.065014 3.3447058 -3.455539 14.996788 1.3406785 -3.5392246 14.940398 1.3376348 -3.6244693 14.89226 1.3353519 -3.7882404 15.15975 1.3607162 -3.4859815 13.594796 1.2256939 -3.5239761 13.400655 1.21056 -3.9826291 14.775736 1.3333229 -4.0641999 14.718364 1.3304483 -10.450277 36.962124 3.2940619 -10.793475 37.300266 3.3296564 -11.106142 37.517105 3.3547671 -11.314482 37.376724 3.3484259 -11.846974 38.287048 3.4355097 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.9044762 20.156782 1.8719745 -8.1510315 20.416059 1.9001287 -0 0 0 -8.2825346 20.02813 1.8738345 -8.0478363 19.127373 1.7956281 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -18.97023 31.691463 3.1688473 -19.22068 31.667315 3.1780629 -0 0 0 -31.796783 50.966972 5.1320381 -32.097729 50.753227 5.1302629 -32.345623 50.457176 5.1203709 -0 0 0 -32.69276 49.647007 5.0787735 -0 0 0 -32.407032 47.922249 4.9435821 -0 0 0 -0 0 0 -0 0 0 -14.652793 20.561457 2.1771905 -14.612461 20.240911 2.1530945 -14.615807 19.985987 2.1357625 -0 0 0 -14.648274 19.522976 2.1058326 -30.071188 39.570938 4.2519841 -15.038074 19.538366 2.1268849 -15.214032 19.518028 2.1346633 -30.714823 38.909828 4.2410774 -30.832914 38.570419 4.2247601 -30.904741 38.177593 4.2026086 -31.123886 37.969524 4.200664 -31.18318 37.569286 4.1776671 -31.420164 37.385635 4.178597 -31.730331 37.287758 4.18925 -0 0 0 -0 0 0 -36.533829 41.365154 4.7176714 -0 0 0 -43.847591 48.435078 5.5785332 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.094419 19.833452 2.3708887 -0 0 0 -39.388332 39.921135 4.793426 -0 0 0 -0 0 0 -0 0 0 -19.987881 19.287409 2.3916874 -0 0 0 -0 0 0 -20.973562 19.505928 2.4651592 -0 0 0 -0 0 0 -44.331745 39.733749 5.0862136 -43.678688 38.667747 4.9846721 -43.88662 38.374088 4.9814591 -44.104664 38.089752 4.979599 -0 0 0 -44.573334 37.549503 4.9801064 -18.117117 15.072847 2.034559 -18.189245 14.944953 2.0323608 -18.289114 14.839971 2.0332909 -18.312954 14.673886 2.0260198 -18.519073 14.65337 2.0386174 -18.62748 14.554187 2.0406466 -18.716433 14.439617 2.0406466 -18.834799 14.347448 2.0438592 -0 0 0 -25.542898 18.966742 2.7343581 -0 0 0 -0 0 0 -20.974356 14.983342 2.2220008 -21.107428 14.88365 2.2263126 -21.035606 14.640582 2.2094877 -20.909863 14.363417 2.1873362 -20.998425 14.235405 2.1874208 -21.297388 14.248135 2.209065 -21.29294 14.056801 2.1997647 -0 0 0 -24.19142 15.547477 2.4748821 -0 0 0 -25.066343 15.678504 2.5435345 -25.119675 15.498244 2.5393071 -0 0 0 -23.960651 14.38019 2.4059758 -23.889801 14.139009 2.3903346 -24.422749 14.252822 2.4342148 -0 0 0 -0 0 0 -24.728792 13.827611 2.4388649 -24.872511 13.708324 2.4446142 -0 0 0 -25.859367 13.841259 2.5235813 -28.16218 14.852299 2.7363873 -28.151983 14.626847 2.7267487 -28.165808 14.415246 2.7195623 -28.166531 14.198197 2.7112765 -28.170118 13.983899 2.7034137 -28.294779 13.83004 2.7071338 -28.648466 13.785788 2.7324979 -28.945034 13.710412 2.7524512 -0 0 0 -30.720474 14.092473 2.9026921 -0 0 0 -0 0 0 -0 0 0 -31.049744 13.331165 2.9020157 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -31.144571 12.254601 2.8747067 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -37.829212 -0.90675598 3.2456162 -36.641716 -1.1033003 3.1453431 -31.883459 -1.1559289 2.7419674 -0 -0 0 -0 -0 0 -31.468758 -1.7213827 2.7089939 -31.774874 -1.9337434 2.7359645 -0 -0 0 -31.714962 -2.3210521 2.7330899 -31.443853 -2.4952741 2.7112765 -30.686333 -2.6247387 2.6481197 -30.856194 -2.8300843 2.6640146 -19.445843 -1.9040824 1.6927339 -19.435774 -2.0235703 1.692903 -27.421566 -3.0250437 2.3757079 -27.405458 -3.1935883 2.3759615 -27.392269 -3.3625348 2.3765533 -27.39385 -3.5334787 2.3784981 -27.368692 -3.7010972 2.3782444 -25.241058 -3.5712483 2.1979048 -27.382328 -4.0457029 2.3834863 -27.336308 -4.2104568 2.3817108 -18.669704 -2.9931021 1.6392154 -18.553682 -3.0913904 1.6308452 -18.530437 -3.2044964 1.630507 -18.590851 -3.3325515 1.6374398 -19.160809 -3.55619 1.688422 -19.138626 -3.6736917 1.688422 -18.323063 -3.6338701 1.6198541 -37.874786 -7.7528119 3.3151989 -19.299799 -4.0743279 1.7085443 -37.813797 -8.2250576 3.3184116 -37.58857 -8.4179478 3.3032777 -37.590584 -8.6609554 3.3080122 -0 -0 0 -0 -0 0 -37.392895 -9.3434372 3.3052223 -37.52211 -9.6207085 3.3216245 -0 -0 0 -0 -0 0 -31.50182 -8.6981659 2.8078299 -7.9534888 -2.2490087 0.73616445 -7.9194393 -2.2919519 0.73438895 -7.8736978 -2.3311684 0.73159891 -31.873966 -9.648778 2.8605874 -25.768679 -7.9736123 2.3236268 -31.557447 -9.9773188 2.8431706 -7.979105 -2.5769732 0.74631011 -7.9621964 -2.6255717 0.7462256 -25.407524 -8.5505323 2.3095074 -0 -0 0 -25.261185 -8.8478451 2.3059564 -0 -0 0 -24.622635 -8.9649143 2.2582715 -24.645636 -9.1449442 2.2653735 -24.535002 -9.2755585 2.2604699 -0 -0 0 -20.001865 -7.8437285 1.857855 -0 -0 0 -0 -0 0 -19.872515 -8.2181845 1.8595459 -19.581083 -8.2387247 1.8373946 -19.866354 -8.5025959 1.8684235 -19.805588 -8.6207552 1.8676625 -19.674868 -8.7078409 1.860476 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -3.9693034 -2.0878882 0.41539156 -3.9783938 -2.123934 0.41750523 -3.9223554 -2.1250508 0.41336241 -0 -0 0 -0 -0 0 -3.813195 -2.1576385 0.40659863 -3.7912416 -2.1760359 0.40575317 -3.7821243 -2.2017639 0.40617588 -3.7925696 -2.2391109 0.40854323 -3.8189425 -2.2863922 0.41251695 -13.896151 -8.4346189 1.4141502 -6.7828126 -4.1744027 0.71063113 -6.7486172 -4.2106686 0.70978564 -6.687284 -4.229629 0.70623469 -4.1395965 -2.6541257 0.45208514 -4.1290822 -2.6832759 0.45267698 -4.0967283 -2.698149 0.45107058 -4.1074467 -2.7414873 0.45386064 -4.0789924 -2.7588241 0.45267698 -3.2178257 -2.2053714 0.36584678 -3.1747673 -2.2046168 0.36280307 -3.1587353 -2.2223356 0.36254942 -3.1466627 -2.2428319 0.36271852 -4.116055 -2.9718816 0.46561274 -4.0333977 -2.9500277 0.45884892 -4.1529379 -3.0767329 0.47339109 -4.1459365 -3.1111269 0.47465929 -4.117249 -3.1292727 0.47364473 -4.7849474 -3.6832039 0.54720098 -4.672667 -3.6426618 0.53756255 -4.2748146 -3.3749235 0.4969798 -4.1660771 -3.3307853 0.48742595 -4.1029654 -3.321804 0.48277584 -4.8423319 -3.9697416 0.56613958 -4.8370509 -4.0152884 0.56825328 -4.8443604 -4.0718179 0.57180429 -3.7303247 -3.1748207 0.45047873 -3.5892384 -3.092937 0.43686661 -3.7601645 -3.2806194 0.45825711 -4.2702227 -3.7719483 0.51828575 -3.3200066 -2.9691896 0.4127706 -3.8261971 -3.4642956 0.47279924 -2.5362573 -2.3250232 0.32678586 -3.7118146 -3.4445701 0.4645136 -2.8379822 -2.6663742 0.36525494 -2.7897975 -2.6535251 0.36153486 -2.7562354 -2.6540074 0.35950571 -2.3217423 -2.2633326 0.30996093 -2.2978809 -2.2677383 0.30877727 -2.2768731 -2.2747536 0.30793178 -2.251662 -2.2773459 0.30657902 -3.5989041 -3.684561 0.47186923 -3.6488788 -3.7818611 0.48074672 -3.6091051 -3.7868688 0.47871757 -3.0748739 -3.2663031 0.41547611 -3.4259653 -3.6842172 0.46172354 -3.0318635 -3.3008554 0.41513792 -2.9432545 -3.2441304 0.40651408 -2.9193032 -3.2576768 0.40600678 -2.6846025 -3.0330567 0.37852889 -4.0531559 -4.6359415 0.55734664 -2.5957291 -3.0061977 0.37184966 -1.8911505 -2.2177281 0.28214484 -1.8620998 -2.2110012 0.28011569 -1.7803085 -2.1404259 0.27106911 -1.6817439 -2.0473769 0.25965521 -1.6691498 -2.0576572 0.25965521 -1.6758083 -2.091965 0.2622762 -1.6487198 -2.0842364 0.2603316 -1.643262 -2.1037354 0.26134616 -2.1075139 -2.7322857 0.32763135 -2.0013454 -2.6278563 0.31511831 -2.0510664 -2.7276824 0.32441854 -2.0313208 -2.7362161 0.3239958 -1.877229 -2.5613871 0.30429626 -1.8462887 -2.5518699 0.30209804 -2.6038439 -3.6455424 0.41496882 -2.5584574 -3.6288779 0.41158694 -2.4814978 -3.5659966 0.40347037 -2.4381313 -3.5499461 0.40025759 -2.4873142 -3.6695826 0.4109951 -1.4679812 -2.1949043 0.25889429 -1.4577798 -2.2088597 0.25940159 -1.4409359 -2.2127535 0.25889429 -1.4197892 -2.2098181 0.25771064 -1.4014012 -2.2109146 0.25694969 -1.4073598 -2.2507284 0.26007795 -1.5881575 -2.5747769 0.2915296 -2.1566308 -3.5446191 0.38689908 -1.3462077 -2.2437863 0.25686514 -1.363373 -2.304311 0.26202255 -1.3396658 -2.2962821 0.26041615 -1.6848476 -2.9288771 0.32154393 -1.6693028 -2.9434934 0.32196668 -1.6468337 -2.9458535 0.32120574 -8.9226589 -16.189642 1.6033673 -1.1330491 -2.0867536 0.23632014 -1.1757104 -2.1973281 0.24629673 -1.1529093 -2.1868737 0.24460578 -1.1031756 -2.1240556 0.23792654 -1.089214 -2.1290104 0.23775744 -1.1286076 -2.2397559 0.24764949 -1.5627749 -3.1489537 0.33312693 -1.5565511 -3.1853392 0.33566335 -1.5266072 -3.1732814 0.3336342 -1.5352601 -3.2420218 0.33921432 -1.5283902 -3.279377 0.34183532 -1.4766637 -3.2198627 0.3354097 -1.4495009 -3.2125151 0.33388785 -1.4071196 -3.1703494 0.32915321 -1.7353339 -3.9752011 0.40287855 -1.6967576 -3.9528127 0.39983484 -0 -0 0 -7.1296573 -17.184916 1.613513 -1.6255927 -3.9879882 0.40025759 -1.0037938 -2.5068464 0.26396713 -1.5703292 -3.9918737 0.39882028 -1.5440102 -3.9967866 0.39839754 -1.2533138 -3.3046701 0.33473334 -0 -0 0 -0 -0 0 -1.1794963 -3.2915366 0.33152053 -1.1764622 -3.3475931 0.335917 -1.1175849 -3.2435889 0.3259404 -0 -0 0 -1.0438805 -3.1548972 0.31680927 -1.0248101 -3.1621909 0.31689382 -0.97463655 -3.0715485 0.30826998 -0.95665848 -3.0803256 0.30852363 -0.9229598 -3.0375171 0.30421171 -0.92815655 -3.1233518 0.31131369 -0.92371309 -3.1796999 0.31579471 -0.93222308 -3.284035 0.32450309 -0.92244166 -3.3271399 0.32780045 -0.90383232 -3.3394697 0.32839227 -0.82147622 -3.1108551 0.30784726 -1.0574414 -4.1058326 0.39459291 -0.97811103 -3.896733 0.37573883 -0.95678687 -3.9133079 0.37666884 -0.70495588 -2.9623857 0.29322055 -0.69441068 -2.9996598 0.29609516 -0.76858222 -3.4150541 0.33185872 -0.87472701 -4.0008283 0.38233352 -0.74979413 -3.5333941 0.34132802 -1.7115952 -8.3141994 0.75510305 -1.6654222 -8.3489733 0.75721675 -1.6090604 -8.3326206 0.75493395 -1.5496688 -8.2982597 0.75112933 -0.53895605 -2.9889352 0.29254416 -0 -0 0 -0 -0 0 -1.414184 -8.7587385 0.7876538 -0.64409995 -4.1522932 0.3913801 -0.61097699 -4.104919 0.38698363 -0.5369429 -3.766299 0.35764569 -0.52823406 -3.8751612 0.36669225 -0.52952749 -4.0710058 0.38317901 -0 -0 0 -0.4426043 -3.7634981 0.35637745 -0.42380962 -3.804764 0.35967481 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0.1896459 -2.3599365 0.23572831 -0.17545758 -2.3650305 0.23606649 -0.25923535 -3.8075233 0.35866025 -0.23580627 -3.8080478 0.3585757 -0.21338101 -3.8263357 0.36001301 -0.14165778 -2.8572624 0.27757928 -0.11249989 -2.5912905 0.25492057 -0 -0 0 -0.1153329 -3.6999528 0.3489373 -0.090174317 -3.6029725 0.34065163 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.6464229 -3.4307711 0.35773021 --1.6630776 -3.4116471 0.35688475 --1.6764656 -3.3861971 0.35544744 --1.6904992 -3.3624923 0.35417923 --1.6975113 -3.3254306 0.35164282 --1.7146752 -3.308759 0.35105097 --1.7715844 -3.367846 0.35773021 --1.834443 -3.4360261 0.36533949 --1.8531187 -3.4203246 0.36491674 --1.869751 -3.4010308 0.36415583 --1.9027164 -3.4112506 0.3662695 --4.8006225 -8.4851284 0.86205554 --4.8689618 -8.4840326 0.86484563 --4.8587747 -8.3472118 0.85436171 --4.9104071 -8.3181 0.85444629 --4.9495835 -8.2681494 0.85250169 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.8494816 -8.4008656 1.1332836 --10.047918 -8.4641733 1.1496013 --10.024599 -8.3399067 1.1413157 --10.064805 -8.2693844 1.140132 --10.456573 -8.4843493 1.1774174 --9.9501371 -7.9726577 1.1167123 --10.352054 -8.1909256 1.1549278 --10.392695 -8.1198902 1.1539133 --10.551982 -8.1405725 1.1656653 --10.826048 -8.2465525 1.1895922 --10.50695 -7.9020634 1.1503623 --11.128825 -8.2633705 1.2109827 --10.588664 -7.7619281 1.1488404 --10.628019 -7.6909695 1.1479949 --10.685551 -7.633142 1.149094 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.454226 -8.9372988 1.6236587 --16.500849 -8.8319368 1.6228977 --16.615543 -8.7625971 1.6287315 --16.647776 -8.6494551 1.6267024 --16.465481 -8.4268398 1.6042973 --16.604074 -8.369606 1.6125829 --16.748829 -8.3140888 1.6214604 --6.9979925 -3.4201751 0.69575077 --7.0035825 -3.3698266 0.69431347 --7.0169239 -3.3233776 0.69363713 --7.0182185 -3.2714186 0.69186163 --7.0571785 -3.2370188 0.69363713 --7.0814486 -3.1957054 0.69405985 --7.2994556 -3.2403376 0.71249115 --7.3274193 -3.1990767 0.71325213 --0 -0 0 --0 -0 0 --7.381381 -3.0621333 0.71291393 --7.394495 -3.0145271 0.71240664 --7.3980532 -2.9631701 0.71105385 --7.4049687 -2.9133425 0.71003932 --0 -0 0 --21.683807 -8.2260618 2.0026848 --22.151272 -8.2482891 2.0404775 --22.690002 -8.2907324 2.0846112 --22.473124 -8.0555258 2.0605152 --0 -0 0 --22.298038 -7.6853013 2.0360811 --0 -0 0 --0 -0 0 --0 -0 0 --28.390957 -9.0122023 2.562304 --27.646421 -8.5894823 2.4912844 --27.302013 -8.2991257 2.4561126 --28.446972 -8.4568558 2.5530038 --28.530859 -8.291604 2.5558784 --28.561069 -8.1106701 2.5541029 --0 -0 0 --12.874602 -3.4857049 1.1665953 --12.978597 -3.4285309 1.1738664 --12.89518 -3.3219819 1.1647353 --12.776156 -3.2078502 1.1525605 --12.850768 -3.1428912 1.1573796 --0 -0 0 --0 -0 0 --40.454212 -9.1089239 3.5533688 --0 -0 0 --0 -0 0 --18.148788 -3.7366638 1.6070874 --0 -0 0 --17.947714 -3.466238 1.585866 --17.906937 -3.344521 1.5805395 --18.245811 -3.2920914 1.6080174 --25.079296 -4.3664865 2.1948609 --18.226858 -3.0582101 1.6030291 --19.521103 -3.1523676 1.7126871 --18.243322 -2.8312516 1.6013381 --18.405226 -2.7408369 1.6137667 --24.151873 -3.4453866 2.1049025 --0 -0 0 --19.377403 -2.521981 1.692903 --25.59856 -3.1721904 2.2235227 --24.756603 -2.9137189 2.1499662 --23.575771 -2.6281631 2.0476639 --23.791624 -2.5045307 2.0647426 --0 -0 0 --23.358227 -2.1694336 2.0253434 --23.866453 -2.0690207 2.0675325 --0 -0 0 --0 -0 0 --0 -0 0 --23.704178 -1.4699163 2.0500312 --0 -0 0 --43.411266 -2.1578948 3.7228866 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --49.162308 8.876894 3.6510806 --49.323586 9.2188835 3.6670353 --49.359119 9.5393353 3.6738937 --49.386707 9.8593979 3.6803191 --49.410271 10.179755 3.6866 --49.505905 10.516524 3.6983674 --49.52034 10.837576 3.7042873 --49.579399 11.169724 3.7136726 --49.553654 11.48386 3.7169213 --49.642345 11.82584 3.7288332 --49.660885 12.152741 3.7356915 --49.737251 12.495384 3.747026 --49.745602 12.82249 3.7534513 --49.802914 13.163676 3.7637029 --49.732758 13.472143 3.764569 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --40.962105 14.123637 3.1712809 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --35.390694 14.181326 2.794718 --0 0 0 --35.323624 14.660055 2.8033092 --34.748783 14.672049 2.7652631 --34.916534 14.995989 2.7856216 --34.172184 14.925293 2.7341475 --34.165642 15.172744 2.7409337 --57.879444 26.131144 4.6316886 --34.186279 15.686961 2.7576103 --56.651394 26.418316 4.559567 --56.418827 26.73254 4.554008 --0 0 0 --56.106239 27.432512 4.5555964 --0 0 0 --55.788532 28.130632 4.5574732 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --33.519325 19.019003 2.8246062 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --21.287041 13.86916 1.8740308 --21.234833 14.021499 1.8769186 --20.864086 13.961261 1.8521562 --21.062819 14.282146 1.877063 --21.17783 14.550634 1.8948948 --20.33836 14.158294 1.8287654 --20.869717 14.719165 1.8835604 --20.219889 14.447403 1.8338189 --20.323954 14.710977 1.8510733 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --41.433456 31.973949 3.8232627 --0 0 0 --40.123737 31.75638 3.7388682 --39.832401 31.925251 3.7299883 --0 0 0 --37.666935 30.956345 3.5640872 --37.035465 30.820026 3.5225756 --35.915157 30.262596 3.4344993 --0 0 0 --0 0 0 --21.750717 19.022367 2.1265647 --22.319065 19.762474 2.1928387 --21.318106 19.11075 2.1073611 --0 0 0 --35.804665 32.899784 3.5546296 --35.804401 33.307037 3.5746274 --36.132298 34.028027 3.6276176 --15.138253 14.431985 1.5489423 --15.060897 14.535683 1.5500973 --14.966431 14.622942 1.549592 --31.18364 30.846024 3.2099044 --30.970528 31.013493 3.2075219 --14.334723 14.530966 1.5124844 --14.269655 14.643651 1.5150112 --31.821976 33.061539 3.35653 --0 0 0 --14.07758 14.988894 1.5234579 --13.956857 15.044278 1.5204258 --14.011846 15.290681 1.5362362 --13.896343 15.352704 1.533926 --13.777949 15.410912 1.531327 --16.464998 18.645788 1.8355516 --16.251293 18.632959 1.8246503 --0 0 0 --15.768721 18.533949 1.7964226 --16.51124 19.649805 1.8928013 --24.272051 29.249241 2.7861991 --24.059883 29.358278 2.7825172 --15.377516 18.999861 1.8042917 --24.602537 30.783422 2.8874149 --15.508365 19.64986 1.8469582 --15.354399 19.702166 1.8430598 --23.905844 31.06743 2.8724706 --23.699684 31.193674 2.8706658 --23.513823 31.346483 2.8713877 --25.657326 34.645031 3.1555426 --25.209396 34.480545 3.1267371 --25.078485 34.746998 3.1367722 --22.93075 32.185417 2.8955004 --22.697836 32.275745 2.8910968 --22.511311 32.431618 2.8926127 --23.465145 34.25267 3.0403214 --23.296429 34.457977 3.0457358 --23.046366 34.543022 3.0407543 --21.803495 33.118427 2.9051023 --0 0 0 --34.241798 53.429089 4.6284399 --0 0 0 --0 0 0 --8.9783821 14.592268 1.2751836 --8.9554195 14.757082 1.2844965 --8.8636789 14.810042 1.2843522 --8.5085526 14.416618 1.2467391 --8.4384937 14.500451 1.2494104 --10.932629 19.055017 1.6251789 --10.561663 18.672895 1.5878547 --8.3071117 14.898989 1.269769 --8.2261028 14.96891 1.2713573 --8.0676117 14.896315 1.2612501 --8.1117525 15.199844 1.2821141 --7.8855958 14.996843 1.2614667 --16.872009 32.573807 2.6903257 --16.122929 31.600805 2.6028991 --15.479586 30.805248 2.5304887 --9.6515846 19.503613 1.6101626 --9.5531349 19.606403 1.6137002 --8.9331884 18.623253 1.5300997 --8.8200274 18.68042 1.5303164 --8.7052402 18.734188 1.5303164 --14.192173 31.041187 2.5055819 --14.065263 31.269587 2.5168443 --13.845288 31.292364 2.5118628 --13.646654 31.362095 2.5107076 --8.5701723 20.029528 1.6119674 --8.4277782 20.035767 1.6083578 --12.646802 30.59129 2.431078 --0 0 0 --11.81537 29.603846 2.3422074 --11.627678 29.660927 2.3410523 --11.458719 29.766155 2.3437235 --11.298779 29.896549 2.3484161 --11.201139 30.197229 2.3663201 --11.038155 30.32725 2.3710849 --10.887743 30.494915 2.3788097 --10.516527 30.035864 2.3385255 --10.790833 31.436586 2.4408243 --10.595512 31.495588 2.4403188 --10.193834 30.928175 2.3921657 --10.004483 30.992041 2.3923099 --9.8246498 31.086128 2.3948367 --9.6437435 31.178225 2.3972914 --9.2962828 30.721298 2.3583066 --9.0561037 30.603695 2.3451674 --8.8276958 30.518801 2.3346272 --4.0799923 14.434207 1.120761 --3.941468 14.278216 1.1071886 --3.806051 14.124928 1.093905 --3.7167752 14.13837 1.093183 --3.5819228 13.973472 1.0791774 --3.7012763 14.816742 1.1404699 --3.4945605 14.363327 1.1050228 --3.4047546 14.377705 1.1045175 --3.3187087 14.408045 1.1052394 --3.2809942 14.654919 1.1220605 --3.2323227 14.864828 1.1361383 --4.1644249 19.735645 1.4950136 --4.0172668 19.633795 1.4856284 --0 0 0 --3.8017657 19.815811 1.4955189 --3.6602843 19.731873 1.4876498 --0 0 0 --3.4063213 19.708471 1.4827406 --3.2768118 19.677841 1.4789865 --4.4099998 27.527046 2.052927 --4.9536476 32.184822 2.3920934 --4.0657516 27.537649 2.0498948 --4.2124376 29.795975 2.2131972 --4.340764 32.125252 2.3814809 --4.1579676 32.263062 2.3896387 --0 0 0 --0 0 0 --3.3147097 30.076731 2.2252536 --0 0 0 --0 0 0 --3.3662879 36.747593 2.706064 --2.5054138 29.327168 2.1655493 --0 0 0 --1.937393 26.508757 1.9589307 --1.8421849 27.529245 2.0321352 --1.6657994 27.417578 2.0232553 --0 0 0 --1.6775286 34.631683 2.5447111 --1.458811 34.494839 2.5340986 --0 0 0 --1.0057286 33.52018 2.4624102 --0.64360231 26.960762 1.9870863 --0.47795036 26.952236 1.98622 --0.38045022 32.830894 2.4115856 --0.17690596 32.446629 2.3836467 -0.02222706 32.503952 2.3877618 -0.2215509 32.486248 2.3865345 -0.35983568 27.785969 2.0464296 -0.61906493 32.422249 2.3822751 -0 0 0 -1.0188932 32.476013 2.3868954 -0 0 0 -1.1829083 27.096233 1.9982041 -1.3551539 27.209 2.0069396 -0 0 0 -2.1293917 34.27607 2.5208149 -2.3434727 34.318085 2.5248578 -2.0479004 27.508707 2.031702 -1.6238855 20.14678 1.4980457 -1.7504071 20.170221 1.5005003 -1.8687781 20.101501 1.4963131 -1.9976965 20.146229 1.5004281 -2.102766 19.958027 1.4876498 -2.2488654 20.156874 1.5030992 -2.3574452 20.014915 1.4937862 -2.491508 20.091135 1.5004281 -4.183919 32.117893 2.3794594 -4.3594561 31.934488 2.3679807 -4.5537691 31.896278 2.3671865 -4.7416015 31.815453 2.3633602 -4.8817625 31.43194 2.3374426 -5.0637107 31.33444 2.3325336 -5.2837973 31.469011 2.3447342 -5.5219908 31.6954 2.3637934 -5.6360726 31.216295 2.3310897 -5.8385019 31.23995 2.3354213 -2.7860005 14.419906 1.0980922 -2.9211001 14.636302 1.1153466 -2.9573104 14.358255 1.096143 -3.0754099 14.481304 1.106611 -3.3032506 15.097422 1.1536814 -0 0 0 -0 0 0 -3.5244145 14.798294 1.1361383 -3.5980775 14.706636 1.1309403 -3.6520345 14.540151 1.1201835 -3.5131228 13.632782 1.054054 -3.5317078 13.36508 1.0356445 -3.9633896 14.634123 1.1324564 -10.22475 36.848675 2.8030202 -10.487185 36.913807 2.8126943 -10.774474 37.058502 2.8285048 -11.089523 37.287098 2.8508127 -11.399074 37.484585 2.8709548 -10.333581 33.247028 2.5551069 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -8.0369473 20.058247 1.5991169 -0 0 0 -8.289753 19.975613 1.6004887 -8.0846987 19.14888 1.5395571 -8.1929884 19.077835 1.5378966 -8.4987335 19.459526 1.5720443 -8.3839769 18.880146 1.5303164 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.061195 31.752104 2.7156658 -19.325676 31.749563 2.7254119 -0 0 0 -0 0 0 -31.863455 50.240028 4.3412528 -32.476402 50.518429 4.3821149 -31.933073 49.009586 4.2690592 -32.213951 48.783596 4.2665324 -21.248585 31.753355 2.8005657 -13.756501 20.287691 1.809273 -21.649073 31.508297 2.8021541 -14.063694 20.20248 1.8167812 -14.365031 20.367653 1.839089 -0 0 0 -14.330824 19.798805 1.8041472 -14.261533 19.450705 1.7808287 -0 0 0 -14.755188 19.614557 1.8116554 -14.80514 19.431625 1.8032809 -15.032557 19.480967 1.8161315 -30.38623 38.88052 3.6068258 -30.569752 38.624519 3.6004727 -30.731941 38.343609 3.5918818 -30.925779 38.103981 3.587189 -31.103901 37.84647 3.5809083 -31.25132 37.553711 3.5713787 -31.487585 37.368877 3.5721006 -32.008247 37.517166 3.60466 -32.385853 37.491394 3.621048 -36.330502 41.539707 4.0295205 -0 0 0 -43.560047 48.58913 4.758461 -43.47393 47.898495 4.7171659 -43.742043 47.603668 4.7144947 -44.040783 47.342407 4.7152891 -18.967598 20.141298 2.037622 -0 0 0 -19.126749 19.817318 2.0285978 -19.662741 20.124035 2.071553 -0 0 0 -19.481222 19.454851 2.0278759 -0 0 0 -19.923519 19.414085 2.0485954 -20.033644 19.283173 2.047729 -39.735821 37.778763 4.003675 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -43.580421 38.959702 4.2662435 -43.800713 38.67572 4.2645111 -0 0 0 -17.659985 15.212996 1.7222073 -17.57675 14.954413 1.7054584 -17.678104 14.854624 1.7063969 -17.960039 14.904463 1.7243732 -18.028011 14.775016 1.7222073 -18.434656 14.920115 1.7516624 -18.095768 14.463008 1.7118114 -18.134844 14.312776 1.7072632 -18.642439 14.528606 1.7458147 -18.420576 14.174914 1.7174425 -18.583448 14.119544 1.7243732 -18.723192 14.04535 1.7292101 -18.834669 13.949196 1.7315203 -20.849888 15.244333 1.9045688 -21.001265 15.158139 1.9097668 -21.225475 15.122745 1.9214622 -21.191408 14.903296 1.9102721 -20.887518 14.498874 1.8754747 -21.025459 14.404257 1.8798064 -21.062216 14.240342 1.8753303 -21.154175 14.114161 1.8757635 -21.293695 14.019194 1.8803838 -21.453758 13.936628 1.8868091 -21.72781 13.925814 1.9030528 -24.457443 15.464236 2.1295247 -24.740591 15.43158 2.1456239 -24.85775 15.293594 2.147573 -0 0 0 -24.066162 14.40253 2.0651278 -24.109413 14.228233 2.0613737 -0 0 0 -24.55472 14.087639 2.0841148 -0 0 0 -24.760595 13.80468 2.0870025 -0 0 0 -25.747311 13.943368 2.1544316 -28.195948 15.046289 2.3483438 -28.181801 14.817305 2.3396807 -28.163252 14.587686 2.3308008 -28.156277 14.365652 2.323004 -28.171705 14.156346 2.3171563 -28.178474 13.943855 2.3107309 -28.356754 13.816123 2.3182392 -28.643337 13.738915 2.3344827 -28.916506 13.652321 2.3496435 -30.794323 14.308407 2.4928758 -0 0 0 -0 0 0 -0 0 0 -31.113331 13.538419 2.491071 -31.23708 13.36491 2.4943197 -31.416872 13.214365 2.5020444 -0 0 0 -36.6045 14.870162 2.8948507 -0 0 0 -0 0 0 -0 0 0 -36.748482 13.888037 2.8786073 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -36.348709 -1.8107553 2.6693175 -32.221149 -1.8032628 2.3709407 -32.029297 -1.9897343 2.3578734 -0 -0 0 -25.682556 -1.9118736 1.8991543 -31.505077 -2.5400596 2.3228595 -36.515781 -3.1698585 2.6880879 -31.032583 -2.8856502 2.2909498 -30.964668 -3.0710845 2.2873402 -25.487839 -2.6857107 1.89013 -27.426584 -3.0603597 2.0325685 -27.428091 -3.2310398 2.0340846 -27.397852 -3.3980465 2.0333626 -27.408134 -3.5702164 2.0356727 -27.396582 -3.7398069 2.0364668 -27.394842 -3.9109406 2.0380552 -27.366383 -4.0783706 2.0377662 -19.168507 -2.9766386 1.4391356 -19.633326 -3.1723421 1.4745827 -18.723318 -3.1432524 1.4092474 -18.612299 -3.2421534 1.4025333 -19.286968 -3.4817877 1.4536465 -19.236809 -3.5947499 1.4515529 -18.916693 -3.6551759 1.429606 -19.190269 -3.8303492 1.4514807 -19.178127 -3.9504418 1.452347 -38.104858 -8.0943279 2.8547111 -0 -0 0 -37.60276 -8.47122 2.8250394 -37.921238 -8.7878113 2.8526175 -37.73756 -8.989583 2.8430157 -32.184731 -7.8756466 2.4333882 -32.099041 -8.0637445 2.4306448 -0 -0 0 -0 -0 0 -0 -0 0 -31.589703 -8.7653189 2.4079759 -7.9260449 -2.2508249 0.63143164 -7.9178309 -2.3010869 0.63186485 -0 -0 0 -31.444279 -9.5620174 2.4139681 -0 -0 0 -25.726479 -8.1692638 1.988819 -7.9763422 -2.585964 0.64197195 -7.9527502 -2.6323488 0.64139438 -25.407341 -8.5858536 1.9762572 -25.315521 -8.7282581 1.9732972 -26.439487 -9.2977381 2.063684 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.008368 -2.7079651 0.57887459 -20.11832 -7.9181051 1.5999833 -19.932335 -7.9864898 1.5892986 -0 -0 0 -0 -0 0 -19.763577 -8.3442659 1.5878547 -19.564459 -8.4020023 1.5762316 -19.785824 -8.6412621 1.5978175 -19.615753 -8.7106829 1.5885767 -19.645567 -8.868638 1.5952185 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -4.0051303 -2.0803406 0.36171573 -3.9940546 -2.1058073 0.3618601 -3.9740241 -2.1265082 0.36128256 -3.9512613 -2.1456144 0.36048841 -3.8672731 -2.1308126 0.35464072 -3.8610897 -2.1583967 0.35521829 -3.8512433 -2.1840162 0.35550705 -3.88272 -2.2334785 0.35926113 -7.1326227 -4.162539 0.63280332 -13.726668 -8.1253586 1.1896338 -13.639784 -8.187356 1.1865295 -13.803131 -8.4010658 1.2046502 -13.807341 -8.520175 1.209415 -6.7673702 -4.232831 0.61280566 -0 -0 0 -7.0748358 -4.546946 0.64377677 -6.9874725 -4.5516114 0.63865101 -3.9157321 -2.5844359 0.37463841 -3.8724468 -2.5901082 0.37225601 -6.7043929 -4.5451064 0.62132454 -3.8666756 -2.655509 0.37456623 -3.8363936 -2.6694965 0.37333891 -4.695292 -3.3104208 0.45087504 -4.0394907 -2.8851199 0.39434731 -4.1210866 -2.9817882 0.40322715 -4.1702757 -3.0565615 0.40929142 -4.12502 -3.0624664 0.40690902 -4.8808541 -3.6705532 0.47708136 -4.8669667 -3.707082 0.4778755 -4.3356256 -3.3444483 0.43138272 -3.8010788 -2.9693067 0.384168 -3.7108381 -2.9356256 0.37752616 -5.0430212 -4.0406141 0.50278234 -3.6412344 -2.9539144 0.37442183 -4.2078791 -3.4568703 0.42921689 -4.8305645 -4.0185518 0.48985967 -4.8058162 -4.0481157 0.48985967 -3.7360878 -3.186101 0.39044884 -3.6794844 -3.1770165 0.38691136 -3.5886002 -3.1371536 0.38005295 -4.4839978 -3.9691145 0.4684903 -3.3374388 -2.9905379 0.35940552 -3.3352742 -3.0257072 0.36099377 -3.9416275 -3.6204188 0.42243069 -3.9149573 -3.64046 0.42199752 -3.1962435 -3.0086308 0.35276368 -3.5985682 -3.4294422 0.39485267 -2.7902229 -2.6915908 0.3156561 -2.7700884 -2.7051754 0.31529513 -2.289705 -2.2633851 0.26808041 -4.4358444 -4.4405746 0.48935431 -3.6002409 -3.6482761 0.4060427 -2.2476556 -2.3051476 0.26808041 -4.2392354 -4.4028988 0.47744235 -3.513236 -3.693687 0.40402126 -3.1163464 -3.3167479 0.3644591 -3.1020412 -3.3423879 0.36510882 -4.1817884 -4.562233 0.48300126 -2.6337943 -2.9084024 0.31904921 -3.0187221 -3.3751252 0.36279863 -3.9182038 -4.4358182 0.46343675 -2.7004349 -3.0947008 0.33233285 -2.6950648 -3.1270819 0.33384892 -2.6687176 -3.1352031 0.33305478 -1.710125 -2.0335605 0.22736311 -1.6957043 -2.0417128 0.22714654 -1.6812482 -2.0497646 0.22692995 -1.6717765 -2.0639186 0.22729091 -1.6565905 -2.0710208 0.22700214 -1.6506484 -2.0897591 0.22779627 -1.6396339 -2.1022081 0.22801286 -1.6340028 -2.1217148 0.22887918 -2.1060545 -2.7702336 0.28692296 -2.0944033 -2.7902849 0.28757271 -2.0309446 -2.7405634 0.28194159 -1.7215372 -2.3528059 0.2460613 -2.6818259 -3.7139587 0.36662489 -2.6404681 -3.7043495 0.36431471 -2.6974359 -3.8338866 0.37434962 -2.492445 -3.5889869 0.35131982 -1.6355909 -2.385581 0.24440084 -1.5410422 -2.2774129 0.23407714 -1.5054518 -2.2544675 0.23126158 -1.4893967 -2.26033 0.2309728 -1.4744129 -2.2677534 0.23082842 -1.4421731 -2.2482061 0.22837383 -1.4288841 -2.2578559 0.22844602 -1.4150033 -2.2665808 0.22844602 -2.4698055 -4.0124688 0.37608227 -2.4368606 -4.0139046 0.37492719 -1.3556304 -2.2631433 0.22599143 -2.3864067 -4.0417881 0.3747828 -2.3505266 -4.0373893 0.37319455 -2.3118126 -4.0275116 0.37117311 -10.498816 -18.561769 1.578614 -10.457574 -18.756516 1.589443 -8.9691219 -16.32119 1.383041 -1.6252706 -2.9989865 0.28194159 -1.1861367 -2.2204597 0.21725598 -1.1734182 -2.2294617 0.21740037 -1.1578816 -2.233077 0.2171116 -10.476711 -20.533361 1.7035813 -1.1335256 -2.2533565 0.21761696 -1.576152 -3.1828225 0.29212093 -1.5653294 -3.2103665 0.2935648 -1.5460328 -3.2208102 0.29363701 -1.5241122 -3.2257261 0.29327604 -1.4933645 -3.2114992 0.291399 -1.4678253 -3.2079027 0.29038829 -7.8004642 -17.340548 1.411341 -1.4089795 -3.1818919 0.28692296 -1.386246 -3.1831608 0.28634542 -7.4368062 -17.38032 1.4033997 -7.2851686 -17.318975 1.3950251 -7.1562843 -17.308968 1.3907658 -7.0525713 -17.35902 1.3912711 -8.1677227 -20.463552 1.6298715 -7.8818512 -20.1047 1.5981063 -7.7913051 -20.238317 1.6047481 -1.2572964 -3.3238523 0.29226533 -1.0072722 -2.7124395 0.24447304 -0.99436212 -2.7288787 0.24526717 -0.98195863 -2.7471399 0.24620569 -0.97661877 -2.7860613 0.24873248 -0.9663049 -2.8118122 0.25024855 -0.95889139 -2.8469939 0.25248656 -0.95045775 -2.880295 0.25458017 -0.95605028 -2.9582098 0.2600669 -0.96222425 -3.0410542 0.26591459 -0.94796699 -3.0611939 0.26699749 -0.92858833 -3.0650437 0.26685309 -0.91033 -3.0725965 0.26699749 -0.91224253 -3.1499836 0.27241203 -0.94225931 -3.3302066 0.28555128 -0.92578763 -3.3503473 0.28663421 -0.86785638 -3.2172837 0.27623829 -0.82198799 -3.1231906 0.26880234 -0.9828015 -3.8305836 0.32128721 -0.9580707 -3.8317034 0.32092625 -0.75587553 -3.1029027 0.26620337 -0.74003887 -3.1210701 0.26721409 -0.78667068 -3.4113081 0.28843904 -0.77356631 -3.4511099 0.29103801 -0.76635844 -3.5201173 0.2958028 -1.7779984 -8.4228611 0.65814334 -1.7070951 -8.3398046 0.65121275 -0.79992419 -4.0306368 0.33247724 -0.79471612 -4.137341 0.3399854 -1.5389307 -8.2923403 0.64550942 -0.64682353 -3.6048455 0.30013445 -0.61501336 -3.5527253 0.29601941 -1.4397532 -8.6419659 0.66918898 -0.65165657 -4.0612879 0.33276603 -0.62778652 -4.0721107 0.33327138 -0.60322565 -4.078846 0.33348796 -0.58781797 -4.1506133 0.33846933 -0.5093326 -3.7617416 0.3098084 -0.48981002 -3.7924941 0.31182984 -0.46495256 -3.7825584 0.3108913 -0.43746829 -3.7486842 0.30822015 -0 -0 0 -0.39576495 -3.7954361 0.31125227 -2.1241627 -21.715271 1.6143498 -0 -0 0 -0 -0 0 -0 -0 0 -0.22938477 -3.1243927 0.26179954 -0.21360366 -3.1764948 0.26548141 -0.19362548 -3.1697812 0.26490387 -0.1646096 -2.9956295 0.25219777 -0.13494162 -2.7634668 0.23530443 -0.13811077 -3.2405703 0.26981306 -0.11862033 -3.252321 0.27060717 -0.098811619 -3.2579722 0.27096814 -0.079104327 -3.2704825 0.27183446 -0.059494194 -3.2968345 0.2737115 -0.040681221 -3.4198084 0.28259134 -0.018892037 -3.2713845 0.27183446 --0.001117967 -3.1836684 0.26548141 --0.020761976 -3.1995595 0.26663652 --0.040678777 -3.2213128 0.26822478 --0.060806073 -3.2399495 0.26959646 --0.08101242 -3.2524772 0.27053499 --0.10206366 -3.2868104 0.27306178 --0.12346438 -3.3190129 0.27544418 --0.14448029 -3.3331394 0.27652708 --0.1655252 -3.3441441 0.2773934 --0 -0 0 --0 -0 0 --1.4662026 -21.47769 1.5932692 --1.5998119 -21.493155 1.5950742 --1.7314208 -21.47995 1.5948576 --1.8652576 -21.492769 1.5965902 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.6467557 -3.4236007 0.31002498 --1.6725508 -3.4232881 0.31081912 --1.6819905 -3.3897352 0.30894208 --1.6937762 -3.3615394 0.30749819 --1.7116431 -3.3457565 0.30706504 --1.7312201 -3.333421 0.30692065 --1.8042308 -3.4224191 0.31507856 --1.8327292 -3.4253526 0.31623363 --1.8575218 -3.4210539 0.3168112 --1.8832935 -3.4183261 0.31753314 --1.9232218 -3.4406543 0.32034868 --4.7613678 -8.3932762 0.73351365 --4.8112855 -8.36131 0.73329705 --4.836854 -8.2877016 0.72961521 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.9191599 -8.4399576 0.97774518 --10.021159 -8.4212809 0.98250997 --10.113323 -8.3933897 0.98633623 --10.112947 -8.2888212 0.98149925 --10.445054 -8.4543734 1.0077056 --10.553611 -8.4355793 1.0129757 --10.389076 -8.2001314 0.99305028 --10.399073 -8.1049643 0.98936838 --10.37114 -7.9813986 0.98229337 --10.4088 -7.9091654 0.98128265 --10.540113 -7.9073906 0.98879081 --10.637328 -7.8787766 0.99319464 --10.711236 -7.8321953 0.99550486 --10.752622 -7.7616553 0.99492729 --10.848783 -7.7302551 0.99925894 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.352236 -8.8559847 1.3810918 --16.459064 -8.7836552 1.3854234 --16.554142 -8.7043123 1.3888165 --16.489449 -8.5415668 1.3792148 --16.468695 -8.4030619 1.3732948 --0 -0 0 --16.6108 -8.2202377 1.3765435 --7.0076547 -3.4152889 0.59930545 --7.0050964 -3.3610122 0.59742838 --7.0183721 -3.3145602 0.59685081 --7.037673 -3.2710135 0.59677863 --7.0748463 -3.2356486 0.59815031 --7.2346482 -3.2551813 0.60926819 --7.2481008 -3.2079043 0.6087628 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --22.25441 -8.7244892 1.7652348 --22.079473 -8.4999943 1.7475474 --21.952078 -8.2966642 1.7336862 --22.176508 -8.2263241 1.7471142 --22.40933 -8.1566095 1.761192 --22.4552 -8.0176144 1.7609032 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --28.422279 -8.9828568 2.1926219 --27.539248 -8.5183144 2.1215832 --27.516533 -8.3266468 2.1159523 --28.470909 -8.425065 2.1841753 --28.514404 -8.2479954 2.1835978 --28.577913 -8.0766764 2.1846085 --28.652893 -7.9083371 2.1865578 --0 -0 0 --12.974053 -3.4107933 1.0060451 --12.810199 -3.2838335 0.9922561 --12.80785 -3.1996119 0.9905957 --12.844687 -3.1252069 0.99189514 --34.068565 -8.0660543 2.5691848 --34.099922 -7.8528333 2.5678852 --34.255501 -7.6676316 2.5758986 --35.022156 -7.6138582 2.6292498 --0 -0 0 --34.922405 -7.1445336 2.6151721 --0 -0 0 --18.939125 -3.6336219 1.4309055 --18.263807 -3.3880453 1.3795757 --18.31665 -3.2817197 1.3819581 --0 -0 0 --18.38801 -3.0621035 1.3843405 --18.26759 -2.9269786 1.3741611 --18.923998 -2.91313 1.4209428 --18.260693 -2.69647 1.371129 --19.187439 -2.7130668 1.4376917 --24.236725 -3.2751572 1.8053024 --0 -0 0 --23.669226 -2.9032052 1.7611198 --23.693527 -2.7587259 1.7616252 --23.756605 -2.6184266 1.7650182 --23.502388 -2.4445565 1.7453816 --25.92017 -2.5352528 1.9201627 --23.919964 -2.1916161 1.7736815 --23.867373 -2.0392041 1.7689167 --0 -0 0 --44.364353 -3.2415764 3.2548089 --0 -0 0 --0 -0 0 --45.063847 -2.4597418 3.3017349 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --40.057011 14.314319 2.5996921 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --39.607433 15.539605 2.6002338 --0 0 0 --0 0 0 --35.425083 14.656776 2.3464653 --35.252605 14.839398 2.3411095 --34.725941 14.869191 2.3125854 --34.496773 15.022208 2.3035588 --34.330933 15.201263 2.2987444 --0 0 0 --57.075562 26.114347 3.8191888 --56.807449 26.414404 3.8120878 --56.485458 26.687422 3.8014965 --0 0 0 --0 0 0 --40.631016 20.119881 2.7686102 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --33.682472 19.062901 2.3684902 --34.332733 19.710022 2.4218676 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --20.978449 13.819917 1.5497155 --20.916502 13.963896 1.5514004 --20.943695 14.168599 1.5596447 --20.927994 14.345941 1.5648801 --20.453424 14.205892 1.5365366 --20.698942 14.56549 1.561089 --20.499453 14.613999 1.552965 --20.457951 14.77457 1.5565757 --0 0 0 --0 0 0 --40.901764 30.699594 3.1183617 --40.672894 30.919781 3.1153529 --40.524326 31.201036 3.1185424 --0 0 0 --40.356174 31.867956 3.1352718 --0 0 0 --0 0 0 --36.798763 30.174955 2.9041901 --36.917805 30.653328 2.9280806 --36.240799 30.468813 2.8896272 --0 0 0 --34.470669 29.710211 2.7787201 --22.474581 19.61261 1.8335124 --21.700768 19.173172 1.7809775 --21.499388 19.231432 1.7742376 --32.994232 29.87986 2.7187834 --32.750675 30.027107 2.7139089 --20.70133 19.215109 1.7380108 --21.126427 19.852373 1.7829634 --20.481329 19.484211 1.7394551 --32.968067 31.750334 2.7946069 --14.931726 14.558145 1.2924567 --14.87835 14.68525 1.2955258 --14.737123 14.725468 1.291193 --14.46403 14.631054 1.2755469 --14.437448 14.784515 1.281023 --14.354775 14.881445 1.2817452 --14.187449 14.889752 1.2751256 --29.02862 30.841713 2.5886195 --0 0 0 --0 0 0 --17.376225 19.156332 1.5944273 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --25.031542 29.357054 2.3610885 --15.778474 18.736908 1.5119842 --24.070053 28.941387 2.3045819 --23.813456 28.992887 2.2971199 --0 0 0 --23.434034 29.255665 2.2950134 --15.517074 19.617622 1.5431561 --23.19676 29.699152 2.3071091 --23.055546 29.894674 2.3112013 --23.086367 30.317499 2.3325644 --23.385193 31.104036 2.3812478 --23.129051 31.159575 2.3746886 --23.08552 31.502996 2.3897932 --0 0 0 --23.563278 32.996712 2.4796381 --22.979078 32.599754 2.4397404 --22.589348 32.468105 2.4197614 --22.36484 32.569893 2.4171135 --22.133215 32.660236 2.4137437 --23.009474 34.405937 2.5305481 --20.471701 31.021536 2.2759373 --20.306026 31.185041 2.2787054 --20.048473 31.206593 2.2713637 --20.467409 32.292686 2.3401465 --20.149282 32.226383 2.3265464 --19.955881 32.357059 2.3270881 --8.8877325 14.61115 1.0662496 --8.8425894 14.739878 1.071485 --8.5634155 14.475133 1.0491592 --8.4905319 14.554995 1.0510849 --18.788713 32.666706 2.3071091 --8.3171883 14.66851 1.051807 --8.2533274 14.766318 1.0550566 --8.176054 14.841162 1.0567416 --10.273906 18.922762 1.3333173 --18.016577 33.673897 2.3376193 --17.606195 33.397942 2.3113217 --15.752043 30.33049 2.0956457 --15.583827 30.462116 2.0980527 --15.371468 30.507244 2.0946827 --14.89293 30.01442 2.0552063 --9.5886364 19.626274 1.3520926 --9.0284262 18.770811 1.2909523 --14.393897 30.401649 2.0630896 --14.234489 30.548208 2.0670011 --9.1927147 20.048944 1.3649104 --13.887689 30.785189 2.0712736 --13.712298 30.900843 2.0733197 --8.6640072 19.852474 1.3410802 --8.5274658 19.871323 1.3388536 --8.3964529 19.902121 1.3374695 --12.486772 30.111454 2.0004449 --12.286331 30.149605 1.9979775 --12.099621 30.220718 1.9977368 --11.611465 29.525238 1.9479098 --11.41246 29.550303 1.9449612 --11.747989 30.983385 2.0328805 --11.329951 30.443071 1.9935243 --11.115891 30.437946 1.9887704 --10.521212 29.367605 1.9158955 --10.306073 29.332726 1.9095768 --10.288128 29.866346 1.9396054 --10.178439 30.147375 1.9535064 --10.048131 30.375105 1.9640374 --9.8514099 30.40485 1.9620515 --9.6091223 30.289658 1.9509789 --9.6394711 31.044901 1.9949687 --9.1064196 29.976463 1.9239593 --8.9757614 30.211662 1.9352726 --8.7974567 30.29109 1.9368372 --8.5555601 30.147646 1.9245008 --8.4061451 30.328472 1.9325646 --3.8564699 14.253727 0.92543429 --3.7607841 14.246238 0.92350858 --3.6640916 14.233278 0.92128205 --3.5652707 14.209989 0.91845369 --3.5320477 14.452677 0.93217415 --3.4199662 14.375998 0.92609626 --3.4230745 14.791538 0.95052832 --4.4247227 19.667845 1.2505732 --4.2519565 19.456684 1.2358899 --0 0 0 --4.0390215 19.634499 1.243713 --3.9487176 19.810646 1.2530404 --3.8142266 19.767855 1.2489485 --3.7148352 19.908636 1.2561697 --3.5895977 19.914354 1.2551467 --0 0 0 --5.2080498 31.071371 1.9345504 --4.4521317 27.599482 1.7206196 --4.9877043 32.173599 1.9980377 --0 0 0 --4.5649099 32.038692 1.9862429 --0 0 0 --3.4575102 26.600561 1.6523782 --0 0 0 --3.2072563 27.291321 1.6918547 --3.3606598 30.193415 1.8667305 --0 0 0 --0 0 0 --3.4562285 37.281181 2.2924259 --3.2268941 37.295719 2.2920649 --3.0258141 37.661068 2.3130066 --0 0 0 --2.5407357 37.361744 2.2928472 --1.7609044 28.47583 1.7552216 --2.002404 35.959927 2.2064924 --0 0 0 --1.5576808 35.905998 2.2019191 --1.2497644 33.563782 2.0600808 --1.0412527 33.48901 2.0551462 --0.6726352 26.960669 1.661104 --0.62904787 33.437389 2.0514152 --0.4119648 32.502396 1.9948483 --0.2136115 32.67001 2.0048378 --0.013098006 32.549923 1.9975562 -0.18600231 32.44059 1.990997 -0 0 0 -0.5069834 28.151339 1.732655 -0 0 0 -0 0 0 -1.1820407 32.447548 1.9926819 -1.2184982 28.619087 1.7621419 -0 0 0 -1.4978091 27.293327 1.683129 -1.8866708 30.912273 1.9022954 -0 0 0 -2.0345471 27.733007 1.7116531 -0 0 0 -3.5538716 41.465446 2.5442085 -0 0 0 -0 0 0 -2.0892498 20.032804 1.24949 -2.2154179 20.049372 1.2512953 -2.3554041 20.181147 1.2601414 -4.2828455 34.840038 2.1514301 -0 0 0 -2.7316971 20.172949 1.2624884 -4.5046897 31.799231 1.9714392 -4.7017665 31.784815 1.9722817 -4.9072013 31.823439 1.976434 -5.1136036 31.862705 1.9807066 -5.3392272 32.011894 1.9917792 -0 0 0 -2.6662173 14.858294 0.94529283 -2.7662685 14.889744 0.94824153 -0 0 0 -2.8679388 14.447375 0.9232077 -2.9811733 14.549785 0.93060952 -0 0 0 -9.1167669 41.878353 2.6190693 -9.3700628 41.806038 2.6181064 -3.4432018 14.93134 0.95901334 -0 0 0 -3.5569687 14.603799 0.94138134 -3.6397293 14.554585 0.93969637 -3.4863479 13.586379 0.8808428 -3.5409443 13.455648 0.87404275 -9.9291477 36.814308 2.3339484 -10.147406 36.72575 2.3322635 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -8.1466379 20.036928 1.3392147 -7.9664321 19.254208 1.2914337 -8.0642862 19.157124 1.2883044 -0 0 0 -8.2975712 19.053974 1.288124 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -32.26062 63.187164 4.3123431 -32.539318 62.778877 4.2981415 -33.053116 62.82362 4.3148708 -33.053364 61.899364 4.2656455 -33.307949 61.465454 4.2498789 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -38.760017 64.727242 4.5835629 -19.24114 31.688559 2.2702205 -19.513708 31.697405 2.279247 -0 0 0 -20.229427 31.974335 2.3162563 -32.477028 50.642712 3.6621857 -31.565897 48.563572 3.5270872 -31.872618 48.383144 3.5281103 -13.586473 20.351141 1.5104196 -13.746325 20.319479 1.5142107 -13.944676 20.342607 1.522094 -21.872381 31.491892 2.3467662 -14.313316 20.340569 1.5346711 -13.982427 19.613499 1.4873716 -14.447307 20.004782 1.5228763 -14.121872 19.303478 1.4771414 -14.559776 19.64794 1.509517 -0 0 0 -29.994928 39.456291 3.0232213 -30.203579 39.228794 3.0199716 -30.350418 38.92308 3.0108247 -30.317104 38.392212 2.9844067 -30.532154 38.180519 2.982481 -30.792234 38.02504 2.9850085 -31.023706 37.833843 2.9848881 -31.27886 37.671188 2.9871147 -31.612835 37.601566 2.9968033 -31.863016 37.43045 2.9986689 -0 0 0 -42.595024 48.811405 3.9408073 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.065226 20.040888 1.7028069 -19.009192 19.738031 1.6872811 -0 0 0 -19.301865 19.555845 1.6917343 -0 0 0 -19.911644 19.684538 1.7232071 -0 0 0 -0 0 0 -39.949059 38.065701 3.3619001 -45.591896 42.911942 3.8098011 -0 0 0 -0 0 0 -43.177914 39.16626 3.5496538 -0 0 0 -0 0 0 -17.570004 15.357338 1.442058 -0 0 0 -17.598391 15.005211 1.4294809 -17.669516 14.879586 1.4278561 -17.68911 14.711528 1.4222596 -17.752048 14.580538 1.4201534 -18.048162 14.639233 1.4362208 -18.005205 14.422128 1.4259906 -18.139549 14.347915 1.429541 -18.143858 14.171211 1.4231622 -18.305559 14.117528 1.428879 -18.832588 14.340574 1.4622775 -18.511732 13.917622 1.4314667 -18.567926 13.782355 1.4293003 -20.833271 15.266538 1.5923212 -20.35396 14.724189 1.5497155 -20.49185 14.633247 1.5532659 -20.683235 14.579124 1.5607882 -20.776398 14.454791 1.561089 -21.14365 14.518588 1.5814892 -21.0679 14.277143 1.5695138 -20.765131 13.886797 1.5412304 -20.874109 13.775067 1.5429755 -21.481874 13.987699 1.5806466 -21.568977 13.856704 1.580767 -21.687319 13.745474 1.5831741 -0 0 0 -0 0 0 -25.118429 15.279477 1.8076963 -24.20253 14.519618 1.736747 -24.208693 14.322048 1.73097 -24.321981 14.188326 1.7327753 -24.565195 14.128902 1.7436675 -24.68008 13.994156 1.7456534 -0 0 0 -25.475063 14.034635 1.7886802 -0 0 0 -28.144936 15.058336 1.9595842 -28.173225 14.851843 1.9552515 -28.152208 14.620727 1.9476691 -28.14275 14.397249 1.9409894 -28.128046 14.172644 1.934069 -28.16083 13.973166 1.9304584 -28.279221 13.816323 1.9326849 -28.573055 13.743361 1.9467063 -28.903139 13.684394 1.9631348 -30.834118 14.367719 2.0860171 -0 0 0 -0 0 0 -31.026752 13.768172 2.0816243 -31.181091 13.608281 2.0862579 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -36.555431 14.635971 2.4091101 -0 0 0 -36.65593 14.156788 2.4041755 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -41.506668 14.298059 2.6818345 -0 0 0 -0 0 0 -42.648777 13.818705 2.7379799 -0 0 0 -0 0 0 -0 0 0 -47.97842 14.254436 3.0526481 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -37.62899 -2.0648623 2.3071694 -37.072609 -2.2625763 2.2743726 -37.4823 -2.5185101 2.3000083 -25.571749 -1.8760238 1.5810077 -0 -0 0 -31.732855 -2.719815 1.9553117 -31.621138 -2.9057965 1.9495949 -0 -0 0 -27.467922 -2.8645215 1.7001592 -27.449829 -3.0330076 1.7001592 -27.405914 -3.198487 1.6986548 -27.417477 -3.3704834 1.7005804 -27.4042 -3.5396733 1.7010618 -27.386909 -3.7084253 1.7013627 -27.384396 -3.8793383 1.7026265 -27.370939 -4.0488992 1.7032884 -19.25209 -2.9688466 1.2095923 -19.303488 -3.0981486 1.2138649 -19.417034 -3.2387021 1.2219889 -18.800756 -3.2546139 1.1855214 -18.942545 -3.3989973 1.1954507 -19.263842 -3.5787859 1.2164526 -19.073895 -3.6647165 1.2061622 -0 -0 0 -18.775194 -3.8468201 1.1906364 -18.672131 -3.9452374 1.185762 -18.761686 -4.0845747 1.1928028 -37.607021 -8.4289694 2.3586812 -37.680065 -8.6884947 2.3664441 -37.463844 -8.8810825 2.3563945 -0 -0 0 -37.212593 -9.3052845 2.347729 -0 -0 0 -9.0556774 -2.3831956 0.5997538 -32.000362 -8.6308374 2.0333619 -8.9872646 -2.48351 0.59734666 -7.9988799 -2.2633464 0.53638691 -7.9119725 -2.2912853 0.53181338 -8.924715 -2.6439795 0.59638381 -8.8424063 -2.6787248 0.59223157 -0 -0 0 -0 -0 0 -7.9842396 -2.5801675 0.54108071 -7.9635181 -2.6275456 0.54077983 -25.441631 -8.5669508 1.6536419 -7.2254853 -2.4827983 0.49582726 -0 -0 0 -0 -0 0 -7.4252286 -2.7052295 0.51165396 -7.3963246 -2.7462227 0.51087165 -0 -0 0 -7.016499 -2.7036443 0.48854578 -7.018362 -2.7539372 0.48974934 -7.2775712 -2.9072866 0.5076822 -7.2632942 -2.9533901 0.50792295 -7.1998401 -2.9792025 0.50497425 -7.1998248 -3.0310688 0.50617778 -5.7202539 -2.4496961 0.41037524 -19.748598 -8.6000481 1.3337986 -4.643784 -2.0565765 0.34141186 -4.5764642 -2.0604482 0.33780119 -4.5582891 -2.0859983 0.33744013 -4.5435939 -2.1130865 0.33731979 -4.5576186 -2.1537178 0.3391251 -4.532619 -2.1760273 0.33834279 -0 -0 0 -0 -0 0 -0 -0 0 -3.957773 -2.0210819 0.30313897 -3.9435248 -2.0444098 0.30301863 -3.9309063 -2.0685682 0.30301863 -3.8846803 -2.0747821 0.30073187 -3.875387 -2.1004813 0.30097258 -3.8685484 -2.1275873 0.30139384 -3.8528059 -2.1498253 0.30121329 -0 -0 0 -0 -0 0 -7.1716061 -4.1762114 0.5355444 -7.087399 -4.1856236 0.53145236 -13.792784 -8.2597666 1.0044473 -7.1694574 -4.3536172 0.54090017 -6.8221483 -4.2002473 0.51821327 -6.7826986 -4.233572 0.51725042 -3.949281 -2.4990284 0.3169798 -6.9226537 -4.4398828 0.53103107 -6.8818898 -4.4735718 0.53006822 -3.8984449 -2.5685527 0.31667891 -6.7476058 -4.5050354 0.52435136 -3.527653 -2.3868852 0.29200613 -3.4874177 -2.3909903 0.29014063 -2.9381387 -2.0410905 0.25090492 -2.9516826 -2.0774617 0.25283059 -3.0835586 -2.1986713 0.26354221 -3.0781019 -2.2233944 0.26414397 -3.0523171 -2.2333992 0.26324129 -3.0385556 -2.2520857 0.26324129 -2.9767797 -2.2347357 0.25963065 -4.8018203 -3.65081 0.39888135 -4.7453194 -3.6540198 0.3962937 -4.4709144 -3.486655 0.37703693 -4.4627538 -3.5245385 0.37805992 -5.5846887 -4.4663887 0.4663403 -5.5835538 -4.5219297 0.46838632 -5.0161638 -4.1136909 0.42632228 -3.6583939 -3.0380731 0.32191435 -3.6190543 -3.0431199 0.32028955 -3.7758951 -3.2147315 0.33419055 -3.7092202 -3.1974354 0.33045954 -3.5376081 -3.0875614 0.3183037 -3.7302957 -3.2962458 0.33533391 -3.3491681 -2.9963133 0.30614784 -3.337379 -3.0228374 0.30668944 -3.3069961 -3.0324652 0.30572662 -3.9372635 -3.6550295 0.35910404 -4.4777913 -4.20818 0.4056814 -3.9355073 -3.74435 0.36271468 -3.4803486 -3.3522854 0.32654801 -3.4582844 -3.3721838 0.32642767 -3.3977437 -3.3540735 0.32305771 -4.4313335 -4.4282188 0.41290268 -3.6693199 -3.7121105 0.34989688 -7.8581128 -8.0472746 0.71330869 -3.5181525 -3.6476607 0.34074989 -3.4640296 -3.6359372 0.33798173 -3.1508937 -3.348208 0.3124063 -3.8167574 -4.1058335 0.37318555 -2.7443006 -2.988878 0.27985027 -2.7198737 -2.9990065 0.27930868 -3.6579397 -4.0832067 0.36572355 -3.5481415 -4.0098939 0.35802084 -2.726619 -3.1199596 0.28502557 -2.7472143 -3.1827207 0.28869638 -3.4134994 -4.0038857 0.35242432 -2.6153615 -3.1062474 0.28003082 -3.1324115 -3.7668903 0.33057991 -3.0984685 -3.7729268 0.32955688 -1.6748812 -2.0654528 0.19554164 -1.6646725 -2.0788071 0.19578235 -1.6549821 -2.0928965 0.19608323 -1.6470248 -2.1093051 0.19656466 -1.6383185 -2.1249044 0.1969859 -1.6421822 -2.1571529 0.19867086 -1.6247163 -2.1616037 0.19824962 -1.6506892 -2.2244315 0.20222133 -1.6476297 -2.2490106 0.20330453 -1.6718286 -2.3116465 0.20721607 -1.6738559 -2.3446059 0.20890105 -2.4151235 -3.4268787 0.28797424 -1.6529392 -2.3764415 0.20974353 -1.6400217 -2.3890076 0.20992406 -1.6410117 -2.4221623 0.21160902 -1.6116911 -2.4106128 0.21004441 -1.5880727 -2.4071267 0.20908158 -1.6391797 -2.5180395 0.21636304 -1.7882583 -2.7841909 0.23471718 -1.7679349 -2.7900524 0.23435612 -1.5274621 -2.4436822 0.20896122 -1.706316 -2.7673585 0.23122689 -1.3635172 -2.2422216 0.19343543 -1.6747954 -2.7923691 0.23152778 -1.6586467 -2.8043113 0.23164813 -1.6685697 -2.8609943 0.23489772 -1.6599418 -2.8867536 0.23598091 -1.6692779 -2.9446411 0.23929067 -1.4690301 -2.628958 0.21678428 -1.6195301 -2.9404242 0.23760569 -1.581453 -2.9134626 0.23507825 -1.2343823 -2.3079021 0.19301419 -1.5893381 -3.0156524 0.24073492 -1.5813861 -3.0457218 0.24211901 -1.5708513 -3.0713634 0.24320221 -1.5667987 -3.1103609 0.24518806 -1.5538961 -3.1324344 0.24603054 -1.0486903 -2.1472874 0.17929372 -1.0238127 -2.1293943 0.17766893 -1.0427643 -2.203299 0.18218224 -9.1671524 -19.673681 1.3437279 -0.9856922 -2.1506004 0.17784946 -0.96796262 -2.1465993 0.1771875 -1.4013613 -3.1588593 0.24356326 -1.3699743 -3.1399527 0.24175794 -8.764842 -20.424446 1.3751405 -8.5601978 -20.290226 1.3628644 -8.3843012 -20.218815 1.3548006 -8.2111111 -20.14971 1.3469776 -7.7986598 -19.478764 1.3001595 -7.7944393 -19.81979 1.3191755 -7.5953608 -19.667046 1.3062373 -7.1938934 -18.973139 1.2585167 -1.2415789 -3.337074 0.24988191 -1.4015394 -3.8387525 0.28159544 -1.386039 -3.8698328 0.28303969 -1.1792822 -3.3574786 0.24976155 -1.2519661 -3.6355102 0.26703247 -6.75634 -20.011923 1.3085843 -4.6947002 -14.192564 0.93644679 -6.5262542 -20.142704 1.3117136 -0.99302953 -3.1313748 0.23327293 -0.96580487 -3.1116703 0.23164813 -0.95365751 -3.1404598 0.23309238 -0.93550724 -3.1500795 0.2333331 -0.89722908 -3.0905774 0.22924103 -0.95128554 -3.3533754 0.2453686 -0.93442452 -3.3726161 0.24621108 -0.84540403 -3.1258395 0.23044458 -0.82264107 -3.1174562 0.2296021 -5.1782603 -20.11446 1.2874018 -0.80205786 -3.1979933 0.23399505 -0.76891148 -3.1475847 0.23056494 -0.772919 -3.2503226 0.23664285 -0.77321798 -3.3425272 0.24205883 -0.77548128 -3.4484882 0.24831729 -0.8103599 -3.709651 0.26414397 -0.83750361 -3.9498801 0.27864674 -0.67446148 -3.2803237 0.23712428 -0.65588224 -3.2922318 0.23760569 -0.76408994 -3.9616861 0.27846619 -0.56361055 -3.0223393 0.22057547 -0.73861527 -4.0994525 0.28634945 -0.71173704 -4.0940733 0.28574768 -0.68313742 -4.0776901 0.28448397 -0.65921718 -4.0887032 0.2849052 -0.64053994 -4.1341 0.28743264 -3.1112823 -20.917507 1.310149 -2.9831579 -20.938181 1.3102692 -2.8551664 -20.960047 1.3105099 -2.7263756 -20.976181 1.3104498 -2.5995784 -21.008366 1.3114127 -0.44133368 -3.7583294 0.26336166 -0.42897677 -3.8571966 0.26919886 -0.40425792 -3.849829 0.2685971 -0.38003871 -3.8462768 0.26823604 -2.0075614 -21.656685 1.3464359 -1.4876558 -17.196457 1.0758178 -1.5691963 -19.533516 1.2166331 -1.44525 -19.488028 1.2133234 -0.17341481 -2.5554962 0.18964425 -0.1571151 -2.5465493 0.18904248 -1.1140485 -20.009649 1.2434121 -0.9900158 -19.991184 1.2419076 -0.86789614 -20.009848 1.24269 -0.12072874 -3.2518754 0.23140742 -0.10086644 -3.255548 0.23158795 -0.081287436 -3.2720716 0.23255078 -0.062448796 -3.3383775 0.23652251 -0.0420397 -3.3446865 0.23688357 -0.021202449 -3.2969694 0.23399505 -0.00097470795 -3.3030267 0.23435612 --0.019275168 -3.2999759 0.23417558 --0.24638507 -20.744894 1.2859576 --0.38099626 -21.150187 1.3105099 --0.08001367 -3.299062 0.23417558 --0.10013401 -3.2945182 0.23393488 --0.74015868 -20.313639 1.2606831 --0.86431998 -20.297745 1.2600211 --0.9932192 -20.381788 1.265437 --0.14929445 -2.7139857 0.19909211 --0.16606593 -2.7150111 0.19921246 --0.18292253 -2.716929 0.199393 --0.19922476 -2.7107778 0.19909211 --0.21632877 -2.7154746 0.19945318 --1.8467233 -21.544762 1.3388536 --1.9798894 -21.543959 1.3395156 --2.1195452 -21.607899 1.3441492 --2.2893567 -21.951897 1.3658131 --2.3471704 -21.241938 1.3236287 --0 -0 0 --2.7192137 -22.119045 1.3787513 --2.7941513 -21.63171 1.3501669 --0 -0 0 --3.0176773 -21.301273 1.332234 --0 -0 0 --0 -0 0 --0 -0 0 --3.4955206 -20.95693 1.3161064 --3.5482852 -20.497402 1.2893275 --3.6937311 -20.585285 1.2960674 --3.8123138 -20.521013 1.2935399 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --6.0411115 -25.4832 1.6141053 --0 -0 0 --0 -0 0 --6.1886368 -24.11849 1.5363561 --0 -0 0 --6.0186214 -22.31465 1.4285781 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.6628873 -3.4635444 0.26685196 --1.6591733 -3.4021339 0.26342183 --1.6778024 -3.3874168 0.26312095 --1.6931745 -3.3663568 0.26239881 --1.7119826 -3.3523481 0.2621581 --1.7375728 -3.3515289 0.26282007 --1.7915678 -3.4044082 0.26715285 --1.8237073 -3.4144835 0.2685971 --1.8460506 -3.4058621 0.26877764 --1.8770138 -3.4128392 0.27004135 --1.9149399 -3.4317677 0.27214757 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.927496 -8.6770563 0.83011317 --0 -0 0 --0 -0 0 --9.9358807 -8.3668289 0.81831837 --0 -0 0 --10.149652 -8.3361368 0.82704413 --10.430851 -8.4604616 0.84491682 --10.356359 -8.2952042 0.83516806 --10.396885 -8.2234526 0.83438575 --10.67056 -8.3340054 0.85147619 --10.606884 -8.1799822 0.84275043 --0 -0 0 --10.796622 -8.1169872 0.84955049 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.365303 -8.7557135 1.1541688 --16.461103 -8.6774769 1.1570574 --16.42634 -8.5307627 1.1510998 --16.443718 -8.4120817 1.1487529 --0 -0 0 --0 -0 0 --7.0343008 -3.4364047 0.50720078 --7.0102768 -3.3715444 0.50419194 --7.019104 -3.3229136 0.50340962 --7.0420752 -3.2810473 0.50359017 --7.1310334 -3.2693963 0.50816363 --7.2392182 -3.2653956 0.51400083 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --22.1495 -8.5541306 1.4666705 --22.179169 -8.4095697 1.4652263 --22.215384 -8.2677517 1.4642634 --22.38571 -8.1751156 1.4719661 --22.352757 -8.0079784 1.4666705 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --27.773079 -8.4370327 1.7851298 --28.489334 -8.4640417 1.8269531 --28.525396 -8.2846212 1.8259903 --28.567049 -8.1069832 1.8254486 --28.548922 -7.9128828 1.8212363 --34.044773 -9.2116776 2.1614797 --12.920165 -3.4106836 0.84082472 --12.810349 -3.2977445 0.83270079 --12.823565 -3.2173789 0.83227956 --34.090897 -8.3319283 2.1509488 --34.102535 -8.1133518 2.1485415 --34.149731 -7.9034996 2.1484213 --34.662109 -7.798326 2.1771259 --40.403316 -8.8299532 2.5285022 --18.37022 -3.896559 1.1673478 --0 -0 0 --18.455811 -3.6786404 1.1697549 --18.598589 -3.5885918 1.1771567 --18.446577 -3.441994 1.1665052 --18.410372 -3.3184719 1.163015 --18.399902 -3.2001426 1.1611495 --18.292196 -3.0658948 1.1533866 --18.30081 -2.9520085 1.1527848 --19.039639 -2.9514525 1.1967746 --23.574394 -3.5065198 1.4720865 --24.348478 -3.4691033 1.5179417 --24.194244 -3.2957885 1.5072904 --0 -0 0 --24.509253 -3.032845 1.5240798 --23.641121 -2.7782342 1.4702812 --0 -0 0 --0 -0 0 --23.935595 -2.3670723 1.4852654 --0 -0 0 --25.89311 -2.2401984 1.6020699 --0 -0 0 --44.428097 -3.2953346 2.72101 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --42.066727 13.350698 2.1476352 --46.310181 15.010961 2.3652859 --0 0 0 --40.622429 13.720304 2.0874503 --0 0 0 --40.79401 14.338344 2.1048508 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --40.222248 15.539385 2.0990665 --35.633854 14.018454 1.8680308 --0 0 0 --35.307449 14.392839 1.8601909 --35.171421 14.58969 1.8577529 --34.893505 14.725989 1.8480009 --34.698776 14.895288 1.8425992 --60.870846 26.574751 3.2141378 --0 0 0 --0 0 0 --0 0 0 --55.488098 25.864021 2.9653192 --55.187531 26.137304 2.9578617 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --33.751747 19.143105 1.8924584 --0 0 0 --34.021564 19.851868 1.9205672 --0 0 0 --33.73428 20.2432 1.9182725 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --49.357815 33.017384 2.8774078 --20.882116 14.154287 1.2427571 --20.839334 14.31269 1.2453384 --20.518282 14.278245 1.2317622 --20.474369 14.434957 1.2343436 --20.429302 14.591665 1.236925 --20.377419 14.744264 1.2391717 --44.793015 32.832752 2.6933632 --44.589909 33.106384 2.6933155 --41.405895 31.138197 2.514864 --41.503288 31.611984 2.5322645 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --36.863373 30.665924 2.3302934 --0 0 0 --34.620811 29.52663 2.2130785 --34.341465 29.654287 2.2069118 --34.118256 29.828941 2.2043304 --21.734533 19.238096 1.4245549 --33.018444 29.590069 2.1573393 --21.394733 19.41074 1.417958 --32.762447 30.09371 2.1644621 --21.030577 19.556187 1.4098314 --32.437958 30.537994 2.1675694 --32.200077 30.688904 2.1642709 --32.092392 30.964275 2.1696727 --14.760887 14.417062 1.0229074 --14.703399 14.538264 1.0250108 --14.60474 14.619022 1.0243894 --14.434786 14.627306 1.0189397 --14.358009 14.729192 1.019848 --14.239651 14.788231 1.0179359 --28.0693 29.512625 1.984672 --0 0 0 --27.65814 29.804335 1.9813735 --27.486893 29.986734 1.982234 --0 0 0 --16.759832 18.740009 1.2386459 --27.229824 30.826733 2.0038891 --16.68751 19.126415 1.2502145 --25.021889 29.037537 1.8698951 --24.76362 29.096956 1.8640152 --16.04792 19.0916 1.2290374 --24.233076 29.191908 1.851156 --15.694012 19.142643 1.2200981 --16.172701 19.97533 1.2654638 --15.50158 19.388405 1.2234443 --15.485065 19.6133 1.2313797 --23.077507 29.602465 1.8317955 --22.756525 29.563038 1.8208961 --22.656898 29.810268 1.8273975 --22.962147 30.599871 1.8663576 --22.843523 30.834095 1.8719506 --0 0 0 --0 0 0 --23.15905 32.493881 1.9450904 --22.981647 32.667233 1.9469548 --21.631157 31.151913 1.8504868 --21.482517 31.346672 1.8541198 --20.841 30.81432 1.8157812 --20.75633 31.098642 1.8248161 --20.326145 30.862534 1.8040215 --19.997066 30.772257 1.7917837 --19.734018 30.779175 1.7852346 --20.517069 32.436932 1.8722852 --20.196045 32.367298 1.8612905 --19.152615 31.118484 1.7841829 --18.930216 31.184185 1.7813146 --8.7658978 14.640842 0.85210449 --8.5687571 14.512859 0.84201789 --8.5142183 14.624728 0.84531635 --8.414876 14.660234 0.84440804 --0 0 0 --0 0 0 --10.495008 19.090384 1.0780252 --10.321533 19.050785 1.0723844 --10.187511 19.082037 1.0706635 --16.388134 31.156513 1.7202214 --0 0 0 --15.599977 30.562571 1.6776282 --0 0 0 --14.820951 29.937983 1.6341746 --9.3395243 19.159451 1.0555096 --0 0 0 --9.4040136 19.908463 1.0891635 --9.2694702 19.939522 1.0877771 --9.1382246 19.976948 1.0867733 --9.0351505 20.076366 1.0890679 --13.799134 31.17334 1.666968 --13.791782 31.680546 1.6890533 --13.428913 31.371552 1.6685933 --12.317258 29.269526 1.5552027 --12.140867 29.352858 1.5556329 --12.043269 29.630379 1.5661497 --11.872345 29.731546 1.5675839 --12.041981 30.70212 1.6137624 --11.928037 30.969311 1.6237055 --11.364404 30.054356 1.5731769 --10.836093 29.197363 1.5258989 --10.633156 29.198542 1.5226005 --10.419189 29.166349 1.5176767 --10.250269 29.258955 1.5191586 --10.100393 29.408211 1.5235566 --9.963727 29.600273 1.5301535 --9.6696186 29.320299 1.5129919 --9.5484705 29.561579 1.5221703 --9.4277344 29.811991 1.5318266 --9.1985683 29.720421 1.5243692 --9.0391893 29.852783 1.5281936 --8.8833513 30.000587 1.5328305 --9.1497746 31.611773 1.6104161 --8.5376301 30.189039 1.5368938 --8.352499 30.241821 1.5369416 --8.2192955 30.487316 1.546598 --8.0877104 30.748732 1.557067 --3.6675286 14.297175 0.74182111 --3.5978968 14.392089 0.74540639 --3.5031428 14.38769 0.74411571 --3.4219339 14.439045 0.7455976 --3.354357 14.551264 0.75009114 --3.2759249 14.620307 0.75248134 --4.2847729 19.690098 0.99981821 --0 0 0 --4.0195827 19.627682 0.99427295 --3.9128716 19.72154 0.99766701 --3.8207898 19.896244 1.0050288 --3.6937149 19.892796 1.003738 --3.5759921 19.939665 1.0049332 --3.451875 19.951389 1.0044552 --4.4555507 26.730164 1.3323414 --4.4350433 27.652521 1.3757472 --4.2698498 27.70883 1.3771814 --4.7431321 32.088188 1.5878049 --3.8017166 26.856182 1.3335365 --3.6237378 26.781998 1.3288517 --3.4783821 26.951336 1.3359745 --0 0 0 --6.3972287 54.8731 2.6793568 --3.3314054 30.179911 1.4885643 --4.548883 43.669441 2.136688 --0 0 0 --0 0 0 --3.1658332 36.985241 1.8119569 --2.9633415 37.312645 1.826776 --1.9840353 27.082317 1.3350184 --1.8272461 27.234505 1.3417587 --0 0 0 --1.4385294 26.261501 1.2941462 --1.2847319 26.421482 1.3014123 --0 0 0 --1.2628459 34.770226 1.700574 --0.81247628 26.914894 1.3241191 --0.8066572 33.557861 1.6419188 --0.60259026 33.666042 1.6468904 --0.39046785 33.196678 1.6242791 --0.18675275 33.195454 1.6241357 -0.016952762 33.229935 1.6257612 -0.21602245 32.50705 1.5911989 -0.42730719 33.427979 1.6353697 -0.62233841 32.893433 1.609938 -0 0 0 -0.95908546 30.742813 1.5074466 -1.215829 32.55899 1.5947365 -1.3329306 30.65189 1.5037658 -0 0 0 -1.6412739 29.420504 1.4456364 -0 0 0 -0 0 0 -2.0647593 27.800497 1.3695805 -2.5016677 31.096804 1.5284804 -2.425163 27.996969 1.3803364 -1.8854673 20.319328 1.012056 -2.0103056 20.309364 1.0121516 -2.1061342 20.02347 0.99900556 -2.2291775 20.012156 0.99910116 -4.0339599 34.293007 1.6879538 -4.2446704 34.270584 1.6880972 -2.5855579 19.878588 0.99479878 -2.7327206 20.047422 1.003738 -2.8242266 19.809763 0.99307787 -2.9454298 19.790085 0.99298227 -4.9313846 31.787918 1.5749457 -0 0 0 -0 0 0 -5.6163869 32.27039 1.6030543 -5.8756475 32.575432 1.6195945 -0 0 0 -0 0 0 -2.8929391 14.508431 0.74344641 -2.9776771 14.469862 0.74244255 -3.0925398 14.574432 0.74846584 -9.2447853 42.278492 2.1066194 -3.375803 15.000205 0.77126825 -3.463948 14.962667 0.7704556 -3.5415812 14.881857 0.76753956 -3.5509655 14.525105 0.75104725 -3.6597247 14.581515 0.75491935 -3.5146568 13.648575 0.70993596 -3.5276737 13.359245 0.69669431 -10.040635 37.092041 1.8744843 -10.274445 37.052834 1.8756316 -10.511971 37.025608 1.8774481 -11.285257 38.840405 1.9711435 -9.9808083 33.581036 1.712047 -10.185218 33.514385 1.711808 -0 0 0 -10.583032 33.346886 1.7098001 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.8048105 19.840658 1.0557964 -8.0835047 20.184618 1.0760175 -8.1585598 20.015322 1.0698508 -8.169838 19.696404 1.0559398 -8.4466772 20.015844 1.0751569 -0 0 0 -24.544844 56.221462 2.9713423 -0 0 0 -0 0 0 -25.067888 54.653416 2.9130695 -0 0 0 -36.687317 77.462212 4.1374202 -0 0 0 -0 0 0 -31.377886 63.217304 3.4130971 -31.665833 62.826462 3.4025326 -31.461443 61.479488 3.3406267 -0 0 0 -32.180908 61.026932 3.3372805 -32.598118 60.909344 3.3416784 -33.21199 61.151443 3.3658192 -0 0 0 -34.196819 61.162987 3.3890519 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.522827 31.647116 1.8150163 -0 0 0 -0 0 0 -35.181343 54.746899 3.1498895 -0 0 0 -21.01158 31.831961 1.8608123 -0 0 0 -13.816323 20.38356 1.2139314 -13.938307 20.294283 1.2136924 -0 0 0 -14.257097 20.22212 1.2195722 -13.923402 19.493782 1.1819029 -14.054462 19.424168 1.1828589 -14.419631 19.673502 1.2027931 -0 0 0 -0 0 0 -0 0 0 -30.465221 39.492706 2.422507 -30.515102 39.059452 2.4075921 -0 0 0 -30.55555 38.137173 2.3741772 -30.805344 37.969135 2.3754203 -31.082758 37.834198 2.3788142 -31.787041 38.210995 2.4141891 -31.827204 37.785286 2.3998001 -35.413467 41.522938 2.6472325 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -43.99667 47.897537 3.1480253 -0 0 0 -0 0 0 -19.071959 20.011736 1.3584423 -19.23531 19.936747 1.3612627 -19.272125 19.731173 1.3554306 -0 0 0 -19.711384 19.691549 1.3688635 -19.83326 19.571634 1.3689591 -19.42795 18.937836 1.3338711 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -17.701563 15.636785 1.1657929 -17.653414 15.402456 1.1566625 -17.531174 15.107371 1.1429906 -17.517805 14.909534 1.1363459 -17.628075 14.817834 1.1375409 -17.780916 14.761067 1.1414131 -18.098261 14.837862 1.1554674 -18.118317 14.669341 1.1511172 -18.052729 14.433772 1.1416043 -18.079802 14.274455 1.1378756 -18.05912 14.07912 1.1313264 -18.201368 14.011303 1.1347204 -18.424576 14.003917 1.1429906 -20.581036 15.44449 1.266898 -18.698576 13.853465 1.1491573 -18.850952 13.788002 1.1531727 -20.551659 14.839109 1.2485892 -20.56098 14.654757 1.2438087 -20.795116 14.630044 1.25227 -21.150326 14.686749 1.2677585 -21.289482 14.590574 1.2706267 -21.678127 14.662234 1.2879317 -20.928555 13.968917 1.2396499 -20.826176 13.716629 1.228894 -20.947638 13.613075 1.2310451 -21.413376 13.729575 1.2527959 -22.20717 14.046958 1.2929989 -0 0 0 -24.34462 14.983776 1.4035213 -0 0 0 -24.458097 14.642859 1.3996969 -24.456306 14.438686 1.3946297 -25.140953 14.635575 1.4276621 -24.658506 14.152895 1.3961116 -24.728365 13.991982 1.3952034 -25.393002 14.163035 1.4269451 -0 0 0 -25.556108 13.8456 1.4264671 -28.142223 15.023931 1.5621821 -28.137518 14.80029 1.5569714 -28.151531 14.587843 1.5528603 -28.136417 14.361707 1.5472673 -28.153505 14.153355 1.5434908 -28.169994 13.945778 1.539762 -28.268503 13.779231 1.5404791 -28.715443 13.779659 1.559744 -28.91506 13.657806 1.5658629 -0 0 0 -0 0 0 -0 0 0 -31.083828 13.759515 1.6622832 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -36.597061 14.613578 1.9213798 -36.923164 14.481743 1.9335698 -36.819309 14.180965 1.9237221 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -42.40295 14.854438 2.1856871 -0 0 0 -41.662823 14.023589 2.1392694 -42.432983 13.993532 2.1737838 -42.642563 13.77312 2.1800461 -0 0 0 -0 0 0 -48.252041 14.609587 2.4482255 -48.165504 14.261351 2.4394772 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -17.432268 0.74084944 0.87046111 -17.425507 0.63347471 0.86993527 -17.446037 0.52705348 0.87074792 -17.351084 0.41764778 0.86606318 -17.344332 0.3110151 0.86563295 -17.462772 0.20595682 0.87122595 -17.457714 0.098769873 0.87093914 -17.446005 -0.0083439611 0.8703655 -17.437634 -0.11533709 0.86998308 -0 -0 0 -17.424919 -0.3291257 0.86950505 -17.470501 -0.43723956 0.87179965 -17.383627 -0.54180884 0.86778408 -17.475798 -0.6520443 0.87237328 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -17.410774 -1.4001404 0.87136936 -17.431709 -1.5095319 0.87280351 -0 -0 0 -0 -0 0 -27.423088 -2.8848855 1.355096 -27.427702 -3.0556407 1.3561954 -25.494844 -2.9987106 1.2639819 -27.424818 -3.3965347 1.3579643 -27.40247 -3.5646174 1.3579165 -25.393761 -3.4618106 1.2619742 -27.377428 -3.9035811 1.3589203 -27.362841 -4.0729637 1.3593984 -27.347206 -4.2423139 1.3598764 -19.264338 -3.1092517 0.96931934 -19.568991 -3.2817681 0.9850468 -18.938372 -3.2955713 0.95540845 -19.02199 -3.4305108 0.96047568 -19.323622 -3.6074905 0.97620314 -18.925501 -3.6534548 0.95789427 -18.931133 -3.7751772 0.95928055 -19.074909 -3.9257061 0.96745503 -19.07489 -4.0478592 0.9686501 -37.657127 -8.234128 1.8802207 -37.570812 -8.4571352 1.8784997 -37.624283 -8.7120705 1.8837104 -37.511814 -8.9288845 1.8808421 -37.602833 -9.1947145 1.8880606 -37.365513 -9.3800268 1.879169 -0 -0 0 -0 -0 0 -9.0478516 -2.4482918 0.48401523 -9.0153332 -2.4989576 0.48315477 -7.9678526 -2.261204 0.43181348 -7.9288898 -2.3028045 0.4305706 -8.9103613 -2.6474006 0.48028654 -8.8767471 -2.6967952 0.47942606 -26.121584 -8.1136465 1.3444836 -9.0971823 -2.8862057 0.49218968 -7.984695 -2.5871363 0.43711972 -7.9715152 -2.6370223 0.43726313 -25.538906 -8.6253567 1.3255055 -7.2416248 -2.4944615 0.40198392 -7.2214713 -2.5371923 0.4017449 -11.238646 -4.0269232 0.6067754 -0 -0 0 -7.3579535 -2.7383466 0.41116226 -7.2550921 -2.75085 0.4067643 -0 -0 0 -7.0218749 -2.7614138 0.39653429 -7.0187078 -2.8100183 0.39725134 -7.2112961 -2.9386287 0.40810281 -7.1857486 -2.979759 0.40772039 -19.701118 -8.3138437 1.0588081 -19.590992 -8.4093523 1.0557486 -4.8228421 -2.1043603 0.28725481 -4.7167192 -2.0925751 0.28237882 -4.6682835 -2.1054528 0.28051448 -4.5926313 -2.1053224 0.27721602 -4.5090113 -2.1005456 0.27348733 -4.6422787 -2.1974373 0.28123152 -4.5648022 -2.1951311 0.27783746 -4.562016 -2.2283621 0.27841112 -3.9631236 -1.9658692 0.24714743 -3.9982605 -2.0139775 0.24968103 -4.5780234 -2.3415346 0.28151834 -3.9785631 -2.0656536 0.24996784 -3.9649301 -2.0895607 0.24992004 -3.9256144 -2.0997097 0.24848594 -3.8854468 -2.1089785 0.24700402 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -7.1878109 -4.1930785 0.43367782 -7.0785656 -4.1877575 0.42904088 -7.1452355 -4.286622 0.43420368 -7.1580505 -4.3542681 0.43640265 -13.782349 -8.5014324 0.81041956 -6.7585583 -4.2256794 0.4168987 -3.5251503 -2.2335844 0.23514867 -3.8508594 -2.4733372 0.25446141 -3.3920171 -2.2079854 0.2291254 -3.3742373 -2.2260053 0.22888638 -3.3796103 -2.2594414 0.22998586 -3.3135951 -2.2448261 0.22697422 -3.3096387 -2.2719021 0.22754787 -3.035743 -2.1112943 0.21239406 -2.9468119 -2.0763512 0.20794831 -2.9730301 -2.122262 0.2102429 -2.9251561 -2.1152847 0.20818733 -2.9145386 -2.1349647 0.20833074 -2.9879961 -2.2171171 0.21349356 -2.9735374 -2.2348089 0.21344575 -5.4357333 -4.1389785 0.36240238 -25.302156 -19.517902 1.5647634 -5.2900796 -4.1315765 0.35666591 -3.375257 -2.6690593 0.24136317 -4.4064698 -3.5291417 0.30561146 -4.3211288 -3.5045068 0.30169156 -0 -0 0 -3.9645042 -3.2966342 0.28218761 -4.0152483 -3.3807447 0.28663337 -3.885752 -3.3126273 0.27979741 -3.6211691 -3.1255405 0.26435679 -3.5680845 -3.1181149 0.26220563 -3.5817933 -3.1690805 0.26430899 -3.4931035 -3.1290004 0.25986323 -3.3517816 -3.0396278 0.2519756 -3.8075335 -3.4959767 0.28280905 -2.8468347 -2.6458685 0.22142898 -4.0676126 -3.8279564 0.30274323 -3.8018286 -3.6219788 0.28672898 -2.7904625 -2.6908855 0.22095095 -2.7660391 -2.7002792 0.2204251 -4.4688997 -4.4175625 0.3361581 -4.4544163 -4.4576206 0.33701855 -3.6033452 -3.6501524 0.2808969 -2.7498326 -2.8195643 0.22391479 -3.5132499 -3.6473248 0.27778965 -3.1727829 -3.33442 0.25570431 -2.8438232 -3.0254951 0.23414479 -3.8205612 -4.1155419 0.30417734 -3.7567663 -4.0969353 0.30145255 -3.592787 -3.9666321 0.29155716 -3.6203156 -4.0466785 0.29528585 -3.5808699 -4.0523462 0.29423416 -2.7226562 -3.1190858 0.23357114 -3.3841689 -3.9257267 0.28347832 -2.6796439 -3.1469374 0.23323652 -3.754123 -4.4647427 0.31459859 -3.1167533 -3.7529385 0.26889816 -3.3710291 -4.1103349 0.28983623 -1.6827472 -2.0767376 0.16334738 -1.6849422 -2.1057482 0.16449466 -1.6695142 -2.112911 0.16430345 -3.6068954 -4.6251054 0.31612831 -2.9832079 -3.8738215 0.26942399 -2.9460859 -3.8745575 0.2683723 -1.6477321 -2.1939931 0.16674145 -1.6716976 -2.2546268 0.16975307 -1.6566527 -2.2632291 0.16965747 -2.4794211 -3.4322464 0.23806471 -2.4287496 -3.4059107 0.23562671 -1.6957467 -2.4085312 0.1763978 -1.6854937 -2.4254546 0.17678024 -1.6604162 -2.4209197 0.17591977 -1.5839779 -2.3400478 0.17066135 -1.5779071 -2.3621852 0.1713784 -1.5804138 -2.3976831 0.17286032 -2.3727872 -3.6494417 0.24375336 -2.3428028 -3.6521597 0.2430841 -2.3240869 -3.6723752 0.24341872 -2.3110271 -3.7018204 0.24427919 -2.7275081 -4.4296408 0.28438658 -1.5092312 -2.4841142 0.17453346 -1.4801084 -2.4701881 0.17324276 -1.804628 -3.0546703 0.2052235 -1.7828361 -3.0605063 0.20493667 -1.6700555 -2.9076524 0.19590175 -1.768754 -3.1238832 0.20723125 -1.752472 -3.1399117 0.20751807 -1.724031 -3.1339741 0.2066098 -1.7019141 -3.1392241 0.20632298 -1.2578695 -2.3539114 0.16315615 -1.5949135 -3.0299189 0.19929582 -1.5919162 -3.0698018 0.20092115 -1.1997981 -2.348196 0.16162643 -1.5447043 -3.0703645 0.19991727 -1.5165302 -3.060986 0.1989134 -1.5406071 -3.1582265 0.20359817 -1.0661902 -2.2193365 0.15326077 -1.0034966 -2.1219699 0.14776333 -1.0123508 -2.1751883 0.15024912 -1.0018933 -2.1877177 0.15058376 -8.0899744 -17.975859 0.9788323 -7.8800721 -17.800467 0.96707261 -1.3932121 -3.1976526 0.20235527 -7.6960201 -17.977554 0.97132713 -7.6913271 -18.275782 0.98437756 -7.3511438 -17.77158 0.95583868 -7.34162 -18.061571 0.96850669 -7.2576962 -18.173996 0.97199637 -7.1529751 -18.235855 0.97290468 -6.7189469 -17.443289 0.93002462 -6.6181488 -17.501003 0.93088514 -1.2416987 -3.3427205 0.20608397 -1.2139879 -3.3305664 0.20508009 -1.3366616 -3.7386699 0.2254445 -1.1819412 -3.3706658 0.20637079 -1.1982211 -3.4855509 0.21182042 -5.968545 -17.7299 0.93074173 -5.9547367 -18.054567 0.94527406 -4.616848 -14.291557 0.75420231 -1.2622889 -3.9881923 0.23562671 -0.97527951 -3.1475697 0.19312914 -0.95652688 -3.1554065 0.19322474 -0.93799835 -3.1640894 0.19336815 -0.92328674 -3.1860967 0.19418082 -0.89828414 -3.1724784 0.19322474 -0.86843181 -3.1403806 0.1913604 -0.85148621 -3.15433 0.19179063 -0.82805079 -3.1440389 0.19102576 -0.83181846 -3.2390428 0.19547153 -0.78843755 -3.1500876 0.19083455 -4.404335 -18.090233 0.92648715 -4.278976 -18.056654 0.92352331 -0.79716134 -3.454124 0.20508009 -0.77158582 -3.4394562 0.204124 -0.9258554 -4.2503242 0.24360995 -0.73179638 -3.4603934 0.20469765 -0.90147507 -4.3973856 0.25025466 -0.87525356 -4.4067531 0.25044587 -0.58587146 -3.0455856 0.18385521 -3.4543614 -18.603323 0.94097173 -3.3849201 -18.873898 0.95311385 -3.2678566 -18.887423 0.95277923 -3.1348286 -18.804649 0.94780767 -3.0225492 -18.843256 0.94876373 -2.9258828 -18.984848 0.95473921 -2.7627573 -18.687231 0.93948978 -2.6753345 -18.896687 0.94881153 -0.44084227 -3.2504621 0.19241208 -0.42050609 -3.250134 0.19226867 -2.3873112 -19.433479 0.9724744 -2.3686354 -20.310923 1.0140637 -0.4271102 -3.8599715 0.22128557 -0.34692827 -3.3200772 0.19518469 -0.37737355 -3.8410637 0.22013828 -0.25204167 -2.7342401 0.16683705 -0.27511317 -3.201498 0.18920922 -0.25664967 -3.2180617 0.18992628 -0.23616983 -3.209614 0.18944824 -0.17236821 -2.5532341 0.15789774 -0.19731151 -3.2212436 0.18987848 -0.2329496 -4.2347183 0.23839933 -0.2066222 -4.229084 0.23806471 -0.13997571 -3.2712338 0.19212526 -0.15507148 -4.2412829 0.23854274 -0.60554177 -20.049873 0.99542022 -0.079811193 -3.2762518 0.19226867 -0.059778351 -3.2806747 0.19245988 -0.039577108 -3.274987 0.19217306 -0.01952051 -3.28216 0.19250768 --0.00061173114 -3.269233 0.19188623 --0.021685751 -3.4209905 0.19915241 --0.044468462 -3.5606215 0.20584494 --0.059121642 -3.1807842 0.1876795 --0.078061126 -3.1573951 0.18658002 --0.098680437 -3.1967914 0.18849216 --0.11971149 -3.2340558 0.1903087 --0.87340462 -20.093981 0.99800164 --0.13575123 -2.7564752 0.16750631 --0.15644807 -2.8234072 0.17075697 --1.2419471 -20.055559 0.99709338 --0.17967491 -2.6538551 0.16272593 --0.19269823 -2.6088738 0.16062255 --0.21086597 -2.6345246 0.16191326 --0.22676842 -2.6301956 0.16176985 --0 -0 0 --1.9604914 -19.806404 0.98796284 --2.1581972 -20.518167 1.0228118 --2.2905812 -20.56311 1.0256323 --2.4321191 -20.679613 1.0319424 --2.555645 -20.637537 1.0306517 --2.803771 -21.555513 1.0757306 --2.8126209 -20.633322 1.032038 --2.9178751 -20.46636 1.0248196 --3.0344262 -20.387804 1.0219035 --3.1573222 -20.354982 1.0212343 --3.2792926 -20.317478 1.0203738 --3.654103 -21.788401 1.0927488 --3.1023414 -17.828354 0.9014858 --3.2187693 -17.848301 0.90339792 --4.023365 -21.550529 1.0846221 --3.4129326 -17.679962 0.89718342 --4.3279681 -21.702303 1.0945175 --4.3420172 -21.097139 1.0662655 --4.4726295 -21.075962 1.0665523 --0 -0 0 --5.2519603 -23.333849 1.1800863 --5.8664827 -25.336914 1.2800919 --4.4833012 -18.837654 0.96214879 --5.0721798 -20.745466 1.0575174 --4.688591 -18.679495 0.95712942 --5.9079409 -22.939291 1.1690915 --6.491693 -24.580086 1.2521266 --5.5716796 -20.584852 1.0560354 --6.2514997 -22.546562 1.1551806 --6.3700809 -22.438597 1.1517386 --0 -0 0 --7.6928716 -25.884077 1.3277522 --7.8338299 -25.77809 1.3248363 --6.5401201 -21.05644 1.0906454 --6.6894431 -21.079702 1.0938482 --6.8263602 -21.062014 1.0950433 --6.9943819 -21.137318 1.100971 --0 -0 0 --8.0450706 -23.347496 1.2172776 --9.9957638 -28.44001 1.478143 --10.136041 -28.283173 1.4733148 --10.251805 -28.06283 1.4652838 --10.448548 -28.065859 1.4686779 --0 -0 0 --10.742854 -27.807878 1.4621288 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --1.6810538 -3.4964046 0.22109435 --1.6678258 -3.4151289 0.21731785 --1.678979 -3.3851476 0.21626617 --1.6916258 -3.3587265 0.2154057 --1.7103826 -3.344727 0.21521449 --1.7419251 -3.3554423 0.21636178 --1.7895046 -3.3959358 0.21913441 --1.8286902 -3.4192371 0.22099875 --1.8544031 -3.4167297 0.22147679 --1.8811182 -3.4157846 0.22205043 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --9.8523788 -8.3861065 0.65462697 --0 -0 0 --0 -0 0 --10.288568 -8.4357367 0.672171 --10.30287 -8.3422813 0.6698764 --10.374148 -8.2951231 0.67111927 --10.555779 -8.334672 0.67910254 --10.631142 -8.288784 0.68058443 --10.587607 -8.1508951 0.67489576 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.474388 -8.6660509 0.92629594 --16.463396 -8.5317163 0.92285407 --16.589279 -8.4682264 0.92682177 --0 -0 0 --0 -0 0 --7.019136 -3.4223952 0.40915447 --7.0138869 -3.3667309 0.40776819 --7.0335097 -3.3232045 0.40772039 --7.0537682 -3.2799852 0.40772039 --7.073761 -3.2366424 0.40772039 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --22.262234 -8.4183064 1.1744933 --22.281628 -8.2697334 1.1728679 --22.488693 -8.1899338 1.1808512 --22.496193 -8.0366726 1.1787 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --27.99431 -8.4765339 1.4352629 --28.376223 -8.4024334 1.4517553 --0 -0 0 --28.358011 -8.0198793 1.4458276 --0 -0 0 --0 -0 0 --12.806067 -3.3690333 0.66915935 --12.79457 -3.2822056 0.6675818 --12.827065 -3.2067862 0.66820323 --34.10482 -8.3022556 1.7152976 --34.289249 -8.1246128 1.7218945 --34.275188 -7.8994861 1.7187873 --0 -0 0 --40.477524 -8.8070707 2.0179434 --40.547413 -8.562047 2.0187562 --40.608971 -8.3150949 2.0192342 --40.591625 -8.0523577 2.0159357 --18.362047 -3.5262611 0.93026364 --18.418694 -3.42009 0.9319846 --18.486525 -3.3154714 0.9342792 --18.744707 -3.2431734 0.94584769 --18.400688 -3.0675118 0.92820811 --0 -0 0 --24.148949 -3.7214346 1.2048008 --24.034966 -3.5530381 1.1982039 --24.172028 -3.4218705 1.203797 --24.235132 -3.2792466 1.2058525 --24.384573 -3.1472239 1.2121148 --23.813534 -2.9251144 1.1836716 --28.105171 -3.2771389 1.3896103 --0 -0 0 --24.013357 -2.5019121 1.19089 --24.016329 -2.3533535 1.1903163 --28.025942 -2.5725448 1.3823441 --25.905457 -2.2177868 1.2797573 --0 -0 0 --44.444916 -3.2552567 2.1681907 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --118.43729 10.108509 4.2904339 --118.49245 10.845967 4.2947264 --118.45948 11.576319 4.2960143 --118.41008 12.305433 4.2968726 --118.15354 13.012061 4.2904339 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --46.568428 14.714111 1.7837377 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --40.974304 14.343148 1.5895336 --40.833755 14.575814 1.5875661 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --35.481033 14.158172 1.4030204 --0 0 0 --35.105129 14.510057 1.3952937 --34.979507 14.710077 1.3938986 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --55.83197 25.521805 2.2329934 --55.195774 25.641594 2.2141061 --55.009384 25.966562 2.2129972 --54.824692 26.291937 2.2120314 --54.683899 26.638344 2.2128899 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --52.435963 28.391294 2.1699996 --52.292301 28.729826 2.1712873 --52.120274 29.053062 2.1715021 --0 0 0 --33.858063 19.421824 1.4327824 --0 0 0 --33.707554 19.889175 1.4365385 --33.542858 20.070484 1.4347856 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --49.59272 33.524052 2.1782987 --20.823997 14.26398 0.9390983 --0 0 0 --20.478985 14.400036 0.93172938 --20.406521 14.537018 0.93244481 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --37.528084 30.368135 1.7636341 --37.144699 30.436949 1.7545481 --36.941093 30.65089 1.7537968 --39.822182 33.456036 1.8973126 --34.646973 29.47275 1.6637955 --34.248913 29.498262 1.6535648 --0 0 0 --0 0 0 --21.678122 19.377697 1.0763898 --21.536585 19.490229 1.0753167 --21.443853 19.646988 1.0766401 --32.651978 30.286264 1.629741 --32.341679 30.369747 1.6236597 --32.247437 30.655754 1.6282384 --32.163139 30.953526 1.6334254 --32.167305 31.339981 1.6431552 --14.664004 14.463601 0.77286762 --14.599026 14.577312 0.77408385 --14.444644 14.601256 0.77079284 --14.338716 14.673173 0.76997012 --28.193798 29.207264 1.4886935 --27.959574 29.322571 1.4858675 --27.667439 29.374998 1.4800367 --27.626225 29.694201 1.4873699 --27.604446 30.03828 1.4958835 --28.879879 31.815775 1.573651 --27.255768 30.399323 1.497064 --27.13896 30.645292 1.5008558 --25.257481 28.87582 1.4088154 --25.918053 30.00049 1.4547104 --24.81171 29.078682 1.4038789 --16.32711 19.37467 0.94253236 --24.025948 28.867865 1.3799834 --15.924403 19.374386 0.9333033 --16.053377 19.777439 0.94739735 --15.666698 19.54495 0.93223017 --23.069599 29.144768 1.3661041 --22.898336 29.296007 1.3665692 --22.729139 29.450197 1.367213 --22.634626 29.702772 1.3723284 --22.921806 30.465576 1.4003018 --22.370924 30.116282 1.378481 --22.222355 30.302944 1.3806989 --22.915649 31.653774 1.4343921 --21.700647 30.366032 1.3715771 --21.303076 30.19973 1.3584847 --21.087679 30.287228 1.3566246 --20.297523 29.537235 1.3184563 --20.148998 29.710022 1.3205668 --0 0 0 --19.954174 30.214388 1.3316917 --19.743855 30.29858 1.3300821 --19.546764 30.402344 1.3293667 --0 0 0 --19.258087 30.777164 1.3351617 --18.929255 30.668541 1.3256464 --18.715256 30.742285 1.3238935 --18.503637 30.818842 1.3223196 --8.5993919 14.524383 0.63979721 --8.5267382 14.605354 0.64097768 --20.993952 36.471268 1.5419216 --20.778158 36.614174 1.5425297 --20.556034 36.746208 1.5427443 --18.020723 32.68322 1.3715414 --17.969196 33.06802 1.3827379 --17.770203 33.185581 1.3830599 --10.109722 19.161716 0.81110746 --16.432871 31.61441 1.3109801 --16.320108 31.873873 1.3173832 --16.167877 32.059963 1.320853 --10.004933 20.146049 0.84076214 --9.6247425 19.682766 0.81987149 --9.5709839 19.88102 0.82541609 --9.6435432 20.350275 0.84169221 --14.710059 31.540033 1.2813253 --9.3172197 20.301779 0.83518177 --9.1871281 20.346725 0.83471674 --14.142839 31.841074 1.2827204 --13.320694 30.49313 1.2267021 --12.984242 30.227201 1.2131804 --12.412449 29.392118 1.1776593 --12.193937 29.37635 1.1741178 --12.055358 29.553329 1.1780884 --11.859295 29.590567 1.1766934 --11.692883 29.701832 1.1781958 --11.502849 29.753445 1.1774446 --11.1509 29.377796 1.1603816 --10.931703 29.341715 1.1564109 --11.143689 30.481054 1.1972978 --0 0 0 --10.187812 28.963835 1.1346259 --10.014137 29.038082 1.1350909 --9.824254 29.064899 1.1338032 --9.6328478 29.085735 1.1323366 --9.5571976 29.461792 1.1442842 --9.3689823 29.497021 1.1434258 --9.2180786 29.651291 1.1470745 --9.0374222 29.712074 1.1472534 --8.8731794 29.828272 1.1495427 --8.7058964 29.936852 1.1515818 --8.5826902 30.203115 1.159523 --8.7772741 31.624531 1.2103902 --8.6099844 31.777143 1.2140747 --8.3709059 31.663195 1.207922 --3.68309 14.286437 0.56371099 --3.6048598 14.346567 0.56510603 --3.5250795 14.40239 0.56635809 --3.4447496 14.457773 0.56761009 --3.3598101 14.495188 0.56821817 --3.2760792 14.538929 0.56907672 --4.3071256 19.676207 0.7565915 --4.1792507 19.669027 0.75537527 --4.0504165 19.655149 0.7539444 --3.929934 19.680613 0.75398022 --3.8421094 19.875082 0.76020443 --6.4432201 34.462402 1.2905544 --0 0 0 --4.8826065 28.014484 1.0534959 --5.7443786 34.197697 1.2768539 --4.4886909 27.76449 1.0423352 --0 0 0 --4.7886453 32.116169 1.1979059 --3.9086177 27.364569 1.0250576 --4.7724657 34.942009 1.2979592 --4.5577178 34.968651 1.2978876 --4.3429451 34.994968 1.2978518 --0 0 0 --3.0479665 27.297779 1.0187975 --4.5841632 43.47097 1.6002651 --0 0 0 --0 0 0 --0 0 0 --2.0930116 25.939034 0.96710747 --0 0 0 --1.8656067 27.294802 1.0148984 --2.3190215 37.288036 1.3729007 --2.0776563 37.078056 1.3648878 --1.3853416 27.774668 1.0310314 --0 0 0 --0 0 0 --0.84747517 26.956415 1.0009832 --0.84299296 33.318996 1.2286338 --0.63972336 33.38549 1.2308517 --0.43964261 33.755524 1.2439798 --0.23279703 33.798557 1.2454464 --0.025498645 33.917274 1.2496675 -0.18235661 33.868824 1.2479504 -0.39101943 33.941013 1.2505976 -0.57493806 32.559074 1.2012327 -0 0 0 -0 0 0 -1.0371946 28.745878 1.0652291 -1.293807 30.64006 1.1333382 -2.0015054 41.378094 1.5184554 -1.5440509 28.316778 1.0507058 -1.6870868 27.801025 1.0325695 -2.8414361 42.510864 1.560666 -2.0309587 27.817101 1.0339646 -4.0105038 50.652943 1.8543867 -2.3896706 27.995205 1.0413336 -4.0784178 44.554077 1.6370741 -0 0 0 -2.0846021 20.056047 0.75737852 -2.2080622 20.046852 0.75752157 -3.3205118 28.538078 1.0640128 -2.4518347 20.001383 0.75691348 -2.5824296 20.047415 0.75913131 -2.688271 19.904425 0.75455254 -4.6790881 33.113636 1.2326759 -2.9305761 19.858072 0.75412327 -3.0510001 19.830828 0.75380135 -3.1712005 19.802853 0.75347936 -5.5508642 33.352592 1.2458757 -8.3690023 48.449005 1.7955066 -5.3127723 29.668777 1.1144866 -5.3815875 29.025417 1.0922724 -0 0 0 -0 0 0 -2.9625714 14.484672 0.56481987 -3.1027436 14.709705 0.57372701 -3.1819065 14.639608 0.57186687 -3.3065882 14.775848 0.57759035 -3.3987582 14.762098 0.57784075 -3.481447 14.707901 0.57662451 -3.53668 14.542545 0.57133031 -9.5820885 38.376499 1.4514551 -3.4688282 13.537703 0.53584486 -3.5340512 13.448505 0.53334087 -3.6011696 13.369634 0.53123033 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -10.170821 33.61972 1.2928796 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.6734419 20.307718 0.81268144 -7.8190813 20.315279 0.81479192 -0 0 0 -0 0 0 -8.0235958 19.754034 0.79880202 -8.1064806 19.612074 0.79522485 -8.3963432 19.965458 0.81089282 -8.4499092 19.752769 0.80463278 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -31.721132 63.138176 2.564811 -31.626583 61.998711 2.5268931 -31.697117 61.206253 2.5028188 -0 0 0 -32.311283 60.560501 2.492588 -32.659428 60.318916 2.490871 -0 0 0 -33.739235 60.527248 2.5160184 -34.186237 60.453926 2.5215631 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.583662 31.835915 1.3735088 -19.737915 31.649857 1.3707544 -29.815207 47.162247 2.0328155 -20.48284 31.963968 1.3945068 -0 0 0 -0 0 0 -20.727764 31.071907 1.3725787 -13.657419 20.203238 0.90851355 -13.850025 20.219645 0.91287774 -0 0 0 -14.190228 20.180597 0.91867274 -14.024456 19.686981 0.9008227 -14.148499 19.605421 0.90103734 -14.234322 19.471445 0.89896256 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -31.184301 39.518757 1.8375382 -31.345095 39.225174 1.8328879 -31.584558 39.03133 1.8328521 -32.048943 39.111984 1.8455869 -0 0 0 -32.21022 38.339287 1.8279872 -32.444859 38.140926 1.8279872 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.190229 19.939934 1.0262022 -19.274559 19.783155 1.0242705 -19.391373 19.660248 1.0240558 -19.669809 19.699306 1.0320687 -39.218018 38.798317 2.0102794 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -17.4681 15.661517 0.87538904 -17.419474 15.426165 0.86848515 -17.053452 14.916319 0.8465929 -17.148436 14.814667 0.84677178 -17.323399 14.781171 0.8507424 -17.776756 14.980499 0.86773396 -17.586439 14.636518 0.85460573 -17.933775 14.740282 0.86655349 -18.580986 15.082182 0.89223748 -17.540186 14.059682 0.84026134 -18.252207 14.447379 0.86884284 -18.509796 14.467434 0.87653375 -18.427332 14.221699 0.86880708 -20.219234 15.407655 0.94553721 -20.368494 15.32476 0.94800544 -18.685986 13.880102 0.86880708 -18.799812 13.786462 0.87009484 -20.821972 15.073832 0.95573211 -21.484848 15.353693 0.98084378 -20.134048 14.202519 0.9175638 -20.554611 14.311126 0.93212283 -20.202217 13.882492 0.91302079 -20.177843 13.684229 0.90829897 -20.236513 13.543487 0.90722579 -20.797062 13.734638 0.92772293 -21.000675 13.684794 0.93283826 -21.148975 13.597296 0.93559271 -21.291925 13.505278 0.93813246 -32.017426 20.03417 1.3875313 -32.059811 19.787998 1.3841687 -24.565531 14.954885 1.0650501 -32.452736 19.484652 1.3905361 -24.517599 14.516356 1.0554992 -24.623468 14.375722 1.0562146 -24.66964 14.200434 1.0544976 -25.222174 14.313176 1.0736711 -0 0 0 -25.445803 14.030088 1.0757101 -0 0 0 -28.11985 15.057537 1.1773731 -28.172823 14.864194 1.1757991 -28.14645 14.630207 1.1710773 -28.112934 14.394374 1.1661408 -28.11685 14.179304 1.1627783 -28.167521 13.988735 1.1613474 -28.258211 13.818274 1.161562 -28.608997 13.772942 1.1721504 -28.968409 13.727672 1.1830608 -0 0 0 -0 0 0 -31.040531 14.015918 1.2547113 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -36.625698 14.678935 1.4479853 -36.804348 14.489073 1.4514194 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -39.385025 13.582557 1.5268618 -39.444901 13.332959 1.5260032 -42.560799 14.095821 1.6404366 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -48.262527 14.357177 1.8379675 -0 0 0 -48.399513 13.753733 1.8366439 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -17.359333 0.43901116 0.65718222 -17.3617 0.332488 0.65718222 -0 0 0 -0 0 0 -0 0 0 -17.442581 -0.094108373 0.65997237 -0 -0 0 -0 -0 0 -0 -0 0 -17.298166 -0.51804709 0.65507168 -0 -0 0 -0 -0 0 -17.455393 -0.84456861 0.66115284 -17.465849 -0.95252734 0.66172522 -17.41379 -1.0568939 0.66007972 -17.493727 -1.1695207 0.66319185 -17.501173 -1.2779295 0.66372842 -17.421272 -1.379612 0.66115284 -17.413475 -1.4865658 0.6611886 -0 -0 0 -0 -0 0 -27.442514 -2.8521948 1.0231974 -27.42251 -3.0203066 1.0231259 -27.403461 -3.1885109 1.0231259 -27.399252 -3.3585405 1.0236982 -25.464174 -3.2800865 0.95462316 -25.423761 -3.4335952 0.95390773 -27.407005 -3.8727882 1.026381 -27.377785 -4.0401521 1.0262022 -27.350504 -4.2077589 1.0261307 -27.811644 -4.4535527 1.0438018 -19.261532 -3.2058637 0.7345562 -19.170595 -3.3117425 0.73198062 -19.169588 -3.4328318 0.73269606 -19.293591 -3.5773509 0.73799026 -19.121111 -3.6668725 0.73251724 -19.134523 -3.7913144 0.73384076 -0 -0 0 -0 -0 0 -37.660179 -8.1847639 1.4151112 -37.561462 -8.4049959 1.4133584 -37.509182 -8.6353102 1.4133584 -37.497311 -8.8751974 1.4148966 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -9.0494394 -2.4376402 0.37108082 -9.0314217 -2.4923232 0.3709735 -7.9686532 -2.251797 0.3320182 -7.934526 -2.2948196 0.331267 -8.9178934 -2.6385787 0.36850527 -0 -0 0 -0 -0 0 -9.0822229 -2.8700252 0.37655386 -7.9754772 -2.5742676 0.33559537 -7.9481421 -2.6194029 0.3351661 -25.557838 -8.5961542 1.0008043 -0 -0 0 -7.221333 -2.5281932 0.3094821 -11.23213 -4.0096731 0.46251306 -11.227037 -4.0856929 0.46326426 -7.3497305 -2.7260122 0.31620714 -7.24125 -2.7364423 0.31270152 -6.9995499 -2.6943147 0.30408058 -6.9698596 -2.7321069 0.30357978 -11.13541 -4.4437132 0.46476668 -7.1996903 -2.9246089 0.31377468 -7.1889987 -2.9717844 0.31406087 -19.674353 -8.2739267 0.79958898 -19.663643 -8.4117842 0.80116296 -19.691385 -8.5669641 0.8042751 -5.6973052 -2.5206757 0.25861484 -4.7684727 -2.144882 0.22277169 -4.6525159 -2.1271524 0.2187295 -4.7127895 -2.1897638 0.221627 -4.7227621 -2.2297311 0.22255707 -4.8297396 -2.3165727 0.22735046 -4.6932473 -2.2866435 0.22248551 -4.6737537 -2.3127387 0.22227089 -4.5996447 -2.3113136 0.21987419 -4.6200948 -2.3572035 0.22126928 -4.6188555 -2.392401 0.22180586 -4.6014357 -2.4193017 0.22169854 -4.5168486 -2.4103267 0.21887258 -4.4984589 -2.4360929 0.2187295 -4.4956889 -2.470386 0.21923029 -4.4891753 -2.5027902 0.21958801 -32.471661 -18.36269 1.3708975 -4.4130468 -2.5318341 0.2177279 -3.3781402 -1.9658474 0.17551738 -3.3565466 -1.980952 0.1751239 -3.3520467 -2.0061281 0.17544584 -3.3507817 -2.033397 0.17591088 -3.3884633 -2.0848114 0.1780214 -3.3586476 -2.0949869 0.17730597 -3.3719163 -2.1321101 0.17841488 -3.2973461 -2.1133993 0.17580356 -3.1611152 -2.0535743 0.17054513 -3.009887 -1.9817201 0.16460705 -2.9835374 -1.9907233 0.16399893 -3.3620555 -2.2731569 0.18088312 -3.3834975 -2.3180273 0.18242131 -3.3651056 -2.3358953 0.18224245 -3.5117571 -2.469738 0.18928945 -3.0342088 -2.161901 0.16897118 -3.0751822 -2.2196596 0.17136788 -3.1534779 -2.3057201 0.17544584 -3.5673487 -2.6420038 0.19451211 -5.4778261 -4.1089315 0.28072169 -3.0786712 -2.3391941 0.17401497 -0 -0 0 -5.2972088 -4.127985 0.27599984 -3.4987485 -2.7613313 0.19515601 -5.5756149 -4.4559498 0.29109547 -3.4389625 -2.7833133 0.19397554 -0 -0 0 -0 -0 0 -0 -0 0 -4.7953668 -4.0796733 0.26097578 -3.7161906 -3.20119 0.21118169 -3.6128726 -3.151026 0.20721103 -3.5844803 -3.1651978 0.20678177 -3.5746777 -3.1957901 0.20724681 -3.3564162 -3.0379529 0.19766001 -3.7989874 -3.4811013 0.22005305 -3.8918581 -3.6103644 0.22563341 -3.8419483 -3.608181 0.2242741 -2.8679938 -2.7269371 0.17727019 -3.4834301 -3.3529177 0.20867768 -3.45277 -3.3644652 0.20817687 -3.8034708 -3.7519073 0.22684966 -3.7803781 -3.7751744 0.22684966 -3.7543314 -3.7954576 0.22670656 -3.5507658 -3.6340194 0.21747749 -2.9793863 -3.0869997 0.18918215 -3.7838328 -3.9687917 0.23189345 -7.745223 -8.2236576 0.43997693 -3.9479115 -4.2439375 0.24308997 -3.5235021 -3.8346786 0.22202049 -3.8700101 -4.2639465 0.24173065 -3.832433 -4.2749629 0.24112253 -3.7875783 -4.2774496 0.24012092 -3.8599551 -4.4134398 0.24548666 -3.8301888 -4.4340158 0.24534358 -3.1406076 -3.6812491 0.20882076 -3.7658281 -4.4692216 0.244807 -3.7664638 -4.5260415 0.24638095 -3.7468712 -4.5591035 0.24684599 -3.7289038 -4.5944223 0.24741833 -3.7118938 -4.6312518 0.24806222 -3.0445404 -3.8468518 0.21121746 -3.103348 -3.9709682 0.21601085 -3.5503047 -4.6006904 0.24362655 -3.5395749 -4.6454391 0.24466392 -3.5542648 -4.7245669 0.24723947 -1.6521981 -2.2248504 0.13480929 -1.6337875 -2.2284992 0.13452311 -2.4628103 -3.4025304 0.18596269 -1.6452487 -2.3028562 0.13691981 -1.5734813 -2.2312458 0.13334265 -1.5620452 -2.244139 0.13348573 -1.556736 -2.2660358 0.13402231 -1.5366322 -2.2664471 0.13362882 -1.5188057 -2.2700195 0.13337842 -1.5065007 -2.2817976 0.13348573 -1.4886522 -2.2851374 0.13323534 -1.4864932 -2.312722 0.13402231 -1.4754864 -2.3268628 0.13423695 -1.4855664 -2.3748424 0.13588244 -1.5103345 -2.4476936 0.1385653 -1.500484 -2.465451 0.13892302 -1.488929 -2.4806089 0.13917342 -2.4074819 -4.0668049 0.20477857 -1.8982592 -3.2521234 0.17040205 -1.8363888 -3.1909564 0.16739723 -1.653017 -2.9136052 0.15552105 -1.7907499 -3.2019134 0.1669322 -1.7324661 -3.1428297 0.16407047 -1.2751123 -2.3473182 0.13123213 -1.2672901 -2.3674319 0.13173293 -1.2443457 -2.3592534 0.13108903 -1.2404473 -2.3872387 0.13191178 -1.621581 -3.1678078 0.16299732 -1.2245589 -2.4290504 0.13298494 -1.572361 -3.1668823 0.16217457 -8.2062654 -16.782089 0.70429343 -1.4887291 -3.0931935 0.15849009 -1.4637301 -3.089627 0.15798929 -7.77178 -16.664022 0.69377655 -7.6723032 -16.717754 0.69402695 -7.5432587 -16.706223 0.69173759 -7.3724551 -16.598757 0.68572795 -1.3834702 -3.1678724 0.15934862 -1.3636119 -3.1753836 0.15931284 -7.36272 -17.435007 0.71305746 -7.0900846 -17.081121 0.69760412 -6.8692589 -16.840227 0.68662226 -6.7988892 -16.964619 0.68980592 -6.7279825 -17.090635 0.69306111 -6.665514 -17.241587 0.6972822 -6.3546081 -16.742126 0.67660618 -6.2011685 -16.645014 0.67141932 -1.2164651 -3.3284042 0.16246074 -1.2223361 -3.409179 0.16525093 -1.1758605 -3.3440242 0.16249652 -1.2576284 -3.6478288 0.17372881 -5.8441582 -17.290356 0.68891162 -5.7533526 -17.372374 0.69066441 -5.6614513 -17.452976 0.69238144 -5.5324726 -17.41881 0.68980592 -0.97751021 -3.1455083 0.15351784 -0.96313542 -3.1677008 0.15412596 -0.94966477 -3.193666 0.15487716 -0.93646961 -3.221504 0.15569991 -0.94646192 -3.3319707 0.15959902 -0.87575138 -3.1566799 0.15287395 -0.84930903 -3.1359503 0.15190811 -0.83235019 -3.1497979 0.15223007 -0.80951464 -3.1412978 0.15172926 -4.4108157 -17.553732 0.68347436 -3.9829602 -16.27293 0.63528997 -0.81132281 -3.4064784 0.16095833 -0.78724623 -3.397763 0.16045754 -0.77473193 -3.4395759 0.16181685 -3.9850502 -18.205013 0.70268369 -3.87431 -18.234009 0.70286256 -1.7243441 -8.3687325 0.34146193 -0.61082309 -3.0606496 0.14732935 -1.6184819 -8.3735638 0.34088957 -3.370189 -18.026932 0.69205952 -3.2463689 -17.974497 0.68941242 -3.12658 -17.93993 0.68744498 -2.9826696 -17.757725 0.68014759 -2.8731756 -17.772732 0.68004024 -2.7671392 -17.809776 0.68075567 -2.6662095 -17.882761 0.68279469 -2.5780554 -18.05015 0.68826771 -2.4729338 -18.107216 0.68977016 -2.3945932 -18.373756 0.69885612 -2.2820551 -18.390087 0.6989277 -2.1639075 -18.359081 0.69731796 -2.048445 -18.347183 0.69642365 -1.9338386 -18.340523 0.69574398 -1.7740817 -17.876686 0.67864519 -0.3012329 -3.2409515 0.15212275 -0.28038961 -3.2317872 0.15172926 -0.20540547 -2.5501075 0.12718993 -0.21515769 -2.8921556 0.13942382 -0.17211956 -2.5235221 0.12615256 -0.15278561 -2.4626901 0.12393472 -0.13347781 -2.3887465 0.12125184 -0.11762306 -2.3655658 0.12039332 -0.1055517 -2.4221537 0.12239654 -0.089411095 -2.3888016 0.1211803 -0.098723851 -3.1514399 0.14847404 -0.081863381 -3.2498922 0.15197966 -0.061307825 -3.2183597 0.15083496 -0.041728538 -3.2316658 0.1513 -0.021933096 -3.2368579 0.15147886 -0.0020556725 -3.2159448 0.15072766 --0.01745691 -3.1749239 0.14926101 --0.036500521 -3.1367838 0.1479017 --0.052414335 -2.9476511 0.14114086 --0.067386888 -2.8163948 0.13645478 --0.085354216 -2.8389034 0.13727753 --0.1015831 -2.8053687 0.13609706 --0.11803593 -2.78672 0.13545318 --0.13305692 -2.743021 0.13391499 --1.0448407 -19.159248 0.72242963 --1.1572359 -19.067686 0.71938902 --0.17772681 -2.6533566 0.13080287 --0.19400415 -2.652216 0.13080287 --0.20806581 -2.623081 0.12980126 --0.22577147 -2.6406739 0.13048092 --1.7621752 -19.248131 0.72747344 --1.9030871 -19.470692 0.73587978 --2.0254135 -19.486481 0.73688138 --2.1542406 -19.558121 0.73992193 --2.2835608 -19.624941 0.74281943 --2.4190094 -19.733561 0.74725515 --2.5506425 -19.800613 0.75022417 --2.668879 -19.76082 0.74936563 --2.7842069 -19.702513 0.74786323 --2.9463313 -19.964848 0.75798661 --3.0359576 -19.733042 0.75025994 --3.1961648 -19.958765 0.75913131 --2.9545317 -17.751284 0.67975408 --3.0678184 -17.758425 0.68068415 --3.1200073 -17.42251 0.66916567 --3.6853793 -19.876282 0.75920284 --3.429178 -17.881502 0.6873377 --3.5423284 -17.877771 0.68798155 --4.0656295 -19.878511 0.7618857 --3.7905281 -17.970831 0.69302535 --4.5579948 -20.971657 0.80381006 --4.1971292 -18.755821 0.72357434 --4.3049593 -18.698551 0.72242963 --4.4499927 -18.800154 0.72715145 --5.020052 -20.642761 0.79604763 --4.6324315 -18.552149 0.72006869 --5.2715039 -20.573795 0.79583299 --5.6254497 -21.408058 0.82792014 --5.7910066 -21.500515 0.83264196 --5.8832169 -21.321037 0.82731199 --6.050611 -21.414368 0.83214116 --6.231585 -21.548685 0.83854431 --6.6656089 -22.53064 0.87664109 --6.8043075 -22.491228 0.87671262 --6.4243455 -20.774414 0.81396919 --7.4019585 -23.425667 0.91498822 --7.5965061 -23.537683 0.92092633 --7.7345324 -23.471647 0.9202109 --6.9567704 -20.683432 0.81672359 --0 -0 0 --8.4307184 -24.08367 0.94897127 --8.5793419 -24.034309 0.94907856 --8.7994394 -24.181248 0.95669794 --9.0028963 -24.275784 0.96238565 --9.3010941 -24.61553 0.97751701 --7.9906607 -20.761097 0.83189076 --9.8993044 -25.256924 1.0066351 --10.248536 -25.68301 1.0254152 --10.588696 -26.069632 1.0428002 --10.8019 -26.133471 1.0478083 --11.106934 -26.411236 1.0611868 --11.109993 -25.971382 1.046735 --0 -0 0 --10.933022 -24.714436 1.0029507 --0 -0 0 --16.015455 -35.035347 1.4145031 --16.262547 -35.006207 1.4172575 --16.490259 -34.933777 1.4183664 --1.6701081 -3.4816906 0.17383611 --1.663868 -3.4147761 0.17158251 --1.6679494 -3.3704648 0.17022319 --1.6854584 -3.3539159 0.16997278 --1.7060059 -3.3435111 0.16997278 --1.7292466 -3.3383048 0.17018741 --1.7724826 -3.3709762 0.17194022 --1.7968966 -3.3670907 0.1722264 --1.8398865 -3.397306 0.17390767 --1.8655094 -3.3947115 0.17426538 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --10.324634 -8.4858923 0.51398844 --10.302796 -8.3625479 0.51059014 --10.459961 -8.384181 0.51545507 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.482691 -8.6962051 0.70268369 --16.454163 -8.5525007 0.69939274 --0 -0 0 --0 -0 0 --0 -0 0 --7.0081286 -3.4266422 0.31484783 --7.0155158 -3.377074 0.31431127 --7.0370078 -3.3343921 0.31434703 --7.075449 -3.2995994 0.31506246 --0 -0 0 --0 -0 0 --0 -0 0 --36.100494 -15.770309 1.4457318 --0 -0 0 --36.292221 -15.326502 1.4457675 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --22.281677 -8.4573307 0.88869607 --22.331278 -8.3197556 0.88862455 --22.382845 -8.1829195 0.88866031 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --28.179754 -8.760582 1.0919147 --28.223417 -8.5846014 1.0915569 --28.306211 -8.4203825 1.0927017 --28.355427 -8.2459822 1.09263 --28.412218 -8.0737534 1.0928805 --0 -0 0 --0 -0 0 --12.791137 -3.3813896 0.50919503 --12.778742 -3.2943578 0.5079788 --12.82973 -3.223681 0.5091235 --0 -0 0 --34.276806 -8.1674509 1.296886 --34.365215 -7.9660063 1.2983168 --0 -0 0 --40.494522 -8.8646927 1.5194212 --40.586277 -8.624157 1.5208163 --40.617874 -8.3707256 1.5200651 --0 -0 0 --0 -0 0 --0 -0 0 --18.61767 -3.3625467 0.71280706 --18.481413 -3.2209623 0.70711941 --18.694983 -3.1401172 0.7141664 --52.395634 -8.4711733 1.9354452 --27.515995 -4.2754335 1.032355 --27.544676 -4.1069603 1.0324622 --24.075089 -3.4387167 0.9061169 --24.196733 -3.3047254 0.9097656 --23.993586 -3.127131 0.90171695 --24.05695 -2.9853892 0.90332669 --24.08077 -2.8384244 0.90354133 --27.876806 -3.112627 1.0396523 --27.859602 -2.9377463 1.0383645 --27.857214 -2.7647734 1.0376492 --29.46575 -2.7419686 1.0948837 --25.913755 -2.2510931 0.9666782 --29.672497 -2.3943212 1.1011795 --39.859879 -2.9704437 1.4663361 --0 -0 0 --42.269211 -2.6288648 1.5515442 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --59.64743 14.963211 1.4528253 --0 0 0 --0 0 0 --53.626659 14.506974 1.3159205 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --46.857353 14.231781 1.1642264 --46.77774 14.521692 1.1644337 --46.696331 14.811162 1.164641 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --41.017223 14.408766 1.0375727 --41.019337 14.692875 1.0398073 --0 0 0 --0 0 0 --0 0 0 --40.740593 15.731489 1.0421339 --35.704819 14.039183 0.91985726 --34.987812 14.005708 0.90421557 --0 0 0 --35.042332 14.528973 0.90992862 --34.90094 14.721954 0.9086386 --35.208675 15.10692 0.91863632 --35.183125 15.352262 0.92034101 --60.180759 26.701727 1.5528949 --56.176434 25.33864 1.4558431 --55.881767 25.619524 1.4523416 --55.070145 25.657501 1.4357324 --54.969509 26.022301 1.4372066 --54.656544 26.285868 1.4333135 --0 0 0 --39.927402 19.808788 1.0628436 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --52.220428 27.935982 1.4004637 --0 0 0 --51.727444 28.494144 1.3966167 --0 0 0 --0 0 0 --33.819103 19.44869 0.93476176 --0 0 0 --33.619194 19.886671 0.93586749 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --55.879112 37.365807 1.5847542 --49.54842 33.574169 1.4149536 --20.80162 14.281446 0.61722928 --20.752171 14.435648 0.618312 --20.543083 14.478043 0.61492562 --27.640432 19.735455 0.81840533 --45.485168 32.900894 1.3293507 --45.230019 33.140957 1.3278533 --0 0 0 --44.875061 33.734955 1.3294429 --44.493828 33.87764 1.3244209 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --37.080982 30.453087 1.1414665 --36.894196 30.680677 1.1414896 --0 0 0 --35.172939 29.986942 1.1008536 --35.47261 30.620295 1.1155968 --34.713482 30.338676 1.0981352 --21.948648 19.420805 0.71112525 --21.925871 19.641838 0.71411997 --21.651655 19.636971 0.70935148 --0 0 0 --33.954689 31.564167 1.1040555 --32.888214 30.951078 1.0764581 --33.650925 32.060532 1.1067969 --38.755245 37.380199 1.2765284 --32.703476 31.932556 1.0890359 --0 0 0 --14.520478 14.5296 0.50914294 --14.420519 14.60775 0.50879735 --14.238489 14.601472 0.50575656 --28.167448 29.244032 0.97141248 --27.977142 29.405449 0.97106695 --27.634615 29.404627 0.96563041 --27.546852 29.674019 0.96878636 --27.64127 30.144602 0.97823125 --27.439678 30.295855 0.97767836 --27.257936 30.468866 0.97783965 --27.089005 30.656521 0.97848463 --26.058321 29.857269 0.94897515 --25.881809 30.024929 0.94922853 --26.331543 30.928427 0.97178108 --26.246788 31.214905 0.97555906 --0 0 0 --0 0 0 --15.835533 19.551872 0.61557066 --15.690915 19.618219 0.61467224 --23.395195 29.622566 0.90559781 --23.053766 29.561373 0.89963138 --22.730444 29.518499 0.89428693 --22.686848 29.838867 0.89953923 --22.386301 29.821598 0.89504713 --22.417185 30.247555 0.90334022 --22.240023 30.396637 0.90368575 --22.334642 30.922358 0.91476625 --21.339531 29.92975 0.88281488 --21.198059 30.120626 0.88451958 --20.717415 29.8248 0.87258673 --20.56794 30.000834 0.8739689 --20.170593 29.811817 0.86521512 --19.934555 29.856033 0.86302668 --20.48744 31.095644 0.89387232 --19.830393 30.504103 0.87417626 --20.831305 32.47826 0.9249022 --19.156292 30.273743 0.86132199 --18.960648 30.375446 0.86090732 --18.798019 30.530376 0.86196703 --18.732277 30.845957 0.86738056 --18.494888 30.88055 0.86523819 --8.5905056 14.543907 0.42503735 --8.5197182 14.628308 0.4258897 --20.767126 36.168926 0.99684459 --18.247553 32.236938 0.88938022 --18.171669 32.567429 0.89516234 --17.854918 32.46632 0.88958752 --17.688717 32.636791 0.89120007 --17.387346 32.555996 0.88627028 --17.708647 33.652973 0.91207099 --10.028624 19.34412 0.53789222 --10.082956 19.744526 0.54666907 --9.9827271 19.848 0.54775178 --9.8217106 19.83004 0.54572457 --9.6761904 19.841408 0.54448062 --15.008182 31.261818 0.8348763 --9.5276489 20.161131 0.54964072 --17.400606 37.415733 0.9866395 --14.493025 31.670044 0.83835477 --14.276677 31.71006 0.83713388 --13.40907 30.2778 0.7988475 --13.121246 30.125778 0.79297328 --12.44343 29.055113 0.76413178 --12.221085 29.026798 0.76152873 --12.015228 29.034727 0.75987011 --11.808983 29.039371 0.75816542 --11.58051 28.98595 0.75505549 --12.008986 30.60228 0.79331881 --12.342555 32.028996 0.8267445 --12.18223 32.200439 0.82911724 --11.430441 30.782528 0.79244345 --10.985023 30.148521 0.77518922 --10.426704 29.171322 0.74964195 --10.172785 29.021526 0.74443579 --9.9620333 28.988852 0.74213213 --9.7635536 28.988794 0.74065781 --9.5761003 29.019676 0.73996675 --9.4110775 29.118793 0.74095726 --9.2762604 29.315153 0.74432057 --9.1299229 29.480389 0.74694669 --8.992341 29.679373 0.75040215 --8.8339167 29.814508 0.75233722 --8.6566515 29.888317 0.75282097 --8.5161037 30.092861 0.75646073 --8.3762999 30.3074 0.76035386 --8.2159557 30.453783 0.76263446 --8.4322262 32.036022 0.79914701 --3.7226944 14.501791 0.38080764 --3.5982299 14.38276 0.37744433 --3.5146432 14.423994 0.37790507 --0 0 0 --0 0 0 --0 0 0 --8.7897587 40.36404 0.98769915 --4.1614652 19.687611 0.49949071 --4.0349665 19.685352 0.4988457 --3.9137144 19.707779 0.49879962 --3.813468 19.839417 0.50133359 --5.2005262 27.983265 0.69165957 --4.9181795 27.398655 0.67723888 --4.7753839 27.575092 0.68067127 --4.6820974 28.059456 0.69131404 --4.4542236 27.741186 0.68322831 --5.5702486 36.108139 0.8776778 --4.7562661 32.138294 0.78442681 --4.9313536 34.794918 0.84558821 --4.7470136 35.040493 0.85061014 --3.8367412 29.688122 0.72559208 --4.3118968 35.057407 0.84971172 --3.53473 30.269184 0.73803169 --3.3807843 30.57847 0.74471217 --0 0 0 --2.9360707 29.912231 0.72837943 --0 0 0 --3.3865347 39.483475 0.94895208 --0 0 0 --1.9242084 26.202429 0.64121008 --1.8394387 27.344889 0.66733325 --2.2723711 37.193718 0.89444822 --2.3018849 41.901642 1.0027879 --1.3624274 27.920319 0.67993408 --0 0 0 --0.99139583 27.158659 0.66203487 --0 0 0 --0.95559865 39.475914 0.94570398 --0 0 0 --0.33740401 28.251446 0.686845 --0.22185197 38.279156 0.91787612 -0.013368707 39.196556 0.93900043 -0 0 0 -0 0 0 -0.63754863 34.008957 0.81960326 -0 0 0 -0.87088495 28.076 0.68306702 -1.0438458 28.089111 0.6835047 -1.3326907 30.769939 0.74549544 -2.0549598 41.539124 0.99414933 -1.7154622 30.846096 0.74768388 -1.9027861 30.804056 0.74696976 -1.9582024 28.826859 0.70158821 -2.0652683 27.873133 0.67984194 -2.2612252 28.170853 0.6870293 -0 0 0 -0 0 0 -3.0499642 30.861385 0.75040215 -2.1031315 20.028496 0.49985927 -2.2197931 19.959574 0.49856925 -2.3524866 20.032953 0.50059646 -2.4765897 20.028063 0.50082678 -2.5963411 19.988695 0.50027394 -2.7146235 19.940689 0.49953678 -2.8314276 19.885057 0.49863836 -4.9794087 33.490829 0.81600958 -5.2002764 33.559425 0.81833625 -4.6711516 28.969997 0.7119776 -4.9206977 29.369694 0.72199839 -4.9399805 28.414078 0.70036733 -5.2530761 29.153612 0.71840471 -0 0 0 -11.938848 61.889206 1.488186 -5.9248085 29.734377 0.734438 -2.9969018 14.576113 0.37871134 -3.0678225 14.470409 0.37666109 -0 0 0 -3.2958481 14.656981 0.38198251 -3.3762534 14.595575 0.38101497 -3.4745381 14.611543 0.38189036 -10.63012 43.505211 1.0677733 -0 0 0 -3.4976671 13.59243 0.35922262 -3.5263994 13.363855 0.35429284 -3.614337 13.364162 0.3548227 -8.3890495 30.274826 0.75970882 -8.5315361 30.070824 0.75606912 -9.7990313 33.747791 0.84556514 -0 0 0 -10.225797 33.669003 0.84662485 -0 0 0 -11.984549 37.785381 0.94922853 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.9245462 20.155308 0.53485143 -7.9956775 19.975439 0.53160334 -0 0 0 -8.1169033 19.578451 0.5241856 -8.3468504 19.788956 0.53070492 -0 0 0 -8.5626726 19.624563 0.52918452 -0 0 0 -24.895916 55.19495 1.4310329 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -37.932098 77.648117 2.0270975 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -32.320435 60.415848 1.6146322 -32.690052 60.215519 1.6146092 -33.07869 60.049706 1.6155537 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -28.498558 47.509277 1.3123959 -0 0 0 -0 0 0 -19.804775 31.679937 0.89670575 -0 0 0 -20.504904 31.921532 0.91004378 -20.717295 31.821087 0.9107579 -20.734304 31.423845 0.90331715 -21.142906 31.619307 0.91227829 -21.327547 31.475739 0.9119097 -13.823077 20.13405 0.59856987 -14.01487 20.147335 0.60133421 -14.158962 20.09038 0.60216355 -14.215738 19.910372 0.59953737 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -28.76317 36.368107 1.1042398 -0 0 0 -0 0 0 -31.743048 38.651619 1.1882993 -31.971943 38.446896 1.188023 -35.994926 42.748112 1.3235224 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.422506 19.892063 0.67643261 -19.469696 19.697149 0.67399073 -19.73304 19.72006 0.67864406 -39.242149 38.736404 1.3063835 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -17.392761 15.75371 0.57654715 -17.419802 15.584704 0.57440478 -17.581776 15.53644 0.576455 -17.370964 15.161383 0.56710225 -17.391726 14.992503 0.56491381 -17.223047 14.663871 0.55703539 -18.214872 15.316457 0.5841952 -17.447077 14.489095 0.55839455 -17.837912 14.629639 0.56740171 -18.694157 15.140915 0.59013855 -18.044985 14.432741 0.56825405 -18.232059 14.399817 0.57115668 -17.861242 13.929877 0.55774951 -18.42799 14.190856 0.57175559 -18.505962 14.070861 0.57150221 -20.531652 15.413035 0.6273883 -18.806557 13.93854 0.57521105 -18.580282 13.595024 0.56631905 -18.752501 13.54515 0.56885302 -19.048536 13.581885 0.57488853 -20.30311 14.289229 0.60789955 -20.22208 14.047466 0.60317713 -20.371386 13.966648 0.6049509 -20.381348 13.79041 0.60285461 -20.703377 13.823855 0.60944301 -20.714342 13.648162 0.6074158 -20.782608 13.510996 0.60700113 -21.615767 13.864649 0.62754953 -21.65143 13.700752 0.62621343 -31.906252 19.916121 0.90248787 -32.059353 19.739367 0.90334022 -32.19696 19.55266 0.90380096 -20.297495 12.156982 0.58099318 -20.289928 11.983914 0.57880473 -20.306059 11.825989 0.57728434 -20.306278 11.659855 0.57537228 -20.259113 11.468066 0.57223934 -20.224335 11.285091 0.569475 -20.251148 11.137661 0.56836927 -20.276917 10.990328 0.56726354 -20.230209 10.804953 0.56429183 -20.248352 10.65548 0.56304789 -20.281399 10.514476 0.56221855 -20.337519 10.385741 0.56201124 -20.416939 10.268842 0.56242591 -0 0 0 -20.998802 10.240548 0.5741514 -21.201839 10.179002 0.57774502 -21.595633 10.205466 0.58619934 -23.08832 10.737975 0.62255067 -23.131954 10.586123 0.62199777 -23.184624 10.438653 0.62169832 -22.783867 10.090563 0.60999584 -24.004829 10.455534 0.63913679 -24.261526 10.390691 0.64397442 -24.714582 10.405711 0.65371877 -25.138239 10.402943 0.66270292 -25.656313 10.433394 0.67401379 -25.943592 10.365154 0.67956555 -26.629313 10.450072 0.69497681 -26.726515 10.299421 0.69580615 -62.645271 23.699089 1.5791564 -0 0 0 -0 0 0 -37.500999 13.403625 0.95346725 -0 0 0 -39.433537 13.550909 0.99661422 -42.515575 14.318857 1.0695472 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -48.336655 14.321196 1.1974678 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -17.164778 0.73249793 0.43169484 -17.225897 0.62923938 0.43300793 -17.211447 0.52298605 0.43259326 -17.417217 0.42227408 0.43726963 -17.413485 0.31528792 0.4371314 -17.35911 0.20776857 0.43584138 -17.35206 0.10120507 0.43565708 -17.339357 -0.0052622561 0.43535763 -17.349997 -0.11172601 0.43561101 -17.343985 -0.21811828 0.43549582 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -17.371264 -1.0725234 0.43685499 -17.376324 -1.1799048 0.4371314 -0 -0 0 -0 -0 0 -0 -0 0 -17.473537 -1.6181632 0.4401722 -0 -0 0 -27.411886 -2.8788722 0.67092693 -27.435436 -3.0516577 0.67189443 -27.426125 -3.2211075 0.6721248 -27.40386 -3.3890848 0.67207873 -27.393454 -3.5585852 0.67233211 -25.389923 -3.4567764 0.62625951 -27.379395 -3.8989887 0.6730693 -27.379677 -4.0705886 0.6736452 -27.360111 -4.239429 0.67378342 -27.725416 -4.4704232 0.6829288 -19.308702 -3.2346392 0.48693591 -19.295385 -3.3542531 0.48709717 -19.173101 -3.45432 0.48472443 -19.151545 -3.5718989 0.48472443 -0 -0 0 -43.591114 -8.6864281 1.0600102 -0 -0 0 -0 -0 0 -0 -0 0 -37.648212 -8.467659 0.92499435 -37.597496 -8.6989555 0.92504042 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -9.1141195 -2.4645281 0.25337079 -9.0419836 -2.504652 0.25201163 -7.9867773 -2.2650743 0.22710939 -7.9333658 -2.3026068 0.22616491 -7.9305882 -2.3546579 0.22644134 -7.9035554 -2.3994973 0.22614187 -7.8686333 -2.4417226 0.2256581 -7.8897147 -2.5014443 0.22653349 -7.9265265 -2.5667541 0.22780047 -7.9220181 -2.6191094 0.22807692 -0 -0 0 -0 -0 0 -7.2442818 -2.543793 0.21273473 -7.2050076 -2.5797665 0.21215883 -11.220526 -4.0960741 0.31105369 -7.3133516 -2.7202897 0.21561427 -0 -0 0 -6.9996352 -2.7017872 0.20870338 -6.9810648 -2.7439537 0.20865731 -11.121155 -4.4509673 0.31183693 -7.2135043 -2.9380636 0.21529177 -7.1814885 -2.9765258 0.21494623 -0 -0 0 -19.632633 -8.4231739 0.52807873 -19.631893 -8.5658712 0.52936882 -4.6088166 -2.043715 0.15198798 -4.5907221 -2.0694892 0.15184978 -4.5997477 -2.1076181 0.15240264 -4.6329455 -2.1573353 0.15357749 -4.6078744 -2.180161 0.15327802 -4.6052217 -2.213593 0.15355445 -4.589756 -2.2409308 0.15350838 -4.5714417 -2.266829 0.15339321 -4.5458403 -2.2889886 0.15309374 -4.6892471 -2.3974252 0.15717116 -4.6815467 -2.4298387 0.15735546 -4.341094 -2.2869637 0.14887808 -4.3437285 -2.3225176 0.14931577 -4.4427357 -2.4106593 0.15228747 -4.3691912 -2.4055545 0.15074404 -4.3805294 -2.4469504 0.15143512 -4.4880567 -2.5433085 0.15468323 -3.3561454 -1.9288378 0.12501247 -3.3528826 -1.9544317 0.12524283 -3.3373857 -1.9729316 0.1251507 -3.3260744 -1.9938866 0.12517373 -3.3300061 -2.0241287 0.12561142 -4.3394961 -2.6747673 0.15327802 -3.4185078 -2.1358576 0.12869829 -3.0101445 -1.9063339 0.11791729 -3.4130685 -2.1911557 0.12927419 -3.3828034 -2.2011466 0.12881346 -2.974545 -1.9614178 0.11791729 -2.9499884 -1.9712964 0.11757175 -3.0222542 -2.0465636 0.11992145 -3.0121124 -2.066767 0.11999056 -2.9460304 -2.0480995 0.1184932 -2.9644599 -2.0880237 0.11936858 -3.024003 -2.1578796 0.12141881 -3.0333865 -2.1928003 0.12206382 -3.9222522 -2.872591 0.14784145 -3.190084 -2.3663068 0.12733914 -5.4625354 -4.1051927 0.19326906 -5.4531517 -4.1507459 0.19372979 -23.465782 -18.0947 0.71861207 -5.3143473 -4.1490469 0.19117275 -5.5883222 -4.4184871 0.19997261 -5.5720301 -4.4614429 0.20029514 -21.565794 -17.49 0.67562634 -3.4625978 -2.8423183 0.13904159 -3.457391 -2.8737388 0.13941017 -21.688335 -18.261343 0.6891256 -21.576639 -18.394726 0.6891486 -21.467905 -18.530689 0.68928683 -3.6839111 -3.2182546 0.14853254 -2.8495181 -2.5199788 0.12346904 -2.8176205 -2.5227396 0.12296224 -3.3367331 -3.0249159 0.13959445 -3.771714 -3.4618635 0.15378483 -2.8841999 -2.6796825 0.12653287 -4.4387641 -4.1759305 0.17624523 -2.8778796 -2.7403905 0.12738521 -2.8660476 -2.7628558 0.12754647 -3.4606071 -3.3775694 0.14724252 -4.3072166 -4.2561951 0.17534681 -4.2683001 -4.269814 0.17493215 -2.9884071 -3.0258889 0.13381234 -3.2503505 -3.3319201 0.14307293 -3.5322199 -3.665751 0.15311676 -3.6957147 -3.8829191 0.15933657 -2.7242899 -2.897244 0.12745433 -2.6738143 -2.8787351 0.12634858 -2.6425874 -2.8803496 0.12588786 -3.6523275 -4.0309863 0.16115645 -3.732173 -4.1703024 0.16477314 -2.7916825 -3.1577532 0.13293697 -2.7683101 -3.1703038 0.13279875 -3.1965704 -3.7067037 0.14860165 -3.4692817 -4.0733733 0.15910621 -3.4628806 -4.1167746 0.15977426 -3.1444061 -3.7849116 0.1492006 -3.1629629 -3.8551548 0.150721 -3.2160089 -3.9692736 0.15353142 -3.2115743 -4.013916 0.15426858 -3.1831675 -4.0288391 0.15413037 -1.6601778 -2.1270485 0.097990885 -1.6672229 -2.1633351 0.098751083 -1.6527075 -2.1719327 0.098705009 -1.6363487 -2.1780348 0.09858983 -1.6068822 -2.1663475 0.097967848 -1.6035947 -2.1898828 0.098359466 -1.5848596 -2.1923869 0.098152138 -1.5678953 -2.197186 0.098013923 -1.5549595 -2.2075825 0.09803696 -1.553932 -2.2351463 0.098543756 -1.5345353 -2.236393 0.098313391 -1.5219046 -2.2474227 0.098359466 -1.5125269 -2.2633703 0.098543756 -2.4583647 -3.7294135 0.13874212 -2.4207237 -3.721796 0.13812013 -2.4005401 -3.740787 0.13823532 -2.354022 -3.7182736 0.13722172 -2.2893443 -3.6656485 0.13540184 -2.1708925 -3.5238342 0.1311862 -1.9157243 -3.1525526 0.12081987 -1.5367907 -2.5638638 0.10469445 -1.908921 -3.2300563 0.12227115 -1.8815196 -3.2287493 0.12192561 -1.8641618 -3.2445683 0.12204079 -1.3424172 -2.3693759 0.098566793 -1.3298022 -2.3810606 0.098658934 -1.3108317 -2.3812912 0.098451607 -1.3004827 -2.3971999 0.098658934 -1.2890459 -2.4113076 0.098820195 -1.684819 -3.1995077 0.11913822 -1.6642352 -3.2080102 0.11909214 -1.2444433 -2.4346261 0.098820195 -1.6516924 -3.2817807 0.12047432 -1.6306373 -3.2900617 0.12042825 -7.7149563 -15.819281 0.4413701 -7.6225047 -15.876234 0.44162348 -1.1580712 -2.4481518 0.09822125 -1.3466375 -2.8930566 0.10934778 -1.3958337 -3.047627 0.11305663 -7.3688903 -16.365734 0.44938672 -7.2634759 -16.39967 0.4491103 -7.177083 -16.476927 0.44993961 -1.3611561 -3.1756232 0.11542937 -6.8785338 -16.33617 0.44424963 -6.7770209 -16.375298 0.44418052 -6.5796394 -16.178564 0.4382602 -6.5243797 -16.329111 0.4410015 -6.4317322 -16.38838 0.44148529 -6.3145189 -16.384623 0.4404256 -6.1912274 -16.363214 0.43895128 -6.0506907 -16.293116 0.4363021 -5.989275 -16.436081 0.43890521 -1.1927979 -3.3340762 0.11741049 -1.1703339 -3.3356714 0.11727227 -5.5535026 -16.15873 0.42952943 -5.4379773 -16.14418 0.42835459 -1.2067829 -3.6538084 0.12448264 -5.2698884 -16.303877 0.43063518 -5.183321 -16.378798 0.4316718 -5.1031294 -16.476189 0.43326131 -0.96544737 -3.1828773 0.11245769 -0.94845521 -3.1973681 0.11266501 -0.96052092 -3.3125994 0.11529115 -0.95405889 -3.367491 0.116466 -0.89796257 -3.2451203 0.11340217 -0.85121614 -3.1511497 0.11102943 -0.83390057 -3.164048 0.11121372 -4.4222288 -17.227716 0.44565484 -4.335115 -17.329206 0.44742864 -4.2145076 -17.297199 0.44604647 -0.80789292 -3.4024327 0.1163969 -0.79014605 -3.420964 0.1167194 -3.7090919 -16.540697 0.42641953 -3.6005116 -16.530909 0.42565933 -3.6327429 -17.185543 0.44056383 -0.6387229 -3.1112311 0.10900224 -1.6576272 -8.3436365 0.23183183 -1.6107395 -8.3762312 0.23236167 -3.0457129 -16.385881 0.41985419 -2.9763706 -16.57843 0.4239316 -2.8843126 -16.652531 0.42524469 -2.7944181 -16.743874 0.42697239 -2.6626306 -16.580065 0.42275676 -2.5375314 -16.44492 0.41923219 -2.5613945 -17.30377 0.43888217 -2.4533491 -17.306292 0.43858269 -2.3487236 -17.332909 0.43885913 -2.2478349 -17.389627 0.4398497 -2.1453621 -17.437822 0.44065598 -2.037282 -17.441721 0.44044864 -1.8139192 -16.401581 0.41605321 -1.7232045 -16.507858 0.41826469 -0.24072391 -2.4414713 0.092346989 -0.2258303 -2.443898 0.092370026 -0.21100138 -2.4472296 0.0924161 -0.19582291 -2.446485 0.092370026 -0.18051517 -2.4436524 0.092277877 -0.28420705 -4.2102594 0.13305214 -1.0398514 -17.009682 0.42849278 -0.13194226 -2.3816762 0.090780519 -0.11674187 -2.3704584 0.09050408 -0.10279061 -2.3851135 0.090826593 -0.089574546 -2.4246631 0.091725007 -0.083784223 -2.7249498 0.098635897 -0.068947457 -2.803369 0.10043273 -0.051690917 -2.8007407 0.10036363 -0.20951751 -17.50606 0.43922773 -0.017144727 -2.7711725 0.099672534 -0.00014859522 -2.750231 0.099188775 --0.016589902 -2.7291863 0.098705009 --0.033158615 -2.7150381 0.098382503 --0.049685743 -2.7077866 0.09822125 --0.066523626 -2.7164254 0.098428577 --0.55387026 -17.869635 0.4477742 --0.66592175 -17.930838 0.44927156 --0.11469438 -2.6727912 0.097461052 --0.13025193 -2.6550624 0.097069435 --0.14565182 -2.6382422 0.096700847 --0.16115861 -2.6263227 0.096447453 --0.17686361 -2.6192999 0.09630923 --1.2858365 -17.359785 0.4369241 --0.20971341 -2.625901 0.096516557 --1.5744915 -18.218197 0.45717299 --1.6852318 -18.197243 0.45691961 --1.7926267 -18.14378 0.45592904 --1.9452884 -18.526167 0.46505141 --1.9799854 -17.804449 0.44860348 --2.2282481 -18.975508 0.47606277 --2.3496702 -19.002157 0.47700727 --2.4514055 -18.873373 0.47435808 --2.601027 -19.106613 0.48014021 --2.7316079 -19.18432 0.48232865 --2.8580928 -19.22653 0.48371083 --2.9847388 -19.264942 0.48502389 --3.1049595 -19.259096 0.48532337 --3.226212 -19.258417 0.48576105 --3.3497999 -19.269777 0.48649821 --3.4747121 -19.286247 0.48737359 --3.4114625 -18.291615 0.46456766 --3.6526031 -18.938831 0.4802554 --3.7763615 -18.9543 0.48115379 --3.9076979 -19.004215 0.48288152 --4.0323215 -19.018021 0.48377994 --3.7564659 -17.196789 0.44141617 --3.864326 -17.184145 0.44166955 --4.7141414 -20.377222 0.51775849 --4.8451004 -20.373201 0.51835746 --5.0238886 -20.563541 0.52358669 --5.1506991 -20.535238 0.52365577 --5.2883177 -20.548752 0.52473849 --5.4359908 -20.59808 0.52669656 --5.5233746 -20.420546 0.52326417 --5.6528411 -20.401686 0.52363276 --5.8404121 -20.586861 0.52890807 --5.4990702 -18.940596 0.49027619 --6.2890391 -21.174896 0.54480314 --6.4775414 -21.329138 0.54945648 --6.5955462 -21.247934 0.54846591 --6.7602568 -21.315701 0.55109203 --6.6607537 -20.563372 0.53388393 --6.8426862 -20.691065 0.53798437 --6.9624805 -20.627851 0.53747755 --7.1914754 -20.88249 0.544734 --7.3492956 -20.922861 0.54680729 --7.6005974 -21.2209 0.55521554 --8.1363354 -22.2848 0.5824675 --8.2551365 -22.18667 0.58129263 --8.4187603 -22.208515 0.58308947 --8.7882452 -22.760773 0.59801698 --8.9738359 -22.82365 0.60091954 --9.3808641 -23.435476 0.61748266 --9.5256166 -23.380253 0.6175518 --9.9254551 -23.940105 0.63298613 --10.086151 -23.911913 0.63381541 --10.270528 -23.937773 0.63602692 --10.743897 -24.622911 0.65484756 --10.849771 -24.45509 0.65229052 --10.983178 -24.351604 0.65136909 --11.11864 -24.253765 0.6506089 --11.267672 -24.185991 0.6506319 --11.462917 -24.215796 0.65316594 --0 -0 0 --1.6634265 -3.4076285 0.12319261 --1.6811937 -3.3910887 0.12303135 --1.6938726 -3.3646386 0.1226167 --1.7163068 -3.3577421 0.12270884 --1.7516211 -3.3755391 0.123446 --1.7750971 -3.3700342 0.12358423 --1.7990431 -3.3652496 0.12374548 --1.8497089 -3.4094994 0.12519677 --17.703773 -32.139832 0.8813175 --17.890404 -32.012272 0.88083375 --18.613604 -32.831577 0.90545958 --18.824175 -32.733215 0.90589726 --19.691599 -33.760445 0.93639731 --0 -0 0 --20.576008 -34.30241 0.95752162 --0 -0 0 --0 -0 0 --0 -0 0 --18.680666 -29.477987 0.83996731 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --30.252485 -44.061905 1.267383 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --10.305405 -8.4525442 0.34293595 --10.353189 -8.3860064 0.34282076 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.476727 -8.670949 0.46484408 --16.455063 -8.5310392 0.46290904 --16.581892 -8.4681015 0.46484408 --0 -0 0 --7.0133934 -3.4745383 0.21616715 --6.9977384 -3.4134748 0.21522266 --7.0158472 -3.3691752 0.21515355 --7.0255413 -3.3209381 0.21487711 --7.0684485 -3.2883065 0.21545301 --0 -0 0 --0 -0 0 --0 -0 0 --36.023994 -15.689958 0.94121188 --0 -0 0 --36.335449 -15.29791 0.94425273 --36.256809 -15.003575 0.93996793 --0 -0 0 --0 -0 0 --0 -0 0 --40.098396 -15.451829 1.0260086 --0 -0 0 --22.343803 -8.2972412 0.58502454 --0 -0 0 --0 -0 0 --43.160305 -15.128184 1.0896579 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --28.313412 -8.3892097 0.71626234 --0 -0 0 --52.892445 -14.967333 1.3024442 --0 -0 0 --0 -0 0 --12.802219 -3.3704076 0.34086269 --12.80426 -3.2870698 0.34042498 --12.854254 -3.2159617 0.34113911 --34.33828 -8.3654261 0.85019547 --34.423985 -8.1628761 0.85102475 --0 -0 0 --0 -0 0 --0 -0 0 --40.530678 -8.5658998 0.99037141 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --46.386196 -8.3257046 1.1217475 --18.549795 -3.2127941 0.4696126 --18.592825 -3.1028624 0.47016549 --52.451218 -8.4207001 1.2598962 --29.780655 -4.5943418 0.73015326 --29.863668 -4.4197187 0.73144329 --27.533398 -3.9024515 0.67659384 --24.216219 -3.2809894 0.5989154 --24.114933 -3.1167121 0.59610498 --27.753372 -3.41378 0.68014145 --27.687407 -3.2333393 0.67813724 --27.609343 -3.052629 0.67587972 --27.655396 -2.8860681 0.6765247 --25.857782 -2.5382607 0.63450652 --27.622028 -2.540345 0.6749813 --25.874035 -2.2196445 0.63420701 --29.566559 -2.3535874 0.71925706 --29.594402 -2.1731505 0.71957958 --29.616158 -1.9921254 0.71978694 --39.47686 -2.4117887 0.9471553 --41.976509 -2.3059957 1.0045156 --41.754211 -2.0368998 0.99907911 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --243.81808 1.5853306 5.6540952 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 -0 0 --121.53112 -2.287369 1.3726013 --0 -0 0 --0 -0 0 --0 -0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --74.574036 2.7161655 0.85656738 --95.583656 4.0686855 1.0879976 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --59.896358 14.198633 0.71288013 --59.752731 14.552397 0.71225339 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --0 0 0 --50.012844 14.149378 0.60753363 --0 0 0 --80.117027 23.73168 0.95481086 --79.874199 24.193834 0.95371133 --0 0 0 --46.985939 14.864061 0.57790118 --0 0 0 --0 0 0 --0 0 0 --41.244026 14.170177 0.5155465 --41.127991 14.413057 0.51521665 --41.066086 14.674901 0.51553553 --73.036285 26.60556 0.89074093 --0 0 0 --51.784092 19.587044 0.64479691 --0 0 0 --63.385979 24.868639 0.78472376 --61.931221 24.737455 0.7693193 --0 0 0 --35.068668 14.509316 0.45332381 --35.009392 14.737022 0.45368668 --0 0 0 --35.188957 15.323624 0.45804083 --0 0 0 --0 0 0 --30.885534 14.131563 0.40948534 --30.811844 14.327131 0.4096503 --0 0 0 --63.207561 30.339127 0.80695635 --31.184652 15.204737 0.41750097 --39.899395 19.757601 0.52558529 --27.182873 13.66903 0.37057281 --0 0 0 --26.974024 13.981331 0.37008899 --0 0 0 --28.768305 15.362098 0.39461964 --0 0 0 --0 0 0 --27.224066 15.188004 0.37879732 --0 0 0 --0 0 0 --33.804535 19.683559 0.46614441 --33.674511 19.885525 0.46603444 --0 0 0 --46.984688 28.528654 0.64043176 --0 0 0 --0 0 0 --0 0 0 --44.152622 28.315012 0.61276746 --0 0 0 --43.245693 28.488348 0.60544455 --42.933685 28.662111 0.60364127 --42.582256 28.806787 0.60132128 --20.82119 14.27273 0.31358388 --20.715975 14.388239 0.31335297 --20.608492 14.501844 0.3131001 --20.469454 14.592615 0.31242937 --0 0 0 --0 0 0 --45.351215 33.606117 0.65668285 --44.862652 33.672466 0.65281248 --0 0 0 --0 0 0 --58.407139 45.542934 0.85042101 --57.795422 45.638947 0.84578097 --56.967636 45.555565 0.83808422 --56.263519 45.561298 0.83209175 --37.102253 30.423813 0.56360722 --40.06525 33.266647 0.60863316 --54.235123 45.596966 0.81513691 --53.58884 45.617771 0.80985916 --52.929211 45.61932 0.80436146 --52.109608 45.473148 0.79649979 --51.776402 45.745022 0.79571909 --21.987999 19.668488 0.36040211 --21.742384 19.690269 0.35855487 --33.600468 30.806213 0.53726232 --0 0 0 --35.9795 33.809334 0.57890177 --33.700783 32.059734 0.54747701 --47.154987 45.412998 0.75588292 --46.760178 45.589096 0.75411272 --46.320862 45.718513 0.7516607 --14.52954 14.518057 0.26186174 --14.440888 14.607646 0.26187274 --0 0 0 --43.829098 45.435997 0.73018682 --43.506714 45.659191 0.72950512 --43.036579 45.724316 0.72647035 --27.995453 30.112122 0.48811314 --0 0 0 --41.290768 45.519993 0.71179157 --41.020695 45.783665 0.7119565 --0 0 0 --0 0 0 --0 0 0 --38.911564 45.635242 0.69546348 --0 0 0 --25.247221 30.356766 0.47016871 --25.096657 30.555151 0.47079545 --16.017351 19.747133 0.31559604 --15.73147 19.63979 0.31270427 --26.411491 33.39056 0.50414437 --36.5481 46.792698 0.68888825 --36.594948 47.449982 0.69491369 --36.341274 47.723751 0.69560641 --23.020603 30.619116 0.45723817 --0 0 0 --36.52354 49.84042 0.71545303 --36.473747 50.418438 0.72026902 --36.533291 51.158829 0.72726202 --36.460091 51.724476 0.7318691 --36.464691 52.41098 0.73808146 --21.622375 31.488667 0.45602867 --0 0 0 --20.575058 30.765846 0.44298819 --22.091082 33.475384 0.4770298 --20.298544 31.173552 0.44505531 --20.265789 31.544849 0.44828796 --19.592209 30.91186 0.43843612 --19.722893 31.544443 0.4450883 --0 0 0 --22.29388 36.649284 0.50770682 --22.146263 36.914864 0.50936711 --8.5911598 14.522028 0.22154179 --8.5074348 14.58397 0.22166274 --0 0 0 --20.945118 36.938393 0.50293487 --20.937132 37.458118 0.50787175 --20.417389 37.06039 0.50127459 --19.873266 36.602352 0.49398464 --17.953365 33.555756 0.45447832 --19.969591 37.88105 0.50688219 --10.134372 19.513994 0.277794 --10.008069 19.563347 0.27764007 --9.9206896 19.689575 0.27844274 --9.8143568 19.779636 0.27880558 --9.7200222 19.895187 0.27948731 --15.004944 31.19586 0.41665432 --17.618586 37.212376 0.48873985 --14.630284 31.397585 0.41689622 --0 0 0 --0 0 0 --0 0 0 --39.634052 90.812889 1.1255467 --0 0 0 --38.315693 90.816109 1.1198621 --37.743561 91.015327 1.1194553 --0 0 0 --13.665918 34.132656 0.44029433 --13.444882 34.187019 0.43995348 --11.922794 30.871662 0.39990839 --12.068175 31.827793 0.410299 --11.48376 30.856335 0.39803919 --11.197136 30.660406 0.3949275 --10.483346 29.261913 0.37779674 --11.796575 33.574757 0.42731982 --9.9658375 28.930777 0.372475 --9.7762985 28.956327 0.37206817 --9.5918465 28.995832 0.37183726 --9.4226894 29.081728 0.37215614 --9.2743082 29.234308 0.37325567 --9.1226292 29.38043 0.37428921 --0 0 0 --8.7967129 29.609024 0.37565264 --9.9402065 34.225582 0.42790258 --9.7417545 34.327297 0.42837536 --9.040554 32.617241 0.4081879 --9.3738365 34.644058 0.4306514 --8.5497618 32.385406 0.40431753 --0 0 0 --3.618005 14.420146 0.19948511 --3.5292192 14.441103 0.19947411 --0 0 0 --0 0 0 --0 0 0 --8.8383989 40.441963 0.4912028 --8.5801258 40.448483 0.49067503 --4.0515456 19.695375 0.25711176 --3.9380496 19.75713 0.25752959 --3.8214846 19.805466 0.25780445 --6.3232107 33.885998 0.41504902 --6.1084299 33.886761 0.41463119 --4.7980313 27.586153 0.34389809 --4.6075158 27.488844 0.34249067 --4.4780974 27.760429 0.34520653 --4.9780707 32.111462 0.3933222 --4.7756481 32.105793 0.39292637 --5.1426601 36.093262 0.43689677 --4.9289279 36.181602 0.43753451 --4.5924935 35.331619 0.42778161 --4.3672652 35.291653 0.42703393 --3.5615349 30.305592 0.3715404 --3.3855834 30.417311 0.37254098 --3.1781862 30.240608 0.37036389 --3.9496455 39.935734 0.4772827 --3.7119153 40.038872 0.47816232 --3.4534996 39.914452 0.47654602 --3.2293475 40.194038 0.47940481 --1.9654515 26.500605 0.3282077 --1.8599424 27.352173 0.33746579 --1.6883121 27.302191 0.33679506 --1.5308774 27.493744 0.33879623 --0 0 0 --1.1825775 27.261709 0.33605838 --1.0218683 27.445318 0.33800456 --1.2251269 39.40057 0.46946502 --1.0522946 42.169319 0.49984518 --0.74512362 39.603592 0.47156513 --0.49954411 39.405449 0.46934405 --0.25954214 39.681747 0.47235677 --0.017295182 42.675411 0.50526589 -0 0 0 -0.40487328 34.110531 0.41111267 -0.61396605 34.096409 0.41099173 -0 0 0 -1.7331256 57.234299 0.66564411 -0 0 0 -1.1919328 27.99494 0.34411797 -2.0214903 41.491268 0.49278614 -1.5515983 28.273743 0.34737259 -1.7606211 28.846569 0.35379389 -1.8776656 27.943289 0.34396404 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -2.2032709 19.939425 0.25659499 -2.3331089 19.990088 0.25730968 -4.920568 40.028255 0.47947076 -5.0924387 39.427082 0.47314844 -5.3365436 39.411938 0.47333536 -0 0 0 -4.9622545 33.545914 0.40889162 -5.1686044 33.518787 0.40893558 -4.701283 29.293346 0.36223832 -4.9320927 29.570694 0.36565787 -5.1240158 29.600962 0.36633959 -5.2566333 29.296335 0.36329389 -5.52176 29.723629 0.3684397 -0 0 0 -0 0 0 -0 0 0 -3.0600665 14.482341 0.19877042 -3.1699274 14.56002 0.19985895 -3.2642362 14.562738 0.20011185 -3.3528559 14.539512 0.20007886 -3.4445426 14.529368 0.20019981 -7.5881186 31.156326 0.38861617 -9.5280294 38.103409 0.46789268 -3.4912164 13.605353 0.19045793 -3.5161083 13.36126 0.18792899 -3.6084404 13.378053 0.18836881 -0 0 0 -9.7910862 34.607441 0.43148705 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -10.721687 33.891354 0.42688 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -7.722497 20.043465 0.27219737 -7.845336 19.995703 0.27219737 -7.9649124 19.939758 0.27210942 -8.085227 19.88588 0.27205443 -8.1176395 19.619684 0.26948154 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -25.001104 55.540684 0.70575511 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -44.835667 87.817581 1.120225 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.833994 31.779224 0.44792512 -29.560266 46.722862 0.64396125 -20.449732 31.887804 0.45255414 -20.550188 31.615845 0.45064095 -20.935219 31.779751 0.45446736 -21.092068 31.594145 0.45371965 -21.261436 31.428516 0.45324686 -13.799527 20.130854 0.30438077 -0 0 0 -14.073145 19.99925 0.30490854 -35.1385 49.290676 0.7016319 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -28.817959 36.493732 0.54732311 -29.075062 36.358391 0.54791683 -35.440617 43.765381 0.65525347 -35.667278 43.496838 0.65453875 -31.94887 38.478138 0.58594978 -36.007896 42.829315 0.65128416 -0 0 0 -37.33765 43.320404 0.66487443 -0 0 0 -0 0 0 -37.163403 41.546623 0.64895314 -36.974628 40.828629 0.64169621 -37.229858 40.606884 0.64178419 -37.608925 40.518398 0.64389527 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -19.576649 19.834253 0.34244668 -19.702221 19.718004 0.34251267 -39.232964 38.786022 0.64264178 -36.691608 35.831081 0.59993583 -36.878387 35.574032 0.59944105 -0 0 0 -0 0 0 -0 0 0 -38.790546 35.622765 0.61512041 -0 0 0 -17.272182 15.474992 0.29101044 -17.313644 15.32167 0.29022977 -17.340324 15.156577 0.28925118 -17.300541 14.93554 0.28732699 -17.365988 14.807046 0.28695315 -17.491699 14.729841 0.28745893 -17.39109 14.463664 0.28473207 -17.997219 14.781915 0.29209897 -17.507475 14.200656 0.28388545 -17.445217 13.973562 0.28178534 -17.572193 13.899136 0.28236809 -19.382963 15.139044 0.30644789 -18.653595 14.385947 0.29503474 -20.085176 15.294424 0.31360587 -19.441746 14.616855 0.30346817 -19.847414 14.73211 0.30780032 -18.970377 13.901372 0.29461691 -20.088278 14.531986 0.30863598 -20.295059 14.492715 0.31023031 -20.513554 14.459516 0.31197858 -20.638004 14.358502 0.31246236 -20.593004 14.140468 0.3106921 -20.446781 13.856213 0.30760241 -21.041765 14.071803 0.31435356 -20.789705 13.719367 0.30990043 -22.298843 14.519678 0.32860354 -22.39677 14.388527 0.32872447 -0 0 0 -0 0 0 -0 0 0 -32.082245 19.515676 0.44892567 -20.36153 12.215246 0.29710186 -20.48171 12.117066 0.29768461 -24.729992 14.426349 0.35082516 -21.370832 12.291576 0.30709663 -21.586763 12.240119 0.30887789 -21.725178 12.14305 0.30968055 -21.794022 12.006623 0.30961457 -21.781164 11.825912 0.30853701 -28.185488 15.080035 0.38750565 -23.102867 12.178865 0.32318282 -23.1745 12.035497 0.32314983 -0 0 0 -20.326273 10.241507 0.28628242 -21.312227 10.57484 0.29761863 -0 0 0 -20.370768 9.7980146 0.28456715 -21.599966 10.226545 0.29879513 -21.694937 10.109022 0.29919097 -22.607325 10.365822 0.30948263 -22.275831 10.048862 0.30472162 -22.601213 10.029208 0.3078993 -22.927181 10.005936 0.31107694 -23.436567 10.057511 0.31644267 -23.840559 10.058115 0.32053295 -24.199245 10.034983 0.32407346 -24.663174 10.050466 0.32885644 -25.123545 10.058768 0.33358443 -25.46582 10.014949 0.33690503 -26.039824 10.056648 0.34295246 -26.415194 10.015803 0.3466469 -26.674826 9.9274769 0.34897792 -0 0 0 -34.063728 12.203708 0.43388405 -34.125702 11.990157 0.43374109 -35.566647 12.251803 0.44965139 -35.648731 12.035898 0.44973934 -35.708622 11.812539 0.44958541 -35.733818 11.57811 0.44904664 -35.771782 11.348351 0.4486728 -35.80827 11.118565 0.44829896 -35.73613 10.856203 0.44669363 -34.270344 10.181635 0.42912304 -35.713982 10.372503 0.44494537 -36.116524 10.249541 0.44882673 -0 0 0 -37.780083 10.222405 0.46637532 -0 0 0 -0 0 0 -0 0 0 -55.232815 13.499333 0.66122395 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -56.55093 11.272648 0.67007524 -56.605289 10.922793 0.66992128 -54.980534 10.259754 0.65100926 -0 0 0 -57.421333 9.9876671 0.67689234 -130.49535 21.87435 1.4909552 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -0 0 0 -17.278984 0.64320016 0.22613785 -17.230633 0.53554964 0.22556609 -0 0 0 -17.355879 0.32632136 0.22688553 -0 0 0 -0 0 0 -0 0 0 -17.324663 -0.099516995 0.22651169 -0 -0 0 -0 -0 0 -17.348886 -0.41909015 0.22683056 -17.317003 -0.52465552 0.22651169 -17.349432 -0.63221085 0.22690752 -0 -0 0 -17.33737 -0.84492153 0.22687453 -17.337851 -0.95161438 0.22694051 -17.345659 -1.0588322 0.22709444 -17.3538 -1.1662486 0.22725937 -17.393188 -1.2761455 0.22777615 -17.43786 -1.387045 0.22835891 -17.436993 -1.4946986 0.22844687 -17.475288 -1.6060535 0.22897464 -0 -0 0 -27.41963 -2.8594861 0.33914807 -27.430391 -3.0308604 0.33946696 -27.409292 -3.1988811 0.33944497 -27.393118 -3.3674891 0.33948892 -27.403673 -3.5396054 0.3398408 -25.365952 -3.4347994 0.31747624 -27.399757 -3.8815141 0.34030259 -27.379381 -4.050148 0.34034657 -27.364885 -4.2197447 0.34046751 -27.676138 -4.4417591 0.34422794 -0 -0 0 -0 -0 0 -19.286777 -3.4607582 0.25147113 -19.334982 -3.5920005 0.2522518 -0 -0 0 -43.56049 -8.6463528 0.52434283 -0 -0 0 -0 -0 0 -0 -0 0 -37.596889 -8.4266987 0.45967913 -37.547398 -8.6579046 0.45971212 -10.880705 -2.5796394 0.15896724 -10.975428 -2.6733267 0.16022071 -0 -0 0 -64.156784 -16.461508 0.76432735 -0 -0 0 -60.046654 -16.19486 0.71987319 -9.041564 -2.4985125 0.13915361 -8.0388708 -2.2746601 0.12787238 -7.9383183 -2.2989135 0.12688279 -7.9585786 -2.3578026 0.12727863 -7.9334345 -2.4034026 0.12715769 -7.8516736 -2.4313343 0.12638801 -7.8966699 -2.4984658 0.12708071 -7.9173484 -2.5585544 0.12749854 -7.9451818 -2.6214967 0.12800433 -46.81715 -15.764372 0.57920963 -46.569176 -15.999681 0.57746136 -46.097378 -16.154499 0.57311821 -7.2098994 -2.5767913 0.12019762 -11.256542 -4.1008735 0.16774152 -7.328661 -2.7211034 0.12196787 -42.457542 -16.059404 0.53515124 -7.0297208 -2.7087381 0.11884519 -11.022191 -4.324759 0.16620217 -11.014019 -4.3997269 0.16642208 -7.1806064 -2.9197724 0.12124218 -7.1911993 -2.9756274 0.12158304 -37.538315 -15.801529 0.48385793 -4.6437483 -1.9887637 0.091554731 -4.6213732 -2.0128284 0.091433778 -4.6052785 -2.0395274 0.091389798 -4.5607638 -2.053381 0.09100496 -4.5598993 -2.086735 0.0911479 -4.6784835 -2.1758065 0.092742227 -4.7220039 -2.2313831 0.093434937 -4.6352038 -2.2252665 0.09254431 -4.5585465 -2.2229905 0.091774635 -4.537652 -2.2473695 0.091686673 -4.5157366 -2.2711267 0.091587715 -4.7501893 -2.4256496 0.094655417 -4.6997051 -2.4363449 0.094215602 -4.6218371 -2.4320796 0.093434937 -4.3104539 -2.3021359 0.0897405 -4.3261385 -2.344739 0.09011434 -4.3633666 -2.3996651 0.090763062 -4.5965619 -2.5647461 0.093885742 -4.5981431 -2.602752 0.094105653 -4.423389 -2.5398123 0.092093505 -3.3500273 -1.9510506 0.078635193 -3.3422978 -1.9741114 0.078690164 -3.3404167 -2.000747 0.078822114 -4.2135692 -2.5588589 0.090213299 -3.379477 -2.0809038 0.079646759 -3.4981301 -2.1836607 0.081351042 -3.4669199 -2.1938567 0.081120141 -3.4769619 -2.2302022 0.081428006 -3.47998 -2.2623932 0.081647918 -3.4952593 -2.3029563 0.082032755 -3.5467629 -2.3682196 0.082901388 -2.9855351 -2.0201497 0.075644456 -3.0176213 -2.06896 0.0762382 -2.9884439 -2.0760286 0.076018296 -2.9584761 -2.0822423 0.075787395 -2.9887981 -2.1311193 0.07637015 -4.0149198 -2.8999348 0.090466186 -4.0043139 -2.9298286 0.090565145 -3.9910822 -2.9579155 0.09063112 -5.4555717 -4.0952101 0.1110165 -5.4335251 -4.1310282 0.11106049 -5.3692522 -4.1343989 0.11052171 -5.3769021 -4.1930909 0.11098352 -5.5880718 -4.4131517 0.11430412 -5.5476122 -4.4367399 0.11411719 -20.090954 -16.269661 0.32028005 -20.003119 -16.402775 0.32045597 -19.885941 -16.511787 0.32022509 -3.4615922 -2.9107387 0.08573819 -3.4398599 -2.928683 0.085683212 -4.5852432 -3.9524651 0.10257208 -3.622905 -3.1619942 0.088882856 -3.5809541 -3.1643023 0.088552997 -2.8445027 -2.5448971 0.077975467 -3.3461809 -3.0308082 0.085650228 -3.7712266 -3.4580822 0.092269428 -3.8891866 -3.6104057 0.094358541 -2.8700931 -2.6974766 0.079316899 -2.8795693 -2.7398474 0.079712734 -3.4785144 -3.3505192 0.089113764 -3.4621863 -3.375988 0.089179732 -3.0336137 -2.994683 0.082879394 -2.9819357 -2.9800222 0.082362615 -2.9628916 -2.9975519 0.082351618 -2.9472377 -3.018537 0.082395598 -2.977951 -3.0876608 0.08317627 -2.9623983 -3.1094947 0.083231248 -3.7704735 -4.0064735 0.096502639 -3.7308402 -4.013422 0.096260741 -2.9249516 -3.1855905 0.083561108 -3.8653886 -4.2618351 0.099273466 -3.8211496 -4.2653646 0.09897659 -3.2448761 -3.6672127 0.089850448 -3.2381074 -3.7051227 0.09011434 -3.4871464 -4.0397887 0.094688408 -3.1742299 -3.7232754 0.089806467 -3.470803 -4.1220498 0.095260166 -3.4965975 -4.204772 0.096139789 -13.404035 -16.319687 0.26822805 -3.4422157 -4.2442575 0.096095808 -3.2066848 -4.0038543 0.092412367 -3.1746132 -4.0140438 0.092280425 -3.5395486 -4.532279 0.099240482 -1.6594976 -2.1523654 0.065891579 -3.3255491 -4.3677382 0.096370697 -3.3467596 -4.4520001 0.09725032 -1.6225785 -2.1865613 0.065946557 -1.6097225 -2.1972826 0.065957546 -1.5962099 -2.2071183 0.065957546 -1.5785694 -2.2111747 0.065880582 -1.5609394 -2.2150979 0.06580361 -1.5284725 -2.197547 0.065440767 -1.5160919 -2.2085328 0.065462761 -1.505878 -2.2227604 0.065528728 -1.4994375 -2.242764 0.065671667 -1.4768356 -2.2385688 0.065495744 -1.5007213 -2.3054066 0.066254422 -1.5346508 -2.3894455 0.067233011 -1.5263842 -2.408952 0.067364953 -1.526418 -2.4420121 0.067672826 -1.9145368 -3.1049662 0.076117255 -1.9146771 -3.1482639 0.076524079 -1.8973814 -3.1633828 0.076568067 -1.5912807 -2.6904452 0.070377678 -1.4951316 -2.5636921 0.068640411 -1.4295173 -2.4861391 0.067540877 -1.4827945 -2.6157699 0.069069237 -1.4330527 -2.5645931 0.068310551 -1.3087231 -2.3762789 0.065836601 -1.297935 -2.3912945 0.065924563 -1.3002203 -2.4309537 0.066320397 -1.4340342 -2.7210574 0.069827914 -7.8548656 -15.124939 0.22341099 -1.681532 -3.2877076 0.076612048 -7.6695676 -15.221977 0.22343299 -1.6326153 -3.2910762 0.076403134 -1.6246818 -3.3261881 0.076711006 -1.1530298 -2.3980339 0.065264843 -1.1382941 -2.4050636 0.065264843 -1.1260495 -2.4174409 0.065330811 -1.1349517 -2.4761143 0.065957546 -1.3639878 -3.024451 0.072488785 -1.3733906 -3.0958285 0.07324747 -1.1663785 -2.6734619 0.06807965 -1.1353616 -2.6465693 0.067672826 -1.1225995 -2.6617775 0.067771785 -1.1269302 -2.7184935 0.068365529 -1.3536314 -3.3226256 0.075457536 -6.3445745 -15.847083 0.22370787 -6.2139153 -15.801034 0.2227073 -6.0566816 -15.683088 0.22087108 -5.955729 -15.707802 0.22072813 -5.8536549 -15.729055 0.22055221 -5.7529168 -15.753406 0.22042026 -1.1921777 -3.3287339 0.074885778 -1.1700732 -3.3312693 0.0748308 -5.5355778 -16.070293 0.22290522 -1.2167511 -3.6049635 0.077843525 -1.1892697 -3.5962226 0.077656604 -5.119247 -15.800378 0.21863902 -5.055161 -15.935382 0.21983752 -1.0084133 -3.2488892 0.073412396 -0.97014767 -3.1947396 0.072719693 -0.96220315 -3.2399316 0.073170498 -0.97633111 -3.362926 0.07451193 -0.95758921 -3.375587 0.074588902 -0.88824749 -3.2060225 0.072587743 -0.85994011 -3.1795599 0.0722249 -4.2112598 -15.952499 0.21742953 -4.1152921 -15.985786 0.2175175 -3.9969282 -15.930237 0.21660487 -0.83388144 -3.4134026 0.07464388 -0.80690384 -3.3931625 0.074358001 -3.7005475 -15.990393 0.21648392 -3.586998 -15.944509 0.21571425 -3.4884562 -15.963287 0.21568127 -3.3786139 -15.928636 0.21505453 -1.7125515 -8.3261852 0.12947769 -1.6686636 -8.3728209 0.12988453 -1.617447 -8.3838835 0.12989552 -2.9852207 -15.99889 0.21496657 -2.9299283 -16.255053 0.21762745 -2.8296199 -16.269768 0.21759446 -0.46843502 -2.7968678 0.06718903 -0.45142421 -2.8006766 0.06720002 -0.43392467 -2.8014176 0.067178033 -0.41069493 -2.7634761 0.066727221 -0.39232025 -2.7560446 0.066617273 -0.37270242 -2.7385843 0.066397361 -0.35344264 -2.7219791 0.066188447 -0.33317262 -2.695318 0.065869585 -1.8929759 -16.109177 0.21436182 -1.7978575 -16.154276 0.21473567 -1.7064379 -16.238594 0.21554932 -0.23877667 -2.4180887 0.062724918 -0.2246736 -2.4274735 0.06281288 -0.21460214 -2.4845946 0.063428618 -0.19646965 -2.4499824 0.063032784 -0.17817831 -2.4072649 0.062548988 -0.16245431 -2.3943462 0.062395055 -0.14726597 -2.3873136 0.06230709 -0.13228129 -2.3821819 0.062241118 -0.11781044 -2.3859448 0.062274106 -0.10295159 -2.3816278 0.062219128 -0.090048343 -2.42818 0.062724918 -0.085592933 -2.7645042 0.066419356 -0.068928093 -2.7769728 0.066551298 -0.30674854 -16.316126 0.21545036 -0.20993975 -16.578665 0.21832015 -0.10885292 -16.677633 0.21939769 -0.0065362477 -16.719984 0.2198595 --0.016092926 -2.743783 0.066177458 --0.032868877 -2.7386332 0.06612248 --0.30415764 -16.880236 0.22165175 --0.40743759 -16.866056 0.2215198 --0.081547849 -2.6805937 0.065495744 --0.096538499 -2.6400719 0.065055929 --0.11316107 -2.6494203 0.065165885 --0.12805326 -2.6207108 0.064858012 --0.14648668 -2.6628087 0.065330811 --0.15996015 -2.6149497 0.064814031 --0.17492975 -2.5979559 0.064638108 --1.2731464 -17.352301 0.22732535 --1.3719848 -17.24847 0.2262698 --1.4752322 -17.209839 0.22593993 --1.6072428 -17.488234 0.22911759 --1.7104192 -17.436245 0.22865579 --1.8184109 -17.435368 0.22876574 --1.9273344 -17.441772 0.22896366 --2.0325804 -17.414721 0.22879872 --2.1368351 -17.381079 0.22856782 --2.2611179 -17.504496 0.23008518 --2.3604312 -17.430838 0.22942546 --2.4980528 -17.632849 0.23183344 --2.6146851 -17.674561 0.23247117 --2.7116566 -17.584064 0.23164652 --2.8820827 -17.957083 0.23598969 --2.9754326 -17.838455 0.23486815 --3.0635135 -17.696703 0.23349373 --3.1632116 -17.628361 0.23294397 --3.3009021 -17.767885 0.23472522 --3.4260857 -17.831747 0.23567082 --3.5453629 -17.860411 0.23623158 --3.6591001 -17.858892 0.23646249 --3.8696845 -18.314514 0.24183922 --3.9811366 -18.286518 0.24179523 --4.0705223 -18.160269 0.24065171 --4.233099 -18.357107 0.24315865 --4.2909946 -18.100193 0.24055275 --4.609715 -18.926538 0.25020668 --4.4909577 -17.958866 0.23956317 --5.0700073 -19.758657 0.26031139 --5.2148128 -19.81711 0.26133397 --4.3997297 -16.312037 0.22178368 --4.9268761 -17.830713 0.23942024 --5.7003732 -20.147858 0.26624888 --5.8205538 -20.100975 0.26611695 --5.9474735 -20.077347 0.26625988 --6.080699 -20.073971 0.26664472 --6.2212048 -20.09264 0.26729345 --6.3063731 -19.933964 0.26590803 --6.5017366 -20.121351 0.26852494 --6.6410537 -20.129509 0.26908571 --6.7784805 -20.130077 0.26956949 --6.9444308 -20.211992 0.27100989 --7.1314812 -20.349243 0.27311 --7.2794247 -20.370073 0.27386868 --7.4621162 -20.483809 0.27572688 --7.8281364 -21.085398 0.28332469 --7.9280052 -20.959341 0.28241205 --8.1017551 -21.027868 0.28379747 --8.3274069 -21.22444 0.28671125 --8.4860401 -21.244448 0.2875579 --8.8324032 -21.72368 0.29386923 --9.2923775 -22.459082 0.30327025 --9.4773378 -22.51408 0.30461168 --9.8368931 -22.973024 0.31080207 --10.012799 -22.992912 0.31176966 --10.186889 -23.006016 0.31267127 --10.29092 -22.861013 0.31168169 --10.440151 -22.817444 0.31192359 --11.005353 -23.667831 0.3230179 --11.108081 -23.510351 0.32192937 --1.6458892 -3.4281306 0.07782153 --1.6559373 -3.3954971 0.077546649 --1.6723033 -3.3763115 0.077436693 --1.6925393 -3.3650935 0.077425703 --1.7067896 -3.3421767 0.077271767 --1.7396886 -3.3556111 0.077568643 --1.7644358 -3.3528378 0.077667601 --1.7887431 -3.349005 0.077755563 --4.5566921 -8.4080629 0.14116576 --15.774196 -28.687149 0.39599407 --15.984021 -28.650948 0.39676374 --16.96871 -29.982134 0.41482911 --17.320127 -30.169697 0.41853452 --17.416367 -29.910769 0.41659933 --17.519234 -29.667299 0.41486207 --17.55864 -29.321609 0.41181636 --18.709215 -30.812502 0.43238866 --19.65016 -31.919058 0.448167 --19.863113 -31.82588 0.44852984 --0 -0 0 --20.681843 -32.249748 0.45728216 --20.859171 -32.091217 0.45687532 --21.08099 -32.001038 0.4573811 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --27.891108 -39.124226 0.56434393 --0 -0 0 --28.390377 -38.808067 0.5647397 --0 -0 0 --29.53195 -39.346062 0.57696658 --25.528334 -33.580692 0.49984518 --0 -0 0 --0 -0 0 --31.350031 -39.700287 0.59225011 --31.518097 -39.413464 0.59093064 --31.079721 -38.380058 0.57905567 --31.29244 -38.161572 0.57867086 --32.044685 -38.593536 0.5875991 --0 -0 0 --32.467262 -38.140285 0.58677441 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --37.967926 -38.943142 0.63406545 --0 -0 0 --0 -0 0 --38.651287 -38.210964 0.63364762 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --10.308075 -8.4662609 0.18268421 --10.362935 -8.4053717 0.1827282 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --137.87766 -95.928505 1.8829616 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --16.529774 -8.7136784 0.24147636 --16.438284 -8.5369663 0.23968412 --0 -0 0 --0 -0 0 --6.9975982 -3.4718182 0.1219019 --6.989121 -3.4143307 0.12153906 --6.999126 -3.3661807 0.12140711 --7.0196486 -3.3231714 0.12140711 --7.0652852 -3.291863 0.12171498 --0 -0 0 --0 -0 0 --0 -0 0 --36.030697 -15.724849 0.46828851 --36.056667 -15.473502 0.46745285 --0 -0 0 --36.306648 -15.055913 0.46820053 --0 -0 0 --0 -0 0 --0 -0 0 --39.914101 -15.415154 0.50649732 --0 -0 0 --22.330256 -8.310504 0.29800346 --0 -0 0 --43.069599 -15.430271 0.53907657 --0 -0 0 --46.093845 -15.878278 0.57208461 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --49.572826 -15.059782 0.60570842 --28.370607 -8.4287672 0.36144665 --52.617386 -15.281996 0.63849658 --0 -0 0 --0 -0 0 --0 -0 0 --12.781356 -3.3740363 0.18136477 --12.791165 -3.2928054 0.18124382 --12.885809 -3.2329977 0.18209046 --34.310001 -8.3854799 0.42438406 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --40.251869 -8.5384169 0.48846498 --0 -0 0 --0 -0 0 --0 -0 0 --0 -0 0 --18.644392 -3.3606589 0.24432416 --18.599642 -3.2348862 0.24359846 --18.664505 -3.1283042 0.24410425 --27.216496 -4.3903461 0.33914807 --27.248852 -4.2241855 0.33921406 --27.096228 -4.0304265 0.33723488 --27.208551 -3.8766456 0.33821347 --24.171286 -3.2926607 0.30424884 --24.140463 -3.1377125 0.30368808 --27.47278 -3.3996086 0.34040156 --27.37693 -3.2173181 0.33911508 --26.906212 -2.9947364 0.3336944 --26.874357 -2.8243604 0.33314461 --25.850323 -2.556458 0.32164347 --27.496429 -2.5490091 0.33965388 --25.877756 -2.2388699 0.32162148 --28.400764 -2.2817135 0.34930778 --28.348415 -2.1025243 0.34858209 --39.609116 -2.693589 0.47255468 --39.573997 -2.4473531 0.47199392 --0 -0 0 --0 -0 0 --41.790157 -1.8130132 0.49596381 --0 -0 0 --0 -0 0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --63.69471 13.90506 -0.088954993 --0 0 -0 --0 0 -0 --58.071224 13.80186 -0.078384236 --58.000015 14.161477 -0.078413032 --103.11124 25.848337 -0.16787472 --0 0 -0 --0 0 -0 --0 0 -0 --79.59021 22.041191 -0.12234329 --49.870895 14.140506 -0.063309491 --80.311562 23.305803 -0.12433803 --79.42218 23.577017 -0.1228463 --95.351631 28.943829 -0.15509996 --0 0 -0 --46.979084 14.891832 -0.058406163 --75.000839 24.282578 -0.11513998 --74.76783 24.715012 -0.11497295 --74.478333 25.127277 -0.11469649 --74.266968 25.56459 -0.11458322 --41.074894 14.420976 -0.047366962 --0 0 -0 --0 0 -0 --67.428421 25.077675 -0.10190637 --0 0 -0 --65.715294 25.362761 -0.099024661 --63.890629 25.109999 -0.095584273 --33.914139 13.569011 -0.033918336 --33.838577 13.780243 -0.033935618 --35.016224 14.510988 -0.036560066 --60.718445 25.60078 -0.090298899 --32.716221 14.030639 -0.032132868 --0 0 -0 --58.759697 26.058912 -0.087196402 --30.920891 13.939944 -0.0289075 --30.848412 14.135657 -0.028936299 --54.657639 25.453695 -0.079545751 --29.134178 13.785151 -0.025668694 --29.082394 13.979687 -0.025739729 --31.132008 15.200878 -0.03030324 --39.88942 19.781271 -0.049271464 --27.177671 13.685473 -0.022209104 --27.09853 13.854707 -0.022220625 --27.022772 14.025787 -0.022241743 --29.039143 15.299369 -0.026805252 --28.906803 15.456985 -0.026722698 --55.108612 29.905033 -0.08416494 --27.421133 15.098113 -0.023887064 --27.325357 15.264619 -0.023881303 --0 0 -0 --58.06604 33.380104 -0.092376187 --33.784008 19.697445 -0.03886966 --0 0 -0 --0 0 -0 --46.635838 28.354017 -0.068573751 --46.205608 28.482208 -0.067997791 --45.33036 28.327961 -0.066413902 --44.713043 28.325144 -0.065407895 --44.240528 28.407686 -0.064728267 --43.62957 28.394951 -0.063729942 --43.024624 28.378553 -0.062741213 --42.595291 28.47196 -0.062153734 --42.423927 28.735588 -0.062163331 --42.412529 29.109098 -0.062549226 --42.245438 29.377354 -0.062578022 --20.568188 14.490368 -0.012093358 --27.725225 19.7887 -0.02918588 --42.596207 30.799803 -0.064707145 --42.490318 31.122044 -0.064906813 --42.394127 31.453079 -0.065135278 --42.430569 31.885635 -0.0656882 --59.851288 45.554832 -0.10819392 --59.152473 45.598854 -0.10718023 --58.533421 45.696945 -0.10635661 --57.57653 45.52124 -0.10470361 --0 0 -0 --0 0 -0 --37.057423 30.422913 -0.055839311 --40.087452 33.324444 -0.06387201 --54.158623 45.587109 -0.099698536 --53.537685 45.628609 -0.098840356 --52.80019 45.562302 -0.097682677 --52.115238 45.532097 -0.096651718 --51.850605 45.864929 -0.096692033 --34.237518 30.661085 -0.052026466 --21.785242 19.751211 -0.020245086 --49.656101 45.580132 -0.093195967 --36.138134 33.582241 -0.058502156 --38.141876 35.883007 -0.064328939 --0 0 -0 --38.89724 37.504059 -0.067525506 --46.560085 45.447346 -0.088703491 --46.125286 45.578949 -0.088284962 --14.508456 14.512506 -0.0031871223 --14.419136 14.601254 -0.0031871223 --44.450409 45.571224 -0.086008005 --43.862583 45.524086 -0.085157506 --43.333557 45.530865 -0.084464438 --28.818958 30.654184 -0.044565886 --31.160261 33.554935 -0.05170393 --41.729729 45.493923 -0.082310356 --41.318871 45.604607 -0.081935979 --40.774864 45.562927 -0.081177637 --40.219685 45.501312 -0.080380894 --39.91935 45.723888 -0.080321379 --39.315449 45.593845 -0.079372965 --38.800243 45.55862 -0.078677975 --38.322361 45.56089 -0.078088582 --37.855503 45.57056 -0.077527978 --37.490185 45.69838 -0.077270716 --37.107101 45.801678 -0.076959699 --15.748447 19.683119 -0.01218551 --23.967539 30.336422 -0.038015321 --23.926722 30.669779 -0.038470328 --36.537579 47.43293 -0.078739412 --36.481934 47.966652 -0.079488158 --36.361061 48.421497 -0.080044918 --0 0 -0 --36.491146 49.857426 -0.082408264 --36.548809 50.584568 -0.083602421 --36.472321 51.136791 -0.084378041 --36.457779 51.785641 -0.085378289 --36.448616 52.453461 -0.08641886 --36.413956 53.09589 -0.087396063 --0 0 -0 --20.472097 30.649588 -0.034551892 --22.053944 33.46072 -0.040728085 --20.180574 31.03096 -0.034855228 --20.110212 31.341892 -0.035283357 --19.808952 31.293169 -0.034893628 --19.736267 31.605824 -0.035327516 --22.105862 35.889099 -0.044713717 --21.879524 36.01466 -0.044692598 --8.7522354 14.606459 0.0035189523 --8.5922518 14.541073 0.0037838931 --8.5073986 14.601296 0.0037666142 --19.102451 33.256031 -0.037420165 --21.136986 37.326721 -0.046144012 --20.878313 37.40332 -0.046028819 --20.569851 37.387909 -0.045715883 --20.3167 37.470345 -0.045621809 --17.895218 33.492943 -0.036694456 --19.838583 37.684982 -0.045552693 --19.624472 37.839737 -0.045625649 --19.393742 37.962997 -0.045633327 --9.9016285 19.678185 -0.0060822726 --9.7780352 19.733192 -0.0060707536 --15.152164 31.057861 -0.03013429 --14.958714 31.14484 -0.030122772 --14.774597 31.251408 -0.030155409 --17.367006 37.32645 -0.042828411 --41.484543 90.615135 -0.155123 --0 0 -0 --15.254027 34.427902 -0.03608394 --39.566326 90.805077 -0.15395381 --0 0 -0 --38.339565 91.023888 -0.1534124 --37.709187 91.085571 -0.15305531 --37.108513 91.214272 -0.15284605 --14.032166 35.10532 -0.03637192 --13.415257 34.168697 -0.034263913 --13.618299 35.321526 -0.036467914 --13.076361 34.54586 -0.034705479 --12.847081 34.579514 -0.034611408 --11.511686 31.576988 -0.028316183 --11.148018 31.172457 -0.027348572 --11.007499 31.385595 -0.027644232 --10.921354 31.762726 -0.028273946 --10.448452 31.004686 -0.026603667 --11.971889 36.259613 -0.037099548 --11.257843 34.812851 -0.034033529 --9.9559689 31.444397 -0.02711243 --0 0 -0 --10.713197 35.337639 -0.034682442 --10.487926 35.374905 -0.034626767 --0 0 -0 --9.8318167 34.719658 -0.033067837 --10.139648 36.663612 -0.036821168 --9.4646912 35.058784 -0.033507489 --9.2435389 35.093956 -0.033463329 --0 0 -0 --3.6177094 14.449944 0.0076120957 --3.5308728 14.479643 0.0075967372 --9.027318 38.040424 -0.03885046 --8.8031816 38.136024 -0.038931094 --8.6025105 38.338612 -0.039224833 --8.8125324 40.4347 -0.04324118 --8.194499 38.739689 -0.039810389 --8.7323637 42.571503 -0.047222976 --3.9279275 19.761328 -0.0024710142 --3.8150997 19.829247 -0.0025574078 --6.3711452 34.250362 -0.030673772 --0 0 -0 --6.2387881 35.990154 -0.033916418 --4.6442461 27.802679 -0.017906696 --5.6651316 35.245506 -0.032324854 --4.9526505 32.066685 -0.026083384 --4.7588773 32.117245 -0.026123701 --5.9326444 41.809059 -0.044861544 --0 0 -0 --3.9091363 30.207006 -0.022266701 --3.7306824 30.286997 -0.022376133 --3.5454714 30.315277 -0.022387652 --3.352792 30.276827 -0.02227246 --4.1873007 40.061646 -0.041121654 --0 0 -0 --3.6985774 40.144867 -0.041188851 --3.4564636 40.216621 -0.041284844 --0 0 -0 --3.6960762 50.225052 -0.060475774 --2.5120621 37.253288 -0.035473425 --2.2826993 37.256023 -0.035450388 --1.5122617 27.433256 -0.016537836 --2.5361254 51.807823 -0.063372843 --0 0 -0 --1.5498794 42.273476 -0.045003615 --0 0 -0 --0.9609375 39.41217 -0.039478254 --0.71881771 39.402328 -0.039449457 --0.47741041 39.436996 -0.039508972 --0 0 -0 -0 0 -0 -0 0 -0 -0.42259097 33.985268 -0.02904189 -0.63260096 34.062019 -0.02919548 -0 0 -0 -1.7663835 57.2286 -0.073713213 -0 0 -0 -0 0 -0 -2.0377593 41.337685 -0.043248862 -1.7058239 30.769651 -0.022954011 -1.7640526 28.640629 -0.018880066 -1.8961951 27.986742 -0.017643675 -2.07548 28.077299 -0.017841421 -0 0 -0 -6.4901714 75.207298 -0.1087142 -0 0 -0 -0 0 -0 -0 0 -0 -2.2141359 19.940371 -0.002307826 -2.3306203 19.876749 -0.0022118329 -4.8416252 39.201027 -0.039622243 -5.1003413 39.311401 -0.039894864 -5.3475204 39.323956 -0.039981257 -5.5347605 38.911221 -0.039245952 -4.9813414 33.544044 -0.028895982 -5.1939549 33.557316 -0.028982375 -4.7684846 29.606348 -0.021362446 -4.9512119 29.583435 -0.021375885 -8.3469305 48.055347 -0.057430875 -8.6409264 47.99929 -0.057423197 -5.3356781 28.633001 -0.019707527 -0 0 -0 -0 0 -0 -0 0 -0 -3.0855935 14.566712 0.0076236152 -3.1625435 14.490841 0.0077349669 -3.2603891 14.511165 0.0076562525 -10.015924 43.323151 -0.049158193 -10.284105 43.27158 -0.049179312 -0 0 -0 -9.5396414 38.057476 -0.039115399 -3.4568577 13.443601 0.0095607545 -3.5176013 13.339948 0.0097239427 -3.6179171 13.386652 0.0095876325 -9.5379248 34.443691 -0.032405488 -0 0 -0 -9.9384232 34.250103 -0.032257657 -10.119077 34.089737 -0.032059912 -13.645247 44.954594 -0.053984724 -10.575172 34.087154 -0.032309495 -11.974465 37.776455 -0.039871827 -12.198947 37.680389 -0.039827671 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -7.9582639 19.892036 -0.0049226764 -8.0752659 19.830791 -0.0048977183 -8.1925812 19.770708 -0.0048766001 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -25.060951 55.586693 -0.080853179 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -37.950043 77.719231 -0.12983844 -0 0 -0 -38.46328 76.378654 -0.12797041 -38.85973 76.001427 -0.12766899 -0 0 -0 -0 0 -0 -33.466679 62.58466 -0.10004411 -0 0 -0 -0 0 -0 -37.897297 67.836815 -0.11297245 -41.104572 72.528877 -0.12384271 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -19.849514 31.763821 -0.035699967 -20.168732 31.838255 -0.036147296 -20.316698 31.640697 -0.035980269 -20.63265 31.703178 -0.036410317 -20.853769 31.616884 -0.036504392 -21.024033 31.453417 -0.036423754 -40.008133 59.065388 -0.10075254 -13.780765 20.079929 -0.010545949 -13.923125 20.022907 -0.010611225 -14.038234 19.926474 -0.010586266 -35.171116 49.275406 -0.080018036 -0 0 -0 -34.63327 47.283909 -0.076314628 -34.910831 47.054451 -0.076276228 -34.121109 45.405201 -0.072832003 -33.740707 44.33004 -0.070745111 -0 0 -0 -33.80032 43.295471 -0.069241859 -33.915249 42.89743 -0.068777256 -34.037823 42.513664 -0.068347208 -34.204201 42.188274 -0.068061143 -34.17878 41.632126 -0.06720297 -31.965347 38.45261 -0.059790384 -34.392796 40.859943 -0.06632559 -34.585129 40.58041 -0.066154726 -34.715225 40.230404 -0.065807231 -0 0 -0 -35.147331 39.734703 -0.065636359 -35.261719 39.374523 -0.065265827 -35.633633 39.30188 -0.065640204 -35.665833 38.855598 -0.065048881 -35.974373 38.712208 -0.065248549 -31.467413 33.448528 -0.05195735 -36.45155 38.2729 -0.06526199 -34.08556 35.351906 -0.05807019 -36.943619 37.848465 -0.065331101 -19.603533 19.839458 -0.017336497 -37.495117 37.482044 -0.065574922 -37.771358 37.297646 -0.065701634 -36.790405 35.885864 -0.062458992 -38.656136 37.245541 -0.066847794 -38.942619 37.063492 -0.067003302 -39.017025 36.680691 -0.066602051 -39.757973 36.920319 -0.067955554 -40.142944 36.821678 -0.068370245 -40.49485 36.689484 -0.06869854 -17.552824 15.709215 -0.0090139005 -17.152121 15.162134 -0.0077410326 -17.692299 15.447253 -0.0088814301 -17.159676 14.797702 -0.007291785 -17.311817 14.744651 -0.007447294 -17.480022 14.703806 -0.0076431194 -17.566069 14.593079 -0.0076335203 -17.429523 14.299822 -0.0070729209 -18.230234 14.770474 -0.008835353 -18.322863 14.660212 -0.0088411132 -18.36853 14.512794 -0.0087336004 -18.34054 14.308783 -0.0084494613 -18.363029 14.145939 -0.0082920324 -18.422419 14.012418 -0.0082267569 -18.516846 13.905721 -0.0082478756 -18.73196 13.88832 -0.0085588936 -18.829737 13.782571 -0.0085896114 -19.484592 14.079062 -0.0099411933 -19.911741 14.202537 -0.010745615 -21.252039 14.962559 -0.013688762 -20.85811 14.494641 -0.012554124 -20.405653 13.995373 -0.011294696 -20.565678 13.920347 -0.011467483 -20.829493 13.913309 -0.011880253 -21.320267 14.052682 -0.012813305 -21.414474 13.927051 -0.012832504 -20.865755 13.388767 -0.011386849 -20.848656 13.19791 -0.011162225 -0 0 -0 -20.378115 12.552475 -0.0097396076 -0 0 -0 -20.48687 12.275249 -0.0096416948 -0 0 -0 -20.816553 12.128123 -0.010042946 -21.259113 12.211841 -0.010858887 -21.425013 12.132903 -0.011060473 -21.428328 11.961736 -0.010904963 -21.424217 11.787612 -0.010736016 -21.453945 11.633056 -0.010643862 -21.395264 11.431928 -0.010361643 -20.30315 10.688836 -0.0078408653 -20.329292 10.543801 -0.0077563915 -21.102472 10.780972 -0.0092846006 -20.322262 10.225671 -0.0074664922 -21.251104 10.530079 -0.0093229981 -21.262289 10.373618 -0.009209726 -20.433123 9.814373 -0.0073090638 -21.504614 10.167048 -0.009457388 -21.700781 10.097336 -0.009741528 -23.095285 10.574215 -0.012556043 -22.277124 10.034784 -0.010697618 -22.557707 9.99512 -0.011158385 -23.123743 10.076613 -0.012216228 -23.416773 10.03378 -0.012700033 -23.831789 10.038963 -0.01343726 -24.258823 10.044015 -0.014197525 -24.653458 10.030634 -0.014888675 -25.048828 10.012782 -0.015579825 -25.478405 10.003608 -0.01634009 -25.886406 9.9808989 -0.017054278 -26.348383 9.973732 -0.017877899 -26.843103 9.9731064 -0.018766794 -37.393585 13.631952 -0.040202044 -0 0 -0 -35.279125 12.372876 -0.035565577 -35.402607 12.172756 -0.035663489 -35.463364 11.95083 -0.035636611 -35.428722 11.697581 -0.035419669 -35.346642 11.430441 -0.03511057 -0 0 -0 -0 0 -0 -34.15575 10.354928 -0.032311413 -34.151531 10.125262 -0.032177024 -34.372456 9.9617243 -0.032495718 -36.089794 10.21976 -0.03580172 -36.386032 10.062889 -0.036268245 -37.234894 10.052093 -0.037834853 -38.293839 10.086259 -0.039816149 -38.947773 10.003329 -0.040991105 -0 0 -0 -0 0 -0 -0 0 -0 -59.381443 13.706731 -0.080791742 -0 0 -0 -0 0 -0 -0 0 -0 -54.514877 11.181882 -0.070629917 -54.575596 10.84581 -0.070616484 -54.639153 10.510359 -0.070612639 -54.694748 10.173438 -0.070597284 -0 0 -0 -57.433441 9.9552145 -0.075698353 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -17.20414 0.73718035 0.003150339 -17.192348 0.6310181 0.0031810568 -17.187901 0.52527213 0.0031964155 -17.364748 0.42403525 0.0028623599 -17.366024 0.31746095 0.0028642796 -17.317648 0.21029532 0.0029602726 -17.312613 0.10399663 0.0029717919 -17.312925 -0.0022335283 0.0029717919 -17.310585 -0.10845093 0.0029756315 -17.307594 -0.21463971 0.0029794713 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -17.343088 -1.0677462 0.0028508406 -17.33621 -1.1741413 0.0028508406 -0 -0 -0 -0 -0 -0 -0 -0 -0 -17.46946 -1.6147131 0.002528304 -0 -0 -0 -27.431543 -2.8760998 -0.016743261 -27.422325 -3.0453563 -0.016760539 -27.417027 -3.2151904 -0.016787417 -27.40373 -3.3842158 -0.016800856 -27.392366 -3.5535851 -0.016820055 -25.365507 -3.4489448 -0.012936177 -27.387287 -3.8952389 -0.01689877 -27.370783 -4.0643864 -0.016914129 -27.364107 -4.2351604 -0.016950605 -0 -0 -0 -0 -0 -0 -0 -0 -0 -19.311617 -3.4758072 -0.0014611671 -19.286978 -3.5936859 -0.0014554076 -0 -0 -0 -43.583519 -8.6770086 -0.049106356 -0 -0 -0 -0 -0 -0 -0 -0 -0 -37.646927 -8.4604702 -0.037869412 -37.58456 -8.6890554 -0.037850212 -0 -0 -0 -11.165174 -2.7251568 0.014145383 -11.084223 -2.7775645 0.014272094 -11.203526 -2.8806493 0.014001394 -10.917802 -2.8786883 0.014533195 -10.947235 -2.9584126 0.014439122 -9.0669651 -2.5098743 0.018148294 -9.0302286 -2.559459 0.018190529 -7.9156866 -2.2959776 0.02038685 -7.9244571 -2.3513343 0.020340774 -7.9213629 -2.4033995 0.020317735 -7.8625331 -2.4383271 0.020406049 -7.8855538 -2.4986126 0.020329256 -7.9994607 -2.5888433 0.020068154 -7.9388003 -2.6231265 0.020158388 -25.549292 -8.6189356 -0.015556786 -0 -0 -0 -41.091877 -14.426938 -0.047401521 -10.882875 -3.8951273 0.014018672 -7.2458758 -2.64325 0.021402458 -11.236345 -4.1779342 0.013195052 -7.2624545 -2.7507493 0.021300705 -7.0616541 -2.724324 0.021678917 -11.070054 -4.3496656 0.013375519 -7.1502438 -2.8598139 0.021425495 -7.197391 -2.9300363 0.021291105 -34.093346 -14.128507 -0.034642126 -0 -0 -0 -9.0951881 -3.8996356 0.0172114 -19.585396 -8.5415144 -0.0048113246 -5.6497474 -2.5044129 0.024345605 -5.6643577 -2.5525956 0.024282249 -4.7222314 -2.1627805 0.026238587 -4.7460389 -2.2090242 0.026159873 -4.642909 -2.1957583 0.026349939 -4.7041535 -2.2601666 0.02619059 -4.5706849 -2.230629 0.026445933 -4.7835689 -2.3710394 0.025960207 -4.7992969 -2.4156389 0.025894932 -29.407227 -15.03519 -0.027198823 -4.3246307 -2.243535 0.026856782 -4.3275924 -2.2788851 0.026820306 -4.272964 -2.2837036 0.026908619 -4.268539 -2.3151257 0.026887501 -4.6904883 -2.581486 0.025931409 -4.6282916 -2.5843685 0.026033163 -4.4896784 -2.543196 0.026303863 -4.5078001 -2.5901337 0.026228989 -4.414938 -2.5729144 0.026399856 -4.3302064 -2.5592356 0.026553445 -3.3041382 -1.9799469 0.02881504 -4.2557521 -2.586205 0.026649438 -4.4747481 -2.7571018 0.026119556 -7.0119672 -4.3807735 0.020336935 -4.4498696 -2.817693 0.026098438 -4.468679 -2.8681784 0.026015883 -4.4635682 -2.9037259 0.025987085 -3.5908797 -2.3672235 0.027953023 -4.3802114 -2.9266055 0.026096517 -23.075123 -15.629151 -0.01729618 -22.949108 -15.750071 -0.017227065 -22.942345 -15.953391 -0.01743825 -4.1280437 -2.9070828 0.026516967 -4.0905943 -2.9184139 0.026563045 -4.0588346 -2.9334972 0.026595682 -21.228949 -15.548425 -0.014308877 -21.084158 -15.642043 -0.014191765 -5.4838729 -4.1197395 0.023042019 -5.4282541 -4.1302953 0.023114974 -5.3909292 -4.1543665 0.023143772 -3.8976638 -3.0415192 0.026718553 -5.570951 -4.4031706 0.022577412 -5.5461702 -4.4391456 0.022571653 -19.148695 -15.524011 -0.011116148 -18.992023 -15.591084 -0.010964479 -18.747589 -15.583943 -0.010593946 -18.436638 -15.517724 -0.010054465 -4.2048941 -3.5822973 0.025605034 -3.4954066 -3.0148158 0.027348267 -3.6892042 -3.2217493 0.026806867 -3.595964 -3.179394 0.026995013 -3.5763879 -3.2013986 0.026995013 -3.3803625 -3.0634174 0.02745194 -3.7762542 -3.4648221 0.026371058 -3.8669989 -3.5920813 0.026077319 -16.68022 -15.691469 -0.0077563915 -16.573486 -15.783866 -0.0077295131 -3.4978819 -3.3711247 0.02688366 -3.2595911 -3.1801751 0.027467299 -3.9441967 -3.8959799 0.025566636 -3.0803409 -3.0799015 0.027847432 -3.5454857 -3.589015 0.026524646 -3.5282848 -3.6157134 0.026511207 -3.0099452 -3.1223962 0.027883908 -3.0369196 -3.1893396 0.027755277 -2.970717 -3.1583691 0.027885828 -3.910044 -4.209034 0.025180744 -3.7672055 -4.105454 0.02551288 -3.7446296 -4.1314564 0.0255052 -3.2757521 -3.6588056 0.026781907 -3.7691469 -4.2625136 0.025286335 -3.2121918 -3.6776359 0.026835663 -3.8843822 -4.5030813 0.024792932 -3.8754814 -4.5489092 0.024737256 -3.2546675 -3.867769 0.026505448 -3.7976425 -4.5699711 0.024802532 -3.4035735 -4.147089 0.025910292 -12.435716 -15.348301 -0.0017145888 -12.346929 -15.431344 -0.0017318676 -3.5733833 -4.5213366 0.025146186 -3.5412683 -4.5376577 0.025159625 -3.599401 -4.6710048 0.024888925 -3.5385888 -4.6508169 0.024990678 -3.5189919 -4.6844368 0.024961879 -1.6112524 -2.1714566 0.031019041 -2.5292747 -3.4538813 0.02799142 -2.5747972 -3.5617406 0.027772557 -2.7880588 -3.9072025 0.026995013 -11.079247 -15.73586 -0.0007373796 -1.5107893 -2.1722291 0.031130394 -1.5200551 -2.2144463 0.031053599 -10.499628 -15.511456 0.00024942897 -10.073788 -15.0808 0.0013917462 -9.9667568 -15.120619 0.0014416627 -1.5023229 -2.3080897 0.030923048 -1.4832723 -2.3096895 0.030940328 -1.467468 -2.3162124 0.030946087 -1.9897497 -3.1844225 0.029001268 -1.4200548 -2.3033936 0.031015201 -1.3809737 -2.27104 0.031107355 -1.3546785 -2.2588828 0.031153431 -1.3433361 -2.2714572 0.031143833 -1.3540384 -2.3219965 0.031049758 -1.6216654 -2.8210635 0.029963117 -1.5496324 -2.7343707 0.030176222 -1.5425731 -2.7612913 0.030137826 -1.4759539 -2.6804595 0.03033557 -1.2888472 -2.3747461 0.03102288 -1.266241 -2.3676155 0.031055519 -1.4668902 -2.784158 0.030168543 -1.4787822 -2.8490331 0.030047592 -1.4667319 -2.8687396 0.030024553 -7.3614211 -14.62919 0.0047687818 -7.2710752 -14.673188 0.0047707018 -1.1580694 -2.3712749 0.031143833 -1.1608144 -2.4143934 0.031067038 -6.9775343 -14.757527 0.0048705344 -6.8750415 -14.774675 0.0049242903 -6.7792616 -14.805671 0.0049473289 -6.6599522 -14.784076 0.0050797993 -6.5654678 -14.816434 0.0050970782 -6.5726957 -15.081962 0.0046247924 -1.330954 -3.1036043 0.029726975 -1.3146026 -3.1181636 0.029713536 -6.2117348 -15.001739 0.0050375625 -6.1493378 -15.112747 0.0048858933 -6.0687394 -15.180837 0.0048225378 -1.0969927 -2.7911141 0.030452682 -1.076249 -2.7884619 0.03047188 -5.7380166 -15.157165 0.0050951582 -5.6184402 -15.120845 0.0052410676 -5.4813752 -15.033835 0.0054887296 -1.2010976 -3.3554595 0.029367961 -1.1844573 -3.37409 0.029344922 -5.15593 -14.993169 0.0057709492 -5.0845919 -15.086121 0.005646158 -5.0279813 -15.226237 0.005425374 -1.1603675 -3.5848286 0.028976308 -4.8144951 -15.203849 0.0055924021 -4.495296 -14.504289 0.0070572561 -0.96799403 -3.1892867 0.029811449 -0.96460718 -3.2498155 0.029702017 -0.9646883 -3.3248277 0.029563786 -0.9543494 -3.3662848 0.029492751 -0.88436949 -3.1937692 0.029847926 -0.86553806 -3.2020319 0.029842166 -4.0125074 -15.231268 0.005970615 -3.9393711 -15.335024 0.0058131861 -3.8755515 -15.480166 0.0055732033 -0.82766759 -3.3903868 0.029510031 -0.80800337 -3.4002664 0.02950043 -3.597827 -15.582983 0.0055060084 -3.5133083 -15.654529 0.0054080957 -3.4254916 -15.713897 0.0053332211 -0.64547718 -3.0463178 0.030231899 -0.62014306 -3.017894 0.030295253 -0.60102928 -3.0186999 0.030301014 -0.57777363 -2.997781 0.030349011 -2.9413104 -15.808629 0.0053389804 -0.5347544 -2.970197 0.030416206 -0.49619815 -2.8561704 0.030644668 -0.49381784 -2.9499044 0.030468041 -2.5045447 -15.577877 0.0059187785 -0.44109967 -2.8490074 0.030675385 -0.41657647 -2.8041785 0.03076754 -0.39809832 -2.797771 0.030784817 -0.37958017 -2.7902517 0.030804018 -0.36219576 -2.7905447 0.030807856 -1.95489 -15.865948 0.0055194474 -1.8584306 -15.88559 0.0055040885 -0.30581838 -2.7520123 0.03089425 -0.31386888 -2.9925368 0.030433483 -0.4134739 -4.1946201 0.028118132 -0.38690299 -4.1881161 0.02813541 -1.3174525 -15.320387 0.0066886428 -1.2254108 -15.353103 0.0066406461 -1.137566 -15.447099 0.0064736186 -1.0453856 -15.4927 0.0063987439 -0.15146655 -2.4542832 0.031489406 -0.14916427 -2.6868148 0.031043999 -0.11728097 -2.3730564 0.031648755 -0.10126474 -2.3397627 0.03171403 -0.087235816 -2.3493338 0.031696752 -0.081078604 -2.6206985 0.03117647 -0.066944361 -2.7011228 0.03102288 -0.051753316 -2.7774699 0.030876972 -0.03474633 -2.780735 0.030871212 -0.017825956 -2.8048954 0.030825134 -0.00061628362 -2.7989521 0.030836655 --0.016519781 -2.7929032 0.030848173 --0.033431981 -2.7747507 0.030882731 --0.29715145 -16.033175 0.0054234546 --0.39834362 -16.145014 0.00520459 --0.49761617 -16.149261 0.0051911511 --0.09563417 -2.6142037 0.031187989 --0.11081013 -2.5935864 0.031226385 --0.79123998 -16.065454 0.0053293812 --0.14201978 -2.5810483 0.031247504 --0.15693137 -2.5651567 0.031276304 --0.17375016 -2.5801086 0.031245586 --1.2181647 -16.485983 0.0044731232 --1.3372705 -16.702478 0.0040411544 --1.4424815 -16.72584 0.0039797188 --1.5459111 -16.725636 0.00396244 --1.6505711 -16.736734 0.003922123 --1.7660656 -16.848619 0.0036859801 --1.8670948 -16.816595 0.0037262973 --1.9761865 -16.855474 0.0036283843 --2.085948 -16.894638 0.0035285517 --2.1736145 -16.758553 0.0037666142 --2.3053787 -16.957939 0.0033538442 --2.4092464 -16.942484 0.0033557641 --2.5188882 -16.965958 0.0032808895 --2.6443608 -17.088535 0.0030121088 --2.3197246 -14.406363 0.0081957337 --2.8647611 -17.119892 0.0028853982 --2.9892647 -17.21431 0.0026665339 --3.1107812 -17.28422 0.0024937466 --3.2319849 -17.346401 0.002334398 --3.3716695 -17.499062 0.0019965025 --3.3704011 -16.932751 0.0030639451 --3.5841432 -17.446573 0.002015701 --3.6496651 -17.228598 0.0023996732 --3.7811186 -17.324095 0.0021673702 --3.9744053 -17.687904 0.0014051853 --4.132422 -17.877529 0.00098281587 --4.2818131 -18.019175 0.00065259979 --3.877542 -15.884504 0.0048186979 --4.4452257 -17.736359 0.001105687 --4.5464969 -17.679695 0.0011632828 --4.7752776 -18.107853 0.00025710842 --4.9322286 -18.248112 -8.0787118e-05 --5.1201711 -18.492165 -0.00062794751 --5.2556381 -18.538328 -0.00078345626 --5.4888535 -18.917732 -0.0016070766 --5.3125482 -17.899168 0.00036462065 --5.8553691 -19.292944 -0.0024978921 --5.9466715 -19.169741 -0.0023231849 --6.1566534 -19.424583 -0.0029106622 --6.2486176 -19.302721 -0.0027417145 --6.3707056 -19.27541 -0.0027647528 --6.2832985 -18.626701 -0.0015302822 --6.6025333 -19.183489 -0.0027397946 --6.7631845 -19.265274 -0.0029893764 --6.8913789 -19.251657 -0.0030469724 --7.065259 -19.362131 -0.0033599096 --7.2745662 -19.562105 -0.0038590736 --7.4104056 -19.559179 -0.0039454675 --7.1990075 -18.655056 -0.0021791952 --7.7376599 -19.690136 -0.0044062338 --7.9753528 -19.934744 -0.00501099 --8.1250544 -19.953041 -0.00515114 --8.2718344 -19.961935 -0.0052740113 --8.3941631 -19.910805 -0.0052740113 --8.4468012 -19.697174 -0.0049361154 --8.6262732 -19.779715 -0.005218335 --8.7584229 -19.751093 -0.0052701714 --9.6114779 -21.320583 -0.0086894436 --8.9938908 -19.62849 -0.0052413736 --10.066591 -21.618025 -0.0095725795 --10.207175 -21.573025 -0.0096090576 --10.477999 -21.798391 -0.010223413 --1.6878434 -3.4591329 0.0288208 --1.6854887 -3.4012299 0.028922552 --1.6892347 -3.356885 0.028995508 --1.7111661 -3.3491278 0.028989749 --1.7524158 -3.378505 0.028903354 --1.7735791 -3.3685734 0.028901435 --1.8060042 -3.3796732 0.028853439 --4.5535502 -8.3932962 0.017877592 --13.123835 -23.835772 -0.016029073 --13.432252 -24.045504 -0.016668387 --12.779783 -22.551512 -0.013554372 --0 -0 -0 --0 -0 -0 --15.644053 -26.457903 -0.022800421 --16.633047 -27.740479 -0.025887558 --17.104271 -28.13348 -0.027001077 --17.287592 -28.045877 -0.027041394 --17.423315 -27.881611 -0.026910845 --17.527704 -27.66943 -0.026672782 --18.342312 -28.566048 -0.028965095 --18.533609 -28.478107 -0.029022692 --18.703594 -28.357174 -0.029007332 --19.339052 -28.932735 -0.030602736 --19.542574 -28.852442 -0.03069297 --19.968235 -29.094757 -0.031537708 --19.925999 -28.654785 -0.030796643 --20.203392 -28.676674 -0.031136459 --20.858271 -29.223654 -0.032720342 --21.69639 -30.006752 -0.034880187 --21.878328 -29.870642 -0.034874428 --22.080862 -29.762339 -0.034937784 --21.924229 -29.175421 -0.03385498 --22.056803 -28.979872 -0.033709072 --23.076746 -29.936928 -0.036358479 --23.056925 -29.534655 -0.035724927 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --27.461658 -33.035172 -0.046264965 --27.638083 -32.835445 -0.046188168 --27.888985 -32.723846 -0.046335999 --0 -0 -0 --0 -0 -0 --29.447313 -33.291012 -0.049119797 --29.999277 -33.498554 -0.050121963 --30.282173 -33.399784 -0.050344668 --30.331007 -33.043911 -0.049903098 --0 -0 -0 --31.319405 -33.291206 -0.051542662 --31.403772 -32.973137 -0.051210526 --32.586281 -33.796997 -0.05392329 --32.731571 -33.533443 -0.053754341 --32.858692 -33.253021 -0.053541236 --0 -0 -0 --0 -0 -0 --34.14814 -33.308681 -0.055372782 --35.130344 -33.848553 -0.057448152 --35.410538 -33.701988 -0.057642061 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --10.317468 -8.4654455 0.01058788 --10.36844 -8.40135 0.0105898 --0 -0 -0 --35.622787 -28.14382 -0.050949425 --0 -0 -0 --0 -0 -0 --0 -0 -0 --20.970184 -15.747928 -0.014138009 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --16.403454 -8.6360474 0.00061996217 --16.465012 -8.5398388 0.00060076354 --0 -0 -0 --0 -0 -0 --6.9725189 -3.4558086 0.021269986 --6.9747181 -3.4037538 0.021310303 --7.0071907 -3.3665216 0.021285346 --7.0240989 -3.3217533 0.021293025 --7.070642 -3.2908247 0.021237349 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --36.128246 -15.47979 -0.039249793 --36.217018 -15.25549 -0.03923827 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --22.288456 -8.437108 -0.0095437821 --22.370741 -8.3116817 -0.0096071372 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --28.350088 -8.4054546 -0.020559944 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --12.790498 -3.3697069 0.010816344 --12.787687 -3.2851927 0.01086242 --12.938564 -3.2394438 0.01060324 --34.335182 -8.3710165 -0.03163946 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --40.29821 -8.5241213 -0.04286873 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --18.684622 -3.3577132 -0.00023629586 --18.663488 -3.235831 -0.00015566169 --0 -0 -0 --27.184938 -4.3697987 -0.016651107 --27.151941 -4.1937566 -0.016535915 --27.227612 -4.0345497 -0.016633829 --27.207302 -3.8610873 -0.016547434 --24.213108 -3.284869 -0.010701458 --28.658913 -3.7088552 -0.019269798 --27.537767 -3.3921452 -0.017058117 --28.429129 -3.3249531 -0.018741837 --27.682676 -3.0656219 -0.017261622 --27.959558 -2.9227271 -0.017760787 --25.849222 -2.5419731 -0.013656124 --25.893211 -2.385977 -0.0137118 --25.88644 -2.2252567 -0.013671483 --27.48258 -2.1926033 -0.016720222 --29.464193 -2.1687617 -0.020510027 --30.66824 -2.0682261 -0.022802342 --30.674364 -1.8796436 -0.022790823 --39.461002 -2.1747808 -0.039664481 --41.614037 -2.0373433 -0.043778744 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --112.10613 -2.0430038 -0.17905407 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --152.03152 5.6283779 -0.25586963 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 -0 -0 --112.13109 -2.1691427 -1.5296394 --87.869766 -1.1604209 -1.1906796 --0 -0 -0 --0 -0 -0 --87.842247 0.45699403 -1.1902047 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --69.695068 14.240609 -0.95689672 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --58.084858 13.737114 -0.79704374 --57.993649 14.091841 -0.79696 --102.68208 25.618589 -1.4413565 --80.788139 20.683647 -1.1280731 --0 0 -0 --0 0 -0 --53.612816 14.782949 -0.74016184 --49.893295 14.087354 -0.68752438 --0 0 -0 --79.722786 23.569513 -1.1244429 --0 0 -0 --43.599976 13.4742 -0.60081929 --43.516479 13.741471 -0.60081929 --43.523651 14.037996 -0.60217357 --43.473736 14.316986 -0.60271811 --0 0 -0 --57.872692 19.849243 -0.81791723 --41.057556 14.364251 -0.5709821 --40.997841 14.62632 -0.57141489 --0 0 -0 --66.871391 24.785845 -0.95943785 --51.793354 19.559565 -0.73667127 --51.651833 19.869097 -0.73636413 --0 0 -0 --33.835629 13.494775 -0.4722555 --0 0 -0 --35.017662 14.466754 -0.49265426 --32.89938 13.828585 -0.46192348 --45.917103 19.632528 -0.66091251 --57.269749 24.903149 -0.83562124 --57.050938 25.225372 -0.83462995 --31.045296 13.955397 -0.4388859 --32.978107 15.068114 -0.46988192 --29.235653 13.57564 -0.41369811 --29.158133 13.757757 -0.41379586 --29.075872 13.937706 -0.41383773 --31.124926 15.155459 -0.44699791 --39.858063 19.711163 -0.58449745 --39.815891 19.995293 -0.58574009 --27.158171 13.848122 -0.38927826 --27.084232 14.020476 -0.38945979 --28.91227 15.19241 -0.41965997 --28.847622 15.385055 -0.42012072 --49.971077 27.045437 -0.75701416 --27.431393 15.065022 -0.4006016 --27.279917 15.200447 -0.39966613 --0 0 -0 --24.698093 14.161838 -0.36114448 --24.582211 14.296527 -0.36068371 --24.419096 14.402898 -0.35946903 --24.477859 14.640738 -0.3618705 --46.649906 28.291969 -0.72543174 --46.045292 28.313187 -0.71838081 --45.405701 28.305315 -0.71072954 --44.861786 28.34996 -0.70462805 --44.160751 28.287613 -0.69590169 --43.822811 28.451872 -0.69317907 --43.193008 28.421234 -0.68558365 --42.651764 28.441643 -0.67944032 --42.452423 28.686579 -0.67903543 --42.386162 29.022219 -0.68090636 --42.302586 29.347864 -0.68252593 --20.567867 14.457172 -0.31465042 --20.473886 14.579622 -0.31456664 --42.755093 30.842825 -0.6997413 --42.577957 31.114023 -0.6999647 --42.740673 31.637035 -0.70612204 --42.536144 31.891495 -0.70595449 --42.157303 32.013412 -0.70275712 --41.533661 31.943529 -0.6952455 --41.335297 32.196545 -0.69521755 --41.006645 32.346771 -0.69289982 --40.780834 32.576557 -0.69242513 --39.747581 32.152672 -0.67747164 --37.055691 30.353209 -0.63245755 --38.616573 32.029678 -0.66416568 --38.211811 32.091755 -0.66038191 --37.963142 32.282215 -0.65944648 --37.584763 32.359924 -0.65613741 --37.00185 32.255501 -0.64903069 --0 0 -0 --36.480213 32.597214 -0.64672691 --21.780056 19.703651 -0.37371042 --0 0 -0 --34.516834 32.004776 -0.62088293 --34.284813 32.183117 -0.62021273 --33.859825 32.177284 -0.61584258 --33.233727 31.972662 -0.60754901 --33.012566 32.15226 -0.60707432 --32.673679 32.215214 -0.6043098 --14.499795 14.473185 -0.24967043 --14.414233 14.565434 -0.24974024 --31.885046 32.616692 -0.60051209 --31.553038 32.675777 -0.59787327 --28.968853 30.37042 -0.54966182 --28.792929 30.559242 -0.54988521 --31.195564 33.518921 -0.60298342 --29.858515 32.47966 -0.57965261 --29.610935 32.609699 -0.57866126 --29.116529 32.463257 -0.57251793 --28.730473 32.430992 -0.56859457 --28.379496 32.433594 -0.56538326 --28.136147 32.556427 -0.56444776 --0 0 -0 --27.457382 32.570522 -0.55844402 --0 0 -0 --0 0 -0 --0 0 -0 --15.792456 19.694794 -0.31610247 --24.13438 30.478991 -0.50646287 --0 0 -0 --0 0 -0 --24.577986 32.241261 -0.52969593 --0 0 -0 --0 0 -0 --23.842556 32.500351 -0.52644271 --0 0 -0 --0 0 -0 --0 0 -0 --36.490772 52.389946 -0.85511243 --0 0 -0 --22.287708 32.85117 -0.5179258 --22.017294 32.885109 -0.51620847 --22.132584 33.500122 -0.52425069 --20.203802 30.992567 -0.48019999 --20.020287 31.126884 -0.48038149 --0 0 -0 --30.335291 48.460873 -0.76192886 --30.02949 48.633331 -0.76171941 --29.742477 48.836315 -0.76204056 --8.7100029 14.501678 -0.19981147 --8.6020041 14.523017 -0.19929488 --8.5354242 14.614378 -0.19992317 --19.023228 33.034416 -0.49589348 --20.306108 35.76783 -0.53791964 --0 0 -0 --19.908636 36.092247 -0.53916228 --12.601949 23.18149 -0.33203334 --17.943346 33.494873 -0.4941901 --12.24558 23.199982 -0.32991108 --12.094232 23.257826 -0.32964578 --11.949472 23.328037 -0.32958993 --9.9333248 19.689009 -0.27153519 --9.80165 19.728098 -0.27120012 --23.849833 48.75042 -0.72142458 --14.953458 31.047215 -0.44479188 --17.591145 37.104191 -0.53698415 --17.379635 37.246769 -0.53752869 --37.055695 80.702591 -1.2036085 --0 0 -0 --15.262177 34.34491 -0.48839578 --0 0 -0 --14.841537 34.534206 -0.48846561 --0 0 -0 --0 0 -0 --14.574777 35.711567 -0.50219041 --14.043517 35.022606 -0.49049011 --13.488659 34.245697 -0.47754717 --20.591818 53.234615 -0.76061642 --13.072721 34.422668 -0.47775662 --19.914644 53.42334 -0.75972283 --19.571699 53.504147 -0.75912249 --0 0 -0 --11.068791 31.450817 -0.42916822 --10.942142 31.710964 -0.43201649 --0 0 -0 --10.349297 31.230658 -0.42301089 --10.263671 31.620733 -0.42781389 --11.190683 35.210861 -0.47950187 --23.106415 74.27739 -1.0498011 --10.74756 35.312057 -0.4790132 --10.406304 34.959499 -0.47292569 --10.575209 36.340878 -0.49209577 --10.342727 36.372379 -0.49162105 --10.219435 36.795479 -0.49684289 --0 0 -0 --0 0 -0 --0 0 -0 --3.6376059 14.466204 -0.17188711 --3.5463955 14.478539 -0.17174751 --9.0678511 38.025951 -0.50946474 --0 0 -0 --0 0 -0 --8.8485365 40.386997 -0.54092151 --0 0 -0 --0 0 -0 --3.9484355 19.755316 -0.24490932 --3.8292344 19.789968 -0.2450629 --9.612524 51.363159 -0.69326288 --8.0110731 44.308216 -0.59233028 --7.2732859 41.68713 -0.55449277 --4.6734653 27.79306 -0.35713732 --4.5154643 27.899191 -0.35824034 --4.9877734 32.063202 -0.41669998 --4.7921247 32.101112 -0.41681167 --6.0059838 41.994553 -0.55595875 --5.7513137 42.053398 -0.5562799 --5.5001588 42.141438 -0.55703384 --0 0 -0 --3.5777307 30.306574 -0.38972506 --4.8382411 43.261044 -0.57144284 --0 0 -0 --0 0 -0 --3.7412734 40.127033 -0.52634501 --0 0 -0 --3.764312 46.546478 -0.61567503 --0 0 -0 --2.5537474 37.264954 -0.48517051 --1.7052749 27.344204 -0.34616306 --1.5317371 27.252323 -0.3447389 --0 0 -0 --2.2853315 52.045769 -0.6910429 --0 0 -0 --0 0 -0 --1.0803896 42.405102 -0.55591691 --0.76139379 39.372795 -0.51348585 --0 0 -0 --0.31952214 45.224461 -0.59510875 --0.042018421 45.21957 -0.59502494 -0.23546521 45.222973 -0.59508079 -0.38545442 33.972496 -0.43800628 -0.59421289 33.987488 -0.4382576 -1.0260112 43.439644 -0.5703398 -1.2923839 43.427536 -0.57027 -1.5577859 43.389809 -0.56986511 -1.8205476 43.297516 -0.56872022 -1.4806128 30.718336 -0.3930341 -1.6692318 30.711668 -0.39307597 -1.7003577 28.100855 -0.3567045 -1.8700228 28.048988 -0.35613206 -3.0958364 42.507256 -0.55872327 -3.3502197 42.406719 -0.55759233 -3.6113777 42.39732 -0.55775988 -3.8641775 42.294701 -0.55664295 -0 0 -0 -4.3917809 42.329628 -0.55784369 -2.1894791 19.910019 -0.24328971 -4.5406599 39.085293 -0.51303905 -4.778089 39.037838 -0.51277375 -5.0051579 38.911587 -0.51141942 -5.2344661 38.81078 -0.51044208 -5.4741826 38.78981 -0.51060963 -4.9459724 33.557156 -0.43723837 -5.1533008 33.53606 -0.43737799 -4.745945 29.6709 -0.3831768 -4.903481 29.494253 -0.38109642 -5.1263576 29.706989 -0.38454509 -7.7336407 43.232445 -0.57686019 -8.0107832 43.249069 -0.57778168 -8.3679981 43.679321 -0.58460915 -8.6793423 43.84687 -0.58773673 -8.9576263 43.838833 -0.58839291 -3.0680475 14.557763 -0.1713426 -3.1505251 14.507396 -0.1708958 -10.268962 45.929432 -0.62077123 -7.1711078 31.1737 -0.41026342 -10.233033 43.268055 -0.5844416 -7.5505199 31.072664 -0.41010985 -9.5009565 38.079815 -0.51162887 -3.447268 13.463312 -0.15765966 -3.4978168 13.32005 -0.15590042 -0 0 -0 -0 0 -0 -0 0 -0 -9.9156771 34.311474 -0.46231443 -0 0 -0 -10.35161 34.238895 -0.4630684 -15.808257 51.152779 -0.71120423 -11.89915 37.682037 -0.51538467 -12.129831 37.607365 -0.51537073 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -8.0335274 19.788385 -0.26181751 -8.1536503 19.735949 -0.26177564 -0 0 -0 -0 0 -0 -0 0 -0 -24.606321 55.650841 -0.81325382 -24.950195 55.505196 -0.81335157 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -35.965126 71.616753 -1.0826402 -0 0 -0 -36.449173 70.41256 -1.0707304 -0 0 -0 -33.416451 62.658245 -0.95517939 -0 0 -0 -0 0 -0 -0 0 -0 -37.453468 66.258659 -1.0263865 -37.849869 66.011124 -1.0261213 -26.90773 46.267288 -0.71096689 -0 0 -0 -30.450312 50.91074 -0.79194754 -26.151587 43.120625 -0.66779584 -30.40029 49.439571 -0.77402014 -29.621357 47.516853 -0.74546742 -20.045488 31.720329 -0.48755807 -30.551718 47.695381 -0.75451493 -20.562279 31.670713 -0.49086708 -20.776556 31.574856 -0.4913837 -20.929964 31.386881 -0.49037841 -30.143255 44.60815 -0.71536499 -30.372902 44.358829 -0.7142899 -13.874165 19.998121 -0.30346671 -13.99661 19.912615 -0.30346671 -30.287006 42.532215 -0.69269043 -30.513481 42.298542 -0.69188058 -30.704012 42.016869 -0.69026101 -30.877365 41.714363 -0.68829232 -31.06736 41.436913 -0.68677044 -31.255718 41.159504 -0.6852625 -29.931307 38.917282 -0.64915633 -31.590101 40.556705 -0.6814369 -0 0 -0 -31.844526 39.864433 -0.6760475 -32.002377 39.561783 -0.67413467 -32.228046 39.344563 -0.67377168 -31.802427 38.342583 -0.65919513 -32.133553 38.261581 -0.66128945 -32.801701 38.574055 -0.6706441 -33.039726 38.374336 -0.67068601 -33.273251 38.169376 -0.67065811 -31.574814 35.775421 -0.62988853 -33.743137 37.762665 -0.67074186 -33.964149 37.543785 -0.67053241 -34.181042 37.320667 -0.67026716 -34.398518 37.098503 -0.67004377 -0 0 -0 -31.681355 33.337952 -0.60578978 -34.080074 35.424297 -0.64999408 -35.247673 36.190857 -0.66902453 -19.558523 19.836639 -0.35258564 -19.709538 19.745981 -0.35317206 -35.990299 35.617519 -0.6706441 -36.298256 35.484089 -0.67240334 -36.746189 35.483658 -0.67688525 -34.137115 32.561787 -0.62234896 -37.267647 35.113712 -0.67858863 -37.497768 34.898685 -0.67888182 -37.876823 34.82021 -0.68202329 -38.08902 34.586472 -0.68200934 -38.412922 34.452923 -0.68411762 -17.892511 15.850657 -0.2973792 -17.905905 15.667483 -0.29582939 -17.488024 15.113377 -0.28634909 -17.570541 14.997349 -0.28616756 -17.968792 15.147695 -0.29176641 -18.135937 15.099214 -0.29312074 -17.820446 14.65234 -0.28574869 -18.100967 14.697775 -0.28918341 -18.165068 14.56579 -0.28872263 -18.831833 14.911537 -0.29901278 -19.423946 15.187426 -0.30789271 -18.521116 14.299235 -0.29032829 -25.745344 19.625952 -0.41563886 -20.567007 15.47974 -0.32304168 -18.915209 14.055498 -0.29265997 -19.022058 13.95455 -0.29302299 -19.104895 13.835811 -0.29298112 -21.325449 15.245398 -0.32964578 -20.117983 14.196443 -0.30741802 -20.323683 14.155601 -0.30944252 -20.67795 14.214726 -0.31398022 -20.634047 13.998882 -0.31177419 -20.731186 13.879799 -0.31196967 -21.238932 14.031786 -0.31904849 -21.11606 13.765233 -0.3155719 -21.281698 13.687877 -0.31692624 -21.539204 13.667399 -0.31980246 -21.592148 13.51588 -0.31929982 -20.178152 12.459071 -0.29474035 -31.95299 19.459969 -0.48600826 -20.255808 12.166238 -0.29353958 -20.252651 11.995859 -0.292283 -20.236078 11.818918 -0.29083094 -20.066465 11.55531 -0.28693548 -20.071775 11.394942 -0.28588831 -20.093325 11.244712 -0.2851204 -20.118166 11.097062 -0.28442231 -20.141954 10.949532 -0.28372419 -20.130316 10.783713 -0.28248155 -20.166924 10.644589 -0.28202081 -20.089918 10.446836 -0.27978685 -20.135841 10.314252 -0.27950761 -20.210356 10.196362 -0.2796891 -20.448944 10.15981 -0.28243965 -20.714785 10.133894 -0.28560907 -20.98197 10.105528 -0.28879246 -21.369745 10.131233 -0.29383281 -21.5937 10.075603 -0.29633203 -23.084484 10.599238 -0.31829455 -22.320776 10.083198 -0.30560291 -22.552179 10.021577 -0.30819988 -22.907352 10.011554 -0.31268173 -23.554451 10.122701 -0.32158962 -23.755199 10.036748 -0.32369789 -24.308525 10.095212 -0.33113974 -24.859741 10.145744 -0.33852574 -25.205515 10.106895 -0.34279817 -0 0 -0 -26.016808 10.063407 -0.35311621 -0 0 -0 -0 0 -0 -0 0 -0 -33.928082 12.175149 -0.4669359 -33.912544 11.935205 -0.46560952 -33.890617 11.69428 -0.46421328 -33.88596 11.460483 -0.46309632 -0 0 -0 -33.871876 10.994392 -0.46086237 -33.885334 10.769391 -0.46008047 -33.921181 10.552064 -0.45964766 -33.950851 10.333247 -0.45914501 -34.0462 10.134434 -0.45961973 -34.578178 10.062243 -0.46646121 -35.838596 10.190936 -0.48387203 -0 0 -0 -0 0 -0 -0 0 -0 -39.993279 10.318583 -0.54033512 -0 0 -0 -0 0 -0 -0 0 -0 -59.403427 13.781195 -0.8151108 -0 0 -0 -54.501759 11.941136 -0.74268895 -54.483047 11.587151 -0.74139047 -54.60894 11.264145 -0.74218637 -54.622116 10.917883 -0.74140447 -54.616417 10.568655 -0.74038523 -54.659595 10.229473 -0.74009204 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -17.182083 0.64859176 -0.20369297 -17.200729 0.54362643 -0.20390239 -0 0 -0 -17.33507 0.33500129 -0.20570353 -0 0 -0 -0 0 -0 -0 0 -0 -17.286076 -0.090253249 -0.20497748 -17.287195 -0.19633958 -0.20500541 -17.290665 -0.30249545 -0.20507522 -17.294481 -0.4087249 -0.20515899 -17.222685 -0.51278245 -0.2041956 -17.244196 -0.6193459 -0.20454466 -17.220091 -0.72430271 -0.20426542 -17.122438 -0.82547385 -0.20296693 -17.104073 -0.92981428 -0.20278543 -17.298658 -1.0468814 -0.20559183 -17.328823 -1.1554649 -0.20610842 -17.337364 -1.2629328 -0.20633182 -17.430962 -1.3773205 -0.20775597 -17.419193 -1.4839944 -0.20771408 -17.439632 -1.5935776 -0.20813294 -0 -0 -0 -27.478786 -2.8511193 -0.34936041 -27.435928 -3.0169404 -0.34901133 -27.412928 -3.1847658 -0.34895548 -27.405771 -3.3544874 -0.34913701 -27.401533 -3.5247514 -0.34937435 -25.402481 -3.4262099 -0.32151979 -27.388889 -3.8653555 -0.3498351 -27.386419 -4.0365453 -0.35014227 -27.370029 -4.2058759 -0.35026795 -27.431581 -4.3877907 -0.35151058 -0 -0 -0 -0 -0 -0 -19.289841 -3.4508917 -0.23723012 -19.242741 -3.5644524 -0.2368671 -15.614437 -2.9916468 -0.18559799 -15.466311 -3.0617709 -0.18375498 -15.315959 -3.1297903 -0.18188404 -15.272006 -3.218554 -0.18153499 -15.212885 -3.3037138 -0.1809765 -15.24307 -3.4083407 -0.18170254 -15.26572 -3.511893 -0.18233083 -15.310052 -3.6211438 -0.18328026 -11.128964 -2.704555 -0.12352213 -11.001561 -2.7451968 -0.12193044 -11.031005 -2.8245533 -0.12260062 -10.997993 -2.8881221 -0.12237723 -13.590897 -3.6582198 -0.16013096 -31.665052 -8.7313452 -0.42225695 -9.0241766 -2.5483158 -0.09453664 -7.9075255 -2.2855191 -0.078535981 -7.9163656 -2.3407993 -0.078871071 -7.8693118 -2.3794911 -0.078396358 -7.8755808 -2.4342265 -0.07870353 -7.8614497 -2.4828053 -0.078717493 -7.9640698 -2.5690544 -0.080448799 -7.9348602 -2.6134942 -0.080253333 -37.182716 -12.498667 -0.51134962 -37.111 -12.728527 -0.51143336 -37.040695 -12.958967 -0.51155907 -0 -0 -0 -10.855143 -3.9482262 -0.12489042 -7.2116761 -2.6733873 -0.070996404 -7.2624874 -2.743021 -0.072001681 -11.075533 -4.2608042 -0.12930247 -7.0914197 -2.7783248 -0.069949239 -7.160614 -2.8562329 -0.071247727 -7.1707478 -2.9113989 -0.071666591 -33.708141 -13.925773 -0.47286984 -9.1098719 -3.8294654 -0.10158754 -9.098156 -3.8904004 -0.10176905 -19.596277 -8.5215244 -0.26198506 -8.9765692 -3.9694085 -0.10065208 -5.6515088 -2.540812 -0.050122947 -9.0154009 -4.1195726 -0.10200641 -4.8508501 -2.2528734 -0.038283017 -4.8061891 -2.2680886 -0.037808303 -28.885622 -13.846511 -0.41089171 -4.7788935 -2.3273349 -0.037822265 -28.741314 -14.213679 -0.41132456 -28.574926 -14.350277 -0.41009587 -4.3281546 -2.2073333 -0.031441547 -5.2673368 -2.7270651 -0.046422966 -5.3823919 -2.8286335 -0.048503332 -4.7852783 -2.5524721 -0.039330181 -4.6683984 -2.5270543 -0.037724528 -4.6037245 -2.5286977 -0.036942646 -4.471951 -2.4921691 -0.035085678 -4.447 -2.5141494 -0.034932092 -3.6247811 -2.0788383 -0.021947265 -4.3821025 -2.5489271 -0.03438757 -4.3577676 -2.5706875 -0.034247946 -3.556726 -2.1277561 -0.021472551 -3.5478783 -2.1521323 -0.021542363 -3.5490861 -2.1827645 -0.02177972 -3.5551424 -2.2166662 -0.022100849 -3.605715 -2.2790341 -0.023161976 -3.523463 -2.2574298 -0.022031039 -3.4952881 -2.2697506 -0.021793682 -3.487978 -2.2955515 -0.021905379 -4.0594912 -2.7074442 -0.031734753 -4.0618572 -2.745178 -0.032055885 -21.858358 -14.966868 -0.33351332 -21.762827 -15.098428 -0.33345747 -4.0916262 -2.8764019 -0.033438139 -21.172728 -15.077257 -0.32654619 -21.017376 -15.161843 -0.3254711 -20.857748 -15.242143 -0.32432622 -20.223753 -14.970072 -0.31494361 -4.735888 -3.5511816 -0.046255421 -4.7418804 -3.6013381 -0.046744097 -4.5675144 -3.5133266 -0.044063359 -4.5821581 -3.5695503 -0.044705618 -4.5562444 -3.5945022 -0.04463581 -4.550509 -3.6354966 -0.044929013 -4.5133457 -3.6514015 -0.044663731 -3.8936913 -3.1898823 -0.033884931 -3.8548045 -3.1977549 -0.033535875 -4.1988168 -3.5267963 -0.040167909 -4.1542454 -3.5330615 -0.039749045 -3.4846148 -3.000684 -0.027811382 -3.4616148 -3.0180666 -0.027727608 -3.1019249 -2.7381999 -0.021374816 -2.9501097 -2.6365926 -0.018847661 -2.9220123 -2.6439118 -0.018624267 -2.9005728 -2.6570637 -0.018526532 -2.89448 -2.6843293 -0.018722001 -3.8774626 -3.6402597 -0.037864152 -3.1947396 -3.0364919 -0.025144605 -3.3828552 -3.2549939 -0.029151751 -2.9953492 -2.9178019 -0.021989152 -2.9261241 -2.8855808 -0.020983875 -2.857409 -2.8526218 -0.019978598 -2.8356316 -2.8658366 -0.019894825 -2.808208 -2.8731716 -0.019699354 -2.8183088 -2.9191196 -0.020257842 -3.9501383 -4.1417575 -0.043518834 -3.9369934 -4.1790166 -0.043770153 -4.0011983 -4.2997112 -0.045613162 -4.0234642 -4.3771815 -0.046618439 -3.2880442 -3.6215644 -0.031902298 -3.267096 -3.6431601 -0.031930223 -3.9203322 -4.4257998 -0.046157688 -3.9391937 -4.5024462 -0.04713504 -3.8716102 -4.4803839 -0.046283346 -3.8635211 -4.5268712 -0.04670221 -3.4070885 -4.0421071 -0.03741736 -3.3879805 -4.0698524 -0.037543021 -12.573801 -15.292579 -0.24005048 -12.411657 -15.28561 -0.23854257 -12.235689 -15.25929 -0.23671353 -12.107689 -15.290964 -0.2359456 -3.560261 -4.5538936 -0.044314679 -3.5463064 -4.5938568 -0.04463581 -3.5077469 -4.6020117 -0.044398453 -2.9965935 -3.981935 -0.033186819 -2.7424924 -3.6912572 -0.027811382 -2.9427717 -4.0119581 -0.033075124 -2.9310024 -4.0477552 -0.033382293 -2.9061105 -4.0656633 -0.033382293 -1.5251374 -2.1619177 -0.00054324296 -1.508986 -2.1671326 -0.00047343204 -1.5041571 -2.1887105 -0.00068286475 -1.4963129 -2.2061729 -0.00082248659 -1.4760723 -2.2053423 -0.00065494038 -1.454245 -2.2018437 -0.0004455077 -1.4461679 -2.2191017 -0.00058512948 -1.4211655 -2.2102733 -0.0002919237 -9.4393568 -14.876232 -0.20961294 -9.3229647 -14.894037 -0.2089567 -1.3902222 -2.2522225 -0.00055720512 -1.3706555 -2.2513165 -0.00040362115 -1.3578457 -2.2613986 -0.00043154552 -1.3617799 -2.2997983 -0.00092022185 -1.3612591 -2.331423 -0.0012972007 -1.5320542 -2.661201 -0.0064771697 -1.3409388 -2.3627343 -0.0015345578 -1.4514264 -2.5942912 -0.0051088762 -1.5093734 -2.7371044 -0.0072450894 -1.1749617 -2.1621258 0.0020397604 -7.6102057 -14.206475 -0.18864174 -1.1548753 -2.1887615 0.0018442898 -1.1248157 -2.1638701 0.0023469285 -7.2968197 -14.245364 -0.18709193 -1.4603028 -2.8952532 -0.008878665 -1.4438452 -2.9068453 -0.0089205513 -7.0918155 -14.496719 -0.1889489 -7.0022979 -14.53906 -0.18893494 -6.9189529 -14.5944 -0.18913041 -1.1103537 -2.3805208 -0.00027796152 -1.0961435 -2.3881977 -0.0002919237 -1.0843507 -2.4012573 -0.00038965896 -1.0691904 -2.4069517 -0.00037569678 -1.0499966 -2.4033885 -0.00022211281 -1.037204 -2.4143791 -0.0002919237 -1.3305939 -3.150177 -0.01134997 -1.3031859 -3.13889 -0.011056765 -1.2884357 -3.1579363 -0.011224311 -5.8680863 -14.634833 -0.18376894 -5.7679176 -14.644514 -0.183378 -5.6783128 -14.680562 -0.18339196 -1.2662839 -3.3353624 -0.013416373 -1.0746554 -2.8839784 -0.006574905 -5.4047251 -14.776021 -0.18329422 -5.264987 -14.672441 -0.18126971 -1.1827208 -3.3616612 -0.013360525 -5.0972576 -14.772809 -0.18181422 -5.0126042 -14.821803 -0.18207951 -4.9115 -14.821909 -0.18163273 -4.805335 -14.805164 -0.18094857 -1.1063043 -3.4821227 -0.014617121 -1.0142273 -3.26161 -0.011294122 -0.97701728 -3.211334 -0.010470353 -0.96414119 -3.2402685 -0.010805446 -0.96435744 -3.3152487 -0.011810723 -0.93442494 -3.2874415 -0.011322047 -0.89550459 -3.225673 -0.010344693 -0.85685486 -3.161623 -0.0093394164 -3.9698379 -15.006261 -0.1803482 -3.8564525 -14.948041 -0.17916141 -0.86045659 -3.4231653 -0.012885811 -0.83800876 -3.4225533 -0.012802037 -3.3867459 -14.203376 -0.16748904 -3.4100339 -14.700191 -0.17431654 -3.3774099 -14.976393 -0.17797463 -3.291445 -15.024183 -0.17836557 -0.65670508 -3.0896685 -0.0077058417 -1.7255254 -8.3670902 -0.082892179 -1.6776812 -8.3951702 -0.083143502 -1.6280376 -8.415123 -0.083283126 -0.54812491 -2.930892 -0.0052345353 -0.5288856 -2.9273126 -0.0051368005 -0.51091403 -2.9305027 -0.0051368005 -2.4953914 -14.841205 -0.1737441 -2.4098725 -14.890783 -0.17423277 -0.44351378 -2.8534529 -0.0039220904 -0.4227488 -2.8343637 -0.0036149225 -0.4059158 -2.8408637 -0.0036707714 -0.38983193 -2.8532076 -0.0038103932 -0.36752924 -2.8188605 -0.0032937925 -0.35355604 -2.8478539 -0.0036707714 -1.7933547 -15.193029 -0.17722067 -1.6830933 -15.05171 -0.17508446 -0.43658367 -4.1366158 -0.021681985 -1.4899479 -14.987651 -0.17391163 -1.4035274 -15.056246 -0.17474937 -1.2981091 -14.915154 -0.17265505 -1.2021334 -14.868023 -0.17188711 -1.0939724 -14.648772 -0.16871771 -1.0234867 -14.938517 -0.17268297 -0.93622625 -15.01537 -0.17367429 -0.83273846 -14.819171 -0.17085391 -0.2100966 -4.20434 -0.022380093 -0.10515164 -2.4034629 0.0028076803 -0.094817989 -2.520968 0.0011741052 -0.086965695 -2.7623584 -0.0021907801 -0.06998907 -2.7618403 -0.002176818 -0.052828647 -2.7512209 -0.002023234 -0.036263477 -2.7754889 -0.0023583265 -0.019317593 -2.7876577 -0.0025258726 -0.0022143589 -2.7897236 -0.0025537969 --0.078268327 -14.980331 -0.17278069 --0.17100038 -15.051558 -0.17378597 --0.26471421 -15.128205 -0.17487502 --0.36119232 -15.281239 -0.17703916 --0.45625773 -15.322711 -0.17765351 --0.092255756 -2.5590844 0.00064354239 --0.10997211 -2.6064231 -2.6642283e-05 --0.74568099 -15.466521 -0.17981763 --0.84235805 -15.494603 -0.18027839 --0.1556952 -2.5670285 0.00048995839 --0.18361303 -2.7486019 -0.0020651205 --0.20526771 -2.8132427 -0.0029866246 --0.2209508 -2.7919943 -0.0027073808 --0.23858711 -2.7965639 -0.002791154 --0.2525582 -2.7601957 -0.0023024776 --0.26978093 -2.7615798 -0.0023443643 --0.2870301 -2.762856 -0.0023862508 --0.30288449 -2.7511036 -0.002246629 --0.32022074 -2.7531664 -0.0023024776 --0.33747223 -2.7541273 -0.0023443643 --0.355768 -2.7629137 -0.0024979482 --2.1713486 -16.097631 -0.19041494 --2.2703605 -16.085985 -0.19044286 --2.3808281 -16.151878 -0.1915738 --2.5025158 -16.284222 -0.19365416 --2.6306539 -16.445297 -0.19615339 --2.7633214 -16.620201 -0.19886205 --2.864059 -16.596035 -0.19876432 --2.9609065 -16.550591 -0.19837338 --3.0685947 -16.565538 -0.19884808 --3.1959548 -16.680939 -0.20076092 --3.3137791 -16.739485 -0.20187788 --3.4260361 -16.76586 -0.20254807 --3.553792 -16.862911 -0.20423749 --3.4660263 -15.960391 -0.19165757 --3.5865812 -16.040308 -0.19310963 --3.6291223 -15.77536 -0.18963306 --3.7573767 -15.886105 -0.19154587 --3.8446293 -15.820971 -0.19094549 --4.2742047 -17.130089 -0.21012953 --4.4422231 -17.349579 -0.21367593 --4.5397067 -17.288147 -0.21318725 --4.6534953 -17.288933 -0.21360612 --4.7900553 -17.370907 -0.21521176 --4.9136677 -17.401812 -0.21609138 --5.0919695 -17.619169 -0.21969363 --5.2402368 -17.723753 -0.22167626 --5.4249907 -17.942989 -0.22534831 --5.6149907 -18.168257 -0.22913206 --5.4921217 -17.391642 -0.21826948 --5.8381343 -18.099888 -0.22915998 --5.9443917 -18.049479 -0.22895055 --6.005012 -17.863861 -0.22675849 --6.0953703 -17.770876 -0.22593471 --6.1230693 -17.500963 -0.22250003 --6.5569043 -18.378462 -0.23607126 --6.6736503 -18.349159 -0.23623881 --6.7982755 -18.340681 -0.23672749 --7.2317896 -19.148922 -0.24941911 --7.0318065 -18.279205 -0.23707654 --7.133986 -18.210577 -0.23669957 --7.4945054 -18.79059 -0.24608214 --7.6499043 -18.843384 -0.2475761 --7.785615 -18.84507 -0.24831609 --8.0223694 -19.085463 -0.25268626 --8.210474 -19.20229 -0.25521341 --8.3269463 -19.148798 -0.25517154 --8.409915 -19.019613 -0.25398475 --8.5285091 -18.972212 -0.25405455 --8.6829891 -19.003197 -0.25533909 --8.8865967 -19.137289 -0.25822926 --9.4032116 -19.928829 -0.27129784 --9.3476791 -19.500172 -0.26555938 --1.6637357 -3.4160125 -0.0166556 --1.670481 -3.3770583 -0.016208809 --1.6911708 -3.3667448 -0.016208809 --1.7086174 -3.350069 -0.016111074 --1.7410922 -3.3626099 -0.016474091 --1.7658778 -3.3598297 -0.01659975 --1.8005759 -3.3753996 -0.017018616 --4.5445132 -8.3960629 -0.096910208 --4.6031647 -8.3811665 -0.097119644 --11.975682 -21.492325 -0.30715272 --12.16736 -21.524635 -0.3088561 --12.367343 -21.568411 -0.31076893 --12.72264 -21.875896 -0.31696814 --12.905395 -21.8801 -0.3183085 --13.054289 -21.825388 -0.3187134 --14.650661 -24.156725 -0.35810071 --12.95033 -21.060501 -0.30882818 --15.627822 -25.06888 -0.37609798 --13.861602 -21.934608 -0.3259179 --0 -0 -0 --17.168503 -26.443382 -0.40384081 --14.009623 -21.290672 -0.31948134 --17.655912 -26.476952 -0.40797362 --17.812441 -26.359835 -0.40783399 --17.855782 -26.07761 -0.4049159 --18.661783 -26.899204 -0.42074901 --18.861557 -26.834091 -0.42160073 --18.939434 -26.596493 -0.41952035 --19.211077 -26.630615 -0.42211732 --19.449039 -26.614767 -0.4238905 --19.672657 -26.576904 -0.42531466 --19.721996 -26.304491 -0.42267582 --19.845535 -26.133612 -0.42181015 --0 -0 -0 --0 -0 -0 --20.349216 -25.796865 -0.42239657 --20.553925 -25.730112 -0.42344373 --20.767382 -25.672701 -0.42468634 --20.72303 -25.298809 -0.42024639 --20.199953 -24.353834 -0.40541855 --0 -0 -0 --0 -0 -0 --20.560644 -23.880144 -0.40361744 --0 -0 -0 --24.229856 -27.453175 -0.47489434 --22.685625 -25.387766 -0.43901154 --0 -0 -0 --23.996311 -26.200262 -0.45970351 --24.162739 -26.05913 -0.45982915 --0 -0 -0 --24.474506 -25.754129 -0.45970351 --23.594307 -24.524759 -0.43880212 --0 -0 -0 --0 -0 -0 --0 -0 -0 --30.393509 -30.078613 -0.56069195 --30.488119 -29.804184 -0.55894667 --30.697754 -29.642946 -0.55947727 --0 -0 -0 --31.739653 -29.905134 -0.57253188 --0 -0 -0 --0 -0 -0 --30.871597 -28.032637 -0.54587811 --0 -0 -0 --31.241716 -27.67688 -0.54640865 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --10.286439 -8.5638275 -0.15049706 --10.315622 -8.4814978 -0.15007819 --10.344183 -8.3991337 -0.14965934 --10.444669 -8.3749132 -0.15053895 --34.15469 -27.044994 -0.57193148 --18.819786 -14.715022 -0.29718372 --35.389427 -27.322887 -0.58790427 --0 -0 -0 --0 -0 -0 --0 -0 -0 --35.813892 -26.273451 -0.58382732 --35.763062 -25.900131 -0.58018315 --36.008347 -25.742428 -0.58167714 --36.119053 -25.488138 -0.5808813 --0 -0 -0 --0 -0 -0 --35.956543 -24.394581 -0.57032585 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --38.406502 -24.041409 -0.59629554 --0 -0 -0 --0 -0 -0 --0 -0 -0 --43.010307 -25.475986 -0.66162455 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --16.309479 -8.7368221 -0.22195549 --16.35482 -8.6323833 -0.22182985 --16.375544 -8.5152626 -0.2213272 --16.447063 -8.4246531 -0.22163437 --16.564507 -8.3569069 -0.22266757 --6.9471698 -3.4513202 -0.071917906 --6.9727068 -3.4108253 -0.071987718 --6.9953055 -3.368845 -0.072015643 --7.0257831 -3.3305712 -0.072169229 --6.9953446 -3.2637217 -0.071387343 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --36.240147 -15.57471 -0.51439339 --0 -0 -0 --51.91539 -21.560703 -0.7485531 --0 -0 -0 --0 -0 -0 --39.822113 -15.685162 -0.5612365 --22.210083 -8.5908871 -0.29612261 --22.403526 -8.5080528 -0.29823089 --22.382229 -8.3431845 -0.29714185 --22.531601 -8.2417612 -0.29860786 --0 -0 -0 --0 -0 -0 --0 -0 -0 --46.205154 -15.627079 -0.64468843 --0 -0 -0 --0 -0 -0 --0 -0 -0 --49.58609 -15.425236 -0.68872517 --28.307062 -8.6154394 -0.37676814 --28.361309 -8.4421587 -0.37679607 --28.441378 -8.2763605 -0.37721494 --0 -0 -0 --0 -0 -0 --0 -0 -0 --12.790716 -3.3836639 -0.14834689 --12.808332 -3.3043685 -0.148305 --34.385952 -8.6471071 -0.45869824 --34.335419 -8.410738 -0.45721823 --34.488503 -8.2242556 -0.45868427 --0 -0 -0 --0 -0 -0 --0 -0 -0 --40.241013 -8.5581264 -0.53807324 --40.270245 -8.3064051 -0.53775209 --0 -0 -0 --0 -0 -0 --0 -0 -0 --18.685234 -3.3781159 -0.22874112 --18.663256 -3.2560115 -0.22814074 --0 -0 -0 --52.4828 -8.4946632 -0.70598239 --27.100389 -4.215692 -0.34656796 --26.97345 -4.0265908 -0.34441778 --24.15387 -3.4542692 -0.30430445 --24.173618 -3.3058634 -0.30429047 --24.185516 -3.1564393 -0.30417877 --27.664465 -3.4380307 -0.35286489 --27.835976 -3.2860403 -0.35498714 --27.718483 -3.0998423 -0.35306036 --29.768478 -3.1443121 -0.38158512 --27.775331 -2.7615383 -0.35335359 --25.862312 -2.4111478 -0.32629487 --25.914473 -2.2557096 -0.32682544 --27.721792 -2.2417564 -0.35195735 --29.910749 -2.2341599 -0.38242283 --29.923895 -2.0505888 -0.38242283 --50.764397 -3.1661811 -0.67382753 --56.846699 -3.195549 -0.75863379 --62.719334 -3.1397827 -0.84048009 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --64.695351 13.28217 -1.7159134 --0 0 -0 --0 0 -0 --60.622372 13.613406 -1.6120911 --60.634125 14.0074 -1.6147171 --0 0 -0 --0 0 -0 --0 0 -0 --60.520927 15.555174 -1.6215343 --60.426277 15.92674 -1.6215874 --53.578827 14.47397 -1.4360918 --0 0 -0 --49.878994 14.1334 -1.3390601 --0 0 -0 --46.882305 13.907934 -1.2610209 --64.157372 19.462238 -1.7424393 --47.145401 14.617804 -1.2731698 --43.54982 13.796344 -1.1756076 --43.480515 14.068533 -1.1760584 --43.432289 14.347917 -1.177146 --41.363693 13.946574 -1.1217068 --57.884743 19.913843 -1.5877403 --41.109257 14.424984 -1.1194522 --0 0 -0 --61.903477 22.579121 -1.7118815 --61.061954 22.697639 -1.6920136 --0 0 -0 --51.601479 19.904934 -1.4309988 --58.628738 23.030083 -1.6348503 --33.809036 13.520113 -0.92960638 --56.775127 23.110107 -1.5899684 --35.007427 14.500186 -0.96886468 --32.930805 13.877306 -0.91164833 --45.879795 19.666986 -1.2879711 --54.65691 23.827709 -1.5455642 --54.361629 24.097 -1.5412669 --31.026426 13.981014 -0.8664217 --32.985851 15.108223 -0.92613149 --52.726192 24.542995 -1.5066507 --29.123678 13.773965 -0.81827718 --52.145329 25.055693 -1.4985337 --31.111189 15.183991 -0.88201892 --39.901302 19.778492 -1.1451292 --50.765438 25.553259 -1.4715039 --27.19828 13.899727 -0.77389938 --27.132002 14.07648 -0.77448297 --28.962662 15.252617 -0.83199108 --49.804783 26.621288 -1.461928 --49.33823 26.762417 -1.4528031 --24.909523 13.709434 -0.71787673 --24.591904 13.731882 -0.71079427 --24.434122 13.841126 -0.70856613 --24.320133 13.974355 -0.70769078 --24.187292 14.096134 -0.70625836 --24.101206 14.244788 -0.70628488 --24.044214 14.410904 -0.70723981 --24.036491 14.607489 -0.70975977 --23.997471 14.786164 -0.71135134 --22.563362 14.094189 -0.66933429 --22.321905 14.134496 -0.66448009 --22.192696 14.244195 -0.66315377 --22.130014 14.396453 -0.66394955 --22.010384 14.511608 -0.6629681 --21.959993 14.672492 -0.66421485 --21.891899 14.822093 -0.664931 --21.885443 15.014392 -0.66766322 --20.677435 14.372953 -0.63161451 --20.549625 14.471927 -0.63034123 --20.466137 14.60181 -0.63052696 --20.402081 14.745852 -0.63137579 --35.695366 26.135281 -1.1373307 --35.455647 26.29545 -1.1347311 --35.270454 26.495096 -1.1339619 --35.048351 26.66622 -1.1319989 --34.89278 26.887482 -1.1322907 --34.746845 27.116449 -1.1329539 --34.664509 27.396086 -1.1358187 --34.502003 27.613264 -1.1360309 --34.423557 27.898718 -1.139161 --34.311226 28.158245 -1.1412034 --34.42688 28.608477 -1.1511772 --34.321831 28.879034 -1.1536441 --34.631737 29.504648 -1.1706471 --37.296097 32.171715 -1.2703846 --36.788548 32.129684 -1.2594824 --36.386272 32.17403 -1.2522408 --21.907738 19.611818 -0.74363333 --21.747734 19.710293 -0.74222749 --21.661739 19.875805 -0.74350071 --34.492275 32.0415 -1.2126377 --34.078022 32.04845 -1.2047329 --33.639652 32.027405 -1.1958998 --33.379887 32.172855 -1.1935921 --33.065228 32.263268 -1.1892684 --14.596773 14.417728 -0.50781816 --14.48612 14.485107 -0.50699586 --14.419449 14.596478 -0.50784469 --14.329615 14.68468 -0.50784469 --30.953527 32.11433 -1.1469595 --30.668356 32.211704 -1.1435908 --28.751217 30.571434 -1.0770108 --29.755058 32.030457 -1.1234841 --29.406574 32.047436 -1.1175424 --29.099287 32.105793 -1.1131921 --28.846403 32.22192 -1.1109904 --28.319054 32.026112 -1.097807 --28.024693 32.087837 -1.0938812 --27.843601 32.278114 -1.0945444 --27.539354 32.324318 -1.0902207 --29.042788 34.515881 -1.1603817 --28.823429 34.684975 -1.1600899 --28.598015 34.846497 -1.1595858 --15.899518 19.616882 -0.63344479 --15.752617 19.681292 -0.63233072 --24.18696 30.603188 -0.99846762 --25.042994 32.089184 -1.0435085 --24.643057 31.979349 -1.0347019 --24.404608 32.075062 -1.0328717 --24.167112 32.17065 -1.0310944 --23.907928 32.235626 -1.0283623 --23.678978 32.339775 -1.0269829 --23.473658 32.475548 -1.0266912 --23.237951 32.568512 -1.0250466 --22.978968 32.627121 -1.0223409 --22.482788 32.342316 -1.0086005 --22.135752 32.263687 -1.0016507 --21.814631 32.217621 -0.99584156 --21.525457 32.214554 -0.99149132 --21.288321 32.28677 -0.98960793 --20.168022 30.999825 -0.94475269 --20.538454 31.997068 -0.97231305 --20.327297 32.099686 -0.9715969 --20.028801 32.061871 -0.96653044 --19.811769 32.151821 -0.96552247 --19.593349 32.238609 -0.96446139 --8.732193 14.567242 -0.41407564 --8.5719452 14.500927 -0.41038856 --18.896961 32.422787 -0.95920926 --18.597061 32.363041 -0.95385104 --18.376949 32.43914 -0.95271045 --18.174149 32.545181 -0.95252478 --18.004478 32.711254 -0.95419586 --12.600727 23.229078 -0.66463923 --12.404241 23.205452 -0.66161531 --12.222495 23.206829 -0.65938711 --12.059614 23.242346 -0.65821999 --11.898579 23.280298 -0.65715891 --9.9272137 19.72047 -0.54925162 --9.7931499 19.755037 -0.54848236 --9.7024422 19.877642 -0.55033916 --14.90826 31.025913 -0.87679332 --16.040792 33.9146 -0.9589175 --15.860657 34.073105 -0.96069473 --15.637553 34.139793 -0.95981938 --15.426138 34.231453 -0.95971328 --15.213782 34.320892 -0.95958066 --14.995317 34.396187 -0.95907664 --14.778864 34.475605 -0.95873183 --14.562388 34.554581 -0.95841348 --14.340528 34.620193 -0.95775038 --14.133486 34.721424 -0.95814824 --13.920916 34.809349 -0.95820129 --13.765907 35.043911 -0.96247196 --13.215697 34.259399 -0.93777639 --13.028248 34.400612 -0.93950051 --13.216396 35.554661 -0.96992576 --13.018539 35.691437 -0.97151726 --12.785152 35.731113 -0.97040319 --12.559712 35.791908 -0.96992576 --10.871369 31.599407 -0.85013479 --10.65428 31.597317 -0.84822494 --10.453931 31.64311 -0.8476944 --11.63201 35.948597 -0.9659999 --11.429327 36.076469 -0.96759146 --11.198574 36.116322 -0.96676916 --10.771323 35.507076 -0.94798881 --0 0 -0 --8.723959 30.081451 -0.79451001 --8.4907122 29.963215 -0.78978842 --8.2915058 29.959833 -0.78827643 --8.1093445 30.016901 -0.7884621 --7.9331636 30.097025 -0.78931093 --3.7042887 14.409198 -0.35818559 --3.63305 14.500504 -0.36006895 --3.5387959 14.501157 -0.35948536 --3.4686902 14.602351 -0.36166048 --7.0615559 30.565815 -0.79583633 --6.8638005 30.563702 -0.7946161 --6.6750708 30.600359 -0.79448348 --6.4820094 30.616291 -0.79382032 --4.0444984 19.69693 -0.49696907 --3.9153743 19.680197 -0.49585497 --3.7930331 19.695999 -0.49564278 --3.69754 19.855505 -0.49932986 --5.4345427 30.215317 -0.77803743 --5.2428913 30.212635 -0.7770825 --4.6616459 27.876936 -0.71339381 --4.4906669 27.906002 -0.71342033 --4.6680183 30.188437 -0.77397895 --4.4794717 30.194756 -0.77339542 --4.28793 30.178125 -0.77222824 --4.0982409 30.171179 -0.77135289 --3.9072573 30.151146 -0.77015924 --3.7177753 30.138836 -0.76920432 --3.531498 30.15016 -0.76891249 --3.3506198 30.209015 -0.76992053 --3.1701927 30.276728 -0.77119374 --2.9896483 30.349331 -0.77262616 --2.8083324 30.420856 -0.77405852 --2.6319959 30.558027 -0.77726817 --2.4485867 30.625418 -0.77864754 --2.2664344 30.718624 -0.78074306 --2.0817475 30.788803 -0.78225505 --1.6808945 27.350714 -0.69052851 --1.714244 31.001675 -0.78729498 --1.5328141 31.19133 -0.79206961 --1.3478341 31.349957 -0.79604852 --1.1587218 31.446545 -0.79840934 --0.96801507 31.527002 -0.80037224 --0.77849704 31.693243 -0.80464292 --0.58554173 31.78038 -0.80684453 --0.39237902 31.934311 -0.81084996 --0.19683588 32.003094 -0.8126272 --0.00046133818 32.166641 -0.81695092 -0.19717415 32.209023 -0.81809151 -0.39636198 32.334152 -0.82146031 -0.59639269 32.420063 -0.82382113 -0.79940784 32.582684 -0.82825094 -1.0027225 32.688076 -0.83119529 -1.2062192 32.761227 -0.8333174 -1.4106941 32.834103 -0.83546597 -1.6185132 32.954628 -0.83891433 -1.6926854 30.629429 -0.77740079 -1.7255114 28.095118 -0.71031684 -2.2733841 33.63736 -0.85801297 -2.4951839 33.832134 -0.86358345 -2.7169094 33.993557 -0.86830503 -2.9516044 34.280014 -0.87639546 -3.1750286 34.403603 -0.88018864 -3.3948858 34.473011 -0.88257599 -2.0792034 19.86743 -0.49346766 -2.2020602 19.863239 -0.49370638 -2.3225017 19.83744 -0.49338809 -4.2190671 34.210651 -0.8780666 -4.411171 34.04731 -0.87440598 -4.5992765 33.867058 -0.87032104 -4.791244 33.727352 -0.8673501 -4.9703746 33.510433 -0.8623367 -5.1797161 33.504002 -0.86299986 -4.7573647 29.570173 -0.75814301 -4.9362416 29.525637 -0.75774515 -6.1814823 35.626949 -0.92289531 -6.4247437 35.726089 -0.92660898 -6.6663427 35.806877 -0.92987162 -6.896131 35.818306 -0.93130404 -7.1621985 36.008659 -0.93761718 -2.994375 14.589606 -0.35861 -3.0600269 14.458492 -0.35555953 -3.1578465 14.481441 -0.35670015 -3.2477386 14.466669 -0.35683277 -8.7363911 37.819347 -0.99337465 -7.4118176 31.2117 -0.81464314 -9.2569427 37.94334 -0.99976736 -9.5082893 37.960491 -1.0018098 -3.4637578 13.480166 -0.33272073 -3.5288243 13.391961 -0.33089045 -3.6484737 13.509024 -0.33471018 -0 0 -0 -0 0 -0 -9.9626637 34.356022 -0.91260326 -12.722 42.884987 -1.1503814 -15.525048 51.179214 -1.3825625 -15.84974 51.118317 -1.383544 -4.5430851 14.343377 -0.36264196 -4.6387029 14.339008 -0.36330509 -4.7328696 14.32926 -0.3638356 -4.831244 14.331209 -0.36471096 -4.9363241 14.351395 -0.36611685 -5.0196557 14.30763 -0.36574548 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -7.9572086 19.899462 -0.53208935 -8.0539074 19.788229 -0.53031212 -8.1977463 19.792927 -0.53187716 -8.2941923 19.683298 -0.5301795 -0 0 -0 -0 0 -0 -24.640669 55.588055 -1.5768647 -24.978413 55.429436 -1.576679 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -25.159445 51.548622 -1.4854831 -25.473936 51.390591 -1.4854034 -17.776485 35.316479 -1.0125529 -17.45647 34.15728 -0.98127884 -17.127985 33.013142 -0.95029658 -17.229141 32.715492 -0.94454044 -17.32588 32.415207 -0.93870479 -17.147419 31.613243 -0.91772276 -17.333359 31.493422 -0.91729838 -17.487282 31.31665 -0.91517627 -17.617514 31.10004 -0.91186059 -17.58288 30.599594 -0.89987087 -17.742117 30.442766 -0.89838541 -17.862448 30.221457 -0.89493704 -18.029045 30.08042 -0.89398211 -18.188354 29.928225 -0.89270884 -18.364832 29.804996 -0.89236403 -18.525122 29.656143 -0.89124995 -18.713692 29.552896 -0.89159477 -18.795853 29.283566 -0.88674057 -18.902128 29.055405 -0.88318604 -19.074551 28.930531 -0.8829208 -19.258371 28.822922 -0.88323915 -19.424774 28.689312 -0.88276166 -13.779795 20.086023 -0.60975718 -13.893081 19.987141 -0.60930622 -14.01776 19.904787 -0.60941231 -14.136146 19.813519 -0.60925317 -20.592575 28.490711 -0.89621025 -20.799486 28.408182 -0.8976692 -21.029976 28.3563 -0.90018916 -21.263613 28.306652 -0.90284175 -21.536171 28.306118 -0.90719199 -21.821114 28.318344 -0.91204625 -22.334574 28.619715 -0.92671508 -22.607697 28.606047 -0.93090618 -22.910851 28.626781 -0.93634397 -23.204403 28.631666 -0.94133085 -23.545803 28.691202 -0.94828063 -23.965471 28.839876 -0.95841348 -24.436758 29.042601 -0.97056234 -24.589216 28.862436 -0.96952784 -24.809597 28.76173 -0.97130507 -24.972458 28.593903 -0.97077459 -31.291981 35.388794 -1.2169083 -31.417185 35.094086 -1.2132742 -31.629913 34.898434 -1.2131947 -31.830608 34.689705 -1.2126907 -32.097973 34.553066 -1.2148393 -13.601102 14.463413 -0.49023148 -13.696485 14.386926 -0.49049675 -32.670269 33.895935 -1.2126111 -19.443209 19.927166 -0.70217335 -19.556684 19.798956 -0.70185506 -19.676386 19.677172 -0.70180202 -19.786085 19.545532 -0.70140415 -33.690353 32.873642 -1.2124519 -33.884949 32.660057 -1.2122133 -34.082539 32.449463 -1.2121336 -15.240884 14.334245 -0.51858765 -15.276548 14.192154 -0.51670432 -15.341982 14.078552 -0.51593506 -15.427337 13.983479 -0.51590854 -15.573177 13.942563 -0.51805717 -15.700372 13.883826 -0.51954257 -15.910253 13.896384 -0.52394593 -18.11924 15.63061 -0.59837759 -18.102947 15.423843 -0.59447825 -17.830088 15.003553 -0.5817458 -17.919506 14.891951 -0.58166623 -18.304962 15.023331 -0.59177262 -18.114107 14.681629 -0.5821172 -18.207752 14.57333 -0.58224982 -18.344671 14.499144 -0.58386791 -20.199385 15.764521 -0.64331239 -18.400066 14.179582 -0.57980943 -25.694588 19.550257 -0.82013404 -18.46958 13.875267 -0.57638758 -18.523857 13.739051 -0.57537961 -18.600552 13.619817 -0.57514089 -21.679834 15.670882 -0.67323363 -21.84882 15.589816 -0.67562097 -22.111614 15.573456 -0.68105876 -20.98126 14.58564 -0.64145559 -44.937477 30.830542 -1.4094863 -21.305183 14.426268 -0.64615071 -21.478912 14.352472 -0.64888287 -21.495634 14.173638 -0.64662814 -21.586388 14.044203 -0.64676076 -21.784044 13.983302 -0.6502887 -21.855921 13.840817 -0.64986432 -0 0 -0 -31.901608 19.6576 -0.95772386 -20.038797 12.179303 -0.58564514 -20.042841 12.013978 -0.58346999 -20.028402 11.838891 -0.58076435 -19.997889 11.655878 -0.57760781 -19.985823 11.485143 -0.57506132 -0 0 -0 -0 0 -0 -19.989786 11.003018 -0.56888074 -19.985746 10.841551 -0.56673217 -20.028971 10.706466 -0.56604248 -20.048294 10.559147 -0.56466317 -20.055029 10.406011 -0.56293899 -20.116722 10.28185 -0.56288594 -20.207111 10.172155 -0.56370819 -0 0 -0 -20.749058 10.12773 -0.5760693 -21.016247 10.098932 -0.5821172 -21.400431 10.122366 -0.59158695 -21.729492 10.115305 -0.59941208 -22.358276 10.241533 -0.61596423 -22.274874 10.038444 -0.61172009 -22.518827 9.9825945 -0.61702526 -22.75285 9.9197321 -0.62203866 -24.894367 10.671969 -0.68211979 -24.956617 10.517855 -0.68204021 -0 0 -0 -26.320801 10.714285 -0.71747881 -26.555904 10.620504 -0.72233307 -26.956463 10.589293 -0.73190892 -26.571383 10.250294 -0.71912342 -0 0 -0 -59.368942 22.067822 -1.6440814 -33.866692 12.353024 -0.91997749 -33.908909 12.133203 -0.91904908 -33.921406 11.9034 -0.9173249 -33.888882 11.658944 -0.91438049 -33.887787 11.426514 -0.91236454 -33.895565 11.197987 -0.91064036 -33.861866 10.95687 -0.9078021 -33.883671 10.734703 -0.90655535 -33.922165 10.518307 -0.90581268 -33.974586 10.306484 -0.90549433 -34.043896 10.099815 -0.90568 -34.738888 10.074481 -0.92318714 -35.561787 10.076961 -0.94419563 -38.991146 10.790594 -1.0369302 -39.071098 10.555057 -1.037328 -39.151558 10.319452 -1.037779 -39.215111 10.079278 -1.0378056 -0 0 -0 -54.281136 13.243236 -1.4460125 -55.39817 13.156122 -1.4742891 -56.475227 13.046341 -1.5014516 -58.217209 13.072969 -1.5466782 -0 0 -0 -54.582611 11.555172 -1.4438639 -54.626045 11.214615 -1.4431477 -0 0 -0 -0 0 -0 -54.787834 10.200642 -1.4421928 -0 0 -0 -58.494049 10.149547 -1.538747 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -17.308853 0.74468386 -0.42312098 -17.154259 0.63261795 -0.41890335 -17.169807 0.52771717 -0.41922167 -17.318628 0.42593384 -0.42309445 -17.31192 0.31949532 -0.42285573 -17.272572 0.21276329 -0.42176816 -17.266556 0.106734 -0.42158249 -17.274881 0.00078622595 -0.42179468 -17.285557 -0.10527819 -0.42208648 -17.275591 -0.21122779 -0.42184773 -0 -0 -0 -0 -0 -0 -17.148874 -0.52549684 -0.41866463 -0 -0 -0 -17.150122 -0.73628682 -0.41890335 -17.055422 -0.83708763 -0.41651604 -17.024014 -0.94028687 -0.41582635 -0 -0 -0 -17.306414 -1.1690897 -0.42367804 -17.327827 -1.2773911 -0.42444727 -0 -0 -0 -0 -0 -0 -17.403906 -1.6055888 -0.42717946 -0 -0 -0 -27.473154 -2.8756194 -0.69639075 -27.435122 -3.0419333 -0.69586021 -27.417925 -3.2104473 -0.69591326 -27.400686 -3.3789873 -0.69599283 -27.394308 -3.5489783 -0.69639075 -25.40082 -3.4492354 -0.64360422 -27.39323 -3.8912096 -0.69758439 -27.369827 -4.0593648 -0.69761091 -27.363174 -4.2301292 -0.69811493 -0 -0 -0 -0 -0 -0 -19.37171 -3.3605654 -0.48511198 -19.297598 -3.4698088 -0.48367959 -15.277112 -2.8435369 -0.37574574 -15.136675 -2.913594 -0.37243 -15.127337 -3.0081713 -0.37266874 -14.943105 -3.066956 -0.36818585 -14.919116 -3.1575522 -0.36805323 -13.37291 -2.9160271 -0.32659325 -13.286491 -2.9826937 -0.32473645 -13.222162 -3.0535858 -0.32348973 -13.05048 -3.0983913 -0.31932515 -13.072011 -3.1883616 -0.32043925 -11.099257 -2.7792773 -0.26701611 -11.002604 -2.8269222 -0.26484099 -13.177369 -3.4722595 -0.32500172 -13.030359 -3.5191548 -0.32155335 -13.021046 -3.6025076 -0.32189816 -13.029473 -3.691057 -0.32274699 -7.9392433 -2.3013146 -0.18274334 -7.9335985 -2.3525445 -0.18298207 -7.9209275 -2.4017603 -0.18303512 -7.8735781 -2.4402506 -0.18213324 -7.9070582 -2.5039141 -0.18348606 -7.9324427 -2.5656176 -0.18462668 -7.922246 -2.6161234 -0.18478583 -25.496387 -8.5961332 -0.67737168 -25.411024 -8.7413568 -0.6764698 -37.167397 -13.041692 -1.0086005 -37.185501 -13.304865 -1.0113857 -10.908256 -3.9777362 -0.27149898 -7.2246528 -2.6844172 -0.16791536 -7.2117848 -2.7301126 -0.16802147 -7.1855707 -2.7707138 -0.16775621 -7.095861 -2.7862422 -0.16568719 -7.1436033 -2.8557136 -0.16754401 -7.1389089 -2.9047687 -0.16791536 -32.548946 -13.481788 -0.89825279 -0 -0 -0 -9.1000395 -3.8998389 -0.22611317 -19.574535 -8.5327148 -0.53002036 -9.0103722 -3.9929864 -0.22491951 -5.6382174 -2.5396287 -0.12748991 -5.5943546 -2.5612712 -0.1266676 -27.773024 -12.927183 -0.77628672 -28.342915 -13.404671 -0.79535884 -5.3174024 -2.5538387 -0.11993003 -27.648056 -13.493645 -0.77976161 -27.543243 -13.652381 -0.77912498 -5.3203888 -2.6769021 -0.12144201 -5.2940722 -2.7044926 -0.12115022 -26.182571 -13.583856 -0.74610025 -5.3648534 -2.8242235 -0.12428027 -24.772612 -13.240613 -0.7087518 -4.4651585 -2.4208217 -0.098178796 -4.4327054 -2.4385331 -0.097648278 -4.4089317 -2.4608119 -0.097383015 -4.3954892 -2.4888036 -0.09743607 -3.725754 -2.1396832 -0.077409022 -3.7237825 -2.1690478 -0.077753857 -3.7043796 -2.1882949 -0.077568173 -3.6968846 -2.214581 -0.077753857 -4.5468693 -2.762126 -0.10457154 -4.54175 -2.7973149 -0.1049429 -13.67407 -8.5409584 -0.39121035 -3.5122073 -2.2228115 -0.073695391 -3.5069146 -2.2497201 -0.073960654 -4.1256728 -2.682785 -0.093987703 -3.462352 -2.2815802 -0.073430136 -4.0184665 -2.6837814 -0.091626897 -3.4696856 -2.3479974 -0.074570753 -3.4527404 -2.3675463 -0.074491173 -3.4578476 -2.4023817 -0.075127795 -3.4324172 -2.4160702 -0.074782953 -4.9180593 -3.5077624 -0.1236967 -4.8980637 -3.5390444 -0.12374976 -4.8819022 -3.5731657 -0.12393544 -4.8004704 -3.5589857 -0.12197252 -3.3167274 -2.490201 -0.07345666 -4.7572303 -3.6182323 -0.12199905 -3.2867107 -2.5313249 -0.073483184 -4.8306789 -3.7685931 -0.12597793 -4.5847325 -3.6221235 -0.11844458 -4.7653379 -3.8125975 -0.12534131 -4.6354604 -3.7555327 -0.12170726 -4.4971938 -3.6894109 -0.11775491 -4.2807288 -3.5559289 -0.11107038 -3.8243754 -3.2165508 -0.096003674 -3.7984796 -3.2347698 -0.095791467 -3.1412265 -2.7082241 -0.07345666 -3.107233 -2.7123227 -0.072846569 -3.0688152 -2.7121334 -0.072077312 -3.4207828 -3.0609691 -0.085207634 -3.3989739 -3.0792155 -0.08510153 -3.3034158 -3.0297227 -0.082342833 -3.8618803 -3.5860727 -0.10324524 -3.863106 -3.6316166 -0.10409407 -3.243469 -3.0865681 -0.082210205 -3.4641404 -3.3374279 -0.091043331 -3.4629147 -3.3774705 -0.091759525 -2.9144402 -2.877383 -0.072077312 -2.8847136 -2.8831947 -0.071626373 -2.8318439 -2.8652809 -0.07030008 -2.8079264 -2.8761632 -0.070061348 -2.7916131 -2.8947778 -0.070114397 -4.0331173 -4.2346134 -0.1185772 -4.0221243 -4.2753015 -0.11916077 -3.9012477 -4.1980953 -0.11547367 -3.3124416 -3.6083891 -0.093377605 -4.0810375 -4.5011964 -0.12462511 -4.0553422 -4.5283871 -0.12470469 -4.0678725 -4.5988669 -0.12632276 -3.3945124 -3.8851101 -0.10030086 -3.9824021 -4.6151338 -0.12515563 -3.950768 -4.6356778 -0.12502299 -12.3539 -14.680944 -0.47253871 -3.8054178 -4.5777097 -0.12136243 -3.6142805 -4.4023757 -0.11454527 -3.5714648 -4.4050541 -0.11388212 -3.5556118 -4.4409337 -0.11435959 -3.5413122 -4.4791374 -0.11491663 -3.4897771 -4.470047 -0.11388212 -11.17581 -14.501831 -0.44922248 -2.716192 -3.5681934 -0.082395889 -2.85395 -3.7973981 -0.089451775 -2.9348035 -3.9553523 -0.094093807 -2.9730752 -4.0587826 -0.096905552 -2.9574842 -4.0899115 -0.097329967 -10.32559 -14.470433 -0.43511069 -2.9335492 -4.1634927 -0.098550156 -2.9182172 -4.1961889 -0.099027619 -2.911077 -4.2412181 -0.09990298 -1.4810808 -2.1854467 -0.033455614 -1.4620897 -2.1861815 -0.033190355 -1.4442459 -2.1884348 -0.032978147 -1.4302456 -2.1964176 -0.032951623 -1.414042 -2.2009456 -0.032818995 -1.396767 -2.2036686 -0.032633312 -1.3932817 -2.2283063 -0.033137303 -1.3853511 -2.2461753 -0.03342909 -1.37933 -2.2674472 -0.033826977 -1.3700165 -2.2835848 -0.034065712 -1.3590306 -2.2971117 -0.034224864 -1.3569905 -2.3261356 -0.034861486 -1.3765583 -2.3933573 -0.03666525 -1.3736719 -2.4226336 -0.037301868 -1.4923176 -2.6701634 -0.044569965 -1.4378281 -2.6100838 -0.042474419 -1.3750778 -2.5327432 -0.039874882 -1.2393523 -2.3163195 -0.033110779 -1.223719 -2.3212268 -0.033031199 -1.4308851 -2.755501 -0.045790154 -1.1223571 -2.1936457 -0.028787058 -7.155107 -14.212941 -0.38563991 -7.0593281 -14.239559 -0.38513589 -1.0861737 -2.2229166 -0.029052317 -1.0958914 -2.2781956 -0.030484715 -1.0912944 -2.3047581 -0.031068284 -6.5347948 -14.036938 -0.37426028 -6.4493752 -14.078588 -0.37431332 -6.3296041 -14.044072 -0.37216476 -6.2295394 -14.051574 -0.37126285 -1.0400561 -2.382967 -0.032394581 -1.0230519 -2.383791 -0.032235425 -5.6864634 -13.491384 -0.35189897 -1.313516 -3.1682644 -0.054411069 -1.2786002 -3.1383028 -0.053323507 -1.2730529 -3.1804318 -0.054304969 -5.5681829 -14.173046 -0.36746967 -5.338294 -13.836674 -0.35693887 -5.4090614 -14.280508 -0.36861026 -1.1169524 -3.0017617 -0.048389692 -1.0865247 -2.9756889 -0.047461286 -1.0928286 -3.0510087 -0.049397677 -1.1796665 -3.3585594 -0.057859436 -1.1401764 -3.3109081 -0.056320935 -4.8146191 -14.276683 -0.363199 -4.7128186 -14.263242 -0.36200532 -4.3519564 -13.447308 -0.33845034 -4.4209065 -13.952152 -0.35176632 -1.0457752 -3.3691499 -0.05701061 -0.98039782 -3.2281852 -0.05292562 -0.96142447 -3.2370152 -0.0530052 -0.96938449 -3.3388634 -0.055657789 -0.92571646 -3.2629964 -0.053403087 -0.89608014 -3.2339313 -0.052448153 -3.6837578 -13.633069 -0.33813202 -3.5954518 -13.638017 -0.33765456 -3.493788 -13.590112 -0.33574468 -0.85287666 -3.4004023 -0.056427039 -3.3497345 -13.726166 -0.33831769 -3.2545943 -13.700748 -0.33707097 -3.1470685 -13.619164 -0.33431229 -3.1729453 -14.125899 -0.34757525 -0.68298632 -3.1260972 -0.048310116 -1.8046637 -8.5198641 -0.19449431 -1.7276282 -8.4103317 -0.19123162 -1.6687759 -8.3844976 -0.19025017 -1.6061484 -8.3366632 -0.18868513 -0.55219418 -2.9598343 -0.043296721 -0.52676886 -2.9228282 -0.04220916 -2.4409678 -14.062662 -0.34213743 -2.3569427 -14.091178 -0.34250879 -2.2761524 -14.140905 -0.34346372 -0.44327357 -2.8597941 -0.040193193 -2.0967307 -14.129208 -0.34242922 -0.42923418 -3.0134752 -0.044172075 -1.9678437 -14.482738 -0.35123581 -0.52360708 -4.0326805 -0.071308061 -1.7941298 -14.53953 -0.35213768 -1.7062782 -14.562179 -0.352456 -1.6084118 -14.49587 -0.3504135 -1.5221422 -14.531316 -0.35110319 -1.4047383 -14.253869 -0.34346372 -1.3304789 -14.40556 -0.34728345 -1.2507232 -14.514045 -0.34996256 -1.1512909 -14.391905 -0.3465142 -1.046715 -14.178374 -0.34065199 -0.9684602 -14.314188 -0.34410036 -0.17702475 -2.8634863 -0.039530046 -0.15956169 -2.8665149 -0.039583094 -0.14010701 -2.829499 -0.038575113 -0.18392022 -4.2544904 -0.076401033 -0.10243235 -2.7510877 -0.036453042 -0.085090429 -2.7366767 -0.036055151 -0.068223365 -2.7341492 -0.035975575 -0.051831603 -2.7555053 -0.036532618 -0.17558622 -14.237868 -0.34123555 -0.088220999 -14.238677 -0.34123555 -0.00085145648 -14.284934 -0.34245574 --0.085475832 -14.069751 -0.33675268 --0.032877129 -2.7687931 -0.036877453 --0.049681287 -2.7585444 -0.036612198 --0.067367651 -2.7891674 -0.0374345 --0.45826423 -14.959677 -0.36054641 --0.54853696 -14.915626 -0.35945883 --0.63699812 -14.84107 -0.35757551 --0.73153335 -14.907771 -0.35945883 --0.82497907 -14.938934 -0.36041376 --0.16845047 -2.7598536 -0.036771353 --0.18639308 -2.7737286 -0.03716924 --0.20142272 -2.7456155 -0.036453042 --0.21778765 -2.738349 -0.036293887 --0.23355629 -2.7250097 -0.035975575 --0.24953705 -2.7155619 -0.035763368 --0.2656067 -2.7080107 -0.035604212 --0.28200951 -2.7043417 -0.035551161 --0.30091205 -2.7234249 -0.036108203 --0.31622142 -2.7096131 -0.035789892 --1.8972207 -15.388997 -0.37484387 --1.9926379 -15.384997 -0.37505606 --2.0898266 -15.393283 -0.37561309 --2.1877544 -15.404913 -0.37627625 --2.2974927 -15.494037 -0.37903494 --2.4061153 -15.567572 -0.38139576 --2.5117555 -15.61568 -0.38309342 --2.5452008 -15.227282 -0.37306663 --2.636193 -15.197589 -0.37269527 --2.8046033 -15.599268 -0.38396877 --2.9048409 -15.606335 -0.3846319 --3.0215263 -15.697176 -0.38757628 --3.1419709 -15.799915 -0.3908655 --3.2432816 -15.801882 -0.39144906 --3.3741367 -15.942071 -0.39579931 --3.3887999 -15.540162 -0.38545421 --3.4974506 -15.578573 -0.38707229 --3.5740707 -15.475004 -0.38484412 --3.6393886 -15.328291 -0.38144881 --3.7295814 -15.290133 -0.38102439 --3.9149089 -15.632532 -0.39102465 --3.9634709 -15.424263 -0.38598472 --4.0483556 -15.362922 -0.38497674 --4.1255975 -15.275064 -0.38325256 --4.2147131 -15.233084 -0.38280162 --4.3214569 -15.254063 -0.38410139 --4.4358559 -15.299267 -0.38609084 --4.5137243 -15.218092 -0.38460538 --4.6165929 -15.221678 -0.38548073 --4.7353659 -15.275177 -0.38776198 --4.9262218 -15.552689 -0.3963033 --5.0769558 -15.693366 -0.40107796 --5.2101569 -15.773923 -0.40420803 --5.8140693 -17.245882 -0.44633114 --5.9366899 -17.259037 -0.44771048 --6.0461187 -17.23266 -0.44800228 --6.1540999 -17.201826 -0.44818795 --6.262958 -17.173134 -0.44845322 --6.3811007 -17.16905 -0.44943467 --6.2657485 -16.547165 -0.43290904 --6.849999 -17.760033 -0.46850678 --6.9964905 -17.813501 -0.47123894 --7.1505761 -17.882545 -0.47444859 --7.3491139 -18.056839 -0.48070869 --7.4567099 -18.004019 -0.4804965 --7.5697575 -17.964375 -0.48068216 --7.6892953 -17.93964 -0.4813188 --7.8335834 -17.970926 -0.48360002 --7.9692259 -17.980097 -0.48527116 --8.070775 -17.911722 -0.48471409 --7.9719591 -17.406534 -0.47142464 --8.7253428 -18.746601 -0.51208884 --8.9120131 -18.844524 -0.51654518 --9.0499868 -18.83634 -0.51792455 --1.6774455 -3.4393554 -0.064941853 --1.6772062 -3.3860073 -0.063668609 --1.6871635 -3.3542228 -0.063031986 --1.7104424 -3.3491483 -0.063191138 --1.7387869 -3.3536744 -0.063642085 --1.7751703 -3.3730145 -0.064543962 --1.8099707 -3.3885067 -0.065339737 --4.5490665 -8.3885202 -0.2166169 --4.6038265 -8.36658 -0.21680258 --4.6604376 -8.3477745 -0.21709438 --10.580641 -18.678854 -0.53304428 --10.846965 -18.877934 -0.54113466 --11.402044 -19.564995 -0.56429178 --11.54782 -19.538553 -0.56564462 --12.132092 -20.242434 -0.58962399 --12.121078 -19.945507 -0.58272725 --12.127861 -19.683529 -0.5768916 --12.254234 -19.618069 -0.57718337 --12.592587 -19.887083 -0.58800596 --12.191115 -18.994274 -0.56230235 --12.920728 -19.861771 -0.59214395 --12.127785 -18.395082 -0.54805791 --12.242093 -18.322815 -0.54813749 --13.271238 -19.60154 -0.5915339 --0 -0 -0 --16.417976 -23.619186 -0.72668332 --17.421421 -24.737391 -0.76625991 --17.426561 -24.424969 -0.75957543 --0 -0 -0 --16.511951 -22.552624 -0.70509124 --18.210846 -24.555315 -0.77461559 --18.296926 -24.357594 -0.77177733 --18.553177 -24.385679 -0.77647239 --18.719542 -24.29355 -0.77721512 --18.828274 -24.127008 -0.77549094 --18.988977 -24.027496 -0.776048 --19.160412 -23.940968 -0.7770825 --19.437243 -23.983707 -0.78257334 --20.175734 -24.584942 -0.80732203 --19.655342 -23.653423 -0.77946985 --19.018106 -22.603043 -0.74724084 --20.508799 -24.073204 -0.80257386 --20.041687 -23.234642 -0.77761304 --20.030657 -22.935802 -0.77143246 --19.998177 -22.617014 -0.7645092 --20.207254 -22.572828 -0.76732099 --20.319197 -22.419527 -0.76628643 --0 -0 -0 --21.645332 -23.301485 -0.80732203 --21.535872 -22.900259 -0.79756051 --21.910347 -23.013838 -0.80657929 --22.024782 -22.851616 -0.80557132 --0 -0 -0 --20.955406 -21.21489 -0.75466812 --20.798193 -20.798931 -0.74389863 --21.204922 -20.947004 -0.7543233 --21.240753 -20.726442 -0.75090146 --21.566183 -20.787186 -0.75822258 --21.688257 -20.649641 -0.75803691 --0 -0 -0 --0 -0 -0 --25.203209 -23.126682 -0.87106371 --25.382412 -23.005838 -0.87241656 --25.461277 -22.794323 -0.87021488 --25.88973 -22.893261 -0.88045388 --26.879026 -23.4757 -0.91037512 --27.077822 -23.357996 -0.91231149 --0 -0 -0 --10.24828 -8.6243057 -0.31882116 --10.264869 -8.5312338 -0.31757444 --10.276838 -8.435113 -0.3161951 --10.297337 -8.3467207 -0.31513408 --10.442015 -8.3583355 -0.31831717 --10.481339 -8.2848091 -0.31791928 --28.994385 -22.627897 -0.93934137 --0 -0 -0 --26.670753 -20.292936 -0.85268128 --0 -0 -0 --28.355831 -21.030607 -0.90018916 --0 -0 -0 --0 -0 -0 --21.910666 -15.633941 -0.67763692 --0 -0 -0 --0 -0 -0 --26.050852 -17.873466 -0.80172503 --0 -0 -0 --0 -0 -0 --0 -0 -0 --26.158197 -17.018349 -0.79148608 --29.655813 -19.035736 -0.8984915 --33.736458 -21.363722 -1.0230041 --33.990692 -21.233639 -1.0268768 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --20.888342 -12.174825 -0.60495597 --20.941851 -12.034474 -0.60431933 --0 -0 -0 --0 -0 -0 --33.440773 -18.405979 -0.97629195 --16.280212 -8.8316774 -0.45487249 --16.312939 -8.7203083 -0.45423585 --16.36083 -8.6172552 -0.45407671 --16.417833 -8.5190067 -0.45420933 --16.401255 -8.3830805 -0.45216683 --16.555069 -8.333971 -0.4552173 --6.9470897 -3.4447172 -0.16916208 --6.9779773 -3.4068487 -0.16945387 --6.9987502 -3.3639686 -0.16945387 --7.0310073 -3.3265176 -0.1697987 --39.04771 -18.176092 -1.1062953 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --36.224079 -15.528328 -1.0092106 --40.098354 -16.898506 -1.1180463 --40.231762 -16.664772 -1.1189216 --40.707317 -16.569851 -1.1296382 --41.922977 -16.765533 -1.1614957 --39.98645 -15.707252 -1.1033775 --22.282955 -8.5961723 -0.59715736 --22.408199 -8.4868984 -0.59922642 --22.389576 -8.3231239 -0.59723693 --22.414867 -8.1763391 -0.59652072 --45.708988 -16.355047 -1.2516042 --46.838528 -16.435692 -1.2805705 --0 -0 -0 --0 -0 -0 --49.135933 -16.232355 -1.3365401 --0 -0 -0 --49.204685 -15.58801 -1.3330121 --49.27076 -15.276922 -1.3322164 --28.410942 -8.6189032 -0.75121975 --28.378956 -8.4193983 -0.74888545 --28.373436 -8.2286835 -0.74732047 --51.716953 -14.654218 -1.3897511 --12.676634 -3.509006 -0.31242844 --12.715297 -3.4358499 -0.31290591 --12.736139 -3.3577657 -0.31290591 --12.749725 -3.2778132 -0.31272021 --12.776385 -3.2012208 -0.31290591 --12.926895 -3.1547501 -0.3164869 --52.779922 -12.534389 -1.4028814 --53.841526 -12.437985 -1.4297255 --0 -0 -0 --40.192421 -8.7670813 -1.0549942 --40.284576 -8.5285816 -1.0560553 --40.312649 -8.2764149 -1.0554187 --0 -0 -0 --18.431669 -3.5496261 -0.46147743 --18.803947 -3.5017793 -0.47094718 --18.683403 -3.360858 -0.46712744 --18.706629 -3.2466681 -0.46720701 --18.631546 -3.1160011 -0.46466053 --18.879288 -3.0384586 -0.47081453 --52.161602 -8.0648584 -1.3639679 --24.063999 -3.5701964 -0.60893488 --24.250734 -3.4459534 -0.6133647 --24.200102 -3.2874038 -0.61145484 --27.673729 -3.5863075 -0.70387101 --24.084841 -2.9712203 -0.60734332 --29.901943 -3.502434 -0.76228106 --29.924858 -3.3191135 -0.76233411 --29.81044 -3.121387 -0.75875312 --38.500031 -3.7922425 -0.9899528 --25.894688 -2.3906682 -0.6534453 --25.91584 -2.2323365 -0.65363097 --29.895004 -2.3902159 -0.75920403 --36.081173 -2.6618819 -0.92342585 --0 -0 -0 --0 -0 -0 --56.872089 -3.1437817 -1.4748195 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --46.796406 13.532393 -1.8431183 --46.34454 13.710425 -1.8283105 --46.061554 13.934639 -1.8203281 --43.611458 13.486085 -1.724848 --43.543133 13.758243 -1.7254651 --43.45314 14.023625 -1.7252722 --43.500092 14.334079 -1.7307096 --0 0 -0 --45.469246 15.604053 -1.8183614 --41.128498 14.397123 -1.6448314 --40.946213 14.615955 -1.6410139 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --33.122765 13.217169 -1.3394573 --32.656834 13.264109 -1.323454 --32.312561 13.355837 -1.3125023 --32.477787 13.65805 -1.3228755 --31.352448 13.411806 -1.2791846 --31.274147 13.605922 -1.2793773 --31.136156 13.773709 -1.2771022 --31.024628 13.952613 -1.2759839 --30.928434 14.138144 -1.2755597 --30.811197 14.313758 -1.2742871 --29.140511 13.755658 -1.2067647 --29.000597 13.907845 -1.2044125 --30.647614 14.929667 -1.2787989 --29.533506 14.611849 -1.2347995 --30.581745 15.364747 -1.2839663 --27.211203 13.881143 -1.1420573 --30.359837 15.722793 -1.2826166 --29.007694 15.24901 -1.2278968 --41.974854 22.395288 -1.799196 --41.471977 22.454973 -1.7831926 --24.640057 13.537693 -1.0481583 --24.492811 13.653111 -1.0453433 --24.356386 13.773626 -1.0430295 --24.206406 13.885526 -1.0401374 --24.11125 14.028264 -1.0397133 --24.03849 14.184069 -1.0403302 --23.949291 14.330273 -1.040253 --23.953176 14.532931 -1.0444179 --22.695814 13.961322 -0.99151045 --22.412163 13.977117 -0.98252547 --22.235603 14.057239 -0.97839928 --22.100134 14.162139 -0.97616267 --21.94075 14.250669 -0.97284633 --21.801983 14.351512 -0.97049403 --21.833218 14.564868 -0.97604698 --21.784002 14.725981 -0.97793657 --21.745173 14.894942 -0.98036599 --21.710014 15.067399 -0.98302674 --20.530807 14.436475 -0.9317776 --20.46463 14.578411 -0.93285733 --33.150002 23.922773 -1.5408292 --20.338238 14.867956 -0.93544102 --32.600971 24.140461 -1.5286821 --32.435444 24.327452 -1.5278723 --32.213154 24.471008 -1.5243632 --31.996662 24.61763 -1.5211624 --31.810328 24.78647 -1.5194657 --31.581551 24.921146 -1.5157251 --31.315632 25.02463 -1.5101722 --31.110226 25.174822 -1.5076271 --30.877878 25.301905 -1.5037708 --30.704361 25.476215 -1.5028839 --30.493906 25.619141 -1.5001847 --30.301125 25.775982 -1.4984107 --30.101509 25.926207 -1.4963284 --29.898935 26.072985 -1.4941304 --29.727903 26.246691 -1.4935905 --21.891926 19.568806 -1.0963612 --21.782555 19.712822 -1.0969396 --29.087975 26.650383 -1.4856466 --21.517763 19.958937 -1.0958213 --28.735432 26.98344 -1.4844127 --28.438238 27.034637 -1.4774328 --14.816531 14.2596 -0.75678223 --28.072847 27.350901 -1.4757361 --27.901651 27.519831 -1.4755819 --14.473764 14.452243 -0.75254041 --14.417143 14.573457 -0.7543143 --28.454741 29.117897 -1.5343508 --14.186556 14.696798 -0.75149924 --27.95874 29.321697 -1.5267154 --28.086607 29.820026 -1.5440685 --28.127722 30.233227 -1.5567939 --0 0 -0 --29.19523 32.163177 -1.6395099 --28.8379 32.163898 -1.6302935 --28.518105 32.202591 -1.623198 --28.261425 32.310032 -1.619766 --27.932642 32.332359 -1.6120921 --27.574169 32.316147 -1.6026058 --27.385666 32.496956 -1.6032228 --26.996538 32.437038 -1.5918084 --26.782408 32.58432 -1.5909215 --26.500731 32.647957 -1.5859469 --15.781321 19.687943 -0.9369449 --24.030985 30.359301 -1.4574192 --15.588377 19.943892 -0.94006848 --24.698191 32.001446 -1.5232062 --24.391136 32.007736 -1.5161879 --24.178061 32.135239 -1.5151467 --23.852316 32.110523 -1.5068558 --23.608156 32.192616 -1.5038095 --23.342207 32.242973 -1.4993362 --23.043415 32.244946 -1.4926649 --22.802505 32.325306 -1.4898114 --22.494104 32.307159 -1.4824075 --22.12793 32.200806 -1.470993 --22.017429 32.464985 -1.4770087 --21.782242 32.546322 -1.4745407 --20.215881 30.610653 -1.3788679 --19.988943 30.674679 -1.37613 --19.809538 30.811039 -1.3767855 --19.640985 30.964918 -1.3782895 --20.120081 32.154716 -1.4269935 --8.8438931 14.328982 -0.61302233 --8.7381382 14.353958 -0.6117112 --8.7028799 14.495543 -0.61568314 --8.5934086 14.514277 -0.61414063 --8.4784937 14.522722 -0.61217397 --8.4964066 14.760666 -0.62046486 --18.56698 32.717834 -1.4149621 --18.412712 32.914864 -1.4186641 --18.154434 32.925716 -1.4141909 --17.994526 33.114632 -1.4176229 --12.41199 23.179457 -0.977898 --12.248546 23.215408 -0.97616267 --12.087434 23.254663 -0.97462022 --10.04722 19.62299 -0.81397003 --9.9990692 19.827915 -0.82017857 --9.7981033 19.729593 -0.81331444 --13.786988 28.194235 -1.1743724 --9.6185379 19.979795 -0.81894457 --13.367644 28.208694 -1.1678555 --13.13095 28.154346 -1.1620711 --12.912102 28.134487 -1.1578293 --12.692348 28.109364 -1.1534332 --12.465684 28.065254 -1.1483045 --12.220439 27.974558 -1.1412861 --12.01267 27.965466 -1.137777 --11.805474 27.954878 -1.1342678 --11.59503 27.933577 -1.130373 --11.401901 27.951458 -1.1281749 --11.190774 27.922575 -1.1240873 --10.988119 27.911682 -1.1208096 --10.790706 27.911472 -1.1180331 --10.587325 27.893078 -1.1145625 --10.38109 27.863878 -1.1107062 --10.140615 27.737474 -1.1029167 --9.9250231 27.673134 -1.0977494 --9.7139215 27.616625 -1.0929676 --9.5198517 27.60486 -1.0900755 --9.3307734 27.605007 -1.0877231 --9.1505346 27.629488 -1.0864121 --8.9663391 27.640442 -1.0845996 --8.7669258 27.601606 -1.0808206 --8.5736675 27.578543 -1.0777355 --8.3856764 27.569447 -1.0752676 --8.1901417 27.532267 -1.0717199 --8.0001249 27.510038 -1.0688276 --7.8188839 27.515354 -1.0670924 --7.6370773 27.516596 -1.0652415 --7.4610391 27.536898 -1.0642003 --7.2766104 27.524195 -1.0618865 --3.7695274 14.621683 -0.54592407 --3.6390684 14.482694 -0.5394842 --3.5491855 14.500868 -0.53932995 --3.4386015 14.431973 -0.53574365 --3.3912797 14.630939 -0.54280055 --6.195981 27.495556 -1.0508963 --6.0292916 27.542816 -1.0512819 --5.8624635 27.590046 -1.0517061 --5.6930637 27.625498 -1.0517061 --3.9438119 19.750103 -0.7404319 --3.8233118 19.777855 -0.74058616 --3.7073948 19.830408 -0.74174303 --4.9830117 27.588739 -1.0451119 --4.8182697 27.645376 -1.0461531 --4.6508675 27.688215 -1.046693 --4.4799314 27.710314 -1.0464616 --4.3035288 27.696796 -1.0448805 --4.1367459 27.744423 -1.0457289 --3.9706707 27.79896 -1.0468858 --3.8059752 27.866364 -1.0485826 --3.6488678 27.996206 -1.0527472 --3.4851408 28.083517 -1.0552924 --3.3190753 28.157961 -1.0573747 --3.1554434 28.260223 -1.0605754 --2.9874325 28.330727 -1.0625806 --2.8185759 28.399237 -1.0645473 --2.6487134 28.463755 -1.0663983 --2.4783378 28.529247 -1.0683264 --2.3069365 28.589733 -1.0701002 --2.1348121 28.648191 -1.0718355 --1.9620569 28.705614 -1.0735708 --1.7015777 27.361742 -1.0211648 --1.613058 28.788389 -1.0759231 --1.4397215 28.864611 -1.0785068 --1.2664273 28.960752 -1.0819002 --1.0915192 29.04287 -1.0847925 --0.9145202 29.087971 -1.0862963 --0.73814654 29.176947 -1.0895356 --0.56144333 29.302813 -1.0942402 --0.38453871 29.528521 -1.1028396 --0.20471984 29.729172 -1.1105134 --0.022370653 29.820801 -1.1140226 -0.16142274 29.972261 -1.119884 -0.34764895 30.172543 -1.1276736 -0.53524584 30.309717 -1.1330724 -0.72361249 30.406757 -1.1369671 -0.91238302 30.475658 -1.1398207 -1.1009097 30.512426 -1.1414789 -1.2891212 30.529057 -1.1424044 -1.4795089 30.58445 -1.1448724 -1.6694826 30.617701 -1.1465305 -1.7053078 28.101357 -1.0496622 -2.0649397 30.892023 -1.158022 -2.2565603 30.907673 -1.1591403 -2.4500282 30.942057 -1.1610299 -2.6461267 31.000118 -1.1638836 -2.843941 31.066887 -1.1671227 -3.0521007 31.228859 -1.1741025 -2.0497854 19.721008 -0.7283619 -2.1812532 19.803411 -0.73206389 -2.3008759 19.773773 -0.73144686 -3.8562329 31.459955 -1.1863654 -4.050344 31.44462 -1.1867124 -4.2476211 31.451855 -1.1879849 -4.4479351 31.47764 -1.1900287 -4.6560192 31.551577 -1.1940006 -4.8688231 31.647844 -1.1988981 -4.734149 29.564075 -1.1186501 -5.329493 32.022377 -1.2159811 -5.5478191 32.116096 -1.2209556 -5.8028955 32.406044 -1.2336812 -6.0245771 32.493626 -1.2385399 -6.2345672 32.511986 -1.240738 -6.472002 32.665237 -1.2482963 -2.9526541 14.436176 -0.53184885 -3.0574677 14.495029 -0.5348953 -3.1467745 14.47795 -0.53497243 -3.2883532 14.694353 -0.54430449 -3.3185999 14.413899 -0.53400838 -7.4011254 31.269133 -1.2032555 -8.1802816 33.638885 -1.2991984 -8.3971825 33.630718 -1.3008951 -3.4409401 13.428851 -0.49818406 -3.5192101 13.392022 -0.49756706 -9.3141537 34.581989 -1.3453188 -9.5264359 34.525154 -1.3453573 -9.7413588 34.477589 -1.3458201 -4.1851764 14.471776 -0.54457438 -4.2177687 14.256099 -0.53693908 -4.275651 14.132393 -0.53300571 -4.35461 14.081071 -0.5320031 -4.4358096 14.037888 -0.53134757 -4.5117335 13.979024 -0.53007501 -4.6202512 14.020359 -0.53289008 -4.6921754 13.950072 -0.53119332 -4.7789807 13.9248 -0.53134757 -4.8735757 13.921622 -0.53242731 -4.9736857 13.932865 -0.53412402 -5.0672832 13.924622 -0.53504956 -5.2196846 14.07409 -0.54249203 -12.765947 33.785755 -1.3570031 -12.965117 33.686272 -1.3561547 -5.7119513 14.572915 -0.567249 -5.7308979 14.361255 -0.55992216 -5.7888274 14.251755 -0.5568372 -5.8601346 14.177181 -0.55521756 -5.9477887 14.142799 -0.55529469 -6.04035 14.119819 -0.55587316 -6.1296644 14.088904 -0.55614305 -6.2341876 14.092151 -0.55787838 -6.3225875 14.05819 -0.5580712 -6.4627333 14.137276 -0.56308424 -15.104807 32.514027 -1.3467456 -15.299333 32.410793 -1.3463213 -15.563158 32.452362 -1.3521442 -15.190478 31.183023 -1.301782 -15.220679 30.764114 -1.287784 -15.192039 30.237978 -1.2691199 -15.357764 30.105915 -1.2674617 -15.203536 29.357153 -1.2390413 -15.200655 28.915707 -1.2238864 -15.243735 28.570629 -1.2128961 -15.399248 28.440531 -1.211315 -15.528719 28.264059 -1.2077287 -15.6279 28.035576 -1.2018673 -15.753885 27.858265 -1.198281 -15.908613 27.733339 -1.197047 -16.068432 27.617929 -1.1962758 -16.239113 27.521397 -1.1963915 -16.448208 27.488979 -1.1994379 -16.624861 27.401207 -1.2000549 -16.80315 27.315704 -1.2008262 -16.984716 27.234982 -1.2018673 -17.172865 27.164038 -1.2034098 -17.407686 27.165007 -1.2083073 -17.642075 27.162436 -1.2131275 -17.886425 27.172195 -1.2186034 -18.191444 27.269754 -1.2282438 -18.355627 27.153481 -1.2280511 -13.743557 20.064207 -0.90173763 -13.86698 19.980322 -0.90177619 -13.990464 19.896494 -0.90185332 -19.367815 27.188042 -1.2514198 -14.201996 19.679554 -0.89977098 -19.878086 27.191944 -1.2630656 -20.135538 27.192331 -1.2689656 -20.350573 27.13302 -1.2720891 -20.571075 27.079256 -1.2755597 -20.706377 26.912924 -1.2736316 -20.890776 26.810589 -1.2748656 -21.005989 26.61993 -1.2718192 -21.449638 26.841824 -1.2891722 -21.224216 26.228096 -1.2652636 -21.854048 26.670105 -1.2938381 -21.746742 26.209446 -1.2774879 -22.582701 26.879625 -1.3180166 -22.679871 26.661398 -1.3140062 -22.968893 26.667862 -1.3214488 -23.130121 26.524166 -1.3213331 -13.110271 14.848841 -0.72762924 -13.061288 14.611665 -0.71953118 -13.144664 14.524579 -0.7191841 -13.068155 14.26314 -0.70973635 -13.144554 14.170964 -0.70911938 -13.221682 14.079846 -0.70857948 -13.333987 14.025975 -0.71004486 -13.441971 13.966935 -0.71127886 -13.583899 13.942168 -0.71440238 -13.686733 13.876343 -0.71536642 -13.890234 13.910897 -0.72184491 -31.600235 31.261948 -1.678612 -14.965378 14.624271 -0.7707032 -14.849932 14.334379 -0.75971299 -14.850824 14.160242 -0.75508553 -14.87851 14.013357 -0.75196201 -14.953241 13.911591 -0.75138354 -15.013304 13.796588 -0.75007242 -15.091757 13.698835 -0.74976397 -15.168831 13.599973 -0.74941689 -15.275931 13.527843 -0.75065088 -15.412803 13.481224 -0.75342733 -15.592018 13.470017 -0.75836331 -15.818042 13.496681 -0.76565158 -34.205498 28.825508 -1.689448 -34.391708 28.623394 -1.6899493 -34.566692 28.411831 -1.6899493 -18.110456 14.70024 -0.86336821 -18.219027 14.603839 -0.86429369 -35.395638 28.017595 -1.705297 -18.359076 14.349627 -0.86244273 -35.863358 27.678812 -1.7114669 -25.753592 19.625137 -1.2127419 -36.300129 27.311728 -1.7162873 -26.09516 19.383894 -1.2176778 -36.74456 26.946352 -1.7216474 -36.956154 26.754372 -1.723884 -37.305794 26.660158 -1.7327148 -20.897871 14.741336 -0.9501332 -20.929705 14.572292 -0.94739527 -21.063196 14.474156 -0.94947761 -38.187008 25.898132 -1.7438207 -0 0 -0 -38.607838 25.497505 -1.748718 -0 0 -0 -0 0 -0 -21.871948 13.873195 -0.96274304 -0 0 -0 -31.777578 19.613792 -1.4043189 -24.417881 14.864996 -1.0663983 -20.031527 12.026769 -0.86487216 -20.049915 11.871049 -0.86240417 -19.998976 11.675755 -0.85688978 -19.981907 11.501974 -0.85295641 -19.998222 11.348573 -0.85056555 -19.96196 11.166622 -0.84589952 -19.994223 11.024145 -0.84431851 -19.993885 10.864518 -0.84134918 -20.023174 10.721821 -0.83972961 -20.017881 10.561455 -0.83664459 -20.037977 10.415385 -0.8347165 -20.098839 10.290872 -0.83460081 -20.165173 10.169154 -0.83475506 -20.450035 10.155906 -0.84435707 -20.675343 10.110129 -0.85137534 -20.944067 10.082773 -0.86024469 -21.986187 10.418801 -0.90212321 -22.110378 10.311999 -0.9047069 -22.265869 10.218654 -0.90864027 -22.458382 10.140647 -0.91415465 -22.569494 10.024558 -0.916237 -22.822874 9.9698915 -0.92433506 -24.379251 10.472143 -0.98715293 -24.338108 10.278039 -0.98275685 -24.360107 10.111653 -0.98106009 -24.455002 9.9755793 -0.98244834 -24.901604 9.9799862 -0.99849021 -25.131594 9.8936262 -1.0055085 -25.683002 9.9291344 -1.0258309 -26.216158 9.9507942 -1.0453433 -44.215805 16.473488 -1.7841182 -33.822701 12.365421 -1.352954 -33.90358 12.15968 -1.3531854 -33.830498 11.899696 -1.3471698 -33.9076 11.693521 -1.3473625 -33.837666 11.43757 -1.3416167 -33.910053 11.230673 -1.3417325 -33.875671 10.989092 -1.3375678 -34.074841 10.823076 -1.3429279 -33.867706 10.528949 -1.331899 -33.911594 10.314836 -1.3310893 -33.96563 10.103999 -1.3307422 -34.582539 10.056968 -1.3530698 -35.870083 10.193127 -1.4022751 -35.925213 9.9709692 -1.4020052 -36.845066 9.9831991 -1.4363642 -37.610855 9.9433861 -1.4645146 -0 0 -0 -39.784584 9.9973984 -1.5462664 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -17.130878 0.74895418 -0.62493807 -17.159117 0.644728 -0.62586355 -0 0 -0 -17.2936 0.43734726 -0.63079953 -17.240011 0.33015475 -0.62864006 -0 0 -0 -0 0 -0 -0 0 -0 -17.263905 -0.093148455 -0.62944984 -0 -0 -0 -0 -0 -0 -17.265259 -0.41104728 -0.62968123 -17.249428 -0.51658863 -0.62917989 -17.260912 -0.62295961 -0.62975836 -0 -0 -0 -17.293888 -0.83675796 -0.63137794 -17.300402 -0.94350821 -0.63184071 -17.299273 -1.0499463 -0.63203353 -17.303473 -1.1568059 -0.63245767 -17.294056 -1.2628107 -0.63238055 -17.308893 -1.3707151 -0.63326752 -17.346951 -1.4808884 -0.63507992 -0 -0 -0 -17.292664 -1.6902492 -0.63373023 -17.387321 -1.8072714 -0.63781786 -27.428604 -3.0209775 -1.028106 -27.417492 -3.1901431 -1.0284145 -27.404345 -3.3591645 -1.0286844 -27.389162 -3.528017 -1.0289158 -25.403297 -3.4308317 -0.95244694 -27.391298 -3.870569 -1.0307667 -27.390759 -4.0420666 -1.0316923 -27.377293 -4.2118802 -1.032155 -27.350935 -4.3797851 -1.032155 -0 -0 -0 -15.396317 -2.6598115 -0.56616926 -15.150524 -2.7131951 -0.55718422 -15.106081 -2.8010056 -0.55610448 -14.969863 -2.8708725 -0.55143845 -14.850024 -2.9424753 -0.54742801 -13.395506 -2.7398334 -0.49085724 -13.306089 -2.8067155 -0.48800364 -13.161676 -2.8607204 -0.48299056 -13.065865 -2.9239697 -0.47990558 -12.944456 -2.9803228 -0.47581798 -12.882168 -3.049336 -0.47408268 -12.873896 -3.1309192 -0.47450686 -12.840869 -3.2064643 -0.47396699 -10.990481 -2.8162196 -0.40104586 -13.019938 -3.4214439 -0.48272061 -12.835636 -3.4573514 -0.47620359 -12.859453 -3.5485361 -0.47801602 -12.823976 -3.6235697 -0.47747615 -7.9471426 -2.2984679 -0.28246704 -7.9501376 -2.3522897 -0.28316116 -7.9336414 -2.4004478 -0.28308403 -7.8786678 -2.4366841 -0.28146443 -7.9216905 -2.503345 -0.28381673 -7.9309063 -2.5598838 -0.28481933 -7.9321327 -2.6141276 -0.28551346 -25.480364 -8.570097 -1.0006497 -32.552799 -11.17153 -1.2913703 -32.016785 -11.207641 -1.2722819 -31.949293 -11.404553 -1.272359 -31.85524 -11.591833 -1.271395 -10.975738 -4.0706863 -0.41496682 -10.960835 -4.1418405 -0.415391 -7.1713505 -2.7604349 -0.25975391 -7.1384616 -2.7981865 -0.25909835 -7.122086 -2.8423052 -0.25913692 -7.1026602 -2.8851998 -0.25905979 -28.776541 -11.894331 -1.1648476 -28.095074 -11.815023 -1.1393965 -9.0906878 -3.8890815 -0.34478357 -19.588549 -8.5222263 -0.78759348 -8.9929314 -3.9785161 -0.34270123 -5.5143671 -2.4803205 -0.19655043 -5.411799 -2.4742284 -0.19284846 -26.874477 -12.484958 -1.1067729 -26.029268 -12.287057 -1.073995 -25.924555 -12.432712 -1.0727611 -25.810051 -12.573168 -1.0711414 -5.3333554 -2.6390698 -0.19284846 -5.3063474 -2.6663618 -0.19238572 -5.2952275 -2.7015953 -0.19261709 -3.7967093 -1.9666389 -0.12821819 -3.7757258 -1.9852486 -0.12783258 -3.7731714 -2.0135527 -0.12825675 -3.7774413 -2.0457063 -0.12898944 -3.7788305 -2.0765443 -0.12960644 -4.4983115 -2.5078828 -0.16196012 -4.4123836 -2.4955955 -0.15883659 -4.3839865 -2.5151644 -0.15825815 -3.715503 -2.1621234 -0.12910512 -3.6737664 -2.1681232 -0.12783258 -3.6363842 -2.1762586 -0.12675282 -3.599896 -2.1845353 -0.12571165 -3.5881264 -2.2076299 -0.12578878 -13.623747 -8.4964952 -0.5828281 -4.1621442 -2.6316714 -0.15324508 -4.1425529 -2.6550038 -0.15309082 -3.4792347 -2.2601881 -0.1233208 -3.4335837 -2.2606161 -0.12185543 -3.3506525 -2.2356162 -0.11865477 -3.3492897 -2.2645276 -0.1192332 -3.4202459 -2.3431981 -0.1232051 -4.9302654 -3.422128 -0.19481513 -4.9296103 -3.4666839 -0.19577919 -4.8797607 -3.4765747 -0.19442952 -4.855906 -3.5046966 -0.19431382 -4.7963953 -3.5067098 -0.1925014 -4.8550949 -3.5955381 -0.19635762 -5.4244981 -4.0689349 -0.22489366 -3.2971721 -2.5051768 -0.1230123 -4.8569927 -3.7373066 -0.19971253 -3.2582991 -2.5393078 -0.12262667 -4.8758736 -3.8480048 -0.20291319 -4.8521705 -3.8778501 -0.20291319 -4.829062 -3.9081781 -0.20295176 -4.8034453 -3.9364684 -0.20287463 -5.2782941 -4.3799701 -0.22790152 -15.867697 -13.331332 -0.76299077 -15.398183 -13.098891 -0.74336261 -16.12085 -13.885014 -0.78427714 -3.1335089 -2.7330115 -0.12366785 -3.6582685 -3.2303438 -0.15154833 -3.0572691 -2.7333004 -0.12146981 -3.0463676 -2.7573719 -0.1217783 -3.3417878 -3.0622239 -0.13812868 -3.8855941 -3.6045544 -0.16774446 -3.3017726 -3.10095 -0.13801299 -3.4615693 -3.2912042 -0.14753786 -3.4787495 -3.3484132 -0.14954309 -3.4466867 -3.3585384 -0.14892611 -3.3890195 -3.3431358 -0.14692087 -4.1356678 -4.1299219 -0.18876086 -3.5304604 -3.5691679 -0.15694705 -2.7842503 -2.8496552 -0.11695803 -4.0908732 -4.2384176 -0.19053473 -2.7449334 -2.8792686 -0.11672665 -4.2358704 -4.4977908 -0.20164065 -3.3383176 -3.5887253 -0.15235814 -7.5509739 -8.2171593 -0.39387327 -7.656229 -8.4349899 -0.40281972 -3.3877659 -3.7790198 -0.15906796 -4.0826583 -4.6106472 -0.2008694 -4.0615282 -4.6438847 -0.20129359 -4.0257711 -4.6604009 -0.2008694 -3.9951541 -4.682734 -0.20075372 -3.988884 -4.7339034 -0.20210339 -11.344852 -13.631495 -0.64761263 -3.45207 -4.2004457 -0.17302749 -11.208207 -13.808479 -0.64954072 -3.5733864 -4.4584627 -0.18370922 -3.563328 -4.5022426 -0.18478896 -2.9436445 -3.7666488 -0.14769211 -2.8179078 -3.6517432 -0.14121366 -2.8996229 -3.8056674 -0.14784636 -2.8912368 -3.8433497 -0.14881042 -10.289147 -13.851862 -0.62910277 -10.224051 -13.942132 -0.63041389 -10.094363 -13.943897 -0.62752175 -9.9208841 -13.882812 -0.62169886 -9.8009539 -13.894431 -0.61938512 -1.5002177 -2.1553414 -0.064551979 -2.9425623 -4.2826614 -0.16373399 -2.9078159 -4.2882309 -0.16315556 -1.446396 -2.1618295 -0.063587926 -1.4386109 -2.179002 -0.063973546 -1.4208492 -2.1810906 -0.063665047 -2.7898126 -4.3398094 -0.16230719 -1.4078933 -2.2203016 -0.064667664 -1.3990138 -2.2365222 -0.065014727 -1.386314 -2.2467649 -0.065091848 -1.3751001 -2.2594967 -0.065284662 -1.3591528 -2.2644649 -0.065130413 -1.34676 -2.2753413 -0.065246098 -1.356957 -2.3249834 -0.06709709 -1.5625123 -2.7151809 -0.084103025 -1.5640711 -2.7568727 -0.085529827 -1.5642006 -2.7969403 -0.086879499 -1.5199898 -2.7574825 -0.084720016 -1.3718349 -2.5253086 -0.07411541 -1.2152702 -2.2702878 -0.062585309 -1.196654 -2.2688639 -0.062199686 -1.2698151 -2.4437366 -0.069487944 -6.7572341 -13.197683 -0.53539658 -1.3706689 -2.71877 -0.080709547 -6.5983253 -13.286771 -0.53570509 -6.5162358 -13.326109 -0.53566653 -1.0685532 -2.220437 -0.058304902 -1.0561925 -2.2296607 -0.058420587 -1.4086934 -3.0212538 -0.091854028 -6.1151257 -13.324898 -0.52899528 -6.027493 -13.349419 -0.52845538 -5.9118013 -13.310354 -0.52525473 -5.8364196 -13.361029 -0.52587175 -5.6083999 -13.056881 -0.51160371 -5.5235138 -13.080002 -0.51114094 -5.5998416 -13.491113 -0.52691293 -1.2870582 -3.1561284 -0.094746195 -5.4405551 -13.575511 -0.52760702 -1.1439061 -2.9066932 -0.083755963 -1.1437061 -2.9593265 -0.085645512 -5.2347884 -13.792 -0.53250444 -5.1368065 -13.788278 -0.53103906 -4.9896584 -13.64873 -0.52402073 -1.1587864 -3.2319963 -0.095710248 -1.1664547 -3.3172846 -0.098910913 -1.0760334 -3.1212785 -0.090620033 -4.6055207 -13.626023 -0.51827496 -4.4772139 -13.519327 -0.51279914 -4.3843093 -13.516129 -0.51156515 -4.2135658 -13.266589 -0.50038213 -4.0872889 -13.148108 -0.49455923 -0.97757578 -3.2151737 -0.09289521 -0.95982397 -3.2278159 -0.093165144 -0.96009165 -3.3027287 -0.095941626 -0.92369241 -3.2518468 -0.093666449 -0.90372205 -3.2574532 -0.093666449 -3.6423876 -13.443957 -0.50072914 -3.5572743 -13.456393 -0.50034356 -0.86556423 -3.3586857 -0.097059928 -0.84713131 -3.3726556 -0.097406983 -3.267643 -13.350707 -0.49363372 -3.2116055 -13.479374 -0.4979527 -3.1279345 -13.494932 -0.49779844 -0.70852733 -3.145803 -0.087650746 -1.8145413 -8.2904367 -0.29071936 -1.7592763 -8.2808886 -0.28990954 -1.7245687 -8.3698225 -0.29299453 -1.6706359 -8.3675079 -0.29249322 -1.6073128 -8.3157921 -0.2900638 -1.5588289 -8.3392496 -0.29060367 -1.5364059 -8.5079584 -0.29685074 -0.51659715 -2.9661148 -0.079398431 -0.64522427 -3.8433216 -0.11360312 -0.49212143 -3.0462143 -0.082290597 -0.47541562 -3.0620129 -0.08279191 -2.0516696 -13.761552 -0.50015074 -1.9950294 -13.968757 -0.50774747 -1.9092813 -13.980735 -0.50774747 -1.8228153 -13.987233 -0.50755471 -1.7404031 -14.02592 -0.50863445 -1.6592225 -14.078015 -0.51025403 -1.5689287 -14.053173 -0.50890434 -1.4795264 -14.032722 -0.50774747 -1.3894473 -14.001762 -0.50620502 -1.2959146 -13.928437 -0.50304288 -1.2103405 -13.935131 -0.50300431 -1.1260995 -13.958232 -0.50362134 -1.0373129 -13.923026 -0.5020017 -0.96263176 -14.086644 -0.50809455 -0.87785459 -14.119213 -0.50913572 -0.78947079 -14.093405 -0.50794029 -0.69416702 -13.921335 -0.50111479 -0.12196018 -2.7972651 -0.071261808 -0.10434368 -2.7859783 -0.07079906 -0.085802197 -2.740623 -0.069025196 -0.067973003 -2.7011404 -0.06748271 -0.050957255 -2.6785278 -0.066595778 -0.034078293 -2.6448183 -0.065284662 -0.017904507 -2.6529715 -0.065593161 -0.0016594146 -2.6969986 -0.067289896 --0.074633121 -13.81752 -0.49644876 --0.15900044 -13.780831 -0.49506053 --0.24769813 -14.014384 -0.50412261 --0.33451572 -14.047565 -0.5054723 --0.41920918 -13.995308 -0.50354421 --0.099735767 -2.7541502 -0.069565065 --0.59741175 -14.142858 -0.5094828 --0.69407463 -14.343534 -0.51738805 --0.78598809 -14.410846 -0.52016455 --0.87070525 -14.344909 -0.51781225 --0.18557112 -2.7707324 -0.070374876 --0.20184104 -2.7595754 -0.069989257 --0.21995261 -2.7732272 -0.070567682 --0.23526521 -2.7519126 -0.069796443 --0.2516908 -2.7454417 -0.069603629 --1.4228936 -14.556743 -0.52764559 --1.5122886 -14.548732 -0.52768415 --0.29879192 -2.709553 -0.068408199 --0.31471896 -2.7017133 -0.068176828 --1.8192132 -14.839785 -0.5401783 --1.9181482 -14.88979 -0.54256916 --2.0106776 -14.886652 -0.54291624 --2.1138654 -14.958136 -0.54619402 --2.2193184 -15.037807 -0.54981887 --2.3120027 -15.02687 -0.54993457 --2.4003706 -14.988721 -0.54900908 --2.4954112 -14.992438 -0.54974174 --2.5958602 -15.026078 -0.55166984 --2.6883619 -15.011835 -0.55174696 --2.7756863 -14.969511 -0.55074435 --2.8806577 -15.020895 -0.55344373 --2.983839 -15.058808 -0.55564177 --3.087594 -15.096019 -0.55783981 --3.2158377 -15.24594 -0.56451106 --3.3437018 -15.384108 -0.57075816 --3.4439254 -15.38963 -0.57179934 --3.5344784 -15.351655 -0.57114375 --3.6088157 -15.246054 -0.5678274 --3.7013512 -15.219739 -0.56767315 --3.7917635 -15.185107 -0.56721044 --3.8446896 -15.004742 -0.56096333 --4.032927 -15.347154 -0.57557845 --4.1241612 -15.311505 -0.57515424 --4.2047443 -15.237748 -0.57322615 --4.2908268 -15.185699 -0.57218492 --4.3955817 -15.199402 -0.57380456 --4.4709024 -15.111777 -0.57137513 --4.5291114 -14.970243 -0.56678623 --4.6368227 -14.993722 -0.56886858 --4.783226 -15.13745 -0.57584834 --4.8843036 -15.133492 -0.57688951 --4.9604945 -15.052938 -0.57484573 --5.066143 -15.061996 -0.57646537 --5.3060441 -15.460671 -0.59401119 --5.4655166 -15.612679 -0.60156935 --5.5652423 -15.590143 -0.60203212 --5.9922352 -16.466553 -0.63943744 --6.0844731 -16.406054 -0.63847339 --6.2012706 -16.411409 -0.64024723 --6.2939563 -16.352533 -0.63939887 --6.3912582 -16.306164 -0.63909042 --6.5467405 -16.405855 -0.64487469 --6.6070476 -16.266315 -0.64074856 --6.793376 -16.435099 -0.64950216 --6.9200444 -16.454823 -0.65208584 --7.022058 -16.414808 -0.65220153 --7.1864257 -16.518021 -0.65837151 --7.3725338 -16.665522 -0.66646957 --7.5090795 -16.696522 -0.66970879 --7.6579137 -16.751921 -0.67402774 --7.9154835 -17.038115 -0.68821865 --8.1414442 -17.246763 -0.69920886 --1.6569729 -3.4543002 -0.11105801 --1.6685096 -3.4243047 -0.11020964 --1.6748668 -3.3844464 -0.10893708 --1.6825925 -3.3482115 -0.10781878 --1.7071917 -3.3458357 -0.10816585 --1.7345819 -3.3486075 -0.10874428 --1.7578857 -3.3432081 -0.10897565 --1.8000033 -3.3729138 -0.11074951 --4.5497036 -8.4021549 -0.33194235 --9.9728041 -18.151356 -0.76245093 --4.6451707 -8.3325977 -0.33136392 --10.252347 -18.129377 -0.76696271 --10.329087 -18.006321 -0.7643019 --10.47003 -17.995289 -0.76665419 --10.600054 -17.964272 -0.76815814 --10.719316 -17.914328 -0.76885223 --10.841992 -17.869576 -0.76981628 --11.081275 -18.013792 -0.77937973 --11.243415 -18.028553 -0.78315884 --11.358096 -17.965982 -0.78346729 --11.703718 -18.263618 -0.80031902 --11.903735 -18.327221 -0.80656606 --12.041787 -18.293066 -0.80837852 --12.140495 -18.198883 -0.80745304 --12.21388 -18.067755 -0.80483079 --12.295712 -17.950426 -0.80286413 --12.381695 -17.840164 -0.8012445 --13.127181 -18.668736 -0.84393287 --13.236845 -18.581326 -0.84362435 --13.419024 -18.594561 -0.84813613 --13.533455 -18.51268 -0.84817469 --13.521917 -18.260649 -0.84007663 --13.697261 -18.262072 -0.84416425 --15.237985 -20.058735 -0.93532532 --16.250389 -21.121153 -0.99162614 --16.920153 -21.714687 -1.0255609 --17.098879 -21.668507 -1.0284145 --15.853539 -19.838764 -0.94323057 --17.160465 -21.206142 -1.0159589 --16.095798 -19.642723 -0.94323057 --16.341719 -19.695087 -0.9508273 --16.950762 -20.175915 -0.98013461 --17.396023 -20.449808 -0.9993 --17.378363 -20.176868 -0.99085492 --0 -0 -0 --18.138525 -20.544128 -1.0208178 --18.358803 -20.538239 -1.0262935 --18.591757 -20.543751 -1.0324636 --18.888243 -20.615692 -1.0422198 --18.917208 -20.394644 -1.0367054 --18.95307 -20.183487 -1.0316923 --19.039377 -20.027704 -1.0296099 --18.750322 -19.482826 -1.006704 --19.23839 -19.746033 -1.0271034 --19.340944 -19.609118 -1.0261008 --19.453133 -19.482296 -1.0256766 --19.550285 -19.340782 -1.0244812 --17.328062 -16.933191 -0.8981899 --17.4151 -16.810587 -0.89730299 --19.621656 -18.709402 -1.0094805 --20.718075 -19.513578 -1.0615394 --20.90765 -19.451429 -1.0652415 --16.457586 -15.123874 -0.82577008 --0 -0 -0 --20.480951 -18.362867 -1.0247511 --0 -0 -0 --22.93856 -20.064091 -1.1392808 --23.664644 -20.444271 -1.1700535 --10.180075 -8.6859207 -0.47963563 --24.14909 -20.350662 -1.1819307 --24.262753 -20.193153 -1.1813908 --10.30658 -8.4710522 -0.47805458 --10.358363 -8.4076529 -0.47805458 --18.695412 -14.985708 -0.88785523 --10.516387 -8.3239403 -0.48079249 --18.851133 -14.734236 -0.88654411 --0 -0 -0 --0 -0 -0 --24.972036 -18.788465 -1.1692051 --25.397284 -18.865488 -1.1841288 --25.17977 -18.465242 -1.1682025 --0 -0 -0 --0 -0 -0 --19.403606 -13.68725 -0.87956434 --19.560211 -13.618752 -0.88299638 --19.602228 -13.470179 -0.88106829 --25.148506 -17.055357 -1.1358488 --25.568245 -17.111929 -1.1505024 --19.502481 -12.879651 -0.86514211 --26.065138 -16.985096 -1.1638064 --19.864992 -12.771756 -0.8745898 --20.084745 -12.739548 -0.88106829 --26.316608 -16.46693 -1.1612227 --26.312563 -16.240589 -1.1564796 --26.326365 -16.026871 -1.1526234 --26.34882 -15.819768 -1.1492299 --27.09285 -16.041155 -1.1782672 --20.943901 -12.227441 -0.89911538 --0 -0 -0 --29.005198 -16.460049 -1.2502244 --28.464674 -15.923195 -1.2218812 --28.614344 -15.777188 -1.2241949 --16.213242 -8.8100605 -0.6753003 --28.919437 -15.48571 -1.2291694 --28.083286 -14.816954 -1.1885633 --16.406349 -8.527648 -0.67676568 --16.295599 -8.3434772 -0.66970879 --28.105009 -14.173333 -1.1779202 --6.9379191 -3.4452174 -0.26214474 --6.9526443 -3.3995094 -0.26187482 --6.9823761 -3.3611195 -0.26226044 --7.0344725 -3.3331904 -0.26361012 --29.911209 -13.950363 -1.2368819 --28.831057 -13.231797 -1.1874065 --28.925364 -13.060813 -1.1879849 --29.161119 -12.952449 -1.194579 --32.89732 -14.37098 -1.3485966 --32.815941 -14.096286 -1.3415011 --33.195469 -14.01868 -1.3538024 --33.459904 -13.889054 -1.3612835 --33.555595 -13.688016 -1.3617463 --33.713158 -13.511605 -1.3648312 --22.119057 -8.7076206 -0.88056695 --22.463793 -8.6845226 -0.89263695 --22.347563 -8.4823389 -0.88565719 --22.391699 -8.3422661 -0.88534868 --22.246317 -8.1330042 -0.87728918 --22.664513 -8.1285944 -0.89240557 --35.49897 -12.486592 -1.4154248 --35.620262 -12.284178 -1.4172758 --35.740402 -12.080744 -1.4191269 --35.731331 -11.833885 -1.415772 --35.896416 -11.644637 -1.419551 --36.042427 -11.448059 -1.4225974 --28.095722 -8.734457 -1.0986363 --28.33712 -8.6191874 -1.106233 --28.345415 -8.432045 -1.1044592 --28.133717 -8.1815042 -1.0938932 --12.659086 -3.5970371 -0.47107482 --12.786834 -3.548692 -0.47531667 --13.064918 -3.5396824 -0.48557422 --12.792708 -3.3818049 -0.47385129 --12.810315 -3.3024983 -0.47373563 --12.650081 -3.1785352 -0.46656305 --34.301109 -8.3959913 -1.3259991 --12.966137 -3.0893056 -0.47759184 --34.692619 -8.0419035 -1.3375292 --0 -0 -0 --0 -0 -0 --39.785458 -8.4539833 -1.5328468 --39.868877 -8.216361 -1.5341194 --39.933239 -7.9745111 -1.5346978 --18.898798 -3.6533611 -0.70603436 --40.108635 -7.4989281 -1.5378599 --18.708172 -3.3788943 -0.69685656 --18.718708 -3.2623236 -0.69647098 --28.002573 -4.7036757 -1.0589943 --18.764238 -3.0334871 -0.69674093 --23.986126 -3.7269106 -0.89996374 --28.440207 -4.2404985 -1.0728767 --28.467669 -4.0661955 -1.0729538 --24.192242 -3.304112 -0.90547818 --28.543169 -3.7201638 -1.0740336 --27.684875 -3.4356639 -1.0397904 --27.712381 -3.266547 -1.0400603 --28.195673 -3.1482351 -1.0580689 --28.605001 -3.0163579 -1.0732238 --0 -0 -0 --25.877863 -2.4080448 -0.96617508 --25.905094 -2.2503405 -0.96667641 --30.170414 -2.4345055 -1.1312984 --30.65712 -2.2845418 -1.1495769 --30.831066 -2.1073632 -1.1557854 --32.212749 -2.003324 -1.2087314 --35.306301 -1.9783573 -1.3278501 --39.003445 -1.9455712 -1.4702604 --0 -0 -0 --0 -0 -0 --0 -0 -0 --37.87191 2.7999074 -1.9066927 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --37.362038 4.1496253 -1.8870642 --0 0 -0 --0 0 -0 --0 0 -0 --37.155926 5.0526333 -1.8822592 --0 0 -0 --0 0 -0 --37.028996 5.7314186 -1.880828 --0 0 -0 --0 0 -0 --0 0 -0 --37.695934 6.7858419 -1.9234076 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --38.337566 9.11133 -1.9798906 --0 0 -0 --38.230618 9.5830479 -1.9802995 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --38.183426 13.143114 -2.029882 --37.232323 13.071774 -1.982702 --36.905071 13.211782 -1.9693096 --35.471416 12.944585 -1.8956517 --35.213474 13.095841 -1.8859396 --34.845753 13.203018 -1.8702471 --34.895454 13.467284 -1.8774544 --34.830753 13.688452 -1.8784767 --33.281101 13.315709 -1.7977136 --32.471779 13.223584 -1.7575366 --32.145542 13.321252 -1.7439909 --31.588358 13.318026 -1.7176151 --30.953508 13.274615 -1.6868434 --30.424757 13.269444 -1.6618989 --30.222258 13.402431 -1.6551515 --29.908203 13.483356 -1.6421682 --28.980562 13.279676 -1.5946304 --28.410563 13.229991 -1.5670789 --28.074282 13.283603 -1.5526643 --27.902239 13.412343 -1.5475527 --27.122126 13.242799 -1.5078356 --26.644003 13.212401 -1.4851913 --26.415258 13.301519 -1.4767572 --25.849421 13.216013 -1.4489502 --25.579929 13.27683 -1.4381136 --25.128658 13.238939 -1.4167472 --24.78187 13.25112 -1.4013612 --24.440275 13.26193 -1.3862309 --24.106491 13.272906 -1.3715097 --23.726421 13.253988 -1.354028 --23.320566 13.215647 -1.3349618 --23.020853 13.233058 -1.3220806 --22.774439 13.27798 -1.3123175 --22.486223 13.295471 -1.3000497 --22.209793 13.316607 -1.2884463 --22.185694 13.487914 -1.2919222 --22.311649 13.752711 -1.3044968 --22.037138 13.770796 -1.2930468 --21.980066 13.923391 -1.2947336 --21.948004 14.092532 -1.298005 --21.86363 14.228572 -1.2981584 --21.770912 14.359158 -1.2978517 --21.72142 14.518556 -1.3002541 --21.758434 14.737257 -1.3080748 --21.747469 14.925306 -1.3130331 --21.729273 15.109783 -1.3176335 --20.530741 14.463984 -1.2484226 --20.443232 14.590847 -1.2485249 --21.838352 15.789835 -1.3423225 --27.311508 20.003803 -1.6957375 --20.200071 14.986092 -1.250365 --29.417582 22.106215 -1.8464271 --29.286949 22.290537 -1.8467849 --28.898102 22.275921 -1.83053 --28.70656 22.41041 -1.8270031 --28.493303 22.526667 -1.822096 --28.260216 22.625546 -1.8159109 --28.089827 22.773363 -1.8138663 --27.869287 22.879383 -1.8085502 --27.657724 22.99122 -1.8038476 --27.375549 23.042154 -1.7944423 --27.093794 23.090494 -1.7850369 --26.882044 23.196278 -1.7803342 --26.672274 23.302305 -1.775785 --26.459225 23.403986 -1.7710311 --26.274948 23.529917 -1.768271 --21.745722 19.715378 -1.4653584 --25.848114 23.725639 -1.7588145 --25.652304 23.837564 -1.7553387 --25.405905 23.900761 -1.7483357 --14.910282 14.199741 -1.0168678 --24.690121 23.805206 -1.718433 --24.515005 23.928349 -1.7163883 --14.602343 14.428263 -1.0136986 --14.454936 14.458964 -1.0094559 --23.795343 24.096966 -1.6963509 --23.574518 24.168165 -1.6910349 --23.378662 24.263454 -1.687559 --14.04135 14.7522 -1.0054178 --22.964916 24.427004 -1.6790227 --22.676651 24.418892 -1.6686461 --22.41028 24.430984 -1.6598542 --22.216368 24.519924 -1.6565317 --21.986246 24.567217 -1.6504489 --21.773581 24.632069 -1.6456951 --21.56292 24.697496 -1.6410947 --21.31706 24.720425 -1.633734 --21.09893 24.773205 -1.6285201 --20.884815 24.828827 -1.623613 --20.698254 24.915791 -1.620904 --20.500011 24.987503 -1.6172746 --20.32053 25.081001 -1.6151789 --15.752859 19.688633 -1.2535853 --19.923925 25.217981 -1.6079715 --19.728273 25.287788 -1.6045979 --19.490467 25.301552 -1.5976973 --17.285381 22.725903 -1.4244145 --19.001007 25.302435 -1.582567 --18.785324 25.337517 -1.5774043 --18.580547 25.385414 -1.5731617 --18.398115 25.462517 -1.5708615 --18.21254 25.534271 -1.5683057 --18.025627 25.603077 -1.5656477 --17.792967 25.604939 -1.5589004 --17.550234 25.589266 -1.5511819 --17.358185 25.645191 -1.5480127 --17.12784 25.642422 -1.5413165 --16.893787 25.631124 -1.5342114 --16.68611 25.657274 -1.5295087 --16.475513 25.676802 -1.5244994 --16.262104 25.68965 -1.5191834 --8.9158115 14.276649 -0.8245188 --15.782746 25.622818 -1.5032864 --15.603971 25.684181 -1.5011905 --8.6776905 14.482033 -0.82712573 --8.5891752 14.535865 -0.82717681 --8.3872156 14.394995 -0.81572688 --14.72174 25.628979 -1.475786 --8.4052925 14.841846 -0.83601987 --14.330193 25.671669 -1.4678119 --14.144966 25.709238 -1.4648983 --13.97029 25.764816 -1.4631093 --12.40435 23.215397 -1.3102217 --12.233293 23.237164 -1.3071036 --12.058299 23.249729 -1.3035256 --11.892698 23.278811 -1.3009697 --12.983074 25.802959 -1.4414362 --9.779912 19.73698 -1.0904235 --12.600212 25.826597 -1.4338199 --12.397406 25.8116 -1.428606 --12.207638 25.821272 -1.4248745 --12.019483 25.832306 -1.4212965 --11.837889 25.855625 -1.418485 --11.65113 25.865854 -1.4150093 --11.459838 25.86381 -1.4109199 --11.266219 25.853987 -1.4064729 --11.057421 25.806044 -1.3999811 --10.866694 25.797012 -1.3957385 --10.691394 25.822603 -1.3934895 --10.492857 25.78966 -1.3880712 --10.295499 25.756184 -1.382704 --10.102233 25.729628 -1.3777969 --9.9183035 25.724037 -1.3741165 --9.7330561 25.71249 -1.3701806 --9.5444994 25.689342 -1.3656824 --9.3548841 25.66016 -1.3609287 --9.168005 25.635265 -1.3564816 --8.9943438 25.644857 -1.3539768 --8.8225336 25.658009 -1.3517278 --8.6509018 25.670017 -1.3494787 --8.4788284 25.678991 -1.3471273 --8.3063574 25.684921 -1.3446738 --8.1314201 25.681133 -1.3417602 --7.9630494 25.696201 -1.33992 --7.7930627 25.704435 -1.3377732 --7.6210041 25.703894 -1.3352174 --7.4478559 25.697414 -1.332406 --7.2688174 25.667679 -1.328419 --7.1002736 25.672331 -1.3263232 --6.9397545 25.704807 -1.325761 --3.7727721 14.320971 -0.72100919 --6.6141067 25.750309 -1.3237674 --3.6338458 14.514419 -0.72882992 --3.5383325 14.510244 -0.72744977 --3.4047337 14.344141 -0.71758443 --3.4026768 14.737464 -0.73716176 --5.7716994 25.720848 -1.3122152 --5.6127076 25.750898 -1.3119596 --5.4496379 25.761402 -1.3107328 --4.037406 19.679802 -0.99125874 --3.9228055 19.73555 -0.99289441 --3.7995615 19.748461 -0.99233216 --3.654942 19.645725 -0.98578936 --4.6686783 25.982306 -1.3141576 --4.5118947 26.026207 -1.3149755 --4.359354 26.096743 -1.3172246 --4.1999378 26.127932 -1.3174802 --4.0387788 26.148273 -1.3172246 --3.877528 26.167624 -1.316969 --3.7159116 26.184002 -1.3166112 --3.5547769 26.203341 -1.3164579 --3.395467 26.236544 -1.3170712 --3.2357612 26.267788 -1.3176335 --3.0763798 26.303019 -1.3184514 --2.9188855 26.357134 -1.3202915 --2.7627108 26.428185 -1.3230518 --2.6040154 26.480419 -1.3248919 --2.4424016 26.505844 -1.3254031 --2.2791204 26.513367 -1.3250453 --2.1165533 26.528843 -1.3251475 --1.9561535 26.574198 -1.3268343 --1.7942693 26.603636 -1.3277545 --1.632708 26.642056 -1.3291857 --1.4731594 26.72337 -1.3328661 --1.3137481 26.82567 -1.3376709 --1.1531793 26.928017 -1.3425269 --0.99034357 27.000454 -1.3459005 --0.82574904 27.04196 -1.3477408 --0.66070676 27.083458 -1.349632 --0.49571368 27.152905 -1.3530056 --0.3298811 27.220345 -1.3563282 --0.16325143 27.288769 -1.359753 -0.0042033577 27.345182 -1.3626155 -0.17326128 27.545376 -1.3728898 -0.34321958 27.619688 -1.3767745 -0.51452363 27.715916 -1.381835 -0.68734258 27.824057 -1.38756 -0.8593806 27.86224 -1.389758 -1.035978 28.009136 -1.3975787 -1.2135488 28.134954 -1.4043771 -1.3870935 28.145931 -1.4053483 -1.5614824 28.167803 -1.406933 -1.7287582 28.06798 -1.4023325 -1.9162817 28.283028 -1.4139358 -2.1106339 28.552597 -1.4284016 -2.2931287 28.630695 -1.4331043 -2.4760602 28.700661 -1.4374491 -2.666559 28.841055 -1.4454743 -1.9473773 19.744205 -0.97847974 -3.0505989 29.095196 -1.460349 -2.201432 19.826019 -0.98400027 -2.3401458 19.957947 -0.99151433 -2.428889 19.670645 -0.97745746 -3.7949433 29.252232 -1.4727701 -3.9765139 29.244228 -1.473588 -4.1610827 29.255861 -1.4754792 -4.3501997 29.294977 -1.478853 -4.5437722 29.357544 -1.4835045 -4.7304926 29.370523 -1.4856514 -4.916224 29.374434 -1.4873893 -5.1273084 29.521812 -1.4966413 -5.3508258 29.725689 -1.5089091 -5.5629463 29.852327 -1.517241 -5.7860832 30.025528 -1.5280775 -2.9330425 14.736255 -0.73205018 -2.9371638 14.298311 -0.71012151 -3.0701814 14.493982 -0.72131586 -3.158844 14.473895 -0.72126478 -3.3016891 14.694914 -0.73389035 -7.155046 30.950109 -1.5889053 -3.3882363 14.259783 -0.71318847 -7.6146231 31.188868 -1.6062337 -7.8398504 31.27718 -1.6133898 -3.46031 13.457022 -0.67418706 -3.5346644 13.404635 -0.67255133 -8.632391 31.934509 -1.6561738 -8.8574953 31.986813 -1.6617966 -4.0840421 14.406684 -0.72944331 -4.0972099 14.122392 -0.71564204 -4.1727014 14.059648 -0.7136485 -4.2458372 13.990776 -0.7113483 -4.3203568 13.928215 -0.7094059 -4.4968805 14.188948 -0.72484285 -4.480185 13.840894 -0.70761681 -4.5634594 13.808402 -0.70736122 -4.6394801 13.754592 -0.70598114 -4.7228141 13.723033 -0.70582777 -4.8195009 13.729603 -0.70777017 -4.9225049 13.752426 -0.71063262 -5.0201488 13.758552 -0.71262616 -5.1295419 13.794886 -0.71630651 -5.2516007 13.862144 -0.72172481 -5.4448004 14.110102 -0.73711067 -5.6397753 14.352483 -0.7522921 -5.6739373 14.183161 -0.74488026 -5.7310977 14.07501 -0.7408421 -5.8238525 14.055264 -0.74171108 -5.8820472 13.953008 -0.73803073 -5.9840841 13.955203 -0.74017763 -6.0604153 13.897168 -0.73900193 -6.1609583 13.894412 -0.74094439 -6.2777042 13.926451 -0.74488026 -6.3871689 13.940328 -0.74784499 -6.4945097 13.947951 -0.750503 -6.6218333 13.996306 -0.75551236 -6.7958603 14.13903 -0.76594001 -14.837479 30.387814 -1.6938462 -14.74367 29.73164 -1.6615921 -14.757821 29.307018 -1.6424748 -14.723677 28.797993 -1.6184504 -14.81636 28.545786 -1.6091473 -14.950733 28.377468 -1.6047002 -15.062878 28.16983 -1.598004 -15.176373 27.968031 -1.5916656 -15.27881 27.749285 -1.5843561 -15.394722 27.558237 -1.5786822 -15.538905 27.419815 -1.5761265 -15.693916 27.301443 -1.5747974 -15.851078 27.187378 -1.5737751 -16.006924 27.071552 -1.5727017 -16.170675 26.9694 -1.5724971 -16.355568 26.902098 -1.5744396 -16.511419 26.786783 -1.5735706 -16.701933 26.727312 -1.5761265 -16.927078 26.721348 -1.5820048 -17.115002 26.654797 -1.5843049 -17.331619 26.631308 -1.5893143 -17.555187 26.616165 -1.5949371 -17.777002 26.595957 -1.6003554 -17.969542 26.530201 -1.6030644 -18.177767 26.486137 -1.6072049 -13.854783 19.924635 -1.2051275 -13.98368 19.849045 -1.2057409 -18.966244 26.572996 -1.6339896 -14.177049 19.607969 -1.2014471 -19.402445 26.490522 -1.6436504 -19.720531 26.581108 -1.6570429 -19.916859 26.504313 -1.6599053 -20.189199 26.526237 -1.6692084 -20.512552 26.610672 -1.682703 -20.770092 26.605536 -1.6905749 -20.823315 26.338928 -1.6815274 -21.199259 26.478844 -1.6991112 -21.481464 26.496437 -1.7088743 -21.736795 26.477596 -1.7163883 -21.927578 26.378283 -1.7186886 -22.321836 26.519823 -1.7371925 -22.542442 26.450768 -1.7417929 -22.804796 26.428389 -1.7496648 -12.964895 14.840658 -0.97163022 -12.877053 14.55886 -0.95782894 -12.904845 14.411131 -0.95312631 -12.943386 14.276928 -0.94934374 -13.005756 14.170018 -0.94745243 -13.092457 14.08995 -0.94745243 -13.128024 13.955524 -0.94366986 -13.243024 13.905806 -0.94586784 -13.341963 13.838665 -0.94689018 -13.455924 13.786555 -0.94903702 -13.555005 13.718649 -0.95011044 -13.756882 13.753128 -0.95864683 -13.889334 13.716174 -0.96212268 -14.721766 14.36079 -1.015641 -14.754947 14.217526 -1.0117562 -14.802117 14.088857 -1.0089449 -14.760221 13.877376 -0.99994844 -14.853874 13.794702 -1.0005618 -14.900702 13.668872 -0.99795491 -14.981332 13.574504 -0.99775046 -15.074017 13.490982 -0.99841493 -15.163995 13.40485 -0.9989261 -15.303889 13.362126 -1.002862 -15.490722 13.358624 -1.0099671 -15.611935 13.296994 -1.0126252 -15.815516 13.303805 -1.0208037 -15.993646 13.286918 -1.0272443 -0 0 -0 -0 0 -0 -18.170286 14.538146 -1.1540627 -18.260715 14.42762 -1.154165 -25.553154 19.935284 -1.621824 -25.726421 19.81773 -1.6251465 -25.760096 19.593 -1.6195238 -25.948511 19.486143 -1.6239197 -26.021858 19.292658 -1.6210061 -26.148611 19.139116 -1.6215684 -29.166847 21.074495 -1.8047676 -0 0 -0 -0 0 -0 -20.912912 14.532721 -1.2664665 -29.490765 20.225836 -1.7933177 -0 0 -0 -29.745882 19.868517 -1.79388 -0 0 -0 -0 0 -0 -19.275091 12.368203 -1.135201 -30.456581 19.279419 -1.8079368 -30.599716 19.108047 -1.8094703 -24.179783 14.893965 -1.4165426 -20.076406 12.197365 -1.1653594 -20.221121 12.116035 -1.1695509 -19.995857 11.814951 -1.1517625 -20.033459 11.671927 -1.1497179 -19.966137 11.4692 -1.1415393 -19.990944 11.320886 -1.1388813 -19.997244 11.162965 -1.135201 -19.96036 10.982288 -1.1290671 -20.022102 10.856751 -1.1287603 -19.990566 10.681456 -1.1230866 -19.077438 10.043626 -1.0665013 -20.089996 10.419704 -1.1213486 -20.082401 10.259893 -1.1172594 -20.161928 10.145005 -1.1182306 -0 0 -0 -20.757034 10.127141 -1.1451175 -20.893503 10.035473 -1.1493601 -21.401619 10.11836 -1.1746625 -21.875299 10.17853 -1.1979202 -22.179794 10.155107 -1.2115681 -22.569502 10.16647 -1.2299699 -22.692635 10.054897 -1.2333946 -23.019415 10.031157 -1.2482182 -25.663755 10.99646 -1.3920583 -25.718779 10.833744 -1.3913937 -25.602066 10.600096 -1.3812728 -25.22999 10.265176 -1.357146 -0 0 -0 -0 0 -0 -26.134979 10.076729 -1.3966587 -26.201921 9.9182987 -1.3969653 -27.194723 10.103728 -1.4478767 -27.757257 10.119318 -1.4751726 -0 0 -0 -0 0 -0 -34.81525 11.970821 -1.8473471 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -36.530758 8.9062271 -1.8875242 -0 0 -0 -0 0 -0 -0 0 -0 -36.030876 7.8528714 -1.8504653 -0 0 -0 -0 0 -0 -36.133072 7.1811285 -1.8485739 -36.16861 6.9577761 -1.848165 -0 0 -0 -0 0 -0 -35.700138 6.1885242 -1.8174955 -0 0 -0 -35.478565 5.7025843 -1.8022119 -0 0 -0 -0 0 -0 -35.299671 5.0091548 -1.7878484 -35.355473 4.7959552 -1.7891773 -35.381264 4.5785437 -1.789024 -35.41761 4.3624606 -1.789484 -0 0 -0 -35.931042 3.978709 -1.8133041 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -35.956539 2.8683083 -1.8092147 -35.894775 2.6418407 -1.8051766 -35.994011 2.4271863 -1.8094703 -35.984303 2.2048204 -1.8082435 -36.031059 1.9858508 -1.8099815 -36.033588 1.7642918 -1.8095214 -17.133806 0.73417145 -0.84077364 -17.137989 0.62902659 -0.84077364 -18.617907 0.56887686 -0.91637397 -18.614058 0.45445862 -0.91601616 -18.597525 0.33989081 -0.91504496 -18.595264 0.22572392 -0.91484052 -18.3706 0.11028069 -0.9032883 -18.279051 -0.0024232266 -0.89858568 -17.741405 -0.11117904 -0.87108535 -17.917145 -0.22224009 -0.88013285 -18.008307 -0.33390126 -0.88488662 -17.962988 -0.44332954 -0.88268864 -17.98189 -0.55421829 -0.8838132 -17.97316 -0.6643579 -0.88355762 -17.953779 -0.77398044 -0.88279086 -17.87388 -0.88043827 -0.87895721 -17.950907 -0.99468523 -0.88319981 -17.920542 -1.1033367 -0.88197303 -17.695223 -1.1984806 -0.87077862 -18.325954 -1.3542525 -0.90354389 -18.307344 -1.4658751 -0.90303278 -18.330839 -1.5810133 -0.90471959 -0 -0 -0 -17.293335 -1.7055018 -0.85242808 -17.306383 -1.81408 -0.8536548 -27.430222 -3.0462334 -1.3755989 -27.426884 -3.2163467 -1.3764168 -27.410597 -3.3850641 -1.3766212 -27.402185 -3.5548594 -1.3772857 -25.398718 -3.4534619 -1.2749518 -27.393082 -3.8960636 -1.379177 -27.38249 -4.0661254 -1.3798926 -27.366896 -4.2355924 -1.3804038 -27.485331 -4.4267826 -1.3879178 -31.09816 -5.204783 -1.5768421 -15.373507 -2.6694827 -0.76164627 -15.094407 -2.7165127 -0.74799836 -14.982222 -2.7913287 -0.74304008 -13.433047 -2.5879655 -0.66319716 -13.288606 -2.6447918 -0.65650094 -13.116586 -2.694315 -0.64837354 -13.120323 -2.7790937 -0.64944696 -13.058142 -2.8497472 -0.64709562 -12.914715 -2.9015651 -0.64050168 -12.905425 -2.9827783 -0.64096171 -12.76154 -3.0321164 -0.63436776 -12.806728 -3.1259983 -0.63774145 -12.698184 -3.1821775 -0.63303876 -11.009988 -2.8308659 -0.54486394 -12.752813 -3.3627269 -0.63804811 -12.72037 -3.4377856 -0.63743472 -12.710587 -3.5189705 -0.63804811 -12.70605 -3.601799 -0.63896823 -7.9101691 -2.2943764 -0.38456458 -7.9103031 -2.3471324 -0.3853313 -7.9043531 -2.3982358 -0.38579136 -7.865643 -2.439292 -0.38451347 -7.9047918 -2.5047114 -0.38742706 -7.9120774 -2.5605502 -0.38865384 -7.9180264 -2.6162591 -0.38982952 -25.249105 -8.5176544 -1.3268855 -25.197311 -8.6727448 -1.3269366 -25.170948 -8.8367844 -1.328419 -25.073002 -8.9755793 -1.3260676 -27.075788 -9.8804741 -1.4382159 -10.954924 -4.0732636 -0.561221 -10.997898 -4.1662388 -0.56495243 -7.1698499 -2.766084 -0.3563486 -7.1276464 -2.8001618 -0.35496849 -7.122385 -2.8486667 -0.35563299 -26.487511 -10.78636 -1.4268169 -26.366394 -10.926122 -1.4238012 -26.174625 -11.035315 -1.4169005 -9.0649776 -3.8866782 -0.4678323 -9.0409594 -3.9422269 -0.4678323 -8.9983406 -3.9895291 -0.46680999 -24.494764 -11.042613 -1.3382332 -5.6276159 -2.577692 -0.27982816 -5.5827231 -2.5986819 -0.27819246 -5.3346725 -2.5231044 -0.26505569 -24.205587 -11.635226 -1.3376198 -23.234529 -11.344434 -1.2864017 -23.142117 -11.475692 -1.2851238 -3.8163455 -1.9206208 -0.18168572 -5.3036723 -2.7105634 -0.26786706 -3.8137624 -1.9783512 -0.1829125 -3.7856476 -1.993335 -0.18199241 -3.8032885 -2.0325382 -0.18373035 -3.7898679 -2.0553601 -0.18367924 -3.7859333 -2.0833929 -0.18419039 -4.4662056 -2.4938154 -0.2248275 -4.5029511 -2.5507181 -0.22789446 -4.5071292 -2.5897479 -0.22907013 -3.629272 -2.1148078 -0.17800538 -3.6807005 -2.1751618 -0.18183906 -3.63902 -2.1807566 -0.18015224 -3.6213038 -2.2004499 -0.17989667 -3.7701106 -2.322726 -0.18965979 -3.7811949 -2.3616934 -0.19119327 -3.765789 -2.3843155 -0.19114216 -3.7805004 -2.426264 -0.19293121 -3.7772603 -2.457042 -0.19364683 -5.0526242 -3.3314211 -0.27277419 -3.4105635 -2.2784319 -0.1729449 -3.346081 -2.2651503 -0.16982684 -3.354351 -2.3008981 -0.17120697 -3.7124124 -2.5803056 -0.19441357 -3.6907952 -2.5990093 -0.19405575 -4.9168258 -3.5081742 -0.2721608 -4.8757849 -3.5242326 -0.27093402 -17.650635 -12.927366 -1.0828072 -17.73941 -13.160392 -1.0935416 -3.9638124 -2.9773953 -0.2167512 -3.1833727 -2.4215853 -0.16773109 -3.1470985 -2.4246094 -0.16635096 -3.1353111 -2.4463325 -0.16655542 -3.1453106 -2.4853451 -0.16819113 -3.1518304 -2.5220749 -0.16962238 -5.3813148 -4.3615985 -0.31755167 -5.3251195 -4.3704543 -0.31560928 -15.863201 -13.186062 -1.0188102 -15.46721 -13.018175 -0.99775046 -15.307992 -13.045462 -0.99243438 -4.9417987 -4.2629776 -0.29705423 -14.816592 -12.943868 -0.96999454 -4.9137979 -4.3451357 -0.29874104 -3.6550581 -3.2718549 -0.21409318 -3.4521706 -3.128526 -0.20146756 -3.4012733 -3.120609 -0.19926958 -3.8546512 -3.5806065 -0.23229042 -2.7633631 -2.5982244 -0.1571501 -2.7401371 -2.6082432 -0.15663895 -2.7190492 -2.6201549 -0.15628113 -2.7100675 -2.6437654 -0.1567923 -4.2551756 -4.2032866 -0.26914495 -4.2187138 -4.2187219 -0.26837823 -3.5626254 -3.6063733 -0.22247617 -2.6910908 -2.7573781 -0.16021706 -2.6838222 -2.7839072 -0.16093268 -2.6852794 -2.819855 -0.16231281 -3.3581281 -3.5704737 -0.2138887 -3.3599417 -3.6166258 -0.21567777 -7.6824017 -8.3739796 -0.54465944 -7.6167936 -8.4054174 -0.54358602 -7.5850554 -8.4743214 -0.54511946 -11.642211 -13.169809 -0.86270231 -4.0808992 -4.6726975 -0.2805438 -7.49822 -8.6941872 -0.55063999 -10.935498 -12.838995 -0.82620561 -3.9704137 -4.7187428 -0.27865252 -3.3919485 -4.0815759 -0.23464175 -3.3674738 -4.1030841 -0.23469287 -3.2460489 -4.0049415 -0.22687215 -2.9961901 -3.7432618 -0.20841931 -2.7218137 -3.4434125 -0.18766627 -10.335429 -13.247096 -0.82298529 -10.259438 -13.317385 -0.82344538 -10.164834 -13.363392 -0.8223719 -9.7852087 -13.0294 -0.79701847 -9.7288675 -13.121286 -0.79906309 -9.6782551 -13.221836 -0.80167001 -9.618001 -13.310114 -0.80351019 -9.5396299 -13.373757 -0.80381685 -3.001893 -4.2621136 -0.22983687 -2.9357934 -4.2230425 -0.22625875 -2.9216876 -4.2582726 -0.22733217 -1.4742577 -2.1761827 -0.097549006 -2.8880711 -4.3220425 -0.22907013 -2.8323698 -4.2954865 -0.22636098 -1.445385 -2.2205324 -0.098622441 -1.4365865 -2.2369242 -0.099082485 -1.4324484 -2.2608862 -0.10000257 -1.4100858 -2.2560792 -0.099184714 -1.394645 -2.2621379 -0.099031366 -1.3791829 -2.2680919 -0.098878019 -1.3816646 -2.3039265 -0.10051373 -1.3832499 -2.339016 -0.10209832 -1.3568069 -2.3267488 -0.10087154 -1.3703594 -2.3835268 -0.10373403 -1.5274456 -2.6951873 -0.12157346 -7.4014263 -13.258048 -0.74017763 -7.2616897 -13.197335 -0.73399258 -7.1220274 -13.133656 -0.72770536 -7.0375419 -13.170061 -0.72729641 -1.1281859 -2.1407192 -0.086865798 -6.7264318 -12.968183 -0.7107349 -6.6244726 -12.965631 -0.7082302 -6.5286336 -12.973917 -0.70639002 -6.4914675 -13.099641 -0.71129715 -1.1031483 -2.2586918 -0.091670685 -1.3279262 -2.7623591 -0.11988664 -6.1404076 -12.98667 -0.69826263 -6.0627136 -13.02863 -0.69851822 -5.9843202 -13.069218 -0.69872266 -1.3495524 -2.9935362 -0.13108101 -1.2640066 -2.8501871 -0.12259578 -5.6805129 -13.034328 -0.69074857 -5.5996418 -13.067101 -0.69064635 -5.5065656 -13.070842 -0.68895954 -5.3720164 -12.973353 -0.68170106 -5.290431 -13.001446 -0.68144548 -1.2664723 -3.1655707 -0.13752161 -5.1432581 -13.097925 -0.68323457 -5.0997958 -13.225217 -0.68849951 -1.2143533 -3.2051587 -0.1384417 -1.194664 -3.2125494 -0.1384417 -4.7874351 -13.130126 -0.67832744 -4.6896305 -13.111295 -0.67572051 -1.1789535 -3.3583951 -0.14518899 -1.1641692 -3.3825657 -0.14610907 -4.4392085 -13.170787 -0.67439151 -1.0186279 -3.0817454 -0.12913862 -4.2664943 -13.191012 -0.67260247 -4.1444817 -13.087455 -0.66565067 -4.0437059 -13.046816 -0.66212368 -0.97890592 -3.2252841 -0.13552809 -0.96392292 -3.2475073 -0.13639706 -0.94592422 -3.2600753 -0.13675487 -0.92100561 -3.2485216 -0.13583478 -3.613646 -13.063646 -0.65675652 -3.5508587 -13.150174 -0.66018128 -3.4652715 -13.153364 -0.65921009 -0.86857927 -3.3775165 -0.14150865 -0.87378341 -3.4864452 -0.14697805 -0.85923374 -3.5198791 -0.1484604 -3.1109934 -13.106178 -0.65246278 -0.82226342 -3.5574052 -0.14989164 -0.72259015 -3.2154725 -0.13169441 -1.828351 -8.384716 -0.40225065 -1.7940208 -8.4768744 -0.40649328 -1.717896 -8.3703232 -0.40035936 -1.6602757 -8.3493614 -0.39872366 -1.6193883 -8.413331 -0.40153503 -1.543813 -8.294486 -0.39483887 -0.5660224 -3.1442549 -0.12653171 -0.54654843 -3.1466849 -0.12648059 -2.2495885 -13.463464 -0.66166365 -2.1640837 -13.459265 -0.66074359 -2.0907552 -13.532496 -0.66386163 -2.008121 -13.548034 -0.664015 -1.9328097 -13.615473 -0.66687745 -1.8415804 -13.570667 -0.66396385 -1.7655814 -13.638166 -0.66687745 -1.6828424 -13.656672 -0.6672864 -1.5972754 -13.651862 -0.66651964 -1.5113913 -13.642546 -0.66554844 -1.425474 -13.630704 -0.66447502 -1.3396616 -13.617328 -0.66335046 -1.2464647 -13.520871 -0.6579833 -1.1586058 -13.471548 -0.65506971 -1.0760829 -13.480394 -0.65517193 -0.99693888 -13.535547 -0.65767664 -0.91561371 -13.567317 -0.65900564 -0.83173853 -13.562712 -0.65849447 -0.75157958 -13.623402 -0.66135699 -0.66001815 -13.465164 -0.65302509 -0.57981813 -13.525834 -0.65593868 -0.49696049 -13.53313 -0.65614313 -0.41464394 -13.559881 -0.65736991 -0.33029157 -13.515245 -0.65496749 -0.049341578 -2.6450548 -0.098417982 -0.033183254 -2.6512995 -0.098724678 -0.082632691 -13.715775 -0.66503727 --0.0015296314 -13.728008 -0.66565067 --0.085579678 -13.698778 -0.66416836 --0.170068 -13.732947 -0.66595739 --0.25221062 -13.617814 -0.6601302 --0.33709726 -13.669923 -0.66289043 --0.41979644 -13.629664 -0.66094804 --0.5040468 -13.643799 -0.66181701 --0.5881418 -13.649428 -0.66227704 --0.67808115 -13.771246 -0.66871762 --0.77556711 -14.001158 -0.68072987 --0.86355084 -14.030027 -0.68246782 --0.958538 -14.15599 -0.68921512 --1.0447901 -14.141874 -0.68880618 --1.1135943 -13.911209 -0.6773051 --1.2085495 -14.015553 -0.68303007 --1.2955364 -14.018813 -0.68359238 --1.3988907 -14.186514 -0.69263989 --1.491537 -14.231299 -0.69540012 --1.587101 -14.296323 -0.69923383 --1.6796789 -14.327975 -0.70138067 --1.7685417 -14.325328 -0.70178962 --1.8557643 -14.309256 -0.70153403 --1.947298 -14.325307 -0.70296526 --2.0545721 -14.449534 -0.71001923 --2.1500905 -14.483086 -0.71242172 --2.2545013 -14.570288 -0.71763551 --2.3397305 -14.530544 -0.71630651 --2.4304931 -14.525764 -0.71681768 --2.5161572 -14.490898 -0.71579534 --2.6080327 -14.491896 -0.71666431 --2.7234383 -14.617979 -0.72407615 --2.8172395 -14.622568 -0.72520065 --2.8770697 -14.455148 -0.71737993 --2.9886284 -14.548743 -0.72320718 --3.042232 -14.362087 -0.71441525 --3.241497 -14.85247 -0.74109769 --3.3347592 -14.842046 -0.74160886 --3.4451137 -14.904984 -0.74600482 --3.5323472 -14.866076 -0.74508476 --3.6324995 -14.880989 -0.74702716 --3.6890113 -14.719893 -0.7397176 --3.7725439 -14.670867 -0.73833746 --3.8688598 -14.671584 -0.73961532 --3.9788795 -14.721804 -0.74355125 --4.0875282 -14.763522 -0.74707824 --4.1864843 -14.767949 -0.74866283 --4.2878757 -14.779388 -0.75065637 --4.3770585 -14.748013 -0.75040078 --4.4738503 -14.741903 -0.75152534 --4.5659962 -14.719897 -0.75183201 --4.7105536 -14.862964 -0.76103288 --4.7444425 -14.657057 -0.75152534 --4.9051285 -14.841968 -0.7630775 --5.0436759 -14.952588 -0.77069378 --5.1226506 -14.884531 -0.76870024 --5.1367941 -14.633264 -0.75679028 --5.1736336 -14.453851 -0.74876511 --5.2694139 -14.441535 -0.74983853 --5.4216371 -14.580227 -0.75919271 --5.5768199 -14.72039 -0.76870024 --5.9745021 -15.4825 -0.81240433 --6.0880198 -15.492953 -0.81501126 --6.1647882 -15.409872 -0.81250656 --6.2607322 -15.375456 -0.812711 --6.3522801 -15.330293 -0.81235319 --6.5835838 -15.61679 -0.83044821 --6.9170513 -16.130472 -0.86132222 --7.0003242 -16.052025 -0.85932869 --6.9921994 -15.768668 -0.84588522 --7.0576258 -15.656275 -0.84200042 --7.1252656 -15.550939 -0.83852452 --7.2015772 -15.466187 -0.83622432 --7.2984762 -15.426221 -0.8364799 --1.6427835 -3.4199102 -0.15720122 --1.6615456 -3.4052787 -0.15694565 --1.6779716 -3.3860726 -0.15643448 --1.6955721 -3.3694692 -0.15607667 --1.7148509 -3.3563342 -0.15592332 --1.7450751 -3.3643632 -0.15699676 --1.7740653 -3.3694961 -0.15791684 --4.5003343 -8.4180307 -0.45157745 --4.6543164 -8.5789785 -0.46256739 --9.3829746 -17.042236 -0.95874906 --4.65452 -8.3337679 -0.45157745 --4.6981812 -8.2920189 -0.45081073 --9.7413673 -16.947161 -0.96350282 --9.8678074 -16.925892 -0.96580303 --9.9445353 -16.819466 -0.96309388 --10.102506 -16.849775 -0.96856326 --10.228014 -16.824165 -0.97076124 --10.630297 -17.246519 -0.99994844 --10.84548 -17.356279 -1.0105294 --10.995063 -17.35774 -1.0146698 --10.601124 -16.510946 -0.96728539 --10.813913 -16.617178 -0.97776413 --11.723476 -17.775164 -1.0528533 --11.848972 -17.727802 -1.0543869 --11.952484 -17.647324 -1.0539268 --12.094451 -17.623056 -1.0569937 --12.207488 -17.555893 -1.0574538 --12.287369 -17.441473 -1.0550002 --12.348899 -17.302347 -1.0510131 --12.43318 -17.196306 -1.0491219 --12.507772 -17.077799 -1.0464638 --12.798584 -17.25177 -1.0624632 --12.922198 -17.196865 -1.0639966 --13.069814 -17.17288 -1.0675747 --13.235303 -17.170666 -1.0726352 --14.002316 -17.936943 -1.127687 --14.150514 -17.89926 -1.1308562 --14.288164 -17.847178 -1.1331564 --14.480427 -17.86157 -1.1399037 --14.600524 -17.785505 -1.1407726 --14.58233 -17.542757 -1.1306006 --14.678119 -17.439199 -1.1296805 --15.115233 -17.736448 -1.1557496 --15.991733 -18.533289 -1.2159129 --16.277966 -18.63261 -1.2293564 --15.822266 -17.888329 -1.1853456 --15.837784 -17.686012 -1.1781384 --16.775146 -18.502954 -1.2413175 --16.030664 -17.465311 -1.1764004 --15.214964 -16.37389 -1.1070361 --17.046503 -18.120489 -1.2363592 --17.217291 -18.078468 -1.2408063 --16.652712 -17.272251 -1.1910195 --16.678852 -17.088276 -1.1851923 --16.760927 -16.962883 -1.1835566 --16.955809 -16.9508 -1.1901505 --17.109953 -16.896263 -1.1937798 --16.190952 -15.793789 -1.1206841 --16.282522 -15.689295 -1.1203263 --17.240818 -16.409781 -1.1812564 --17.348459 -16.310524 -1.1817676 --16.218006 -15.061416 -1.0958418 --16.144518 -14.809731 -1.0843407 --14.402562 -13.050145 -0.95777786 --18.520473 -16.575144 -1.2351325 --16.757097 -14.812977 -1.1077517 --17.931782 -15.656325 -1.1814097 --18.056252 -15.570786 -1.1833521 --10.188469 -8.6782532 -0.64801574 --18.116804 -15.239396 -1.1747136 --17.924191 -14.890559 -1.1556984 --10.337215 -8.4816456 -0.64740235 --10.367335 -8.4004555 -0.64597106 --18.068127 -14.456416 -1.1473665 --18.152571 -14.342185 -1.1471109 --10.587923 -8.2610312 -0.65036702 --17.549463 -13.519276 -1.0968641 --17.620163 -13.402271 -1.0960974 --17.795504 -13.364066 -1.102078 --17.942152 -13.302799 -1.1062183 --18.049229 -13.211332 -1.107854 --18.171238 -13.130164 -1.1104609 --18.344965 -13.085108 -1.1163392 --19.534708 -13.753581 -1.1858057 --19.516212 -13.562225 -1.1794162 --19.448338 -13.338858 -1.1700621 --19.533953 -13.222073 -1.1703176 --19.248468 -12.857351 -1.1477755 --19.400377 -12.787365 -1.1522737 --19.764809 -12.854287 -1.1697553 --18.417719 -11.818117 -1.0830628 --19.950598 -12.629469 -1.1715443 --20.175114 -12.598853 -1.1804385 --19.498632 -12.010793 -1.1351498 --23.618608 -14.349179 -1.3774902 --19.702812 -11.805512 -1.1386257 --22.281315 -13.165204 -1.2876285 --21.153557 -12.324446 -1.2160662 --22.437731 -12.888798 -1.2874241 --21.935869 -12.422168 -1.2532786 --22.427645 -12.519514 -1.2776608 --22.540792 -12.401883 -1.2798078 --16.22933 -8.800416 -0.90793985 --22.268473 -11.898447 -1.2552722 --16.666618 -8.7745771 -0.92705721 --6.8676977 -3.5628054 -0.35900664 --6.896544 -3.5242336 -0.35941556 --6.9126859 -3.4791577 -0.35910887 --6.9177957 -3.4286962 -0.35818878 --6.9207516 -3.3774276 -0.35716647 --6.9179382 -3.3236578 -0.35583746 --6.9228525 -3.2738917 -0.35496849 --6.9491487 -3.2343011 -0.35532629 --6.9843001 -3.198668 -0.35619527 --7.0374875 -3.1709278 -0.35808656 --7.0230269 -3.1127191 -0.35619527 --25.843914 -11.26183 -1.4059106 --26.082357 -11.175803 -1.415367 --26.237877 -11.052382 -1.420223 --26.565414 -10.998906 -1.4346377 --26.834993 -10.918114 -1.4458321 --22.058779 -8.8177185 -1.178905 --27.472668 -10.786519 -1.4736391 --28.039667 -10.811019 -1.5011394 --22.378935 -8.4713535 -1.1877481 --22.413641 -8.3276196 -1.186828 --28.176678 -10.272204 -1.4980214 --22.791559 -8.1511402 -1.2019072 --28.421242 -9.9679623 -1.5045642 --28.599922 -9.8339729 -1.5109537 --28.749634 -9.6885977 -1.5158097 --28.847424 -9.524847 -1.5179055 --27.867649 -9.0121346 -1.4620869 --27.844347 -8.8162556 -1.4578954 --27.865484 -8.63519 -1.4561574 --27.869202 -8.4492731 -1.4535506 --27.918606 -8.277544 -1.4534483 --27.96887 -8.1060829 -1.4534483 --12.533863 -3.5500789 -0.62976736 --13.06846 -3.6149771 -0.6570121 --30.151623 -8.1400919 -1.5615072 --12.783478 -3.3678582 -0.6396327 --12.799065 -3.2881148 -0.63937712 --12.771528 -3.197638 -0.63687247 --12.590059 -3.0702529 -0.62629145 --13.091603 -3.1075349 -0.65169609 --31.265734 -7.217484 -1.6053647 --31.258759 -7.0141368 -1.6027067 --31.317795 -6.8258195 -1.6035756 --31.343456 -6.6302223 -1.6027578 --18.370798 -3.7689366 -0.92286569 --18.469004 -3.6711321 -0.92680162 --19.005077 -3.6565809 -0.95358634 --32.05835 -5.96347 -1.631996 --18.729057 -3.3656955 -0.93697369 --18.751324 -3.251054 -0.93707591 --26.672998 -4.4555888 -1.3471273 --26.546013 -4.2671232 -1.3391533 --19.089281 -2.9487877 -0.95164394 --26.519321 -3.9296267 -1.3351662 --26.507336 -3.7617831 -1.3333261 --24.237928 -3.2882349 -1.2149417 --26.47821 -3.4267321 -1.3295435 --26.484861 -3.2624915 -1.3288279 --23.800364 -2.783783 -1.189486 --26.556652 -2.9409719 -1.3305658 --26.82848 -2.8045382 -1.3436515 --26.736847 -2.6292205 -1.3380798 --25.89921 -2.3865294 -1.2942225 --26.016848 -2.2364609 -1.2995385 --26.998734 -2.154022 -1.3492743 --27.207655 -2.0027549 -1.359344 --29.910795 -2.0171738 -1.497408 --32.725681 -2.0052648 -1.6411458 --0 -0 -0 --0 -0 -0 --38.362576 -1.6423633 -1.9283147 --38.40287 -1.4080775 -1.9298993 --38.502625 -1.1752158 -1.9346019 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --38.329044 0.24154732 -1.9248388 --0 0 -0 --38.402077 0.71335316 -1.928877 --38.301132 0.94659877 -1.9239699 --0 0 -0 --38.380444 1.4200151 -1.9287747 --38.273228 1.6512647 -1.9237654 --0 0 -0 --37.744522 2.0927651 -1.8978497 --37.86454 2.3325541 -1.9046992 --37.660198 2.5520079 -1.8949871 --31.019409 -0.7847842 -1.9204605 --31.033619 -0.59462923 -1.9210901 --31.025705 -0.40405625 -1.9203975 --31.061533 -0.21391261 -1.9225383 --31.054276 -0.023312513 -1.9220346 --31.041859 0.16716903 -1.9212791 --31.009312 0.35727912 -1.9193271 --0 0 -0 --30.94173 0.73633659 -1.9154863 --30.912689 0.92546117 -1.9139751 --0 0 -0 --30.856127 1.3029277 -1.9112676 --30.815653 1.4906902 -1.9092528 --30.763075 1.6774075 -1.9065453 --0 0 -0 --30.420525 2.0334289 -1.8863336 --30.459234 2.2238257 -1.8896078 --30.473867 2.4129624 -1.8914337 --30.446556 2.5988827 -1.8906782 --30.36941 2.7801013 -1.8868374 --30.380585 2.969207 -1.8886633 --30.866072 3.2079666 -1.9206494 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --30.436649 4.1105289 -1.9005007 --30.110443 4.2547617 -1.8813595 --30.043289 4.4334626 -1.8787779 --30.009602 4.6168108 -1.8784001 --29.974794 4.7999125 -1.8780223 --29.928043 4.9809589 -1.8769519 --29.882166 5.161952 -1.8760074 --29.83814 5.3430977 -1.8752518 --29.797926 5.524807 -1.8748111 --29.778168 5.7103586 -1.8757555 --29.758232 5.89607 -1.876763 --29.746918 6.0837507 -1.8784001 --29.858437 6.2976713 -1.8880336 --29.95772 6.5108566 -1.8969747 --29.982458 6.7091517 -1.9011933 --30.078835 6.9247875 -1.9101343 --30.108618 7.1264567 -1.9148567 --30.302883 7.3690753 -1.9303459 --30.268717 7.5577731 -1.9311016 --30.378393 7.7834826 -1.9413018 --30.344542 7.9735389 -1.9422463 --30.508982 8.2171974 -1.9562244 --30.408922 8.3907042 -1.9530133 --30.59889 8.6455116 -1.9688803 --30.630594 8.8577738 -1.9744842 --30.551743 9.038475 -1.97291 --30.68294 9.2824068 -1.9852512 --30.713125 9.4976244 -1.9910439 --30.775129 9.7240839 -1.9990405 --30.730082 9.9176378 -2.0000479 --30.82505 10.157542 -2.010437 --30.994848 10.424754 -2.0259264 --30.900091 10.604373 -2.0239115 --30.971972 10.841913 -2.0331044 --30.94058 11.044498 -2.035497 --30.969767 11.269629 -2.0420454 --31.092798 11.53093 -2.055016 --0 0 -0 --31.043028 11.947823 -2.0613756 --31.03046 12.16211 -2.0655313 --0 0 -0 --30.94915 12.570528 -2.0703166 --0 0 -0 --0 0 -0 --30.583145 13.082727 -2.0614386 --30.046543 13.071865 -2.030082 --29.634459 13.109424 -2.0072258 --29.010067 13.046638 -1.969636 --28.414812 12.989141 -1.9339349 --28.013262 13.013979 -1.9115825 --27.788479 13.117457 -1.9015081 --27.384407 13.132792 -1.8789037 --27.01889 13.162024 -1.8589439 --26.63706 13.178862 -1.8377879 --26.311342 13.219293 -1.8205355 --25.955915 13.240809 -1.8011423 --25.7572 13.339241 -1.7928311 --25.205784 13.250449 -1.7593968 --25.277218 13.486603 -1.7703526 --24.462923 13.245619 -1.717903 --23.984076 13.177298 -1.6893171 --23.765907 13.247924 -1.6794316 --23.400965 13.23335 -1.6589051 --23.179081 13.296241 -1.6487048 --22.801174 13.266069 -1.6271079 --22.534544 13.296684 -1.6135705 --22.252131 13.314795 -1.5988368 --22.251926 13.500778 -1.6048814 --22.212023 13.663727 -1.6080925 --22.151476 13.814548 -1.6098555 --22.062077 13.947539 -1.6095408 --22.002972 14.099878 -1.6115556 --21.953705 14.259083 -1.6143891 --21.939159 14.441808 -1.6199299 --21.953083 14.644827 -1.6277375 --21.920689 14.818377 -1.632145 --21.822765 14.94809 -1.6316414 --21.794588 15.126094 -1.6365526 --20.555138 14.453583 -1.5481502 --20.465252 14.578856 -1.5480872 --21.832146 15.755385 -1.6614237 --24.223858 17.708384 -1.8559216 --24.095495 17.842432 -1.8544105 --23.985561 17.989943 -1.8544105 --23.869959 18.133154 -1.8540328 --23.740053 18.26528 -1.8525845 --23.606277 18.394039 -1.8508844 --23.489052 18.535448 -1.8505696 --23.340572 18.651812 -1.8477992 --23.191551 18.767054 -1.8450288 --23.07519 18.908367 -1.8449658 --22.946447 19.039402 -1.8439584 --22.836069 19.185617 -1.8445251 --22.612253 19.235493 -1.835773 --22.239716 19.155041 -1.8146168 --22.033756 19.214396 -1.8072499 --21.746363 19.199951 -1.7930199 --21.518019 19.234587 -1.7837012 --21.407732 19.373623 -1.7843938 --21.348061 19.559223 -1.7894939 --21.266426 19.725815 -1.7928311 --14.965987 14.053778 -1.2580718 --21.363451 20.30917 -1.8224874 --21.370029 20.566517 -1.8340099 --21.206261 20.661037 -1.8307358 --14.593845 14.394403 -1.2560569 --14.468523 14.44701 -1.2527827 --21.014688 21.242275 -1.8479881 --20.89023 21.377243 -1.8485548 --20.768372 21.515072 -1.8494363 --20.54299 21.544592 -1.8409361 --13.951496 14.812834 -1.2466122 --20.476242 22.009153 -1.8593848 --20.346888 22.140991 -1.8599514 --20.156988 22.206305 -1.8549142 --19.909756 22.206217 -1.844462 --19.724825 22.273422 -1.8398657 --19.536533 22.335438 -1.8349544 --19.33844 22.384657 -1.8290987 --19.174814 22.472527 -1.8265802 --19.023058 22.573732 -1.8252579 --18.88036 22.685429 -1.82488 --18.739542 22.799307 -1.8247541 --18.588602 22.900688 -1.8236837 --15.763615 19.665855 -1.5529355 --18.134596 22.910315 -1.8062425 --17.919312 22.926012 -1.7986238 --17.733179 22.977066 -1.7939644 --17.295452 22.696482 -1.7631117 --17.345474 23.054184 -1.7830086 --17.195953 23.149765 -1.78219 --17.042372 23.239552 -1.7809937 --16.879557 23.316198 -1.7788528 --16.712381 23.38604 -1.7762713 --16.507593 23.401699 -1.7695971 --16.311226 23.427195 -1.7638043 --16.135519 23.480776 -1.7602782 --15.919437 23.473616 -1.7522188 --15.728478 23.501184 -1.7469298 --15.539981 23.530626 -1.7418926 --15.332646 23.529379 -1.7346517 --15.137788 23.544945 -1.7287959 --8.9950495 14.181514 -1.022332 --14.772012 23.607952 -1.719792 --14.611676 23.673519 -1.717966 --14.442789 23.724367 -1.7151326 --8.689517 14.473289 -1.0278728 --8.5995302 14.524616 -1.0277469 --13.892447 23.795719 -1.7012174 --13.73622 23.863214 -1.6999581 --13.583137 23.935764 -1.6991396 --13.416524 23.98382 -1.6966209 --13.249352 24.029858 -1.6940393 --13.098799 24.10544 -1.6936616 --12.423446 23.20085 -1.6232041 --12.24965 23.217503 -1.6189854 --12.071056 23.223156 -1.6140742 --11.915598 23.271912 -1.6123112 --11.812127 23.423004 -1.6178521 --9.7988224 19.731041 -1.3527077 --11.828073 24.188404 -1.6615496 --11.66428 24.229052 -1.6593459 --11.493597 24.254171 -1.6561346 --11.318827 24.269064 -1.6522938 --11.130569 24.252796 -1.6463751 --10.976619 24.309721 -1.6456195 --10.79565 24.305471 -1.6407083 --10.633127 24.341074 -1.6386305 --10.454424 24.338003 -1.6339711 --10.291302 24.369513 -1.6317673 --10.113647 24.364912 -1.6271709 --9.9417162 24.371988 -1.623456 --9.7693367 24.376022 -1.6196151 --9.5903368 24.361216 -1.6145779 --9.4230433 24.373989 -1.6114926 --9.2570181 24.38843 -1.6085963 --9.0810661 24.374628 -1.603874 --8.9148865 24.384899 -1.6008517 --8.7465639 24.387472 -1.5973886 --8.5795393 24.391724 -1.5941144 --8.4147453 24.400509 -1.591218 --8.2370644 24.369425 -1.5857401 --8.0669851 24.357927 -1.5816474 --7.9025936 24.361401 -1.5786251 --7.7351403 24.353312 -1.5749102 --7.5612698 24.322166 -1.5697471 --7.4037571 24.34137 -1.5679841 --7.2411714 24.342337 -1.5650877 --7.0802469 24.347017 -1.5625061 --6.9138083 24.330482 -1.5586023 --6.7571826 24.346483 -1.5569023 --3.8365011 14.160343 -0.88840598 --6.4405584 24.361959 -1.5526206 --6.283978 24.37396 -1.5508577 --3.6379607 14.478286 -0.90465087 --3.5462074 14.488703 -0.90389532 --5.8280225 24.459286 -1.5491576 --5.6726499 24.472223 -1.5477095 --3.341449 14.828998 -0.92184025 --5.3682823 24.52342 -1.546639 --4.1375375 19.472731 -1.2187818 --5.0639162 24.572788 -1.5456946 --3.9354012 19.707989 -1.2307451 --3.8136435 19.727846 -1.2304932 --4.6186409 24.70402 -1.5484021 --4.4616508 24.702429 -1.5465131 --4.316165 24.764736 -1.5487798 --4.1664448 24.804533 -1.5496613 --4.0149655 24.834557 -1.5499761 --3.8617415 24.853792 -1.5496613 --3.7097576 24.880968 -1.5499132 --3.5561743 24.897335 -1.5495354 --3.4045558 24.927586 -1.5501021 --3.2524419 24.954935 -1.5505428 --3.1027019 25.002153 -1.5523058 --2.9521542 25.0455 -1.55388 --2.8016343 25.091906 -1.5557059 --2.648458 25.116564 -1.5562097 --2.4940987 25.130356 -1.5560837 --2.3404098 25.151148 -1.5564616 --2.1894102 25.203812 -1.5589172 --2.0388157 25.267504 -1.5621283 --1.8863351 25.314373 -1.5643321 --1.7330157 25.355341 -1.566221 --1.5796361 25.401358 -1.5684878 --1.4265389 25.460394 -1.571636 --1.271036 25.48362 -1.5725805 --1.1155198 25.51088 -1.5738398 --0.96076679 25.565115 -1.5768621 --0.80551565 25.6224 -1.5801363 --0.64969862 25.682732 -1.5836623 --0.49378374 25.774044 -1.5892031 --0.3363564 25.832472 -1.5927292 --0.17808601 25.86898 -1.5949329 --0.019387871 25.914495 -1.5977664 -0.13986748 25.960035 -1.6006627 -0.29994512 26.027548 -1.6050073 -0.46075082 26.088081 -1.6089741 -0.62226319 26.145626 -1.6128149 -0.78473783 26.210148 -1.6171595 -0.94957441 26.316544 -1.6242115 -1.1148622 26.400961 -1.6299413 -1.2815107 26.490318 -1.6360489 -1.4479939 26.554703 -1.6406454 -1.6151943 26.616047 -1.6451159 -1.7868621 26.731106 -1.6530493 -1.9567329 26.800262 -1.6581495 -2.1322451 26.928034 -1.6670276 -2.3028638 26.978085 -1.6710572 -2.4725394 27.009165 -1.6739537 -1.9133424 19.575638 -1.2037332 -2.820612 27.138594 -1.6842169 -2.1835735 19.82448 -1.2211115 -3.1763825 27.299212 -1.6967468 -3.3535407 27.358458 -1.701784 -3.5565324 27.610561 -1.7191623 -3.7338941 27.64756 -1.7229402 -3.9126813 27.68935 -1.7270958 -4.0944524 27.745783 -1.732259 -4.2834363 27.842453 -1.7400666 -4.4747062 27.943756 -1.748252 -4.6767187 28.099871 -1.7600265 -4.8583913 28.124735 -1.7634895 -5.034564 28.115026 -1.7648118 -5.2337232 28.227856 -1.7740675 -2.8603587 14.915033 -0.92095876 -2.8276901 14.27065 -0.88066131 -5.8180056 28.447449 -1.7947199 -3.0528531 14.473149 -0.8960247 -3.1390579 14.442442 -0.89526916 -6.3589497 28.417349 -1.800009 -3.4185963 14.848273 -0.92410696 -6.7106433 28.351744 -1.8009535 -3.4611845 14.232078 -0.88689482 -7.0483871 28.228527 -1.7984349 -3.4490588 13.46054 -0.83948237 -3.5206804 13.397617 -0.83677489 -3.6087897 13.397927 -0.8382231 -3.9569099 14.339522 -0.90131372 -3.9970639 14.14594 -0.89023197 -4.0624394 14.047325 -0.88538367 -4.1230755 13.936003 -0.87971687 -4.1848116 13.832109 -0.87455374 -4.2625289 13.783289 -0.87304258 -4.3352947 13.719761 -0.87058699 -4.4190893 13.691952 -0.87052399 -4.506454 13.675006 -0.8712166 -4.5855055 13.632908 -0.87027216 -4.6710129 13.610179 -0.87064993 -4.7564135 13.586914 -0.87102771 -4.8631773 13.623269 -0.87543523 -4.9572554 13.622246 -0.87738717 -5.073019 13.678596 -0.88324285 -5.1850734 13.721899 -0.88828003 -5.3000002 13.769928 -0.893695 -5.4929166 14.01405 -0.91245848 -5.6046925 14.044968 -0.916866 -5.6918921 14.013088 -0.91705489 -5.7670937 13.952074 -0.91529191 -5.8491116 13.908145 -0.91472524 -5.9264898 13.853642 -0.91346592 -6.0157623 13.827084 -0.91415852 -6.1093726 13.809991 -0.91554374 -6.2075019 13.802281 -0.91762161 -6.3107452 13.804779 -0.92045504 -6.4197183 13.818294 -0.92410696 -6.5631757 13.903191 -0.93279612 -6.6768427 13.922051 -0.93695176 -6.8552346 14.07193 -0.95036322 -12.889429 26.05204 -1.7966089 -13.056207 25.986731 -1.7976164 -13.231285 25.937244 -1.7998201 -13.40533 25.884817 -1.801898 -13.575048 25.823278 -1.8034091 -13.753912 25.77824 -1.8061795 -13.925131 25.717936 -1.8079425 -14.096127 25.6565 -1.8097056 -14.263491 25.587831 -1.8110279 -14.426613 25.511124 -1.8118464 -14.601248 25.454155 -1.8141761 -14.78225 25.407217 -1.8173243 -14.955112 25.345261 -1.819465 -15.127256 25.281282 -1.821543 -15.290378 25.201639 -1.8225504 -15.444201 25.106495 -1.8224874 -15.613804 25.036663 -1.8243763 -15.770331 24.94545 -1.8247541 -15.935482 24.867542 -1.8262023 -16.095921 24.781851 -1.8271468 -16.255358 24.694292 -1.8280283 -16.41765 24.610691 -1.8292876 -13.624529 20.154581 -1.4976525 -16.691917 24.368668 -1.8263283 -16.830885 24.251032 -1.8251948 -13.932926 19.814663 -1.4910412 -14.215796 19.955587 -1.5086083 -17.175716 23.80035 -1.8145539 -14.268196 19.517784 -1.4881448 -17.446297 23.560516 -1.8124131 -17.592329 23.45542 -1.8126019 -17.730484 23.33988 -1.8120352 -17.872145 23.229067 -1.8119093 -18.010046 23.113457 -1.8114686 -18.155237 23.007215 -1.8118464 -18.307903 22.910198 -1.8130426 -18.436832 22.783466 -1.8119093 -18.568691 22.660648 -1.8111538 -18.704199 22.542446 -1.8108389 -18.852436 22.43948 -1.8118464 -18.958727 22.286894 -1.8088241 -19.052135 22.120235 -1.8046684 -12.96013 14.861593 -1.2068814 -12.881319 14.589516 -1.1906996 -12.926033 14.460349 -1.1864809 -12.938846 14.297145 -1.1793659 -12.99464 14.182899 -1.1764065 -13.069204 14.089727 -1.1752732 -13.149262 14.002724 -1.1747065 -13.271378 13.960114 -1.1780436 -13.370626 13.892801 -1.1793029 -13.512728 13.869117 -1.184466 -13.617196 13.805839 -1.186229 -13.755948 13.776405 -1.1910774 -13.901236 13.752105 -1.1964923 -14.936108 14.595668 -1.2803613 -14.974402 14.454534 -1.2758908 -15.010085 14.312103 -1.2712944 -14.827363 13.965181 -1.2478715 -14.899621 13.861703 -1.2467381 -14.981455 13.767319 -1.2464863 -15.008008 13.622813 -1.241575 -15.05416 13.497157 -1.2384268 -15.132957 13.401224 -1.238112 -15.347111 13.423763 -1.2491938 -15.451845 13.348916 -1.2510827 -15.664043 13.365277 -1.2619126 -15.893809 13.393682 -1.2741277 -16.187408 13.472116 -1.2915061 -22.695223 18.65399 -1.8162539 -22.841799 18.5408 -1.8188984 -22.963697 18.407164 -1.819591 -18.219847 14.421765 -1.4288321 -23.237391 18.162697 -1.8235579 -23.36578 18.033188 -1.8249431 -23.481546 17.893715 -1.8253838 -23.590099 17.748697 -1.8253208 -23.698561 17.603617 -1.8253208 -23.801298 17.454332 -1.8249431 -23.899864 17.302109 -1.8243134 -23.990963 17.144691 -1.82318 -21.14596 14.916345 -1.5954367 -20.863605 14.52627 -1.5667248 -21.322479 14.652337 -1.5950589 -24.351627 16.51491 -1.8191503 -24.511389 16.404591 -1.8236208 -24.704023 16.314934 -1.8306098 -23.430714 15.268351 -1.7272218 -19.271187 12.389968 -1.4082426 -23.447762 14.872754 -1.7146288 -23.541117 14.730189 -1.7148178 -23.596235 14.563974 -1.7122362 -23.650204 14.397638 -1.7096547 -20.026358 12.023664 -1.4365138 -20.041359 11.865983 -1.4322321 -20.04915 11.705048 -1.4275098 -19.938955 11.477249 -1.4142872 -21.175573 12.016722 -1.4989117 -20.039103 11.209778 -1.4114538 -20.052446 11.05625 -1.407487 -20.066418 10.903934 -1.4036462 -20.022089 10.721241 -1.3957126 -20.034536 10.570242 -1.3919348 -19.170099 9.9642572 -1.3258847 -20.086344 10.284473 -1.3865198 -20.151743 10.162381 -1.3867086 -20.261988 10.062512 -1.3901087 -20.812868 10.177382 -1.4244875 -20.977436 10.098837 -1.4316654 -21.259964 10.074644 -1.4470918 -21.723871 10.13173 -1.4751111 -21.967039 10.081504 -1.487704 -23.126352 10.442269 -1.5637025 -22.424749 9.9602642 -1.5108751 -22.8284 9.9723053 -1.5344869 -29.589602 12.710349 -1.9945699 -29.633936 12.514574 -1.9923033 -29.713854 12.334038 -1.992555 -25.522474 10.411037 -1.7018471 -25.584949 10.253867 -1.701784 -25.62324 10.087182 -1.700147 -25.72747 9.9463263 -1.7030433 -25.872923 9.820508 -1.7087731 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -29.346014 9.7190514 -1.9131566 -29.331049 9.5147839 -1.9082453 -29.336563 9.3180151 -1.9047823 -29.306461 9.1108723 -1.8990525 -29.311207 8.9154863 -1.8957154 -29.227612 8.6944895 -1.8866484 -29.07629 8.4556255 -1.873237 -29.214985 8.3018837 -1.8789667 -29.201904 8.1048508 -1.8748111 -0 0 -0 -28.928658 7.6479316 -1.8506327 -29.039789 7.486979 -1.8548512 -28.979679 7.2821403 -1.8479881 -28.927845 7.0806952 -1.8417546 -28.919292 6.8908029 -1.8384175 -0 0 -0 -28.819613 6.4943705 -1.8266431 -28.729254 6.2890277 -1.8182688 -0 0 -0 -28.732912 5.9212961 -1.8136723 -28.691385 5.7294421 -1.8086982 -28.693665 5.5470357 -1.8066202 -28.732067 5.3717875 -1.8069351 -28.763504 5.1952124 -1.8068721 -28.824335 5.023766 -1.8087611 -28.872334 4.8497849 -1.8098944 -28.932091 4.6774745 -1.8118464 -28.952356 4.4986362 -1.8113426 -28.979414 4.3209033 -1.8113426 -28.978706 4.1391969 -1.8096426 -28.98477 3.9587429 -1.8084463 -0 0 -0 -29.269857 3.6323817 -1.8236208 -29.270781 3.450263 -1.8222985 -29.306278 3.2722576 -1.823243 -29.312902 3.0910151 -1.8224244 -29.33231 2.911195 -1.8224874 -29.348627 2.7310681 -1.8224244 -29.444372 2.5578477 -1.8274616 -29.416739 2.3736801 -1.8247541 -29.472549 2.1962533 -1.8273987 -29.539238 2.0190475 -1.8307987 -29.622789 1.8422213 -1.8353322 -29.624567 1.6599219 -1.8347656 -29.658117 1.4793113 -1.8362767 -29.692558 1.2984387 -1.8379138 -18.523102 0.69600946 -1.1322683 -18.525028 0.58227801 -1.1321423 -17.68021 0.44713339 -1.0786223 -17.693598 0.33885169 -1.0793149 -0 0 -0 -18.442921 0.12684907 -1.1264125 -17.778673 0.013175506 -1.084478 -17.708561 -0.09553732 -1.0800705 -17.532001 -0.20217182 -1.0689888 -17.518457 -0.30953103 -1.0682331 -17.540173 -0.417586 -1.0697443 -17.549252 -0.52556086 -1.0704999 -17.533728 -0.63279945 -1.0697443 -0 -0 -0 -17.650246 -0.85399199 -1.0776778 -17.664604 -0.96336228 -1.0789372 -17.910395 -1.087023 -1.0948672 -17.933262 -1.1988952 -1.0967562 -17.958414 -1.3113067 -1.098834 -17.976892 -1.4235995 -1.1005341 -17.851475 -1.5239472 -1.0931672 -26.214075 -2.3997653 -1.6235819 -26.213757 -2.5620227 -1.6245264 -25.874926 -2.6892929 -1.6040628 -25.23991 -2.7799475 -1.5648358 -25.202551 -2.9324577 -1.5635766 -16.218134 -1.9881479 -0.99368298 -15.58005 -2.007051 -0.95388925 -15.448757 -2.0865836 -0.94633353 -15.253835 -2.1556451 -0.93474799 -14.987565 -2.2119048 -0.91862905 -14.92735 -2.2966933 -0.91566968 -14.893268 -2.3850868 -0.91441041 -14.870477 -2.4751146 -0.91390669 -14.837307 -2.5632539 -0.91277331 -14.834071 -2.6565323 -0.91359186 -13.397559 -2.4842534 -0.82248193 -13.158587 -2.523561 -0.80812597 -13.15754 -2.6071625 -0.80907047 -13.40823 -2.7424355 -0.82625979 -12.970263 -2.7358887 -0.79912204 -12.913247 -2.8067315 -0.79654044 -12.873382 -2.8809006 -0.79509228 -12.80197 -2.9475217 -0.7916292 -12.726344 -3.0124562 -0.78791428 -12.707621 -3.0904868 -0.78791428 -12.662274 -3.1618736 -0.78621423 -11.004893 -2.8199122 -0.67955202 -12.654373 -3.3253906 -0.78829211 -12.946926 -3.4873247 -0.80875564 -12.732871 -3.5136099 -0.79616266 -12.628476 -3.5683355 -0.7907477 -7.9219561 -2.2911847 -0.48310214 -7.9048772 -2.3389003 -0.48291326 -7.9027958 -2.3911166 -0.48373181 -7.8813009 -2.4374983 -0.48329106 -7.8966494 -2.4954331 -0.48530591 -7.915381 -2.5548735 -0.48757264 -7.9109302 -2.6071413 -0.48832822 -13.952639 -4.6930385 -0.89155424 -13.879213 -4.7633367 -0.88859487 -13.835595 -4.8434625 -0.88765037 -13.534915 -4.8316398 -0.86951655 -0 -0 -0 -10.993011 -4.0770917 -0.70253414 -10.993927 -4.1543441 -0.70429718 -7.1643291 -2.7577324 -0.44714931 -7.1509895 -2.8030968 -0.44740117 -7.1299477 -2.8454423 -0.44714931 -0 -0 -0 -19.830132 -8.1966085 -1.316566 -19.528311 -8.212513 -1.2993766 -19.66474 -8.4122543 -1.3122214 -9.0380287 -3.9323344 -0.58466423 -9.01373 -3.9877167 -0.58466423 -19.717735 -8.8677578 -1.3268292 -19.587614 -8.9541388 -1.3216032 -5.5943904 -2.5993106 -0.35200962 -5.5530653 -2.6216598 -0.35024661 -5.4486856 -2.6133919 -0.34407607 -5.3509002 -2.6070025 -0.3383463 -5.3204904 -2.632705 -0.33733886 -5.3800387 -2.7033846 -0.34269086 -3.8528907 -1.9658453 -0.23571382 -3.8602531 -1.9995462 -0.23709904 -3.8549786 -2.0269096 -0.23760276 -3.8512745 -2.055223 -0.2382324 -20.283644 -10.982797 -1.4180651 -20.119656 -11.054187 -1.411139 -19.894537 -11.089966 -1.3998053 -19.595034 -11.081153 -1.3830568 -19.489447 -11.179824 -1.3803493 -19.364408 -11.266577 -1.3762565 -13.949396 -8.2311277 -0.98467898 -3.7894678 -2.2678545 -0.2414436 -6.8420897 -4.1515841 -0.46773878 -4.0512247 -2.4924951 -0.26291457 -3.8944323 -2.4291122 -0.25239947 -4.0144277 -2.5382891 -0.26247382 -3.4962802 -2.2408752 -0.22482093 -3.4975302 -2.2720709 -0.22595429 -3.4443429 -2.2676983 -0.22299495 -3.3498302 -2.2350676 -0.21688737 -3.267426 -2.2091897 -0.21166131 -3.2282844 -2.2117131 -0.20970939 -3.1998944 -2.2212374 -0.20857604 -3.18049 -2.2368116 -0.20813528 -3.157764 -2.2499151 -0.20744267 -3.6820805 -2.6576202 -0.2493142 -3.6294482 -2.6536593 -0.24648078 -3.6435757 -2.6984477 -0.24887344 -3.1662683 -2.375237 -0.2125428 -3.1413031 -2.3867719 -0.21172427 -3.130554 -2.4090445 -0.21203908 -3.635299 -2.8330584 -0.2535958 -3.6452687 -2.8769488 -0.25579956 -5.4121985 -4.3253646 -0.39992577 -15.161747 -12.269358 -1.193344 -15.111652 -12.383031 -1.1954219 -14.93093 -12.388853 -1.1868587 -14.726257 -12.372383 -1.1762806 -14.775496 -12.569205 -1.1866698 -14.702631 -12.663537 -1.1870476 -2.9536202 -2.5761452 -0.21008718 -4.9106412 -4.3360381 -0.37612513 -2.8972297 -2.5902481 -0.20800935 -3.5598547 -3.2220559 -0.26574799 -2.8424132 -2.6047065 -0.20605744 -3.4461436 -3.1969504 -0.25938854 -2.7498496 -2.5826883 -0.20083137 -2.7440774 -2.609139 -0.20171288 -2.7093198 -2.607934 -0.20007579 -2.6825442 -2.6140623 -0.19913132 -3.6413367 -3.5919952 -0.28551891 -2.6714509 -2.6679394 -0.20102027 -2.6248486 -2.6537731 -0.19831279 -2.6154914 -2.6769667 -0.19894244 -2.5851536 -2.6786036 -0.19768314 -3.3696554 -3.5344322 -0.2709111 -12.012933 -12.754668 -1.0682331 -11.640089 -12.511753 -1.0409695 -7.6962595 -8.3752508 -0.68043357 -7.5622177 -8.3314238 -0.6726889 -2.8905525 -3.2244711 -0.23602864 -2.8561563 -3.2257094 -0.23464341 -10.972216 -12.544418 -1.0142725 -10.788688 -12.488407 -1.0040091 -3.0942891 -3.6269662 -0.26360717 -3.3703918 -3.9999895 -0.29282281 -3.3898375 -4.073524 -0.29716736 -2.8159745 -3.4265668 -0.24263994 -10.279767 -12.664697 -0.99191993 -10.194374 -12.718189 -0.99116439 -9.9959764 -12.628691 -0.97894925 -9.7572718 -12.483773 -0.96245247 -3.1754084 -4.1149468 -0.29074496 -3.1609881 -4.1486416 -0.29187834 -9.5336342 -12.671625 -0.96327102 -9.4777222 -12.759527 -0.96560073 -9.2936068 -12.673383 -0.95433003 -9.2525406 -12.781097 -0.95829678 -9.1797457 -12.84575 -0.95892644 -9.0662355 -12.852902 -0.95514858 -2.9616885 -4.2543335 -0.28986347 -2.9824436 -4.3406954 -0.29508954 -2.9888039 -4.4076462 -0.29880446 -2.9739151 -4.444149 -0.30018967 -8.562109 -12.965064 -0.94305933 -8.4796705 -13.013175 -0.94274449 -2.8160453 -4.38061 -0.29137462 -2.7655919 -4.3607244 -0.28860417 -2.7472532 -4.3911481 -0.28961161 -2.7244515 -4.4147162 -0.29011533 -1.4092124 -2.3155289 -0.13383693 -2.6793184 -4.4632187 -0.29124868 -1.4056065 -2.3747275 -0.1369222 -1.3789322 -2.3626225 -0.13541104 -1.3763591 -2.3917978 -0.1369222 -1.3631351 -2.4028018 -0.13711108 -2.4870646 -4.4466262 -0.28425962 -6.9215946 -12.553836 -0.86724985 -6.8668323 -12.637284 -0.87020916 -6.7731433 -12.649266 -0.8680684 -6.631597 -12.569659 -0.85944223 -6.5888691 -12.676528 -0.86416459 -6.4663868 -12.629662 -0.85799402 -6.4027023 -12.696725 -0.85994595 -6.1977143 -12.480131 -0.84193802 -6.2073917 -12.694547 -0.85434204 -5.9423604 -12.343928 -0.82714128 -5.8271875 -12.297185 -0.82134855 -5.7414989 -12.311002 -0.81983739 -5.7141423 -12.451216 -0.82714128 -5.7004762 -12.625209 -0.83677489 -5.5690193 -12.538642 -0.82840061 -5.4851866 -12.557029 -0.82733023 -1.3223946 -3.079433 -0.17426027 -1.3030864 -3.0865698 -0.1741973 -5.2194524 -12.574752 -0.82178932 -5.174993 -12.686936 -0.82726723 -5.0710597 -12.653604 -0.8228597 -1.2529031 -3.183553 -0.1786678 -0.94543213 -2.4464872 -0.12829603 -0.93784058 -2.4718363 -0.12961829 -0.90802151 -2.4382653 -0.12697378 -0.89270079 -2.4428537 -0.12691081 -0.87836879 -2.4501641 -0.12703674 -0.85470796 -2.4310293 -0.12539965 -0 -0 -0 -4.3054667 -12.738357 -0.81114829 -4.2507582 -12.83559 -0.81587064 -4.1703811 -12.856685 -0.81555581 -1.0129812 -3.1904173 -0.17400841 -0.99605268 -3.2051501 -0.17457509 -0.97898144 -3.2197948 -0.17514177 -0.95892215 -3.2247844 -0.17507881 -0.93688756 -3.2229412 -0.17457509 -0.93100786 -3.2775893 -0.17778629 -3.5664458 -12.850797 -0.80422217 -3.4763041 -12.831017 -0.80151469 -3.3947029 -12.841493 -0.80082208 -0.86698586 -3.3641996 -0.18200493 -3.2242141 -12.831852 -0.79754788 -3.1411474 -12.833944 -0.79641455 -3.0671988 -12.873364 -0.79773682 -2.9856725 -12.881248 -0.79704416 -0.70874864 -3.146785 -0.16632672 -1.8919027 -8.6438122 -0.52106988 -1.8006595 -8.4756336 -0.50948435 -0.64627463 -3.1377933 -0.16494149 -0.62583661 -3.1358275 -0.1645637 -0.60544711 -3.1337295 -0.16418591 -2.4323885 -13.011301 -0.79792571 -1.4892639 -8.2469759 -0.49153942 -2.2747645 -13.052952 -0.7987442 -1.4420141 -8.5864716 -0.51212889 -2.1413343 -13.246387 -0.80938524 -2.054652 -13.22476 -0.80718148 -1.9717015 -13.225273 -0.80642593 -1.8947496 -13.266762 -0.80831486 -1.814121 -13.284071 -0.80869263 -0.50618529 -3.8864088 -0.21008718 -1.6399052 -13.216195 -0.80302584 -0.45646858 -3.8754783 -0.20901679 -0.43057606 -3.8593609 -0.20782046 -0.41002753 -3.8917055 -0.20970939 -1.2825379 -12.924726 -0.78224748 -1.2067237 -12.970113 -0.78464013 -1.124699 -12.949433 -0.78287715 -1.058629 -13.122219 -0.79339224 -0.98476875 -13.21804 -0.79905903 -0.90364581 -13.223834 -0.79905903 -0.82143557 -13.212196 -0.79798865 -0.7409659 -13.227949 -0.79868126 -0.65784729 -13.193372 -0.79622567 -0.57740521 -13.209126 -0.79698122 -0.4946574 -13.167541 -0.79414779 -0.41159454 -13.098506 -0.78961432 -0.33242807 -13.148674 -0.79263663 -0.25281447 -13.206346 -0.79616266 -0.17326014 -13.321412 -0.80334067 -0.091793664 -13.362144 -0.80585927 -0.0096776215 -13.197783 -0.79547006 --0.072535813 -13.427135 -0.80995196 --0.15262476 -13.226847 -0.79735899 --0.23407963 -13.242624 -0.79842943 --0.31571013 -13.256903 -0.79943687 --0.39659923 -13.239753 -0.79849237 --0.47390836 -13.128357 -0.7916292 --0.55845225 -13.219929 -0.79761088 --0.63700259 -13.163421 -0.79427373 --0.73150402 -13.411387 -0.81020379 --0.80924809 -13.331933 -0.80548143 --0.90135127 -13.481065 -0.81524098 --0.95273668 -13.046277 -0.78810322 --1.0697886 -13.50779 -0.81769663 --1.1434001 -13.392582 -0.81083345 --1.2246443 -13.375376 -0.81020379 --1.3063998 -13.36463 -0.8100149 --1.3924022 -13.395076 -0.81247056 --1.4937938 -13.560876 -0.82355231 --1.5971566 -13.724937 -0.83457112 --1.6844978 -13.740635 -0.83620822 --1.7729841 -13.762705 -0.83828604 --1.8907868 -13.998826 -0.85402727 --1.9737144 -13.966209 -0.852705 --2.068696 -14.017024 -0.85673475 --2.1596713 -14.036619 -0.85881257 --2.2459157 -14.024089 -0.85887551 --2.3281553 -13.987401 -0.85742736 --2.4195423 -14.005306 -0.85950518 --2.537622 -14.169974 -0.87102771 --2.62834 -14.174745 -0.87234998 --2.722595 -14.196576 -0.87480557 --2.8011184 -14.136528 -0.87203515 --2.8856061 -14.108319 -0.87134254 --2.9809749 -14.132339 -0.87405002 --3.0890393 -14.212282 -0.88040948 --3.1722636 -14.17553 -0.8792761 --3.3171721 -14.407696 -0.89558393 --3.4130988 -14.41912 -0.89766181 --3.4953775 -14.372693 -0.8960247 --3.5839844 -14.352911 -0.89615065 --3.6682692 -14.316149 -0.89520615 --3.7494483 -14.268274 -0.89356905 --3.8366666 -14.244036 -0.89350611 --3.9319577 -14.249088 -0.89539504 --4.0206709 -14.229496 -0.89570987 --4.1847 -14.470128 -0.91315109 --4.2728419 -14.442265 -0.9130252 --4.3605108 -14.41291 -0.91283625 --4.4559407 -14.408766 -0.91434741 --4.554791 -14.414461 -0.91655117 --4.6452966 -14.392891 -0.91699195 --4.7194672 -14.321462 -0.91415852 --4.811707 -14.305477 -0.91504002 --4.9081397 -14.301171 -0.91674012 --5.0043707 -14.295278 -0.91837716 --5.1228571 -14.350776 -0.9241699 --4.8733044 -13.391533 -0.86189783 --5.340219 -14.399119 -0.93172568 --5.4408159 -14.398758 -0.93392944 --5.6118693 -14.580259 -0.94847429 --5.6975846 -14.536259 -0.94784468 --5.8440003 -14.644702 -0.95760417 --5.9975924 -14.76576 -0.96830821 --6.0587268 -14.657662 -0.96345991 --6.1485505 -14.620211 -0.96345991 --6.2275448 -14.557433 -0.96175987 --6.6018133 -15.174206 -1.0068426 --6.396028 -14.458011 -0.96024871 --6.6602244 -14.808973 -0.98726058 --6.3169689 -13.818394 -0.92139947 --6.9945035 -15.055591 -1.0101798 --6.9589458 -14.741633 -0.99129033 --1.651041 -3.4419305 -0.20366478 --1.6655732 -3.4182768 -0.20272031 --1.6772224 -3.3892076 -0.20139806 --1.6935061 -3.3699346 -0.20076841 --1.7159659 -3.3630362 -0.20102027 --1.7328972 -3.3453541 -0.20051655 --1.7687157 -3.3638103 -0.20259438 --4.4892006 -8.4133015 -0.56445253 --4.6818686 -8.6462545 -0.58315307 --8.3289356 -15.159238 -1.0540661 --8.4198503 -15.104361 -1.0538143 --4.6898999 -8.292779 -0.56388587 --8.6393309 -15.060498 -1.0582218 --9.2806349 -15.950934 -1.1271052 --9.365654 -15.872201 -1.1255311 --9.2225389 -15.412775 -1.0960007 --9.5592079 -15.755221 -1.1254681 --9.6274633 -15.650368 -1.122068 --9.5865316 -15.371668 -1.1057601 --9.7275991 -15.386792 -1.1113011 --10.358132 -16.16375 -1.1740139 --9.9298201 -15.288022 -1.1129382 --10.473397 -15.910379 -1.1645691 --10.533163 -15.78936 -1.1602876 --10.61252 -15.6988 -1.1583357 --10.782528 -15.741251 -1.166584 --10.19836 -14.694184 -1.0912783 --11.030567 -15.686938 -1.1726916 --11.150353 -15.652288 -1.1752732 --11.256697 -15.598144 -1.1764065 --11.335114 -15.505415 -1.1745806 --11.111113 -15.004862 -1.1407685 --11.002967 -14.669735 -1.1197383 --11.086735 -14.593998 -1.1191087 --11.818112 -15.360202 -1.1855364 --11.919498 -15.296844 -1.1862921 --12.089176 -15.319787 -1.1940366 --12.885098 -16.124002 -1.2649978 --13.167107 -16.271179 -1.2833836 --13.220521 -16.133728 -1.2787871 --13.334561 -16.070738 -1.2802984 --13.447684 -16.006191 -1.2817465 --13.610954 -16.000154 -1.288106 --13.759675 -15.975323 -1.2930171 --12.464249 -14.292935 -1.1592802 --12.831119 -14.532657 -1.1859142 --12.750444 -14.26391 -1.1698582 --12.837727 -14.185407 -1.1698582 --12.893512 -14.072518 -1.1669618 --12.60973 -13.594354 -1.1326461 --12.690856 -13.514544 -1.1324571 --14.305559 -15.04801 -1.2727425 --14.410771 -14.973613 -1.2739389 --14.532323 -14.915647 -1.2766464 --14.629878 -14.832592 -1.2772131 --14.609198 -14.63096 -1.2672646 --15.227262 -15.06396 -1.3141733 --14.548526 -14.216906 -1.2461715 --13.768087 -13.290053 -1.1701101 --13.846485 -13.202569 -1.1698582 --13.929414 -13.119412 -1.1700472 --14.561316 -13.546952 -1.2175854 --14.552309 -13.372936 -1.2097149 --14.634089 -13.283393 -1.2097149 --14.678166 -13.160038 -1.2065667 --15.602164 -13.816754 -1.2776538 --15.682893 -13.717476 -1.277339 --10.123095 -8.745203 -0.8068037 --15.484114 -13.211746 -1.24699 --16.216625 -13.665728 -1.3007618 --16.39529 -13.645134 -1.3085694 --10.327724 -8.4884329 -0.80623704 --10.380389 -8.4255323 -0.80629998 --15.315971 -12.276753 -1.2012147 --15.455961 -12.233957 -1.2064407 --15.647111 -12.229854 -1.2157595 --15.75741 -12.161055 -1.2185929 --15.846021 -12.075028 -1.2197262 --15.730808 -11.835363 -1.2048036 --16.440054 -12.211746 -1.2548605 --16.280479 -11.938893 -1.2365378 --16.3316 -11.822971 -1.2348378 --16.389223 -11.712095 -1.2337044 --16.668737 -11.758011 -1.2497604 --16.897823 -11.765004 -1.2618496 --17.936157 -12.325253 -1.3358332 --18.007317 -12.212167 -1.3355184 --18.06864 -12.092565 -1.3345109 --18.103357 -11.95562 -1.3315516 --18.234068 -11.881911 -1.3358961 --18.327618 -11.783299 -1.3374703 --18.436655 -11.694142 -1.3402407 --18.508062 -11.580797 -1.3402407 --18.661152 -11.517863 -1.3463483 --18.768982 -11.425979 -1.3491187 --19.115107 -11.476536 -1.3694563 --19.559589 -11.580728 -1.396909 --19.661306 -11.478609 -1.3991756 --20.854067 -12.004027 -1.4809039 --20.997637 -11.915743 -1.486004 --21.160938 -11.837353 -1.4925523 --21.251526 -11.717409 -1.4938745 --21.287947 -11.56773 -1.491356 --21.089302 -11.292726 -1.4720888 --6.8216081 -3.5987892 -0.44941604 --16.375376 -8.5115471 -1.1271682 --16.451277 -8.4231901 -1.1288682 --7.1861067 -3.6236143 -0.47057217 --6.9489894 -3.4507153 -0.45231241 --6.956583 -3.4014356 -0.45136794 --6.9737263 -3.3569551 -0.45111609 --6.8670292 -3.253839 -0.44223806 --22.052197 -10.284863 -1.4979674 --22.133936 -10.158102 -1.4992895 --7.258666 -3.2772129 -0.46528316 --22.328979 -9.9177256 -1.5042638 --22.407705 -9.7885208 -1.5055231 --22.485683 -9.6587238 -1.5067824 --22.573946 -9.5329971 -1.5087973 --21.977568 -9.1226406 -1.4640923 --21.928709 -8.9450207 -1.4569772 --21.968359 -8.8043594 -1.4559698 --21.978323 -8.652215 -1.4530106 --21.978868 -8.4970417 -1.4494845 --21.977407 -8.3418341 -1.4458954 --22.047817 -8.2141438 -1.4472177 --22.108114 -8.0824757 -1.4479103 --22.228687 -7.9722781 -1.4526957 --22.63212 -7.9605861 -1.4764334 --22.843761 -7.8778596 -1.4873263 --24.032841 -8.1232901 -1.5633247 --24.101181 -7.9819498 -1.564584 --24.156349 -7.8360734 -1.5650247 --24.17544 -7.6786413 -1.5631357 --24.302153 -7.5550475 -1.5684248 --24.511326 -7.4554548 -1.5791918 --24.676184 -7.3404875 -1.5870624 --12.488862 -3.6316268 -0.78338087 --13.155073 -3.7379863 -0.82563019 --25.136005 -6.9763222 -1.6085963 --25.21109 -6.8308334 -1.6107371 --12.78553 -3.3799074 -0.7971701 --12.805062 -3.3011439 -0.79710716 --12.880248 -3.236376 -0.80069613 --12.489809 -3.0569081 -0.77406204 --25.74564 -6.1345491 -1.6325859 --13.141807 -3.0460742 -0.81391871 --25.866688 -5.8288999 -1.6356711 --25.937063 -5.6777587 -1.6379379 --18.313959 -3.8912992 -1.1440427 --26.093735 -5.3773756 -1.6436676 --19.149157 -3.8237989 -1.1947923 --26.274364 -5.0793037 -1.6511605 --26.450226 -4.9451389 -1.6604792 --18.7272 -3.3823311 -1.1634358 --18.720072 -3.2625611 -1.1616728 --26.343861 -4.4250326 -1.6481382 --26.328152 -4.2564569 -1.6454307 --18.340075 -2.8495445 -1.1337794 --19.213032 -2.8645749 -1.1883699 --24.258108 -3.4648607 -1.5087973 --24.241335 -3.310818 -1.5064045 --26.346375 -3.4338143 -1.6390712 --26.371899 -3.2727058 -1.6393861 --26.407343 -3.1126988 -1.6403935 --26.366432 -2.9439621 -1.6366156 --26.425686 -2.7865217 -1.6392601 --26.219824 -2.602242 -1.625156 --25.852715 -2.4057043 -1.6009146 --25.914715 -2.2511764 -1.6039369 --26.877062 -2.1687152 -1.6640053 --27.069008 -2.017112 -1.6753389 --28.151243 -1.9241574 -1.7430259 --30.880852 -1.9204763 -1.9148567 --30.994688 -1.736711 -1.921342 --31.013733 -1.546946 -1.9219086 --31.035603 -1.3571873 -1.9227272 --31.021404 -1.165906 -1.921342 --31.013012 -0.97506958 -1.9203975 --25.864546 1.9118208 -1.9218043 --25.843384 2.0697696 -1.9211264 --25.826223 2.2279599 -1.920825 --25.805115 2.3857417 -1.9202977 --25.772129 2.5422711 -1.9189419 --25.741169 2.6987977 -1.917812 --25.703312 2.8543797 -1.9162301 --25.663527 3.0094824 -1.914573 --25.618847 3.1637156 -1.9126143 --25.572254 3.3173854 -1.9105805 --25.515846 3.4693933 -1.9078689 --0 0 -0 --0 0 -0 --0 0 -0 --25.347214 4.0823264 -1.9020686 --25.30792 4.2354722 -1.9010141 --25.259842 4.3869243 -1.8993568 --25.209877 4.5377693 -1.8976244 --25.166855 4.6896281 -1.8964945 --25.090607 4.8349018 -1.8928788 --25.033087 4.9833117 -1.8907696 --25.004969 5.1374202 -1.8909956 --24.960293 5.2880635 -1.8900163 --24.936144 5.4430318 -1.8906943 --24.939247 5.6042442 -1.8935567 --24.931593 5.7634525 -1.8956659 --24.938446 5.9264679 -1.8989803 --24.940359 6.0888371 -1.9019933 --24.948957 6.2533927 -1.905609 --24.997997 6.4289641 -1.9124638 --25.023643 6.5995226 -1.917586 --25.019258 6.7628298 -1.9204484 --25.061857 6.9396381 -1.9270772 --25.105145 7.1177673 -1.9338566 --25.130907 7.2919636 -1.9393554 --25.129663 7.4590812 -1.9428204 --25.150213 7.6334085 -1.9480933 --25.144808 7.8005857 -1.9514077 --25.153503 7.9728045 -1.9559274 --25.16008 8.1451159 -1.9603716 --25.20336 8.3303261 -1.967829 --25.225468 8.5096798 -1.9737045 --25.239721 8.6873446 -1.9790527 --25.234865 8.8592272 -1.9829696 --25.236361 9.0340652 -1.9874892 --25.227289 9.2058363 -1.9912556 --25.203974 9.3729687 -1.9939673 --25.190746 9.5444012 -1.997583 --25.176361 9.7160244 -2.0011988 --25.179379 9.8951235 -2.006321 --25.174664 10.072032 -2.010916 --25.199198 10.261666 -2.0179965 --25.177212 10.433272 -2.0213864 --25.193577 10.621654 -2.0280151 --25.188414 10.80198 -2.0329866 --25.213058 10.996197 -2.0405192 --25.203451 11.176568 -2.0453403 --25.287117 11.399858 -2.0579951 --25.15777 11.5278 -2.0530989 --25.133568 11.703839 -2.0570159 --25.103643 11.877882 -2.0605562 --25.066238 12.048973 -2.0635693 --25.021404 12.216989 -2.0660551 --25.26757 12.529779 -2.0931728 --25.335382 12.757689 -2.1054511 --0 0 -0 --25.035313 12.994128 -2.0933988 --24.894239 13.115425 -2.0882013 --24.528397 13.115572 -2.0637953 --24.145094 13.101741 -2.0378075 --23.9044 13.161625 -2.0240228 --23.433199 13.090174 -1.9902763 --22.963791 13.013443 -1.95653 --22.675167 13.034328 -1.9383762 --22.435402 13.080295 -1.9244407 --22.116964 13.077117 -1.9035752 --21.835339 13.092068 -1.8858734 --21.655762 13.165707 -1.8771355 --21.409048 13.196299 -1.8624468 --21.504406 13.437863 -1.87819 --21.363426 13.532738 -1.8729925 --21.149096 13.579514 -1.8612415 --20.998516 13.665511 -1.8552154 --20.690359 13.646401 -1.8349525 --20.547379 13.733753 -1.8296043 --20.366955 13.794701 -1.8208663 --20.196426 13.860724 -1.8130324 --19.975101 13.889879 -1.8005282 --19.888683 14.011608 -1.8004528 --19.783669 14.120054 -1.7987202 --19.650599 14.207874 -1.7944267 --19.560638 14.326413 -1.7942007 --19.465157 14.440818 -1.7935227 --19.359444 14.547401 -1.7919408 --19.240459 14.643569 -1.7891538 --19.13998 14.753436 -1.7881745 --19.04595 14.868144 -1.7878733 --18.946541 14.978544 -1.78712 --18.83326 15.077688 -1.7850862 --19.036272 15.432859 -1.813861 --18.950468 15.556967 -1.8147649 --19.713463 16.386906 -1.8991309 --19.554565 16.458754 -1.893406 --19.398567 16.531857 -1.8879825 --19.292234 16.646664 -1.8875306 --19.176214 16.752916 -1.8861747 --19.04393 16.844498 -1.883237 --18.92536 16.947727 -1.8817304 --18.813627 17.056833 -1.8809772 --18.685843 17.151047 -1.878642 --15.016438 13.953461 -1.5111226 --18.440557 17.347628 -1.875177 --18.239901 17.371048 -1.8653845 --18.204752 17.551851 -1.8729172 --18.086723 17.653473 -1.8718626 --14.559365 14.385793 -1.5087874 --14.466592 14.470625 -1.5083355 --17.715979 17.940117 -1.8672676 --17.584679 18.027067 -1.8650079 --17.46059 18.120981 -1.8635767 --17.340137 18.218386 -1.8625973 --17.228024 18.32444 -1.8625973 --13.791854 14.850807 -1.4936467 --16.988377 18.519777 -1.8610909 --16.857685 18.605194 -1.8592077 --16.709961 18.671127 -1.8554413 --16.566025 18.740431 -1.852127 --16.438263 18.827454 -1.8506957 --16.337408 18.945332 -1.8524283 --16.2215 19.045979 -1.8525037 --16.05876 19.090971 -1.8471555 --15.852753 19.082529 -1.8366849 --15.688565 19.122391 -1.8311108 --15.5157 19.15011 -1.8244821 --15.349939 19.184998 -1.8186818 --15.248005 19.299166 -1.8206403 --15.182047 19.459978 -1.8271185 --15.172494 19.695751 -1.8407526 --15.143714 19.909914 -1.8522776 --15.076948 20.076614 -1.859283 --14.928535 20.135103 -1.8561193 --14.795874 20.214254 -1.8549894 --14.693753 20.335375 -1.8578519 --14.573334 20.431644 -1.8584545 --14.448841 20.522312 -1.858605 --14.329474 20.620409 -1.859509 --14.211703 20.721102 -1.8607142 --14.090442 20.816998 -1.8615428 --13.964108 20.90555 -1.8617688 --13.842155 21.00083 -1.8626727 --13.714666 21.087875 -1.8628987 --9.0666971 14.129318 -1.2308315 --13.448987 21.245319 -1.8620701 --13.317846 21.326595 -1.8619947 --13.185169 21.405363 -1.8617688 --9.1396694 15.042992 -1.2922982 --8.6879511 14.499158 -1.2394941 --8.5973005 14.549618 -1.2392681 --12.707083 21.810383 -1.8694521 --8.2050476 14.283076 -1.2069529 --12.525935 22.119127 -1.8828603 --12.412821 22.236492 -1.8864007 --8.2445183 14.983848 -1.2545594 --12.233113 22.560711 -1.9013153 --12.120767 22.684601 -1.9055337 --10.173595 19.324343 -1.6123618 --11.813477 22.777634 -1.9009387 --10.221922 20.008066 -1.6598929 --10.03353 19.940357 -1.6488953 --9.7848253 19.746897 -1.6274271 --9.466301 19.402374 -1.5934547 --10.766891 22.416487 -1.8412046 --9.4657173 20.021021 -1.6355624 --10.416545 22.386898 -1.8278718 --10.271099 22.433165 -1.8264406 --10.124659 22.476671 -1.8248587 --9.9966516 22.561165 -1.8267418 --9.8038607 22.497753 -1.8164974 --9.7155046 22.673891 -1.8260639 --9.5769711 22.734915 -1.8262146 --9.4754343 22.885384 -1.8337473 --9.3611364 23.007748 -1.8390201 --9.2212677 23.068459 -1.8393214 --9.0635157 23.083763 -1.836007 --8.8969555 23.074743 -1.8308095 --8.7410851 23.091597 -1.8277965 --8.5752735 23.080297 -1.8225988 --8.416419 23.085638 -1.8188325 --8.270916 23.126516 -1.8180039 --8.1245689 23.164598 -1.8170247 --7.9693131 23.176294 -1.8140116 --7.8119907 23.180344 -1.8104713 --7.6592956 23.196594 -1.8079854 --7.5063891 23.210894 -1.8054243 --7.3544989 23.227045 -1.8030893 --7.2044635 23.247923 -1.8012061 --7.0556068 23.27165 -1.7996242 --6.9050298 23.288692 -1.7975904 --6.7509012 23.292313 -1.7945772 --6.6045952 23.321783 -1.7936734 --3.9015102 14.10465 -1.0681256 --6.3004932 23.336575 -1.7886264 --6.1571841 23.374794 -1.7886264 --6.0141392 23.414064 -1.7887771 --3.6311777 14.503757 -1.0920795 --3.5371566 14.505421 -1.0904976 --5.5531373 23.398552 -1.7792859 --3.2795005 14.203783 -1.0638319 --5.2557597 23.421152 -1.7758962 --5.1376414 23.570848 -1.7850108 --4.9698076 23.492664 -1.7765741 --4.8227611 23.509041 -1.7755196 --3.916204 19.70233 -1.4800879 --3.7969341 19.7348 -1.4807658 --4.3999767 23.651669 -1.7799639 --3.4878273 19.40892 -1.4522923 --4.1117868 23.717638 -1.7810185 --3.9693015 23.761108 -1.7824497 --3.8209 23.769264 -1.7812444 --3.6714828 23.769594 -1.7795119 --3.5243971 23.783785 -1.7789093 --3.3811975 23.824707 -1.7804159 --3.2381644 23.868719 -1.7822237 --3.0919034 23.890118 -1.7823744 --2.9450145 23.90666 -1.7822237 --2.8010497 23.94805 -1.7840315 --2.6571264 23.992537 -1.7861407 --2.5125554 24.034176 -1.7880992 --2.3670857 24.069979 -1.7896811 --2.2211795 24.103909 -1.7911876 --2.0732388 24.117085 -1.7911876 --1.9276773 24.160166 -1.7935227 --1.7805676 24.18745 -1.7947279 --1.6339332 24.224783 -1.7967618 --1.4873953 24.269188 -1.7993982 --1.339606 24.298767 -1.8009801 --1.1903889 24.304537 -1.8008294 --1.0422596 24.335293 -1.8026372 --0.89489275 24.395041 -1.8067049 --0.74728781 24.468843 -1.8119024 --0.59803396 24.509853 -1.8146895 --0.44815966 24.541973 -1.816874 --0.29886493 24.651947 -1.8250093 --0.14808345 24.735083 -1.8311862 -0.0036993716 24.778402 -1.8344252 -0.1560335 24.82478 -1.8379655 -0.30882499 24.861244 -1.8408279 -0.46286744 24.939636 -1.8469294 -0.61785883 25.016075 -1.8529556 -0.77318996 25.071615 -1.8574752 -0.92852479 25.107254 -1.8605636 -1.0853583 25.165838 -1.8654598 -1.2430439 25.225433 -1.8705068 -1.3995683 25.249191 -1.8729172 -1.5526892 25.211266 -1.8707327 -1.7064091 25.187336 -1.8696781 -1.8609235 25.176392 -1.8696781 -2.0156865 25.168476 -1.8699794 -2.1705081 25.160601 -1.8703561 -1.8547066 20.064051 -1.4847581 -1.9206872 19.473759 -1.4408426 -2.0798757 19.840445 -1.4696175 -2.1965103 19.781719 -1.4661524 -2.3145943 19.740139 -1.4640433 -3.0910947 25.031004 -1.8678703 -2.52689 19.480833 -1.4465674 -3.3985686 24.995138 -1.8681716 -3.5494843 24.957031 -1.866891 -3.7041624 24.945633 -1.8677197 -3.8583767 24.930319 -1.8683223 -4.0125422 24.914049 -1.8689249 -4.1655011 24.889944 -1.8690002 -4.3186564 24.866863 -1.8692262 -4.470449 24.835972 -1.8689249 -2.7992861 15.024914 -1.1171633 -4.7709246 24.75868 -1.8673429 -2.8210509 14.173812 -1.0543407 -5.0669656 24.66213 -1.864556 -3.069397 14.49028 -1.0815338 -3.1510181 14.438051 -1.0789727 -5.4995012 24.473234 -1.8574752 -3.4613912 14.975383 -1.1237167 -5.7924938 24.3748 -1.8552154 -5.9400535 24.331049 -1.8546127 -3.5371344 14.114072 -1.0617981 -3.4520187 13.424789 -1.0097473 -3.5259337 13.371537 -1.0072615 -6.5257492 24.142328 -1.8518257 -3.9559014 14.288247 -1.0825883 -4.0326166 14.225332 -1.0795753 -4.0386739 13.920688 -1.0575799 -4.1098242 13.847849 -1.0538135 -4.173861 13.753671 -1.0483899 -4.2519679 13.707802 -1.0468081 -4.3341894 13.675751 -1.0463561 -4.4253926 13.671667 -1.048164 -4.5292277 13.704849 -1.052985 -4.6078143 13.660739 -1.0517043 -4.6857061 13.615237 -1.0503484 -4.8018641 13.679374 -1.0578058 -4.9095731 13.716308 -1.063154 -4.9939842 13.686861 -1.0632293 -5.0723095 13.641007 -1.0620241 -5.1937213 13.7094 -1.0700841 -5.3089805 13.758208 -1.0766375 -5.531177 14.076177 -1.105111 -5.6167021 14.040122 -1.1049604 -5.6986074 13.995235 -1.1041318 -5.787046 13.966455 -1.1046591 -5.8958788 13.985812 -1.1091787 -5.9658608 13.912715 -1.1061656 -6.0503182 13.87402 -1.106015 -6.1248226 13.812935 -1.1040565 -6.2254462 13.810546 -1.1069943 -6.371552 13.906249 -1.1181426 -6.4925423 13.943727 -1.1245453 -6.5997295 13.949595 -1.128387 -10.891538 22.658611 -1.8617688 -11.025113 22.580605 -1.8608649 -11.162128 22.50985 -1.8606389 -11.294206 22.429359 -1.8596597 -11.432979 22.362301 -1.8598857 -11.569517 22.290842 -1.8598104 -11.711651 22.230021 -1.8607142 -11.84501 22.152464 -1.8602623 -11.980712 22.079369 -1.8602623 -12.106343 21.98797 -1.8587557 -12.229845 21.893251 -1.8570232 -12.359525 21.80999 -1.8563453 -12.476715 21.705215 -1.8538595 -12.590072 21.594656 -1.8509218 -12.702542 21.483524 -1.847984 -12.825919 21.391495 -1.8467788 -12.950717 21.30217 -1.8458749 -13.078041 21.217211 -1.8454229 -13.208509 21.137413 -1.8454982 -13.335289 21.051756 -1.8451216 -13.457205 20.95863 -1.8441423 -13.579568 20.866468 -1.8433137 -13.678246 20.738638 -1.8393214 -13.445593 20.116299 -1.7904344 -13.418898 19.812164 -1.7702467 -13.482653 19.645596 -1.7625633 -13.555119 19.493731 -1.756236 -13.640016 19.361282 -1.7517164 -13.765509 19.286963 -1.7526202 -13.936178 19.27486 -1.7593997 -14.075397 19.217947 -1.7621114 -14.202558 19.144033 -1.7633166 -14.396437 19.158562 -1.7729585 -14.549957 19.117474 -1.7774781 -15.162552 19.670683 -1.8387941 -15.291554 19.58828 -1.8398488 -15.420116 19.505035 -1.8409033 -15.553842 19.427956 -1.8426358 -15.694108 19.358488 -1.845197 -15.82778 19.280323 -1.8470048 -15.964271 19.20508 -1.8491893 -16.103643 19.1327 -1.8517504 -16.236259 19.051744 -1.8535582 -16.353504 18.952517 -1.8536335 -16.461615 18.842806 -1.8527296 -13.116278 14.829296 -1.4581678 -13.236958 14.781963 -1.4615575 -13.325399 14.698248 -1.4613315 -13.31284 14.504551 -1.4498818 -13.243424 14.252399 -1.4323307 -13.466599 14.315396 -1.4473207 -13.556246 14.234664 -1.4475467 -13.604573 14.111018 -1.4433284 -13.55647 13.88956 -1.4287903 -13.713632 13.879172 -1.4365489 -13.864121 13.860327 -1.4435544 -14.117779 13.941745 -1.4614822 -17.875734 17.437073 -1.8490386 -17.980236 17.324986 -1.8488126 -14.932532 14.212974 -1.5199357 -14.905396 14.013852 -1.5081095 -15.57859 14.467663 -1.5686722 -15.207049 13.949862 -1.5215176 -15.26871 13.834866 -1.5191072 -15.203955 13.607262 -1.5039665 -15.319288 13.542112 -1.5072055 -15.433641 13.475403 -1.5103693 -15.614209 13.465102 -1.5201617 -15.832426 13.48477 -1.5336453 -17.416687 14.650536 -1.6818883 -17.503952 14.541481 -1.6816624 -17.599787 14.439497 -1.6823404 -17.705101 14.345045 -1.6839975 -17.81381 14.252957 -1.6860313 -17.927532 14.164402 -1.6885924 -18.051058 14.082961 -1.6921328 -18.203487 14.02305 -1.6984603 -18.312206 13.928597 -1.7006447 -18.426828 13.838127 -1.7034318 -18.563459 13.763402 -1.7083281 -18.756191 13.728745 -1.7184973 -18.90797 13.662454 -1.7248247 -19.088865 13.61566 -1.7338638 -19.252773 13.555104 -1.7413212 -19.492809 13.545963 -1.755784 -19.631477 13.464453 -1.7609062 -19.83099 13.423107 -1.7716026 -20.037361 13.384248 -1.7829016 -20.199038 13.313727 -1.790133 -20.348061 13.23357 -1.7962345 -19.225365 12.336299 -1.6882159 -19.10775 12.095974 -1.670966 -19.154545 11.961603 -1.6685555 -19.168146 11.807242 -1.6632826 -19.133703 11.624692 -1.6538668 -19.143084 11.470173 -1.6484433 -19.153006 11.316993 -1.6431704 -19.138508 11.150571 -1.6358637 -19.148634 10.999654 -1.6308168 -19.148085 10.84363 -1.6249413 -19.14286 10.686084 -1.6187645 -19.130312 10.525647 -1.6120604 -19.1472 10.382402 -1.6079928 -19.165689 10.240758 -1.6041511 -19.111691 10.061656 -1.594208 -24.432089 12.671453 -2.0417244 -24.519146 12.526292 -2.0425532 -0 0 -0 -0 0 -0 -20.820173 10.157943 -1.7126217 -21.014244 10.093459 -1.7236948 -21.386801 10.111355 -1.7496825 -21.616602 10.058173 -1.7636933 -24.261911 11.108292 -1.9783747 -24.348707 10.967814 -1.9799565 -0 0 -0 -0 0 -0 -24.246742 10.389365 -1.9553246 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -24.397352 9.0645418 -1.9287343 -0 0 -0 -0 0 -0 -0 0 -0 -24.218292 8.3275547 -1.8972477 -0 0 -0 -0 0 -0 -0 0 -0 -24.027498 7.6079082 -1.8665144 -24.088015 7.4647617 -1.8676443 -24.030302 7.2855783 -1.859509 -23.979906 7.1099362 -1.8520516 -23.97998 6.9501753 -1.8486619 -23.984756 6.7923112 -1.8457242 -23.97216 6.6301327 -1.8415059 -23.970995 6.4717436 -1.8382668 -23.914791 6.299397 -1.8308095 -23.932711 6.1473317 -1.8292276 -23.862606 5.9734945 -1.8208663 -0 0 -0 -23.816717 5.6523581 -1.8117518 -23.816944 5.4982662 -1.8091154 -23.831745 5.347877 -1.8076842 -23.861189 5.2009106 -1.8074582 -23.895578 5.0550222 -1.8076842 -23.921261 4.9073048 -1.8073075 -24.008625 4.7719007 -1.8117518 -24.074663 4.6316538 -1.8146142 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -24.352999 3.7615671 -1.8241054 -24.379566 3.6126535 -1.8244067 -24.400288 3.4628553 -1.8243314 -24.42404 3.3134747 -1.8245573 -24.448856 3.1641891 -1.824934 -24.486614 3.0164297 -1.8263652 -24.52249 2.8682101 -1.8277211 -24.570351 2.7210901 -1.8300562 -24.625263 2.5743196 -1.832994 -24.670366 2.4260995 -1.8352537 -24.720535 2.2779717 -1.8379655 -24.770807 2.1294048 -1.8407526 -24.813227 1.9797517 -1.8430125 -24.841812 1.8287071 -1.844293 -24.90629 1.6798673 -1.8483607 -24.946983 1.528903 -1.8506957 -24.964855 1.3762959 -1.8513737 -24.999722 1.2244043 -1.8534075 -25.032667 1.072094 -1.855366 -0 0 -0 -17.426193 0.53253829 -1.2796433 -17.522837 0.42788506 -1.286724 -17.545073 0.32072207 -1.2882305 -17.531754 0.21288088 -1.2871006 -17.467916 0.10491908 -1.2822044 -17.432333 -0.0022569741 -1.2794926 -17.423018 -0.10916289 -1.2788147 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -17.375504 -1.0697441 -1.2776848 -18.295835 -1.2391992 -1.3478893 -18.299822 -1.3523196 -1.3487933 -18.297142 -1.4650576 -1.3492452 -18.22522 -1.571897 -1.3444996 -0 -0 -0 -0 -0 -0 -22.86816 -2.3974502 -1.6995902 -22.504166 -2.498965 -1.6730752 -22.35372 -2.6212001 -1.6628307 -16.639881 -2.054476 -1.2291743 -15.717204 -2.0384767 -1.1598736 -14.988056 -2.0374427 -1.1052617 -14.476727 -2.0584409 -1.0672216 -13.605711 -2.0197682 -1.0016873 -13.473826 -2.084754 -0.99257278 -13.36135 -2.15137 -0.98496479 -13.275121 -2.2211301 -0.97939062 -13.219979 -2.2953746 -0.97622687 -13.194852 -2.3745041 -0.9753983 -13.16925 -2.4534118 -0.97456968 -13.377192 -2.5771995 -0.99174422 -12.921044 -2.5716043 -0.95784712 -12.943115 -2.6586661 -0.96078491 -12.782185 -2.7074399 -0.94963652 -12.733183 -2.7788 -0.94715071 -12.72173 -2.8581891 -0.94760269 -12.710753 -2.9377668 -0.94812995 -12.802114 -3.04176 -0.95664191 -12.592375 -3.0736566 -0.9418025 -12.564573 -3.1486819 -0.94112462 -11.013382 -2.8317389 -0.82165629 -12.438211 -3.2797415 -0.93434519 -12.507376 -3.3802018 -0.94135058 -12.225011 -3.384491 -0.92086166 -12.11 -3.4327791 -0.91347963 -7.9229426 -2.2980835 -0.58580804 -7.9029574 -2.3449516 -0.58535606 -7.8893743 -2.3936889 -0.5854314 -7.8754907 -2.4423475 -0.58550674 -7.8774662 -2.4960487 -0.58686262 -7.9075389 -2.5590806 -0.5904783 -7.9361858 -2.6222622 -0.5940187 -11.86556 -4.0021329 -0.9085834 -11.832294 -4.0719419 -0.90790546 -11.852247 -4.1603236 -0.91152114 -11.739188 -4.2017107 -0.90451574 -11.742225 -4.2842598 -0.90685087 -11.054948 -4.1104665 -0.85359484 -11.003409 -4.1683273 -0.85148567 -7.1811881 -2.7704601 -0.54407698 -7.1621976 -2.8137414 -0.54392636 -11.73304 -4.6935554 -0.91724598 -11.720643 -4.7722297 -0.91860187 -11.545594 -4.7837358 -0.90670025 -11.455382 -4.8289185 -0.90172869 -19.063942 -8.17521 -1.5295776 -9.0106449 -3.9290042 -0.70520103 -9.016448 -3.9975593 -0.70768684 -18.790241 -8.4706287 -1.5196345 -18.729753 -8.5820255 -1.5189565 -18.656857 -8.6875257 -1.5172993 -5.5383162 -2.6194696 -0.42543727 -5.4978743 -2.6417377 -0.42340344 -5.3632846 -2.6176662 -0.41346031 -5.2801223 -2.6172976 -0.40781081 -5.3450079 -2.6904609 -0.41466555 -5.3612485 -2.7400033 -0.41745263 -5.3514156 -2.7765231 -0.41805524 -17.910809 -9.4358635 -1.4919142 -17.85697 -9.5479355 -1.4922909 -17.800678 -9.6587515 -1.4925168 -17.713127 -9.7524004 -1.4901063 -17.641636 -9.8545809 -1.489127 -17.56262 -9.9523172 -1.4875453 -17.485662 -10.050946 -1.4861894 -3.5100124 -2.04527 -0.26951078 -3.4862385 -2.0601704 -0.26853153 -3.4760976 -2.0830612 -0.26875752 -3.4675109 -2.106941 -0.26913416 -3.4765873 -2.1417825 -0.27109265 -3.4473135 -2.1530335 -0.26966146 -3.4643624 -2.1933563 -0.2723732 -3.4676201 -2.225348 -0.27387974 -3.4480503 -2.2427754 -0.27335244 -16.471842 -10.863778 -1.4531962 -16.404873 -10.964643 -1.4531962 -3.3112421 -2.2415512 -0.26468986 -4.2445264 -2.9118838 -0.35146636 -3.2155368 -2.2347629 -0.25843775 -4.2052126 -2.9614542 -0.35116506 -15.647705 -11.167824 -1.4148549 -15.615248 -11.289919 -1.4182446 -4.2280202 -3.0955129 -0.35847175 -4.1088457 -3.0471268 -0.34905589 -5.4595718 -4.1014771 -0.47846735 -5.439064 -4.1385231 -0.4789193 -5.5730948 -4.2947969 -0.49413532 -5.50105 -4.2933207 -0.48976636 -5.4378395 -4.2979269 -0.48622602 -14.791824 -11.841842 -1.3939893 -14.628263 -11.858903 -1.3851761 -14.602235 -11.987035 -1.389771 -3.6514487 -3.0340478 -0.3212603 -14.251876 -11.995153 -1.3698094 -13.979931 -11.913555 -1.3501492 -2.9185662 -2.5170321 -0.25376749 -2.9000633 -2.5322685 -0.25346619 -2.8911929 -2.5559614 -0.25414413 -2.8487141 -2.5497043 -0.25143236 -2.8359709 -2.5698147 -0.25173366 -3.5180106 -3.2277679 -0.32329413 -3.4586954 -3.2126374 -0.31922647 -12.907904 -12.142403 -1.3013374 -12.825935 -12.214498 -1.3005841 -2.6481345 -2.5517771 -0.24043465 -2.6260052 -2.5617089 -0.2397567 -2.5903778 -2.5581486 -0.23764755 -2.5598283 -2.5591848 -0.23606569 -2.5461791 -2.576972 -0.23629166 -2.5372818 -2.599685 -0.23704493 -2.5309687 -2.6252577 -0.23809952 -2.9623358 -3.1109712 -0.28713727 -2.9411426 -3.1269095 -0.28691128 -2.9171512 -3.1397822 -0.28638399 -7.7009516 -8.3942032 -0.82316279 -7.6339021 -8.4243011 -0.82143027 -7.5767484 -8.4650383 -0.82082766 -10.691221 -12.093894 -1.1820197 -10.58468 -12.122459 -1.1783288 -2.8920739 -3.3522632 -0.2970804 -3.4022455 -3.9932215 -0.3589237 -10.173615 -12.09393 -1.1564839 -9.9367399 -11.96053 -1.1372756 -10.049734 -12.248703 -1.159497 -9.8155813 -12.114111 -1.1404393 -9.6345444 -12.040962 -1.1275585 -9.6210594 -12.176532 -1.1349405 -9.5320578 -12.217254 -1.1332079 -9.3309565 -12.111986 -1.1176153 -9.2286959 -12.132502 -1.1141503 -9.1169558 -12.139462 -1.10948 -9.0428915 -12.195975 -1.1095554 -9.0073462 -12.305144 -1.1146022 -8.9293375 -12.356948 -1.114301 -8.8556652 -12.414752 -1.1146022 -8.6943684 -12.34818 -1.1034539 -2.930162 -4.2149377 -0.35041177 -2.9031165 -4.2311931 -0.35026112 -2.8916311 -4.2703972 -0.35221961 -2.8997116 -4.3394709 -0.35688987 -2.871933 -4.3555164 -0.35673922 -7.9561896 -12.232658 -1.0649619 -7.8099031 -12.170463 -1.0550187 -2.7262115 -4.3048491 -0.34754935 -7.6288052 -12.215483 -1.0505744 -2.6836379 -4.3549609 -0.34905589 -2.6884463 -4.4233313 -0.35365084 -2.6950779 -4.4962001 -0.3586224 -2.6638885 -4.5066423 -0.35809511 -2.6346803 -4.520318 -0.35786912 -2.618814 -4.5571513 -0.35967699 -1.3998247 -2.4698017 -0.1770848 -2.4849343 -4.4496317 -0.34762469 -6.6117768 -12.015972 -0.99867427 -6.5360227 -12.052809 -0.99837297 -6.4478483 -12.066301 -0.99611318 -6.375083 -12.108284 -0.99633914 -6.303422 -12.152484 -0.99679112 -6.1593337 -12.055067 -0.98526609 -6.0825605 -12.087289 -0.98481411 -6.0312996 -12.170845 -0.98873115 -5.9473257 -12.188804 -0.98714924 -5.8797636 -12.240347 -0.98842984 -1.1614977 -2.4543006 -0.16774428 -1.1434721 -2.4550526 -0.16721699 -1.124236 -2.4529557 -0.16646372 -1.1030213 -2.4461699 -0.16533382 -5.4958715 -12.402184 -0.98737526 -5.3507624 -12.277524 -0.97434372 -5.2694378 -12.296375 -0.97321379 -5.2078238 -12.36156 -0.97592556 -5.1364536 -12.404338 -0.97682947 -5.0275545 -12.355263 -0.97027606 -0.95737112 -2.3922 -0.15727384 -0.92846358 -2.3618298 -0.15433611 -0.9135955 -2.3665519 -0.15426078 -0.90329307 -2.3833041 -0.1551647 -0.90427846 -2.4308653 -0.1585544 -4.508256 -12.364244 -0.95679259 -1.1698384 -3.2680418 -0.224842 -1.1590036 -3.3015058 -0.22695115 -1.1568793 -3.3613622 -0.23116945 -4.1531558 -12.321855 -0.94489092 -4.0805979 -12.356575 -0.9456442 -3.9930446 -12.345326 -0.94278181 -3.9193268 -12.376249 -0.94330907 -3.8250163 -12.341011 -0.93863881 -0.97856832 -3.2241702 -0.21715866 -0.9624511 -3.2425425 -0.21813791 -0.95003074 -3.2742462 -0.22017173 -0.94486368 -3.3327832 -0.2243147 -3.4568834 -12.496745 -0.94210386 -3.3809192 -12.520609 -0.94232982 -0.88894486 -3.3708246 -0.22597189 -0.86750108 -3.3733182 -0.22574592 -3.1234941 -12.475282 -0.93411922 -3.0305934 -12.427365 -0.92892164 -2.9715493 -12.518494 -0.93457115 -2.8922145 -12.525804 -0.93374258 -0.72083259 -3.2076383 -0.21098186 -1.8966749 -8.6982508 -0.63514709 -0.67501938 -3.1859996 -0.20864673 -1.7200724 -8.3809357 -0.60893339 -1.6639513 -8.3678589 -0.60712552 -1.6225578 -8.4298096 -0.61111784 -2.3309257 -12.526678 -0.92515528 -1.4800246 -8.2321854 -0.59447062 -2.209723 -12.742981 -0.93961805 -2.134284 -12.77302 -0.9408986 -1.3840957 -8.6055717 -0.62106097 -1.9670312 -12.731236 -0.93577641 -1.893991 -12.77759 -0.93841285 -1.8135927 -12.775149 -0.93735826 -1.7393258 -12.816669 -0.93969339 -1.6612911 -12.832044 -0.94007003 -1.5822802 -12.840016 -0.93991935 -0.45414311 -3.8743618 -0.25730786 -1.4000182 -12.636459 -0.92304617 -0.4127824 -3.9391484 -0.26182747 -0.38148376 -3.8691638 -0.25632861 -0.35672987 -3.8605092 -0.25550002 -1.0957135 -12.739536 -0.928545 -0.31012124 -3.874536 -0.25625327 -0.28700012 -3.8853161 -0.25693122 -0.2629537 -3.8840194 -0.25670522 -0.78773767 -12.844204 -0.93472183 -0.70293438 -12.74027 -0.92651117 -0.62479705 -12.745339 -0.92658651 -0.54572898 -12.729008 -0.92508 -0.47571951 -12.953338 -0.9418025 -0.39544016 -12.930099 -0.93984401 -0.31221101 -12.772783 -0.92779171 -0.23646581 -12.919023 -0.93871415 -0.15784194 -12.974073 -0.94278181 -0.077716276 -12.888046 -0.93622833 --0.0013743453 -12.937141 -0.93991935 --0.080572017 -12.907972 -0.9377349 --0.16069233 -12.981019 -0.94330907 --0.24097005 -13.013686 -0.94587016 --0.32103798 -13.020934 -0.9465481 --0.39781779 -12.918055 -0.93894011 --0.47474939 -12.852592 -0.93419451 --0.5537315 -12.852426 -0.93442053 --0.62727672 -12.741224 -0.92628521 --0.719473 -12.990025 -0.94541824 --0.78266376 -12.717638 -0.92515528 --0.86182964 -12.729509 -0.92643589 --0.95933759 -12.986514 -0.94632214 --1.0415522 -13.012191 -0.94873261 --1.1237748 -13.033372 -0.95084172 --1.2003267 -12.989493 -0.94805467 --1.2873511 -13.056309 -0.95370418 --1.3505876 -12.887506 -0.9415012 --1.4353638 -12.930511 -0.94541824 --1.5381458 -13.121514 -0.96063423 --1.6416134 -13.297881 -0.9747957 --1.7329296 -13.362712 -0.98052049 --1.8389453 -13.52869 -0.99400401 --1.922202 -13.519127 -0.99415463 --2.0065827 -13.516941 -0.99490792 --2.098484 -13.562514 -0.99935222 --2.1532733 -13.373163 -0.98586869 --2.2939 -13.709816 -1.0126851 --2.3694451 -13.64636 -1.0089188 --2.4579039 -13.658062 -1.0109526 --2.5549998 -13.714284 -1.0164514 --2.6508019 -13.759055 -1.0211216 --2.7505593 -13.81979 -1.0270724 --2.8367093 -13.80949 -1.0275998 --2.9226296 -13.797677 -1.0280517 --3.0059595 -13.77364 -1.0275998 --3.0683308 -13.656674 -1.0199918 --3.1803727 -13.760003 -1.029483 --3.278578 -13.798437 -1.0340025 --3.3944054 -13.905929 -1.0439457 --3.475302 -13.867429 -1.0425898 --3.5431852 -13.779209 -1.0373923 --3.6225796 -13.737926 -1.0358857 --3.7120106 -13.734691 -1.0373923 --3.7943521 -13.704929 -1.036865 --3.8868058 -13.711129 -1.0392001 --3.9919841 -13.759803 -1.044925 --4.0791755 -13.744609 -1.0456781 --4.1871848 -13.797563 -1.051855 --4.2948151 -13.845895 -1.0577304 --4.3796911 -13.819283 -1.0577304 --4.4702382 -13.810173 -1.0591617 --4.5545788 -13.781538 -1.0590863 --4.6349106 -13.741049 -1.0581071 --4.7210846 -13.718008 -1.0585591 --4.8249888 -13.745233 -1.0630786 --4.8840284 -13.644958 -1.0574292 --4.8483472 -13.287817 -1.0311401 --4.9315267 -13.262491 -1.0315168 --5.011044 -13.227321 -1.0311401 --5.1746936 -13.410287 -1.0484653 --5.3010159 -13.490577 -1.0575799 --5.1154914 -12.78752 -1.0030432 --5.5831394 -13.71172 -1.0810064 --5.6812935 -13.711287 -1.0837935 --5.7610559 -13.666062 -1.082965 --5.5940332 -13.045776 -1.0349065 --5.8569641 -13.430731 -1.0694815 --5.9356246 -13.386337 -1.0688035 --6.1029 -13.538744 -1.0844715 --6.2926211 -13.734014 -1.1038305 --6.3624597 -13.664411 -1.1012694 --6.4790249 -13.694517 -1.1070695 --1.6549587 -3.4452362 -0.25135702 --1.675192 -3.4332247 -0.25120637 --1.6838213 -3.3978679 -0.24909723 --1.702396 -3.3830192 -0.24872059 --1.7199441 -3.3662951 -0.24819331 --1.7401075 -3.3547933 -0.24811798 --1.7708855 -3.3634613 -0.24977517 --4.4915514 -8.4016066 -0.6823017 --4.7166181 -8.6937828 -0.70979595 --7.6408749 -13.87852 -1.1594217 --1.8499776 -3.3137653 -0.2493232 --1.8707674 -3.3032193 -0.24939853 --4.7456641 -8.2572823 -0.68207568 --8.3995752 -14.407832 -1.2224702 --8.5121851 -14.397222 -1.2260859 --8.1188354 -13.541697 -1.155354 --8.2064352 -13.499293 -1.156032 --7.805613 -12.664363 -1.08643 --7.9058971 -12.652592 -1.0896691 --8.0004597 -12.630798 -1.0920795 --8.1133709 -12.636848 -1.097051 --8.1951084 -12.593514 -1.0976537 --8.2184191 -12.461419 -1.0902717 --8.258152 -12.356044 -1.0853001 --9.561882 -14.118119 -1.2507178 --9.9118509 -14.443121 -1.2858953 --9.9980087 -14.378756 -1.2855941 --10.088919 -14.321215 -1.2859707 --9.7322607 -13.636536 -1.2281951 --9.7041502 -13.422227 -1.2138076 --9.4846344 -12.950558 -1.1752403 --10.597764 -14.285525 -1.306309 --10.805033 -14.37966 -1.3213743 --10.951644 -14.390056 -1.328681 --11.10244 -14.40393 -1.3364396 --11.204725 -14.353613 -1.3381722 --11.332786 -14.335435 -1.3430685 --11.526484 -14.397956 -1.3558739 --11.659199 -14.381953 -1.3612221 --10.906943 -13.286667 -1.2611881 --11.037348 -13.278536 -1.2669884 --11.064675 -13.146482 -1.2606609 --11.151601 -13.085931 -1.2614142 --12.107905 -14.03264 -1.3627287 --12.172785 -13.934054 -1.3603183 --12.22568 -13.822504 -1.3566272 --12.275005 -13.707859 -1.3526349 --12.236311 -13.497099 -1.3388501 --12.36138 -13.468043 -1.3435957 --12.382013 -13.325472 -1.336741 --12.429379 -13.212934 -1.3329747 --12.483397 -13.108259 -1.3300369 --12.648726 -13.119707 -1.3393021 --12.714362 -13.026865 -1.3377203 --12.801764 -12.956408 -1.3385488 --13.067204 -13.063723 -1.358435 --13.138601 -12.974891 -1.3575312 --13.228674 -12.904473 -1.3586611 --13.271701 -12.788467 -1.3548948 --13.365811 -12.721917 -1.3565519 --13.421097 -12.618494 -1.3542168 --13.524575 -12.560332 -1.3569286 --13.576405 -12.454194 -1.3543675 --13.587537 -12.31174 -1.3477387 --13.555079 -12.131718 -1.3368163 --13.46788 -11.905673 -1.3205457 --10.07851 -8.8002739 -0.97336447 --13.750411 -11.858018 -1.3342552 --13.797859 -11.752089 -1.3317693 --14.139853 -11.894421 -1.358435 --10.335933 -8.5872393 -0.97773343 --10.337546 -8.4819164 -0.97276187 --10.401018 -8.427743 -0.97389174 --15.115817 -12.094501 -1.425024 --15.190526 -12.002142 -1.4250994 --15.269387 -11.913002 -1.4256266 --10.645001 -8.200984 -0.97773343 --15.501735 -11.791126 -1.4339125 --15.574589 -11.696385 -1.4339879 --15.629242 -11.588131 -1.4324061 --15.671082 -11.470812 -1.4296943 --15.729856 -11.366264 -1.4286397 --15.81148 -11.278219 -1.4297696 --15.928491 -11.214856 -1.4342139 --16.208275 -11.263711 -1.4536482 --16.404549 -11.251461 -1.4653238 --16.639263 -11.262934 -1.4804645 --16.746202 -11.186101 -1.4839295 --16.824514 -11.089723 -1.4848335 --16.954103 -11.026507 -1.4904077 --17.261473 -11.076275 -1.5119511 --17.367868 -10.994684 -1.5154161 --17.291216 -10.798127 -1.5026106 --17.357994 -10.69235 -1.5026859 --17.425831 -10.587195 -1.5029119 --17.483622 -10.475973 -1.5023093 --17.53727 -10.362412 -1.5014054 --17.674622 -10.297777 -1.5078834 --17.771198 -10.208503 -1.5108212 --17.843914 -10.105165 -1.5117252 --17.92909 -10.008608 -1.513759 --16.197384 -8.9121304 -1.3591883 --16.370104 -8.8767395 -1.3693575 --6.8182774 -3.6440458 -0.54663813 --16.354271 -8.610158 -1.3588117 --16.347485 -8.4788904 -1.3537648 --7.2056561 -3.6821353 -0.57390642 --7.2058439 -3.6266489 -0.57202321 --6.9527607 -3.4460194 -0.54882258 --6.972878 -3.4028561 -0.54874724 --6.9936261 -3.3600073 -0.54874724 --6.9266653 -3.2756941 -0.54144055 --6.8128271 -3.1708789 -0.53029221 --19.140152 -8.7635708 -1.5528536 --19.215385 -8.6557913 -1.5546614 --7.3185906 -3.243664 -0.56735295 --7.2981329 -3.1811714 -0.56403857 --19.518106 -8.3634634 -1.5667137 --19.626034 -8.2675428 -1.571384 --19.727987 -8.1683235 -1.5756023 --19.835001 -8.0704184 -1.5802726 --19.954519 -7.976687 -1.5859973 --20.036503 -7.8672161 -1.5887091 --20.124405 -7.7595501 -1.5919482 --20.181896 -7.6398058 -1.5927768 --20.248959 -7.5234675 -1.594434 --20.275066 -7.3919091 -1.5928521 --20.473087 -7.3220916 -1.6051304 --20.525156 -7.1989732 -1.605733 --20.601004 -7.0839205 -1.6082941 --20.680935 -6.9697995 -1.6112318 --20.760241 -6.8549643 -1.6141696 --20.8503 -6.7430987 -1.6180112 --20.929308 -6.6270752 -1.6210244 --21.01244 -6.5118113 -1.6244141 --21.088263 -6.3937511 -1.6272764 --12.447251 -3.6911399 -0.94338441 --21.311672 -6.1769481 -1.6388015 --13.185286 -3.734524 -0.99784565 --21.445456 -5.9314332 -1.6434717 --21.491074 -5.8023334 -1.644225 --12.791831 -3.3700581 -0.96191478 --12.801644 -3.2887771 -0.96108621 --12.852537 -3.2179132 -0.96349663 --21.844006 -5.3260684 -1.6610982 --21.919935 -5.2022953 -1.664488 --21.988363 -5.076221 -1.6673503 --13.193259 -2.9611194 -0.98406088 --18.215155 -3.9705536 -1.3709394 --22.054661 -4.6656752 -1.6655425 --19.282314 -3.9558833 -1.4495806 --21.957682 -4.3643613 -1.6537915 --21.83227 -4.200357 -1.6421158 --21.685091 -4.0342278 -1.6288583 --18.718964 -3.3638823 -1.3993375 --18.722548 -3.2460668 -1.398057 --21.513723 -3.593987 -1.610328 --21.528479 -3.4608061 -1.6098007 --21.550295 -3.3287969 -1.6098759 --21.597933 -3.2005954 -1.6119851 --19.358284 -2.7475445 -1.4396374 --21.849016 -2.9642594 -1.6282557 --21.976562 -2.8443418 -1.6366169 --22.208363 -2.735888 -1.6529629 --22.530769 -2.6353488 -1.6762389 --22.652563 -2.5087926 -1.6842989 --23.014647 -2.4060228 -1.7106632 --23.218521 -2.2833931 -1.7250507 --23.263868 -2.1438103 -1.7274611 --23.436539 -2.0147684 -1.7395887 --24.118418 -1.9243484 -1.790359 --26.024239 -1.9156947 -1.9338566 --26.068336 -1.7581898 -1.9363424 --26.097544 -1.5993624 -1.9377736 --26.216387 -1.4452335 -1.9460595 --26.118193 -1.2791312 -1.9379995 --26.20525 -1.1222585 -1.9440256 --26.166801 -0.95980221 -1.9406359 --26.190138 -0.79977471 -1.9419918 --26.165644 -0.63835597 -1.9398074 --26.160095 -0.47763118 -1.9391295 --26.136608 -0.3167938 -1.937171 --26.121109 -0.15631595 -1.9358904 --26.112602 0.003961341 -1.9352125 --26.109095 0.16416624 -1.9349865 --26.103607 0.32431582 -1.9346851 --26.096142 0.48438567 -1.9343085 --26.08869 0.64440078 -1.9340072 --26.076271 0.8042196 -1.9334046 --26.051912 0.96350437 -1.9319733 --26.030567 1.1226926 -1.9308435 --26.009245 1.2817043 -1.9297889 --25.985956 1.4404414 -1.928659 --25.967672 1.599309 -1.927981 --25.946426 1.7578716 -1.9271525 --22.53828 -0.57403761 -1.9388834 --22.550343 -0.43590793 -1.9396694 --22.531673 -0.2972571 -1.9378355 --22.539051 -0.15904202 -1.9383594 --22.527649 -0.020730797 -1.9373115 --22.515398 0.11743451 -1.9362636 --22.493334 0.25534707 -1.9344296 --22.483376 0.39321956 -1.933731 --22.467594 0.53086191 -1.9325957 --22.447981 0.66823649 -1.9311984 --22.406624 0.80464005 -1.9279672 --22.38534 0.94143987 -1.9265699 --22.352276 1.0774815 -1.924212 --22.318386 1.2131528 -1.9218541 --22.283676 1.3484489 -1.9194962 --22.268024 1.4846897 -1.9188849 --22.24061 1.6199934 -1.917313 --22.217342 1.755409 -1.9161777 --22.198212 1.8910227 -1.9154791 --22.17528 2.026196 -1.9145185 --22.142599 2.1602883 -1.9127718 --22.125956 2.2958038 -1.9125099 --22.100559 2.4303253 -1.9115492 --22.078304 2.5650814 -1.9109379 --22.050283 2.6990509 -1.9098899 --22.029356 2.8337898 -1.9095407 --21.996744 2.9669089 -1.9082307 --21.97122 3.1008482 -1.9076194 --21.923201 3.2313905 -1.9050869 --21.89016 3.3638811 -1.9039515 --21.84845 3.4948294 -1.9021176 --21.812838 3.6265361 -1.900895 --21.784285 3.7592926 -1.9003711 --21.78042 3.8963959 -1.9021176 --21.767857 4.0321417 -1.9031656 --21.711397 4.1596332 -1.9003711 --21.650286 4.28581 -1.8972272 --21.61187 4.4161801 -1.8961792 --21.56097 4.5437751 -1.8940833 --21.618353 4.6945868 -1.9017683 --21.48609 4.8041067 -1.8925114 --21.44747 4.9338427 -1.8917254 --21.40225 5.0619102 -1.8904154 --21.361109 5.1907845 -1.8895422 --21.309525 5.3169332 -1.8877956 --21.273605 5.4468446 -1.8875335 --21.2446 5.5785394 -1.8879702 --21.224401 5.7126722 -1.8892802 --21.22064 5.8515334 -1.8921621 --21.237064 5.9965181 -1.8969651 --21.239109 6.1380525 -1.9005457 --21.258366 6.285203 -1.9057854 --21.276613 6.4328203 -1.9110253 --21.277668 6.5758977 -1.9147804 --21.291065 6.7234287 -1.9197582 --21.276905 6.8628097 -1.9222908 --21.263727 7.0028925 -1.924998 --21.248686 7.1427541 -1.9276179 --21.240265 7.2852802 -1.9309365 --21.257223 7.4371824 -1.9367002 --21.268423 7.5878921 -1.9420273 --21.281382 7.7400403 -1.9476163 --21.271786 7.8846693 -1.9511969 --21.292902 8.0414371 -1.9577466 --21.282209 8.1869583 -1.9614145 --21.308561 8.3475466 -1.9686629 --21.307833 8.4984331 -1.9734659 --21.30513 8.6492491 -1.9781817 --21.274675 8.7893209 -1.9803649 --21.263508 8.9378366 -1.9844694 --21.257727 9.0892868 -1.9891852 --21.23353 9.2334547 -1.9922417 --21.212919 9.3796806 -1.9957349 --21.201307 9.5304937 -2.0001888 --21.214916 9.6935215 -2.0071752 --21.185759 9.8377762 -2.0101445 --21.174547 9.9909639 -2.0149474 --21.148777 10.137924 -2.0184407 --21.108566 10.278402 -2.0206239 --21.136183 10.45277 -2.0295315 --21.110819 10.601933 -2.0333741 --21.094179 10.756155 -2.0381773 --21.064941 10.904618 -2.0418451 --21.024971 11.048029 -2.0445523 --20.990189 11.194641 -2.0478709 --20.964033 11.346457 -2.05215 --20.939423 11.499812 -2.0566909 --20.898054 11.644564 -2.0596602 --20.873041 11.799043 -2.0643761 --20.847782 11.954148 -2.0691793 --20.837765 12.118903 -2.0756416 --20.81707 12.278416 -2.0811434 --20.85932 12.47648 -2.0931947 --20.800261 12.615084 -2.0950286 --20.69446 12.725256 -2.0921469 --20.621061 12.855157 -2.0926709 --20.595692 13.015502 -2.0982599 --20.392971 13.063181 -2.0855098 --20.136972 13.074147 -2.0671706 --19.869129 13.074255 -2.0475214 --19.602879 13.072125 -2.0279596 --19.280457 13.028741 -2.002372 --19.04891 13.043243 -1.9863033 --18.802364 13.04461 -1.9685755 --18.576084 13.057195 -1.9529434 --18.304922 13.035138 -1.932421 --18.138958 13.085433 -1.9231641 --17.9417 13.111261 -1.9105012 --17.692766 13.096642 -1.8921621 --17.464621 13.094404 -1.8760061 --17.292709 13.132037 -1.8659632 --17.153374 13.192955 -1.8595008 --17.077602 13.302242 -1.8601121 --17.023815 13.428988 -1.863256 --16.874939 13.480344 -1.8558329 --16.716005 13.522235 -1.8472747 --16.558737 13.563949 -1.838891 --16.403122 13.605515 -1.830682 --16.253727 13.65081 -1.8231716 --16.100601 13.69156 -1.8152246 --15.959669 13.741345 -1.8086749 --15.781188 13.75719 -1.7977587 --15.646437 13.809597 -1.7919077 --15.518324 13.866844 -1.7868426 --15.297755 13.839502 -1.7708613 --15.133945 13.861115 -1.7615169 --14.971908 13.882597 -1.7523474 --14.850854 13.940794 -1.7480682 --14.681269 13.952052 -1.7379379 --14.534363 13.983167 -1.730515 --14.423312 14.047758 -1.7274585 --14.32053 14.119907 -1.7254498 --14.242788 14.21666 -1.7265851 --14.172807 14.321486 -1.7287683 --14.103467 14.427412 -1.7311263 --14.000836 14.499345 -1.7293797 --13.890292 14.562634 -1.7266724 --13.792478 14.638888 -1.7256244 --13.934506 14.972635 -1.7554913 --13.851138 15.067388 -1.7566265 --14.882827 16.390343 -1.903253 --14.734087 16.427959 -1.8969651 --14.607907 16.489721 -1.8936467 --14.468406 16.535561 -1.8885815 --14.342571 16.59614 -1.8853503 --14.217834 16.657312 -1.8822938 --14.101233 16.727482 -1.8803725 --14.002153 16.818283 -1.8808966 --13.899328 16.904652 -1.8809838 --13.790945 16.984205 -1.8803725 --13.677748 17.057625 -1.8791499 --13.567261 17.134199 -1.878364 --13.455736 17.209276 -1.8774906 --13.340756 17.279688 -1.8761808 --13.223004 17.346169 -1.8745215 --13.119317 17.430956 -1.8749582 --13.004392 17.500732 -1.8738228 --12.890282 17.57136 -1.8728622 --12.77229 17.636406 -1.8713776 --12.654565 17.701477 -1.8699803 --12.541118 17.77228 -1.8692816 --12.426708 17.841539 -1.8684957 --12.315872 17.915812 -1.8683211 --12.202355 17.986095 -1.8677971 --12.08456 18.04987 -1.8666618 --11.962049 18.106224 -1.8648279 --9.1425714 14.025079 -1.4301012 --11.709857 18.206411 -1.8601121 --11.587249 18.261095 -1.8583655 --11.472341 18.327627 -1.8579289 --11.357051 18.393438 -1.8574922 --11.245013 18.464479 -1.8576669 --8.6924763 14.472498 -1.4424145 --8.5979271 14.516133 -1.4414539 --10.864049 18.601238 -1.8508551 --10.736287 18.644241 -1.8484973 --10.619719 18.706301 -1.848148 --10.505712 18.77285 -1.8483226 --10.399949 18.854403 -1.8500692 --8.1872196 15.06082 -1.4652076 --10.178143 18.999926 -1.8519905 --10.052534 19.04528 -1.8503312 --9.9157219 19.0686 -1.846576 --9.7912664 19.114897 -1.8451787 --9.6325121 19.092791 -1.8371444 --9.4876976 19.096224 -1.83173 --9.3558998 19.12455 -1.8288481 --9.2682047 19.243525 -1.8348738 --9.181962 19.36754 -1.8414235 --9.0814867 19.463236 -1.8452661 --8.9722834 19.541225 -1.8474493 --8.8632851 19.620422 -1.8498073 --8.7512255 19.693554 -1.8516412 --8.640995 19.771524 -1.853999 --8.5254164 19.837902 -1.855309 --8.4077978 19.899933 -1.8562696 --8.2889748 19.959427 -1.8570555 --8.1746311 20.030203 -1.8589768 --8.0586195 20.097551 -1.8606361 --7.9409924 20.161449 -1.8620334 --7.8142595 20.202364 -1.8613347 --7.6855555 20.237823 -1.8601995 --7.5553184 20.268732 -1.8587148 --7.4236226 20.295063 -1.8568809 --7.2949171 20.328979 -1.8558329 --7.1700435 20.373358 -1.8558329 --7.0481491 20.426386 -1.8567063 --6.9303427 20.491896 -1.8588022 --6.8091769 20.548218 -1.8601121 --6.6863503 20.600033 -1.8610728 --6.5631442 20.651115 -1.8620334 --6.4363079 20.690998 -1.8620334 --6.3103895 20.733913 -1.8623827 --6.1827655 20.771288 -1.8622954 --4.2884922 14.737925 -1.3080143 --3.9720962 13.969621 -1.2356181 --5.8039188 20.89789 -1.8637799 --5.6789713 20.945608 -1.8649153 --5.5559502 21.001245 -1.8668364 --5.4292245 21.043623 -1.8676225 --3.6486135 14.509974 -1.2740431 --3.5507431 14.496287 -1.2708119 --5.0386496 21.130302 -1.8667492 --4.904624 21.142384 -1.8650899 --3.207916 14.224901 -1.2407705 --4.2318192 19.316092 -1.6959324 --4.1780825 19.646677 -1.7232666 --4.0634913 19.701212 -1.7258865 --3.9314008 19.670094 -1.7209086 --3.8043876 19.661572 -1.7180269 --3.7468994 20.02236 -1.7481556 --3.480226 19.249964 -1.6773312 --3.3680379 19.305304 -1.6803877 --3.3565722 19.962191 -1.7369773 --3.4645069 21.406345 -1.8634306 --3.3343198 21.435076 -1.8641293 --3.2042048 21.464983 -1.8650025 --3.0732841 21.490156 -1.8655266 --2.9421751 21.514532 -1.8660505 --2.8093355 21.526253 -1.8655266 --2.6760943 21.534187 -1.8647406 --2.5422773 21.536352 -1.863518 --2.4093096 21.544617 -1.8629067 --2.2761273 21.550077 -1.8621206 --2.1452355 21.577517 -1.8633432 --2.0123355 21.585314 -1.8629067 --1.8824447 21.627028 -1.8655266 --1.7492266 21.632214 -1.8650025 --1.6180936 21.664394 -1.8669238 --1.4860865 21.687828 -1.8681464 --1.3536048 21.706482 -1.8690197 --1.2211177 21.727308 -1.870155 --1.088177 21.742352 -1.8708537 --0.95505393 21.755585 -1.871465 --0.82169658 21.765018 -1.8718143 --0.68851137 21.781599 -1.8728622 --0.55507743 21.794376 -1.8736482 --0.4216283 21.812311 -1.8749582 --0.2878615 21.820463 -1.8754821 --0.15397526 21.822815 -1.8755695 --0.020076625 21.830322 -1.8761808 -0.11390834 21.837008 -1.8767921 -0.2480762 21.851837 -1.8781893 -0.3823781 21.86285 -1.8793246 -0.51663643 21.865072 -1.8797612 -0.65075862 21.860495 -1.879674 -0.78491557 21.857086 -1.8797612 -0.91918075 21.855841 -1.8801106 -1.0531725 21.847799 -1.8799359 -1.1872082 21.840925 -1.8799359 -1.3221016 21.848145 -1.8812459 -1.455008 21.822723 -1.8797612 -1.5882312 21.804443 -1.8789753 -1.7214417 21.787336 -1.878364 -1.693541 19.879532 -1.7114772 -1.8041593 19.744761 -1.7005609 -1.930596 19.787849 -1.705364 -2.0542371 19.79743 -1.7072853 -2.1711006 19.742863 -1.7036175 -2.3039241 19.830101 -1.712525 -2.4198682 19.769117 -1.7084205 -2.5263824 19.639286 -1.6982903 -2.6162169 19.396349 -1.6782045 -2.7364342 19.388807 -1.6789905 -3.1760521 21.547712 -1.8718143 -3.3085091 21.529787 -1.8719889 -3.4408658 21.511049 -1.8721635 -3.5734437 21.493462 -1.8725129 -3.704411 21.466223 -1.8720763 -3.8351784 21.438187 -1.8716396 -3.9661043 21.411312 -1.8713776 -2.7044377 14.11519 -1.2223439 -4.2302961 21.369823 -1.8721635 -4.3637323 21.355177 -1.8732115 -3.0533509 14.488019 -1.2604196 -3.1379628 14.449542 -1.2586731 -3.2413442 14.496123 -1.2646115 -4.888957 21.252333 -1.8741722 -3.5576959 15.041766 -1.3174459 -5.1547976 21.213003 -1.8761808 -5.2863078 21.186773 -1.8767047 -3.425801 13.379463 -1.1731774 -3.5073254 13.356263 -1.1730027 -5.6715078 21.071451 -1.8753948 -5.7972507 21.023769 -1.8742595 -4.027317 14.262523 -1.2616423 -4.0580602 14.041354 -1.2437397 -4.1271944 13.958872 -1.2384999 -4.1922989 13.865582 -1.2322996 -4.2720032 13.822466 -1.2307276 -4.338738 13.738997 -1.2254878 -4.4202051 13.703583 -1.2247019 -4.5060754 13.68188 -1.2252258 -4.578197 13.619037 -1.2219946 -4.7363315 13.808359 -1.2421678 -4.7749143 13.647396 -1.2299416 -4.8622451 13.628162 -1.2309023 -5.016593 13.792799 -1.2490668 -5.1956453 14.016763 -1.2729079 -5.4082499 14.320118 -1.3043464 -5.5807772 14.507018 -1.3250436 -5.6867628 14.516097 -1.3291481 -5.6288505 14.112659 -1.2943909 -5.7097178 14.06401 -1.2930809 -5.8369842 14.128147 -1.3025125 -5.9370728 14.124208 -1.3055691 -5.9758468 13.975765 -1.2949148 -6.0960484 14.018313 -1.3025125 -6.1831565 13.983378 -1.3027745 -6.3999438 14.236838 -1.3308073 -6.5368576 14.306031 -1.3412869 -6.6899629 14.406603 -1.3549103 -9.19522 19.487997 -1.8514664 -9.3116093 19.424921 -1.8508551 -9.4328032 19.371899 -1.8512918 -9.5554638 19.321693 -1.8520777 -9.6827803 19.280502 -1.8538244 -9.816287 19.2509 -1.8567935 -9.9429245 19.207115 -1.8584528 -10.06615 19.156328 -1.8595008 -10.183501 19.094202 -1.8595008 -10.295729 19.022598 -1.8586274 -10.384922 18.909294 -1.8536497 -10.485721 18.818241 -1.8509425 -10.590695 18.735336 -1.8491086 -10.711896 18.681234 -1.8502438 -10.836336 18.63238 -1.8519905 -10.96058 18.582699 -1.853737 -11.083599 18.530485 -1.855309 -11.206906 18.478313 -1.8569683 -11.317467 18.404957 -1.8565316 -11.424388 18.325869 -1.8555709 -11.530232 18.245319 -1.8545229 -11.634444 18.162485 -1.8533003 -11.741871 18.084906 -1.852689 -11.854807 18.015848 -1.8530384 -11.972864 17.954372 -1.854261 -12.085593 17.884697 -1.8546977 -12.201859 17.820068 -1.8557457 -12.308699 17.74159 -1.8553963 -12.416182 17.664101 -1.8552216 -12.528378 17.593264 -1.8558329 -12.630847 17.508789 -1.855047 -12.738041 17.430958 -1.855047 -12.841792 17.348467 -1.8546103 -12.945608 17.266157 -1.854261 -13.047091 17.180845 -1.8536497 -13.151051 17.098888 -1.8534751 -13.25021 17.010799 -1.852689 -13.350019 16.923702 -1.8520777 -13.448635 16.835243 -1.8513792 -13.55356 16.75473 -1.8516412 -13.656742 16.672022 -1.8517284 -13.743519 16.56951 -1.8496325 -13.867352 16.51157 -1.852689 -13.991635 16.453489 -1.8558329 -13.054977 15.162468 -1.7164549 -13.092127 15.01825 -1.7090318 -13.121408 14.86668 -1.7007356 -13.136713 14.701206 -1.6907799 -13.167192 14.554575 -1.6830076 -13.221263 14.435308 -1.6784666 -13.359032 14.407238 -1.6848415 -13.470362 14.349692 -1.6878108 -13.56296 14.271825 -1.6884221 -13.694476 14.234281 -1.6940112 -13.954623 14.327683 -1.7157563 -14.042973 14.242499 -1.7158436 -14.141358 14.167346 -1.7172408 -14.240767 14.092923 -1.7188128 -14.337656 14.015723 -1.7201227 -14.426969 13.930945 -1.7205594 -14.520825 13.850412 -1.7216073 -14.632363 13.786329 -1.7248385 -14.742202 13.720041 -1.727895 -14.859844 13.66034 -1.7319123 -15.015656 13.634534 -1.7404705 -15.151687 13.589368 -1.746671 -15.269084 13.52653 -1.7506881 -15.478493 13.543449 -1.7654468 -15.612554 13.492515 -1.7713852 -15.814006 13.498003 -1.7850959 -15.954414 13.449514 -1.791733 -16.081808 13.388974 -1.7968855 -16.255993 13.365969 -1.8073651 -16.36554 13.288579 -1.8105088 -16.456873 13.196013 -1.8116442 -16.561743 13.113958 -1.8143514 -16.767458 13.11027 -1.8283241 -16.916185 13.060104 -1.8359218 -17.086317 13.024912 -1.8458774 -17.289282 13.012683 -1.8594135 -17.495934 13.000826 -1.8732989 -17.754492 13.024632 -1.8927734 -17.97204 13.015367 -1.9077067 -18.146378 12.972631 -1.9179243 -18.389235 12.976492 -1.9354775 -0 0 -0 -18.901724 12.993646 -1.9732039 -19.21851 13.038499 -1.9983549 -19.414867 12.998476 -2.0106683 -19.619764 12.962024 -2.0238552 -19.767359 12.886005 -2.0310161 -19.917269 12.810278 -2.0384393 -19.972786 12.673416 -2.0360813 -20.045107 12.547455 -2.0355573 -20.065777 12.389682 -2.0297935 -20.126957 12.257518 -2.0283089 -20.153965 12.105066 -2.0234184 -20.187578 11.957314 -2.0193141 -20.224438 11.812119 -2.0156462 -0 0 -0 -20.216265 11.476974 -2.0003633 -20.296738 11.358552 -2.0014114 -0 0 -0 -20.243801 11.0049 -1.9823736 -20.263527 10.855077 -1.9776578 -20.364109 10.748673 -1.9810636 -20.39963 10.607893 -1.9780945 -20.443941 10.472077 -1.9760858 -0 0 -0 -0 0 -0 -20.409527 9.9845524 -1.9542534 -20.449764 9.8491907 -1.9522449 -20.515213 9.7260885 -1.9527688 -0 0 -0 -20.517143 9.4203949 -1.9415907 -0 0 -0 -0 0 -0 -20.499029 8.9589615 -1.9236007 -20.47765 8.8003654 -1.9163524 -20.495474 8.6594296 -1.9129465 -0 0 -0 -20.51811 8.373764 -1.9051741 -20.490511 8.2161951 -1.8977512 -0 0 -0 -0 0 -0 -20.400797 7.7474499 -1.8754821 -20.419949 7.6116881 -1.8728622 -20.353065 7.4448409 -1.8622954 -20.404928 7.3221722 -1.8629067 -20.424101 7.1879025 -1.8605487 -20.421677 7.0465245 -1.8562696 -20.428669 6.9089584 -1.852951 -20.437582 6.7725124 -1.8498945 -20.447485 6.6368327 -1.8470126 -20.444151 6.497364 -1.8429955 -20.454145 6.3626256 -1.8402883 -20.439432 6.220758 -1.8353978 -20.411337 6.0756159 -1.829372 -20.40519 5.9377337 -1.8254422 -20.368416 5.7917099 -1.8188052 -20.358458 5.6540928 -1.8147007 -20.362001 5.5207267 -1.8119061 -20.399343 5.3967028 -1.8122555 -20.436897 5.2726779 -1.8126922 -20.470797 5.147666 -1.8128668 -20.518446 5.0259919 -1.8143514 -20.541145 4.89815 -1.8136528 -20.587311 4.775847 -1.8151374 -20.624001 4.6511893 -1.815836 -20.657991 4.5258341 -1.81636 -20.691217 4.4002376 -1.8168839 -20.722706 4.2742019 -1.8173206 -20.776871 4.1526318 -1.8198532 -20.781422 4.0210948 -1.8180193 -20.84487 3.9008369 -1.8215125 -20.868412 3.772862 -1.8215125 -20.958883 3.6565595 -1.8275381 -21.04085 3.537967 -1.8328652 -21.060196 3.4084778 -1.8326906 -21.078745 3.2788844 -1.832516 -21.110291 3.1512511 -1.8335639 -21.142048 3.023495 -1.8346992 -21.179941 2.8964126 -1.8364458 -21.215096 2.7687213 -1.8380177 -21.277159 2.6441479 -1.8420348 -21.304855 2.5149455 -1.8430828 -21.361465 2.3888247 -1.8467506 -21.384636 2.2586501 -1.8475367 -21.414946 2.1290698 -1.8490212 -21.454386 2.0001271 -1.8513792 -21.503967 1.871731 -1.8546977 -21.534906 1.7413561 -1.8564442 -21.544191 1.6091135 -1.856357 -21.575523 1.4783891 -1.8582782 -21.604074 1.3472167 -1.8600248 -21.613922 1.2147431 -1.8601995 -21.642859 1.0831957 -1.8621206 -21.669001 0.95125133 -1.8638673 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -17.330353 -0.090483397 -1.4817129 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -17.366207 -0.83722013 -1.4866034 -17.367704 -0.94413978 -1.4872147 -17.376501 -1.0515906 -1.4885246 -17.373697 -1.158456 -1.488874 -17.378183 -1.2659054 -1.4899219 -17.388958 -1.3740026 -1.4915812 -17.388142 -1.4813496 -1.4922798 -0 -0 -0 -0 -0 -0 -19.669609 -2.0409768 -1.6960198 -19.303209 -2.1227612 -1.6648431 -19.503559 -2.2659919 -1.6837063 -19.293505 -2.3616598 -1.666415 -15.746406 -2.0256858 -1.3542117 -15.218339 -2.0527666 -1.3086256 -14.701404 -2.0749769 -1.2640002 -13.869416 -2.044445 -1.1914293 -13.28159 -2.0411544 -1.1404288 -12.739597 -2.0379677 -1.0934454 -12.327879 -2.0497732 -1.0579896 -11.920438 -2.0572832 -1.0228832 -12.261592 -2.1937094 -1.0544091 -11.745407 -2.1758344 -1.009609 -11.875658 -2.2754138 -1.0224465 -11.729548 -2.3221259 -1.010657 -11.688726 -2.388669 -1.0082991 -11.679699 -2.4615772 -1.008823 -11.500828 -2.4976838 -0.99415171 -11.465842 -2.5638573 -0.99240512 -11.355724 -2.6125009 -0.9839341 -11.323001 -2.6782315 -0.98244953 -11.325714 -2.752362 -0.98419613 -11.317312 -2.8239737 -0.98498207 -11.000605 -2.8167701 -0.95790988 -11.105481 -2.9163451 -0.96900076 -11.046014 -2.9732995 -0.9652456 -11.031404 -3.0420799 -0.96559489 -10.861055 -3.0669425 -0.95179683 -7.9240756 -2.2903018 -0.68552881 -7.9270687 -2.3439636 -0.68710077 -7.906816 -2.3908293 -0.68657678 -7.8843832 -2.4369466 -0.68587816 -7.8892307 -2.4915776 -0.68771207 -7.883275 -2.5429959 -0.6885854 -7.9394336 -2.6150002 -0.69522244 -10.721091 -3.6041098 -0.95398009 -10.589469 -3.6323361 -0.9438498 -10.502101 -3.6745453 -0.93782407 -10.607899 -3.7847729 -0.94978821 -10.578859 -3.8477476 -0.94926429 -10.55038 -3.9108548 -0.94882762 -10.064875 -3.8013086 -0.90559947 -7.2074389 -2.7728829 -0.63941878 -7.1624627 -2.8061543 -0.63679892 -7.1284542 -2.8434069 -0.63522696 -10.176234 -4.1314759 -0.92524862 -10.176473 -4.2044883 -0.92769384 -10.131197 -4.2587447 -0.92585993 -10.0719 -4.3067298 -0.92271608 -10.119283 -4.4006252 -0.92978978 -9.0033312 -3.9812412 -0.82543087 -10.26532 -4.6147342 -0.94908959 -10.122645 -4.6254716 -0.93808609 -10.180812 -4.7277718 -0.94646972 -5.5009856 -2.5959055 -0.49567428 -5.4687843 -2.6218593 -0.49410233 -5.3925853 -2.6261473 -0.48825124 -5.3388658 -2.6406393 -0.48458341 -5.3501601 -2.687207 -0.48729062 -5.3380084 -2.7222471 -0.48772728 -15.964769 -8.2645397 -1.5383898 -15.903176 -8.356781 -1.5373418 -15.832263 -8.4438915 -1.5354207 -15.7565 -8.5280752 -1.5330627 -15.676807 -8.6097288 -1.5303555 -15.616722 -8.7018795 -1.5296569 -15.557832 -8.7945967 -1.5291328 -14.027524 -8.0435553 -1.3799739 -13.92107 -8.0964212 -1.3742101 -3.4843967 -2.0555716 -0.31708521 -6.95471 -4.160099 -0.67286605 -3.4691305 -2.1043746 -0.31813318 -3.4510615 -2.1224904 -0.31760919 -13.593461 -8.4743166 -1.3666998 -13.574051 -8.5783195 -1.3701056 -13.561424 -8.6872377 -1.3742975 -13.534602 -8.7876444 -1.377092 -13.432992 -8.8393145 -1.3721142 -13.352809 -8.904438 -1.3694071 -13.28389 -8.9767199 -1.3679224 -4.3381615 -2.9708197 -0.42336535 -4.3018441 -2.9848897 -0.42144409 -4.2736683 -3.0043552 -0.42039615 -14.350636 -10.219354 -1.5068638 -14.290085 -10.308964 -1.5071259 -14.239429 -10.405855 -1.5085231 -14.196131 -10.508441 -1.5107937 -5.4746947 -4.1050935 -0.56230676 -5.4620972 -4.1482477 -0.56370401 -5.5091891 -4.2375569 -0.57173836 -5.4988022 -4.2835236 -0.57348496 -13.778725 -10.869244 -1.5009254 -13.669743 -10.920009 -1.4962096 -13.551363 -10.96233 -1.4904459 -13.424504 -10.996667 -1.4837215 -13.333008 -11.059116 -1.4810143 -13.245829 -11.124701 -1.4788311 -13.167454 -11.197378 -1.4776957 -2.8979399 -2.495574 -0.29769805 -2.871309 -2.5034895 -0.29638809 -2.8558939 -2.5210605 -0.29638809 -2.8344285 -2.5332265 -0.29568946 -2.8099666 -2.5425508 -0.29464149 -3.5260074 -3.2298741 -0.38162181 -3.490052 -3.2365475 -0.37970054 -3.4519691 -3.2408566 -0.37751731 -3.4717355 -3.2997191 -0.38232043 -3.4822931 -3.350657 -0.38607562 -2.5817397 -2.5149779 -0.27839819 -2.5754812 -2.5398641 -0.27953348 -2.554913 -2.5506928 -0.27892217 -2.5574331 -2.5847309 -0.28119275 -2.5645058 -2.6238818 -0.28407463 -2.8175428 -2.9183264 -0.31804585 -2.8827808 -3.0227807 -0.32861272 -10.72105 -11.379106 -1.3329905 -10.625916 -11.417693 -1.3297594 -2.9149728 -3.1714025 -0.3400529 -7.6582613 -8.4342747 -0.96114111 -2.8951247 -3.228441 -0.34258547 -10.133766 -11.439401 -1.3021632 -2.7588573 -3.1535203 -0.329748 -9.9307432 -11.491294 -1.2938669 -9.8348236 -11.522462 -1.2904611 -7.4139013 -8.794981 -0.97083467 -9.7819204 -11.749462 -1.3026872 -9.5913296 -11.665372 -1.2863566 -9.4975939 -11.696937 -1.2833 -9.3801498 -11.698259 -1.276925 -9.3026285 -11.748566 -1.276139 -9.2168655 -11.78816 -1.2742177 -9.1254892 -11.820048 -1.2715105 -9.0370884 -11.855221 -1.2692399 -8.935421 -11.872244 -1.2650481 -8.8142776 -11.862081 -1.2579744 -8.6888838 -11.844455 -1.2502021 -8.6125383 -11.892705 -1.2496781 -8.3789225 -11.72085 -1.2254878 -8.3102932 -11.776925 -1.2260118 -8.2133913 -11.792545 -1.2222567 -8.1352358 -11.834511 -1.2213833 -7.9360676 -11.6979 -1.2016468 -2.8389881 -4.240953 -0.40982926 -2.8332305 -4.2890458 -0.41306046 -7.6633682 -11.756041 -1.1926519 -7.5964794 -11.811219 -1.1935252 -7.4480724 -11.738168 -1.1811243 -7.3806653 -11.791247 -1.1819104 -7.3134103 -11.844788 -1.1827836 -7.2255678 -11.864766 -1.1802511 -7.0382452 -11.718442 -1.1607766 -2.6802871 -4.5257516 -0.42354 -2.6494527 -4.5369511 -0.42301604 -2.6016791 -4.5185919 -0.41952285 -6.5567274 -11.549783 -1.126718 -6.514926 -11.641954 -1.1319578 -6.4760885 -11.741025 -1.1378962 -6.3563452 -11.693019 -1.1291633 -6.2901235 -11.742338 -1.1302112 -6.2244658 -11.793047 -1.1314338 -5.9037995 -11.353756 -1.0842758 -1.2491074 -2.4393272 -0.20268342 -5.9515953 -11.797115 -1.1207796 -5.8728919 -11.820921 -1.119557 -1.2118758 -2.478013 -0.20425536 -5.6742182 -11.781708 -1.1088154 -5.5920043 -11.7956 -1.1068069 -5.5174165 -11.825175 -1.1063702 -1.094995 -2.3856966 -0.19255319 -1.0590096 -2.3451629 -0.18801205 -1.0352954 -2.3306789 -0.18600348 -1.0169855 -2.3278596 -0.18513018 -0.99560273 -2.3175817 -0.18355824 -0.97554773 -2.3098824 -0.18224829 -0.96212041 -2.3176649 -0.18242295 -4.9023042 -12.012485 -1.0998205 -4.8181233 -12.016449 -1.0973753 -4.7077923 -11.9531 -1.0886424 -0.91932797 -2.3777421 -0.18591614 -4.6300774 -12.192502 -1.1057589 -4.4626198 -11.972389 -1.0825293 -4.3989992 -12.026677 -1.0850618 -4.3291602 -12.064694 -1.0861098 -1.1674213 -3.3181908 -0.27080053 -1.1392405 -3.302691 -0.26870462 -4.0824175 -12.071561 -1.07956 -3.9656527 -11.96778 -1.0676832 -3.8764594 -11.943564 -1.0632294 -3.8049126 -11.972821 -1.0637534 -3.7402544 -12.024479 -1.0663732 -0.98615819 -3.2413661 -0.25944766 -0.96482992 -3.2425821 -0.25901103 -0.95465797 -3.2819188 -0.26206756 -0.96175045 -3.3835335 -0.27080053 -3.3384542 -12.021251 -1.0561557 -0.91468215 -3.3748903 -0.26896659 -0.89191866 -3.3727348 -0.26826796 -3.1049192 -12.035328 -1.0520512 -3.0400028 -12.089899 -1.0552824 -2.9671855 -12.11413 -1.0558064 -2.896034 -12.145674 -1.057029 -1.9042574 -8.2097807 -0.70124817 -0.71654361 -3.1787996 -0.24809483 -0.6948933 -3.1734056 -0.24722153 -1.7851481 -8.3954449 -0.71487159 -1.726356 -8.3711176 -0.71172774 -1.6743735 -8.3786221 -0.71146572 -1.6286097 -8.4180794 -0.71408564 -2.2738614 -12.151728 -1.0462002 -2.1948259 -12.140944 -1.0440168 -1.4317757 -8.2081614 -0.69286454 -2.0648363 -12.28092 -1.0541471 -1.3887211 -8.5820808 -0.72456515 -1.9393958 -12.468735 -1.0686438 -1.8606461 -12.465621 -1.0673339 -1.7789048 -12.440315 -1.0641026 -1.6963294 -12.405595 -1.0600855 -1.6146339 -12.373295 -1.0563303 -1.5375766 -12.374071 -1.0555444 -1.4541464 -12.319958 -1.0499552 -1.3785253 -12.328648 -1.0499552 -1.3052591 -12.359659 -1.0519639 -1.2313685 -12.387261 -1.0537105 -0.35753405 -3.8386552 -0.30040526 -1.062417 -12.207916 -1.0366812 -0.99841273 -12.349245 -1.048558 -0.9188354 -12.304475 -1.0441042 -0.84665704 -12.35858 -1.0483834 -0.24203457 -3.8865919 -0.3038111 -0.21840601 -3.8919823 -0.30416045 -0.61858428 -12.363115 -1.0475974 -0.54315102 -12.376631 -1.0484707 -0.46501839 -12.321993 -1.0434055 -0.38776577 -12.27284 -1.0388645 -0.32037282 -12.585694 -1.0661113 -0.24343148 -12.602364 -1.0674212 -0.16645555 -12.630514 -1.0697792 -0.089023501 -12.641259 -1.0706524 -0.011325684 -12.502103 -1.0584263 --0.06550508 -12.524848 -1.0604348 --0.14227584 -12.517238 -1.0598235 --0.2209395 -12.622705 -1.0691679 --0.29645872 -12.539447 -1.0620068 --0.37108311 -12.459724 -1.0551951 --0.4542453 -12.644374 -1.0716131 --0.53177935 -12.640353 -1.0715257 --0.60841811 -12.617948 -1.0698664 --0.68107241 -12.526442 -1.0621815 --0.76104838 -12.573734 -1.0667226 --0.83758873 -12.559881 -1.0659366 --0.92201877 -12.655848 -1.0748442 --1.0045984 -12.712517 -1.080346 --1.0830892 -12.712069 -1.08087 --1.168772 -12.789508 -1.088293 --1.2470315 -12.780112 -1.0881183 --1.3228555 -12.747449 -1.0859351 --1.4007208 -12.736121 -1.0856731 --1.4859685 -12.788637 -1.0910876 --1.5686456 -12.813888 -1.0941441 --1.6449531 -12.786236 -1.0925722 --1.709131 -12.670267 -1.0832279 --1.810923 -12.83019 -1.0983359 --1.8912112 -12.829678 -1.0992966 --1.969897 -12.817832 -1.0992966 --2.0513406 -12.82321 -1.1008685 --2.1406021 -12.874257 -1.1065449 --2.2469976 -13.019911 -1.1206923 --2.3347373 -13.050006 -1.1246221 --2.4261963 -13.097145 -1.1301239 --2.5203829 -13.154412 -1.1365863 --2.5973744 -13.120132 -1.134927 --2.6634707 -13.033675 -1.1286393 --2.7631128 -13.110665 -1.137023 --2.8492136 -13.119749 -1.1393808 --2.9398768 -13.147712 -1.1434853 --3.0343397 -13.189616 -1.1488998 --3.1159003 -13.173658 -1.1491617 --3.1479852 -12.953913 -1.1310846 --3.2826319 -13.155694 -1.151083 --3.3884933 -13.23374 -1.1599907 --3.4554629 -13.158742 -1.1551001 --3.5224168 -13.086308 -1.1504717 --3.5976155 -13.046203 -1.1488124 --3.6773272 -13.022923 -1.1487252 --3.7621431 -13.017342 -1.150297 --3.86115 -13.058973 -1.1562355 --3.9544666 -13.078899 -1.1602526 --4.026113 -13.026788 -1.1577201 --4.0129805 -12.707355 -1.1306479 --4.0982146 -12.705247 -1.1327437 --4.2966828 -13.046039 -1.1665404 --4.3864903 -13.048701 -1.1692475 --4.4700279 -13.031906 -1.1702082 --4.6258955 -13.221441 -1.1903813 --4.7173104 -13.221895 -1.1930885 --4.779964 -13.142147 -1.1883727 --4.8708992 -13.140593 -1.1909926 --4.9194102 -13.025651 -1.1830456 --4.9591851 -12.891088 -1.1732647 --5.0494537 -12.88917 -1.175972 --5.0682931 -12.70712 -1.1617372 --4.9621887 -12.222577 -1.1188583 --5.1051755 -12.356707 -1.1344904 --5.3843207 -12.809123 -1.180513 --5.5360494 -12.94713 -1.1968437 --5.6165786 -12.915659 -1.1971056 --1.5750866 -3.5613592 -0.3038111 --1.5969089 -3.5516276 -0.3038111 --1.6149454 -3.5336075 -0.30302516 --6.0518417 -13.03234 -1.222082 --6.1410446 -13.014781 -1.2240032 --1.6560311 -3.453876 -0.29822201 --1.6719594 -3.4329019 -0.29717407 --1.6775361 -3.391325 -0.29411754 --1.6929487 -3.370285 -0.29306957 --1.7199317 -3.3722584 -0.29429218 --1.7396752 -3.3598723 -0.29411754 --1.7630384 -3.3544257 -0.29464149 --4.5033989 -8.4434566 -0.80132788 --4.7201285 -8.7205477 -0.83171862 --6.8393316 -12.453052 -1.2079346 --1.8390107 -3.2997057 -0.29359356 --1.8606933 -3.2909615 -0.29385555 --1.8778782 -3.2742972 -0.29333156 --7.4263415 -12.768862 -1.2573631 --7.4534359 -12.636392 -1.2485428 --7.59168 -12.692157 -1.2589351 --7.6745806 -12.653854 -1.2598083 --7.7713847 -12.637923 -1.2630396 --7.8740788 -12.630579 -1.2672313 --7.9359975 -12.557605 -1.2646989 --8.0053778 -12.496931 -1.2634763 --8.060751 -12.414989 -1.2600703 --8.1581316 -12.397752 -1.2634763 --8.2456551 -12.364865 -1.2653102 --8.3024063 -12.285975 -1.2623409 --8.5943127 -12.551258 -1.2959628 --8.6160841 -12.418894 -1.2874918 --8.5517759 -12.166118 -1.2660961 --9.2104549 -12.933811 -1.3543863 --9.3496714 -12.960268 -1.3633813 --9.4448872 -12.924372 -1.3657392 --9.8274603 -13.276132 -1.4104519 --10.048568 -13.40209 -1.4308871 --10.272792 -13.527414 -1.4514968 --10.407223 -13.531247 -1.4589199 --10.517599 -13.502501 -1.4628497 --10.571254 -13.400951 -1.4587452 --10.290184 -12.881286 -1.4077448 --10.301992 -12.735031 -1.3984004 --10.455688 -12.764058 -1.40888 --10.766573 -12.980298 -1.4408426 --10.862674 -12.933825 -1.4431132 --10.912789 -12.832779 -1.4391834 --10.975725 -12.747459 -1.4370874 --11.081228 -12.711412 -1.4407554 --11.143195 -12.625255 -1.4386594 --11.196557 -12.529902 -1.4355155 --11.271893 -12.459487 -1.4353409 --11.469237 -12.522324 -1.4510602 --11.148951 -12.023646 -1.3998851 --11.189109 -11.919421 -1.3956059 --11.375262 -11.969692 -1.4100153 --11.826277 -12.292361 -1.4577845 --11.927195 -12.24597 -1.4610158 --11.270533 -11.430554 -1.369669 --11.341161 -11.36189 -1.3697563 --12.375036 -12.246488 -1.4886993 --12.388685 -12.110437 -1.4811889 --12.482108 -12.052877 -1.4835469 --12.486629 -11.910053 -1.4751632 --12.666053 -11.933636 -1.4880006 --12.879777 -11.98668 -1.5048553 --13.008086 -11.95799 -1.511405 --13.095963 -11.891342 -1.5131515 --13.148659 -11.792805 -1.5107937 --13.129055 -11.630651 -1.5000521 --10.053705 -8.7966547 -1.1335298 --13.201451 -11.408735 -1.4920177 --13.270448 -11.326871 -1.4919305 --13.368641 -11.269631 -1.495249 --10.290291 -8.5670347 -1.1362369 --10.315732 -8.4815884 -1.1331804 --10.391553 -8.4376001 -1.1358876 --13.811385 -11.074635 -1.5143741 --13.860334 -10.974839 -1.5122783 --13.84109 -10.822089 -1.502672 --13.891462 -10.724783 -1.5009254 --10.689057 -8.1480875 -1.1406908 --14.023618 -10.554704 -1.5011001 --14.091314 -10.470834 -1.5014493 --14.151281 -10.381228 -1.5010127 --14.210679 -10.291281 -1.5005761 --14.278419 -10.207368 -1.5011001 --14.380664 -10.147709 -1.5053792 --14.478625 -10.084332 -1.5092217 --14.56732 -10.013927 -1.5121036 --14.650747 -9.939455 -1.5144615 --14.738775 -9.8676624 -1.5173434 --14.818993 -9.7902203 -1.5194393 --14.902151 -9.7143412 -1.5218846 --14.993315 -9.643198 -1.525203 --15.053885 -9.5520868 -1.5253778 --15.126566 -9.468524 -1.5268623 --15.206417 -9.3891392 -1.5291328 --15.286714 -9.3096476 -1.5314908 --15.359774 -9.225421 -1.5331501 --15.43409 -9.1416636 -1.534984 --15.506235 -9.0563354 -1.5366433 --15.580504 -8.9719572 -1.5385644 --15.649122 -8.884057 -1.5399617 --15.707685 -8.7903013 -1.5403984 --6.7647128 -3.7310705 -0.6396808 --6.7647233 -3.6771219 -0.63741022 --15.819407 -8.4742823 -1.5356826 --15.827939 -8.3542709 -1.5314034 --15.866529 -8.2505608 -1.5301808 --7.2714119 -3.7243714 -0.67862982 --7.0575495 -3.560323 -0.6554001 --6.936522 -3.4460297 -0.6414274 --6.9530616 -3.4012141 -0.64099073 --6.9711075 -3.3571901 -0.64072877 --6.9861751 -3.3117924 -0.64020479 --6.7563062 -3.1521816 -0.61601448 --16.904072 -7.761384 -1.5930581 --16.951376 -7.6575165 -1.5930581 --16.978926 -7.5448651 -1.5912242 --7.33002 -3.203253 -0.66369641 --7.3248253 -3.1475964 -0.66133857 --17.266335 -7.2950349 -1.6056336 --17.321812 -7.1935382 -1.6066816 --17.386837 -7.0957761 -1.6086901 --17.446692 -6.9956326 -1.610262 --17.561583 -6.9169269 -1.6170738 --17.605553 -6.8097596 -1.6172484 --17.66563 -6.7086792 -1.6189951 --17.723263 -6.6064219 -1.620567 --17.791533 -6.5078168 -1.6231868 --17.867697 -6.4116502 -1.6265928 --17.951805 -6.31777 -1.6307845 --18.031668 -6.2217989 -1.634627 --18.093096 -6.1190209 -1.6368103 --18.158669 -6.0172896 -1.6394302 --18.214199 -5.9119081 -1.6411768 --18.26532 -5.8048644 -1.6425741 --18.313911 -5.6968241 -1.6437967 --12.374086 -3.765897 -1.0963273 --18.421587 -5.4833078 -1.6473771 --13.182655 -3.8358901 -1.1660163 --18.618761 -5.2941637 -1.6593413 --18.702726 -5.1942172 -1.6640571 --18.750589 -5.0837936 -1.6655418 --12.777818 -3.3802514 -1.1211289 --12.795424 -3.301038 -1.1208669 --12.830895 -3.226352 -1.1222643 --18.940338 -4.6394029 -1.6719168 --12.395678 -2.9556539 -1.07956 --18.943443 -4.3944693 -1.667201 --18.928265 -4.2687273 -1.6634458 --13.288736 -2.9112017 -1.1550128 --18.652803 -3.9667034 -1.6341904 --18.688499 -3.8545923 -1.6352384 --18.557455 -3.708998 -1.6214403 --18.543676 -3.5880589 -1.6182091 --18.553593 -3.4720104 -1.6171612 --18.586311 -3.3602293 -1.6182091 --18.654665 -3.2545128 -1.6224883 --18.698843 -3.1441188 -1.6246715 --18.727617 -3.0309174 -1.6255448 --18.839375 -2.9304979 -1.633841 --18.905279 -2.8220541 -1.6381202 --19.17765 -2.7425313 -1.6607386 --19.246428 -2.6319623 -1.6653671 --19.449896 -2.5383165 -1.6819597 --19.602516 -2.4360054 -1.6940985 --19.979181 -2.3584304 -1.7260611 --20.058617 -2.2431042 -1.7318249 --20.14135 -2.1273103 -1.7379379 --20.353273 -2.0234983 -1.7554913 --20.889017 -1.9474088 -1.8016013 --22.314779 -1.9423203 -1.9260459 --22.488125 -1.8184533 -1.9402807 --22.506807 -1.6810282 -1.9409794 --22.517693 -1.5429657 -1.9410666 --22.552586 -1.406383 -1.9433372 --22.572725 -1.2686476 -1.9443852 --22.478601 -1.1250391 -1.9354775 --22.560719 -0.99041355 -1.9421146 --22.536507 -0.85083693 -1.9394947 --22.56719 -0.71335828 -1.9417653 --19.574688 1.4431789 -1.9282776 --19.546619 1.5617529 -1.9263839 --19.527746 1.6808908 -1.9254869 --19.508148 1.7998559 -1.9245899 --19.491787 1.919034 -1.9240916 --19.46777 2.0373538 -1.9228956 --19.450945 2.1563287 -1.9224969 --19.426477 2.2743633 -1.9214005 --19.403269 2.3924227 -1.9205035 --19.378357 2.5101552 -1.9195069 --19.359632 2.6286094 -1.9192078 --19.337227 2.7465086 -1.9186099 --19.316074 2.8645239 -1.9182112 --19.288301 2.9814706 -1.9172145 --19.259821 3.0981843 -1.9162178 --19.211987 3.2115426 -1.9133275 --19.170351 3.3256218 -1.9111348 --19.123144 3.4384305 -1.9084438 --19.069405 3.5496922 -1.9051548 --19.030655 3.6634345 -1.9034605 --0 0 -0 --18.977444 3.8952932 -1.9027628 --18.947344 4.0104265 -1.9021648 --18.936962 4.1297908 -1.9036598 --18.899616 4.2432919 -1.9024638 --18.869347 4.3582821 -1.9020652 --18.828695 4.4707608 -1.9006698 --18.794144 4.5845566 -1.8999721 --18.752146 4.696404 -1.8985767 --18.714304 4.8091469 -1.8976798 --18.673859 4.9210954 -1.8965834 --18.628902 5.0316906 -1.8950884 --18.588089 5.1432467 -1.8940917 --18.541821 5.2531352 -1.8925967 --18.50255 5.3648667 -1.8918991 --18.467375 5.4777288 -1.8916998 --18.462934 5.599894 -1.8947895 --18.450085 5.7198534 -1.8970817 --18.456377 5.8461761 -1.9014671 --18.459919 5.9721785 -1.9056531 --18.455051 6.0959468 -1.9090418 --18.441814 6.2173362 -1.9116331 --18.436249 6.3417063 -1.9151216 --18.433607 6.4675589 -1.9190085 --18.428238 6.5929475 -1.9226962 --18.411743 6.7147622 -1.9252875 --18.422424 6.8470235 -1.9308689 --18.416355 6.9736767 -1.9347559 --18.406639 7.0994387 -1.9383439 --18.393293 7.2242517 -1.941633 --18.372641 7.3465819 -1.9442242 --18.353022 7.4696798 -1.9470149 --18.328905 7.5912905 -1.949407 --18.325993 7.7221603 -1.954191 --18.332222 7.8575921 -1.9600713 --18.306467 7.9798698 -1.962563 --18.291725 8.1073694 -1.9663504 --18.264315 8.2296734 -1.968842 --18.242422 8.354846 -1.9720314 --18.218779 8.47964 -1.9751211 --18.197887 8.6061592 -1.9786094 --18.168953 8.7292929 -1.9813005 --18.149029 8.8571968 -1.9850878 --18.140697 8.9913702 -1.9902705 --18.149178 9.1347227 -1.9974465 --18.120253 9.2599497 -2.0005362 --18.141699 9.4117451 -2.0094066 --18.121466 9.5428209 -2.0136921 --18.086264 9.6664972 -2.0163832 --18.0511 9.790575 -2.0191739 --18.000275 9.9064283 -2.0202703 --17.947838 10.021541 -2.0212669 --17.913713 10.147173 -2.0244563 --17.870094 10.267805 -2.026649 --17.831686 10.391791 -2.0295393 --17.797567 10.518729 -2.0330276 --17.77195 10.651267 -2.0376124 --17.759829 10.792671 -2.0438914 --17.700895 10.906138 -2.0447884 --17.653896 11.027196 -2.0471804 --17.613644 11.152878 -2.0504694 --17.584234 11.286006 -2.0551538 --17.540508 11.41051 -2.0582435 --17.493425 11.533258 -2.0610342 --17.470312 11.672442 -2.0668149 --17.433792 11.803408 -2.0711005 --17.385653 11.927045 -2.0740905 --17.333385 12.048264 -2.0766819 --17.312822 12.192208 -2.0832598 --17.264416 12.31728 -2.0865488 --17.227221 12.45096 -2.0913329 --17.198668 12.5917 -2.0973129 --17.122683 12.698177 -2.0975122 --17.070698 12.822723 -2.1008012 --17.004368 12.936866 -2.102396 --16.900236 13.022131 -2.0993063 --16.760401 13.079058 -2.0917315 --16.607233 13.124271 -2.0824625 --16.326746 13.066131 -2.056848 --16.151186 13.089002 -2.044589 --15.905203 13.052138 -2.0231607 --15.671764 13.022293 -2.0032272 --15.468228 13.014424 -1.9870812 --15.343396 13.071018 -1.9812008 --15.140097 13.058977 -1.9649551 --14.981744 13.083556 -1.9545896 --14.786392 13.07373 -1.9392409 --14.625831 13.092532 -1.9284769 --14.403669 13.053728 -1.9093409 --14.258054 13.081987 -1.9004705 --14.121383 13.11708 -1.892796 --13.961627 13.129176 -1.8819324 --13.820992 13.157648 -1.87366 --13.700597 13.204226 -1.8681782 --13.663473 13.331126 -1.8743577 --13.594159 13.427299 -1.8761517 --13.458747 13.457689 -1.8686767 --13.310889 13.474182 -1.8594075 --13.180711 13.507174 -1.8526303 --13.047868 13.536212 -1.8454542 --12.918597 13.567734 -1.8387765 --12.793524 13.60253 -1.8326968 --12.660383 13.627554 -1.8254211 --12.539529 13.664657 -1.8199394 --12.411347 13.692679 -1.8133614 --12.276658 13.712234 -1.8057867 --12.164609 13.755996 -1.8016007 --12.055102 13.801898 -1.7978133 --11.944842 13.846222 -1.7939264 --11.822879 13.876081 -1.7882453 --11.711889 13.917909 -1.7842586 --11.623091 13.985682 -1.7837603 --11.534533 14.05366 -1.7833616 --11.432422 14.104845 -1.78087 --11.336335 14.163074 -1.779375 --11.228242 14.205824 -1.7759862 --11.142702 14.276805 -1.7762853 --11.061572 14.353577 -1.7773815 --10.964857 14.410092 -1.7759862 --10.886989 14.49142 -1.7777803 --10.817426 14.584323 -1.7810693 --10.728322 14.651226 -1.7811689 --10.575273 14.629683 -1.7704049 --10.467393 14.669187 -1.7673153 --10.361718 14.711171 -1.7646242 --10.909033 15.691994 -1.8765503 --10.820423 15.770122 -1.8779457 --10.711741 15.818915 -1.8758527 --10.616135 15.886826 -1.8761517 --9.1826172 13.925545 -1.6330637 --10.436658 16.040928 -1.8791417 --10.501425 16.359226 -1.9094405 --10.40351 16.427557 -1.9099388 --10.286175 16.464922 -1.9068491 --9.3753958 15.213831 -1.7522655 --10.037877 16.515081 -1.8980784 --8.6744223 14.470853 -1.6521997 --8.576355 14.508388 -1.6504058 --9.7246723 16.684153 -1.8965834 --9.6275702 16.752998 -1.8976798 --8.0224228 14.159917 -1.5923995 --9.4188347 16.865538 -1.8971814 --9.3132534 16.919525 -1.8967828 --9.2035685 16.965857 -1.8955867 --8.0777464 15.110726 -1.6785119 --8.9863329 17.061674 -1.8937927 --8.8869743 17.12709 -1.8949888 --8.7803583 17.17864 -1.8946898 --8.6694193 17.221527 -1.8934938 --8.5613775 17.269939 -1.8929954 --8.4456482 17.302473 -1.8908027 --8.3358765 17.346794 -1.8900054 --8.2258778 17.390419 -1.8892081 --8.1173382 17.436956 -1.8888094 --8.0072937 17.480103 -1.8881117 --7.8978434 17.52437 -1.8876134 --7.7861352 17.563404 -1.8866167 --7.6730523 17.598989 -1.885321 --7.5617867 17.638424 -1.8845237 --7.4499393 17.676237 -1.8836267 --7.3401976 17.718859 -1.8833277 --7.2290878 17.758034 -1.8827296 --7.1155572 17.79097 -1.8815337 --7.0000758 17.81855 -1.8798393 --6.884882 17.846313 -1.8782446 --6.7667923 17.865889 -1.8758527 --6.6514955 17.892151 -1.874258 --6.5378356 17.922344 -1.8731617 --6.4267378 17.959311 -1.8728627 --6.3174086 18.001223 -1.8731617 --6.2048941 18.034002 -1.8725636 --6.0928512 18.067963 -1.872165 --5.975944 18.087057 -1.8702713 --5.8602567 18.109184 -1.8687763 --5.7433214 18.126778 -1.8668827 --5.628159 18.149323 -1.865587 --5.513514 18.17304 -1.8644906 --4.3741531 14.741832 -1.5024998 --4.0247941 13.875813 -1.4094107 --5.1807861 18.281021 -1.8654873 --5.0751524 18.336439 -1.8679789 --4.9677362 18.386446 -1.8699723 --4.8573613 18.426203 -1.8709689 --4.7459421 18.462406 -1.8716667 --3.6271346 14.476886 -1.4571513 --3.5349362 14.485335 -1.4557559 --4.4122024 18.57568 -1.8746567 --4.2959018 18.592707 -1.87366 --3.1589332 14.063495 -1.4060221 --4.0625405 18.621666 -1.8713677 --3.1915553 15.071731 -1.5053902 --3.8259149 18.632103 -1.8674806 --3.7111301 18.653276 -1.8672813 --3.5962298 18.673742 -1.867082 --3.4832211 18.70426 -1.8679789 --3.3652184 18.707653 -1.8661849 --3.2508774 18.73089 -1.8664839 --3.1342449 18.740671 -1.8654873 --3.0220401 18.777233 -1.8672813 --2.9075284 18.800339 -1.8677796 --2.7913871 18.812904 -1.8672813 --2.6770201 18.837559 -1.8680786 --2.5629914 18.865461 -1.8692746 --2.4489765 18.894648 -1.87067 --2.3342128 18.919193 -1.8716667 --2.2187772 18.939089 -1.8722646 --2.1032948 18.95927 -1.8729624 --1.9857841 18.960934 -1.871866 --1.8691121 18.96979 -1.871567 --1.752589 18.97991 -1.8714674 --1.6362681 18.99229 -1.8716667 --1.5197822 19.002964 -1.8717663 --1.403739 19.019871 -1.8725636 --1.2868075 19.025146 -1.8722646 --1.1696813 19.026726 -1.8716667 --1.0524193 19.024603 -1.8707696 --0.93591076 19.035671 -1.871268 --0.81913519 19.042049 -1.8713677 --0.70238972 19.0497 -1.8716667 --0.58539826 19.050669 -1.8713677 --0.46829936 19.045944 -1.8705703 --0.35113412 19.032541 -1.8689756 --0.23443137 19.041302 -1.8696733 --0.11763431 19.049347 -1.870371 --0.00074752688 19.048716 -1.8702713 -0.11612095 19.046371 -1.870072 -0.23303403 19.04928 -1.8704706 -0.35007885 19.056444 -1.8713677 -0.46712261 19.058912 -1.871866 -0.58417928 19.059666 -1.8722646 -0.70166588 19.070637 -1.8737596 -0.81926632 19.079889 -1.875155 -0.93666482 19.081461 -1.8758527 -1.0533442 19.068399 -1.875155 -1.1702038 19.059591 -1.8749557 -1.2869278 19.049074 -1.8746567 -1.4044455 19.049749 -1.8755536 -1.5222578 19.052675 -1.8767496 -1.6407567 19.061811 -1.8786434 -1.759059 19.066248 -1.8801384 -1.8779652 19.0749 -1.8821317 -1.9930023 19.044216 -1.8802381 -2.110147 19.034595 -1.880537 -2.2301426 19.048962 -1.8833277 -2.3453991 19.022079 -1.882032 -2.4618165 19.005358 -1.8818327 -2.5782511 18.988909 -1.8817331 -2.6937363 18.965836 -1.8810353 -2.8094738 18.945013 -1.8806367 -2.924753 18.921518 -1.8800387 -3.0398495 18.897322 -1.8794407 -3.1545954 18.871443 -1.8787431 -3.2684574 18.840948 -1.8776467 -3.3806551 18.801931 -1.875753 -3.4952295 18.776922 -1.8753543 -2.704253 14.049551 -1.3953576 -3.7213109 18.712122 -1.8732613 -3.8358562 18.687962 -1.8731617 -3.0689557 14.500663 -1.4468856 -3.1525705 14.457255 -1.4443939 -3.2499404 14.476473 -1.4483806 -4.3047495 18.63764 -1.8782446 -4.4176474 18.605066 -1.8776467 -4.5442238 18.628843 -1.8829291 -4.6478038 18.558142 -1.8785437 -3.4442694 13.404347 -1.3485141 -3.5241694 13.374303 -1.3476171 -4.985497 18.45792 -1.8773477 -5.104763 18.449038 -1.87964 -5.2197671 18.42407 -1.8803377 -5.3338251 18.395517 -1.8807364 -5.4460316 18.360537 -1.880537 -5.5574317 18.322966 -1.8801384 -4.3008871 13.87401 -1.4171847 -4.5563321 14.385189 -1.473696 -4.4435549 13.735931 -1.4083143 -4.7396965 14.349923 -1.4759883 -4.6588349 13.819912 -1.4230651 -4.7642622 13.851282 -1.4294438 -6.3331318 18.050541 -1.8783443 -6.4430985 18.009468 -1.878145 -6.5545039 17.972399 -1.878444 -6.6663909 17.936506 -1.8789424 -6.7798457 17.90457 -1.879939 -6.893518 17.872843 -1.8810353 -7.0070558 17.840397 -1.8821317 -5.9768877 14.947836 -1.5747584 -6.0726204 14.921019 -1.5758548 -5.8731298 14.181154 -1.4997091 -6.0898743 14.452934 -1.5331973 -6.1102242 14.256167 -1.5158552 -6.2305889 14.294112 -1.5241275 -7.7456603 17.475771 -1.876949 -7.852335 17.427008 -1.8768493 -7.9587026 17.377594 -1.8767496 -8.0626602 17.323021 -1.8761517 -8.1662483 17.267826 -1.8755536 -8.2707548 17.214703 -1.8752546 -8.377099 17.165419 -1.8754539 -8.4800568 17.109238 -1.8749557 -8.5902462 17.067549 -1.8761517 -8.69979 17.024265 -1.877248 -8.8086681 16.979395 -1.8782446 -8.9168587 16.932949 -1.8791417 -9.0257492 16.887571 -1.8802381 -9.1310978 16.835371 -1.8806367 -9.2404633 16.790358 -1.8819324 -9.3423424 16.731607 -1.8817331 -9.4453201 16.674833 -1.8818327 -9.5474577 16.616564 -1.8818327 -9.6522417 16.562828 -1.8824307 -9.7719145 16.534126 -1.8860188 -9.878809 16.483244 -1.887115 -9.9740782 16.412966 -1.8860188 -10.066246 16.337904 -1.8844241 -10.16525 16.274143 -1.8842247 -10.253736 16.19381 -1.8821317 -10.341081 16.112167 -1.879939 -10.431067 16.035069 -1.8783443 -10.523782 15.962456 -1.8773477 -10.616552 15.890137 -1.8764507 -10.726684 15.843645 -1.8787431 -10.842836 15.805426 -1.8821317 -10.970283 15.782716 -1.8875138 -11.086397 15.742765 -1.8909024 -11.198389 15.696313 -1.8935934 -11.320136 15.662787 -1.8979788 -11.447184 15.635583 -1.9032611 -11.527494 15.544271 -1.9006698 -11.572453 15.406422 -1.8922977 -11.526382 15.15062 -1.8690753 -11.604551 15.060696 -1.8666832 -11.641034 14.917827 -1.8576136 -11.679905 14.779763 -1.8491418 -11.720632 14.645672 -1.8411685 -11.774563 14.529418 -1.8354875 -11.80668 14.387674 -1.8265175 -11.854673 14.266747 -1.8202385 -11.8728 14.111515 -1.8094743 -11.923026 13.995985 -1.8038931 -11.991781 13.902974 -1.8013017 -12.080134 13.832879 -1.8018 -12.172035 13.766696 -1.8028964 -12.267559 13.704353 -1.8045907 -12.363445 13.642094 -1.8063847 -12.459701 13.579906 -1.8082784 -12.552949 13.514133 -1.8097734 -12.639724 13.441204 -1.8103714 -12.738427 13.380691 -1.8127635 -12.838934 13.32162 -1.8154544 -12.949618 13.272501 -1.8196404 -13.075566 13.238098 -1.8260192 -13.123479 13.124551 -1.8213347 -13.242697 13.082238 -1.8268164 -13.36545 13.042429 -1.8327965 -13.508271 13.020939 -1.8415672 -13.680877 13.026314 -1.8544242 -13.864925 13.040283 -1.8687763 -14.008832 13.014557 -1.877547 -14.150743 12.985537 -1.8860188 -14.331899 12.990676 -1.8997728 -14.558869 13.034561 -1.9196066 -14.725042 13.021441 -1.9311678 -14.896846 13.011349 -1.943427 -15.042706 12.976891 -1.9521977 -15.233389 12.9792 -1.9668487 -15.399537 12.958515 -1.9782108 -15.606562 12.969981 -1.9948552 -15.827379 12.990121 -2.0131938 -16.033564 12.995505 -2.0295393 -16.297117 13.04423 -2.0531604 -16.428373 12.984707 -2.0597384 -16.625402 12.975482 -2.0746884 -16.676331 12.851363 -2.0711005 -16.712109 12.716263 -2.0657184 -16.748449 12.582404 -2.0605357 -16.799765 12.460434 -2.0573463 -16.825325 12.320086 -2.0510674 -16.872377 12.196217 -2.0475791 -16.918545 12.072233 -2.0440907 -16.93454 11.927518 -2.0370142 -16.975542 11.801236 -2.0331273 -16.999224 11.663643 -2.027247 -17.035042 11.535131 -2.0229614 -17.087297 11.418227 -2.0207686 -17.128794 11.294545 -2.01738 -17.166912 11.169156 -2.0136921 -17.212513 11.0491 -2.0110013 -17.251402 10.925179 -2.0076125 -17.284357 10.798036 -2.0036259 -17.313013 10.668811 -1.9992405 -17.344137 10.541709 -1.9952538 -17.376915 10.416162 -1.9915662 -17.407949 10.290106 -1.9877788 -17.445831 10.16857 -1.9848884 -17.482014 10.04646 -1.9818984 -17.515623 9.9233103 -1.9787091 -17.544037 9.7977009 -1.9750214 -17.58116 9.6773939 -1.9724301 -17.6612 9.5807219 -1.974822 -17.619614 9.418705 -1.9634601 -17.642738 9.2923336 -1.959573 -17.67646 9.1719913 -1.9569817 -17.704939 9.0493212 -1.953892 -17.737022 8.9288836 -1.9513006 -17.763838 8.8061848 -1.948211 -17.782663 8.6800022 -1.9443239 -17.785364 8.5465946 -1.9387426 -17.801489 8.420289 -1.9347559 -17.81403 8.2928476 -1.9304702 -17.82206 8.1639128 -1.9257859 -17.840067 8.0400982 -1.9222975 -17.858135 7.9167728 -1.9189088 -17.880836 7.7959151 -1.9161181 -17.894497 7.6715493 -1.9124305 -17.919224 7.5523329 -1.9100385 -17.933971 7.4292951 -1.9066498 -17.958023 7.3104868 -1.9043574 -17.972977 7.1883383 -1.9011681 -17.989887 7.0673738 -1.8982778 -18.009705 6.9479046 -1.895786 -18.041759 6.8333921 -1.8946898 -18.018995 6.6986418 -1.8878127 -18.006475 6.5685196 -1.8821317 -17.994911 6.4394751 -1.87665 -17.981506 6.3104906 -1.8710686 -17.991661 6.1903291 -1.8680786 -18.006676 6.0721884 -1.8656867 -18.029425 5.9569058 -1.8641917 -18.045755 5.839735 -1.8620986 -18.042356 5.7165785 -1.8580123 -18.04668 5.5963364 -1.8548229 -18.057825 5.4785666 -1.8524309 -18.052944 5.3563442 -1.8484442 -18.075914 5.2427015 -1.8474475 -18.10487 5.1308775 -1.8471485 -18.144644 5.0220795 -1.8480456 -18.18088 4.9122086 -1.8486435 -18.214527 4.8015747 -1.8490422 -18.242682 4.6894741 -1.8489425 -18.272078 4.5776925 -1.8490422 -18.301756 4.4659629 -1.8492416 -18.323006 4.3522019 -1.8486435 -18.357121 4.2414837 -1.8494409 -18.371151 4.1261506 -1.8482449 -18.388344 4.0116534 -1.8474475 -18.438896 3.9043128 -1.8501385 -18.454708 3.7894998 -1.8493413 -18.538118 3.6882267 -1.8555206 -18.580919 3.5783596 -1.8576136 -18.605461 3.4648283 -1.8579125 -18.630287 3.3513064 -1.8583113 -18.647558 3.2364199 -1.8580123 -18.664122 3.1214473 -1.8577132 -18.676046 3.0057614 -1.8570156 -18.692171 2.8908067 -1.8568163 -18.717432 2.7772272 -1.8576136 -18.754807 2.6652656 -1.8597066 -18.786583 2.5522802 -1.8613013 -18.825573 2.440028 -1.8636932 -18.852041 2.3259318 -1.8648893 -18.879793 2.2118342 -1.8662846 -18.909822 2.0978124 -1.8679789 -18.932234 1.9827802 -1.8689756 -18.961868 1.868332 -1.8707696 -18.987837 1.7533205 -1.8722646 -19.012117 1.6379751 -1.87366 -19.034704 1.5223186 -1.8749557 -19.06254 1.4068855 -1.8768493 -19.081734 1.2906314 -1.8779457 -19.096247 1.1739508 -1.8786434 -19.097128 1.056427 -1.8780453 -19.090332 0.93859488 -1.8767496 -19.023161 0.81832385 -1.8694739 -18.914469 0.69741184 -1.858112 -18.886566 0.58036572 -1.8549225 -19.018091 0.46761623 -1.8677796 -18.898235 0.34866452 -1.8555206 -19.006479 0.23400477 -1.8661849 -19.084171 0.11784724 -1.8738593 -19.138268 0.0007455732 -1.8792413 -19.20557 -0.11710127 -1.8860188 -19.237324 -0.2353459 -1.8893077 -19.251436 -0.35367286 -1.8909024 -19.262829 -0.47213295 -1.8922977 -19.280455 -0.59095997 -1.8943907 -19.240669 -0.70793229 -1.8908027 -19.241928 -0.82623398 -1.8914007 -19.236496 -0.94428468 -1.8914007 -19.129004 -1.0566957 -1.8812346 -19.002981 -1.1667247 -1.8692746 -18.960718 -1.2809533 -1.8657863 -0 -0 -0 -18.942579 -1.5134548 -1.8656867 -18.918066 -1.6283748 -1.8641917 -0 -0 -0 -19.087774 -1.8792334 -1.8834274 -19.030361 -1.9915516 -1.8788427 -18.104977 -2.0070338 -1.78685 -17.634754 -2.0644886 -1.7407041 -0 -0 -0 -16.537449 -2.1419892 -1.6325653 -15.568593 -2.1136405 -1.5359879 -14.674628 -2.0839863 -1.4468856 -13.940111 -2.0669551 -1.3738296 -13.330283 -2.0601521 -1.3133316 -12.947033 -2.0823069 -1.2757572 -12.285312 -2.0532303 -1.2098773 -11.820532 -2.050142 -1.1639307 -11.587386 -2.0830004 -1.1415056 -10.982573 -2.0438595 -1.081207 -10.567271 -2.0336914 -1.0401442 -10.576064 -2.1027639 -1.0423368 -10.610723 -2.177424 -1.0472206 -10.691586 -2.262481 -1.0568882 -10.301277 -2.2459695 -1.0183171 -10.261089 -2.3032477 -1.0156261 -10.296207 -2.3775885 -1.020709 -10.183648 -2.4174972 -1.0106428 -10.193756 -2.4860699 -1.013234 -9.7719622 -2.4467766 -0.9712742 -9.9870882 -2.5658927 -0.99509466 -9.7796869 -2.5766542 -0.97526091 -9.79251 -2.6443982 -0.97825092 -9.7933617 -2.7092113 -0.9800449 -9.7325172 -2.7567723 -0.97546023 -7.9465246 -2.3034263 -0.79097646 -7.9408264 -2.3546889 -0.79187346 -7.9186115 -2.4010577 -0.79107612 -7.8695164 -2.4389911 -0.7874881 -7.8999333 -2.5016568 -0.79227215 -7.8929548 -2.5528398 -0.79316914 -7.9328852 -2.6196384 -0.7990495 -9.2951241 -3.1330805 -0.94476277 -9.236208 -3.1764596 -0.94057673 -9.0165606 -3.1628931 -0.91934764 -9.056942 -3.2396131 -0.92572635 -9.1930008 -3.3520672 -0.94237077 -9.1685286 -3.4070246 -0.94197208 -8.968791 -3.3955526 -0.92283601 -9.009058 -3.4741564 -0.92941403 -7.1584754 -2.8108394 -0.73257154 -7.1457133 -2.8565574 -0.7330699 -9.1297455 -3.7151754 -0.94954681 -9.1122932 -3.7734094 -0.95014477 -9.0614605 -3.8176575 -0.94715476 -8.9665327 -3.8426056 -0.93938076 -8.92272 -3.8888025 -0.93718809 -8.992384 -3.9850123 -0.9474538 -9.0748081 -4.0883536 -0.95921451 -8.9807997 -4.1124663 -0.95163977 -8.9066849 -4.1448183 -0.94625777 -8.8792858 -4.1985397 -0.94605845 -5.4515996 -2.6183236 -0.56802118 -5.3942981 -2.6316478 -0.56343651 -5.3459554 -2.6487875 -0.55984849 -5.3429337 -2.6882508 -0.56134349 -8.7161942 -4.4535379 -0.94266975 -8.6330614 -4.478065 -0.93639076 -8.5974989 -4.5267792 -0.93549371 -8.5599079 -4.5742874 -0.9343974 -8.5220585 -4.6215053 -0.93330103 -8.5249224 -4.6909814 -0.93688905 -8.4655733 -4.7262211 -0.93340075 -13.950337 -7.9018335 -1.5681803 -13.823945 -7.9426637 -1.5592103 -13.632246 -7.9441619 -1.5426656 -13.495875 -7.9760141 -1.5324996 -6.9434175 -4.160574 -0.77303636 -3.5038366 -2.1281936 -0.37287304 -3.4898653 -2.1491308 -0.37277338 -3.4783006 -2.1715581 -0.37297273 -13.052356 -8.2643356 -1.5096759 -13.12533 -8.4238176 -1.5244266 -13.089242 -8.5145044 -1.5263202 -13.07164 -8.6176634 -1.5305063 -13.084702 -8.7419329 -1.5384796 -13.050591 -8.8354435 -1.5408716 -12.984645 -8.9074736 -1.5394763 -4.2507362 -2.9535754 -0.48071283 -12.867851 -9.0615606 -1.5386789 -12.796618 -9.129365 -1.5367852 -12.745199 -9.2112093 -1.5373832 -12.68844 -9.2892389 -1.5373832 -12.622413 -9.3603983 -1.536287 -12.544057 -9.4221334 -1.5336956 -5.470118 -4.160656 -0.6506452 -5.4673419 -4.2117553 -0.65353554 -12.306533 -9.6030693 -1.5258219 -12.253623 -9.6833353 -1.5266192 -12.196307 -9.7602053 -1.5269182 -12.134644 -9.8336039 -1.5267189 -12.073309 -9.9072447 -1.5266192 -2.8590169 -2.3744347 -0.33450121 -2.8565755 -2.4021828 -0.3360959 -2.8273916 -2.4074044 -0.33420223 -2.823868 -2.4344568 -0.33569723 -2.8321095 -2.4720287 -0.3387869 -2.8496854 -2.5183618 -0.34317225 -11.565606 -10.352799 -1.5170512 -3.600786 -3.2621355 -0.44891903 -3.5704381 -3.2747498 -0.44752368 -3.4802942 -3.2315819 -0.43795565 -3.4843192 -3.2753716 -0.44124466 -3.4886577 -3.3200173 -0.44463333 -3.4811161 -3.3537905 -0.44642735 -3.474715 -3.3889854 -0.4484207 -3.4743836 -3.4305208 -0.45131105 -3.4764867 -3.4749935 -0.45460007 -2.5558763 -2.5858934 -0.32642817 -10.677741 -10.941894 -1.4936295 -10.593829 -10.99001 -1.4912374 -10.510417 -11.038231 -1.488945 -3.507314 -3.7278686 -0.47493213 -3.4958866 -3.7617123 -0.47662649 -3.0563316 -3.3292642 -0.41493255 -7.6370649 -8.42484 -1.10124 -2.7862825 -3.1107492 -0.3805474 -2.7546201 -3.1136241 -0.37865373 -2.7132099 -3.1049862 -0.37526506 -9.6565304 -11.193316 -1.4429985 -9.5444345 -11.201609 -1.4363208 -9.4498987 -11.229506 -1.4323342 -7.3623905 -8.8582544 -1.1159909 -9.2608862 -11.283092 -1.4243608 -9.1125431 -11.2423 -1.4118028 -8.9967604 -11.239738 -1.4043278 -8.8875227 -11.243986 -1.3978493 -8.8104057 -11.28811 -1.3965536 -8.7306528 -11.328557 -1.3948593 -8.6326618 -11.344696 -1.390175 -8.5353994 -11.360855 -1.3855903 -8.4347086 -11.371454 -1.3804076 -8.3383245 -11.386867 -1.3759226 -8.2420702 -11.401525 -1.3714375 -8.0812254 -11.324714 -1.3557898 -8.0213261 -11.387916 -1.3574842 -7.7729731 -11.180373 -1.3261887 -7.734622 -11.272163 -1.3315707 -7.7328115 -11.419106 -1.3436304 -7.5879736 -11.354648 -1.3301754 -7.4852982 -11.35115 -1.3241954 -7.4274449 -11.415215 -1.326388 -7.340601 -11.434615 -1.3232983 -7.2144084 -11.391171 -1.3128333 -7.1385789 -11.425941 -1.3117369 -7.0725121 -11.476304 -1.3125343 -6.9993777 -11.515233 -1.3120359 -6.900456 -11.511023 -1.3065543 -6.8109636 -11.521453 -1.3028666 -6.7060723 -11.504568 -1.2960893 -6.5649619 -11.422991 -1.2819365 -6.4903345 -11.455266 -1.2810395 -6.3864517 -11.43493 -1.2741625 -6.3238444 -11.487848 -1.2757572 -6.2745857 -11.565793 -1.2802422 -6.1561289 -11.515445 -1.2701758 -6.0612464 -11.50722 -1.2649931 -5.858098 -11.288941 -1.2361894 -5.824944 -11.395555 -1.2441627 -1.2312765 -2.4436722 -0.23632914 -1.200793 -2.4199781 -0.23284079 -1.1313701 -2.3155243 -0.22038241 -1.1102463 -2.3080728 -0.21878773 -1.0905331 -2.3031483 -0.21749206 -1.0969548 -2.3539987 -0.22237575 -1.0837333 -2.363399 -0.22267476 -1.1248051 -2.4933801 -0.23622948 -5.080235 -11.458632 -1.2177509 -5.0448208 -11.569854 -1.2265216 -4.9435496 -11.53017 -1.2188473 -4.8800502 -11.577708 -1.2207409 -4.8020649 -11.590887 -1.2189469 -4.7199759 -11.593407 -1.2160566 -4.6384068 -11.596281 -1.2132659 -4.5700765 -11.631932 -1.2140633 -4.4989762 -11.660684 -1.2141629 -1.2030679 -3.1736758 -0.30220908 -4.3316231 -11.65066 -1.2072859 -4.2303934 -11.595692 -1.1986148 -4.1682138 -11.646727 -1.2013059 -1.1874127 -3.380636 -0.32114583 -1.1498163 -3.3389311 -0.31596315 -1.1172276 -3.3100941 -0.31217578 -1.0928389 -3.3046045 -0.31088012 -3.7823436 -11.686741 -1.1926348 -1.0431895 -3.2893095 -0.30789012 -1.0082543 -3.2481289 -0.30290675 -0.98455054 -3.2418759 -0.3016111 -0.96379131 -3.2449942 -0.30131209 -0.9469105 -3.261359 -0.30240843 -0.94993699 -3.3484814 -0.31088012 -3.2478571 -11.732882 -1.1816714 -0.9113692 -3.3694925 -0.3118768 -0.89346653 -3.3856049 -0.31297314 -3.0365438 -11.810915 -1.1837645 -2.9647415 -11.83222 -1.1840634 -2.8897264 -11.840522 -1.1830667 -2.8149509 -11.849317 -1.1821698 -1.8963628 -8.2045918 -0.80572718 -0.71810889 -3.1929016 -0.2900497 -2.5630784 -11.746493 -1.166522 -1.7779912 -8.3938589 -0.82167393 -1.7214519 -8.3802433 -0.81918222 -1.6678642 -8.3799133 -0.81808591 -1.6250675 -8.4349346 -0.82267058 -2.1951771 -11.78535 -1.1630337 -2.1355016 -11.869108 -1.1702098 -1.4227581 -8.1938152 -0.79526216 -1.981485 -11.84535 -1.1652263 -1.926151 -11.965348 -1.1761898 -1.3321977 -8.6099844 -0.83492965 -1.7742095 -11.954619 -1.172801 -1.7060016 -12.00173 -1.1764888 -1.6271065 -11.973519 -1.1726017 -1.5543748 -11.989199 -1.1731998 -1.4682379 -11.896793 -1.1629341 -1.3924357 -11.88186 -1.160542 -1.3199424 -11.894135 -1.1609406 -1.247558 -11.907948 -1.1615387 -1.1763214 -11.934194 -1.1634324 -1.1051753 -11.963976 -1.1657248 -1.0337932 -11.994324 -1.1681167 -0.95669037 -11.9568 -1.1637313 -0.89047813 -12.059692 -1.1734987 -0.8188796 -12.100669 -1.1770867 -0.74510378 -12.113411 -1.1778841 -0.21856233 -3.9342523 -0.35692632 -0.58766204 -11.943748 -1.1600437 -0.51564658 -11.976952 -1.1630337 -0.44533208 -12.066399 -1.1717048 -0.37156016 -12.077855 -1.1726017 -0.29746923 -12.080902 -1.1727014 -0.22436105 -12.138212 -1.1782827 -0.15042664 -12.184133 -1.1827677 -0.075377449 -12.138062 -1.1780834 -0.00089607463 -12.239787 -1.1882495 --0.073948532 -12.197772 -1.1840634 --0.14799617 -12.132418 -1.1775851 --0.21931924 -11.962156 -1.1606417 --0.29777277 -12.166492 -1.1812727 --0.37214446 -12.155485 -1.1803758 --0.44723514 -12.166894 -1.181771 --0.52342021 -12.199708 -1.1853591 --0.60119712 -12.255897 -1.1913391 --0.67808974 -12.282775 -1.1944288 --0.75087911 -12.236671 -1.1902428 --0.82353109 -12.196095 -1.1866548 --0.90977174 -12.345614 -1.2022028 --0.97360981 -12.191021 -1.1872528 --1.0645332 -12.372183 -1.2060899 --1.1441778 -12.406041 -1.2101762 --1.2209612 -12.405719 -1.2108738 --1.2945713 -12.374243 -1.2084819 --1.3747519 -12.404635 -1.2123688 --1.4570906 -12.449333 -1.2177509 --1.5330853 -12.437196 -1.2174519 --1.614357 -12.466039 -1.221339 --1.6967098 -12.499281 -1.2257243 --1.7768714 -12.513263 -1.2282159 --1.854056 -12.505077 -1.2285149 --1.9345523 -12.518049 -1.2310066 --2.002156 -12.448965 -1.2252259 --2.0862172 -12.482572 -1.2299103 --2.166172 -12.489143 -1.2319037 --2.2452292 -12.489326 -1.233299 --2.327831 -12.507596 -1.236588 --2.4069784 -12.505779 -1.2378837 --2.4782312 -12.463449 -1.235093 --2.548655 -12.418769 -1.232103 --2.6433563 -12.490506 -1.241073 --2.7515452 -12.618903 -1.2559234 --2.8330643 -12.620229 -1.257817 --2.9124629 -12.611333 -1.2587141 --2.9741547 -12.527395 -1.2519367 --3.0556827 -12.528243 -1.2539301 --3.1332223 -12.512154 -1.2542291 --3.2099366 -12.492693 -1.2542291 --3.2964208 -12.510286 -1.2581161 --3.3837607 -12.529208 -1.2622024 --3.4650867 -12.524512 -1.2638968 --3.5388863 -12.492485 -1.2628005 --3.6157494 -12.471491 -1.2629001 --3.7159779 -12.5292 -1.2712722 --3.7927856 -12.506164 -1.2712722 --3.8361499 -12.375263 -1.2600098 --3.9135134 -12.356235 -1.2605081 --3.9852738 -12.319682 -1.2592124 --4.0557966 -12.279881 -1.2576177 --4.1059518 -12.180277 -1.2497441 --4.1666918 -12.114396 -1.2454584 --4.1925125 -11.950585 -1.2308073 --4.3277788 -12.097952 -1.2492458 --4.3647628 -11.969279 -1.238382 --4.4838877 -12.065384 -1.251538 --4.5976586 -12.142793 -1.2628005 --4.66993 -12.108784 -1.2622024 --4.6888409 -11.939131 -1.247053 --4.5203643 -11.305922 -1.1818708 --4.9651766 -12.200484 -1.2816375 --5.0654573 -12.23138 -1.2883152 --5.1377072 -12.19365 -1.2876176 --5.2092929 -12.15458 -1.2868202 --1.5450281 -3.5467663 -0.34975028 --1.5631324 -3.5290325 -0.34885329 --1.5823038 -3.513932 -0.34825528 --1.6021775 -3.5005383 -0.34785661 --1.6202669 -3.4834251 -0.34705928 --1.6309742 -3.4509308 -0.3445676 --1.6486703 -3.4336836 -0.34377027 --1.6592332 -3.4020424 -0.34137824 --1.6721218 -3.3757505 -0.33958423 --1.6941457 -3.3680933 -0.33988324 --1.7075346 -3.3434587 -0.33828858 --1.7298505 -3.3364513 -0.33868724 --1.7539995 -3.3328176 -0.33948457 --1.779107 -3.3307676 -0.34048125 --1.805204 -3.3302839 -0.34167725 --1.8304023 -3.3278618 -0.34267393 --1.8517574 -3.3183055 -0.34287325 --1.8691406 -3.3016863 -0.34227526 --1.8690377 -3.2547839 -0.33818889 --1.9050071 -3.2707636 -0.34137824 --7.0848994 -11.988313 -1.3570855 --7.2565446 -12.108477 -1.3762215 --7.3891015 -12.159806 -1.387484 --7.511075 -12.191325 -1.3965536 --7.6384568 -12.229398 -1.4065204 --7.7239981 -12.199111 -1.4085137 --7.8110676 -12.170747 -1.4108061 --7.9181566 -12.172632 -1.4167861 --7.9932451 -12.124649 -1.4168857 --8.1111631 -12.140734 -1.4247594 --8.1046104 -11.971269 -1.4103078 --8.2088737 -11.96644 -1.4157894 --8.4866085 -12.209967 -1.4516696 --8.5206871 -12.099906 -1.4445932 --7.911068 -11.089201 -1.326687 --8.8719616 -12.275869 -1.479377 --9.0799694 -12.402637 -1.5019017 --8.4991312 -11.461183 -1.3914707 --8.9278822 -11.886143 -1.4512709 --9.5874939 -12.602411 -1.5483466 --9.6452045 -12.518126 -1.5451573 --9.7218332 -12.458708 -1.5451573 --9.8172216 -12.423021 -1.548247 --9.901968 -12.373425 -1.5496423 --9.9946194 -12.333306 -1.5523334 --10.138283 -12.354816 -1.5630974 --10.281947 -12.37426 -1.5737617 --10.403166 -12.364993 -1.5808381 --10.534336 -12.366064 -1.5894095 --10.614564 -12.306468 -1.5901071 --10.723912 -12.280076 -1.5952898 --10.751601 -12.160377 -1.5881138 --10.719823 -11.975563 -1.572167 --10.380803 -11.45468 -1.5106725 --10.489911 -11.433291 -1.5164531 --10.566639 -11.376001 -1.5174499 --10.632152 -11.306602 -1.5168518 --10.709561 -11.2498 -1.5180478 --10.812914 -11.219695 -1.5230312 --10.864181 -11.135333 -1.5205395 --10.909925 -11.045811 -1.5173502 --10.962719 -10.963885 -1.5152571 --10.99085 -10.857955 -1.5097755 --11.007415 -10.74167 -1.5027988 --11.056639 -10.658046 -1.5005064 --11.116062 -10.584515 -1.4997091 --11.191671 -10.526333 -1.5012041 --11.280107 -10.479812 -1.5044931 --11.361059 -10.425874 -1.5067855 --11.441038 -10.370667 -1.5089781 --11.520765 -10.314872 -1.5111709 --10.019201 -8.8605337 -1.3019696 --11.709432 -10.227696 -1.5195428 --11.768953 -10.153057 -1.5191442 --11.83103 -10.080653 -1.5191442 --11.908649 -10.021322 -1.5212371 --10.303118 -8.5630178 -1.3041623 --10.325468 -8.4750204 -1.3002752 --10.396602 -8.4271669 -1.3027669 --12.255098 -9.8093634 -1.5345926 --12.318959 -9.7370672 -1.5350909 --12.391025 -9.6710901 -1.5366856 --12.458014 -9.6009521 -1.5376823 --12.527776 -9.5327654 -1.5390776 --10.739515 -8.0686674 -1.3077503 --12.672585 -9.3996496 -1.5426656 --12.753305 -9.3387613 -1.5455559 --12.826495 -9.2719898 -1.5475492 --12.897725 -9.203516 -1.5493433 --12.969412 -9.1350889 -1.551237 --13.029305 -9.0581779 -1.5517353 --13.10187 -8.9898825 -1.5538284 --13.172439 -8.9199209 -1.555722 --13.242641 -8.849431 -1.5576156 --13.313306 -8.7789631 -1.5596091 --13.39528 -8.7155571 -1.5629977 --13.481163 -8.6541624 -1.5668848 --13.555867 -8.5851202 -1.569476 --13.615885 -8.506526 -1.5703731 --13.678836 -8.4296064 -1.5716687 --13.75071 -8.3579178 -1.5740608 --13.838432 -8.2953835 -1.5783464 --13.917339 -8.2270231 -1.5816355 --14.003664 -8.1625156 -1.5858215 --14.071602 -8.0868473 -1.5879145 --14.135675 -8.0086908 -1.5896088 --6.7323408 -3.760586 -0.73466456 --6.7256503 -3.7028944 -0.73127586 --14.375155 -7.798378 -1.6003728 --14.436776 -7.7175312 -1.6019676 --14.483858 -7.6288037 -1.6019676 --14.562191 -7.5562849 -1.6055555 --7.3588257 -3.7619948 -0.79007947 --6.9773722 -3.5132253 -0.74473095 --6.9479814 -3.4451592 -0.73904991 --6.9600477 -3.3980982 -0.73805326 --6.9861484 -3.3579137 -0.73865122 --7.0345049 -3.3281717 -0.74174094 --6.7381597 -3.1375687 -0.70675778 --15.122584 -6.9275331 -1.6283793 --15.18295 -6.8427877 -1.6303726 --15.254669 -6.762804 -1.6336616 --15.317769 -6.6786184 -1.6360537 --7.3525243 -3.1528463 -0.76356804 --7.3891535 -3.1150141 -0.76546168 --15.476716 -6.4115291 -1.6402397 --15.53604 -6.3246975 -1.6424323 --15.601348 -6.239965 -1.6453227 --15.656013 -6.1506672 -1.6471167 --15.715738 -6.0630817 -1.6495087 --15.777769 -5.9760523 -1.6521997 --15.847717 -5.8916087 -1.6557877 --15.916286 -5.806191 -1.6592761 --15.969414 -5.7147899 -1.6611698 --16.015446 -5.6206489 -1.6623658 --16.0581 -5.5251875 -1.6632627 --16.0917 -5.4265528 -1.6632627 --16.15587 -5.3380132 -1.6665518 --16.233763 -5.2534842 -1.6713358 --16.330194 -5.1742096 -1.6781132 --12.328172 -3.8233936 -1.2551261 --16.390556 -4.9728456 -1.6779138 --13.303297 -3.9474335 -1.3522018 --16.265905 -4.7178512 -1.6586781 --16.502289 -4.6768165 -1.6803058 --16.545059 -4.5794525 -1.6818008 --16.579571 -4.4796643 -1.6824986 --12.766736 -3.3658292 -1.2847272 --12.778475 -3.2852015 -1.2838302 --16.489342 -4.1311817 -1.6649572 --16.498913 -4.026154 -1.6633625 --16.502975 -3.9200153 -1.6612694 --16.515085 -3.8159938 -1.6600734 --16.553722 -3.7180753 -1.6616681 --16.568447 -3.6147373 -1.6608708 --13.316599 -2.8200309 -1.3256904 --16.540403 -3.3965387 -1.6535951 --16.533607 -3.2895501 -1.6508044 --16.653143 -3.2072265 -1.6609704 --16.673487 -3.1051667 -1.6610701 --16.699081 -3.0040343 -1.6617677 --16.74465 -2.9062765 -1.6645584 --16.781796 -2.8067601 -1.6665518 --16.982409 -2.7332907 -1.6851895 --17.083427 -2.6421103 -1.6937609 --17.242033 -2.5584054 -1.7082126 --17.30962 -2.4599788 -1.713495 --17.405237 -2.3647015 -1.7216676 --17.525003 -2.2715392 -1.7323321 --17.637365 -2.1761429 -1.7422987 --17.435932 -2.0427704 -1.7206711 --17.78043 -1.97259 -1.7541592 --18.42753 -1.9299536 -1.8181454 --19.56789 -1.9280066 -1.9317659 --19.710138 -1.8199728 -1.944922 --19.747702 -1.7013037 -1.947613 --19.798435 -1.583352 -1.9516994 --19.800831 -1.461329 -1.9510016 --19.779642 -1.3377932 -1.9480116 --19.789465 -1.2165245 -1.948211 --19.802517 -1.0954051 -1.948809 --19.792965 -0.97309768 -1.9472142 --19.787628 -0.85116225 -1.946118 --19.766624 -0.72877997 -1.9435266 --19.786638 -0.60796851 -1.9451213 --19.750206 -0.48557267 -1.9411346 --19.771717 -0.36472613 -1.9430283 --19.756668 -0.24319507 -1.9413339 --19.808533 -0.12227612 -1.946417 --19.784035 -0.00073148467 -1.9439253 --19.774712 0.12060595 -1.9430283 --19.7736 0.24193902 -1.9430283 --19.739908 0.36267623 -1.9398389 --19.733332 0.48369342 -1.9394403 --19.715075 0.60430759 -1.9379452 --19.699062 0.72482592 -1.9367492 --19.682316 0.8451705 -1.9355532 --19.662846 0.96523917 -1.934158 --19.641651 1.0850458 -1.932663 --19.616747 1.2044456 -1.9308689 --19.594095 1.3237821 -1.9293739 --17.631426 -0.448975 -1.9434843 --17.612984 -0.34037846 -1.9411398 --17.58493 -0.23190701 -1.9377905 --17.517456 -0.12351847 -1.9300872 --17.589434 -0.016098185 -1.9381254 --17.57827 0.091772035 -1.9368974 --17.560484 0.19943708 -1.9349995 --17.547007 0.30697411 -1.9336598 --17.540819 0.41454092 -1.9332131 --17.536951 0.52213198 -1.9331015 --17.530437 0.62961996 -1.9327666 --17.515324 0.73671371 -1.9315386 --17.481688 0.84278482 -1.9283009 --17.474203 0.94992673 -1.9280776 --17.453167 1.0562284 -1.9264029 --17.419586 1.1615146 -1.9233886 --17.382397 1.2662121 -1.9200394 --17.376282 1.3730012 -1.9202627 --17.359608 1.4789195 -1.9193695 --17.344269 1.5848658 -1.9186996 --17.325317 1.6903901 -1.9176949 --17.308687 1.7960492 -1.917025 --17.295366 1.9020023 -1.9168017 --17.275473 2.0071716 -1.9159086 --17.26086 2.1128926 -1.9156853 --17.241657 2.2180028 -1.9150155 --17.229692 2.3240197 -1.9152387 --17.21314 2.4294176 -1.9150155 --17.192993 2.534265 -1.9144572 --17.173191 2.6391079 -1.9140106 --17.149805 2.7433324 -1.9132292 --17.119905 2.8463914 -1.9117779 --17.109953 2.9527354 -1.912671 --17.095427 3.0583644 -1.9131175 --17.063635 3.1608498 -1.9116662 --17.028303 3.2624993 -1.9098799 --16.995293 3.364413 -1.9084285 --16.964592 3.4666417 -1.9073122 --16.896328 3.5608337 -1.9019533 --16.872217 3.6640189 -1.9017301 --16.800928 3.7566347 -1.8961478 --16.852133 3.8768058 -1.9047444 --16.747761 3.9611528 -1.895478 --16.659407 4.0483546 -1.8881097 --16.739351 4.1767192 -1.9002787 --16.690304 4.2734361 -1.8975992 --16.588797 4.3560805 -1.8888911 --16.616453 4.4725065 -1.8952547 --16.565704 4.5680394 -1.8925754 --16.550753 4.6733789 -1.8941383 --16.498854 4.7682233 -1.8914589 --16.483582 4.8735948 -1.8931335 --16.435293 4.9691801 -1.8910123 --16.373161 5.0602493 -1.8873281 --16.376867 5.1716895 -1.8914589 --16.345772 5.2723837 -1.8915706 --16.327271 5.3772426 -1.8932452 --16.302448 5.4801731 -1.89425 --16.285435 5.5859032 -1.8962595 --16.249916 5.6853952 -1.8961478 --16.233444 5.7916741 -1.8983808 --16.231222 5.903399 -1.9023999 --16.232899 6.0170407 -1.9069772 --16.226353 6.1281161 -1.9106615 --16.203285 6.2332721 -1.9124477 --16.183239 6.3398256 -1.9146805 --16.163418 6.4467354 -1.917025 --16.150259 6.5566306 -1.9202627 --16.13636 6.6666069 -1.9235003 --16.113474 6.7731934 -1.9257331 --16.103592 6.8856096 -1.9296407 --16.071974 6.9890451 -1.9309803 --16.060598 7.1015944 -1.9348878 --16.008564 7.1963396 -1.9338831 --15.998454 7.3101244 -1.9381254 --15.962312 7.4123363 -1.9392419 --15.958771 7.5300698 -1.944489 --15.944527 7.6433129 -1.9485081 --15.940214 7.7618842 -1.953867 --15.9395 7.8828926 -1.959784 --15.926353 7.9983859 -1.9642497 --15.907077 8.1113052 -1.9680456 --15.883483 8.2224617 -1.9713949 --15.855604 8.3317842 -1.9742975 --15.819966 8.4373331 -1.9763072 --15.784503 8.543231 -1.9784284 --15.759659 8.6552286 -1.9820008 --15.726221 8.7628899 -1.9845687 --15.706761 8.8787794 -1.9890343 --15.654572 8.97647 -1.9893693 --15.637856 9.0948372 -1.9943932 --15.607435 9.2057638 -1.9977424 --15.567713 9.3115578 -1.9999753 --15.545973 9.4285469 -2.0046642 --15.534387 9.5523863 -2.0108047 --15.500781 9.6632948 -2.014154 --15.461358 9.7709646 -2.0168333 --15.42287 9.8795862 -2.0197361 --15.366127 9.9767389 -2.0202942 --15.307942 10.073021 -2.0207407 --15.258249 10.175029 -2.0224154 --15.192236 10.266234 -2.0219688 --15.148636 10.372733 -2.0246482 --15.100219 10.476251 -2.0267694 --15.040531 10.572135 -2.0274394 --15.007758 10.687281 -2.0319049 --14.970914 10.800095 -2.0359242 --14.921213 10.904063 -2.0382686 --14.897159 11.02734 -2.0442972 --14.843527 11.12927 -2.0463068 --14.789206 11.230955 -2.0483165 --14.760189 11.352386 -2.0540102 --14.707502 11.456174 -2.0564663 --14.656437 11.561587 -2.0592575 --14.589879 11.655022 -2.0599272 --14.559813 11.778073 -2.0659559 --14.517251 11.891747 -2.0703101 --14.476902 12.007879 -2.0751107 --14.428063 12.117572 -2.0787947 --14.367066 12.21746 -2.0808043 --14.31367 12.324188 -2.0840421 --14.267745 12.437902 -2.0885077 --14.221706 12.552175 -2.0930851 --14.154795 12.648471 -2.0946481 --14.104185 12.759751 -2.0987787 --14.042482 12.86149 -2.1013465 --13.9582 12.942681 -2.1005652 --13.865481 13.015841 -2.0985556 --13.724126 13.042486 -2.089066 --13.549309 13.035507 -2.0743291 --13.40215 13.053225 -2.0638347 --13.222028 13.036838 -2.0480931 --13.034878 13.011013 -2.0311236 --12.900274 13.035655 -2.0224154 --12.75683 13.049899 -2.0122559 --12.595062 13.043575 -1.9990822 --12.430425 13.032166 -1.9853501 --12.301842 13.056839 -1.9774235 --12.170041 13.076791 -1.9689387 --12.050566 13.108787 -1.9624635 --11.892411 13.09714 -1.949513 --11.744145 13.094407 -1.9381254 --11.598999 13.093326 -1.9271845 --11.454965 13.091706 -1.9163551 --11.297094 13.072274 -1.9030697 --11.170865 13.087681 -1.8951432 --11.033984 13.089117 -1.8853186 --10.908319 13.102351 -1.8773919 --10.791112 13.124516 -1.8709167 --10.677804 13.150368 -1.8651114 --10.604374 13.224941 -1.866451 --10.547088 13.320144 -1.870805 --10.470667 13.391654 -1.8718098 --10.37919 13.44385 -1.8701352 --10.269997 13.472509 -1.8652229 --10.146501 13.48128 -1.8576313 --10.028027 13.495426 -1.8509327 --9.9191675 13.521448 -1.8460205 --9.8278542 13.570788 -1.8444575 --9.7311077 13.612243 -1.8418897 --9.6210442 13.634346 -1.8367542 --9.5133495 13.658875 -1.8320652 --9.415287 13.696518 -1.8292741 --9.3232584 13.742518 -1.8277111 --9.2183046 13.768913 -1.8235804 --9.1194038 13.803659 -1.8206776 --9.030736 13.853527 -1.8198961 --8.9364233 13.89447 -1.8179983 --8.836092 13.925547 -1.8148723 --8.7314978 13.949179 -1.8108531 --8.629035 13.975434 -1.8072805 --8.5224447 13.994168 -1.8028148 --8.4072514 13.997641 -1.7964512 --8.3100634 14.030152 -1.7939951 --8.2158003 14.067148 -1.7922088 --8.1273479 14.11385 -1.7917622 --8.051878 14.183329 -1.79433 --7.9884801 14.27496 -1.7998005 --7.8964205 14.315876 -1.7987957 --7.7875471 14.325643 -1.7938834 --7.7117009 14.395931 -1.7967862 --7.6501298 14.493951 -1.8032614 --7.5853519 14.587346 -1.8091785 --7.5124664 14.66634 -1.8133093 --7.4268107 14.721031 -1.8144257 --7.3367863 14.767214 -1.8145373 --7.2486587 14.817309 -1.8152071 --7.1606236 14.867775 -1.8159887 --7.0730934 14.919514 -1.8169935 --6.9885592 14.977942 -1.8188914 --6.897769 15.02325 -1.8192263 --6.7837744 15.017293 -1.8133093 --6.6571999 14.981444 -1.8038197 --6.5659461 15.023831 -1.8040429 --6.4752073 15.067489 -1.8044895 --6.3865008 15.11609 -1.8056059 --6.2951546 15.158663 -1.8060524 --6.1648483 15.105917 -1.795 --6.05688 15.105643 -1.7904226 --5.9575238 15.12588 -1.788413 --5.8635254 15.159369 -1.7880781 --5.7739272 15.204352 -1.7891945 --5.6867747 15.256255 -1.7912041 --5.961421 16.297855 -1.9116662 --5.8478808 16.296713 -1.9072005 --5.7444768 16.322914 -1.9060841 --5.6419439 16.35128 -1.9053025 --5.5424633 16.388414 -1.9056375 --5.4436774 16.427773 -1.9063073 --5.3363328 16.441017 -1.9039629 --5.2272248 16.44788 -1.9009485 --5.1173487 16.451176 -1.8975992 --5.0128374 16.470858 -1.8962595 --4.9091282 16.492735 -1.8952547 --4.8053389 16.513958 -1.89425 --4.7009311 16.532618 -1.8930219 --4.5967407 16.551577 -1.8919055 --4.493535 16.573715 -1.8912356 --4.392519 16.603857 -1.8915706 --4.294529 16.645891 -1.8933568 --3.635113 14.456291 -1.636691 --3.5451603 14.473497 -1.6361328 --3.4788768 14.589708 -1.6470737 --3.8847251 16.746271 -1.8933568 --3.7829919 16.774639 -1.8939151 --3.0842521 14.078546 -1.5812048 --3.5768564 16.819799 -1.8939151 --3.4707742 16.827805 -1.8923521 --3.36765 16.849758 -1.8924637 --3.2626882 16.862299 -1.8915706 --3.1602585 16.887863 -1.8922404 --3.0576379 16.912804 -1.8929102 --2.9553425 16.940056 -1.8939151 --2.852828 16.96669 -1.8949199 --2.7542262 17.018211 -1.8988273 --2.6448641 17.003368 -1.8952547 --2.5397499 17.014362 -1.8946966 --2.4334748 17.016836 -1.8932452 --2.3294196 17.034401 -1.8935801 --2.2207389 17.016842 -1.8900076 --2.1202059 17.061705 -1.8935801 --2.0133801 17.056629 -1.8915706 --1.910452 17.084463 -1.8933568 --1.8077801 17.116617 -1.8957013 --1.7005571 17.105631 -1.8932452 --1.5972277 17.133554 -1.8952547 --1.4899995 17.119272 -1.8925754 --1.3842888 17.120169 -1.8916821 --1.2796595 17.134285 -1.8923521 --1.1742296 17.13785 -1.8919055 --1.0681854 17.130846 -1.8903425 --0.96310824 17.138069 -1.8904542 --0.85842985 17.153582 -1.8915706 --0.75289965 17.152569 -1.8909007 --0.64790183 17.163818 -1.8916821 --0.54260588 17.168463 -1.8917938 --0.43737856 17.176437 -1.8923521 --0.33205459 17.182772 -1.8927987 --0.22668245 17.189453 -1.8933568 --0.12121272 17.191515 -1.8934685 --0.015730878 17.197897 -1.8941383 -0.089819558 17.202639 -1.8946966 -0.19537127 17.201763 -1.8946966 -0.300933 17.201235 -1.8948082 -0.40635484 17.194098 -1.89425 -0.51167089 17.18532 -1.8935801 -0.61703712 17.179871 -1.8933568 -0.72264791 17.180725 -1.8939151 -0.82829237 17.180931 -1.8944733 -0.93418229 17.184456 -1.895478 -1.0397265 17.180384 -1.8957013 -1.1455865 17.180622 -1.8964828 -1.2506945 17.169306 -1.8960363 -1.3559415 17.160316 -1.8959246 -1.4612942 17.152664 -1.8960363 -1.566875 17.147333 -1.8964828 -1.6720595 17.137396 -1.8964828 -1.7767711 17.12286 -1.8960363 -1.8818015 17.111637 -1.8960363 -1.9873344 17.104704 -1.8965945 -2.0924909 17.09416 -1.8968178 -2.1970859 17.079027 -1.8965945 -2.3010426 17.059317 -1.8959246 -2.4042845 17.035036 -1.8948082 -2.5076053 17.012098 -1.8939151 -2.6129987 17.003267 -1.8946966 -2.7193198 16.99967 -1.8961478 -2.826184 16.99835 -1.8979342 -2.9326274 16.99342 -1.8993856 -3.0371919 16.97706 -1.8996089 -2.5914898 13.989586 -1.5604392 -3.2460458 16.942415 -1.9000554 -3.3480117 16.912432 -1.898939 -3.4521194 16.893517 -1.8991623 -3.051851 14.480901 -1.6246337 -3.1387489 14.453162 -1.6236289 -3.2379968 14.481152 -1.6290994 -3.4446352 14.973325 -1.6881582 -3.5373597 14.955775 -1.6886047 -3.6734061 15.116297 -1.7097051 -4.1721487 16.721031 -1.8981575 -3.4334719 13.409425 -1.517122 -3.5068529 13.354465 -1.5132146 -4.4748311 16.62509 -1.8962595 -4.581511 16.614563 -1.8982691 -4.6841798 16.589008 -1.898604 -4.782845 16.549452 -1.8973759 -4.8831739 16.515982 -1.8969294 -4.9881606 16.498075 -1.8983808 -4.5382748 14.684098 -1.6887164 -4.6585116 14.751686 -1.6999923 -4.6839652 14.521374 -1.6762124 -4.7450037 14.407411 -1.6661646 -4.8326831 14.376142 -1.6659414 -4.9385343 14.397918 -1.6720817 -5.0349894 14.390795 -1.6748728 -5.413693 15.173924 -1.7720016 -5.5134892 15.1591 -1.7742344 -5.6043277 15.119393 -1.7735646 -5.6752262 15.027081 -1.7666427 -5.7501984 14.947456 -1.7612839 -5.8276701 14.875806 -1.7569299 -5.8776064 14.736387 -1.7444259 -5.9279213 14.601522 -1.7324802 -5.9760451 14.464763 -1.7203112 -6.0211749 14.324301 -1.7076956 -6.0644174 14.18292 -1.6949683 -6.1461763 14.133595 -1.693517 -6.2183161 14.062898 -1.6894978 -6.3224139 14.06436 -1.6944101 -6.4205685 14.051514 -1.6976478 -6.5254993 14.052412 -1.7026716 -6.6306825 14.052551 -1.7076956 -6.7322459 14.043862 -1.7117147 -6.8274264 14.021052 -1.7140592 -6.9243422 14.001165 -1.7168503 -7.0649757 14.067646 -1.7305822 -7.1547713 14.031114 -1.7314754 -7.2558055 14.016072 -1.7351596 -7.3527637 13.9924 -1.737839 -7.446898 13.962804 -1.7398486 -7.5556092 13.959672 -1.745319 -7.6569076 13.941793 -1.7490033 -7.7573028 13.92146 -1.7524642 -8.2391605 14.575201 -1.8430061 -8.7733116 15.300254 -1.9434843 -8.8685255 15.248711 -1.9438192 -8.9679813 15.204279 -1.945159 -9.0667152 15.158347 -1.9463869 -9.1631613 15.108377 -1.9471685 -9.2582951 15.056102 -1.9477267 -9.3526058 15.002383 -1.9481733 -9.4471369 14.948915 -1.9487314 -9.5483322 14.905729 -1.9507411 -9.6482706 14.860197 -1.9525273 -9.7540178 14.823132 -1.9555416 -9.8613262 14.787807 -1.9588909 -9.9607792 14.740194 -1.9606771 -10.058334 14.689458 -1.9621285 -10.1766 14.66829 -1.9677106 -10.281269 14.626709 -1.9706134 -10.384658 14.582777 -1.9732928 -10.490219 14.541349 -1.9764187 -10.59449 14.49757 -1.9793215 -10.695662 14.449064 -1.981666 -10.812732 14.421329 -1.9870248 -10.929863 14.392701 -1.9923836 -11.037961 14.35136 -1.9960679 -11.147796 14.311586 -2.000087 -11.258787 14.272564 -2.0043294 -11.358554 14.218741 -2.0065622 -11.445585 14.148779 -2.0065622 -11.488105 14.02447 -1.9987472 -11.488296 13.850456 -1.9836755 -11.481035 13.670123 -1.967599 -11.485516 13.506303 -1.953867 -11.502038 13.35876 -1.9424795 -11.54461 13.242988 -1.9357809 -11.576989 13.116767 -1.9275194 -11.655268 13.043262 -1.9271845 -11.770413 13.010559 -1.9331015 -11.899691 12.992323 -1.9413631 -12.052834 12.998492 -1.9535321 -12.189494 12.985155 -1.9629101 -12.34561 12.990797 -1.975414 -12.495361 12.987848 -1.9868015 -12.658019 12.996363 -2.0001986 -12.8359 13.018228 -2.0159402 -12.990654 13.014481 -2.0278859 -13.135247 12.998837 -2.038157 -13.282267 12.98399 -2.048763 -13.457476 12.994748 -2.0637231 -13.517542 12.893411 -2.0607088 -13.644135 12.855203 -2.0680771 -13.724939 12.773273 -2.0684121 -13.79574 12.682093 -2.0672956 -13.819591 12.548437 -2.0591457 -13.864516 12.434874 -2.0543451 -13.915263 12.327164 -2.0505493 -13.954742 12.210138 -2.0451906 -14.006091 12.10414 -2.0417295 -14.052887 11.994746 -2.0377104 -14.104187 11.889719 -2.0344727 -14.15702 11.786421 -2.0315702 -14.199138 11.674719 -2.027216 -14.242733 11.564823 -2.0231969 -14.297145 11.464158 -2.0208523 -14.350858 11.363262 -2.018508 -14.399175 11.258466 -2.0154936 -14.454612 11.159577 -2.0135956 -14.503057 11.055614 -2.0108047 -14.544418 10.946696 -2.0071204 -14.586585 10.838873 -2.0036595 -14.631183 10.733295 -2.0006452 -14.658134 10.61534 -1.9952863 -14.722183 10.524621 -1.9951746 -14.762938 10.417474 -1.991937 -14.800487 10.308518 -1.9883645 -14.843806 10.204 -1.9856851 -14.878178 10.093758 -1.9818892 -14.909279 9.9818201 -1.9777585 -14.949517 9.8764563 -1.9749674 -14.99402 9.774231 -1.9728462 -15.049532 9.6793566 -1.972288 -15.096054 9.578846 -1.9706134 -15.141067 9.477602 -1.9688271 -15.181179 9.3735552 -1.9664826 -15.219736 9.268857 -1.9640265 -15.250766 9.1599455 -1.9606771 -15.279323 9.0499897 -1.9571047 -15.313112 8.9435368 -1.9543135 -15.338421 8.8325481 -1.9505178 -15.373316 8.7274733 -1.9480616 -15.4101 8.6237583 -1.9459404 -15.450542 8.5223217 -1.9443774 -15.472859 8.4112215 -1.9405816 -15.510163 8.3086147 -1.9387953 -15.529214 8.1965895 -1.9347762 -15.572162 8.0974817 -1.9338831 -15.612709 7.9972501 -1.9327666 -15.648177 7.894587 -1.9310919 -15.680304 7.7904639 -1.9290824 -15.678714 7.6700854 -1.922942 -15.679821 7.5517459 -1.9172482 -15.686353 7.4366622 -1.912336 -15.696568 7.3238845 -1.907982 -15.713215 7.2145796 -1.9045211 -15.749036 7.114347 -1.9035163 -15.766965 7.006279 -1.9003903 -15.795089 6.9030352 -1.898604 -15.812496 6.7953939 -1.8955897 -15.832841 6.6893468 -1.8930219 -15.842384 6.579113 -1.8892261 -15.869574 6.4765248 -1.8876631 -15.889645 6.3712621 -1.8853186 -15.899776 6.2623549 -1.8818576 -15.900829 6.1503372 -1.8773919 -15.903894 6.0396018 -1.8732612 -15.911787 5.9311428 -1.8698003 -15.917083 5.8221321 -1.866116 -15.938478 5.7193222 -1.8644415 -15.959209 5.6164694 -1.8627669 -15.953917 5.5048251 -1.8580779 -15.996807 5.4100142 -1.8591943 -16.011778 5.3058181 -1.8570731 -16.044033 5.2074718 -1.8570731 -16.080418 5.1104345 -1.8576313 -16.115269 5.0128512 -1.8580779 -16.145723 4.9138756 -1.8580779 -16.177475 4.8152819 -1.8583012 -16.2258 4.7214818 -1.860534 -16.256376 4.6223769 -1.8607572 -16.287306 4.5233402 -1.8610922 -16.311876 4.4225378 -1.8607572 -16.344469 4.3238921 -1.8614271 -16.367805 4.2227778 -1.8610922 -16.387627 4.1208134 -1.8604224 -16.37689 4.0114346 -1.8562915 -16.46306 3.9256256 -1.8634367 -16.478125 3.822515 -1.8624319 -16.507086 3.722647 -1.8631017 -16.563591 3.6287355 -1.8670093 -16.598181 3.5297225 -1.8684605 -16.611742 3.4262054 -1.8675674 -16.626604 3.3230443 -1.8668976 -16.620338 3.2158651 -1.8638833 -16.670038 3.1194913 -1.8673441 -16.695711 3.0183849 -1.8681257 -16.722727 2.9174225 -1.8691305 -16.789312 2.822999 -1.8747126 -16.804358 2.7196109 -1.8744893 -16.857059 2.6221023 -1.87862 -16.880693 2.519794 -1.8795131 -16.906658 2.4177163 -1.8807412 -0 0 -0 -0 0 -0 -16.978867 2.10991 -1.8842021 -17.006296 2.0074377 -1.8858768 -17.035084 1.904929 -1.8877747 -17.051392 1.8008898 -1.888333 -17.064098 1.6964272 -1.8885562 -17.074186 1.591692 -1.8885562 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -17.130133 0.96266204 -1.8895611 -17.147627 0.85813171 -1.8909007 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -0 0 -0 -17.236425 -0.089995176 -1.8984923 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -17.245449 -0.83140129 -1.9017301 -17.240025 -0.93720174 -1.9017301 -17.213118 -1.0417068 -1.8993856 -17.235157 -1.1492215 -1.9026232 -17.203003 -1.2531484 -1.8998321 -17.216785 -1.3604021 -1.9022882 -17.178408 -1.4634868 -1.898939 -0 -0 -0 -0 -0 -0 -17.11001 -1.775438 -1.8945849 -17.100771 -1.8806068 -1.8948082 -17.03363 -1.9790785 -1.8885562 -16.281376 -1.9930176 -1.8048245 -15.707031 -2.0206215 -1.7411883 -15.233436 -2.0548024 -1.6889397 -15.019805 -2.1199079 -1.6661646 -14.106952 -2.0794525 -1.5640118 -13.535043 -2.0800982 -1.5004873 -12.894989 -2.0628209 -1.4291478 -12.304695 -2.0459192 -1.3633904 -11.857111 -2.0463562 -1.3138213 -11.973456 -2.142169 -1.3285581 -11.009339 -2.0395038 -1.2199301 -10.516426 -2.0150275 -1.165002 -10.14025 -2.0075445 -1.1233593 -9.8444147 -2.0118363 -1.0908715 -9.5566969 -2.0142148 -1.0592767 -9.2936096 -2.0184119 -1.0304729 -9.2471066 -2.0678096 -1.0265654 -9.0734806 -2.0875301 -1.0080328 -8.9637938 -2.1202941 -0.99686855 -9.0066233 -2.188864 -1.0033438 -8.928422 -2.2279689 -0.9958638 -8.8520079 -2.2666905 -0.98860705 -9.0253611 -2.3701749 -1.0103773 -8.9876175 -2.4193106 -1.0076978 -8.9429054 -2.4662235 -1.0042369 -8.6014862 -2.4289727 -0.96616691 -7.9286418 -2.2916214 -0.88924533 -7.9363499 -2.3467073 -0.8918131 -7.9132404 -2.3927715 -0.89080828 -7.8898644 -2.4386406 -0.88980353 -7.9012866 -2.4953845 -0.89292949 -7.9028502 -2.5493095 -0.89493906 -7.9002733 -2.6021042 -0.89650208 -8.3617315 -2.8110573 -0.95310473 -8.347146 -2.8632782 -0.95343965 -8.2843962 -2.89869 -0.94808084 -8.3347797 -2.9738426 -0.95623076 -8.2920942 -3.0160971 -0.95332801 -8.1988878 -3.0392904 -0.94439662 -8.2507391 -3.1162224 -0.95288146 -8.3557472 -3.2145972 -0.96784157 -7.1626 -2.8062079 -0.82627898 -7.1387849 -2.8475273 -0.82549751 -8.1515217 -3.3095438 -0.95042533 -8.1025887 -3.3477361 -0.94696444 -8.1102943 -3.4093263 -0.95042533 -8.1020145 -3.4644954 -0.95198834 -8.0596437 -3.505029 -0.94942057 -8.0089025 -3.5415566 -0.94584799 -7.987927 -3.5910392 -0.94595963 -7.9666467 -3.6403975 -0.94607127 -7.9522715 -3.6929781 -0.94707608 -7.9033985 -3.7294056 -0.94383842 -7.7504296 -3.7155457 -0.92765027 -5.3821402 -2.6210613 -0.63458908 -5.3659563 -2.6540363 -0.63458908 -5.3389139 -2.6815596 -0.63324934 -7.7100296 -3.9317162 -0.93434882 -7.6557541 -3.9634178 -0.93055302 -7.7430129 -4.0690222 -0.94473159 -7.6310921 -4.0701609 -0.93367898 -7.6243277 -4.1268406 -0.93602347 -7.5143714 -4.1271448 -0.92519414 -7.5184212 -4.1896195 -0.92899001 -7.5462093 -4.2659912 -0.93591183 -7.4819598 -4.2904644 -0.93099958 -7.2235522 -4.2014041 -0.90085614 -7.3859477 -4.3567142 -0.92541742 -6.9625034 -4.1647601 -0.87350374 -7.4687295 -4.5299883 -0.94339186 -7.4323282 -4.5705252 -0.94227546 -7.2219887 -4.5024915 -0.91816068 -7.4344864 -4.6985474 -0.95009041 -7.3251839 -4.6926193 -0.93937272 -7.2620797 -4.715291 -0.93479538 -7.2371612 -4.7624927 -0.93535364 -7.1358724 -4.7588444 -0.9256407 -7.1402969 -4.8253517 -0.93021804 -11.767116 -8.0574121 -1.5642351 -11.715005 -8.1277628 -1.5639002 -6.8055525 -4.7839584 -0.89661372 -11.597383 -8.2588062 -1.5615557 -11.531178 -8.3187647 -1.5594345 -11.459859 -8.3747044 -1.5566435 -11.385892 -8.4283094 -1.5535175 -11.315675 -8.4843025 -1.5509497 -5.4915347 -4.1706018 -0.73674184 -5.4674168 -4.2054305 -0.73696512 -11.111335 -8.6551208 -1.5443628 -11.053337 -8.7194433 -1.5436929 -10.994192 -8.7827597 -1.5429114 -10.940095 -8.8500538 -1.5429114 -10.904806 -8.9327564 -1.5457025 -10.823784 -8.9779291 -1.5419066 -2.8763311 -2.4161401 -0.38406357 -2.8220851 -2.4002686 -0.37825817 -2.8005266 -2.4117038 -0.37725338 -10.51255 -9.1644535 -1.5288445 -10.50306 -9.2702122 -1.5358779 -10.4445 -9.3331594 -1.5356547 -10.392195 -9.4017363 -1.5364362 -3.606837 -3.3039026 -0.51155913 -3.4822915 -3.2293518 -0.49559429 -3.4747283 -3.2622201 -0.49749222 -3.5209196 -3.3464582 -0.50776333 -3.4953067 -3.3631763 -0.50698179 -3.4767406 -3.3866398 -0.50731677 -3.4898617 -3.4413986 -0.51267558 -9.9000683 -9.8820801 -1.5335335 -8.0420551 -8.126667 -1.246501 -3.5141497 -3.5952992 -0.52685416 -3.4706237 -3.5946336 -0.52339327 -9.6291895 -10.095458 -1.5294027 -3.118222 -3.310034 -0.47293088 -2.8920364 -3.1079633 -0.43899161 -9.4020529 -10.227826 -1.5228158 -7.6315808 -8.4048929 -1.2374579 -7.4843183 -8.3450327 -1.2213814 -7.5390677 -8.5105562 -1.2393558 -2.5728447 -2.9409394 -0.40103319 -2.5885403 -2.9957678 -0.4068386 -2.5643034 -3.004792 -0.40583381 -8.9016943 -10.559798 -1.5136611 -8.8278313 -10.603528 -1.5120981 -7.3538814 -8.9442425 -1.2629124 -8.6939125 -10.707203 -1.5115399 -8.6292944 -10.761897 -1.5117632 -8.5612478 -10.812305 -1.5114282 -8.4867859 -10.854456 -1.5099769 -8.3884439 -10.865423 -1.5041715 -8.3023386 -10.891399 -1.5005989 -8.2126446 -10.911965 -1.4963566 -8.1052303 -10.907913 -1.4887649 -7.9787784 -10.876514 -1.477489 -7.9107256 -10.923656 -1.4772657 -7.794425 -10.903275 -1.4677761 -7.7090421 -10.924914 -1.4642036 -7.6282315 -10.95244 -1.4615241 -7.544559 -10.975291 -1.4582865 -7.49437 -11.04687 -1.4617474 -7.4082017 -11.065396 -1.4580632 -7.3341403 -11.101523 -1.4568352 -7.2116151 -11.063068 -1.445671 -7.1161809 -11.064485 -1.4399772 -7.0220671 -11.066826 -1.4345067 -6.9245024 -11.062534 -1.4282547 -6.8356094 -11.070992 -1.423789 -6.7375698 -11.063499 -1.4173137 -6.6557431 -11.081632 -1.4142994 -6.5926867 -11.130812 -1.4154159 -6.5022125 -11.133298 -1.4105035 -6.4179082 -11.145428 -1.406931 -6.2816935 -11.06534 -1.3915243 -6.1966934 -11.073324 -1.3876169 -6.1166325 -11.089384 -1.3848258 -6.0052824 -11.047256 -1.3746663 -1.3418064 -2.5055413 -0.28135258 -5.8882828 -11.156151 -1.3792437 -5.7784553 -11.112721 -1.3691959 -5.6770859 -11.083403 -1.361046 -1.1384612 -2.2573545 -0.24607359 -1.1303372 -2.275867 -0.24752493 -1.1298896 -2.3104317 -0.25098586 -5.3787961 -11.168355 -1.3546823 -1.0946404 -2.3097563 -0.24919957 -1.0821282 -2.3200314 -0.24964614 -1.0811419 -2.3555267 -0.25321871 -5.0249481 -11.124019 -1.3333586 -4.953773 -11.148285 -1.3325772 -4.8912449 -11.19213 -1.3342518 -4.82758 -11.2338 -1.3357031 -4.7376738 -11.213779 -1.3296745 -4.653151 -11.20501 -1.3250972 -4.5873151 -11.240711 -1.3259903 -4.5245447 -11.284327 -1.3278883 -4.4421091 -11.27859 -1.3238691 -4.3835769 -11.333439 -1.3272183 -4.318893 -11.373129 -1.3287814 -1.1739427 -3.1503222 -0.33974153 -4.170126 -11.401008 -1.3258786 -4.0658545 -11.330976 -1.3144912 -4.0120883 -11.400703 -1.31985 -1.1555973 -3.3500922 -0.36017209 -1.1340646 -3.3542957 -0.35983717 -3.7809269 -11.410364 -1.3124815 -1.0756353 -3.3150287 -0.35358518 -1.0606925 -3.3386135 -0.35559475 -1.0171624 -3.2710452 -0.34688666 -0.99273217 -3.2629645 -0.34521201 -0.97099113 -3.2632797 -0.34454215 -0.95094973 -3.269176 -0.34454215 -0.92924166 -3.2692144 -0.34387231 -0.91155815 -3.2834721 -0.34487709 -0.89607513 -3.3062675 -0.34688666 -3.0395522 -11.490086 -1.2972982 -2.9610484 -11.477729 -1.2937256 -2.8939598 -11.509173 -1.2952887 -2.8171387 -11.501618 -1.2923859 -1.9463761 -8.1634741 -0.90487522 -0.73716605 -3.179219 -0.32868895 -1.9883865 -8.8178225 -0.97755444 -2.5244553 -11.523608 -1.287362 -2.4419167 -11.483477 -1.2809983 -1.7293773 -8.3857641 -0.92396611 -1.6771115 -8.3923197 -0.92351949 -1.6287953 -8.4190388 -0.92541742 -2.1575346 -11.530177 -1.279882 -2.0816185 -11.51484 -1.2766443 -2.0146835 -11.548933 -1.2791005 -1.3760411 -8.1850185 -0.89449251 -1.8742375 -11.581615 -1.2801052 -1.3451548 -8.6490517 -0.94540143 -1.7199399 -11.523149 -1.2709506 -1.6563786 -11.583656 -1.2766443 -1.577865 -11.539449 -1.270504 -1.5038151 -11.524279 -1.267713 -1.4341782 -11.542165 -1.2687178 -1.3625143 -11.543839 -1.2679362 -1.2957439 -11.588523 -1.2720671 -1.2247181 -11.597243 -1.2721786 -1.1556007 -11.625306 -1.2745231 -1.0857236 -11.648009 -1.2763094 -1.0121638 -11.630692 -1.27363 -0.94198185 -11.651541 -1.2753047 -0.86950916 -11.644218 -1.2738533 -0.79906446 -11.664206 -1.275528 -0.72797418 -11.676824 -1.2764211 -0.65648013 -11.684048 -1.276756 -0.58268875 -11.646171 -1.2720671 -0.51130545 -11.651512 -1.2722903 -0.44152886 -11.700109 -1.2774259 -0.36809647 -11.650949 -1.2716204 -0.29799324 -11.707627 -1.2777607 -0.22622786 -11.71321 -1.2782073 -0.15453649 -11.728289 -1.2797704 -0.08264748 -11.739947 -1.2809983 -0.010579268 -11.706446 -1.2772026 --0.06142595 -11.740077 -1.2809983 --0.13339297 -11.733517 -1.2803285 --0.20602828 -11.769241 -1.2844594 --0.27948228 -11.820409 -1.2903764 --0.35268536 -11.841318 -1.2929442 --0.42398113 -11.801193 -1.2887018 --0.49751085 -11.825176 -1.2917161 --0.57182914 -11.858627 -1.2958468 --0.64668435 -11.893595 -1.3002009 --0.71922988 -11.88246 -1.2994194 --0.78928375 -11.835186 -1.2946187 --0.85741341 -11.76867 -1.287697 --0.92976499 -11.765169 -1.2879202 --1.0016842 -11.756272 -1.2875853 --1.0741621 -11.753863 -1.2880319 --1.1451045 -11.735183 -1.2866921 --1.2106284 -11.665664 -1.2796587 --1.2779492 -11.619492 -1.2753047 --1.3598849 -11.703233 -1.2856874 --1.4794741 -12.085279 -1.3298978 --1.5516986 -12.061189 -1.3282231 --1.6340429 -12.113484 -1.3352566 --1.7072282 -12.095359 -1.3343635 --1.7856135 -12.113166 -1.3376011 --1.8650362 -12.135377 -1.3413969 --1.9391485 -12.121742 -1.3411736 --2.0089266 -12.082168 -1.3380476 --2.0803201 -12.053946 -1.3362614 --2.1691158 -12.124103 -1.3457509 --2.24401 -12.113497 -1.3460859 --2.3130596 -12.072171 -1.3429599 --2.376477 -12.004135 -1.3368196 --2.4759495 -12.1159 -1.3513331 --2.5516791 -12.107286 -1.3521146 --2.6273961 -12.0982 -1.3528961 --2.7004957 -12.077002 -1.3523378 --2.7736568 -12.056331 -1.3518913 --2.8484957 -12.042953 -1.3523378 --2.9263251 -12.041664 -1.3542358 --3.0037646 -12.037945 -1.3559104 --3.0829937 -12.040467 -1.3583666 --3.1502531 -11.996333 -1.3554639 --3.2124381 -11.934555 -1.3505516 --3.2850785 -11.912704 -1.3503283 --3.3710725 -11.938228 -1.3556871 --3.4478471 -11.929729 -1.3571385 --3.5170374 -11.895007 -1.3555756 --3.5727029 -11.81613 -1.348877 --3.6433775 -11.788289 -1.3482071 --3.7282083 -11.805511 -1.3528961 --3.8021004 -11.787143 -1.3534544 --3.8895845 -11.809842 -1.3589247 --3.9660912 -11.797998 -1.3603761 --4.0277686 -11.742421 -1.356692 --4.091867 -11.694974 -1.3540125 --4.1655526 -11.675262 -1.3546823 --4.2262435 -11.619598 -1.3511099 --4.2535992 -11.475109 -1.3369312 --4.3091836 -11.409747 -1.3322423 --4.3737597 -11.36918 -1.3305676 --4.4532237 -11.367111 -1.3335819 --4.5273051 -11.35065 -1.3349217 --4.5916328 -11.309766 -1.3333586 --4.7083707 -11.396187 -1.347314 --4.8070869 -11.435791 -1.3556871 --1.5412173 -3.603698 -0.4023729 --1.5561674 -3.5777698 -0.40036336 --5.0420852 -11.40263 -1.3627206 --5.0838432 -11.308937 -1.3550173 --5.1494207 -11.269395 -1.3540125 --1.5459871 -3.3284941 -0.37435067 --1.563413 -3.3126543 -0.37356919 --1.5815619 -3.2985184 -0.37301096 --1.6069919 -3.2994738 -0.37435067 --1.6439462 -3.3234007 -0.37859309 --1.6848217 -3.3541019 -0.38372862 --1.712593 -3.3578658 -0.38551491 --1.7381893 -3.357002 -0.38674298 --1.7656884 -3.3594689 -0.3884176 --1.7914124 -3.358217 -0.38964567 --4.7739029 -8.8199062 -1.0887502 --6.2285471 -11.34086 -1.4156392 --1.8447 -3.3099165 -0.38774776 --1.8581284 -3.2864239 -0.38618475 --1.8743042 -3.268064 -0.38529164 --1.892323 -3.2530658 -0.38484505 --1.9178011 -3.250809 -0.38607311 --6.727447 -11.247198 -1.4343951 --6.8303423 -11.261788 -1.4417634 --6.90452 -11.228131 -1.4428798 --6.9816957 -11.199047 -1.4446661 --7.1033669 -11.240005 -1.4558303 --7.2204413 -11.27152 -1.4658781 --7.3765888 -11.361196 -1.4838526 --7.5111632 -11.414509 -1.497138 --7.5953946 -11.389703 -1.5000408 --7.6551223 -11.328063 -1.4980311 --7.7166262 -11.269399 -1.4964682 --7.7805305 -11.21449 -1.4954634 --7.8743386 -11.202311 -1.5003756 --7.9584899 -11.17564 -1.5033901 --8.0402842 -11.145134 -1.5059578 --8.103241 -11.088368 -1.504953 --8.1498413 -11.009685 -1.5009339 --8.2184343 -10.961061 -1.5011572 --8.3065701 -10.938128 -1.5050646 --8.3468723 -10.852294 -1.5001523 --8.414525 -10.802442 -1.5003756 --8.4781876 -10.747487 -1.4999291 --8.5408716 -10.691381 -1.4993709 --8.6150618 -10.64959 -1.5009339 --8.6827631 -10.599605 -1.5013804 --8.7495413 -10.548423 -1.5017154 --8.8249645 -10.507475 -1.5036134 --8.8950653 -10.459942 -1.504618 --8.9545393 -10.399894 -1.5038366 --9.0168781 -10.343256 -1.5036134 --9.0999002 -10.310087 -1.5069625 --9.1762333 -10.268878 -1.5091954 --9.2544022 -10.22933 -1.5117632 --9.3371296 -10.194339 -1.5151125 --9.4022083 -10.13977 -1.5155591 --9.4669676 -10.084786 -1.5160056 --9.5430441 -10.041636 -1.5183501 --9.6217031 -10.000795 -1.5211412 --9.6849661 -9.9437056 -1.521476 --9.7667274 -9.9053211 -1.5248253 --9.8350439 -9.8529444 -1.5260534 --9.90026 -9.7973051 -1.526835 --9.9708471 -9.7467937 -1.5285095 --10.046906 -9.7013073 -1.5310774 --10.114873 -9.6477089 -1.5324171 --10.177496 -9.588871 -1.5329752 --10.244143 -9.5336905 -1.5342033 --9.8795938 -9.0819187 -1.469674 --9.899085 -8.9883928 -1.4642036 --9.9192801 -8.8962984 -1.4589564 --9.9535971 -8.8174753 -1.455942 --9.9147778 -8.6750898 -1.4420984 --9.9106779 -8.5647058 -1.4336135 --9.9539738 -8.4959917 -1.4322739 --10.002118 -8.4315529 -1.4317156 --9.976531 -8.3058023 -1.4204397 --9.9720402 -8.198988 -1.4124014 --10.05919 -8.1677151 -1.4177604 --10.177341 -8.1605473 -1.4275849 --10.318373 -8.170125 -1.440647 --10.350305 -8.0925808 -1.4380792 --10.409204 -8.0362072 -1.4394189 --10.527073 -8.024601 -1.4491318 --10.676154 -8.0351553 -1.4631988 --10.773113 -8.0050602 -1.4698973 --11.591231 -8.5031128 -1.5770739 --11.644796 -8.4329958 -1.5772973 --11.715723 -8.3752565 -1.5799767 --11.790439 -8.319829 -1.5832143 --11.855128 -8.2569828 -1.5851122 --11.922766 -8.1959076 -1.5874567 --11.999969 -8.1410084 -1.591141 --12.069512 -8.0804939 -1.5938203 --12.138765 -8.0194321 -1.5964998 --12.20689 -7.9572806 -1.5990676 --12.274709 -7.8945951 -1.6016353 --12.319562 -7.8170009 -1.6011888 --12.384141 -7.7518077 -1.6034216 --12.42978 -7.6746297 -1.6031983 --12.486822 -7.6044207 -1.604538 --12.565619 -7.5471039 -1.6087804 --12.615965 -7.472393 -1.6093386 --12.686462 -7.4093766 -1.6125762 --12.794551 -7.3675971 -1.6207261 --6.7132907 -3.8108923 -0.82929337 --12.903945 -7.2211957 -1.6232939 --12.94627 -7.1409225 -1.6230706 --12.994207 -7.0637245 -1.6236289 --13.045189 -6.9880838 -1.6246337 --13.101004 -6.9148669 -1.6263083 --13.164346 -6.8453541 -1.6289877 --7.3757572 -3.7778227 -0.89304113 --6.9418797 -3.5019639 -0.8355453 --6.948998 -3.4522283 -0.83375907 --6.9575524 -3.4034111 -0.83219606 --6.9827809 -3.3628125 -0.83275425 --7.0293236 -3.3322496 -0.83599192 --6.6930261 -3.122654 -0.79178154 --6.7138662 -3.0823567 -0.79200482 --13.679688 -6.1794972 -1.6484134 --13.731876 -6.1019011 -1.6501998 --13.780896 -6.0227027 -1.6516511 --13.833112 -5.9447021 -1.653549 --7.3563228 -3.1077991 -0.85921353 --7.4183874 -3.0805171 -0.86446071 --14.032198 -5.726624 -1.6647133 --14.064304 -5.6393065 -1.6643783 --14.09217 -5.550354 -1.6635969 --14.135229 -5.4673667 -1.6647133 --14.188948 -5.3882937 -1.6671693 --14.255264 -5.3136268 -1.6711885 --14.33333 -5.2427864 -1.676659 --14.357746 -5.1520548 -1.6757659 --14.359093 -5.0533028 -1.6721933 --14.370101 -4.9582949 -1.6698488 --14.378603 -4.8627052 -1.667281 --14.40817 -4.7743883 -1.667281 --14.453261 -4.6911073 -1.669179 --14.665504 -4.6607308 -1.6908376 --14.755504 -4.5898442 -1.6980944 --14.81286 -4.5081902 -1.7015553 --14.882151 -4.4296904 -1.7064675 --14.868021 -4.3263516 -1.7016668 --14.818775 -4.2135687 -1.6928471 --14.770622 -4.1020856 -1.6842507 --14.773455 -4.0053959 -1.6816829 --12.77069 -3.3783658 -1.4461175 --12.781557 -3.2974598 -1.445001 --12.821788 -3.2240613 -1.4473455 --14.65013 -3.5884302 -1.6565634 --14.653506 -3.494091 -1.6544422 --12.299105 -2.8529816 -1.3804717 --14.64875 -3.3035121 -1.6490834 --14.660007 -3.2116528 -1.6480786 --14.681382 -3.1220536 -1.6483018 --13.384418 -2.7604833 -1.4973613 --14.89107 -2.9761324 -1.6680626 --14.942224 -2.8911257 -1.6718583 --14.981172 -2.8034093 -1.6743145 --15.026449 -2.7165616 -1.6775521 --15.078077 -2.6304591 -1.6815712 --15.251712 -2.5644252 -1.6995456 --15.33779 -2.4822268 -1.7075839 --15.521626 -2.4143443 -1.7267864 --15.586273 -2.3265436 -1.7324802 --15.648458 -2.2377586 -1.7379507 --15.681586 -2.1443925 -1.7401835 --15.558465 -2.0303824 -1.7247769 --15.861547 -1.9710375 -1.7577114 --16.361855 -1.9313519 -1.8129743 --17.320498 -1.9368519 -1.9200394 --17.513893 -1.849748 -1.9405816 --17.520958 -1.7418567 -1.940135 --17.565947 -1.6375465 -1.9440424 --17.564774 -1.528785 -1.9428145 --17.564909 -1.4202597 -1.9418097 --17.683292 -1.3206745 -1.9542019 --17.668261 -1.2105842 -1.9516342 --17.700151 -1.1036977 -1.9544252 --17.723457 -0.99601907 -1.9563231 --17.648842 -0.88322616 -1.94728 --17.662865 -0.7753107 -1.9482849 --17.652393 -0.66635615 -1.9466102 --17.652178 -0.5579049 -1.9461637 --15.757541 1.1615255 -1.9354826 --15.742205 1.2575573 -1.934491 --15.732215 1.3539556 -1.9342432 --15.719659 1.4500964 -1.9337474 --15.701577 1.5456475 -1.9326319 --15.678968 1.6406181 -1.9310205 --15.65184 1.7349318 -1.9289134 --15.631044 1.8297826 -1.9276739 --15.580131 1.9207989 -1.922716 --15.567067 2.0162332 -1.922592 --15.595699 2.1173227 -1.9277979 --15.583397 2.2131157 -1.9279218 --15.568542 2.3085463 -1.9277979 --15.552123 2.4037266 -1.92755 --15.531203 2.4981613 -1.9268063 --15.505795 2.5917754 -1.9255668 --15.480802 2.6853414 -1.9244512 --15.452314 2.7781713 -1.9229639 --15.429123 2.8718426 -1.9222202 --15.414135 2.9670229 -1.922592 --15.391747 3.0607719 -1.9220963 --15.363928 3.1533601 -1.9209807 --15.33167 3.2449 -1.9193695 --15.293051 3.3348942 -1.9170144 --15.251 3.4238842 -1.9142876 --15.211335 3.513154 -1.9119326 --15.191423 3.6068816 -1.9121804 --15.229739 3.7148452 -1.9199891 --15.157568 3.7959256 -1.9136678 --15.092667 3.878237 -1.9083381 --15.083939 3.9748175 -1.9103212 --15.023822 4.0577202 -1.9057351 --15.036895 4.1604156 -1.910693 --14.988171 4.246109 -1.9077183 --14.936104 4.3305321 -1.9043717 --14.948255 4.4336681 -1.9094536 --14.940709 4.5313549 -1.9120564 --14.893668 4.6170664 -1.9095775 --14.860329 4.7068667 -1.9089578 --14.818894 4.7939882 -1.9073465 --14.778836 4.8814006 -1.9059831 --14.747666 4.971673 -1.9058591 --14.719698 5.0630379 -1.9062309 --14.693036 5.1549039 -1.9068507 --14.652721 5.2419529 -1.9057351 --14.617485 5.3307414 -1.9053633 --14.591942 5.4230981 -1.9063549 --14.57695 5.5195599 -1.9088339 --14.553918 5.613184 -1.9103212 --14.544139 5.7121754 -1.9136678 --14.505131 5.7998352 -1.913172 --14.501437 5.9018221 -1.9175102 --14.480536 5.9971457 -1.9196173 --14.469984 6.0970597 -1.9232118 --14.466045 6.2001967 -1.9277979 --14.440463 6.294394 -1.9295331 --14.439671 6.3997703 -1.934739 --14.403749 6.4898806 -1.9352348 --14.3817 6.5864029 -1.9377137 --14.35271 6.6799674 -1.939325 --14.322217 6.7729998 -1.9408123 --14.288438 6.8646197 -1.9419279 --14.257641 6.9578209 -1.9435393 --14.260911 7.0680904 -1.9499846 --14.235887 7.1648302 -1.9525875 --14.204909 7.2588191 -1.9544467 --14.171553 7.3517828 -1.956058 --14.139346 7.4455357 -1.9579172 --14.110022 7.5410409 -1.9602722 --14.077441 7.6350465 -1.9622554 --14.048583 7.7313285 -1.9648583 --14.022539 7.8294787 -1.967957 --14.015676 7.9388494 -1.9739065 --13.991651 8.0390368 -1.9775009 --13.970351 8.1412258 -1.9815912 --13.925261 8.2298222 -1.982335 --13.898332 8.3293953 -1.9858055 --13.863921 8.4248247 -1.9882845 --13.832241 8.5222273 -1.9912592 --13.795679 8.6169291 -1.9936142 --13.76099 8.7130947 -1.996341 --13.723134 8.8075514 -1.9986961 --13.697113 8.9099874 -2.0029104 --13.662066 9.0069733 -2.0058851 --13.627995 9.1049662 -2.0091076 --13.585018 9.1973162 -2.0110908 --13.538965 9.2877979 -2.0127022 --13.495572 9.3803253 -2.0148094 --13.447497 9.4698124 -2.0162966 --13.41337 9.569437 -2.020015 --13.372093 9.6643486 -2.022742 --13.330956 9.7596989 -2.0255928 --13.291543 9.8566818 -2.0288153 --13.237954 9.9434156 -2.0299308 --13.198014 10.040678 -2.0332775 --13.157379 10.137824 -2.0366242 --13.107443 10.228133 -2.0386074 --13.054558 10.316365 -2.0402186 --12.98404 10.390692 -2.039103 --12.935457 10.482661 -2.0415821 --12.877796 10.5675 -2.0426974 --12.830266 10.660905 -2.0455484 --12.790424 10.761151 -2.0497625 --12.757389 10.867744 -2.0552163 --12.723525 10.974337 -2.0606699 --12.679864 11.073088 -2.0646362 --12.633983 11.170402 -2.0683548 --12.57999 11.260949 -2.0708337 --12.526097 11.351921 -2.0734365 --12.465712 11.437287 -2.075048 --12.410566 11.527743 -2.0776508 --12.348996 11.612514 -2.0792623 --12.289009 11.699015 -2.0812454 --12.228425 11.785216 -2.0832286 --12.167245 11.871115 -2.0852118 --12.104059 11.955311 -2.086947 --12.044508 12.043388 -2.0894258 --11.987818 12.134715 -2.0925245 --11.929073 12.224378 -2.0953753 --11.862793 12.306631 -2.0969868 --11.813742 12.407216 -2.1018207 --11.746907 12.489591 -2.1035559 --11.676805 12.568704 -2.1047955 --11.606844 12.648157 -2.1061587 --11.570999 12.765458 -2.1139677 --11.531503 12.879836 -2.1212804 --11.418735 12.912437 -2.1149592 --11.337332 12.980017 -2.1145873 --11.273029 13.067369 -2.1175621 --11.143088 13.078132 -2.1080182 --11.001942 13.074127 -2.0962429 --10.849851 13.055147 -2.082237 --10.733031 13.076985 -2.075048 --10.570122 13.040835 -2.0586867 --10.433483 13.034946 -2.0474076 --10.301624 13.033324 -2.0369959 --10.188494 13.054046 -2.0303028 --10.056117 13.048718 -2.0196433 --9.9326038 13.053316 -2.0107191 --9.8159685 13.065619 -2.0031581 --9.6995583 13.076984 -1.9955974 --9.5528975 13.045781 -1.9815912 --9.4436073 13.06394 -1.9753939 --9.3321495 13.078019 -1.9687006 --9.219162 13.088791 -1.9616356 --9.0752449 13.053856 -1.9477534 --8.9584885 13.056109 -1.9396969 --8.8492804 13.068105 -1.9332516 --8.7408152 13.080079 -1.9269302 --8.6227055 13.076303 -1.9183779 --8.5071363 13.0749 -1.9103212 --8.3945913 13.076748 -1.9028844 --8.2956161 13.098667 -1.8985462 --8.1877518 13.105558 -1.8921009 --8.0749102 13.103173 -1.8844161 --7.9639544 13.102443 -1.8771032 --7.8737168 13.134891 -1.8747482 --7.8182192 13.225668 -1.8809456 --7.7963777 13.375412 -1.8956953 --7.7027903 13.403209 -1.8928446 --7.6008415 13.415685 -1.8878866 --7.4970956 13.423949 -1.8824329 --7.3930564 13.430578 -1.8768553 --7.2953696 13.447777 -1.8728889 --7.192605 13.454657 -1.8675592 --7.0955801 13.471319 -1.8637168 --7.0009069 13.491702 -1.8604941 --6.9017358 13.502595 -1.856032 --6.7986798 13.504804 -1.8504544 --6.6998234 13.514259 -1.8459923 --6.6045895 13.530145 -1.8425218 --6.5167189 13.560576 -1.8411583 --6.4312687 13.595822 -1.8405386 --6.3351636 13.608039 -1.8368201 --6.2498941 13.643046 -1.8363243 --6.1444583 13.63319 -1.8297551 --6.0586805 13.6661 -1.8291354 --5.9743166 13.702107 -1.8290114 --5.8854384 13.727563 -1.8275241 --5.8003259 13.761588 -1.8272761 --5.7100816 13.783168 -1.8254169 --5.6119351 13.784858 -1.8209548 --5.5165629 13.792314 -1.8173603 --5.4274778 13.814819 -1.8158729 --5.3401098 13.841381 -1.8150053 --5.2536745 13.870175 -1.8145095 --5.1622467 13.885407 -1.8122785 --5.0725303 13.904702 -1.8106672 --4.9754176 13.902864 -1.806329 --4.885747 13.920959 -1.8047177 --4.7924905 13.928156 -1.8017429 --4.7050366 13.951658 -1.8009992 --4.6159186 13.969901 -1.7996358 --4.5215616 13.971526 -1.7961652 --4.4270587 13.971574 -1.7925707 --4.3200903 13.930234 -1.7836465 --4.2161012 13.895707 -1.7757138 --4.12568 13.904192 -1.7734828 --4.035037 13.911137 -1.7711278 --3.9417593 13.907947 -1.7675333 --3.8531721 13.920395 -1.7660459 --3.7635453 13.928449 -1.7640628 --3.669919 13.920574 -1.7600964 --3.5777662 13.916882 -1.7567499 --3.49086 13.932797 -1.7560061 --3.4060097 13.956846 -1.7563779 --3.3223712 13.986172 -1.7574935 --3.2378314 14.012094 -1.7582372 --3.1591849 14.064616 -1.7624514 --3.081496 14.123486 -1.7675333 --3.0058744 14.19455 -1.7742264 --2.9354825 14.294375 -1.784638 --2.8690107 14.419173 -1.7982724 --2.7891114 14.481328 -1.8039739 --2.7023826 14.509875 -1.8054613 --2.6099639 14.507627 -1.8031063 --2.5169964 14.500882 -1.8002555 --2.4204466 14.471033 -1.7945539 --2.330663 14.479733 -1.7938102 --2.2401054 14.482975 -1.7924469 --2.1491594 14.482705 -1.7907115 --2.0598359 14.492673 -1.7903397 --1.9702042 14.500122 -1.7897199 --1.8813236 14.512922 -1.7898439 --1.7915099 14.518284 -1.7891002 --1.7055094 14.555614 -1.7924469 --1.6187901 14.589474 -1.7954216 --1.5281041 14.588276 -1.7940581 --1.437591 14.587502 -1.7928187 --1.3537098 14.65731 -1.8005034 --1.2686002 14.721693 -1.8075684 --1.1797476 14.747993 -1.8099234 --1.0882118 14.7411 -1.8081882 --0.99667114 14.731659 -1.806205 --0.9057132 14.728583 -1.8050895 --0.81417352 14.713058 -1.8024865 --0.72271258 14.69399 -1.7995118 --0.63300681 14.709052 -1.8008753 --0.54336238 14.729517 -1.8029823 --0.45288226 14.729598 -1.8026105 --0.36220264 14.720196 -1.8011231 --0.27110818 14.680472 -1.7959174 --0.18091601 14.67293 -1.7948018 --0.091008604 14.694601 -1.7974048 --0.00084140874 14.74549 -1.8037261 -0.089916304 14.790862 -1.8094276 -0.18069403 14.792016 -1.8096756 -0.27116016 14.774755 -1.8076924 -0.3613725 14.754957 -1.8054613 -0.451078 14.725683 -1.8021147 -0.54054749 14.698839 -1.79914 -0.63055718 14.69128 -1.7986442 -0.72049451 14.68317 -1.7981484 -0.81161618 14.697298 -1.8005034 -0.90287751 14.709868 -1.8027345 -0.9924491 14.694151 -1.801495 -1.0798904 14.65117 -1.796909 -1.1680279 14.622507 -1.7941821 -1.2559396 14.594304 -1.7915791 -1.3439143 14.569526 -1.7894721 -1.440582 14.635068 -1.7987682 -1.5312841 14.634835 -1.7998837 -1.6305702 14.710967 -1.8106672 -1.725422 14.740108 -1.8156251 -1.8188703 14.753863 -1.8187238 -1.9098742 14.746362 -1.8192196 -1.9999195 14.731416 -1.8188477 -2.0894346 14.712973 -1.818104 -2.1773424 14.68417 -1.8161209 -2.2622461 14.637192 -1.8119066 -2.3405068 14.551518 -1.8028585 -2.4096186 14.416504 -1.7876128 -2.4878514 14.342787 -1.7801759 -2.5601764 14.240333 -1.7691447 -2.6273422 14.116073 -1.7553864 -2.7142825 14.101635 -1.7556343 -2.8011446 14.086661 -1.7558821 -2.887526 14.069208 -1.7558821 -2.9768817 14.065787 -1.7577415 -3.0631318 14.047257 -1.7577415 -3.1503537 14.033038 -1.7583611 -3.2370696 14.016345 -1.758733 -3.3264508 14.0107 -1.7605922 -3.4212945 14.026658 -1.7653022 -3.5138063 14.03139 -1.7686489 -3.4330907 13.360858 -1.684984 -3.5142479 13.336662 -1.6846122 -3.7924464 14.041928 -1.7786885 -3.8711236 13.991616 -1.775218 -3.9547374 13.959963 -1.7742264 -4.0491643 13.965931 -1.7781928 -4.1313944 13.929407 -1.7767054 -4.2153454 13.899047 -1.7760857 -4.3023124 13.878608 -1.7768294 -4.3822942 13.835867 -1.7747222 -4.4649687 13.802108 -1.7738546 -4.5582886 13.800834 -1.7773252 -4.6460538 13.782007 -1.7785647 -4.7366648 13.771068 -1.7809197 -4.8260016 13.75579 -1.7827789 -4.9139924 13.736197 -1.7841423 -4.9992037 13.708582 -1.7845142 -5.0897932 13.695322 -1.7868692 -5.1839223 13.690744 -1.7904637 -5.273901 13.674417 -1.7925707 -5.3704047 13.674126 -1.796909 -5.4648924 13.667634 -1.8005034 -5.5613723 13.665093 -1.8047177 -5.6470141 13.635296 -1.8053374 -5.7348113 13.610448 -1.8067008 -5.8205614 13.580476 -1.8074445 -5.904573 13.546325 -1.8076924 -5.9924064 13.520726 -1.8091798 -6.0874858 13.510843 -1.8128982 -6.1789503 13.492182 -1.8155011 -6.2679019 13.467508 -1.8173603 -6.3631473 13.455706 -1.8210788 -6.459343 13.445029 -1.8250451 -6.5517297 13.425653 -1.8278959 -6.6419172 13.401202 -1.830127 -6.7374053 13.386786 -1.8338454 -6.8261924 13.358447 -1.8357046 -6.9199119 13.339211 -1.8389273 -7.015964 13.323717 -1.8427696 -7.1041336 13.292668 -1.844505 -7.1983371 13.272378 -1.8478515 -7.2853808 13.238392 -1.8493389 -7.3751817 13.209035 -1.8515699 -7.4580483 13.166986 -1.8520657 -7.5065627 13.065054 -1.8440092 -7.6080732 13.055613 -1.8493389 -7.6991458 13.027477 -1.8520657 -7.8080153 13.028504 -1.8591307 -7.9115167 13.019356 -1.8648324 -8.0167608 13.011961 -1.8709058 -8.1316738 13.018911 -1.8792104 -8.2347622 13.005657 -1.8846641 -8.333169 12.984112 -1.8890022 -9.0723286 13.946638 -2.0400946 -9.1615562 13.896507 -2.0409622 -9.2554722 13.853232 -2.0429454 -9.3503141 13.810971 -2.0451765 -9.4438629 13.76643 -2.0471597 -9.5372171 13.72126 -2.0491428 -9.630372 13.675464 -2.051126 -9.7215939 13.626616 -2.0527372 -9.8085098 13.571534 -2.0534811 -9.8974609 13.5191 -2.0547204 -9.9961863 13.479635 -2.0580671 -10.098376 13.444227 -2.0621574 -10.199905 13.407282 -2.0661237 -10.294699 13.36095 -2.0687265 -10.39297 13.318651 -2.0720732 -10.484341 13.267087 -2.0740564 -10.572989 13.211802 -2.0755436 -10.666352 13.162097 -2.0780227 -10.767057 13.120947 -2.081989 -10.874634 13.08745 -2.0873187 -10.982843 13.053885 -2.0927725 -11.087188 13.014953 -2.0974824 -11.184338 12.966965 -2.1008291 -11.290454 12.928737 -2.105911 -11.373514 12.863676 -2.1066546 -11.382733 12.716022 -2.0936401 -11.330596 12.50257 -2.0694702 -11.410452 12.436467 -2.0700901 -11.481143 12.360404 -2.0690985 -11.546571 12.278882 -2.0672393 -11.60938 12.194866 -2.0650082 -11.667459 12.106256 -2.0620334 -11.721426 12.013843 -2.058439 -11.783763 11.930401 -2.0564559 -11.844114 11.845243 -2.0542247 -11.891158 11.747242 -2.0497625 -11.948099 11.659506 -2.0471597 -12.010842 11.577711 -2.0456722 -12.070157 11.492848 -2.043689 -12.129605 11.408374 -2.0418298 -12.184837 11.320227 -2.039351 -12.234326 11.227136 -2.0360043 -12.283133 11.133864 -2.0326579 -12.32608 11.035784 -2.0284436 -12.373491 10.942198 -2.0250969 -12.42545 10.853015 -2.0226181 -12.477533 10.764256 -2.020263 -12.530506 10.676553 -2.0181558 -12.582113 10.587967 -2.0159247 -12.630816 10.497248 -2.0133219 -12.677345 10.40507 -2.0104711 -12.710886 10.302722 -2.0056372 -12.763017 10.215855 -2.003902 -12.816117 10.129967 -2.0024145 -12.871774 10.046254 -2.0014229 -12.917454 9.9549723 -1.9989439 -12.961709 9.8629074 -1.996341 -13.002942 9.7688875 -1.9933662 -13.045103 9.6759148 -1.9906394 -13.073003 9.5728283 -1.9858055 -13.10013 9.4697647 -1.9809715 -13.147488 9.3817129 -1.9793602 -13.160185 9.2694407 -1.972543 -13.192369 9.171526 -1.9688246 -13.254943 9.0948973 -1.9698162 -13.303925 9.0089445 -1.9688246 -13.33915 8.9139137 -1.9658499 -13.36957 8.8160582 -1.9622554 -13.401786 8.7197895 -1.9590328 -13.433326 8.6234579 -1.9558101 -13.470895 8.5313148 -1.9535791 -13.512048 8.4416647 -1.9519677 -13.550919 8.3507891 -1.9501085 -13.592575 8.261817 -1.948745 -13.619181 8.1639748 -1.9452745 -13.643391 8.0651093 -1.9415561 -13.662614 7.9637556 -1.937218 -13.687131 7.8659315 -1.9337474 -13.718734 7.7725081 -1.9313923 -13.754038 7.6814122 -1.9296571 -13.783525 7.5873055 -1.9271781 -13.808886 7.4912343 -1.9242034 -13.837089 7.3970089 -1.9217244 -13.852364 7.2962461 -1.9175102 -13.89511 7.2101984 -1.9172623 -13.925836 7.1180305 -1.9154031 -13.935568 7.0154967 -1.910693 -13.954348 6.9179592 -1.9073465 -13.983156 6.8256783 -1.9054873 -14.007781 6.731586 -1.9031322 -14.036263 6.6395698 -1.901397 -14.065043 6.5478764 -1.8997856 -14.091423 6.4552536 -1.8979264 -14.118101 6.3629618 -1.8961911 -14.141456 6.2693791 -1.8940841 -14.166014 6.1765432 -1.8922248 -14.180844 6.0797324 -1.8891262 -14.178562 5.9760365 -1.8837963 -14.194795 5.8805723 -1.8810695 -14.221419 5.7896233 -1.87983 -14.207844 5.6827264 -1.8732609 -14.236903 5.5932651 -1.8725171 -14.259846 5.5015187 -1.8710297 -14.272918 5.4061871 -1.8683029 -14.289079 5.3122859 -1.8660718 -14.318609 5.2234898 -1.8657 -14.35039 5.1355338 -1.8657 -14.390058 5.0503416 -1.8668156 -14.427343 4.9642105 -1.8676832 -14.480099 4.8832006 -1.8706579 -14.516384 4.7964392 -1.8715255 -14.544598 4.7069726 -1.8714015 -14.566584 4.6155424 -1.8705339 -14.607899 4.5301905 -1.8722693 -14.616429 4.4347124 -1.8697903 -14.65478 4.3483305 -1.8712777 -14.704059 4.2649612 -1.8742524 -14.712766 4.1697893 -1.8720213 -14.666348 4.0595875 -1.8627253 -14.768576 3.9904797 -1.8727651 -14.843637 3.9131889 -1.8793342 -14.865447 3.8215425 -1.8790864 -14.885728 3.7295346 -1.8787146 -14.925684 3.6423604 -1.8809456 -14.960303 3.55369 -1.8825569 -14.975059 3.4602652 -1.8816893 -14.98439 3.365706 -1.8802019 -15.032875 3.2798321 -1.8837963 -15.06825 3.1908183 -1.8857795 -15.088516 3.0985007 -1.8859035 -15.113084 3.0070224 -1.8866472 -15.136122 2.9151716 -1.8872669 -15.166406 2.824604 -1.8888782 -15.194195 2.7334235 -1.8902416 -15.215569 2.6409903 -1.8908614 -15.22953 2.5472522 -1.8906136 -15.25369 2.4551761 -1.891729 -15.282197 2.3636575 -1.8934643 -15.30819 2.27159 -1.8949517 -15.330683 2.178874 -1.8960673 -15.346713 2.0851662 -1.8964391 -15.365123 1.9917263 -1.8971827 -15.380994 1.8978959 -1.8976785 -15.402205 1.8046381 -1.898918 -15.426796 1.7116289 -1.9006532 -15.445889 1.6178694 -1.9017688 -15.459476 1.5234537 -1.9022646 -15.478414 1.4294792 -1.9035041 -15.486894 1.3344786 -1.9035041 -15.510616 1.2406924 -1.9054873 -15.515958 1.1453518 -1.9052393 -15.526653 1.0503937 -1.9057351 -15.532806 0.95510411 -1.9057351 -15.553236 0.86059988 -1.9075943 -15.579037 0.76617283 -1.9101973 -15.599307 0.67124856 -1.9121804 -15.614039 0.57592189 -1.9135438 -15.633149 0.4805918 -1.915527 -15.645723 0.38490286 -1.9167665 -15.649775 0.28893176 -1.9170144 -15.683996 0.19330221 -1.9211047 -15.675957 0.097008787 -1.9199891 -15.67328 0.00082116749 -1.9196173 -15.658106 -0.095256627 -1.9177581 -15.633413 -0.1910384 -1.9147834 -15.64286 -0.28716078 -1.9161468 -15.647747 -0.38330877 -1.9170144 -15.653035 -0.47955802 -1.9180059 -15.655748 -0.57581347 -1.9187497 -15.65886 -0.67216289 -1.9196173 -15.663361 -0.76866961 -1.9207329 -15.667266 -0.86525685 -1.9218484 -15.666615 -0.96167743 -1.9224681 -15.664379 -1.0580556 -1.9229639 -15.675405 -1.1554649 -1.925195 -15.669009 -1.2517047 -1.925319 -15.668942 -1.3485056 -1.9263105 -15.678159 -1.4462651 -1.9285415 -15.686765 -1.5441883 -1.9307727 -15.742129 -1.6472318 -1.9389532 -15.728767 -1.7434646 -1.9385813 -15.627103 -1.8293209 -1.9271781 -15.574222 -1.9200701 -1.9219723 -15.344669 -1.9874116 -1.8945799 -14.7147 -1.997649 -1.8167406 -14.276777 -2.0274544 -1.7630712 -13.816483 -2.048614 -1.706551 -13.637926 -2.1077247 -1.6856037 -13.320055 -2.1423352 -1.647056 -13.243044 -2.213387 -1.6389993 -12.013962 -2.0837097 -1.4849322 -11.552683 -2.0767584 -1.4280401 -11.519238 -2.1437907 -1.4254372 -10.607481 -2.0414343 -1.3111572 -10.356317 -2.0590484 -1.2807901 -10.022724 -2.056695 -1.2398872 -9.5410337 -2.0188811 -1.1800205 -9.3161488 -2.0310698 -1.1528759 -8.7836018 -1.9714329 -1.0863159 -8.6234159 -1.9911156 -1.0673518 -8.4922886 -2.0157866 -1.0521063 -8.5038605 -2.0737369 -1.055205 -8.5102272 -2.1306992 -1.0576839 -8.4499016 -2.1707723 -1.0516105 -8.7309942 -2.300226 -1.0896624 -8.2770195 -2.2349639 -1.0327704 -8.3042727 -2.2970898 -1.0381001 -8.2604256 -2.3396139 -1.0342578 -7.9342775 -2.2998745 -0.99372679 -7.8734026 -2.3346856 -0.98765337 -7.8143001 -2.3694127 -0.9818278 -7.8403683 -2.4299529 -0.98715758 -7.8366623 -2.4816113 -0.98864496 -7.7882447 -2.5189569 -0.98430675 -7.7085724 -2.5455301 -0.9758783 -7.7191358 -2.6016586 -0.97934884 -7.7171021 -2.6538157 -0.98120809 -7.7062907 -2.7030885 -0.98195177 -7.6886258 -2.7499881 -0.9818278 -7.4991488 -2.7342057 -0.95889747 -7.6738324 -2.8513932 -0.98443073 -7.6422725 -2.8931534 -0.98257148 -7.582716 -2.9239197 -0.97699386 -7.1545625 -2.8093021 -0.92196101 -7.1427183 -2.8553596 -0.9227047 -7.1250634 -2.8991327 -0.9227047 -7.4793401 -3.0969763 -0.97302753 -7.3577838 -3.0996487 -0.95914537 -7.2957611 -3.1263611 -0.95331979 -7.2527914 -3.1607578 -0.95009714 -7.200603 -3.1907237 -0.94563502 -7.2143626 -3.2499304 -0.95022112 -7.149178 -3.2734737 -0.94402373 -7.1748371 -3.3386357 -0.95034504 -7.1981702 -3.4033864 -0.95641851 -7.1869903 -3.4522171 -0.95778191 -5.4089541 -2.6388013 -0.71360463 -5.3935499 -2.6723812 -0.71372861 -6.9219184 -3.483088 -0.92976969 -7.0780144 -3.6162651 -0.95468324 -7.0442419 -3.6536856 -0.95307189 -6.9883285 -3.6792684 -0.94836187 -6.9874988 -3.733773 -0.9514606 -6.9984741 -3.7950299 -0.95629454 -6.9715791 -3.8359864 -0.95579875 -6.904593 -3.8545003 -0.94960135 -6.8307371 -3.8684249 -0.94241238 -6.8163362 -3.9157031 -0.94377583 -6.8659096 -4.0004258 -0.95443535 -6.8762569 -4.0631809 -0.95951718 -6.8248119 -4.0894814 -0.95567483 -6.7648249 -4.1101503 -0.95059294 -6.7166691 -4.137526 -0.94724637 -6.6617002 -4.1602602 -0.94290817 -6.6653895 -4.2196383 -0.94724637 -6.7086821 -4.3049469 -0.95753402 -6.6605158 -4.3319602 -0.95431137 -6.5749927 -4.3339643 -0.9455111 -6.5837531 -4.3979321 -0.95084083 -6.5402112 -4.4271193 -0.94836187 -6.5865631 -4.5176907 -0.95951718 -6.6418247 -4.6157928 -0.97215986 -6.4908762 -4.5701799 -0.95344377 -6.4417105 -4.5949359 -0.95022112 -6.4109826 -4.6326313 -0.94984925 -6.3576179 -4.6537085 -0.94600689 -6.3201766 -4.6861281 -0.94464344 -6.3127246 -4.7409115 -0.94799006 -5.4898806 -4.175693 -0.82342243 -5.4594398 -4.2056656 -0.82267874 -10.176337 -7.9405737 -1.5741746 -10.130537 -8.0053263 -1.5746704 -10.085876 -8.0710554 -1.5754141 -10.044641 -8.1396618 -1.5767776 -9.9860716 -8.1942167 -1.5754141 -9.9188156 -8.2413836 -1.5726873 -9.8581896 -8.2937832 -1.5710759 -9.8010721 -8.3489676 -1.5700843 -9.733881 -8.3953381 -1.5674814 -9.6612587 -8.4366283 -1.5640109 -9.5877533 -8.4766874 -1.5604165 -9.5163393 -8.5181484 -1.5571938 -9.4477186 -8.5617189 -1.554467 -9.423521 -8.6456928 -1.5593009 -3.5252962 -3.2733884 -0.56276011 -3.5138187 -3.3031154 -0.56424749 -3.5157633 -3.345825 -0.56808984 -3.5015974 -3.3735321 -0.5692054 -3.4900644 -3.4039631 -0.5708167 -3.5100563 -3.46576 -0.57800567 -3.5483639 -3.546874 -0.58854127 -8.051445 -8.1495628 -1.392839 -8.0033674 -8.200943 -1.3932108 -3.2214954 -3.3408043 -0.541565 -3.1769888 -3.3353546 -0.53722686 -3.1897731 -3.3902056 -0.54330027 -7.7645783 -8.3570805 -1.3867655 -2.6575289 -2.8946235 -0.45269439 -7.6067977 -8.3914433 -1.3766017 -2.6085703 -2.912231 -0.45021543 -2.5913095 -2.9289255 -0.45033938 -2.5772054 -2.9492548 -0.45108306 -2.5707269 -2.9785376 -0.45331413 -2.551759 -2.9934998 -0.45319018 -7.3643284 -8.750782 -1.3904839 -7.2800555 -8.7591715 -1.3845344 -7.2507229 -8.8335915 -1.3893684 -7.2507396 -8.9449835 -1.4001518 -7.8647237 -9.8252392 -1.5338916 -7.8073654 -9.8772039 -1.5345113 -7.7521071 -9.9319639 -1.5356269 -7.6710329 -9.9534044 -1.5315366 -7.6098156 -10.000285 -1.5315366 -7.5423522 -10.038857 -1.530297 -7.4563785 -10.052268 -1.5252153 -7.3863516 -10.086621 -1.5234799 -7.3283911 -10.137383 -1.5243475 -7.2712383 -10.189428 -1.5254631 -7.2074375 -10.232229 -1.5252153 -7.1490488 -10.282779 -1.5262069 -7.0830135 -10.32236 -1.5255871 -7.0056357 -10.345084 -1.5224884 -6.9376173 -10.381275 -1.5214968 -6.8650494 -10.410393 -1.5195136 -6.7929263 -10.439843 -1.5176544 -6.7201653 -10.467966 -1.5156713 -6.6473145 -10.495589 -1.5136881 -6.5817385 -10.534496 -1.5134401 -6.5133324 -10.568769 -1.5125725 -6.4432077 -10.600056 -1.5113331 -6.375495 -10.635135 -1.5107133 -6.3065848 -10.668075 -1.5098457 -6.2290168 -10.685994 -1.506871 -6.1524553 -10.705086 -1.5041441 -6.0812745 -10.733137 -1.5027807 -6.0133677 -10.766784 -1.5022849 -5.9467125 -10.802609 -1.5021609 -5.8538232 -10.790049 -1.4952198 -5.7809582 -10.813512 -1.4934846 -5.6488433 -10.724106 -1.475884 -5.6459966 -10.880116 -1.4929888 -5.5384912 -10.835031 -1.4818335 -5.4241691 -10.773972 -1.4685711 -5.3434167 -10.777712 -1.4644808 -5.2719626 -10.799594 -1.4629934 -5.2030201 -10.826372 -1.4622498 -5.1390381 -10.863476 -1.4629934 -5.0722842 -10.894804 -1.4629934 -4.9983153 -10.910385 -1.4608862 -4.9263844 -10.929993 -1.4593989 -4.8423386 -10.921913 -1.4541931 -4.7764211 -10.954148 -1.4545649 -4.7016902 -10.965921 -1.4522099 -4.6246829 -10.971704 -1.4491112 -4.5458832 -10.972371 -1.4453928 -4.467998 -10.974323 -1.4419223 -4.4016824 -11.004295 -1.4422941 -4.3431478 -11.054187 -1.4453928 -4.2616687 -11.045447 -1.4406828 -4.1864352 -11.051901 -1.4380798 -4.1109376 -11.056917 -1.435353 -1.1622131 -3.1832147 -0.3851428 -3.9856396 -11.13643 -1.4393194 -3.9090192 -11.137267 -1.4362206 -1.1621698 -3.3748426 -0.40770131 -1.1430254 -3.3866115 -0.40832105 -3.6750333 -11.121592 -1.4249414 -3.6094725 -11.152429 -1.426057 -1.0343481 -3.261399 -0.38923308 -1.0090278 -3.2506242 -0.38700202 -0.97351003 -3.2054775 -0.38030884 -0.95495206 -3.2151959 -0.38080463 -0.935206 -3.2209947 -0.38080463 -0.91975272 -3.2419479 -0.38278779 -0.92604208 -3.3422089 -0.39505863 -0.89930695 -3.3248372 -0.39208388 -2.9279709 -11.105327 -1.3964334 -2.8600218 -11.124044 -1.3965573 -2.8006322 -11.176998 -1.4011434 -2.733645 -11.200721 -1.402011 -1.9378986 -8.1558647 -1.0089724 -0.73277074 -3.1671531 -0.36791405 -1.9889715 -8.8528872 -1.0952401 -2.4458897 -11.209172 -1.394946 -2.3692567 -11.187079 -1.390236 -1.7265141 -8.4049034 -1.033638 -1.6735551 -8.4085264 -1.0327704 -1.6211796 -8.4147396 -1.0322746 -1.5767814 -8.4635496 -1.0372325 -2.031127 -11.288673 -1.3945742 -1.9528328 -11.249106 -1.3880049 -1.3616612 -8.137826 -0.99248731 -1.817479 -11.289858 -1.390236 -1.7495358 -11.309624 -1.3913516 -1.2816626 -8.6336374 -1.0521063 -1.6021049 -11.270313 -1.3837907 -1.5317198 -11.271082 -1.3826752 -1.4596007 -11.257635 -1.3798244 -1.388676 -11.251606 -1.3779652 -1.3128027 -11.201768 -1.3706522 -1.2451388 -11.219475 -1.3718917 -1.1801991 -11.264405 -1.3766017 -1.1143661 -11.30501 -1.380816 -1.0470759 -11.334361 -1.3836668 -0.97606295 -11.323766 -1.3815596 -0.90395468 -11.2969 -1.3774694 -0.83484012 -11.305202 -1.3778412 -0.76706266 -11.333873 -1.380816 -0.69531512 -11.302711 -1.3763539 -0.62824935 -11.348377 -1.3815596 -0.5551011 -11.28066 -1.3726354 -0.48681068 -11.305664 -1.3753623 -0.41571569 -11.261832 -1.3695368 -0.34605908 -11.246318 -1.3673056 -0.27728975 -11.258149 -1.3685452 -0.20873487 -11.28841 -1.3721396 -0.14064562 -11.385724 -1.3841625 -0.070623748 -11.360573 -1.38094 -0.00091572758 -11.338963 -1.378213 --0.068664968 -11.339746 -1.378337 --0.13847482 -11.357965 -1.380692 --0.20794393 -11.344995 -1.3792046 --0.27747849 -11.340529 -1.3788328 --0.34681377 -11.330679 -1.3778412 --0.41859677 -11.389818 -1.3855259 --0.48796394 -11.375138 -1.3840386 --0.55336732 -11.282732 -1.3728833 --0.6214906 -11.259309 -1.3704044 --0.69360822 -11.304805 -1.3766017 --0.76577187 -11.341917 -1.3818076 --0.83702958 -11.359765 -1.3846583 --0.91035414 -11.399916 -1.39036 --0.99024898 -11.509785 -1.4048618 --1.0557446 -11.448159 -1.3979207 --1.1257747 -11.43949 -1.3976729 --1.1961516 -11.434341 -1.3979207 --1.2633353 -11.400159 -1.3945742 --1.3348777 -11.40599 -1.3963095 --1.399493 -11.354252 -1.3908558 --1.4700277 -11.35234 -1.3917234 --1.549674 -11.41685 -1.4010195 --1.6318421 -11.492598 -1.4118029 --1.7116483 -11.545187 -1.4197356 --1.7860954 -11.558002 -1.4227103 --1.8561921 -11.541927 -1.4220906 --1.9340146 -11.572405 -1.4274204 --2.0109234 -11.594539 -1.4317585 --2.0872982 -11.61128 -1.435477 --2.1574144 -11.592402 -1.4347333 --2.2328191 -11.601357 -1.437584 --2.312093 -11.628313 -1.4427899 --2.3881893 -11.637236 -1.4457647 --2.4659207 -11.652456 -1.449607 --2.5411792 -11.654557 -1.4518381 --2.6115551 -11.633904 -1.4512184 --2.6846774 -11.625396 -1.4522099 --2.7559588 -11.608705 -1.4522099 --2.8311353 -11.607964 -1.4543171 --2.9112289 -11.625988 -1.4589031 --2.9869564 -11.625205 -1.4611342 --3.0589898 -11.609537 -1.461506 --3.1265438 -11.577138 -1.4597708 --3.1946094 -11.547215 -1.4584073 --3.2737882 -11.556993 -1.4622498 --3.3427043 -11.530016 -1.461382 --3.4212909 -11.535925 -1.4648526 --3.4971948 -11.531807 -1.4670837 --3.5440819 -11.433362 -1.4570439 --3.6090741 -11.39532 -1.4549367 --3.6746495 -11.359743 -1.4532015 --3.7480178 -11.348289 -1.4546889 --3.8156767 -11.319436 -1.4539452 --3.8724697 -11.259216 -1.4491112 --3.9470677 -11.251161 -1.4512184 --4.0143576 -11.222058 -1.4505986 --4.0882397 -11.211199 -1.4524578 --4.1562619 -11.184043 -1.4522099 --4.2304311 -11.173177 -1.4541931 --4.2978373 -11.144232 -1.4538213 --4.3621449 -11.107491 -1.4524578 --4.4261642 -11.070382 -1.4510944 --4.4928851 -11.040258 -1.4507226 --4.5650992 -11.023483 -1.4522099 --1.5188596 -3.6069164 -0.45071122 --1.5448724 -3.6066492 -0.4519507 --4.8045092 -11.02309 -1.463861 --4.913877 -11.087747 -1.4767516 --4.9777408 -11.04834 -1.4755121 --5.027256 -10.977895 -1.4700584 --4.0836201 -8.775218 -1.1708483 --5.1883225 -10.971888 -1.4778671 --1.5642214 -3.2579396 -0.41327897 --1.5907111 -3.2616563 -0.41513819 --1.61422 -3.2589469 -0.41612977 --1.6373093 -3.2551851 -0.4169974 --1.7186687 -3.3652434 -0.43385431 --1.7424841 -3.3608 -0.43472195 --1.766772 -3.3570688 -0.43571353 --5.8537555 -10.953499 -1.5131923 --5.9137578 -10.904291 -1.5113331 --5.9882097 -10.881709 -1.5133163 --6.0500274 -10.836098 -1.5120767 --6.1134682 -10.793591 -1.5113331 --6.1780982 -10.753295 -1.5109612 --6.2804389 -10.777767 -1.5200094 --1.9157344 -3.2432697 -0.43236694 --1.9381495 -3.2357094 -0.43298668 --6.4772429 -10.659492 -1.5198854 --6.5185804 -10.580688 -1.5141839 --6.5807509 -10.536283 -1.5135641 --6.6394367 -10.486485 -1.5122007 --6.7052636 -10.448053 -1.5125725 --6.7762804 -10.417526 -1.5141839 --6.8455358 -10.384036 -1.5154233 --6.9113274 -10.345138 -1.5159191 --6.9724483 -10.299249 -1.5154233 --7.0377579 -10.259546 -1.5159191 --7.1028423 -10.219429 -1.5164149 --7.1642709 -10.174031 -1.516167 --7.2346315 -10.14119 -1.5179023 --7.3176475 -10.125559 -1.5223644 --7.3849149 -10.087673 -1.5234799 --7.4561305 -10.054922 -1.5254631 --7.5266261 -10.020884 -1.5273223 --7.6041946 -9.9958344 -1.530669 --7.6726532 -9.9584188 -1.5321563 --7.7299495 -9.9064598 -1.5314126 --7.7948956 -9.8642931 -1.5322802 --7.8633361 -9.8263493 -1.5338916 --7.9372268 -9.7948751 -1.5366185 --8.0072498 -9.7582617 -1.5386016 --8.0783911 -9.722683 -1.5408326 --8.1468401 -9.6835613 -1.542568 --8.2041731 -9.6311255 -1.542196 --8.2553368 -9.5715885 -1.5407087 --8.315217 -9.5222492 -1.5409566 --8.378089 -9.4762516 -1.5418242 --8.4360771 -9.4246664 -1.5418242 --8.5037422 -9.3837547 -1.5436834 --8.5772619 -9.3489466 -1.5466582 --8.6499977 -9.3128624 -1.549509 --8.7076569 -9.260335 -1.5496329 --8.777998 -9.2211037 -1.5521119 --8.8481855 -9.1813583 -1.5545908 --8.9161358 -9.1389675 -1.556698 --8.9894772 -9.1017351 -1.5597967 --9.0697136 -9.0709629 -1.5641348 --9.1393204 -9.029088 -1.5666138 --9.19526 -8.9735327 -1.5667378 --9.2544346 -8.9210749 -1.5674814 --9.2989378 -8.8545437 -1.5657462 --9.3588762 -8.8027582 -1.5667378 --9.4178019 -8.7498951 -1.5676054 --9.4800863 -8.6999941 -1.5690928 --9.5538769 -8.6603193 -1.5725633 --9.6282768 -8.6207285 -1.5761578 --9.7018051 -8.5798922 -1.5796283 --9.7348356 -8.503231 -1.5764056 --9.7778111 -8.4355612 -1.5749183 --9.7931299 -8.3445196 -1.5689688 --9.7963114 -8.2440252 -1.5611601 --9.7963409 -8.1419048 -1.5529796 --9.7486973 -8.0016985 -1.5372381 --9.8022375 -7.9454794 -1.5379819 --9.8771458 -7.9062653 -1.542196 --10.00566 -7.9088831 -1.5549628 --10.134574 -7.9102187 -1.5677294 --10.254447 -7.9030004 -1.5790086 --10.397511 -7.9120302 -1.5938823 --10.510127 -7.8963571 -1.6039221 --10.620548 -7.8778243 -1.61359 --10.67349 -7.8160267 -1.6143337 --10.738939 -7.763176 -1.6170605 --10.793641 -7.7023239 -1.6181761 --10.83502 -7.6319509 -1.6173085 --10.893867 -7.5738201 -1.6191677 --10.943406 -7.5090795 -1.6196635 --10.997492 -7.4473538 -1.620903 --11.080109 -7.4045415 -1.6264806 --11.13776 -7.3446088 -1.6283399 --11.205906 -7.2912812 -1.6318104 --11.247929 -7.220778 -1.6314385 --11.289508 -7.1500335 -1.6310667 --11.347474 -7.0895643 -1.6331738 --11.400054 -7.0255299 -1.6345372 --11.459907 -6.965755 -1.6370162 --11.508389 -6.8988781 -1.6378838 --11.557338 -6.8321733 -1.6388754 --6.6557264 -3.8802245 -0.92419207 --6.7000585 -3.8511775 -0.92716682 --11.746756 -6.6554527 -1.6482954 --11.794302 -6.587121 -1.649287 --11.846668 -6.5213265 -1.6510223 --11.897799 -6.4546647 -1.6526337 --11.951182 -6.3890233 -1.6546168 --12.005085 -6.3234324 -1.6567239 --7.4106259 -3.845999 -1.0047581 --7.4323177 -3.7995527 -1.0045103 --6.9369788 -3.4928942 -0.93200076 --6.9360538 -3.4392469 -0.92890209 --6.9472165 -3.3918362 -0.92753863 --6.9678979 -3.3491449 -0.92753863 --7.0224037 -3.3224487 -0.93224865 --12.373769 -5.7606707 -1.6667637 --6.6900516 -3.0653718 -0.88105822 --12.479717 -5.6246977 -1.6717216 --12.536674 -5.5580702 -1.6748203 --12.57418 -5.4826283 -1.6753161 --12.579311 -5.3932524 -1.6714737 --12.621311 -5.319819 -1.6727132 --12.744474 -5.2798672 -1.684984 --7.4441514 -3.0311563 -0.96583855 --12.827656 -5.1308126 -1.6875869 --12.846889 -5.0472908 -1.6859756 --12.870211 -4.9655123 -1.684984 --12.878164 -4.8780146 -1.6820092 --12.892041 -4.7930269 -1.6799022 --12.932395 -4.7179127 -1.6813896 --13.117126 -4.6942954 -1.7020888 --13.234633 -4.6449323 -1.7138638 --13.263824 -4.5639615 -1.7139878 --13.283115 -4.4796371 -1.7128723 --13.299988 -4.3946257 -1.7115089 --13.254951 -4.289721 -1.7020888 --13.27913 -4.2077103 -1.7018409 --13.224136 -4.1011748 -1.6913054 --13.192078 -4.0026741 -1.6838685 --13.053715 -3.8733988 -1.6626734 --12.698882 -3.6835182 -1.6134661 --12.731747 -3.6085055 -1.6148295 --13.010906 -3.6015038 -1.6481715 --12.90631 -3.4874461 -1.6318104 --12.759548 -3.363935 -1.6101195 --12.766494 -3.2821226 -1.6083843 --12.94714 -3.2439885 -1.6290835 --13.109475 -3.199291 -1.6474278 --13.136582 -3.1206267 -1.6484194 --13.270535 -3.0665393 -1.6631691 --13.340416 -2.9965768 -1.6697384 --13.393453 -2.9222772 -1.6742005 --13.438313 -2.8457954 -1.6776711 --13.503151 -2.7730629 -1.6837445 --13.514072 -2.6889956 -1.6830008 --13.628732 -2.6249707 -1.6955196 --13.756767 -2.5621817 -1.7097735 --13.839617 -2.4898412 -1.718326 --13.910361 -2.4145446 -1.725391 --14.028658 -2.3464904 -1.7385294 --14.11039 -2.2712433 -1.7470819 --14.156422 -2.1896236 -1.7511722 --14.134254 -2.0974793 -1.7467101 --14.144894 -2.0104346 -1.7464621 --14.489306 -1.9687356 -1.7883565 --14.891788 -1.9304056 -1.8375639 --15.587808 -1.9233994 -1.9237076 --15.728424 -1.8428357 -1.9399447 --15.786776 -1.751542 -1.9458942 --15.84361 -1.6594982 -1.9517198 --15.838681 -1.5607938 -1.9498606 --15.813376 -1.4603888 -1.9455224 --15.85071 -1.3658006 -1.9491169 --15.857803 -1.2684376 -1.948993 --15.853412 -1.1702365 -1.9475056 --15.791982 -1.0683235 -1.9389532 --15.748718 -0.96836424 -1.9327558 --15.869294 -0.87806445 -1.9471338 --15.859517 -0.77994579 -1.9452745 --15.866978 -0.68274665 -1.9456464 --15.796497 -0.58263826 -1.9363502 --15.874162 -0.48798305 -1.9456464 --15.891737 -0.39093679 -1.9475056 --15.882923 -0.29321888 -1.9461422 --15.927089 -0.19628026 -1.9514719 --15.876395 -0.098234303 -1.9450266 --15.869753 -0.00081688107 -1.944159 --15.8129 0.096209824 -1.937094 --15.746526 0.19242904 -1.9289134 --15.781756 0.28972086 -1.9334995 --15.772738 0.38637984 -1.9326319 --15.799825 0.48406607 -1.9363502 --15.790607 0.58078361 -1.9356066 --15.799635 0.67821616 -1.937218 --15.802114 0.77548915 -1.9380856 --15.803002 0.87276322 -1.9388292 --15.782494 0.96879917 -1.93697 --15.762391 1.0646832 -1.9352348 --14.390461 -0.36386102 -1.9309767 --14.444923 -0.2765626 -1.9381605 --14.450312 -0.18797666 -1.9387027 --14.53937 -0.099916063 -1.9507661 --14.276164 -0.010501053 -1.9147117 --14.409712 0.077814609 -1.93301 --14.357446 0.16563658 -1.9259617 --14.425503 0.25495273 -1.9354497 --14.284008 0.34013942 -1.9163382 --14.264816 0.42727423 -1.914034 --14.379751 0.51904309 -1.9301635 --14.400053 0.60826868 -1.9334166 --14.223857 0.68828684 -1.9098321 --14.364793 0.7834776 -1.9297569 --14.319168 0.86914355 -1.9241997 --14.308623 0.95665765 -1.923522 --14.347939 1.0477537 -1.9297569 --14.326424 1.1345984 -1.9277238 --14.333013 1.2236618 -1.9296213 --14.323261 1.3114039 -1.9293503 --14.311987 1.398976 -1.9289436 --14.279483 1.4843086 -1.9256907 --14.264197 1.5712472 -1.9248774 --14.248383 1.6580541 -1.9240642 --14.238925 1.7455698 -1.9241997 --14.212223 1.8308804 -1.922031 --14.203668 1.9184483 -1.9224377 --14.176913 2.003485 -1.9204044 --14.163373 2.0902905 -1.9202689 --14.158114 2.1783612 -1.9213532 --14.140569 2.2645662 -1.9208111 --14.120543 2.3503125 -1.9199978 --14.107809 2.4372478 -1.9202689 --14.089663 2.5232418 -1.9198623 --14.058329 2.6067572 -1.9176936 --14.021635 2.6890502 -1.9148473 --14.012647 2.7765751 -1.9159316 --13.98661 2.8607161 -1.9147117 --14.003694 2.9538431 -1.9195912 --13.971751 3.0367668 -1.9176936 --13.966392 3.1254675 -1.9195912 --13.941157 3.2097712 -1.9187779 --13.892277 3.2884064 -1.9147117 --13.853546 3.369138 -1.9121364 --13.810503 3.4485583 -1.9090189 --13.773727 3.5292988 -1.9068502 --13.747022 3.6124873 -1.9061725 --13.75234 3.7042415 -1.9101032 --13.824862 3.8149068 -1.9236575 --13.766869 3.8899651 -1.9187779 --13.711332 3.9652815 -1.9143051 --13.732347 4.0628285 -1.9208111 --13.67302 4.1366844 -1.9159316 --13.519596 4.1809888 -1.8976333 --13.422832 4.2414775 -1.8874676 --13.493671 4.3551006 -1.9014285 --13.424351 4.423861 -1.8953291 --13.418552 4.5134125 -1.8984466 --13.435588 4.6110983 -1.9049526 --13.398625 4.690505 -1.9037328 --13.363995 4.7706304 -1.9029195 --13.348436 4.8576226 -1.9049526 --13.323024 4.9411578 -1.9056304 --13.297089 5.0245643 -1.9063081 --13.267858 5.106771 -1.9065791 --13.227971 5.1848311 -1.9053593 --13.191308 5.2640629 -1.9046816 --13.157842 5.3445311 -1.904546 --13.107404 5.4179749 -1.9019706 --13.052907 5.4894652 -1.8988532 --13.032642 5.5752978 -1.9008863 --13.008182 5.6595073 -1.9023774 --12.969586 5.7376142 -1.9018351 --12.971185 5.8337469 -1.9073924 --12.969386 5.9288788 -1.9125431 --12.941749 6.0125203 -1.9138985 --12.926116 6.1019664 -1.9171515 --12.911659 6.1923032 -1.9206755 --12.882328 6.2757502 -1.922031 --12.859563 6.3625846 -1.9244708 --12.845955 6.4542685 -1.9284015 --12.74433 6.5014534 -1.9189135 --12.769303 6.6132445 -1.9289436 --12.77058 6.7135997 -1.9354497 --12.727397 6.7908993 -1.9351786 --12.709885 6.8820739 -1.9389738 --12.669155 6.9608846 -1.9392449 --12.638321 7.0452437 -1.9411426 --12.606928 7.1294861 -1.9430401 --12.578415 7.21558 -1.9454799 --12.543324 7.2981043 -1.9469708 --12.502574 7.3774486 -1.9476485 --12.454521 7.452498 -1.9472419 --12.416183 7.5334024 -1.9484618 --12.395041 7.6250181 -1.9525281 --12.358951 7.7077446 -1.9542902 --12.317286 7.7871385 -1.9552389 --12.311818 7.8898315 -1.9621516 --12.273977 7.9722424 -1.9639137 --12.255449 8.0675592 -1.9689287 --12.196651 8.1365576 -1.9674377 --12.173583 8.2295523 -1.9719107 --12.185799 8.3472042 -1.9823475 --12.164469 8.4427195 -1.9873625 --12.138371 8.5354357 -1.9916999 --12.065596 8.5953836 -1.9883113 --12.016645 8.6721544 -1.9889891 --11.972007 8.7521553 -1.9904801 --11.945948 8.8460855 -1.995224 --11.91443 8.9364567 -1.9991548 --11.89172 9.033967 -2.0047121 --11.833709 9.10495 -2.0043054 --11.783871 9.1822605 -2.0053897 --11.757642 9.2783279 -2.0106759 --11.686558 9.3391638 -2.0082362 --11.633655 9.4144354 -2.0090494 --11.594062 9.5007114 -2.0123024 --11.541649 9.5767336 -2.0133867 --11.497083 9.659481 -2.0159621 --11.429296 9.7227821 -2.0144711 --11.400952 9.8198843 -2.0201638 --11.340485 9.8896542 -2.0201638 --11.253593 9.936101 -2.01542 --11.225656 10.034678 -2.0215192 --11.202073 10.137938 -2.0285676 --11.15719 10.222545 -2.0318205 --11.11169 10.306981 -2.0350735 --11.06196 10.387854 -2.0376489 --11.00304 10.460311 -2.0385976 --10.958638 10.546865 -2.042393 --10.908621 10.628426 -2.0452392 --10.835442 10.687507 -2.0437484 --10.785786 10.769892 -2.0468657 --10.709047 10.825304 -2.0448327 --10.661813 10.91065 -2.0486279 --10.615996 10.997963 -2.0528297 --10.550365 11.065045 -2.0532362 --10.493822 11.141833 -2.0555406 --10.427283 11.208189 -2.0559471 --10.38178 11.297491 -2.0606911 --10.324251 11.374185 -2.0631309 --10.267494 11.452073 -2.0658417 --10.204914 11.523758 -2.0674682 --10.145103 11.598835 -2.0697725 --10.085402 11.67436 -2.0722122 --10.024512 11.748837 -2.0745165 --9.964365 11.824519 -2.0770917 --9.9011307 11.89686 -2.0791249 --9.8317213 11.961981 -2.0799382 --9.759388 12.02362 -2.0802093 --9.6872873 12.085595 -2.080616 --9.6154089 12.147915 -2.0811582 --9.544961 12.21215 -2.0821068 --9.4807453 12.284605 -2.0845466 --9.4147978 12.355155 -2.0867152 --9.3513203 12.429317 -2.0895617 --9.3044195 12.526228 -2.0963387 --9.2367601 12.595866 -2.0985076 --9.1598806 12.653108 -2.0986431 --9.0884066 12.71794 -2.1001341 --9.0141973 12.779134 -2.1010828 --8.9254265 12.819567 -2.0986431 --8.876339 12.917369 -2.1058269 --8.8002491 12.976509 -2.1066401 --8.7072353 13.010502 -2.1033871 --8.6048536 13.029787 -2.0978298 --8.4928284 13.033365 -2.0898328 --8.3832264 13.039395 -2.0823779 --8.2531748 13.011943 -2.0696368 --8.1542597 13.032103 -2.0647573 --8.0429192 13.031304 -2.0566249 --7.9205618 13.011015 -2.0455103 --7.8135486 13.01435 -2.0383265 --7.7037644 13.011748 -2.0303295 --7.6008019 13.019414 -2.0240946 --7.5010018 13.03146 -2.0186729 --7.4003625 13.041049 -2.0129802 --7.2950521 13.041249 -2.0059319 --7.1842775 13.030237 -1.9972571 --7.0800643 13.029676 -1.9903445 --6.9831448 13.04143 -1.9854649 --6.8849607 13.049858 -1.9801788 --6.7855663 13.054935 -1.974486 --6.6782417 13.043411 -1.9663534 --6.5735455 13.035488 -1.9588985 --6.4806571 13.049844 -1.9549679 --6.382618 13.052871 -1.9494106 --6.2860751 13.057865 -1.94426 --6.1969252 13.077388 -1.9414136 --6.1031656 13.086432 -1.9370762 --6.0008507 13.07591 -1.9298924 --5.907865 13.084492 -1.9256907 --5.8093705 13.079749 -1.9195912 --5.7056041 13.061582 -1.9115942 --5.6097102 13.059932 -1.9061725 --5.5171356 13.064899 -1.9018351 --5.4224329 13.063733 -1.8966845 --5.3290753 13.064651 -1.8919405 --5.2373853 13.068594 -1.8877387 --5.1429448 13.064529 -1.8824525 --5.0494661 13.061648 -1.8774375 --4.9604363 13.069228 -1.8740489 --4.8704658 13.073423 -1.8702537 --4.7853942 13.090034 -1.8683561 --4.6999679 13.105162 -1.866323 --4.617166 13.127211 -1.8653742 --4.5407314 13.16747 -1.8671362 --4.4785709 13.250461 -1.8751333 --4.4059057 13.304027 -1.8789284 --4.3257194 13.335522 -1.8796061 --4.2486115 13.376922 -1.8817748 --4.1682172 13.408416 -1.882588 --4.0806766 13.416677 -1.8801483 --3.9898012 13.412973 -1.8760821 --3.9043822 13.426737 -1.8745911 --3.8094654 13.406602 -1.8683561 --3.7205079 13.405856 -1.8649676 --3.6412904 13.439908 -1.8665941 --3.5529315 13.439967 -1.8634765 --3.4607513 13.424098 -1.8581904 --3.3746955 13.430667 -1.8561573 --3.2886894 13.436686 -1.8541241 --3.2027366 13.442155 -1.852091 --3.1197493 13.459622 -1.8518199 --3.0351434 13.469813 -1.8506 --2.9484112 13.469793 -1.8480247 --2.8659127 13.4886 -1.8481603 --2.7840941 13.510783 -1.848838 --2.699589 13.519839 -1.8477536 --2.6130087 13.517667 -1.8451784 --2.5283778 13.52468 -1.8439584 --2.4437592 13.531164 -1.8427385 --2.3632395 13.560545 -1.8447716 --2.2809739 13.580653 -1.845585 --2.1958621 13.583634 -1.8440939 --2.112169 13.594894 -1.8438228 --2.0287125 13.607598 -1.8438228 --1.9436384 13.609001 -1.8423319 --1.8563441 13.593184 -1.8385367 --1.7705978 13.586635 -1.836097 --1.685734 13.585444 -1.8344704 --1.6017636 13.590612 -1.8337927 --1.5182331 13.5992 -1.8336571 --1.4336183 13.597421 -1.8321662 --1.3501592 13.605962 -1.8321662 --1.2685772 13.634706 -1.8350126 --1.1848924 13.642234 -1.8350126 --1.1005253 13.641347 -1.8339282 --1.0160664 13.637962 -1.8325728 --0.93250149 13.645917 -1.8328439 --0.84826207 13.643471 -1.8317596 --0.76286811 13.618743 -1.8276933 --0.67914259 13.620198 -1.8272867 --0.59594756 13.633018 -1.8285066 --0.51280683 13.650279 -1.8304042 --0.42925867 13.6601 -1.8313529 --0.34520814 13.653563 -1.8301331 --0.26117805 13.642547 -1.828371 --0.17732199 13.632995 -1.8268801 --0.093777537 13.649678 -1.8290488 --0.010012331 13.636126 -1.8271512 -0.07369481 13.642865 -1.8281 -0.15745008 13.646119 -1.8286421 -0.24110821 13.640934 -1.8281 -0.32489711 13.64316 -1.8286421 -0.4089002 13.650812 -1.8299975 -0.49243805 13.642106 -1.8291843 -0.57626051 13.641797 -1.8295909 -0.65990633 13.637015 -1.8294554 -0.74286795 13.619848 -1.8276933 -0.82792377 13.639757 -1.8310819 -0.91430891 13.674952 -1.8366392 -0.99935371 13.684895 -1.8388078 -1.0821309 13.66369 -1.8367747 -1.1642643 13.637049 -1.8340638 -1.2480081 13.630635 -1.8341993 -1.3332587 13.639484 -1.8365036 -1.4191769 13.652727 -1.8394855 -1.5032471 13.646716 -1.8398921 -1.587068 13.63822 -1.8400277 -1.6713233 13.633142 -1.8407054 -1.7549433 13.622631 -1.8407054 -1.838497 13.611606 -1.8407054 -1.9219817 13.600069 -1.8407054 -2.0066957 13.596842 -1.8419253 -2.0887308 13.575459 -1.8407054 -2.1721456 13.563366 -1.8408409 -2.2527256 13.534145 -1.8386723 -2.3355584 13.519092 -1.8385367 -2.4200377 13.513284 -1.8397566 -2.5052559 13.510844 -1.8415186 -2.5961328 13.537059 -1.847347 -2.6847296 13.549059 -1.8512777 -2.7666235 13.526507 -1.8504645 -2.8538623 13.529635 -1.8533108 -2.9378767 13.51671 -1.8539885 -3.0183787 13.487794 -1.8524976 -3.095747 13.445848 -1.8492446 -3.1672378 13.380321 -1.8427385 -3.2570035 13.392405 -1.8472115 -3.3271163 13.324104 -1.8404343 -3.4033992 13.282324 -1.8374524 -3.4833231 13.255442 -1.8366392 -3.5661373 13.239559 -1.8374524 -3.657584 13.254677 -1.8427385 -3.7493501 13.269169 -1.8480247 -3.8240921 13.223071 -1.8447716 -3.9096525 13.214559 -1.8469404 -4.0058665 13.240582 -1.8541241 -4.0905461 13.227112 -1.8557507 -4.17342 13.207433 -1.8565639 -4.2485995 13.163661 -1.8539885 -4.3258796 13.126993 -1.8524976 -4.4038172 13.09269 -1.8514132 -4.4895363 13.081354 -1.8537174 -4.5772462 13.075068 -1.856835 -4.6613841 13.057935 -1.8584615 -4.7498879 13.052363 -1.86185 -4.8433218 13.059202 -1.8671362 -4.9349165 13.059823 -1.8716091 -5.0252771 13.056112 -1.8755399 -5.1143317 13.048093 -1.8789284 -5.2038441 13.040392 -1.8824525 -5.2964363 13.039427 -1.887061 -5.3831573 13.023165 -1.8895007 -5.4744868 13.017288 -1.8935671 -5.58426 13.053594 -1.9040039 -5.6840124 13.064509 -1.9107809 -5.7744889 13.052945 -1.9143051 -5.8581285 13.0254 -1.915525 -5.9544168 13.025254 -1.9209466 -6.0475836 13.017227 -1.925284 -6.1501799 13.028257 -1.9326034 -6.2467122 13.025116 -1.9378895 -6.3412671 13.016826 -1.942498 -6.4311228 12.998096 -1.9456154 -6.5298824 12.99646 -1.9514438 -6.6284127 12.993217 -1.9571365 -6.7298827 12.994531 -1.9636426 -6.832078 12.995965 -1.9702842 -6.9284811 12.985269 -1.9751637 -7.0297265 12.98259 -1.9813987 -7.1283364 12.973946 -1.9868203 -7.2381997 12.984484 -1.9953595 -7.3513851 12.999333 -2.0047121 -7.455658 12.996953 -2.0114892 -7.557188 12.988642 -2.017453 -7.6508398 12.96592 -2.0212481 -7.7526364 12.956141 -2.0272121 -7.856142 12.948139 -2.0335827 -7.978528 12.969734 -2.0448327 -8.088891 12.970136 -2.0528297 -8.1942635 12.961294 -2.0594711 -8.3062458 12.961658 -2.0677392 -8.4298725 12.978581 -2.0788538 -8.5828896 13.038335 -2.097152 -8.6929693 13.030758 -2.1046069 -8.7833033 12.992769 -2.1071823 -8.8623009 12.937814 -2.1070466 -8.9031057 12.827843 -2.0978298 -8.9457464 12.721913 -2.0892906 -8.9673042 12.587701 -2.0760074 -9.0501699 12.540476 -2.0773628 -9.1351318 12.495907 -2.0792606 -9.2110443 12.438824 -2.0791249 -9.2794657 12.371767 -2.0773628 -9.3342266 12.286983 -2.072619 -9.3852758 12.198069 -2.0671971 -9.4447212 12.120713 -2.0638087 -9.5023441 12.041533 -2.060149 -9.5636806 11.967521 -2.0574381 -9.6363087 11.907844 -2.0573025 -9.6909819 11.826268 -2.0533719 -9.7500782 11.75057 -2.0505254 -9.8086119 11.674594 -2.0476789 -9.8704309 11.602869 -2.045646 -9.9349737 11.53458 -2.0442905 -9.9983988 11.465189 -2.0427995 -10.062658 11.396939 -2.0415797 -10.125135 11.326856 -2.0400887 -10.187133 11.256435 -2.0385976 -10.246639 11.183489 -2.0367 -10.294853 11.098614 -2.0326338 -10.340379 11.011402 -2.0281608 -10.394096 10.933386 -2.02545 -10.446559 10.854412 -2.0226038 -10.501902 10.778754 -2.0204349 -10.555318 10.701416 -2.0179951 -10.612381 10.628035 -2.0163686 -10.668941 10.554357 -2.0147421 -10.727124 10.482462 -2.0135224 -10.780549 10.406122 -2.0114892 -10.833441 10.329523 -2.0094559 -10.88652 10.253345 -2.0075583 -10.944152 10.181629 -2.0066097 -10.999124 10.107582 -2.0052543 -11.052133 10.031911 -2.0036278 -11.095775 9.9480333 -2.0003746 -11.130646 9.8567734 -1.9956306 -11.171527 9.7713318 -1.9921066 -11.214778 9.6883507 -1.9891247 -11.261201 9.6084232 -1.9868203 -11.307066 9.5282907 -1.9845161 -11.350087 9.4460564 -1.9818053 -11.385636 9.3579912 -1.9778745 -11.422072 9.2710953 -1.9742149 -11.458644 9.1847239 -1.9706908 -11.498471 9.1013288 -1.9678444 -11.546293 9.0245028 -1.966489 -11.575566 8.9335098 -1.9620161 -11.646712 8.8749266 -1.9648625 -11.694614 8.7985306 -1.9637781 -11.728498 8.7118378 -1.9603896 -11.776938 8.6361942 -1.9595762 -11.819274 8.5562162 -1.9578142 -11.848981 8.4674034 -1.9540191 -11.869139 8.3722668 -1.9487329 -11.894267 8.2811651 -1.9443955 -11.932608 8.1996107 -1.9423624 -11.977775 8.1229019 -1.9415492 -12.019156 8.0437441 -1.9401937 -12.047618 7.9561944 -1.9368051 -12.079608 7.8713036 -1.9340943 -12.122677 7.7938213 -1.9332811 -12.146845 7.7044315 -1.9294858 -12.193049 7.6292295 -1.9293503 -12.210967 7.5365772 -1.9247419 -12.234978 7.4481149 -1.9212177 -12.253266 7.3565822 -1.9168804 -12.284534 7.2731824 -1.9147117 -12.311818 7.1876783 -1.9120009 -12.349678 7.1085391 -1.911052 -12.392201 7.0321398 -1.9109164 -12.418688 6.9467797 -1.9083412 -12.443726 6.8608813 -1.9056304 -12.456861 6.7687879 -1.9011574 -12.519122 6.7034516 -1.9044105 -12.549502 6.6209617 -1.902784 -12.602199 6.5502319 -1.9046816 -12.601586 6.4520116 -1.8984466 -12.580783 6.3442307 -1.8892297 -12.615924 6.2651544 -1.8886875 -12.628317 6.1750045 -1.8847568 -12.674003 6.1012702 -1.8859767 -12.698667 6.0174489 -1.8840791 -12.721881 5.9331365 -1.8820459 -12.740037 5.8466992 -1.879335 -12.759418 5.7610784 -1.8768953 -12.789095 5.6802664 -1.8760821 -12.810997 5.5961342 -1.8741845 -12.828707 5.5103831 -1.8717446 -12.855887 5.4288659 -1.8707958 -12.883466 5.3476024 -1.8699826 -12.901358 5.2624626 -1.8678139 -12.874546 5.1596122 -1.8591392 -12.945604 5.0961251 -1.8649676 -12.980327 5.0180254 -1.8655097 -13.011799 4.9386368 -1.8656453 -13.01029 4.8469439 -1.8610368 -13.077006 4.7806315 -1.8664585 -13.116352 4.7039819 -1.8679495 -13.192636 4.6401796 -1.8748622 -13.189013 4.548161 -1.8702537 -13.220426 4.4684181 -1.8707958 -13.243833 4.3859692 -1.8702537 -13.26861 4.3040128 -1.8699826 -13.308933 4.227016 -1.8720157 -13.357326 4.1523337 -1.8752688 -13.342741 4.0581865 -1.869576 -13.461405 4.004209 -1.8829947 -13.531386 3.9348166 -1.8895007 -13.535261 3.8460279 -1.8866544 -13.466956 3.7374666 -1.8736422 -13.489635 3.6547644 -1.8736422 -13.51468 3.5726845 -1.8740489 -13.561292 3.4961243 -1.877573 -13.602667 3.4179189 -1.8804194 -13.603173 3.3294432 -1.877573 -13.638767 3.2495875 -1.8797417 -13.669066 3.1683016 -1.8812326 -13.686316 3.0839345 -1.8809615 -13.705949 3.0001106 -1.8810971 -13.740575 2.9194572 -1.8834014 -13.757259 2.8348916 -1.8832659 -13.798684 2.755276 -1.8866544 -13.824085 2.6722496 -1.8878742 -13.851909 2.5895615 -1.8895007 -13.871437 2.5052235 -1.8900429 -13.881667 2.4192121 -1.8893652 -13.887456 2.3325131 -1.8881453 -13.900529 2.2470992 -1.8880098 -13.916013 2.1620691 -1.8882809 -13.955476 2.0805867 -1.8919405 -13.959152 1.9936574 -1.8907206 -13.977012 1.9087726 -1.8915339 -13.988461 1.8229754 -1.8915339 -14.02593 1.7404044 -1.8951936 -14.0452 1.655354 -1.8964134 -14.063955 1.5701327 -1.8976333 -14.10584 1.4872376 -1.9021062 -14.129489 1.4021257 -1.9041394 -14.15065 1.316596 -1.9059014 -14.160437 1.229916 -1.9061725 -14.167717 1.143006 -1.9061725 -14.180391 1.0564948 -1.9069858 -14.202422 0.97054696 -1.9091544 -14.206133 0.8832612 -1.9088833 -14.210296 0.796022 -1.9087478 -14.210954 0.70861679 -1.9082056 -14.206126 0.62101698 -1.9069858 -14.234421 0.5347687 -1.9103743 -14.228522 0.44713756 -1.9091544 -14.194351 0.35889694 -1.9041394 -14.226004 0.27236509 -1.9082056 -14.255146 0.18543245 -1.9120009 -14.256016 0.097961031 -1.9120009 -14.270219 0.010496514 -1.9138985 -14.257135 -0.076994903 -1.9121364 -14.257385 -0.16448499 -1.912272 -14.26007 -0.2520335 -1.9128141 -14.26915 -0.33978602 -1.9143051 -14.24699 -0.4267408 -1.9115942 -14.210439 -0.51293647 -1.9069858 -14.24761 -0.60183364 -1.9125431 -14.257504 -0.68991405 -1.9144406 -14.244098 -0.77689809 -1.9132208 -14.236096 -0.86410356 -1.9128141 -14.238435 -0.95196688 -1.9138985 -14.211575 -1.0377996 -1.911052 -14.228643 -1.1268573 -1.9143051 -14.217512 -1.2138044 -1.9137629 -14.200917 -1.3002058 -1.9125431 -14.222255 -1.3902073 -1.9166093 -14.214442 -1.4775497 -1.9167448 -14.205109 -1.5647399 -1.9167448 -14.177526 -1.6498106 -1.9143051 -14.173036 -1.7374943 -1.9151183 -14.153264 -1.8232867 -1.9138985 -14.138865 -1.9096974 -1.9134918 -14.103336 -1.9930892 -1.9102387 -13.449818 -1.9850014 -1.8215939 -12.98497 -1.9978952 -1.7589732 -12.717128 -2.0366476 -1.7235966 -12.44149 -2.0708885 -1.6871356 -12.292841 -2.1237483 -1.6682951 -12.223989 -2.189182 -1.6605692 -11.225439 -2.0815523 -1.5235356 -10.876756 -2.0860207 -1.4767734 -10.516789 -2.0839803 -1.4283847 -10.274723 -2.1016231 -1.3963966 -9.7555838 -2.0579 -1.3256433 -9.1444426 -1.9876904 -1.2418779 -8.8961601 -1.990975 -1.2088056 -8.7959137 -2.0252969 -1.1964712 -8.5789242 -2.0308533 -1.1677362 -8.2977037 -2.0181401 -1.1299198 -8.1323233 -2.0308552 -1.1083684 -7.8893642 -2.0217006 -1.0758382 -8.039712 -2.1128738 -1.0988804 -7.6831479 -2.0696659 -1.0502206 -7.8107014 -2.1555076 -1.0701454 -7.5170145 -2.1241956 -1.0302958 -7.675159 -2.2198191 -1.0546936 -7.5340843 -2.2292094 -1.0365309 -7.522161 -2.2759695 -1.0368019 -7.4436889 -2.3021786 -1.027585 -7.4464283 -2.3531818 -1.0300248 -7.3290744 -2.3656604 -1.0152507 -7.3802915 -2.432291 -1.0247387 -7.2290611 -2.4317336 -1.005085 -7.2149415 -2.476366 -1.0052205 -7.2042866 -2.5222263 -1.0058982 -7.1588154 -2.5557253 -1.0015608 -6.9586511 -2.5325229 -0.9747234 -7.0470238 -2.6137559 -0.98990417 -6.9604149 -2.6303322 -0.97960293 -6.9589391 -2.6786849 -0.98177159 -6.8934817 -2.7021725 -0.97458786 -7.0092831 -2.7972941 -0.99410599 -6.8423619 -2.7794788 -0.97201252 -6.7848902 -2.8047585 -0.96604866 -6.8113914 -2.8647721 -0.97255468 -6.7463169 -2.8862498 -0.96550649 -6.7121267 -2.9204757 -0.96306676 -6.6786776 -2.9547918 -0.9607625 -6.6721683 -3.0009985 -0.96252453 -6.614882 -3.0241699 -0.95669621 -6.5791292 -3.0567703 -0.95412093 -6.6184874 -3.1245716 -0.96293116 -6.5759635 -3.1539843 -0.95940709 -5.4217191 -2.6415002 -0.78672576 -5.400969 -2.6725209 -0.786048 -6.5628314 -3.2976208 -0.96645528 -6.5142317 -3.3234208 -0.96211791 -6.4910774 -3.3619618 -0.96171129 -6.4536638 -3.3929679 -0.95913601 -6.2849941 -3.3536849 -0.93622929 -6.264298 -3.3921859 -0.93622929 -6.3640666 -3.4968719 -0.95506972 -6.3528752 -3.5416439 -0.95669621 -6.2835908 -3.5537348 -0.9492414 -6.2676835 -3.595674 -0.95019019 -6.232657 -3.6265905 -0.94815701 -6.1565289 -3.6330457 -0.93961787 -6.1188173 -3.6615963 -0.93717808 -6.1114821 -3.7083223 -0.93961787 -6.0421991 -3.717201 -0.932163 -6.0840106 -3.7945743 -0.94259977 -6.0656376 -3.8350103 -0.94341302 -6.0570078 -3.881778 -0.94585282 -6.016458 -3.9080768 -0.94314194 -5.9435382 -3.9127796 -0.93514496 -5.9433203 -3.9651194 -0.93907565 -5.9082079 -3.9942989 -0.93731362 -5.9203715 -4.0556707 -0.94341302 -5.8677006 -4.0727148 -0.93880457 -5.8158545 -4.0898356 -0.93433172 -5.8269639 -4.1513119 -0.94043112 -5.8616385 -4.2304707 -0.95059681 -5.8915601 -4.3072863 -0.9600848 -5.8721862 -4.3486614 -0.96130466 -5.6781516 -4.2591777 -0.93270516 -5.4956985 -4.1752725 -0.90586776 -5.4676204 -4.2071028 -0.90546107 -5.7699485 -4.4963341 -0.96238899 -5.708806 -4.5052624 -0.95656067 -5.6903429 -4.5476279 -0.95818716 -5.6068778 -4.5375848 -0.94842809 -5.6279774 -4.6120915 -0.95710284 -5.613297 -4.6579247 -0.95954263 -5.5777831 -4.6865439 -0.95832276 -5.5315647 -4.7059155 -0.95520526 -5.4838181 -4.7236032 -0.95181668 -5.4046998 -4.7135344 -0.94273531 -5.244957 -4.6311989 -0.91887981 -5.2784915 -4.7187576 -0.93026543 -8.7844353 -7.950078 -1.5824966 -8.7267227 -7.9957972 -1.5808702 -3.5439742 -3.2876914 -0.62299019 -3.5143452 -3.3005581 -0.62122816 -3.4933093 -3.321377 -0.62109262 -3.4828582 -3.3523674 -0.62299019 -3.4239016 -3.3363397 -0.61567092 -3.3822038 -3.3364136 -0.61160463 -3.3532548 -3.3487029 -0.60997814 -3.320102 -3.3565371 -0.60753834 -7.788744 -7.9706812 -1.4862614 -7.7259278 -8.0040655 -1.4835505 -7.6588936 -8.0326767 -1.4800264 -7.5483236 -8.0146093 -1.4678276 -7.4720097 -8.0317593 -1.4624058 -7.3883963 -8.0402508 -1.4554932 -2.5849071 -2.8482277 -0.48785418 -7.1747503 -8.0026941 -1.4320443 -2.5602703 -2.8916016 -0.49002287 -2.5509593 -2.9169512 -0.49178493 -7.1739106 -8.3043394 -1.4629481 -7.1382556 -8.3662901 -1.4662011 -7.1519108 -8.4872093 -1.4800264 -7.0958967 -8.5263634 -1.4792131 -7.0755315 -8.608778 -1.4861258 -7.0494256 -8.6851082 -1.4919542 -7.0245075 -8.7637596 -1.4981891 -7.0136471 -8.8610754 -1.5076771 -7.0396843 -9.0069838 -1.5255687 -7.0242391 -9.1017752 -1.5345145 -6.9778676 -9.1573124 -1.5366832 -6.8965297 -9.1667032 -1.5309905 -6.8549242 -9.2287312 -1.534379 -6.795239 -9.2666235 -1.5337013 -6.7597494 -9.3378372 -1.5387163 -6.6942616 -9.3678532 -1.5368187 -6.6286597 -9.397418 -1.5349212 -6.5425668 -9.3972588 -1.528144 -6.497128 -9.4551907 -1.531126 -6.4412141 -9.4981585 -1.5316682 -6.381711 -9.5358553 -1.5313971 -6.3148899 -9.5624323 -1.5293639 -6.2463603 -9.5860577 -1.5269241 -6.2029629 -9.6483727 -1.5308549 -6.1340923 -9.6711922 -1.5284151 -6.0819931 -9.7204065 -1.5303128 -6.0196333 -9.7533264 -1.5296351 -5.9493704 -9.7731533 -1.5269241 -5.8750114 -9.7856894 -1.523129 -5.8199048 -9.8300791 -1.5244844 -5.7639751 -9.8733053 -1.5257043 -5.7092166 -9.9187908 -1.5273308 -5.6418915 -9.9424324 -1.5255687 -5.5740075 -9.9647579 -1.5236712 -5.5084543 -9.9909639 -1.5224513 -5.4508319 -10.031539 -1.5235356 -5.3891768 -10.064795 -1.5235356 -5.313911 -10.072262 -1.5196048 -5.2428694 -10.087095 -1.516894 -1.375152 -2.6865344 -0.37454054 -5.0950451 -10.103788 -1.5097102 -5.0593958 -10.188103 -1.5178428 -4.9941759 -10.213614 -1.5170295 -4.9296932 -10.240495 -1.5164874 -4.8633718 -10.263388 -1.515403 -4.796536 -10.284954 -1.5141832 -4.729619 -10.306087 -1.5129633 -4.656507 -10.313242 -1.5097102 -4.5939431 -10.343431 -1.5099813 -4.5331669 -10.377779 -1.5109302 -4.4709687 -10.40904 -1.5114723 -4.4043179 -10.429889 -1.5105236 -4.3390989 -10.453972 -1.5101168 -4.2718787 -10.47306 -1.5090325 -4.2016397 -10.48436 -1.5068638 -4.1404963 -10.518241 -1.5080837 -4.0751648 -10.5416 -1.5078126 -4.0037255 -10.548807 -1.5052373 -3.9306221 -10.550893 -1.5019844 -3.8804381 -10.614824 -1.5078126 -1.1653794 -3.2503781 -0.43404377 -3.7462692 -10.651363 -1.5063217 -1.1528616 -3.3440485 -0.4455649 -1.1408875 -3.3764014 -0.44922453 -1.1083115 -3.3475981 -0.44407392 -3.4360497 -10.593076 -1.485177 -1.052151 -3.3137329 -0.43729678 -1.018268 -3.2766056 -0.4310618 -0.98459244 -3.2382412 -0.42469132 -0.96300942 -3.2385237 -0.42387804 -0.94561017 -3.2529337 -0.42509794 -0.95054936 -3.346354 -0.43756786 -0.92204922 -3.323483 -0.43350157 -2.9333808 -10.827331 -1.4962915 -2.871449 -10.862367 -1.4987313 -2.8121655 -10.908563 -1.5027976 -2.7350371 -10.885255 -1.4971048 -1.9982306 -8.1648836 -1.1116215 -0.76579529 -3.21542 -0.41384789 -2.5333169 -10.929893 -1.4965626 -1.9887489 -8.8265944 -1.1994531 -2.3915834 -10.926283 -1.4918187 -2.324702 -10.941721 -1.4919542 -1.7377477 -8.4337683 -1.1396788 -1.677235 -8.4005508 -1.1335794 -1.6258466 -8.4116573 -1.1337149 -1.5789375 -8.4467955 -1.137239 -1.978991 -10.958158 -1.4850415 -1.9122262 -10.973022 -1.4854481 -1.842563 -10.97087 -1.4835505 -1.3106 -8.1084003 -1.0853262 -1.7061214 -10.981885 -1.4820596 -1.294436 -8.6834164 -1.162721 -1.5766926 -11.040247 -1.4873457 -1.5077144 -11.040878 -1.4861258 -1.4355863 -11.016519 -1.4815173 -1.3699157 -11.040852 -1.4836861 -1.3021445 -11.049049 -1.4836861 -1.2350941 -11.063724 -1.4846349 -1.1663537 -11.063211 -1.4835505 -1.0998193 -11.083962 -1.4854481 -1.031146 -11.083596 -1.4844993 -0.96191829 -11.075896 -1.4826018 -0.89505559 -11.095416 -1.4844993 -0.8272531 -11.10465 -1.4850415 -0.75808704 -11.094691 -1.4830084 -0.68845928 -11.074412 -1.4796197 -0.61955249 -11.061611 -1.4773155 -0.55196428 -11.071141 -1.4781288 -0.48376286 -11.068381 -1.4773155 -0.41528109 -11.05629 -1.4752824 -0.34730858 -11.054668 -1.4747403 -0.27804279 -11.000135 -1.4670143 -0.21122576 -11.037296 -1.4718938 -0.14354987 -11.042347 -1.4724361 -0.075717412 -11.032122 -1.470945 -0.0080226455 -11.030397 -1.4706739 --0.059743915 -11.046091 -1.4728427 --0.12754314 -11.047498 -1.4731138 --0.19579887 -11.073254 -1.4767734 --0.2636216 -11.066892 -1.4760957 --0.331018 -11.04823 -1.4737915 --0.39937383 -11.061833 -1.4759601 --0.46611223 -11.032447 -1.4723005 --0.5351373 -11.057089 -1.4760957 --0.60297227 -11.053597 -1.4760957 --0.67366451 -11.097159 -1.4826018 --0.74260157 -11.105668 -1.4843638 --0.81246185 -11.124618 -1.4876168 --0.88054955 -11.117448 -1.4873457 --0.94849557 -11.108874 -1.4869391 --1.015015 -11.085086 -1.4844993 --1.0813745 -11.061886 -1.4821951 --1.1496383 -11.058984 -1.4827373 --1.2240889 -11.111795 -1.4910053 --1.2905291 -11.089314 -1.4889722 --1.3632483 -11.119539 -1.4942584 --1.4349946 -11.138479 -1.4980536 --1.5027816 -11.125538 -1.4975114 --1.567553 -11.091581 -1.4941229 --1.6332662 -11.066072 -1.4919542 --1.6982734 -11.037236 -1.4893788 --1.7622052 -11.003129 -1.4861258 --1.8311497 -11.000905 -1.4873457 --1.9021569 -11.009965 -1.4901921 --1.9684546 -10.991259 -1.4892433 --2.0403738 -11.003328 -1.4926319 --2.1201649 -11.054823 -1.5015777 --2.1925774 -11.06493 -1.5048307 --2.2687664 -11.092037 -1.5105236 --2.3433259 -11.10893 -1.5148609 --2.4110241 -11.092406 -1.5145898 --2.4775262 -11.070636 -1.513641 --2.5474081 -11.063915 -1.5148609 --2.6090858 -11.022044 -1.5112013 --2.6719847 -10.986573 -1.5084903 --2.7424667 -10.982468 -1.5102524 --2.8070974 -10.954876 -1.5087614 --2.8762767 -10.945112 -1.5098457 --2.9459572 -10.936825 -1.5112013 --3.0093195 -10.905171 -1.5093036 --3.0705187 -10.866479 -1.5064572 --3.133008 -10.833158 -1.5044241 --3.1968906 -10.805179 -1.5032042 --3.2616954 -10.780618 -1.5025265 --3.3356853 -10.785958 -1.5061861 --3.404192 -10.772846 -1.5072705 --3.4647515 -10.734783 -1.5048307 --3.5259027 -10.699207 -1.5027976 --3.5936964 -10.683945 -1.5037464 --3.6569328 -10.655133 -1.5027976 --3.7389369 -10.680186 -1.5097102 --3.810394 -10.67384 -1.51215 --3.8778486 -10.655845 -1.5129633 --3.9379911 -10.617915 -1.5109302 --3.9953632 -10.573163 -1.5079482 --4.0583844 -10.543825 -1.5072705 --4.1273422 -10.529795 -1.5088969 --4.191874 -10.504272 -1.5088969 --4.2532654 -10.471009 -1.5078126 --1.497961 -3.6231759 -0.49801987 --1.5259253 -3.6276159 -0.50005305 --4.4569716 -10.418274 -1.511879 --4.5164657 -10.380737 -1.510388 --4.5720592 -10.334707 -1.5076771 --4.6366048 -10.30917 -1.5080837 --4.0337334 -8.8234596 -1.2889112 --4.7615128 -10.2488 -1.5076771 --1.5288742 -3.2379923 -0.45152876 --1.555568 -3.2428441 -0.45369744 --1.6366147 -3.3588288 -0.47280896 --1.6730096 -3.3806927 -0.47768849 --1.6919426 -3.3668222 -0.47714633 --1.7161708 -3.3634379 -0.47823066 --1.7408768 -3.3607626 -0.47945055 --1.7596211 -3.3465097 -0.47890836 --5.3889637 -10.099736 -1.5277374 --5.4201703 -10.009848 -1.5189271 --4.8350563 -8.7997875 -1.3352668 --5.569612 -9.9910431 -1.5265175 --5.6308112 -9.9566803 -1.5265175 --5.7011647 -9.9382725 -1.5290928 --5.7729988 -9.9219437 -1.5320748 --4.8157272 -8.1609478 -1.2580075 --1.9309673 -3.2264311 -0.47606197 --1.9522697 -3.2170634 -0.47646859 --6.0178714 -9.782342 -1.5328881 --6.0856452 -9.757844 -1.5349212 --6.1496391 -9.7270184 -1.5360055 --6.1953092 -9.6674128 -1.5324814 --6.2523518 -9.6258936 -1.5319393 --6.312932 -9.5898314 -1.5323459 --6.371655 -9.5509157 -1.5323459 --6.440681 -9.527236 -1.5349212 --6.5040565 -9.494894 -1.536141 --6.5638885 -9.4572487 -1.5365477 --6.6354704 -9.4362469 -1.5398008 --6.7041674 -9.4106874 -1.542376 --6.7548265 -9.3597326 -1.5407495 --6.8285012 -9.3405056 -1.5445447 --6.8998351 -9.3175411 -1.5477977 --6.9497428 -9.2655172 -1.5461712 --7.0052657 -9.2211227 -1.5459001 --7.0617137 -9.1779652 -1.5459001 --7.1215491 -9.1391516 -1.5467134 --7.1879253 -9.1085052 -1.5490177 --7.2480083 -9.0696478 -1.5499665 --7.3172336 -9.0419483 -1.5529484 --7.3889031 -9.0168056 -1.5564724 --7.447886 -8.975873 -1.5572857 --7.5047326 -8.9322805 -1.5576923 --7.5638924 -8.8913469 -1.5586412 --7.6241255 -8.8515253 -1.5598611 --7.6848054 -8.8120451 -1.5612165 --7.7361073 -8.761755 -1.5606743 --7.8035889 -8.7296343 -1.5635207 --7.8782797 -8.7050962 -1.5678581 --7.949616 -8.6763163 -1.5715177 --8.0242634 -8.6506205 -1.575855 --8.0900774 -8.6149445 -1.5784304 --8.1598511 -8.5830946 -1.5818189 --8.1979351 -8.5178738 -1.5789726 --8.2763186 -8.4943781 -1.5841231 --8.3428936 -8.4582491 -1.5869696 --8.4030361 -8.4153128 -1.5885961 --8.4601479 -8.3691683 -1.5896804 --8.5184269 -8.3240252 -1.5910358 --8.5622129 -8.264719 -1.5896804 --8.6134806 -8.2127104 -1.589816 --8.6680384 -8.1637802 -1.5906292 --8.7339249 -8.125288 -1.5936111 --8.7916412 -8.0789194 -1.5951021 --8.8513174 -8.0341454 -1.5969998 --8.9092999 -7.9876204 -1.5986263 --8.9863281 -7.9577646 -1.6037768 --9.0618334 -7.9259591 -1.6086564 --9.1252899 -7.8831615 -1.6113672 --9.1561537 -7.8122301 -1.6082498 --9.2046738 -7.7565403 -1.6083853 --9.2627554 -7.7087889 -1.6102829 --9.3160048 -7.6568418 -1.6113672 --9.37358 -7.6082773 -1.6132648 --9.4231796 -7.5530977 -1.613807 --9.4910984 -7.5123539 -1.6176022 --9.5479431 -7.4625182 -1.6194998 --9.5998278 -7.4086356 -1.6205841 --9.6529856 -7.355598 -1.6219395 --9.7208967 -7.3135047 -1.6258703 --9.7504768 -7.2424951 -1.6232949 --9.8115101 -7.1948352 -1.6261414 --9.8651028 -7.1414695 -1.6277679 --9.9079304 -7.0802279 -1.6276324 --9.9609022 -7.026154 -1.6292589 --10.037163 -6.9881144 -1.6348162 --10.097816 -6.9387407 -1.6377981 --10.116423 -6.8605242 -1.6338673 --10.181382 -6.8137517 -1.6376625 --10.256068 -6.7729921 -1.6430842 --10.312375 -6.7196712 -1.645524 --10.365079 -6.6637707 -1.6474216 --10.406609 -6.6005769 -1.6475571 --10.458672 -6.5439568 -1.6494547 --10.474178 -6.4645691 -1.645524 --10.528033 -6.4089375 -1.6478282 --10.583299 -6.3539081 -1.6504035 --6.6313596 -3.9259496 -1.0159284 --6.6519012 -3.8831882 -1.0153862 --10.732807 -6.1777992 -1.6558253 --10.791192 -6.1235638 -1.6590782 --10.832886 -6.0596538 -1.6597559 --10.878539 -5.9978542 -1.6611114 --10.924712 -5.9361954 -1.6626023 --10.965298 -5.8713894 -1.66328 --11.003746 -5.8053842 -1.6636868 --7.4814453 -3.8884399 -1.1151456 --11.142946 -5.7051358 -1.6742591 --6.9482746 -3.5036719 -1.0262296 --6.9323726 -3.4424627 -1.0205368 --6.9400139 -3.393333 -1.0185037 --6.9598117 -3.3502562 -1.0183681 --7.0088878 -3.3210659 -1.0227054 --11.400158 -5.3166752 -1.6825272 --6.6502099 -3.0517254 -0.96266007 --6.6543622 -3.0043392 -0.96049142 --11.461681 -5.0906515 -1.6773765 --11.48907 -5.0186415 -1.6768343 --11.506903 -4.9425769 -1.6749368 --11.471297 -4.8441257 -1.6651777 --11.51819 -4.7808652 -1.667753 --11.545474 -4.7093525 -1.6674819 --7.4734058 -2.9948666 -1.0630972 --11.772025 -4.6340985 -1.6924218 --11.805782 -4.5639234 -1.693235 --11.828933 -4.4896402 -1.6925573 --11.844189 -4.412478 -1.6907952 --11.852429 -4.3329163 -1.6880844 --11.768745 -4.2206392 -1.6720903 --11.748625 -4.1322389 -1.6654488 --11.739102 -4.048121 -1.6604337 --11.745887 -3.9699867 -1.6578584 --11.729583 -3.8844459 -1.65203 --11.723981 -3.8029237 -1.6478282 --11.755593 -3.7336147 -1.6490481 --11.78585 -3.6637666 -1.6501324 --11.800526 -3.5890744 -1.6490481 --11.806182 -3.5117974 -1.6467439 --11.824654 -3.4384599 -1.6463373 --11.856965 -3.3690906 -1.6479638 --11.904145 -3.3036935 -1.6517589 --11.949056 -3.2373259 -1.6552831 --11.980189 -3.166986 -1.6569096 --12.032974 -3.1020749 -1.6616535 --12.107514 -3.0421889 -1.669515 --12.16156 -2.9765575 -1.6745301 --12.202725 -2.9073915 -1.6777831 --12.220335 -2.8324623 -1.6777831 --12.237485 -2.7574263 -1.6777831 --12.300631 -2.692457 -1.6842892 --12.445814 -2.6443212 -1.7023164 --12.502561 -2.5763049 -1.7080091 --12.581286 -2.5121541 -1.7168194 --12.690822 -2.4531519 -1.729967 --12.75433 -2.384341 -1.7367442 --12.861344 -2.322768 -1.7496208 --12.938798 -2.2548671 -1.758431 --12.978771 -2.1798654 -1.7620907 --12.679898 -2.0497417 -1.7188525 --12.891956 -2.0029361 -1.7465032 --13.197004 -1.9674863 -1.7870305 --13.605078 -1.9430779 -1.8417897 --14.17138 -1.9353222 -1.9183713 --14.368672 -1.8725356 -1.9439889 --14.407422 -1.7877526 -1.9477841 --14.434848 -1.7012887 -1.9500883 --14.427291 -1.6107069 -1.9476485 --14.421138 -1.5204897 -1.9454799 --14.437098 -1.4326597 -1.9464287 --14.39925 -1.3397331 -1.9400581 --14.445695 -1.2547004 -1.9453443 --14.455097 -1.1661991 -1.9456154 --14.463957 -1.0776296 -1.9458865 --14.459423 -0.9881168 -1.9443955 --14.467192 -0.89949983 -1.9446666 --14.434848 -0.80860716 -1.9395159 --14.466256 -0.72135437 -1.9431757 --14.437745 -0.6311487 -1.9387027 --14.399763 -0.54098505 -1.93301 --14.459257 -0.45439503 -1.9407359 --13.182233 0.97150278 -1.9392607 --13.217429 1.0556799 -1.9454761 --13.170303 1.1332808 -1.9394088 --13.163102 1.2140709 -1.9394088 --13.148516 1.2941366 -1.9383729 --13.141311 1.3748931 -1.9385208 --13.139508 1.4562639 -1.9395567 --13.137201 1.5376644 -1.9405926 --13.144205 1.6203023 -1.9431083 --13.130093 1.7004147 -1.9425163 --13.104712 1.7789506 -1.9402966 --13.080821 1.8575175 -1.9383729 --13.054502 1.9355679 -1.9361532 --13.036516 2.0147254 -1.9352652 --12.991687 2.0894928 -1.9303819 --12.969842 2.167701 -1.92905 --12.953374 2.2467341 -1.928606 --12.950051 2.3280983 -1.9302338 --12.942329 2.4087818 -1.9312698 --12.918565 2.4864659 -1.9299378 --12.896276 2.5643353 -1.928902 --12.872548 2.6418257 -1.9277182 --12.864803 2.722604 -1.92905 --12.851721 2.8023329 -1.929642 --12.836214 2.8815703 -1.9299378 --12.804801 2.9571607 -1.9278661 --12.746964 3.026304 -1.9217988 --12.741606 3.107743 -1.9238707 --12.719419 3.1851447 -1.9234266 --12.709215 3.2655916 -1.9249065 --12.653554 3.3341854 -1.9194312 --12.654818 3.417696 -1.9228348 --12.635515 3.4958079 -1.9231308 --12.606215 3.571115 -1.9219469 --12.600213 3.6530812 -1.9244626 --12.717886 3.7719576 -1.9463639 --12.582828 3.8160434 -1.928902 --12.601684 3.9063592 -1.9355612 --12.519966 3.9653873 -1.9265343 --12.495399 4.0421338 -1.9265343 --12.43186 4.1060081 -1.920467 --12.425176 4.1885309 -1.9234266 --12.360898 4.2515001 -1.9173595 --12.348577 4.3321772 -1.9195791 --12.325487 4.4091978 -1.920171 --12.261966 4.4715252 -1.9143997 --12.255619 4.554605 -1.9178034 --12.229292 4.6304188 -1.9180993 --12.208032 4.7082167 -1.9192832 --12.178913 4.7830353 -1.9192832 --12.14199 4.8547359 -1.9180993 --12.104645 4.9261632 -1.9169154 --12.055916 4.9927731 -1.9139558 --12.005004 5.0582032 -1.9107002 --11.963743 5.1274829 -1.9090724 --11.929337 5.1996088 -1.9086285 --11.883646 5.266696 -1.9064088 --11.874549 5.3500781 -1.9102563 --11.858582 5.4306636 -1.9130679 --11.838486 5.5095849 -1.9152876 --11.839324 5.5986128 -1.921059 --11.790486 5.6642985 -1.9186913 --11.751064 5.7343678 -1.9179513 --11.727178 5.8120732 -1.9198751 --11.715145 5.895927 -1.9238707 --11.704287 5.9807515 -1.9281621 --11.657713 6.0474448 -1.9265343 --11.638762 6.1285391 -1.929642 --11.640189 6.220818 -1.9363011 --11.603539 6.293067 -1.9365971 --11.576836 6.3708229 -1.9386688 --11.556523 6.4523458 -1.9419245 --11.50639 6.5172839 -1.9401486 --11.500484 6.6074734 -1.9460679 --11.463141 6.6799068 -1.9466598 --11.411722 6.7440786 -1.9448841 --11.388788 6.8251586 -1.9481397 --11.34416 6.8933697 -1.9476957 --11.306702 6.9659595 -1.9485836 --11.273811 7.0414929 -1.9503595 --11.235407 7.1137099 -1.9512473 --11.203198 7.1899943 -1.9533191 --11.16799 7.264533 -1.9549469 --11.147149 7.3487101 -1.9592383 --11.115005 7.4257607 -1.961606 --11.090524 7.5082388 -1.9654536 --11.051585 7.581183 -1.9667854 --11.026785 7.6640935 -1.970781 --11.00866 7.75211 -1.9761083 --10.963302 7.8212352 -1.9765522 --10.928731 7.8982067 -1.9790679 --10.880063 7.9651155 -1.9790679 --10.850844 8.0464535 -1.9827675 --10.801268 8.1128817 -1.9827675 --10.778045 8.1993656 -1.9877988 --10.735365 8.2713804 -1.9892787 --10.721834 8.3663025 -1.9963818 --10.657107 8.4215078 -1.9938661 --10.628397 8.5052795 -1.9983056 --10.579851 8.5734482 -1.9990455 --10.528576 8.6394587 -1.9993415 --10.482212 8.7095871 -2.0006733 --10.435385 8.7794714 -2.0020051 --10.409172 8.8670673 -2.0074804 --10.372541 8.9462738 -2.0110321 --10.312984 9.005847 -2.0101442 --10.264939 9.0755081 -2.0116239 --10.216428 9.1449184 -2.0131037 --10.16965 9.2160673 -2.0150275 --10.138413 9.3016968 -2.0202069 --10.093467 9.3751736 -2.0227227 --10.043676 9.4443827 -2.0243504 --9.9798079 9.5003757 -2.0231667 --9.9298706 9.5696678 -2.0249424 --9.8773365 9.6366329 -2.0262742 --9.8194284 9.6984472 -2.0265701 --9.7660284 9.7648096 -2.0279019 --9.7205238 9.839325 -2.0310097 --9.6668749 9.9058628 -2.0324895 --9.6072845 9.9664154 -2.0327854 --9.5609531 10.040935 -2.036041 --9.5133915 10.11454 -2.0391486 --9.4524965 10.174172 -2.0394447 --9.4119558 10.256028 -2.044328 --9.3568192 10.322379 -2.0461037 --9.2959442 10.382545 -2.0466957 --9.2320633 10.439388 -2.0466957 --9.1684847 10.496584 -2.0468438 --9.1103659 10.560131 -2.0483234 --9.0492468 10.62035 -2.0492115 --8.9909153 10.683999 -2.0508392 --8.9264545 10.740487 -2.0511351 --8.8798332 10.818756 -2.0557227 --8.8288507 10.892247 -2.0594223 --8.7698851 10.956253 -2.0613458 --8.7098522 11.019169 -2.0631218 --8.6518106 11.084879 -2.0654895 --8.5763884 11.128356 -2.0637136 --8.528904 11.208318 -2.068893 --8.470068 11.273882 -2.0714087 --8.4001436 11.324847 -2.0712607 --8.3334188 11.380166 -2.0720007 --8.2744417 11.446314 -2.0748122 --8.2235832 11.524242 -2.0798438 --8.1663837 11.593891 -2.0833952 --8.1024294 11.654338 -2.085319 --8.0358019 11.711173 -2.0866508 --7.9710007 11.770905 -2.0885746 --7.9030213 11.826172 -2.0897584 --7.835752 11.882698 -2.0912383 --7.7702441 11.94216 -2.0933101 --7.7037668 12.000432 -2.0952339 --7.6373959 12.059174 -2.0973055 --7.5695457 12.115874 -2.0990813 --7.5018058 12.173038 -2.1010051 --7.4310813 12.2256 -2.1021891 --7.3599939 12.277753 -2.1033728 --7.2890496 12.330344 -2.1047046 --7.2187324 12.384236 -2.1063325 --7.1445789 12.431726 -2.1069243 --7.0710897 12.480494 -2.1078122 --6.9982352 12.530555 -2.1089962 --6.9274163 12.584522 -2.11092 --6.8477111 12.622445 -2.1101799 --6.7682676 12.660735 -2.1095881 --6.7134967 12.745779 -2.1169872 --6.6734214 12.860475 -2.1294177 --6.5948353 12.902061 -2.1295657 --6.5093207 12.929914 -2.1274939 --6.4254699 12.960751 -2.126014 --6.3371477 12.982157 -2.1230545 --6.2440939 12.993162 -2.1184671 --6.1486073 12.998151 -2.1129916 --6.0595551 13.015907 -2.109736 --5.9672217 13.025868 -2.1052966 --5.8697133 13.023465 -2.0989335 --5.7732615 13.022165 -2.0928662 --5.6758614 13.017454 -2.086355 --5.5767884 13.007495 -2.0791037 --5.4761324 12.992254 -2.0711126 --5.3872275 13.003681 -2.0675611 --5.303236 13.026416 -2.0659335 --5.209621 13.024734 -2.0604579 --5.1097183 13.005825 -2.052319 --5.0269723 13.029551 -2.0511351 --4.9357224 13.030554 -2.0463998 --4.8408589 13.020732 -2.0400364 --4.7486749 13.016741 -2.0347092 --4.6597214 13.020492 -2.0307136 --4.5735197 13.031107 -2.0279019 --4.4851122 13.034609 -2.0240545 --4.3946218 13.030957 -2.019171 --4.3074479 13.036077 -2.0157676 --4.2179413 13.033092 -2.0111799 --4.126842 13.023844 -2.0057046 --4.0366011 13.015859 -2.0005252 --3.9509199 13.021453 -1.9975656 --3.8656034 13.027435 -1.994754 --3.780638 13.033812 -1.9920903 --3.6960099 13.040587 -1.9895747 --3.6095946 13.040145 -1.9860231 --3.5199714 13.026721 -1.9805478 --3.4377062 13.039467 -1.9792159 --3.3524635 13.040199 -1.9761083 --3.2680621 13.043256 -1.9734446 --3.1823432 13.040003 -1.969893 --3.0977015 13.040039 -1.9669334 --3.010731 13.028929 -1.962346 --2.9270468 13.030753 -1.9598303 --2.8424001 13.027209 -1.9565747 --2.7628229 13.04634 -1.9568707 --2.681129 13.055296 -1.9556868 --2.5973072 13.053072 -1.9528751 --2.5160444 13.062936 -1.9519873 --2.4333103 13.064516 -1.9499154 --2.346976 13.045133 -1.9447361 --2.2640145 13.042723 -1.9422204 --2.1805186 13.035884 -1.9391128 --2.0981345 13.034371 -1.936893 --2.0173621 13.042113 -1.9361532 --1.9399109 13.071856 -1.9388168 --1.8595279 13.082533 -1.9386688 --1.7765585 13.074097 -1.9357092 --1.6932544 13.061213 -1.9321576 --1.6118701 13.061541 -1.9306778 --1.5336509 13.087884 -1.9331934 --1.4521173 13.086235 -1.9315656 --1.370456 13.082111 -1.929642 --1.2896752 13.085353 -1.928902 --1.2075433 13.073324 -1.9259424 --1.1257771 13.062751 -1.9232787 --1.0437924 13.046739 -1.9198751 --0.96422863 13.059801 -1.920911 --0.88354361 13.057578 -1.9197271 --0.80219471 13.043011 -1.9167675 --0.72149438 13.035838 -1.9149917 --0.64115489 13.033105 -1.9139558 --0.56079119 13.027901 -1.912624 --0.480661 13.026155 -1.9118841 --0.40054309 13.022928 -1.9109962 --0.32070112 13.028107 -1.9114401 --0.24095613 13.040706 -1.9130679 --0.16098379 13.045895 -1.9136598 --0.080926605 13.045648 -1.9135119 --0.00087844487 13.047877 -1.9138079 -0.079212286 13.052582 -1.9145478 -0.15921482 13.044928 -1.9135119 -0.239254 13.043705 -1.9135119 -0.31928417 13.041991 -1.9135119 -0.39921123 13.036821 -1.9130679 -0.47930542 13.037091 -1.9135119 -0.5595029 13.038845 -1.9142518 -0.63983709 13.042081 -1.9152876 -0.72034121 13.046797 -1.9166195 -0.80092728 13.051016 -1.9179513 -0.88132536 13.050789 -1.9186913 -0.9624058 13.058945 -1.920763 -1.0436982 13.067581 -1.9229827 -1.1237749 13.059945 -1.9228348 -1.2053428 13.068562 -1.9252025 -1.2854103 13.059935 -1.9250544 -1.3640784 13.038032 -1.9229827 -1.4460151 13.04711 -1.9256464 -1.5269639 13.04585 -1.9268303 -1.6075884 13.041142 -1.9275702 -1.6868144 13.025148 -1.9266822 -1.7664373 13.012593 -1.9263864 -1.8479174 13.013259 -1.9281621 -1.9296173 13.014394 -1.9300859 -2.0124586 13.021856 -1.9330455 -2.0937355 13.01805 -1.9343773 -2.1779773 13.031296 -1.9383729 -2.2584021 13.02061 -1.9388168 -2.3422794 13.028894 -1.9422204 -2.4256189 13.032751 -1.945032 -2.5074108 13.027333 -1.9465119 -2.5925078 13.037892 -1.9505074 -2.6722591 13.020771 -1.9503595 -2.7543561 13.014772 -1.9519873 -2.838588 13.017919 -1.9550948 -2.9218783 13.015696 -1.9574625 -3.0043576 13.009086 -1.9592383 -3.0870943 13.002915 -1.9611621 -3.1672895 12.98565 -1.9614581 -3.2555602 13.000507 -1.9667854 -3.3394539 12.996571 -1.9693011 -3.4294717 13.015045 -1.9753684 -3.5159726 13.01858 -1.9792159 -3.6037009 13.025357 -1.9836553 -3.6892176 13.022982 -1.986763 -3.7748406 13.020047 -1.9898707 -3.8616915 13.020344 -1.9935702 -3.9492619 13.021956 -1.9975656 -4.0331898 13.010703 -1.9996374 -4.1165304 12.997025 -2.0014131 -4.2007685 12.985636 -2.003633 -4.2906055 12.990605 -2.0085163 -4.3854022 13.009017 -2.0156195 -4.4735069 13.006179 -2.0194671 -4.5623965 13.004615 -2.0236106 -4.6511021 13.001517 -2.027606 -4.7358737 12.98667 -2.0298257 -4.8230505 12.977761 -2.0330813 -4.9137988 12.97752 -2.0378168 -5.0146923 13.002487 -2.0466957 -5.1052279 12.999088 -2.0511351 -5.1948085 12.992312 -2.0551307 -5.285243 12.986757 -2.0594223 -5.3735342 12.975098 -2.0628257 -5.4653378 12.971045 -2.0675611 -5.5685935 12.992715 -2.0765882 -5.6711349 13.010883 -2.085171 -5.7620835 13.001157 -2.0893145 -5.8527203 12.989902 -2.0933101 -5.9446702 12.980721 -2.0977495 -6.0421538 12.982553 -2.1041126 -6.1394596 12.982784 -2.110328 -6.2327123 12.973394 -2.1150634 -6.3269477 12.965125 -2.1200948 -6.4362502 12.986314 -2.1301575 -6.5162559 12.947461 -2.1303055 -6.5789242 12.874651 -2.1248302 -6.6108823 12.743622 -2.1095881 -6.6714387 12.669566 -2.1039648 -6.7248082 12.583038 -2.0962696 -6.8094349 12.555448 -2.0986373 -6.8367486 12.423323 -2.0832472 -6.935029 12.420859 -2.0900545 -6.9764996 12.316978 -2.0795476 -7.0682049 12.302236 -2.0844312 -7.1301107 12.235564 -2.0804355 -7.1990137 12.181368 -2.0786598 -7.2614183 12.116608 -2.0751083 -7.3525786 12.099714 -2.0799916 -7.4220128 12.046794 -2.0786598 -7.502079 12.011091 -2.0804355 -7.5703449 11.956478 -2.0789559 -7.6307445 11.889828 -2.0754042 -7.6927686 11.826202 -2.0724447 -7.7564774 11.765568 -2.0700769 -7.8208308 11.706242 -2.0680051 -7.880867 11.640836 -2.0648975 -7.9443121 11.580844 -2.0628257 -8.0112696 11.526196 -2.06179 -8.067605 11.456609 -2.0580902 -8.133729 11.401256 -2.0570545 -8.1977386 11.343118 -2.0555747 -8.2636786 11.287816 -2.0546868 -8.32866 11.231339 -2.0536509 -8.3902893 11.170534 -2.0518751 -8.4550791 11.11412 -2.0509872 -8.5164747 11.053414 -2.0493593 -8.5707502 10.983798 -2.0461037 -8.6232662 10.91238 -2.0425522 -8.6702852 10.834556 -2.0378168 -8.7278833 10.770395 -2.0357451 -8.7781191 10.697527 -2.0320456 -8.8328466 10.630533 -2.0295298 -8.8947248 10.572352 -2.02879 -8.9555798 10.51306 -2.0279019 -9.0115204 10.448176 -2.0259783 -9.0715561 10.388216 -2.0250902 -9.1331606 10.330136 -2.0246463 -9.1943941 10.271691 -2.0242023 -9.2506046 10.207754 -2.0227227 -9.3077154 10.144972 -2.0215387 -9.3630571 10.080424 -2.0200589 -9.4037285 10.00045 -2.0154715 -9.4410448 9.9174929 -2.0102921 -9.4934835 9.850832 -2.0085163 -9.5496044 9.7881489 -2.0076284 -9.6094837 9.7293692 -2.0076284 -9.6641054 9.665328 -2.0065925 -9.701417 9.5843039 -2.0020051 -9.7465925 9.5114737 -1.9991934 -9.7919531 9.4391365 -1.9965298 -9.8432398 9.3727398 -1.995198 -9.8940802 9.3060684 -1.9938661 -9.9444733 9.2391262 -1.9925343 -9.996604 9.1739225 -1.9916464 -10.04318 9.1037779 -1.9897226 -10.084113 9.0287905 -1.986763 -10.121541 8.9510221 -1.9832114 -10.177018 8.8893995 -1.9833595 -10.226129 8.8222656 -1.9823235 -10.264258 8.7458849 -1.9792159 -10.301081 8.6687317 -1.9759603 -10.343428 8.5965137 -1.9738885 -10.386806 8.5253572 -1.9721128 -10.438921 8.4614639 -1.9721128 -10.48215 8.3904552 -1.970485 -10.5249 8.3192348 -1.9688572 -10.56951 8.2496309 -1.9676733 -10.612096 8.178586 -1.9661934 -10.647124 8.1019402 -1.9633818 -10.680821 8.0245781 -1.9604222 -10.718738 7.9506431 -1.9583504 -10.75136 7.8730397 -1.9553908 -10.781832 7.7941771 -1.9521352 -10.807715 7.7123652 -1.9481397 -10.841897 7.6367941 -1.9457719 -10.87637 7.5616584 -1.9435523 -10.90136 7.4802332 -1.9397047 -10.933949 7.4043317 -1.937337 -10.975063 7.3343554 -1.9365971 -11.000869 7.254355 -1.9331934 -11.03191 7.1780896 -1.9308258 -11.0591 7.0995798 -1.9278661 -11.072373 7.0125413 -1.9225388 -11.112677 6.9428988 -1.9220948 -11.150859 6.8719883 -1.9213549 -11.191969 6.8029246 -1.921207 -11.217383 6.7244639 -1.9183953 -11.243958 6.6469541 -1.9158796 -11.276841 6.5733557 -1.9145478 -11.309245 6.4996042 -1.9132159 -11.341168 6.4257026 -1.9118841 -11.371747 6.3511715 -1.9104042 -11.380177 6.2645864 -1.9052249 -11.409709 6.1899257 -1.9037451 -11.433519 6.1123414 -1.9013773 -11.448057 6.0300903 -1.8975298 -11.46465 5.9492574 -1.8941263 -11.50182 5.8792496 -1.8942742 -11.539444 5.8094544 -1.8945702 -11.544745 5.7236071 -1.8895388 -11.566316 5.6461558 -1.8873191 -11.601633 5.5755081 -1.887467 -11.629367 5.5012569 -1.8864312 -11.648558 5.4231195 -1.8840635 -11.671722 5.3470135 -1.8824357 -11.706115 5.2761092 -1.8827317 -11.732843 5.2017779 -1.8818437 -11.757287 5.1265268 -1.8806598 -11.801248 5.0597439 -1.8827317 -11.833895 4.9880056 -1.8830276 -11.877069 4.9205985 -1.8850993 -11.909786 4.8487482 -1.8855432 -11.96778 4.7869635 -1.8901308 -12.004292 4.7163329 -1.8913146 -12.016396 4.6361804 -1.8886509 -12.050165 4.5644636 -1.8895388 -12.091851 4.4956079 -1.8917586 -12.105271 4.4162459 -1.8895388 -12.134934 4.3428855 -1.8899827 -12.145489 4.2627788 -1.887467 -12.195731 4.1965399 -1.8913146 -12.24468 4.129528 -1.8950142 -12.392808 4.0949559 -1.9143997 -12.324545 3.9886982 -1.8997495 -12.320502 3.9040413 -1.89531 -12.290381 3.8116772 -1.8868752 -12.340984 3.744518 -1.8911666 -12.360883 3.6678808 -1.8907226 -12.391705 3.5944457 -1.8920544 -12.424945 3.5215793 -1.8938303 -12.412958 3.4360435 -1.8886509 -12.465315 3.368325 -1.8935343 -12.502962 3.2963126 -1.896198 -12.543068 3.2247033 -1.8993056 -12.556862 3.1462381 -1.8984177 -12.549027 3.0625684 -1.8942742 -12.573357 2.9868822 -1.8951621 -12.608792 2.9136839 -1.8978258 -12.618713 2.8345296 -1.896642 -12.605913 2.7505162 -1.8920544 -12.643839 2.6776218 -1.89531 -12.672625 2.6025755 -1.8972338 -12.684475 2.5239973 -1.896642 -12.717204 2.4494846 -1.8993056 -12.727133 2.3705022 -1.8985656 -12.755066 2.2948158 -1.9006375 -12.788395 2.2198901 -1.9035971 -12.799825 2.1410542 -1.9033011 -12.809792 2.0620043 -1.9028572 -12.811452 1.981704 -1.9012294 -12.840001 1.9055238 -1.9037451 -12.859284 1.8278158 -1.9049289 -12.880057 1.7502091 -1.9064088 -12.903304 1.6727974 -1.9083325 -12.91627 1.5939559 -1.9087764 -12.930719 1.5152482 -1.9095163 -12.943705 1.4363142 -1.9101083 -12.951291 1.3567631 -1.9099603 -12.958387 1.277173 -1.9098123 -12.974843 1.1984557 -1.9111441 -12.978011 1.1184816 -1.9105523 -12.999417 1.0400108 -1.9127719 -13.019362 0.96124655 -1.9148437 -13.029949 0.88167655 -1.9155836 -13.03314 0.80158848 -1.9152876 -13.0388 0.72165811 -1.9154357 -13.06669 0.64280409 -1.9189873 -13.037782 0.56121564 -1.9141039 -13.061734 0.48197073 -1.9172114 -13.064445 0.40181634 -1.9172114 -13.067655 0.3216711 -1.9173595 -13.074327 0.24157433 -1.9180993 -13.073585 0.161323 -1.9178034 -13.080262 0.081138238 -1.9186913 -13.074579 0.00087786233 -1.9178034 -13.080273 -0.079382807 -1.9186913 -13.06075 -0.15940936 -1.9158796 -13.06447 -0.23963673 -1.9166195 -13.063743 -0.31981862 -1.9167675 -13.079328 -0.40051666 -1.9194312 -13.087496 -0.48116302 -1.921059 -13.097141 -0.56200963 -1.9229827 -13.086533 -0.64202178 -1.9219469 -13.109009 -0.72378159 -1.9259424 -13.107282 -0.80438536 -1.9263864 -13.103086 -0.88486171 -1.9265343 -13.092479 -0.96488017 -1.9257944 -13.099128 -1.0462207 -1.9277182 -13.075711 -1.1251329 -1.9252025 -13.061667 -1.2047063 -1.9241666 -13.063872 -1.2857981 -1.9256464 -13.037048 -1.3639754 -1.9228348 -13.036297 -1.4448158 -1.9240186 -13.017364 -1.5236272 -1.9225388 -13.012677 -1.604077 -1.9232787 -13.006514 -1.6843995 -1.9238707 -12.983193 -1.7624437 -1.9219469 -12.972135 -1.8420739 -1.9219469 -12.933196 -1.9175709 -1.9178034 -12.873295 -1.9894857 -1.9105523 -12.293541 -1.9771446 -1.8245747 -11.941723 -1.9957738 -1.7730769 -11.75483 -2.0387402 -1.7465881 -11.495836 -2.0665338 -1.7091488 -11.303069 -2.1035385 -1.681772 -11.137479 -2.1434929 -1.6585388 -11.005779 -2.1882493 -1.640485 -10.277185 -2.1089416 -1.5312743 -8.9027205 -1.8837343 -1.3230636 -9.0629892 -1.9758447 -1.3494045 -9.0873642 -2.0396519 -1.3550277 -8.9185734 -2.0593071 -1.3310547 -8.4342804 -2.0020094 -1.2585435 -8.3142281 -2.0274668 -1.2419695 -8.292037 -2.0760405 -1.2404896 -7.941021 -2.039969 -1.188252 -7.576427 -1.9958901 -1.1337945 -7.5392141 -2.0356343 -1.1299471 -7.3073549 -2.0211823 -1.0959111 -7.2453365 -2.05196 -1.0882162 -7.1927156 -2.0848081 -1.0820009 -6.7104578 -1.9896605 -1.0087498 -6.7426038 -2.0442917 -1.015705 -6.761106 -2.0952911 -1.0205884 -6.6783547 -2.1146331 -1.0096377 -6.685955 -2.1622696 -1.0128933 -6.6396942 -2.1923945 -1.0077139 -6.5577054 -2.2100251 -0.99691123 -6.5449567 -2.2505426 -0.99705923 -6.5515547 -2.297864 -1.0003148 -6.5326762 -2.3363543 -0.9995749 -6.4866276 -2.3648713 -0.99454349 -6.453455 -2.3977358 -0.99158388 -6.4145741 -2.4281809 -0.98773634 -6.4918256 -2.5030897 -1.0025345 -6.4597754 -2.5363667 -0.99987084 -6.4000139 -2.5583274 -0.99276775 -6.3063354 -2.5658545 -0.98018926 -6.2155495 -2.5734649 -0.96805471 -6.2506785 -2.6330633 -0.97634172 -6.3080325 -2.7029309 -0.98832828 -6.158062 -2.6834843 -0.96657491 -6.119781 -2.7115998 -0.96302336 -6.1210608 -2.757226 -0.96598297 -6.1031284 -2.7943203 -0.96583498 -6.2167726 -2.8926523 -0.98744035 -6.0138426 -2.8432097 -0.95680809 -5.9882612 -2.8762014 -0.95547628 -5.4239063 -2.6460996 -0.86446732 -5.4022517 -2.6766946 -0.86357939 -5.9316549 -2.9846044 -0.95503229 -5.9396491 -3.034447 -0.95947176 -5.9332085 -3.0772116 -0.9615435 -5.9098401 -3.1112547 -0.96080363 -5.9080825 -3.1567829 -0.96376324 -5.8912096 -3.1943893 -0.96420717 -5.8359756 -3.2109244 -0.95813996 -5.8187542 -3.2481194 -0.95858389 -5.8228083 -3.2974112 -0.96272737 -5.8033237 -3.33357 -0.96287537 -5.7989945 -3.3785779 -0.96568704 -5.796885 -3.4251678 -0.96894264 -5.8690696 -3.516603 -0.98522067 -5.7130051 -3.4708774 -0.9616915 -5.7336988 -3.5318081 -0.96909058 -5.7052102 -3.562731 -0.96790677 -5.3264666 -3.3717339 -0.9047184 -5.6910224 -3.6517072 -0.97323412 -5.6179409 -3.6536582 -0.96420717 -5.6251402 -3.7076595 -0.96953458 -5.5619917 -3.7151806 -0.96228343 -5.5046968 -3.7259493 -0.95606816 -5.5004873 -3.7725244 -0.95947176 -5.5292072 -3.8423326 -0.96894264 -5.5378699 -3.8989663 -0.97486192 -5.4856648 -3.9127672 -0.96968251 -5.4014392 -3.9029005 -0.95858389 -5.3470678 -3.9137673 -0.95296055 -5.3674364 -3.9794955 -0.96124756 -5.3642669 -4.0283933 -0.96524304 -5.3378744 -4.0600343 -0.9649471 -5.3825817 -4.1464376 -0.97811753 -5.2673783 -4.1094117 -0.96109957 -5.3134475 -4.1980734 -0.97471392 -5.2821836 -4.2262712 -0.97367805 -5.2699823 -4.2698116 -0.97634172 -5.3094296 -4.3560257 -0.98906815 -5.2787986 -4.3853612 -0.98832828 -5.2003336 -4.3743691 -0.97826546 -5.1613503 -4.3959332 -0.97589779 -5.1125631 -4.4087858 -0.97160631 -5.1271286 -4.4765053 -0.97989327 -5.1758747 -4.5753598 -0.99513543 -5.1852822 -4.6406755 -1.0026826 -5.0445948 -4.570785 -0.98004127 -5.0375862 -4.6210432 -0.98433274 -3.5440502 -3.2908106 -0.68511307 -3.5237916 -3.3124945 -0.68511307 -3.5112789 -3.3415554 -0.68674088 -3.4964058 -3.3685281 -0.68792474 -3.4544361 -3.3691971 -0.68348527 -4.7796545 -4.7199273 -0.96657491 -7.7275505 -7.726243 -1.5965344 -7.6737428 -7.7671804 -1.5952026 -7.6390624 -7.8275685 -1.5980142 -2.6665773 -2.7650459 -0.5362432 -2.6625178 -2.7949653 -0.53905481 -2.641253 -2.8069267 -0.53816694 -2.6226339 -2.8216312 -0.537871 -7.2462535 -7.8957076 -1.5650142 -2.6137125 -2.8821819 -0.54364228 -2.6071925 -2.910692 -0.54615796 -7.0636611 -7.987 -1.5568752 -7.0522523 -8.0733967 -1.5654582 -7.0303588 -8.1487179 -1.5718213 -6.998826 -8.2135344 -1.5761129 -6.9330158 -8.238162 -1.5725613 -6.8728557 -8.2691374 -1.5703416 -6.8257523 -8.3157396 -1.5712295 -6.7689948 -8.3505497 -1.5698977 -6.7058883 -8.3772554 -1.567086 -6.6463885 -8.4081573 -1.5651622 -6.586762 -8.4386444 -1.5632384 -6.5270123 -8.4687176 -1.5613147 -6.4845076 -8.5212002 -1.5636824 -6.4303184 -8.5584555 -1.5632384 -6.3829856 -8.6048994 -1.5645703 -6.3265615 -8.6391153 -1.5636824 -6.2734337 -8.6777716 -1.5636824 -6.2166233 -8.7112703 -1.5627944 -6.153944 -8.7363138 -1.5604268 -6.1041741 -8.7795935 -1.5614626 -6.0300474 -8.7875242 -1.5561353 -5.9760146 -8.824358 -1.5561353 -5.9201083 -8.8583937 -1.5556914 -5.8612881 -8.8879461 -1.5545075 -5.783452 -8.8880959 -1.5481442 -5.7410936 -8.9425583 -1.5515479 -5.6993423 -8.9985056 -1.5552474 -5.6335421 -9.016531 -1.5522878 -5.5843372 -9.0610313 -1.5540636 -5.50809 -9.0613194 -1.5481442 -5.4554377 -9.1000357 -1.5490322 -5.4020143 -9.1375952 -1.549772 -5.3368816 -9.1551886 -1.5471084 -5.2751861 -9.1783304 -1.5454806 -5.2212071 -9.2148285 -1.5462205 -5.1549244 -9.2294216 -1.5432608 -5.0824604 -9.2322855 -1.5383774 -5.024302 -9.2606888 -1.5379335 -4.9701819 -9.2965765 -1.5388213 -4.9268703 -9.3531504 -1.5432608 -4.8771305 -9.3981285 -1.5457766 -4.8162222 -9.4217129 -1.5447407 -4.7569871 -9.4484367 -1.5442967 -1.3538766 -2.7288237 -0.41726562 -1.3388424 -2.7406347 -0.41785756 -4.5775552 -9.5245905 -1.5426689 -4.5093021 -9.5319357 -1.5392654 -4.4494781 -9.556735 -1.5388213 -4.3915792 -9.5856552 -1.5391173 -4.3367429 -9.621438 -1.5405972 -4.2756214 -9.6433458 -1.5398573 -4.2136045 -9.6630526 -1.5388213 -4.1503372 -9.679635 -1.5373416 -4.0885615 -9.6994505 -1.5364537 -4.024807 -9.714304 -1.5348259 -3.9621427 -9.7314882 -1.5336421 -3.9019897 -9.7546988 -1.533494 -3.8431473 -9.7812185 -1.5339381 -3.7809229 -9.7990789 -1.5330501 -3.7165227 -9.8109951 -1.5312743 -3.6531527 -9.8252716 -1.5299425 -3.5958469 -9.8558636 -1.5312743 -1.1435463 -3.192765 -0.46891135 -1.1301557 -3.2174525 -0.47172302 -3.4118934 -9.9147711 -1.5303864 -1.1367183 -3.3679044 -0.49332839 -1.1185135 -3.3823283 -0.49451226 -1.0843434 -3.3477252 -0.48800105 -1.0566139 -3.3316879 -0.48444948 -1.0059856 -3.2408116 -0.46920732 -0.9817754 -3.2327271 -0.46698758 -0.95910877 -3.2292087 -0.46550778 -0.9447853 -3.25403 -0.46846741 -0.94852585 -3.3435009 -0.48148984 -0.93405908 -3.371181 -0.48489341 -0.92315656 -3.41313 -0.49051672 -2.6672239 -10.115949 -1.5268348 -2.6014109 -10.117756 -1.5246152 -2.5414431 -10.142161 -1.525947 -0.79411268 -3.2502816 -0.46210417 -2.1288905 -8.9601717 -1.3394896 -2.3498769 -10.167951 -1.5229874 -1.9880081 -8.8485966 -1.3184762 -1.9427388 -8.9021788 -1.3248394 -2.1596575 -10.196903 -1.5210636 -1.7325222 -8.4341726 -1.2498125 -1.674951 -8.4155445 -1.245373 -1.620852 -8.4130383 -1.2434493 -1.5720961 -8.4383821 -1.2458169 -1.8453281 -10.255432 -1.5206196 -1.7793242 -10.249022 -1.5179559 -1.7162408 -10.258771 -1.517808 -1.3032701 -8.0936117 -1.188104 -1.2529798 -8.0975466 -1.187512 -1.5201551 -10.241666 -1.5107048 -1.2378035 -8.7056847 -1.2771891 -1.3972872 -10.281109 -1.5139604 -1.3357021 -10.301258 -1.5157362 -1.2716223 -10.302389 -1.5147003 -1.207464 -10.302139 -1.5135164 -1.1440104 -10.307388 -1.5132205 -1.080538 -10.312247 -1.5129246 -1.0166615 -10.312778 -1.5120367 -0.95327348 -10.317837 -1.5118886 -0.88858914 -10.307726 -1.509521 -0.82406485 -10.297211 -1.5071533 -0.76188511 -10.315882 -1.509225 -0.70150763 -10.363779 -1.5157362 -0.63753974 -10.361965 -1.5148484 -0.57378423 -10.36272 -1.5144044 -0.51183814 -10.399631 -1.5194358 -0.44827226 -10.408504 -1.5203236 -0.3833434 -10.382397 -1.5160322 -0.31954005 -10.381588 -1.5155882 -0.25585806 -10.384342 -1.5157362 -0.19220884 -10.389672 -1.5163281 -0.1284554 -10.390656 -1.5163281 -0.064672932 -10.387293 -1.5157362 -0.00093652861 -10.385516 -1.5154402 --0.062848717 -10.395216 -1.5169201 --0.12678944 -10.40749 -1.5188438 --0.19050039 -10.398605 -1.51766 --0.25376701 -10.37549 -1.5144044 --0.31660536 -10.347048 -1.5104089 --0.38128966 -10.377524 -1.5152923 --0.44585001 -10.39574 -1.5183998 --0.50958014 -10.39182 -1.5182519 --0.57202291 -10.364799 -1.5147003 --0.63512403 -10.353196 -1.5135164 --0.69863808 -10.349104 -1.5135164 --0.76248974 -10.349554 -1.5142564 --0.82597905 -10.344681 -1.5142564 --0.89113474 -10.359125 -1.517216 --0.95486218 -10.355432 -1.517512 --1.0158631 -10.323788 -1.5136645 --1.0786744 -10.312442 -1.5129246 --1.1428024 -10.313493 -1.5141084 --1.2066386 -10.311198 -1.5148484 --1.2697631 -10.302619 -1.5147003 --1.3320651 -10.287768 -1.5136645 --1.3954308 -10.281361 -1.5139604 --1.4590464 -10.276522 -1.5145524 --1.5230904 -10.274224 -1.5155882 --1.5873122 -10.272504 -1.516772 --1.6539273 -10.285028 -1.5201757 --1.7194507 -10.289319 -1.5223954 --1.7820451 -10.275651 -1.5219514 --1.845587 -10.267444 -1.5223954 --1.9100004 -10.263704 -1.5235792 --1.9714453 -10.244022 -1.5223954 --2.0340714 -10.230762 -1.5222474 --2.0991948 -10.229714 -1.5240232 --2.1637673 -10.225349 -1.525355 --2.2260466 -10.209948 -1.5250591 --2.289952 -10.201887 -1.525947 --2.3525064 -10.187644 -1.525947 --2.415658 -10.175904 -1.5263909 --2.4780507 -10.160891 -1.5263909 --2.5391486 -10.140697 -1.525651 --2.6028001 -10.130673 -1.5265388 --2.6679368 -10.125988 -1.5283147 --2.7336297 -10.122794 -1.5303864 --2.794899 -10.102971 -1.5299425 --2.8579156 -10.089437 -1.5305344 --2.9194939 -10.070762 -1.5303864 --2.9792631 -10.046021 -1.5293505 --3.0408483 -10.027553 -1.5293505 --3.1081769 -10.027597 -1.5323102 --3.1705427 -10.011166 -1.5327542 --3.2319105 -9.9915228 -1.5327542 --3.2999818 -9.9921637 -1.5360098 --3.3552265 -9.9539213 -1.5331981 --3.4207439 -9.9462395 -1.5352699 --3.4876032 -9.9418612 -1.5379335 --3.5468736 -9.9156179 -1.5371935 --3.6069701 -9.8918104 -1.5368977 --3.6682866 -9.8713465 -1.5371935 --3.7298377 -9.8514271 -1.5376376 --3.7866552 -9.819128 -1.5361577 --3.8471944 -9.796629 -1.5363057 --3.9178834 -9.799469 -1.5405972 --1.500919 -3.6902266 -0.55755258 --1.5205055 -3.6736379 -0.55636871 --4.0926027 -9.7138453 -1.5386734 --4.1478419 -9.6785526 -1.5370456 --4.2067552 -9.6520128 -1.5368977 --4.269908 -9.6350603 -1.5383774 --3.9977803 -8.873827 -1.4177721 --4.0356793 -8.8131638 -1.4118528 --4.0909319 -8.790925 -1.4122968 --1.5255554 -3.228054 -0.4956961 --1.5457619 -3.2195241 -0.4958441 --1.6570207 -3.3975093 -0.52706832 --1.6734437 -3.3784173 -0.52558845 --1.6972545 -3.3742692 -0.52662432 --1.7201772 -3.3681948 -0.52736425 --1.7430891 -3.3619659 -0.52810419 --1.76645 -3.3564575 -0.52899206 --4.5703793 -8.552597 -1.4124447 --4.623714 -8.5261307 -1.4127407 --4.690249 -8.523592 -1.4171802 --4.7487292 -8.5058784 -1.419104 --4.813993 -8.499814 -1.4230994 --4.8389544 -8.4229536 -1.4149604 --5.4069853 -9.2791681 -1.5684178 --4.8226833 -8.1611614 -1.3798887 --4.8686008 -8.12463 -1.3787049 --1.949941 -3.2105508 -0.52351671 --1.9794617 -3.2145233 -0.52632838 --5.6896014 -9.1097822 -1.5685657 --5.7406287 -9.0671797 -1.5672339 --5.8089776 -9.0517607 -1.5707855 --5.864409 -9.0159464 -1.5707855 --5.9130864 -8.9698858 -1.5690098 --5.974607 -8.9433022 -1.5707855 --6.0343599 -8.9138451 -1.5721173 --6.1006908 -8.8937759 -1.575225 --6.1528893 -8.8529272 -1.574633 --6.2162056 -8.8279448 -1.5770007 --6.2748513 -8.7960768 -1.5781846 --6.3269668 -8.7550049 -1.5777407 --6.3846574 -8.7216043 -1.5787766 --6.4409976 -8.6862364 -1.5795164 --6.5007086 -8.6552496 -1.5811442 --6.5638742 -8.6285791 -1.58366 --6.622128 -8.595192 -1.5849918 --6.6735253 -8.5528383 -1.5846958 --6.7344642 -8.5225916 -1.5867676 --6.7952833 -8.4919195 -1.5888393 --6.862206 -8.468504 -1.5923909 --6.9240775 -8.4384708 -1.5947586 --6.9788852 -8.3996296 -1.5954986 --7.0156474 -8.3392448 -1.5920949 --7.080153 -8.3118496 -1.5952026 --7.1465244 -8.2862234 -1.5987542 --7.2069921 -8.2533903 -1.6009738 --7.2653599 -8.2179041 -1.6027496 --7.3004746 -8.1562223 -1.599346 --7.3596816 -8.1215334 -1.6014178 --7.4187369 -8.0864239 -1.6034895 --7.474946 -8.0479965 -1.6049694 --7.5499339 -8.029356 -1.6105927 --7.5963311 -7.9800143 -1.6100007 --7.6430936 -7.9311175 -1.6095568 --7.7095723 -7.9024749 -1.6134044 --7.7891922 -7.8866825 -1.6200635 --7.8668098 -7.8681111 -1.6262788 --7.9050889 -7.8099632 -1.624207 --7.9401193 -7.7488794 -1.6215434 --7.9989095 -7.7109947 -1.623911 --8.0510864 -7.666543 -1.624947 --8.1066217 -7.6251283 -1.6267227 --8.1634007 -7.5846667 -1.6287944 --8.2199879 -7.5437951 -1.6308662 --8.2631893 -7.4905596 -1.6302743 --8.3119431 -7.4423552 -1.6308662 --8.3633785 -7.3964548 -1.63205 --8.4197788 -7.3547573 -1.6342698 --8.4707394 -7.3081236 -1.6354537 --8.5274668 -7.2662725 -1.6378213 --8.5749187 -7.2163591 -1.6384133 --8.6205568 -7.1648726 -1.6387093 --8.6612997 -7.1093335 -1.6381173 --8.7162838 -7.0653949 -1.6403371 --8.7749157 -7.0241394 -1.6432967 --8.8217287 -6.9732313 -1.6440367 --8.8705873 -6.9238381 -1.6452205 --8.9340563 -6.8855777 -1.6492159 --8.980072 -6.8336239 -1.6499559 --9.0242062 -6.7801762 -1.6503998 --9.0791426 -6.7346921 -1.6529156 --9.1258812 -6.6829467 -1.6539514 --9.170723 -6.6297221 -1.6546913 --9.2176704 -6.5779219 -1.6558752 --9.2659435 -6.5269341 -1.657355 --9.3318043 -6.4880199 -1.6620904 --9.3910112 -6.4440665 -1.665642 --9.441021 -6.3935313 -1.6675657 --9.4932299 -6.3442726 -1.6699334 --9.521245 -6.2788272 -1.6680098 --9.5662241 -6.2246017 -1.6691935 --9.6075668 -6.1679244 -1.6697855 --9.6477385 -6.1104445 -1.6702294 --9.6858883 -6.0516562 -1.6703774 --9.7405205 -6.0030055 -1.673485 --9.7839317 -5.9472346 -1.6746689 --6.6060452 -3.9606712 -1.113965 --9.8459597 -5.8206844 -1.6728932 --9.9045601 -5.7736068 -1.6768886 --9.9475174 -5.7171593 -1.6782205 --9.9867125 -5.658452 -1.6789603 --10.030743 -5.6023717 -1.6805881 --10.096121 -5.5578856 -1.6859156 --10.144813 -5.5038486 -1.6884313 --10.180137 -5.44243 -1.6887271 --10.222965 -5.3849325 -1.6903549 --7.5414195 -3.9138556 -1.2327945 --10.326145 -5.2784276 -1.6967182 --6.9378152 -3.493315 -1.1237319 --6.9298773 -3.4361856 -1.1188484 --6.9454985 -3.3909974 -1.1179606 --6.9670658 -3.3487451 -1.1181085 --7.0071511 -3.3152351 -1.1213641 --7.0470867 -3.281359 -1.1246197 --6.587832 -3.0185544 -1.0457453 --6.6269679 -2.9874203 -1.0491489 --10.604461 -4.7016292 -1.6971622 --10.669374 -4.6522813 -1.7030815 --10.71408 -4.5937409 -1.7057451 --10.730217 -4.5229216 -1.7038213 --10.723046 -4.442616 -1.6981981 --10.702471 -4.3573494 -1.690503 --10.648195 -4.259284 -1.6774806 --7.5194831 -2.9547758 -1.1703461 --7.5347037 -2.9075136 -1.1699022 --10.671147 -4.0422497 -1.6688976 --10.683698 -3.9722173 -1.6669738 --10.687429 -3.8991337 -1.6637182 --10.704635 -3.8311512 -1.6626823 --10.716742 -3.7614675 -1.6609066 --10.725592 -3.6908143 -1.6586869 --10.735853 -3.6208262 -1.6567631 --10.732513 -3.5465086 -1.6527675 --10.738075 -3.4754128 -1.6502519 --10.77334 -3.4139397 -1.6524715 --10.801642 -3.3501146 -1.6536554 --10.808745 -3.2797549 -1.6515837 --10.85711 -3.2218096 -1.6560231 --10.896622 -3.1609151 -1.6591308 --10.967195 -3.1085534 -1.6671218 --11.010844 -3.0480592 -1.6709694 --11.053208 -2.9868879 -1.6746689 --11.097149 -2.9258156 -1.6786644 --11.143628 -2.8650546 -1.6831039 --11.258853 -2.8211339 -1.6981981 --11.309579 -2.7602015 -1.7033774 --11.355169 -2.6976099 -1.7078168 --11.398489 -2.6341176 -1.7119603 --11.483914 -2.5797281 -1.7226151 --11.547841 -2.5197527 -1.7300142 --11.598885 -2.4564271 -1.7354895 --11.686398 -2.4001267 -1.7465881 --11.750374 -2.3382142 -1.7541353 --11.798491 -2.272615 -1.7593147 --11.836519 -2.2047031 -1.7630142 --11.797262 -2.1225822 -1.7550231 --11.684362 -2.028347 -1.7359334 --11.913138 -1.9928179 -1.7687855 --12.162416 -1.9578551 -1.8047451 --12.511395 -1.9353184 -1.8557988 --13.039572 -1.9351228 -1.9339334 --13.118762 -1.8646742 -1.9441441 --13.127017 -1.7837447 -1.9437002 --13.168118 -1.7071041 -1.9482876 --13.235276 -1.6332943 -1.9568707 --13.245049 -1.5520535 -1.9568707 --13.252357 -1.4705362 -1.9565747 --13.257195 -1.3887818 -1.9559827 --13.24972 -1.3058603 -1.9536151 --13.240741 -1.2229921 -1.9510993 --13.24307 -1.1413013 -1.9503595 --13.251795 -1.0601795 -1.9506553 --13.261995 -0.97913891 -1.9512473 --13.26282 -0.89741302 -1.9505074 --13.266103 -0.81589574 -1.9502114 --13.271847 -0.73453563 -1.9503595 --13.284006 -0.65347534 -1.9515432 --13.279861 -0.57161438 -1.9503595 --13.28213 -0.49008355 -1.9502114 --13.287852 -0.40866765 -1.9506553 --13.277257 -0.32681197 -1.9487317 --13.352185 -0.24668361 -1.9596822 --13.27829 -0.16383077 -1.9484357 --13.305747 -0.082516901 -1.9524312 --13.351497 -0.0008718209 -1.9592383 --13.254332 0.080454633 -1.9447361 --13.287211 0.16219354 -1.9497675 --13.295855 0.24390154 -1.9512473 --13.259503 0.32462853 -1.9460679 --13.154455 0.40282393 -1.9306778 --13.238708 0.48673582 -1.9437002 --13.312543 0.57127184 -1.9552429 --13.287055 0.65187722 -1.9519873 --13.233431 0.73066235 -1.9445881 --13.222775 0.81148338 -1.9437002 --13.246163 0.8945365 -1.9479917 --12.254591 -0.30979642 -1.9401276 --12.269093 -0.23484385 -1.9421993 --12.267341 -0.15951909 -1.9417213 --12.275987 -0.084299594 -1.9429961 --12.24172 -0.0089475885 -1.9374185 --12.31361 0.066553526 -1.949052 --12.257689 0.14147095 -1.9401276 --12.267448 0.21687165 -1.9418806 --12.265886 0.29213923 -1.9418806 --12.252022 0.36704144 -1.9399682 --12.253486 0.44235384 -1.9406058 --12.247581 0.51740658 -1.9401276 --12.207692 0.59078217 -1.9342312 --12.179193 0.66433257 -1.9302471 --12.258647 0.74413192 -1.9437931 --12.160274 0.81308168 -1.9286534 --12.227916 0.89299899 -1.9404464 --12.158237 0.96294695 -1.9300877 --12.174724 1.0394613 -1.933753 --12.172049 1.1145043 -1.9343905 --12.164981 1.1891696 -1.9343905 --12.153528 1.263382 -1.933753 --12.143584 1.3377147 -1.9334344 --12.092982 1.4072956 -1.9265816 --12.063541 1.4789481 -1.9232351 --12.086552 1.5571024 -1.9284941 --12.112968 1.6361229 -1.9343905 --12.079241 1.7071012 -1.9305657 --12.065609 1.7807536 -1.9300877 --12.068115 1.8568546 -1.9323188 --12.045773 1.9291513 -1.9305657 --12.001572 1.9976784 -1.9253068 --12.002708 2.0736334 -1.9275378 --12.005306 2.1500258 -1.9300877 --11.997712 2.2247281 -1.9310439 --11.914997 2.2851031 -1.919729 --11.967571 2.3714073 -1.9307251 --11.963434 2.4469702 -1.9324782 --11.887339 2.5074954 -1.9224381 --11.863048 2.5785007 -1.9210039 --11.855673 2.6531827 -1.9224381 --11.814157 2.7201195 -1.9182947 --11.839514 2.802563 -1.9253068 --11.806746 2.8714237 -1.9227569 --11.811893 2.949554 -1.9265816 --11.76584 3.0148695 -1.9219601 --11.721339 3.0802329 -1.9176573 --11.669807 3.1433666 -1.9122388 --11.662672 3.2183256 -1.9143106 --11.611355 3.2809682 -1.9090515 --11.58816 3.3513298 -1.9085735 --11.615658 3.4366527 -1.9167011 --11.606636 3.5115764 -1.9187728 --11.573553 3.5792277 -1.9168605 --11.522192 3.640954 -1.9119202 --11.490239 3.7085524 -1.9103265 --11.536653 3.8018482 -1.9221195 --11.439186 3.8477025 -1.9095297 --11.466719 3.9354436 -1.9182947 --11.486149 4.0210576 -1.9257848 --11.38223 4.0632505 -1.9122388 --11.385843 4.1434789 -1.9171792 --11.272271 4.1806536 -1.9020395 --11.290734 4.2664886 -1.9096891 --11.252366 4.3310776 -1.9076173 --11.210873 4.3942752 -1.9050674 --11.176364 4.4600544 -1.9037926 --11.192691 4.5463786 -1.911442 --11.13995 4.6047888 -1.9071392 --11.119676 4.6764994 -1.9085735 --11.096218 4.7469702 -1.9095297 --11.055114 4.8098459 -1.9074579 --10.994697 4.8640099 -1.9020395 --10.963745 4.9309754 -1.9018801 --10.949444 5.0055428 -1.9047488 --10.913153 5.0701375 -1.9037926 --10.87291 5.1327896 -1.9021989 --10.857233 5.2070918 -1.9050674 --10.796679 5.259778 -1.8999678 --10.800481 5.3438745 -1.9065018 --10.775427 5.4140334 -1.9079361 --10.74816 5.4831882 -1.9090515 --10.714314 5.5490346 -1.9090515 --10.66783 5.6082411 -1.9068205 --10.64367 5.6791682 -1.9087329 --10.618173 5.7495403 -1.9104859 --10.609516 5.82932 -1.9154261 --10.576998 5.8962317 -1.9160637 --10.536324 5.9585905 -1.9152668 --10.51669 6.0329518 -1.9184541 --10.460702 6.0864458 -1.9149481 --10.421459 6.1495132 -1.9146293 --10.418263 6.2341247 -1.9211633 --10.400916 6.3107347 -1.9251474 --10.360317 6.3734002 -1.9248286 --10.331067 6.4431186 -1.926741 --10.300518 6.5121903 -1.9284941 --10.313563 6.6093588 -1.9386934 --10.277782 6.6757436 -1.9396496 --10.230855 6.7348819 -1.938534 --10.182768 6.7931476 -1.9372591 --10.184242 6.8848023 -1.9457054 --10.152394 6.9544144 -1.9477772 --10.051137 6.9760509 -1.9363029 --10.094553 7.0983505 -1.9533548 --10.0492 7.1590104 -1.9530362 --10.015491 7.2280464 -1.9551079 --9.987689 7.3015985 -1.9584545 --9.9403191 7.3609819 -1.9579765 --9.8799601 7.4105816 -1.9549485 --9.8437366 7.4782305 -1.9568609 --9.7968836 7.5378881 -1.9567015 --9.7473326 7.5954313 -1.9560641 --9.6834946 7.641643 -1.952558 --9.6811552 7.7366605 -1.9618012 --9.6419439 7.8027487 -1.9635541 --9.6259575 7.8880429 -1.9702475 --9.5887718 7.9564137 -1.9726379 --9.5813446 8.0500259 -1.981403 --9.522747 8.1009884 -1.9794906 --9.478097 8.1637764 -1.9806062 --9.4211302 8.2159395 -1.9791719 --9.3801613 8.2820864 -1.9812436 --9.3402081 8.3493547 -1.9836341 --9.3019772 8.4184313 -1.9865026 --9.2829037 8.5053587 -1.993674 --9.2218552 8.5541019 -1.9917617 --9.1432867 8.5861969 -1.9860245 --9.1283522 8.6781874 -1.9944708 --9.0813341 8.7401953 -1.9959052 --9.0225849 8.7909298 -1.9947896 --8.980423 8.8579111 -1.9974988 --8.9189167 8.9058723 -1.9959052 --8.8738241 8.9702549 -1.9981363 --8.8469067 9.053483 -2.0046701 --8.8035297 9.1203814 -2.0075388 --8.7474031 9.1742277 -2.0075388 --8.6814699 9.2176666 -2.0053077 --8.6334896 9.280158 -2.0073793 --8.6271544 9.3882008 -2.019491 --8.5229387 9.3897915 -2.0083356 --8.4724131 9.449996 -2.0100884 --8.4371777 9.5276709 -2.0156662 --8.3954573 9.5985804 -2.0198097 --8.3441486 9.6588774 -2.0217221 --8.2763948 9.7001324 -2.0196505 --8.219265 9.7537518 -2.020288 --8.177577 9.8260059 -2.0249095 --8.1190128 9.8782854 -2.0253875 --8.0756683 9.949378 -2.0298498 --8.0113811 9.9948912 -2.029053 --7.9480648 10.041537 -2.0285747 --7.8832617 10.086227 -2.0277779 --7.8338919 10.150821 -2.0311246 --7.7876163 10.219898 -2.0354276 --7.7271357 10.270645 -2.0360649 --7.6645594 10.318657 -2.0362244 --7.5923438 10.35355 -2.0338337 --7.5402513 10.415935 -2.0370212 --7.4871044 10.477265 -2.0400491 --7.432919 10.537529 -2.0429175 --7.3726349 10.589419 -2.0441926 --7.3097572 10.637712 -2.0448301 --7.2526598 10.694619 -2.0472205 --7.1836076 10.733996 -2.0462642 --7.1214185 10.783639 -2.0473797 --7.0745206 10.856908 -2.053117 --7.0152454 10.911737 -2.0553479 --6.9534483 10.962914 -2.0569417 --6.8918104 11.014578 -2.0586946 --6.8147631 11.041536 -2.0558262 --6.760746 11.105911 -2.0601289 --6.6939983 11.149724 -2.060607 --6.6098671 11.164254 -2.0556667 --6.5636387 11.242966 -2.0628381 --6.4891119 11.273617 -2.0610852 --6.432972 11.336403 -2.065388 --6.3719678 11.39117 -2.0682566 --6.2924194 11.412763 -2.0650692 --6.2142601 11.436411 -2.06236 --6.1542234 11.493472 -2.065866 --6.0817423 11.527525 -2.0652287 --6.0200028 11.582144 -2.0684159 --5.9515224 11.624136 -2.0693722 --5.8907547 11.681591 -2.0731969 --5.8233581 11.726357 -2.0747905 --5.7525983 11.764529 -2.0752685 --5.6897254 11.819174 -2.0787747 --5.6310487 11.883303 -2.0840335 --5.5655394 11.933735 -2.0869021 --5.4864454 11.955098 -2.084671 --5.4109554 11.984038 -2.0838742 --5.340126 12.02333 -2.0849898 --5.2686234 12.061297 -2.0859461 --5.2077656 12.124239 -2.0913644 --5.1317382 12.152327 -2.0907269 --5.0449648 12.154408 -2.0856273 --4.9844613 12.219871 -2.0916831 --4.912693 12.258472 -2.0931175 --4.8417239 12.299408 -2.0950298 --4.764029 12.32336 -2.0940735 --4.6879745 12.351437 -2.0939143 --4.6186476 12.397546 -2.0969422 --4.5496097 12.445123 -2.1002889 --4.4781618 12.486744 -2.1026793 --4.404736 12.523298 -2.1042728 --4.3265243 12.546357 -2.1036353 --4.243453 12.554898 -2.1006074 --4.1682 12.586322 -2.1015637 --4.0930257 12.618234 -2.1026793 --4.0134325 12.636525 -2.1015637 --3.9331832 12.652429 -2.1001294 --3.862083 12.698047 -2.1037948 --3.7686143 12.669462 -2.0950298 --3.675091 12.638314 -2.0859461 --3.6444306 12.825861 -2.1136754 --3.5767534 12.887934 -2.1203687 --3.4996727 12.91726 -2.1216435 --3.4231236 12.94899 -2.1233966 --3.3335001 12.930555 -2.1168625 --3.2553 12.955553 -2.1176596 --3.1729283 12.963777 -2.115747 --3.085315 12.949389 -2.1101694 --3.0100369 12.98635 -2.1131973 --2.9190116 12.954495 -2.1049104 --2.8487587 13.014595 -2.1119223 --2.767823 13.027001 -2.1111255 --2.6856468 13.033103 -2.1093726 --2.6027265 13.034815 -2.106982 --2.5120161 12.995291 -2.0978982 --2.4311426 13.004638 -2.0969422 --2.3458619 12.989193 -2.0920019 --2.2671347 13.009178 -2.092958 --2.1805634 12.982927 -2.0864241 --2.1022789 13.004834 -2.0878584 --2.0203209 13.003831 -2.0856273 --1.9400561 13.013054 -2.085149 --1.8564036 12.998325 -2.0808463 --1.7758107 13.003603 -2.07989 --1.6956059 13.011317 -2.079412 --1.6141573 13.00874 -2.0773404 --1.5339601 13.015458 -2.0768621 --1.4522073 13.007946 -2.0741529 --1.3711222 13.00483 -2.0722406 --1.2873021 12.972721 -2.0657067 --1.2088681 12.993155 -2.0677783 --1.1310008 13.021964 -2.0712845 --1.0505223 13.02177 -2.070169 --0.96928167 13.010251 -2.0673003 --0.88835669 13.000195 -2.0647504 --0.80863357 13.006386 -2.0649099 --0.72881263 13.011103 -2.0649099 --0.64911187 13.018288 -2.065388 --0.56926411 13.023012 -2.0655472 --0.48953113 13.031192 -2.0663443 --0.40919161 13.02211 -2.0644319 --0.32898197 13.012532 -2.0625193 --0.24890527 13.002461 -2.060607 --0.16892594 12.988937 -2.0582166 --0.089183278 12.983806 -2.0572603 --0.0095272791 13.000892 -2.0599697 -0.070361555 13.022424 -2.0634756 -0.15023023 13.018785 -2.0629976 -0.23000467 13.011696 -2.0620413 -0.30974472 13.006092 -2.0614038 -0.38951322 13.00296 -2.0612445 -0.46953964 13.007232 -2.06236 -0.54950821 13.008051 -2.0629976 -0.62945682 13.007392 -2.0634756 -0.70904189 12.999342 -2.0628381 -0.78908992 12.999674 -2.0636349 -0.86818129 12.984737 -2.0620413 -0.94977838 13.00575 -2.0663443 -1.0301076 13.006566 -2.0674598 -1.1098111 12.999018 -2.0673003 -1.1852314 12.944774 -2.0596509 -1.2693415 12.985402 -2.0674598 -1.3498108 12.985225 -2.0687346 -1.4321629 13.00123 -2.0727186 -1.5128226 13.000042 -2.0739937 -1.5911198 12.978757 -2.0720813 -1.6707259 12.968749 -2.0720813 -1.7541006 12.986626 -2.0767028 -1.8365142 12.995169 -2.07989 -1.9186664 13.000258 -2.0825994 -1.9992989 12.994095 -2.0835555 -2.0808647 12.99328 -2.0854678 -2.1633058 12.996823 -2.088177 -2.2470448 13.006652 -2.0920019 -2.3269839 12.993591 -2.0921612 -2.4034281 12.961596 -2.0892925 -2.4940684 13.004779 -2.0988545 -2.5718987 12.979547 -2.097261 -2.6584141 12.997374 -2.1028385 -2.7403555 12.991443 -2.1045916 -2.8168731 12.959913 -2.1022012 -2.8980651 12.950092 -2.103476 -2.98035 12.944573 -2.1055477 -3.0554001 12.907789 -2.1025198 -3.1478393 12.943478 -2.1116037 -3.2114162 12.860703 -2.1010857 -3.2853673 12.82163 -2.0978982 -3.3609669 12.789771 -2.0959859 -3.4293675 12.731731 -2.0897708 -3.5239658 12.770404 -2.0998106 -3.5781002 12.663038 -2.0854678 -3.6784933 12.71956 -2.098695 -3.7497487 12.674029 -2.0948703 -3.8254435 12.644168 -2.0937548 -3.8860393 12.565755 -2.0845118 -3.9514685 12.504961 -2.0782964 -4.0211496 12.458871 -2.0746312 -4.1154394 12.488346 -2.0838742 -4.187583 12.449759 -2.0816431 -4.276392 12.460247 -2.0878584 -4.3498306 12.425386 -2.0864241 -4.4332905 12.418918 -2.0899301 -4.5036693 12.37571 -2.0872209 -4.5788341 12.345992 -2.0869021 -4.6496162 12.304736 -2.084671 -4.7221923 12.268604 -2.0833962 -4.7966619 12.23756 -2.0830774 -4.8617811 12.183141 -2.0787747 -4.8985519 12.059785 -2.0625193 -4.9758511 12.037712 -2.0639536 -5.0637789 12.040626 -2.0698502 -5.118927 11.96576 -2.0622008 -5.2174559 11.992064 -2.0724001 -5.2949333 11.968852 -2.0739937 -5.36058 11.91903 -2.0709658 -5.4327917 11.884119 -2.070647 -5.4993706 11.83713 -2.0682566 -5.5668411 11.792451 -2.0663443 -5.6254334 11.729586 -2.0612445 -5.696002 11.692185 -2.0607665 -5.761508 11.644628 -2.0585353 -5.8186674 11.580828 -2.0534356 -5.8855791 11.536992 -2.0520015 -5.9853129 11.556767 -2.0622008 -6.1199613 11.641288 -2.0843523 -6.1675758 11.559096 -2.0762248 -6.2256937 11.497596 -2.0719218 -6.2842402 11.437548 -2.0679379 -6.3413239 11.375491 -2.0636349 -6.3517179 11.231528 -2.0441926 -6.4632487 11.266845 -2.0580573 -6.482614 11.141644 -2.0421207 -6.5904884 11.168827 -2.0547106 -6.6198649 11.062947 -2.0424395 -6.6860847 11.019588 -2.0419614 -6.7349534 10.948085 -2.0362244 -6.8249879 10.943412 -2.0432363 -6.876709 10.87713 -2.0386147 -6.9369287 10.824756 -2.0367024 -6.9843969 10.75301 -2.0311246 -7.0377607 10.690986 -2.0274594 -7.0900784 10.627892 -2.0236344 -7.1496277 10.576009 -2.0220408 -7.2088075 10.523796 -2.0204473 -7.2625504 10.463956 -2.0174193 -7.3198051 10.409506 -2.015507 -7.3978581 10.384498 -2.019491 -7.4568157 10.332505 -2.0182161 -7.5148306 10.279384 -2.0167818 -7.5853996 10.243395 -2.0188537 -7.6463323 10.194289 -2.0183754 -7.691421 10.124383 -2.0137539 -7.7425628 10.062915 -2.0108855 -7.7974873 10.006652 -2.0091324 -7.8489556 9.9462185 -2.0065825 -7.8956623 9.8801327 -2.0029171 -7.9573789 9.8330345 -2.0032358 -8.0063009 9.7702789 -2.0003674 -8.0629473 9.7171707 -1.9995705 -8.116704 9.6607113 -1.9981363 -8.1745491 9.6092224 -1.9978175 -8.2243366 9.5484114 -1.9955864 -8.2691441 9.4821434 -1.9922397 -8.3173695 9.420125 -1.9898493 -8.369092 9.3622885 -1.988415 -8.4323425 9.3173485 -1.9898493 -8.4840183 9.2596102 -1.9885744 -8.5353041 9.2015886 -1.9872994 -8.5861969 9.1432867 -1.9860245 -8.6468983 9.095439 -1.9871401 -8.6915913 9.0308304 -1.9845903 -8.7303057 8.9603586 -1.9807656 -8.780962 8.9024048 -1.9798093 -8.8172846 8.8301945 -1.9756659 -8.8516493 8.7564859 -1.9712037 -8.8734388 8.6709585 -1.9640323 -8.915822 8.6060648 -1.9616418 -8.9548845 8.5382519 -1.9586139 -9.0142927 8.4899139 -1.9602076 -9.062602 8.4310808 -1.9594107 -9.0988989 8.3612871 -1.9560641 -9.1273708 8.28473 -1.9511237 -9.1655378 8.2173662 -1.9484146 -9.2187424 8.1635904 -1.949052 -9.2619724 8.1010227 -1.9476178 -9.2965641 8.0311317 -1.9444305 -9.3366556 7.966248 -1.9425181 -9.3815851 7.9056287 -1.9417213 -9.4177752 7.837811 -1.9391714 -9.4664526 7.7805037 -1.9393308 -9.4971523 7.7085843 -1.9358248 -9.5419617 7.6483135 -1.9353467 -9.5569744 7.5644994 -1.9288127 -9.5993204 7.5026765 -1.9280159 -9.6334524 7.4345875 -1.9256254 -9.6616144 7.3621736 -1.9221195 -9.6900396 7.290288 -1.9187728 -9.7337971 7.2301049 -1.9186134 -9.7811613 7.1725788 -1.919251 -9.8121929 7.1031651 -1.9167011 -9.8676405 7.051435 -1.9190916 -9.909915 6.9901862 -1.9189322 -9.9437075 6.9230437 -1.9171792 -9.9713535 6.8518357 -1.9143106 -10.022196 6.7966189 -1.9160637 -10.022689 6.707541 -1.9080954 -10.062833 6.6453724 -1.9079361 -10.087704 6.5732622 -1.9049081 -10.13283 6.5144448 -1.9058644 -10.177612 6.4553213 -1.9068205 -10.215356 6.3917036 -1.9065018 -10.23254 6.3154216 -1.9023583 -10.271942 6.2530303 -1.9025177 -10.321119 6.1964912 -1.9045894 -10.337708 6.120471 -1.9006053 -10.358871 6.0474677 -1.8975774 -10.353858 5.9596601 -1.8897685 -10.362756 5.8804255 -1.8846688 -10.40295 5.81914 -1.8854656 -10.416847 5.7432818 -1.8814815 -10.456228 5.6816144 -1.8822784 -10.494374 5.6192131 -1.8829159 -10.522544 5.5514903 -1.8818003 -10.577432 5.4977484 -1.885625 -10.583726 5.4187951 -1.8806847 -10.60708 5.3488626 -1.8789318 -10.617595 5.2726998 -1.8749477 -10.620481 5.1931405 -1.8696886 -10.630798 5.117599 -1.8658639 -10.720879 5.0801764 -1.8763819 -10.755426 5.0159678 -1.8770194 -10.798563 4.9556446 -1.8792505 -10.797276 4.8750725 -1.8736727 -10.825181 4.8079286 -1.873354 -10.82372 4.7279787 -1.8679357 -10.925092 4.6926489 -1.8806847 -10.960046 4.6282139 -1.8818003 -11.008297 4.5692039 -1.8853064 -11.048923 4.5067925 -1.8875374 -11.028718 4.4198146 -1.8792505 -11.108908 4.3730359 -1.8884935 -11.121719 4.2994504 -1.8861032 -11.118356 4.2199173 -1.8810035 -11.155141 4.1557527 -1.8829159 -11.151687 4.0767193 -1.8779756 -11.223884 4.0252151 -1.8861032 -11.299591 3.974288 -1.8948681 -11.326564 3.9058459 -1.8953463 -11.283915 3.8138285 -1.8840314 -11.323973 3.7501068 -1.8868999 -11.312025 3.6692822 -1.8810035 -11.352203 3.6054823 -1.8840314 -11.389195 3.540448 -1.8865812 -11.357814 3.4544098 -1.8776568 -11.445032 3.4043593 -1.8888123 -11.481821 3.3387566 -1.8915216 -11.457458 3.255559 -1.8840314 -11.505756 3.1931169 -1.8888123 -11.492735 3.1136804 -1.8833939 -11.524986 3.0466366 -1.885625 -11.603688 2.9913912 -1.895665 -11.595973 2.9136395 -1.8913622 -11.613633 2.8424332 -1.8913622 -11.683673 2.7837059 -1.9001272 -11.673606 2.7057214 -1.895665 -11.689988 2.6340425 -1.895665 -11.722324 2.5658536 -1.8983742 -11.76199 2.4990087 -1.9023583 -11.757764 2.4228058 -1.899171 -11.771441 2.3504226 -1.8990116 -11.763347 2.2738402 -1.8953463 -11.770285 2.2003489 -1.8942307 -11.795222 2.130192 -1.8961431 -11.864479 2.06761 -1.9053862 -11.829237 1.986758 -1.8975774 -11.809045 1.9089379 -1.8923184 -11.857605 1.8422035 -1.8983742 -11.893095 1.7730519 -1.9023583 -11.884205 1.6972517 -1.899171 -11.911024 1.6265709 -1.9018801 -11.943295 1.5563906 -1.9055456 -11.9536 1.4832002 -1.905705 -11.941887 1.4073992 -1.9023583 -11.971882 1.336509 -1.9058644 -11.972985 1.262301 -1.9047488 -11.955945 1.1863745 -1.9007647 -11.971847 1.1138152 -1.9021989 -11.96862 1.0394819 -1.9006053 -11.960997 0.96491241 -1.8983742 -12.028715 0.89612567 -1.9084141 -12.008379 0.82055128 -1.9042706 -12.066395 0.75016344 -1.9128764 -11.991917 0.67169189 -1.9001272 -12.040182 0.60031193 -1.9072986 -12.021941 0.52547437 -1.9037926 -12.039737 0.45225558 -1.906183 -12.054126 0.37874505 -1.9080954 -12.061157 0.30490011 -1.9088923 -12.052931 0.23069924 -1.9072986 -12.061029 0.15682958 -1.9084141 -12.056828 0.082787491 -1.9076173 -12.041314 0.0087945629 -1.9050674 -12.053975 -0.065158665 -1.9071392 -12.064207 -0.13924421 -1.9088923 -12.033514 -0.21274364 -1.9041113 -12.030994 -0.2865524 -1.9039519 -12.048745 -0.3609584 -1.9071392 -12.046304 -0.43488133 -1.9071392 -12.061163 -0.50953734 -1.9100078 -12.066684 -0.5839628 -1.911442 -12.049073 -0.65723926 -1.9092109 -12.055654 -0.73181629 -1.910964 -12.050936 -0.80577457 -1.910964 -12.030996 -0.8786245 -1.9085735 -12.048998 -0.95429868 -1.9123982 -12.042915 -1.028212 -1.9123982 -12.062923 -1.1045161 -1.9167011 -12.00188 -1.1732312 -1.9079361 -12.025877 -1.2501166 -1.9130358 -11.996391 -1.3215051 -1.9095297 -12.003747 -1.396914 -1.9120796 -12.008668 -1.4722227 -1.9143106 -11.992555 -1.544996 -1.913195 -11.989697 -1.6194767 -1.9143106 -11.987354 -1.6941185 -1.9155855 -11.978687 -1.7679278 -1.9159043 -11.922729 -1.8344898 -1.9085735 -11.883955 -1.9032414 -1.9041113 -11.815571 -1.9667246 -1.8948681 -11.522138 -1.9906247 -1.8488119 -11.04909 -1.9788096 -1.7732732 -10.903757 -2.0219138 -1.7514403 -10.634213 -2.0395133 -1.7092087 -10.467524 -2.0742199 -1.6838698 -10.441059 -2.1356392 -1.6816387 -10.234564 -2.1589189 -1.6497658 -9.7599974 -2.1214635 -1.5735897 -9.5155811 -2.1295741 -1.5353423 -8.7894506 -2.0238092 -1.4172534 -8.5530291 -2.0247245 -1.3801215 -8.3888807 -2.0403113 -1.354942 -8.0476723 -2.0097198 -1.30028 -7.9978929 -2.0495059 -1.2940648 -7.6509829 -2.0107338 -1.2382872 -7.640408 -2.0581551 -1.238606 -7.3392825 -2.0254359 -1.1903186 -7.1253099 -2.0135274 -1.1565334 -7.0559192 -2.0407555 -1.1469715 -6.7990251 -2.0117583 -1.1058555 -6.6514282 -2.0125616 -1.0830665 -6.6097164 -2.0442951 -1.0781261 -6.2901683 -1.9878516 -1.0261734 -6.2412119 -2.0145853 -1.0199581 -6.2240448 -2.0512979 -1.0191613 -6.1879482 -2.0815816 -1.0151772 -6.2647009 -2.1502733 -1.0304762 -5.9923534 -2.0979989 -0.98617291 -6.0054011 -2.1440203 -0.9906351 -6.0088315 -2.1869047 -0.99350369 -6.0258451 -2.2350605 -0.99876267 -5.9917006 -2.2643158 -0.99525666 -6.1287942 -2.3591907 -1.0213925 -6.1151223 -2.3971121 -1.0215518 -5.9939361 -2.3921475 -1.0030656 -5.8831062 -2.389874 -0.9863323 -5.8856664 -2.4330919 -0.98936021 -5.8678961 -2.4680119 -0.98888212 -5.8517346 -2.503582 -0.98872274 -5.7765155 -2.5134478 -0.97820473 -5.7023005 -2.5228853 -0.96784604 -5.7038198 -2.5655196 -0.97087395 -5.6789923 -2.5963652 -0.9692803 -5.7032437 -2.6498785 -0.97645169 -5.6672363 -2.6755519 -0.97294569 -5.6863194 -2.7273502 -0.97932023 -5.4511476 -2.6558356 -0.94011664 -5.4188218 -2.6813533 -0.93724805 -5.6245685 -2.8262365 -0.97740787 -5.5877738 -2.8508258 -0.97390187 -5.5167012 -2.8573651 -0.96418065 -5.591692 -2.9398527 -0.98107326 -5.556128 -2.9648132 -0.97788596 -5.6072826 -3.0364525 -0.9906351 -5.4881783 -3.0156593 -0.97214884 -5.4609485 -3.0444708 -0.97055519 -5.4765387 -3.0973589 -0.97692978 -5.4540052 -3.1289392 -0.97629231 -5.3374262 -3.1057498 -0.95812482 -5.3174191 -3.1379395 -0.95796543 -5.2828159 -3.1613836 -0.9550969 -5.2835755 -3.2060287 -0.95892161 -5.2982798 -3.2595947 -0.96545553 -5.2949328 -3.3024907 -0.96864283 -5.2895899 -3.344413 -0.97151142 -5.2398772 -3.3581643 -0.96593362 -5.2175174 -3.3891768 -0.96561491 -5.2065191 -3.4276407 -0.96752727 -5.2059207 -3.4732189 -0.97151142 -5.1526141 -3.4835343 -0.96529621 -5.1620927 -3.5362842 -0.97135204 -5.1240764 -3.5566342 -0.96816474 -5.136075 -3.6118569 -0.97485805 -5.0712004 -3.6129463 -0.96641177 -5.0257206 -3.6272411 -0.9617902 -5.069519 -3.7063661 -0.97501743 -5.0482688 -3.7385771 -0.97533613 -5.0426092 -3.7825139 -0.97884214 -4.9249706 -3.7417228 -0.95971847 -4.8940945 -3.7658515 -0.95812482 -4.8919215 -3.8121932 -0.96242762 -4.9381881 -3.8971765 -0.9767704 -4.972796 -3.9742408 -0.98888212 -4.9682698 -4.0208249 -0.9930256 -4.9435053 -4.0512338 -0.9930256 -4.8327017 -4.0102577 -0.97501743 -4.868474 -4.0906372 -0.98776656 -4.8914084 -4.1613703 -0.99796587 -4.84409 -4.1726217 -0.99334431 -4.7945862 -4.1815033 -0.98824465 -4.8265638 -4.2618079 -1.0006751 -4.7730894 -4.2669997 -0.99477857 -4.683135 -4.2385764 -0.98091388 -4.6606789 -4.2705665 -0.98171073 -3.5957291 -3.3356955 -0.75302297 -3.5449677 -3.329313 -0.74632967 -3.5244727 -3.351002 -0.74632967 -3.5273187 -3.395155 -0.75158864 -4.5522356 -4.4356341 -0.98728848 -4.5326648 -4.471108 -0.98904145 -4.5435686 -4.5372005 -0.99780649 -4.5343895 -4.5839424 -1.0021093 -4.4606385 -4.5650792 -0.99159127 -4.4250016 -4.5845499 -0.9898383 -4.4131384 -4.6287622 -0.99366301 -4.367732 -4.6377878 -0.98967892 -4.342555 -4.6681142 -0.99047577 -2.5870314 -2.815661 -0.57851905 -2.5756779 -2.8380604 -0.57995331 -2.5496478 -2.8442557 -0.57788157 -2.5301843 -2.8576293 -0.57740349 -4.0731745 -4.6571989 -0.96003717 -6.6177149 -7.6605487 -1.5954226 -4.0291734 -4.7226033 -0.96338379 -6.5015798 -7.7155147 -1.5900042 -6.4427481 -7.7416039 -1.5871357 -6.3813338 -7.7642117 -1.5836297 -6.3254852 -7.7932563 -1.581558 -6.2726078 -7.8257599 -1.580283 -6.2275357 -7.8679709 -1.5810798 -6.1900849 -7.9200349 -1.5839484 -6.1268954 -7.9391108 -1.5801237 -6.0619106 -7.9553547 -1.5758208 -6.0094223 -7.9876666 -1.5748646 -5.9679503 -8.0346918 -1.5769364 -5.9296308 -8.0862846 -1.5799643 -5.8799028 -8.1225166 -1.5799643 -5.8087149 -8.1287241 -1.5740678 -5.7388115 -8.1359777 -1.56849 -5.6859617 -8.1669865 -1.5676932 -5.6592259 -8.2358932 -1.5743866 -5.5770001 -8.2238913 -1.5653028 -5.5341215 -8.2694426 -1.5675339 -5.4941583 -8.3197193 -1.5707211 -5.4440837 -8.354928 -1.5710399 -5.3927164 -8.388175 -1.5710399 -5.3511934 -8.4369459 -1.5740678 -5.2841377 -8.4453516 -1.5694462 -5.2197742 -8.4574537 -1.5656215 -5.1451941 -8.452219 -1.5586095 -5.1272831 -8.5403376 -1.5692869 -5.0561738 -8.5402069 -1.5633904 -5.0086546 -8.5795956 -1.5649841 -4.9283361 -8.562254 -1.5560597 -4.8961711 -8.6283932 -1.562753 -4.8383164 -8.6496572 -1.5611594 -4.7775249 -8.66535 -1.5586095 -4.7200232 -8.6866941 -1.5571752 -4.6582451 -8.6998272 -1.5543066 -4.5997086 -8.7186413 -1.5525537 -4.5392957 -8.7335615 -1.5501631 -4.4869719 -8.7638855 -1.5506413 -4.4353361 -8.7956591 -1.5514381 -4.3755746 -8.8112144 -1.5493664 -4.3222952 -8.8396702 -1.5496851 -4.2581253 -8.8455658 -1.5460197 -1.3356831 -2.8194282 -0.4648923 -1.3204447 -2.8320441 -0.46568909 -1.3092196 -2.8535516 -0.46807957 -4.0499187 -8.9698954 -1.5500038 -3.9803772 -8.9620962 -1.5442667 -3.9197788 -8.9736853 -1.5420356 -3.8607471 -8.9884968 -1.540442 -3.8009131 -9.0011034 -1.5385296 -3.7475042 -9.0288153 -1.5393264 -3.6976273 -9.0653505 -1.5417169 -3.6389956 -9.0805378 -1.540442 -3.5777853 -9.0889158 -1.5380515 -3.5230174 -9.1134605 -1.5385296 -3.4726374 -9.1496725 -1.5410794 -3.4009204 -9.129179 -1.533908 -3.3455188 -9.1517296 -1.5342268 -3.2933013 -9.1832361 -1.5361391 -1.1282215 -3.2085929 -0.51031113 -1.0927414 -3.1697247 -0.50250226 -3.1243424 -9.2441692 -1.5364579 -1.0754888 -3.2484965 -0.51365775 -1.0424371 -3.2146556 -0.50680512 -1.0200028 -3.2125232 -0.5053708 -0.99499643 -3.2017527 -0.50250226 -0.97590673 -3.2096865 -0.50282097 -0.95506811 -3.2118292 -0.50218356 -0.94113207 -3.2375357 -0.50553018 -0.93636149 -3.2964282 -0.5144546 -0.93169516 -3.3582358 -0.52385706 -0.92346495 -3.4096267 -0.53150654 -0.90681624 -3.4314539 -0.53421575 -2.4397771 -9.4642582 -1.5390077 -0.83817208 -3.3370039 -0.51668566 -0.80735284 -3.2998922 -0.50967366 -2.0484478 -8.5981293 -1.3880897 -1.9746956 -8.5201349 -1.3731095 -1.893731 -8.4049664 -1.3520733 -1.836423 -8.3903894 -1.3477706 -1.7754668 -8.3570795 -1.3404398 -1.7209669 -8.3523455 -1.3378899 -1.6776123 -8.4024401 -1.3444239 -1.6260242 -8.4125757 -1.3444239 -1.5745565 -8.4233646 -1.3445833 -1.5542537 -8.6067657 -1.3731095 -1.5180273 -8.7114515 -1.3887272 -1.4548968 -8.6631603 -1.3793247 -1.4009254 -8.6670513 -1.3785279 -1.2555526 -8.0823727 -1.2816343 -1.2673801 -8.501976 -1.348886 -1.2419937 -8.6972332 -1.3794841 -1.1875362 -8.6968651 -1.3782091 -1.1615856 -8.9144602 -1.4124724 -1.1355619 -9.1526299 -1.4500824 -1.1357845 -9.6378746 -1.5278522 -1.075421 -9.6338701 -1.5260992 -1.014114 -9.6196699 -1.5227525 -0.9544847 -9.6198177 -1.5217963 -0.89516622 -9.6225443 -1.5213182 -0.83585018 -9.6249046 -1.5208402 -0.77645946 -9.6259165 -1.5202026 -0.71804172 -9.6393595 -1.521637 -0.6594882 -9.6524487 -1.5230713 -0.60043335 -9.6592693 -1.5235493 -0.54065669 -9.6539001 -1.5221151 -0.48150969 -9.659008 -1.5224338 -0.42266551 -9.6716433 -1.5240275 -0.3630909 -9.6681356 -1.5230713 -0.30357531 -9.6642609 -1.5221151 -0.24444565 -9.6728506 -1.5232307 -0.18505171 -9.6721945 -1.5229119 -0.12571363 -9.6741343 -1.5230713 -0.066447243 -9.6885443 -1.5253024 -0.0069959415 -9.6858082 -1.5248243 --0.052106366 -9.6244621 -1.5149437 --0.11165985 -9.6673956 -1.5219557 --0.17069709 -9.6507359 -1.5194058 --0.22946368 -9.6307554 -1.5163779 --0.28914315 -9.648901 -1.5195652 --0.34848458 -9.6508923 -1.5202026 --0.40798622 -9.6554766 -1.5213182 --0.46641275 -9.6360283 -1.518609 --0.52536833 -9.6300278 -1.518131 --0.58480585 -9.632535 -1.5190872 --0.64475477 -9.641571 -1.5211589 --0.70469278 -9.6482639 -1.5229119 --0.76325685 -9.6358852 -1.521637 --0.82119191 -9.6172495 -1.5194058 --0.88099658 -9.6208773 -1.5208402 --0.94135684 -9.6290464 -1.5230713 --0.99929935 -9.6122875 -1.5213182 --1.0603137 -9.6246195 -1.5243461 --1.1179802 -9.6061649 -1.5224338 --1.1776221 -9.6050043 -1.5233899 --1.2379223 -9.6083679 -1.525143 --1.2996292 -9.6211367 -1.5284896 --1.3578103 -9.6071157 -1.5275334 --1.4137065 -9.5780935 -1.5241868 --1.4719998 -9.5663118 -1.5237087 --1.5336354 -9.5756216 -1.5267366 --1.5981957 -9.6010885 -1.5324738 --1.6595973 -9.6056938 -1.5348642 --1.7172874 -9.5885277 -1.5337486 --1.7737498 -9.5651913 -1.5316769 --1.8337086 -9.560914 -1.5327924 --1.8942574 -9.5591669 -1.5343862 --1.9556448 -9.5609045 -1.5366172 --2.0112166 -9.534236 -1.5342268 --2.0652771 -9.5014572 -1.5308801 --2.1256938 -9.4982395 -1.5324738 --2.1837125 -9.4840555 -1.5323144 --2.2461843 -9.4887314 -1.5353423 --2.3097289 -9.4968338 -1.5390077 --2.3689134 -9.4863138 -1.5396452 --2.3996341 -9.3644905 -1.5217963 --2.4766169 -9.4240656 -1.5342268 --2.5390165 -9.4258509 -1.5370953 --2.6023188 -9.4300785 -1.540442 --2.664963 -9.4310341 -1.5433105 --2.7219579 -9.4116602 -1.5428324 --2.7704139 -9.3635406 -1.5375735 --2.8192396 -9.318018 -1.5327924 --2.8947346 -9.3599625 -1.5428324 --2.9476504 -9.3279047 -1.540442 --2.9951274 -9.2795782 -1.5353423 --3.0714738 -9.320097 -1.5453823 --3.1273441 -9.2973318 -1.5447448 --3.1884985 -9.2901068 -1.5468166 --3.230438 -9.2275057 -1.5394858 --3.2952929 -9.2307549 -1.5434699 --3.369086 -9.2576742 -1.5515975 --3.4076338 -9.1877699 -1.5431511 --3.4642937 -9.1676121 -1.5433105 --3.5403371 -9.1977777 -1.5522349 --3.6024706 -9.190588 -1.5547848 --1.472712 -3.6897178 -0.60258305 --1.4715486 -3.6220739 -0.59238374 --3.7450094 -9.0597677 -1.5437886 --3.7970843 -9.0284281 -1.5423543 --3.8163018 -8.9205475 -1.5275334 --3.8311889 -8.8055315 -1.5114377 --3.8571904 -8.7186594 -1.5002822 --3.883486 -8.6345034 -1.4896047 --3.9257221 -8.5871677 -1.4854612 --1.5002658 -3.2285597 -0.53596878 --1.5213119 -3.2219718 -0.53644687 --1.5939859 -3.3229558 -0.55620801 --1.6567138 -3.4000897 -0.57182574 --1.676232 -3.3872056 -0.57134765 --1.694768 -3.3724461 -0.5705508 --1.7163261 -3.3637424 -0.57086957 --1.7423812 -3.3636677 -0.57278192 --1.7657436 -3.3581564 -0.5737381 --4.3714819 -8.1926613 -1.4602817 --4.3939366 -8.1144638 -1.4508792 --4.4426923 -8.0856199 -1.4505605 --4.4979892 -8.0685558 -1.4524729 --4.5721955 -8.084631 -1.4606005 --4.6467671 -8.1000977 -1.4687281 --4.7217002 -8.1149521 -1.4768556 --4.7964873 -8.1283398 -1.4848238 --4.8477921 -8.1012974 -1.485302 --4.9358153 -8.1347017 -1.4972543 --1.9773482 -3.213763 -0.57039148 --1.98606 -3.1839786 -0.56704479 --5.4001713 -8.5414772 -1.5925541 --5.4274454 -8.4691153 -1.5850639 --5.4744692 -8.4282026 -1.5836297 --5.5201097 -8.3853827 -1.5818766 --5.5763884 -8.3587456 -1.583311 --5.6192784 -8.3121033 -1.5809205 --5.6774273 -8.2880564 -1.5829922 --5.7529411 -8.2887497 -1.5900042 --5.8212943 -8.2783289 -1.5949446 --5.8427682 -8.2014465 -1.586817 --5.9033799 -8.1798515 -1.5896856 --5.9552069 -8.1458654 -1.5901636 --6.0174141 -8.1258335 -1.5935103 --6.0618291 -8.0816498 -1.5920759 --6.1328011 -8.0726042 -1.5978131 --6.1930542 -8.0489054 -1.6006817 --6.2550669 -8.0271072 -1.6040283 --6.3078718 -7.9932261 -1.6049845 --6.360496 -7.9589987 -1.6059407 --6.424737 -7.9390073 -1.6099248 --6.482089 -7.9101272 -1.6121559 --6.539958 -7.8816013 -1.6145464 --6.5888305 -7.8420801 -1.6147057 --6.6317077 -7.7954888 -1.6134309 --6.6871457 -7.7636266 -1.6153432 --6.7411451 -7.7298899 -1.6169368 --6.7956352 -7.6965218 -1.6186898 --6.8486533 -7.661304 -1.6201241 --6.890234 -7.6132812 -1.6188492 --6.9368186 -7.5708604 -1.6188492 --6.9851561 -7.5303259 -1.6193273 --7.033257 -7.4894829 -1.6198053 --7.0872412 -7.4547729 -1.6217178 --7.1444869 -7.4232388 -1.624427 --7.1919675 -7.3813825 -1.624905 --7.2454424 -7.3455486 -1.6268175 --7.3078156 -7.3184185 -1.6308016 --7.3624086 -7.2831612 -1.6330327 --7.40131 -7.2323289 -1.6317577 --7.4498091 -7.1908932 -1.6327139 --7.5095096 -7.1600347 -1.6362199 --7.558332 -7.1185608 -1.6373354 --7.6083732 -7.0781016 -1.6387697 --7.6582026 -7.0372963 -1.6402041 --7.6975837 -6.9868565 -1.6394072 --7.7447195 -6.9434476 -1.6403633 --7.7923512 -6.9003778 -1.6414789 --7.8323154 -6.8504848 -1.6410009 --7.8756957 -6.8035889 -1.6413195 --7.932313 -6.7679524 -1.6445068 --7.9963384 -6.7382383 -1.6492878 --8.0337391 -6.6858892 -1.6484909 --8.0929155 -6.6515141 -1.6523157 --8.125144 -6.5948877 -1.6505626 --8.1731596 -6.5510836 -1.6521564 --8.2070103 -6.4959087 -1.6508814 --8.2607145 -6.4563723 -1.6537499 --8.2954855 -6.4019451 -1.6527938 --8.3573818 -6.3682771 -1.6574154 --8.4065542 -6.3245935 -1.6594871 --8.4103336 -6.2469902 -1.6524751 --8.457263 -6.2016897 -1.6542281 --8.5191469 -6.167048 -1.659009 --8.5592365 -6.1163816 -1.6594871 --8.6208057 -6.0808196 -1.664268 --8.6393204 -6.0148344 -1.6606027 --8.6825733 -5.9661846 -1.6618775 --8.7329073 -5.9222169 -1.6645868 --8.7715416 -5.8701687 -1.6650648 --8.855175 -5.8477921 -1.6743079 --8.9504404 -5.8321548 -1.6857822 --8.9246082 -5.7376175 -1.6739893 --8.9671488 -5.6875081 -1.6754235 --9.0211258 -5.644424 -1.679089 --9.0513897 -5.5863724 -1.678292 --6.5852752 -4.0086093 -1.2057769 --9.065093 -5.4423542 -1.6680927 --9.1790171 -5.434412 -1.6832324 --9.2181568 -5.3814726 -1.6843479 --9.2629814 -5.3317051 -1.686579 --9.2877941 -5.2703824 -1.6851448 --9.338913 -5.2238979 -1.6886507 --9.3543644 -5.1574402 -1.6856228 --9.3684855 -5.0905185 -1.6824355 --9.4247828 -5.046454 -1.6870571 --7.5966592 -4.0077248 -1.3477706 --7.5913248 -3.9455559 -1.3423522 --9.3658123 -4.7951798 -1.6598058 --6.9339957 -3.4964709 -1.2148607 --6.9128785 -3.432781 -1.2072113 --6.9267163 -3.3868303 -1.2059363 --6.9544835 -3.3476908 -1.2072113 --6.9882751 -3.3112974 -1.2096016 --9.6710615 -4.5102119 -1.6838698 --9.7039366 -4.4532571 -1.684826 --6.5864725 -2.9736838 -1.1278478 --9.7199612 -4.317008 -1.6781328 --9.6983194 -4.2363405 -1.6696864 --9.7123394 -4.1716876 -1.6676147 --9.72684 -4.1074061 -1.6657023 --9.7272415 -4.0374269 -1.6613995 --9.7308073 -3.9690893 -1.657734 --9.7393999 -3.9030638 -1.6550249 --9.7695951 -3.845762 -1.6561404 --9.7570972 -3.7718606 -1.6499252 --7.5621738 -2.870049 -1.2669728 --9.7693462 -3.6394336 -1.6441882 --9.8044739 -3.5841675 -1.6464192 --9.8411493 -3.5292735 -1.6489691 --9.8626194 -3.468823 -1.6489691 --9.8818512 -3.407598 -1.6486503 --9.9044447 -3.3475323 -1.6489691 --9.9257355 -3.2870071 -1.6491284 --9.9626198 -3.2315254 -1.651997 --9.9982557 -3.1754158 -1.6547061 --10.017551 -3.1140079 -1.6547061 --10.059138 -3.0593779 -1.658531 --10.128818 -3.0127993 -1.6671365 --10.184083 -2.961345 -1.6733518 --10.247643 -2.9117544 -1.6810013 --10.296708 -2.8575342 -1.6862603 --10.349303 -2.803854 -1.6921568 --10.3959 -2.7481215 -1.6970971 --10.469924 -2.6990702 -1.706659 --10.515969 -2.642236 -1.7115992 --10.561709 -2.584938 -1.7165395 --10.642674 -2.535645 -1.7273763 --10.689769 -2.4776521 -1.7326353 --10.72981 -2.4176571 -1.7367787 --10.771445 -2.3576863 -1.741241 --10.846545 -2.3044772 -1.7512809 --10.901091 -2.2462502 -1.7579743 --10.916605 -2.1797066 -1.7582929 --10.754335 -2.0787647 -1.7294481 --10.851314 -2.0285234 -1.7433127 --11.087 -2.0022643 -1.7799665 --11.278028 -1.9653896 -1.8092896 --11.534243 -1.9372027 -1.84929 --11.950356 -1.9317859 -1.9154261 --12.163916 -1.8898025 -1.9484146 --12.195786 -1.8181882 -1.9517612 --12.242873 -1.7484875 -1.9576577 --12.264132 -1.6748034 -1.9594107 --12.214461 -1.5917367 -1.9496895 --12.21714 -1.5159091 -1.9485739 --12.224251 -1.4406865 -1.9482552 --12.247578 -1.3672961 -1.9506457 --12.242973 -1.2907747 -1.9485739 --12.25754 -1.2163115 -1.9496895 --12.252976 -1.13998 -1.9477772 --12.244987 -1.0634938 -1.9453866 --12.198146 -0.98405153 -1.9367809 --12.257116 -0.91314894 -1.9453866 --12.253625 -0.83731747 -1.9439523 --12.244737 -0.76125681 -1.9417213 --12.273819 -0.6874913 -1.9457054 --12.299499 -0.61324984 -1.9492114 --12.3267 -0.53880543 -1.9530362 --12.282421 -0.46137974 -1.9453866 --12.246538 -0.38479713 -1.9391714 --11.348278 0.83419335 -1.9429172 --11.357677 0.90498459 -1.945491 --11.323445 0.97221011 -1.940515 --11.353564 1.0450158 -1.9468637 --11.394979 1.1193845 -1.9552714 --11.358502 1.186209 -1.9501238 --11.363739 1.2572907 -1.9523544 --11.36266 1.3277948 -1.9535555 --11.290744 1.3896608 -1.9424025 --11.227291 1.4518325 -1.9327937 --11.27284 1.528111 -1.9424025 --11.260325 1.5968357 -1.9418877 --11.252264 1.6661866 -1.9422309 --11.236961 1.7344459 -1.941373 --11.217353 1.8019547 -1.9398288 --11.213859 1.8720478 -1.9412013 --11.20022 1.9404829 -1.9408582 --11.189072 2.0093439 -1.9410298 --11.176532 2.077961 -1.9410298 --11.151962 2.1442664 -1.9389708 --11.13763 2.212461 -1.9387991 --11.074626 2.2706618 -1.9300483 --11.080725 2.3428535 -1.9336517 --11.066141 2.4107995 -1.9336517 --11.049218 2.4782233 -1.9333085 --11.029964 2.5450869 -1.9326221 --10.997845 2.6088502 -1.9297051 --10.98163 2.6762826 -1.9297051 --10.949711 2.7397866 -1.9269598 --10.960365 2.814029 -1.9319358 --10.929555 2.8777142 -1.9295336 --10.922154 2.9475472 -1.931421 --10.876327 3.0068929 -1.926445 --10.864307 3.0754514 -1.9276462 --10.864157 3.1475406 -1.9310778 --10.841806 3.2133024 -1.9305631 --10.80303 3.274049 -1.9271314 --10.796852 3.3446479 -1.9297051 --10.766734 3.4078593 -1.9279894 --10.726874 3.4677958 -1.9245576 --10.713814 3.5363293 -1.9261019 --10.667641 3.5938213 -1.9216406 --10.665884 3.6662567 -1.9254155 --10.623665 3.7247851 -1.9218123 --10.668327 3.8141186 -1.934338 --10.58271 3.8568981 -1.9228418 --10.540376 3.9148974 -1.9194101 --10.507863 3.9763594 -1.9178658 --10.513601 4.0524554 -1.9235281 --10.490372 4.1176095 -1.9238713 --10.456676 4.1786084 -1.922327 --10.381563 4.2226419 -1.9130614 --10.396419 4.3032217 -1.9207827 --10.339858 4.354311 -1.9151205 --10.329246 4.4246573 -1.918209 --10.304611 4.4891338 -1.9187237 --10.268765 4.5486856 -1.9171795 --10.26222 4.6213183 -1.9212976 --10.205903 4.6714859 -1.9159783 --10.199378 4.74441 -1.9202679 --10.156714 4.8005867 -1.9176942 --10.10309 4.8513007 -1.9130614 --10.071362 4.9123368 -1.9127183 --10.022493 4.9648557 -1.909115 --9.9944811 5.0275874 -1.9096297 --9.9853773 5.1000228 -1.9139193 --9.9600182 5.1643705 -1.9151205 --9.8880424 5.2042761 -1.9072275 --9.8593988 5.2667074 -1.9079138 --9.8398886 5.3341479 -1.9104877 --9.8233728 5.4034472 -1.9137478 --9.8080978 5.4737043 -1.917351 --9.8249054 5.5624247 -1.9274746 --9.7931528 5.6240768 -1.9279894 --9.6971703 5.6483526 -1.9156352 --9.6699638 5.7122574 -1.9171795 --9.6507893 5.7811046 -1.9204396 --9.6294489 5.8489075 -1.9233565 --9.5950565 5.908916 -1.9236997 --9.5828524 5.9828119 -1.9286757 --9.5376387 6.0362291 -1.9269598 --9.4954462 6.091445 -1.9259303 --9.4455032 6.1415367 -1.9233565 --9.4224472 6.2091365 -1.926445 --9.4079294 6.2827039 -1.931421 --9.3928614 6.3563261 -1.936397 --9.3764315 6.4294419 -1.9412013 --9.3448944 6.4924755 -1.9429172 --9.2952156 6.5428867 -1.9408582 --9.2524881 6.5980816 -1.9403435 --9.1990519 6.6454978 -1.9375981 --9.178772 6.7169456 -1.9420593 --9.1405506 6.7754865 -1.9427457 --9.1232262 6.8497834 -1.9480648 --9.1116056 6.9288936 -1.9547566 --9.0689192 6.9846706 -1.9547566 --8.9909372 7.0129156 -1.9470353 --8.9724741 7.0874949 -1.952526 --8.9042015 7.1227202 -1.9470353 --8.9162083 7.2224946 -1.959561 --8.8618221 7.2689443 -1.9573303 --8.8147812 7.3212938 -1.9568156 --8.7998486 7.4006095 -1.9636791 --8.7287741 7.4327464 -1.9578451 --8.6837492 7.4868083 -1.9580168 --8.6591682 7.5587401 -1.9629927 --8.6451035 7.6404386 -1.9705424 --8.6156788 7.7091084 -1.9746605 --8.5791655 7.77175 -1.9772342 --8.5342207 7.8269086 -1.9779207 --8.5040827 7.8958859 -1.9822103 --8.4655228 7.957365 -1.9846125 --8.3908482 7.9847074 -1.9784354 --8.3409872 8.0353584 -1.9782637 --8.3070412 8.1015205 -1.9820386 --8.2697926 8.1647997 -1.9851272 --8.2327766 8.2286215 -1.9883873 --8.1890564 8.2859898 -1.9901031 --8.1415005 8.3396063 -1.9909611 --8.0710306 8.3695459 -1.9861567 --8.0460215 8.4467344 -1.9928485 --7.9859414 8.4873343 -1.9907895 --7.9719391 8.5773115 -2.0005698 --7.9151626 8.6217098 -1.9995403 --7.8746843 8.6839819 -2.0028005 --7.8192806 8.7299347 -2.0022857 --7.772747 8.7858658 -2.0041733 --7.7212844 8.8363609 -2.0048594 --7.6649895 8.8813334 -2.0043447 --7.604599 8.9214497 -2.0028005 --7.5535216 8.9724646 -2.00383 --7.4945469 9.0140982 -2.0028005 --7.4722266 9.1002703 -2.0118945 --7.4249334 9.156662 -2.0142968 --7.3636837 9.1958952 -2.012924 --7.3089533 9.2432232 -2.0134387 --7.2690744 9.3096399 -2.0182431 --7.2106118 9.3525066 -2.0179 --7.1578636 9.4028454 -2.0192726 --7.1095033 9.4591904 -2.022018 --7.0583725 9.5121298 -2.0240769 --6.9998746 9.5552597 -2.0240769 --6.941113 9.5980301 -2.0240769 --6.8832345 9.6420431 -2.0244203 --6.8267794 9.6881237 -2.0252781 --6.7773294 9.7443886 -2.0283666 --6.7274456 9.8004112 -2.0314553 --6.6605554 9.8317165 -2.0293963 --6.6121478 9.890419 -2.0331712 --6.554049 9.9349165 -2.034029 --6.4978023 9.9823761 -2.0355732 --6.4481397 10.040296 -2.0393481 --6.3763952 10.063859 -2.036088 --6.3140025 10.101959 -2.0359163 --6.2539673 10.143866 -2.0366027 --6.1992846 10.194675 -2.0391765 --6.131042 10.223228 -2.0372891 --6.0697021 10.263198 -2.0378039 --6.0110798 10.307908 -2.0393481 --5.9545922 10.356554 -2.0417504 --5.8977332 10.404896 -2.0441525 --5.835701 10.444328 -2.0448389 --5.7810092 10.497199 -2.0482705 --5.7113223 10.522947 -2.0463831 --5.663835 10.589938 -2.0527318 --5.605638 10.637566 -2.0553055 --5.5466151 10.684003 -2.0577078 --5.4809551 10.717834 -2.0577078 --5.4124298 10.745984 -2.0566783 --5.3472672 10.780757 -2.0570214 --5.2753978 10.801856 -2.0547907 --5.2137146 10.843788 -2.0566783 --5.1517153 10.885371 -2.0585656 --5.0810838 10.908738 -2.0570214 --5.0230818 10.959414 -2.0607963 --4.9606004 11.000806 -2.0628552 --4.8981991 11.042745 -2.0650859 --4.8299561 11.071688 -2.0649142 --4.7603774 11.097494 -2.0642281 --4.6941085 11.131033 -2.0650859 --4.626853 11.162356 -2.0656006 --4.5612473 11.197836 -2.0669734 --4.5019674 11.249393 -2.0714345 --4.429975 11.26947 -2.0700619 --4.3642902 11.305631 -2.0717778 --4.2930932 11.327591 -2.0709198 --4.2197299 11.343562 -2.0690324 --4.156127 11.385899 -2.0721209 --4.0901704 11.422317 -2.0741799 --4.0183759 11.442551 -2.0733221 --3.9448836 11.457676 -2.0716062 --3.8779705 11.491934 -2.0734935 --3.8141859 11.536091 -2.0772684 --3.7463644 11.56865 -2.0789843 --3.6770959 11.597054 -2.0800138 --3.6090794 11.629748 -2.0819013 --3.5410862 11.662987 -2.0839603 --3.4728208 11.695828 -2.0860193 --3.4004421 11.715025 -2.0856762 --3.3319895 11.747991 -2.0879068 --3.2606311 11.771063 -2.0884216 --3.1916857 11.803211 -2.0906522 --3.1229711 11.836862 -2.093226 --3.0475833 11.845305 -2.0913384 --2.9702938 11.845626 -2.0880783 --2.9043303 11.891383 -2.0930543 --2.8333616 11.917606 -2.0945985 --2.7610707 11.938606 -2.0952849 --2.6927328 11.97743 -2.0992315 --2.6200304 11.997578 -2.0999177 --2.5445275 12.004754 -2.0983734 --2.4622943 11.978645 -2.0909953 --2.3889408 11.994494 -2.091167 --2.3197727 12.032144 -2.0952849 --2.2525787 12.081985 -2.1016335 --2.1777046 12.091702 -2.1009471 --2.1044817 12.11066 -2.1019766 --2.0301325 12.123344 -2.1019766 --1.9497541 12.098613 -2.0954566 --1.8809062 12.145397 -2.1016335 --1.8060586 12.154761 -2.1012905 --1.7333865 12.179269 -2.1036925 --1.6596853 12.197485 -2.1050653 --1.5822768 12.1879 -2.1016335 --1.5079464 12.201289 -2.10232 --1.4341998 12.220098 -2.1040359 --1.353646 12.17873 -2.0952849 --1.2859814 12.254414 -2.1071243 --1.2112491 12.266975 -2.1079822 --1.1363204 12.2781 -2.1086686 --1.0628248 12.306435 -2.1124434 --0.98721534 12.311743 -2.1122718 --0.90961981 12.290059 -2.1074674 --0.83332664 12.282631 -2.1052368 --0.75697714 12.27178 -2.1024914 --0.68171918 12.277177 -2.102663 --0.60487181 12.250626 -2.0973439 --0.52956462 12.251154 -2.0968292 --0.45401889 12.244328 -2.0951133 --0.37909317 12.253776 -2.0963144 --0.30416587 12.266705 -2.0982018 --0.22887477 12.267355 -2.0980303 --0.15362386 12.270498 -2.0983734 --0.078274854 12.262344 -2.0968292 --0.0030336541 12.266534 -2.0975156 -0.072197072 12.260411 -2.0964861 -0.14741224 12.258752 -2.0963144 -0.22262776 12.257617 -2.0963144 -0.2981953 12.270793 -2.0988882 -0.37390283 12.282518 -2.1012905 -0.44940436 12.283931 -2.1019766 -0.52451575 12.275037 -2.1009471 -0.59939039 12.262732 -2.0994029 -0.6742422 12.251937 -2.0982018 -0.74934572 12.246586 -2.0980303 -0.82460785 12.243723 -2.0983734 -0.89979076 12.239416 -2.0985451 -0.97471672 12.2317 -2.0982018 -1.0485694 12.211747 -2.0957997 -1.122666 12.196255 -2.0942554 -1.1968048 12.182273 -2.0930543 -1.2732725 12.191358 -2.0959713 -1.3478365 12.181357 -2.095628 -1.4223256 12.1709 -2.0952849 -1.4975803 12.166833 -2.0961428 -1.569804 12.138852 -2.0928826 -1.64333 12.122158 -2.0916817 -1.7192019 12.122576 -2.093569 -1.7941298 12.115697 -2.0942554 -1.8687373 12.106407 -2.0945985 -1.9390769 12.070395 -2.0903089 -2.0139146 12.063129 -2.091167 -2.0818365 12.0156 -2.0849898 -2.1529102 11.988055 -2.0824161 -2.2217424 11.949437 -2.0779548 -2.3108408 12.017812 -2.0925395 -2.4047024 12.104864 -2.1105559 -2.4785354 12.087952 -2.1102128 -2.529619 11.963602 -2.0908237 -2.6132591 11.995021 -2.0992315 -2.6730049 11.91724 -2.0882499 -2.7276845 11.820941 -2.0740082 -2.811312 11.85095 -2.0824161 -2.883975 11.833477 -2.0824161 -2.9565296 11.815558 -2.0824161 -3.0238259 11.777157 -2.0788128 -3.1063209 11.797441 -2.0858476 -3.1683788 11.740114 -2.0789843 -3.2356284 11.703362 -2.0758958 -3.3041565 11.671913 -2.0738368 -3.3696785 11.630602 -2.0700619 -3.4378986 11.599318 -2.0681744 -3.5098636 11.580832 -2.0686891 -3.5858135 11.575076 -2.0716062 -3.6549852 11.547221 -2.0705767 -3.7288001 11.533951 -2.0722926 -3.7923965 11.489338 -2.068346 -3.8609347 11.46025 -2.0673165 -3.9366267 11.452182 -2.0702336 -4.0006266 11.410149 -2.0669734 -4.0825057 11.418781 -2.0731504 -4.1376462 11.352791 -2.0656006 -4.2058549 11.323495 -2.0649142 -4.2738605 11.29379 -2.0642281 -4.3381157 11.254484 -2.0618258 -4.4052901 11.223069 -2.0609679 -4.469317 11.183935 -2.0587373 -4.523376 11.120712 -2.0520453 -4.6005712 11.114594 -2.0561635 -4.6660056 11.079801 -2.0549624 -4.7276936 11.036473 -2.052217 -4.786665 10.987388 -2.0484421 -4.8547902 10.959612 -2.0487852 -4.9223504 10.930515 -2.0489569 -4.9885058 10.898315 -2.0486138 -5.0598545 10.877327 -2.0505011 -5.1265016 10.846075 -2.0505011 -5.1874104 10.802871 -2.0482705 -5.2419343 10.746932 -2.0436378 -5.3042784 10.707504 -2.0422652 -5.3729782 10.680916 -2.0434661 -5.4397583 10.650379 -2.0439808 -5.5072737 10.621174 -2.0448389 -5.5682096 10.579336 -2.0432947 -5.6269832 10.533675 -2.041064 -5.6797705 10.477299 -2.0367744 -5.7463255 10.446568 -2.0376322 -5.8021531 10.396488 -2.0347154 -5.8658357 10.360691 -2.0347154 -5.9238992 10.315107 -2.0328279 -5.9831128 10.271754 -2.0314553 -6.042017 10.228065 -2.0300825 -6.0950408 10.174742 -2.0268223 -6.14815 10.121997 -2.0237339 -6.2127247 10.088276 -2.0245917 -6.2703338 10.043281 -2.0232191 -6.3286786 9.9996223 -2.0221896 -6.386724 9.9556274 -2.0211601 -6.4433932 9.9096451 -2.0197873 -6.4970284 9.8592291 -2.0175569 -6.5584955 9.820817 -2.0179 -6.6186314 9.7803898 -2.0179 -6.6712742 9.7290325 -2.0156693 -6.7173524 9.668499 -2.0115514 -6.7595363 9.6029339 -2.0064037 -6.8171873 9.5596733 -2.0060606 -6.8734083 9.5144701 -2.0053742 -6.9258399 9.4641666 -2.0036583 -6.9814334 9.4183264 -2.0029721 -7.0432329 9.380826 -2.0041733 -7.1018529 9.3390017 -2.0045164 -7.1572185 9.2929087 -2.0040016 -7.1995602 9.230176 -1.9998835 -7.2383485 9.1634092 -1.9949075 -7.2827439 9.104207 -1.9916475 -7.3266854 9.0448055 -1.9883873 -7.3720474 8.9874935 -1.985642 -7.4182415 8.9314814 -1.9832398 -7.475441 8.8888111 -1.9839261 -7.5285635 8.8412752 -1.983583 -7.5826712 8.7949142 -1.983583 -7.6313095 8.7422857 -1.9822103 -7.6717577 8.6805334 -1.9787786 -7.7235622 8.6318293 -1.9784354 -7.7843184 8.5930367 -1.9804944 -7.8195829 8.5262356 -1.9760332 -7.8502989 8.4549942 -1.9705424 -7.8986559 8.4030771 -1.9696845 -7.947351 8.3515997 -1.9689982 -7.995028 8.2991314 -1.9681402 -8.0120926 8.2153625 -1.9597325 -8.0630417 8.166748 -1.9599042 -8.1088219 8.1129398 -1.9588747 -8.1556454 8.0602627 -1.9581883 -8.1950788 8.0004349 -1.9557861 -8.2489786 7.9547868 -1.9569873 -8.3040543 7.9101372 -1.9585315 -8.3474102 7.85431 -1.9573303 -8.3687439 7.7781305 -1.9509817 -8.4076023 7.7186403 -1.9489228 -8.4562645 7.6682305 -1.9492658 -8.503891 7.6168566 -1.9494375 -8.5423498 7.5573549 -1.9475501 -8.5566578 7.4769263 -1.9401718 -8.5889482 7.4126983 -1.9370834 -8.6245222 7.3515511 -1.9348527 -8.6574087 7.288343 -1.9321073 -8.7034817 7.2363443 -1.9324505 -8.7347746 7.1721778 -1.9295336 -8.7832088 7.12217 -1.9305631 -8.8221302 7.0644488 -1.9295336 -8.8421259 6.9918547 -1.924386 -8.8732128 6.9283757 -1.9218123 -8.9249201 6.8810177 -1.9238713 -8.9685411 6.8273191 -1.9242145 -9.0039635 6.767426 -1.9228418 -9.0326586 6.7026596 -1.9200964 -9.0680523 6.6430349 -1.9188954 -9.1086416 6.5872698 -1.9188954 -9.1416721 6.5261049 -1.917351 -9.1589937 6.4540029 -1.9125466 -9.1879072 6.3903713 -1.910316 -9.2301941 6.3361049 -1.9110024 -9.2640038 6.2760353 -1.9099729 -9.2925091 6.2125049 -1.9079138 -9.3353882 6.1586246 -1.9089434 -9.3407984 6.0802708 -1.9022515 -9.3630085 6.0132613 -1.899163 -9.4097157 5.9620237 -1.901222 -9.4285765 5.8932114 -1.8976188 -9.4645586 5.8352475 -1.8976188 -9.4833488 5.7668285 -1.894187 -9.511796 5.7044783 -1.8928144 -9.5305061 5.6364808 -1.8895543 -9.5640602 5.5774007 -1.8893826 -9.5801659 5.5083013 -1.8857794 -9.6206408 5.4533005 -1.8871521 -9.6547813 5.3946471 -1.8873236 -9.6540432 5.3167734 -1.8806318 -9.6648369 5.2456908 -1.8763422 -9.6673031 5.1704955 -1.8705083 -9.7206373 5.1225605 -1.8747979 -9.7711229 5.072804 -1.8785728 -9.8353977 5.0297956 -1.885093 -9.8352776 4.9538445 -1.8790876 -9.8637238 4.8925281 -1.8787444 -9.9431334 4.8561192 -1.8883531 -9.9869499 4.8018465 -1.8910985 -10.013554 4.7392135 -1.8905838 -10.026369 4.6701961 -1.8874952 -10.091557 4.6254139 -1.8945302 -10.073943 4.5427566 -1.8857794 -10.125043 4.4912424 -1.8902406 -10.123513 4.416429 -1.8847499 -10.118731 4.3406391 -1.8787444 -10.1715 4.2895689 -1.8837203 -10.173056 4.2168941 -1.8790876 -10.264433 4.1811461 -1.8914417 -10.299042 4.1217456 -1.8931575 -10.339725 4.0645995 -1.8960744 -10.393882 4.0124302 -1.9015652 -10.372243 3.9311264 -1.8929859 -10.417407 3.8753076 -1.8969324 -10.409523 3.7998321 -1.8910985 -10.415019 3.7295802 -1.8878384 -10.479537 3.6802897 -1.8955597 -10.506579 3.6175225 -1.8964176 -10.546314 3.5589705 -1.8996778 -10.525861 3.4802797 -1.8919564 -10.594818 3.4311035 -1.9007072 -10.612854 3.3651373 -1.9001925 -10.634243 3.3002467 -1.900364 -10.644866 3.2320728 -1.8986483 -10.65222 3.1630518 -1.8964176 -10.694135 3.1042204 -1.9005357 -10.693076 3.0329008 -1.8969324 -10.706738 2.9659178 -1.8960744 -10.750413 2.9071076 -1.9007072 -10.762332 2.8395822 -1.8996778 -10.772874 2.7717745 -1.8984767 -10.783945 2.7041841 -1.8974471 -10.801291 2.6381979 -1.8976188 -10.809608 2.5700505 -1.8962461 -10.831893 2.5052288 -1.8974471 -10.873975 2.4447663 -1.9022515 -10.888771 2.3779988 -1.9022515 -10.900266 2.3105292 -1.9017367 -10.921958 2.2451892 -1.9031094 -10.965481 2.1840937 -1.9084285 -10.961263 2.1134143 -1.9053401 -10.947875 2.0412447 -1.9007072 -10.973768 1.9764748 -1.9031094 -10.983747 1.9087666 -1.9027663 -11.038006 1.8484908 -1.910316 -11.034551 1.7783782 -1.9077423 -11.03844 1.7095833 -1.9065411 -11.067237 1.6445699 -1.9098012 -11.111257 1.5814869 -1.9158068 -11.119775 1.513147 -1.9156352 -11.154252 1.4481841 -1.9200964 -11.125773 1.3751274 -1.9135761 -11.136937 1.3071793 -1.9140909 -11.135936 1.2378411 -1.9125466 -11.155079 1.1707217 -1.9146056 -11.151268 1.1011895 -1.9127183 -11.157815 1.032746 -1.9127183 -11.140385 0.96223122 -1.9086002 -11.181432 0.8966884 -1.9147773 -11.177881 0.82740992 -1.913233 -11.164072 0.75754291 -1.9099729 -11.172443 0.68926942 -1.9106592 -11.195152 0.62173963 -1.9139193 -11.19974 0.55308425 -1.9140909 -11.207845 0.48456576 -1.9149488 -11.183041 0.41476709 -1.9101444 -11.221809 0.34726512 -1.9164931 -11.218804 0.27828124 -1.9156352 -11.240986 0.20982267 -1.9192384 -11.259793 0.14106564 -1.922327 -11.260447 0.071974203 -1.922327 -11.245899 0.0028777863 -1.9197532 -11.263437 -0.066231906 -1.9228418 -11.27464 -0.13548508 -1.9249008 -11.270641 -0.20460847 -1.924386 -11.251447 -0.2733275 -1.9212976 -11.23971 -0.34205922 -1.9195817 -11.232477 -0.4108378 -1.9187237 -11.226792 -0.47962481 -1.918209 -11.196086 -0.54715276 -1.9134046 -11.199404 -0.61621994 -1.9146056 -11.234745 -0.68733704 -1.9214691 -11.225402 -0.75592774 -1.9206111 -11.27459 -0.82876909 -1.9300483 -11.272239 -0.89816809 -1.9305631 -11.281239 -0.96858197 -1.9331368 -11.270178 -1.0373322 -1.932279 -11.181244 -1.0983664 -1.9178658 -11.25366 -1.1752491 -1.9317642 -11.228612 -1.2423263 -1.9286757 -11.202187 -1.309026 -1.9254155 -11.14701 -1.3719553 -1.9171795 -11.144244 -1.4410849 -1.918209 -11.132263 -1.5090402 -1.9176942 -11.142303 -1.5800866 -1.9211259 -11.205487 -1.659255 -1.9339948 -11.17757 -1.7252725 -1.9309063 -11.127866 -1.7875702 -1.9240428 -11.090452 -1.8514333 -1.9194101 -11.075972 -1.9189433 -1.9188954 -10.984478 -1.9725811 -1.9048253 -10.733904 -1.9956198 -1.8626153 -10.35867 -1.9916505 -1.7982709 -10.082463 -2.002743 -1.7514281 -9.9406652 -2.0380416 -1.7284358 -9.7727947 -2.0661712 -1.7008104 -9.6915913 -2.111201 -1.688628 -9.5515671 -2.1421547 -1.6659787 -9.4316921 -2.1761243 -1.6469327 -9.2964268 -2.2050645 -1.6251414 -8.5486021 -2.083076 -1.4935355 -8.4706736 -2.1192224 -1.4818678 -7.9708705 -2.0461617 -1.3943592 -8.4545088 -2.2257712 -1.4837552 -7.5200119 -2.0290411 -1.3176607 -7.4903293 -2.0704179 -1.3145721 -7.4518909 -2.109091 -1.3099394 -7.1341243 -2.0664685 -1.2546889 -6.8955679 -2.043273 -1.21368 -6.7575097 -2.0475287 -1.1908592 -6.4672179 -2.0029271 -1.1402416 -6.3035932 -1.9946927 -1.1126163 -6.1618781 -1.9914998 -1.0889376 -6.1037035 -2.0141354 -1.0805299 -5.9605289 -2.0075023 -1.0565079 -5.8586621 -2.0132847 -1.0400358 -5.8452687 -2.0488687 -1.0398642 -5.8168173 -2.0790563 -1.0369473 -5.7484164 -2.0944622 -1.0266521 -5.7493091 -2.134841 -1.0292259 -5.8982625 -2.2314615 -1.0594249 -5.7925386 -2.2321689 -1.0422664 -5.9318752 -2.3277977 -1.0709212 -5.7610512 -2.3016214 -1.0415801 -5.7824087 -2.3514071 -1.0482719 -5.7314625 -2.3717682 -1.0414085 -5.7149858 -2.4061263 -1.0410653 -5.6032214 -2.3996303 -1.0227057 -5.5034966 -2.3969712 -1.0065767 -5.4562597 -2.4163277 -1.0003996 -5.4494152 -2.4534025 -1.0019438 -5.4459033 -2.492125 -1.0041745 -5.3706641 -2.497648 -0.99267828 -5.3089242 -2.5086586 -0.98375583 -5.3769078 -2.5812807 -0.99988484 -5.3813329 -2.6241596 -1.0038313 -5.3774881 -2.6632531 -1.0062335 -5.3548851 -2.6930988 -1.0050324 -5.2829895 -2.6976686 -0.99422252 -5.2943225 -2.7445478 -0.99971324 -5.3139963 -2.7962568 -1.0069199 -5.2524242 -2.8051324 -0.998169 -5.2073998 -2.8222806 -0.99267828 -5.1994791 -2.8594036 -0.99456573 -5.1766748 -2.8883719 -0.99353617 -5.1597118 -2.9205666 -0.99370778 -5.2040558 -2.9879925 -1.0062335 -5.1439133 -2.9955668 -0.99782586 -5.0847235 -3.0030174 -0.98958975 -4.9766226 -2.9804871 -0.97140169 -5.0786414 -3.084115 -0.99593842 -5.0193596 -3.0904183 -0.98770231 -4.9743981 -3.1049819 -0.98238319 -4.9044762 -3.1033027 -0.97191644 -4.8762217 -3.1274853 -0.97002906 -4.9519157 -3.2191141 -0.98976135 -4.9041033 -3.2310042 -0.98392743 -4.8596091 -3.2446182 -0.97877985 -4.8738747 -3.2975683 -0.98598647 -4.8909221 -3.3530438 -0.99387938 -4.8354683 -3.3588166 -0.98650122 -4.7680464 -3.3555288 -0.97654927 -4.7842617 -3.4110374 -0.98444217 -4.7560554 -3.4351361 -0.98289794 -4.7817912 -3.4985847 -0.99302143 -4.7776451 -3.5407677 -0.99679631 -4.7566171 -3.5706077 -0.99696791 -4.7220726 -3.590184 -0.99422252 -4.7381968 -3.6485498 -1.0026302 -4.6939716 -3.6605866 -0.99782586 -4.6312256 -3.6575606 -0.9889034 -4.6210041 -3.695756 -0.99164879 -4.5737457 -3.7041945 -0.98615801 -4.6095777 -3.7803037 -0.9993701 -4.5953889 -3.8160708 -1.0014291 -4.5914888 -3.8606839 -1.0058904 -4.4867129 -3.8197956 -0.98735911 -4.4169335 -3.8073647 -0.97672087 -4.5196486 -3.9445443 -1.0058904 -4.3684025 -3.8599756 -0.97637767 -4.4672322 -3.9964252 -1.0050324 -4.4710989 -4.0495586 -1.0117242 -4.4962606 -4.1228671 -1.0235636 -3.6009998 -3.3425498 -0.8168034 -3.561043 -3.3463624 -0.81217062 -3.5325933 -3.3606782 -0.81028318 -3.5076497 -3.3781891 -0.80925369 -4.2682405 -4.1618538 -0.9993701 -4.2215939 -4.1671977 -0.99422252 -4.1910677 -4.1881471 -0.99302143 -4.1784472 -4.2270989 -0.99628156 -4.1331639 -4.2329173 -0.99147719 -4.0852323 -4.2355032 -0.98598647 -4.0231576 -4.2226796 -0.97689241 -4.0788507 -4.3341103 -0.99765426 -2.5754807 -2.7699034 -0.61982358 -2.5484438 -2.7747674 -0.61724979 -2.5280616 -2.7867029 -0.6163919 -2.4944847 -2.7838144 -0.61210227 -2.5080338 -2.8337505 -0.62016678 -3.966469 -4.5384326 -1.0108663 -3.980381 -4.611167 -1.0220194 -3.9085598 -4.584516 -1.0103515 -3.8625929 -4.5873079 -1.0055472 -3.8362622 -4.6131945 -1.0060619 -3.807884 -4.6366467 -1.0060619 -3.7923913 -4.6759949 -1.0096653 -3.7396157 -4.6691833 -1.0029734 -3.6876786 -4.6626735 -0.99645317 -3.6432376 -4.6650224 -0.99199194 -3.6157479 -4.6888494 -0.99233508 -3.5767665 -4.6976199 -0.98941815 -5.7370515 -7.6327705 -1.6241119 -5.6865878 -7.6630816 -1.6230824 -5.6173401 -7.6676273 -1.6165621 -5.5678778 -7.6987572 -1.6158758 -5.5399933 -7.7600398 -1.6217097 -5.4650397 -7.7552285 -1.6134737 -5.3847299 -7.7417026 -1.6035217 -5.3159428 -7.7437305 -1.5970014 -5.2898746 -7.8080144 -1.6036932 -5.2057338 -7.7862678 -1.5923686 -5.1312814 -7.7777658 -1.583961 -5.0651913 -7.7810297 -1.578127 -5.0684519 -7.8915462 -1.5945992 -5.0114999 -7.9091811 -1.5918539 -4.9675741 -7.9473014 -1.5933981 -4.925437 -7.9885349 -1.5956287 -4.8870749 -8.0362844 -1.5992321 -4.8326073 -8.0576706 -1.5975162 -4.7895937 -8.0981951 -1.5997468 -4.7408066 -8.1291332 -1.6000899 -4.6545062 -8.0948648 -1.5873927 -4.6042638 -8.1224146 -1.587221 -4.5447297 -8.1333122 -1.5837893 -4.4947391 -8.1610451 -1.5837893 -4.4511571 -8.200593 -1.5861915 -4.3882132 -8.2042933 -1.5815587 -4.3309021 -8.2179909 -1.578985 -4.2763109 -8.2365398 -1.5774407 -4.2283831 -8.2678871 -1.5784702 -4.1735849 -8.2857571 -1.576926 -4.1209149 -8.3076792 -1.5762396 -4.0594888 -8.3115616 -1.5721216 -4.0114012 -8.3425293 -1.5733227 -3.9672997 -8.3821239 -1.5762396 -3.9120505 -8.3982716 -1.5746953 -3.860446 -8.4221172 -1.5746953 -3.8010032 -8.4285822 -1.5714352 -3.7464194 -8.4454412 -1.5702342 -3.6945286 -8.4682703 -1.5702342 -3.6774445 -8.5722685 -1.5856768 -1.2572447 -2.979089 -0.52425063 -1.2491246 -3.0113206 -0.5288834 -1.2328534 -3.0244029 -0.52991295 -1.2186642 -3.0428867 -0.53197193 -3.3605134 -8.5480871 -1.560797 -3.3072908 -8.5667076 -1.5604538 -1.1774573 -3.1044171 -0.53935009 -1.1662848 -3.1328211 -0.54329658 -1.1490666 -3.1454713 -0.54432607 -3.1053541 -8.6712637 -1.5652581 -3.0478473 -8.6780701 -1.5630275 -1.0993104 -3.1903088 -0.5487873 -1.0781398 -3.1923265 -0.54792941 -1.0647153 -3.2175899 -0.55136108 -1.0476832 -3.2324977 -0.55290538 -1.0436058 -3.2886388 -0.56199938 -2.6863759 -8.6554651 -1.5395204 -0.99201179 -3.2644322 -0.55530757 -0.96102989 -3.2336245 -0.54861569 -0.93650359 -3.2233758 -0.54569876 -0.92315704 -3.2518089 -0.54981685 -0.92842555 -3.3485587 -0.56628901 -2.2204692 -8.2101908 -1.4424032 -2.1617601 -8.1922255 -1.4367409 -0.87472981 -3.3965666 -0.57195133 -0.84213585 -3.3550451 -0.56354362 -0.82176745 -3.3611062 -0.56371522 -1.9281728 -8.1086235 -1.4127189 -1.8763859 -8.1116629 -1.4111747 -1.8270104 -8.1249456 -1.4115179 -1.7720799 -8.1129036 -1.4073998 -1.718183 -8.1043482 -1.4039681 -1.6664406 -8.1050882 -1.4022522 -1.6141769 -8.1026001 -1.4000216 -1.5616337 -8.0978413 -1.3974478 -1.5088488 -8.090806 -1.3945309 -1.4567327 -8.086338 -1.3921287 -1.4054028 -8.0854177 -1.3904128 -1.34861 -8.051136 -1.382863 -1.3027867 -8.0816298 -1.3868096 -1.2543797 -8.0972605 -1.3881822 -1.2014887 -8.0833654 -1.3844073 -1.1714272 -8.2281113 -1.4086008 -1.128617 -8.2917624 -1.4185528 -1.0832951 -8.3415184 -1.4261025 -1.0665044 -8.6266651 -1.4750043 -1.0273212 -8.7504625 -1.4955946 -0.99927199 -8.9876804 -1.5360887 -0.94677669 -9.0191174 -1.5405499 -0.89209557 -9.03162 -1.541751 -0.83566415 -9.0261326 -1.5398636 -0.78221262 -9.0536652 -1.54381 -0.72648835 -9.0563307 -1.5434668 -0.67126924 -9.0655298 -1.5443248 -0.61656386 -9.0832396 -1.5467269 -0.56063682 -9.0839014 -1.5462122 -0.50450683 -9.0802851 -1.5450112 -0.44878176 -9.08321 -1.5450112 -0.39295486 -9.0838242 -1.544668 -0.3381933 -9.1126451 -1.5493008 -0.28196907 -9.104702 -1.5475849 -0.22675522 -9.1328516 -1.5522177 -0.17042027 -9.1183119 -1.5494723 -0.11389288 -9.0728865 -1.5414078 -0.058282513 -9.0832653 -1.5431237 -0.002543333 -9.0558672 -1.5383192 --0.053087313 -9.0665493 -1.5402067 --0.10884894 -9.076889 -1.5420941 --0.16463156 -9.0809755 -1.5429521 --0.22020411 -9.073885 -1.5419226 --0.2762371 -9.0841799 -1.5439816 --0.33215195 -9.0872364 -1.5448395 --0.38794607 -9.0860109 -1.5450112 --0.44479784 -9.1060915 -1.5489576 --0.50093454 -9.1081095 -1.5498155 --0.55614853 -9.0940475 -1.5479281 --0.61187178 -9.0894814 -1.5477564 --0.66567957 -9.0590277 -1.5431237 --0.72062534 -9.046916 -1.541751 --0.77671325 -9.0491953 -1.5429521 --0.83231384 -9.0452394 -1.5431237 --0.88799155 -9.0419235 -1.5434668 --0.9437623 -9.0392447 -1.5439816 --0.99942517 -9.0352411 -1.5443248 --1.0551889 -9.0318747 -1.5448395 --1.11396 -9.0526075 -1.5496439 --1.1640478 -9.0035906 -1.5422658 --1.2207277 -9.0070171 -1.5441532 --1.2798465 -9.0266685 -1.5489576 --1.3350646 -9.0176706 -1.5487859 --1.3872129 -8.988863 -1.5451827 --1.4456248 -9.0006084 -1.5487859 --1.5034214 -9.0071163 -1.5515313 --1.5615205 -9.0142231 -1.5544482 --1.615059 -8.9947758 -1.5527325 --1.6691384 -8.9788857 -1.551703 --1.7297839 -8.9974976 -1.5568504 --1.7863033 -8.9934788 -1.5580516 --1.8365033 -8.9582224 -1.553762 --1.888377 -8.9323273 -1.5511882 --1.9439883 -8.9244223 -1.5518745 --1.9984952 -8.9113655 -1.551703 --2.0571256 -8.916213 -1.5547915 --2.1072459 -8.8842525 -1.5513598 --2.1719871 -8.913269 -1.5589095 --2.2307038 -8.9160204 -1.5618265 --2.2902713 -8.9212494 -1.5652581 --2.3464737 -8.9127445 -1.5662876 --2.399833 -8.893424 -1.5654298 --2.4438524 -8.8405504 -1.5585663 --2.5066409 -8.8557215 -1.5640571 --2.5617542 -8.8430128 -1.5645719 --2.6224067 -8.8488522 -1.5685183 --2.6715078 -8.8156242 -1.5654298 --2.7240911 -8.7943611 -1.5645719 --2.7797852 -8.7831163 -1.5656013 --2.833322 -8.7649574 -1.5654298 --2.8916826 -8.7614393 -1.5680035 --2.9570284 -8.7780743 -1.5743521 --3.0057085 -8.7448587 -1.5716069 --3.0544186 -8.712307 -1.569033 --3.1021791 -8.6776314 -1.5661161 --3.1685257 -8.6945305 -1.5728079 --3.2146094 -8.6555319 -1.5692046 --3.2645192 -8.6273527 -1.5676603 --3.3237736 -8.6237049 -1.5707489 --1.4539547 -3.7062724 -0.6544838 --1.4788626 -3.70277 -0.65551335 --3.4941969 -8.5911779 -1.5764112 --3.543077 -8.5604734 -1.5746953 --3.5901821 -8.5258617 -1.5722932 --3.6412642 -8.5009556 -1.5717784 --3.703589 -8.501935 -1.5762396 --3.7656636 -8.5015688 -1.5805292 --3.8064282 -8.4531517 -1.5757248 --3.8438699 -8.3982859 -1.5697194 --1.4777526 -3.1787179 -0.57160813 --1.502703 -3.181169 -0.57383877 --1.637785 -3.4125493 -0.62033832 --1.6586932 -3.4024358 -0.62033832 --1.6769145 -3.3868978 -0.61930883 --1.6936792 -3.3686242 -0.61776459 --1.7187989 -3.3669417 -0.61948043 --1.7462293 -3.3694501 -0.62205422 --1.7714603 -3.3673894 -0.62377006 --4.2448425 -7.9469223 -1.5302547 --4.3155951 -7.961431 -1.5383192 --4.3672137 -7.93998 -1.5393488 --4.4240136 -7.9276576 -1.5422658 --4.4788842 -7.9115076 -1.5444963 --4.5577679 -7.936841 -1.5551347 --4.6177883 -7.9283037 -1.5590811 --4.6788774 -7.9210248 -1.5633707 --4.7441015 -7.9200544 -1.569033 --4.8028393 -7.9076352 -1.5724647 --4.8600526 -7.8922768 -1.5753816 --1.99977 -3.2045512 -0.61896569 --2.019922 -3.193053 -0.61913723 --2.050117 -3.1971819 -0.62256896 --5.1602345 -7.9366288 -1.6098703 --5.2093778 -7.9056392 -1.6100419 --5.2714677 -7.8940067 -1.6143315 --5.3551474 -7.9137278 -1.625313 --5.35847 -7.8149118 -1.6114146 --5.4265594 -7.8110104 -1.6175916 --5.4868617 -7.7952886 -1.6213665 --5.5305848 -7.7558608 -1.6201655 --5.582109 -7.7273693 -1.6213665 --5.6299996 -7.6937675 -1.6215382 --5.6847296 -7.6693659 -1.6237687 --5.7281313 -7.6296139 -1.6227392 --5.774838 -7.5943232 -1.6227392 --5.814714 -7.5501614 -1.6208518 --5.8494177 -7.4995828 -1.6175916 --5.9014316 -7.4712806 -1.6193075 --5.9502406 -7.4387755 -1.6201655 --6.0069351 -7.4159036 -1.6232539 --6.0585742 -7.3865228 -1.6249698 --6.0993762 -7.3439045 -1.6237687 --6.1633477 -7.3289585 -1.6289163 --6.2235322 -7.3090034 -1.6330343 --6.2624717 -7.2639642 -1.6314901 --6.3082209 -7.2268858 -1.6318332 --6.3615799 -7.1983771 -1.6342354 --6.4207397 -7.1760921 -1.6381819 --6.4692807 -7.1416707 -1.639383 --6.5069857 -7.0953074 -1.6378387 --6.5510697 -7.0559697 -1.6380103 --6.6030135 -7.024971 -1.6402409 --6.6480312 -6.9864645 -1.6407557 --6.6955595 -6.9505072 -1.6419568 --6.7483993 -6.9198718 -1.6445305 --6.7941933 -6.8818388 -1.6453885 --6.841167 -6.8448982 -1.6465895 --6.8858409 -6.8055625 -1.6472759 --6.9373393 -6.7728171 -1.6496781 --6.9915318 -6.7424312 -1.6527666 --7.037765 -6.7041612 -1.6539677 --7.0837913 -6.6655769 -1.6551688 --7.1195054 -6.6172919 -1.6539677 --7.1599746 -6.573483 -1.6539677 --7.2074723 -6.5360436 -1.6556835 --7.2555141 -6.4989257 -1.657571 --7.3033714 -6.4614639 -1.6594584 --7.3510418 -6.4236598 -1.6613458 --7.3903184 -6.3784337 -1.6613458 --7.4225678 -6.3272161 -1.6598016 --7.459744 -6.2802844 -1.6594584 --7.5185938 -6.2513976 -1.6640912 --7.5583329 -6.2063971 -1.6644344 --7.6016293 -6.1642461 -1.6656355 --7.6531525 -6.1285701 -1.6687241 --7.6998868 -6.0888276 -1.670783 --7.7316661 -6.0372238 -1.669582 --7.7552996 -5.9794445 -1.6666651 --7.8020344 -5.9395032 -1.6688956 --7.8462071 -5.8974371 -1.6706115 --7.8798718 -5.8474216 -1.6700968 --7.9012966 -5.7884836 -1.6670082 --7.9478421 -5.7479744 -1.6694103 --8.0102253 -5.7185578 -1.6752443 --8.0548277 -5.6761093 -1.6773033 --8.1089153 -5.6400776 -1.6814214 --8.1547422 -5.5980206 -1.6838236 --8.1767015 -5.5395913 -1.6812497 --8.2007093 -5.4827461 -1.6791908 --8.2415981 -5.4372063 -1.680735 --8.3103104 -5.4096413 -1.6881132 --8.3458347 -5.3601451 -1.688628 --8.3902178 -5.3162155 -1.6910301 --6.5562568 -4.0983214 -1.3077087 --6.5636683 -4.0471601 -1.3041054 --8.4403515 -5.1327305 -1.6815929 --8.4556322 -5.0712194 -1.6783328 --8.5264463 -5.0428076 -1.6863973 --8.5504198 -4.9864259 -1.6850246 --8.5962286 -4.9427047 -1.6881132 --8.5981102 -4.8738375 -1.6824509 --8.5900106 -4.799849 -1.6749011 --8.6184368 -4.7465763 -1.6747296 --8.6984873 -4.7213268 -1.6848531 --8.7698631 -4.6906276 -1.6932608 --7.6270423 -4.0195651 -1.4626502 --8.8739824 -4.607162 -1.7025263 --8.896821 -4.5499349 -1.7014968 --6.9192576 -3.4854853 -1.3104541 --6.9060922 -3.4258947 -1.3037623 --6.9207859 -3.3804295 -1.3025612 --6.9413977 -3.3379009 -1.3025612 --6.9813395 -3.3045161 -1.306336 --7.0354214 -3.2774205 -1.3128563 --8.8905277 -4.0750804 -1.6644344 --8.9126701 -4.0192375 -1.6639197 --6.5632076 -2.9117386 -1.211621 --8.9559031 -3.9071996 -1.6628902 --8.9597893 -3.8436315 -1.6591153 --8.972311 -3.7839901 -1.6570562 --9.0172033 -3.7379174 -1.6611743 --9.0189838 -3.6739728 -1.6572279 --9.0340395 -3.6156366 -1.6558552 --9.0542202 -3.5594161 -1.655512 --9.0777283 -3.5045028 -1.6558552 --9.1128798 -3.4539726 -1.6584289 --7.5844612 -2.8217795 -1.3705089 --9.1693869 -3.3472869 -1.6611743 --9.182332 -3.2883055 -1.6598016 --9.1995478 -3.2309227 -1.6592869 --9.2331724 -3.179224 -1.6618606 --9.2646408 -3.1266043 -1.6640912 --9.2976818 -3.0743363 -1.6666651 --9.3201199 -3.0184426 -1.6673514 --9.3872995 -2.9766774 -1.6762738 --9.4195013 -2.9234006 -1.6788476 --9.5013657 -2.885005 -1.6905154 --9.5132217 -2.8249693 -1.6894859 --9.5511923 -2.772584 -1.6932608 --9.5879288 -2.7195699 -1.696864 --9.6310196 -2.6680496 -1.7016684 --9.6862011 -2.6194444 -1.7087034 --9.7821102 -2.5810652 -1.7231165 --9.8282948 -2.5288467 -1.7286073 --9.8789835 -2.4773562 -1.7349559 --9.9179249 -2.4225347 -1.7392455 --9.9556065 -2.3671005 -1.7433636 --9.9900999 -2.3106291 -1.746967 --10.026197 -2.2542555 -1.7509134 --10.044653 -2.1937442 -1.7517713 --10.029975 -2.1261485 -1.7467953 --9.9289608 -2.0411699 -1.7265483 --10.052412 -2.0023282 -1.7462806 --10.316993 -1.9892637 -1.7910643 --10.472342 -1.9526323 -1.8164589 --10.772094 -1.9401731 -1.8674197 --11.132256 -1.9345585 -1.9290189 --11.29938 -1.8922344 -1.9564725 --11.335094 -1.8267834 -1.9607621 --11.385034 -1.7632253 -1.9676255 --11.35471 -1.6872574 -1.9604189 --11.344366 -1.6146413 -1.9568156 --11.351131 -1.5446049 -1.9563009 --11.367234 -1.4758139 -1.957502 --11.34381 -1.4020535 -1.9518397 --11.342415 -1.3312753 -1.9501238 --11.364078 -1.2631768 -1.952526 --11.356917 -1.1918834 -1.9499522 --11.359115 -1.1216928 -1.9490943 --11.385404 -1.0537874 -1.952526 --11.398525 -0.98450065 -1.9537271 --11.366053 -0.9114747 -1.9470353 --11.403853 -0.84411335 -1.9526976 --11.420613 -0.77492386 -1.9547566 --11.42712 -0.7049548 -1.9550998 --11.38008 -0.63199067 -1.9461774 --11.433927 -0.56462491 -1.9549282 --11.468672 -0.49581549 -1.9604189 --11.465591 -0.42521724 -1.9593894 --11.45026 -0.35431102 -1.9563009 --11.457143 -0.28416851 -1.9571588 --11.4567 -0.21382689 -1.9568156 --11.429229 -0.14317092 -1.9518397 --11.420041 -0.072977841 -1.9501238 --11.466577 -0.0029114876 -1.9581883 --11.450616 0.067351848 -1.9554429 --11.392852 0.13691777 -1.945491 --11.379977 0.20660461 -1.943432 --11.38736 0.27664319 -1.9449762 --11.349998 0.34542701 -1.9387991 --11.402797 0.41708499 -1.948408 --11.428567 0.48826578 -1.9533839 --11.399772 0.55712801 -1.9489228 --11.433518 0.62912583 -1.9554429 --11.41371 0.69830453 -1.9526976 --11.491777 0.7738933 -1.9671108 --10.59524 -0.26964146 -1.9367043 --10.644856 -0.20555705 -1.9456842 --10.616427 -0.13984799 -1.9401863 --10.634781 -0.074829362 -1.943485 --10.638971 -0.0095778545 -1.944218 --10.659474 0.055809133 -1.9480667 --10.71398 0.12183732 -1.9583296 --10.671747 0.1868535 -1.9506323 --10.682194 0.25260904 -1.9528315 --10.665703 0.31771049 -1.9500825 --10.63408 0.38209018 -1.9445846 --10.629571 0.44724989 -1.944218 --10.610916 0.51170623 -1.9412858 --10.62819 0.57792407 -1.9451344 --10.59795 0.64152378 -1.9401863 --10.61147 0.70771641 -1.943485 --10.556924 0.76917249 -1.9341385 --10.601007 0.83780473 -1.9433018 --10.612318 0.90425378 -1.9464172 --10.555662 0.96470213 -1.9368875 --10.550523 1.0295477 -1.9370707 --10.550852 1.0949752 -1.9383537 --10.534163 1.158619 -1.9365209 --10.550291 1.225956 -1.9409193 --10.465484 1.2812339 -1.9264414 --10.524702 1.3540779 -1.9390867 --10.530809 1.4206016 -1.9418356 --10.47225 1.4781852 -1.9324892 --10.474653 1.5441339 -1.9346883 --10.413484 1.6004633 -1.9249753 --10.436472 1.6696079 -1.9312062 --10.462882 1.7397394 -1.9381703 --10.442323 1.8022341 -1.9363377 --10.420423 1.8643689 -1.9343218 --10.404921 1.9275563 -1.9335887 --10.356208 1.9843348 -1.9266247 --10.33998 2.0470784 -1.9258916 --10.344562 2.1140273 -1.9291904 --10.334282 2.1780684 -1.9297402 --10.309195 2.2389343 -1.927541 --10.2684 2.2961423 -1.9224095 --10.29723 2.3690217 -1.9306564 --10.297807 2.4357796 -1.9335887 --10.261651 2.4938135 -1.9295568 --10.238525 2.554827 -1.9280908 --10.196943 2.6110184 -1.9231426 --10.241584 2.6895144 -1.9348716 --10.201157 2.7459178 -1.93029 --10.1699 2.8045397 -1.927541 --10.161962 2.8695593 -1.9293736 --10.147941 2.9329498 -1.9301066 --10.085445 2.9820619 -1.9214932 --10.049079 3.0384836 -1.9180112 --10.025549 3.0986352 -1.9170948 --10.056032 3.175781 -1.9268079 --10.00174 3.2262588 -1.9200271 --9.9789534 3.2866452 -1.9194773 --9.9828272 3.3559566 -1.9242421 --9.9676266 3.4190605 -1.9253418 --9.9362526 3.4765854 -1.9233259 --9.9462147 3.5487185 -1.9295568 --9.9261007 3.6103525 -1.9299234 --9.8733425 3.6599152 -1.9238757 --9.7881622 3.6968114 -1.9114137 --9.8386965 3.7850361 -1.9260749 --9.8436623 3.8564494 -1.931756 --9.7741575 3.8985677 -1.9225928 --9.7518749 3.9592071 -1.9229593 --9.7074089 4.0107112 -1.9189276 --9.7034607 4.0789604 -1.9231426 --9.685482 4.1415148 -1.9246087 --9.6256294 4.1859694 -1.9176446 --9.5709925 4.2322311 -1.9117801 --9.571743 4.3029695 -1.9172782 --9.4476976 4.3170886 -1.8973023 --9.5458593 4.43294 -1.9229593 --9.4980307 4.4817805 -1.9187442 --9.4526224 4.5314765 -1.915079 --9.4113817 4.5829358 -1.9123299 --9.3927774 4.6453905 -1.9143459 --9.3825464 4.7122006 -1.9181944 --9.3613377 4.7737012 -1.9198438 --9.3056803 4.8174939 -1.9143459 --9.2550592 4.8635273 -1.9099475 --9.2068272 4.9105091 -1.906099 --9.1817112 4.9697161 -1.9071985 --9.1303644 5.0146036 -1.9028002 --9.1054344 5.0738811 -1.904083 --9.0689955 5.1267533 -1.9029834 --9.0416317 5.1847482 -1.9038998 --8.9858541 5.2262907 -1.8987683 --8.9951086 5.3058 -1.9077483 --8.9615393 5.3603883 -1.9075651 --8.9310017 5.4168038 -1.9081149 --8.8984337 5.4720163 -1.9082981 --8.8713646 5.5306735 -1.9097643 --8.8339386 5.5829024 -1.9090312 --8.8111048 5.6444249 -1.9115969 --8.7688847 5.6935649 -1.9099475 --8.736248 5.7488837 -1.9104973 --8.68118 5.7892904 -1.906099 --8.669116 5.8584099 -1.9114137 --8.7084427 5.9631433 -1.9284573 --8.6256495 5.9845247 -1.9180112 --8.649087 6.0797358 -1.931756 --8.6052132 6.1281295 -1.93029 --8.5586796 6.1744881 -1.928274 --8.5230131 6.2286272 -1.9288238 --8.5146608 6.303031 -1.9357879 --8.4703197 6.3510294 -1.934505 --8.443718 6.412395 -1.9374373 --8.4065514 6.4658823 -1.9379871 --8.365943 6.5167379 -1.9378039 --8.3173094 6.5612507 -1.9357879 --8.3314285 6.6557236 -1.9487997 --8.2613888 6.6832252 -1.9418356 --8.2270708 6.7393966 -1.943485 --8.2128038 6.8123436 -1.9500825 --8.1557932 6.8499637 -1.9464172 --8.096384 6.8852305 -1.9422022 --8.0808039 6.9578705 -1.9487997 --8.0379591 7.0073223 -1.9487997 --7.9933376 7.0552092 -1.9484332 --7.9528298 7.1067429 -1.9491663 --7.9061575 7.1527686 -1.9484332 --7.8526959 7.1925139 -1.9460508 --7.805532 7.2378879 -1.9453176 --7.8175983 7.3387976 -1.9597956 --7.7617316 7.3764691 -1.9570466 --7.680902 7.3898778 -1.9478834 --7.6720352 7.4725342 -1.9574132 --7.6162395 7.5098052 -1.9548475 --7.6089811 7.5952873 -1.9651103 --7.5560102 7.6355433 -1.9634609 --7.5207 7.6937127 -1.9665765 --7.4856424 7.7524433 -1.9698752 --7.4379334 7.7982283 -1.9698752 --7.4000564 7.8544521 -1.9726242 --7.365118 7.9141026 -1.9762895 --7.3217421 7.9649348 -1.9777555 --7.2568717 7.9922433 -1.9733572 --7.2168851 8.0468655 -1.9759229 --7.1712856 8.0954113 -1.9770225 --7.1195359 8.137042 -1.9764727 --7.0913296 8.205862 -1.9827038 --7.0516958 8.2619295 -1.9858192 --7.0065718 8.3118076 -1.9874686 --6.9529233 8.3516207 -1.9867356 --6.9002991 8.3926067 -1.986369 --6.8542504 8.4416571 -1.9880184 --6.8023243 8.4835548 -1.9880184 --6.7568555 8.5336113 -1.9900343 --6.6928616 8.560195 -1.9865524 --6.6450176 8.6073256 -1.9880184 --6.5908866 8.6463737 -1.9876519 --6.5489421 8.7015753 -1.9911339 --6.5083265 8.758954 -1.9951658 --6.4631824 8.8106127 -1.9979148 --6.3951612 8.8309956 -1.9935164 --6.3597217 8.8964605 -1.9995642 --6.2931113 8.9184475 -1.9957156 --6.2556882 8.9819002 -2.0013969 --6.216609 9.0436087 -2.0067115 --6.1709361 9.0962257 -2.0100102 --6.1111784 9.1282005 -2.0087273 --6.0425897 9.1466608 -2.0045123 --5.982058 9.1769772 -2.0030463 --5.9309549 9.2217779 -2.0048788 --5.8842669 9.2737665 -2.0083609 --5.8178644 9.2946987 -2.0050621 --5.787581 9.3737173 -2.0145919 --5.730979 9.4107313 -2.0149584 --5.6761651 9.4507751 -2.016058 --5.6240811 9.4955759 -2.0182571 --5.5617452 9.5231152 -2.0167911 --5.5017362 9.5545063 -2.0162413 --5.4653335 9.627409 -2.0246716 --5.4037571 9.6564732 -2.0237551 --5.3543758 9.7075253 -2.0276036 --5.2759295 9.7056484 -2.0202732 --5.2376318 9.7776995 -2.0287032 --5.1711135 9.7974815 -2.0261376 --5.1145287 9.8360043 -2.0276036 --5.0648365 9.8881998 -2.032002 --4.9828129 9.8769627 -2.0232053 --4.9295516 9.9223166 -2.0263209 --4.8741927 9.9638567 -2.0287032 --4.8163767 10.000663 -2.0301695 --4.7641883 10.049569 -2.0342011 --4.700357 10.074158 -2.0332849 --4.6462488 10.119783 -2.036767 --4.5739493 10.125705 -2.0321853 --4.518919 10.16975 -2.0354841 --4.4615517 10.208996 -2.0378666 --4.3980503 10.234373 -2.0374999 --4.338614 10.269317 -2.0391495 --4.2709966 10.28485 -2.0369501 --4.2100382 10.316323 -2.0380497 --4.1539769 10.36021 -2.0417151 --4.0964541 10.401053 -2.0448306 --4.0389414 10.442496 -2.0481293 --3.9702542 10.455134 -2.045747 --3.9029374 10.471008 -2.0440977 --3.8274701 10.464293 -2.0380497 --3.7694993 10.505161 -2.0415318 --3.707581 10.535511 -2.0429981 --3.6463938 10.568284 -2.0450139 --3.5843141 10.598841 -2.0466633 --3.521378 10.627166 -2.0479462 --3.4603539 10.661663 -2.0505118 --3.3933811 10.67801 -2.0495956 --3.3222499 10.680796 -2.0461135 --3.2638075 10.724491 -2.0506952 --3.2046733 10.766929 -2.0550935 --3.1366255 10.779782 -2.0538106 --3.0685408 10.792206 -2.0525277 --3.0035787 10.815567 -2.0534441 --2.9351008 10.826202 -2.0519779 --2.8688688 10.844958 -2.0521612 --2.8025169 10.86331 -2.0523446 --2.7465973 10.923203 -2.0605915 --2.6818612 10.949398 -2.0624242 --2.6143985 10.964691 -2.0622408 --2.5504036 10.994891 -2.0649898 --2.4785664 10.991154 -2.0613246 --2.4037154 10.972545 -2.0549102 --2.3383889 10.996703 -2.0567429 --2.2760339 11.035877 -2.0615077 --2.2036517 11.026499 -2.0571094 --2.1314704 11.016648 -2.052711 --2.0687163 11.05561 -2.0576591 --2.0036399 11.083572 -2.0605915 --1.9416778 11.130522 -2.067189 --1.8715523 11.131562 -2.0651731 --1.8025868 11.138954 -2.06444 --1.7296718 11.120664 -2.0589421 --1.6634364 11.14468 -2.0615077 --1.600451 11.19263 -2.068655 --1.534142 11.219771 -2.0719538 --1.4657789 11.232873 -2.0726869 --1.3991315 11.26019 -2.076169 --1.3212538 11.194366 -2.0622408 --1.2592072 11.261858 -2.07342 --1.1880165 11.24982 -2.0697546 --1.1186748 11.253963 -2.0692048 --1.0483229 11.246911 -2.0666392 --0.978185 11.2404 -2.0642567 --0.90848351 11.237371 -2.0626073 --0.84061378 11.25744 -2.0653563 --0.77219582 11.272193 -2.067189 --0.70313877 11.278682 -2.0675554 --0.63463825 11.295544 -2.0699379 --0.56300771 11.253078 -2.0613246 --0.49558854 11.293642 -2.0682886 --0.42672801 11.308258 -2.0704877 --0.35742703 11.313611 -2.0710375 --0.28785101 11.309695 -2.0699379 --0.21858373 11.318129 -2.0712209 --0.14905496 11.313359 -2.0701213 --0.079613827 11.311111 -2.0695715 --0.010212346 11.315319 -2.0703044 -0.059145804 11.301406 -2.0677388 -0.12815458 11.27134 -2.0622408 -0.19734615 11.272307 -2.0626073 -0.26699528 11.291523 -2.0664558 -0.3359814 11.279846 -2.0646234 -0.40518692 11.277573 -2.0646234 -0.47404686 11.267016 -2.0631571 -0.54194087 11.238365 -2.0583923 -0.61328822 11.279001 -2.0666392 -0.68129611 11.255401 -2.062974 -0.74799138 11.215696 -2.0563762 -0.81565315 11.195209 -2.0534441 -0.88433027 11.189993 -2.0534441 -0.95505977 11.208844 -2.0580256 -1.0243546 11.208647 -2.0591252 -1.0944464 11.215848 -2.061691 -1.1583759 11.161986 -2.0528944 -1.2338262 11.218185 -2.0648065 -1.2929946 11.127401 -2.0492289 -1.3659042 11.157313 -2.0563762 -1.4330845 11.138972 -2.0545437 -1.5021932 11.135815 -2.0556433 -1.5630754 11.073823 -2.045747 -1.6456137 11.163224 -2.06444 -1.7042253 11.088787 -2.0523446 -1.7737854 11.08783 -2.054177 -1.8435589 11.087404 -2.0561931 -1.9095494 11.064259 -2.0539939 -1.969613 11.008787 -2.045747 -2.0346181 10.982962 -2.0431812 -2.0940166 10.928754 -2.0353007 -2.1789777 11.006349 -2.0525277 -2.2340722 10.932092 -2.040982 -2.3007028 10.916254 -2.0406156 -2.3665974 10.897129 -2.0396993 -2.4372771 10.899672 -2.0429981 -2.5005844 10.869183 -2.0400658 -2.560442 10.824934 -2.0345678 -2.644455 10.88162 -2.048496 -2.6876144 10.770761 -2.0303526 -2.7712069 10.822636 -2.0435479 -2.8572841 10.880545 -2.0580256 -2.9176049 10.839075 -2.0534441 -2.9762182 10.792539 -2.0479462 -3.0576096 10.828 -2.0583923 -3.1136205 10.773147 -2.0514281 -3.1651719 10.704818 -2.0418985 -3.239615 10.714366 -2.0475795 -3.3009422 10.680198 -2.0448306 -3.3625646 10.647555 -2.0424483 -3.4245141 10.616431 -2.0404322 -3.4788284 10.562538 -2.034018 -3.5382488 10.525152 -2.0309024 -3.5992551 10.493015 -2.0288866 -3.6700637 10.489291 -2.0325518 -3.7406318 10.484167 -2.0360339 -3.7958193 10.436073 -2.0310857 -3.8707154 10.442083 -2.0369501 -3.933672 10.415378 -2.0364003 -3.9982114 10.39288 -2.036767 -4.064774 10.375475 -2.038233 -4.1127009 10.311074 -2.0303526 -4.1755214 10.284734 -2.0301695 -4.2310414 10.240748 -2.026504 -4.2903695 10.206438 -2.0248547 -4.3471174 10.166362 -2.0221057 -4.4145112 10.151217 -2.0244882 -4.4810877 10.133829 -2.026504 -4.5435867 10.107039 -2.0266874 -4.6014314 10.070028 -2.0248547 -4.6552668 10.024664 -2.0213728 -4.7204647 10.003913 -2.0230222 -4.7770844 9.9650087 -2.0210061 -4.8407207 9.9408131 -2.0221057 -4.9055471 9.9188547 -2.0237551 -4.9544044 9.8648481 -2.0188069 -5.0268974 9.8579092 -2.0237551 -5.070569 9.7945766 -2.0169742 -5.1214266 9.7458754 -2.013309 -5.1811295 9.7142677 -2.013309 -5.2326832 9.6675959 -2.0101936 -5.2672973 9.5904999 -2.0006638 -5.3447051 9.5914917 -2.0078111 -5.4029732 9.5576601 -2.0076277 -5.4536924 9.5106831 -2.0046957 -5.5154057 9.4829893 -2.0059783 -5.5610027 9.4278002 -2.0013969 -5.6182413 9.3926573 -2.0012136 -5.6742387 9.3554859 -2.0006638 -5.7191777 9.300396 -1.9962654 -5.7574148 9.235095 -1.9896678 -5.8328772 9.2295122 -1.9962654 -5.8920498 9.1976871 -1.9971817 -5.9376688 9.1448708 -1.9935164 -5.992588 9.1066236 -1.9931499 -6.0309 9.0435095 -1.9872854 -6.0884781 9.0095921 -1.9880184 -6.1486435 8.9793644 -1.9896678 -6.1946583 8.928545 -1.9867356 -6.2561102 8.9000187 -1.9889348 -6.3043294 8.8526554 -1.9869188 -6.3453016 8.7954693 -1.9827038 -6.3846498 8.7365265 -1.9781221 -6.4381361 8.6971865 -1.9781221 -6.4807649 8.6433611 -1.9748234 -6.5515132 8.6269207 -1.9803213 -6.5983305 8.5787659 -1.9784887 -6.6478243 8.5342398 -1.9775723 -6.693367 8.4847994 -1.9755564 -6.7410078 8.4381933 -1.9742736 -6.7784367 8.3790932 -1.9700584 -6.8290997 8.3365831 -1.9698752 -6.8631783 8.2740936 -1.9649271 -6.9157147 8.2340841 -1.9654769 -6.9680185 8.1937418 -1.9660267 -6.9739056 8.0994291 -1.9533813 -7.0215335 8.0542622 -1.9528315 -7.0896859 8.032402 -1.9581462 -7.1525941 8.0041437 -1.9619948 -7.1765108 7.9324026 -1.9550307 -7.2057929 7.8671951 -1.9497161 -7.261282 7.8307629 -1.9517319 -7.3051572 7.7817602 -1.9506323 -7.3297429 7.7125611 -1.9444014 -7.3755651 7.6660247 -1.9440348 -7.3888555 7.5861163 -1.9350548 -7.4504485 7.5560369 -1.9390867 -7.4966712 7.51018 -1.9390867 -7.5593815 7.4806356 -1.943485 -7.594595 7.4238033 -1.9407361 -7.596159 7.3347254 -1.9293736 -7.6623616 7.3083344 -1.9348716 -7.6762938 7.2321925 -1.9269912 -7.7226844 7.186965 -1.927541 -7.7557817 7.1294641 -1.9247919 -7.8008366 7.0830631 -1.9251585 -7.8419552 7.0330958 -1.9246087 -7.880547 6.9809346 -1.9235091 -7.9269319 6.9356861 -1.9244255 -7.9447942 6.8657041 -1.9183778 -7.984529 6.8149118 -1.917828 -8.0119133 6.7537522 -1.9143459 -8.0396042 6.6931429 -1.9110471 -8.0706501 6.63557 -1.9086647 -8.1249495 6.5970788 -1.9119635 -8.1606741 6.5434108 -1.9108639 -8.2006702 6.4932146 -1.9108639 -8.2372599 6.440352 -1.9101307 -8.2711744 6.3854823 -1.9088479 -8.3023815 6.3286514 -1.9070153 -8.3229923 6.2639928 -1.9028002 -8.3636379 6.2145648 -1.90335 -8.4095383 6.1689444 -1.9051826 -8.3843327 6.0716753 -1.8907046 -8.4558182 6.0446997 -1.8985851 -8.4911423 5.9915686 -1.8982185 -8.4987059 5.9191279 -1.891621 -8.5486364 5.8763366 -1.8947365 -8.5707026 5.8143897 -1.891621 -8.6070347 5.7622385 -1.8918042 -8.6405888 5.7082343 -1.8914378 -8.6812153 5.6588674 -1.8927206 -8.6810484 5.5831585 -1.8850235 -8.7134829 5.5287337 -1.8846569 -8.7164116 5.4558654 -1.8778762 -8.7764902 5.4188075 -1.8837407 -8.8095741 5.3648539 -1.8837407 -8.8490686 5.3147478 -1.8852067 -8.7783232 5.1992283 -1.8628484 -8.8711786 5.1809654 -1.8760434 -8.8789482 5.112699 -1.8709121 -8.9366531 5.0731683 -1.8765932 -9.0353842 5.0561666 -1.8910712 -9.0722637 5.0039549 -1.892354 -9.0777502 4.9345779 -1.8870394 -9.0913925 4.8699646 -1.8835573 -9.1480541 4.8283153 -1.8892386 -9.1862297 4.7766285 -1.8910712 -9.2311144 4.7282405 -1.89437 -9.2459097 4.6644254 -1.8914378 -9.2444229 4.5927329 -1.8852067 -9.2521191 4.5259876 -1.8809916 -9.2859163 4.4721184 -1.8822745 -9.3273945 4.4217954 -1.8852067 -9.3641491 4.3690529 -1.8872226 -9.4247293 4.3271017 -1.8941867 -9.4663334 4.2760715 -1.8973023 -9.4986811 4.2207012 -1.8985851 -9.3676634 4.0938349 -1.866697 -9.4603453 4.0653915 -1.8804418 -9.5086555 4.0172153 -1.8852067 -9.5331259 3.9587955 -1.8852067 -9.6127577 3.9228871 -1.8963859 -9.5946751 3.8469996 -1.8879557 -9.6089525 3.7844527 -1.8861231 -9.7236786 3.7608881 -1.9044496 -9.688674 3.6791651 -1.8929039 -9.7258043 3.6251414 -1.8958361 -9.7284775 3.5583045 -1.8919876 -9.7630816 3.5031934 -1.8945533 -9.7593555 3.4344103 -1.889605 -9.8081236 3.3840837 -1.8951031 -9.8398781 3.3276181 -1.8973023 -9.8498459 3.2637773 -1.8952863 -9.8659468 3.2020643 -1.8945533 -9.9219475 3.1530807 -1.9017006 -9.9007435 3.0795848 -1.8938202 -9.9514284 3.0285096 -1.9000512 -9.9783039 2.9699159 -1.9017006 -9.9736853 2.9020419 -1.8973023 -9.9903584 2.8405209 -1.8971189 -10.028439 2.7849555 -1.9011508 -10.056724 2.7264571 -1.90335 -10.081817 2.6669619 -1.9049994 -10.072289 2.5984194 -1.9000512 -10.058489 2.5291355 -1.89437 -10.109147 2.4760246 -1.9011508 -10.128931 2.4150896 -1.9020671 -10.141644 2.3524499 -1.9017006 -10.147256 2.2882311 -1.9000512 -10.14094 2.2215073 -1.8962027 -10.174572 2.1635363 -1.9000512 -10.214614 2.1066265 -1.9051826 -10.243735 2.0471869 -1.9082981 -10.26093 1.9852278 -1.9092145 -10.271952 1.9220498 -1.9090312 -10.282584 1.8588111 -1.9088479 -10.287986 1.7946695 -1.9077483 -10.282323 1.7287383 -1.9046328 -10.312145 1.6687562 -1.9082981 -10.325105 1.6059041 -1.9088479 -10.338654 1.5431008 -1.9095809 -10.332356 1.4774079 -1.9066488 -10.371421 1.4181117 -1.9123299 -10.383826 1.354956 -1.913063 -10.33146 1.2836989 -1.9017006 -10.392838 1.2266216 -1.9117801 -10.410915 1.1640313 -1.9137961 -10.439369 1.1024013 -1.917828 -10.384308 1.0321975 -1.9062822 -10.457984 0.97475874 -1.9189276 -10.389338 0.90409142 -1.9049994 -10.479938 0.84722161 -1.9209434 -10.420237 0.77806824 -1.9088479 -10.436584 0.71492285 -1.9110471 -10.43783 0.65068811 -1.9104973 -10.432793 0.5861339 -1.9088479 -10.494121 0.5250088 -1.9196606 -10.512858 0.46129832 -1.9225928 -10.496826 0.39607891 -1.9191108 -10.497094 0.33160201 -1.9187442 -10.461587 0.26623499 -1.9117801 -10.544602 0.2036173 -1.9269912 -10.490606 0.1381858 -1.9167284 -10.529595 0.074085265 -1.9238757 -10.490529 0.0094385985 -1.916545 -10.505136 -0.055006903 -1.919294 -10.518362 -0.11962015 -1.9218597 -10.524311 -0.18427756 -1.9231426 -10.523965 -0.24887325 -1.9233259 -10.485882 -0.31236076 -1.916545 -10.510294 -0.37764713 -1.9214932 -10.484206 -0.44113901 -1.9170948 -10.499958 -0.50635958 -1.9205769 -10.510396 -0.57152337 -1.9231426 -10.533186 -0.63760591 -1.9280908 -10.534961 -0.70261663 -1.9291904 -10.504959 -0.76538831 -1.9244255 -10.512805 -0.83083755 -1.9268079 -10.513387 -0.89582777 -1.9279075 -10.517482 -0.96121418 -1.9297402 -10.531933 -1.0277344 -1.9335887 -10.510761 -1.0908161 -1.9308398 -10.432536 -1.1474454 -1.9174614 -10.462406 -1.2157471 -1.9244255 -10.465484 -1.2812339 -1.9264414 -10.451574 -1.3446724 -1.9253418 -10.472354 -1.4127183 -1.9308398 -10.436234 -1.4731028 -1.9257083 -10.4163 -1.5355339 -1.9236923 -10.40571 -1.5992689 -1.9235091 -10.442296 -1.6705394 -1.9323058 -10.403727 -1.7299056 -1.9269912 -10.380322 -1.791536 -1.9246087 -10.351716 -1.8520789 -1.9213099 -10.295692 -1.9073255 -1.9128797 -10.289588 -1.9715725 -1.9139793 -9.9793119 -1.9756887 -1.8573505 -9.6703472 -1.9762706 -1.8009048 -9.4733467 -1.9966508 -1.7657179 -9.3369894 -2.0278313 -1.7420768 -9.1843014 -2.0537682 -1.71532 -9.0450649 -2.0809941 -1.691129 -8.968029 -2.1212957 -1.6788503 -8.8851099 -2.1593382 -1.6654719 -8.6732969 -2.1643178 -1.6273527 -8.6712818 -2.2204213 -1.6295519 -7.8026948 -2.0491436 -1.4647967 -7.6010671 -2.0461397 -1.4283268 -7.4774885 -2.0621674 -1.4068849 -7.4467192 -2.1029344 -1.4034028 -7.0294633 -2.0317788 -1.3249654 -6.9273052 -2.0483954 -1.3075552 -6.6755919 -2.0186026 -1.2610059 -6.5851235 -2.0354342 -1.2457949 -6.9774837 -2.2036784 -1.3249654 -6.2078624 -2.0026295 -1.1768872 -6.1188917 -2.0154681 -1.1618594 -5.9852715 -2.0122566 -1.1380349 -5.8844724 -2.0186455 -1.1206248 -5.7903185 -2.0261467 -1.1044974 -5.7000012 -2.0338907 -1.0891032 -5.5331287 -2.0127165 -1.0584979 -5.503161 -2.040138 -1.0550159 -5.3801789 -2.0321901 -1.0330241 -5.3419175 -2.0552816 -1.0278927 -5.2367568 -2.0518055 -1.0093828 -5.191196 -2.0707889 -1.0027853 -5.2057185 -2.1136954 -1.0082833 -5.2389889 -2.1647401 -1.0176299 -5.3307343 -2.2410316 -1.0388886 -5.1523714 -2.2033606 -1.0055343 -5.0576181 -2.1996524 -0.98904043 -5.0557141 -2.2358119 -0.99142289 -5.141428 -2.3115292 -1.0117654 -5.145925 -2.3516121 -1.0156139 -5.1313992 -2.3831425 -1.0156139 -5.0988984 -2.4061937 -1.0119486 -5.1008811 -2.4455082 -1.0154306 -5.0504255 -2.4595463 -1.0081 -4.9312572 -2.4390676 -0.98647475 -5.0593958 -2.5411904 -1.0163469 -4.957881 -2.528424 -0.99838698 -4.8619547 -2.517221 -0.98152661 -4.8359752 -2.5415187 -0.97932738 -4.916573 -2.6224923 -0.99966985 -4.9021182 -2.6535463 -1.0000364 -4.8624787 -2.6707985 -0.99508822 -4.9215703 -2.7426908 -1.0112156 -4.8396077 -2.7360725 -0.99728739 -4.8491654 -2.780875 -1.0029685 -4.7555289 -2.7660973 -0.98647475 -4.7452412 -2.7992201 -0.98794085 -4.7726908 -2.8550277 -0.9976539 -4.7710533 -2.8939443 -1.0011359 -4.6954246 -2.887635 -0.98849064 -4.7276731 -2.9475939 -0.99948657 -4.6804113 -2.9581664 -0.99307227 -4.6572056 -2.9836478 -0.99197268 -4.6734409 -3.034651 -0.99966985 -4.7056489 -3.0967722 -1.0110322 -4.5695992 -3.0475957 -0.98482537 -4.5214901 -3.0557625 -0.97822779 -4.5213118 -3.0962224 -0.98244292 -4.5385761 -3.1491222 -0.99068981 -4.5111251 -3.1712582 -0.98885721 -4.4443355 -3.1652348 -0.97804457 -4.4750586 -3.2286785 -0.98959023 -4.4861188 -3.2786963 -0.9967376 -4.4493232 -3.2938788 -0.99288905 -4.4274554 -3.3199379 -0.99252248 -4.4414496 -3.3732007 -1.0005862 -4.4604106 -3.4309545 -1.0099326 -4.4392748 -3.4582584 -1.0099326 -4.3955884 -3.4677761 -1.0046179 -4.327374 -3.4572546 -0.99343884 -4.3450594 -3.5152731 -1.0027853 -4.3370972 -3.5530806 -1.0060841 -4.3106742 -3.57586 -1.0049845 -4.3165054 -3.6256347 -1.0117654 -4.3503461 -3.6998141 -1.0255102 -4.2821183 -3.6873116 -1.014331 -4.2482972 -3.7038271 -1.011582 -4.2218056 -3.726572 -1.0106658 -4.2193861 -3.7707467 -1.0157971 -4.1859632 -3.7873325 -1.0132314 -4.1901946 -3.8381763 -1.0201955 -3.5963542 -3.3351116 -0.87523282 -3.5564704 -3.3389499 -0.87028468 -3.5295024 -3.3546145 -0.8686353 -3.5109777 -3.3782525 -0.86918509 -3.5183532 -3.4271674 -0.87651569 -4.0131812 -3.9573658 -1.011582 -4.0055223 -3.9985831 -1.0159804 -3.9816036 -4.0237842 -1.0161637 -4.0131903 -4.105782 -1.0311915 -3.9797275 -4.1218433 -1.0289923 -3.9224706 -4.1127515 -1.0203788 -3.9153633 -4.1560602 -1.025327 -3.9205971 -4.2131085 -1.0337571 -3.8494303 -4.1878734 -1.0212951 -2.4695427 -2.7201879 -0.64578491 -2.455431 -2.7382169 -0.64651799 -2.4281533 -2.7414582 -0.64358574 -2.400281 -2.7437284 -0.64047027 -2.4142554 -2.794106 -0.64926696 -3.7884128 -4.438879 -1.0487849 -3.6704955 -4.3545599 -1.022578 -3.621063 -4.349802 -1.0159804 -3.6411321 -4.4288888 -1.0297253 -3.6213248 -4.4603047 -1.0319245 -3.5877385 -4.4747715 -1.0300919 -3.5687582 -4.5074906 -1.0326575 -3.585238 -4.5858364 -1.0460359 -3.5480206 -4.596077 -1.0432869 -3.4845896 -4.5716343 -1.0324743 -3.4458315 -4.5787916 -1.0291755 -3.403013 -4.580122 -1.0245938 -3.3818238 -4.6104283 -1.026793 -3.329253 -4.597652 -1.0190959 -3.2901168 -4.6027985 -1.0156139 -3.2595453 -4.6196871 -1.0148808 -5.122395 -7.3548489 -1.6317511 -3.136337 -4.5629368 -0.99307227 -3.0994494 -4.5690789 -0.99014002 -3.0866697 -4.6108832 -0.99527144 -3.0745769 -4.6543422 -1.0007694 -4.8084779 -7.3767519 -1.6024287 -4.7572751 -7.3970227 -1.6004127 -4.709691 -7.4227533 -1.5996797 -4.6635356 -7.4506783 -1.5994965 -4.6259952 -7.4925365 -1.6024287 -4.6535692 -7.6416831 -1.6288189 -2.8172238 -4.691052 -0.98097676 -4.4968176 -7.5924869 -1.6059108 -4.4521294 -7.6233315 -1.6066438 -4.4106665 -7.6598768 -1.6086597 -4.3611565 -7.6825213 -1.6077434 -4.3134551 -7.7082782 -1.6075602 -4.2618036 -7.7268529 -1.6059108 -4.2049212 -7.7355838 -1.6022455 -4.1485572 -7.7447748 -1.5987633 -4.115643 -7.797904 -1.6046278 -4.0327945 -7.7558527 -1.5905164 -3.9891634 -7.7883258 -1.5921658 -3.9426286 -7.8152895 -1.5927156 -3.8959129 -7.8419747 -1.5932654 -3.8593864 -7.8895745 -1.5982136 -3.8104777 -7.912221 -1.5980303 -3.7563827 -7.9239049 -1.5956479 -3.6935585 -7.9165154 -1.5894169 -3.6424527 -7.9336696 -1.5883173 -3.6034174 -7.9773712 -1.5927156 -3.5544014 -7.999331 -1.5927156 -3.5131257 -8.0390053 -1.5963809 -3.4575224 -8.0459595 -1.5934488 -3.3981402 -8.043479 -1.5886838 -3.3434436 -8.0514679 -1.5861181 -3.2898915 -8.0618191 -1.5841022 -3.2410948 -8.0836782 -1.5844687 -3.1925142 -8.1061573 -1.5850185 -3.1423609 -8.1246767 -1.5848353 -3.0907047 -8.1392097 -1.5839189 -3.0228493 -8.1101217 -1.5743891 -2.9875517 -8.1682158 -1.5822695 -2.961616 -8.2539387 -1.5956479 -1.1178461 -3.1773336 -0.58878952 -1.0983293 -3.1841328 -0.58878952 -1.0841255 -3.2066431 -0.591905 -1.0767994 -3.2505612 -0.59923559 -1.0777764 -3.3216245 -0.6118809 -1.071668 -3.3731456 -0.62067765 -2.5927944 -8.3359461 -1.5883173 -2.5358722 -8.3328886 -1.5846519 -0.96452188 -3.2415473 -0.5913552 -0.91302484 -3.1388552 -0.57027972 -0.89563024 -3.1510174 -0.57156259 -0.89022255 -3.2066555 -0.58127564 -2.1635561 -7.980742 -1.5023659 -2.1110263 -7.9805622 -1.4998002 -2.0617731 -7.992413 -1.499617 -0.84458572 -3.3600564 -0.60674948 -0.85436058 -3.4893034 -0.63057393 -1.9047318 -7.9888468 -1.4919199 -1.8545665 -7.9955955 -1.4910035 -1.8069855 -8.0135374 -1.4922863 -1.7588334 -8.0292749 -1.4932027 -1.7074885 -8.0303011 -1.4913701 -1.6510336 -8.0059662 -1.4847726 -1.6030351 -8.0217295 -1.4858721 -1.5466871 -7.9947386 -1.4789081 -1.4914545 -7.9712248 -1.472677 -1.444265 -7.9898996 -1.4745097 -1.3962265 -8.0044222 -1.4756093 -1.3480642 -8.0186548 -1.4767089 -1.3011935 -8.0413322 -1.4794579 -1.247748 -8.0229378 -1.4745097 -1.1980612 -8.0275259 -1.4739599 -1.1561598 -8.0863028 -1.483673 -1.1117167 -8.1312313 -1.4908203 -1.0721097 -8.2168579 -1.5056647 -1.0316145 -8.303277 -1.5206925 -0.9996658 -8.4705372 -1.5509312 -0.95269924 -8.521452 -1.5593615 -0.89967173 -8.5202942 -1.5580785 -0.8457216 -8.5090237 -1.554963 -0.79258257 -8.5042648 -1.5531304 -0.74192125 -8.5265961 -1.5564291 -0.69149107 -8.5545044 -1.5608275 -0.64030689 -8.5762329 -1.5641263 -0.58679819 -8.5672503 -1.5617439 -0.53464794 -8.5775576 -1.5630267 -0.48189658 -8.5787134 -1.5626602 -0.42880711 -8.5726728 -1.5610108 -0.37723327 -8.5987129 -1.5654092 -0.3239831 -8.5880947 -1.5630267 -0.27128142 -8.589921 -1.5630267 -0.21859461 -8.5924072 -1.56321 -0.16567831 -8.5837574 -1.5613773 -0.11300623 -8.5846128 -1.5613773 -0.060281236 -8.5782633 -1.5600945 -0.007638413 -8.5715904 -1.5588117 --0.045073543 -8.5940857 -1.5630267 --0.097771592 -8.5906982 -1.5624769 --0.15079039 -8.6076288 -1.5657756 --0.20253561 -8.5613337 -1.5573455 --0.25643712 -8.6061134 -1.565959 --0.30867422 -8.5886593 -1.5630267 --0.3599636 -8.5532084 -1.5567957 --0.41177589 -8.5370922 -1.55423 --0.4636707 -8.5255699 -1.5525806 --0.51716113 -8.5421896 -1.5562459 --0.57178825 -8.5722065 -1.5624769 --0.62587494 -8.5891256 -1.5663254 --0.67995846 -8.6027641 -1.5696243 --0.72705829 -8.5318232 -1.5571622 --0.78189909 -8.5546131 -1.5622936 --0.8354243 -8.5604172 -1.5643096 --0.8884415 -8.5600185 -1.5652258 --0.94470841 -8.5886078 -1.5716401 --0.99444008 -8.5572605 -1.5668752 --1.041912 -8.5100145 -1.5591781 --1.0958645 -8.5171118 -1.5617439 --1.1478412 -8.5082788 -1.5613773 --1.2009869 -8.5078897 -1.5626602 --1.2530245 -8.4993877 -1.5624769 --1.311124 -8.530406 -1.5698075 --1.362354 -8.5154047 -1.5685247 --1.4121598 -8.4923391 -1.5657756 --1.4700918 -8.5174208 -1.5721899 --1.5150559 -8.4675961 -1.5644928 --1.5705643 -8.4774733 -1.5681581 --1.6231064 -8.4705734 -1.5687079 --1.6792496 -8.4816704 -1.5727397 --1.7273247 -8.4519434 -1.5690745 --1.7791523 -8.441186 -1.5690745 --1.8357108 -8.4522057 -1.5732895 --1.8941872 -8.4705238 -1.5789708 --1.9417182 -8.4395809 -1.5753055 --1.9986696 -8.4495115 -1.5795206 --2.0497808 -8.4342232 -1.5789708 --2.1012557 -8.4205332 -1.5787874 --2.1543465 -8.4131956 -1.5798872 --2.213418 -8.4283438 -1.5853851 --2.2643254 -8.4117556 -1.5848353 --2.3161576 -8.3986511 -1.5850185 --2.3684485 -8.3871202 -1.5855683 --2.4185016 -8.3677073 -1.5846519 --2.4678485 -8.3461113 -1.5833691 --2.5215733 -8.3392811 -1.5850185 --2.5770483 -8.3377399 -1.5877675 --2.6246071 -8.3105211 -1.5855683 --2.6725326 -8.2849045 -1.5837357 --2.7199352 -8.2580795 -1.5817198 --2.7749395 -8.2542801 -1.5842855 --2.8386106 -8.2752237 -1.5917994 --2.8734262 -8.212183 -1.5828193 --2.9207883 -8.1860638 -1.58117 --2.9800339 -8.1929321 -1.5861181 --3.0415232 -8.2049122 -1.5921658 --3.08799 -8.1759787 -1.59015 --1.438697 -3.7390056 -0.70772856 --1.4712932 -3.7548215 -0.7126767 --3.2463357 -8.1387558 -1.594365 --3.2984319 -8.1241484 -1.5954646 --3.3459663 -8.0983047 -1.594365 --3.4024503 -8.093935 -1.5976638 --3.4369771 -8.037653 -1.5905164 --3.4925029 -8.0308371 -1.5934488 --3.542906 -8.0119534 -1.5939986 --3.5940149 -7.9945474 -1.5949148 --1.4748893 -3.2270715 -0.62232703 --1.4996307 -3.2286606 -0.6245262 --1.5508741 -3.2860787 -0.63827109 --1.6338972 -3.4077003 -0.66539431 --1.6534846 -3.3949592 -0.66484451 --1.6703626 -3.3768189 -0.66319513 --1.688404 -3.3612351 -0.66209555 --1.7148014 -3.3621972 -0.664478 --1.7394665 -3.3594694 -0.66612738 --1.7682779 -3.3643973 -0.66942614 --4.1444445 -7.7703815 -1.602612 --4.1929803 -7.7465343 -1.6029785 --4.2579422 -7.752543 -1.6097593 --4.2925115 -7.7030845 -1.6048112 --4.356627 -7.7065544 -1.6112254 --4.4155674 -7.7001452 -1.6156238 --4.4800286 -7.7026501 -1.622038 --4.5297041 -7.6792498 -1.6229544 --4.571692 -7.6428747 -1.6211218 --4.6047378 -7.5919843 -1.6161736 --4.655869 -7.5711241 -1.617823 --4.7079573 -7.5515904 -1.6198388 --2.0039556 -3.1704159 -0.6600796 --2.0233712 -3.1580601 -0.6600796 --2.0512757 -3.158778 -0.66301185 --4.8799767 -7.4157095 -1.6158071 --4.928659 -7.3905344 -1.6169066 --4.9827204 -7.3731861 -1.6198388 --5.0356426 -7.3538303 -1.6224046 --5.0840325 -7.3276401 -1.6235042 --5.1503797 -7.326869 -1.6304682 --5.1940989 -7.2935276 -1.6301017 --5.2261009 -7.2439799 -1.6260699 --5.2646503 -7.2038393 -1.6242373 --5.3099232 -7.1729808 -1.6246037 --5.3732963 -7.1662207 -1.6306515 --5.418355 -7.1346817 -1.631018 --5.4686232 -7.1098728 -1.633034 --5.5145617 -7.0792866 -1.633767 --5.5621576 -7.0507193 -1.6350499 --5.5924306 -7.0003281 -1.6312013 --5.648262 -6.9819322 -1.6350499 --5.7028317 -6.9615932 -1.6385319 --5.7523432 -6.9347939 -1.6405479 --5.7815094 -6.8835588 -1.6366993 --5.843379 -6.8711705 -1.6423805 --5.8770914 -6.8255019 -1.6399981 --5.9363027 -6.8093204 -1.6449462 --5.9636607 -6.7565522 -1.6409143 --6.0187612 -6.7352271 -1.644763 --6.0481038 -6.6850476 -1.6414641 --6.0876803 -6.6463614 -1.6410977 --6.1363678 -6.6175332 -1.6432968 --6.2051148 -6.6098604 -1.6509939 --6.2516503 -6.5780759 -1.6526433 --6.2755375 -6.5225897 -1.648245 --6.3257294 -6.494525 -1.6509939 --6.3840952 -6.4744892 -1.6559421 --6.4320354 -6.4435449 -1.6581413 --6.4700541 -6.4025745 -1.6577748 --6.5148416 -6.3682518 -1.6592408 --6.5431862 -6.3179145 -1.6564919 --6.5839629 -6.2796831 -1.6570417 --6.6388268 -6.2546721 -1.6612568 --6.6526127 -6.1910477 -1.6550258 --6.7121863 -6.1700711 -1.6605238 --6.7622914 -6.1400042 -1.6636392 --6.80862 -6.1062727 -1.6658385 --6.8437519 -6.0624251 -1.6652886 --6.8993168 -6.0365028 -1.6698703 --6.9406891 -5.9979124 -1.6709698 --6.9878287 -5.9641476 -1.6735356 --7.0182796 -5.9160895 -1.6720694 --7.0514259 -5.870399 -1.6713364 --7.0880728 -5.8276463 -1.6715196 --7.1191182 -5.7803268 -1.6704201 --7.176693 -5.7543707 -1.6757348 --7.2118659 -5.710227 -1.6757348 --7.2351508 -5.656785 -1.6729858 --7.2588305 -5.6038737 -1.6704201 --7.3087144 -5.5711489 -1.6740854 --7.3576841 -5.5374308 -1.6775674 --7.4191399 -5.5127029 -1.6839817 --7.4092302 -5.4350939 -1.673902 --7.4734912 -5.4120178 -1.6810495 --7.5049586 -5.3649158 -1.6806829 --7.5425553 -5.3221664 -1.6817825 --7.5992694 -5.2926421 -1.6872804 --7.6316013 -5.245914 -1.6872804 --7.5953116 -5.1526265 -1.6718862 --7.6357703 -5.1119418 -1.673902 --7.7014418 -5.0877533 -1.6815993 --7.7366323 -5.043087 -1.6825155 --7.7839665 -5.0061569 -1.6861808 --6.526298 -4.1408386 -1.4017534 --6.5099196 -4.074635 -1.3925902 --7.8296266 -4.8341408 -1.6762846 --7.8297548 -4.7681108 -1.6698703 --7.8605494 -4.7209911 -1.6702368 --7.9392719 -4.70223 -1.6810495 --8.0095701 -4.6777215 -1.6900294 --8.0270462 -4.6221104 -1.687647 --8.0706444 -4.5815063 -1.6909457 --8.0943146 -4.5294991 -1.6900294 --8.1322842 -4.485446 -1.6922286 --8.1587896 -4.4349933 -1.6920453 --8.1676512 -4.3750997 -1.6881968 --7.671844 -4.0491023 -1.5780544 --8.1683941 -4.2473273 -1.6772009 --8.1908016 -4.195334 -1.6764678 --6.926198 -3.4940519 -1.4070681 --6.8929234 -3.4243672 -1.3957057 --6.9102731 -3.3802805 -1.3949726 --6.9264555 -3.3356833 -1.3940563 --6.9698877 -3.3040705 -1.3988212 --7.0212097 -3.2757909 -1.4052354 --8.2928104 -3.8073592 -1.6619898 --8.3079529 -3.7527611 -1.6603404 --6.5431023 -2.9072642 -1.295643 --8.3209515 -3.636354 -1.6537429 --8.3223333 -3.5763013 -1.6495278 --8.3540821 -3.5293779 -1.6515437 --8.382843 -3.4810681 -1.6530099 --8.3967638 -3.4265947 -1.6515437 --8.4185429 -3.3753746 -1.651727 --8.4573889 -3.3308613 -1.6553923 --8.474 -3.2774866 -1.6546593 --8.4939508 -3.2254293 -1.6546593 --8.5356894 -3.1814919 -1.6590576 --7.6188927 -2.7866063 -1.4732268 --7.6423244 -2.7421296 -1.4745097 --8.633605 -3.0381989 -1.6671213 --8.6604481 -2.9880531 -1.6687707 --8.668376 -2.9313927 -1.6667547 --8.6712694 -2.8732014 -1.6638225 --8.7186565 -2.8296537 -1.669687 --8.7686462 -2.7865257 -1.6761012 --8.8015366 -2.7376342 -1.6792167 --8.8360376 -2.6890163 -1.6826988 --8.8834629 -2.6440043 -1.6887466 --8.9221735 -2.5960393 -1.6931449 --9.008852 -2.5614119 -1.7068897 --9.0679703 -2.5181882 -1.71532 --9.1117153 -2.4702187 -1.7208179 --9.1362047 -2.4167781 -1.7226506 --9.1879854 -2.3702526 -1.729798 --9.2633724 -2.3291762 -1.741527 --9.3070889 -2.2795444 -1.7472081 --9.3467197 -2.2285514 -1.7521563 --9.365963 -2.172492 -1.7532558 --9.3915844 -2.1177945 -1.7556384 --9.2517166 -2.026675 -1.7264992 --9.425519 -2.0042264 -1.7572877 --9.6215334 -1.9842877 -1.7922913 --9.7038994 -1.9392802 -1.8056697 --10.126773 -1.9592665 -1.8837407 --10.328962 -1.9327197 -1.9198438 --10.544744 -1.9062128 -1.9585128 --10.502977 -1.8321819 -1.9484332 --10.527595 -1.7699848 -1.9509989 --10.551843 -1.7075546 -1.9535646 --10.575721 -1.6448932 -1.9561303 --10.539917 -1.5731484 -1.9475169 --10.571754 -1.5116484 -1.9517319 --10.574986 -1.4459536 -1.9506323 --10.558314 -1.3777313 -1.9458674 --10.621201 -1.319711 -1.9561303 --10.592976 -1.2502509 -1.9493495 --10.605332 -1.1857765 -1.9502659 --10.626096 -1.1221268 -1.9528315 --10.632781 -1.0569053 -1.9528315 --10.639066 -0.99164385 -1.9528315 --10.649847 -0.9267714 -1.9537479 --10.702366 -0.86521184 -1.9625446 --10.642772 -0.79469335 -1.9504491 --10.682755 -0.73179555 -1.9570466 --10.671346 -0.66525435 -1.9541144 --10.695838 -0.60092247 -1.957963 --10.685578 -0.53459454 -1.9553972 --10.674908 -0.46841514 -1.9528315 --10.712946 -0.40424213 -1.9594291 --10.703434 -0.33812818 -1.9572299 --9.9108477 0.72838283 -1.9373915 --9.9668083 0.79401702 -1.9494871 --9.9656572 0.85549325 -1.9502676 --9.9270144 0.91356552 -1.9436344 --9.9212217 0.97445935 -1.9436344 --9.9082279 1.0346026 -1.9422688 --9.9143658 1.0967823 -1.944805 --9.8782253 1.1541771 -1.9389523 --9.8475952 1.2118891 -1.9342701 --9.8672085 1.2758147 -1.9397327 --9.8553066 1.3358073 -1.9389523 --9.8362436 1.3947374 -1.9368063 --9.8459339 1.4577966 -1.940513 --9.8561897 1.5211769 -1.9444149 --9.8205252 1.577422 -1.9391474 --9.8184004 1.6389427 -1.940708 --9.8081589 1.6991564 -1.940708 --9.8004446 1.7598265 -1.9412934 --9.7952471 1.821004 -1.9424639 --9.7838898 1.8810723 -1.9424639 --9.7721634 1.9410697 -1.9424639 --9.73701 1.9962637 -1.9377817 --9.7121038 2.0533326 -1.9352455 --9.6974058 2.1124685 -1.9348553 --9.6785192 2.1706424 -1.9336848 --9.6822195 2.233959 -1.9371965 --9.6587877 2.2910612 -1.9352455 --9.6483593 2.3512125 -1.9360259 --9.6242371 2.4079878 -1.934075 --9.5912313 2.4623597 -1.9303683 --9.5579224 2.5164173 -1.9266616 --9.5555582 2.5785952 -1.9293928 --9.5433369 2.6382241 -1.9301732 --9.5458431 2.7020762 -1.934075 --9.4932871 2.7502227 -1.9266616 --9.4988012 2.8151116 -1.9313438 --9.481349 2.8733423 -1.9313438 --9.4391823 2.9239163 -1.9262714 --9.4378948 2.9871082 -1.929783 --9.4352531 3.0500922 -1.9330995 --9.3995962 3.1023932 -1.929588 --9.3339119 3.1443486 -1.9198334 --9.3441229 3.2117665 -1.9260763 --9.3075809 3.2631977 -1.9225646 --9.3150883 3.3301549 -1.9284174 --9.3110657 3.3932953 -1.931929 --9.302021 3.4548037 -1.9344652 --9.2806482 3.5118146 -1.9344652 --9.2790575 3.5764561 -1.9387572 --9.2231598 3.6200614 -1.9315388 --9.1643448 3.6620238 -1.9237353 --9.2171059 3.7488649 -1.9399277 --9.1649313 3.7933433 -1.9336848 --9.1685991 3.8609293 -1.9395375 --9.1357212 3.9132512 -1.9375867 --9.0782709 3.9547365 -1.9303683 --9.045764 4.0067892 -1.9286125 --9.0201139 4.0618148 -1.9284174 --8.946866 4.095037 -1.9178826 --8.9028969 4.1411681 -1.9137856 --8.918107 4.2150006 -1.9227598 --8.8461037 4.2475605 -1.9126151 --8.835741 4.3095002 -1.9161267 --8.8390121 4.3784394 -1.9227598 --8.8216171 4.4374418 -1.9249058 --8.7330847 4.4602523 -1.9112494 --8.7725935 4.5485234 -1.9262714 --8.6915789 4.5743947 -1.9143709 --8.6841087 4.6387324 -1.9190531 --8.6744509 4.7022147 -1.9233451 --8.6694956 4.7685895 -1.9288076 --8.5604286 4.777236 -1.9106642 --8.5514374 4.8412714 -1.9153464 --8.4943562 4.8780179 -1.9091034 --8.4761295 4.9369588 -1.9118347 --8.4304781 4.9798937 -1.908323 --8.4132252 5.0395942 -1.9114445 --8.3989086 5.1013064 -1.9153464 --8.3599339 5.1481161 -1.9135906 --8.3190374 5.1936002 -1.9114445 --8.2803831 5.2403502 -1.9098839 --8.2406445 5.2862921 -1.908128 --8.2170973 5.342638 -1.910274 --8.1751528 5.3870196 -1.908128 --8.1313419 5.4299979 -1.9055918 --8.0865002 5.4720917 -1.9028605 --8.146596 5.5859561 -1.9254911 --8.0364599 5.5832267 -1.9071525 --8.012476 5.6397724 -1.9096887 --7.9976821 5.7030683 -1.9145659 --7.9720778 5.7589269 -1.9169071 --7.9334259 5.8054171 -1.9161267 --7.9205031 5.8709264 -1.9217843 --7.890605 5.9241266 -1.9233451 --7.893919 6.0027127 -1.9332947 --7.8142047 6.0181165 -1.9225646 --7.8080626 6.0900817 -1.9303683 --7.7705474 6.1378765 -1.9303683 --7.722784 6.1774745 -1.9278321 --7.7030239 6.2395625 -1.9325143 --7.6532197 6.2773786 -1.929588 --7.6364369 6.3423948 -1.9352455 --7.6048822 6.3954453 -1.9371965 --7.525177 6.4076467 -1.9266616 --7.5280561 6.4902086 -1.9377817 --7.4947405 6.5420833 -1.9395375 --7.4243293 6.5613146 -1.9315388 --7.3846612 6.6073999 -1.931734 --7.4035788 6.7065878 -1.9477314 --7.3319325 6.7240434 -1.9395375 --7.3005981 6.7782483 -1.9422688 --7.2624431 6.8262753 -1.9432442 --7.210475 6.8612418 -1.940513 --7.1710644 6.9080772 -1.9412934 --7.1222234 6.9457846 -1.9395375 --7.0857515 6.9955573 -1.9412934 --7.0572605 7.0534644 -1.9453902 --7.0179844 7.1008201 -1.9465607 --6.9831886 7.1528726 -1.9490969 --6.9446139 7.2012343 -1.9506577 --6.9104433 7.2543635 -1.9535841 --6.8826017 7.3144879 -1.9584613 --6.8369236 7.3558626 -1.9582663 --6.7896705 7.3955069 -1.9576809 --6.7533875 7.4472008 -1.9604121 --6.6944795 7.473886 -1.9565104 --6.6484947 7.514822 -1.9565104 --6.6112933 7.5658154 -1.9592416 --6.5826864 7.6270308 -1.9647042 --6.5433979 7.6762357 -1.9670453 --6.4980688 7.7184916 -1.9676305 --6.446825 7.7536926 -1.96646 --6.4041066 7.7991681 -1.9680207 --6.3592196 7.8421254 -1.9689962 --6.318337 7.8901849 -1.9713373 --6.2910938 7.9557333 -1.9781654 --6.2512131 8.0057821 -1.9810917 --6.187602 8.0253448 -1.9764096 --6.1400251 8.0655012 -1.9769949 --6.0939555 8.107729 -1.9781654 --6.0546117 8.1591463 -1.9816771 --6.0108089 8.2048464 -1.9838231 --5.9609265 8.2423687 -1.9840181 --5.9176469 8.2891674 -1.9865543 --5.8711934 8.3317356 -1.9881151 --5.813241 8.3579407 -1.9857739 --5.7707276 8.4063911 -1.9888954 --5.7267389 8.4530106 -1.9916266 --5.6605935 8.4667892 -1.9865543 --5.6339164 8.5398426 -1.9957236 --5.5814104 8.5742512 -1.9957236 --5.5255156 8.603385 -1.994553 --5.4852185 8.657012 -1.9992352 --5.4325166 8.6913376 -1.9994303 --5.3883486 8.7395353 -2.0029418 --5.3274894 8.7607002 -2.0002105 --5.2781734 8.8007946 -2.0019665 --5.2085986 8.8068438 -1.9959186 --5.1717529 8.8682928 -2.0027468 --5.1275048 8.917716 -2.0068438 --5.072207 8.9481564 -2.0066485 --5.0224681 8.9885292 -2.0087945 --4.9525561 8.9925432 -2.0027468 --4.9057059 9.0382786 -2.0062585 --4.872354 9.109725 -2.0156229 --4.8177376 9.1420527 -2.0162079 --4.7597451 9.1679602 -2.0154276 --4.7092061 9.2083454 -2.0179639 --4.6565862 9.2449512 -2.0197196 --4.6089225 9.2918015 -2.0238166 --4.5436463 9.3031607 -2.0201099 --4.4915767 9.3414726 -2.0224509 --4.4211702 9.3413734 -2.0164032 --4.3679094 9.3772163 -2.0183539 --4.3258152 9.4377232 -2.0257676 --4.2770958 9.4846525 -2.0302546 --4.2200117 9.5134077 -2.0308399 --4.1576381 9.5301323 -2.0288889 --4.0928988 9.5410414 -2.0257676 --4.0430427 9.5867615 -2.0302546 --3.9743812 9.5878305 -2.0251822 --3.9162164 9.6138535 -2.0255723 --3.8604321 9.6458979 -2.0273283 --3.8033257 9.67488 -2.0284986 --3.7481275 9.7090149 -2.0308399 --3.6919584 9.7410021 -2.0327907 --3.6266496 9.7487631 -2.0296693 --3.5613844 9.7560911 -2.0265479 --3.509058 9.7989979 -2.0310349 --3.4407444 9.7972088 -2.0261576 --3.3786497 9.8125725 -2.024987 --3.3343661 9.8805141 -2.0349367 --3.2773712 9.9119625 -2.0372777 --3.216491 9.9318857 -2.0372777 --3.1581566 9.9598494 -2.0390337 --3.1022155 9.9959011 -2.0425453 --3.0388293 10.008178 -2.0411797 --2.9734559 10.013473 -2.0384483 --2.9179714 10.052251 -2.0427403 --2.8551669 10.066192 -2.04196 --2.7946568 10.088247 -2.0429354 --2.7337275 10.108993 -2.0437157 --2.6761506 10.142647 -2.0472274 --2.6111789 10.148427 -2.0450814 --2.5436141 10.143329 -2.0407894 --2.4766755 10.139688 -2.0368876 --2.4166806 10.164237 -2.0388386 --2.3578031 10.194163 -2.04196 --2.2960687 10.212266 -2.0427403 --2.2381749 10.248201 -2.0472274 --2.1770804 10.270377 -2.0489831 --2.1080999 10.254721 -2.0431304 --2.0516491 10.300167 -2.0497637 --1.9774605 10.255741 -2.0382533 --1.9153936 10.272503 -2.0392287 --1.8535428 10.290819 -2.0405943 --1.793889 10.322291 -2.0446913 --1.7316521 10.339875 -2.0460567 --1.6700467 10.361925 -2.048398 --1.6059856 10.36907 -2.0478127 --1.5463656 10.405892 -2.0532751 --1.4884256 10.456939 -2.0616641 --1.4167029 10.41048 -2.050544 --1.3476254 10.379099 -2.0425453 --1.2906467 10.441682 -2.0534704 --1.2297519 10.47668 -2.0589328 --1.1668524 10.4967 -2.0614691 --1.0980263 10.461719 -2.0530801 --1.0382427 10.513157 -2.0620542 --0.97317392 10.51347 -2.0608838 --0.90653867 10.494815 -2.0560064 --0.84353608 10.517777 -2.0595181 --0.77601999 10.482653 -2.0515194 --0.71188396 10.490152 -2.0521047 --0.64696157 10.485513 -2.0503488 --0.57935441 10.430528 -2.0386434 --0.51611537 10.44956 -2.041765 --0.45241103 10.462329 -2.0437157 --0.38885936 10.48255 -2.0472274 --0.32465327 10.48866 -2.0480077 --0.26053214 10.500259 -2.0499587 --0.19575299 10.483028 -2.046252 --0.13170692 10.506588 -2.050739 --0.067237236 10.507198 -2.050739 --0.0027644085 10.50349 -2.0499587 -0.061578222 10.485656 -2.046447 -0.1261179 10.501753 -2.0497637 -0.19085743 10.517451 -2.0530801 -0.25455049 10.481766 -2.046252 -0.31829184 10.46138 -2.0425453 -0.38402152 10.501375 -2.0509341 -0.45000216 10.535077 -2.0581524 -0.51089364 10.455709 -2.0429354 -0.57568687 10.464128 -2.0452764 -0.63958275 10.455504 -2.044301 -0.70478046 10.46704 -2.0474224 -0.76726371 10.439043 -2.0427403 -0.83247203 10.448804 -2.0456667 -0.89278907 10.399526 -2.0368876 -0.95577258 10.385062 -2.0351317 -1.0234115 10.419022 -2.0431304 -1.0853847 10.394011 -2.0394237 -1.1524874 10.417376 -2.0454717 -1.2187781 10.430566 -2.0495684 -1.2809572 10.408289 -2.0466421 -1.3461819 10.410933 -2.0487881 -1.4044993 10.361658 -2.0405943 -1.4617116 10.308176 -2.0316203 -1.5246464 10.297073 -2.03123 -1.5897456 10.300125 -2.0337663 -1.6521378 10.285335 -2.0327907 -1.7126307 10.259526 -2.0296693 -1.790795 10.336764 -2.0474224 -1.844126 10.269592 -2.0361073 -1.9036962 10.239763 -2.0324006 -1.9789047 10.292418 -2.0454717 -2.0469916 10.305094 -2.050544 -2.1007235 10.246222 -2.0411797 -2.1617267 10.224504 -2.0394237 -2.2258844 10.217755 -2.0407894 -2.2732906 10.135959 -2.026938 -2.3356614 10.122775 -2.027133 -2.4054298 10.140698 -2.0337663 -2.475738 10.159099 -2.0405943 -2.5451715 10.17226 -2.046447 -2.5999753 10.127003 -2.0403993 -2.6538203 10.079561 -2.0339613 -2.7347903 10.134104 -2.048593 -2.7692075 10.016932 -2.0279136 -2.8370318 10.022399 -2.0325956 -2.880455 9.9426298 -2.0197196 -2.9402926 9.9210072 -2.0189393 -3.0050952 9.9159193 -2.0216706 -3.0684943 9.9057255 -2.0234263 -3.1369147 9.9110222 -2.0284986 -3.1919343 9.8738565 -2.024792 -3.2552269 9.8624678 -2.0265479 -3.3106689 9.8274374 -2.0234263 -3.3833444 9.8431101 -2.0310349 -3.4264729 9.7731133 -2.0206952 -3.4903386 9.7629871 -2.0230362 -3.5538726 9.751523 -2.0251822 -3.611932 9.7249365 -2.0242066 -3.6680629 9.6934185 -2.0222559 -3.7271187 9.6698141 -2.0220606 -3.7892489 9.6540661 -2.0236216 -3.8425891 9.6160622 -2.0204999 -3.9066947 9.6050224 -2.0232313 -3.9614294 9.5709019 -2.0210853 -4.012085 9.5274343 -2.0169883 -4.074718 9.5125532 -2.0191343 -4.1251731 9.4693899 -2.0152326 -4.1847878 9.4474869 -2.0160129 -4.2551646 9.4493532 -2.0220606 -4.2967334 9.3873959 -2.0142572 -4.3335643 9.3163929 -2.0045025 -4.3914857 9.2914009 -2.0048928 -4.4403458 9.2474823 -2.0011861 -4.4888325 9.2033148 -1.9974793 -4.546525 9.1782351 -1.9980646 -4.6031966 9.151042 -1.9982598 -4.6534591 9.11127 -1.9957236 -4.7124381 9.0886402 -1.9970891 -4.7726855 9.0682325 -1.9990401 -4.8273125 9.0370474 -1.99865 -4.8906198 9.0219145 -2.0019665 -4.9260278 8.9556456 -1.9937726 -4.9923592 8.9458046 -1.9984548 -5.0403895 8.9030561 -1.9957236 -5.0880833 8.860055 -1.9929923 -5.1423521 8.8286676 -1.9929923 -5.1994205 8.8020153 -1.9941628 -5.2432489 8.7531204 -1.9902611 -5.2856545 8.702343 -1.9859691 -5.3204341 8.6396837 -1.9789457 -5.3790603 8.6160269 -1.9810917 -5.4208097 8.5654564 -1.9769949 -5.4684973 8.5246048 -1.975239 -5.5244431 8.496645 -1.9766047 -5.586729 8.4781475 -1.9803114 -5.6413689 8.4477863 -1.9812869 -5.6958461 8.4170732 -1.9822624 -5.7318525 8.3593187 -1.9767998 -5.7819171 8.3223801 -1.9764096 -5.82271 8.2723112 -1.972898 -5.8648152 8.2244511 -1.9699717 -5.9134459 8.1859255 -1.9693863 -5.9635625 8.1494865 -1.9693863 -6.0076132 8.1048632 -1.9674355 -6.0531082 8.0623589 -1.9660698 -6.1006827 8.0227242 -1.9654845 -6.1372252 7.968823 -1.9613876 -6.1775589 7.9201899 -1.9586564 -6.2284722 7.8852143 -1.9594368 -6.2687721 7.8368926 -1.9569006 -6.3229146 7.8059015 -1.9588515 -6.3221688 7.7078142 -1.9436344 -6.400054 7.7058434 -1.9531939 -6.4314318 7.6476645 -1.9483166 -6.4725127 7.6013379 -1.9465607 -6.5203128 7.5629659 -1.9469509 -6.5459538 7.4991732 -1.940708 -6.5957422 7.4632759 -1.9418787 -6.6459904 7.4277806 -1.9432442 -6.6749773 7.3686914 -1.938367 -6.6928825 7.2979627 -1.9303683 -6.7669024 7.2883806 -1.9389523 -6.8114953 7.2467222 -1.9389523 -6.8565087 7.205502 -1.9391474 -6.8937864 7.1562328 -1.9371965 -6.9272938 7.1032672 -1.9342701 -6.9624782 7.0522542 -1.931929 -7.0014586 7.0052385 -1.9307585 -7.0394263 6.9573212 -1.9293928 -7.0833869 6.9153671 -1.929783 -7.1136823 6.8602014 -1.9264665 -7.152091 6.8130417 -1.9254911 -7.1873312 6.7629805 -1.9237353 -7.2301297 6.720088 -1.9241254 -7.2647243 6.6696291 -1.9223696 -7.3105979 6.6295395 -1.9237353 -7.3445625 6.5786691 -1.9219794 -7.370832 6.5211339 -1.9182727 -7.4136605 6.4783654 -1.9190531 -7.4755483 6.4519763 -1.9249058 -7.5015597 6.3945346 -1.9213941 -7.5263972 6.3363857 -1.9176874 -7.5394912 6.2687688 -1.9110544 -7.5808458 6.2248783 -1.9118347 -7.5899477 6.1547751 -1.9044213 -7.6344604 6.113605 -1.906177 -7.6787534 6.0721202 -1.9079329 -7.7135477 6.0230794 -1.9073477 -7.7309394 5.9606671 -1.9024704 -7.7595634 5.9071789 -1.9005195 -7.7690039 5.8394232 -1.8938864 -7.8212295 5.8039155 -1.8979833 -7.8416605 5.7448049 -1.8942766 -7.8775568 5.697156 -1.8944716 -7.9059792 5.6441545 -1.892911 -7.9661198 5.6136141 -1.8991538 -7.9601521 5.5366325 -1.8893993 -8.0424938 5.5209846 -1.9011047 -8.0413008 5.4478822 -1.8927158 -8.0574532 5.3869939 -1.8886189 -8.0788927 5.3298926 -1.8858877 -8.1007586 5.2732668 -1.8833516 -8.1346121 5.2245216 -1.8837417 -8.1731443 5.178709 -1.8853024 -8.1698332 5.1066327 -1.8771087 -8.2394199 5.080081 -1.8860828 -8.2628927 5.0248437 -1.8843269 -8.271699 4.9609356 -1.8792546 -8.3121138 4.9160781 -1.8815957 -8.3395796 4.8635015 -1.8810104 -8.3828697 4.8200598 -1.8841319 -8.4063139 4.7651477 -1.8827662 -8.4405317 4.7163477 -1.8839368 -8.5028191 4.6829181 -1.8915453 -8.5003595 4.6138177 -1.8845221 -8.5259142 4.5601864 -1.8839368 -8.575428 4.5192151 -1.8888141 -8.5899382 4.4597349 -1.8858877 -8.6215067 4.4091763 -1.8868631 -8.6510267 4.3575163 -1.8874484 -8.6960535 4.3135028 -1.8915453 -8.7038488 4.2510266 -1.8874484 -8.747448 4.206039 -1.8913503 -8.7996883 4.1648707 -1.897203 -8.8126297 4.1050019 -1.8944716 -8.8483515 4.0557542 -1.8968128 -8.856082 3.993727 -1.893106 -8.8741446 3.9365287 -1.8917404 -8.8810501 3.8745542 -1.8880337 -8.9037552 3.8196015 -1.8878386 -8.93787 3.7694695 -1.8901796 -8.9807644 3.7228172 -1.8944716 -9.0088882 3.6698616 -1.8956422 -9.0667496 3.6287236 -1.9032507 -9.0532446 3.5590324 -1.8956422 -9.0804014 3.5055344 -1.8968128 -9.1329241 3.4615672 -1.9034458 -9.128252 3.3958912 -1.8979833 -9.1645803 3.3455329 -1.9012998 -9.1969395 3.2935345 -1.903836 -9.1892128 3.2272944 -1.8979833 -9.2477922 3.1842563 -1.906177 -9.2141848 3.1095831 -1.895057 -9.2479916 3.0579121 -1.8981783 -9.3384295 3.02437 -1.9132004 -9.317543 2.954567 -1.9050065 -9.3570414 2.9040239 -1.9094937 -9.3962698 2.853107 -1.9139807 -9.3600054 2.7794909 -1.9028605 -9.4070263 2.7307527 -1.9091034 -9.3726501 2.6585345 -1.8985686 -9.385951 2.6001897 -1.8979833 -9.4074097 2.5440853 -1.8991538 -9.43612 2.4898162 -1.9018852 -9.474966 2.4379776 -1.9067624 -9.4669142 2.3740714 -1.9020802 -9.5060759 2.3219867 -1.9071525 -9.5449543 2.2695107 -1.9122249 -9.5481882 2.2084713 -1.9100789 -9.5338087 2.1436071 -1.9044213 -9.5592394 2.0877874 -1.9069575 -9.5737886 2.0295002 -1.9073477 -9.5774145 1.968942 -1.9055918 -9.5864296 1.9095646 -1.9050065 -9.610486 1.85312 -1.9075427 -9.6409597 1.7977096 -1.9114445 -9.6431208 1.7369562 -1.9096887 -9.7115765 1.6878239 -1.9213941 -9.7478676 1.6325741 -1.9266616 -9.7315578 1.5685209 -1.9213941 -9.7458448 1.5095297 -1.9223696 -9.715148 1.4437954 -1.9143709 -9.7238235 1.3841572 -1.9143709 -9.7933598 1.3327919 -1.9266616 -9.7750921 1.2692691 -1.9213941 -9.8479137 1.2173203 -1.9344652 -9.8094139 1.1515027 -1.9252959 -9.831892 1.0930238 -1.9284174 -9.8315849 1.0319599 -1.9270518 -9.7967377 0.96757114 -1.9188579 -9.774169 0.90482277 -1.9132004 -9.7658558 0.84365243 -1.9104691 -9.8197317 0.78762937 -1.9202236 -9.816555 0.72678339 -1.9186629 -9.8609495 0.66925466 -1.9266616 -9.8090715 0.60529977 -1.9155414 -9.8693991 0.54824954 -1.9268566 -9.8138018 0.48478529 -1.9151512 -9.8332491 0.42527828 -1.9184678 -9.8552761 0.36565956 -1.9223696 -9.8789015 0.30584702 -1.9266616 -9.9198112 0.24619424 -1.9344652 -9.8809299 0.18457647 -1.9264665 -9.8995295 0.12416409 -1.9299781 -9.8422394 0.063055485 -1.9184678 -9.873826 0.0026682485 -1.9247106 -9.8658104 -0.057869516 -1.9231499 -9.9005756 -0.1188318 -1.9301732 -9.8957376 -0.17950673 -1.9293928 -9.9120989 -0.24065302 -1.9329045 -9.8996515 -0.3011387 -1.9307585 -9.891737 -0.36166045 -1.929588 -9.8863916 -0.42222229 -1.9290026 -9.8826351 -0.48282814 -1.9288076 -9.8892803 -0.54399759 -1.9307585 -9.8563871 -0.60286707 -1.9249058 -9.8945808 -0.66617131 -1.9332947 -9.8482466 -0.72377467 -1.9249058 -9.8856611 -0.78754288 -1.9332947 -9.9128895 -0.85095727 -1.9397327 -9.8840418 -0.9096058 -1.9350505 -9.9075565 -0.97311556 -1.9409032 -9.8945713 -1.033175 -1.9395375 -9.8588009 -1.0906289 -1.9336848 -9.8402338 -1.1497335 -1.9313438 -9.8213129 -1.2086515 -1.9290026 -9.838028 -1.2720382 -1.93388 -9.8465595 -1.3346207 -1.9371965 -9.8090534 -1.3908787 -1.9313438 -9.7916031 -1.4497459 -1.929588 -9.7767076 -1.5089005 -1.9284174 -9.7846956 -1.5716627 -1.931929 -9.7980852 -1.6355492 -1.9366112 -9.7376137 -1.6869267 -1.9264665 -9.7251492 -1.746297 -1.9260763 -9.7026796 -1.803784 -1.9237353 -9.6798716 -1.8610611 -1.9213941 -9.6653843 -1.919847 -1.9208089 -9.593854 -1.9668968 -1.9087132 -9.3321218 -1.9729503 -1.8579898 -9.0649366 -1.9746149 -1.8060957 -8.9311123 -2.0029266 -1.7813193 -8.7581053 -2.0206261 -1.7485441 -8.6644278 -2.0550766 -1.7319615 -8.5115833 -2.0740502 -1.7032832 -8.4777651 -2.1209977 -1.6989912 -8.4037943 -2.1573603 -1.6865054 -8.377121 -2.2053869 -1.6837741 -7.7384882 -2.0880251 -1.5550145 -7.53269 -2.0821338 -1.5152161 -7.381052 -2.08903 -1.4865378 -7.0515771 -2.0425439 -1.4209875 -7.0163436 -2.079082 -1.4163053 -6.7049809 -2.0316031 -1.3542665 -6.507833 -2.0155134 -1.3158338 -6.4635525 -2.0453408 -1.3092008 -6.3099675 -2.0393913 -1.2797421 -6.0617089 -2.0002694 -1.2303842 -6.0074973 -2.0233307 -1.2216052 -5.7983422 -1.9925435 -1.180246 -5.7860069 -2.0280838 -1.180246 -5.7743773 -2.0638783 -1.1804411 -5.5671773 -2.0283878 -1.139277 -5.3863797 -1.9999994 -1.1035755 -5.3116322 -2.0094011 -1.0903094 -5.3019481 -2.0430133 -1.0908946 -5.0975962 -2.0002329 -1.0499257 -5.0287623 -2.0089028 -1.0378301 -5.0272427 -2.0441563 -1.0401711 -4.9874196 -2.0637088 -1.0343184 -4.9493551 -2.0836112 -1.0288559 -4.9914694 -2.1375041 -1.0407565 -4.965672 -2.1626055 -1.0380251 -4.9541025 -2.1938283 -1.0384153 -4.9503851 -2.2286158 -1.0405613 -4.8759775 -2.231185 -1.0272952 -4.894208 -2.2759566 -1.0343184 -4.8633037 -2.2979791 -1.0306118 -4.8747511 -2.340091 -1.0362693 -4.7739162 -2.3278127 -1.0171505 -4.7120872 -2.3335464 -1.0066156 -4.6713963 -2.3491902 -1.0007629 -4.7136655 -2.4068124 -1.0134438 -4.6631122 -2.417176 -1.0054451 -4.6308355 -2.436605 -1.0015433 -4.6261778 -2.4705198 -1.0038843 -4.5945506 -2.4899764 -1.0001776 -4.5766077 -2.5167027 -0.99959236 -4.5884838 -2.5600345 -1.0058353 -4.5931721 -2.5997398 -1.0105175 -4.6017971 -2.6420414 -1.016175 -4.5439744 -2.6460347 -1.0066156 -4.6213818 -2.7292469 -1.0282706 -4.5650063 -2.7338593 -1.0191014 -4.529705 -2.7506146 -1.0148094 -4.5528259 -2.8030469 -1.0241737 -4.5030966 -2.8106694 -1.0165652 -4.4459882 -2.8130667 -1.0072008 -4.4707427 -2.8673067 -1.0171505 -4.4292212 -2.8791778 -1.0114928 -4.4253931 -2.9154766 -1.0148094 -4.3307567 -2.891367 -0.99647093 -4.350296 -2.9431748 -1.0054451 -4.3305373 -2.9687028 -1.005055 -4.3235159 -3.0030544 -1.0077862 -4.3555317 -3.0650976 -1.0200769 -4.2935247 -3.0610101 -1.009542 -4.2221937 -3.0493853 -0.99666601 -4.3039155 -3.1488044 -1.0214425 -4.1994247 -3.112067 -1.0003728 -4.1747603 -3.1336529 -0.99900711 -4.1905828 -3.1859288 -1.0077862 -4.2284517 -3.2558734 -1.0222229 -4.1534905 -3.2389238 -1.0083715 -4.1774044 -3.2990055 -1.0194916 -4.1907802 -3.351536 -1.0280756 -4.1838536 -3.3883007 -1.0315871 -3.9658389 -3.2521656 -0.98086369 -3.955617 -3.2845857 -0.98339987 -4.0922561 -3.4407465 -1.0241737 -3.8597584 -3.2858205 -0.96896321 -4.0920615 -3.5272148 -1.0352939 -4.0503941 -3.5348403 -1.0300264 -3.9742503 -3.5115578 -1.0155897 -4.017674 -3.5940897 -1.0329528 -3.9584777 -3.5850883 -1.0230032 -3.877862 -3.5556073 -1.0072008 -3.5986853 -3.3404005 -0.93735856 -3.5588279 -3.3442798 -0.93209112 -3.5339782 -3.3619962 -0.9309206 -3.5111639 -3.3815753 -0.93033528 -3.7220361 -3.6290562 -0.99471509 -3.7318006 -3.6835268 -1.0036893 -3.6966434 -3.6938736 -1.0001776 -3.7600784 -3.8036935 -1.0245639 -3.7537951 -3.8442402 -1.0294412 -3.7301366 -3.8672006 -1.0294412 -3.640727 -3.8211234 -1.0105175 -3.6588783 -3.8876812 -1.022613 -3.7164063 -3.9977124 -1.046414 -3.6957862 -4.024776 -1.0475845 -3.6835375 -4.0611825 -1.0512913 -3.6467719 -4.0705566 -1.0477797 -3.6308241 -4.1031408 -1.0505109 -3.6088057 -4.129035 -1.0514864 -3.4994662 -4.0538249 -1.0259296 -3.480252 -4.0819392 -1.0276854 -3.4172456 -4.0581951 -1.01598 -3.4242556 -4.1175523 -1.0259296 -3.4617805 -4.2150497 -1.0456337 -3.3963223 -4.1874518 -1.0331479 -3.4116337 -4.2595105 -1.046219 -3.3769178 -4.2695923 -1.0434877 -3.339793 -4.2763166 -1.0399761 -3.2643919 -4.2330313 -1.0239787 -3.3351784 -4.3801956 -1.0557784 -3.3318069 -4.431941 -1.0635819 -3.3191597 -4.471993 -1.0684593 -3.2441361 -4.427392 -1.0524619 -3.2013931 -4.4257545 -1.0471944 -3.1718979 -4.4421215 -1.046414 -3.1468413 -4.4647074 -1.0471944 -3.1081884 -4.4678273 -1.0432926 -3.1106851 -4.5304823 -1.0538275 -3.0520272 -4.5040092 -1.0429025 -3.0172484 -4.5120506 -1.0403663 -2.9862661 -4.5255671 -1.0391957 -2.9466722 -4.5257201 -1.0349038 -2.8785737 -4.4809923 -1.0200769 -2.8405278 -4.4819999 -1.016175 -2.8218091 -4.5134845 -1.0194916 -2.8043544 -4.5474119 -1.0233934 -2.7631521 -4.5427442 -1.018321 -2.7639744 -4.6075597 -1.0294412 -2.719178 -4.5965719 -1.0230032 -2.6849949 -4.6030025 -1.0206621 -2.6361718 -4.5836778 -1.0124683 -4.0905848 -7.2159681 -1.6106153 -2.5998137 -4.6516447 -1.0206621 -2.5584505 -4.6443119 -1.0153947 -2.5359864 -4.6711297 -1.0179309 -2.4818411 -4.6390324 -1.0072008 -3.8855977 -7.3727593 -1.6184188 -3.8276353 -7.3720875 -1.6129563 -3.7769711 -7.3849554 -1.6106153 -3.7245293 -7.3939757 -1.6074938 -2.3187644 -4.6734385 -0.99842185 -3.6365256 -7.4452939 -1.6088594 -3.5776014 -7.4400644 -1.6028117 -3.5352385 -7.4689684 -1.6043724 -2.1897111 -4.6995955 -0.99198383 -2.1779935 -4.7503915 -1.0001776 -3.442709 -7.6338115 -1.6264175 -3.3799005 -7.6189284 -1.618614 -3.3170125 -7.6026645 -1.6106153 -3.2818978 -7.6499162 -1.616468 -3.2322297 -7.6635833 -1.6151023 -3.1765103 -7.6624317 -1.6106153 -3.1423812 -7.7135711 -1.6174434 -3.099 -7.7427235 -1.6195894 -3.0446174 -7.7442493 -1.6158826 -2.992805 -7.7518048 -1.6135416 -2.9420569 -7.7617679 -1.6117858 -2.8957436 -7.7833509 -1.6125661 -2.8489401 -7.8037367 -1.6131514 -2.8218286 -7.8792448 -1.6254421 -1.1044925 -3.1425643 -0.62326312 -1.0976381 -3.1854506 -0.63087165 -1.0718019 -3.1735389 -0.62696987 -1.0618509 -3.2089238 -0.63301766 -2.5422552 -7.8491898 -1.6018362 -1.0686225 -3.367564 -0.66345173 -1.0447427 -3.3637533 -0.66130573 -2.4204195 -7.970674 -1.6176385 -0.98105872 -3.3011014 -0.64569855 -0.94247317 -3.2439494 -0.63262749 -0.89660084 -3.1581426 -0.61370373 -0.87720597 -3.1635847 -0.61370373 -2.1371603 -7.9019885 -1.5889602 -2.0891345 -7.9168501 -1.5893505 -0.8466751 -3.2874808 -0.63594401 -1.9746565 -7.8733931 -1.5753039 -1.9267743 -7.8872666 -1.5756941 -0.84225738 -3.5391526 -0.68432641 -1.8282939 -7.9036283 -1.5743284 -1.7765383 -7.9003439 -1.5714021 -1.7271925 -7.9072628 -1.5706217 -1.675796 -7.9042792 -1.5678905 -1.6250936 -7.9038448 -1.5657445 -1.5754169 -7.907896 -1.5645739 -1.5224113 -7.8943 -1.5598918 -1.4732255 -7.8996363 -1.5591114 -1.4245528 -7.9075618 -1.5589163 -1.3729852 -7.8987598 -1.5554047 -1.3241696 -7.9051008 -1.5550145 -1.2761078 -7.9159822 -1.5555998 -1.2267622 -7.918817 -1.5546243 -1.1762774 -7.9135833 -1.5520881 -1.1265936 -7.9128838 -1.5505275 -1.0769627 -7.9118724 -1.5489668 -1.0296578 -7.9280581 -1.5509176 -0.99794203 -8.071475 -1.5784254 -0.95091075 -8.098877 -1.5827173 -0.90065783 -8.0996847 -1.5817419 -0.85022622 -8.0982304 -1.5803763 -0.80003899 -8.0984144 -1.5794008 -0.75105536 -8.1109838 -1.5809616 -0.70177895 -8.1213026 -1.5821321 -0.6506815 -8.1098137 -1.5790106 -0.59975159 -8.0980034 -1.5758892 -0.55078113 -8.1122952 -1.5780351 -0.50111526 -8.1174793 -1.5784254 -0.45048365 -8.1057129 -1.5754989 -0.40131873 -8.120079 -1.5778401 -0.35199448 -8.1341476 -1.5801811 -0.30211392 -8.1371336 -1.5803763 -0.25251228 -8.1496181 -1.5825223 -0.20281728 -8.1637602 -1.5850585 -0.15284899 -8.1717157 -1.5864241 -0.10291255 -8.1891718 -1.5897406 -0.052527115 -8.1680717 -1.5854486 -0.0024077778 -8.1682405 -1.5854486 --0.047611888 -8.1514282 -1.5821321 --0.097793624 -8.1647129 -1.5848633 --0.14808646 -8.1747465 -1.5870093 --0.19769281 -8.1511326 -1.5825223 --0.24785317 -8.1546669 -1.5834976 --0.29788461 -8.1529932 -1.5834976 --0.34765303 -8.1451321 -1.5823271 --0.39867955 -8.1643972 -1.5866191 --0.44919971 -8.169632 -1.5881798 --0.49871925 -8.1569319 -1.586229 --0.54730791 -8.1321907 -1.581937 --0.59913981 -8.1550884 -1.5872045 --0.65010327 -8.1629915 -1.5895455 --0.70160615 -8.1754608 -1.592862 --0.74860686 -8.1368189 -1.5860338 --0.80111092 -8.1584263 -1.5913013 --0.84993136 -8.1416521 -1.5889602 --0.90051931 -8.1421328 -1.5901308 --0.94635993 -8.1013842 -1.5831075 --1.0015671 -8.1402025 -1.5920817 --1.048978 -8.1144505 -1.5881798 --1.1004616 -8.1204958 -1.590716 --1.1534369 -8.1359253 -1.5952032 --1.1993109 -8.1015291 -1.5897406 --1.2492977 -8.0959568 -1.5901308 --1.2975492 -8.079423 -1.588375 --1.3527551 -8.1051683 -1.5952032 --1.4016243 -8.0918837 -1.5942277 --1.452463 -8.0898876 -1.5955933 --1.496693 -8.0518961 -1.5897406 --1.5558907 -8.0936069 -1.6000804 --1.6018901 -8.06563 -1.5963737 --1.6517439 -8.0575705 -1.5967638 --1.7031829 -8.05688 -1.5987147 --1.7575998 -8.0692768 -1.6033969 --1.8053609 -8.050684 -1.6018362 --1.8545045 -8.0384998 -1.6016411 --1.9049252 -8.0317402 -1.6026165 --1.9555651 -8.0256186 -1.6037871 --2.0045345 -8.012517 -1.603592 --2.0551245 -8.0057659 -1.6047626 --2.1072061 -8.0043859 -1.6071036 --2.1573031 -7.9950938 -1.607884 --2.2068424 -7.9835968 -1.6082742 --2.2549856 -7.9670744 -1.6076889 --2.3079236 -7.9672184 -1.6106153 --2.3523052 -7.9378619 -1.6074938 --2.3986902 -7.9157705 -1.6059331 --2.4506991 -7.9121451 -1.6082742 --2.5006812 -7.9016342 -1.6092496 --2.5491178 -7.8861418 -1.6092496 --2.6026859 -7.8861847 -1.6125661 --2.6607354 -7.8988786 -1.618614 --2.720314 -7.914866 -1.6254421 --2.763634 -7.8832173 -1.6223207 --2.7891634 -7.8023901 -1.6088594 --2.8376575 -7.786972 -1.6092496 --2.8847008 -7.7675753 -1.6088594 --1.4180884 -3.7495263 -0.75807053 --1.4258963 -3.7014043 -0.74968165 --3.0379412 -7.7405496 -1.6147121 --3.0963004 -7.7490849 -1.6205648 --3.1522908 -7.7508354 -1.625052 --3.1915355 -7.711411 -1.62076 --3.2555447 -7.7314534 -1.6293439 --3.2940381 -7.6905971 -1.6248568 --3.3337204 -7.6531572 -1.6211501 --3.3770406 -7.6244874 -1.6193943 --3.4181206 -7.5911036 -1.6166631 --1.4456315 -3.1602294 -0.65194142 --1.4774078 -3.1779768 -0.65779412 --1.6134185 -3.4153497 -0.71202922 --1.6351936 -3.4071541 -0.71241939 --1.6534884 -3.3917677 -0.71124887 --1.672527 -3.3780429 -0.71046853 --1.6919001 -3.3650885 -0.70988321 --1.7138548 -3.357264 -0.71046853 --1.7380347 -3.3536501 -0.71202922 --1.7622347 -3.3498654 -0.71358997 --3.9426486 -7.3813496 -1.625247 --3.9939432 -7.3682275 -1.6277832 --4.0452247 -7.3547535 -1.6303194 --4.0926666 -7.3340759 -1.6312948 --4.1240587 -7.2849293 -1.6258323 --4.1940837 -7.3037114 -1.635977 --4.2279572 -7.2591958 -1.631685 --4.2664323 -7.2229838 -1.6293439 --4.298573 -7.1764779 -1.6246618 --4.3547482 -7.1700845 -1.6293439 --4.3930025 -7.1340432 -1.627198 --4.4460444 -7.1219282 -1.6307095 --4.4891357 -7.0936852 -1.6305145 --2.0193112 -3.1491723 -0.70481092 --2.0428739 -3.1433003 -0.70637161 --2.0642815 -3.1339819 -0.70715195 --4.7196169 -7.0678306 -1.6511941 --4.7365069 -6.999752 -1.6418297 --4.7843599 -6.9778371 -1.6435856 --4.8147721 -6.9306307 -1.6392936 --4.8622885 -6.908175 -1.6410494 --4.9114189 -6.8877921 -1.6433904 --4.9581847 -6.8638864 -1.6449511 --4.9990487 -6.8317513 -1.6445609 --5.0344481 -6.7922826 -1.6424149 --5.0689626 -6.751853 -1.6400739 --5.1150455 -6.7268682 -1.6416346 --5.1723852 -6.7163348 -1.6469021 --5.203846 -6.6720986 -1.6437806 --5.2544155 -6.6523561 -1.6469021 --5.2914581 -6.6153951 -1.6457316 --5.3449159 -6.5988059 -1.6498284 --5.372241 -6.549963 -1.6457316 --5.4254909 -6.5327187 -1.6498284 --5.467998 -6.5023079 -1.6506088 --5.5262346 -6.4902883 -1.6562663 --5.5851698 -6.4785404 -1.6621192 --5.6170754 -6.4352827 -1.659778 --5.6486611 -6.3918777 -1.657437 --5.70151 -6.3724456 -1.6615338 --5.7326007 -6.32862 -1.6591928 --5.7653575 -6.2868214 -1.657437 --5.8044915 -6.2520461 -1.657632 --5.8454313 -6.219171 -1.6584123 --5.8848338 -6.184608 -1.6588025 --5.9226713 -6.1483827 -1.6588025 --5.9856248 -6.1379032 -1.6660209 --6.0231738 -6.1010609 -1.6660209 --6.0383067 -6.0417924 -1.659778 --6.0780554 -6.0073857 -1.6605583 --6.1477895 -6.0021763 -1.6697276 --6.189445 -5.9691067 -1.6710932 --6.2209826 -5.9262815 -1.6697276 --6.2486558 -5.8799343 -1.6673865 --6.2939572 -5.850162 -1.6699227 --6.3333473 -5.8147488 -1.6708982 --6.3718133 -5.7784138 -1.6716785 --6.4173779 -5.7483683 -1.6744097 --6.4613442 -5.7166815 -1.6767509 --6.5073786 -5.6866069 -1.6796772 --6.5503168 -5.6536198 -1.6818233 --6.5863762 -5.6145935 -1.6822134 --6.6282067 -5.5803905 -1.6841643 --6.6638308 -5.5408692 -1.6845545 --6.6999779 -5.5017433 -1.6851398 --6.7282767 -5.4562058 -1.6837741 --6.7677536 -5.419723 -1.6853348 --6.8131914 -5.3878269 -1.6884563 --6.8538532 -5.3519559 -1.6904072 --6.8811255 -5.3056092 -1.6890416 --6.9393058 -5.2828894 -1.6954795 --6.9637494 -5.2343192 -1.6935287 --6.9500499 -5.1575985 -1.6822134 --6.9973903 -5.1264472 -1.6861153 --7.0525579 -5.1006556 -1.691968 --7.0956969 -5.0658321 -1.6948943 --7.1146197 -5.0137258 -1.691968 --7.1355867 -4.9632573 -1.6896268 --7.1537762 -4.911056 -1.6867005 --7.1374884 -4.8357182 -1.6755804 --7.1711025 -4.7945576 -1.6765558 --7.1962929 -4.747766 -1.6755804 --7.2532382 -4.7217102 -1.6822134 --6.4889565 -4.1678648 -1.4947315 --7.3636613 -4.6659365 -1.6946992 --7.4079556 -4.6305413 -1.6984059 --7.4637809 -4.6019826 -1.7048439 --7.4935536 -4.5571179 -1.7052341 --7.5095983 -4.5039921 -1.7025028 --7.5235848 -4.449842 -1.6993814 --7.5414267 -4.3981605 -1.6972353 --7.5733733 -4.3547373 -1.6984059 --7.5999508 -4.3081861 -1.6984059 --7.6236734 -4.2600374 -1.6978207 --7.6574016 -4.2174368 -1.6995765 --7.669342 -4.1628881 -1.696455 --7.6610098 -4.0977149 -1.6888465 --7.668654 -4.0414877 -1.6849446 --7.6793795 -3.9871285 -1.6818233 --7.6670222 -3.9211819 -1.6736294 --6.903419 -3.4775097 -1.4982432 --6.8929944 -3.4193997 -1.49122 --6.9015069 -3.3710163 -1.4884887 --6.9202929 -3.3277562 -1.4880985 --6.9441276 -3.2869093 -1.4888788 --7.005064 -3.2632842 -1.497853 --7.7801714 -3.5662944 -1.6630945 --7.814425 -3.5241323 -1.6658258 --6.4802685 -2.874959 -1.3708493 --6.49509 -2.8339665 -1.3702639 --7.8635464 -3.3735123 -1.6627043 --7.8813868 -3.3240559 -1.6621192 --7.9161315 -3.2816415 -1.6652405 --7.9533772 -3.2400355 -1.6689472 --7.9585381 -3.1853442 -1.6658258 --7.9852357 -3.1393216 -1.6673865 --8.0034332 -3.0899127 -1.6671915 --8.0194902 -3.0397038 -1.6666062 --8.0462637 -2.9935169 -1.668362 --8.0736942 -2.9474518 -1.6703129 --7.9752784 -2.8562067 -1.6457316 --7.7039251 -2.7058532 -1.5848633 --8.1831503 -2.8178134 -1.6822134 --8.2021446 -2.7681763 -1.6826036 --8.2329435 -2.7224138 -1.6855299 --8.2821522 -2.6824188 -1.6923581 --8.3190241 -2.6380696 -1.69665 --8.3500414 -2.5916252 -1.6997715 --8.3958187 -2.5494566 -1.7060144 --8.4338694 -2.504591 -1.7106966 --8.4792204 -2.4615405 -1.7169394 --8.5290775 -2.4193652 -1.7241578 --8.5910234 -2.3800728 -1.7339123 --8.6376562 -2.3360159 -1.7405454 --8.6575174 -2.2844732 -1.7417159 --8.7321644 -2.246943 -1.7542018 --8.7362728 -2.1909366 -1.7522508 --8.7466936 -2.1365929 -1.7516656 --8.628912 -2.0518172 -1.7249382 --8.7254305 -2.0182722 -1.7421061 --8.8792744 -1.9965215 -1.7709795 --9.0207176 -1.9702386 -1.7973167 --9.1640873 -1.9427005 -1.8240441 --9.3583708 -1.9239377 -1.8611113 --9.7249451 -1.9371389 -1.9330995 --9.8599205 -1.9011859 -1.9580711 --9.8627224 -1.8390337 -1.9563153 --9.863203 -1.7765714 -1.9541693 --9.9376955 -1.7270949 -1.9670453 --9.9906683 -1.6732091 -1.9756292 --9.9988098 -1.611564 -1.975239 --9.9280634 -1.5377314 -1.9590466 --9.9179087 -1.4739038 -1.9551448 --9.9646349 -1.418407 -1.9627533 --9.9537134 -1.3545955 -1.9588515 --9.9657288 -1.2939999 -1.9596318 --9.9725075 -1.2327068 -1.9594368 --10.011055 -1.1751488 -1.9656796 --10.02685 -1.1146743 -1.9674355 --10.005213 -1.050164 -1.9617778 --10.001708 -0.98779052 -1.9598269 --9.9851189 -0.92432588 -1.9553399 --9.9974422 -0.86363101 -1.9567055 --10.037748 -0.80509043 -1.9637288 --10.00631 -0.74080968 -1.9565104 --9.9891386 -0.67793965 -1.9522184 --10.002899 -0.61723763 -1.9541693 --10.008457 -0.55595791 -1.9545594 --9.979353 -0.49294364 -1.9481215 --9.9851294 -0.43182901 -1.9487067 --9.9944525 -0.37080702 -1.9500724 --9.9710512 -0.30868912 -1.9450001 --10.021782 -0.24871306 -1.9547546 --9.9731073 -0.18628754 -1.944805 --9.9838705 -0.12521204 -1.9467559 --9.9844503 -0.063949816 -1.9467559 --10.008194 -0.0026887686 -1.9514381 --9.9560413 0.058409389 -1.9410982 --10.2095 0.12257588 -1.9916266 --10.170312 0.18451966 -1.9840181 --10.222915 0.24823564 -1.9947481 --10.080032 0.30664685 -1.9666551 --10.006412 0.36586663 -1.9524136 --10.07747 0.4304052 -1.9670453 --9.9894133 0.48805743 -1.9500724 --9.991127 0.54961205 -1.9510479 --9.9836502 0.61066616 -1.9502676 --9.9904795 0.67263919 -1.9524136 --9.4656487 -0.23920082 -1.9592985 --9.468894 -0.1811537 -1.9597116 --9.4659138 -0.12299924 -1.9588853 --9.4557285 -0.064840905 -1.9566133 --9.4539909 -0.0068189302 -1.9562002 --9.471467 0.051284414 -1.959918 --9.4308605 0.10893762 -1.9514498 --9.4466448 0.16709571 -1.9549609 --9.4112062 0.22424181 -1.9477319 --9.3979177 0.28163245 -1.9452534 --9.4370804 0.3407729 -1.9539282 --9.3839779 0.3965255 -1.9431878 --9.3852777 0.4542861 -1.9440141 --9.3862209 0.51207757 -1.9448402 --9.3877859 0.56995696 -1.9458729 --9.3714209 0.6267004 -1.9431878 --9.4005775 0.68661249 -1.9502105 --9.3669262 0.74196386 -1.9440141 --9.3738956 0.80042273 -1.9464926 --9.3746538 0.85845989 -1.9477319 --9.3721313 0.916251 -1.9483515 --9.3488159 0.97191966 -1.9446337 --9.3426762 1.0292646 -1.9446337 --9.3118877 1.0837442 -1.9394701 --9.3371115 1.1447884 -1.9462861 --9.3337927 1.2025582 -1.9471122 --9.3155727 1.2583663 -1.9448402 --9.2979879 1.314133 -1.9427748 --9.3226595 1.3760158 -1.9497973 --9.2840624 1.428581 -1.9433944 --9.2702913 1.4847466 -1.9423617 --9.2600412 1.5414394 -1.9421551 --9.23209 1.5950648 -1.9382308 --9.2240553 1.6520267 -1.9386438 --9.2195177 1.7096634 -1.9398831 --9.156002 1.7560669 -1.9285231 --9.1968832 1.8224822 -1.9396766 --9.1807346 1.8778987 -1.9386438 --9.1613798 1.93258 -1.9369915 --9.1216221 1.982731 -1.9310017 --9.1541615 2.0487044 -1.9407094 --9.1576281 2.1085663 -1.9442205 --9.1150017 2.1577308 -1.9378177 --9.0949354 2.2120006 -1.9363718 --9.1381493 2.2819853 -1.9487646 --9.0860624 2.3282995 -1.9405028 --9.0621414 2.3815203 -1.9384373 --9.0105124 2.4271562 -1.930382 --9.0180864 2.4886436 -1.9353391 --8.9856987 2.5391424 -1.9316213 --8.9718294 2.5947733 -1.9320344 --8.9810715 2.6572688 -1.9376111 --8.9505501 2.7080758 -1.934513 --8.9328299 2.7626555 -1.9343064 --8.9119787 2.8162351 -1.9334803 --8.8945312 2.8708649 -1.9334803 --8.8878994 2.9290612 -1.9359587 --8.8753242 2.9854126 -1.937198 --8.8170443 3.0261581 -1.9283166 --8.823245 3.0889294 -1.9338933 --8.7875385 3.1370893 -1.9301755 --8.7947884 3.2006519 -1.9361653 --8.7502146 3.2453699 -1.9305886 --8.6843729 3.2817078 -1.9202613 --8.7133827 3.35391 -1.9314147 --8.6543789 3.3923156 -1.9227399 --8.6752043 3.4620345 -1.932241 --8.6293221 3.5052583 -1.9266642 --8.6157894 3.5615046 -1.9285231 --8.6000881 3.6169579 -1.929969 --8.5741348 3.6681199 -1.9291427 --8.5362139 3.7140253 -1.9256315 --8.4533119 3.7398126 -1.9117929 --8.5471048 3.8441813 -1.9388504 --8.5002193 3.885977 -1.9334803 --8.4389467 3.9207468 -1.9248053 --8.3908405 3.9611766 -1.9192286 --8.3893147 4.0235872 -1.9245987 --8.3978949 4.09127 -1.9324474 --8.3086138 4.1110487 -1.9173696 --8.3042154 4.1724939 -1.9223268 --8.2557955 4.2118092 -1.9169565 --8.2350101 4.2650862 -1.9181958 --8.2580509 4.3414855 -1.929969 --8.1958628 4.3731904 -1.9215006 --8.1740379 4.4261923 -1.9227399 --8.1861725 4.4979358 -1.932241 --8.1396179 4.5376 -1.9276969 --8.1116219 4.5874586 -1.9276969 --8.0485239 4.6171837 -1.9192286 --8.0284986 4.671402 -1.921294 --7.9356403 4.6827879 -1.9055965 --7.9302673 4.7454581 -1.9113798 --7.9076924 4.7980886 -1.9130322 --7.8631024 4.8372912 -1.9093144 --7.8349338 4.8864827 -1.9097275 --7.7833004 4.9208713 -1.9043573 --7.7529597 4.9685364 -1.9043573 --7.7050958 5.0048223 -1.9000198 --7.6824145 5.057385 -1.9020853 --7.5958896 5.0675063 -1.8880402 --7.5978875 5.1364846 -1.8965086 --7.5751076 5.1890898 -1.8987806 --7.511776 5.2137156 -1.8907253 --7.5156612 5.2850342 -1.9000198 --7.5452509 5.375329 -1.9161304 --7.48277 5.4003396 -1.9084882 --7.4502831 5.4467292 -1.9086947 --7.3577476 5.4486713 -1.8932039 --7.3547034 5.5166106 -1.9012591 --7.3098078 5.5533485 -1.8983674 --7.3027377 5.618978 -1.9055965 --7.2758408 5.6696949 -1.907662 --7.2516685 5.7227173 -1.9105537 --7.1835504 5.7408404 -1.9016721 --7.1649232 5.7983503 -1.9062161 --7.1791601 5.8831334 -1.9198482 --7.1805768 5.9583116 -1.9301755 --7.1131668 5.9764543 -1.9217072 --7.0592208 6.0054059 -1.9169565 --7.0326185 6.0575471 -1.9198482 --6.9886808 6.0947967 -1.9179893 --6.9819584 6.1647615 -1.9266642 --6.9396238 6.2035737 -1.9254249 --6.9057817 6.2499771 -1.9266642 --6.849988 6.2763691 -1.9217072 --6.8185215 6.3249354 -1.9237726 --6.7724514 6.3599563 -1.9217072 --6.7538652 6.4209414 -1.9276969 --6.713635 6.4615831 -1.9274904 --6.6703572 6.4992418 -1.9264576 --6.6428919 6.5524154 -1.9301755 --6.6157174 6.6061869 -1.9340999 --6.5915732 6.6633496 -1.939057 --6.5567183 6.7099671 -1.9409158 --6.4936781 6.7275457 -1.9343064 --6.4779344 6.7941718 -1.9421551 --6.4139857 6.8102875 -1.9353391 --6.3894062 6.8681397 -1.9407094 --6.3199992 6.8776779 -1.932241 --6.2796526 6.9185009 -1.9328606 --6.2566786 6.9787564 -1.939057 --6.2215242 7.025805 -1.9415355 --6.1995554 7.0881505 -1.9483515 --6.1482711 7.1171722 -1.9458729 --6.1159167 7.1681604 -1.9495908 --6.0674052 7.200315 -1.9481449 --6.0293698 7.2449288 -1.9502105 --5.9848022 7.2817879 -1.9502105 --5.9412427 7.3198924 -1.9506235 --5.905396 7.3676605 -1.9537216 --5.8594708 7.4029899 -1.9535152 --5.8175516 7.4434285 -1.9547545 --5.7765527 7.4851809 -1.9564068 --5.7435627 7.5376053 -1.9609509 --5.6824985 7.5531588 -1.9557872 --5.6424642 7.5965238 -1.9580592 --5.6003752 7.6373143 -1.9597116 --5.5585723 7.6786666 -1.9615704 --5.5022497 7.699892 -1.9582657 --5.4498243 7.7263126 -1.9564068 --5.4341822 7.8053761 -1.9681799 --5.3839703 7.8353472 -1.9673537 --5.3495221 7.8884792 -1.9725174 --5.2830596 7.8943214 -1.9657013 --5.2523155 7.9535322 -1.9725174 --5.2034144 7.98561 -1.9725174 --5.1606674 8.0272636 -1.9749959 --5.1097441 8.0562992 -1.9743763 --5.0659242 8.0966234 -1.9766483 --4.9765778 8.0634441 -1.9607443 --4.9702554 8.1648664 -1.9783007 --4.927114 8.206954 -1.9811922 --4.8721781 8.229454 -1.9793334 --4.8289909 8.2718687 -1.9824315 --4.7908363 8.323391 -1.9878018 --4.738709 8.3509283 -1.9873886 --4.6878572 8.3807011 -1.9875952 --4.6495743 8.4332981 -1.9933785 --4.5954051 8.4573698 -1.9923458 --4.5300303 8.4603939 -1.9863559 --4.4926438 8.5157223 -1.9929653 --4.4357953 8.5344467 -1.9908999 --4.3878045 8.5702124 -1.9929653 --4.3377795 8.6022158 -1.9942046 --4.2984076 8.6558361 -2.0006075 --4.2387681 8.6688633 -1.9975094 --4.1787062 8.680603 -1.9942046 --4.1211743 8.697238 -1.9921392 --4.0594597 8.704627 -1.9880083 --4.0243387 8.7693872 -1.9973029 --3.9603882 8.7716217 -1.9921392 --3.9180105 8.8216887 -1.998129 --3.8598909 8.8365974 -1.9960636 --3.8167973 8.8861856 -2.0020535 --3.7580135 8.8995228 -1.9997814 --3.7127144 8.9450064 -2.004945 --3.6529546 8.9558411 -2.00226 --3.6132219 9.0162315 -2.0109348 --3.5635662 9.0527983 -2.0142395 --3.4959559 9.0434647 -2.0072169 --3.4393587 9.0620012 -2.0065975 --3.3908644 9.1021881 -2.0109348 --3.3369663 9.1283369 -2.0121741 --3.2818842 9.1514034 -2.0127938 --3.223073 9.1639843 -2.0111413 --3.1728442 9.2011623 -2.0150657 --3.1207137 9.2334347 -2.0179574 --3.064615 9.2542667 -2.0183706 --2.9969049 9.2393913 -2.0109348 --2.9457846 9.2753239 -2.0148592 --2.8914311 9.3016338 -2.0167181 --2.8394282 9.3360491 -2.020436 --2.7832057 9.3570471 -2.0212622 --2.7298381 9.3880415 -2.0243604 --2.6753924 9.4159088 -2.0268388 --2.6212306 9.4453468 -2.0297306 --2.5619462 9.4565306 -2.0286977 --2.5003726 9.4588289 -2.0258062 --2.4337373 9.4408321 -2.0185771 --2.3755252 9.4546385 -2.0183706 --2.3107214 9.4414759 -2.0123806 --2.2600038 9.4859333 -2.01899 --2.2094901 9.5329828 -2.0262194 --2.1561177 9.5692682 -2.0311763 --2.1011276 9.5995226 -2.0348942 --2.0405595 9.6045771 -2.0332417 --1.971516 9.5680437 -2.0227079 --1.9248424 9.6404085 -2.0357203 --1.8600819 9.6232185 -2.0295241 --1.7952454 9.6036739 -2.0229144 --1.7470678 9.6742058 -2.0357203 --1.6801146 9.6413679 -2.0264258 --1.6207626 9.6505299 -2.0262194 --1.5640162 9.6757479 -2.0295241 --1.5046176 9.6851625 -2.0295241 --1.446028 9.7000179 -2.0307631 --1.3776273 9.646718 -2.0175443 --1.3283416 9.7276964 -2.0330353 --1.2669845 9.7230511 -2.0303502 --1.2087473 9.7422943 -2.0328288 --1.1496342 9.7553577 -2.0340681 --1.0889947 9.7554216 -2.0326221 --1.029424 9.7648392 -2.0332417 --0.96968192 9.7729187 -2.0336549 --0.9115116 9.7981691 -2.0377858 --0.84883326 9.7743349 -2.0315895 --0.79002368 9.7939882 -2.0346875 --0.72984135 9.7976751 -2.034481 --0.66790837 9.7756128 -2.0289044 --0.60609144 9.7502308 -2.0227079 --0.54789627 9.7830734 -2.0289044 --0.48888201 9.8067722 -2.0332417 --0.42818648 9.7978573 -2.0307631 --0.3673982 9.7827005 -2.0270455 --0.30767336 9.7945509 -2.0291109 --0.24794072 9.8109255 -2.0322092 --0.18753101 9.8015013 -2.029937 --0.12700398 9.7731171 -2.0237408 --0.067136131 9.7883892 -2.0268388 --0.0070826625 9.7993793 -2.0291109 -0.052945457 9.7806482 -2.0251865 -0.11317133 9.798728 -2.0291109 -0.17324127 9.7949142 -2.0284913 -0.23303603 9.7809515 -2.0258062 -0.29275376 9.769557 -2.0237408 -0.35096505 9.7196646 -2.0136199 -0.41369215 9.7906456 -2.0291109 -0.47352231 9.7830362 -2.0280781 -0.5279488 9.6773634 -2.0063908 -0.58826607 9.6895676 -2.0096955 -0.64829624 9.694562 -2.0115545 -0.7100482 9.7216291 -2.0181639 -0.76621079 9.6731968 -2.0088694 -0.82663161 9.6809874 -2.0115545 -0.88789034 9.6961946 -2.015892 -0.94080228 9.6233711 -2.0016403 -1.0048891 9.6660776 -2.0119677 -1.0654655 9.6714001 -2.0144463 -1.1321374 9.7278528 -2.0278716 -1.1951379 9.7479162 -2.0336549 -1.2565523 9.7530146 -2.03634 -1.3060279 9.66852 -2.0200229 -1.3697085 9.6913261 -2.0266323 -1.4272909 9.6701565 -2.0239472 -1.4784169 9.6080284 -2.0125873 -1.5455416 9.6499805 -2.0235341 -1.6007082 9.6161871 -2.0183706 -1.6631793 9.6264315 -2.0227079 -1.7113502 9.5553684 -2.0096955 -1.7628143 9.5062065 -2.0014338 -1.8192675 9.4856014 -1.9993683 -1.8819994 9.4972944 -2.0043254 -1.9531766 9.5488358 -2.0179574 -2.007894 9.5184813 -2.0140331 -2.0602348 9.4782543 -2.0080433 -2.1204901 9.4749832 -2.0101087 -2.178807 9.4627466 -2.0103152 -2.2429128 9.4749079 -2.015892 -2.295459 9.4381495 -2.0109348 -2.3519051 9.418191 -2.0096955 -2.4213059 9.4490786 -2.0196097 -2.4628279 9.3715868 -2.0059779 -2.5164678 9.3421268 -2.0028796 -2.5724416 9.3217945 -2.0018468 -2.6269302 9.2964191 -1.9997814 -2.6985996 9.3308821 -2.0109348 -2.752749 9.3038273 -2.0086629 -2.8038347 9.2670946 -2.0043254 -2.8591986 9.2450418 -2.0032926 -2.9123337 9.2161283 -2.0008142 -2.9742372 9.2148466 -2.0045319 -3.0301099 9.1945648 -2.0041189 -3.0867815 9.1767263 -2.0043254 -3.1443012 9.1613159 -2.0051515 -3.1991618 9.1381559 -2.0043254 -3.2485938 9.0999241 -2.0001945 -3.308718 9.091773 -2.0028796 -3.3644419 9.0712996 -2.0028796 -3.4089725 9.0211964 -1.9962702 -3.4614499 8.9928045 -1.9946177 -3.5337012 9.0151224 -2.0045319 -3.579885 8.9705515 -1.9993683 -3.5987775 8.8595781 -1.9791268 -3.6646571 8.8653612 -1.9855298 -3.7186058 8.8418064 -1.9853232 -3.7604742 8.7900362 -1.9787138 -3.8080928 8.7524414 -1.975409 -3.8704331 8.7485962 -1.9799531 -3.923238 8.7228985 -1.9795399 -3.9713988 8.6870928 -1.9768548 -4.0431771 8.7024927 -1.9861494 -4.1002574 8.6854839 -1.9880083 -4.1555886 8.6645727 -1.989041 -4.2116747 8.6450691 -1.9904869 -4.2446823 8.578723 -1.9809858 -4.2972407 8.552516 -1.9809858 -4.3349648 8.4972258 -1.9741697 -4.3928704 8.4817619 -1.9768548 -4.4015808 8.3723717 -1.957233 -4.4648447 8.367651 -1.9626032 -4.5454526 8.3943043 -1.9756155 -4.5700192 8.3173761 -1.9638424 -4.6252551 8.2968702 -1.9657013 -4.7083449 8.3253975 -1.9795399 -4.7637215 8.3039894 -1.9813988 -4.7978549 8.2458487 -1.9743763 -4.8543267 8.226366 -1.9768548 -4.8810997 8.1569643 -1.9671472 -4.9153252 8.1009283 -1.9607443 -4.9623756 8.0664492 -1.9597116 -4.9946914 8.0084515 -1.9528955 -5.0646496 8.0107355 -1.9611573 -5.1031494 7.9630318 -1.9570265 -5.1439195 7.9192615 -1.9539282 -5.2026358 7.9030781 -1.9578526 -5.255374 7.8775182 -1.959505 -5.2811441 7.8118882 -1.9510366 -5.3262134 7.7753005 -1.9500039 -5.3503914 7.7087126 -1.941329 -5.4065948 7.6885443 -1.9446337 -5.4775114 7.6886959 -1.9533086 -5.5165696 7.6438341 -1.9504169 -5.543735 7.5829849 -1.9433944 -5.597146 7.5582623 -1.9458729 -5.6299148 7.5057735 -1.9411224 -5.6681695 7.460959 -1.9384373 -5.7120523 7.4237127 -1.9378177 -5.7761383 7.4124503 -1.9442205 -5.8354521 7.3945355 -1.9489712 -5.8684983 7.3433032 -1.9448402 -5.9035978 7.2949872 -1.9415355 -5.9445267 7.2540851 -1.9402962 -5.9758053 7.2016606 -1.9359587 -6.0104403 7.1536207 -1.9328606 -6.0618286 7.1255503 -1.9353391 -6.1041589 7.0867386 -1.934926 -6.1256638 7.0240779 -1.9279035 -6.1828938 7.0024958 -1.9324474 -6.2048779 6.941083 -1.925838 -6.2637639 6.9210167 -1.9310017 -6.2803349 6.8543167 -1.9229463 -6.3003168 6.7919793 -1.9161304 -6.3412032 6.75248 -1.9159238 -6.4007177 6.7325912 -1.9215006 -6.4405508 6.6917801 -1.9210875 -6.4896827 6.6605458 -1.923566 -6.489892 6.5794997 -1.9113798 -6.5329061 6.5423245 -1.9122061 -6.572926 6.5021162 -1.9122061 -6.6168971 6.465766 -1.9134452 -6.6451826 6.4141712 -1.9101405 -6.7176952 6.4050112 -1.9198482 -6.7404876 6.3482423 -1.9150976 -6.7556734 6.28477 -1.9082817 -6.7566466 6.2087722 -1.8975413 -6.8170748 6.1875839 -1.9039441 -6.8505416 6.1417198 -1.902705 -6.9144669 6.1229229 -1.9101405 -6.9276037 6.059123 -1.9033245 -6.9120831 5.971087 -1.8886598 -6.9493356 5.9291978 -1.8888663 -6.9998012 5.8984256 -1.8927907 -7.0456376 5.8635015 -1.8954757 -7.0799713 5.8189173 -1.8950627 -7.1185808 5.7778325 -1.8958889 -7.1485548 5.7297611 -1.894443 -7.186646 5.6882195 -1.8952693 -7.2252674 5.6470289 -1.896302 -7.187746 5.5469928 -1.8770932 -7.226316 5.5063434 -1.8783325 -7.2552748 5.4583702 -1.8770932 -7.2831321 5.4096661 -1.8756474 -7.3422256 5.3839703 -1.8824635 -7.3648195 5.3313589 -1.8797783 -7.4164987 5.2997222 -1.8847355 -7.3905125 5.2129436 -1.8696576 -7.4520693 5.1881843 -1.8772998 -7.4902139 5.1467948 -1.8789521 -7.5435171 5.1155667 -1.8845289 -7.5918388 5.0806127 -1.8888663 -7.6261358 5.0360913 -1.8896925 -7.6470566 4.9827933 -1.8872139 -7.6857162 4.9410696 -1.8892795 -7.7043223 4.8864803 -1.8863878 -7.7499194 4.8489771 -1.8903122 -7.7637067 4.7915688 -1.8863878 -7.7820964 4.737227 -1.8837026 -7.8361826 4.7044973 -1.889899 -7.8430114 4.6433659 -1.8845289 -7.9034634 4.6139011 -1.8923776 -7.8968577 4.5453062 -1.8839092 -7.9773579 4.5267072 -1.896715 -8.0118141 4.4814954 -1.8983674 -7.9320593 4.3731966 -1.8725492 -8.0679255 4.3837752 -1.8987806 -8.1283112 4.3522024 -1.9068358 -8.0804415 4.2629795 -1.8890729 -8.0856104 4.2024879 -1.8841158 -8.0973101 4.1456614 -1.8808111 -8.1531715 4.1113195 -1.8880402 -8.1826267 4.0633917 -1.8890729 -8.2408056 4.0294409 -1.8969216 -8.2909403 3.9911089 -1.9029114 -8.310853 3.9380665 -1.9018787 -8.3002777 3.8708682 -1.8938234 -8.3585529 3.835783 -1.9018787 -8.3418036 3.7663038 -1.8925842 -8.3710155 3.7178288 -1.89403 -8.4062223 3.6718788 -1.8969216 -8.3854427 3.6016934 -1.8870075 -8.416398 3.5539801 -1.8890729 -8.468771 3.5150251 -1.8960954 -8.4104548 3.4304736 -1.8779194 -8.5321569 3.4192078 -1.900846 -8.5802889 3.3775439 -1.9070424 -8.5853367 3.3188345 -1.9035311 -8.5982218 3.2633154 -1.9018787 -8.6043301 3.2053723 -1.8987806 -8.5788078 3.136054 -1.8886598 -8.6273603 3.0939269 -1.8952693 -8.6729488 3.0503478 -1.9012591 -8.7303505 3.0104723 -1.909934 -8.7069473 2.9427476 -1.9006394 -8.6960459 2.8797309 -1.8942366 -8.7191362 2.8281305 -1.8954757 -8.7307301 2.7728002 -1.8942366 -8.7737408 2.7273107 -1.9000198 -8.8052874 2.6779807 -1.9033245 -8.8009214 2.6177642 -1.8987806 -8.8656721 2.5779214 -1.9095209 -8.9048529 2.5301607 -1.9146845 -8.8589287 2.4584646 -1.9012591 -8.8540144 2.3986874 -1.8969216 -8.8997812 2.3525679 -1.9037377 -8.9263659 2.3010914 -1.9064227 -8.9763765 2.2553384 -1.9142715 -8.9444284 2.1890514 -1.9043573 -9.0090876 2.1463757 -1.9155108 -8.9572735 2.0760312 -1.9014657 -8.9832058 2.0240428 -1.9043573 -9.0155277 1.973279 -1.9086947 -9.0178957 1.9158899 -1.9066293 -9.0649385 1.8678285 -1.9142715 -9.0867825 1.8142798 -1.9165435 -9.0631609 1.751804 -1.9091078 -9.1064386 1.7022747 -1.9161304 -9.1051588 1.6442795 -1.9136518 -9.125679 1.5902284 -1.9159238 -9.1449137 1.5358254 -1.9179893 -9.12712 1.4753115 -1.9122061 -9.1824093 1.4264923 -1.9221202 -9.1513119 1.3642068 -1.9136518 -9.2060032 1.3146713 -1.923566 -9.1848135 1.254187 -1.9173696 -9.20786 1.1998298 -1.9206743 -9.2344675 1.1457192 -1.9248053 -9.2209187 1.0866303 -1.9204679 -9.1807375 1.0248193 -1.9105537 -9.2170172 0.97164917 -1.9169565 -9.2529888 0.9180724 -1.9233595 -9.2360401 0.8591944 -1.9186089 -9.2411385 0.80250692 -1.9186089 -9.2761221 0.74822927 -1.9250119 -9.2766352 0.69100708 -1.9241856 -9.2914381 0.63480777 -1.9264576 -9.2287531 0.57365406 -1.9124125 -9.2672682 0.51898772 -1.9198482 -9.284936 0.4628464 -1.9229463 -9.2739162 0.40526775 -1.9200548 -9.2654734 0.34795207 -1.9177828 -9.2527647 0.29063225 -1.9146845 -9.2758923 0.23439759 -1.9192286 -9.3016119 0.17794628 -1.9243922 -9.2271957 0.11988726 -1.9084882 -9.3050528 0.063801296 -1.9248053 -9.2808075 0.0066866907 -1.9196416 -9.2885017 -0.050301451 -1.921294 -9.2704077 -0.107091 -1.9175762 -9.3096857 -0.16467892 -1.9260446 -9.2439413 -0.22026347 -1.9124125 -9.3235893 -0.27940822 -1.9295559 -9.3578777 -0.33791628 -1.937198 -9.2559166 -0.39111966 -1.9161304 -9.2621384 -0.44833091 -1.9179893 -9.236742 -0.5039289 -1.9132388 -9.2559395 -0.56195784 -1.9179893 -9.2366972 -0.6176967 -1.9146845 -9.2015057 -0.67208093 -1.9080751 -9.2313471 -0.73123038 -1.9153042 -9.2325363 -0.78835827 -1.9165435 -9.2518845 -0.84722281 -1.9217072 -9.2728043 -0.90654469 -1.9272839 -9.2991829 -0.96676189 -1.9340999 -9.255146 -1.0196253 -1.9260446 -9.2458 -1.0760555 -1.9254249 -9.2584467 -1.135147 -1.9295559 -9.2600412 -1.1930592 -1.9314147 -9.226366 -1.24632 -1.925838 -9.2137012 -1.302224 -1.9248053 -9.2268324 -1.3618759 -1.9293493 -9.2057304 -1.4165311 -1.9266642 -9.2132893 -1.4756196 -1.9301755 -9.1760721 -1.5274655 -1.9241856 -9.1771326 -1.585572 -1.9264576 -9.2288704 -1.6528889 -1.9396766 -9.177187 -1.7018156 -1.9307951 -9.131979 -1.7514604 -1.9233595 -9.1201 -1.8072702 -1.9231529 -9.1213017 -1.8657445 -1.925838 -9.0704288 -1.9133981 -1.9173696 -9.0183611 -1.9602902 -1.9086947 -8.8228369 -1.9745686 -1.869038 -8.66467 -1.9950835 -1.8374364 -8.4094706 -1.9907473 -1.7847673 -8.2050495 -1.9956098 -1.7430451 -8.1679688 -2.0397549 -1.7376748 -8.0121784 -2.0531659 -1.7064865 -7.932241 -2.0846353 -1.6918217 -7.9797659 -2.1495521 -1.7050406 -7.9937787 -2.2060215 -1.7110305 -7.4914131 -2.1169624 -1.6038332 -7.1765656 -2.0756423 -1.5375321 -7.0820675 -2.0954902 -1.5195626 -6.7618971 -2.04598 -1.4518156 -6.5875015 -2.0374258 -1.4160831 -6.4853106 -2.0495086 -1.3962548 -6.3105927 -2.0369759 -1.3603158 -6.2477937 -2.0591235 -1.3491623 -6.0300884 -2.0284896 -1.3035157 -5.9823608 -2.0533829 -1.2956669 -5.7544746 -2.0147314 -1.2475418 -5.6682849 -2.0236883 -1.2310182 -5.5720901 -2.0279844 -1.2122225 -5.5182595 -2.0468266 -1.2029279 -5.4726462 -2.0681977 -1.1954923 -5.3283606 -2.0511312 -1.1657497 -5.0651579 -1.9856026 -1.1089497 -5.0083499 -1.9988763 -1.0988289 -4.9796734 -2.0229421 -1.095111 -4.8261051 -1.995155 -1.0628899 -4.7948318 -2.0167649 -1.0585525 -4.7553792 -2.0346031 -1.0523561 -4.6387291 -2.018466 -1.0283968 -4.6253619 -2.046495 -1.0281903 -4.6448426 -2.0892839 -1.0356259 -4.7146935 -2.1555746 -1.0548346 -4.6046562 -2.1395304 -1.0323212 -4.6179862 -2.1802735 -1.0385176 -4.5886412 -2.2009525 -1.0347997 -4.5266705 -2.2054996 -1.0234396 -4.5183144 -2.2358365 -1.0246789 -4.5080075 -2.2652752 -1.0255052 -4.5759525 -2.334686 -1.0449204 -4.4989843 -2.3303237 -1.0300492 -4.5131812 -2.3729088 -1.0368651 -4.4605532 -2.3802915 -1.0277772 -4.4363995 -2.4024916 -1.0255052 -4.4275775 -2.4329655 -1.026951 -4.4587159 -2.4858115 -1.0381044 -4.4289002 -2.5049353 -1.0345932 -4.3480954 -2.4945769 -1.0186892 -4.3623071 -2.5384307 -1.0259182 -4.3887839 -2.5900104 -1.0362456 -4.300602 -2.5736864 -1.0184826 -4.3424492 -2.6350446 -1.0327343 -4.3553677 -2.6795821 -1.0399634 -4.3139372 -2.6907234 -1.033767 -4.2576485 -2.6920466 -1.0238528 -4.2871838 -2.7476826 -1.0354193 -4.2554736 -2.7643437 -1.0317016 -4.254777 -2.801162 -1.0358324 -4.2904162 -2.862509 -1.0492579 -4.1106501 -2.7791901 -1.0079488 -4.1605201 -2.8502524 -1.0250921 -4.2530766 -2.9521539 -1.0533888 -4.0940146 -2.8791451 -1.0170368 -4.0483794 -2.8843424 -1.0098077 -4.0131502 -2.8965323 -1.0052637 -3.9984612 -2.9234116 -1.0060898 -4.0968256 -3.0340643 -1.0366586 -4.0577803 -3.0438812 -1.0312884 -4.0608425 -3.085294 -1.0370717 -4.038733 -3.1077662 -1.0362456 -4.0381117 -3.1469219 -1.0412027 -4.0002918 -3.1570938 -1.0362456 -3.9281037 -3.1394341 -1.0219939 -3.9285424 -3.1794801 -1.027364 -3.8499279 -3.1551547 -1.0112535 -3.7664909 -3.1256127 -0.99369711 -3.7839501 -3.1795039 -1.0038178 -3.9149148 -3.3307223 -1.0455401 -3.847698 -3.3144541 -1.0325277 -3.7550197 -3.274981 -1.0122862 -3.8558779 -3.404809 -1.0463663 -3.8130291 -3.4088423 -1.04017 -3.7194934 -3.3665221 -1.0195153 -3.6598094 -3.3535891 -1.0083618 -3.5997081 -3.3393862 -0.99700183 -3.5527594 -3.3366294 -0.98935968 -3.5336375 -3.3597143 -0.98977274 -3.5129564 -3.3813331 -0.98977274 -3.7121999 -3.617218 -1.0546281 -3.6801825 -3.6303086 -1.0517365 -3.612833 -3.6078849 -1.038311 -3.5899391 -3.6292894 -1.0381044 -3.6264141 -3.7114291 -1.0558674 -3.5138729 -3.6406882 -1.0286033 -3.5022712 -3.6735101 -1.031908 -3.5118661 -3.7291183 -1.0418223 -3.4762557 -3.7369859 -1.0378979 -3.4459777 -3.7503207 -1.0356259 -3.4367115 -3.7866082 -1.0399634 -3.4225571 -3.8178232 -1.042855 -3.3893366 -3.8277643 -1.0397568 -3.3496816 -3.8300774 -1.0345932 -3.3158832 -3.8387125 -1.0312884 -3.2751191 -3.8388898 -1.0257117 -3.3177071 -3.9374728 -1.047399 -3.2803404 -3.941963 -1.0430615 -3.2560914 -3.9620166 -1.0430615 -3.2693346 -4.0282607 -1.0556608 -3.2439442 -4.0474815 -1.0554543 -3.1898992 -4.0304852 -1.0455401 -3.2410302 -4.1471143 -1.0715649 -3.1515572 -4.0840435 -1.0494645 -3.058238 -4.0138087 -1.0257117 -3.0953197 -4.1145921 -1.047399 -3.0886853 -4.1586413 -1.0540085 -3.0411224 -4.1475325 -1.0461597 -2.9863541 -4.1256948 -1.0356259 -2.9899969 -4.1845393 -1.0461597 -2.9676487 -4.2076044 -1.047399 -2.918853 -4.1928124 -1.0389307 -2.9135749 -4.2404795 -1.0465728 -2.8567464 -4.2129297 -1.0350063 -2.8591416 -4.2726617 -1.0457467 -2.8296359 -4.2852259 -1.0445074 -2.817178 -4.3238211 -1.0498775 -2.7509081 -4.2793002 -1.0343866 -2.6968222 -4.2523084 -1.0234396 -2.6846929 -4.2911701 -1.0290164 -2.6300471 -4.2617693 -1.0176564 -2.655745 -4.3630724 -1.0387241 -2.6062591 -4.3415375 -1.0294296 -2.5975168 -4.3877568 -1.0368651 -2.5601854 -4.3858681 -1.0325277 -2.5185821 -4.3760548 -1.0263313 -2.4738157 -4.359941 -1.0186892 -2.4494054 -4.3793073 -1.0197219 -2.4442205 -4.4336677 -1.029223 -2.4188387 -4.4520206 -1.0300492 -2.3780813 -4.4417644 -1.0240593 -2.3407376 -4.4372344 -1.0195153 -2.3261027 -4.475822 -1.0252986 -2.3191087 -4.5300717 -1.0347997 -2.300962 -4.5634365 -1.0393437 -2.2576854 -4.5467978 -1.0321146 -2.2314637 -4.5640812 -1.0329407 -2.2360978 -4.6455693 -1.0488448 -2.1354811 -4.5071239 -1.013319 -2.1019957 -4.5077281 -1.0104274 -2.067359 -4.5054235 -1.006916 -2.0316222 -4.5001888 -1.0027851 -2.0039713 -4.5125699 -1.0027851 -1.9797701 -4.5328507 -1.004644 -1.9658223 -4.5772772 -1.0120797 -1.9335124 -4.5793381 -1.0098077 -1.9027519 -4.5847898 -1.0083618 -1.8841932 -4.6199336 -1.0137321 -1.8274181 -4.5605679 -0.99762148 -2.8793337 -7.3148003 -1.6199437 -1.792838 -4.6383185 -1.0102208 -1.750455 -4.6126418 -1.001959 -2.7442043 -7.36656 -1.6199437 -1.14373 -3.1294615 -0.66384357 -1.1225245 -3.1308944 -0.66260427 -1.1403052 -3.2429452 -0.68615049 -1.1749347 -3.4080515 -0.72146982 -1.5763571 -4.6646762 -0.99989349 -1.0708835 -3.2345917 -0.67974758 -1.0676221 -3.2922895 -0.69110763 -1.066358 -3.3584597 -0.70432651 -1.0492165 -3.3761516 -0.70680511 -1.0199389 -3.3544431 -0.70060873 -0.98678261 -3.3184364 -0.69131416 -0.96530956 -3.3206706 -0.69048798 -0.90452945 -3.1844144 -0.65929955 -0.88785172 -3.2002752 -0.66157156 -0.87178099 -3.2188842 -0.66446322 -0.85501498 -3.2355239 -0.66694176 -1.944926 -7.5449815 -1.6052791 -1.8962096 -7.5472841 -1.6032135 -1.8533542 -7.5730329 -1.6063118 -1.8068521 -7.5842619 -1.6063118 -0.83137321 -3.5881162 -0.73799348 -0.8102017 -3.5969679 -0.73881966 -1.677616 -7.6649814 -1.6168456 -1.6216044 -7.6330194 -1.6077576 -1.5751336 -7.6447425 -1.6081706 -1.5274302 -7.6504254 -1.6073445 -1.4832451 -7.6740632 -1.6104426 -1.4357704 -7.6810966 -1.6100296 -1.386526 -7.6782074 -1.6075511 -1.3365312 -7.6701837 -1.6040398 -1.2917119 -7.6917491 -1.6069314 -1.2413685 -7.6802125 -1.6028005 -1.195272 -7.6944523 -1.6042463 -1.1494802 -7.711319 -1.6063118 -1.0970232 -7.6823888 -1.5986695 -1.0464215 -7.6637697 -1.5932994 -1.0000101 -7.6748977 -1.5943321 -0.95229644 -7.676034 -1.5932994 -0.90357554 -7.668129 -1.5904077 -0.86215436 -7.724093 -1.6011481 -0.81351256 -7.7175612 -1.5986695 -0.76353371 -7.6961188 -1.5930928 -0.71638751 -7.7016335 -1.5932994 -0.67013395 -7.7175813 -1.595778 -0.62253106 -7.7186217 -1.5951583 -0.57414061 -7.7086363 -1.5922667 -0.52716422 -7.7168946 -1.5932994 -0.47889313 -7.7053356 -1.5902013 -0.43176931 -7.71106 -1.5908208 -0.38415447 -7.7077007 -1.5895816 -0.3380937 -7.7382603 -1.5955714 -0.29034892 -7.733345 -1.5941256 -0.24313864 -7.7428045 -1.595778 -0.19555083 -7.7412162 -1.5951583 -0.14765404 -7.7217269 -1.5908208 -0.10042468 -7.7342277 -1.5932994 -0.053128477 -7.7581806 -1.5982565 -0.0054950402 -7.7202015 -1.5902013 --0.042127639 -7.7670541 -1.6001154 --0.089604437 -7.7509952 -1.5968107 --0.13752449 -7.7708435 -1.6011481 --0.18457474 -7.743443 -1.5955714 --0.232289 -7.749011 -1.5970172 --0.28004327 -7.7533064 -1.5982565 --0.32761139 -7.7514424 -1.5982565 --0.37474179 -7.7404904 -1.5963975 --0.42159039 -7.7263217 -1.593919 --0.47112337 -7.7587485 -1.6013547 --0.52067864 -7.7849994 -1.6075511 --0.56793803 -7.774827 -1.6061052 --0.61679107 -7.7858267 -1.6092035 --0.66139072 -7.7448497 -1.6013547 --0.70889974 -7.7406454 -1.6013547 --0.7573337 -7.7458882 -1.6034201 --0.80838698 -7.7751575 -1.6106492 --0.85640055 -7.7729683 -1.6112689 --0.89966881 -7.7296638 -1.6032135 --0.9455328 -7.7113729 -1.6005285 --0.9910813 -7.6918402 -1.5976368 --1.0364257 -7.6720395 -1.5947452 --1.0827966 -7.6606913 -1.5937124 --1.1312096 -7.6635828 -1.595778 --1.1783599 -7.6574645 -1.5959845 --1.228881 -7.6723113 -1.6007351 --1.2759343 -7.6646266 -1.6007351 --1.3284353 -7.6884708 -1.6075511 --1.3716195 -7.6580229 -1.6028005 --1.4264302 -7.6917925 -1.6118885 --1.4794955 -7.713645 -1.618498 --1.5252765 -7.696744 -1.6168456 --1.5685534 -7.6680679 -1.6127146 --1.6159781 -7.6602139 -1.6131278 --1.6712613 -7.6883988 -1.6213896 --1.7239598 -7.7028251 -1.6267598 --1.773386 -7.7016373 -1.6288253 --1.8181301 -7.6801372 -1.6265533 --1.8642956 -7.6650338 -1.6257271 --1.9112923 -7.6534505 -1.6257271 --1.9587027 -7.6434746 -1.6261401 --2.0063112 -7.6341515 -1.6267598 --2.0571868 -7.6368136 -1.6300645 --2.0948985 -7.5910354 -1.6228354 --2.1345201 -7.5535574 -1.6174653 --2.1868072 -7.5609965 -1.6220093 --2.2303839 -7.5380535 -1.6199437 --2.2825439 -7.5438933 -1.6242813 --2.314626 -7.4839425 -1.6141605 --2.3631558 -7.4779959 -1.6160194 --2.4065917 -7.4559059 -1.614367 --2.4575005 -7.4567971 -1.6178783 --2.5053916 -7.4480696 -1.6193242 --2.553268 -7.4390345 -1.62077 --2.5982184 -7.421381 -1.6203569 --2.6450219 -7.4089851 -1.621183 --2.6971242 -7.411005 -1.625314 --1.3936325 -3.7568762 -0.80636013 --2.7615826 -7.3077879 -1.6096165 --2.8288624 -7.3491464 -1.6228354 --2.8749738 -7.3343835 -1.623455 --2.9199226 -7.3166051 -1.623455 --2.9761753 -7.326653 -1.629858 --3.0173373 -7.299211 -1.6277925 --3.0563784 -7.2670307 -1.6246943 --3.1066825 -7.2616343 -1.6277925 --3.1527419 -7.2460241 -1.6286187 --3.2034764 -7.2408595 -1.6319234 --1.4179043 -3.1519349 -0.69007486 --1.4359971 -3.1405058 -0.68945527 --1.4733777 -3.1706796 -0.69854325 --1.615597 -3.4217153 -0.75926769 --1.6302156 -3.3985043 -0.7561695 --1.6488953 -3.3840392 -0.75513679 --1.6678928 -3.3703501 -0.75431061 --1.6885415 -3.3600528 -0.75431061 --1.7104604 -3.3522437 -0.75493026 --1.732347 -3.3442917 -0.75554991 --1.7582978 -3.3439922 -0.75802845 --3.7670765 -7.0598178 -1.6496863 --3.786099 -6.9918289 -1.6389459 --3.8223331 -6.956461 -1.6360544 --3.8744729 -6.9499693 -1.6401852 --3.9151175 -6.9226584 -1.6393591 --3.9643362 -6.9103875 -1.6422508 --3.9973142 -6.869864 -1.6383264 --4.0379 -6.8426795 -1.6377068 --4.0813169 -6.8202934 -1.6383264 --4.1378069 -6.8193817 -1.6443162 --4.1693192 -6.7771964 -1.6401852 --4.2320523 -6.7855258 -1.6486536 --4.2558317 -6.7313113 -1.6416311 --4.2859683 -6.6877713 -1.6372936 --2.0342162 -3.13131 -0.74873388 --2.0496256 -3.1130486 -0.74728805 --2.074661 -3.1093671 -0.74956006 --4.4625025 -6.6008391 -1.6424572 --4.5200605 -6.5983577 -1.6488602 --4.5504208 -6.5560303 -1.6451423 --4.6040692 -6.547195 -1.6500995 --4.6549411 -6.5339632 -1.6540239 --4.6760507 -6.4790955 -1.6472079 --4.7214918 -6.4581804 -1.6492733 --4.7808261 -6.4558239 -1.6562959 --4.7968655 -6.3950577 -1.648034 --4.8496275 -6.3834243 -1.6527846 --4.9071994 -6.3775873 -1.6591874 --4.9528546 -6.3558474 -1.6614594 --4.9875174 -6.3199606 -1.6600137 --5.0365858 -6.3022332 -1.663525 --5.0640821 -6.2575197 -1.6598071 --5.0955606 -6.2180042 -1.6575351 --5.1461129 -6.2016816 -1.661666 --5.1891041 -6.175982 -1.6633184 --5.2218294 -6.1380639 -1.661666 --5.2581167 -6.104425 -1.661253 --5.2903295 -6.0661473 -1.6596006 --5.3365169 -6.0438409 -1.6624922 --5.3839335 -6.0226545 -1.665797 --5.4332604 -6.0032902 -1.6697214 --5.4719768 -5.9720035 -1.6703409 --5.5178328 -5.948359 -1.6732326 --5.5662827 -5.9272289 -1.6769505 --5.566144 -5.8546696 -1.665797 --5.616889 -5.835916 -1.6703409 --5.6539574 -5.802743 -1.6707541 --5.6942654 -5.7728181 -1.6721998 --5.7427149 -5.7509255 -1.6761242 --5.7771983 -5.7148924 -1.6759176 --5.8408461 -5.7073746 -1.684386 --5.8419662 -5.6388102 -1.6744719 --5.8743305 -5.6008329 -1.6738522 --5.9320903 -5.5868216 -1.6806682 --5.9676914 -5.5516505 -1.6810813 --6.0189333 -5.5308185 -1.6860384 --6.0505834 -5.4918098 -1.6854188 --6.0593977 -5.432373 -1.6783962 --6.1116605 -5.4119568 -1.6837664 --6.1337061 -5.3646917 -1.6806682 --6.1687288 -5.3288741 -1.6812879 --6.2422466 -5.3258538 -1.6926479 --6.2673264 -5.2811465 -1.6905824 --6.288332 -5.2332029 -1.6874843 --6.3354416 -5.2069454 -1.6916151 --6.3194122 -5.1291256 -1.6786028 --6.334733 -5.0774026 -1.6742653 --6.364234 -5.0372233 -1.6738522 --6.4435878 -5.0360389 -1.6868646 --6.4914074 -5.0095592 -1.6914086 --6.5220232 -4.9696341 -1.6914086 --6.5023556 -4.8918734 -1.6781896 --6.5063295 -4.8326297 -1.6713737 --6.5169234 -4.7787294 -1.6664165 --6.5746536 -4.7593083 -1.6738522 --6.5973644 -4.7143264 -1.6721998 --6.6829329 -4.7138009 -1.6868646 --6.7591057 -4.7056928 -1.6990508 --6.7862391 -4.6630225 -1.6986377 --6.8260598 -4.628984 -1.7015294 --6.8600264 -4.5908227 -1.7029752 --6.4700441 -4.2725673 -1.5972238 --6.5158119 -4.2456079 -1.6021808 --6.903039 -4.4378457 -1.6928544 --6.9350963 -4.3985505 -1.6940937 --6.9602962 -4.3548765 -1.6936806 --6.9852209 -4.311059 -1.6932676 --7.0015125 -4.262012 -1.690789 --6.999011 -4.2018471 -1.6837664 --6.999404 -4.1438675 -1.6775701 --7.0238533 -4.1003489 -1.6773635 --6.9589949 -4.0054321 -1.6554697 --6.9477005 -3.9423745 -1.6467947 --6.9469962 -3.8858171 -1.6408049 --6.9707084 -3.843118 -1.6408049 --7.0285463 -3.8189609 -1.6490667 --7.0846238 -3.7933147 -1.6569154 --7.0073829 -3.6968083 -1.6329561 --6.8762708 -3.5738673 -1.5963975 --6.8797808 -3.5222435 -1.5920601 --6.8951483 -3.4768794 -1.5906143 --6.8856812 -3.4192736 -1.5833852 --6.8915892 -3.3696525 -1.5798739 --6.9033194 -3.3230588 -1.5778085 --6.9421468 -3.2894375 -1.5821459 --6.9737272 -3.2521558 -1.584831 --7.0735836 -3.2460363 -1.6034201 --7.3011432 -3.2963934 -1.6515453 --7.3060308 -3.2447803 -1.648034 --6.4516044 -2.8179905 -1.4466519 --7.325521 -3.1463835 -1.64349 --7.3582091 -3.1070857 -1.6465882 --7.3798466 -3.0630035 -1.6472079 --7.437458 -3.0335555 -1.6560893 --7.5276799 -3.0166192 -1.6724064 --7.5688086 -2.9793341 -1.6775701 --7.5896845 -2.9338951 -1.6781896 --7.6084585 -2.8876178 -1.6783962 --7.6773777 -2.8600087 -1.6899627 --7.7048903 -2.8165431 -1.6922348 --7.734921 -2.7738383 -1.6951264 --7.7564106 -2.7279489 -1.6961591 --7.7591281 -2.6755202 -1.693061 --7.8319407 -2.6469731 -1.7056602 --7.866611 -2.60502 -1.7097912 --7.8991995 -2.5621369 -1.713509 --7.9380851 -2.5210252 -1.7186726 --7.9720907 -2.4780803 -1.7228036 --8.0358229 -2.4439242 -1.733544 --8.0759878 -2.4021041 -1.7391207 --8.1337929 -2.3650742 -1.7486218 --8.1406221 -2.3129818 -1.7469695 --8.1999149 -2.2755492 -1.7568836 --8.2420549 -2.2328694 -1.76308 --8.2697887 -2.1860065 -1.7661781 --8.2839937 -2.1354671 -1.7663847 --8.1536522 -2.048589 -1.7351964 --8.2649078 -2.0227149 -1.756677 --8.3894739 -1.9987271 -1.7810495 --8.4816456 -1.9657731 -1.7983993 --8.5966339 -1.9369251 -1.8207062 --8.9103899 -1.9502621 -1.8859746 --9.1107311 -1.9356173 -1.9266642 --9.189517 -1.8935035 -1.9411224 --9.2681265 -1.8504952 -1.9555806 --9.2629757 -1.790435 -1.9520693 --9.2785959 -1.7344638 -1.9531021 --9.3728323 -1.6926301 -1.9710715 --9.3232794 -1.6246709 -1.9582657 --9.3263178 -1.566299 -1.9568199 --9.3193331 -1.5063894 -1.9533086 --9.3458033 -1.4518831 -1.9570265 --9.356472 -1.3947996 -1.9574395 --9.2951145 -1.3274008 -1.9425682 --9.338953 -1.2752416 -1.9502105 --9.3815308 -1.2224677 -1.957646 --9.400507 -1.1663269 -1.9601246 --9.3899956 -1.1065625 -1.9564068 --9.3868847 -1.0478399 -1.9543413 --9.403841 -0.99135208 -1.9566133 --9.3961153 -0.93227953 -1.9537216 --9.3997107 -0.87442714 -1.9533086 --9.3961258 -0.81597292 -1.9514498 --9.4263124 -0.76035041 -1.9568199 --9.3937225 -0.69973385 -1.9489712 --9.3890543 -0.64148128 -1.9471122 --9.3918371 -0.58379829 -1.9469057 --9.4216185 -0.52763838 -1.9524825 --9.4002485 -0.46859956 -1.9473188 --9.4332495 -0.41223744 -1.9537216 --9.4228907 -0.35387045 -1.9510366 --9.4180384 -0.29583073 -1.9495908 --8.8513432 0.64729095 -1.9457129 --8.8656883 0.70305771 -1.9498609 --8.8563461 0.75702715 -1.9487693 --8.8748579 0.81349534 -1.9540088 --8.8813534 0.86907709 -1.9566286 --8.8525591 0.92112875 -1.9513891 --8.8428602 0.97500134 -1.9505159 --8.8367109 1.0292418 -1.9505159 --8.8118267 1.081183 -1.9463679 --8.8166409 1.13673 -1.9489876 --8.8027306 1.1898905 -1.9474595 --8.7865677 1.2426496 -1.9454947 --8.7932577 1.2986802 -1.9487693 --8.7851238 1.3526101 -1.9487693 --8.7458248 1.4015439 -1.9417833 --8.7351351 1.4548599 -1.9413466 --8.7500839 1.5125892 -1.9468045 --8.7175846 1.5621161 -1.9415649 --8.7279854 1.6193179 -1.9461496 --8.7140512 1.6721052 -1.9452763 --8.6557665 1.7160469 -1.9343606 --8.6450739 1.7691253 -1.9343606 --8.6245079 1.8201209 -1.9321774 --8.6579952 1.8827577 -1.9424382 --8.6319952 1.9326466 -1.9391636 --8.6237783 1.9864519 -1.9400368 --8.6370659 2.0454042 -1.9459312 --8.6736584 2.1103649 -1.9572835 --8.6037416 2.1493471 -1.9441848 --8.6102419 2.2071896 -1.9487693 --8.5757742 2.2545183 -1.9439664 --8.5570679 2.3058255 -1.9428748 --8.5418177 2.3580275 -1.9426565 --8.5140419 2.4066768 -1.9396001 --8.4850531 2.4548025 -1.9363254 --8.4838667 2.5109758 -1.9396001 --8.4626961 2.5612879 -1.9382902 --8.4412279 2.6114345 -1.9369804 --8.4017839 2.6558232 -1.9315225 --8.4252615 2.7202239 -1.94091 --8.3982172 2.768507 -1.9385086 --8.3634987 2.81407 -1.9343606 --8.3516121 2.8672366 -1.9356705 --8.3182058 2.9129419 -1.9319592 --8.3194742 2.9708209 -1.9365437 --8.3295155 3.0321643 -1.9433115 --8.273242 3.0692945 -1.9343606 --8.2652073 3.1241424 -1.9369804 --8.2513466 3.1769025 -1.9382902 --8.1999006 3.2150002 -1.9306493 --8.2126455 3.2782819 -1.9385086 --8.1779108 3.3227327 -1.9350156 --8.1483517 3.3691187 -1.9328324 --8.1419172 3.4251091 -1.9363254 --8.1010113 3.4665537 -1.9315225 --8.0751143 3.5142477 -1.930431 --8.0480452 3.5613594 -1.9291211 --7.9993439 3.5986595 -1.9225717 --7.9513764 3.6359026 -1.9162406 --7.9112186 3.6763954 -1.9118743 --7.8796878 3.7207005 -1.9096912 --8.0168371 3.8458207 -1.9494243 --7.9825621 3.8898075 -1.9468045 --7.8824568 3.901046 -1.9278113 --7.8845286 3.9624882 -1.9343606 --7.8235607 3.9921579 -1.9251914 --7.7902536 4.0355973 -1.9230083 --7.7558446 4.0783243 -1.9206069 --7.7401443 4.1308918 -1.9230083 --7.6897683 4.1648254 -1.9166772 --7.6435447 4.2006478 -1.9114376 --7.6696148 4.2764659 -1.9247549 --7.6423812 4.3229647 -1.9245365 --7.60217 4.3620033 -1.9210435 --7.5533342 4.395802 -1.9153674 --7.5094128 4.4321432 -1.9110011 --7.5155683 4.4981875 -1.9197336 --7.4586291 4.5264935 -1.9120927 --7.4465051 4.5818925 -1.9162406 --7.4314981 4.6357627 -1.9197336 --7.3592024 4.653625 -1.908163 --7.3329744 4.700273 -1.9088179 --7.2917218 4.7372026 -1.9055432 --7.2739277 4.7893691 -1.9085996 --7.2541437 4.8404121 -1.9112194 --7.2129903 4.8771772 -1.908163 --7.14429 4.8948631 -1.897684 --7.1253433 4.9463997 -1.9007403 --7.1004453 4.9939575 -1.9022685 --7.0895367 5.0515914 -1.9077264 --7.0433745 5.0841427 -1.9035784 --7.0057449 5.1226554 -1.9018319 --6.9781013 5.1684499 -1.9029235 --6.9376712 5.2047267 -1.900522 --6.9320207 5.2672749 -1.9079447 --6.8841047 5.2978044 -1.9035784 --6.8422332 5.3327446 -1.9009587 --6.8262339 5.3879309 -1.9057615 --6.7922831 5.4291053 -1.9055432 --6.7474661 5.4614687 -1.9022685 --6.7228842 5.5101919 -1.9048883 --6.7047162 5.5644293 -1.9094728 --6.6906166 5.6224179 -1.9153674 --6.6500468 5.6583047 -1.9136208 --6.6078105 5.6926317 -1.9114376 --6.5529027 5.7157469 -1.9055432 --6.5155139 5.7539091 -1.9048883 --6.5200934 5.8295593 -1.9168955 --6.5399036 5.9198909 -1.9337057 --6.4667687 5.9262767 -1.9225717 --6.4717722 6.0043464 -1.9352338 --6.3999581 6.0112014 -1.9245365 --6.3502259 6.0382519 -1.9206069 --6.2968879 6.0615344 -1.9155856 --6.2449012 6.0857525 -1.9110011 --6.2421732 6.1582284 -1.9219167 --6.2180772 6.2102079 -1.926283 --6.2045565 6.2732258 -1.9341424 --6.1707211 6.3160648 -1.9356705 --6.1054249 6.3264194 -1.9271562 --6.0759172 6.3736525 -1.9302126 --6.0373635 6.4115243 -1.930431 --6.0012326 6.4520216 -1.9315225 --5.9714327 6.4995036 -1.9347973 --5.9288173 6.5331302 -1.933924 --5.8951321 6.5766535 -1.9361072 --5.8313823 6.5863948 -1.9282478 --5.794713 6.6264596 -1.9295577 --5.7718029 6.6825719 -1.9356705 --5.7382898 6.7267718 -1.9382902 --5.7157674 6.7842464 -1.9448397 --5.6796489 6.825942 -1.9468045 --5.6128802 6.8305011 -1.938072 --5.5880785 6.8860321 -1.9441848 --5.5383997 6.9110508 -1.9415649 --5.5176873 6.9724555 -1.9494243 --5.469995 7.0000281 -1.9476777 --5.4388614 7.0489135 -1.952044 --5.3990555 7.0868111 -1.9533539 --5.346086 7.1073265 -1.9498609 --5.3064475 7.1454806 -1.9513891 --5.2700038 7.188138 -1.9542271 --5.2338076 7.2314076 -1.9572835 --5.1853676 7.2578263 -1.9557554 --5.1334267 7.2791381 -1.9529172 --5.0970273 7.3225145 -1.956192 --5.0531063 7.3552604 -1.9566286 --5.0106177 7.3901663 -1.9577202 --4.9722319 7.4313164 -1.9605583 --4.9217024 7.4543552 -1.9585934 --4.879066 7.4893208 -1.9599034 --4.8346033 7.5215797 -1.9605583 --4.8087382 7.5832472 -1.9690725 --4.7512517 7.5952349 -1.9644879 --4.70046 7.6176004 -1.9627414 --4.656167 7.6504669 -1.963833 --4.6000986 7.6638308 -1.9599034 --4.5455332 7.6793141 -1.9566286 --4.5229187 7.7492046 -1.9675443 --4.4791784 7.7835779 -1.9692907 --4.431335 7.8109155 -1.9692907 --4.3914204 7.8524389 -1.9730021 --4.3304396 7.8561592 -1.9671077 --4.3017144 7.9186006 -1.9762769 --4.2571898 7.9525905 -1.9782417 --4.2201481 8.0010061 -1.9839178 --4.1655769 8.0163574 -1.9812981 --4.1296473 8.0678291 -1.9878474 --4.0660119 8.0651293 -1.9808614 --4.0194855 8.0960445 -1.9823896 --3.957736 8.0960054 -1.9762769 --3.9287167 8.163228 -1.9869742 --3.8844018 8.1995277 -1.9900305 --3.8241229 8.2019796 -1.984791 --3.7826748 8.2448044 -1.989594 --3.7416475 8.2892075 -1.9948335 --3.6903195 8.3111181 -1.9946152 --3.6556523 8.3711681 -2.0037844 --3.5988297 8.380887 -2.0007279 --3.5609972 8.4351788 -2.0085871 --3.5043123 8.4451513 -2.0057492 --3.4439552 8.4457092 -2.0007279 --3.4018645 8.4911423 -2.0066223 --3.3471992 8.5054989 -2.0050943 --3.2896724 8.5122223 -2.0018196 --3.2456863 8.5541458 -2.0070591 --3.1781571 8.533659 -1.9974532 --3.1294191 8.5630827 -1.9998547 --3.0827441 8.5986595 -2.0037844 --3.0328379 8.625699 -2.0057492 --2.9817622 8.6496811 -2.0070591 --2.9264467 8.6613426 -2.0055308 --2.8772321 8.6911793 -2.008369 --2.8175313 8.6891756 -2.0037844 --2.7703614 8.7258329 -2.008369 --2.7185054 8.7482595 -2.0096788 --2.6613708 8.7535706 -2.0070591 --2.6073318 8.7687998 -2.0068407 --2.5529339 8.7827587 -2.0064042 --2.4981964 8.7954416 -2.0057492 --2.4460068 8.8171873 -2.0072773 --2.3918593 8.8320303 -2.0072773 --2.3498325 8.8927727 -2.0179746 --2.2991176 8.9221449 -2.0214677 --2.2393396 8.9162064 -2.0168831 --2.1753173 8.891861 -2.0081506 --2.1209428 8.9059906 -2.008369 --2.0669172 8.921689 -2.0090239 --2.0078499 8.9151621 -2.0046575 --1.9524844 8.9244547 -2.0040026 --1.8999168 8.9467669 -2.0064042 --1.8489194 8.9773731 -2.0107703 --1.7876928 8.9579239 -2.0037844 --1.7360241 8.9859715 -2.007714 --1.6803172 8.993577 -2.0070591 --1.6266609 9.0123615 -2.0090239 --1.5718335 9.0250568 -2.0096788 --1.5154587 9.0287571 -2.008369 --1.463141 9.0571537 -2.0127351 --1.4114293 9.0910339 -2.0184114 --1.3528913 9.0811834 -2.0142634 --1.3025169 9.1269922 -2.0227776 --1.2488631 9.1522169 -2.0267072 --1.1914238 9.1500301 -2.0245242 --1.1299802 9.1145554 -2.0149183 --1.0738051 9.119379 -2.0144818 --1.0154524 9.1044588 -2.0096788 --0.96314275 9.1444864 -2.0173197 --0.9068228 9.1482821 -2.0168831 --0.85103363 9.1575603 -2.0177565 --0.79819649 9.201499 -2.026489 --0.73968768 9.180933 -2.0208127 --0.68312377 9.1823788 -2.0201578 --0.62656999 9.1834764 -2.0195029 --0.56984746 9.181304 -2.018193 --0.51219684 9.1612434 -2.0129535 --0.45491067 9.1427708 -2.0081506 --0.39846396 9.1375904 -2.0064042 --0.34337232 9.166194 -2.0122986 --0.28648424 9.147644 -2.007714 --0.23091204 9.1716681 -2.0127351 --0.17487128 9.1855965 -2.0155733 --0.11854362 9.1894236 -2.0162282 --0.061968293 9.1616783 -2.009897 --0.0057579996 9.1735964 -2.012517 -0.050453264 9.1597977 -2.0094604 -0.10650646 9.1466303 -2.0066223 -0.16295911 9.1643429 -2.0107703 -0.21921085 9.1641464 -2.0109887 -0.27511296 9.1518984 -2.0085871 -0.33172336 9.1627169 -2.0114253 -0.38764861 9.1536837 -2.009897 -0.44418642 9.1589308 -2.0116436 -0.50149709 9.1764956 -2.0162282 -0.55684388 9.1576605 -2.0127351 -0.61295843 9.1530972 -2.012517 -0.66839623 9.139431 -2.0103338 -0.72631669 9.1585054 -2.0155733 -0.77925217 9.1159563 -2.0070591 -0.83668846 9.1275234 -2.0107703 -0.89210713 9.1163902 -2.0094604 -0.9459039 9.0903616 -2.0048759 -1.0059465 9.1231861 -2.0136085 -1.0587417 9.0897017 -2.0074956 -1.114971 9.0869083 -2.008369 -1.1704564 9.07796 -2.0079322 -1.2249581 9.061904 -2.0059674 -1.2795804 9.0474539 -2.0044394 -1.3349277 9.0384665 -2.004221 -1.3905102 9.0310698 -2.0044394 -1.4460522 9.0233316 -2.0046575 -1.5034769 9.026803 -2.0074956 -1.5580043 9.0125999 -2.0064042 -1.6244717 9.0653067 -2.0205944 -1.6706231 9.0043154 -2.0090239 -1.7258412 8.9938955 -2.0090239 -1.7741575 8.9486761 -2.0011647 -1.8341223 8.9624786 -2.0068407 -1.8880724 8.9462824 -2.0057492 -1.9485325 8.9602747 -2.0116436 -1.9855546 8.8681593 -1.9933053 -2.0504518 8.9014549 -2.0037844 -2.0915308 8.8317308 -1.9906855 -2.1629944 8.8898449 -2.0070591 -2.2075615 8.8366423 -1.9978899 -2.2704687 8.8569613 -2.0057492 -2.3183169 8.8183241 -2.000073 -2.3695872 8.7935686 -1.9976716 -2.4198618 8.7656946 -1.9946152 -2.4738669 8.7516212 -1.9948335 -2.5315893 8.7503376 -1.9981081 -2.5821848 8.7243462 -1.9957067 -2.6421726 8.7298203 -2.0007279 -2.6769331 8.6528482 -1.9865376 -2.7396858 8.6669645 -1.9937419 -2.7958133 8.6592779 -1.9959251 -2.8504212 8.646594 -1.9970165 -2.8968842 8.6095181 -1.992432 -2.9521925 8.5989647 -1.9941785 -2.9887664 8.5346394 -1.9832629 -3.0798175 8.6245813 -2.0090239 -3.1093035 8.5413342 -1.9937419 -3.1487505 8.4873285 -1.985446 -3.2090523 8.4897556 -1.9906855 -3.2354789 8.4034271 -1.9747486 -3.3097861 8.4415598 -1.9887207 -3.3437867 8.3766842 -1.9780233 -3.3899777 8.3433533 -1.9749669 -3.4601307 8.3683863 -1.9861009 -3.5015714 8.3236113 -1.9804248 -3.5452814 8.2849236 -1.9762769 -3.5968292 8.2648039 -1.9767134 -3.6439183 8.2345476 -1.9747486 -3.7003832 8.2253828 -1.9780233 -3.7467241 8.1936483 -1.9758402 -3.7808852 8.1359921 -1.9673259 -3.8465738 8.1461706 -1.9756218 -3.899863 8.1294537 -1.9773684 -3.9424019 8.0904589 -1.973657 -4.0084229 8.09935 -1.981953 -4.0519071 8.062396 -1.9788966 -4.090209 8.0156527 -1.9734387 -4.1280904 7.9687433 -1.9679809 -4.1814508 7.9519005 -1.9701641 -4.2025886 7.8744411 -1.9570652 -4.261518 7.8682413 -1.9620864 -4.3031349 7.8299727 -1.95903 -4.3615556 7.8221717 -1.963833 -4.4056249 7.7884679 -1.9620864 -4.4470158 7.7502856 -1.9592483 -4.4827037 7.7026124 -1.9540088 -4.5278969 7.6716008 -1.9531356 -4.5829043 7.6570702 -1.9566286 -4.623724 7.6187954 -1.9540088 -4.6765232 7.6002545 -1.9566286 -4.7225528 7.5705886 -1.9564103 -4.7631779 7.5323973 -1.9540088 -4.7971911 7.4841342 -1.9489876 -4.8446178 7.4570131 -1.9496425 -4.8833041 7.4165516 -1.9468045 -4.918426 7.3710265 -1.9426565 -4.9652014 7.3431339 -1.9433115 -5.0178881 7.3237996 -1.9463679 -5.0638447 7.2944756 -1.9468045 -5.1202993 7.2800283 -1.9513891 -5.1444817 7.2198648 -1.9435297 -5.1915417 7.1921191 -1.9446213 -5.2517052 7.1821837 -1.9507341 -5.2765045 7.1239486 -1.9435297 -5.3072305 7.0742664 -1.9387269 -5.3422704 7.0306916 -1.9356705 -5.3817377 6.9931402 -1.9343606 -5.4275455 6.9638348 -1.9354522 -5.4592876 6.9166141 -1.9315225 -5.5004058 6.8814621 -1.9310859 -5.5609479 6.8703361 -1.9376353 -5.5794878 6.8074079 -1.9293394 -5.6230221 6.7752972 -1.9299943 -5.6205339 6.6883755 -1.9147124 -5.6760149 6.6708555 -1.9197336 -5.7002764 6.6166816 -1.9140575 -5.7465425 6.5881991 -1.9160223 -5.8043027 6.5725622 -1.9219167 -5.8464732 6.5390062 -1.9225717 -5.884521 6.5008397 -1.9219167 -5.9368277 6.4782786 -1.9260647 -5.9558873 6.4195542 -1.919297 -5.9831371 6.3700867 -1.9153674 -6.0120225 6.322648 -1.9120927 -6.0486736 6.2835312 -1.9114376 -6.0768971 6.235817 -1.908163 -6.1088758 6.1921606 -1.9061981 -6.1495137 6.1573224 -1.9070715 -6.1920362 6.1242771 -1.9085996 -6.2155352 6.0725303 -1.9042333 -6.2695336 6.0505404 -1.9094728 -6.2938251 5.9998384 -1.9055432 -6.3362055 5.9664588 -1.9072897 -6.3712664 5.9261389 -1.9068531 -6.4125395 5.8915553 -1.9083813 -6.4557962 5.858655 -1.9105644 -6.4821749 5.8104658 -1.9077264 -6.4767833 5.7343616 -1.8955008 -6.5111122 5.6938705 -1.8952825 -6.5459266 5.6538119 -1.8952825 -6.5782671 5.6116409 -1.8946276 -6.615561 5.5736866 -1.8955008 -6.6631403 5.5442228 -1.8994304 -6.6955256 5.5019951 -1.8989938 -6.7041502 5.4405193 -1.8917894 -6.7351217 5.3974504 -1.8911345 -6.7642865 5.3529954 -1.8900429 -6.7885451 5.3047814 -1.8876415 -6.815558 5.2588553 -1.8861133 -6.8562369 5.2234411 -1.8885148 -6.9123373 5.1994557 -1.8952825 -6.9386253 5.1528726 -1.8937542 -6.9669638 5.1078935 -1.892881 -6.9831524 5.0541797 -1.888733 -7.0370622 5.0276852 -1.8950641 -7.0821357 4.994534 -1.8989938 -7.0950255 4.9387217 -1.8941909 -7.0841699 4.8669171 -1.8830569 -7.1607518 4.8551154 -1.8957192 -7.1928411 4.8127146 -1.8963741 -7.2222357 4.7684894 -1.8963741 -7.2309151 4.7107701 -1.8909162 -7.2654309 4.6700063 -1.8924444 -7.3013663 4.6300411 -1.8944092 -7.3428769 4.5934329 -1.8979023 -7.3700929 4.5477786 -1.897684 -7.3878546 4.4963841 -1.8950641 -7.4211621 4.4544835 -1.8965924 -7.4651518 4.4188037 -1.9009587 -7.5157251 4.3866858 -1.9070715 -7.5399623 4.3390279 -1.9064165 -7.5503159 4.2835345 -1.9022685 -7.5662355 4.2314115 -1.8996488 -7.558723 4.1665382 -1.8911345 -7.6561828 4.1592011 -1.9094728 -7.6290736 4.0840578 -1.8961557 -7.6462202 4.0330729 -1.8941909 -7.6864109 3.9941785 -1.8981205 -7.7498674 3.9669447 -1.9079447 -7.6790733 3.8714447 -1.8841485 -7.7035575 3.8246877 -1.8843668 -7.7435393 3.7854886 -1.8885148 -7.7771735 3.742981 -1.8911345 -7.8238068 3.7064681 -1.897029 -7.8959355 3.6814792 -1.9092546 -7.9361167 3.641098 -1.9136208 -7.9387393 3.583504 -1.9088179 -7.9338188 3.5228479 -1.9022685 -7.9678063 3.4795666 -1.9053249 -7.9916968 3.4317665 -1.9059799 -7.9919243 3.3739388 -1.9009587 -7.9908423 3.3158641 -1.8957192 -8.0444736 3.2804003 -1.9037967 -8.0590153 3.2288017 -1.9024868 -8.105011 3.189652 -1.9088179 -8.1408148 3.1461906 -1.9127476 -8.1490173 3.0920274 -1.9101278 -8.159605 3.0389035 -1.908163 -8.1808481 2.9897845 -1.9088179 -8.1595364 2.9253747 -1.8994304 -8.1865387 2.8784895 -1.9016136 -8.2049694 2.8285215 -1.9018319 -8.2582283 2.7903018 -1.9103462 -8.2538853 2.7325263 -1.9053249 -8.2909203 2.6884496 -1.9101278 -8.3156309 2.6401834 -1.9120927 -8.3288784 2.5882416 -1.9114376 -8.3474045 2.5379391 -1.9120927 -8.3590775 2.4855607 -1.9112194 -8.3779202 2.4353125 -1.9120927 -8.3823786 2.380929 -1.9096912 -8.3742599 2.3231928 -1.9044516 -8.3930674 2.2730405 -1.9055432 -8.398365 2.2192562 -1.9035784 -8.4165487 2.1689 -1.90467 -8.4391642 2.1195922 -1.9068531 -8.4776058 2.0740285 -1.9127476 -8.4844761 2.0206161 -1.9114376 -8.5043201 1.9702793 -1.9131842 -8.5010166 1.9146321 -1.9096912 -8.5230913 1.8647277 -1.9120927 -8.5544195 1.8166504 -1.9166772 -8.5558472 1.7621599 -1.914494 -8.5330019 1.7029488 -1.9068531 -8.5749102 1.6566639 -1.9140575 -8.5647688 1.6002568 -1.9094728 -8.6205254 1.5559886 -1.9199519 -8.6164503 1.5007223 -1.9168955 -8.6341581 1.4492773 -1.9188603 -8.6014614 1.3895849 -1.9094728 -8.6580429 1.3442609 -1.9203886 -8.6757812 1.2925476 -1.9225717 -8.6661587 1.2368102 -1.918642 -8.6726179 1.1834805 -1.9184238 -8.6622972 1.1279781 -1.914494 -8.6738977 1.0754057 -1.9155856 -8.6948709 1.0238734 -1.9188603 -8.7514229 0.97612208 -1.9302126 -8.7426901 0.92087454 -1.9269379 -8.7161283 0.86404043 -1.9197336 -8.7329264 0.81162518 -1.9223534 -8.7377415 0.75802565 -1.9223534 -8.7334738 0.70369339 -1.9203886 -8.7561178 0.65146583 -1.9245365 -8.7648182 0.59805858 -1.9256281 -8.7537127 0.54336244 -1.9223534 -8.7900105 0.49148843 -1.9297761 -8.7606964 0.43594837 -1.9225717 -8.718358 0.38023552 -1.9125292 -8.753684 0.32797143 -1.9199519 -8.7691879 0.2746796 -1.9230083 -8.7804632 0.22111209 -1.9251914 -8.7582378 0.16678916 -1.9199519 -8.7522659 0.11295922 -1.9184238 -8.7635288 0.059325453 -1.9208251 -8.7812939 0.0055611487 -1.9247549 -8.7801867 -0.048314463 -1.9245365 -8.8470554 -0.10298029 -1.9396001 -8.7935686 -0.15631932 -1.9278113 -8.8343945 -0.21128146 -1.9371986 -8.8241529 -0.2652193 -1.9352338 -8.8135824 -0.31903943 -1.933269 -8.8056087 -0.37286407 -1.9319592 -8.8236246 -0.42788252 -1.9365437 -8.8130379 -0.48158821 -1.9347973 -8.8050461 -0.53535819 -1.9337057 -8.738306 -0.58512849 -1.9195153 -8.7549896 -0.64023203 -1.9240999 -8.7645159 -0.69502139 -1.9271562 -8.781477 -0.75061768 -1.9319592 -8.7980862 -0.80644816 -1.9367621 -8.8055983 -0.86165416 -1.9396001 -8.8302345 -0.91880292 -1.9463679 -8.8079405 -0.97114658 -1.9426565 -8.8066626 -1.025738 -1.9437481 -8.7914858 -1.0786846 -1.9417833 -8.7876053 -1.1329825 -1.9424382 -8.7766199 -1.1863575 -1.9415649 -8.7807703 -1.2418289 -1.9441848 -8.7449884 -1.2915448 -1.9378536 -8.7205029 -1.3426521 -1.9341424 -8.7043915 -1.3948984 -1.9323958 -8.7418737 -1.455983 -1.9428748 -8.697196 -1.5034397 -1.9347973 -8.6887684 -1.5569485 -1.9350156 -8.673295 -1.6091636 -1.9337057 -8.6622992 -1.6621677 -1.9334874 -8.6500225 -1.7149075 -1.9330508 -8.6680183 -1.773824 -1.9396001 -8.6541071 -1.8263717 -1.9389452 -8.6045952 -1.8711382 -1.9302126 -8.5520048 -1.9147263 -1.9208251 -8.4887438 -1.9553287 -1.9090363 -8.3227539 -1.9709265 -1.8736694 -8.1436224 -1.9813306 -1.8352462 -7.8823166 -1.9690243 -1.7778298 -7.8020263 -1.9998959 -1.7621112 -7.7329817 -2.032836 -1.7490124 -7.5677209 -2.0390935 -1.7136456 -7.4986272 -2.0699012 -1.7005467 -7.3702826 -2.0832074 -1.6736943 -7.3189278 -2.1172667 -1.6647433 -7.2505918 -2.1457875 -1.6518629 -6.9832411 -2.1133103 -1.5924816 -6.9589553 -2.1526566 -1.5898618 -6.6729918 -2.1090989 -1.525896 -6.2875419 -2.0297208 -1.4383522 -6.2731156 -2.0676508 -1.4379156 -6.0614605 -2.0391667 -1.3909781 -5.9897652 -2.0560329 -1.3770061 -5.8250728 -2.0395081 -1.3409843 -5.6580572 -2.020057 -1.3043077 -5.6693969 -2.0634184 -1.3099838 -5.6429057 -2.0930729 -1.3067091 -5.4044952 -2.0424025 -1.2527857 -5.366363 -2.0657043 -1.2466729 -5.3072538 -2.0804195 -1.2355388 -5.1348815 -2.0492496 -1.1971157 -5.0652556 -2.0575681 -1.1833619 -4.8893127 -2.0210962 -1.1438472 -4.7769775 -2.009042 -1.1196144 -4.693687 -2.0079761 -1.1023676 -4.5604849 -1.9841509 -1.0728953 -4.5821338 -2.027107 -1.0811912 -4.6247845 -2.0800145 -1.0947267 -4.510766 -2.0620751 -1.0698389 -4.4228091 -2.0547469 -1.0512823 -4.4224715 -2.0876813 -1.0543386 -4.3638282 -2.092823 -1.0429863 -4.3684487 -2.1281116 -1.0473526 -4.277472 -2.1163414 -1.0279226 -4.3446202 -2.182874 -1.0480075 -4.3424444 -2.2152586 -1.0508456 -4.3019099 -2.2279427 -1.0440779 -4.2259736 -2.2215869 -1.0283593 -4.25875 -2.2722933 -1.0401483 -4.2198439 -2.2849007 -1.0338172 -4.2279792 -2.3229733 -1.0394933 -4.2562599 -2.3726401 -1.050409 -4.2229357 -2.3881385 -1.0456061 -4.203125 -2.4110904 -1.0442961 -4.1604199 -2.4206328 -1.0370919 -4.0875049 -2.4118817 -1.0220282 -4.0918865 -2.4484463 -1.0270494 -4.115159 -2.4968023 -1.0370919 -4.0474038 -2.4897799 -1.0233381 -4.0419855 -2.5207667 -1.0259578 -4.053659 -2.5627358 -1.0331622 -4.0501804 -2.5954614 -1.0364369 -4.0374522 -2.622391 -1.0373101 -4.0652952 -2.6761005 -1.0490991 -4.0114608 -2.6760733 -1.0390567 -4.0232573 -2.7197723 -1.0466976 -3.9871738 -2.7311671 -1.0414581 -4.0024037 -2.7778449 -1.0501907 -3.9685228 -2.7905591 -1.0456061 -3.9266903 -2.7972984 -1.0388384 -3.9387267 -2.8424764 -1.046916 -3.8747387 -2.8325996 -1.0340354 -3.9325612 -2.9120913 -1.0549935 -3.8435893 -2.8828642 -1.035127 -3.7931967 -2.881592 -1.0259578 -3.8960786 -2.9976747 -1.0600147 -3.8791511 -3.0227242 -1.0604514 -3.8053837 -3.0029297 -1.0447328 -3.7678313 -3.0109875 -1.0392749 -3.8516769 -3.1169493 -1.0687473 -3.7653131 -3.0854588 -1.0493174 -3.8349123 -3.1820571 -1.0750784 -3.7338896 -3.1370838 -1.0512823 -3.7376084 -3.179543 -1.0580499 -3.690676 -3.1788459 -1.0499723 -3.6321282 -3.1674285 -1.0384017 -3.6828384 -3.251678 -1.0593598 -3.6882768 -3.2969832 -1.0670009 -3.6838923 -3.333962 -1.0718037 -3.6238005 -3.3202348 -1.0597965 -3.565448 -3.3072248 -1.0482259 -3.5450881 -3.3290398 -1.0482259 -3.4736826 -3.3023055 -1.0325073 -3.4449189 -3.3154349 -1.0298876 -3.434993 -3.3467278 -1.0331622 -3.5019147 -3.454109 -1.0606697 -3.3418851 -3.3369007 -1.0167887 -3.4311316 -3.4683716 -1.0517188 -3.3681908 -3.4467738 -1.0384017 -3.3686612 -3.4898491 -1.0453877 -3.2455218 -3.4037809 -1.0124224 -3.2178862 -3.4165254 -1.0102392 -3.2327476 -3.4747965 -1.0220282 -3.2377715 -3.5233154 -1.0307608 -3.2311738 -3.5597389 -1.035782 -3.2587676 -3.6347318 -1.0523738 -3.1995361 -3.6130066 -1.03993 -3.1573954 -3.6097949 -1.0331622 -3.1645248 -3.6630771 -1.0432047 -3.1584535 -3.7017307 -1.0488808 -3.1312799 -3.7158163 -1.0473526 -3.1202788 -3.7492139 -1.0515006 -3.0272152 -3.6830812 -1.0268312 -2.9725881 -3.6621788 -1.0154788 -3.0074172 -3.7519395 -1.0360003 -3.0236957 -3.8200684 -1.0501907 -2.9971955 -3.8347044 -1.0490991 -2.9873188 -3.8707948 -1.0541203 -2.9753377 -3.9045787 -1.0584866 -2.921411 -3.8829837 -1.0473526 -2.8893864 -3.8898664 -1.0442961 -2.8620028 -3.9027996 -1.0429863 -2.8277047 -3.9060557 -1.0390567 -2.8127596 -3.9360385 -1.0425497 -2.7812455 -3.9428546 -1.0397116 -2.7547705 -3.9566417 -1.0388384 -2.7508833 -4.0032339 -1.046916 -2.7295532 -4.0248842 -1.0482259 -2.6885285 -4.0172224 -1.0416764 -2.6428626 -4.0018797 -1.0331622 -2.6187904 -4.0188384 -1.0333805 -2.580893 -4.0143065 -1.0279226 -2.5687535 -4.0498481 -1.0331622 -2.5485125 -4.0729804 -1.035127 -2.5198867 -4.082727 -1.0335988 -2.535368 -4.1648068 -1.0510639 -2.4957061 -4.1568551 -1.0449511 -2.4592195 -4.1536136 -1.0401483 -2.4828687 -4.2529135 -1.0619797 -2.427042 -4.2164688 -1.0486624 -2.3621283 -4.1625242 -1.030979 -2.3270187 -4.1599035 -1.0266128 -2.3278251 -4.2219667 -1.0388384 -2.3037388 -4.2396011 -1.0397116 -2.3002441 -4.2958174 -1.050409 -2.2260494 -4.2192116 -1.0274861 -2.2163138 -4.263967 -1.0353453 -2.1741054 -4.2462111 -1.0274861 -2.1330774 -4.2298412 -1.0200634 -2.1370189 -4.3031654 -1.035127 -2.0998631 -4.2942777 -1.0296692 -2.0459735 -4.2499204 -1.0154788 -2.0298824 -4.2835617 -1.0207183 -2.008508 -4.3065505 -1.0233381 -1.9747227 -4.3028269 -1.0194085 -1.9486853 -4.315752 -1.0196267 -1.9285023 -4.3418989 -1.0231198 -1.9092429 -4.3706436 -1.0272677 -1.8939373 -4.4091787 -1.0338172 -1.8520497 -4.3856516 -1.0253029 -1.8262267 -4.3996372 -1.0259578 -1.817615 -4.4559441 -1.0368736 -1.6886514 -4.2133536 -0.97574574 -1.6852736 -4.280848 -0.98949951 -1.6325998 -4.2228346 -0.97312599 -1.6779505 -4.4207377 -1.0180986 -1.155405 -3.1002679 -0.70045233 -1.1383696 -3.1127987 -0.7017622 -1.2934083 -3.6057003 -0.81725007 -1.264788 -3.5951552 -0.81288379 -1.5510933 -4.4978075 -1.024648 -1.5375178 -4.5488458 -1.0344721 -1.4951684 -4.5146503 -1.0242114 -1.0507066 -3.2379963 -0.72184706 -1.0302285 -3.2425222 -0.72141045 -1.0407082 -3.346638 -0.74433339 -1.0207216 -3.3548281 -0.74476999 -0.99122095 -3.3310938 -0.73778397 -0.96885717 -3.3305533 -0.73625576 -0.94627094 -3.3289251 -0.73450923 -0.87054795 -3.1353045 -0.68822676 -0.85180366 -3.1424708 -0.68866342 -1.2170081 -4.6034999 -1.0255213 -1.2089407 -4.6893191 -1.0436412 -1.1639884 -4.6322856 -1.028796 -1.1304442 -4.6184855 -1.023993 -1.1066036 -4.6443224 -1.0283593 -1.070381 -4.6177492 -1.0207183 -0 -0 -0 -0.79413766 -3.6266525 -0.79083413 -1.5490229 -7.2933698 -1.6282851 -1.5125053 -7.3428826 -1.6374542 -0.93032837 -4.6589375 -1.0231198 -0.90560889 -4.68468 -1.0277044 -0.87684721 -4.6901484 -1.0277044 -0.84718639 -4.6906385 -1.0266128 -1.2696526 -7.2887187 -1.6154045 -1.2394336 -7.3829913 -1.6350527 -1.1959753 -7.4020181 -1.6376724 -0.72463661 -4.6637282 -1.0161338 -1.1001661 -7.3833189 -1.6302499 -0.66197872 -4.6345911 -1.0076195 -0.63998806 -4.6859455 -1.0183169 -0.60908359 -4.6733332 -1.0146055 -0.57643896 -4.6450224 -1.0074012 -0.86986053 -7.3854852 -1.6239188 -0.81836879 -7.3354001 -1.6114749 -0.7779386 -7.3839574 -1.6212989 -0.73732775 -7.4361768 -1.6319963 -0.68564427 -7.3754568 -1.6173693 -0.64416611 -7.4232759 -1.6271935 -0.59860563 -7.4270887 -1.6271935 -0.55063742 -7.3985062 -1.619989 -0.50761765 -7.4367962 -1.6278484 -0.45944291 -7.3988624 -1.6186792 -0.41430748 -7.406414 -1.6197708 -0.36919338 -7.4156394 -1.6212989 -0.32669476 -7.4869871 -1.6367992 -0.27696279 -7.3874302 -1.6140946 -0.23153789 -7.3860641 -1.6134397 -0.18782645 -7.4517336 -1.6278484 -0.14136185 -7.4137177 -1.6191158 -0.060281403 -4.6285391 -0.9958306 -0.050373483 -7.4148941 -1.6191158 -0.0034819739 -4.6377134 -0.9977954 --0.040677451 -7.4247127 -1.6212989 --0.086233862 -7.4243231 -1.6212989 --0.083036982 -4.7013893 -1.0122041 --0.11183568 -4.6988401 -1.0117675 --0.14090069 -4.7058692 -1.013514 --0.26840991 -7.419971 -1.6212989 --0.31293902 -7.3947845 -1.6160594 --0.35844886 -7.395649 -1.6167144 --0.40387434 -7.3942847 -1.6169326 --0.44935593 -7.3936157 -1.6173693 --0.49451783 -7.3877983 -1.6167144 --0.34625503 -4.7421956 -1.023993 --0.5886175 -7.4249501 -1.6265385 --0.63141817 -7.389112 -1.6193341 --0.67701262 -7.3880138 -1.619989 --0.72280771 -7.388577 -1.6210806 --0.76853406 -7.3878856 -1.6219538 --0.81449324 -7.3888507 -1.6232638 --0.85913688 -7.3778982 -1.6219538 --0.90415269 -7.3705502 -1.6215173 --0.94898582 -7.3619604 -1.6208624 --0.99453264 -7.3589001 -1.6215173 --1.0392569 -7.3497605 -1.6208624 --1.0854763 -7.3509684 -1.6226088 --1.1341276 -7.3673177 -1.6278484 --1.1805476 -7.3679285 -1.6295949 --1.2255737 -7.3595834 -1.6293765 --1.2707082 -7.3519249 -1.6293765 --1.3164839 -7.3478317 -1.6302499 --1.3629696 -7.3472915 -1.6319963 --1.4089463 -7.3435822 -1.6330879 --1.4554983 -7.3424563 -1.6348344 --1.5030684 -7.3458161 -1.6376724 --1.5481132 -7.3364553 -1.6376724 --1.5789903 -7.2619758 -1.6228272 --1.6230925 -7.2502456 -1.6223905 --1.6682062 -7.2430029 -1.6230454 --1.712167 -7.2307315 -1.6226088 --1.7528085 -7.2049189 -1.6191158 --1.8014803 -7.2120166 -1.6232638 --1.8469107 -7.2055535 -1.6243553 --1.8928261 -7.2006917 -1.6258836 --1.9357029 -7.1842308 -1.624792 --1.9802676 -7.1740999 -1.6252286 --2.0277023 -7.1740217 -1.6280667 --2.0667992 -7.1445718 -1.624137 --2.1144776 -7.1448555 -1.6271935 --2.1650653 -7.1541629 -1.6324329 --2.2034395 -7.1230307 -1.6282851 --2.2535777 -7.1298466 -1.6330879 --2.2954834 -7.1103129 -1.631778 --2.3445699 -7.1127763 -1.6357076 --2.396575 -7.1232285 -1.6416022 --2.4342141 -7.0908532 -1.6374542 --2.4815488 -7.0868354 -1.6400739 --1.3509763 -3.78514 -0.8593846 --1.37451 -3.7776964 -0.85960293 --2.6159883 -7.0518513 -1.642912 --2.6633501 -7.0466208 -1.6455318 --2.6928577 -6.9946303 -1.6370175 --2.7467718 -7.0061388 -1.6437852 --2.7770422 -6.9574327 -1.6361443 --2.820415 -6.9420705 -1.6365809 --2.8603466 -6.9183216 -1.6350527 --2.9133415 -6.9258256 -1.6411655 --2.9515584 -6.8979511 -1.638764 --2.996944 -6.886869 -1.6405106 --3.0727212 -6.9442005 -1.6590672 --1.4087988 -3.1332858 -0.72883308 --1.4292156 -3.1272449 -0.72948802 --3.1699901 -6.8218651 -1.6431303 --1.6154478 -3.4227204 -0.80698937 --1.6296635 -3.3986666 -0.80349636 --1.6436452 -3.3745677 -0.80000329 --1.6617223 -3.3591716 -0.79869342 --1.6849325 -3.3541436 -0.80000329 --1.7116928 -3.3559105 -0.8030597 --1.737191 -3.3548758 -0.80546117 --1.7704639 -3.3683364 -0.81157392 --3.5573184 -6.6657672 -1.650553 --3.6004763 -6.6481047 -1.6516446 --3.6426108 -6.6284528 -1.6522995 --3.6713297 -6.5846705 -1.6468416 --3.7188721 -6.57476 -1.6501163 --3.7499142 -6.5357366 -1.6459684 --3.7884731 -6.5100741 -1.6453135 --3.8288429 -6.4875464 -1.6455318 --3.8730893 -6.4714665 -1.6474966 --3.9339938 -6.4826164 -1.6566658 --3.965512 -6.4450583 -1.6531727 --3.9993007 -6.4114981 -1.6507713 --4.0583897 -6.4181781 -1.6590672 --4.0824189 -6.3693314 -1.6527361 --4.1187649 -6.3400707 -1.6516446 --4.1973104 -6.374989 -1.6677997 --2.0741758 -3.1096783 -0.79651028 --2.0954044 -3.1001263 -0.79738355 --4.3117352 -6.2934303 -1.6669265 --4.3241091 -6.2291813 -1.6566658 --4.3712335 -6.215302 -1.6601588 --4.3990927 -6.1740594 -1.6562291 --4.449461 -6.1643572 -1.6610321 --4.4860487 -6.1353645 -1.6605954 --4.5189629 -6.10145 -1.6588489 --4.5516295 -6.0673628 -1.6571023 --4.6118026 -6.0696211 -1.6656166 --4.665626 -6.0628614 -1.6717294 --4.675139 -5.9987168 -1.661687 --4.720324 -5.9806409 -1.6647433 --4.7599788 -5.9553761 -1.6658349 --4.8093262 -5.9419847 -1.6704195 --4.8327022 -5.8965154 -1.6658349 --4.8669214 -5.8644986 -1.66518 --4.9379778 -5.876359 -1.6774056 --4.9688816 -5.840004 -1.6756591 --5.0129032 -5.819016 -1.6784971 --5.0369654 -5.7749119 -1.6745675 --5.0800576 -5.7526736 -1.6771872 --5.1113563 -5.71703 -1.6758773 --5.135859 -5.6739855 -1.6723844 --5.2035484 -5.6783342 -1.6833 --5.2409477 -5.6491604 -1.6841732 --5.2781844 -5.619741 -1.6850466 --5.2997885 -5.5738134 -1.6808985 --5.3616409 -5.5700116 -1.6898494 --5.3998041 -5.5412016 -1.6911592 --5.42205 -5.4961562 -1.687448 --5.4370494 -5.4441428 -1.6815535 --5.4877 -5.4278331 -1.6870114 --5.5257883 -5.3988323 -1.6885395 --5.5665359 -5.3722782 -1.690941 --5.6029272 -5.3413877 -1.6920326 --5.6341748 -5.3055706 -1.6915959 --5.6902065 -5.29283 -1.6988003 --5.7024517 -5.2393317 -1.6926875 --5.7409968 -5.210145 -1.6946523 --5.7459674 -5.1507239 -1.6865747 --5.792809 -5.128953 -1.6911592 --5.8197627 -5.0894585 -1.6898494 --5.8523588 -5.0549288 -1.690286 --5.8788099 -5.0151248 -1.6889762 --5.8885722 -4.9613562 -1.6828634 --5.9234052 -4.9288754 -1.6841732 --5.9082932 -4.855269 -1.6710745 --5.9523726 -4.8306069 -1.6752224 --5.949152 -4.7677555 -1.6658349 --5.9737024 -4.7275295 -1.664525 --6.0525842 -4.7298374 -1.6787155 --6.1000371 -4.7069154 -1.683955 --6.1878052 -4.7143359 -1.7005467 --6.2212954 -4.6797986 -1.7018566 --6.2498927 -4.6415377 -1.7018566 --6.2640872 -4.5927172 -1.697927 --6.3032184 -4.5622039 -1.7009834 --6.3437986 -4.5325174 -1.7044765 --6.3826566 -4.50138 -1.7075328 --6.4149623 -4.4654765 -1.7088428 --6.4333925 -4.4199533 -1.7064413 --6.4337344 -4.3623266 -1.6992369 --6.4449687 -4.312459 -1.695089 --6.4941125 -4.2878847 -1.7012017 --6.5366554 -4.2586088 -1.705568 --6.534749 -4.2004833 -1.6981454 --6.5496845 -4.1535153 -1.6953073 --6.57091 -4.110662 -1.6942157 --6.5827198 -4.0620685 -1.6907227 --6.5883455 -4.0099344 -1.6857015 --6.6178465 -3.9724464 -1.6870114 --6.611022 -3.913377 -1.6789337 --6.5902367 -3.8466728 -1.6673632 --6.5807257 -3.7871847 -1.6588489 --6.5622454 -3.7231445 -1.6481515 --6.5713377 -3.6751897 -1.6446586 --6.5510297 -3.6112504 -1.6337428 --6.5361886 -3.5509598 -1.6243553 --6.5793643 -3.5222991 -1.6298132 --6.5930839 -3.477766 -1.6278484 --6.6298871 -3.4453437 -1.631778 --6.6248403 -3.3912625 -1.6252286 --6.6795106 -3.3676782 -1.6337428 --6.6056418 -3.2797747 -1.610165 --6.633533 -3.2430377 -1.6121298 --6.6453924 -3.1984663 -1.610165 --6.68606 -3.167655 -1.6154045 --6.7151003 -3.1311054 -1.617806 --6.7723284 -3.1073372 -1.6271935 --6.7983832 -3.0689354 -1.62894 --6.8153019 -3.0263717 -1.6285033 --6.4813609 -2.8306661 -1.5424877 --6.8366823 -2.9359658 -1.624792 --6.9543681 -2.9360778 -1.6490247 --6.9902806 -2.9008296 -1.653391 --7.0296364 -2.8667243 -1.6586306 --7.0661187 -2.8311563 -1.6632152 --7.182344 -2.8266864 -1.6870114 --7.2122974 -2.7874866 -1.6900678 --7.256639 -2.7535625 -1.6966171 --7.2770562 -2.7103467 -1.6974903 --7.3329649 -2.6800432 -1.7068778 --7.3713193 -2.6429 -1.7121174 --7.3800316 -2.595032 -1.7103709 --7.4004288 -2.5512898 -1.7114625 --7.4797392 -2.5273795 -1.7265261 --7.5821943 -2.5102556 -1.7470475 --7.5974541 -2.4636848 -1.7470475 --7.6356821 -2.424401 -1.7525054 --7.6578698 -2.3798196 -1.754252 --7.6863337 -2.3370433 -1.7575266 --7.7154961 -2.2942851 -1.7610196 --7.7603536 -2.2558854 -1.768224 --7.7928247 -2.2135568 -1.7725903 --7.801558 -2.1643953 -1.7714987 --7.6432514 -2.0700796 -1.7317656 --7.6869459 -2.0313659 -1.7389699 --7.8344054 -2.0189672 -1.7701888 --7.919528 -1.9891529 -1.786999 --8.0140562 -1.9606872 -1.8059922 --8.1484032 -1.9406259 -1.8341547 --8.4073458 -1.9478259 -1.8909162 --8.5714684 -1.9304898 -1.9258463 --8.6603746 -1.8947443 -1.9435297 --8.7377062 -1.8555485 -1.9585934 --8.7718668 -1.8066217 -1.963833 --8.8019276 -1.7565818 -1.9681993 --8.79146 -1.6984713 -1.9633963 --8.8516006 -1.6538095 -1.9747486 --8.8452549 -1.5965213 -1.9710373 --8.8164272 -1.535525 -1.9623047 --8.8179836 -1.4801081 -1.9605583 --8.8355703 -1.4273738 -1.9625231 --8.8152313 -1.368645 -1.9559736 --8.8495245 -1.3184092 -1.9618682 --8.836194 -1.2610542 -1.9570652 --8.8157234 -1.2029898 -1.9507341 --8.810359 -1.1472384 -1.947896 --8.8520975 -1.0974754 -1.9557554 --8.8480034 -1.0418854 -1.9533539 --8.8910856 -0.99168134 -1.9616498 --8.9086494 -0.93833315 -1.9642695 --8.8841343 -0.88067269 -1.9575019 --8.9029741 -0.82740659 -1.9605583 --8.9244118 -0.77419508 -1.9642695 --8.9017572 -0.71723038 -1.9581568 --8.8884726 -0.66129571 -1.9542271 --8.920598 -0.60866749 -1.9605583 --8.8871527 -0.5516277 -1.9522623 --8.8893957 -0.4970324 -1.952044 --8.8601141 -0.44088244 -1.9448397 --8.9094505 -0.38854432 -1.9553187 --8.9272699 -0.33445218 -1.9588118 --8.9135475 -0.2791824 -1.9553187 --8.9180193 -0.22455795 -1.9559736 --8.9719172 -0.17083022 -1.9677626 --8.9152241 -0.11504091 -1.9548821 --8.9264965 -0.060407203 -1.9572835 --8.9179163 -0.0056297039 -1.9553187 --8.9168072 0.049084213 -1.9551004 --8.916338 0.10379579 -1.9551004 --8.9067526 0.15834621 -1.9531356 --8.9085398 0.2130644 -1.9537905 --8.9099913 0.26781049 -1.9544455 --8.8847742 0.32162583 -1.949206 --8.8611832 0.37522462 -1.9444031 --8.8460426 0.42897263 -1.9415649 --8.8705282 0.48473734 -1.9476777 --8.8732309 0.53951287 -1.9489876 --8.856122 0.59303325 -1.9459312 --8.4116583 -0.21105523 -1.9414054 --8.4020901 -0.1592349 -1.9388843 --8.3902559 -0.10751491 -1.9359046 --8.3868647 -0.056005061 -1.9349878 --8.3821831 -0.0045403079 -1.9338418 --8.3986006 0.046983674 -1.9377382 --8.5266314 0.10001668 -1.9679927 --8.5063925 0.15198635 -1.9634087 --8.4897308 0.2038047 -1.9597415 --8.478591 0.25560001 -1.9574494 --8.457408 0.30691376 -1.9528655 --8.4505033 0.35859558 -1.9517194 --8.4374495 0.40992105 -1.9491982 --8.4279718 0.46131247 -1.9475938 --8.4172096 0.51254392 -1.9457603 --8.4119644 0.56405115 -1.9453019 --8.4112568 0.61586845 -1.9459895 --8.3937349 0.66638952 -1.9427806 --8.3982172 0.71862644 -1.9448434 --8.3936491 0.77014339 -1.9448434 --8.3306408 0.81594115 -1.9310914 --8.3535538 0.86996424 -1.9377382 --8.3712788 0.92376554 -1.9432391 --8.3635197 0.97488809 -1.9427806 --8.3467531 1.0248829 -1.9402595 --8.3557529 1.0780704 -1.9439267 --8.3374062 1.1277549 -1.9411763 --8.3216553 1.1776639 -1.9391134 --8.3335314 1.2315476 -1.9436975 --8.3142729 1.2808801 -1.9409471 --8.3129845 1.3329499 -1.9425515 --8.2950478 1.3823327 -1.9402595 --8.290247 1.4338675 -1.9411763 --8.2726698 1.483163 -1.9391134 --8.2576714 1.5328295 -1.9377382 --8.2414188 1.5821846 -1.9361339 --8.251606 1.6366992 -1.9409471 --8.1918211 1.6771494 -1.9290286 --8.201376 1.7316036 -1.9338418 --8.1867924 1.7810663 -1.932925 --8.1909075 1.8346692 -1.9365922 --8.1415548 1.8761519 -1.9274242 --8.1298895 1.9260722 -1.9274242 --8.1207552 1.9766104 -1.9281118 --8.1793003 2.0440979 -1.9453019 --8.1496325 2.0898952 -1.9411763 --8.1253586 2.1368909 -1.9384258 --8.117733 2.1882267 -1.939801 --8.0760059 2.2302232 -1.932925 --8.0631056 2.2799995 -1.9331542 --8.0321341 2.3245609 -1.9290286 --8.0139856 2.3726962 -1.9281118 --7.9946184 2.4204144 -1.9269658 --8.0019341 2.4763281 -1.9324666 --7.953177 2.5148172 -1.9242154 --7.9329653 2.5620742 -1.9230694 --7.9466772 2.620455 -1.9304038 --7.9461317 2.6744432 -1.9343002 --7.9406195 2.7269428 -1.9370506 --7.90169 2.7678921 -1.9315498 --7.8368907 2.7993 -1.9196314 --7.8451772 2.8566575 -1.926049 --7.8320646 2.9064338 -1.9271951 --7.8341141 2.9620082 -1.9322374 --7.8157921 3.0100217 -1.9322374 --7.7881141 3.0543683 -1.9299455 --7.7764583 3.104985 -1.931779 --7.704957 3.1313884 -1.9184854 --7.7197795 3.1927409 -1.9271951 --7.6973524 3.2389162 -1.9265074 --7.682703 3.288383 -1.9278827 --7.6454234 3.3280807 -1.9235278 --7.6391006 3.3812323 -1.9271951 --7.6288619 3.4328339 -1.9299455 --7.6041141 3.4779596 -1.9290286 --7.5790997 3.5229113 -1.9281118 --7.5203738 3.5518918 -1.9184854 --7.5247664 3.6106007 -1.9253614 --7.5190954 3.6648059 -1.9297162 --7.4798923 3.7026691 -1.9253614 --7.4509444 3.7454355 -1.923757 --7.4226203 3.7884283 -1.9223818 --7.3957782 3.8321102 -1.921465 --7.3514495 3.8665442 -1.9159642 --7.3112707 3.9028704 -1.9116094 --7.3051591 3.9573939 -1.9164226 --7.262826 3.9922972 -1.9116094 --7.2602963 4.0491118 -1.9175686 --7.223454 4.086874 -1.9143598 --7.1568732 4.1073804 -1.903129 --7.1163931 4.1424031 -1.8990034 --7.0891657 4.1850009 -1.8985449 --7.0408034 4.2149229 -1.8923565 --7.0048232 4.2519846 -1.8896061 --7.0266833 4.3244729 -1.9028997 --6.9785442 4.3541112 -1.8969406 --6.9648595 4.4051728 -1.9006078 --6.9647408 4.4651608 -1.9081714 --6.8800764 4.4706888 -1.8921274 --6.8801556 4.5310211 -1.8999202 --6.9040422 4.6077309 -1.914589 --6.853869 4.6352844 -1.9084005 --6.8148599 4.6700993 -1.905421 --6.7844772 4.7107162 -1.9049625 --6.7355413 4.738256 -1.8992325 --6.6999998 4.7749763 -1.8973989 --6.6950407 4.8336587 -1.9045042 --6.6283274 4.8476429 -1.8937317 --6.5804682 4.8748965 -1.8884602 --6.571455 4.9309545 -1.8946486 --6.5627751 4.9876733 -1.9010662 --6.525877 5.0230985 -1.8992325 --6.4903269 5.0594554 -1.8978573 --6.45152 5.0931535 -1.8955654 --6.4133048 5.1271729 -1.8935026 --6.3915596 5.1743894 -1.8964821 --6.3280725 5.1875935 -1.8868557 --6.2983699 5.228189 -1.8875433 --6.2549944 5.2573428 -1.8841053 --6.2737684 5.33915 -1.8999202 --6.228354 5.3667436 -1.8960238 --6.1901722 5.4003801 -1.8944193 --6.1591082 5.4401937 -1.8951069 --6.1510081 5.5005913 -1.903129 --6.1236358 5.5441089 -1.9051918 --6.0643868 5.5585599 -1.8971697 --6.0208902 5.587059 -1.8941902 --5.9886236 5.6258965 -1.8948778 --5.9638662 5.671927 -1.8980865 --5.9464822 5.7252908 -1.9038166 --5.9244852 5.7745781 -1.9081714 --5.8868628 5.8087707 -1.9074838 --5.8717709 5.8654184 -1.9143598 --5.856204 5.9220996 -1.9212358 --5.7728233 5.9098778 -1.905421 --5.7364521 5.945188 -1.905421 --5.7441907 6.0267758 -1.9205482 --5.7137756 6.068995 -1.9228402 --5.6777554 6.1053653 -1.9232986 --5.6480889 6.1486902 -1.926049 --5.5827823 6.1529551 -1.9164226 --5.5351782 6.1762218 -1.9129846 --5.5300832 6.2472386 -1.9246738 --5.4986949 6.289113 -1.9271951 --5.4231014 6.2800069 -1.9139014 --5.3970995 6.3279757 -1.9184854 --5.3794928 6.3862829 -1.9262782 --5.329 6.4057021 -1.9221526 --5.3143129 6.4683623 -1.9313207 --5.2788172 6.5061393 -1.932925 --5.2083631 6.5004272 -1.921465 --5.1913314 6.5612688 -1.9301746 --5.1539712 6.5968337 -1.9313207 --5.1246939 6.6429768 -1.9356754 --5.0767584 6.6650043 -1.932925 --5.0515647 6.7170329 -1.9391134 --4.9928455 6.7244577 -1.9322374 --4.9497647 6.7526116 -1.9315498 --4.9225049 6.8025694 -1.9372798 --4.8902912 6.8461099 -1.9411763 --4.8263154 6.8449631 -1.9322374 --4.7747717 6.8608661 -1.928341 --4.7513232 6.9173131 -1.9361339 --4.7289996 6.9761467 -1.9446143 --4.663373 6.9710536 -1.9349878 --4.6253381 7.0068469 -1.9370506 --4.5870395 7.0424361 -1.9391134 --4.5516357 7.0827317 -1.9425515 --4.5206008 7.1302557 -1.9480523 --4.4679904 7.1438303 -1.9441558 --4.4210057 7.1661406 -1.9427806 --4.3946624 7.2222357 -1.9508027 --4.344254 7.2390494 -1.9480523 --4.3071909 7.2781339 -1.9514903 --4.2403741 7.2665944 -1.9411763 --4.2170672 7.3295979 -1.951261 --4.1801791 7.3697286 -1.9551575 --4.1334553 7.3926902 -1.9544699 --4.0875468 7.4170609 -1.9542407 --4.0428891 7.4437127 -1.954699 --3.9833586 7.4426341 -1.947823 --3.9476063 7.485877 -1.9528655 --3.9011507 7.5090942 -1.9526362 --3.8700805 7.5623503 -1.9604291 --3.8306165 7.5998611 -1.9640963 --3.7886734 7.632813 -1.9666175 --3.737066 7.6462965 -1.9640963 --3.7027414 7.6953959 -1.9709723 --3.6517034 7.7100534 -1.9689095 --3.5878751 7.6970263 -1.9597415 --3.5446382 7.7277431 -1.9620335 --3.5091679 7.7759633 -1.9689095 --3.4681039 7.8124728 -1.9728059 --3.4239974 7.842526 -1.9750979 --3.3819566 7.8776984 -1.9787651 --3.3161438 7.8570504 -1.9682219 --3.279808 7.9060202 -1.9755563 --3.2224159 7.9043636 -1.9700555 --3.1691494 7.912241 -1.9670758 --3.1208975 7.9324431 -1.9673051 --3.0721662 7.9514432 -1.9673051 --3.022974 7.969234 -1.9670758 --2.988625 8.0268564 -1.9769315 --2.9443281 8.0587568 -1.9803694 --2.8921974 8.0693417 -1.9785359 --2.8461816 8.0970364 -1.981057 --2.7881985 8.0904217 -1.9750979 --2.7469156 8.1322765 -1.9812863 --2.6997182 8.1572943 -1.9833491 --2.6514163 8.1792612 -1.9847243 --2.5970562 8.1823883 -1.9815155 --2.5450683 8.1925917 -1.9801403 --2.5069251 8.2480993 -1.989996 --2.4562685 8.2633266 -1.989996 --2.4030745 8.2698298 -1.9879332 --2.3488297 8.2722473 -1.9849535 --2.2962067 8.2799377 -1.9833491 --2.2524822 8.320178 -1.9897667 --2.1934319 8.3037281 -1.9824324 --2.1540968 8.3622742 -1.993434 --2.091367 8.330019 -1.9824324 --2.0524731 8.392807 -1.9945799 --1.9849291 8.3380117 -1.9783067 --1.9302162 8.3348618 -1.9746395 --1.8839562 8.3683891 -1.9799111 --1.8388132 8.4083185 -1.9867871 --1.7853667 8.4108734 -1.9847243 --1.7411848 8.4578981 -1.993434 --1.6823988 8.4340582 -1.9851828 --1.6324626 8.4537802 -1.9874747 --1.583599 8.4799032 -1.9913712 --1.5272161 8.4655132 -1.9856411 --1.4804201 8.5044518 -1.9927464 --1.4270823 8.5066557 -1.9911419 --1.3747044 8.5142908 -1.9909127 --1.3164639 8.4840918 -1.9817446 --1.2695439 8.5266685 -1.989996 --1.215139 8.5198441 -1.986558 --1.1640235 8.5358191 -1.9886208 --1.1138884 8.5601749 -1.9927464 --1.0613432 8.5668488 -1.9927464 --1.0100098 8.5838337 -1.9952675 --0.95872343 8.6024456 -1.9982471 --0.90439302 8.5936451 -1.9948092 --0.8522222 8.604845 -1.9961843 --0.79751712 8.5895586 -1.9913712 --0.7443772 8.5894413 -1.9902251 --0.69439399 8.6278057 -1.9982471 --0.63970941 8.6086073 -1.9927464 --0.58707464 8.615284 -1.993434 --0.53281516 8.5963793 -1.9881623 --0.48157912 8.6266985 -1.9945799 --0.42868596 8.6304636 -1.9948092 --0.37508684 8.6183443 -1.9913712 --0.32314503 8.6457739 -1.9973303 --0.26975474 8.6368923 -1.9948092 --0.21660791 8.6325464 -1.993434 --0.16304384 8.6025705 -1.9860995 --0.11051928 8.623848 -1.9909127 --0.057693902 8.637991 -1.9941216 --0.004695117 8.6449957 -1.995726 -0.048171494 8.6127405 -1.9881623 -0.10117657 8.6259098 -1.9913712 -0.154241 8.6329117 -1.9932047 -0.20709208 8.6269379 -1.9920588 -0.26054922 8.6430178 -1.9961843 -0.31209618 8.6004009 -1.986558 -0.36613926 8.6284714 -1.9936631 -0.41850939 8.6143961 -1.9909127 -0.47215578 8.6262445 -1.9943507 -0.52596325 8.6377592 -1.9977888 -0.57556969 8.5838671 -1.9858704 -0.62851262 8.5840569 -1.9867871 -0.67878485 8.5499582 -1.9796818 -0.73546368 8.5950937 -1.9913712 -0.7856105 8.5623093 -1.9847243 -0.83832276 8.5592651 -1.9851828 -0.89213574 8.5665464 -1.9881623 -0.94105387 8.5280161 -1.9803694 -0.99448961 8.5317497 -1.9826615 -1.0499039 8.5506058 -1.9886208 -1.1024742 8.5449686 -1.9888499 -1.1524062 8.5197153 -1.9844952 -1.2054785 8.5182667 -1.9858704 -1.2615639 8.5367088 -1.9920588 -1.3105127 8.5066805 -1.9867871 -1.3611434 8.4888678 -1.9844952 -1.4141642 8.4861174 -1.9858704 -1.4642173 8.4657707 -1.98312 -1.5123566 8.4355488 -1.9780775 -1.5706592 8.4615202 -1.986558 -1.6196129 8.436429 -1.9828907 -1.6743767 8.4416094 -1.986558 -1.7243853 8.4225941 -1.9844952 -1.777038 8.4166164 -1.9856411 -1.8180972 8.3570461 -1.9739519 -1.8797636 8.3922758 -1.9851828 -1.9196401 8.3303118 -1.9730351 -1.9767752 8.3439503 -1.9792235 -2.0274751 8.329772 -1.9787651 -2.0750082 8.30301 -1.9753271 -2.1280911 8.2986078 -1.9773899 -2.1740198 8.2665663 -1.9728059 -2.2262213 8.2587099 -1.9741811 -2.2745223 8.2364502 -1.9721183 -2.330049 8.2401352 -1.9764731 -2.380295 8.2247486 -1.9762439 -2.4174545 8.1651878 -1.9652423 -2.4754059 8.1762867 -1.9716599 -2.5332966 8.1860504 -1.9778483 -2.5773158 8.1508627 -1.9730351 -2.6281772 8.1376734 -1.9737227 -2.667697 8.0899639 -1.9659299 -2.725668 8.0983515 -1.9721183 -2.7579212 8.0308409 -1.9595122 -2.8171198 8.0422459 -1.9666175 -2.8687048 8.0312252 -1.9682219 -2.9255886 8.0345087 -1.9734935 -2.9683988 7.9990678 -1.9691387 -3.0260293 8.0034657 -1.9748687 -3.0544436 7.9311543 -1.9613459 -3.0998526 7.9041076 -1.9592831 -3.1522629 7.8948822 -1.9618043 -3.1951489 7.861865 -1.9583663 -3.2277057 7.8043327 -1.9487399 -3.2811937 7.7978392 -1.9521779 -3.3339572 7.7891927 -1.9551575 -3.3708112 7.7435994 -1.9487399 -3.4198372 7.7263308 -1.9496566 -3.4400227 7.6448402 -1.9340711 -3.5479941 7.7572546 -1.9686803 -3.5778842 7.697382 -1.9588246 -3.6150715 7.6541595 -1.9533238 -3.6623895 7.6327114 -1.9535531 -3.704037 7.5995955 -1.9508027 -3.7406664 7.5566607 -1.945531 -3.7970166 7.5535693 -1.9508027 -3.8468328 7.537065 -1.9526362 -3.9015145 7.5297408 -1.9569911 -3.9567039 7.5228901 -1.961575 -3.9468713 7.3937073 -1.9336126 -3.9907732 7.3667831 -1.932925 -4.0443392 7.357512 -1.9370506 -4.0751858 7.3070536 -1.9301746 -4.1338429 7.3064804 -1.9368215 -4.1689076 7.2640929 -1.9322374 -4.2295589 7.2661381 -1.939801 -4.2557564 7.209034 -1.9313207 -4.3189073 7.2145228 -1.9400302 -4.3630934 7.1878867 -1.9400302 -4.3729362 7.1054373 -1.9246738 -4.4473648 7.1280227 -1.9384258 -4.487896 7.095664 -1.9370506 -4.5302992 7.0663543 -1.9365922 -4.5550108 7.0098557 -1.9285703 -4.6065021 6.9947824 -1.9322374 -4.6304235 6.9380479 -1.9242154 -4.680541 6.920794 -1.9274242 -4.7179666 6.8847179 -1.9253614 -4.7257042 6.8060656 -1.9111509 -4.7718568 6.7833104 -1.9129846 -4.8099995 6.7491469 -1.9116094 -4.843914 6.7092466 -1.9086298 -4.8947577 6.6927557 -1.9125261 -4.9484777 6.6798034 -1.9175686 -4.9794402 6.6360784 -1.9136722 -5.0147643 6.5984254 -1.9116094 -5.0498142 6.5605888 -1.9095466 -5.1091228 6.5540471 -1.916881 -5.128736 6.4965978 -1.9090881 -5.1946363 6.4976993 -1.9189438 -5.2276711 6.4573812 -1.9164226 -5.2770672 6.4372277 -1.9200898 -5.284761 6.3665285 -1.9084005 -5.3387561 6.3518658 -1.9139014 -5.3549204 6.2923012 -1.9056501 -5.3985114 6.2652249 -1.9074838 -5.4253349 6.2187791 -1.9033582 -5.4517922 6.1722407 -1.8992325 -5.4778829 6.1256118 -1.8951069 -5.5120993 6.0882769 -1.893961 -5.5598755 6.0658221 -1.8976282 -5.6108932 6.0465775 -1.9024414 -5.6512208 6.015583 -1.9035873 -5.6786346 5.9709196 -1.9003786 -5.7050385 5.9254456 -1.8969406 -5.7460446 5.8952079 -1.8985449 -5.8080869 5.8861699 -1.9072546 -5.8103886 5.8166757 -1.8960238 -5.8169017 5.7521672 -1.8863974 -5.8660126 5.7299709 -1.8909813 -5.8961573 5.6891384 -1.889377 -5.9126353 5.6353917 -1.8834177 -5.9548974 5.6063461 -1.885939 -5.9792066 5.5604215 -1.8827301 -6.0031772 5.51441 -1.8795214 -6.0484333 5.487937 -1.8831885 -6.084167 5.4526701 -1.8838761 -6.1247978 5.4216881 -1.8861681 -6.1542854 5.3808012 -1.8850222 -6.1923423 5.3473916 -1.8866266 -6.1702347 5.2625504 -1.8696657 -6.2001758 5.2227101 -1.8689781 -6.2343497 5.1864357 -1.8696657 -6.290122 5.1678596 -1.8770001 -6.3338065 5.1389799 -1.8806673 -6.3781328 5.1103668 -1.8845637 -6.394866 5.059659 -1.880209 -6.4342284 5.0269184 -1.8827301 -6.4695759 4.9909115 -1.8841053 -6.4946575 4.9469919 -1.8825009 -6.5326686 4.912899 -1.8847929 -6.5962944 4.897676 -1.8946486 -6.6089511 4.8444486 -1.8896061 -6.6393404 4.8043766 -1.8898354 -6.6750307 4.7680745 -1.8916689 -6.6922288 4.7186131 -1.8882309 -6.7242517 4.6796861 -1.8891478 -6.7528391 4.6383386 -1.8891478 -6.8005085 4.6099257 -1.8946486 -6.8092499 4.5551214 -1.8891478 -6.8460073 4.5191541 -1.8916689 -6.8662667 4.472281 -1.8896061 -6.8960357 4.4316454 -1.8902937 -6.9329624 4.3955035 -1.8930441 -6.9771323 4.3637204 -1.8978573 -6.9930072 4.3141832 -1.8948778 -7.017684 4.2701817 -1.8944193 -6.9911733 4.1954842 -1.8799797 -7.0327001 4.1619282 -1.8843346 -7.0690336 4.1250758 -1.8873142 -7.1110854 4.0913329 -1.8918982 -7.1284356 4.0433006 -1.8898354 -7.1607566 4.0037608 -1.8918982 -7.182631 3.9583383 -1.8912106 -7.2341547 3.9290595 -1.8985449 -7.2512612 3.8809228 -1.8967113 -7.2689109 3.8331783 -1.8951069 -7.2845201 3.7844658 -1.8930441 -7.2894082 3.7303846 -1.8882309 -7.3199825 3.6895308 -1.8902937 -7.3607926 3.6536357 -1.8951069 -7.3804488 3.6071198 -1.8944193 -7.4077053 3.5642986 -1.8957945 -7.443511 3.5254459 -1.8994617 -7.4632382 3.4788845 -1.8990034 -7.479135 3.4305902 -1.8976282 -7.5089164 3.3886387 -1.8999202 -7.5144434 3.3357866 -1.8960238 -7.5320935 3.2884474 -1.8953362 -7.5574961 3.2444737 -1.8967113 -7.5826421 3.2003119 -1.8980865 -7.6021361 3.1537254 -1.8980865 -7.6078238 3.1015077 -1.8946486 -7.6420717 3.0609219 -1.8985449 -7.6679554 3.0168247 -1.9003786 -7.6845059 2.9690166 -1.8999202 -7.702579 2.9218094 -1.8999202 -7.7240105 2.8758509 -1.9008369 -7.7460823 2.8300736 -1.901983 -7.7706318 2.7851191 -1.9038166 -7.7793102 2.7344813 -1.9017538 -7.7913408 2.685111 -1.9006078 -7.7864599 2.6300883 -1.8953362 -7.8006029 2.5816503 -1.8948778 -7.8283339 2.5376406 -1.8978573 -7.8419018 2.48897 -1.8973989 -7.8588853 2.4413838 -1.8978573 -7.910038 2.4041576 -1.9067962 -7.9591627 2.3658407 -1.9152766 -7.9445534 2.3085382 -1.9081714 -7.9801049 2.2658641 -1.913443 -7.9807262 2.2132142 -1.9102342 -7.9622116 2.1555538 -1.9024414 -7.9846988 2.1091444 -1.9047334 -8.002203 2.0613258 -1.9058794 -8.0411339 2.0188243 -1.912297 -8.0316238 1.9641275 -1.9070253 -8.0605679 1.9188678 -1.9111509 -8.0541735 1.8651997 -1.9067962 -8.07971 1.8189524 -1.9102342 -8.0707502 1.7649741 -1.905421 -8.0728588 1.7136003 -1.9033582 -8.1118221 1.6699233 -1.9102342 -8.1448259 1.6246897 -1.915735 -8.1775789 1.5791137 -1.9212358 -8.1622362 1.5242603 -1.9152766 -8.1580248 1.471729 -1.9120678 -8.1784086 1.4236484 -1.9148182 -8.1889105 1.373762 -1.9152766 -8.2039118 1.3245763 -1.916881 -8.1695623 1.267644 -1.9067962 -8.1868143 1.2189267 -1.9090881 -8.2124481 1.1712825 -1.913443 -8.2638454 1.1269218 -1.9239862 -8.278326 1.0771998 -1.9258198 -8.2828484 1.0261452 -1.9253614 -8.2367868 0.96915853 -1.9129846 -8.2832079 0.92313033 -1.922611 -8.2848444 0.87188047 -1.9216942 -8.2755089 0.81958956 -1.9182562 -8.2261057 0.76375473 -1.905421 -8.2674875 0.71646112 -1.9141306 -8.297925 0.66782886 -1.920319 -8.2921591 0.61617941 -1.918027 -8.3210335 0.56700981 -1.9239862 -8.3117256 0.51515883 -1.9210066 -8.30404 0.46355206 -1.9184854 -8.282423 0.41138235 -1.9127554 -8.3207722 0.36212221 -1.9212358 -8.2926846 0.3099317 -1.9141306 -8.3537769 0.26089922 -1.9281118 -8.3211632 0.20878035 -1.9200898 -8.3602428 0.15843983 -1.9290286 -8.3493776 0.10698915 -1.9262782 -8.3557167 0.055795591 -1.9276534 -8.2760849 0.0044778106 -1.908859 -8.3450651 -0.04668672 -1.9251322 -8.3037424 -0.097412594 -1.9155058 -8.3068819 -0.14843094 -1.9164226 -8.3359804 -0.20012097 -1.9235278 -8.3092995 -0.2505044 -1.9175686 -8.3562431 -0.30324733 -1.9290286 -8.3444996 -0.35410234 -1.9267366 -8.353837 -0.40586281 -1.929487 -8.3191156 -0.45535928 -1.9219234 -8.3249092 -0.50692791 -1.9239862 -8.3129015 -0.55741334 -1.9219234 -8.3442726 -0.6109671 -1.9301746 -8.3034945 -0.65922952 -1.921465 -8.3177204 -0.71174228 -1.9258198 -8.3093195 -0.76240987 -1.924903 -8.2918911 -0.81214768 -1.9219234 -8.3032103 -0.86472368 -1.9258198 -8.2958126 -0.91544151 -1.9253614 -8.3229122 -0.97015667 -1.9331542 -8.2820225 -1.0169379 -1.924903 -8.3055534 -1.071596 -1.9320083 -8.2939987 -1.1218855 -1.9308622 -8.2869587 -1.1727555 -1.9308622 -8.2468672 -1.2187445 -1.9230694 -8.2373104 -1.269027 -1.922611 -8.2332125 -1.3201625 -1.9235278 -8.207675 -1.3677765 -1.9194022 -8.226943 -1.4229217 -1.926049 -8.2496748 -1.4790415 -1.9336126 -8.2088623 -1.5237718 -1.926049 -8.199358 -1.5741117 -1.926049 -8.2325106 -1.6329125 -1.936363 -8.2080317 -1.6804676 -1.932925 -8.1804237 -1.7271808 -1.9287994 -8.1972542 -1.7833419 -1.9354463 -8.1187181 -1.8185034 -1.919173 -8.077054 -1.8612916 -1.9118385 -8.084425 -1.9153035 -1.9164226 -8.068738 -1.9639518 -1.9155058 -7.8837194 -1.9702438 -1.8735621 -7.7705936 -1.9927136 -1.8490376 -7.5040474 -1.9735234 -1.7871536 -7.3931131 -1.9929339 -1.7630875 -7.3084989 -2.018312 -1.7454391 -7.2219806 -2.0421979 -1.7273322 -7.0877609 -2.0513008 -1.6975362 -6.977973 -2.0660179 -1.6736994 -7.0033617 -2.1203575 -1.6830966 -6.8935118 -2.1333666 -1.6592598 -6.6129985 -2.0911193 -1.59325 -6.550024 -2.1155047 -1.5808733 -6.4777565 -2.1361487 -1.5662044 -6.2615681 -2.1075554 -1.5157803 -5.9382691 -2.0394077 -1.4385397 -5.8760362 -2.0584311 -1.426163 -5.8403783 -2.0862627 -1.4204329 -6.3524742 -2.3132014 -1.551994 -5.7258158 -2.1249311 -1.3982005 -5.3949084 -2.0398986 -1.3182095 -5.2705617 -2.0299399 -1.290018 -5.189136 -2.0352349 -1.2725987 -5.1349664 -2.0504351 -1.2620555 -5.0230937 -2.0415957 -1.2368435 -4.8692498 -2.0139797 -1.200859 -4.7939963 -2.0173955 -1.1848149 -4.8343253 -2.0693684 -1.1983378 -4.552 -1.9816774 -1.1291193 -4.5023708 -1.9930257 -1.1194929 -4.4367967 -1.9966511 -1.1057408 -4.3837423 -2.0052154 -1.0951976 -4.3263383 -2.0111532 -1.0835084 -4.2883916 -2.0256073 -1.0768616 -4.2372675 -2.0333562 -1.0667768 -4.1617112 -2.0286145 -1.0502744 -4.1326103 -2.0459082 -1.0459195 -4.1399827 -2.0812809 -1.0511911 -4.1141291 -2.1000073 -1.0477531 -4.0899305 -2.1193907 -1.0447735 -4.0802951 -2.1462584 -1.0456903 -4.07306 -2.1744626 -1.0472947 -4.0682001 -2.2040496 -1.0495868 -4.0435104 -2.2228751 -1.0466071 -4.0365963 -2.2514362 -1.0484407 -3.9803452 -2.252198 -1.0369807 -4.064384 -2.3327768 -1.063568 -4.0575652 -2.3620782 -1.0656308 -3.9826422 -2.3513055 -1.0491283 -3.9798324 -2.3826973 -1.0523372 -3.944335 -2.3944461 -1.0466071 -3.9312265 -2.4196234 -1.0470655 -3.9518175 -2.4658537 -1.0569211 -3.951421 -2.4994199 -1.0610467 -3.9319131 -2.5209918 -1.0599008 -3.9024947 -2.5360546 -1.0560043 -3.9023066 -2.5701232 -1.0603591 -3.9204686 -2.6167119 -1.0699855 -3.9067578 -2.6423538 -1.0706731 -3.894486 -2.6690264 -1.0718192 -3.8676412 -2.6856558 -1.0688396 -3.9052279 -2.7474174 -1.0844252 -3.8550031 -2.7476025 -1.0747987 -3.778091 -2.7279046 -1.0573795 -3.7966387 -2.7768908 -1.0676936 -3.8217654 -2.8314209 -1.0800704 -3.7404754 -2.8069155 -1.061276 -3.6084824 -2.7426515 -1.0273542 -3.6656373 -2.8217342 -1.0493575 -3.6229198 -2.8244257 -1.0417939 -3.6169817 -2.855649 -1.0452319 -3.5841854 -2.865633 -1.0406479 -3.6119289 -2.9243171 -1.0544 -3.611232 -2.9606168 -1.0596715 -3.586257 -2.9771242 -1.0576087 -3.5790997 -3.008467 -1.0610467 -3.5679858 -3.0366793 -1.0633388 -3.6104922 -3.111249 -1.0823624 -3.5972021 -3.1384628 -1.084196 -3.5705814 -3.1540322 -1.0819039 -3.5272164 -3.1544707 -1.0743403 -3.5222268 -3.1891191 -1.0789244 -3.5198145 -3.226455 -1.0844252 -3.5898573 -3.3314114 -1.1133044 -3.4168136 -3.2100935 -1.0640264 -3.3737755 -3.2088628 -1.0564628 -3.2299047 -3.1100137 -1.0158943 -3.2790747 -3.196352 -1.0383559 -3.17556 -3.1336915 -1.0106226 -3.1604044 -3.1572449 -1.0119978 -3.1259146 -3.1613512 -1.0069554 -3.1567924 -3.2319965 -1.0239162 -3.165966 -3.2814243 -1.0337719 -3.1498015 -3.3050158 -1.0351471 -3.1194541 -3.3136504 -1.0317091 -3.072547 -3.3042181 -1.022541 -3.0528734 -3.3237255 -1.0227703 -3.0337303 -3.3438368 -1.0232286 -3.0488875 -3.4022546 -1.0358347 -2.9711757 -3.3567626 -1.0156651 -3.0312548 -3.4672577 -1.0445443 -3.0309181 -3.5101023 -1.0521079 -3.0200622 -3.5412233 -1.0560043 -2.9926326 -3.5529876 -1.0539415 -2.9601922 -3.5585625 -1.0500451 -2.9438632 -3.5834277 -1.0521079 -2.9224336 -3.6021793 -1.0523372 -2.9002759 -3.620043 -1.0523372 -2.8743851 -3.6331909 -1.050962 -2.8616271 -3.6630313 -1.0546291 -2.8272057 -3.6651077 -1.0500451 -2.8005347 -3.676966 -1.0484407 -2.7551022 -3.6637421 -1.0395019 -2.7105186 -3.6508818 -1.0307922 -2.6897926 -3.6697996 -1.0314798 -2.6826327 -3.7075255 -1.0376683 -2.6575699 -3.7207479 -1.0367515 -2.6386163 -3.7425528 -1.0383559 -2.676769 -3.8465533 -1.063568 -2.6244571 -3.8211851 -1.0516496 -2.6151628 -3.8581641 -1.0576087 -2.6185033 -3.9145887 -1.0690688 -2.5703018 -3.8940272 -1.0587547 -2.5293589 -3.883626 -1.0514203 -2.4607484 -3.8294711 -1.0319383 -2.426259 -3.8272347 -1.0271251 -2.3758881 -3.7991376 -1.0152067 -2.3857546 -3.8674896 -1.0301046 -2.4414244 -4.0126028 -1.0660892 -2.3386159 -3.8973098 -1.0303339 -2.3508503 -3.9727349 -1.0470655 -2.2817824 -3.9105825 -1.0262083 -2.2679393 -3.9422269 -1.0310215 -2.2446682 -3.9577618 -1.0314798 -2.2193913 -3.9697611 -1.0310215 -2.1926425 -3.9790421 -1.0298755 -2.1830537 -4.0197916 -1.0372099 -2.1661565 -4.0476999 -1.0411063 -2.1321981 -4.0436954 -1.0365223 -2.1136293 -4.0687947 -1.0397311 -2.0881803 -4.0808206 -1.0395019 -2.0595963 -4.0866032 -1.0376683 -2.0357811 -4.1017795 -1.0383559 -2.0028806 -4.0984526 -1.0342302 -1.9532145 -4.0597925 -1.0209366 -1.9132664 -4.0400324 -1.0126854 -1.9151748 -4.1090403 -1.0275835 -1.8968259 -4.1357546 -1.0314798 -1.8590003 -4.119812 -1.0243747 -1.8048533 -4.0661974 -1.0076431 -1.7970082 -4.1164451 -1.0177279 -1.7882296 -4.165854 -1.0275835 -1.7425723 -4.12922 -1.0154358 -1.7283939 -4.1668062 -1.0223119 -1.7351345 -4.2566509 -1.0424815 -1.672425 -4.1759562 -1.0193323 -1.6603141 -4.2205586 -1.0280418 -1.1863515 -3.0712156 -0.73535299 -1.1671393 -3.077527 -0.73512375 -0 -0 -0 -1.4920936 -4.084497 -0.98403543 -1.3175535 -3.6766655 -0.87974924 -1.2846384 -3.6552954 -0.87241483 -1.4918331 -4.3293686 -1.0383559 -1.4677328 -4.345818 -1.0401895 -1.447769 -4.3750715 -1.0452319 -1.4235986 -4.3922062 -1.0472947 -1.0361381 -3.2652864 -0.76675344 -1.0345672 -3.3310733 -0.78142226 -1.0220356 -3.363435 -0.78783989 -0.99333453 -3.3425853 -0.78119308 -0.96791631 -3.3317926 -0.77706742 -0.94506139 -3.3292418 -0.77500463 -0.86217606 -3.1098659 -0.71999657 -0.84053403 -3.1057022 -0.71770453 -0.81798106 -3.0976257 -0.71449572 -1.1438149 -4.4410734 -1.0399603 -1.1198623 -4.461225 -1.0431691 -1.0843732 -4.4349198 -1.0351471 -1.0562388 -4.4377022 -1.0342302 -1.025036 -4.427031 -1.0301046 -1.0017018 -4.4503298 -1.0342302 -0.97125632 -4.4421291 -1.0307922 -0.76870996 -3.6224866 -0.83207554 -0.74529046 -3.6214149 -0.83070034 -0.91389596 -4.5823927 -1.0603591 -0.87616259 -4.5382171 -1.0484407 -0.85223222 -4.5645576 -1.0534831 -0.82576424 -4.5783224 -1.0555459 -0.79364926 -4.560288 -1.0500451 -0.76500857 -4.5612321 -1.0491283 -0.73064393 -4.5264421 -1.0397311 -0.69628745 -4.4885182 -1.0296463 -0.67762357 -4.5523973 -1.0438567 -0.64816552 -4.5458694 -1.0413355 -0.61841846 -4.5362587 -1.0381267 -0.59094983 -4.5428634 -1.0388143 -0.56713474 -4.5792475 -1.0466071 -0.53914011 -4.5836082 -1.0468363 -0.51165259 -4.5926342 -1.0482115 -0.48193431 -4.5811667 -1.0447735 -0.4512243 -4.5578842 -1.0385851 -0.42414948 -4.5702591 -1.0408771 -0.39685568 -4.5815034 -1.0429399 -0.36561131 -4.5450425 -1.0337719 -0.33670607 -4.5336108 -1.0305631 -0.30914691 -4.5394759 -1.0314798 -0.28176948 -4.5490594 -1.0333135 -0.25341728 -4.5429277 -1.0314798 -0.22481261 -4.5298147 -1.0280418 -0.19714107 -4.5340261 -1.0287294 -0.16957191 -4.5419593 -1.0303339 -0.14103028 -4.5215101 -1.0252914 -0.11345539 -4.5291018 -1.0268959 -0.085478306 -4.5199809 -1.0246038 -0.058143198 -4.5515656 -1.0319383 -0.030004753 -4.5206895 -1.0246038 -0.0022628913 -4.5159216 -1.0234579 --0.025505716 -4.5265574 -1.025979 --0.05335927 -4.5331287 -1.0275835 --0.081415832 -4.5463414 -1.0307922 --0.10956658 -4.5564604 -1.0333135 --0.13725887 -4.546946 -1.0312507 --0.16557887 -4.5576911 -1.0340011 --0.19448934 -4.5789566 -1.0392727 --0.22248726 -4.5757327 -1.0388143 --0.25289798 -4.6170464 -1.0488992 --0.28453338 -4.669816 -1.0617343 --0.31324655 -4.6689534 -1.0619636 --0.3418178 -4.6659727 -1.0617343 --0.37036422 -4.6628175 -1.0615051 --0.39647952 -4.631362 -1.0546291 --0.42497844 -4.6298113 -1.0548583 --0.45119718 -4.6048355 -1.0495868 --0.47873795 -4.5952029 -1.0479823 --0.50212228 -4.5486412 -1.0376683 --0.5346415 -4.585115 -1.0470655 --0.87001359 -7.0849881 -1.6409237 --0.90848953 -7.0409012 -1.6317557 --0.94332707 -6.9734597 -1.6170869 --0.99196053 -7.0089831 -1.6269425 --1.0353749 -7.0056534 -1.6276301 --1.0767115 -6.9885864 -1.625109 --1.1226537 -7.0010705 -1.6296929 --1.1647905 -6.9892492 -1.628547 --1.2114683 -7.0040312 -1.6338185 --1.257169 -7.0117955 -1.6374857 --1.2962617 -6.9828949 -1.6324433 --1.3359644 -6.958559 -1.628547 --1.3765535 -6.9397278 -1.6260257 --1.4228176 -6.9492693 -1.6303805 --1.4634204 -6.9308844 -1.6280885 --1.5057131 -6.9208236 -1.6278594 --1.5496391 -6.9181032 -1.6294637 --1.5857211 -6.8809571 -1.6228169 --1.6339694 -6.8966718 -1.6290053 --1.6730337 -6.8732748 -1.6257966 --1.7177713 -6.8732677 -1.6283177 --1.7475835 -6.8145113 -1.6166285 --1.8017401 -6.8507295 -1.6280885 --1.8498205 -6.8621011 -1.6335893 --1.8981082 -6.8731403 -1.6390902 --1.942099 -6.8679209 -1.6406945 --1.9777099 -6.8334346 -1.6351937 --2.0223646 -6.8305044 -1.6374857 --2.0662119 -6.8244882 -1.6390902 --2.114377 -6.8321395 -1.6441325 --2.1542046 -6.8125405 -1.6425282 --2.1917775 -6.7862263 -1.6393193 --2.2345948 -6.7763476 -1.6402361 --2.2727165 -6.7523608 -1.6377149 --2.3201115 -6.7557807 -1.6420697 --1.3319176 -3.8016927 -0.90862846 --1.3555467 -3.7943654 -0.9088577 --2.4280863 -6.6680274 -1.6310681 --2.486901 -6.7013702 -1.6432158 --2.5241868 -6.6759696 -1.6406945 --2.5686002 -6.6694393 -1.6429865 --2.6052105 -6.6426787 -1.6402361 --2.6502509 -6.6374164 -1.6429865 --2.6942255 -6.6291456 -1.6450493 --2.727783 -6.5953989 -1.6406945 --2.7693326 -6.5812292 -1.6413821 --2.8131092 -6.5721669 -1.6434449 --2.8689206 -6.5904822 -1.6526129 --1.3781021 -3.1129167 -0.761711 --1.3987741 -3.1079528 -0.76262784 --2.9832666 -6.5223951 -1.6489457 --3.0207696 -6.4986711 -1.6475705 --1.6207594 -3.4311068 -0.85362041 --1.6337819 -3.404423 -0.84926558 --1.6444061 -3.3733342 -0.84376478 --1.6607556 -3.3544569 -0.84147274 --1.6839297 -3.349422 -0.84284794 --1.7088742 -3.3476965 -0.84513998 --1.7360997 -3.3501122 -0.84857798 --1.7656842 -3.3566267 -0.85316199 --3.3954859 -6.3606744 -1.6578846 --3.4117339 -6.2977819 -1.6466538 --3.4690659 -6.3108501 -1.6558218 --3.5048788 -6.2843451 -1.6544466 --3.5433729 -6.2627211 -1.6544466 --3.5783422 -6.234952 -1.6528422 --3.621428 -6.2212906 -1.6551342 --3.6441946 -6.1729674 -1.648029 --3.7064989 -6.1914153 -1.6592598 --3.7368433 -6.1560745 -1.6558218 --3.7776067 -6.1380038 -1.657197 --3.8167434 -6.1171865 -1.6578846 --3.8630505 -6.1076379 -1.661781 --3.90308 -6.0879169 -1.6629269 --3.9371793 -6.0589561 -1.6615517 --3.9673231 -6.0241156 -1.6585722 --3.9928653 -5.9826565 -1.653759 --2.0965471 -3.0996282 -0.84124357 --2.1177273 -3.0899177 -0.84216034 --2.1410878 -3.083262 -0.84399396 --4.1827254 -5.9457607 -1.6718658 --4.2050071 -5.9001665 -1.6661358 --4.2360029 -5.8671508 -1.664073 --4.2552609 -5.8182635 -1.6574261 --4.3285408 -5.842885 -1.6723242 --4.3526268 -5.8006434 -1.6677402 --4.3881373 -5.7738271 -1.6677402 --4.4234819 -5.7467933 -1.6677402 --4.4706283 -5.7348976 -1.6723242 --4.5039239 -5.7050662 -1.6716366 --4.5388446 -5.6773233 -1.6716366 --4.5791063 -5.6561756 -1.6736994 --4.6174283 -5.6324892 -1.6750746 --4.6574965 -5.6107922 -1.6771374 --4.7143812 -5.6089344 -1.6853886 --4.7436619 -5.5739717 -1.683555 --4.7752323 -5.5418105 -1.6826382 --4.8181043 -5.522675 -1.685847 --4.8332138 -5.4718499 -1.6792002 --4.8628049 -5.4377375 -1.677825 --4.9058776 -5.4186215 -1.681263 --4.944952 -5.394876 -1.6833258 --4.9859061 -5.3729954 -1.6860762 --5.0247784 -5.3486862 -1.688139 --5.0608563 -5.321281 -1.689285 --5.0913868 -5.2880244 -1.6885974 --5.1210198 -5.2538962 -1.6876806 --5.1627316 -5.2320757 -1.6908894 --5.1844196 -5.1899691 -1.6874514 --5.189868 -5.132051 -1.6787418 --5.2108159 -5.0899072 -1.6753038 --5.2538562 -5.0693288 -1.6792002 --5.2524519 -5.006103 -1.6686569 --5.366694 -5.0525174 -1.6957027 --5.3797755 -5.0029202 -1.6899726 --5.3745308 -4.9368906 -1.6785126 --5.3967929 -4.896625 -1.6759914 --5.4028163 -4.8419795 -1.6684278 --5.4331532 -4.8093824 -1.6686569 --5.4889402 -4.7990208 -1.6769081 --5.4910259 -4.7417111 -1.6684278 --5.5096493 -4.6990857 -1.6652189 --5.5741115 -4.6952929 -1.6762205 --5.636488 -4.6890173 -1.6865346 --5.6734257 -4.6611419 -1.6890558 --5.7170362 -4.6385088 -1.6936399 --5.7089295 -4.5741262 -1.6826382 --5.7689476 -4.5643787 -1.6922646 --5.8022146 -4.5330906 -1.693869 --5.819901 -4.4896736 -1.6908894 --5.8419194 -4.4497499 -1.689285 --5.8667789 -4.4120655 -1.6885974 --5.8718591 -4.3597364 -1.6821798 --5.9283304 -4.3454938 -1.6908894 --5.9525166 -4.3073244 -1.6902018 --5.9550729 -4.2537451 -1.6833258 --5.9739017 -4.2120767 -1.681263 --6.0020308 -4.1770105 -1.6819506 --5.9962573 -4.1186094 -1.6730118 --6.0141644 -4.0768237 -1.670949 --6.031785 -4.0349731 -1.6688862 --6.0564299 -3.9978871 -1.6688862 --6.083293 -3.962244 -1.6695738 --6.1173167 -3.9311585 -1.6723242 --6.1503649 -3.8992829 -1.6748453 --6.1485925 -3.84547 -1.6677402 --6.161303 -3.8010259 -1.6647606 --6.1720371 -3.755559 -1.6613226 --6.1866183 -3.7126083 -1.6590306 --6.1866655 -3.6611919 -1.6528422 --6.170342 -3.6005936 -1.6422989 --6.1720705 -3.5510142 -1.6367981 --6.2149091 -3.5250831 -1.6425282 --6.2610593 -3.5006599 -1.6491749 --6.262814 -3.4513702 -1.6439034 --6.3052568 -3.4244926 -1.6496333 --6.3407393 -3.393549 -1.6535298 --6.3726349 -3.360482 -1.6565094 --6.4302759 -3.3406148 -1.666365 --6.4185925 -3.2846878 -1.6578846 --6.4351492 -3.2434895 -1.6569678 --6.4313898 -3.1922572 -1.6507794 --6.4561028 -3.1552997 -1.6521546 --6.4630623 -3.1097171 -1.6489457 --6.4925776 -3.0750024 -1.6516961 --6.517499 -3.0379858 -1.6533005 --6.5298238 -2.9950969 -1.6516961 --6.5436425 -2.9529722 -1.6505501 --6.5660868 -2.9147403 -1.6516961 --6.5651145 -2.8662169 -1.6468829 --6.4582534 -2.7725 -1.6150241 --6.6921592 -2.8244262 -1.6704906 --6.7336388 -2.7933824 -1.676679 --6.7776918 -2.7630382 -1.683555 --6.8098788 -2.7275524 -1.6874514 --6.8346386 -2.6889241 -1.6895142 --6.8891425 -2.6616726 -1.6991407 --6.9608598 -2.640413 -1.7131219 --6.9696326 -2.5949349 -1.7112882 --7.0037088 -2.5588028 -1.7158723 --7.0431008 -2.5243206 -1.7218314 --7.0850873 -2.4904196 -1.7284783 --7.1039157 -2.4481683 -1.729395 --7.1603017 -2.4185526 -1.7397091 --7.163918 -2.3709018 -1.7369587 --7.203331 -2.3350055 -1.7431471 --7.2564883 -2.3031323 -1.7527735 --7.2844267 -2.2628963 -1.7562115 --7.3289075 -2.2274997 -1.7637751 --7.3321738 -2.1794372 -1.761254 --7.3080206 -2.1235406 -1.7520859 --7.2647314 -2.0627046 -1.7383339 --7.3447847 -2.0368221 -1.7548363 --7.4022427 -2.0039284 -1.7658379 --7.5273294 -1.9883076 -1.793342 --7.6430736 -1.9687976 -1.818554 --7.7579136 -1.9477038 -1.8435369 --7.9644923 -1.9477073 -1.8907522 --8.127799 -1.9348758 -1.9274242 --8.2248621 -1.9047368 -1.9480523 --8.2496891 -1.8572277 -1.951261 --8.2866039 -1.8121895 -1.9574494 --8.3023281 -1.7623205 -1.9585955 --8.3244257 -1.713701 -1.9613459 --8.3596029 -1.6675429 -1.9673051 --8.375411 -1.6173255 -1.9686803 --8.3220263 -1.5541084 -1.9535531 --8.3017111 -1.4976575 -1.9464478 --8.3203335 -1.4483608 -1.9487399 --8.3549824 -1.4016303 -1.9549283 --8.3663082 -1.3508043 -1.9556159 --8.3802109 -1.3003399 -1.9569911 --8.3851433 -1.2484653 -1.9563035 --8.3830099 -1.1956167 -1.9540114 --8.3892231 -1.1440254 -1.9537822 --8.3960848 -1.0925286 -1.9537822 --8.3968344 -1.0402722 -1.952407 --8.3982258 -0.98816174 -1.951261 --8.4031639 -0.93650472 -1.9510318 --8.4223042 -0.88635314 -1.9542407 --8.4624557 -0.83811337 -1.9624919 --8.4247932 -0.78221148 -1.952407 --8.4313736 -0.73067141 -1.9528655 --8.4492817 -0.68001753 -1.9560742 --8.4329109 -0.62664521 -1.951261 --8.4657307 -0.57687664 -1.958137 --8.4555101 -0.52407742 -1.9549283 --8.4556503 -0.47202259 -1.9542407 --8.4476938 -0.41959915 -1.9517194 --8.4491367 -0.36771479 -1.9514903 --8.4376163 -0.31535533 -1.9482814 --8.4559317 -0.2640945 -1.9521779 --8.0873137 0.59273446 -1.9741917 --8.0806217 0.64211506 -1.9734684 --8.0707283 0.69118702 -1.9720221 --8.0344429 0.73776197 -1.9640665 --8.0432863 0.78837383 -1.9674416 --8.0189924 0.835697 -1.9626201 --7.9760938 0.88072526 -1.9532182 --7.9821067 0.93099993 -1.9561111 --7.9675746 0.97889334 -1.9539413 --7.9489059 1.0261459 -1.9508075 --7.9414983 1.0747699 -1.9505663 --7.9193797 1.1212987 -1.9467092 --7.8989096 1.1678807 -1.9433341 --7.9155741 1.2200249 -1.949361 --7.9002733 1.2673402 -1.9474324 --7.9114938 1.3189862 -1.9522538 --7.8745632 1.3625371 -1.9450216 --7.866055 1.4108289 -1.9450216 --7.8582044 1.4592448 -1.9452627 --7.8443375 1.5065186 -1.9440573 --7.8511286 1.5578356 -1.9481556 --7.8414221 1.6059799 -1.9481556 --7.7991362 1.6472402 -1.939959 --7.778451 1.6927921 -1.9373072 --7.7641296 1.7396386 -1.936343 --7.7372332 1.7835374 -1.9322447 --7.7431417 1.8350093 -1.936584 --7.726079 1.8811074 -1.9351375 --7.7285137 1.932011 -1.9387537 --7.7108731 1.9779482 -1.9373072 --7.675128 2.019048 -1.9312804 --7.7197523 2.0815241 -1.9459859 --7.7030931 2.1278183 -1.9450216 --7.6656127 2.1681724 -1.9387537 --7.6456394 2.2132769 -1.9370662 --7.6412201 2.2629051 -1.9394768 --7.6206899 2.3077784 -1.9377893 --7.6036048 2.3536332 -1.9370662 --7.5621867 2.3917527 -1.9300749 --7.5492158 2.4387052 -1.9305571 --7.5295019 2.4834597 -1.9293517 --7.5196404 2.531472 -1.9307982 --7.5177336 2.5822952 -1.9344143 --7.4989996 2.6274114 -1.9336911 --7.490962 2.6763148 -1.9358608 --7.4743991 2.7222281 -1.9358608 --7.4520965 2.7660117 -1.9344143 --7.4540462 2.8188968 -1.9394768 --7.411253 2.8548093 -1.9327267 --7.388176 2.898103 -1.9312804 --7.3594398 2.9390604 -1.9283874 --7.3385706 2.9830651 -1.9276642 --7.319232 3.0276666 -1.9274231 --7.2915721 3.0687535 -1.9250124 --7.2913399 3.1214597 -1.9300749 --7.3076406 3.1816416 -1.939718 --7.2480488 3.2087355 -1.9288696 --7.2326488 3.2551405 -1.9300749 --7.2169518 3.3014772 -1.9312804 --7.1895185 3.3424234 -1.9293517 --7.1583452 3.3814986 -1.9264588 --7.1383367 3.4257777 -1.9266999 --7.1136928 3.4678116 -1.9257356 --7.0801053 3.5053649 -1.9223605 --7.0706019 3.5548465 -1.9257356 --7.0512495 3.599488 -1.9264588 --6.9859505 3.6203523 -1.9144051 --6.9773464 3.6703804 -1.9182622 --6.911891 3.6902628 -1.9062085 --6.9514046 3.7663634 -1.923807 --6.9961944 3.8463602 -1.9430931 --6.9538169 3.8788121 -1.9377893 --6.9155283 3.9132793 -1.9336911 --6.8821287 3.9503226 -1.9310392 --6.8493738 3.9875922 -1.9286286 --6.8114071 4.0216475 -1.9247713 --6.7766113 4.0573816 -1.9218785 --6.7441225 4.0943518 -1.9197087 --6.7073035 4.1285319 -1.9163337 --6.6703191 4.162415 -1.9129586 --6.6413732 4.201189 -1.9119943 --6.6122026 4.2397647 -1.9110301 --6.5925727 4.2844882 -1.9129586 --6.5629177 4.3227234 -1.9119943 --6.5403061 4.3656058 -1.9131997 --6.518219 4.4089174 -1.9146461 --6.4926443 4.4499269 -1.9151284 --6.4492769 4.4786077 -1.9103068 --6.4296117 4.5236807 -1.9127176 --6.4072652 4.5669909 -1.9144051 --6.3980041 4.6198578 -1.9201909 --6.3648372 4.6555896 -1.9187444 --6.3166585 4.680109 -1.9127176 --6.2854943 4.7170315 -1.9119943 --6.2363467 4.7402372 -1.9057264 --6.2202158 4.7884798 -1.9098246 --6.1539831 4.7979078 -1.8982531 --6.1244278 4.8355775 -1.8982531 --6.1090422 4.884583 -1.9028335 --6.082727 4.9250293 -1.9040389 --6.0546441 4.9641061 -1.904762 --6.0285506 5.0048833 -1.9062085 --5.9999561 5.0436535 -1.9069318 --5.9666791 5.078486 -1.9062085 --5.9155583 5.0978923 -1.8996994 --5.8731995 5.1245208 -1.8960834 --5.8205552 5.1418252 -1.8890922 --5.7823863 5.1716189 -1.8869225 --5.7411938 5.1985316 -1.8837886 --5.7027507 5.2277579 -1.8816189 --5.6819463 5.2732158 -1.8854761 --5.7060595 5.3611517 -1.904762 --5.6843061 5.4067664 -1.9086193 --5.6636057 5.4536619 -1.9129586 --5.603632 5.4625635 -1.9037977 --5.5644836 5.4913893 -1.9018692 --5.5739322 5.5686488 -1.9170569 --5.5246491 5.5875597 -1.9117533 --5.4950066 5.626214 -1.9134408 --5.451623 5.650744 -1.9103068 --5.4208646 5.6883039 -1.9117533 --5.3845291 5.7200451 -1.9112711 --5.3433838 5.7465787 -1.9091015 --5.3145866 5.7864056 -1.9115121 --5.2959332 5.8375974 -1.9177802 --5.2794418 5.8916688 -1.9250124 --5.227757 5.9065084 -1.9192266 --5.2035513 5.9523582 -1.923807 --5.1770768 5.9959297 -1.9276642 --5.1200409 6.0039492 -1.9199498 --5.08248 6.0345097 -1.9197087 --5.0484595 6.0693126 -1.9209141 --5.0185151 6.1091752 -1.923807 --4.9833808 6.1428685 -1.9247713 --4.9644022 6.1968131 -1.9322447 --4.9118371 6.2088881 -1.9264588 --4.8861918 6.2549725 -1.9315214 --4.8566093 6.2963643 -1.9351375 --4.8008351 6.3036523 -1.9281464 --4.7620664 6.3329911 -1.9281464 --4.7433615 6.3893676 -1.936584 --4.7086563 6.4246154 -1.9385126 --4.6782475 6.4659677 -1.9423698 --4.6266422 6.4779649 -1.9373072 --4.5795393 6.4959183 -1.9341732 --4.5384865 6.5223022 -1.9336911 --4.5000286 6.5524273 -1.9344143 --4.4749818 6.6024122 -1.9411644 --4.4354649 6.6313596 -1.9416466 --4.3946919 6.6584501 -1.9416466 --4.3569312 6.6901703 -1.9430931 --4.3299603 6.7388248 -1.949602 --4.2677507 6.7324758 -1.939959 --4.234592 6.7717023 -1.9438162 --4.2087531 6.8231664 -1.9512895 --4.1718507 6.8571539 -1.9537003 --4.1217098 6.8693066 -1.9498432 --4.0908475 6.9136801 -1.9553878 --4.0434594 6.9302673 -1.9529771 --3.9897323 6.9355969 -1.9474324 --3.9466224 6.9591026 -1.9471912 --3.9014807 6.9789519 -1.9459859 --3.869823 7.0231614 -1.9517717 --3.8312869 7.0553031 -1.9541825 --3.7696133 7.0444484 -1.9445394 --3.7493966 7.1112318 -1.9568343 --3.7271597 7.175447 -1.9684058 --3.6649423 7.1627555 -1.9585218 --3.6060779 7.1556392 -1.9503253 --3.5621037 7.1776309 -1.9503253 --3.524385 7.2124329 -1.9539413 --3.4994121 7.2741556 -1.9650308 --3.4422557 7.2691746 -1.9577986 --3.4020963 7.2998362 -1.9604504 --3.363308 7.333807 -1.9640665 --3.3158512 7.3489976 -1.9626201 --3.2714832 7.3709793 -1.9631022 --3.2157147 7.3668971 -1.9565933 --3.1876717 7.4266243 -1.9674416 --3.1477005 7.4594564 -1.9710578 --3.097039 7.4669757 -1.9679238 --3.0526288 7.4894333 -1.968888 --3.0026498 7.4981117 -1.9662362 --2.9501934 7.5001369 -1.9618969 --2.9177516 7.5534067 -1.9712988 --2.8655014 7.5557404 -1.9672005 --2.8238244 7.5859146 -1.9705756 --2.7732308 7.5921588 -1.9676827 --2.7285576 7.6145139 -1.9691291 --2.684679 7.6393538 -1.9712988 --2.6387024 7.6584358 -1.9720221 --2.5975587 7.6919537 -1.9766024 --2.5436087 7.6874757 -1.9712988 --2.502373 7.7214036 -1.9761204 --2.447613 7.7134852 -1.9700934 --2.3996625 7.7265048 -1.9696113 --2.3609512 7.7698708 -1.9770846 --2.3124027 7.7814198 -1.9763614 --2.2678607 7.8066463 -1.9792542 --2.2246852 7.8372207 -1.9835936 --2.1718903 7.8338885 -1.9792542 --2.1235282 7.8461308 -1.9790132 --2.0743546 7.8552594 -1.9780489 --2.0309546 7.8866367 -1.9828705 --1.9752051 7.8697686 -1.9753971 --1.9284922 7.8883395 -1.9770846 --1.8784821 7.8934145 -1.9753971 --1.8343887 7.9237027 -1.9802185 --1.7842447 7.9281812 -1.978531 --1.7374289 7.9475131 -1.9807007 --1.6874233 7.9523277 -1.9792542 --1.638597 7.962532 -1.9792542 --1.5868642 7.9581594 -1.9756382 --1.5376364 7.9658408 -1.9751559 --1.4970938 8.0199661 -1.9864866 --1.444242 8.0089436 -1.981424 --1.3977326 8.0329533 -1.9852811 --1.3549919 8.0806217 -1.9951652 --1.2951884 8.025547 -1.9792542 --1.2506756 8.0640326 -1.9869686 --1.2070235 8.1109133 -1.9968528 --1.1514865 8.0778131 -1.9867276 --1.1045189 8.1039591 -1.9915491 --1.0555233 8.1163578 -1.9929955 --1.0035583 8.1053448 -1.9886562 --0.9534663 8.1084585 -1.9879329 --0.90294474 8.1074038 -1.9862455 --0.85145843 8.0963831 -1.9821472 --0.80567706 8.1410532 -1.9920312 --0.75356102 8.1226511 -1.9862455 --0.70303851 8.1193867 -1.9843168 --0.65289503 8.1196775 -1.9833525 --0.60420877 8.1390162 -1.9872098 --0.55504656 8.1541901 -1.9901026 --0.50500298 8.1574421 -1.9901026 --0.45445535 8.1516657 -1.9879329 --0.40371007 8.139761 -1.9843168 --0.3549335 8.1692343 -1.9910669 --0.30361205 8.1392536 -1.9831115 --0.25282237 8.113802 -1.9763614 --0.20440796 8.1705027 -1.9901026 --0.15399814 8.1570473 -1.9864866 --0.10401789 8.163662 -1.9879329 --0.053962283 8.1699696 -1.9893794 --0.0038246077 8.149766 -1.9843168 -0.046034917 8.124403 -1.9780489 -0.096232213 8.1530809 -1.9852811 -0.14625676 8.1523371 -1.9852811 -0.19674581 8.1706905 -1.9901026 -0.2461991 8.1470184 -1.984558 -0.29703334 8.1686306 -1.9903437 -0.34719089 8.1676235 -1.9905849 -0.39791489 8.1779413 -1.9937187 -0.44542378 8.126894 -1.981665 -0.49255809 8.0794477 -1.9705756 -0.54596651 8.1334038 -1.984799 -0.59458244 8.1124783 -1.9804597 -0.64380938 8.1019058 -1.9787722 -0.69268012 8.0881329 -1.9763614 -0.74113947 8.071167 -1.9732274 -0.79282993 8.0886822 -1.9787722 -0.84113663 8.0711174 -1.9756382 -0.89256406 8.0831671 -1.9799775 -0.94349551 8.0891056 -1.9828705 -0.98813522 8.0427084 -1.9727453 -1.0360974 8.0259056 -1.9700934 -1.0833695 8.0049715 -1.9664773 -1.1353267 8.0183525 -1.9715399 -1.1911832 8.0563574 -1.9828705 -1.2423694 8.0604067 -1.9857633 -1.2918037 8.0526323 -1.9857633 -1.3365571 8.0167933 -1.9787722 -1.383238 7.9940977 -1.9751559 -1.4272902 7.9577579 -1.9681648 -1.4872628 8.0089626 -1.9833525 -1.5372928 8.0044518 -1.984558 -1.584488 7.9853492 -1.9821472 -1.6348195 7.982132 -1.9838347 -1.6735308 7.9235244 -1.9715399 -1.7231498 7.9178481 -1.9727453 -1.7770085 7.9308009 -1.9787722 -1.8129857 7.8648992 -1.9647897 -1.863673 7.8640141 -1.9674416 -1.9203904 7.8873191 -1.9763614 -1.9609782 7.8443179 -1.9684058 -2.0119684 7.8434181 -1.9712988 -2.0489399 7.788691 -1.9604504 -2.1068037 7.8134527 -1.9700934 -2.1580675 7.8125391 -1.9732274 -2.1998854 7.7776723 -1.9676827 -2.2470269 7.7621632 -1.9672005 -2.2904766 7.734272 -1.9635844 -2.3511169 7.7637262 -1.9749149 -2.3832059 7.6990924 -1.9618969 -2.4374287 7.7065315 -1.9676827 -2.4676566 7.6387925 -1.9539413 -2.519043 7.637332 -1.9575576 -2.5807266 7.6658788 -1.9691291 -2.6198297 7.6269541 -1.9631022 -2.6659362 7.6089039 -1.9626201 -2.7145333 7.5978861 -1.9640665 -2.7534602 7.5601139 -1.9585218 -2.7923636 7.5230613 -1.9532182 -2.8446534 7.5221248 -1.9575576 -2.8931975 7.5108681 -1.9592451 -2.9342654 7.4803262 -1.95587 -2.9743476 7.4477611 -1.9520128 -3.0240116 7.43926 -1.9546646 -3.0629213 7.4044232 -1.9503253 -3.116205 7.404274 -1.9553878 -3.1432381 7.3421917 -1.9438162 -3.1944306 7.3370032 -1.9476734 -3.2401755 7.3190389 -1.9481556 -3.2937889 7.3184886 -1.9534593 -3.3394399 7.2999058 -1.9539413 -3.368207 7.2449579 -1.9445394 -3.4080367 7.2145028 -1.9418876 -3.4556003 7.2004547 -1.9438162 -3.5201352 7.2209868 -1.9553878 -3.5484388 7.1670737 -1.9464681 -3.5914762 7.1434317 -1.9459859 -3.636564 7.1238537 -1.9467092 -3.6685932 7.0790038 -1.9404413 -3.7151237 7.0623727 -1.9421287 -3.7597592 7.0420122 -1.9428519 -3.8047473 7.0222235 -1.9438162 -3.8463602 6.9961944 -1.9430931 -3.8764474 6.9495792 -1.936584 -3.9151917 6.9189067 -1.9346554 -3.9483898 6.8787622 -1.9300749 -3.9963837 6.8644695 -1.9329679 -4.0438571 6.8490109 -1.9356197 -4.1017628 6.8507123 -1.9433341 -4.1386833 6.8171206 -1.9409233 -4.1773815 6.7866392 -1.9394768 -4.2096944 6.7460604 -1.9351375 -4.2499704 6.7184629 -1.9346554 -4.2827306 6.6791887 -1.9307982 -4.3257484 6.6560392 -1.9317625 -4.3611679 6.6212678 -1.9293517 -4.3963242 6.5863123 -1.926941 -4.4317594 6.5519786 -1.9247713 -4.4866953 6.5462747 -1.9312804 -4.5090604 6.4931154 -1.923566 -4.5722761 6.4986596 -1.9336911 -4.5878377 6.4365034 -1.9233248 -4.6278133 6.4090185 -1.923566 -4.6796589 6.3977332 -1.9288696 -4.6939778 6.3353715 -1.9185034 -4.7613125 6.3444815 -1.9303161 -4.7713695 6.2772923 -1.9185034 -4.8003221 6.2355943 -1.9146461 -4.8367023 6.2037268 -1.9139229 -4.8668566 6.1640315 -1.910789 -4.9209538 6.1545167 -1.917298 -4.9512949 6.1151562 -1.9144051 -4.9757991 6.068902 -1.9093425 -5.0067434 6.0307903 -1.9069318 -5.0517731 6.0096126 -1.9100658 -5.1269302 6.0235791 -1.9247713 -5.1625261 5.9905372 -1.9242891 -5.1723833 5.9280381 -1.9141641 -5.1887379 5.8736444 -1.9066907 -5.2207975 5.8373566 -1.9052442 -5.2330623 5.7793174 -1.8965656 -5.2526827 5.7299318 -1.8907797 -5.3095317 5.721066 -1.8987352 -5.3345661 5.6777716 -1.8951191 -5.3672967 5.6428227 -1.8943958 -5.425384 5.6342483 -1.9028335 -5.438849 5.5793123 -1.8953601 -5.4770713 5.5499792 -1.8968066 -5.5096502 5.5148954 -1.8963245 -5.5378637 5.4755268 -1.8943958 -5.572051 5.442122 -1.894637 -5.5941615 5.3970504 -1.8907797 -5.6229558 5.3586073 -1.8893332 -5.6408877 5.3100371 -1.8842707 -5.6705203 5.2726822 -1.8833064 -5.6934724 5.2292562 -1.8801724 -5.7297649 5.1981354 -1.8816189 -5.7478175 5.1505766 -1.8770385 -5.7916689 5.1261444 -1.8811368 -5.8215518 5.0892339 -1.8806546 -5.8938107 5.0889301 -1.8941548 -5.9131079 5.0425963 -1.8902975 -5.9320593 4.9962177 -1.8864404 -5.9931984 4.9851665 -1.8963245 -6.0094237 4.9365969 -1.891744 -6.0245256 4.8874044 -1.8869225 -6.0581884 4.8533797 -1.8881279 -6.09166 4.8191261 -1.8893332 -6.0943437 4.7607512 -1.8808956 -6.1618681 4.7528987 -1.8929495 -6.1716108 4.7003031 -1.8869225 -6.1855955 4.6512666 -1.8823421 -6.2522058 4.6415658 -1.8941548 -6.2876143 4.6082778 -1.8963245 -6.2890353 4.5502725 -1.8881279 -6.3405318 4.5285163 -1.8953601 -6.3681989 4.4895263 -1.8953601 -6.402 4.4548011 -1.8972888 -6.4420152 4.4242239 -1.9011459 -6.4561853 4.3759031 -1.8972888 -6.4821072 4.3356671 -1.8970476 -6.5191188 4.3027601 -1.9001817 -6.5616641 4.2732687 -1.9050032 -6.5518322 4.2098484 -1.8943958 -6.5726213 4.166451 -1.8929495 -6.6038227 4.1296449 -1.894637 -6.6257334 4.0870094 -1.8936726 -6.6490278 4.045269 -1.8931905 -6.6795497 4.0078897 -1.894878 -6.7157102 3.9737465 -1.8982531 -6.7592478 3.943711 -1.9037977 -6.7690163 3.8939381 -1.8996994 -6.7514129 3.8288777 -1.8878869 -6.7612243 3.7798045 -1.8840296 -6.7766385 3.7340331 -1.8818599 -6.8326869 3.7104397 -1.8912619 -6.8835654 3.6835518 -1.8992174 -6.8965936 3.6362681 -1.8965656 -6.9110236 3.5898578 -1.8943958 -6.9588418 3.5606434 -1.9016281 -6.9987597 3.5270469 -1.9066907 -7.0289636 3.4883502 -1.9091015 -7.0170984 3.4289689 -1.8999406 -7.0327582 3.3833246 -1.8984941 -7.051631 3.3392782 -1.8980119 -7.091342 3.3049638 -1.9033157 -7.1026649 3.2573457 -1.9009049 -7.1127863 3.2093141 -1.8982531 -7.1376672 3.1679718 -1.8996994 -7.1889935 3.1380889 -1.9083782 -7.2428966 3.1088428 -1.9177802 -7.2484226 3.0586851 -1.9141641 -7.2258143 2.9970543 -1.9030745 -7.2611446 2.9596186 -1.907655 -7.3052969 2.9254684 -1.9146461 -7.3240132 2.880944 -1.9148872 -7.330688 2.8317556 -1.9119943 -7.3560925 2.789818 -1.9141641 -7.3921733 2.7517366 -1.9192266 -7.4061837 2.7053289 -1.9185034 -7.397975 2.6509986 -1.9119943 -7.4250898 2.6094153 -1.9148872 -7.4281144 2.5593824 -1.9115121 -7.4455175 2.5143769 -1.9119943 -7.4838409 2.476263 -1.9180212 -7.4988942 2.4302964 -1.9180212 -7.4840622 2.3748496 -1.9103068 -7.5216651 2.3360765 -1.9163337 -7.5302854 2.2881882 -1.9148872 -7.5274377 2.2369664 -1.9105479 -7.5410218 2.1907368 -1.9105479 -7.5879335 2.1539607 -1.9192266 -7.5757551 2.1003642 -1.9127176 -7.6081738 2.0591624 -1.9177802 -7.6281724 2.0144219 -1.9197087 -7.6187716 1.9620149 -1.9141641 -7.6278429 1.9145217 -1.9134408 -7.6573596 1.8720586 -1.9180212 -7.6696463 1.8252633 -1.9182622 -7.7015033 1.7829814 -1.923566 -7.6782112 1.7280262 -1.9148872 -7.6905661 1.6812953 -1.9153694 -7.7320676 1.6407186 -1.9233248 -7.7629027 1.5975453 -1.9286286 -7.718307 1.539073 -1.9148872 -7.7685814 1.499589 -1.9252535 -7.7671423 1.449936 -1.9226016 -7.7892642 1.4046599 -1.9259766 -7.7872186 1.3550109 -1.9233248 -7.8193154 1.3112129 -1.9293517 -7.7936792 1.2578027 -1.9209141 -7.8089228 1.2111468 -1.9228427 -7.8315663 1.1654929 -1.9266999 -7.8491392 1.1189224 -1.9293517 -7.8414326 1.068776 -1.9257356 -7.8391809 1.0195166 -1.923566 -7.8520312 0.97223085 -1.9252535 -7.8636322 0.9247126 -1.9266999 -7.8527608 0.87462097 -1.9226016 -7.881144 0.82885373 -1.9283874 -7.8870473 0.78057575 -1.9286286 -7.88589 0.73162997 -1.9271821 -7.886363 0.68289495 -1.9262178 -7.9087853 0.63596761 -1.9307982 -7.8951173 0.58613741 -1.9264588 -7.8898506 0.5370909 -1.9242891 -7.8813739 0.48795164 -1.9213963 -7.927825 0.44200805 -1.9322447 -7.91294 0.39249262 -1.9279053 -7.9248953 0.34435225 -1.9303161 -7.9161911 0.2953231 -1.9276642 -7.9197941 0.24680488 -1.9281464 -7.9328017 0.1984949 -1.9310392 -7.918345 0.14952551 -1.9271821 -7.913291 0.10086328 -1.9257356 -7.9157019 0.052318886 -1.9262178 -7.8935523 0.0037407619 -1.920673 -7.9312754 -0.044913091 -1.9300749 -7.913383 -0.093368977 -1.9257356 -7.9340086 -0.14230885 -1.9310392 -7.9145517 -0.19054183 -1.9264588 -7.9287548 -0.23957226 -1.9303161 -7.9465327 -0.28892577 -1.9351375 -7.94558 -0.33772069 -1.9353787 -7.9443274 -0.38651478 -1.9356197 -7.9253325 -0.43434775 -1.9315214 -7.9186435 -0.4827317 -1.9305571 -7.9116592 -0.53104997 -1.9295928 -7.9179306 -0.58029574 -1.9320036 -7.9287329 -0.6300236 -1.9356197 -7.9343872 -0.67949104 -1.9380305 -7.9223371 -0.72745162 -1.9361018 -7.9109635 -0.77538484 -1.9344143 -7.9060569 -0.82391101 -1.9344143 -7.9240036 -0.87496585 -1.9402001 -7.9011345 -0.9215439 -1.9358608 -7.8779931 -0.96787423 -1.9315214 -7.8699808 -1.0159457 -1.9310392 -7.8828335 -1.0668218 -1.9358608 -7.8819046 -1.1159871 -1.9373072 -7.8998699 -1.1680228 -1.9435751 -7.8704934 -1.21307 -1.9380305 -7.8705678 -1.2625705 -1.939959 -7.8387413 -1.3068463 -1.9339322 -7.841094 -1.356741 -1.936584 -7.8383527 -1.4058563 -1.9380305 -7.8209915 -1.452329 -1.9358608 -7.7919188 -1.4964436 -1.9307982 -7.7778306 -1.5432806 -1.9295928 -7.7596579 -1.5892217 -1.9274231 -7.7981868 -1.6470394 -1.939718 -7.778451 -1.6927921 -1.9373072 -7.7821226 -1.7436728 -1.9409233 -7.7504725 -1.7865912 -1.9356197 -7.7185893 -1.829187 -1.9303161 -7.6893048 -1.8721483 -1.9257356 -7.6635499 -1.9157611 -1.9221195 -7.6394305 -1.9596111 -1.9189855 -7.4846048 -1.9688985 -1.8823421 -7.3074703 -1.9702941 -1.8399129 -7.1698952 -1.9804504 -1.8076088 -7.0212688 -1.9858226 -1.7724118 -6.96141 -2.0150969 -1.7601171 -6.8549323 -2.0299261 -1.7357684 -6.7764025 -2.0519683 -1.7186521 -6.6793213 -2.0673816 -1.6967143 -6.6276484 -2.0960288 -1.6865891 -6.4706011 -2.0900948 -1.6489815 -6.2963705 -2.0765357 -1.6067933 -6.281671 -2.114511 -1.6063112 -6.2153449 -2.1347206 -1.5923288 -5.8879867 -2.0627 -1.5096401 -5.7034097 -2.0373781 -1.4643179 -5.6670928 -2.0636966 -1.45805 -5.6534138 -2.0980926 -1.457809 -5.4398289 -2.0568457 -1.4045314 -5.347414 -2.0594745 -1.3833168 -5.2443333 -2.0567935 -1.3592092 -5.131577 -2.0489655 -1.3324499 -5.0254107 -2.0423918 -1.3073781 -4.9311795 -2.0394185 -1.2854402 -4.8801117 -2.0534434 -1.275074 -4.7969418 -2.0531642 -1.2560291 -4.8296318 -2.102324 -1.2683239 -4.7421017 -2.0989065 -1.2480736 -4.4919677 -2.021183 -1.1834655 -4.3700533 -1.9986287 -1.1535722 -4.3277879 -2.0114901 -1.1453756 -4.2767558 -2.0197623 -1.1347684 -4.2135382 -2.0216038 -1.120786 -4.1399927 -2.017642 -1.1039107 -4.0753541 -2.0171621 -1.0894462 -4.0394907 -2.0303564 -1.0829372 -4.0330067 -2.0581937 -1.0846248 -4.0297794 -2.0878143 -1.0872766 -3.9765272 -2.0912595 -1.075946 -3.8977041 -2.0804143 -1.0573833 -3.9915204 -2.1620982 -1.0875176 -3.8863373 -2.136039 -1.0614815 -3.88587 -2.1669383 -1.0650977 -3.8665888 -2.1873941 -1.0634102 -3.853936 -2.2115612 -1.0636512 -3.8352616 -2.2322364 -1.0622047 -3.8148077 -2.2517788 -1.0602762 -3.7992539 -2.2741463 -1.0597939 -3.7910352 -2.3009415 -1.0614815 -3.7793248 -2.3256862 -1.0622047 -3.7542808 -2.3421512 -1.0590708 -3.7365587 -2.3630669 -1.0581064 -3.7219887 -2.3859496 -1.0581064 -3.7658634 -2.4468286 -1.0754639 -3.7645562 -2.4789667 -1.0795622 -3.7500818 -2.5025578 -1.0798032 -3.6639214 -2.4776609 -1.0585886 -3.6526518 -2.5028396 -1.0597939 -3.6188934 -2.51247 -1.0542493 -3.6938858 -2.5983043 -1.0817318 -3.6660202 -2.6124692 -1.0781157 -3.5728207 -2.5792246 -1.0544903 -3.50915 -2.5661407 -1.0397848 -3.5471382 -2.6274974 -1.0564189 -3.5907128 -2.6940765 -1.0749817 -3.5169454 -2.6725905 -1.0571421 -3.4689541 -2.6698425 -1.0472581 -3.4532721 -2.6916742 -1.0474992 -3.4397378 -2.7152185 -1.0484635 -3.4230127 -2.7362733 -1.0484635 -3.4544261 -2.7963176 -1.0638922 -3.4882314 -2.8593106 -1.0802854 -3.4579287 -2.8701196 -1.0761871 -3.4350533 -2.8869107 -1.0744996 -3.4202306 -2.9104502 -1.0754639 -3.3493822 -2.8857574 -1.0581064 -3.4756551 -3.0319734 -1.1055982 -3.2649913 -2.8835852 -1.0419544 -3.4526525 -3.0873384 -1.1104198 -3.1984291 -2.8954194 -1.0315882 -3.1770263 -2.9117105 -1.0303829 -3.1932411 -2.9628437 -1.0419544 -3.2124829 -3.0176075 -1.0547314 -3.1601577 -3.0051515 -1.0431598 -3.1584346 -3.0406437 -1.0489457 -3.1015017 -3.022701 -1.0356865 -3.0822058 -3.0409927 -1.0354455 -3.0710397 -3.0673938 -1.0380973 -3.0610301 -3.0951526 -1.0412313 -3.0948653 -3.1680396 -1.0600351 -3.0342708 -3.1443584 -1.0453295 -3.0336645 -3.1825919 -1.0520796 -3.0014422 -3.1877177 -1.0474992 -2.9930592 -3.2181582 -1.0515975 -2.9660363 -3.2285991 -1.0489457 -2.9083548 -3.2050424 -1.0349633 -2.8912246 -3.2257187 -1.0359275 -2.87395 -3.2463057 -1.0368918 -2.8399267 -3.247802 -1.0315882 -2.8174086 -3.2622275 -1.0306239 -2.7828574 -3.2624669 -1.0250791 -2.764662 -3.281708 -1.0258024 -2.8195567 -3.3889022 -1.0549725 -2.8313539 -3.4458892 -1.0677495 -2.7997646 -3.4503832 -1.0636512 -2.800988 -3.4955251 -1.0725709 -2.7560084 -3.4829583 -1.063169 -2.7321961 -3.4967437 -1.0622047 -2.699429 -3.4988399 -1.0576243 -2.7037776 -3.5493131 -1.0682316 -2.6370454 -3.5061023 -1.0496688 -2.6467156 -3.5643005 -1.0626869 -2.5909536 -3.5342846 -1.0484635 -2.5692189 -3.5501158 -1.0484635 -2.5141149 -3.5192127 -1.03424 -2.4678743 -3.4996681 -1.0236328 -2.4663057 -3.543426 -1.0323114 -2.4285872 -3.5352898 -1.0253203 -2.4073939 -3.5509281 -1.0255613 -2.3828633 -3.561599 -1.024356 -2.3582923 -3.5721025 -1.0231506 -2.3405659 -3.5930121 -1.0250791 -2.320049 -3.6097558 -1.0258024 -2.2921422 -3.6149058 -1.0231506 -2.259115 -3.6116204 -1.018088 -2.2292709 -3.613023 -1.0144719 -2.2211807 -3.6498508 -1.021222 -2.2142193 -3.6892114 -1.0286953 -2.2019172 -3.7202697 -1.0337579 -2.2206104 -3.8049686 -1.0542493 -2.1870615 -3.8008547 -1.0491867 -2.1823657 -3.8471291 -1.0585886 -2.1639271 -3.8697665 -1.0612404 -2.14061 -3.8838212 -1.0614815 -2.0898843 -3.8474126 -1.0474992 -2.0488422 -3.8276446 -1.0383383 -2.0497534 -3.8865058 -1.0513563 -2.0339179 -3.9145133 -1.0556958 -1.9930668 -3.8940859 -1.0465349 -1.9442474 -3.8568377 -1.0327936 -1.9114882 -3.8504374 -1.0277311 -1.9001794 -3.8873825 -1.0347222 -1.8737675 -3.8937209 -1.0332757 -1.8369685 -3.8779519 -1.0258024 -1.8045326 -3.870676 -1.0207398 -1.7872196 -3.8957913 -1.024597 -1.7908139 -3.9677274 -1.0412313 -1.769977 -3.986625 -1.0434009 -1.7384958 -3.9813991 -1.0390615 -1.711355 -3.9857481 -1.037374 -1.6819633 -3.984549 -1.03424 -1.6571113 -3.9938979 -1.033999 -1.6340387 -4.0075855 -1.0349633 -1.6155491 -4.0328536 -1.0390615 -1.2051073 -3.061816 -0.77725405 -1.191891 -3.0836387 -0.78111124 -1.5523962 -4.0918541 -1.047017 -1.4802166 -3.9748707 -1.0135076 -1.3662621 -3.7386465 -0.94865841 -1.3521322 -3.7716284 -0.95516741 -1.4084097 -4.0060215 -1.0147129 -1.4138242 -4.1017613 -1.0376151 -1.4128393 -4.1820831 -1.0564189 -1.3731343 -4.1482878 -1.0453295 -1.3533374 -4.1741772 -1.0499099 -1.0419266 -3.2813613 -0.81510282 -1.0214852 -3.2867658 -0.81486171 -1.0072213 -3.3124728 -0.81992429 -0.98770636 -3.3213816 -0.82064754 -0.96379024 -3.3152633 -0.81751359 -0.94051629 -3.3108444 -0.81486171 -0.91914701 -3.3128119 -0.81389743 -0.82835495 -3.0579481 -0.74687856 -0.8056137 -3.0479593 -0.74302137 -1.1120013 -4.316041 -1.0670263 -1.0821919 -4.3096042 -1.0636512 -1.0573407 -4.3227625 -1.0653387 -1.0177729 -4.2744069 -1.0513563 -0.98758882 -4.2635517 -1.047017 -0.95864123 -4.2572222 -1.0438831 -0.92628735 -4.2345796 -1.0366508 -0.89968306 -4.2373357 -1.0359275 -0.84160686 -4.0868754 -0.99639124 -0.75203413 -3.7683516 -0.91442573 -0.73110348 -3.7843304 -0.91731864 -0.79613447 -4.2619548 -1.0368918 -0.77134538 -4.2744007 -1.0388205 -0.74443871 -4.2752285 -1.0378562 -0.72524834 -4.3218307 -1.0484635 -0.70242411 -4.349195 -1.0542493 -0.68256056 -4.3975396 -1.0653387 -0.64899993 -4.3574872 -1.0542493 -0.62485033 -4.379643 -1.0588297 -0.6029408 -4.4199367 -1.0679905 -0.56093144 -4.3090248 -1.0393026 -0.5461545 -4.406776 -1.062928 -0.5094825 -4.3281145 -1.0424366 -0.4793756 -4.2993288 -1.0344812 -0.45045224 -4.278059 -1.0284542 -0.43316567 -4.3715277 -1.0511153 -0.40624478 -4.373137 -1.0508742 -0.38007274 -4.3832827 -1.0528028 -0.34983137 -4.3439341 -1.0424366 -0.31743398 -4.2685704 -1.0231506 -0.29294661 -4.2956133 -1.0294186 -0.26754099 -4.3128285 -1.0332757 -0.24295889 -4.3483043 -1.0417134 -0.21699268 -4.364253 -1.0453295 -0.19050397 -4.3722892 -1.047017 -0.16313194 -4.3588285 -1.0434009 -0.13728622 -4.3888483 -1.0506332 -0.10963012 -4.3605022 -1.0434009 -0.082890704 -4.3620629 -1.0436419 -0.056013979 -4.3537555 -1.0414723 -0.029148243 -4.3307257 -1.0356865 -0.0025745439 -4.3298526 -1.0354455 --0.024043716 -4.338521 -1.0376151 --0.050466865 -4.3217945 -1.0335168 --0.07744015 -4.3466325 -1.0397848 --0.10349813 -4.3208499 -1.0335168 --0.13260025 -4.4054985 -1.0547314 --0.15987721 -4.4113913 -1.0564189 --0.1879345 -4.433598 -1.0622047 --0.21541883 -4.4381776 -1.0636512 --0.24152867 -4.4164224 -1.0585886 --0.27022105 -4.4410119 -1.0650977 --0.2966187 -4.4266825 -1.0619637 --0.32135808 -4.3918705 -1.0537671 --0.34799197 -4.3859463 -1.0528028 --0.37439939 -4.3779263 -1.0513563 --0.40258801 -4.3900433 -1.0549725 --0.4272418 -4.3643098 -1.0491867 --0.45683321 -4.3886333 -1.0559368 --0.48140636 -4.3645258 -1.0506332 --0.50862783 -4.365346 -1.0515975 --0.54286808 -4.4228272 -1.0667852 --0.57621545 -4.4675379 -1.0788389 --0.91163838 -6.7374249 -1.6487404 --0.9517355 -6.7230558 -1.6465707 --0.99353784 -6.7209301 -1.647535 --1.0301707 -6.6849732 -1.6400616 --1.0724005 -6.686192 -1.6419903 --1.1126072 -6.6746998 -1.6407849 --1.1585097 -6.6964355 -1.6480172 --1.2021486 -6.7035298 -1.6516333 --1.2390021 -6.6731272 -1.6458474 --1.2802906 -6.6673055 -1.6463296 --1.325146 -6.6793146 -1.6513922 --1.3686377 -6.6834173 -1.6545261 --1.405406 -6.6549535 -1.6494635 --1.4441484 -6.6367221 -1.6470529 --1.4837818 -6.6230011 -1.6458474 --1.5182841 -6.5872931 -1.6390973 --1.5609137 -6.5872965 -1.6415081 --1.6026815 -6.5832524 -1.6429546 --1.6517591 -6.60813 -1.6518743 --1.6862428 -6.5743699 -1.6458474 --1.722598 -6.548883 -1.6419903 --1.7675519 -6.5559931 -1.6465707 --1.8033502 -6.5291214 -1.6424724 --1.8436425 -6.5188675 -1.6427135 --1.8830668 -6.505568 -1.6422313 --1.9301174 -6.5180845 -1.6484993 --1.9785178 -6.5339832 -1.6557316 --2.01283 -6.5031791 -1.65091 --2.0570869 -6.5045853 -1.6545261 --2.0996459 -6.5001521 -1.6566958 --2.1376657 -6.481617 -1.6552494 --2.182972 -6.4849339 -1.6595887 --1.3212644 -3.8482838 -0.97059619 --1.3419627 -3.8318615 -0.96842653 --2.2921689 -6.4162374 -1.6523565 --2.3374755 -6.4184651 -1.6566958 --2.3761389 -6.4021826 -1.6562136 --2.4105692 -6.3747745 -1.6528386 --2.4440551 -6.3453736 -1.6489815 --2.4964159 -6.3645883 -1.6581423 --2.5278597 -6.330225 -1.6530797 --2.5659225 -6.3127971 -1.6525975 --2.6068354 -6.3023143 -1.654044 --2.6450799 -6.285306 -1.653803 --2.6965868 -6.2992902 -1.6619995 --2.7685168 -6.3591461 -1.682732 --1.3793254 -3.1173177 -0.80666518 --1.3988254 -3.1096807 -0.80690628 --2.8515785 -6.2338629 -1.6627227 --2.8844547 -6.2048087 -1.6595887 --1.6071776 -3.4036801 -0.89489865 --1.6246717 -3.3867552 -0.89297003 --1.6394663 -3.3645103 -0.88959503 --1.6570646 -3.3482997 -0.88790751 --1.6784502 -3.3398032 -0.88838965 --1.7037665 -3.3389492 -0.89104146 --1.7353886 -3.3499722 -0.89706832 --1.7852879 -3.3950863 -0.9127382 --2.0891013 -3.9139693 -1.0619637 --3.2715337 -6.0384393 -1.6658567 --3.3066525 -6.0148506 -1.6648924 --3.3316743 -5.9732604 -1.6588656 --3.3883426 -5.9881778 -1.6689907 --3.446768 -6.0051479 -1.679839 --3.4742703 -5.9679513 -1.6752586 --3.5019395 -5.9314799 -1.6709193 --3.5462472 -5.9232025 -1.6747764 --3.5845397 -5.9046497 -1.6757407 --3.6023839 -5.8527932 -1.667062 --3.6449089 -5.8412819 -1.6701961 --3.6822386 -5.8212676 -1.6709193 --3.7409427 -5.8345079 -1.6815265 --3.7793171 -5.8155127 -1.682732 --3.7978425 -5.7662802 -1.6750176 --3.834769 -5.7452898 -1.6757407 --3.8514581 -5.6943231 -1.6675442 --2.1066172 -3.0747278 -0.88573778 --2.1304269 -3.0689175 -0.88790751 --2.1525688 -3.0605497 -0.88935393 --4.0559645 -5.6905432 -1.69575 --4.0731883 -5.64116 -1.6882766 --4.1037135 -5.6105785 -1.6865891 --4.1392179 -5.5868526 -1.6870713 --4.1769161 -5.5660067 -1.6885178 --4.2162766 -5.5472255 -1.6906874 --4.2502346 -5.5212507 -1.6906874 --4.2744827 -5.4828229 -1.6868303 --4.2797728 -5.4206963 -1.6754997 --4.3184085 -5.401155 -1.6776694 --4.366128 -5.3926563 -1.6834552 --4.4003654 -5.3672657 -1.6839373 --4.4350758 -5.3424044 -1.6846606 --4.477766 -5.3269758 -1.6885178 --4.5229502 -5.3141794 -1.6933392 --4.5453339 -5.2745657 -1.6894821 --4.5520859 -5.2173295 -1.679839 --4.5975084 -5.2045727 -1.6849016 --4.625474 -5.1719251 -1.6834552 --4.6532121 -5.1391306 -1.6820087 --4.6885929 -5.1147738 -1.6834552 --4.7377167 -5.105113 -1.6899642 --4.7556586 -5.0618029 -1.6851428 --4.8066969 -5.0536208 -1.6923749 --4.8450212 -5.0317211 -1.6950268 --4.8595428 -4.9852214 -1.6892409 --4.9057212 -4.9711957 -1.6947857 --4.9080048 -4.9128556 -1.6849016 --4.9339156 -4.8785548 -1.6834552 --4.9540353 -4.838697 -1.6800802 --4.9920144 -4.8162932 -1.682973 --5.018662 -4.7828941 -1.6820087 --5.0373135 -4.7420335 -1.6783926 --5.0663152 -4.7110362 -1.6783926 --5.1315846 -4.7133365 -1.6906874 --5.1834126 -4.7026248 -1.6984018 --5.2280731 -4.684978 -1.7037054 --5.2632627 -4.6585989 -1.7058752 --5.282979 -4.6185527 -1.7029823 --5.3126879 -4.5873184 -1.7034644 --5.3459048 -4.559041 -1.7051519 --5.3715506 -4.5242782 -1.7044287 --5.3798084 -4.4751005 -1.6981608 --5.3906655 -4.4284558 -1.6928571 --5.4222593 -4.3989639 -1.6943035 --5.4446034 -4.3619704 -1.6928571 --5.4682207 -4.3260732 -1.6918929 --5.5091953 -4.3037887 -1.6964732 --5.5247393 -4.2616072 -1.6930982 --5.5662274 -4.2393856 -1.6979197 --5.5696378 -4.1882405 -1.6909285 --5.5765276 -4.1401057 -1.6851428 --5.6026087 -4.1063848 -1.6853838 --5.587595 -4.0429225 -1.6730889 --5.6225648 -4.015893 -1.6762229 --5.658999 -3.9897041 -1.679839 --5.6961203 -3.9637735 -1.6836963 --5.717134 -3.9265509 -1.682732 --5.7379055 -3.8892198 -1.6817677 --5.751173 -3.8469265 -1.6786337 --5.7754793 -3.8121002 -1.6788747 --5.8239746 -3.7930055 -1.6863481 --5.7989612 -3.7262528 -1.6721246 --5.8184366 -3.6885231 -1.6711603 --5.821209 -3.6404057 -1.6653745 --5.8153496 -3.5872996 -1.657178 --5.8380809 -3.5520539 -1.6574191 --5.8397913 -3.5041842 -1.6516333 --5.8611827 -3.468286 -1.6516333 --5.9100184 -3.4483929 -1.6595887 --5.9293833 -3.4110973 -1.6591066 --5.9392262 -3.3684287 -1.6559726 --5.9851985 -3.3461263 -1.6632049 --5.9869156 -3.2990375 -1.6579012 --6.0121632 -3.2650185 -1.6593477 --6.0457759 -3.2353914 -1.6632049 --6.0449085 -3.1873741 -1.6574191 --6.0540166 -3.1448565 -1.6545261 --6.093936 -3.118257 -1.6603119 --6.0921531 -3.0703275 -1.6545261 --6.1213102 -3.0380645 -1.6574191 --6.1503005 -3.0055594 -1.6603119 --6.183495 -2.9749155 -1.6644102 --6.2077727 -2.9398251 -1.6660978 --6.243289 -2.9098763 -1.6709193 --6.2874928 -2.8836465 -1.6781515 --6.3360319 -2.8589785 -1.6865891 --6.3605518 -2.8231962 -1.6885178 --6.3777552 -2.7841153 -1.6885178 --6.3866911 -2.7414858 -1.6863481 --6.4159112 -2.7075267 -1.6897231 --6.4557128 -2.6777723 -1.695991 --6.4953899 -2.6476312 -1.7022591 --6.5502563 -2.6232347 -1.7126253 --6.5978408 -2.5954232 -1.7210629 --6.6118312 -2.5541916 -1.7205807 --6.6428061 -2.5194223 -1.724679 --6.6999807 -2.4941838 -1.7357684 --6.7379498 -2.4613478 -1.7417953 --6.753839 -2.4202855 -1.7420365 --6.8015265 -2.390378 -1.7507151 --6.8252416 -2.3517599 -1.7531259 --6.835865 -2.3085952 -1.7521616 --6.8545089 -2.2681313 -1.7533669 --6.8969183 -2.2353013 -1.7608403 --6.9299312 -2.1991019 -1.7659029 --7.0100288 -2.1772552 -1.7832602 --6.8728194 -2.0885131 -1.7442061 --6.8836441 -2.0457504 -1.743724 --6.9957929 -2.0324299 -1.769519 --7.0557485 -2.0029755 -1.7818139 --7.1595616 -1.9850414 -1.8054391 --7.228754 -1.9565318 -1.8201448 --7.4799089 -1.9752923 -1.8816189 --7.5698981 -1.9494364 -1.9016281 --7.6899714 -1.9301058 -1.9293517 --7.7912335 -1.904767 -1.9522538 --7.8462062 -1.8672545 -1.9633434 --7.8433328 -1.8157946 -1.9597272 --7.8713698 -1.7714678 -1.9640665 --7.8868322 -1.7241722 -1.9652719 --7.9361882 -1.684001 -1.9751559 --7.9340138 -1.6327324 -1.9720221 --7.9448342 -1.5842092 -1.9722631 --7.9277229 -1.5302842 -1.965513 --7.9112039 -1.4768071 -1.9590039 --7.8991036 -1.4244509 -1.9537003 --7.9402051 -1.381608 -1.9618969 --7.9695907 -1.3363898 -1.9672005 --7.9565616 -1.2840655 -1.9618969 --7.9863491 -1.2386386 -1.9674416 --7.9899588 -1.1890411 -1.9664773 --7.9788489 -1.1373936 -1.9618969 --7.9818311 -1.0878912 -1.9609326 --7.9777694 -1.0375199 -1.9582808 --8.0042114 -0.99105114 -1.9633434 --8.0159254 -0.94259876 -1.9647897 --8.0389204 -0.89532739 -1.9691291 --8.045228 -0.84608603 -1.9693702 --8.0183964 -0.79355592 -1.9614147 --8.0134506 -0.74344587 -1.9590039 --8.0110931 -0.69367719 -1.9573164 --8.0055246 -0.64373249 -1.9549057 --8.0519094 -0.59775472 -1.965513 --8.0622034 -0.54879826 -1.9672005 --8.0731688 -0.49979782 -1.9691291 --8.0557346 -0.44912079 -1.9640665 --8.0118113 -0.39738229 -1.952495 --8.0305815 -0.34892908 -1.9565933 --8.0509987 -0.30033252 -1.9611737 --8.0478392 -0.25077644 -1.9599683 --8.032733 -0.2009808 -1.95587 --8.0027647 -0.15110728 -1.9481556 --8.0297422 -0.10233054 -1.9546646 --8.0535107 -0.05320958 -1.9604504 --8.0303936 -0.0037855431 -1.9546646 --8.0302658 0.045488097 -1.9546646 --8.0589485 0.095107786 -1.9618969 --8.0378361 0.1441863 -1.9568343 --8.0358295 0.19347931 -1.9565933 --7.9947186 0.24157505 -1.9467092 --8.0018148 0.2909438 -1.9488788 --7.9824257 0.33929217 -1.9445394 --7.9549904 0.38703513 -1.9382715 --7.9447136 0.43541273 -1.936343 --7.9748278 0.48616502 -1.9445394 --8.0646534 0.54134172 -1.9676827 --7.6650147 -0.19095019 -1.9540584 --7.6641068 -0.14387852 -1.953555 --7.6648455 -0.09684974 -1.953555 --7.6652951 -0.049817309 -1.953555 --7.6596498 -0.0027805967 -1.9520446 --7.6517806 0.044173885 -1.9500308 --7.6542687 0.091157921 -1.950786 --7.6651769 0.13833088 -1.9538068 --7.6661186 0.18540761 -1.9543102 --7.62711 0.23130038 -1.9444927 --7.6487589 0.27894041 -1.9505342 --7.6353002 0.3253732 -1.9475135 --7.6476598 0.37292269 -1.9512894 --7.6432953 0.41973481 -1.950786 --7.6454058 0.46692002 -1.9520446 --7.6201878 0.51233047 -1.9462547 --7.6159353 0.55900663 -1.9460031 --7.6152563 0.60595679 -1.9467583 --7.6027164 0.65192801 -1.9444927 --7.6053195 0.69918495 -1.9462547 --7.5893278 0.74470359 -1.943234 --7.5923162 0.79205978 -1.9452479 --7.5776939 0.83756775 -1.9427305 --7.5762572 0.88449651 -1.9437375 --7.57549 0.93155724 -1.9449961 --7.5456362 0.97492301 -1.9387028 --7.5519795 1.0228919 -1.9419754 --7.5714335 1.0728754 -1.9487721 --7.5407734 1.1157725 -1.9424788 --7.5529151 1.1649704 -1.9475135 --7.5236464 1.2077652 -1.9417236 --7.5180035 1.2542251 -1.9422271 --7.512073 1.3006613 -1.9427305 --7.497283 1.3455336 -1.9409684 --7.5079165 1.3950458 -1.9460031 --7.4849586 1.4383484 -1.9422271 --7.4664998 1.4823641 -1.9397098 --7.4525228 1.5271785 -1.9384511 --7.4458528 1.5734777 -1.9392062 --7.4388947 1.6197526 -1.9399614 --7.4165392 1.6626148 -1.936689 --7.3929954 1.7050463 -1.9331647 --7.3786273 1.7494839 -1.9321579 --7.3837395 1.7986184 -1.9364372 --7.3519087 1.8387254 -1.9308991 --7.377985 1.8934222 -1.9409684 --7.3381505 1.9312689 -1.9334165 --7.2971954 1.9684464 -1.9256128 --7.315764 2.0216894 -1.9339199 --7.2845964 2.061271 -1.9288853 --7.2178941 2.090318 -1.9142848 --7.2671041 2.1529827 -1.9311509 --7.2222648 2.1879935 -1.922592 --7.2087035 2.2322671 -1.922592 --7.2114801 2.2817111 -1.9271232 --7.1605072 2.3140149 -1.9170539 --7.1645555 2.3639712 -1.9220885 --7.1957755 2.4233294 -1.9346751 --7.1670413 2.4627194 -1.9308991 --7.1326156 2.4999278 -1.9256128 --7.114408 2.5426686 -1.9248576 --7.1014004 2.5872676 -1.9256128 --7.0844841 2.6304555 -1.925361 --7.033813 2.6608651 -1.9157952 --7.0218692 2.7057133 -1.9170539 --7.0384698 2.761826 -1.926368 --7.0213909 2.8049612 -1.926368 --6.9771519 2.8370559 -1.9188161 --6.9953837 2.894613 -1.9288853 --6.9346757 2.9194589 -1.9168022 --6.9397631 2.9718587 -1.9233472 --6.9347072 3.0201802 -1.9271232 --6.8974614 3.0544455 -1.9218369 --6.8882976 3.1010797 -1.9246058 --6.8506589 3.1348314 -1.9193195 --6.8391929 3.1804798 -1.9215851 --6.8037982 3.2149427 -1.9170539 --6.7821989 3.2557919 -1.9165505 --6.733387 3.2833493 -1.9082433 --6.7599478 3.3477936 -1.9218369 --6.7012343 3.3700788 -1.9107606 --6.7071505 3.4247754 -1.9185643 --6.6997581 3.472991 -1.922592 --6.6757526 3.5126827 -1.9218369 --6.6412678 3.5467403 -1.9180609 --6.6108718 3.5828125 -1.9155436 --6.5904593 3.6242414 -1.916047 --6.5520391 3.655653 -1.9112641 --6.5193782 3.6900666 -1.9082433 --6.4907384 3.7266264 -1.9064811 --6.4869862 3.7775831 -1.912271 --6.4811854 3.8276494 -1.9175574 --6.4509349 3.8633676 -1.9155436 --6.4254537 3.9018724 -1.91504 --6.4055123 3.9437616 -1.9162987 --6.3902245 3.9886272 -1.9190677 --6.350091 4.0179305 -1.9142848 --6.3016925 4.0416679 -1.9069847 --6.2832661 4.0844774 -1.9089985 --6.2435384 4.1133709 -1.9044673 --6.2423291 4.1677237 -1.9120193 --6.2022099 4.1961865 -1.9074881 --6.1308451 4.2029738 -1.8931395 --6.1287875 4.2570753 -1.9006914 --6.1096745 4.299613 -1.902957 --6.0808134 4.3353348 -1.9022018 --6.0454674 4.3663316 -1.8994327 --6.0013781 4.3907728 -1.8938947 --5.9968734 4.4442234 -1.9011948 --5.9834237 4.4913931 -1.905726 --5.9611459 4.5321221 -1.9074881 --5.9278569 4.5644808 -1.905726 --5.8951592 4.5971971 -1.9042156 --5.8698783 4.6356816 -1.9052225 --5.8345213 4.6661711 -1.902957 --5.8012676 4.6982293 -1.9014466 --5.7738276 4.7349639 -1.90195 --5.7722154 4.7931771 -1.9112641 --5.7182503 4.8079524 -1.902957 --5.6982222 4.8511033 -1.9062295 --5.6639504 4.882185 -1.9047191 --5.6287832 4.9123921 -1.902957 --5.587656 4.9372253 -1.899181 --5.5673552 4.9804506 -1.9027052 --5.5158877 4.9956779 -1.8954051 --5.4865575 5.0307369 -1.8959085 --5.4527488 5.0616736 -1.8949015 --5.4441576 5.1162434 -1.902957 --5.4105587 5.1475506 -1.9022018 --5.3558679 5.1584978 -1.8938947 --5.3012471 5.1689692 -1.8855875 --5.2721868 5.2041192 -1.8865944 --5.2292013 5.2254257 -1.8825667 --5.2018032 5.2622309 -1.8843288 --5.2126923 5.3383632 -1.9004396 --5.1825261 5.3730335 -1.9014466 --5.1434517 5.3984256 -1.899181 --5.1002808 5.419313 -1.8954051 --5.0629787 5.4462528 -1.8938947 --5.0851083 5.5378056 -1.9152918 --5.0230732 5.5380797 -1.9044673 --4.9747896 5.5529389 -1.8989292 --4.9406238 5.5833592 -1.8989292 --4.9190106 5.6281424 -1.9039639 --4.8913412 5.6662769 -1.9067329 --4.8432946 5.6807184 -1.9014466 --4.8108411 5.7132902 -1.9024535 --4.7794075 5.7471657 -1.9039639 --4.7624817 5.7988195 -1.9115158 --4.7383952 5.8422132 -1.9162987 --4.7351313 5.9119658 -1.9298922 --4.6759515 5.9120655 -1.9203265 --4.6431623 5.9452214 -1.9218369 --4.5971389 5.9613376 -1.9178091 --4.5510931 5.9771137 -1.9137814 --4.52073 6.0134349 -1.9165505 --4.4722104 6.0255184 -1.9115158 --4.4174204 6.0286465 -1.9037122 --4.4109783 6.0979805 -1.9173057 --4.3852901 6.1414704 -1.922592 --4.3263354 6.1382036 -1.9130262 --4.3046198 6.1876721 -1.9203265 --4.2484932 6.1876407 -1.9120193 --4.2283635 6.2400308 -1.9203265 --4.194838 6.273098 -1.922592 --4.1530695 6.2938724 -1.9210817 --4.1138449 6.3184257 -1.9208299 --4.0880761 6.363905 -1.9271232 --4.0396252 6.3741555 -1.922592 --4.018909 6.4283633 -1.9316543 --3.9722769 6.44137 -1.9281301 --3.9432411 6.4829855 -1.9334165 --3.8939281 6.4912906 -1.9286336 --3.835299 6.4834094 -1.9190677 --3.8154397 6.5410938 -1.9293888 --3.7771628 6.5677376 -1.9303957 --3.7425213 6.6008925 -1.9334165 --3.7071426 6.6330247 -1.9361855 --3.6738455 6.669209 -1.9402132 --3.6365492 6.6984301 -1.9422271 --3.5935538 6.7172041 -1.9412202 --3.5306065 6.6980338 -1.929137 --3.5112987 6.7616553 -1.9414719 --3.4547572 6.7537789 -1.9329131 --3.4280584 6.8042355 -1.9414719 --3.3862438 6.8251414 -1.9414719 --3.3430274 6.8431821 -1.9407167 --3.3143997 6.8914742 -1.9487721 --3.2662539 6.8994355 -1.9452479 --3.2234495 6.9184699 -1.9449961 --3.1591551 6.8906131 -1.9314026 --3.1347246 6.9495659 -1.9427305 --3.0986974 6.9837074 -1.9470099 --3.0503681 6.9901714 -1.9434857 --3.0181067 7.0336585 -1.9505342 --2.980159 7.0645285 -1.9540584 --2.9271169 7.0594382 -1.9475135 --2.8932421 7.1005678 -1.9540584 --2.8575335 7.1379528 -1.9595965 --2.8094316 7.1445441 -1.9565758 --2.7624023 7.1535225 -1.9543102 --2.7174277 7.167623 -1.953555 --2.676435 7.1923251 -1.9558206 --2.6325855 7.2095208 -1.9560723 --2.5847085 7.2155166 -1.9533032 --2.5394237 7.2285008 -1.952548 --2.494077 7.2412014 -1.9517928 --2.4561005 7.2756243 -1.9570793 --2.4074602 7.2786131 -1.9538068 --2.3657374 7.3024545 -1.9563241 --2.3217638 7.3196006 -1.9570793 --2.277956 7.3374057 -1.9580861 --2.2222013 7.3160567 -1.9485204 --2.1844356 7.3536749 -1.9550654 --2.1462915 7.3911037 -1.9616104 --2.1040709 7.4153066 -1.9646312 --2.0523274 7.405694 -1.9585897 --2.0131679 7.4415026 -1.964883 --1.9482002 7.3807278 -1.9452479 --1.9154239 7.4412789 -1.9583379 --1.8711423 7.4585238 -1.9598483 --1.8104067 7.4087563 -1.9434857 --1.7763377 7.4677424 -1.9563241 --1.7267731 7.4624724 -1.9520446 --1.6869 7.4993649 -1.9590931 --1.6462257 7.5341568 -1.9656382 --1.5985601 7.5374889 -1.963876 --1.5511107 7.5414681 -1.9623656 --1.5061324 7.557487 -1.9641278 --1.4593654 7.5646858 -1.9636242 --1.4129219 7.5734978 -1.9636242 --1.3679705 7.5905972 -1.9658898 --1.3217014 7.6007547 -1.9663934 --1.2753592 7.6106305 -1.9668968 --1.2292538 7.6221342 -1.9679037 --1.1824621 7.6295333 -1.9679037 --1.1369075 7.6452608 -1.9701693 --1.0925697 7.6702971 -1.9749522 --1.047706 7.6931581 -1.9792316 --0.99561638 7.6620131 -1.9694141 --0.94751459 7.6593337 -1.9671485 --0.89733678 7.6380901 -1.9601001 --0.85109586 7.6492233 -1.9616104 --0.80546027 7.6668139 -1.964883 --0.75668776 7.6542764 -1.9603517 --0.70997578 7.6616659 -1.9611069 --0.6637857 7.6755199 -1.9636242 --0.61706465 7.6842718 -1.964883 --0.57119197 7.705286 -1.9694141 --0.52337706 7.7009215 -1.9674002 --0.47623476 7.7059197 -1.9679037 --0.42818969 7.6951685 -1.9643794 --0.38039032 7.6860518 -1.9613587 --0.3333483 7.6911416 -1.9621139 --0.28575382 7.682404 -1.9593449 --0.23854992 7.6820779 -1.9588413 --0.19152984 7.6882343 -1.9601001 --0.14480749 7.7134557 -1.9663934 --0.09800382 7.7558107 -1.9772178 --0.050121602 7.7117486 -1.9656382 --0.0028034633 7.7148142 -1.9663934 -0.044544876 7.7166219 -1.9668968 -0.091720209 7.7016873 -1.9631208 -0.13874878 7.6884003 -1.9598483 -0.18603805 7.6922417 -1.9611069 -0.23247182 7.6658044 -1.9545619 -0.27936307 7.6603646 -1.953555 -0.32693708 7.6720433 -1.9570793 -0.37475908 7.6853595 -1.9611069 -0.42121929 7.6703529 -1.9578345 -0.46851152 7.6714878 -1.9588413 -0.51499021 7.6597781 -1.9565758 -0.56346679 7.676743 -1.9618621 -0.61017621 7.6683178 -1.9606035 -0.65647292 7.6557508 -1.9583379 -0.70308113 7.6477237 -1.9573309 -0.75131589 7.6567502 -1.9608552 -0.7976805 7.6462207 -1.9593449 -0.84468806 7.6421442 -1.9595965 -0.8919 7.6397014 -1.9603517 -0.93840533 7.6312032 -1.9595965 -0.98657542 7.6358595 -1.9623656 -1.0261381 7.5759559 -1.9482687 -1.0738255 7.5781407 -1.9505342 -1.1224281 7.5857701 -1.9543102 -1.1671826 7.5672622 -1.9512894 -1.2135924 7.559958 -1.9512894 -1.261867 7.5638247 -1.9543102 -1.3070986 7.5492644 -1.952548 -1.3501482 7.5230031 -1.9477651 -1.3994646 7.5317044 -1.9522964 -1.4432783 7.5106201 -1.9490238 -1.4927269 7.5187101 -1.953555 -1.5409693 7.5198383 -1.9563241 -1.5850806 7.5007725 -1.9538068 -1.6318982 7.494688 -1.9548136 -1.6820871 7.5034213 -1.9598483 -1.7091779 7.4109135 -1.9379476 -1.768235 7.4577303 -1.9533032 -1.8130455 7.4429789 -1.9522964 -1.8640802 7.4533086 -1.9580861 -1.9032837 7.41642 -1.9512894 -1.9551572 7.4289365 -1.9578345 -1.9946553 7.3943739 -1.9517928 -2.0410197 7.3857274 -1.9527998 -2.0881433 7.3795834 -1.9545619 -2.1309619 7.3582654 -1.9522964 -2.1757963 7.3441238 -1.9520446 -2.2194154 7.326004 -1.950786 -2.2643251 7.3122478 -1.950786 -2.3088577 7.2972937 -1.9505342 -2.3541846 7.2848315 -1.9510376 -2.3988392 7.2702494 -1.9510376 -2.4344473 7.2287946 -1.9437375 -2.4796999 7.2164669 -1.9444927 -2.5239327 7.2011161 -1.9444927 -2.5680704 7.1854939 -1.9444927 -2.6150925 7.1777854 -1.9467583 -2.6540332 7.147995 -1.9429823 -2.6992121 7.1351962 -1.9439892 -2.7467692 7.1284337 -1.9467583 -2.7876289 7.1042385 -1.9447443 -2.8125 7.0402646 -1.9316543 -2.868767 7.0551505 -1.9407167 -2.903863 7.0177407 -1.9351786 -2.9427381 6.9899793 -1.9324095 -2.9996669 7.0047092 -1.9417236 -3.0263624 6.9489045 -1.9311509 -3.0791304 6.9532123 -1.9376959 -3.111011 6.9103603 -1.9308991 -3.16342 6.9131432 -1.9371924 -3.207819 6.8979902 -1.9384511 -3.2422287 6.8615518 -1.9336683 -3.2909698 6.8554883 -1.9376959 -3.3270347 6.8229876 -1.9341717 -3.3671193 6.7989759 -1.9331647 -3.3887739 6.7384143 -1.9215851 -3.4370975 6.7312856 -1.9256128 -3.4698734 6.6937437 -1.9208299 -3.5275528 6.7040172 -1.930144 -3.5617838 6.6694403 -1.926368 -3.5966454 6.6363983 -1.9230955 -3.6363652 6.6125088 -1.922592 -3.6778133 6.5917625 -1.9230955 -3.6986468 6.5345387 -1.9127744 -3.7357812 6.5066853 -1.9112641 -3.7736874 6.4802952 -1.9102572 -3.8232205 6.4736853 -1.9152918 -3.8817642 6.4816566 -1.9248576 -3.9068954 6.4337263 -1.9175574 -3.9305704 6.3840842 -1.9097537 -3.9896522 6.3918662 -1.9195713 -4.0189657 6.3517265 -1.9147884 -4.0599532 6.3302059 -1.9157952 -4.0786757 6.2743402 -1.9062295 -4.1325374 6.2726336 -1.9135296 -4.1387067 6.1988635 -1.8984258 -4.1940174 6.1990037 -1.9064811 -4.2418242 6.1875215 -1.9110124 -4.2625957 6.1367364 -1.9032087 -4.299613 6.1096745 -1.902957 -4.3325262 6.0768733 -1.9009432 -4.3793635 6.0635128 -1.9052225 -4.4062009 6.0224676 -1.9006914 -4.4447999 5.9976511 -1.9014466 -4.4733834 5.9594288 -1.8979223 -4.5151372 5.9388027 -1.9001878 -4.5544438 5.9148207 -1.9014466 -4.5971971 5.8951592 -1.9042156 -4.6410794 5.8767142 -1.9074881 -4.6963925 5.8723135 -1.9155436 -4.7067556 5.8117976 -1.9049708 -4.692008 5.7214413 -1.8843288 -4.7418637 5.7104144 -1.8903704 -4.7836633 5.6893597 -1.8931395 -4.8172278 5.6584268 -1.8926359 -4.8455381 5.6214314 -1.8901186 -4.8678493 5.5777392 -1.8853358 -4.9045453 5.5506668 -1.8863426 -4.9307685 5.5118127 -1.8833219 -4.9800868 5.4986711 -1.8893634 -5.0032678 5.4565964 -1.8853358 -5.0340214 5.4229569 -1.8843288 -5.074491 5.3997245 -1.8870978 -5.1215358 5.3832116 -1.8923842 -5.15447 5.3516855 -1.8923842 -5.1162724 5.2471962 -1.8659524 -5.1626487 5.2301693 -1.8712388 -5.2028522 5.2066092 -1.8742596 -5.2291951 5.1691437 -1.8722457 -5.2580447 5.1342559 -1.8712388 -5.3089519 5.1207099 -1.8782873 -5.3563867 5.103394 -1.8840771 -5.3854856 5.0684419 -1.8833219 -5.412231 5.0313478 -1.8818115 -5.438724 4.9941168 -1.8803011 -5.4706984 4.9619517 -1.8808045 -5.4794178 4.908916 -1.8732526 -5.5239301 4.8880301 -1.8782873 -5.5749497 4.8725147 -1.8855875 -5.5659161 4.8046966 -1.8722457 -5.6416874 4.8100142 -1.8881048 -5.6629519 4.7684493 -1.8853358 -5.6906157 4.7323747 -1.8848323 -5.7195458 4.6973686 -1.8848323 -5.7700577 4.6798663 -1.8921325 -5.7948875 4.6413484 -1.8908738 -5.8065581 4.5924954 -1.8853358 -5.8147974 4.5412917 -1.8787907 -5.8954315 4.546309 -1.8961602 -5.9224458 4.5094638 -1.8959085 -5.9020438 4.4369802 -1.8803011 -5.9563565 4.4208717 -1.8891118 -5.975564 4.3785205 -1.8865944 -5.9678159 4.3168135 -1.8755182 -6.0414467 4.3138604 -1.8906221 -6.0195498 4.2426963 -1.8752664 -6.0812182 4.2305541 -1.8865944 -6.1254115 4.2057614 -1.8923842 -6.1366816 4.1583242 -1.887853 -6.1846066 4.1356564 -1.8949015 -6.2235975 4.1066928 -1.899181 -6.2413797 4.0636754 -1.8969154 -6.2710819 4.028441 -1.8984258 -6.2940469 3.9888504 -1.8979223 -6.305274 3.9419465 -1.8938947 -6.3342853 3.9062321 -1.8954051 -6.3523464 3.8637712 -1.8936429 -6.3726149 3.8227296 -1.8926359 -6.400948 3.7865129 -1.8941463 -6.4056706 3.7364373 -1.8886082 -6.4402213 3.7038181 -1.8921325 -6.4661937 3.6661413 -1.8931395 -6.5054626 3.6358404 -1.898174 -6.5259538 3.5949214 -1.8976706 -6.5453377 3.5534256 -1.8969154 -6.5661645 3.5127409 -1.8966637 -6.6021485 3.480058 -1.9009432 -6.6139297 3.4345758 -1.898174 -6.625402 3.38908 -1.8954051 -6.6547151 3.3527186 -1.8979223 -6.6768956 3.3126831 -1.8984258 -6.6997046 3.2729268 -1.899181 -6.7170444 3.2304981 -1.8984258 -6.7446122 3.1929495 -1.9006914 -6.7614455 3.1502788 -1.8999362 -6.783287 3.1099422 -1.9006914 -6.7969484 3.0658743 -1.899181 -6.8218246 3.0268593 -1.9009432 -6.8411555 2.9853315 -1.9011948 -6.8584552 2.9429171 -1.9009432 -6.8674664 2.897017 -1.8984258 -6.882431 2.8537123 -1.8976706 -6.905189 2.8136201 -1.899181 -6.9286122 2.773716 -1.9009432 -6.9418983 2.7297337 -1.8999362 -6.9774761 2.6944098 -1.9052225 -6.9911623 2.6505167 -1.9044673 -6.994596 2.6028438 -1.9009432 -7.0049806 2.5578847 -1.8994327 -7.0223656 2.5155077 -1.8999362 -7.0340161 2.4710886 -1.8989292 -7.0655165 2.4335561 -1.9034604 -7.0812325 2.3904667 -1.9037122 -7.1040363 2.3497076 -1.9059777 -7.1358128 2.3117418 -1.9107606 -7.1258783 2.2603047 -1.9042156 -7.1137338 2.2085025 -1.8971671 -7.1549311 2.1732516 -1.9047191 -7.1839027 2.1339946 -1.9089985 -7.1884966 2.0874455 -1.9067329 -7.213273 2.0467334 -1.9100055 -7.2154369 1.9995914 -1.9072363 -7.2322416 1.9565445 -1.9084951 -7.2506604 1.9138608 -1.9102572 -7.2528949 1.8669226 -1.9077399 -7.2754779 1.825211 -1.9107606 -7.2856002 1.7803054 -1.9105089 -7.3076849 1.7382563 -1.9135296 -7.2984128 1.6888018 -1.9082433 -7.3143029 1.6452624 -1.9097537 -7.3138599 1.5980787 -1.9069847 -7.3225813 1.5529708 -1.9067329 -7.3442955 1.5105463 -1.9100055 -7.3695607 1.4686705 -1.9142848 -7.3993397 1.4274583 -1.9198229 -7.3965425 1.3798995 -1.9168022 -7.3886786 1.3315703 -1.9125228 -7.3805008 1.2833897 -1.9082433 -7.4178257 1.2430396 -1.916047 -7.4320011 1.1985801 -1.9178091 -7.4210443 1.1501385 -1.9130262 -7.4327483 1.1052942 -1.9142848 -7.4690919 1.0638993 -1.9220885 -7.4668489 1.016874 -1.9198229 -7.4758267 0.97141331 -1.9205781 -7.4701209 0.92409784 -1.9175574 -7.4554658 0.87587225 -1.912271 -7.478013 0.83203715 -1.9168022 -7.4550653 0.78320342 -1.909502 -7.5040331 0.74182719 -1.9210817 -7.5055523 0.69550133 -1.9203265 -7.5067863 0.6491847 -1.9195713 -7.526063 0.604352 -1.9235989 -7.5141873 0.55701602 -1.9195713 -7.4856 0.50873214 -1.9112641 -7.5223889 0.46488294 -1.9200747 -7.5328302 0.41914821 -1.9220885 -7.5400934 0.3731592 -1.9233472 -7.5538435 0.32739049 -1.926368 -7.5470061 0.28071061 -1.9241024 -7.55826 0.23469865 -1.9266198 -7.5585899 0.18829347 -1.926368 -7.5402508 0.14154699 -1.9213333 -7.5254936 0.095081776 -1.9173057 -7.5520654 0.049075592 -1.9241024 -7.5377073 0.0027300497 -1.9203265 -7.5617766 -0.043658935 -1.9266198 -7.4994321 -0.089321889 -1.9105089 -7.5461569 -0.13618909 -1.9228437 -7.5355043 -0.18225537 -1.9203265 -7.5342441 -0.22848892 -1.9203265 -7.5452733 -0.27517176 -1.9235989 -7.5386081 -0.32125771 -1.9223403 -7.5577612 -0.36854362 -1.9278784 -7.5292664 -0.41347876 -1.9210817 -7.5546017 -0.46137911 -1.9283818 -7.5439034 -0.50720561 -1.926368 -7.5589881 -0.55482972 -1.9311509 -7.5564065 -0.60127705 -1.9314026 -7.5467892 -0.6471352 -1.9298922 -7.5378575 -0.69298649 -1.9286336 -7.5190163 -0.73780793 -1.9248576 -7.5355239 -0.786138 -1.9303957 -7.5161295 -0.8307662 -1.9266198 -7.4897423 -0.87440079 -1.9210817 -7.4871178 -0.92069477 -1.9218369 -7.5062833 -0.96984053 -1.9283818 -7.4896417 -1.0144516 -1.9256128 -7.4765682 -1.059438 -1.9238507 -7.4996057 -1.1096833 -1.9316543 -7.5117855 -1.1586287 -1.936689 -7.5226908 -1.2076119 -1.9414719 -7.4893651 -1.249449 -1.9346751 -7.4872794 -1.2963697 -1.9361855 -7.4229813 -1.3322027 -1.9213333 -7.4127641 -1.3773707 -1.9208299 -7.3813634 -1.4184465 -1.9147884 -7.4019485 -1.4695519 -1.922592 -7.4022732 -1.5168841 -1.9251094 -7.380517 -1.5596744 -1.9218369 -7.3708081 -1.604931 -1.9218369 -7.4146504 -1.6621915 -1.9361855 -7.4080844 -1.7085254 -1.9371924 -7.3484931 -1.7423407 -1.9241024 -7.3404846 -1.7880844 -1.9248576 -7.3162308 -1.8298043 -1.9213333 -7.2870541 -1.8700916 -1.9165505 -7.2716985 -1.9137838 -1.9155436 -7.2523437 -1.95635 -1.9135296 -7.1478515 -1.9752967 -1.8886082 -6.9735599 -1.9732765 -1.8448069 -6.7893419 -1.9662328 -1.7982366 -6.7001305 -1.9850407 -1.7773429 -6.6359549 -2.0104036 -1.7632459 -6.5606279 -2.0316195 -1.7461282 -6.4677615 -2.0464413 -1.7242275 -6.3933816 -2.0661521 -1.7073616 -6.3594446 -2.0983686 -1.7015717 -6.3455324 -2.1370411 -1.7013199 -6.2993498 -2.1646161 -1.6922576 -6.2128825 -2.1776221 -1.6721191 -6.1064453 -2.1824851 -1.6464425 -6.0847545 -2.2169311 -1.644177 -5.5720258 -2.0689723 -1.5057245 -5.4496956 -2.0616944 -1.475265 -5.3764353 -2.0717828 -1.4583991 -5.3753343 -2.109328 -1.4616716 -5.3326316 -2.1304243 -1.4533644 -5.0137405 -2.0388117 -1.3675239 -4.9278054 -2.0391979 -1.346882 -4.8732767 -2.051749 -1.3350506 -4.7698488 -2.0427568 -1.309374 -4.6826901 -2.0395291 -1.2882285 -4.585134 -2.0306079 -1.2640623 -4.4746294 -2.0146091 -1.2361201 -4.4384222 -2.0311553 -1.2293234 -4.3653235 -2.0301955 -1.2119539 -4.3370333 -2.0495007 -1.2074227 -4.2432342 -2.0371268 -1.1840117 -4.1375742 -2.0177424 -1.1570764 -4.0930257 -2.0272019 -1.1477623 -4.0614882 -2.0427132 -1.1422242 -3.9618201 -2.0231483 -1.1167994 -3.9192584 -2.0318322 -1.1079887 -3.9032917 -2.0540395 -1.1069818 -3.8726869 -2.068378 -1.1016954 -3.8224831 -2.0718133 -1.0906192 -3.8190274 -2.100358 -1.0933883 -3.7916999 -2.115736 -1.0891088 -3.7727509 -2.1356249 -1.0873468 -3.75454 -2.1558428 -1.0858363 -3.702769 -2.1564388 -1.0742567 -3.6628006 -2.1633708 -1.0662013 -3.6494575 -2.1858046 -1.0662013 -3.6467309 -2.2146859 -1.0694737 -3.6569736 -2.2517333 -1.076774 -3.6619718 -2.2859149 -1.0825639 -3.6576912 -2.3145506 -1.0855846 -3.5269225 -2.2622414 -1.049587 -5.2778792 -3.4309947 -1.5971031 -3.5223336 -2.3207915 -1.0568873 -3.4822698 -2.3251653 -1.0488318 -3.4615245 -2.34215 -1.0468179 -3.4734309 -2.3814025 -1.0551251 -3.5318832 -2.4534607 -1.0782844 -3.5064733 -2.4678457 -1.0750118 -3.4258564 -2.4426866 -1.0541182 -3.3966811 -2.4534621 -1.049587 -3.3792198 -2.4725435 -1.0488318 -3.3243282 -2.4638455 -1.0359935 -3.2913451 -2.4708347 -1.0302037 -3.3169563 -2.5220253 -1.0435455 -3.296818 -2.5387878 -1.0420351 -3.336129 -2.6018164 -1.0601597 -3.3406093 -2.6384315 -1.0669565 -3.3175547 -2.6534395 -1.0646909 -3.2598443 -2.6402481 -1.0508456 -3.3027041 -2.708679 -1.0707325 -3.2845325 -2.7276566 -1.0702289 -3.2951431 -2.770802 -1.0795431 -3.2567084 -2.7727759 -1.0722429 -3.2345018 -2.7882838 -1.0704807 -3.2012901 -2.7940786 -1.0649426 -3.1811845 -2.8111057 -1.0639358 -3.1530561 -2.8208938 -1.0601597 -3.109863 -2.8168006 -1.0510974 -3.1096418 -2.851526 -1.0571389 -3.0197344 -2.8033969 -1.0314623 -3.0469091 -2.8636248 -1.0473214 -3.0587311 -2.9102824 -1.0578941 -3.03036 -2.9189255 -1.0541182 -2.9971476 -2.9226015 -1.0485801 -2.9646935 -2.9266598 -1.0432937 -2.92888 -2.9270105 -1.0367486 -2.9244733 -2.9586914 -1.0417833 -2.925873 -2.9966598 -1.0490836 -2.9188533 -3.0263972 -1.053363 -2.9028993 -3.0470526 -1.0543699 -2.8596056 -3.0387321 -1.0450559 -2.8389297 -3.0540946 -1.0443007 -2.7991889 -3.0486465 -1.0362452 -2.75247 -3.0349412 -1.0254208 -2.6944013 -3.0078042 -1.0100652 -2.7156608 -3.0692143 -1.0256726 -2.7076051 -3.098207 -1.0299519 -2.6910737 -3.1176925 -1.0309589 -2.6863358 -3.1510837 -1.0367486 -2.6644568 -3.1645465 -1.0357418 -2.634469 -3.1681862 -1.0314623 -2.6149797 -3.1842914 -1.0314623 -2.5539343 -3.1491668 -1.0143446 -2.6011188 -3.2478659 -1.0420351 -2.5577254 -3.2341623 -1.0322175 -2.5568964 -3.2742021 -1.040273 -2.5544896 -3.31282 -1.0478249 -2.4924848 -3.2737641 -1.0299519 -2.4781663 -3.2967315 -1.0324693 -2.4578915 -3.3118751 -1.0324693 -2.4043443 -3.2816179 -1.0178689 -2.3824618 -3.2939565 -1.0171137 -2.3655803 -3.3132384 -1.0186241 -2.3474364 -3.3308551 -1.0196309 -2.3324819 -3.3531404 -1.0221483 -2.3189852 -3.3777606 -1.0254208 -2.3041885 -3.4007387 -1.0281898 -2.3096411 -3.454232 -1.0405247 -2.2692125 -3.4392595 -1.0314623 -2.2274711 -3.4214888 -1.0216448 -2.2017272 -3.4277637 -1.0193793 -2.2039683 -3.4779932 -1.0307071 -2.1579583 -3.4520624 -1.0186241 -2.1418166 -3.4734757 -1.0211413 -2.1179485 -3.4824181 -1.0198827 -2.0925577 -3.488709 -1.0178689 -2.0814607 -3.5189745 -1.0231552 -2.0622678 -3.5358598 -1.0244138 -2.0525966 -3.5694201 -1.0307071 -2.0363848 -3.5920498 -1.0337279 -2.0204449 -3.6154594 -1.0370004 -1.9982227 -3.6277885 -1.0370004 -1.9463704 -3.5855484 -1.0208896 -1.9316384 -3.6110768 -1.0249174 -1.9103475 -3.6245735 -1.0254208 -1.8925322 -3.6448154 -1.0279381 -1.874981 -3.6658368 -1.0307071 -1.856372 -3.685051 -1.0329727 -1.84319 -3.7154446 -1.0385108 -1.8156843 -3.7171192 -1.0357418 -1.7848717 -3.7116191 -1.0309589 -1.7695187 -3.7382457 -1.03549 -1.7547234 -3.7665775 -1.0405247 -1.7473111 -3.8115826 -1.0503422 -1.7246867 -3.8239965 -1.0508456 -1.6823479 -3.7920458 -1.0387626 -1.6640812 -3.8138282 -1.0420351 -1.6280535 -3.7946184 -1.0337279 -1.6250548 -3.8526871 -1.0473214 -1.6058333 -3.8733137 -1.0503422 -1.2496701 -3.0675225 -0.82126647 -1.2265078 -3.0643511 -0.81824571 -1.2299976 -3.1285598 -0.83410478 -1.4485775 -3.75176 -1.0057857 -1.4217554 -3.7506235 -1.0030167 -1.3993903 -3.7610905 -1.0035201 -1.3865786 -3.7977874 -1.0113238 -1.3789177 -3.849956 -1.023407 -1.3616854 -3.876606 -1.0284415 -1.3514274 -3.9242342 -1.039266 -1.334444 -3.9535422 -1.0450559 -1.3071208 -3.9524674 -1.0425385 -1.284336 -3.9650168 -1.0437971 -1.2585195 -3.9682102 -1.0425385 -1.0140206 -3.2669473 -0.84946042 -0.9964878 -3.2814417 -0.851726 -0.98102021 -3.3032656 -0.85600543 -0.96100324 -3.3101521 -0.8562572 -0.93908906 -3.3104002 -0.85474676 -0.89781982 -3.2405567 -0.83435655 -0.82407647 -3.04702 -0.7807377 -0.81030571 -3.0707335 -0.78577232 -0 -0 -0 -1.0304835 -4.1083179 -1.0614184 -1.0031879 -4.1061025 -1.0591528 -0.97215021 -4.0877013 -1.0526078 -0.96188962 -4.1577048 -1.0697255 -0.93721008 -4.167305 -1.0707325 -0.91554844 -4.1909413 -1.0755154 -0.88479525 -4.172812 -1.0692221 -0.85780954 -4.1715269 -1.0674599 -0.83068377 -4.1691189 -1.0654461 -0.72880334 -3.7788267 -0.96072578 -0.69903415 -3.7480266 -0.95141172 -0.74092579 -4.1122694 -1.0465662 -0.71717209 -4.1253195 -1.0488318 -0.69712603 -4.16114 -1.0571389 -0.67974997 -4.2159777 -1.0704807 -0.64526856 -4.1645999 -1.0558803 -0.62126935 -4.1790104 -1.0586493 -0.59438699 -4.1741209 -1.0563837 -0.56366879 -4.1402907 -1.0465662 -0.54074895 -4.1628656 -1.0516008 -0.51448274 -4.1603427 -1.0500904 -0.48668623 -4.1441975 -1.0450559 -0.45782247 -4.1163263 -1.0370004 -0.43235421 -4.1171331 -1.036497 -0.40603596 -4.1091142 -1.0337279 -0.38001111 -4.1028552 -1.0314623 -0.35507962 -4.1080027 -1.0322175 -0.3318046 -4.1342211 -1.0385108 -0.30757681 -4.1516213 -1.0425385 -0.28190011 -4.1505337 -1.0417833 -0.25606912 -4.14639 -1.040273 -0.23062254 -4.1478829 -1.040273 -0.20478417 -4.1414871 -1.038259 -0.1785295 -4.1233277 -1.0332245 -0.15311781 -4.1214442 -1.0324693 -0.12839788 -4.1406856 -1.0372522 -0.10279549 -4.1336555 -1.0352383 -0.077083834 -4.1158233 -1.0304554 -0.051803607 -4.1142836 -1.0299519 -0.026710013 -4.1377506 -1.0359935 -0.0013291743 -4.1581602 -1.0412799 --0.024445087 -4.2035756 -1.0531112 --0.050030731 -4.1859274 -1.0485801 --0.075348489 -4.1652212 -1.0432937 --0.10148814 -4.1888685 -1.049587 --0.12689577 -4.1784935 -1.0470697 --0.15394098 -4.2163224 -1.0571389 --0.18054974 -4.2327032 -1.0616701 --0.20807157 -4.2634149 -1.0699773 --0.23364429 -4.2514281 -1.0672082 --0.25901884 -4.2383227 -1.0641874 --0.2857334 -4.2472754 -1.0669565 --0.31143484 -4.2406163 -1.0656978 --0.33629814 -4.224154 -1.0619218 --0.35907063 -4.185369 -1.052356 --0.38412496 -4.1763411 -1.050594 --0.41937834 -4.2721491 -1.0762706 --0.44267315 -4.241581 -1.0689703 --0.46465224 -4.2022309 -1.0594045 --0.49760708 -4.2608223 -1.0755154 --0.51831037 -4.2135029 -1.0639358 --0.5470053 -4.2323189 -1.0697255 --0.86603391 -6.3934512 -1.6378837 --0.90551853 -6.3899336 -1.6383871 --0.94513422 -6.3871293 -1.6391423 --0.99123865 -6.4261651 -1.6509737 --1.0277367 -6.4018059 -1.6461908 --1.070819 -6.4182901 -1.6522323 --1.1086951 -6.4030161 -1.6499667 --1.1486461 -6.3999033 -1.6509737 --1.1878935 -6.392735 -1.6509737 --1.2238097 -6.3682184 -1.6464425 --1.2675717 -6.3843212 -1.6527358 --1.3022538 -6.3546166 -1.646946 --1.343021 -6.3550286 -1.6492115 --1.3801367 -6.3381577 -1.646946 --1.4228108 -6.3465686 -1.6514771 --1.4623781 -6.340548 -1.6522323 --1.493889 -6.3003798 -1.6439252 --1.5345802 -6.2995577 -1.6461908 --1.573909 -6.2928395 -1.646946 --1.6146562 -6.2915006 -1.6492115 --1.644364 -6.2477813 -1.6401492 --1.6947651 -6.2824259 -1.6522323 --1.7317351 -6.2663116 -1.6507219 --1.7664634 -6.2425303 -1.6471977 --1.8068869 -6.2390108 -1.6492115 --1.8476086 -6.2361579 -1.6514771 --1.8892047 -6.2358189 -1.6544979 --1.9311525 -6.2361279 -1.6577704 --1.9682127 -6.2204704 -1.6567636 --2.0102119 -6.2202487 -1.660036 --2.0534952 -6.2234211 -1.6643155 --1.3025745 -3.8672614 -1.0211413 --1.3291092 -3.8674338 -1.023407 --2.1558578 -6.1507754 -1.6550014 --2.1896496 -6.1264949 -1.6519806 --2.233825 -6.1311312 -1.6570152 --2.274771 -6.1263824 -1.6595325 --2.3116341 -6.1104989 -1.6590291 --2.3431692 -6.0808473 -1.6547496 --2.3878591 -6.0852752 -1.660036 --2.4258707 -6.0723062 -1.6605395 --2.4645419 -6.0608935 -1.6615463 --2.5046444 -6.0528111 -1.6635603 --2.5451159 -6.0453572 -1.6658258 --2.5810187 -6.026958 -1.6650707 --1.3428726 -3.0828528 -0.83435655 --1.3641143 -3.0798647 -0.83586693 --2.662519 -5.9140053 -1.6466942 --2.7217078 -5.9477201 -1.6610429 --2.7365248 -5.884397 -1.6477011 --1.6054835 -3.3972301 -0.93706298 --1.6212729 -3.3768451 -0.93404222 --1.6394175 -3.3616142 -0.93253183 --1.6570069 -3.3454206 -0.93076974 --1.6796767 -3.3395135 -0.93202835 --1.7049768 -3.3386259 -0.93479741 --1.7258754 -3.3289607 -0.93504918 --1.7971886 -3.4150918 -0.96349484 --2.0857008 -3.9051278 -1.1112612 --3.1277146 -5.7710366 -1.6670845 --3.1649313 -5.7551289 -1.6680914 --3.1883969 -5.7144713 -1.6617981 --3.2353172 -5.715857 -1.6680914 --3.2698464 -5.6950583 -1.6678396 --3.3091118 -5.682415 -1.6701052 --3.342932 -5.660337 -1.6696018 --3.3741198 -5.6339064 -1.6678396 --3.4181688 -5.6288147 -1.6726226 --3.4516275 -5.6060872 -1.6721191 --3.4869857 -5.5864449 -1.6726226 --3.5341334 -5.5853906 -1.6789159 --3.5557997 -5.5440483 -1.6728743 --3.6061008 -5.5472808 -1.680678 --3.6528478 -5.5444465 -1.6867195 --3.686799 -5.5219288 -1.6867195 --3.695667 -5.4623294 -1.6751399 --3.7367742 -5.450726 -1.6786641 --2.1354682 -3.0740268 -0.93328702 --2.1520622 -3.0577002 -0.93228012 --2.1719069 -3.0460138 -0.93278354 --3.8881145 -5.3832707 -1.6869713 --3.9199295 -5.3577499 -1.6864678 --3.9590683 -5.3421507 -1.6892369 --3.9865441 -5.310791 -1.6869713 --3.9997275 -5.2608056 -1.6786641 --4.0396075 -5.2461333 -1.6819366 --4.0794573 -5.2311697 -1.6852092 --4.1138773 -5.2090783 -1.6862161 --4.1572461 -5.1980991 -1.690999 --4.189672 -5.173245 -1.6912507 --4.2293129 -5.1571693 -1.6945232 --4.2478943 -5.1154852 -1.6892369 --4.2723517 -5.0811753 -1.6864678 --4.3272872 -5.0828691 -1.6960336 --4.3407021 -5.0356956 -1.6889851 --4.3689737 -5.0060496 -1.6879783 --4.3989673 -4.9784226 -1.6877265 --4.3913631 -4.9087787 -1.6728743 --4.4207506 -4.8810244 -1.6726226 --4.4506168 -4.853807 -1.6726226 --4.43752 -4.7803006 -1.65626 --4.4999046 -4.7882466 -1.6688466 --4.5352035 -4.7668562 -1.6711122 --4.5636954 -4.7382421 -1.6708604 --4.60079 -4.7184658 -1.6738813 --4.6575289 -4.7183881 -1.6842022 --4.6898131 -4.6931443 -1.6854609 --4.7309093 -4.6765275 -1.6899921 --4.7574377 -4.6453824 -1.6892369 --4.7921209 -4.6221514 -1.6915025 --4.8161874 -4.5886545 -1.6899921 --4.8597565 -4.5736094 -1.6955302 --4.8593764 -4.5173454 -1.6854609 --4.9076748 -4.5064278 -1.6927611 --4.9316492 -4.4729786 -1.6915025 --4.9690933 -4.4516759 -1.6950268 --4.9774714 -4.4044261 -1.6884817 --4.9869146 -4.3585162 -1.6824402 --5.0120988 -4.32657 -1.6819366 --5.040761 -4.2976189 -1.6826918 --5.0655556 -4.2653613 -1.6821884 --5.0521955 -4.2014003 -1.6688466 --5.086854 -4.1776929 -1.6718674 --5.1116405 -4.145792 -1.6716157 --5.105258 -4.0889378 -1.6610429 --5.124938 -4.0533323 -1.6592808 --5.1573396 -4.0277677 -1.6617981 --5.1781244 -3.9930916 -1.6605395 --5.2210073 -3.975316 -1.666581 --5.2429805 -3.9414608 -1.6658258 --5.2717285 -3.9126775 -1.6673362 --5.2769022 -3.8665276 -1.6612947 --5.3240509 -3.8510942 -1.6688466 --5.36412 -3.8301651 -1.6741329 --5.3716998 -3.7860274 -1.6690984 --5.4099236 -3.7634978 -1.6738813 --5.4193516 -3.7209191 -1.6696018 --5.4380751 -3.6848817 -1.6683432 --5.4790854 -3.6638193 -1.6741329 --5.4901543 -3.6226685 -1.6706088 --5.5236335 -3.5963066 -1.6741329 --5.5203547 -3.5461299 -1.6663293 --5.5550885 -3.5204806 -1.670357 --5.54212 -3.4647796 -1.6597843 --5.5624514 -3.4302006 -1.6595325 --5.5850477 -3.3970113 -1.660036 --5.6082759 -3.364172 -1.6607912 --5.6371417 -3.3346248 -1.6633085 --5.6574965 -3.299973 -1.6633085 --5.6700883 -3.2608545 -1.6610429 --5.6925154 -3.2274342 -1.6617981 --5.7020736 -3.1867783 -1.6587774 --5.7461023 -3.1652744 -1.6660776 --5.7654161 -3.1299574 -1.6660776 --5.7990193 -3.1022842 -1.670357 --5.8342113 -3.0752189 -1.6751399 --5.857265 -3.0415933 -1.6763985 --5.8904648 -3.0130899 -1.680678 --5.9287205 -2.9869063 -1.6864678 --5.9564724 -2.955204 -1.6892369 --5.9588408 -2.9109528 -1.6847057 --5.9992661 -2.8852425 -1.6912507 --6.0247288 -2.8521047 -1.6935163 --6.0693097 -2.8277559 -1.7013199 --6.0707111 -2.7832012 -1.6967888 --6.0903211 -2.7470937 -1.697544 --6.1106005 -2.7112427 -1.6985509 --6.1351047 -2.6771817 -1.7008165 --6.1878796 -2.6551356 -1.7111375 --6.1897879 -2.6110983 -1.7071098 --6.2289357 -2.5827081 -1.7136549 --6.2625904 -2.5517442 -1.7186894 --6.2978959 -2.521184 -1.7242275 --6.3402662 -2.4931197 -1.7317795 --6.3608613 -2.4562616 -1.7332898 --6.4102001 -2.4302249 -1.7428557 --6.4222698 -2.3898342 -1.7421005 --6.4631758 -2.3600111 -1.7494007 --6.4893789 -2.3245528 -1.7526733 --6.490737 -2.2801993 -1.749149 --6.5210762 -2.2460039 -1.7536801 --6.5558248 -2.2130697 -1.75947 --6.5959263 -2.181617 -1.7667702 --6.5079141 -2.1082892 -1.7390797 --6.5142703 -2.0662692 -1.7373176 --6.5443873 -2.0317123 -1.7421005 --6.6326632 -2.0145867 -1.7627425 --6.7219 -1.9967291 -1.7836362 --6.7916474 -1.9721829 -1.7992436 --6.9153438 -1.9621803 -1.8294513 --7.0671482 -1.9584882 -1.8672111 --7.2462544 -1.9603363 -1.912271 --7.3535914 -1.9410359 -1.9379476 --7.4103498 -1.9074609 -1.9500308 --7.4435043 -1.8673736 -1.9558206 --7.466104 -1.8244233 -1.9588413 --7.4884558 -1.7812659 -1.9618621 --7.4671869 -1.7278643 -1.9533032 --7.5059743 -1.6883872 -1.9608552 --7.5218654 -1.6435393 -1.9623656 --7.5053 -1.5917318 -1.9553171 --7.5225091 -1.5472103 -1.9573309 --7.5290136 -1.5004563 -1.9565758 --7.5513821 -1.4567982 -1.9601001 --7.5744495 -1.4130994 -1.963876 --7.5582137 -1.3621327 -1.9573309 --7.571197 -1.31656 -1.9585897 --7.5915408 -1.2721592 -1.9618621 --7.6030254 -1.226171 -1.962869 --7.5845838 -1.1754932 -1.9560723 --7.6213288 -1.1333475 -1.963876 --7.6166425 -1.0849242 -1.9608552 --7.6001415 -1.0350335 -1.9548136 --7.6159463 -0.98962802 -1.9573309 --7.6093893 -0.94133353 -1.9540584 --7.583303 -0.89089739 -1.9457513 --7.637681 -0.84981102 -1.9585897 --7.6437144 -0.80303228 -1.9588413 --7.6571655 -0.75697356 -1.9611069 --7.6337199 -0.70738471 -1.9538068 --7.6543078 -0.66195011 -1.9580861 --7.6524372 -0.6145066 -1.9565758 --7.6560636 -0.56754059 -1.9565758 --7.6680923 -0.52114421 -1.9588413 --7.6556902 -0.47312793 -1.9548136 --7.6613479 -0.42630607 -1.9555688 --7.6589866 -0.37904945 -1.9543102 --7.6495657 -0.33154419 -1.9512894 --7.6620941 -0.28499734 -1.9540584 --7.6733718 -0.23827912 -1.9565758 --7.278903 0.53464299 -1.9479595 --7.2889504 0.58036971 -1.9516397 --7.2496843 0.62202555 -1.9419137 --7.2457314 0.66649705 -1.9419137 --7.2616696 0.71292639 -1.9474338 --7.2773104 0.75957632 -1.9529539 --7.2456613 0.80124116 -1.9455938 --7.2597747 0.84792626 -1.9508511 --7.2707143 0.89446074 -1.9553198 --7.2784853 0.94078982 -1.9589999 --7.2544103 0.98296773 -1.9540055 --7.2520633 1.0280037 -1.9550569 --7.2446647 1.0723407 -1.954794 --7.198854 1.1107346 -1.9440167 --7.1709456 1.1515162 -1.9382336 --7.1551805 1.1940639 -1.9358679 --7.1676826 1.2414057 -1.941388 --7.1580315 1.2850212 -1.9408623 --7.1604462 1.3308588 -1.9437538 --7.1246691 1.3694835 -1.9361308 --7.1511459 1.420133 -1.9458567 --7.1422973 1.4639848 -1.9458567 --7.1294045 1.5069829 -1.9448053 --7.1068258 1.5478231 -1.9411252 --7.1075501 1.5937245 -1.9440167 --7.0769553 1.632531 -1.9382336 --7.0724373 1.6772604 -1.9398109 --7.0460773 1.7167392 -1.9353422 --7.0223079 1.7566607 -1.9316621 --7.0160694 1.8009158 -1.9329764 --7.009552 1.8451606 -1.9342908 --6.9897151 1.8858722 -1.9319249 --6.9659233 1.9253814 -1.9285077 --6.9484081 1.9665099 -1.9269305 --6.9158235 2.0031986 -1.9211476 --6.9709291 2.0656171 -1.9403366 --6.941504 2.103312 -1.935605 --6.9422913 2.1501486 -1.939548 --6.9032125 2.1845505 -1.9321878 --6.8905964 2.2271636 -1.9324507 --6.9189453 2.2833171 -1.9445424 --6.9093766 2.3272686 -1.9458567 --6.861208 2.3580117 -1.9361308 --6.8429685 2.3987896 -1.9350793 --6.8281207 2.4407322 -1.9350793 --6.8275199 2.4878705 -1.9392852 --6.7949419 2.5233319 -1.9342908 --6.7730145 2.5625863 -1.9324507 --6.7445602 2.5992372 -1.9287705 --6.7159114 2.6356354 -1.9250906 --6.7148433 2.6828818 -1.9295592 --6.6982551 2.7240329 -1.9295592 --6.6858721 2.7669268 -1.9308735 --6.6732144 2.8097713 -1.9321878 --6.6487536 2.8476243 -1.9300849 --6.6081586 2.8783455 -1.9232504 --6.5930195 2.9200108 -1.9240391 --6.5925727 2.9683349 -1.9292964 --6.5768666 3.0099354 -1.9300849 --6.5486517 3.0457563 -1.9271934 --6.5350738 3.0883551 -1.9287705 --6.527307 3.1338258 -1.9321878 --6.4897456 3.1649334 -1.9266677 --6.4494553 3.1944132 -1.920359 --6.4366283 3.2373955 -1.9224619 --6.3994589 3.26805 -1.9172046 --6.4092631 3.3228023 -1.9264048 --6.3597269 3.3467846 -1.9174675 --6.3399224 3.3861988 -1.9177303 --6.319026 3.4250362 -1.9177303 --6.3097258 3.4702559 -1.9214104 --6.2967386 3.5136089 -1.9240391 --6.2800984 3.5550315 -1.9256163 --6.2364144 3.5810037 -1.9187818 --6.2068214 3.6148307 -1.916416 --6.1936617 3.658246 -1.9193076 --6.16365 3.6917176 -1.9169418 --6.102951 3.706423 -1.9048501 --6.0858445 3.7473423 -1.9066901 --6.1052923 3.8111885 -1.920359 --6.0067916 3.8011005 -1.8961756 --6.0523791 3.8821754 -1.9185189 --6.0171208 3.9118748 -1.9148389 --5.9744763 3.9365089 -1.908793 --5.9582329 3.9784527 -1.9114217 --5.9448957 4.0225081 -1.9151018 --0 0 -0 --5.8887472 4.0907536 -1.9129988 --5.8564358 4.1218104 -1.9106331 --5.8365331 4.1615891 -1.9124731 --5.8171444 4.2018437 -1.9145761 --5.7717886 4.2232113 -1.9080044 --5.7139902 4.2349868 -1.897227 --5.7311015 4.3024125 -1.9119474 --5.6976833 4.3322401 -1.9095817 --5.7214403 4.4059796 -1.9269305 --5.6433301 4.4012399 -1.9093188 --5.6063766 4.4280081 -1.9059016 --5.6084828 4.4858327 -1.9161532 --5.5823522 4.5213761 -1.9166789 --5.5597258 4.5598273 -1.9185189 --5.5160575 4.5809083 -1.9129988 --5.4856305 4.6128044 -1.9122102 --5.4535508 4.643249 -1.9108959 --5.3913469 4.6476398 -1.8988042 --5.3867121 4.7015734 -1.9074787 --5.3476419 4.7255912 -1.9037986 --5.2933822 4.7357945 -1.8945985 --5.2670841 4.7707763 -1.8956499 --5.2654414 4.8284407 -1.9059016 --5.2145057 4.8409615 -1.8980156 --5.2079015 4.8946748 -1.9066901 --5.1735768 4.9225469 -1.905113 --5.1099257 4.9220643 -1.8924955 --5.100348 4.973537 -1.9003814 --5.0663028 5.001349 -1.899067 --5.0191431 5.0159698 -1.8927584 --5.0215006 5.0803013 -1.9056387 --4.9895601 5.1103268 -1.9053758 --4.955431 5.1380672 -1.9043244 --4.9364538 5.1816516 -1.9093188 --4.8939891 5.2005997 -1.905113 --4.8619866 5.2305307 -1.905113 --4.7913079 5.218327 -1.8896041 --4.7591987 5.2476277 -1.8896041 --4.7339907 5.2846375 -1.8924955 --4.7577281 5.377182 -1.9156275 --4.7062359 5.3852024 -1.9080044 --4.6642799 5.4037509 -1.9043244 --4.6285319 5.4293313 -1.9032729 --4.5994802 5.4627967 -1.905113 --4.5819101 5.5102067 -1.9119474 --4.5455651 5.535234 -1.9108959 --4.515162 5.5675178 -1.9124731 --4.4857392 5.6011429 -1.9145761 --4.4530821 5.6308322 -1.9153646 --4.4297285 5.6724997 -1.920359 --4.3889489 5.6919317 -1.9177303 --4.3434234 5.7049351 -1.9129988 --4.3141327 5.7391915 -1.9156275 --4.2719383 5.7562561 -1.9124731 --4.2291265 5.7722411 -1.9090558 --4.2213297 5.8363934 -1.9219362 --4.1815152 5.8566875 -1.9200962 --4.134387 5.8664598 -1.9148389 --4.0966606 5.8893414 -1.9140503 --4.0560799 5.9080029 -1.9119474 --4.0267863 5.9431643 -1.9153646 --3.9982862 5.9797926 -1.9193076 --3.9519577 5.9897151 -1.9145761 --3.9388132 6.0502415 -1.9264048 --3.8995304 6.0710478 -1.9253534 --3.859108 6.0899706 -1.9237761 --3.8068402 6.0898066 -1.9161532 --3.7850966 6.1385117 -1.924302 --3.7498662 6.1657434 -1.9256163 --3.7179172 6.198566 -1.9287705 --3.6734295 6.210465 -1.9253534 --3.6469166 6.252892 -1.9316621 --3.6080003 6.2743149 -1.9313992 --3.5851316 6.3240361 -1.9400737 --3.5406144 6.3358068 -1.9369193 --3.507256 6.3675547 -1.9400737 --3.4561553 6.3669062 -1.9332392 --3.4174786 6.388844 -1.9335021 --3.381361 6.415668 -1.9353422 --3.3463764 6.4448586 -1.9379708 --3.299741 6.4515252 -1.9337649 --3.2635646 6.4785447 -1.9358679 --3.2340388 6.5191927 -1.9421766 --3.1812773 6.5129037 -1.9342908 --3.1454349 6.540997 -1.9369193 --3.1056535 6.5610461 -1.9371822 --3.06493 6.5791035 -1.9369193 --3.0160632 6.5793662 -1.9313992 --2.9859462 6.6206174 -1.9382336 --2.9448755 6.6379323 -1.9379708 --2.9118044 6.6735644 -1.943228 --2.864717 6.6771178 -1.9390223 --2.8296902 6.7087941 -1.943228 --2.7881033 6.7251391 -1.9429651 --2.7424195 6.7313972 -1.9398109 --2.705724 6.7597432 -1.943228 --2.6716068 6.7950754 -1.9487482 --2.634726 6.8239422 -1.9524282 --2.5856266 6.821033 -1.9469081 --2.5528052 6.8611865 -1.9540055 --2.4947817 6.8332152 -1.941388 --2.4508557 6.8429437 -1.9398109 --2.4155338 6.8769708 -1.945331 --2.3798862 6.910821 -1.9508511 --2.3318861 6.9088378 -1.9461195 --2.2840002 6.9065266 -1.941388 --2.2493057 6.9442768 -1.9482224 --2.2084033 6.9634662 -1.9497997 --2.1659205 6.977807 -1.9500625 --2.1157792 6.9669609 -1.943228 --2.0743635 6.984437 -1.9445424 --2.0341575 7.0062995 -1.947171 --1.9916557 7.0205054 -1.9476967 --1.9544631 7.0539804 -1.9537426 --1.9129063 7.07236 -1.9555826 --1.8591411 7.0447807 -1.9445424 --1.8146787 7.0513835 -1.943228 --1.7734892 7.0708084 -1.9455938 --1.7238917 7.0562501 -1.9384965 --1.6957321 7.1305256 -1.9563712 --1.6460806 7.1154151 -1.9492739 --1.6083134 7.1517396 -1.956634 --1.557405 7.1294236 -1.9476967 --1.5204295 7.1709375 -1.956634 --1.4750415 7.1735158 -1.954794 --1.4247816 7.1512051 -1.9461195 --1.3803281 7.1569705 -1.945331 --1.3482299 7.2288551 -1.9629427 --1.3047037 7.2417393 -1.9642571 --1.260905 7.2534108 -1.9653085 --1.2109604 7.2286568 -1.9563712 --1.1698052 7.2559547 -1.9618913 --1.1218673 7.241066 -1.9558455 --1.0730226 7.2182279 -1.9476967 --1.0348258 7.2676606 -1.9595256 --0.98735297 7.252841 -1.9537426 --0.94494194 7.2750282 -1.9582112 --0.90111315 7.2873926 -1.9600513 --0.85447121 7.276494 -1.9555826 --0.80533475 7.2413244 -1.9445424 --0.76461005 7.2816339 -1.9542683 --0.72029531 7.290029 -1.9553198 --0.67404097 7.2779789 -1.9508511 --0.63044947 7.2944741 -1.9542683 --0.58452415 7.2837787 -1.9503254 --0.54088759 7.3016615 -1.9542683 --0.49946666 7.3548994 -1.9679371 --0.45326084 7.3404913 -1.9632056 --0.40709046 7.3229041 -1.9576855 --0.36139047 7.3098454 -1.9534796 --0.31736282 7.3312039 -1.958737 --0.27162457 7.3127656 -1.9532168 --0.22722505 7.3297243 -1.9574226 --0.18210347 7.3251934 -1.9558455 --0.13695653 7.3155618 -1.9529539 --0.092246316 7.3307357 -1.9568969 --0.047136612 7.3109026 -1.9513768 --0.0022773135 7.3139486 -1.9521654 -0.042831186 7.3524175 -1.9626799 -0.087791964 7.3394747 -1.9592627 -0.13215522 7.3021402 -1.9492739 -0.17787552 7.338809 -1.9595256 -0.22296116 7.3395081 -1.9600513 -0.26781452 7.3331809 -1.958737 -0.31189683 7.3101931 -1.9529539 -0.35712302 7.3158507 -1.9550569 -0.40258971 7.3241191 -1.9579483 -0.44893849 7.3446236 -1.9642571 -0.49074954 7.2935982 -1.9511139 -0.53655541 7.3048835 -1.9550569 -0.57967913 7.2802944 -1.9492739 -0.62508297 7.2852521 -1.9516397 -0.66844469 7.2668681 -1.9476967 -0.71368176 7.2693515 -1.9495368 -0.75937569 7.2753911 -1.9524282 -0.79986054 7.2331948 -1.9421766 -0.84927124 7.2712741 -1.9540055 -0.89434278 7.2697568 -1.9550569 -0.94066596 7.2775283 -1.958737 -0.98802608 7.291697 -1.9642571 -1.0270548 7.2453761 -1.9532168 -1.0676737 7.2131691 -1.9461195 -1.1138275 7.2188778 -1.9495368 -1.1579475 7.2109551 -1.9492739 -1.2058276 7.2256021 -1.9553198 -1.2473387 7.2019062 -1.9508511 -1.2935529 7.2055125 -1.9540055 -1.3361526 7.1889029 -1.9516397 -1.3835187 7.1976233 -1.9563712 -1.4282206 7.1918378 -1.9571598 -1.4694138 7.1687617 -1.9532168 -1.5103775 7.1454515 -1.9492739 -1.5539873 7.1351066 -1.9490111 -1.596682 7.1207299 -1.9476967 -1.6355693 7.0901165 -1.9419137 -1.6772604 7.0724373 -1.9398109 -1.7192532 7.0563884 -1.9382336 -1.7615808 7.0419626 -1.9371822 -1.8114772 7.0571876 -1.9445424 -1.854008 7.0431404 -1.9437538 -1.8946741 7.0223169 -1.9411252 -1.9341259 6.9975405 -1.937445 -1.9830722 7.0068927 -1.9434909 -2.0246854 6.9899592 -1.9421766 -2.0721993 6.9931302 -1.9466453 -2.1117101 6.9692035 -1.9434909 -2.1598589 6.9736257 -1.9484853 -2.2034814 6.9630013 -1.9492739 -2.2440858 6.9429235 -1.9474338 -2.2772667 6.9006219 -1.9392852 -2.3229547 6.8965764 -1.9421766 -2.3611491 6.8703318 -1.9387594 -2.403899 6.8575358 -1.9392852 -2.4443061 6.8381143 -1.9379708 -2.4815915 6.810297 -1.9342908 -2.5270281 6.8048906 -1.9371822 -2.5622447 6.7721124 -1.9321878 -2.608609 6.7688665 -1.9358679 -2.6416299 6.7311788 -1.9295592 -2.6853888 6.7211146 -1.9313992 -2.7243965 6.6991487 -1.9298221 -2.763974 6.6787405 -1.9287705 -2.8071494 6.6669903 -1.9303478 -2.8533244 6.662056 -1.9340279 -2.8856688 6.6249642 -1.9282448 -2.9411168 6.6406536 -1.9382336 -2.9687312 6.593452 -1.9295592 -3.0035088 6.5628304 -1.9258791 -3.0473843 6.5521507 -1.9282448 -3.0920665 6.5429239 -1.9311364 -3.1363323 6.5325255 -1.9337649 -3.1678948 6.4958158 -1.9285077 -3.2016954 6.4641523 -1.9248277 -3.2439005 6.4495564 -1.9264048 -3.276829 6.4166427 -1.9224619 -3.3205812 6.4049807 -1.9250906 -3.3607178 6.3861928 -1.9256163 -3.3893816 6.3458796 -1.9195704 -3.4167578 6.3037586 -1.9129988 -3.456768 6.2852111 -1.9137874 -3.4995008 6.2714648 -1.9161532 -3.5369649 6.2481952 -1.9156275 -3.5795617 6.2339048 -1.9179932 -3.6109452 6.2001524 -1.9143132 -3.64254 6.1670804 -1.9108959 -3.6902299 6.1611671 -1.9161532 -3.7249589 6.1334605 -1.9145761 -3.765559 6.1154184 -1.9161532 -3.8244755 6.1265697 -1.9271934 -3.8341284 6.0589662 -1.9129988 -3.867065 6.0288301 -1.9108959 -3.9039843 6.0049887 -1.9108959 -3.9200487 5.9495034 -1.9006443 -3.9763091 5.9550238 -1.9103702 -4.0295391 5.9552827 -1.9185189 -4.0660043 5.9304457 -1.9185189 -4.1072712 5.9125166 -1.9208847 -4.1273646 5.864325 -1.9132617 -4.1475825 5.8168955 -1.9059016 -4.1628532 5.7631836 -1.8964385 -4.1969976 5.7359753 -1.8959128 -4.2401586 5.7209654 -1.8995929 -4.2803965 5.7017841 -1.9019586 -4.3094602 5.6677337 -1.89933 -4.3447447 5.6419487 -1.8995929 -4.3656311 5.5976872 -1.8935469 -4.3933163 5.5624671 -1.8906555 -4.4189253 5.5248585 -1.8869754 -4.4545641 5.4998894 -1.887764 -4.4845552 5.4679775 -1.8861868 -4.5093899 5.4299679 -1.8825067 -4.5680871 5.4324689 -1.8932841 -4.5969548 5.3991957 -1.8914441 -4.622436 5.3621197 -1.8882897 -4.6558852 5.334383 -1.8885525 -4.6904454 5.3078833 -1.8893412 -4.7242126 5.2804413 -1.8898669 -4.7506933 5.2449198 -1.8875011 -4.7716985 5.2035842 -1.8830324 -4.8153553 5.1869335 -1.887764 -4.8497348 5.1601009 -1.8888154 -4.8819704 5.1309452 -1.8890783 -4.9213948 5.109231 -1.8922327 -4.9492836 5.0754843 -1.8909184 -4.9884682 5.0532589 -1.8940727 -5.027566 5.0307431 -1.897227 -5.0343184 4.9760647 -1.8880268 -5.0668278 4.947103 -1.8888154 -5.1123681 4.9306531 -1.8945985 -5.1418271 4.8985257 -1.8943356 -5.1331358 4.8305235 -1.8798782 -5.1796417 4.8146987 -1.8861868 -5.2062435 4.7802167 -1.8851354 -5.2497721 4.7611432 -1.8903927 -5.2817621 4.7314162 -1.8914441 -5.3099718 4.6982794 -1.8911812 -5.3437858 4.670053 -1.8930212 -5.3686881 4.6340246 -1.8917069 -5.3977551 4.6016216 -1.8919698 -5.4295793 4.5715218 -1.8932841 -5.4575272 4.5381203 -1.8932841 -5.4912357 4.5094457 -1.8953871 -5.4985662 4.4592619 -1.8882897 -5.5664964 4.4580011 -1.9024843 -5.5876904 4.4189749 -1.9003814 -5.6017704 4.3745131 -1.8959128 -5.6376762 4.3471274 -1.899067 -5.6680827 4.3153753 -1.9003814 -5.6851983 4.27356 -1.897227 -5.7058892 4.2345715 -1.8953871 -5.7255378 4.1949205 -1.8932841 -5.741787 4.1529264 -1.8901298 -5.771873 4.1209803 -1.8917069 -5.8167686 4.0993791 -1.8982785 -5.8204246 4.0487385 -1.8911812 -5.8539085 4.0189543 -1.8940727 -5.8984289 3.9964867 -1.9006443 -5.9244442 3.9612916 -1.90117 -5.9945478 3.9551451 -1.9161532 -5.961288 3.8809235 -1.8974899 -5.976058 3.8385384 -1.8945985 -5.9693408 3.7826943 -1.8848726 -6.0578961 3.7868998 -1.9059016 -6.0276308 3.7167504 -1.8888154 -6.0569186 3.6837053 -1.8909184 -6.0868545 3.6509368 -1.8932841 -6.1307354 3.6262875 -1.9001186 -6.1437016 3.5832562 -1.897227 -6.1722646 3.5493383 -1.89933 -6.1972842 3.5133021 -1.9003814 -6.2103014 3.4705048 -1.8977528 -6.2272534 3.430007 -1.8964385 -6.2549663 3.3954141 -1.8985413 -6.2858925 3.3624296 -1.9016957 -6.3098202 3.3255959 -1.9027472 -6.3164053 3.2797053 -1.8985413 -6.3389874 3.2422044 -1.89933 -6.3303242 3.1889284 -1.8906555 -6.3843474 3.1671717 -1.90117 -6.398459 3.1253984 -1.8995929 -6.4305592 3.0923493 -1.9035357 -6.4415631 3.0491202 -1.90117 -6.4793935 3.0184984 -1.906953 -6.5021782 2.9806945 -1.9082673 -6.5185857 2.9399486 -1.9077415 -6.5338564 2.8987226 -1.906953 -6.5541725 2.8597343 -1.9077415 -6.5875578 2.8263097 -1.9124731 -6.594996 2.7817128 -1.9095817 -6.6021352 2.7371314 -1.9066901 -6.6125507 2.6940227 -1.9048501 -6.6343312 2.6555486 -1.9064273 -6.637929 2.6098506 -1.9027472 -6.6556177 2.5697665 -1.9032729 -6.6784782 2.5316148 -1.9053758 -6.7065468 2.4952972 -1.9090558 -6.7235441 2.454761 -1.9095817 -6.7348461 2.4121592 -1.9085301 -6.7513409 2.3714287 -1.9090558 -6.7767124 2.3337269 -1.9122102 -6.7744484 2.2865505 -1.9074787 -6.8149176 2.253721 -1.9151018 -6.8231101 2.2100801 -1.9135245 -6.8282647 2.165549 -1.9111588 -6.8423452 2.1238966 -1.9114217 -6.882946 2.0902793 -1.9193076 -6.8817677 2.0438888 -1.9153646 -6.8904729 2.0005491 -1.9143132 -6.9165421 1.96218 -1.918256 -6.942399 1.9235661 -1.922199 -6.9438257 1.8781626 -1.9193076 -6.9356275 1.8303539 -1.9137874 -6.9635477 1.7920889 -1.9185189 -6.988451 1.7528462 -1.9224619 -6.9775167 1.7046698 -1.916416 -6.9728255 1.6582553 -1.9122102 -7.0120106 1.6221763 -1.920359 -7.0274801 1.5803901 -1.9219362 -7.0285611 1.5353887 -1.9195704 -7.0369062 1.4920334 -1.9193076 -7.0402579 1.4476626 -1.9177303 -7.0632024 1.4072628 -1.9216733 -7.0574927 1.3611588 -1.9177303 -7.0723515 1.3190664 -1.9195704 -7.0755644 1.2747918 -1.918256 -7.088006 1.2321784 -1.9195704 -7.085917 1.1870716 -1.9169418 -7.0997353 1.1446447 -1.9187818 -7.1199737 1.103126 -1.9224619 -7.1371064 1.0609767 -1.9253534 -7.1272435 1.0148548 -1.9208847 -7.1295123 0.97058374 -1.9198333 -7.1468153 0.92830908 -1.9229876 -7.1389709 0.88278407 -1.9193076 -7.1442533 0.83896357 -1.9193076 -7.1598148 0.79628289 -1.922199 -7.1597681 0.75183302 -1.9208847 -7.1584854 0.70731908 -1.9193076 -7.1655726 0.66364861 -1.9200962 -7.1647034 0.61925435 -1.9187818 -7.180871 0.57628226 -1.922199 -7.1948562 0.53299278 -1.9250906 -7.2008791 0.48903158 -1.9258791 -7.1873732 0.44383031 -1.9214104 -7.214045 0.40105611 -1.927982 -7.2192607 0.35692647 -1.9287705 -7.2126398 0.31224903 -1.9264048 -7.2086349 0.26777327 -1.9248277 -7.2101421 0.22353686 -1.9248277 -7.2219877 0.17955415 -1.9277191 -7.2268124 0.1353091 -1.9287705 -7.2275066 0.090963669 -1.9287705 -7.2211747 0.046572343 -1.9269305 -7.2058873 0.0022608107 -1.9227247 -7.2395344 -0.042155772 -1.9319249 -7.2401042 -0.086587615 -1.9321878 -7.2259312 -0.13076386 -1.9285077 -7.2307801 -0.17524007 -1.9300849 -7.2218533 -0.21936841 -1.927982 -7.2377267 -0.26431331 -1.9327135 -7.2407885 -0.30892462 -1.9340279 -7.2329745 -0.35306427 -1.9324507 -7.2287455 -0.3973321 -1.9319249 -7.2040215 -0.44032198 -1.9258791 -7.2233253 -0.48601002 -1.9319249 -7.2076979 -0.52940154 -1.9285077 -7.2273965 -0.57545877 -1.9348165 -7.2025814 -0.61797649 -1.9290335 -7.1967325 -0.661982 -1.9285077 -7.1877341 -0.70565575 -1.9271934 -7.1938248 -0.75084901 -1.9300849 -7.191 -0.79518777 -1.9306107 -7.1821523 -0.83884764 -1.9295592 -7.1854882 -0.88396233 -1.9319249 -7.193325 -0.92976868 -1.935605 -7.2113867 -0.97713113 -1.9421766 -7.1651344 -1.0156672 -1.9311364 -7.1587672 -1.0596125 -1.9311364 -7.1378284 -1.1013088 -1.9271934 -7.1442728 -1.1472287 -1.9308735 -7.1171145 -1.1877052 -1.9253534 -7.1163473 -1.2325063 -1.9271934 -7.0887089 -1.2725649 -1.9216733 -7.0902524 -1.317801 -1.924302 -7.0782433 -1.3605521 -1.9232504 -7.0943666 -1.4088479 -1.9300849 -7.0562887 -1.446341 -1.9219362 -7.1152453 -1.5039877 -1.9408623 -7.0983415 -1.5459739 -1.9387594 -7.0868387 -1.5890769 -1.9382336 -7.0666142 -1.6301438 -1.9353422 -7.0536623 -1.6728046 -1.9345536 -7.0620127 -1.7206244 -1.9398109 -7.0363469 -1.7601751 -1.935605 -7.0226107 -1.8025961 -1.9348165 -7.012351 -1.8458978 -1.9350793 -6.9664283 -1.8795853 -1.9253534 -6.9380255 -1.9176656 -1.9206219 -6.8889952 -1.9496847 -1.9101074 -6.8092537 -1.9723116 -1.8909184 -6.6527185 -1.97127 -1.8499118 -6.5435481 -1.9826599 -1.8223112 -6.440022 -1.9944991 -1.7962878 -6.3246422 -2.0013573 -1.7668471 -6.2810302 -2.0300329 -1.7579098 -6.2034068 -2.0470562 -1.7392465 -6.1514144 -2.0718315 -1.7279434 -6.0665064 -2.0847523 -1.7071773 -6.0035253 -2.1043735 -1.6927198 -5.9432588 -2.1242759 -1.6790509 -5.8829761 -2.1435184 -1.665382 -5.8805661 -2.1836078 -1.6685364 -5.4637074 -2.066967 -1.5510367 -5.414012 -2.0862215 -1.5402594 -5.3786573 -2.1105866 -1.5336878 -5.2554088 -2.0995007 -1.5013556 -5.0368781 -2.0480766 -1.4408972 -5.0046048 -2.0708239 -1.4351143 -4.8113036 -2.0254583 -1.3817531 -4.7686324 -2.042022 -1.3728157 -4.70825 -2.0504296 -1.3586211 -4.6541204 -2.0609102 -1.3462666 -4.5454993 -2.046236 -1.3176146 -4.3837247 -2.0058076 -1.2729279 -4.3538394 -2.0245273 -1.2676706 -4.3038278 -2.0334711 -1.2563674 -4.2225623 -2.02684 -1.2356013 -4.1875005 -2.0417116 -1.2287669 -4.1714358 -2.0656536 -1.2277155 -4.0552573 -2.03917 -1.1961719 -3.9859617 -2.0350435 -1.178823 -3.95627 -2.0505784 -1.1735657 -3.9094634 -2.0568366 -1.1630512 -3.8278403 -2.043956 -1.1417593 -3.7745144 -2.0453296 -1.1291419 -3.7001843 -2.0344989 -1.1099529 -3.6648846 -2.044467 -1.1028556 -3.6489129 -2.0650141 -1.1018041 -3.5968518 -2.0647774 -1.0894496 -3.6066239 -2.0999224 -1.0965469 -3.5695817 -2.107779 -1.0889239 -3.5491326 -2.1251788 -1.0865581 -3.5112886 -2.131887 -1.0786722 -3.487462 -2.1468136 -1.075255 -3.4578564 -2.1579509 -1.0699978 -3.4184632 -2.1626134 -1.0615861 -3.4108136 -2.1871953 -1.0634261 -3.4312997 -2.2301755 -1.0744665 -3.3941891 -2.2357893 -1.0668434 -3.3964529 -2.2672918 -1.0721006 -3.3808792 -2.2870076 -1.0715749 -3.3787177 -2.3158948 -1.0755179 -3.3676133 -2.3387852 -1.0765693 -3.328743 -2.3421857 -1.0684205 -3.2946715 -2.3485599 -1.061849 -3.2551737 -2.3506489 -1.0534374 -3.2220037 -2.3569012 -1.0471287 -3.1927555 -2.3657086 -1.0421343 -3.2236986 -2.4194376 -1.0576432 -3.2517972 -2.4718819 -1.0723635 -3.2090526 -2.4705913 -1.0629004 -3.2394755 -2.5258439 -1.0786722 -3.1966622 -2.5241406 -1.0692092 -3.182621 -2.5449128 -1.0697349 -3.1317117 -2.5358462 -1.0573803 -3.1384706 -2.5733733 -1.0652663 -3.1300433 -2.5987477 -1.0678948 -3.0977948 -2.6042407 -1.0621119 -3.0707393 -2.6138153 -1.0581689 -3.0487981 -2.6275671 -1.056066 -3.0449736 -2.6570122 -1.0605347 -3.0249989 -2.6724508 -1.0592204 -2.9517467 -2.6401303 -1.0384542 -2.8818669 -2.6096046 -1.0187395 -2.9937813 -2.7446358 -1.0660548 -2.9196181 -2.7097723 -1.044763 -2.8902833 -2.71574 -1.0400314 -2.8910375 -2.7500529 -1.046603 -2.8692455 -2.7630539 -1.044763 -2.8625977 -2.7907131 -1.0487058 -2.8406146 -2.8034794 -1.0468658 -2.8404179 -2.8379097 -1.0534374 -2.8338017 -2.8662658 -1.0576432 -2.8316615 -2.8994801 -1.063689 -2.8077903 -2.9105492 -1.0613233 -2.8497643 -2.9906034 -1.084981 -2.81285 -2.9883561 -1.0776207 -2.7432325 -2.9504297 -1.0571175 -2.7041998 -2.9444606 -1.0487058 -2.674417 -2.9481313 -1.0439743 -2.653059 -2.960892 -1.04266 -2.6316452 -2.9735017 -1.0413457 -2.6089072 -2.9845071 -1.0395057 -2.5987394 -3.0099552 -1.0429229 -2.5677054 -3.0111573 -1.0376656 -2.5659561 -3.0467861 -1.044763 -2.5324109 -3.0446661 -1.0384542 -2.4861326 -3.0265894 -1.0266254 -2.4620464 -3.0350418 -1.0242596 -2.4500105 -3.0583766 -1.0271511 -2.4246163 -3.0650263 -1.0242596 -2.4289188 -3.1095066 -1.0345113 -2.3797529 -3.0853794 -1.0211053 -2.3455839 -3.0799613 -1.0142708 -2.442564 -3.2485619 -1.0668434 -2.4041893 -3.238692 -1.0584317 -2.3563368 -3.2152421 -1.0455515 -2.3009491 -3.180382 -1.0289911 -2.265697 -3.1724513 -1.021631 -2.2600806 -3.2060125 -1.0282025 -2.2365105 -3.2142746 -1.0263625 -2.2200217 -3.2327101 -1.0279397 -2.1985214 -3.2438745 -1.0271511 -2.1828651 -3.2637205 -1.029254 -2.162267 -3.2762475 -1.0289911 -2.1500177 -3.3015833 -1.0329341 -2.1427515 -3.3350103 -1.0395057 -2.1387699 -3.3741772 -1.0479172 -2.1210938 -3.3921463 -1.0494945 -2.0966961 -3.399348 -1.0476544 -2.0908351 -3.4368818 -1.0555403 -2.0930266 -3.4885383 -1.0678948 -2.0833673 -3.5212476 -1.0742036 -1.9936881 -3.4172726 -1.0374027 -1.9471984 -3.3851078 -1.023471 -1.9263911 -3.3969917 -1.023471 -1.8942184 -3.3885322 -1.0171623 -1.8938669 -3.4372795 -1.0287282 -1.8870054 -3.4751244 -1.036877 -1.865647 -3.4866374 -1.036877 -1.8536624 -3.515945 -1.0423971 -1.8467216 -3.5555124 -1.0510716 -1.7954435 -3.5092192 -1.0334598 -1.7717079 -3.515861 -1.0321455 -1.7389572 -3.5041916 -1.0253111 -1.7275828 -3.535604 -1.0316198 -1.7020943 -3.5383112 -1.029254 -1.6729238 -3.5329902 -1.0245225 -1.650807 -3.5423138 -1.0242596 -1.6290407 -3.5523763 -1.0242596 -1.6143507 -3.5781376 -1.0289911 -1.6005788 -3.6064978 -1.0345113 -1.5896051 -3.6418979 -1.0421343 -1.5676092 -3.6524696 -1.0423971 -1.5624105 -3.7029159 -1.0544889 -1.2630084 -3.0448244 -0.85760462 -1.2479408 -3.0614524 -0.86023325 -1.4645987 -3.6575918 -1.0329341 -1.4403641 -3.6620197 -1.0316198 -1.4202989 -3.6770897 -1.0334598 -1.4004447 -3.6929531 -1.0355628 -1.3784314 -3.7032852 -1.0360885 -1.3589901 -3.7207372 -1.038717 -1.3397114 -3.7389979 -1.0416086 -1.3295282 -3.7835624 -1.0521231 -1.3342346 -3.872844 -1.0755179 -1.314147 -3.8919284 -1.0786722 -1.2866083 -3.8889256 -1.0755179 -1.2511327 -3.8609476 -1.0652663 -1.2268358 -3.8667123 -1.0647405 -1.1945107 -3.8465219 -1.0568546 -0.99070668 -3.2601323 -0.88783383 -0.97480243 -3.2800241 -0.89177674 -0.95788461 -3.2970629 -0.89493114 -0.93737304 -3.30195 -0.89466828 -0.91838235 -3.3122888 -0.89598256 -0.87336826 -3.2265837 -0.87022203 -0.81024992 -3.0676856 -0.82395816 -0.79165202 -3.0735338 -0.82422101 -0.94706994 -3.7736943 -1.0195282 -0.92984676 -3.8038042 -1.0263625 -0.91808951 -3.8582499 -1.0400314 -0.91417384 -3.9493544 -1.063952 -0.86898136 -3.8616948 -1.0379285 -0.85308897 -3.9027743 -1.0479172 -0.83632493 -3.9419153 -1.0573803 -0.8165881 -3.9687097 -1.0634261 -0.78562814 -3.9405262 -1.054226 -0.76216495 -3.9490621 -1.0552775 -0.72961247 -3.9090846 -1.0429229 -0.69911796 -3.877404 -1.0329341 -0.67646915 -3.8882749 -1.0347742 -0.67330205 -4.0160604 -1.0689464 -0.63483977 -3.9343858 -1.0452887 -0.61393338 -3.9591837 -1.0510716 -0.59841514 -4.022047 -1.0673691 -0.5745402 -4.0313745 -1.0689464 -0.53848386 -3.9516487 -1.0460773 -0.52490169 -4.0371647 -1.0686834 -0.50059319 -4.0441394 -1.0697349 -0.46902695 -3.989639 -1.0539631 -0.44496414 -3.9962776 -1.0550146 -0.41872475 -3.9826198 -1.0505459 -0.39551127 -3.9975963 -1.0539631 -0.36937621 -3.9826546 -1.0492316 -0.34227851 -3.9540856 -1.04082 -0.31893456 -3.9676526 -1.0439743 -0.29266316 -3.9435551 -1.036877 -0.26885176 -3.9510524 -1.0384542 -0.24685733 -3.989222 -1.048443 -0.22381711 -4.0166721 -1.0555403 -0.19869216 -4.0083332 -1.0529116 -0.17480053 -4.0258636 -1.0573803 -0.14913219 -4.0008278 -1.0502831 -0.12434281 -3.9939525 -1.0481801 -0.10007229 -4.0042858 -1.0508088 -0.075178258 -3.9874604 -1.0460773 -0.050638318 -3.982058 -1.0445001 -0.026185716 -3.9793994 -1.0437114 -0.001770002 -3.992028 -1.0471287 --0.022724655 -3.9919636 -1.0471287 --0.048317567 -4.0824366 -1.0718378 --0.071886599 -4.0010309 -1.0497574 --0.096058615 -3.9850819 -1.0455515 --0.12121558 -4.0075626 -1.0518602 --0.14654592 -4.0269914 -1.0573803 --0.17211922 -4.0462594 -1.0629004 --0.19708495 -4.048018 -1.063689 --0.22160076 -4.0409522 -1.0621119 --0.24816193 -4.0684071 -1.0699978 --0.27071831 -4.0311899 -1.0602719 --0.29431483 -4.0140576 -1.056066 --0.31901583 -4.0131378 -1.0563289 --0.34603032 -4.0389819 -1.063952 --0.37231156 -4.0531158 -1.0684205 --0.3984015 -4.0632377 -1.0718378 --0.42563277 -4.0827875 -1.0778836 --0.45099488 -4.0829759 -1.0786722 --0.47514239 -4.0724654 -1.0765693 --0.49611101 -4.0369153 -1.067632 --0.5152992 -3.9907367 -1.0558032 --0.53899801 -3.9817634 -1.054226 --0.87427199 -6.1687965 -1.6569704 --0.58258706 -3.9395359 -1.0445001 --0.95241052 -6.1738133 -1.6614391 --0.98659939 -6.1449904 -1.6551304 --1.0263524 -6.1511927 -1.6585476 --1.0653945 -6.1523843 -1.6606505 --1.1026129 -6.1428828 -1.6598619 --1.1390489 -6.1293616 -1.6580219 --1.1777302 -6.1279421 -1.6595991 --1.2119228 -6.1035662 -1.6548675 --1.248963 -6.0941248 -1.6543418 --1.2915241 -6.110889 -1.6611762 --1.3285846 -6.1009641 -1.6606505 --1.3672619 -6.0983458 -1.6622277 --1.4013995 -6.0757399 -1.6582848 --1.4370936 -6.0604553 -1.6564447 --1.4765383 -6.0608974 -1.6590734 --1.5148709 -6.0564032 -1.6603876 --1.5546441 -6.0572734 -1.6632792 --1.5925189 -6.0504193 -1.6640677 --1.6278533 -6.0340137 -1.6622277 --1.6653609 -6.0257716 -1.6627535 --1.7015144 -6.0126548 -1.6619649 --1.7386439 -6.0030279 -1.6622277 --1.7740737 -5.9876218 -1.6609133 --1.8146988 -5.9895501 -1.6645935 --1.8497022 -5.9727731 -1.6630163 --1.8886456 -5.9686694 -1.6651192 --1.9246393 -5.9551325 -1.6645935 --1.2783766 -3.8753872 -1.0713121 --1.3076777 -3.8839278 -1.0760436 --2.0285945 -5.9031863 -1.6601248 --2.067332 -5.897912 -1.6622277 --2.1044567 -5.8878412 -1.6630163 --2.1355872 -5.8612208 -1.6590734 --2.1772232 -5.8633819 -1.663542 --2.2138424 -5.851717 -1.6640677 --2.2517889 -5.8434243 -1.6656449 --2.2844274 -5.8214149 -1.6632792 --2.3315639 -5.8359575 -1.6716907 --2.3618746 -5.808136 -1.6677479 --2.3908246 -5.7774882 -1.6630163 --2.4340951 -5.7813821 -1.6685364 --1.3135597 -3.0685415 -0.86890769 --1.3331339 -3.0621929 -0.8694334 --1.3491621 -3.0477805 -0.86759341 --2.5716779 -5.711988 -1.6661706 --2.606276 -5.6952238 -1.6659077 --2.6448352 -5.6869974 -1.6682736 --1.6058267 -3.3992922 -0.98377877 --1.6224769 -3.3806779 -0.98115015 --1.6393822 -3.3628547 -0.97878438 --1.656987 -3.3466806 -0.97694433 --1.6787915 -3.3390362 -0.9777329 --1.7023206 -3.334687 -0.97957295 --1.7298572 -3.3378828 -0.98377877 --1.7655871 -3.3562334 -0.99271607 --2.1121595 -3.9554868 -1.1811887 --3.0203221 -5.5726357 -1.686411 --3.0428309 -5.5328655 -1.6798395 --3.0786037 -5.5174603 -1.6808909 --3.1043179 -5.4841943 -1.6764222 --3.1220508 -5.4374347 -1.6677479 --3.1752694 -5.4523559 -1.6785252 --3.2096462 -5.4344316 -1.6790509 --3.2414432 -5.4121523 -1.6782624 --3.2755923 -5.3938103 -1.6787881 --3.3141928 -5.3826466 -1.6816795 --3.3446023 -5.3581181 -1.6803652 --3.3799965 -5.3415709 -1.6816795 --3.431987 -5.3507767 -1.6914054 --3.4773786 -5.3490295 -1.6977142 --3.4766827 -5.2768402 -1.6811538 --3.5143545 -5.2634315 -1.6837825 --3.5346861 -5.2241907 -1.6779995 --3.5928688 -5.2405963 -1.6906168 --3.6293616 -5.2247906 -1.6927198 --2.1505597 -3.0565662 -0.9777329 --2.1687136 -3.0425277 -0.97747004 --2.1862111 -3.0275993 -0.97694433 --3.7861242 -5.174633 -1.7063886 --3.802289 -5.1303782 -1.6992913 --3.8203712 -5.0892062 -1.6932455 --3.852694 -5.067205 -1.6937712 --3.890779 -5.0526423 -1.6969256 --3.9270494 -5.0355201 -1.6992913 --3.9578729 -5.0113292 -1.6992913 --3.9746838 -4.9696226 -1.6932455 --3.9801993 -4.9144044 -1.6824682 --4.004159 -4.8824306 -1.6798395 --4.0297256 -4.8525748 -1.6779995 --4.0470033 -4.8129902 -1.6727422 --4.113369 -4.8314052 -1.6882511 --4.1429367 -4.8060751 -1.6882511 --4.1590223 -4.7653012 -1.682731 --4.1664572 -4.7151141 -1.6737937 --4.2152567 -4.7117481 -1.6819425 --4.2447357 -4.6865101 -1.6822053 --4.277977 -4.6653533 -1.6840453 --4.3242497 -4.6581054 -1.6911426 --4.3527498 -4.6314845 -1.6911426 --4.35847 -4.5809274 -1.6822053 --4.3777928 -4.5450659 -1.6787881 --4.4136829 -4.5264068 -1.6819425 --4.4610338 -4.5191483 -1.6895654 --4.4900432 -4.4930558 -1.6900911 --4.5058599 -4.4538922 -1.6856225 --4.5386276 -4.4315524 -1.6877254 --4.5622606 -4.4002724 -1.686411 --4.5821877 -4.3655419 -1.6837825 --4.5976439 -4.3267665 -1.6795766 --4.6241059 -4.2984743 -1.6795766 --4.63831 -4.2589293 -1.675108 --4.6607809 -4.2271485 -1.6737937 --4.6916618 -4.2029767 -1.6756337 --4.7021861 -4.160686 -1.6701136 --4.7210875 -4.1260424 -1.6677479 --4.7499681 -4.1001487 -1.6690621 --4.7713647 -4.0677967 -1.6677479 --4.7925439 -4.0353374 -1.6664335 --4.817956 -4.0064716 -1.6666963 --4.8372283 -3.9725482 -1.6648563 --4.8660092 -3.9464386 -1.6664335 --4.9006772 -3.9249489 -1.6701136 --4.8966637 -3.8726656 -1.6603876 --4.9203334 -3.8425472 -1.6603876 --4.9415259 -3.8105173 -1.6595991 --4.9655814 -3.7807093 -1.6598619 --5.0048842 -3.7623417 -1.665382 --5.041048 -3.7413342 -1.6698507 --5.0670228 -3.7126129 -1.6709021 --5.0990901 -3.6882362 -1.6740565 --5.1310487 -3.6636055 -1.6772109 --5.1258254 -3.6126041 -1.6680107 --5.1779966 -3.6020162 -1.6779995 --5.1888638 -3.5625334 -1.6743194 --5.2130218 -3.5322511 -1.675108 --5.2281799 -3.495909 -1.6730051 --5.2463107 -3.4616387 -1.6719537 --5.2585568 -3.4235938 -1.6690621 --5.2680979 -3.3839653 -1.665382 --5.3238101 -3.3737783 -1.6766851 --5.3378654 -3.3369582 -1.6745822 --5.3598828 -3.3051555 -1.675108 --5.399024 -3.2837336 -1.6811538 --5.4066586 -3.2431018 -1.6772109 --5.4156594 -3.2034822 -1.6737937 --5.427712 -3.1658185 -1.6714278 --5.4328146 -3.1242809 -1.6669593 --5.4904957 -3.1127689 -1.6790509 --5.5052805 -3.0766685 -1.6777366 --5.5156031 -3.0381773 -1.675108 --5.5180283 -2.9955339 -1.6701136 --5.5507689 -2.9693537 -1.6745822 --5.5979071 -2.9505293 -1.6835196 --5.6287513 -2.9227929 -1.6874626 --5.644002 -2.8868828 -1.686674 --5.6667795 -2.8548012 -1.6882511 --5.7179008 -2.8366935 -1.6985028 --5.7603421 -2.813832 -1.7061257 --5.7905431 -2.7847042 -1.7100687 --5.8136253 -2.7520103 -1.7119088 --5.8583908 -2.72932 -1.7203203 --5.860116 -2.6864896 -1.7158517 --5.8773694 -2.6508787 -1.7161145 --5.9243941 -2.6284552 -1.7253147 --5.9589825 -2.6001542 -1.7308348 --5.9774847 -2.5646825 -1.7316235 --5.9904418 -2.5268326 -1.7308348 --6.0174208 -2.4948301 -1.7342521 --6.0478063 -2.464047 -1.7387208 --6.1004353 -2.4419446 -1.749761 --6.1188955 -2.4058785 -1.7508124 --6.1569462 -2.3773203 -1.7576469 --6.1795373 -2.3425736 -1.7600126 --6.2308722 -2.3184011 -1.7707901 --6.239542 -2.2781413 -1.7692128 --6.2452273 -2.2368865 -1.7668471 --6.2843256 -2.2074733 -1.7742072 --6.3086996 -2.1726398 -1.7773616 --6.1792941 -2.0857782 -1.7363551 --6.2167106 -2.0559988 -1.7434523 --6.2677622 -2.0302961 -1.7544925 --6.3352857 -2.0092912 -1.7702643 --6.4092364 -1.9895345 -1.7878761 --6.492413 -1.9717474 -1.8081166 --6.566361 -1.9502683 -1.8257284 --6.712563 -1.9489268 -1.8638434 --6.8636317 -1.947179 -1.9032729 --6.9702945 -1.9312903 -1.9300849 --7.0490746 -1.9066122 -1.9490111 --7.0681043 -1.8652923 -1.9511139 --7.1167932 -1.8315008 -1.9616284 --7.1400638 -1.790848 -1.9650457 --7.1499805 -1.7467748 -1.9647828 --7.1849699 -1.7086705 -1.9716172 --7.1887383 -1.663031 -1.9697772 --7.2025728 -1.6197366 -1.9708287 --7.198236 -1.5724255 -1.9668857 --7.2068048 -1.5280284 -1.9666228 --7.21699 -1.4839736 -1.9668857 --7.244885 -1.4434305 -1.9721429 --7.2194991 -1.3923774 -1.9626799 --7.236443 -1.3496438 -1.9650457 --7.2616806 -1.3082931 -1.9697772 --7.239152 -1.2584286 -1.9613656 --7.2629142 -1.2166938 -1.9658343 --7.2502394 -1.1688846 -1.9603142 --7.2572751 -1.1243761 -1.9603142 --7.2793074 -1.0820925 -1.96452 --7.2676606 -1.0348258 -1.9595256 --7.2633572 -0.98878288 -1.956634 --7.2616329 -0.94320416 -1.9545312 --7.2845197 -0.90075839 -1.9592627 --7.3033252 -0.85761774 -1.9629427 --7.3046145 -0.81236321 -1.9618913 --7.3046637 -0.76702464 -1.960577 --7.314033 -0.72266322 -1.9618913 --7.3068008 -0.67670566 -1.958737 --7.2896676 -0.63003486 -1.9529539 --7.3097463 -0.58660388 -1.9574226 --7.3093591 -0.54145658 -1.9563712 --7.3183193 -0.49698833 -1.9579483 --7.3270092 -0.45243046 -1.9595256 --7.3383174 -0.40794489 -1.9618913 --7.3493557 -0.36333752 -1.9642571 --7.334096 -0.31748754 -1.9595256 --7.3503685 -0.27301529 -1.9634686 --7.3085084 -0.2265707 -1.9516397 --7.3174772 -0.18191287 -1.9537426 --7.3117032 -0.1368849 -1.9519025 --7.3345947 -0.092294268 -1.9579483 --7.3330932 -0.047276165 -1.9574226 --7.3023705 -0.0022755454 -1.9490111 --7.3543472 0.042842731 -1.9632056 --7.3394747 0.087791964 -1.9592627 --7.2915287 0.13196148 -1.9463824 --7.3281989 0.17761669 -1.956634 --7.3192563 0.22234273 -1.9545312 --7.307148 0.26685965 -1.9516397 --7.3169403 0.31218579 -1.954794 --7.3187418 0.35726461 -1.9558455 --7.2855844 0.40046543 -1.9474338 --7.2695074 0.44433513 -1.9437538 --7.3041873 0.49146372 -1.9540055 --7.0090799 -0.17823984 -1.9578735 --7.0100417 -0.13522957 -1.9578735 --7.021317 -0.092353962 -1.9608889 --7.005403 -0.04915458 -1.9562287 --7.0199986 -0.006182842 -1.9603406 --7.0141339 0.036861181 -1.9586959 --7.0214691 0.079985604 -1.9608889 --7.0006533 0.12271423 -1.9551322 --6.9988074 0.16564442 -1.9548581 --7.0043879 0.20878536 -1.956777 --6.9952865 0.25148359 -1.954584 --6.9849639 0.29403758 -1.9521168 --6.9945555 0.33744642 -1.9554063 --6.9894724 0.38020134 -1.954584 --6.9850879 0.42296463 -1.9540358 --6.9574127 0.46415338 -1.9469084 --6.9755349 0.50837117 -1.9529392 --6.9646149 0.55055684 -1.9507462 --6.9764371 0.59458631 -1.9551322 --6.9736152 0.63746923 -1.9554063 --6.9705296 0.68033987 -1.9556805 --6.903091 0.71654791 -1.9375881 --6.9339337 0.76277977 -1.9477308 --6.9329443 0.80575514 -1.9488273 --6.9125962 0.84641045 -1.9444413 --6.922534 0.89077234 -1.9488273 --6.917891 0.93335998 -1.9491014 --6.8996549 0.97404289 -1.9455378 --6.8973536 1.0169209 -1.9466343 --6.8871822 1.0586389 -1.9455378 --6.8805566 1.100878 -1.9455378 --6.8679805 1.1421293 -1.943893 --6.8655815 1.1850666 -1.9452636 --6.8619676 1.2278479 -1.9463601 --6.864706 1.2718557 -1.9493755 --6.8416605 1.3110577 -1.9449896 --6.8127327 1.3489046 -1.9389588 --6.8071547 1.3912588 -1.9397811 --6.8041358 1.4341904 -1.9414259 --6.7801709 1.4726478 -1.9370399 --6.7775769 1.5156912 -1.9389588 --6.7606516 1.5555243 -1.9367657 --6.7463007 1.5958711 -1.9353951 --6.7373161 1.6374626 -1.9356692 --6.7103462 1.6745808 -1.9307349 --6.7101932 1.718347 -1.9337503 --6.6930118 1.7577779 -1.9318314 --6.680243 1.7983125 -1.9312831 --6.6700101 1.8395234 -1.9315573 --6.6604486 1.8809379 -1.9321055 --6.6663361 1.9268429 -1.9373139 --6.6211872 1.9578952 -1.9274454 --6.6044464 1.9970937 -1.9260747 --6.6150384 2.0446787 -1.932928 --6.5941143 2.0826232 -1.9304608 --6.5821271 2.1233399 -1.9307349 --6.5680609 2.1633863 -1.9304608 --6.5391665 2.1984375 -1.9258006 --6.5601215 2.2503755 -1.9362174 --6.5371127 2.2874095 -1.9334762 --6.5003099 2.3193991 -1.926623 --6.493186 2.3618701 -1.928816 --6.4722595 2.3993275 -1.9268972 --6.4682117 2.4430726 -1.9301866 --6.4405336 2.477881 -1.9263489 --6.4234176 2.5166512 -1.9258006 --6.4096413 2.5567296 -1.9263489 --6.386704 2.5931165 -1.9241558 --6.3840051 2.6377635 -1.9282677 --6.3721328 2.6787486 -1.9296384 --6.3555765 2.7177968 -1.9296384 --6.3273158 2.7517574 -1.9260747 --6.3015165 2.7866404 -1.9233335 --6.2930708 2.8291962 -1.9260747 --6.2790918 2.869355 -1.9271712 --6.2596231 2.9070189 -1.926623 --6.2407985 2.944962 -1.9263489 --6.2156734 2.9798739 -1.9241558 --6.1981368 3.0183775 -1.92443 --6.1657071 3.049531 -1.9200439 --6.1657863 3.0968003 -1.9260747 --6.1483822 3.1354482 -1.926623 --6.1213412 3.1691363 -1.9241558 --6.1009293 3.2061889 -1.9238818 --6.0735044 3.2394903 -1.9214146 --6.0501299 3.2748647 -1.9203181 --6.0307646 3.3123889 -1.9205922 --6.0086465 3.3483944 -1.9200439 --5.9712443 3.3757353 -1.9145614 --5.9495845 3.4118321 -1.9142873 --5.9318628 3.4502077 -1.9153838 --5.9246631 3.4948456 -1.9200439 --5.8948545 3.5261965 -1.9173027 --5.8722849 3.5618017 -1.9170285 --5.8593307 3.6033072 -1.9200439 --5.8411918 3.6417353 -1.9214146 --5.8138585 3.6744251 -1.9197699 --5.7968717 3.7136602 -1.9216887 --5.7505846 3.7339725 -1.9137391 --5.7436328 3.7797594 -1.9192215 --5.7419357 3.8293362 -1.926623 --5.7087693 3.8580346 -1.9233335 --5.6714997 3.883754 -1.9186733 --5.6538839 3.9228659 -1.9208664 --5.634428 3.9608018 -1.9225111 --5.6108022 3.9958572 -1.9227853 --5.5799389 4.0257082 -1.9205922 --5.5559092 4.0604377 -1.9208664 --5.5270252 4.0915909 -1.9194957 --5.4971991 4.1219659 -1.917851 --5.4564857 4.1439862 -1.9123684 --5.429431 4.1762161 -1.9118202 --5.3976345 4.2047243 -1.9096271 --5.3694682 4.2359776 -1.9088048 --5.3441267 4.2694445 -1.9090788 --5.3275495 4.3100176 -1.9126425 --5.3069553 4.3475008 -1.9148356 --5.2772188 4.3775263 -1.9137391 --5.2561507 4.414772 -1.9159321 --5.2311611 4.4488091 -1.9167545 --5.1964774 4.4745483 -1.9140131 --5.1602254 4.4987659 -1.9107237 --5.1267557 4.5252528 -1.9085306 --5.1017613 4.5591879 -1.9096271 --5.0694118 4.586535 -1.9079823 --5.0340819 4.6110587 -1.9052411 --5.0078096 4.6438222 -1.9060634 --4.9715085 4.667222 -1.903048 --4.9448686 4.699626 -1.9038705 --4.9020786 4.7165442 -1.8983879 --4.884069 4.7572694 -1.902774 --4.8513632 4.783772 -1.9014033 --4.8205576 4.8120909 -1.9008551 --4.799058 4.849781 -1.9041445 --4.7725716 4.8825746 -1.9055152 --4.7391825 4.9083076 -1.9041445 --4.7036662 4.9317274 -1.9019516 --4.6654034 4.9520965 -1.8986621 --4.6421371 4.9883733 -1.9016775 --4.6166487 5.0224266 -1.9038705 --4.5825119 5.0470996 -1.9024998 --4.5508151 5.0744066 -1.9022257 --4.5170426 5.0993547 -1.9011291 --4.4837689 5.1248035 -1.9003068 --4.4503527 5.1500363 -1.8994844 --4.4167957 5.1750517 -1.8986621 --4.3911576 5.2094083 -1.9014033 --4.3449578 5.219255 -1.8950984 --4.3061328 5.2376461 -1.892083 --4.2630019 5.2505312 -1.8871487 --4.2908678 5.3516164 -1.9145614 --4.2573533 5.37709 -1.9142873 --4.203547 5.3765955 -1.9046929 --4.1769423 5.4106603 -1.9077083 --4.1576571 5.4545426 -1.9142873 --4.1015558 5.4499846 -1.9035963 --4.055419 5.4580669 -1.8975655 --4.0252657 5.4875002 -1.8992103 --3.9920831 5.5128741 -1.8994844 --3.9609783 5.5411773 -1.9008551 --3.9285669 5.5677342 -1.9016775 --3.9031246 5.6043606 -1.9060634 --3.886642 5.6543565 -1.9151096 --3.862133 5.6932187 -1.9203181 --3.8121464 5.6944337 -1.9126425 --3.7739534 5.7129035 -1.9109977 --3.7456563 5.7464252 -1.9145614 --3.709806 5.7684913 -1.9142873 --3.6846466 5.8073859 -1.9197699 --3.6555774 5.8404822 -1.9233335 --3.6338193 5.8857136 -1.9310091 --3.5821297 5.8824377 -1.9225111 --3.5479491 5.9076042 -1.9236076 --3.5033021 5.9151964 -1.9189475 --3.4679112 5.938242 -1.9194957 --3.4275701 5.9527416 -1.9173027 --3.3957283 5.9820237 -1.9200439 --3.3505054 5.9876413 -1.9151096 --3.3197415 6.0190339 -1.9186733 --3.2933114 6.058723 -1.9249783 --3.2569821 6.0805116 -1.9255265 --3.2200603 6.1012321 -1.9258006 --3.1870003 6.1294074 -1.9285419 --3.1423156 6.1351523 -1.9241558 --3.1093769 6.1637626 -1.9271712 --3.0821962 6.2042561 -1.9340245 --3.0347719 6.2040467 -1.9279937 --3.0100017 6.2502766 -1.9367657 --2.9695339 6.2642832 -1.9353951 --2.9310412 6.2823858 -1.9353951 --2.8924379 6.3002524 -1.9353951 --2.8481829 6.3056116 -1.9315573 --2.8141253 6.3335147 -1.9348468 --2.7759809 6.3524251 -1.9353951 --2.7335334 6.3613868 -1.932928 --2.7000637 6.3913274 -1.9370399 --2.6593208 6.404222 -1.9359434 --2.6228826 6.4275417 -1.9381363 --2.5780256 6.4301252 -1.9340245 --2.5490959 6.4726663 -1.9422482 --2.4996178 6.4630713 -1.9345727 --2.4681087 6.4998641 -1.9411517 --2.4295235 6.5184903 -1.9422482 --2.3855164 6.5224371 -1.9389588 --2.3564949 6.5677271 -1.948279 --2.3040195 6.5475912 -1.9378622 --2.2622323 6.5570598 -1.9364916 --2.223805 6.576283 -1.9381363 --2.1949077 6.6244931 -1.9485532 --2.1527345 6.6332626 -1.9471825 --2.1233537 6.6820908 -1.9578735 --2.0723147 6.6628537 -1.948279 --2.0277529 6.6634836 -1.9447154 --1.9851822 6.67027 -1.9430707 --1.9423357 6.6758614 -1.9411517 --1.9047564 6.6996789 -1.9447154 --1.8625827 6.7075338 -1.9436189 --1.8178675 6.7058415 -1.9397811 --1.7813606 6.7345338 -1.9449896 --1.736641 6.7323008 -1.9411517 --1.6948305 6.7409644 -1.9406035 --1.6534369 6.7512369 -1.9406035 --1.6115348 6.7593842 -1.9400553 --1.5689429 6.764461 -1.9386846 --1.5231757 6.755198 -1.933202 --1.4810804 6.7615986 -1.9323797 --1.4459661 6.8006601 -1.9411517 --1.4032394 6.8046951 -1.9397811 --1.3631567 6.8216643 -1.9422482 --1.325111 6.8497276 -1.948005 --1.2821723 6.853003 -1.9466343 --1.2378745 6.8484387 -1.9430707 --1.1954994 6.8540106 -1.9425224 --1.1566112 6.8801847 -1.948005 --1.114527 6.8881011 -1.948279 --1.075346 6.9147658 -1.9540358 --1.0358796 6.9412079 -1.9597924 --0.98877627 6.9160171 -1.9507462 --0.94371539 6.9028974 -1.9452636 --0.9055742 6.9409804 -1.954584 --0.86261225 6.9435434 -1.9537616 --0.81965297 6.9458404 -1.9529392 --0.77659106 6.9469161 -1.9518427 --0.73415303 6.9534631 -1.9523909 --0.689951 6.9425254 -1.948005 --0.64671451 6.9399252 -1.946086 --0.60395294 6.9418468 -1.9455378 --0.56157976 6.9482975 -1.9463601 --0.52051145 6.9727111 -1.9523909 --0.47725758 6.9690576 -1.9504721 --0.43430766 6.9689751 -1.9496497 --0.3917006 6.9743891 -1.9504721 --0.34803358 6.9593725 -1.9455378 --0.3063378 6.9844356 -1.9521168 --0.26318595 6.9784956 -1.9499238 --0.22072656 6.9915137 -1.9532133 --0.17772527 6.9888906 -1.9521168 --0.13491331 6.9936957 -1.9532133 --0.091731489 6.9741983 -1.9474567 --0.048896067 6.9688597 -1.9458119 --0.00613232 6.9661436 -1.9449896 -0.036656238 6.9747052 -1.9474567 -0.079440631 6.9733872 -1.9471825 -0.12232783 6.978538 -1.9488273 -0.16507694 6.9747715 -1.948005 -0.20801322 6.9784336 -1.9493755 -0.25082818 6.977026 -1.9493755 -0.29403758 6.9849639 -1.9521168 -0.33693728 6.9839892 -1.9523909 -0.38009697 6.9875517 -1.9540358 -0.42162898 6.9630094 -1.9477308 -0.46319398 6.9430194 -1.9427965 -0.50711393 6.9582701 -1.948005 -0.54926938 6.9483166 -1.946086 -0.59197474 6.9457741 -1.9463601 -0.63204485 6.9142375 -1.9384105 -0.67520487 6.9178863 -1.9406035 -0.71883029 6.9250917 -1.943893 -0.76193899 6.9262862 -1.9455378 -0.8047564 6.9243464 -1.9463601 -0.84746194 6.9211874 -1.9469084 -0.88745993 6.8967805 -1.9414259 -0.92500544 6.8559418 -1.9312831 -0.96813029 6.8577552 -1.9334762 -1.0117328 6.8621516 -1.9364916 -1.0538192 6.8558145 -1.9364916 -1.0961696 6.8511186 -1.9370399 -1.1394483 6.8518529 -1.9392328 -1.1817961 6.8466277 -1.9397811 -1.2256466 6.8496609 -1.9427965 -1.26485 6.8268819 -1.9384105 -1.3054485 6.8123808 -1.9364916 -1.346477 6.8004689 -1.9353951 -1.3877935 6.7901945 -1.9348468 -1.431216 6.7900205 -1.9373139 -1.4704031 6.7698336 -1.9340245 -1.5152715 6.7757001 -1.9384105 -1.5555243 6.7606516 -1.9367657 -1.5969777 6.7509799 -1.9367657 -1.6429123 6.7597442 -1.9422482 -1.6878502 6.7635326 -1.9463601 -1.7243098 6.7334843 -1.9406035 -1.7655933 6.7227774 -1.9406035 -1.8070601 6.7127457 -1.9408776 -1.8443804 6.6876249 -1.9367657 -1.8895611 6.6909904 -1.9411517 -1.9273769 6.6681838 -1.9378622 -1.9679831 6.6553097 -1.9375881 -2.0065558 6.6357446 -1.9353951 -2.044111 6.6132007 -1.9323797 -2.088994 6.6142898 -1.9364916 -2.1271775 6.5940251 -1.9342985 -2.1724107 6.5954642 -1.9386846 -2.213758 6.5847449 -1.939507 -2.2485037 6.5546637 -1.9345727 -2.2880447 6.538928 -1.9340245 -2.3268313 6.5211425 -1.932928 -2.3654857 6.5031276 -1.9318314 -2.4030039 6.4821787 -1.9299126 -2.4444315 6.4718103 -1.9312831 -2.4865127 6.4629731 -1.933202 -2.5264726 6.4484897 -1.9334762 -2.5674171 6.4364395 -1.9345727 -2.6046917 6.4152184 -1.932928 -2.6418025 6.3937826 -1.9312831 -2.6746497 6.3623805 -1.926623 -2.7136381 6.3458495 -1.926623 -2.7525244 6.3290796 -1.926623 -2.7913072 6.3120713 -1.926623 -2.8252532 6.2842994 -1.9233335 -2.8609622 6.2607226 -1.9214146 -2.9066138 6.2587509 -1.9263489 -2.9457827 6.242538 -1.9268972 -2.9794581 6.2148061 -1.9238818 -3.0179565 6.1972718 -1.9241558 -3.0537939 6.1743274 -1.9227853 -3.0808318 6.1339879 -1.9159321 -3.1210322 6.1201096 -1.9175768 -3.1510103 6.0863252 -1.9129167 -3.1963477 6.0822001 -1.917851 -3.2331548 6.0616245 -1.9175768 -3.2611325 6.0247569 -1.9120942 -3.3022046 6.0122199 -1.9145614 -3.3437135 6.0002456 -1.9173027 -3.3695831 5.9603605 -1.9109977 -3.4065702 5.9404073 -1.9112719 -3.4482739 5.9285378 -1.9142873 -3.4855628 5.9089246 -1.9148356 -3.5252092 5.8932037 -1.9167545 -3.5667884 5.8805075 -1.9197699 -3.5851731 5.8298392 -1.9101753 -3.600527 5.7750869 -1.8992103 -3.6287022 5.7415042 -1.8953725 -3.6809807 5.7458539 -1.9044187 -3.7151201 5.7215466 -1.9038705 -3.741699 5.6857896 -1.8994844 -3.7887871 5.6811266 -1.9057894 -3.8434968 5.6872549 -1.9159321 -3.8201859 5.5786586 -1.8866005 -3.8521514 5.5519528 -1.8855039 -3.9010763 5.5494552 -1.8929054 -3.9333801 5.5230637 -1.892083 -3.9913881 5.5323625 -1.9038705 -3.9997258 5.4728265 -1.8915347 -4.0349474 5.4505005 -1.8923571 -4.0469704 5.3971701 -1.8822144 -4.0794291 5.3714709 -1.8819402 -4.1205192 5.3570113 -1.8857781 -4.1846318 5.3718386 -1.9003068 -4.1907125 5.3120832 -1.887971 -4.2016196 5.2592196 -1.8781025 -4.2428827 5.2445555 -1.8822144 -4.2652326 5.2065191 -1.8778284 -4.3099918 5.1957946 -1.8835851 -4.3541613 5.18398 -1.8890676 -4.4095612 5.1850057 -1.8994844 -4.4199586 5.1330729 -1.8901641 -4.4494758 5.1036811 -1.8893417 -4.487071 5.0834937 -1.892083 -4.5098481 5.0465431 -1.8885193 -4.5568576 5.0366058 -1.8953725 -4.5753345 4.9950757 -1.8901641 -4.6065516 4.9676132 -1.8904382 -4.6349711 4.937151 -1.8896159 -4.6896892 4.934412 -1.8997586 -4.7138772 4.8993063 -1.8972914 -4.7431788 4.8696012 -1.8970172 -4.7709436 4.8383517 -1.8961949 -4.7923884 4.8008184 -1.8929054 -4.8190217 4.7686167 -1.8918089 -4.8626318 4.7530756 -1.8975655 -4.8923965 4.7238178 -1.8978397 -4.9025002 4.6757874 -1.8904382 -4.9289985 4.64364 -1.8896159 -4.9595103 4.6152744 -1.8904382 -4.9856119 4.5828037 -1.8896159 -5.0207572 4.5585914 -1.8923571 -5.0550766 4.5334778 -1.8948243 -5.1087127 4.5253329 -1.9046929 -5.1219087 4.4812355 -1.8992103 -5.150764 4.4509816 -1.8997586 -5.180172 4.4211664 -1.9005809 -5.1910262 4.3756614 -1.8945501 -5.2236896 4.34865 -1.8967432 -5.2473025 4.3140731 -1.8956467 -5.2684488 4.2775512 -1.8937278 -5.3013482 4.2505589 -1.8961949 -5.3303452 4.2203383 -1.8972914 -5.3667469 4.1958461 -1.9011291 -5.3908687 4.1616616 -1.9005809 -5.4201264 4.1314211 -1.9019516 -5.4476795 4.0998206 -1.902774 -5.4704175 4.0645967 -1.9019516 -5.4859495 4.024128 -1.8986621 -5.5097589 3.9898269 -1.8983879 -5.5317893 3.9542665 -1.8975655 -5.5575194 3.9213586 -1.8981137 -5.5783195 3.8849859 -1.8970172 -5.5925422 3.8441472 -1.8937278 -5.6398988 3.8259575 -1.9019516 -5.6440897 3.7784388 -1.8953725 -5.6679697 3.7442665 -1.8956467 -5.7045331 3.7183461 -1.9003068 -5.7361379 3.6889966 -1.9033222 -5.7570415 3.6527002 -1.902774 -5.783421 3.6198583 -1.9041445 -5.7940679 3.57723 -1.9003068 -5.8150868 3.5411108 -1.9000326 -5.830934 3.5018971 -1.8981137 -5.8605862 3.4709544 -1.9008551 -5.8875861 3.4383245 -1.902774 -5.9110723 3.403574 -1.9035963 -5.9318452 3.3672402 -1.9035963 -5.9523945 3.3307796 -1.9035963 -5.9744039 3.2951226 -1.9041445 -5.9784565 3.2496753 -1.8989362 -6.0067606 3.2174723 -1.9016775 -6.0365953 3.1859419 -1.904967 -6.0654159 3.1537228 -1.9079823 -6.0743814 3.1111853 -1.9046929 -6.0847712 3.0695231 -1.9019516 -6.1112418 3.0359812 -1.9044187 -6.130619 2.9988487 -1.9046929 -6.1463051 2.9599235 -1.9038705 -6.1686959 2.9242148 -1.9052411 -6.183908 2.8850894 -1.9044187 -6.2172256 2.8543148 -1.909353 -6.197813 2.7994838 -1.8978397 -6.2491479 2.7766333 -1.9085306 -6.2678294 2.7390072 -1.9090788 -6.276566 2.6970794 -1.9066117 -6.2965403 2.6600134 -1.9077083 -6.3207364 2.6246483 -1.9101753 -6.3287086 2.582545 -1.9077083 -6.3435431 2.5433064 -1.9074341 -6.362608 2.5057449 -1.9085306 -6.369791 2.4635348 -1.9060634 -6.3928785 2.4274771 -1.9085306 -6.4193673 2.3925724 -1.9120942 -6.4303145 2.3518174 -1.9109977 -6.4382877 2.3100436 -1.9090788 -6.4505262 2.2698569 -1.9085306 -6.4616051 2.2292936 -1.9077083 -6.4660521 2.1865227 -1.904967 -6.4884753 2.1498318 -1.9077083 -6.4997149 2.109385 -1.9071599 -6.5143685 2.0700464 -1.9077083 -6.5379672 2.033464 -1.9109977 -6.5356007 1.988829 -1.9066117 -6.5587416 1.9519825 -1.9099013 -6.5825992 1.9151953 -1.9134649 -6.5979266 1.8758215 -1.9145614 -6.6139455 1.8365889 -1.9159321 -6.6297312 1.7972302 -1.9173027 -6.6350555 1.7550412 -1.9156579 -6.6391811 1.7126144 -1.9137391 -6.6486316 1.6716104 -1.9134649 -6.6681042 1.6330719 -1.9162061 -6.6798701 1.5925726 -1.9167545 -6.6923265 1.5522077 -1.9175768 -6.7045388 1.51175 -1.9183992 -6.7042947 1.4685249 -1.9156579 -6.7178826 1.4283608 -1.9170285 -6.7255783 1.3869195 -1.9167545 -6.7283034 1.3444949 -1.9151096 -6.7420917 1.3042818 -1.9167545 -6.7603655 1.2648346 -1.9197699 -6.762321 1.2223034 -1.918125 -6.7706413 1.1809528 -1.9183992 -6.7938824 1.1420979 -1.9230593 -6.7998128 1.1002363 -1.9227853 -6.8054857 1.058345 -1.9225111 -6.8004375 1.0148633 -1.9192215 -6.7941604 0.97134739 -1.9156579 -6.8123794 0.93133503 -1.9192215 -6.8208265 0.88989097 -1.9200439 -6.8442912 0.85027611 -1.9252523 -6.8560648 0.80905366 -1.9271712 -6.8322282 0.76376349 -1.9189475 -6.8597388 0.7242521 -1.9255265 -6.8774509 0.68348014 -1.9293643 -6.8728976 0.64046443 -1.9268972 -6.866159 0.59736359 -1.9238818 -6.8744879 0.55561 -1.9252523 -6.8710546 0.51291698 -1.9233335 -6.8731132 0.47068155 -1.9230593 -6.8797112 0.42873955 -1.9241558 -6.8898935 0.38695022 -1.9263489 -6.8930988 0.34471542 -1.926623 -6.8970056 0.30249807 -1.9271712 -6.9016151 0.26028204 -1.9279937 -6.9059658 0.21802083 -1.928816 -6.8994823 0.1754465 -1.926623 -6.9090829 0.13327619 -1.9290901 -6.9184251 0.090994678 -1.9315573 -6.9150062 0.0485151 -1.9304608 -6.9219055 0.0060908198 -1.9323797 -6.9189277 -0.036366314 -1.9315573 -6.9099197 -0.078721277 -1.9290901 -6.9093065 -0.12111826 -1.9290901 -6.8997803 -0.1633064 -1.926623 -6.9034548 -0.20578258 -1.9279937 -6.8866849 -0.24758556 -1.9236076 -6.9071355 -0.29076582 -1.9299126 -6.8927341 -0.33254001 -1.9263489 -6.9068885 -0.37571383 -1.9310091 -6.9092531 -0.41837698 -1.9323797 -6.912313 -0.46114725 -1.9340245 -6.8920889 -0.50229448 -1.9290901 -6.894629 -0.54502851 -1.9307349 -6.895946 -0.58773094 -1.9321055 -6.8902946 -0.6298576 -1.9315573 -6.8815145 -0.67165697 -1.9301866 -6.8868294 -0.71486086 -1.932928 -6.8670187 -0.75542259 -1.9285419 -6.8737173 -0.79887515 -1.9318314 -6.8734589 -0.84162062 -1.933202 -6.87675 -0.88488364 -1.9356692 -6.8692851 -0.9268049 -1.9351209 -6.8539462 -0.96759278 -1.9323797 -6.845026 -1.0092089 -1.9315573 -6.8453584 -1.0522126 -1.9334762 -6.8482695 -1.095714 -1.9362174 -6.8594422 -1.1407099 -1.9414259 -6.852314 -1.1827772 -1.9414259 -6.8591275 -1.22734 -1.9455378 -6.8249903 -1.2644998 -1.9378622 -6.8180475 -1.3065343 -1.9381363 -6.7976384 -1.3459169 -1.9345727 -6.7760611 -1.3849058 -1.9307349 -6.7552023 -1.423879 -1.9271712 -6.7801709 -1.4726478 -1.9370399 -6.7578683 -1.5112848 -1.933202 -6.7587771 -1.5550932 -1.9362174 -6.7500439 -1.5967563 -1.9364916 -6.7457266 -1.6395062 -1.9381363 -6.7224765 -1.6776072 -1.9342985 -6.7073979 -1.7176313 -1.932928 -6.6883612 -1.7565567 -1.9304608 -6.688601 -1.8005619 -1.9337503 -6.6644478 -1.8379897 -1.9299126 -6.6511936 -1.8783247 -1.9293643 -6.6275325 -1.9156296 -1.9258006 -6.5713863 -1.9431722 -1.9126425 -6.4995041 -1.9653673 -1.8948243 -6.3761454 -1.9708532 -1.8616549 -6.2593875 -1.9769276 -1.8304044 -6.1345615 -1.9789879 -1.7966868 -6.0665836 -1.9982423 -1.779965 -5.988575 -2.0133672 -1.7602279 -5.913341 -2.0285468 -1.7413131 -5.849041 -2.0466905 -1.7256879 -5.7693448 -2.058629 -1.7054025 -5.7303953 -2.0844584 -1.6974528 -5.6814275 -2.1062112 -1.6864877 -5.6171155 -2.1216662 -1.6708624 -5.5465465 -2.1339951 -1.6533183 -5.4840989 -2.1486957 -1.6382413 -5.2215881 -2.0829098 -1.5617598 -5.1757398 -2.1015255 -1.5516171 -5.0187564 -2.0737591 -1.5072086 -4.8924575 -2.0568168 -1.4721203 -4.8240366 -2.0629792 -1.4548503 -4.7081027 -2.047672 -1.4227774 -4.6365194 -2.0504661 -1.404411 -4.5256095 -2.0347168 -1.3737087 -4.5716457 -2.0892243 -1.3920752 -4.3703351 -2.0297523 -1.3328638 -4.3186598 -2.0380638 -1.320528 -4.2514386 -2.0383358 -1.3032581 -4.2103186 -2.0504906 -1.2942119 -4.1830029 -2.0690389 -1.2895517 -4.1624942 -2.0907822 -1.2870846 -4.1187439 -2.1005569 -1.277216 -4.0348911 -2.0890954 -1.2544634 -3.8772719 -2.0377679 -1.2078618 -3.7730505 -2.0126455 -1.1782562 -3.7124214 -2.0096674 -1.1626309 -3.6713603 -2.016669 -1.1533105 -3.6488359 -2.0335412 -1.150021 -3.6195457 -2.046427 -1.1445385 -3.598578 -2.0638142 -1.1417972 -3.5767024 -2.0805376 -1.1387818 -3.5265934 -2.0804594 -1.1264461 -3.4939535 -2.0902116 -1.1198671 -3.4588606 -2.0981462 -1.1124656 -3.4295371 -2.1092553 -1.1069831 -3.3936794 -2.116014 -1.0993075 -3.316407 -2.0962119 -1.0776515 -3.3051021 -2.117559 -1.0781997 -3.3565755 -2.1796932 -1.1001298 -3.309396 -2.1780457 -1.0886165 -3.2743661 -2.1839051 -1.0812151 -3.2441709 -2.1926482 -1.0754584 -3.1703491 -2.1712205 -1.0546248 -3.2130687 -2.229553 -1.0740879 -3.1843789 -2.2387187 -1.0688794 -3.1658821 -2.2548687 -1.0672346 -3.1473074 -2.2708759 -1.0655899 -3.1271026 -2.2856054 -1.0633968 -3.0998788 -2.2950234 -1.0587367 -3.0788133 -2.3088088 -1.0562695 -3.0814385 -2.3404517 -1.0623003 -3.0693069 -2.3610737 -1.0631227 -3.0585554 -2.382817 -1.0644934 -3.0310409 -2.3914139 -1.0598332 -3.0072937 -2.4027646 -1.0565437 -3.0111864 -2.4362922 -1.0633968 -3.0423071 -2.4925048 -1.0803927 -2.9980876 -2.4871814 -1.0697018 -2.9820337 -2.5049119 -1.0694276 -2.956351 -2.5144403 -1.0655899 -2.9474261 -2.5381801 -1.0680571 -2.8991749 -2.5277805 -1.0557213 -2.898752 -2.5588856 -1.061478 -2.8521602 -2.5490706 -1.0496905 -2.845737 -2.5749102 -1.0532541 -2.8270473 -2.5897248 -1.0521576 -2.8287339 -2.6233692 -1.0590109 -2.828711 -2.6558146 -1.0653157 -2.7761114 -2.6386728 -1.0510612 -2.7806599 -2.6756592 -1.0592849 -2.7958815 -2.7235355 -1.0718948 -2.7866504 -2.7480667 -1.0749102 -2.7588458 -2.7542434 -1.0705242 -2.726335 -2.755398 -1.0642192 -2.7241669 -2.7872036 -1.07025 -2.7043417 -2.8010991 -1.0691535 -2.6632073 -2.7925882 -1.0592849 -2.6512983 -2.8144763 -1.061478 -2.613668 -2.8088682 -1.0529801 -2.5944314 -2.8227284 -1.0521576 -2.5835276 -2.8457141 -1.054899 -2.5602388 -2.8550694 -1.0524318 -2.5535135 -2.8829625 -1.057092 -2.5307097 -2.8927863 -1.054899 -2.5047374 -2.8988011 -1.0513352 -2.4819086 -2.9082634 -1.0491422 -2.4621575 -2.9212317 -1.0483198 -2.4349568 -2.9251983 -1.0442079 -2.4108543 -2.9326556 -1.0414667 -2.3831151 -2.9354479 -1.0370806 -2.3494163 -2.9305084 -1.0299534 -2.3385551 -2.9539163 -1.0332428 -2.3120928 -2.9576035 -1.0294051 -2.2915509 -2.9686897 -1.0283086 -2.2756245 -2.9857538 -1.0294051 -2.2659364 -3.0111861 -1.033517 -2.250859 -3.0296643 -1.0351617 -2.240191 -3.0542738 -1.0389996 -2.2287412 -3.0780876 -1.0425632 -2.2193205 -3.1050043 -1.0472233 -2.1941276 -3.1099203 -1.0442079 -2.1865468 -3.1398964 -1.0499647 -2.1677845 -3.1540463 -1.0502387 -2.1559498 -3.1784296 -1.0540766 -2.1299863 -3.182009 -1.050787 -2.0923975 -3.1677372 -1.0414667 -2.0466616 -3.1402352 -1.0277604 -2.0330777 -3.1616313 -1.0307758 -2.0342507 -3.206527 -1.0417408 -2.0048423 -3.2034605 -1.0365324 -1.9967694 -3.2345219 -1.0428374 -2.0184045 -3.3148854 -1.0655899 -1.9772291 -3.2925825 -1.0540766 -1.9408151 -3.2773473 -1.0450304 -1.9221243 -3.2916856 -1.0458528 -1.8846134 -3.2734158 -1.0359842 -1.861169 -3.2790637 -1.0340652 -1.8386657 -3.2862258 -1.0326946 -1.8128932 -3.2873409 -1.0294051 -1.8064681 -3.32375 -1.0376289 -1.7942144 -3.3500307 -1.0425632 -1.7754209 -3.3643785 -1.0436597 -1.7582936 -3.3820348 -1.0458528 -1.7283012 -3.3747852 -1.040096 -1.6984643 -3.3672957 -1.0343394 -1.683334 -3.3888502 -1.0379031 -1.6646218 -3.4034343 -1.0392736 -1.6395342 -3.4049199 -1.0365324 -1.6087233 -3.3940604 -1.0299534 -1.5964072 -3.4221687 -1.03571 -1.5866154 -3.4563706 -1.0433856 -1.5697329 -3.4756813 -1.046401 -1.5452526 -3.4782171 -1.0442079 -1.527733 -3.4964452 -1.0469493 -1.4849857 -3.4562745 -1.0315981 -1.2829634 -3.0374491 -0.89919472 -1.3535653 -3.2601948 -0.96553349 -1.4629065 -3.5854175 -1.0631227 -1.4501854 -3.6175339 -1.07025 -1.4254942 -3.6201005 -1.0683311 -1.4129695 -3.653893 -1.0760067 -1.3826699 -3.6418161 -1.0697018 -1.3693678 -3.6745617 -1.0771033 -1.3517511 -3.6964421 -1.0812151 -1.3313186 -3.7110031 -1.0831341 -1.3136317 -3.7336164 -1.08752 -1.310461 -3.7988789 -1.1047901 -1.2772671 -3.7776964 -1.096018 -1.2440803 -3.7553377 -1.0869718 -1.1978552 -3.6915531 -1.0655899 -1.1472173 -3.6108479 -1.0392736 -1.1198978 -3.6012902 -1.0343394 -1.0188117 -3.3486481 -0.95703554 -0.98946559 -3.3253412 -0.94826347 -0.96259385 -3.3091884 -0.94168442 -0.93964046 -3.3057823 -0.93894315 -0.92191249 -3.3207519 -0.94168442 -0.90655291 -3.3449097 -0.94716698 -0.80680794 -3.0510442 -0.85889804 -0.78759134 -3.054075 -0.8583498 -0.94685864 -3.7667336 -1.0664122 -0.90107536 -3.6799991 -1.0392736 -0.88026303 -3.6929426 -1.0414667 -0.85693496 -3.6954637 -1.0406443 -0.83805245 -3.7175386 -1.0455786 -0.81666708 -3.7291865 -1.0474975 -0.79897141 -3.7585845 -1.0546248 -0.77511704 -3.7596486 -1.0535283 -0.75863123 -3.7973402 -1.0631227 -0.73714399 -3.8113654 -1.065864 -0.71781307 -3.837558 -1.0721689 -0.67269272 -3.7226503 -1.0376289 -0.64289558 -3.6869178 -1.0261155 -0.62153691 -3.6983802 -1.0283086 -0.61066443 -3.7752233 -1.0494164 -0.59177583 -3.8064568 -1.057366 -0.56400663 -3.7805305 -1.0488682 -0.54488403 -3.8124802 -1.057092 -0.53138512 -3.8881662 -1.0779256 -0.50166768 -3.8465343 -1.0650417 -0.4758026 -3.8314073 -1.0598332 -0.44856352 -3.8027377 -1.050787 -0.43056676 -3.8532052 -1.0644934 -0.40418801 -3.8299525 -1.057092 -0.37963349 -3.8218336 -1.0540766 -0.35751531 -3.8384542 -1.0581884 -0.33445671 -3.846324 -1.0598332 -0.30852395 -3.8195469 -1.0516094 -0.28680134 -3.8443847 -1.0581884 -0.26373333 -3.8537476 -1.0603814 -0.24139941 -3.8764095 -1.0664122 -0.2180955 -3.8864594 -1.0688794 -0.19443688 -3.8915663 -1.0699759 -0.17004868 -3.8811569 -1.0666864 -0.14652154 -3.8898153 -1.0688794 -0.12231691 -3.8800678 -1.065864 -0.0980414 -3.862479 -1.0606556 -0.074284017 -3.8601234 -1.0598332 -0.050622754 -3.8624296 -1.0603814 -0.026895167 -3.8588209 -1.0592849 -0.0031975335 -3.8377559 -1.0532541 --0.020400541 -3.8473201 -1.0559955 --0.043995973 -3.8461609 -1.0557213 --0.067829937 -3.8592803 -1.0595591 --0.091463357 -3.8568685 -1.0590109 --0.11558451 -3.8716149 -1.0633968 --0.13913114 -3.8650665 -1.0617521 --0.16304608 -3.8689442 -1.0631227 --0.18622696 -3.856344 -1.0598332 --0.209729 -3.852248 -1.0590109 --0.23243287 -3.8355296 -1.0546248 --0.25896898 -3.8791306 -1.0675088 --0.28374386 -3.8908968 -1.0713465 --0.30943015 -3.9120915 -1.0779256 --0.33293879 -3.9043698 -1.0762808 --0.36056387 -3.9424772 -1.0877942 --0.38381404 -3.930619 -1.0850528 --0.40752769 -3.9243639 -1.0839564 --0.43265048 -3.9313488 -1.0866977 --0.4542124 -3.9066489 -1.0803927 --0.47572124 -3.8837423 -1.0746361 --0.50027859 -3.8864732 -1.0762808 --0.52501583 -3.8900018 -1.0781997 --0.8348285 -5.9131145 -1.6615422 --0.87516123 -5.9354715 -1.6694918 --0.90995759 -5.9195342 -1.6664764 --0.94413567 -5.9005446 -1.6626387 --0.97984982 -5.8917942 -1.6618162 --1.016964 -5.8913574 -1.663461 --1.0515695 -5.8764863 -1.6609938 --1.0877823 -5.8708692 -1.661268 --1.1252322 -5.8716402 -1.663461 --1.1603051 -5.8599086 -1.6620904 --1.1989342 -5.86587 -1.6659281 --1.2301449 -5.8358183 -1.6593491 --1.2724597 -5.8582339 -1.6681212 --1.3117385 -5.8653321 -1.6725072 --1.3420976 -5.8328056 -1.6653799 --1.3749845 -5.8122945 -1.6618162 --1.4094869 -5.7990756 -1.6604456 --1.4510955 -5.8145785 -1.667573 --1.4826909 -5.7897272 -1.6629127 --1.5213631 -5.7926126 -1.6664764 --1.5536282 -5.7710962 -1.6629127 --1.5895209 -5.763309 -1.663461 --1.6277285 -5.763628 -1.6664764 --1.6622618 -5.7507601 -1.6656541 --1.6969712 -5.7386079 -1.6651058 --1.7254715 -5.7059946 -1.6585268 --1.7664131 -5.7145948 -1.6642834 --1.8040502 -5.7119026 -1.6667506 --1.2666739 -3.9260244 -1.1352181 --1.2856259 -3.9026499 -1.130558 --1.9116397 -5.6859322 -1.6692177 --1.9455559 -5.6713667 -1.6683953 --1.9749194 -5.6438904 -1.6637352 --2.0159752 -5.6497822 -1.6692177 --2.052247 -5.6418247 -1.6705884 --2.0881629 -5.6327333 -1.6716849 --2.1220059 -5.6180153 -1.6711366 --2.1567829 -5.6057863 -1.6714107 --2.1928926 -5.5969243 -1.6727813 --2.231112 -5.5931897 -1.6757967 --2.2664745 -5.582068 -1.6766192 --2.3043547 -5.5769444 -1.6793604 --2.3359222 -5.5564942 -1.6774415 --1.3004117 -3.0404825 -0.90193599 --1.3190433 -3.0324461 -0.90193599 --2.4424701 -5.5231109 -1.6807311 --2.4798617 -5.5159144 -1.6831982 --2.5064664 -5.4848495 -1.6782639 --2.5445287 -5.4789615 -1.6812793 --1.6039016 -3.3984685 -1.0305016 --1.618073 -3.3746879 -1.0261155 --1.6353812 -3.3577788 -1.0239226 --1.6529692 -3.3416469 -1.0220037 --1.6747369 -3.3340197 -1.0228261 --1.696473 -3.3262513 -1.0236484 --1.7252504 -3.3320062 -1.0288569 --1.7586353 -3.346046 -1.0368066 --2.1198983 -3.97416 -1.2432243 --2.8940239 -5.3464494 -1.6922444 --2.9239969 -5.3235335 -1.6905996 --2.9308619 -5.2592869 -1.6755226 --2.9626038 -5.2403674 -1.6752485 --2.9884837 -5.2112451 -1.6716849 --3.0189526 -5.1903157 -1.6708624 --3.0531857 -5.1758361 -1.6722331 --3.0972276 -5.1776381 -1.6790862 --3.1294372 -5.1593585 -1.6793604 --3.1575096 -5.134325 -1.6774415 --3.2016723 -5.1352568 -1.6842947 --3.2146266 -5.0862479 -1.6744261 --3.2545929 -5.0801945 -1.6790862 --3.2919874 -5.0698085 -1.6823758 --3.3246191 -5.0519238 -1.6831982 --3.3582222 -5.03543 -1.6845688 --3.3659029 -4.9804654 -1.6727813 --3.4300847 -5.0089169 -1.6897773 --3.4278638 -4.9403663 -1.6733296 --3.466408 -4.9310417 -1.6774415 --3.4397004 -4.8297753 -1.6494806 --2.201673 -3.0513749 -1.0318723 --2.2197869 -3.0370317 -1.0315981 --3.5400333 -4.7818756 -1.6552372 --3.6148818 -4.8208513 -1.6768932 --3.6193852 -4.7656465 -1.6651058 --3.680218 -4.7845135 -1.6799086 --3.7142334 -4.7679114 -1.6821016 --3.7517574 -4.7556028 -1.6859394 --3.7616596 -4.7084479 -1.6771674 --3.7965274 -4.6927552 -1.6799086 --3.8252501 -4.6693721 -1.6799086 --3.8581264 -4.6509943 -1.6818275 --3.9045277 -4.6485906 -1.6897773 --3.9392073 -4.6318717 -1.6925185 --3.9669263 -4.606885 -1.6922444 --3.9951189 -4.5824575 -1.6922444 --4.0212522 -4.5556946 -1.691422 --4.0561781 -4.5388231 -1.6944374 --4.0684676 -4.4967337 -1.6878583 --4.0972815 -4.4731035 -1.6884066 --4.1200738 -4.4429426 -1.6864877 --4.1492319 -4.419682 -1.6873101 --4.1610355 -4.3781056 -1.6810051 --4.1871543 -4.3517985 -1.6807311 --4.2157903 -4.3280916 -1.6815534 --4.2483444 -4.3083057 -1.6840205 --4.2604327 -4.2678638 -1.6782639 --4.2865396 -4.241642 -1.6782639 --4.3124852 -4.21526 -1.6782639 --4.3251243 -4.1760273 -1.6730554 --4.3388362 -4.1381259 -1.6683953 --4.3746448 -4.1213179 -1.6725072 --4.4061861 -4.1002946 -1.6749743 --4.4213505 -4.0640697 -1.6711366 --4.447628 -4.0381575 -1.6716849 --4.4465489 -3.9876747 -1.6618162 --4.4666142 -3.9564898 -1.6601715 --4.5016627 -3.938508 -1.6642834 --4.5388412 -3.9221313 -1.6692177 --4.5233226 -3.8604922 -1.6544148 --4.5616307 -3.8450623 -1.6598973 --4.5747905 -3.8083854 -1.6560596 --4.5936155 -3.7765787 -1.6544148 --4.6301398 -3.7592337 -1.6593491 --4.665123 -3.7403789 -1.6637352 --4.6894937 -3.7128778 -1.6642834 --4.7083993 -3.681072 -1.6629127 --4.7461214 -3.6638668 -1.6683953 --4.7654538 -3.632344 -1.6672988 --4.7907252 -3.6053486 -1.6683953 --4.80581 -3.5707231 -1.6659281 --4.8369341 -3.5479941 -1.6692177 --4.8648438 -3.5227611 -1.6714107 --4.8777623 -3.4866924 -1.6683953 --4.9108505 -3.4650147 -1.6725072 --4.9391212 -3.439764 -1.6749743 --4.9696441 -3.415931 -1.6782639 --4.9857354 -3.382134 -1.6766192 --4.9944072 -3.3434529 -1.6725072 --5.024457 -3.3191063 -1.6757967 --5.0423107 -3.2866387 -1.6749743 --5.0769415 -3.2650023 -1.6799086 --5.060339 -3.2106023 -1.667573 --5.0750527 -3.1764305 -1.6659281 --5.1189957 -3.1603887 -1.674152 --5.1440406 -3.1324213 -1.6760708 --5.1598663 -3.0988183 -1.6749743 --5.180438 -3.0680797 -1.6755226 --5.1966743 -3.0347805 -1.6747003 --5.235199 -3.0143552 -1.6812793 --5.2519236 -2.9812262 -1.6807311 --5.2877407 -2.9588079 -1.6864877 --5.3209534 -2.9346683 -1.691422 --5.33886 -2.9019642 -1.691422 --5.3811493 -2.8823209 -1.6993717 --5.3953314 -2.8474529 -1.6982752 --5.4220872 -2.8191748 -1.7012906 --5.4521222 -2.7924292 -1.7054025 --5.4837499 -2.7662873 -1.7100626 --5.4937301 -2.7291644 -1.7078696 --5.5103726 -2.6954041 -1.7078696 --5.5424032 -2.669054 -1.7128038 --5.5838761 -2.646944 -1.7207536 --5.613956 -2.6191385 -1.7251396 --5.6640058 -2.6002934 -1.7358305 --5.6605735 -2.5567803 -1.7297997 --5.6875796 -2.5270765 -1.7333634 --5.7338204 -2.5056107 -1.7429578 --5.7517371 -2.4715207 -1.7437803 --5.772995 -2.4388022 -1.7456992 --5.7878504 -2.4033339 -1.7456992 --5.8265285 -2.3775868 -1.7531005 --5.8383298 -2.3407173 -1.7522782 --5.853477 -2.3052025 -1.7525523 --5.8872437 -2.2768757 -1.7585831 --5.8867188 -2.2352464 -1.7541971 --5.9030266 -2.2000918 -1.7550194 --5.9426069 -2.1734111 -1.7629691 --5.9341063 -2.1291111 -1.7563901 --5.8908157 -2.072865 -1.7393942 --5.9470601 -2.0517383 -1.7525523 --5.9886889 -2.025069 -1.7613244 --6.0621643 -2.008554 -1.7796909 --6.1283426 -1.9888374 -1.7958643 --6.2018371 -1.9707141 -1.8142309 --6.3102322 -1.9626184 -1.8430142 --6.4472785 -1.9619464 -1.8802955 --6.6039057 -1.9654269 -1.9233335 --6.70541 -1.9509346 -1.9499238 --6.7459297 -1.9179088 -1.9584217 --6.7557178 -1.8759657 -1.9578735 --6.7745266 -1.8364915 -1.9600666 --6.7949648 -1.797349 -1.9628078 --6.8095899 -1.7565831 -1.9639043 --6.8277011 -1.7166435 -1.9660974 --6.8446445 -1.676319 -1.9680161 --6.8594785 -1.6354048 -1.9693868 --6.8778152 -1.5952412 -1.971854 --6.8649588 -1.5479316 -1.9652749 --6.8348727 -1.497135 -1.9537616 --6.8862596 -1.4641715 -1.9660974 --6.9252534 -1.4281079 -1.9748694 --6.886734 -1.3761632 -1.961163 --6.8997693 -1.3347948 -1.9625336 --6.9116106 -1.2931411 -1.9636302 --6.9260392 -1.2519057 -1.965549 --6.9222221 -1.2074012 -1.9622595 --6.9437261 -1.1672966 -1.9663714 --6.9526563 -1.1249762 -1.9669197 --6.9594278 -1.0822942 -1.9669197 --6.9764004 -1.0411336 -1.9699351 --6.9759936 -0.99735457 -1.9680161 --6.9953213 -0.95635635 -1.971854 --7.002965 -0.91366482 -1.9724022 --6.9779 -0.8668825 -1.9636302 --7.0060091 -0.82675678 -1.9702092 --7.0071273 -0.78332555 -1.9691128 --6.9974561 -0.73880047 -1.9650007 --7.0075994 -0.69642192 -1.9666456 --6.99259 -0.65162528 -1.961163 --7.000289 -0.60904092 -1.9622595 --6.9981427 -0.5656113 -1.9606148 --6.9947686 -0.52215934 -1.9586959 --6.9911246 -0.47877008 -1.956777 --6.9977698 -0.43610382 -1.9578735 --6.9859114 -0.39234838 -1.9537616 --7.0035553 -0.35024568 -1.9581476 --7.010376 -0.30747706 -1.9595182 --7.0207801 -0.26478308 -1.9619853 --7.0107379 -0.22133459 -1.9586959 --6.6750374 0.49019194 -1.9493195 --6.6833696 0.53205472 -1.9527397 --6.6790242 0.57297099 -1.9524547 --6.6839733 0.61473352 -1.9550198 --6.6943841 0.65714109 -1.9592952 --6.687366 0.69790572 -1.9584401 --6.6772418 0.73829246 -1.95673 --6.6697297 0.77891535 -1.9558749 --6.6724358 0.82076287 -1.958155 --6.6777306 0.86304194 -1.9612902 --6.6485639 0.90077817 -1.9541649 --6.6277275 0.93940115 -1.9496045 --6.6360612 0.98215795 -1.9538798 --6.6223311 1.021687 -1.9515996 --6.6178303 1.0626059 -1.9521697 --6.5970044 1.1008232 -1.9478943 --6.4900155 1.1239259 -1.9176823 --6.4999785 1.1667781 -1.9228127 --0 0 -0 --6.5341167 1.2558713 -1.9376336 --6.534749 1.297622 -1.9401989 --6.528542 1.3380792 -1.940769 --6.5258355 1.3793026 -1.942479 --6.5256782 1.4211556 -1.9450442 --6.5187058 1.4615895 -1.9456142 --6.5040112 1.5002663 -1.9439042 --6.4946833 1.5401459 -1.9439042 --6.4683485 1.5758806 -1.9387738 --6.4529781 1.6141435 -1.9370637 --6.4262414 1.6494155 -1.9319333 --6.4289765 1.6922333 -1.9359236 --6.422174 1.7326483 -1.9370637 --6.3947926 1.7674222 -1.9319333 --6.3912053 1.8087159 -1.9342134 --6.3809075 1.8481644 -1.9344984 --6.4135585 1.9003608 -1.9481794 --6.3742585 1.9313347 -1.9396288 --6.3503857 1.9667217 -1.9359236 --6.3071294 1.9958123 -1.9262329 --6.3257728 2.0445025 -1.9359236 --6.3249416 2.0871851 -1.9396288 --6.2847657 2.1167717 -1.9310782 --6.267127 2.1537361 -1.9296532 --6.250176 2.190881 -1.9285131 --6.2492509 2.2337089 -1.9325033 --6.2759519 2.2867856 -1.9453292 --6.2366443 2.3159037 -1.9373487 --6.1945267 2.3436081 -1.9285131 --6.1862903 2.3839867 -1.9305083 --6.191175 2.4296069 -1.9367787 --6.1832709 2.4703958 -1.9390588 --6.17066 2.5093729 -1.9399139 --6.1516042 2.5457213 -1.9387738 --6.140285 2.5852795 -1.9401989 --6.1199012 2.6210194 -1.9387738 --6.1001887 2.6569893 -1.9376336 --6.0793891 2.6924279 -1.9362086 --6.0277963 2.713933 -1.9248078 --6.0197453 2.754858 -1.927658 --6.0122881 2.7961905 -1.9307932 --5.9872189 2.8293414 -1.928228 --5.980114 2.8710051 -1.9316483 --5.9684157 2.9105864 -1.9336435 --5.9470086 2.9454508 -1.9325033 --5.9219742 2.9784389 -1.9302232 --5.895905 3.0107946 -1.927658 --5.8679605 3.0420601 -1.9245228 --5.8568177 3.0820267 -1.927088 --5.833569 3.1156468 -1.9256629 --5.8202405 3.1545806 -1.927658 --5.8007751 3.1902335 -1.927658 --5.7861123 3.2285695 -1.9293681 --5.7545166 3.2573991 -1.9253778 --5.7302651 3.2902596 -1.9239528 --5.7165947 3.3292181 -1.9262329 --5.6869817 3.3588684 -1.9230977 --5.6687317 3.3951776 -1.9239528 --5.6535268 3.4333801 -1.9259479 --5.6315374 3.4675024 -1.9256629 --5.6142201 3.50453 -1.927088 --5.5950408 3.5404503 -1.927943 --5.5651445 3.5695376 -1.9250928 --5.5431376 3.6036177 -1.9250928 --5.5129185 3.6322868 -1.9222426 --5.4801655 3.6591239 -1.9185374 --5.4425287 3.6824722 -1.9131221 --5.409555 3.7087498 -1.9094168 --5.3866968 3.7418723 -1.9094168 --5.3628516 3.7743022 -1.9091318 --5.365344 3.8255048 -1.9185374 --5.3223467 3.8443193 -1.9114119 --5.2986584 3.8769045 -1.9114119 --5.2747703 3.9093435 -1.9114119 --5.2644801 3.9519956 -1.9165423 --5.2256365 3.9731982 -1.9111269 --5.2133088 4.0145464 -1.9156872 --5.205204 4.0594306 -1.9219576 --5.1832061 4.0936694 -1.9230977 --5.1594872 4.1265936 -1.9236678 --5.1340699 4.158174 -1.9236678 --5.1092 4.1902056 -1.9239528 --5.0738087 4.2135139 -1.9202476 --5.0478592 4.2445669 -1.9202476 --5.0012879 4.2580576 -1.912267 --4.9663558 4.2811532 -1.9088467 --4.929163 4.3020897 -1.9045714 --4.9285269 4.3551073 -1.9148321 --4.8859982 4.3712029 -1.9085617 --4.8882079 4.4274883 -1.9202476 --4.8517671 4.4489751 -1.9165423 --4.7822351 4.4395256 -1.8994411 --4.7912192 4.5029263 -1.9142621 --4.7475305 4.5170407 -1.9077066 --4.7390518 4.5647082 -1.9156872 --4.6951723 4.5783067 -1.9091318 --4.6717663 4.6117439 -1.9111269 --4.6298237 4.6267691 -1.9054265 --4.6101055 4.6639538 -1.9091318 --4.5747061 4.6852937 -1.9062816 --4.5571814 4.7250056 -1.9111269 --4.5307479 4.7556558 -1.912267 --4.4922876 4.773592 -1.9082767 --4.4570403 4.7947469 -1.9057115 --4.4430923 4.8389525 -1.912552 --4.397222 4.8483706 -1.9054265 --4.3673902 4.8752604 -1.9054265 --4.3431096 4.9084277 -1.9079916 --4.301559 4.9219909 -1.9028614 --4.2900629 4.9700632 -1.9114119 --4.2464299 4.9809728 -1.9054265 --4.2065287 4.995935 -1.9011512 --4.178246 5.0246 -1.9022913 --4.1734891 5.0819993 -1.9145471 --4.1132536 5.0717721 -1.9008662 --4.0988297 5.1178665 -1.9088467 --4.0649724 5.1399126 -1.9077066 --4.0251002 5.15418 -1.9037164 --3.9852066 5.1681523 -1.8997262 --3.9603865 5.2016606 -1.9031464 --3.9266677 5.2235641 -1.9022913 --3.9059649 5.2629557 -1.9079916 --3.888324 5.3069286 -1.9154022 --3.8714135 5.3524365 -1.9233828 --3.8329303 5.3682885 -1.9205326 --3.7894301 5.3768177 -1.9151171 --3.7476115 5.3873763 -1.9105569 --3.7096033 5.4031572 -1.9079916 --3.6758428 5.4250236 -1.9077066 --3.6478126 5.4554448 -1.9105569 --3.583133 5.4305158 -1.8937408 --3.5638609 5.4740906 -1.9014362 --3.5447063 5.5184388 -1.9094168 --3.5292444 5.5692353 -1.9196775 --3.5011013 5.6005397 -1.9230977 --3.4656653 5.6202846 -1.9225277 --3.4296207 5.6389866 -1.9216726 --3.390027 5.6517034 -1.9188224 --3.3513823 5.6657972 -1.9165423 --3.3160715 5.6854262 -1.9162573 --3.2792132 5.702342 -1.9151171 --3.2474706 5.7281933 -1.9171124 --3.2141318 5.7513585 -1.9182523 --3.1801686 5.7734909 -1.9191074 --3.1391976 5.7827859 -1.9156872 --3.1081755 5.8103914 -1.9185374 --3.0961444 5.874299 -1.9336435 --3.0679903 5.9084992 -1.9387738 --3.0290606 5.9220924 -1.9370637 --2.9930975 5.9414229 -1.9373487 --2.9553077 5.9571004 -1.9364936 --2.9132328 5.9639239 -1.9327884 --2.8662026 5.9600897 -1.9256629 --2.8361373 5.9914269 -1.9302232 --2.7798991 5.9670076 -1.9165423 --2.7663927 6.0344934 -1.9330734 --2.7230108 6.0373731 -1.9285131 --2.6793091 6.0390716 -1.9236678 --2.6452692 6.0624266 -1.9259479 --2.608021 6.0785437 -1.9259479 --2.5740261 6.1023808 -1.9285131 --2.5416713 6.1304569 -1.9325033 --2.5101533 6.1610284 -1.9373487 --2.4662497 6.1611853 -1.9325033 --2.4343591 6.1913676 -1.9373487 --2.3890765 6.1874094 -1.9313632 --2.3592169 6.223464 -1.9382037 --2.3149722 6.2216516 -1.9330734 --2.285625 6.2600508 -1.940769 --2.2468481 6.2730546 -1.9404839 --2.2051399 6.277679 -1.9376336 --2.1659553 6.2892785 -1.9370637 --2.1282434 6.3051748 -1.9379187 --2.0952308 6.3354068 -1.9433341 --2.0551374 6.3444958 -1.942194 --2.017328 6.3606415 -1.9433341 --1.9782618 6.3728995 -1.9433341 --1.9352238 6.3720775 -1.9393438 --1.8999076 6.3966961 -1.9433341 --1.8595541 6.404551 -1.942194 --1.8207443 6.417685 -1.942764 --1.7731465 6.3991756 -1.9336435 --1.738851 6.428441 -1.9393438 --1.7093959 6.4769897 -1.9510295 --1.663653 6.4641485 -1.9439042 --1.6123062 6.4277468 -1.9296532 --1.576928 6.4542799 -1.9347835 --1.5410631 6.4796877 -1.9396288 --1.4999801 6.483418 -1.9379187 --1.4584892 6.4850183 -1.9356385 --1.4203057 6.5013371 -1.9379187 --1.3819768 6.5174313 -1.9401989 --1.3444684 6.5379939 -1.9439042 --1.3018938 6.5338993 -1.9401989 --1.2625035 6.5455294 -1.9413389 --1.221966 6.5512681 -1.940769 --1.1820848 6.5605292 -1.9413389 --1.1416439 6.5667148 -1.9410539 --1.1022791 6.5792685 -1.942764 --1.0621935 6.5878005 -1.9433341 --1.0227778 6.6008248 -1.9453292 --0.9828198 6.6107688 -1.9464693 --0.94439787 6.6318583 -1.9510295 --0.90239632 6.6280303 -1.9481794 --0.86084729 6.6267886 -1.9461843 --0.82146215 6.6424103 -1.9493195 --0.78102458 6.6501813 -1.9501746 --0.73925292 6.6462746 -1.9476093 --0.69466025 6.61446 -1.9367787 --0.65829593 6.6615233 -1.9496045 --0.61652678 6.6558924 -1.9467543 --0.57658166 6.6700549 -1.9498895 --0.53556758 6.6725116 -1.9496045 --0.49405044 6.668025 -1.9473244 --0.45273817 6.6651926 -1.9456142 --0.41195065 6.6697588 -1.9461843 --0.37059361 6.6645045 -1.9439042 --0.32945809 6.6618662 -1.942479 --0.28799722 6.6503553 -1.9384887 --0.24750482 6.6606183 -1.9410539 --0.20704505 6.6754241 -1.9450442 --0.16612886 6.6784854 -1.9456142 --0.12473815 6.6573367 -1.9390588 --0.083791882 6.6503096 -1.9367787 --0.043008883 6.6545324 -1.9379187 --0.0021770701 6.6575465 -1.9387738 -0.03871879 6.6651025 -1.9410539 -0.079730518 6.674324 -1.9439042 -0.12052443 6.6650839 -1.9413389 -0.16141835 6.6642189 -1.9413389 -0.20251098 6.6698098 -1.9433341 -0.2427648 6.6502419 -1.9379187 -0.28438556 6.6677799 -1.9436191 -0.32519916 6.6639948 -1.9430491 -0.36529115 6.6475177 -1.9387738 -0.40695214 6.659502 -1.9430491 -0.44554892 6.6234074 -1.9330734 -0.48674393 6.6281967 -1.9353535 -0.52702343 6.6203079 -1.9339285 -0.56903058 6.6331844 -1.9387738 -0.6109516 6.6429305 -1.942764 -0.6473853 6.5951767 -1.9296532 -0.69043142 6.6158667 -1.9370637 -0.73175114 6.6181746 -1.9390588 -0.77034146 6.5964236 -1.9339285 -0.80798936 6.5687404 -1.927088 -0.85320008 6.6016831 -1.9384887 -0.89459318 6.6029725 -1.9404839 -0.93468738 6.594512 -1.9396288 -0.97358745 6.5782228 -1.9364936 -1.0143713 6.5749669 -1.9373487 -1.0546955 6.5686193 -1.9373487 -1.0964012 6.5705328 -1.9399139 -1.1355505 6.5570707 -1.9379187 -1.175932 6.5509229 -1.9382037 -1.2154045 6.5398149 -1.9370637 -1.2538794 6.5237627 -1.9344984 -1.2981825 6.5375695 -1.9410539 -1.336153 6.5191522 -1.9379187 -1.3791043 6.5248976 -1.942194 -1.4203391 6.5219316 -1.9439042 -1.4630585 6.5252523 -1.9476093 -1.4953073 6.4825301 -1.9373487 -1.5341699 6.4695024 -1.9362086 -1.5738372 6.4599671 -1.9362086 -1.6099538 6.4362411 -1.9319333 -1.6484617 6.4225283 -1.9307932 -1.6897918 6.4197078 -1.9330734 -1.7274017 6.4027405 -1.9310782 -1.7712548 6.4086499 -1.9362086 -1.8087159 6.3912053 -1.9342134 -1.8481644 6.3809075 -1.9344984 -1.8864648 6.3666906 -1.9336435 -1.924104 6.350409 -1.9322183 -1.9627495 6.3375678 -1.9319333 -2.0033352 6.3308883 -1.9336435 -2.0421431 6.3184767 -1.9336435 -2.0826771 6.3112888 -1.9353535 -2.1201389 6.2947574 -1.9342134 -2.1543593 6.26894 -1.9302232 -2.190881 6.250176 -1.9285131 -2.2324178 6.2456408 -1.9313632 -2.2621622 6.2084112 -1.9239528 -2.301883 6.1989064 -1.9253778 -2.3371606 6.177494 -1.9230977 -2.369159 6.1478333 -1.9182523 -2.4145436 6.1528096 -1.9245228 -2.4536743 6.1414385 -1.9256629 -2.4938397 6.1324825 -1.927658 -2.5288544 6.1108656 -1.9256629 -2.565186 6.0925841 -1.9248078 -2.6062963 6.0855403 -1.927658 -2.6343975 6.0483446 -1.9208175 -2.6668003 6.0215502 -1.9173973 -2.706847 6.0120649 -1.9196775 -2.738498 5.9840131 -1.9159722 -2.7703114 5.9566689 -1.912552 -2.8076279 5.9412913 -1.9131221 -2.8481801 5.9325929 -1.9159722 -2.8828471 5.9115591 -1.9148321 -2.9267256 5.9092188 -1.9199625 -2.9668064 5.8988557 -1.9225277 -3.0116668 5.8976121 -1.928228 -3.0495622 5.8824253 -1.9293681 -3.0677381 5.8296762 -1.9179673 -3.0849302 5.7760816 -1.9062816 -3.1175721 5.7519879 -1.9045714 -3.161124 5.7478671 -1.9097018 -3.1832511 5.7049279 -1.9017212 -3.2092218 5.6694412 -1.8963059 -3.2563617 5.6712532 -1.9037164 -3.2954414 5.6586199 -1.9062816 -3.3315628 5.6407685 -1.9071367 -3.3276842 5.5560865 -1.8849051 -3.3706715 5.5503092 -1.8900355 -3.415221 5.5466609 -1.8960209 -3.4527442 5.5312924 -1.898016 -3.4963596 5.5253906 -1.9034314 -3.527091 5.4989929 -1.9017212 -3.5571077 5.4716225 -1.8997262 -3.5827014 5.4376888 -1.8954508 -3.6090777 5.405242 -1.8917456 -3.6453996 5.3877578 -1.8934557 -3.680016 5.36766 -1.8943107 -3.7281976 5.3670182 -1.9022913 -3.7770612 5.3667707 -1.9105569 -3.7854295 5.3091583 -1.898016 -3.7780764 5.2306695 -1.8777796 -3.8372748 5.2445159 -1.8914605 -3.8836541 5.2401214 -1.898586 -3.9019196 5.1977978 -1.8917456 -3.9447646 5.1882539 -1.897161 -4.0005078 5.1950846 -1.9088467 -4.0099044 5.1417222 -1.898016 -4.0336528 5.1072435 -1.8943107 -4.0673099 5.085391 -1.8954508 -4.0960226 5.0573597 -1.8943107 -4.1251531 5.0299087 -1.8934557 -4.1577759 5.0067143 -1.8943107 -4.1865673 4.9789081 -1.8934557 -4.2133093 4.9487476 -1.8917456 -4.2511067 4.9315128 -1.8951658 -4.2831774 4.9075017 -1.8960209 -4.3132086 4.8811283 -1.8960209 -4.3219829 4.8310008 -1.8866153 -4.3599105 4.8136249 -1.8903205 -4.384829 4.7818379 -1.8883253 -4.4219141 4.7632713 -1.8917456 -4.4569669 4.7423344 -1.8943107 -4.4866424 4.7155924 -1.8945957 -4.538105 4.711442 -1.9042864 -4.5675979 4.6841941 -1.9045714 -4.594233 4.6540337 -1.9037164 -4.6172814 4.6203332 -1.9014362 -4.6332717 4.5797887 -1.8963059 -4.657856 4.5479255 -1.8948808 -4.7029247 4.535892 -1.9020063 -4.7285857 4.5049667 -1.9011512 -4.749157 4.4693003 -1.898301 -4.794045 4.456388 -1.9054265 -4.8057632 4.4126287 -1.8991561 -4.8355885 4.3856335 -1.9002962 -4.8688335 4.3616352 -1.9028614 -4.8904786 4.3272333 -1.9008662 -4.9068322 4.2883153 -1.896876 -4.9374065 4.2618842 -1.898586 -4.9634643 4.2315087 -1.898586 -4.9937348 4.2046771 -1.9002962 -5.0083838 4.1647658 -1.8960209 -5.0301394 4.1309156 -1.8945957 -5.0501795 4.0957484 -1.8926007 -5.0707259 4.0610895 -1.8908905 -5.0978045 4.031683 -1.8917456 -5.1247134 4.0020971 -1.8926007 -5.1499324 3.9711623 -1.8928857 -5.1963215 3.9563229 -1.9011512 -5.1975107 3.9070897 -1.8926007 -5.2375522 3.8871181 -1.898586 -5.247385 3.8447132 -1.8934557 -5.2584491 3.8034577 -1.8888954 -5.3011923 3.7850418 -1.8960209 -5.3219662 3.750787 -1.8951658 -5.3661284 3.7328365 -1.9028614 -5.3604808 3.6803143 -1.8926007 -5.394866 3.6554167 -1.896876 -5.4315381 3.6318333 -1.9020063 -5.4905272 3.622714 -1.9151171 -5.4861412 3.5717032 -1.9057115 -5.4837561 3.5224371 -1.897161 -5.5028372 3.4871843 -1.8963059 -5.5233178 3.4528458 -1.8960209 -5.5550075 3.4254289 -1.8997262 -5.5824733 3.395263 -1.9020063 -5.6204648 3.3712966 -1.9079916 -5.6237178 3.3265018 -1.9020063 -5.653132 3.2972431 -1.9051415 -5.6840601 3.2687042 -1.9088467 -5.6764898 3.2181706 -1.8994411 -5.6961293 3.1832798 -1.8994411 -5.7281494 3.1552038 -1.9037164 -5.7625661 3.1282258 -1.9088467 -5.787569 3.0959723 -1.9108418 -5.8123927 3.0635297 -1.912837 -5.8098121 3.0167687 -1.9057115 -5.8367476 2.9854269 -1.9085617 -5.841258 2.9426596 -1.9040014 -5.8583455 2.906337 -1.9037164 -5.8855429 2.8749623 -1.9068516 -5.8996167 2.8371341 -1.9057115 -5.9047837 2.7951422 -1.9017212 -5.9270372 2.7612863 -1.9034314 -5.9569392 2.7308559 -1.9077066 -5.9762049 2.6954353 -1.9085617 -5.9891262 2.657161 -1.9074216 -6.0176182 2.6257269 -1.9114119 -6.05652 2.5985763 -1.9188224 -6.0697012 2.5602481 -1.9179673 -6.0888381 2.5244248 -1.9191074 -6.0997744 2.4852095 -1.9176823 -6.1122389 2.446667 -1.9168273 -6.1101861 2.4024558 -1.9114119 -6.1149755 2.3611231 -1.9082767 -6.136519 2.3262746 -1.9105569 -6.1273184 2.2798913 -1.9031464 -6.1546988 2.2471805 -1.9074216 -6.1855178 2.2155118 -1.912837 -6.1818118 2.1714838 -1.9074216 -6.2158651 2.140687 -1.9139771 -6.2415986 2.1067963 -1.9179673 -6.2407565 2.0639467 -1.9136921 -6.2414484 2.0217774 -1.9099869 -6.2546496 1.9837322 -1.9102719 -6.2731123 1.9473051 -1.912267 -6.2858601 1.9090557 -1.912552 -6.3002119 1.8712687 -1.9134071 -6.3069725 1.8312405 -1.9119819 -6.3328447 1.7966906 -1.9165423 -6.32897 1.7537065 -1.9119819 -6.3414617 1.7153398 -1.912552 -6.3546481 1.6771303 -1.9134071 -6.3685322 1.6390624 -1.9145471 -6.4063625 1.6069462 -1.9230977 -6.4142394 1.5671526 -1.9225277 -6.4237347 1.5277661 -1.9225277 -6.4217811 1.4857314 -1.9191074 -6.4307766 1.4463001 -1.9191074 -6.4488945 1.4088585 -1.9219576 -6.4452276 1.3666797 -1.9182523 -6.4675756 1.3300004 -1.9225277 -6.5028768 1.2957182 -1.9307932 -6.4871745 1.2512586 -1.9236678 -6.4984994 1.2121328 -1.9248078 -6.5095878 1.1729152 -1.9259479 -6.5147734 1.1326231 -1.9253778 -6.5064745 1.0900964 -1.9208175 -6.5357528 1.0538108 -1.927658 -6.5402012 1.0133951 -1.927088 -6.522593 0.96972638 -1.9199625 -6.542655 0.93171078 -1.9242377 -6.5397005 0.89038599 -1.9216726 -6.5507441 0.85098225 -1.9233828 -6.5701118 0.8125338 -1.927658 -6.5806856 0.77287489 -1.9293681 -6.5881619 0.73279941 -1.9302232 -6.5896745 0.69206154 -1.9293681 -6.5880733 0.65105045 -1.927658 -6.5862174 0.61008507 -1.9259479 -6.5812421 0.5689199 -1.9233828 -6.5941639 0.52929264 -1.9262329 -6.6068463 0.48952827 -1.9290831 -6.6202455 0.4496929 -1.9322183 -6.6276636 0.40935799 -1.9336435 -6.6290936 0.36863068 -1.9333584 -6.6408043 0.32842016 -1.9362086 -6.6388636 0.28750157 -1.9350685 -6.6443343 0.24690256 -1.9362086 -6.6438079 0.20606993 -1.9356385 -6.6459055 0.16532409 -1.9359236 -6.6429615 0.12447131 -1.9347835 -6.6483927 0.083768062 -1.9362086 -6.6363206 0.042894356 -1.9325033 -6.6613808 0.0021776557 -1.9399139 -6.6459327 -0.038604088 -1.9353535 -6.6350274 -0.079254262 -1.9322183 -6.6324997 -0.11992954 -1.9316483 -6.6345139 -0.16069366 -1.9325033 -6.6372352 -0.20151627 -1.9336435 -6.6435366 -0.24251886 -1.9359236 -6.640008 -0.28319624 -1.9353535 -6.6362309 -0.32383946 -1.9347835 -6.6168914 -0.36360285 -1.9296532 -6.6164494 -0.40431374 -1.9302232 -6.6100187 -0.44464591 -1.9290831 -6.6129017 -0.48561805 -1.9307932 -6.6021533 -0.52557504 -1.9285131 -6.6226792 -0.56812751 -1.9356385 -6.607615 -0.60769743 -1.9322183 -6.6047158 -0.64832336 -1.9325033 -6.6120534 -0.69003284 -1.9359236 -6.6153164 -0.73143464 -1.9382037 -6.6097517 -0.77190036 -1.9379187 -6.5963292 -0.81138784 -1.9353535 -6.5988312 -0.85283107 -1.9376336 -6.5887251 -0.89266038 -1.9362086 -6.5688887 -0.93105108 -1.9319333 -6.5763264 -0.97330648 -1.9359236 -6.5787563 -1.0149566 -1.9384887 -6.5506382 -1.051805 -1.9319333 -6.5639148 -1.0952957 -1.9379187 -6.5627375 -1.1365329 -1.9396288 -6.5556402 -1.1767797 -1.9396288 -6.5454688 -1.2164563 -1.9387738 -6.5322342 -1.2555091 -1.9370637 -6.5497913 -1.3006116 -1.9447591 -6.5276031 -1.3378866 -1.9404839 -6.5155196 -1.3771205 -1.9393438 -6.4947724 -1.4144194 -1.9356385 -6.4990649 -1.4571822 -1.9396288 -6.4881339 -1.496601 -1.9390588 -6.4611087 -1.5321779 -1.9336435 -6.4404111 -1.5690691 -1.9302232 -6.4697151 -1.6183331 -1.942194 -6.4624486 -1.6587155 -1.9430491 -6.4679065 -1.7024877 -1.9478943 -6.4119945 -1.7299 -1.9339285 -6.4234314 -1.7753429 -1.940769 -6.4004278 -1.8113277 -1.9370637 -6.3910346 -1.8510996 -1.9376336 -6.3676095 -1.8867372 -1.9339285 -6.350409 -1.924104 -1.9322183 -6.2991142 -1.950833 -1.9199625 -6.213007 -1.9660103 -1.896876 -6.1360736 -1.9831548 -1.8766396 -5.9836206 -1.9744858 -1.8327466 -5.8687515 -1.9765729 -1.8005394 -5.7957821 -1.9916632 -1.7814431 -5.7364182 -2.0106916 -1.7666222 -5.6743331 -2.0280991 -1.750946 -5.6257606 -2.0497456 -1.7395453 -5.5654564 -2.0665331 -1.7244393 -5.4881277 -2.076211 -1.7039179 -5.4511375 -2.1005359 -1.6962224 -5.4131641 -2.1241353 -1.6882418 -5.3217049 -2.1260011 -1.6631601 -5.2819242 -2.1477773 -1.6546096 -5.1827416 -2.1445787 -1.6269627 -4.9645486 -2.0900114 -1.5608382 -4.8846712 -2.0917428 -1.5391767 -4.786509 -2.0845325 -1.5115299 -4.6351657 -2.0525115 -1.4664968 -4.6294761 -2.0840631 -1.4687769 -4.5059185 -2.0617537 -1.4325795 -4.414968 -2.0529699 -1.4069278 -4.3225651 -2.0423298 -1.3807061 -4.2520623 -2.0410092 -1.3616097 -4.208446 -2.0519304 -1.3513491 -4.160563 -2.060266 -1.3396633 -4.0605063 -2.0418112 -1.3105913 -3.9949799 -2.0396507 -1.2929201 -3.9679244 -2.0566227 -1.2880747 -3.9611676 -2.0840564 -1.2900699 -3.8916631 -2.0780575 -1.2709737 -3.9344521 -2.1320522 -1.2897849 -3.7373793 -2.0549634 -1.2273657 -3.7447867 -2.0890696 -1.2342062 -3.6343119 -2.0567458 -1.200859 -3.5808969 -2.0556123 -1.186893 -3.5317752 -2.0563145 -1.174352 -3.4943342 -2.0633183 -1.1658015 -3.4618747 -2.0728967 -1.1589611 -3.4253342 -2.0796664 -1.1506954 -3.3798642 -2.0805364 -1.1392947 -3.3418312 -2.0854969 -1.1304592 -3.2803786 -2.0752017 -1.113358 -3.1183388 -1.9995267 -1.0606294 -3.1285105 -2.0332551 -1.06861 -3.1031706 -2.043973 -1.0640496 -3.1120913 -2.0773501 -1.0717452 -3.2183535 -2.1769993 -1.114498 -3.1322119 -2.1468284 -1.0882763 -3.0819852 -2.1402984 -1.0748804 -3.0437143 -2.1415112 -1.0657598 -3.012569 -2.1473448 -1.0592043 -2.981467 -2.1528773 -1.0526489 -2.9712949 -2.1733954 -1.0537889 -2.9586732 -2.1921568 -1.0540739 -2.9712265 -2.2298396 -1.0637646 -2.9727468 -2.2596343 -1.069465 -3.0150173 -2.3211184 -1.0905564 -3.0143216 -2.3501873 -1.0956868 -3.0021007 -2.3704212 -1.0965419 -2.9695368 -2.3744254 -1.0897014 -2.9243767 -2.3678617 -1.0780156 -2.8890436 -2.3687377 -1.0700351 -2.8700311 -2.3827448 -1.0683249 -2.8450875 -2.3916719 -1.0643346 -2.8442237 -2.4208927 -1.0697501 -2.8140719 -2.4251535 -1.0637646 -2.8171897 -2.4581351 -1.0708901 -2.7848179 -2.4601388 -1.0640496 -2.7660992 -2.4739838 -1.0626246 -2.73524 -2.4767504 -1.0563542 -2.7242296 -2.4973745 -1.0580642 -2.7453775 -2.5479608 -1.0728853 -2.7164233 -2.5522835 -1.0674698 -2.7111263 -2.5788157 -1.0717452 -2.7380469 -2.6366372 -1.0894164 -2.6772177 -2.6098833 -1.0708901 -2.6420567 -2.6074033 -1.0629096 -2.6307533 -2.6283092 -1.0649047 -2.6165979 -2.6464472 -1.0657598 -2.5942848 -2.6562791 -1.0631946 -2.5679579 -2.6617968 -1.0589193 -2.5456276 -2.6712563 -1.0563542 -2.5370705 -2.6952035 -1.0597744 -2.5452795 -2.7374022 -1.070605 -2.5076942 -2.7303712 -1.0614845 -2.4915376 -2.7464168 -1.0617695 -2.4778361 -2.7652233 -1.0631946 -2.4620924 -2.7818108 -1.0637646 -2.4405627 -2.7918127 -1.0617695 -2.4183772 -2.8009295 -1.0594894 -2.3930631 -2.8062317 -1.0557841 -2.3696268 -2.813529 -1.0529339 -2.3480296 -2.8228562 -1.0509387 -2.32884 -2.8349876 -1.0500838 -2.3126085 -2.850713 -1.0506537 -2.2998657 -2.8708353 -1.0529339 -2.2822073 -2.8848929 -1.0529339 -2.2650528 -2.8995974 -1.053219 -2.2407815 -2.9050903 -1.0500838 -2.2234945 -2.9195476 -1.0503687 -2.2032354 -2.9300704 -1.0492287 -2.1874998 -2.9466133 -1.0503687 -2.1756086 -2.9684863 -1.053504 -2.1629696 -2.9895473 -1.0563542 -2.1301074 -2.9824779 -1.0489436 -2.1156316 -3.000977 -1.0509387 -2.0895169 -3.0028844 -1.0469484 -2.0650859 -3.0069554 -1.0438132 -2.0498219 -3.0243318 -1.0455234 -2.034955 -3.0424306 -1.0475185 -2.0326087 -3.0796642 -1.0563542 -2.0058317 -3.0800276 -1.0520788 -1.9894847 -3.0963099 -1.053504 -1.9694227 -3.1068394 -1.0529339 -1.95591 -3.1278067 -1.0560691 -1.9452314 -3.1536205 -1.0609144 -1.9293302 -3.1712301 -1.0629096 -1.9201865 -3.2002721 -1.068895 -1.9019774 -3.2144692 -1.0697501 -1.9029776 -3.2616856 -1.0820059 -1.8265611 -3.1752415 -1.0483736 -1.7772712 -3.133852 -1.0304173 -1.7598786 -3.1480453 -1.0315574 -1.7400671 -3.1579449 -1.0312724 -1.7288862 -3.183727 -1.0364028 -1.7025392 -3.1815963 -1.0321275 -1.7039838 -3.2318404 -1.0455234 -1.6841215 -3.2422349 -1.0455234 -1.6589597 -3.2422659 -1.0421032 -1.6407588 -3.2558086 -1.0432433 -1.6181957 -3.2606623 -1.0415331 -1.5943731 -3.262778 -1.038968 -1.5813825 -3.2871859 -1.0438132 -1.5501142 -3.2734334 -1.0361178 -1.5461848 -3.3176403 -1.0475185 -1.5261983 -3.3279366 -1.0478035 -1.4986589 -3.3215096 -1.0426732 -1.4638734 -3.2982221 -1.0321275 -1.3761681 -3.1525087 -0.98196411 -1.331865 -3.102752 -0.96315283 -1.3604654 -3.2239196 -0.99963528 -1.396067 -3.3659174 -1.0426732 -1.3934631 -3.4188073 -1.0569242 -1.3521645 -3.3765664 -1.040678 -1.332122 -3.3865838 -1.0412481 -1.3099369 -3.3911169 -1.0401081 -1.2826521 -3.3820601 -1.0346926 -1.290609 -3.4671297 -1.0592043 -1.2854115 -3.5191052 -1.0731703 -1.2608869 -3.5188041 -1.070605 -1.2453049 -3.5436583 -1.0760205 -1.2207304 -3.5430756 -1.0734553 -1.200193 -3.554132 -1.0745953 -1.1690376 -3.5332165 -1.0657598 -1.1461554 -3.5366752 -1.0646197 -1.122985 -3.5390728 -1.0631946 -1.0981245 -3.5358264 -1.0600594 -1.0441158 -3.4361019 -1.0269971 -0.99000973 -3.3312573 -0.99250978 -0.96287322 -3.3142555 -0.98538435 -0.94251919 -3.320101 -0.98538435 -0.92366445 -3.3313644 -0.98709446 -0.9122104 -3.3702805 -0.99735516 -0.92109036 -3.4879608 -1.0318425 -0.77815044 -3.0210354 -0.88676769 -0.78080606 -3.1103613 -0.91270441 -0.8724184 -3.5685749 -1.0515088 -0.85693252 -3.6009047 -1.0597744 -0.83503753 -3.607029 -1.0600594 -0.81288952 -3.6120849 -1.0600594 -0.79929626 -3.6563363 -1.0720302 -0.777641 -3.6649227 -1.0731703 -0.75205231 -3.6546028 -1.06861 -0.72998822 -3.6610286 -1.06918 -0.70479029 -3.6513207 -1.0649047 -0.68114376 -3.6489804 -1.0629096 -0.65874124 -3.6530912 -1.0629096 -0.63467377 -3.6476204 -1.0600594 -0.6211406 -3.7043869 -1.0760205 -0.59702748 -3.6996117 -1.0734553 -0.57299644 -3.69468 -1.0708901 -0.54778129 -3.6810601 -1.0657598 -0.52666909 -3.6947906 -1.068895 -0.50011402 -3.6694591 -1.0603443 -0.47845244 -3.6791127 -1.0623395 -0.45586884 -3.6819789 -1.0623395 -0.43349132 -3.6866109 -1.0629096 -0.41424802 -3.7196867 -1.0720302 -0.40271083 -3.829881 -1.1042373 -0.38240284 -3.864712 -1.113928 -0.35647616 -3.8431244 -1.1068026 -0.3243205 -3.7459221 -1.0771605 -0.29689148 -3.6924248 -1.0606294 -0.27097929 -3.6502049 -1.0475185 -0.2490305 -3.658493 -1.0495137 -0.22952388 -3.7077878 -1.0637646 -0.20857278 -3.7416661 -1.0734553 -0.18674271 -3.765852 -1.0802958 -0.16412801 -3.7784185 -1.083716 -0.14094096 -3.7793546 -1.083716 -0.11739405 -3.7686512 -1.0802958 -0.094149485 -3.7645097 -1.0788707 -0.071227007 -3.7746 -1.0817208 -0.04804134 -3.7730491 -1.0811508 -0.024895471 -3.7742312 -1.0814358 -0.0017338258 -3.7551427 -1.0757354 --0.021244243 -3.744539 -1.0726002 --0.044115357 -3.7357121 -1.0700351 --0.067193896 -3.7439964 -1.0726002 --0.090399131 -3.7530959 -1.0754504 --0.11409888 -3.7745063 -1.0820059 --0.13627291 -3.7469146 -1.0740253 --0.159302 -3.7469656 -1.0743103 --0.18200862 -3.7401733 -1.0726002 --0.20516551 -3.7428143 -1.0737402 --0.22818576 -3.7424419 -1.0740253 --0.25275716 -3.7648799 -1.0811508 --0.27817538 -3.7948041 -1.0905564 --0.29924393 -3.7653167 -1.0822909 --0.32734951 -3.8216646 -1.0996771 --0.35000107 -3.8109939 -1.0971119 --0.3699075 -3.7734795 -1.0865662 --0.39474833 -3.7873452 -1.0914115 --0.41513097 -3.759129 -1.083716 --0.43974763 -3.7698395 -1.0877062 --0.46580034 -3.7908535 -1.0948317 --0.48757553 -3.7765169 -1.0914115 --0.51048094 -3.7715545 -1.0908414 --0.54196322 -3.8271902 -1.1085126 --0.84713787 -5.7248707 -1.6799762 --0.88254166 -5.7214599 -1.6805463 --0.91595793 -5.7055268 -1.6774111 --0.95000154 -5.6941266 -1.675701 --0.98426729 -5.6844125 -1.6745609 --1.0196362 -5.6810966 -1.675416 --1.0523719 -5.663425 -1.6719958 --1.0880077 -5.6615672 -1.6734208 --1.1240338 -5.661366 -1.675416 --1.1585575 -5.6534233 -1.675131 --1.1920342 -5.6405816 -1.6734208 --1.2251929 -5.6266055 -1.6714257 --1.2609532 -5.6245933 -1.6731358 --1.2995379 -5.6344957 -1.6785512 --1.3320941 -5.6180224 -1.6759861 --1.3758495 -5.6479239 -1.6876718 --1.4074528 -5.6272879 -1.6839665 --1.4402854 -5.6120472 -1.6819714 --1.4771347 -5.6123729 -1.6848216 --1.5070467 -5.5865469 -1.6796912 --1.5402747 -5.5734992 -1.6785512 --1.5739218 -5.562099 -1.6779811 --1.6133571 -5.5707493 -1.6836815 --1.6496879 -5.5680971 -1.6859617 --1.686047 -5.5652084 -1.6882418 --1.2233562 -3.9516003 -1.1891731 --1.2472904 -3.9431059 -1.1888881 --1.7787604 -5.5040464 -1.6791213 --1.8239193 -5.5276155 -1.6899519 --1.8274969 -5.4263959 -1.6617351 --1.8626282 -5.4205189 -1.6634451 --1.9072733 -5.4415503 -1.6737058 --1.9409488 -5.4306474 -1.6739908 --1.971936 -5.4123321 -1.6719958 --2.0111172 -5.4163036 -1.677126 --2.0453312 -5.4065509 -1.6779811 --2.0784667 -5.3938994 -1.6779811 --2.1146767 -5.3890743 -1.6805463 --2.1477036 -5.3759975 -1.6805463 --2.1806498 -5.3627186 -1.6805463 --2.2175472 -5.3589787 -1.6836815 --1.2844099 -3.0520997 -0.94377154 --1.3031131 -3.0441613 -0.94377154 --1.3210013 -3.0343509 -0.94320148 --2.3437357 -5.2924275 -1.6802613 --2.3651426 -5.2534761 -1.6722808 --2.4013228 -5.2475805 -1.675131 --1.6114048 -3.4659615 -1.0956868 --1.6056018 -3.3988161 -1.0768756 --1.6189563 -3.373348 -1.0717452 --1.6358416 -3.3555975 -1.06918 --1.6529958 -3.3386261 -1.0668999 --1.6730193 -3.3275645 -1.0666149 --1.6934054 -3.3172364 -1.0666149 --1.7375582 -3.3527315 -1.0820059 --1.7670279 -3.3589702 -1.0877062 --2.1571076 -4.0396099 -1.320852 --2.1909916 -4.0431504 -1.3265524 --2.8081136 -5.1062579 -1.6919471 --2.8277123 -5.0680079 -1.6848216 --2.857811 -5.0488935 -1.6842515 --2.8882592 -5.0304322 -1.6839665 --2.919071 -5.0126157 -1.6839665 --2.9497728 -4.9946103 -1.6839665 --2.9838123 -4.982172 -1.6859617 --2.9929256 -4.928545 -1.6737058 --3.0231102 -4.9100881 -1.6737058 --3.0536888 -4.8922591 -1.6739908 --3.0903144 -4.8839583 -1.6776961 --3.1238472 -4.8705516 -1.6796912 --3.1521058 -4.8488817 -1.6788362 --3.1833811 -4.8318505 -1.6796912 --3.2108393 -4.8090386 -1.6785512 --3.2343764 -4.7805152 -1.675416 --3.259311 -4.7542558 -1.6731358 --3.2922502 -4.7396774 -1.675131 --3.3251328 -4.7248735 -1.677126 --3.3601842 -4.712966 -1.6802613 --3.3721976 -4.6689515 -1.6717107 --2.2067976 -3.0169294 -1.070605 --2.2246966 -3.002562 -1.0703201 --3.5116718 -4.6781368 -1.6985025 --3.531606 -4.6450577 -1.6942272 --3.5612109 -4.6248198 -1.6947973 --3.5960069 -4.6111946 -1.6979325 --3.629581 -4.5958118 -1.7004976 --3.6660955 -4.5839329 -1.7044879 --3.6826882 -4.5472016 -1.6990726 --3.6965368 -4.5074754 -1.6925172 --3.7314746 -4.4935565 -1.6959374 --3.7602103 -4.472043 -1.6965073 --3.784472 -4.4452381 -1.6950823 --3.8179357 -4.4291925 -1.6979325 --3.8500843 -4.411459 -1.7002126 --3.8580351 -4.3662071 -1.6916621 --3.8758039 -4.3324533 -1.6876718 --3.9209785 -4.3291893 -1.6959374 --3.9209025 -4.2760887 -1.6842515 --3.9398913 -4.2442241 -1.6811163 --3.9599502 -4.2136841 -1.6785512 --3.9943213 -4.1983333 -1.6822565 --4.0180111 -4.1716747 -1.6814014 --4.0234537 -4.1263576 -1.6728508 --4.0385942 -4.091362 -1.6685755 --4.0744648 -4.0773506 -1.6731358 --4.1103153 -4.0630531 -1.6776961 --4.1193919 -4.0223575 -1.6711407 --4.1446853 -3.9976707 -1.6714257 --4.1705246 -3.9734862 -1.6719958 --4.1801658 -3.9340293 -1.6660104 --4.2168651 -3.9200509 -1.6711407 --4.2316585 -3.8856769 -1.6674354 --4.2497396 -3.8544881 -1.6651553 --4.26617 -3.8219454 -1.6623051 --4.2873869 -3.7937915 -1.66145 --4.3033657 -3.761107 -1.6585999 --4.3256369 -3.734005 -1.6583148 --4.3440895 -3.7036626 -1.6566046 --4.3755331 -3.684345 -1.6600249 --4.3928976 -3.6531386 -1.6580298 --4.4226389 -3.6321976 -1.66088 --4.4575 -3.6152542 -1.6657254 --4.4878297 -3.594425 -1.6688606 --4.5113039 -3.5680096 -1.6694306 --4.5678678 -3.5673935 -1.6825415 --4.5820794 -3.5334468 -1.6796912 --4.6135893 -3.5128117 -1.6833965 --4.6342907 -3.4838614 -1.6831114 --4.6409535 -3.4445093 -1.6776961 --4.6666412 -3.4193664 -1.6794063 --4.6805434 -3.3856134 -1.676841 --4.723074 -3.372422 -1.6848216 --4.7397599 -3.3406179 -1.6833965 --4.7593813 -3.3109252 -1.6831114 --4.784349 -3.2849143 -1.6848216 --4.7964787 -3.2501209 -1.6819714 --4.8227062 -3.2248902 -1.6842515 --4.8328009 -3.188905 -1.6808313 --4.8490634 -3.1571002 -1.6796912 --4.8973799 -3.1459315 -1.6899519 --4.9117327 -3.1127448 -1.6882418 --4.9144821 -3.0723894 -1.6825415 --4.9707761 -3.0653129 -1.6956524 --4.9575486 -3.0153353 -1.6845366 --4.9882879 -2.9922533 -1.6888119 --5.0065541 -2.9615893 -1.6888119 --5.0130391 -2.9240551 -1.6848216 --5.0391965 -2.8980174 -1.6876718 --5.0768976 -2.8783851 -1.6945122 --5.1011581 -2.8509192 -1.6967924 --5.1387067 -2.8306608 -1.7036328 --5.1829381 -2.8137059 -1.7127535 --5.1882715 -2.7755234 -1.7087632 --5.2331891 -2.7583802 -1.7181689 --5.2432094 -2.7226856 -1.7158887 --5.267498 -2.6943896 -1.7184539 --5.2899241 -2.6650357 -1.720449 --5.3233514 -2.6410439 -1.7261494 --5.3463469 -2.6116951 -1.7284296 --5.3752298 -2.5850704 -1.7327049 --5.4074526 -2.559829 -1.7381202 --5.4221888 -2.5261967 -1.7378352 --5.4637289 -2.5048578 -1.7463858 --5.4746265 -2.4693162 -1.7449607 --5.504571 -2.4422836 -1.749806 --5.5431747 -2.4188082 -1.7575015 --5.5649595 -2.3877726 -1.7597817 --5.5848055 -2.3558159 -1.7614918 --5.6053538 -2.3240726 -1.7634869 --5.6079679 -2.2849355 -1.7597817 --5.625442 -2.2519069 -1.7609217 --5.6159587 -2.2082322 -1.7535112 --5.6472874 -2.1806338 -1.7592117 --5.6928296 -2.1581676 -1.7694724 --5.6296 -2.0947976 -1.7452457 --5.6450486 -2.0612013 -1.7461008 --5.682858 -2.0355706 -1.7540812 --5.7476969 -2.0190785 -1.7706124 --5.7953243 -1.9959396 -1.7817281 --5.8537822 -1.9759684 -1.7962642 --5.9249525 -1.9595658 -1.8147904 --6.0162024 -1.9488581 -1.8395871 --6.1651053 -1.9553496 -1.88234 --6.2731123 -1.9473051 -1.912267 --6.3757463 -1.9363374 -1.9404839 --6.48491 -1.9260917 -1.970696 --6.5177794 -1.8924083 -1.9772514 --6.539412 -1.8552563 -1.9803866 --6.5349684 -1.8107479 -1.9755412 --6.5376282 -1.7683649 -1.9729761 --6.5594778 -1.7311507 -1.9763963 --6.5170627 -1.6772615 -1.9601502 --6.5523348 -1.6435342 -1.9678457 --6.5706763 -1.6053449 -1.9704109 --6.5897284 -1.5672139 -1.9732611 --6.6001549 -1.5269665 -1.9735461 --6.605659 -1.4855993 -1.972406 --6.6240149 -1.447084 -1.9752562 --6.5755692 -1.394294 -1.95787 --6.619679 -1.3612512 -1.9687008 --6.6175661 -1.3185495 -1.9655656 --6.6377678 -1.2802778 -1.9692708 --6.6662288 -1.2433882 -1.9755412 --6.6558089 -1.1992352 -1.9701259 --6.6639862 -1.1585374 -1.9704109 --6.6596251 -1.1157275 -1.9669907 --6.6635065 -1.0743866 -1.9661356 --6.6661844 -1.0328934 -1.9649955 --6.6572266 -0.98971844 -1.9604353 --6.6736131 -0.95033652 -1.9635705 --6.6907158 -0.91091979 -1.9669907 --6.6847725 -0.86836946 -1.9635705 --6.7099519 -0.82980317 -1.9695559 --6.7139654 -0.78850442 -1.9692708 --6.7110558 -0.74644709 -1.9669907 --6.7298088 -0.70675397 -1.9712659 --6.7244802 -0.66450638 -1.9684157 --6.7465653 -0.62490982 -1.9738312 --6.7321281 -0.5819366 -1.9684157 --6.7307949 -0.54023546 -1.9669907 --6.7454538 -0.49977386 -1.9704109 --6.7388301 -0.45772719 -1.9675608 --6.7338581 -0.4158985 -1.9652805 --6.7334123 -0.37441334 -1.9644254 --6.7279239 -0.33271343 -1.9621453 --6.7260084 -0.29126018 -1.9610052 --6.7247953 -0.24987841 -1.9601502 --6.7003341 -0.20781332 -1.9524547 --6.7033997 -0.16674426 -1.9530247 --0 -0 -0 --6.734653 -0.084839866 -1.9618603 --6.741756 -0.043557409 -1.9638555 --6.7380624 -0.0021893661 -1.9627154 --6.7293224 0.039103035 -1.9601502 --6.7270389 0.080369413 -1.9595802 --6.7225857 0.12157425 -1.9584401 --6.7293792 0.16300799 -1.9607203 --6.714839 0.20388602 -1.95673 --6.724956 0.24550527 -1.9601502 --6.7089586 0.28614905 -1.9558749 --6.7003751 0.32698086 -1.9538798 --6.6963282 0.36798191 -1.9533098 --6.7111654 0.41011822 -1.9584401 --6.6731377 0.44890293 -1.9478943 --0 -0 -0 --0 -0 -0 --0 -0 -0 --6.4821138 -0.044324111 -1.9655252 --6.4832191 -0.0045505031 -1.9658209 --6.4745278 0.035183679 -1.9631594 --6.4713244 0.074876994 -1.9622724 --6.4678779 0.11453232 -1.9613853 --6.4641881 0.15414818 -1.9604981 --6.4631205 0.19380878 -1.9604981 --6.460855 0.23342766 -1.9602025 --6.4583468 0.27302605 -1.9599067 --6.4575043 0.31269473 -1.9602025 --6.4382944 0.35137537 -1.9548796 --6.4140859 0.38954282 -1.9480784 --6.4268255 0.42991078 -1.9528097 --6.4221611 0.46919784 -1.9522183 --6.4305887 0.50949937 -1.9557668 --6.4568481 0.55146533 -1.9649338 --6.4685636 0.59246659 -1.9696651 --6.4828706 0.63391107 -1.9752835 --6.5130649 0.67723191 -1.985929 --6.4973927 0.71592778 -1.9823805 --0 0 -0 --0 0 -0 --0 0 -0 --6.4153848 0.86672872 -1.9628638 --6.4023786 0.9050073 -1.9604981 --6.3711886 0.94050944 -1.9525141 --6.3634095 0.97929418 -1.9519225 --6.3346429 1.0146961 -1.9448256 --6.3179317 1.0518206 -1.9415728 --6.3151245 1.0912173 -1.9427556 --6.3327584 1.1343232 -1.9504441 --6.3341327 1.1747262 -1.9531054 --6.3277435 1.2137495 -1.9534011 --6.3164287 1.2518103 -1.9522183 --6.3142443 1.291692 -1.9539925 --6.3108735 1.3313968 -1.955471 --6.2689795 1.3627914 -1.9448256 --6.2903309 1.4079064 -1.9542882 --6.2787809 1.4458337 -1.9534011 --6.2595658 1.4819123 -1.9501483 --6.2466421 1.5193894 -1.9489655 --6.2381287 1.5579209 -1.9492612 --6.2136459 1.5923746 -1.9445299 --6.2203884 1.6348405 -1.9498526 --6.2120852 1.6734742 -1.9504441 --6.2109089 1.7141001 -1.9534011 --6.1965971 1.7511384 -1.9522183 --0 0 -0 --6.1709771 1.8259643 -1.9510355 --0 0 -0 --6.1344156 1.8973211 -1.9465998 --6.0953317 1.9262913 -1.9377286 --6.0688515 1.9589611 -1.9329972 --6.0485516 1.9934714 -1.9303359 --6.0579367 2.0378556 -1.9374329 --6.0453186 2.0749881 -1.9374329 --6.0135384 2.1054146 -1.931223 --6.0059047 2.1442001 -1.9329972 --5.9872489 2.1790514 -1.931223 --5.9710789 2.214751 -1.9303359 --5.9600577 2.2523601 -1.931223 --5.9541492 2.291976 -1.9338844 --5.9426422 2.3295126 -1.9347715 --5.9353347 2.3687644 -1.9371371 --5.9100676 2.4008245 -1.9335887 --5.8978739 2.4381375 -1.9344758 --5.8836832 2.4746506 -1.9347715 --5.8683882 2.5107057 -1.9347715 --5.8502445 2.5455229 -1.9338844 --5.8275266 2.5782797 -1.9315187 --5.8176951 2.6167309 -1.9335887 --5.7989235 2.6511869 -1.9327016 --5.7747498 2.6830964 -1.9300402 --5.7495389 2.7144012 -1.9270831 --5.7293301 2.7479765 -1.9259002 --5.6977611 2.7759674 -1.9208733 --5.7037392 2.8223133 -1.9288573 --5.6829 2.8555422 -1.9276745 --5.6703773 2.8929627 -1.9294487 --5.6550646 2.9290187 -1.9303359 --5.62853 2.9592175 -1.9273788 --5.5832963 2.9793084 -1.9179162 --5.5875921 3.0257914 -1.9259002 --5.5513387 3.0503595 -1.9196904 --5.5358553 3.086225 -1.9208733 --5.5126567 3.1177831 -1.9193947 --5.490108 3.1496482 -1.9182118 --5.480587 3.1890402 -1.9217603 --5.4304752 3.2046471 -1.9108192 --5.4246454 3.2462456 -1.9158462 --5.3956404 3.274019 -1.9125934 --5.4014874 3.3230805 -1.9220561 --5.3769426 3.3536334 -1.9205775 --5.3562641 3.3865626 -1.9205775 --5.3434267 3.4245183 -1.9235346 --5.3046885 3.4457934 -1.917029 --5.2930207 3.4845803 -1.9205775 --5.2755136 3.5196426 -1.9220561 --5.2451129 3.5460615 -1.9188033 --5.2398062 3.5895145 -1.9250132 --5.2066956 3.6139727 -1.9208733 --5.1797342 3.6425555 -1.919099 --5.164289 3.6792574 -1.9217603 --5.1431656 3.7119937 -1.9223518 --5.1233768 3.7457366 -1.9235346 --5.1018324 3.7782395 -1.924126 --5.073204 3.8054605 -1.9220561 --5.0528016 3.8388288 -1.9232389 --5.0230947 3.8650999 -1.9208733 --4.9940095 3.8917382 -1.9188033 --4.9850349 3.9341428 -1.9247174 --4.9570704 3.9616747 -1.9232389 --4.9267278 3.9872086 -1.9208733 --4.9043865 4.0191798 -1.9217603 --0 0 -0 --4.8649354 4.0876641 -1.9259002 --4.8281202 4.1075349 -1.9211689 --4.8049974 4.1389523 -1.9220561 --4.7759113 4.1652184 -1.9205775 --4.7402382 4.1855927 -1.9164376 --4.7116179 4.2120533 -1.9152548 --4.6835594 4.2389607 -1.9143677 --4.6595745 4.2695546 -1.9152548 --4.6297874 4.294817 -1.9137763 --4.6068296 4.3264136 -1.9152548 --4.5698113 4.3447261 -1.9108192 --4.53756 4.3673849 -1.9084535 --4.5407829 4.4244761 -1.9214647 --4.5135493 4.4522548 -1.9214647 --4.4705982 4.4643412 -1.9146633 --4.4484959 4.4971209 -1.917029 --4.4128065 4.5161333 -1.9134805 --4.3850131 4.5431247 -1.9134805 --4.3537579 4.5664883 -1.912002 --4.3132119 4.5799041 -1.9063835 --4.2908854 4.6125779 -1.9090449 --4.2612095 4.6374125 -1.9084535 --4.2320328 4.6627645 -1.9081578 --4.205256 4.6907778 -1.9090449 --4.1744947 4.7143469 -1.9081578 --4.1511497 4.7463436 -1.9108192 --4.1200752 4.7695565 -1.909932 --4.0907321 4.7947469 -1.909932 --4.0630822 4.8219485 -1.9108192 --4.0346408 4.8482566 -1.9114106 --3.9987507 4.8655419 -1.9084535 --3.9790556 4.9025946 -1.9134805 --3.9441192 4.9209547 -1.9111149 --3.90555 4.9345765 -1.9069749 --3.8628442 4.9426422 -1.9007651 --3.8371134 4.972301 -1.9031308 --3.8123219 5.0033493 -1.9060879 --3.7781041 5.0220671 -1.9043136 --3.74437 5.0413203 -1.902835 --3.7077172 5.0564971 -1.899878 --3.6956677 5.1054606 -1.909932 --3.6603837 5.1226001 -1.9078621 --3.6294336 5.1457443 -1.9081578 --3.5917873 5.1592937 -1.904905 --3.5562756 5.175724 -1.902835 --3.5276682 5.2021914 -1.9046093 --3.4908998 5.2165937 -1.901948 --3.455667 5.2331324 -1.9001737 --3.4141042 5.2398314 -1.894851 --3.3777559 5.2542529 -1.8924853 --3.3495462 5.281333 -1.894851 --3.3500149 5.3544235 -1.9140719 --3.316596 5.3740649 -1.9137763 --3.2850492 5.3967619 -1.9146633 --3.2425303 5.4012561 -1.9090449 --3.2078679 5.4185843 -1.9081578 --3.1634817 5.4191914 -1.9013565 --3.1430383 5.4608536 -1.9093406 --3.1391757 5.5323772 -1.9279703 --3.0921118 5.5281916 -1.9196904 --3.0535207 5.5386949 -1.9167334 --3.0035143 5.5279493 -1.9063835 --2.9668331 5.5412216 -1.9046093 --2.9403553 5.5736847 -1.9096364 --2.8906798 5.561955 -1.8992865 --2.8556271 5.5778866 -1.8986951 --2.8290908 5.6106563 -1.9040179 --2.8171318 5.6732554 -1.9196904 --2.7810094 5.6878595 -1.9188033 --2.7381837 5.6884627 -1.9131849 --2.7044556 5.7077465 -1.9140719 --2.6718054 5.7294278 -1.9158462 --2.6250443 5.7205358 -1.9072707 --2.5957913 5.7495947 -1.9117063 --2.5647295 5.7750173 -1.9149591 --2.5315409 5.795898 -1.9167334 --2.5162904 5.8587189 -1.9327016 --2.4717467 5.8538079 -1.9259002 --2.4471354 5.8962145 -1.9350672 --2.3899832 5.8598175 -1.9179162 --2.3568261 5.8814654 -1.9202818 --2.3266428 5.9109268 -1.9253088 --2.2830961 5.9063802 -1.919099 --2.2566435 5.946178 -1.9276745 --2.2214501 5.9634933 -1.9288573 --2.1851449 5.9779086 -1.9291531 --2.1584218 6.0190787 -1.93832 --2.1128902 6.0078783 -1.9303359 --2.0738065 6.0144081 -1.9282659 --2.0402288 6.036974 -1.9315187 --1.9980423 6.0339627 -1.9264917 --1.9527273 6.0206666 -1.9182118 --1.9250026 6.0616693 -1.9276745 --1.8903251 6.0815768 -1.9303359 --1.8424096 6.0583315 -1.919099 --1.8131009 6.0960755 -1.9276745 --1.7767291 6.110755 -1.9288573 --1.7394619 6.1224604 -1.9291531 --1.7028844 6.1367002 -1.9303359 --1.6482095 6.0843353 -1.9102278 --1.625496 6.1497469 -1.9279703 --1.5839152 6.1448045 -1.9232389 --1.5438534 6.145143 -1.9202818 --1.5072541 6.1591396 -1.9217603 --1.4692125 6.1673427 -1.9214647 --1.4380304 6.20509 -1.9306316 --1.3997196 6.2128649 -1.9303359 --1.3548301 6.1905417 -1.9205775 --1.3245641 6.2351804 -1.9321102 --1.2855096 6.2394476 -1.9309273 --1.2515037 6.268764 -1.9377286 --1.2113838 6.2678838 -1.9350672 --1.1716729 6.2686257 -1.9329972 --1.1347156 6.2841578 -1.9356587 --1.0958073 6.2891197 -1.9350672 --1.0567225 6.2928987 -1.9341801 --1.0191575 6.3058653 -1.9362501 --0.97971284 6.3072805 -1.9347715 --0.94183898 6.3188419 -1.9365457 --0.90291446 6.3235564 -1.9362501 --0.86422616 6.3299241 -1.9365457 --0.82549369 6.3360548 -1.9368415 --0.78671849 6.341949 -1.9371371 --0.7464481 6.3352723 -1.9335887 --0.70830369 6.3463788 -1.9356587 --0.66804725 6.3382554 -1.9318144 --0.62848336 6.3355808 -1.9297445 --0.59057087 6.3497806 -1.9329972 --0.55093676 6.3456712 -1.9306316 --0.51306593 6.3622627 -1.9347715 --0.47423115 6.3681488 -1.9356587 --0.43534347 6.3737979 -1.9365457 --0.3964043 6.3792095 -1.9374329 --0.35693401 6.3757992 -1.9356587 --0.31756812 6.3730989 -1.9341801 --0.27891675 6.3854256 -1.9374329 --0.23991072 6.3917894 -1.9389114 --0.2002064 6.3778644 -1.9341801 --0.16118966 6.3837476 -1.9356587 --0.12219981 6.3941674 -1.9386157 --0.082851574 6.3862004 -1.9359543 --0.043665022 6.3865886 -1.9359543 --0.0044761011 6.3857808 -1.9356587 -0.034711529 6.3866434 -1.9359543 -0.07373368 6.3719821 -1.9315187 -0.11286375 6.3733196 -1.9321102 -0.15210387 6.3782372 -1.9338844 -0.1914943 6.3857775 -1.9365457 -0.2304665 6.3787546 -1.9347715 -0.26911798 6.365767 -1.931223 -0.3076188 6.3525462 -1.9276745 -0.34690347 6.3562622 -1.9294487 -0.38520405 6.3425717 -1.9259002 -0.42455998 6.3467607 -1.9279703 -0.46279952 6.3345089 -1.9250132 -0.50241256 6.341073 -1.9279703 -0.54074252 6.3312082 -1.9259002 -0.57766432 6.3068423 -1.9193947 -0.62062526 6.3469133 -1.9329972 -0.65353441 6.2850261 -1.9149591 -0.69679183 6.323627 -1.9282659 -0.73690444 6.3306189 -1.9318144 -0.77375895 6.3098593 -1.9267874 -0.81002039 6.2860436 -1.9208733 -0.85304993 6.3140893 -1.931223 -0.88896984 6.2888727 -1.9250132 -0.92712259 6.2804642 -1.924126 -0.96476984 6.2689924 -1.9223518 -1.0056341 6.2780471 -1.9270831 -1.0413138 6.2547965 -1.9217603 -1.0796728 6.2482896 -1.9217603 -1.1173178 6.2377858 -1.9205775 -1.1597505 6.253355 -1.9276745 -1.1961195 6.2358012 -1.9244218 -1.237144 6.2424006 -1.9288573 -1.2744664 6.2300124 -1.9273788 -1.3152318 6.2342267 -1.931223 -1.3518366 6.2185712 -1.9288573 -1.3922621 6.2204142 -1.9321102 -1.427189 6.1977901 -1.9276745 -1.4656311 6.1907754 -1.9282659 -1.5002036 6.1677427 -1.9238303 -1.5444994 6.1843724 -1.9321102 -1.5781493 6.1581225 -1.9267874 -1.6156623 6.1473989 -1.9264917 -1.6483831 6.1189218 -1.9205775 -1.688946 6.1197429 -1.924126 -1.7241267 6.1009908 -1.9214647 -1.7615293 6.0902967 -1.9214647 -1.7975105 6.0747933 -1.9199861 -1.8339211 6.0609069 -1.919099 -1.8716401 6.0513649 -1.9196904 -1.909023 6.040678 -1.9199861 -1.9457587 6.0279417 -1.9196904 -1.9830078 6.0167966 -1.9199861 -2.0186708 6.0008941 -1.9188033 -2.0548334 5.9865875 -1.9182118 -2.091212 5.9729648 -1.9179162 -2.1307123 5.9681182 -1.9205775 -2.1604323 5.9360805 -1.9143677 -2.1954861 5.9191298 -1.9131849 -2.229738 5.9001856 -1.9114106 -2.266242 5.8872843 -1.9117063 -2.3047631 5.8794942 -1.9137763 -2.3468142 5.8803248 -1.9188033 -2.3839295 5.8684697 -1.9196904 -2.422812 5.8607945 -1.9220561 -2.4720585 5.8775191 -1.9327016 -2.4975562 5.8376479 -1.9244218 -2.50932 5.7670269 -1.9057921 -2.5407941 5.742785 -1.902835 -2.5622702 5.6965938 -1.8924853 -2.6142526 5.7181239 -1.9052007 -2.6508992 5.705441 -1.9063835 -2.689527 5.6968427 -1.9090449 -2.7318668 5.6957374 -1.9143677 -2.7667637 5.6788673 -1.9143677 -2.7846124 5.6275353 -1.9025394 -2.8135147 5.5992465 -1.8986951 -2.8443453 5.5750699 -1.8963295 -2.8754249 5.5515747 -1.8942596 -2.9054341 5.5262165 -1.8915981 -2.9329922 5.4964857 -1.8874582 -2.9816723 5.5061073 -1.8972166 -3.0154011 5.4877086 -1.8972166 -3.0485511 5.4682684 -1.8969209 -3.0829868 5.4511232 -1.8975123 -3.1178021 5.4345894 -1.8983995 -3.1443641 5.4037971 -1.8942596 -3.1847436 5.3967428 -1.8986951 -3.2207403 5.3820186 -1.9004694 -3.2487481 5.3539877 -1.8975123 -3.2845416 5.3388352 -1.8992865 -3.2965131 5.2853475 -1.8871626 -3.3156095 5.2440271 -1.8794742 -3.3678243 5.2549524 -1.8910067 -3.37659 5.1981378 -1.8776999 -3.4289057 5.2084408 -1.8892325 -3.4528477 5.1753826 -1.8847969 -3.4898882 5.1620135 -1.887754 -3.5301332 5.1531124 -1.8924853 -3.5600517 5.1290007 -1.8915981 -3.5947526 5.1117487 -1.8933724 -3.6288211 5.0934858 -1.894851 -3.6577699 5.0680251 -1.8936681 -3.6876702 5.0439439 -1.8930767 -3.7253716 5.0304346 -1.8966252 -3.7527285 5.0028958 -1.894851 -3.7879779 4.9858608 -1.8972166 -3.8184993 4.9625244 -1.8972166 -3.8529868 4.9442759 -1.8992865 -3.8779261 4.9137921 -1.8966252 -3.9133706 4.8966217 -1.8992865 -3.9391358 4.8673191 -1.8972166 -3.9701378 4.8445354 -1.897808 -4.0010085 4.8215542 -1.8983995 -4.0268307 4.7925253 -1.8966252 -4.0567803 4.7684546 -1.8969209 -4.0803518 4.7369585 -1.8942596 -4.1212697 4.7255125 -1.899878 -4.1451292 4.694407 -1.8975123 -4.1700358 4.6646109 -1.895738 -4.1966558 4.6368113 -1.894851 -4.203732 4.5877304 -1.8850926 -4.2376494 4.5681539 -1.887754 -4.2897944 4.567832 -1.8986951 -4.3144503 4.5379629 -1.8972166 -4.3547993 4.5244823 -1.902835 -4.3764796 4.4915185 -1.9001737 -4.4113355 4.4720616 -1.9034264 -4.4427423 4.448966 -1.9052007 -4.4523001 4.4041543 -1.8975123 -4.4819727 4.3794231 -1.8986951 -4.4874535 4.3312726 -1.8895282 -4.5429821 4.3313441 -1.901948 -4.5444393 4.2798085 -1.8913025 -4.5657187 4.2472887 -1.8892325 -4.5923967 4.2198405 -1.8895282 -4.6252761 4.1980033 -1.8924853 -4.6473913 4.1663556 -1.8910067 -4.6692924 4.1345944 -1.8895282 -4.6952929 4.1064954 -1.8898239 -4.7131729 4.071363 -1.8868668 -4.7402453 4.0442271 -1.887754 -4.7649713 4.0150657 -1.887754 -4.8012652 3.9955301 -1.8924853 -4.8234773 3.9641752 -1.8915981 -4.8536434 3.9393208 -1.8939638 -4.873251 3.9058802 -1.8921895 -4.9195962 3.893692 -1.9010608 -4.9561896 3.8734336 -1.9060879 -4.9685197 3.8341951 -1.9016522 -4.9744768 3.7903194 -1.894851 -4.9961133 3.7585766 -1.8942596 -5.0229158 3.7306983 -1.895738 -5.0534158 3.7054574 -1.8986951 -5.0791521 3.6766212 -1.899878 -5.1039472 3.6470532 -1.9007651 -5.1246681 3.6145661 -1.9001737 -5.1585097 3.5912416 -1.9046093 -5.1733623 3.5546525 -1.901948 -5.1974473 3.524451 -1.902835 -5.2189751 3.4924939 -1.902835 -5.2426982 3.4619844 -1.9037222 -5.2662425 3.4313152 -1.9046093 -5.2871976 3.3989377 -1.9046093 -5.3127937 3.3695021 -1.9063835 -5.3398471 3.3408937 -1.9087492 -5.3537426 3.3040524 -1.9063835 -5.3714671 3.2696497 -1.9054965 -5.4061704 3.2454808 -1.9108192 -5.4226942 3.2103014 -1.9096364 -5.4464149 3.1793761 -1.9111149 -5.4633369 3.1444678 -1.9102278 -5.4792051 3.1090004 -1.9090449 -5.4906754 3.0711246 -1.9063835 -5.5069065 3.0359929 -1.9054965 -5.5212345 2.9998653 -1.9040179 -5.5361686 2.9641275 -1.902835 -5.5601664 2.9332228 -1.904905 -5.5772119 2.8986106 -1.9046093 -5.5940423 2.8638995 -1.9043136 -5.6166272 2.8321021 -1.9060879 -5.6347547 2.7980106 -1.9063835 -5.6415186 2.758348 -1.902835 -5.6505909 2.7199509 -1.9001737 -5.6723533 2.6876829 -1.901948 -5.6930666 2.6548462 -1.9034264 -5.7153268 2.6226535 -1.9054965 -5.7374058 2.5902874 -1.9075664 -5.7496996 2.5534835 -1.9063835 -5.7652588 2.5181561 -1.9063835 -5.7779684 2.4816024 -1.9054965 -5.7842865 2.4423864 -1.9025394 -5.8026929 2.4083138 -1.9037222 -5.820014 2.3737462 -1.9046093 -5.8362432 2.3387012 -1.9052007 -5.8540387 2.3042464 -1.9063835 -5.8787594 2.2724173 -1.909932 -5.892592 2.2363031 -1.909932 -5.9169445 2.2041068 -1.9134805 -5.9303575 2.1677597 -1.9134805 -5.949841 2.1335886 -1.9155505 -5.9619193 2.0967238 -1.9152548 -5.969254 2.058234 -1.9134805 -5.9826756 2.0218744 -1.9137763 -5.9995031 1.9866291 -1.9152548 -6.0061278 1.9480108 -1.9134805 -6.0179677 1.9111212 -1.9134805 -6.0314054 1.8747269 -1.9140719 -6.0363975 1.8357376 -1.912002 -6.0466318 1.7983921 -1.9117063 -6.0291171 1.752987 -1.9025394 -6.0765157 1.7264054 -1.9143677 -6.0952787 1.6913874 -1.917029 -6.1000099 1.6524566 -1.9152548 -6.1100345 1.6149966 -1.9152548 -6.1392541 1.5824842 -1.9214647 -6.1303191 1.5401282 -1.9155505 -6.1582117 1.507027 -1.9214647 -6.161767 1.4678839 -1.9196904 -6.1753106 1.4311271 -1.9211689 -6.18118 1.3925791 -1.9202818 -6.1830764 1.3531958 -1.9182118 -6.1968694 1.3164231 -1.9199861 -6.2113795 1.2797248 -1.9220561 -6.2181778 1.2414013 -1.9217603 -6.22474 1.2030426 -1.9214647 -6.2263703 1.1637722 -1.9196904 -6.2277536 1.1245272 -1.9179162 -6.242065 1.0876056 -1.9202818 -6.2570996 1.0507088 -1.9229432 -6.2643719 1.0124487 -1.9232389 -6.278018 0.97516561 -1.9256046 -6.2848282 0.93676692 -1.9259002 -6.2847838 0.89737576 -1.924126 -6.2977433 0.85983044 -1.9264917 -6.3029008 0.82117206 -1.9264917 -6.3125606 0.78307104 -1.9279703 -6.3020673 0.74253368 -1.9232389 -6.312201 0.70448703 -1.9250132 -6.302155 0.66424 -1.9205775 -6.3004084 0.62499201 -1.9188033 -6.2946129 0.58543646 -1.9158462 -6.2581153 0.54332954 -1.9034264 -6.3165579 0.5093773 -1.9205775 -6.3424277 0.47231409 -1.9276745 -6.3290048 0.43228117 -1.9226475 -6.3458395 0.39432856 -1.9270831 -6.3557696 0.35581145 -1.9294487 -6.3425679 0.31604487 -1.9247174 -6.3462963 0.27720514 -1.9253088 -6.3555145 0.23854689 -1.9276745 -6.3625875 0.1997259 -1.9294487 -6.3780179 0.16104463 -1.9338844 -6.358829 0.12152224 -1.9276745 -6.3489475 0.082365938 -1.9244218 -6.3426466 0.043361843 -1.9223518 -6.3427935 0.0044432767 -1.9223518 -6.3455667 -0.03449085 -1.9232389 -6.3481016 -0.07345885 -1.924126 -6.3542171 -0.11252666 -1.926196 -6.3667774 -0.1518313 -1.9303359 -6.3628612 -0.19080852 -1.9294487 -6.3692079 -0.23012218 -1.9318144 -6.3686304 -0.26923886 -1.9321102 -6.3764 -0.30877241 -1.9350672 -6.3677087 -0.34752747 -1.9329972 -6.3692703 -0.38682386 -1.9341801 -6.3543859 -0.42506957 -1.9303359 -6.3564219 -0.4643991 -1.9318144 -6.3515482 -0.50324184 -1.931223 -6.3454852 -0.54196101 -1.9303359 -6.3448944 -0.58114719 -1.931223 -6.3516674 -0.62108982 -1.9344758 -6.3420358 -0.65945876 -1.9327016 -6.3416681 -0.69877863 -1.9338844 -6.3258748 -0.7363525 -1.9303359 -6.3278747 -0.77596694 -1.9324058 -6.3391008 -0.81685394 -1.9374329 -6.3178759 -0.85356128 -1.9324058 -6.2803597 -0.88776702 -1.9223518 -6.3031454 -0.93046927 -1.931223 -6.3039269 -0.97014385 -1.933293 -6.2808766 -1.0060872 -1.9279703 -6.2821236 -1.0458615 -1.9303359 -6.2718229 -1.0837379 -1.9291531 -6.2631745 -1.1218638 -1.9285617 -6.2758975 -1.1639297 -1.9347715 -6.2564411 -1.2000773 -1.9309273 -6.2536454 -1.2393718 -1.9324058 -6.2665129 -1.2819308 -1.9389114 -6.2510514 -1.3187802 -1.9365457 -6.2475095 -1.3581254 -1.9380243 -6.245584 -1.397894 -1.9400942 -6.2322345 -1.4351183 -1.9386157 -6.2205229 -1.4726715 -1.9377286 -6.1890922 -1.5053951 -1.9306316 -6.1760311 -1.5424167 -1.9294487 -6.1942124 -1.5873957 -1.93832 -6.1584864 -1.6185755 -1.9300402 -6.1641197 -1.6605561 -1.9350672 -6.1556563 -1.6988553 -1.9356587 -6.1460361 -1.7368534 -1.9359543 -6.1380162 -1.7753282 -1.9368415 -6.120595 -1.81106 -1.9347715 -6.1011381 -1.8460917 -1.9321102 -6.0760064 -1.8792597 -1.9276745 -6.0598068 -1.915067 -1.926196 -6.0043049 -1.9381306 -1.912002 -5.9532862 -1.9620805 -1.8992865 -5.865078 -1.9729924 -1.8744471 -5.7064853 -1.958711 -1.8265424 -5.6213269 -1.968124 -1.80259 -5.5614619 -1.9855585 -1.7869174 -5.4890285 -1.9977601 -1.7671051 -5.4256139 -2.0124698 -1.7502497 -5.3756313 -2.0315418 -1.7378299 -5.3309698 -2.0521355 -1.7271844 -5.2746968 -2.0677266 -1.7126948 -5.2388415 -2.0908477 -1.7050064 -5.157764 -2.095274 -1.6822368 -5.1006684 -2.1086371 -1.6674515 -5.0673804 -2.1313777 -1.6606501 -5.0199537 -2.147778 -1.6491176 -4.9751453 -2.1648204 -1.6384721 -4.925077 -2.1790757 -1.6260523 -4.7600188 -2.1410804 -1.5745991 -4.4913611 -2.0534871 -1.487661 -4.7195244 -2.1928923 -1.5698677 -4.5375252 -2.1422935 -1.5122048 -4.3304901 -2.0771546 -1.4456704 -4.300487 -2.0953202 -1.4397563 -4.2233329 -2.0898974 -1.4175781 -4.1472635 -2.0840368 -1.3956957 -4.1029124 -2.0933838 -1.3847545 -4.0382457 -2.0917225 -1.3667164 -4.0414004 -2.1249065 -1.3723348 -3.9558036 -2.1109924 -1.3469039 -4.4031229 -2.3844745 -1.5089519 -3.9572296 -2.1745565 -1.3566623 -3.9154425 -2.1829829 -1.3466082 -4.5455818 -2.5709171 -1.5754862 -3.5892222 -2.059279 -1.2398576 -3.5583539 -2.0706947 -1.2333521 -3.5118489 -2.0725861 -1.221228 -3.5171001 -2.1048861 -1.2277336 -3.4306138 -2.0818315 -1.2011199 -3.3779058 -2.0783172 -1.1866301 -3.3302352 -2.0772684 -1.1739147 -3.2657492 -2.0649941 -1.1549894 -3.2264748 -2.0679853 -1.145231 -3.1584468 -2.051841 -1.1248271 -3.1043053 -2.0438704 -1.1094503 -3.0766068 -2.0528073 -1.1038319 -3.0465417 -2.0598767 -1.0973263 -3.014142 -2.0650353 -1.0899336 -2.9778705 -2.0671513 -1.0810624 -2.9541905 -2.0776918 -1.0769224 -2.9094863 -2.0730553 -1.0647985 -2.9036832 -2.0958996 -1.0674598 -2.8977091 -2.1187506 -1.0701212 -2.9023116 -2.1495655 -1.0769224 -2.8959455 -2.1724918 -1.0795839 -2.8939712 -2.1988878 -1.0840194 -2.8910244 -2.2247586 -1.0881593 -2.8908827 -2.2530243 -1.0934821 -2.8522565 -2.2511921 -1.0837238 -2.8145089 -2.2495677 -1.0742611 -2.7828305 -2.2523732 -1.0671641 -2.7504852 -2.2542694 -1.0597714 -2.7564511 -2.2875731 -1.0677555 -2.7182262 -2.2841654 -1.0579971 -2.7034321 -2.3001821 -1.0577015 -2.6979532 -2.3242078 -1.06125 -2.6829214 -2.3400905 -1.0609542 -2.7014539 -2.3855917 -1.0745568 -2.6689596 -2.3862071 -1.0671641 -2.6769338 -2.4230502 -1.0766268 -2.613415 -2.3949027 -1.0562229 -2.620383 -2.4310319 -1.0653899 -2.6242194 -2.46472 -1.0733739 -2.5951996 -2.467612 -1.0674598 -2.5910227 -2.4940882 -1.0721911 -2.5681441 -2.5026066 -1.0689384 -2.5282552 -2.4941683 -1.0582929 -2.5074959 -2.5042346 -1.0559272 -2.4934266 -2.5209312 -1.0565186 -2.4939356 -2.5525804 -1.0636156 -2.472255 -2.5616491 -1.0609542 -2.4584682 -2.5788445 -1.0618414 -2.450458 -2.6022253 -1.0653899 -2.4363971 -2.6193104 -1.066277 -2.4280362 -2.6426508 -1.0698255 -2.4111335 -2.6567919 -1.0695298 -2.3941486 -2.6708252 -1.069234 -2.3827825 -2.6911864 -1.0715997 -2.3693695 -2.7093513 -1.0730783 -2.3414593 -2.7108269 -1.0677555 -2.3210614 -2.7207825 -1.0659813 -2.3030922 -2.7335122 -1.0653899 -2.2826097 -2.7431867 -1.0636156 -2.2566361 -2.7460713 -1.05918 -2.2373359 -2.7568994 -1.0579971 -2.2102203 -2.7579043 -1.0529702 -2.186142 -2.7624259 -1.0494217 -2.1632679 -2.7682612 -1.0464646 -2.1450741 -2.7799702 -1.0458732 -2.1245019 -2.7885211 -1.0440989 -2.114244 -2.8106644 -1.0476474 -2.1055031 -2.8350871 -1.052083 -2.0897624 -2.8502638 -1.0529702 -2.0800769 -2.8738656 -1.0571101 -2.0651813 -2.8904607 -1.0585886 -2.0468562 -2.9022973 -1.0582929 -2.0339222 -2.9218576 -1.0609542 -2.0202839 -2.9405811 -1.0633199 -1.9914789 -2.9371097 -1.0574057 -1.973951 -2.9500678 -1.0577015 -1.9689739 -2.9820523 -1.0650941 -1.9402083 -2.9780707 -1.05918 -1.8976171 -2.9521539 -1.0452816 -1.9081218 -3.0089161 -1.0618414 -1.8941841 -3.0278556 -1.0645027 -1.8795838 -3.0459244 -1.0668684 -1.8037325 -2.9635644 -1.0328619 -1.7835475 -2.9713001 -1.0316792 -1.7652824 -2.9821877 -1.0316792 -1.7464691 -2.9921381 -1.0313834 -1.7442806 -3.0309467 -1.0414375 -1.732251 -3.0532238 -1.0455774 -1.7139505 -3.0646291 -1.0458732 -1.6978816 -3.0801072 -1.0476474 -1.6798627 -3.0921459 -1.0482388 -1.6626619 -3.1057637 -1.0494217 -1.6453571 -3.1192868 -1.0506045 -1.6266271 -3.1301713 -1.0509001 -1.6030363 -3.1315901 -1.0479431 -1.5794895 -3.1328378 -1.044986 -1.5602371 -3.1424704 -1.044986 -1.534631 -3.1391122 -1.0405504 -1.5290155 -3.1768732 -1.0503087 -1.4988574 -3.1637509 -1.0426203 -1.4705334 -3.1538417 -1.0361148 -1.4352154 -3.1280773 -1.0242864 -1.3762882 -3.0488908 -0.99441993 -1.3311852 -2.9979122 -0.97431177 -1.3548317 -3.1023169 -1.0068396 -1.3776224 -3.2079985 -1.0396632 -1.3541961 -3.2075911 -1.0367062 -1.3513364 -3.2564249 -1.0503087 -1.3360206 -3.2761538 -1.054153 -1.3244226 -3.3055708 -1.06125 -1.3016655 -3.3074131 -1.05918 -1.2772133 -3.3046455 -1.0556315 -1.2558954 -3.3097408 -1.0547444 -1.2415669 -3.3334975 -1.0600671 -1.2374907 -3.3859127 -1.0748525 -1.2218519 -3.407829 -1.0795839 -1.1952131 -3.3990414 -1.0742611 -1.1780719 -3.4171481 -1.0778096 -1.1549412 -3.4179773 -1.0757396 -1.1636814 -3.5147762 -1.1050147 -1.1535895 -3.5572882 -1.1165473 -1.1375245 -3.5825083 -1.1224616 -1.0494417 -3.3768759 -1.0535616 -1.0167478 -3.3439524 -1.0408461 -0.98940086 -3.3272376 -1.0334533 -0.96416497 -3.316735 -1.0281307 -0.93987876 -3.308805 -1.023695 -0.92058057 -3.3181918 -1.0248779 -0.89845437 -3.3173237 -1.0228078 -0.88052446 -3.3320093 -1.0257649 -0.79113609 -3.0700169 -0.94030535 -0.74993306 -2.985872 -0.91191739 -0.79769343 -3.2604315 -0.99796844 -0.82860273 -3.4789944 -1.0659813 -0.81651676 -3.524029 -1.0786967 -0.79571837 -3.5327003 -1.0798795 -0.78097314 -3.5692441 -1.0899336 -0.76124215 -3.5842476 -1.0931864 -0.73962092 -3.5907223 -1.0937778 -0.71757472 -3.5951929 -1.0937778 -0.69550157 -3.5995281 -1.0937778 -0.67147088 -3.5933988 -1.090525 -0.64771152 -3.5880506 -1.0875679 -0.6151852 -3.5317276 -1.0686426 -0.60030842 -3.5759451 -1.0813581 -0.58094758 -3.5955927 -1.0863851 -0.56034136 -3.6085293 -1.0893422 -0.53903461 -3.6175685 -1.0911164 -0.51588184 -3.6141882 -1.0890465 -0.49046379 -3.5936232 -1.0816538 -0.46507069 -3.5709889 -1.0736697 -0.44703352 -3.6050594 -1.083428 -0.42367464 -3.5972986 -1.0801753 -0.39968574 -3.5827417 -1.0748525 -0.37749454 -3.5832267 -1.0742611 -0.35540679 -3.5845251 -1.0739654 -0.33331737 -3.5856872 -1.0736697 -0.31172314 -3.5924232 -1.0751482 -0.29028937 -3.6018858 -1.0775139 -0.26903516 -3.6150308 -1.0810624 -0.24789117 -3.6318624 -1.0857937 -0.22637281 -3.6457098 -1.0896379 -0.20464034 -3.6584754 -1.0931864 -0.18304534 -3.6768358 -1.0985092 -0.16018903 -3.6712093 -1.0964392 -0.13755223 -3.6692593 -1.0955521 -0.11512559 -3.6728985 -1.0964392 -0.092175998 -3.6573012 -1.0914122 -0.069843359 -3.6635287 -1.0931864 -0.047512483 -3.6753507 -1.0967349 -0.024900744 -3.6669757 -1.0940735 -0.0024008646 -3.6680148 -1.0943693 --0.020157017 -3.6775131 -1.0973263 --0.042622492 -3.6687231 -1.0946649 --0.065031424 -3.6626618 -1.0928907 --0.087367587 -3.6564639 -1.0911164 --0.11051593 -3.6797302 -1.0985092 --0.13326441 -3.6837561 -1.0999877 --0.15606645 -3.6876411 -1.1014662 --0.17813671 -3.6751642 -1.0979178 --0.20005976 -3.6625557 -1.0943693 --0.22212406 -3.6545844 -1.0922993 --0.24467139 -3.6550591 -1.0928907 --0.26778927 -3.6630163 -1.0958477 --0.29071242 -3.6670182 -1.097622 --0.31353229 -3.6689725 -1.0988048 --0.33647415 -3.6717362 -1.1002834 --0.36020496 -3.6819623 -1.1041276 --0.38111171 -3.6635301 -1.0991006 --0.40389723 -3.6639712 -1.0999877 --0.42725447 -3.6690149 -1.1023533 --0.45034015 -3.6710653 -1.1038319 --0.4737111 -3.674865 -1.1059018 --0.73467082 -5.437458 -1.6573974 --0.51917261 -3.6716127 -1.106789 --0.80845326 -5.4762306 -1.6724784 --0.84596115 -5.4966593 -1.6804626 --0.88163555 -5.5036278 -1.6843069 --0.90754765 -5.4509988 -1.6695215 --0.93805051 -5.4283834 -1.6641986 --0.97033054 -5.4168835 -1.6624244 --1.0030272 -5.4080095 -1.6615373 --1.0369109 -5.4055061 -1.6627201 --1.0709871 -5.4037275 -1.6641986 --1.1046978 -5.3998618 -1.6650858 --1.1368243 -5.3883085 -1.6636072 --1.1745309 -5.4027019 -1.6704085 --1.2076591 -5.3953934 -1.6704085 --1.2394561 -5.3822961 -1.6686343 --1.2722379 -5.3736601 -1.6683385 --1.3081204 -5.3778195 -1.6721828 --1.3466471 -5.3919358 -1.6792798 --1.3825512 -5.3946762 -1.6828283 --1.4090717 -5.3611455 -1.6748441 --1.4382141 -5.3385625 -1.6704085 --1.4833939 -5.3747597 -1.6848983 --1.5184226 -5.372911 -1.6872638 --1.5463197 -5.3460569 -1.6816454 --1.5801774 -5.3401327 -1.6828283 --1.1971774 -3.9560595 -1.2383791 --1.223122 -3.9541152 -1.2401533 --1.6678431 -5.2773499 -1.6721828 --1.7019532 -5.2724714 -1.673957 --1.7318808 -5.2546711 -1.6715914 --1.761654 -5.236702 -1.6692257 --1.7937527 -5.2257938 -1.6692257 --1.8257838 -5.2146893 -1.6692257 --1.8615998 -5.2141848 -1.6727742 --1.894865 -5.2062545 -1.673957 --1.9347459 -5.2160263 -1.681054 --1.9673898 -5.2058439 -1.6816454 --2.0030694 -5.2034807 -1.6848983 --2.0339141 -5.1884241 -1.6840111 --2.0653572 -5.1749592 -1.6837153 --2.0967119 -5.161304 -1.6834197 --1.256242 -3.0383518 -0.97667742 --1.2744911 -3.0297058 -0.97638172 --1.2934327 -3.022707 -0.97667742 --2.2189343 -5.099534 -1.6804626 --2.252115 -5.0901909 -1.6819412 --2.2864397 -5.0832462 -1.6843069 --2.3163955 -5.066515 -1.6834197 --1.5871806 -3.4156544 -1.1248271 --1.6019921 -3.3928933 -1.1203916 --1.6141059 -3.3649113 -1.1141816 --1.6305388 -3.3463559 -1.1112247 --1.648923 -3.3320072 -1.1097461 --1.6701945 -3.323534 -1.1103375 --1.6922922 -3.3166273 -1.1115203 --1.7253503 -3.330781 -1.1200958 --1.7582009 -3.3438077 -1.1283756 --2.1712484 -4.0687418 -1.3865288 --2.1979921 -4.0587029 -1.3877116 --2.638217 -4.8011699 -1.654736 --2.6611152 -4.77321 -1.6505961 --2.7006979 -4.7750854 -1.6571016 --2.7318475 -4.7617388 -1.6582845 --2.7744646 -4.7680068 -1.6665643 --2.809979 -4.7615886 -1.6704085 --2.8450286 -4.7540941 -1.673957 --2.8786051 -4.7438984 -1.6766183 --2.9161675 -4.7399788 -1.6816454 --2.9426692 -4.7179432 -1.6801668 --2.9736044 -4.7030287 -1.6813498 --3.0106521 -4.6975632 -1.6860811 --3.048785 -4.6934223 -1.6914037 --3.0896063 -4.6929793 -1.6982051 --3.1141026 -4.6675758 -1.6958394 --3.1400089 -4.644423 -1.6943609 --3.1571109 -4.6085186 -1.688151 --3.1864181 -4.5906296 -1.6887424 --3.2084818 -4.562396 -1.6854897 --3.2430665 -4.5519595 -1.6890382 --3.2536066 -4.5079613 -1.6798712 --3.2823331 -4.4894547 -1.6804626 --2.2246039 -3.0036509 -1.1159559 --2.2464311 -2.9945297 -1.1177301 --3.3707695 -4.436645 -1.6837153 --3.4305494 -4.4582777 -1.7002751 --3.4384644 -4.4122777 -1.6905167 --3.4625142 -4.3873467 -1.6890382 --3.4673045 -4.3384066 -1.6780969 --3.5166938 -4.3452687 -1.6893338 --3.5463171 -4.3273034 -1.6908123 --3.5569427 -4.2863479 -1.6831239 --3.5592115 -4.2359166 -1.6715914 --3.5987527 -4.2300062 -1.6780969 --3.591599 -4.1694822 -1.6624244 --3.6152313 -4.1452065 -1.6615373 --3.6361721 -4.1179328 -1.6594673 --3.6651905 -4.0998173 -1.6612415 --3.6973283 -4.0850425 -1.6644944 --3.7145803 -4.0538268 -1.6609459 --3.7517271 -4.0442657 -1.6665643 --3.7627394 -4.0065451 -1.6603545 --3.7931759 -3.9896133 -1.6630158 --3.8195715 -3.9683287 -1.663903 --3.8305163 -3.9311328 -1.6579888 --3.8404784 -3.8932726 -1.6517789 --3.8649697 -3.8703105 -1.6520746 --3.890003 -3.8478663 -1.6526661 --3.9101236 -3.8205869 -1.6511875 --3.9286816 -3.7918789 -1.6491176 --3.9663928 -3.7815454 -1.6553274 --3.9811766 -3.7492771 -1.6517789 --4.0013094 -3.7221756 -1.6505961 --4.0170388 -3.6910901 -1.647639 --4.0544653 -3.6798561 -1.6538489 --4.0719895 -3.650445 -1.6517789 --4.1014628 -3.6317244 -1.654736 --4.1351738 -3.6165528 -1.6594673 --4.1493354 -3.5842421 -1.6562146 --4.151629 -3.5419731 -1.6482304 --4.1776671 -3.5201261 -1.6500046 --4.2035928 -3.4980927 -1.6517789 --4.2013621 -3.4528234 -1.6423162 --4.2528787 -3.4516633 -1.6544403 --4.2456536 -3.4027987 -1.6432034 --4.2716961 -3.3808341 -1.6452733 --4.3111758 -3.369267 -1.6526661 --4.3476491 -3.3550076 -1.6588759 --4.3772712 -3.335216 -1.6624244 --4.4029965 -3.3123152 -1.6644944 --4.4408751 -3.2983384 -1.6712956 --4.4764366 -3.2823262 -1.6772099 --4.50423 -3.2603993 -1.6801668 --4.5233736 -3.2321451 -1.6798712 --4.5384369 -3.2010255 -1.6780969 --4.5540724 -3.1703887 -1.6766183 --4.5939097 -3.1564524 -1.6843069 --4.6187253 -3.1319587 -1.6863768 --4.6283288 -3.0971839 -1.6828283 --4.6448545 -3.0671473 -1.6819412 --4.6675882 -3.0411971 -1.6834197 --4.6829467 -3.0104334 -1.6822368 --4.699717 -2.9806194 -1.6816454 --4.7179174 -2.9517264 -1.6816454 --4.7465076 -2.929245 -1.6854897 --4.7619438 -2.8985755 -1.6846025 --4.7780018 -2.8683188 -1.6840111 --4.8020873 -2.8428411 -1.6863768 --4.8153152 -2.8109143 -1.6848983 --4.8515139 -2.7922764 -1.6916995 --4.8560934 -2.7553833 -1.6872638 --4.9170947 -2.7502532 -1.7029364 --4.9263482 -2.7158794 -1.7002751 --4.9563498 -2.6928988 -1.7050064 --5.0030966 -2.6786709 -1.7156519 --5.0287323 -2.6528256 -1.7189046 --5.0423722 -2.6205981 -1.7180176 --5.0813146 -2.6013646 -1.7260016 --5.1057105 -2.574439 -1.7289587 --5.1496444 -2.5570846 -1.7387171 --5.1746774 -2.530055 -1.7419698 --5.1918254 -2.4990849 -1.7425613 --5.2234635 -2.4749541 -1.7481798 --5.2498059 -2.4481063 -1.7520239 --5.2768836 -2.4214265 -1.7561638 --5.3029599 -2.3941135 -1.7600081 --5.3236613 -2.3642445 -1.762078 --5.338943 -2.331917 -1.7623737 --5.3461294 -2.2960978 -1.7600081 --5.3574772 -2.2621362 -1.7591209 --5.3791971 -2.232517 -1.7617823 --5.4034085 -2.2037988 -1.7653308 --5.3769269 -2.1546102 -1.7520239 --5.3464913 -2.1044302 -1.7375343 --5.3842511 -2.0812306 -1.7458141 --5.4103169 -2.0532393 -1.7502497 --5.4630957 -2.035012 -1.7635566 --5.5176477 -2.0168698 -1.7774549 --5.5514998 -1.9907165 -1.7845519 --5.6266909 -1.9788047 -1.8052514 --5.7037482 -1.9666673 -1.8265424 --5.7989659 -1.9597759 -1.8537475 --5.8915896 -1.950888 -1.8800656 --5.995224 -1.9444735 -1.909932 --6.0507441 -1.9215323 -1.924126 --6.1417828 -1.909043 -1.9498526 --6.1698313 -1.8763257 -1.9551754 --6.1931314 -1.841974 -1.9590195 --6.2281661 -1.8108749 -1.9667079 --6.2520247 -1.7762814 -1.9708478 --6.2388735 -1.7312435 -1.9631594 --6.2558331 -1.6946788 -1.9652294 --6.2661138 -1.6562618 -1.9652294 --6.2752333 -1.6175439 -1.9649338 --6.2822609 -1.578311 -1.9640466 --6.3011055 -1.5420053 -1.9670037 --6.2937217 -1.4993277 -1.961681 --6.3130398 -1.4630549 -1.9649338 --6.3312173 -1.4263914 -1.9678909 --6.3323846 -1.3858826 -1.9655252 --6.3360972 -1.3460089 -1.9640466 --6.3423653 -1.3067204 -1.9634552 --6.3540111 -1.2685281 -1.964638 --6.3607373 -1.2293354 -1.9643424 --6.3700385 -1.1906346 -1.9649338 --6.3800445 -1.1520358 -1.9658209 --6.3926396 -1.1138511 -1.9675951 --6.3965273 -1.0741309 -1.9667079 --6.4029975 -1.0348623 -1.9667079 --6.4205542 -0.99731499 -1.9702564 --6.4189944 -0.95677328 -1.9678909 --6.4313636 -0.9183147 -1.9699608 --6.4491816 -0.88051605 -1.973805 --6.4487796 -0.84018719 -1.9720308 --6.4595013 -0.80130833 -1.973805 --6.4766297 -0.76311243 -1.9776492 --6.483089 -0.72357023 -1.9782406 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --6.2061787 0.49072126 -1.9647394 --6.2087407 0.52927852 -1.9665796 --6.1731501 0.56441218 -1.9561521 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --6.1670794 0.98684627 -1.97118 --6.0735917 1.0101295 -1.9426576 --6.0841618 1.0502949 -1.9481781 --6.0738554 1.0869354 -1.9469513 --6.0680075 1.124357 -1.947258 --6.0441685 1.1583406 -1.9417375 --6.0565538 1.1992913 -1.9481781 --6.0854483 1.2438716 -1.960139 --6.0749078 1.2805983 -1.959219 --6.0557747 1.3154225 -1.9555386 --6.0578065 1.3548424 -1.9589123 --6.055872 1.3934822 -1.9610591 --6.0296097 1.4264474 -1.955232 --6.0050216 1.4595929 -1.9500182 --5.9968762 1.4966422 -1.9503249 --5.9811258 1.531756 -1.9481781 --5.9697738 1.5679429 -1.9475647 --5.9434977 1.6000862 -1.9420443 --5.9363203 1.6372845 -1.9429643 --5.9334898 1.6757492 -1.9454179 --5.9194388 1.7110668 -1.9441911 --5.8905749 1.741954 -1.9380572 --5.8934407 1.7822002 -1.9426576 --5.8905778 1.8208596 -1.9454179 --5.878387 1.8566823 -1.9451112 --5.8831878 1.8979797 -1.9506316 --5.8397923 1.9236141 -1.9398974 --5.8125434 1.9542508 -1.9346836 --5.7725353 1.9802994 -1.9251761 --5.7764459 2.0213435 -1.9306966 --5.7791729 2.0621898 -1.9359103 --5.7619386 2.0959837 -1.934377 --5.7454 2.1299746 -1.9331502 --5.7331128 2.1655242 -1.9334568 --5.7170525 2.1996353 -1.9325367 --5.7016759 2.2339783 -1.9319234 --5.6940494 2.2713909 -1.9340702 --5.6844139 2.3080773 -1.9356037 --5.65871 2.3381853 -1.9316167 --5.6591721 2.3791361 -1.9368304 --5.6470923 2.4149387 -1.9377506 --5.6286774 2.448024 -1.9365238 --5.6239953 2.4871364 -1.940204 --5.6103649 2.5223787 -1.9408175 --5.5965137 2.5575473 -1.9414308 --5.578989 2.5910366 -1.9408175 --5.5595431 2.6235943 -1.9395907 --5.5364747 2.6543646 -1.9371371 --5.5200834 2.6882856 -1.9371371 --5.4301205 2.6858015 -1.9107616 --5.4722204 2.7485578 -1.9319234 --5.4620352 2.7855437 -1.934377 --5.4499116 2.8216324 -1.9362171 --5.4375505 2.857677 -1.9380572 --5.4098372 2.8856101 -1.934377 --5.4020729 2.9241889 -1.9380572 --5.3840289 2.9572804 -1.9380572 --5.3607941 2.9874794 -1.9362171 --5.3373914 3.0175049 -1.934377 --5.3146482 3.0478294 -1.9328434 --5.2835069 3.0732014 -1.928243 --5.2596326 3.1026599 -1.9264029 --5.2470298 3.1387844 -1.9288565 --5.23174 3.1733892 -1.9303899 --5.2073064 3.2024384 -1.9285498 --5.1915965 3.2368481 -1.9300833 --5.172442 3.269151 -1.9303899 --5.1482787 3.2982588 -1.9288565 --5.1255498 3.3282306 -1.9279364 --5.1058264 3.360141 -1.928243 --5.0724449 3.3829544 -1.923336 --5.04213 3.4076173 -1.9196557 --5.0384011 3.4503257 -1.9264029 --5.0147896 3.4795475 -1.9254829 --4.9949021 3.5113473 -1.9260962 --4.9794645 3.5463479 -1.9285498 --4.9545236 3.5746062 -1.927323 --4.9378753 3.6088717 -1.9294698 --4.9064603 3.6323044 -1.9257895 --4.887126 3.6646261 -1.9270163 --4.8668218 3.6962714 -1.9279364 --4.8395243 3.7225814 -1.9260962 --4.8098354 3.7469404 -1.923336 --4.7867541 3.7763824 -1.923336 --4.764236 3.8062766 -1.9236426 --4.74893 3.8420243 -1.9270163 --4.725266 3.8710909 -1.9270163 --4.7702751 3.9571476 -1.9558454 --4.7203999 3.9649122 -1.9451112 --4.6793094 3.9796157 -1.9380572 --4.6483126 4.0026617 -1.935297 --4.6150575 4.0236001 -1.9316167 --4.5867147 4.0486917 -1.9300833 --0 0 -0 --4.5416255 4.1091442 -1.9322301 --4.5008883 4.122787 -1.9254829 --4.4741111 4.1490316 -1.9248694 --4.4575882 4.1848769 -1.9288565 --4.4235492 4.2042789 -1.9251761 --4.4196129 4.2524643 -1.9349903 --4.3736682 4.2602391 -1.9260962 --4.3488007 4.288332 -1.9267097 --4.3190384 4.3115721 -1.9251761 --4.290494 4.3359623 -1.9242561 --4.2551608 4.3533564 -1.9202691 --4.2131662 4.3636317 -1.9132152 --4.2060156 4.410068 -1.922416 --4.1736565 4.4302492 -1.9199624 --4.1509323 4.4606533 -1.9221092 --4.121552 4.4839363 -1.9211892 --4.1041961 4.5204182 -1.9260962 --4.0789237 4.5483508 -1.927323 --4.0559864 4.5789943 -1.9297765 --4.018415 4.5930481 -1.9251761 --3.9777133 4.6032119 -1.9190423 --3.9438338 4.6210151 -1.9162821 --3.9074328 4.6356649 -1.9122951 --3.8843946 4.6661377 -1.9150553 --3.858108 4.6928253 -1.9162821 --3.8286409 4.7156711 -1.9159753 --3.7978482 4.736846 -1.9150553 --3.768712 4.7600603 -1.9150553 --3.7476392 4.7935944 -1.919349 --3.7059445 4.8006749 -1.9129084 --3.6868017 4.8369513 -1.9184289 --3.6541924 4.855679 -1.9168955 --3.6192222 4.8711324 -1.9141352 --3.596019 4.9024587 -1.9178156 --3.5374079 4.8851089 -1.9021742 --3.5140069 4.9160156 -1.9058546 --3.4722564 4.9211502 -1.8994139 --3.4615724 4.9704852 -1.9104549 --3.4067538 4.9563293 -1.8966538 --3.3880301 4.9944706 -1.903401 --3.3488514 5.0025086 -1.8984939 --3.3369746 5.0515566 -1.9095348 --3.3111117 5.0799112 -1.9126017 --3.2582631 5.066505 -1.8997207 --3.2281337 5.0880094 -1.9003341 --3.2205801 5.1456456 -1.9147487 --3.1769497 5.1458702 -1.907388 --3.1562028 5.1831536 -1.9141352 --3.1204212 5.1958938 -1.9116817 --3.0870264 5.2124853 -1.9107616 --3.0631421 5.2453032 -1.9159753 --3.0123837 5.2318268 -1.9040143 --2.991498 5.2700801 -1.911375 --2.9539943 5.2791986 -1.9080014 --2.9174104 5.2897224 -1.9052411 --2.8898966 5.3167238 -1.9086148 --2.8572195 5.3343558 -1.9086148 --2.8342047 5.3703079 -1.915362 --2.7941771 5.374084 -1.9104549 --2.7650533 5.3987527 -1.9132152 --2.7220192 5.3960695 -1.9061612 --2.687165 5.4092603 -1.9049344 --2.6472349 5.4119649 -1.9000274 --2.636682 5.475276 -1.9168955 --2.6026292 5.4904914 -1.9165888 --2.5910149 5.553802 -1.9334568 --2.5485528 5.5514293 -1.9270163 --2.5160084 5.5704322 -1.928243 --2.4694197 5.5579286 -1.9184289 --2.422318 5.5433197 -1.9080014 --2.3807473 5.5405874 -1.9018675 --2.348187 5.5585985 -1.9030943 --2.3144007 5.573781 -1.903401 --2.2873456 5.6055036 -1.9095348 --2.2603424 5.6379871 -1.9159753 --2.2323291 5.6685777 -1.9218025 --2.1909854 5.6653004 -1.9159753 --2.156858 5.6804171 -1.9165888 --2.1206341 5.6899767 -1.915362 --2.0879683 5.7091393 -1.9175088 --2.0535409 5.7236352 -1.9181222 --2.0155408 5.7280464 -1.915362 --1.9791154 5.7367063 -1.9141352 --1.9447925 5.7514472 -1.9150553 --1.9103632 5.7659826 -1.9159753 --1.8749478 5.777596 -1.9159753 --1.8460873 5.8098564 -1.9230293 --1.8262236 5.871974 -1.940204 --1.7904364 5.8839798 -1.9405107 --1.7545706 5.8957672 -1.9408175 --1.707999 5.8707771 -1.9288565 --1.6880708 5.9379129 -1.9478713 --1.6414254 5.9114723 -1.9356037 --1.6133344 5.9517503 -1.9457245 --1.5558691 5.8823991 -1.919349 --1.5171329 5.8816962 -1.9159753 --1.4837977 5.9019723 -1.9196557 --1.4459723 5.9044938 -1.9175088 --1.4108186 5.9178843 -1.9190423 --1.3731914 5.920866 -1.9172021 --1.3374633 5.9319658 -1.9181222 --1.3032784 5.9502888 -1.9214958 --1.2710943 5.9786563 -1.928243 --1.2353463 5.9910045 -1.9297765 --1.197445 5.9928713 -1.9279364 --1.1622761 6.0085163 -1.9306966 --1.1259114 6.0183415 -1.9316167 --1.0882858 6.02139 -1.9303899 --1.0490317 6.0148268 -1.9260962 --1.0097418 6.0070701 -1.9214958 --0.97498977 6.0263076 -1.9257895 --0.9398936 6.0444036 -1.9297765 --0.90292847 6.0509982 -1.9300833 --0.86659032 6.062078 -1.9319234 --0.83040768 6.0748258 -1.934377 --0.79287171 6.077919 -1.9337635 --0.75521195 6.0798359 -1.9328434 --0.7191174 6.0947533 -1.9362171 --0.68149608 6.0971589 -1.9356037 --0.64606667 6.1201572 -1.9417375 --0.6065293 6.104116 -1.935297 --0.56879938 6.1048794 -1.934377 --0.53363436 6.1348052 -1.9429643 --0.49322841 6.1038098 -1.9319234 --0.45626149 6.1133657 -1.9340702 --0.41880682 6.1169996 -1.934377 --0.38097072 6.1147041 -1.9328434 --0.3437103 6.1216784 -1.934377 --0.3065207 6.1312771 -1.9368304 --0.26843747 6.1225824 -1.9334568 --0.23125741 6.1345773 -1.9368304 --0.1932539 6.1244645 -1.9331502 --0.15547925 6.1179228 -1.9306966 --0.11797378 6.1206651 -1.9313099 --0.080551431 6.1317425 -1.9346836 --0.042919762 6.1311698 -1.934377 --0.0053007351 6.1341729 -1.935297 -0.032337941 6.1340899 -1.935297 -0.069853999 6.1233072 -1.9319234 -0.10739084 6.1208596 -1.9313099 -0.14537729 6.138165 -1.9371371 -0.18303762 6.1371574 -1.9371371 -0.22051913 6.1311626 -1.9356037 -0.25841665 6.1363511 -1.9377506 -0.2959716 6.1327486 -1.9371371 -0.33219478 6.1051564 -1.9288565 -0.36878321 6.0887523 -1.9242561 -0.40308568 6.0407901 -1.9095348 -0.44368193 6.086616 -1.9251761 -0.48214838 6.0980115 -1.9297765 -0.52012312 6.1015768 -1.9319234 -0.55798614 6.1030097 -1.9334568 -0.5944038 6.0890508 -1.9300833 -0.62880039 6.0568881 -1.9208825 -0.6672042 6.0642686 -1.9245628 -0.70264012 6.0449338 -1.9196557 -0.74122423 6.0527902 -1.9236426 -0.77871448 6.0509605 -1.9245628 -0.8168475 6.0536141 -1.9270163 -0.85504234 6.0560279 -1.9294698 -0.8931585 6.0572586 -1.9316167 -0.92987394 6.048842 -1.9306966 -0.96576691 6.0355039 -1.928243 -1.0026255 6.0285254 -1.9279364 -1.039597 6.0222602 -1.9279364 -1.0748509 6.0063987 -1.9248694 -1.111338 5.9978189 -1.9242561 -1.1477604 5.9890175 -1.9236426 -1.1861522 5.9902649 -1.9264029 -1.2221223 5.9791441 -1.9251761 -1.2574112 5.9650135 -1.9230293 -1.2915616 5.9460254 -1.919349 -1.3263581 5.9305577 -1.9168955 -1.3648585 5.9315829 -1.9199624 -1.4021055 5.9268017 -1.9211892 -1.4388952 5.9199367 -1.9218025 -1.4735776 5.904532 -1.9196557 -1.5175776 5.9258056 -1.9297765 -1.5558448 5.9237466 -1.9322301 -1.5926582 5.9159265 -1.9328434 -1.6263952 5.8968678 -1.9297765 -1.6672066 5.9032645 -1.935297 -1.7041904 5.8956661 -1.9362171 -1.7438445 5.8969636 -1.940204 -1.7827517 5.8952627 -1.943271 -1.819172 5.8851223 -1.9435776 -1.8242697 5.7758327 -1.9104549 -1.8628916 5.7744942 -1.9138285 -1.8851782 5.7231803 -1.9003341 -1.9257224 5.7277436 -1.9058546 -1.9657753 5.7302237 -1.9107616 -1.9939783 5.6982908 -1.9040143 -2.0337055 5.6993942 -1.9086148 -2.0731957 5.6993303 -1.9129084 -2.1107752 5.6936412 -1.915362 -2.1473536 5.6850343 -1.9168955 -2.1794603 5.6646452 -1.9144419 -2.2166085 5.6573687 -1.9165888 -2.2519855 5.6454291 -1.9172021 -2.2869411 5.6323867 -1.9175088 -2.3196394 5.6138506 -1.9159753 -2.346292 5.5810871 -1.9095348 -2.3759997 5.5560846 -1.9058546 -2.4111857 5.5440197 -1.9067746 -2.4501646 5.5404358 -1.9107616 -2.5001225 5.5608869 -1.923336 -2.5195527 5.5134139 -1.9119884 -2.5549393 5.5013032 -1.9132152 -2.5902719 5.4889655 -1.9144419 -2.6173167 5.4592376 -1.9095348 -2.6553504 5.4524875 -1.9129084 -2.684535 5.4275608 -1.9098415 -2.71736 5.4101362 -1.9095348 -2.7474768 5.3874264 -1.907388 -2.7822328 5.3738475 -1.9086148 -2.8045228 5.3364558 -1.9012542 -2.8399026 5.3241854 -1.9030943 -2.8738775 5.3091707 -1.9040143 -2.898149 5.276422 -1.8984939 -2.922127 5.243576 -1.8929734 -2.9533088 5.2238908 -1.8923601 -2.9914641 5.2164035 -1.896347 -3.0258086 5.2020636 -1.8978806 -3.0600896 5.1874981 -1.8994139 -3.0962608 5.1759748 -1.9021742 -3.1264803 5.1544375 -1.9012542 -3.1640337 5.1448851 -1.9049344 -3.1925204 5.1205282 -1.9030943 -3.2223532 5.0984297 -1.9021742 -3.2520351 5.0761576 -1.9012542 -3.2784541 5.0489244 -1.8984939 -3.3093719 5.0287132 -1.8984939 -3.3401651 5.0083127 -1.8984939 -3.3697665 4.9861465 -1.8978806 -3.3997595 4.964591 -1.8975738 -3.4323287 4.9467645 -1.8988006 -3.4604268 4.9224968 -1.8975738 -3.4905655 4.9011712 -1.8975738 -3.5205729 4.8796611 -1.8975738 -3.5521328 4.8602724 -1.8984939 -3.5926511 4.8529186 -1.9043211 -3.6183624 4.8254533 -1.9021742 -3.6473267 4.8024025 -1.9018675 -3.6744032 4.7769156 -1.9006407 -3.7077403 4.7595348 -1.9027876 -3.7356951 4.7352009 -1.9021742 -3.7664621 4.7144203 -1.9030943 -3.8150785 4.7156363 -1.9132152 -3.8439415 4.6921387 -1.9132152 -3.859895 4.6530828 -1.9067746 -3.8859239 4.6263967 -1.9055479 -3.9167049 4.6053658 -1.9067746 -3.935571 4.5704293 -1.9021742 -3.9654174 4.548347 -1.9030943 -3.9913609 4.52179 -1.9021742 -4.0095153 4.4865704 -1.8975738 -4.0439949 4.4696465 -1.9009475 -4.0681286 4.4412403 -1.8994139 -4.0953031 4.4161949 -1.8994139 -4.1203685 4.3889022 -1.8984939 -4.1518116 4.3683658 -1.9006407 -4.1897583 4.3544664 -1.9058546 -4.2157335 4.3279948 -1.9055479 -4.244884 4.3047566 -1.9067746 -4.2779436 4.2853642 -1.9098415 -4.3007741 4.2556877 -1.908308 -4.3234015 4.225893 -1.9067746 -4.3396616 4.1900315 -1.902481 -4.3804455 4.177774 -1.9092282 -4.3859024 4.1318941 -1.9003341 -4.4035068 4.0977736 -1.8969605 -4.4299693 4.0719652 -1.8975738 -4.4534612 4.0434275 -1.8969605 -4.4781876 4.0160255 -1.8969605 -4.5013199 3.98721 -1.896347 -4.5278497 3.9613953 -1.8972671 -4.5571132 3.9378936 -1.8994139 -4.5819139 3.9104753 -1.8997207 -4.6094613 3.885354 -1.9012542 -4.6397991 3.8624773 -1.9040143 -4.6442924 3.818223 -1.8960404 -4.6883264 3.8064485 -1.9046278 -4.7019386 3.7698715 -1.9006407 -4.7190108 3.7362247 -1.8981873 -4.7560964 3.7183347 -1.9040143 -4.7765617 3.6873374 -1.9030943 -4.7990966 3.6579595 -1.9030943 -4.8153663 3.6238666 -1.9006407 -4.8252854 3.5851717 -1.8957337 -4.8640795 3.5678785 -1.902481 -4.8928194 3.5429888 -1.9052411 -4.8858128 3.4924264 -1.8938936 -4.9001493 3.4574447 -1.8911333 -4.9353328 3.4371011 -1.8966538 -4.9728036 3.4180729 -1.9030943 -4.9976215 3.3901668 -1.9046278 -5.0199113 3.3604968 -1.9052411 -5.0340824 3.3254364 -1.9027876 -5.0599742 3.2981222 -1.9049344 -5.0857205 3.2706153 -1.9070814 -5.1113195 3.2429168 -1.9092282 -5.1222453 3.2059402 -1.9058546 -5.1466804 3.1774495 -1.9076947 -5.1612015 3.1428411 -1.9058546 -5.1852851 3.1140525 -1.9076947 -5.2018375 3.080723 -1.9067746 -5.2189989 3.0477877 -1.9061612 -5.2442007 3.0195053 -1.9086148 -5.2775307 2.9957254 -1.9141352 -5.2858443 2.9577112 -1.9104549 -5.3047266 2.9256816 -1.9107616 -5.312542 2.8876247 -1.9070814 -5.3402295 2.8603642 -1.9107616 -5.3484197 2.8226583 -1.907388 -5.3690166 2.7915435 -1.9086148 -5.3979053 2.7646196 -1.9129084 -5.4037185 2.7258759 -1.9089215 -5.4169326 2.6909747 -1.9076947 -5.4076896 2.6451447 -1.8984939 -5.4444013 2.6218212 -1.9058546 -5.4483438 2.5826602 -1.9015609 -5.4787531 2.5560193 -1.9067746 -5.5081749 2.5287054 -1.9116817 -5.5123096 2.489769 -1.9076947 -5.5335717 2.4586034 -1.9098415 -5.5494256 2.4249847 -1.9101483 -5.571197 2.3938932 -1.9126017 -5.5875344 2.3604043 -1.9132152 -5.6071873 2.3282645 -1.9150553 -5.6160798 2.2916589 -1.9132152 -5.6424046 2.2621124 -1.9175088 -5.657064 2.2277973 -1.9178156 -5.6706271 2.1930444 -1.9178156 -5.6919856 2.161248 -1.9205757 -5.7051396 2.126282 -1.9205757 -5.7261243 2.0941765 -1.923336 -5.7316985 2.0564322 -1.9208825 -5.73523 2.0180669 -1.9178156 -5.7502041 1.9837689 -1.9187356 -5.7703834 1.9511914 -1.9214958 -5.7822471 1.9157484 -1.9214958 -5.7920823 1.8796458 -1.9208825 -5.802599 1.8437828 -1.9205757 -5.8219833 1.8106865 -1.923336 -5.832984 1.7749294 -1.923336 -5.8419404 1.7385628 -1.9227226 -5.8570681 1.7040132 -1.9242561 -5.8701601 1.6688231 -1.9251761 -5.8784547 1.6322641 -1.9245628 -5.8791723 1.5936754 -1.9214958 -5.8888407 1.5575715 -1.9214958 -5.8872266 1.5185583 -1.9178156 -5.9019723 1.4837977 -1.9196557 -5.8998709 1.4448413 -1.9159753 -5.9308472 1.4139063 -1.923336 -5.931993 1.3757697 -1.9208825 -5.9449658 1.3403918 -1.922416 -5.9558678 1.3044993 -1.923336 -5.9637599 1.2679302 -1.923336 -5.9658341 1.2301611 -1.9214958 -5.9816704 1.1952091 -1.9242561 -5.9954329 1.159748 -1.9264029 -6.0117922 1.1246873 -1.9294698 -6.01296 1.0867639 -1.9276297 -6.0251412 1.0508287 -1.9294698 -6.0295982 1.0135242 -1.9288565 -6.0357037 0.97650814 -1.9288565 -6.0444036 0.9398936 -1.9297765 -6.0368772 0.90082401 -1.9254829 -6.0592513 0.8661868 -1.9310033 -6.0550213 0.82770425 -1.9279364 -6.065649 0.79127347 -1.9297765 -6.0826693 0.75556338 -1.9337635 -6.0890818 0.71844929 -1.934377 -6.0962129 0.68139052 -1.935297 -6.0917602 0.64307433 -1.9325367 -6.0899081 0.6051203 -1.9306966 -6.0783429 0.56633198 -1.9257895 -6.098772 0.53050679 -1.9313099 -6.1009636 0.49299896 -1.9310033 -6.105772 0.4556962 -1.9316167 -6.1084533 0.41822332 -1.9316167 -6.1166043 0.38108873 -1.9334568 -6.1226287 0.34376347 -1.9346836 -6.1360302 0.30675742 -1.9383639 -6.1387482 0.26914316 -1.9386706 -6.1374307 0.23136443 -1.9377506 -6.129221 0.19340311 -1.9346836 -6.1312442 0.15581527 -1.9349903 -6.1197133 0.11795562 -1.9310033 -6.1250806 0.08046516 -1.9325367 -6.1368804 0.042958666 -1.9362171 -6.1284623 0.0052968725 -1.9334568 -6.125524 -0.032291174 -1.9325367 -6.1147413 -0.069754675 -1.9291631 -6.1084881 -0.10717145 -1.927323 -6.1124735 -0.14476399 -1.9288565 -6.1143241 -0.18235235 -1.9297765 -6.117846 -0.22003765 -1.9313099 -6.1230373 -0.25785351 -1.9334568 -6.1213403 -0.29541889 -1.9334568 -6.1165609 -0.33281749 -1.9325367 -6.1277046 -0.37114987 -1.9368304 -6.124362 -0.4086782 -1.9365238 -6.1255364 -0.44652641 -1.9377506 -6.1302719 -0.48470521 -1.940204 -6.120544 -0.52174354 -1.9380572 -6.119123 -0.55946237 -1.9386706 -6.1212587 -0.59755397 -1.9405107 -6.1184239 -0.63520056 -1.9408175 -6.1106267 -0.67231345 -1.9395907 -6.110168 -0.71023518 -1.9408175 -6.1056952 -0.74771309 -1.9408175 -6.0811682 -0.78260785 -1.934377 -6.0866275 -0.82130849 -1.9377506 -6.090898 -0.8599723 -1.9408175 -6.0694995 -0.89496577 -1.9356037 -6.0742416 -0.93378347 -1.9389772 -6.0571198 -0.96922994 -1.935297 -6.0595088 -1.0077845 -1.9380572 -6.0400801 -1.0426767 -1.9337635 -6.0494962 -1.0825716 -1.9389772 -6.0427394 -1.1196702 -1.9389772 -6.0310817 -1.15583 -1.9374439 -6.0313454 -1.1942948 -1.9398974 -6.0211062 -1.2307075 -1.9389772 -6.011579 -1.2672362 -1.9383639 -6.0083404 -1.3051097 -1.9398974 -5.9955754 -1.3409121 -1.9383639 -5.9918723 -1.3787431 -1.9398974 -5.9907093 -1.4172369 -1.9423509 -5.9717274 -1.4514939 -1.9389772 -5.9737902 -1.4908761 -1.9426576 -5.9553099 -1.5251395 -1.9395907 -5.9357138 -1.5589902 -1.9362171 -5.9453359 -1.6005814 -1.9426576 -5.9555879 -1.6426024 -1.9494048 -5.9389858 -1.6773024 -1.947258 -5.9240103 -1.7123892 -1.9457245 -5.8960509 -1.7435745 -1.9398974 -5.8916187 -1.7816489 -1.9420443 -5.8860316 -1.8194532 -1.9438844 -5.8520679 -1.848364 -1.9362171 -5.8297467 -1.880728 -1.9325367 -5.7882662 -1.9066309 -1.922416 -5.7710457 -1.9402901 -1.9205757 -5.6852112 -1.9503241 -1.895427 -5.6084571 -1.9625241 -1.8733451 -5.5183244 -1.9690558 -1.846663 -5.4202757 -1.9716264 -1.8172204 -5.3527474 -1.984324 -1.7982056 -5.2843795 -1.9959313 -1.7788839 -5.2080784 -2.0036976 -1.7568021 -5.1761909 -2.0279734 -1.750055 -5.125638 -2.0445242 -1.7368672 -5.080369 -2.0626812 -1.7255195 -5.0412292 -2.0829055 -1.7163187 -4.9985237 -2.1012514 -1.7058913 -4.9811611 -2.1300101 -1.7043577 -4.9357057 -2.1464822 -1.6930101 -4.8789215 -2.1574705 -1.6776755 -4.82653 -2.1697958 -1.6638744 -4.7482042 -2.1696868 -1.6408725 -4.5379972 -2.1073341 -1.5709467 -4.3623095 -2.0583355 -1.5129818 -4.3229938 -2.0723023 -1.5034744 -4.2982178 -2.0929523 -1.4991807 -4.2332573 -2.0935354 -1.4804724 -4.1744065 -2.0963929 -1.4639111 -4.0181813 -2.0488613 -1.41208 -3.9100313 -2.0240095 -1.3774239 -4.0028458 -2.1033316 -1.4157604 -3.9520769 -2.107688 -1.4019593 -3.9541354 -2.1400564 -1.4074798 -4.1119328 -2.2582467 -1.4703516 -4.0057211 -2.231987 -1.4363087 -4.0772834 -2.3047879 -1.467898 -3.9466574 -2.2629762 -1.4246545 -3.5353525 -2.0559299 -1.2765222 -3.4538157 -2.0369484 -1.25076 -3.4110334 -2.0400176 -1.2394124 -3.3821776 -2.0510333 -1.2332785 -3.3516943 -2.0607746 -1.2265313 -3.3058755 -2.0606487 -1.213957 -3.2569675 -2.0580041 -1.2001557 -3.3909252 -2.1719382 -1.2562804 -3.1540439 -2.0475223 -1.1704066 -3.1239316 -2.0553219 -1.1636595 -3.0985935 -2.065999 -1.1587523 -3.1000514 -2.0945687 -1.1642728 -3.0643697 -2.0979507 -1.1553787 -3.0209451 -2.0955467 -1.1434177 -2.9768882 -2.0921421 -1.13115 -2.9539175 -2.1031888 -1.1271631 -2.9154885 -2.1028914 -1.1170422 -2.8433678 -2.0774846 -1.0934269 -2.8037963 -2.0750656 -1.0826926 -2.8199439 -2.1139343 -1.094347 -2.7841837 -2.1139228 -1.0851462 -2.7666347 -2.1274836 -1.0833061 -2.746021 -2.1385686 -1.0802392 -2.7642276 -2.1801438 -1.0931202 -2.7448504 -2.1923099 -1.0906667 -2.7180295 -2.1983323 -1.0851462 -2.7044897 -2.2149684 -1.0851462 -2.6835234 -2.2254429 -1.0820793 -2.6625307 -2.2357435 -1.0790124 -2.6458626 -2.2495713 -1.0777856 -2.6406634 -2.2732184 -1.0814658 -2.6173403 -2.2812452 -1.0774789 -2.5911648 -2.2865517 -1.0722651 -2.5565081 -2.2840109 -1.0633711 -2.5572648 -2.3130674 -1.0698116 -2.5065334 -2.2952771 -1.0538636 -2.4951937 -2.3132031 -1.0550903 -2.4865036 -2.3336825 -1.0575439 -2.4748967 -2.3515189 -1.0587707 -2.467279 -2.373261 -1.0618376 -2.4601691 -2.3956621 -1.0652112 -2.4400024 -2.4053648 -1.0627576 -2.4204831 -2.4155831 -1.0606108 -2.4089625 -2.4337728 -1.0621443 -2.3999705 -2.4546351 -1.0649046 -2.3881688 -2.4727392 -1.066438 -2.4011929 -2.516969 -1.0796257 -2.3889666 -2.5351195 -1.0811592 -2.362994 -2.5385797 -1.0762521 -2.3435092 -2.5488257 -1.074412 -2.323348 -2.5582237 -1.0722651 -2.3037953 -2.5681789 -1.0704249 -2.2861009 -2.5801287 -1.0695049 -2.2677202 -2.5912414 -1.0682781 -2.2480447 -2.6007853 -1.066438 -2.230809 -2.6130819 -1.0658246 -2.2110536 -2.6223536 -1.0639844 -2.1949215 -2.6358709 -1.0639844 -2.1805196 -2.651495 -1.0649046 -2.1630099 -2.6633465 -1.0642911 -2.1662703 -2.7010777 -1.074412 -2.123666 -2.6814795 -1.0609175 -2.1007259 -2.6862102 -1.0575439 -2.0871115 -2.702817 -1.0590774 -2.0722184 -2.7178438 -1.0599974 -2.0595083 -2.7358317 -1.0621443 -2.0506279 -2.7591147 -1.066438 -2.0359111 -2.7747157 -1.0676647 -2.0283349 -2.8002629 -1.0728785 -2.0221815 -2.8281446 -1.0790124 -2.0091791 -2.8467216 -1.0814658 -2.0014625 -2.8730571 -1.0869863 -1.9676261 -2.8617492 -1.0777856 -1.9340044 -2.8501351 -1.0685848 -1.9021879 -2.84059 -1.0603042 -1.8752822 -2.8379111 -1.0547837 -1.8531575 -2.8421869 -1.0520234 -1.8372273 -2.8559062 -1.0529435 -1.81814 -2.8647141 -1.0520234 -1.7985089 -2.8725884 -1.0507966 -1.7848481 -2.8900497 -1.0532502 -1.7646071 -2.8968818 -1.0517168 -1.7414103 -2.8986781 -1.0483432 -1.7138942 -2.8929274 -1.0422093 -1.677398 -2.8713307 -1.0302483 -1.6654456 -2.8914683 -1.0339286 -1.6575363 -2.9190176 -1.0403692 -1.6433113 -2.9357786 -1.0428227 -1.636295 -2.9658115 -1.0501833 -1.6180663 -2.9757957 -1.0501833 -1.60382 -2.9932201 -1.0529435 -1.5872 -3.006372 -1.0541703 -1.570918 -3.020277 -1.0557038 -1.5532238 -3.0315537 -1.0563171 -1.5354503 -3.0427268 -1.0569305 -1.5175983 -3.0537958 -1.0575439 -1.4950694 -3.0553544 -1.0547837 -1.4680378 -3.047318 -1.0486498 -1.446052 -3.049387 -1.0461963 -1.4253029 -3.0538893 -1.0446628 -1.3997897 -3.0478709 -1.0394491 -1.3853699 -3.0659449 -1.0428227 -1.3951178 -3.1387596 -1.0655179 -1.3632609 -3.1184769 -1.055397 -1.3534905 -3.1486471 -1.0630643 -1.3382177 -3.166538 -1.066438 -1.3169389 -3.170294 -1.0649046 -1.2985398 -3.180959 -1.0658246 -1.2800595 -3.1915174 -1.0667447 -1.2642871 -3.209054 -1.0701183 -1.2401119 -3.2052097 -1.0661312 -1.2140055 -3.1958506 -1.0603042 -1.1950377 -3.2050233 -1.0609175 -1.1943012 -3.2641456 -1.0787057 -1.1954535 -3.3305452 -1.0989474 -1.166154 -3.3126762 -1.0903599 -1.139601 -3.3017726 -1.0842261 -1.1168826 -3.3014894 -1.0817726 -1.0936122 -3.2992446 -1.0787057 -1.0751096 -3.3113251 -1.0805458 -1.0608208 -3.33691 -1.0869863 -1.0437158 -3.3542633 -1.0906667 -1.0145305 -3.3323746 -1.0811592 -0.99026597 -3.3257644 -1.0768656 -0.96426076 -3.3125846 -1.0704249 -0.94313669 -3.3156922 -1.0695049 -0.92811829 -3.340677 -1.0759454 -0.90760285 -3.3463089 -1.0759454 -0.9145354 -3.4557989 -1.1106017 -0.89640206 -3.4733274 -1.1145886 -0.76445931 -3.0384302 -0.96829647 -0.73901463 -3.0153277 -0.95909572 -0.81114483 -3.400352 -1.0851462 -0.80831397 -3.4831531 -1.1109084 -0.77584052 -3.4388347 -1.0946536 -0.75167358 -3.4295833 -1.0900533 -0.72745174 -3.4192343 -1.0851462 -0.71125907 -3.4469392 -1.0928135 -0.68879145 -3.4447048 -1.0906667 -0.66258568 -3.4226997 -1.0820793 -0.64227128 -3.4304433 -1.0833061 -0.62408525 -3.450243 -1.0885198 -0.60290319 -3.4540074 -1.0885198 -0.57901925 -3.4416842 -1.0833061 -0.56441963 -3.4855759 -1.0964938 -0.53980833 -3.4682817 -1.0897466 -0.51655304 -3.458349 -1.0854529 -0.49855173 -3.4840674 -1.0928135 -0.47870931 -3.4983778 -1.0964938 -0.45440692 -3.4795411 -1.0894399 -0.43492272 -3.4973767 -1.094347 -0.41378909 -3.5028155 -1.0952671 -0.38817197 -3.4683969 -1.0833061 -0.36738169 -3.4754462 -1.0848395 -0.34576803 -3.4747934 -1.0839194 -0.32461685 -3.478745 -1.0845329 -0.30359477 -3.4844644 -1.0857596 -0.2816734 -3.4796205 -1.0836127 -0.26052952 -3.4841309 -1.0845329 -0.24031346 -3.5027566 -1.0900533 -0.22011459 -3.5250647 -1.0968004 -0.20060818 -3.5643618 -1.1090682 -0.17916 -3.5740814 -1.1118284 -0.15830579 -3.5998368 -1.1198025 -0.13674979 -3.6150074 -1.1244028 -0.11280538 -3.5596495 -1.106308 -0.090745643 -3.5517111 -1.1035477 -0.068678595 -3.5379264 -1.0989474 -0.047203146 -3.5563641 -1.1047745 -0.025354883 -3.5527797 -1.1035477 -0.0035633277 -3.5652418 -1.1075348 --0.018385403 -3.5785217 -1.1118284 --0.040243123 -3.5697758 -1.1090682 --0.061808579 -3.5504286 -1.1029344 --0.083433427 -3.5433216 -1.1007875 --0.10548735 -3.5532081 -1.1041611 --0.12862866 -3.5895903 -1.1161221 --0.15057111 -3.5868316 -1.1155087 --0.17317544 -3.5981991 -1.1194957 --0.19426435 -3.5790114 -1.1136686 --0.21610565 -3.5758519 -1.1130552 --0.23727998 -3.5630624 -1.1093749 --0.25636294 -3.5235684 -1.0971072 --0.28053516 -3.5541894 -1.1075348 --0.30006939 -3.5258472 -1.0989474 --0.32560566 -3.5665925 -1.1127485 --0.35054129 -3.595788 -1.1228694 --0.37446883 -3.6115568 -1.1286964 --0.39672616 -3.610137 -1.1290032 --0.42250249 -3.6388338 -1.139124 --0.4452855 -3.6399517 -1.1403508 --0.47138312 -3.666415 -1.1498582 --0.49565536 -3.6766589 -1.1541519 --0.52380174 -3.7131307 -1.1670331 --0.77707464 -5.2710214 -1.6755286 --0.80911279 -5.2642727 -1.6749153 --0.83944118 -5.2469912 -1.6709284 --0.87021333 -5.2332921 -1.6681681 --0.90328038 -5.2334814 -1.6700082 --0.93604678 -5.2315879 -1.671235 --0.97333711 -5.2538214 -1.6804358 --1.0028658 -5.2337289 -1.6758354 --1.0338501 -5.2218747 -1.6739953 --1.0691148 -5.2312856 -1.679209 --1.0990317 -5.2143826 -1.6758354 --1.1348479 -5.2252126 -1.6816626 --1.1693828 -5.2292967 -1.6853428 --1.2008063 -5.2192402 -1.6844227 --1.2352207 -5.2219625 -1.6877964 --1.2685885 -5.2198339 -1.6896366 --1.2985172 -5.2036409 -1.6868763 --1.3282949 -5.1872773 -1.6841161 --1.3586466 -5.1735063 -1.6822759 --1.3918507 -5.1705866 -1.6841161 --1.4225377 -5.1582789 -1.6828893 --1.4577856 -5.1622763 -1.687183 --1.4899623 -5.1550627 -1.6877964 --1.1804485 -3.9931021 -1.3004441 --1.1983112 -3.9639196 -1.2930835 --1.5803788 -5.1131248 -1.6831959 --1.6111488 -5.1015162 -1.6825826 --1.6430056 -5.0933461 -1.6831959 --1.6745249 -5.0840726 -1.6835027 --1.7072061 -5.0782132 -1.6850362 --1.7398784 -5.0721436 -1.6865696 --1.7665641 -5.0487957 -1.6822759 --1.79879 -5.0414467 -1.6835027 --1.8235044 -5.0133209 -1.6776755 --1.8512521 -4.9940062 -1.6749153 --1.8875803 -4.9976888 -1.6801291 --1.9103452 -4.9655828 -1.6730752 --1.938693 -4.948451 -1.671235 --1.9834855 -4.9727058 -1.6838094 --2.0075119 -4.9445691 -1.6782889 --1.2508819 -3.028698 -1.014607 --1.2690731 -3.0200882 -1.0143003 --1.2741013 -2.980742 -1.0032594 --2.1217968 -4.8789763 -1.6730752 --2.1613216 -4.8876257 -1.6807425 --2.1865854 -4.8638558 -1.6770622 --2.2219293 -4.8624663 -1.6813558 --1.5827217 -3.4089615 -1.1697932 --1.5897924 -3.3699222 -1.1593657 --1.604677 -3.3480895 -1.155072 --1.6197705 -3.3270569 -1.151085 --1.6380438 -3.3127902 -1.1495515 --1.6617588 -3.3094807 -1.1520051 --1.6893879 -3.3136351 -1.1572188 --1.7171303 -3.3175745 -1.1624327 --1.7627025 -3.354996 -1.1799141 --2.1986547 -4.122541 -1.4642178 --2.2307076 -4.1215272 -1.4688182 --2.5823233 -4.701685 -1.687183 --2.6083426 -4.6807637 -1.6853428 --2.6445117 -4.6779265 -1.6902499 --2.6779017 -4.669868 -1.6933168 --2.7108135 -4.6607528 -1.6960771 --2.7495191 -4.6612453 -1.7025176 --2.7868662 -4.658988 -1.7080381 --2.8119442 -4.6361046 -1.7058913 --2.840338 -4.6187634 -1.7058913 --2.8676171 -4.5996332 -1.7052778 --2.90189 -4.5916052 -1.7089581 --2.9402809 -4.5897403 -1.7150919 --2.9580176 -4.5556488 -1.7089581 --2.9921956 -4.5469527 -1.7126385 --3.012115 -4.5166311 -1.7080381 --3.030709 -4.4846597 -1.7028244 --3.0613968 -4.4706903 -1.7046645 --3.0589199 -4.4088173 -1.6877964 --3.0990551 -4.4086504 -1.6951571 --3.1177633 -4.3779244 -1.6905566 --3.1501374 -4.3664293 -1.6936235 --3.160017 -4.3239679 -1.6844227 --3.1740263 -4.2876697 -1.6776755 --2.2384465 -2.9859276 -1.1612059 --2.255574 -2.9706209 -1.1605924 --3.2663414 -4.2466235 -1.6850362 --3.2829757 -4.2144899 -1.6801291 --3.3046458 -4.1890364 -1.6779822 --3.3112712 -4.1448884 -1.6681681 --3.3354437 -4.123013 -1.6675547 --3.3630927 -4.1054139 -1.6687815 --3.3857884 -4.0817714 -1.6675547 --3.3936253 -4.0405159 -1.6589673 --3.4097188 -4.0094681 -1.6546736 --3.4417107 -3.9971244 -1.6583539 --3.4718022 -3.9823871 -1.6611142 --3.5018425 -3.9674308 -1.6638744 --3.520411 -3.9394829 -1.6611142 --3.5355747 -3.9079285 -1.6568204 --3.5607729 -3.8875644 -1.6574339 --3.5890908 -3.8705273 -1.6595807 --3.6179852 -3.8539827 -1.6620343 --3.6441879 -3.8344698 -1.6632611 --3.6696274 -3.8140945 -1.6641811 --3.6829975 -3.781281 -1.6595807 --3.6987767 -3.7511578 -1.6562071 --3.708945 -3.7155955 -1.6503799 --3.7404706 -3.7014694 -1.654367 --3.7767277 -3.6917522 -1.6605008 --3.7965693 -3.6658652 -1.659274 --3.8217468 -3.645128 -1.6605008 --3.8391905 -3.6170418 -1.6583539 --3.8543429 -3.5869343 -1.655287 --3.8790829 -3.5657928 -1.6565138 --3.8994796 -3.5406449 -1.6559004 --3.9190049 -3.5147455 -1.6549803 --3.9333713 -3.4843228 -1.6519134 --3.9518106 -3.4576163 -1.6506866 --3.9823158 -3.4413917 -1.6546736 --4.0011845 -3.4150386 -1.6537535 --4.0213356 -3.3898101 -1.6534469 --4.0464492 -3.3687248 -1.655287 --4.0743966 -3.3498762 -1.6583539 --4.0993085 -3.3284118 -1.660194 --4.1255956 -3.3079581 -1.6626476 --4.1376057 -3.2760842 -1.659274 --4.1591291 -3.251807 -1.6598874 --4.1887999 -3.2337849 -1.6638744 --4.225976 -3.2212894 -1.6709284 --4.2395773 -3.1907213 -1.6684748 --4.2544904 -3.1612425 -1.6666346 --4.2692018 -3.1317012 -1.6647944 --4.2806273 -3.0998659 -1.6617275 --4.3289952 -3.0945694 -1.6733818 --4.3642359 -3.0794692 -1.6798223 --4.3892984 -3.0569832 -1.6822759 --4.4118953 -3.0326884 -1.6838094 --4.4233303 -3.0007529 -1.6810491 --4.447197 -2.9772606 -1.6831959 --4.4606156 -2.9467704 -1.6813558 --4.4754229 -2.9172666 -1.6801291 --4.5140553 -2.9031329 -1.6881031 --4.5269608 -2.8723218 -1.686263 --4.5469208 -2.8460054 -1.687183 --4.574018 -2.8240507 -1.6908633 --4.595325 -2.7984064 -1.6923968 --4.6148572 -2.7716269 -1.6933168 --4.6448817 -2.7510161 -1.6982239 --4.6657844 -2.7248631 -1.6997573 --4.6576676 -2.6819398 -1.6905566 --4.6939039 -2.6645834 -1.6979172 --4.7193031 -2.6408427 -1.7012908 --4.7879314 -2.6407852 -1.7206124 --4.8149171 -2.6172643 -1.7245995 --4.8350811 -2.5899174 -1.7261329 --4.8643513 -2.5673065 -1.73104 --4.8926811 -2.5439949 -1.7356404 --4.9183655 -2.5191307 -1.7393206 --4.9464784 -2.4953327 -1.743921 --4.9685163 -2.4683211 -1.7463746 --4.9810028 -2.4365342 -1.7454545 --5.0061512 -2.4108791 -1.7491348 --5.0285912 -2.3837843 -1.7518951 --5.0551996 -2.358516 -1.7561888 --5.0834174 -2.3338046 -1.7610958 --5.0776892 -2.2935619 -1.7540419 --5.1021056 -2.2669983 -1.7577223 --5.1298752 -2.241745 -1.7626293 --5.1557779 -2.2154849 -1.766923 --5.185935 -2.1908422 -1.7727501 --5.232686 -2.1728442 -1.7844044 --5.1295843 -2.0932508 -1.743921 --5.1582351 -2.0681093 -1.7494415 --5.2027121 -2.0489693 -1.7604824 --5.2391567 -2.0262725 -1.7687631 --5.2835269 -2.0062447 -1.779804 --5.3323073 -1.9874094 -1.7923784 --5.3962517 -1.973605 -1.8101666 --5.4181151 -1.9439911 -1.8135402 --5.5251193 -1.9441798 -1.8460495 --5.6449242 -1.9474707 -1.8828527 --5.7703834 -1.9511914 -1.9214958 --5.8373647 -1.9339981 -1.940204 --5.890769 -1.9116511 -1.9543118 --5.9060168 -1.8766223 -1.9555386 --5.9346895 -1.8457158 -1.9613658 --5.9568305 -1.8125893 -1.9650462 --5.9751391 -1.7781754 -1.9674996 --5.9831953 -1.740682 -1.9665796 --5.9928474 -1.7036769 -1.966273 --6.0178628 -1.670945 -1.97118 --6.0243278 -1.6329933 -1.9699532 --6.0185905 -1.5918635 -1.9647394 --6.03654 -1.5570421 -1.9674996 --6.0367489 -1.5176544 -1.9644327 --6.0635133 -1.4848833 -1.9702599 --6.0863991 -1.4509586 -1.9748603 --6.0645881 -1.4064953 -1.9647394 --6.0861039 -1.3721856 -1.9690331 --6.08883 -1.3335954 -1.967193 --6.0968981 -1.2962099 -1.967193 --6.1196523 -1.2618483 -1.9721 --6.1104789 -1.2209213 -1.9665796 --6.1178551 -1.1834052 -1.9665796 --6.1268725 -1.1461941 -1.967193 --6.1300435 -1.1079023 -1.9659662 --6.1386013 -1.0705949 -1.9665796 --6.1647668 -1.0362186 -1.9730201 --6.1512771 -0.99518424 -1.9665796 --6.1657324 -0.9587366 -1.9693398 --6.1630263 -0.91962367 -1.9665796 --6.1619573 -0.88084912 -1.9644327 --6.1747904 -0.84405339 -1.9668863 --6.1902351 -0.80750203 -1.9702599 --0 -0 -0 --6.2252007 -0.73448408 -1.9785405 --6.2466173 -0.69817305 -1.984061 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --6.2395983 0.22443959 -1.9705666 --0 0 -0 --6.2696481 0.30260426 -1.9813008 --6.25912 0.34060138 -1.9785405 --6.2873139 0.38084733 -1.9883547 --6.257318 0.41757542 -1.9794607 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --5.8809462 0.97804648 -1.950989 --5.8542728 1.0105649 -1.9440156 --5.8460946 1.046133 -1.9433817 --5.8423634 1.0825025 -1.9443326 --5.8318853 1.1176164 -1.9430647 --5.8305001 1.154484 -1.9449666 --5.8270235 1.1909971 -1.9462345 --5.8196058 1.2267286 -1.9462345 --5.8166037 1.2634202 -1.9478194 --5.8031883 1.2978448 -1.9459175 --5.7932673 1.3330028 -1.9452835 --5.7849789 1.3685246 -1.9452835 --5.7690997 1.4022033 -1.9427477 --5.7567067 1.4366571 -1.9414798 --5.7459455 1.471482 -1.9408458 --5.7322216 1.5055065 -1.9392611 --5.7283716 1.5421294 -1.9411628 --5.7306871 1.5805262 -1.9452835 --5.7263579 1.6172056 -1.9471854 --5.7117715 1.6509949 -1.9456005 --5.7069907 1.687624 -1.9475024 --0 0 -0 --5.6541362 1.7477294 -1.9364083 --5.6505408 1.7846743 -1.9389441 --5.6277494 1.8155271 -1.9348234 --5.6074953 1.8470575 -1.9316536 --5.6041474 1.8841493 -1.9345064 --5.5906868 1.9178848 -1.9338725 --5.5779185 1.9518393 -1.9335555 --5.5569043 1.9828413 -1.9303857 --5.5785036 2.0292184 -1.9424307 --5.5650582 2.0630796 -1.9421138 --5.5496325 2.0961821 -1.9411628 --5.5348959 2.1295135 -1.9405289 --5.5181928 2.1620512 -1.9392611 --5.5048227 2.1958694 -1.9392611 --5.4921246 2.2299619 -1.9395781 --5.4783382 2.2636189 -1.9395781 --5.4634714 2.2968233 -1.9392611 --5.4475312 2.3295577 -1.9386271 --5.4357443 2.3640738 -1.9395781 --5.420269 2.3969989 -1.9392611 --5.4002686 2.4278789 -1.9373592 --5.3913083 2.4637275 -1.9395781 --5.3545842 2.4867759 -1.9316536 --5.3323627 2.5163465 -1.9291179 --5.3399143 2.5600867 -1.9376762 --5.315578 2.5886517 -1.9345064 --5.2944937 2.6186962 -1.9326046 --5.2740879 2.6490052 -1.9310197 --5.2509751 2.6778698 -1.928484 --5.2268648 2.7061148 -1.9256312 --5.2135205 2.7398999 -1.9268991 --5.1874051 2.7669287 -1.9234123 --5.1895142 2.8090887 -1.9307027 --5.1696863 2.8395085 -1.9297519 --5.1513376 2.8707139 -1.9294349 --5.1402316 2.9060016 -1.9319706 --5.1206584 2.9365432 -1.9313366 --5.0927052 2.9621861 -1.927533 --5.0638137 2.9871149 -1.9234123 --5.059227 3.0264056 -1.9288009 --5.0356965 3.0544407 -1.9268991 --5.015244 3.0842881 -1.9262651 --5.0010538 3.1180134 -1.928167 --4.9802246 3.1476271 -1.927533 --4.9600186 3.1776145 -1.9272161 --4.9404278 3.2079887 -1.9272161 --4.920651 3.2382421 -1.9272161 --4.9030561 3.2699523 -1.928167 --4.8852572 3.3015685 -1.9291179 --4.8672552 3.3330891 -1.9300689 --4.8467121 3.3628914 -1.9300689 --4.8120193 3.3827498 -1.9243633 --4.8027616 3.4204643 -1.9291179 --4.7786069 3.4476497 -1.92785 --4.751236 3.472429 -1.9253142 --4.7077332 3.485153 -1.916122 --4.7128196 3.5338862 -1.9272161 --4.6902919 3.5621634 -1.9268991 --4.6736093 3.5949228 -1.9291179 --4.653708 3.6252804 -1.9300689 --4.6135044 3.6396694 -1.9224614 --4.6044235 3.6785638 -1.928167 --4.5699673 3.6972032 -1.9230953 --4.5523319 3.7293813 -1.9253142 --4.5249829 3.7536108 -1.9234123 --4.504045 3.7831347 -1.9243633 --4.4742446 3.8051703 -1.9215105 --4.4630308 3.8430719 -1.9268991 --4.4250674 3.8579199 -1.9205596 --4.4041567 3.8875093 -1.9218274 --4.3795133 3.9138277 -1.9215105 --4.3476791 3.9336271 -1.9180238 --4.321363 3.9583082 -1.9170729 --4.2872572 3.9757211 -1.9126352 --4.2517176 3.9915667 -1.9075637 --4.2463965 4.0358729 -1.9164389 --4.2324886 4.0723734 -1.9215105 --4.2094598 4.1002517 -1.9224614 --4.1862478 4.1280012 -1.9234123 --4.1615114 4.1542797 -1.9237293 --4.1292715 4.1729951 -1.9205596 --4.0969586 4.1914711 -1.9173899 --4.0639162 4.2090259 -1.9139031 --4.0242662 4.21947 -1.9072467 --4.0197635 4.2668629 -1.9177068 --3.9941533 4.2921414 -1.9180238 --3.9715931 4.3207579 -1.9199257 --3.9386308 4.3380241 -1.9167559 --3.9119391 4.3621097 -1.9167559 --3.8888736 4.3902903 -1.9186578 --3.8587394 4.4105005 -1.9170729 --3.830364 4.4326591 -1.9164389 --3.7993991 4.4517498 -1.9145371 --3.7555068 4.4554 -1.9059788 --3.7426627 4.4958525 -1.9135861 --3.7156086 4.519465 -1.9139031 --3.6830249 4.5362883 -1.9113673 --3.658088 4.5625014 -1.9129522 --3.6253138 4.5789127 -1.9104165 --3.600071 4.6048064 -1.9120013 --3.5787041 4.635818 -1.915805 --3.5599668 4.6705117 -1.9211935 --3.526679 4.6862054 -1.9186578 --3.4961617 4.7054725 -1.9177068 --3.4672236 4.7268362 -1.9177068 --3.4270287 4.7326589 -1.9113673 --3.3935125 4.7474251 -1.9088316 --3.3517416 4.7503347 -1.9015411 --3.3268676 4.7770376 -1.9040769 --3.3050158 4.8083029 -1.9085146 --3.2690604 4.8190732 -1.9047109 --3.240485 4.8406172 -1.9053448 --3.2101996 4.8596182 -1.9050279 --3.1891263 4.8927307 -1.9104165 --3.1569929 4.9090161 -1.9091486 --3.1176653 4.9138799 -1.903443 --3.0889654 4.935329 -1.9043939 --3.0436757 4.9299798 -1.8948847 --3.0340886 4.982584 -1.9081976 --2.9990637 4.9937897 -1.9053448 --2.9625657 5.002305 -1.9015411 --2.9389915 5.0326734 -1.9062958 --2.9028499 5.0415711 -1.902809 --2.8812258 5.0757837 -1.9091486 --2.8486376 5.0908842 -1.9081976 --2.8187213 5.1107583 -1.9091486 --2.7873092 5.1279578 -1.9091486 --2.7544487 5.1424556 -1.9081976 --2.7241714 5.1617761 -1.9091486 --2.6959486 5.1851258 -1.9116843 --2.6649475 5.2032585 -1.9123182 --2.6274168 5.2085042 -1.9081976 --2.5970967 5.2279253 -1.9094656 --2.5670538 5.2480221 -1.9110503 --2.5298655 5.2534208 -1.9072467 --2.4886446 5.2499909 -1.9002733 --2.4603949 5.273757 -1.903443 --2.4279892 5.288754 -1.903443 --2.3990066 5.3113313 -1.9062958 --2.3733046 5.3415523 -1.9120013 --2.3416243 5.3586211 -1.9129522 --2.3109474 5.3781166 -1.914854 --2.2767968 5.3895741 -1.9139031 --2.2378638 5.3894281 -1.9088316 --2.2065449 5.4074488 -1.9104165 --2.1683819 5.4085617 -1.9059788 --2.1452348 5.4473557 -1.915171 --2.1138229 5.4657235 -1.9170729 --2.0711544 5.4546514 -1.9085146 --2.0373149 5.4663687 -1.9081976 --2.0073197 5.488564 -1.9116843 --1.9739251 5.5016704 -1.9120013 --1.9401304 5.5136786 -1.9120013 --1.9056438 5.5236859 -1.9113673 --1.8692843 5.5280871 -1.9088316 --1.8293623 5.5214472 -1.902492 --1.7942777 5.5289598 -1.9012241 --1.7588824 5.5353456 -1.8996394 --1.7240398 5.5433168 -1.8986884 --1.6924797 5.5619569 -1.9015411 --1.6594027 5.5758734 -1.902809 --1.6262187 5.5895929 -1.9040769 --1.5965605 5.6158867 -1.9097825 --1.568925 5.6502509 -1.9183408 --1.5381975 5.6744175 -1.9234123 --1.5069897 5.6975021 -1.928167 --1.4717652 5.7057233 -1.92785 --1.4374218 5.7174058 -1.9288009 --1.3923841 5.6855855 -1.914854 --1.362312 5.7143183 -1.9218274 --1.3297961 5.7336564 -1.9256312 --1.2885385 5.7148771 -1.9164389 --1.2530425 5.7208233 -1.915805 --1.2173246 5.7256207 -1.914854 --1.1746974 5.6967564 -1.902492 --1.1475285 5.7429185 -1.915805 --1.1111878 5.7442641 -1.9139031 --1.0771421 5.7575002 -1.916122 --1.040782 5.7584009 -1.9142201 --1.0057555 5.7665477 -1.914854 --0.97460049 5.797863 -1.9234123 --0.94264418 5.8262043 -1.9310197 --0.90702337 5.8328156 -1.9313366 --0.86813581 5.8176341 -1.9243633 --0.83604884 5.8482013 -1.9329215 --0.80130595 5.8616781 -1.9357743 --0.76606077 5.8721275 -1.9376762 --0.72966474 5.8738937 -1.9367253 --0.69327587 5.8754344 -1.9357743 --0.65742266 5.8814631 -1.9364083 --0.62092376 5.8816133 -1.9351404 --0.58247697 5.8617182 -1.9272161 --0.5476439 5.8774581 -1.9313366 --0.50869107 5.8476377 -1.9202427 --0.47188357 5.8393049 -1.9164389 --0.43703458 5.8553314 -1.9208765 --0.40025562 5.845602 -1.9167559 --0.36573821 5.8697195 -1.9240463 --0.3299816 5.8765879 -1.9256312 --0.2940596 5.8813438 -1.9265821 --0.25796682 5.8830371 -1.9265821 --0.22075458 5.8551288 -1.9167559 --0.18575348 5.8857598 -1.9265821 --0.1498048 5.8934259 -1.9288009 --0.11387911 5.9065614 -1.9329215 --0.077033624 5.8616281 -1.9177068 --0.041327558 5.8989782 -1.9300689 --0.0051153149 5.8820491 -1.9243633 -0.03071015 5.8307552 -1.9072467 -0.066722892 5.8513212 -1.9142201 -0.1026081 5.849853 -1.9139031 -0.13876882 5.8604918 -1.9177068 -0.17489474 5.8652177 -1.9196087 -0.2111519 5.8716168 -1.9221444 -0.24689665 5.8635774 -1.9199257 -0.28296155 5.8638468 -1.9205596 -0.31862733 5.856318 -1.9186578 -0.35409686 5.8466792 -1.916122 -0.38983858 5.8425035 -1.915488 -0.42650679 5.8513527 -1.9192917 -0.46202856 5.8438983 -1.9177068 -0.49852124 5.8485136 -1.9202427 -0.53396624 5.8406219 -1.9186578 -0.57154304 5.8551707 -1.9246802 -0.60755682 5.8524971 -1.9249972 -0.64469945 5.859972 -1.9288009 -0.678783 5.83989 -1.9234123 -0.71794438 5.8629165 -1.9326046 -0.74979138 5.8264174 -1.9218274 -0.78425992 5.8123078 -1.9186578 -0.82388449 5.8355603 -1.928167 -0.85206968 5.7787886 -1.9107335 -0.8859272 5.7631397 -1.9072467 -0.92247081 5.7650876 -1.9097825 -0.95751631 5.7574477 -1.9091486 -0.99363166 5.7561374 -1.9107335 -1.0301009 5.7564673 -1.9129522 -1.0648844 5.7472405 -1.9120013 -1.1006641 5.7433929 -1.9129522 -1.1355158 5.7346706 -1.9123182 -1.1704919 5.726666 -1.9120013 -1.2050214 5.7165918 -1.9110503 -1.2394712 5.7063103 -1.9100995 -1.2790138 5.7189603 -1.9170729 -1.3142931 5.7119288 -1.9173899 -1.3471334 5.6945271 -1.9142201 -1.3798096 5.6769381 -1.9110503 -1.4134687 5.663764 -1.9094656 -1.4481943 5.6549845 -1.9094656 -1.4821428 5.64324 -1.9085146 -1.5123044 5.6175542 -1.902809 -1.5495178 5.6182265 -1.9062958 -1.5790648 5.5912709 -1.9002733 -1.6064967 5.5577865 -1.8920319 -1.6424506 5.5541916 -1.8942508 -1.6723826 5.5303912 -1.8894962 -1.7085252 5.5272746 -1.8920319 -1.7449781 5.524827 -1.8948847 -1.7823384 5.524848 -1.8986884 -1.822138 5.5318246 -1.9050279 -1.8545353 5.5160451 -1.903443 -1.8905001 5.5108418 -1.9056618 -1.9355533 5.5313663 -1.9170729 -1.958303 5.488121 -1.9059788 -1.9925889 5.4777842 -1.9066128 -2.0225365 5.4556723 -1.903126 -2.0546336 5.4396105 -1.9018581 -2.0906959 5.4339828 -1.9043939 -2.1271122 5.4289999 -1.9072467 -2.1631947 5.422894 -1.9097825 -2.1925039 5.3998518 -1.9062958 -2.2266819 5.388927 -1.9072467 -2.2534583 5.3602991 -1.9018581 -2.2922719 5.3603244 -1.9069297 -2.3254972 5.3470283 -1.9072467 -2.3375516 5.2858176 -1.8901302 -2.3816061 5.2973266 -1.8996394 -2.3975108 5.2463822 -1.8863264 -2.4428382 5.2599597 -1.8967866 -2.4718292 5.2380099 -1.8942508 -2.4973631 5.2090602 -1.8891792 -2.5292783 5.1936388 -1.8891792 -2.5636206 5.1831226 -1.8910811 -2.5966523 5.1698375 -1.8920319 -2.6339257 5.1647916 -1.8961526 -2.6642587 5.1460061 -1.8952017 -2.6971073 5.1320806 -1.8961526 -2.7285464 5.1154346 -1.8961526 -2.7594314 5.0977621 -1.8958356 -2.7933979 5.0857229 -1.8977375 -2.8259356 5.0709724 -1.8986884 -2.8611977 5.0609684 -1.9015411 -2.8936126 5.0457854 -1.902492 -2.921181 5.0221963 -1.9002733 -2.9485688 4.9984593 -1.8980545 -2.9791832 4.9802732 -1.8980545 -3.0091937 4.9610887 -1.8977375 -3.0410681 4.9449549 -1.8986884 -3.0728576 4.928617 -1.8996394 -3.105068 4.9128761 -1.9009073 -3.1505013 4.9176908 -1.9104165 -3.1635733 4.872016 -1.8999563 -3.1928866 4.8517208 -1.8996394 -3.2210174 4.8296709 -1.8986884 -3.2537773 4.8145313 -1.9005903 -3.2811141 4.7913456 -1.8993224 -3.3077483 4.7672262 -1.8977375 -3.3374827 4.7476168 -1.8980545 -3.3560979 4.7123699 -1.8920319 -3.3932724 4.7032266 -1.8967866 -3.4215074 4.6815515 -1.8964696 -3.4552469 4.6673303 -1.8993224 -3.476424 4.6361761 -1.8952017 -3.5025113 4.6117368 -1.8939338 -3.5272732 4.5856481 -1.8920319 -3.5594234 4.5691566 -1.8942508 -3.5962029 4.5584002 -1.8990054 -3.6270647 4.5399537 -1.9005903 -3.6602213 4.5242496 -1.903443 -3.6867108 4.5002379 -1.902809 -3.7154653 4.478992 -1.903443 -3.7508073 4.4655519 -1.9075637 -3.7793655 4.4438982 -1.9081976 -3.7917101 4.4033751 -1.9005903 -3.8230197 4.3850312 -1.902809 -3.8354194 4.3451357 -1.8955187 -3.864536 4.3243494 -1.8967866 -3.8986323 4.3089957 -1.9005903 -3.9243579 4.2842937 -1.9002733 -3.9628241 4.2733474 -1.9062958 -3.9766371 4.2358131 -1.9002733 -3.9973261 4.205833 -1.8977375 -4.034893 4.1935296 -1.903443 -4.0605483 4.1686931 -1.903443 -4.0873823 4.14505 -1.9040769 -4.1268091 4.1339893 -1.9107335 -4.1527715 4.1092567 -1.9110503 -4.171803 4.0777316 -1.9081976 -4.1926517 4.0481043 -1.9062958 -4.2187839 4.0236115 -1.9069297 -4.2364902 3.9911458 -1.90376 -4.2588167 3.9631376 -1.902809 -4.283752 3.9375732 -1.903126 -4.3148532 3.9175904 -1.9062958 -4.3303375 3.8834419 -1.902492 -4.355504 3.8580563 -1.903126 -4.3705297 3.8237641 -1.8993224 -4.4053907 3.8067977 -1.9043939 -4.4286661 3.779695 -1.9043939 -4.4546747 3.7548954 -1.9056618 -4.4798174 3.7293119 -1.9066128 -4.501883 3.7011516 -1.9062958 -4.5230355 3.6722634 -1.9056618 -4.544003 3.6432548 -1.9050279 -4.5670156 3.6158934 -1.9053448 -4.5921049 3.5901394 -1.9066128 -4.6087923 3.557838 -1.9043939 -4.6214848 3.5225921 -1.9005903 -4.6377077 3.4901762 -1.8983715 -4.6597972 3.46222 -1.8986884 -4.6847768 3.4363678 -1.9002733 -4.7019329 3.4047763 -1.8986884 -4.7373948 3.3863418 -1.9047109 -4.7503347 3.3517416 -1.9015411 -4.7708116 3.322531 -1.9015411 -4.7887635 3.2915833 -1.9005903 -4.8182883 3.268528 -1.9043939 -4.8414054 3.2410126 -1.9056618 -4.8659487 3.2143822 -1.9075637 -4.8879638 3.1860187 -1.9085146 -4.9034324 3.1534014 -1.9069297 -4.9210873 3.1222389 -1.9062958 -4.942564 3.0934944 -1.9072467 -4.9606452 3.0626109 -1.9069297 -4.982584 3.0340886 -1.9081976 -4.9913507 2.9975986 -1.9043939 -5.0104656 2.9673994 -1.9047109 -5.0293975 2.9370782 -1.9050279 -5.051434 2.9085295 -1.9066128 -5.0609374 2.8727973 -1.903443 -5.0768142 2.8407636 -1.902809 -5.0958099 2.8104756 -1.903443 -5.1204581 2.7832322 -1.9062958 -5.1315875 2.7486262 -1.9040769 -5.1592598 2.7228432 -1.9081976 -5.1834431 2.6950736 -1.9110503 -5.2049465 2.6658123 -1.9129522 -5.2237463 2.6351068 -1.9139031 -5.2381177 2.6021609 -1.9132692 -5.2522817 2.5691378 -1.9126352 -5.2611108 2.5335696 -1.9100995 -5.2705588 2.4983959 -1.9078807 -5.2866488 2.4664104 -1.9081976 -5.3008208 2.4335301 -1.9078807 -5.3199749 2.4029114 -1.9094656 -5.3380852 2.3717639 -1.9107335 -5.3507996 2.3382058 -1.9100995 -5.362432 2.3042064 -1.9091486 -5.3799639 2.2727363 -1.9104165 -5.3929319 2.2393188 -1.9100995 -5.4144735 2.2094119 -1.9129522 -5.4367313 2.1796777 -1.916122 -5.4464736 2.1448872 -1.914854 -5.464839 2.1134808 -1.9167559 -5.4883442 2.0839503 -1.9205596 -5.4903631 2.0462596 -1.9167559 -5.5063782 2.0138364 -1.9180238 -5.5230947 1.9816136 -1.9196087 -5.5324659 1.9467427 -1.9186578 -5.5460997 1.9133782 -1.9192917 -5.5469546 1.8756655 -1.915488 -5.5610595 1.8424897 -1.9164389 -5.5695539 1.8074546 -1.915488 -5.5841551 1.7743956 -1.9167559 -5.6021824 1.7423522 -1.9192917 -5.6127677 1.7079451 -1.9192917 -5.627687 1.6748266 -1.9208765 -5.6424108 1.6415893 -1.9224614 -5.6551142 1.6077155 -1.9234123 -5.6648722 1.5729861 -1.9234123 -5.6707559 1.5372047 -1.9221444 -5.6791644 1.502138 -1.9218274 -5.6901112 1.467737 -1.9224614 -5.6898117 1.4304824 -1.9192917 -5.6920338 1.3939637 -1.9170729 -5.7032475 1.3596718 -1.9180238 -5.7087111 1.3240088 -1.9170729 -5.7213535 1.2899992 -1.9186578 -5.7291613 1.2548693 -1.9186578 -5.7506685 1.2226518 -1.9234123 -5.7664223 1.1890678 -1.9262651 -5.7736096 1.1536633 -1.9262651 -5.7833729 1.1187559 -1.9272161 -5.7854676 1.0823764 -1.9256312 -5.792933 1.0470258 -1.9259481 -5.7927084 1.0103202 -1.9237293 -5.8006692 0.97507238 -1.9243633 -5.8149691 0.94082564 -1.9272161 -5.8196955 0.90498221 -1.9268991 -5.8373332 0.87107676 -1.9310197 -5.8106461 0.83067745 -1.9202427 -5.8475828 0.7993781 -1.9310197 -5.8504968 0.76323742 -1.9303857 -5.8080101 0.72147602 -1.9145371 -5.8500037 0.69027334 -1.9272161 -5.8513012 0.6540491 -1.9262651 -5.8618064 0.61883134 -1.928484 -5.8683248 0.58313388 -1.9294349 -5.8746252 0.54737973 -1.9303857 -5.874094 0.51099437 -1.9291179 -5.8856268 0.4756301 -1.9319706 -5.8884344 0.43950763 -1.9319706 -5.8938589 0.40356317 -1.9329215 -5.8820252 0.36650583 -1.928167 -5.8983674 0.33120605 -1.9329215 -5.8974471 0.29486585 -1.9319706 -5.8953552 0.25850779 -1.9307027 -5.8892484 0.22204332 -1.928167 -5.8886037 0.18584344 -1.927533 -5.8943739 0.14982897 -1.9291179 -5.8913894 0.11358555 -1.92785 -5.8986139 0.077522233 -1.9300689 -5.9027719 0.041354395 -1.9313366 -5.9057598 0.0051375586 -1.9322876 -5.9066286 -0.031104529 -1.9326046 -5.9034815 -0.067314088 -1.9316536 -5.9029574 -0.10353591 -1.9316536 -5.89747 -0.1396419 -1.9300689 -5.8993464 -0.17591007 -1.9310197 -5.8848863 -0.21162818 -1.9265821 -5.8796868 -0.24757385 -1.9253142 -5.8856359 -0.28401145 -1.92785 -5.8837824 -0.32011968 -1.92785 -5.8854942 -0.35644495 -1.9291179 -5.887928 -0.39286634 -1.9307027 -5.8891902 -0.42926213 -1.9319706 -5.8892817 -0.46561351 -1.9329215 -5.8938742 -0.5023846 -1.9354573 -5.8954029 -0.53897071 -1.9370422 -5.8882093 -0.57476574 -1.9357743 -5.8845716 -0.61088431 -1.9357743 -5.8797698 -0.64687622 -1.9354573 -5.8643847 -0.68162835 -1.9316536 -5.8610334 -0.71771395 -1.9319706 -5.8452311 -0.75221115 -1.928167 -5.8433251 -0.78844297 -1.9291179 -5.8411951 -0.82467967 -1.9300689 -5.8519759 -0.86285585 -1.9354573 -5.83251 -0.89658606 -1.9307027 -5.8334546 -0.93340534 -1.9329215 -5.8360376 -0.97058094 -1.9357743 -5.8168879 -1.0041142 -1.9313366 -5.8236876 -1.042125 -1.9357743 -5.803195 -1.075248 -1.9310197 -5.8011456 -1.1117277 -1.9326046 -5.8007278 -1.148591 -1.9348234 -5.7972879 -1.1849215 -1.9360913 -5.7676349 -1.2157772 -1.928484 -5.781384 -1.2557726 -1.9357743 -5.7994862 -1.2970171 -1.9446496 -5.7692356 -1.327475 -1.9370422 -5.7388301 -1.3576107 -1.9294349 -5.7313137 -1.3930218 -1.9297519 -5.720818 -1.4277031 -1.9291179 -5.7321634 -1.4679536 -1.9360913 -5.733139 -1.5057473 -1.9395781 -5.7173815 -1.5391715 -1.9373592 -5.697772 -1.5714506 -1.9338725 -5.704452 -1.6110206 -1.9395781 -5.6935482 -1.6457288 -1.9392611 -5.6733384 -1.677675 -1.9357743 -5.6711082 -1.7149246 -1.9386271 -5.6523237 -1.7471693 -1.9357743 -5.6315484 -1.778677 -1.9322876 -5.619626 -1.8129069 -1.9319706 -5.593082 -1.8423109 -1.9265821 -5.5942583 -1.8808253 -1.9310197 -5.5431385 -1.9015771 -1.9170729 -5.5259953 -1.9336742 -1.915171 -5.4613218 -1.9487425 -1.8964696 -5.3913264 -1.9611458 -1.8758663 -5.2973742 -1.9638646 -1.8467047 -5.2027082 -1.9651703 -1.8172262 -5.1533737 -1.9827553 -1.8039134 -5.0872416 -1.9932367 -1.784578 -5.0167727 -2.0012252 -1.7636577 -4.9701262 -2.0180569 -1.7512957 -4.9208336 -2.0333056 -1.7379827 -4.8829093 -2.0528035 -1.7287905 -4.8396993 -2.0696757 -1.7176964 -4.7921181 -2.0842047 -1.7050176 -4.7896485 -2.1181717 -1.7088212 -4.767911 -2.1436319 -1.7056515 -4.7262006 -2.1598401 -1.6951914 -4.705977 -2.1856034 -1.6926556 -4.559526 -2.1517086 -1.6435246 -4.3709102 -2.0956032 -1.5785451 -4.4099855 -2.1477103 -1.5978805 -4.2564483 -2.1053593 -1.5455798 -4.2646389 -2.1420774 -1.5535041 -4.1238298 -2.1031499 -1.5056411 -4.0493612 -2.0965858 -1.4825021 -4.0960312 -2.152715 -1.5050071 -4.1229148 -2.19923 -1.5202219 -4.1493802 -2.2461548 -1.5354366 -4.2352786 -2.3263576 -1.5734735 -4.0461097 -2.2548964 -1.506592 -4.0751319 -2.3039494 -1.5230746 -4.0633869 -2.3303258 -1.5240256 -3.7251635 -2.1668768 -1.398821 -3.5467782 -2.0923643 -1.3347924 -3.4801517 -2.0819569 -1.3138721 -3.4283857 -2.0796642 -1.2986574 -3.3614299 -2.0673771 -1.2774202 -3.3124628 -2.0653856 -1.2631563 -3.2644501 -2.0633786 -1.2492095 -3.1606829 -2.0250514 -1.2130744 -3.1195605 -2.0258143 -1.2016635 -3.0880563 -2.0324054 -1.194056 -3.0786839 -2.0534198 -1.1953239 -3.0463803 -2.0589964 -1.1873996 -3.9782534 -2.7243912 -1.5699868 -2.9803619 -2.0681131 -1.170917 -2.9288192 -2.0590918 -1.1550683 -2.8775008 -2.0495169 -1.1392196 -2.8441031 -2.0521529 -1.1306614 -2.8153768 -2.0578141 -1.124005 -2.7744913 -2.0541725 -1.1122769 -2.7413461 -2.0557964 -1.1037186 -2.7082863 -2.0570917 -1.0951604 -2.6865916 -2.0667324 -1.0913566 -2.674608 -2.0837607 -1.0916736 -2.6558149 -2.0954337 -1.0891378 -2.6636565 -2.1282644 -1.098013 -2.66677 -2.1576908 -1.1049864 -2.6556816 -2.1758161 -1.1059374 -2.645931 -2.1950974 -1.1075222 -2.6287811 -2.2082415 -1.1059374 -2.6130145 -2.2224867 -1.1049864 -2.5835159 -2.224864 -1.098013 -2.5262048 -2.2026582 -1.0786777 -2.4920204 -2.1999171 -1.0694854 -2.4685738 -2.2063191 -1.0650479 -2.4275591 -2.19661 -1.0526859 -2.4112377 -2.2089014 -1.0514179 -2.3969433 -2.2230101 -1.051101 -2.391556 -2.245465 -1.0549047 -2.3859835 -2.2679372 -1.0587083 -2.3733897 -2.2838497 -1.0593423 -2.3538959 -2.2930756 -1.0568064 -2.3559904 -2.323457 -1.0644139 -2.3557863 -2.3519397 -1.0710703 -2.332638 -2.3575866 -1.0669496 -2.316802 -2.3704987 -1.0663157 -2.3008957 -2.3833051 -1.0656818 -2.2855742 -2.396692 -1.0653648 -2.2805812 -2.4210253 -1.0701194 -2.2792525 -2.4495528 -1.0767758 -2.255193 -2.4537168 -1.0723382 -2.2413702 -2.4689124 -1.0729722 -2.2173133 -2.472734 -1.0685345 -2.1775711 -2.458606 -1.0561726 -2.1649425 -2.474776 -1.0574404 -2.150337 -2.4887309 -1.0577574 -2.1301 -2.4961073 -1.0552217 -2.1233025 -2.5192823 -1.0596592 -2.1078043 -2.5322633 -1.0596592 -2.1012626 -2.5561376 -1.0644139 -2.0771687 -2.5586748 -1.0599762 -2.06499 -2.5758114 -1.0618781 -2.0473797 -2.5862029 -1.0609272 -2.0384831 -2.6076825 -1.0647309 -2.0154891 -2.6111326 -1.0609272 -2.0120792 -2.640044 -1.0679005 -2.0072496 -2.6674955 -1.0742401 -2.0032897 -2.6965094 -1.0812135 -0 -0 -0 -1.9628165 -2.7109039 -1.0770928 -1.9395267 -2.7136378 -1.0732892 -1.9080749 -2.7045648 -1.0647309 -1.8800603 -2.6998785 -1.0580744 -1.8747419 -2.7277763 -1.0647309 -1.8483846 -2.725101 -1.0590253 -1.8252969 -2.726934 -1.0552217 -1.7991197 -2.7238386 -1.0495161 -1.7870343 -2.7419772 -1.0523689 -1.7747937 -2.7600696 -1.0552217 -1.7563004 -2.7685051 -1.0542707 -1.7468287 -2.7912881 -1.0590253 -1.7236892 -2.7922702 -1.0552217 -1.7124437 -2.8125143 -1.0590253 -1.7010145 -2.8327253 -1.062829 -1.6749008 -2.8284206 -1.0571234 -1.6575143 -2.8386445 -1.0571234 -1.6500051 -2.8660212 -1.06378 -1.6328567 -2.8769162 -1.0640969 -1.6147103 -2.8860533 -1.06378 -1.6001781 -2.90172 -1.0659988 -1.5895913 -2.9248161 -1.0710703 -1.5751981 -2.9412026 -1.0736061 -1.5602206 -2.9566839 -1.0758249 -1.5468627 -2.9754577 -1.0793116 -1.5307386 -2.9891136 -1.0808965 -1.5110873 -2.9959095 -1.0799456 -1.4888781 -2.9974806 -1.0770928 -1.4654564 -2.9963365 -1.0732892 -1.4458089 -3.0027084 -1.0723382 -1.4176059 -2.9909554 -1.0647309 -1.3827841 -2.964359 -1.0517349 -1.3859404 -3.0193312 -1.0688515 -1.3755879 -3.0459294 -1.075508 -1.3599539 -3.0612462 -1.0780437 -1.3403852 -3.0677948 -1.0774097 -1.3211617 -3.0750902 -1.0770928 -1.2989463 -3.0752759 -1.0742401 -1.2735044 -3.0674222 -1.0685345 -1.2550174 -3.0760565 -1.0688515 -1.2474154 -3.1118689 -1.0789946 -1.2178702 -3.0929909 -1.0694854 -1.200922 -3.1057127 -1.0713873 -1.1835268 -3.1174562 -1.0729722 -1.1686828 -3.1362123 -1.0770928 -1.14844 -3.1406522 -1.0761418 -1.1253034 -3.1369274 -1.0723382 -1.1123319 -3.1616659 -1.0786777 -1.0891987 -3.1576729 -1.074874 -1.0773998 -3.1867576 -1.0827984 -1.0625997 -3.2077129 -1.0878699 -1.0431902 -3.2150748 -1.0881869 -1.0277525 -3.2349732 -1.0929415 -1.0233788 -3.2910278 -1.110375 -0.98935789 -3.2518785 -1.0945264 -0.96830374 -3.2542517 -1.0932585 -0.94354755 -3.2437401 -1.0875529 -0.93218744 -3.2795732 -1.098013 -0.91204679 -3.2852314 -1.098013 -0.89038259 -3.2852736 -1.0961112 -0.85419726 -3.2301605 -1.075191 -0.82251364 -3.1894228 -1.0593423 -0.77586454 -3.0867939 -1.0222564 -0.74765742 -3.0537271 -1.0092604 -0.74364662 -3.120069 -1.0304977 -0.72727472 -3.136584 -1.0346184 -0.71657079 -3.1789203 -1.0476142 -0.71126115 -3.2481093 -1.0698024 -0.69289619 -3.2598338 -1.0723382 -0.67633009 -3.2807438 -1.0780437 -0.6556294 -3.2820418 -1.0770928 -0.63674015 -3.292521 -1.0793116 -0.61408299 -3.2833145 -1.074874 -0.59780669 -3.3084865 -1.0821644 -0.57667983 -3.3074207 -1.0805795 -0.55448759 -3.2996733 -1.0767758 -0.53513998 -3.3086309 -1.0786777 -0.52022302 -3.3465271 -1.0904057 -0.50079972 -3.3571606 -1.0929415 -0.47898254 -3.3517203 -1.0900887 -0.45622286 -3.3386216 -1.0847002 -0.43671092 -3.3488817 -1.0872359 -0.41755813 -3.3627925 -1.0910397 -0.39713895 -3.3671751 -1.0916736 -0.37868476 -3.3893423 -1.09833 -0.36186653 -3.4293294 -1.111009 -0.34288239 -3.4522483 -1.1179824 -0.32098889 -3.4467325 -1.1154466 -0.3002454 -3.4533615 -1.1170315 -0.27759758 -3.4371772 -1.111009 -0.255725 -3.428412 -1.1075222 -0.23487839 -3.4327552 -1.1084732 -0.21363385 -3.4312921 -1.1075222 -0.19278876 -3.436326 -1.1087902 -0.17151053 -3.4336553 -1.1075222 -0.15043879 -3.434643 -1.1075222 -0.12875281 -3.4193895 -1.1021338 -0.10689992 -3.3926244 -1.0929415 -0.085767001 -3.3808906 -1.0888208 -0.064653687 -3.3623881 -1.0824814 -0.04392102 -3.3551347 -1.0799456 -0.023367019 -3.3600831 -1.0815305 -0.0027592839 -3.3705962 -1.0850172 --0.017991373 -3.3838274 -1.0894548 --0.038936544 -3.3997757 -1.0948434 --0.060028393 -3.4127488 -1.099281 --0.08121375 -3.4227462 -1.1027677 --0.10362398 -3.4695842 -1.1186163 --0.1237203 -3.4357092 -1.1075222 --0.14603397 -3.4642608 -1.1173484 --0.16765271 -3.4708784 -1.1198843 --0.19064467 -3.5010364 -1.1303444 --0.20874408 -3.4439454 -1.111643 --0.22961949 -3.4388144 -1.110375 --0.24933764 -3.418422 -1.1040356 --0.27015862 -3.4149368 -1.1034017 --0.29110721 -3.4132149 -1.1034017 --0.31601387 -3.4548116 -1.1179824 --0.33720624 -3.4528074 -1.1179824 --0.36073473 -3.4733143 -1.1255897 --0.38774079 -3.522887 -1.1430234 --0.40967783 -3.5232677 -1.1439742 --0.43232542 -3.5291605 -1.146827 --0.45215696 -3.512331 -1.1420724 --0.47686869 -3.5329885 -1.1499968 --0.72594917 -5.1415429 -1.6939235 --0.75568569 -5.124794 -1.6898028 --0.78942126 -5.1350598 -1.6948744 --0.8176192 -5.1095157 -1.6879009 --0.84786648 -5.0978532 -1.6856822 --0.87767893 -5.0841436 -1.6828294 --0.90935916 -5.0814633 -1.6837803 --0.94034857 -5.0748553 -1.6834633 --0.97057736 -5.0643325 -1.6818784 --1.0018173 -5.0592122 -1.6821954 --1.0336007 -5.0566869 -1.6834633 --1.0648041 -5.0511775 -1.6837803 --1.0953749 -5.0426955 -1.6831464 --1.1300206 -5.0525398 -1.6888518 --1.1544102 -5.0168576 -1.6790257 --1.1838616 -5.0041423 -1.6771239 --1.2136484 -4.9930973 -1.675856 --1.2465585 -4.9947591 -1.6790257 --1.2715368 -4.9649649 -1.6714183 --1.3084806 -4.9818377 -1.6799766 --1.3360661 -4.9627252 -1.676173 --1.3662397 -4.9535193 -1.675856 --1.3899077 -4.9213114 -1.6676147 --1.1633577 -4.0243168 -1.3585653 --1.1880286 -4.0171027 -1.3585653 --1.4497919 -4.7941222 -1.6324306 --1.4920622 -4.8268194 -1.6470114 --1.5342166 -4.8573675 -1.6609582 --1.5674856 -4.8586941 -1.6647619 --1.5856986 -4.8138518 -1.6523999 --1.6197388 -4.8175168 -1.6571546 --1.6504987 -4.8110762 -1.6584224 --1.6809275 -4.803544 -1.6593733 --1.7119633 -4.797606 -1.6609582 --1.7416928 -4.7879028 -1.6612751 --1.7726861 -4.7815723 -1.66286 --1.8060127 -4.7812524 -1.6666638 --1.837359 -4.7753921 -1.6685655 --1.8707768 -4.7746258 -1.6723692 --1.8951193 -4.7507234 -1.6679317 --1.2121755 -2.9849517 -1.0352523 --1.2308301 -2.9783344 -1.0355693 --1.2505516 -2.9742234 -1.0368372 --2.02195 -4.7280741 -1.6771239 --2.0520575 -4.7181878 -1.6780747 --2.103981 -4.7575536 -1.6970932 --2.1339109 -4.7462845 -1.6977271 --2.1598401 -4.7262006 -1.6951914 --1.5752703 -3.3915586 -1.2083199 --1.5915991 -3.3723938 -1.2048331 --1.6065223 -3.3505907 -1.2003956 --1.6266357 -3.3398175 -1.2000786 --1.6458366 -3.3272233 -1.1991277 --1.6645185 -3.3136718 -1.1978598 --1.683527 -3.3008614 -1.1969088 --1.7168291 -3.3157375 -1.206418 --1.749053 -3.3278098 -1.2149763 --1.7779189 -3.3329155 -1.2209989 --2.2443492 -4.1460438 -1.5341687 --2.5098865 -4.5694709 -1.7008969 --2.525413 -4.5316148 -1.6923386 --2.5396364 -4.4920897 -1.6831464 --2.5728128 -4.4862957 -1.6869501 --2.6107814 -4.4884615 -1.6939235 --2.6320093 -4.4617376 -1.6898028 --2.6588495 -4.4446902 -1.6894858 --2.6895142 -4.4339685 -1.6917046 --2.7295864 -4.4383883 -1.6999459 --2.7467337 -4.4054594 -1.6936065 --2.7691536 -4.3813071 -1.6907537 --2.7929151 -4.3594413 -1.6888518 --2.8046343 -4.3191533 -1.6796596 --2.8284767 -4.2979016 -1.6780747 --2.8584781 -4.2859893 -1.6802936 --2.8985291 -4.2888012 -1.6885349 --2.9194317 -4.2631097 -1.6853652 --2.9217477 -4.2108283 -1.6714183 --2.9606192 -4.2114439 -1.6790257 --2.9748514 -4.1769743 -1.6723692 --2.9937663 -4.1494122 -1.6685655 --3.0197299 -4.1317306 -1.6688825 --3.0427678 -4.1100745 -1.6676147 --3.0576887 -4.0776682 -1.6619091 --2.2561238 -2.9703884 -1.2051501 --2.2748854 -2.9572411 -1.2054671 --2.298816 -2.9507093 -1.2086369 --3.14979 -3.9924648 -1.6581055 --3.1724522 -3.9708397 -1.6571546 --3.2086868 -3.966047 -1.663494 --3.2329617 -3.9462841 -1.663494 --3.261353 -3.9314828 -1.6657128 --3.2835848 -3.9092188 -1.6647619 --3.2903066 -3.8687668 -1.6558867 --3.3152206 -3.8499424 -1.6565206 --3.336288 -3.8266683 -1.6552527 --3.372257 -3.8203471 -1.6615921 --3.381732 -3.7840245 -1.6546187 --3.4067955 -3.7653131 -1.6555697 --3.4215076 -3.7352462 -1.651449 --3.4462967 -3.7162683 -1.6523999 --3.4709818 -3.6971269 -1.6533508 --3.4981749 -3.6805723 -1.6555697 --3.5318708 -3.6706579 -1.6609582 --3.5324903 -3.6264961 -1.650498 --3.5553412 -3.6054282 -1.650815 --3.5539463 -3.5600505 -1.6397209 --3.5844872 -3.54685 -1.6438416 --3.6082172 -3.5267782 -1.6447926 --3.6366119 -3.5111604 -1.6479623 --3.6601462 -3.4907444 -1.6489131 --3.6828768 -3.4695213 -1.6495471 --3.6992362 -3.4423351 -1.6473284 --3.7195902 -3.4189303 -1.6470114 --3.7426047 -3.3979557 -1.6479623 --3.7633836 -3.3749275 -1.6479623 --3.7847309 -3.3524013 -1.6482793 --3.792382 -3.3178735 -1.6425737 --3.8169742 -3.2982624 -1.6444756 --3.87393 -3.3061831 -1.6606412 --3.8752899 -3.2664568 -1.6523999 --3.8777666 -3.2280524 -1.6447926 --3.9150825 -3.2186551 -1.6523999 --3.9251866 -3.1867998 -1.6482793 --3.9520657 -3.1685886 -1.651449 --3.973664 -3.1460459 -1.6523999 --3.9928932 -3.1216047 -1.6523999 --4.0172267 -3.1011033 -1.6546187 --4.0437217 -3.0821457 -1.6577885 --4.0663462 -3.0601275 -1.6593733 --4.0896139 -3.0385134 -1.6612751 --4.1051221 -3.0111189 -1.6600072 --4.1373472 -2.9958873 -1.6657128 --4.1564231 -2.9709961 -1.6660298 --4.1830988 -2.9514523 -1.6695164 --4.2081342 -2.9306083 -1.6723692 --4.2260365 -2.9047325 -1.6723692 --4.2563376 -2.8872671 -1.6774409 --4.2913117 -2.872705 -1.6844143 --4.3049011 -2.8437059 -1.6828294 --4.3246522 -2.8187916 -1.6837803 --4.3370805 -2.7891247 -1.6818784 --4.369328 -2.7721155 -1.6879009 --4.398314 -2.7528021 -1.6926556 --4.4264197 -2.732739 -1.6970932 --4.4479642 -2.7084875 -1.698995 --4.4783211 -2.6894464 -1.7043836 --4.4931068 -2.6609504 -1.7037497 --4.5199962 -2.6395497 -1.7078702 --4.546792 -2.6179187 -1.711991 --4.5602951 -2.5885663 -1.71104 --4.5909901 -2.5688734 -1.7167455 --4.6124792 -2.5438619 -1.7189643 --4.6413331 -2.5227604 -1.724036 --4.6692657 -2.5009522 -1.7287905 --4.6971049 -2.4788961 -1.7335452 --4.729897 -2.4592178 -1.7402016 --4.7474298 -2.4314466 -1.7411525 --4.7791948 -2.4108155 -1.747492 --4.8100352 -2.3894639 -1.7535145 --4.8152351 -2.3553202 -1.7500278 --4.8424134 -2.3319037 -1.7547824 --4.8677716 -2.3074293 -1.758903 --4.8921518 -2.2823303 -1.7627068 --4.9207163 -2.2589977 -1.7680953 --4.9223843 -2.2232957 -1.7636577 --4.9515343 -2.1999836 -1.7693632 --4.9293084 -2.1539869 -1.7563672 --4.9415607 -2.1233263 -1.7560502 --4.9256659 -2.0807838 -1.7455902 --4.9567347 -2.0581605 -1.7522466 --4.9964914 -2.0388179 -1.7620728 --5.0326753 -2.0176525 -1.7706311 --5.090848 -2.0048091 -1.7871137 --5.1499352 -1.9916694 -1.8039134 --5.198411 -1.9738386 -1.8169092 --5.3010712 -1.9756957 -1.8492405 --5.3879137 -1.9705013 -1.8758663 --5.4579282 -1.9582276 -1.8964696 --5.5288873 -1.9454832 -1.9173899 --5.5882378 -1.9279189 -1.9341894 --5.6493764 -1.9103067 -1.951623 --5.6870999 -1.884259 -1.9608152 --5.7075753 -1.8522563 -1.963985 --5.733295 -1.8217969 -1.9690566 --5.7416487 -1.7857386 -1.9681057 --5.7661076 -1.7546173 -1.9728602 --5.7685843 -1.7167689 -1.9700074 --5.7753668 -1.680281 -1.9687396 --5.7873926 -1.6453313 -1.9693735 --5.797379 -1.6097896 -1.9693735 --5.7961631 -1.5712087 -1.9655699 --5.8038607 -1.5351294 -1.9649359 --5.8122525 -1.4992517 -1.9646189 --5.8231821 -1.4640229 -1.9652529 --5.8320556 -1.4282649 -1.9652529 --5.8305612 -1.3900331 -1.9617661 --5.8435998 -1.355303 -1.963351 --5.8712349 -1.3238039 -1.9700074 --5.8699827 -1.2857239 -1.9668378 --5.8851829 -1.2512605 -1.9693735 --5.8918204 -1.2149346 -1.9690566 --5.8880038 -1.1765294 -1.9652529 --5.8904562 -1.1394781 -1.963668 --5.9066596 -1.1050583 -1.9668378 --5.9114623 -1.0684574 -1.9662038 --5.9263158 -1.0336324 -1.9690566 --5.9428349 -0.99897993 -1.9725432 --5.9441714 -0.96173888 -1.9709584 --5.9658923 -0.92772657 -1.976347 --5.9771008 -0.89194334 -1.9782488 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --5.6692877 1.0514209 -1.9550045 --5.6553059 1.0847617 -1.9523866 --5.6457624 1.1188899 -1.951405 --5.6369395 1.1531315 -1.9507506 --5.6269841 1.1871116 -1.9497689 --5.6149774 1.2206112 -1.9481329 --5.6000056 1.2533885 -1.945515 --5.5949721 1.2883626 -1.9464967 --5.5933976 1.3241936 -1.9487872 --5.5870037 1.3589361 -1.9494417 --5.5739765 1.392046 -1.9478056 --5.5616689 1.425282 -1.9464967 --5.5336275 1.4543331 -1.9396251 --5.5136514 1.4853076 -1.9356985 --5.52174 1.5238907 -1.9419156 --5.5013742 1.5546569 -1.9379891 --5.5071621 1.5928499 -1.9435518 --5.4827881 1.6223184 -1.9383162 --5.4899139 1.6611328 -1.9445335 --5.482326 1.6956252 -1.945515 --5.4556012 1.7241035 -1.9396251 --5.4458189 1.7578365 -1.9399524 --5.4259567 1.7882587 -1.9366802 --5.4193597 1.8230253 -1.9383162 --5.4375639 1.8663731 -1.9491144 --5.4215508 1.89814 -1.9474784 --5.3911147 1.9246944 -1.9406068 --5.3667731 1.9532106 -1.9360257 --5.3422847 1.9815006 -1.9314448 --5.334445 2.015914 -1.9330808 --5.3281479 2.0509851 -1.9353713 --5.3110647 2.0819142 -1.9337353 --5.2955575 2.1134117 -1.9327536 --5.2693591 2.1405277 -1.9278454 --5.2526331 2.1713748 -1.9265364 --5.2557592 2.2105277 -1.9327536 --5.2551274 2.2483127 -1.9376619 --5.2507634 2.2846644 -1.9412613 --5.2426949 2.3195169 -1.9435518 --5.2145762 2.345437 -1.9383162 --5.2009463 2.3777821 -1.9386435 --5.1734052 2.4036746 -1.9337353 --5.1602678 2.4361799 -1.9343897 --5.1409631 2.4657528 -1.9327536 --5.1384778 2.5034614 -1.9376619 --5.117939 2.5324278 -1.9356985 --5.102304 2.5637834 -1.9356985 --5.0789022 2.5911758 -1.9327536 --5.0620685 2.6218557 -1.9324263 --5.0425406 2.6511071 -1.9311175 --5.0261784 2.6819975 -1.9311175 --5.007966 2.7118869 -1.9304631 --4.9895754 2.7416537 -1.9298086 --4.9701834 2.7708366 -1.9288269 --4.9530883 2.801281 -1.9288269 --4.9317088 2.8292677 -1.9271909 --4.9183393 2.8618519 -1.9288269 --4.8966184 2.8895745 -1.9271909 --4.8804173 2.9205358 -1.9278454 --4.8615975 2.9499362 -1.9275181 --4.8482342 2.9826827 -1.9294814 --4.8290396 3.0118747 -1.9291542 --4.8128643 3.0429637 -1.9301358 --4.7917156 3.0709076 -1.9291542 --4.7791214 3.1043704 -1.9317719 --4.7607727 3.134156 -1.9320991 --4.7406664 3.1627839 -1.9317719 --4.7188225 3.1902242 -1.9307903 --4.6944818 3.2159133 -1.9288269 --4.6777658 3.2468133 -1.9301358 --4.655437 3.2738233 -1.9291542 --4.6337228 3.30123 -1.9284997 --4.609549 3.326834 -1.9268637 --4.5859981 3.3528235 -1.9255548 --4.56458 3.380337 -1.9252275 --4.5384622 3.4043109 -1.922937 --4.5137267 3.4292355 -1.921301 --4.4993396 3.4620543 -1.924246 --4.4802475 3.4913394 -1.9252275 --4.4572577 3.5175929 -1.9245732 --4.4311619 3.5413353 -1.9226098 --4.4174275 3.5749984 -1.9262092 --4.3881011 3.596045 -1.922937 --4.3637724 3.6210914 -1.9219553 --4.3429184 3.6490149 -1.9226098 --4.3240447 3.6786561 -1.924246 --4.2978125 3.7020345 -1.9226098 --4.2821364 3.7345481 -1.925882 --4.2591414 3.7607524 -1.925882 --4.2416205 3.7918546 -1.9284997 --4.2161727 3.8159065 -1.9275181 --4.1947694 3.8436203 -1.9284997 --4.1717987 3.8699293 -1.9288269 --0 0 -0 --0 0 -0 --4.1093888 3.9552388 -1.933408 --4.0775995 3.9731236 -1.9298086 --0 0 -0 --4.0298734 4.0241985 -1.9304631 --3.9984612 4.0421305 -1.9271909 --3.9768853 4.0699682 -1.9288269 --3.9439642 4.086133 -1.9249003 --3.918818 4.1102557 -1.9249003 --3.8876946 4.1280313 -1.9219553 --3.8571446 4.1462722 -1.9193376 --3.8277955 4.1656857 -1.9173744 --3.7977188 4.184195 -1.9150838 --3.7738655 4.2095299 -1.9160655 --3.753602 4.238975 -1.9190104 --3.7293873 4.264061 -1.9199921 --3.6994479 4.2825727 -1.9180288 --3.6712613 4.3030343 -1.9170471 --3.6514854 4.3334298 -1.9206465 --3.619993 4.3499417 -1.9180288 --3.6064305 4.388135 -1.9252275 --3.569912 4.3984399 -1.9199921 --3.5487647 4.4276366 -1.9232643 --3.51684 4.4433994 -1.9206465 --3.4866011 4.4611712 -1.9190104 --3.4591622 4.4824805 -1.9190104 --3.4344559 4.50738 -1.9206465 --3.4050307 4.526103 -1.9196649 --3.3805745 4.5514627 -1.9216281 --3.3531423 4.5728822 -1.9219553 --3.3200352 4.5864806 -1.9190104 --3.285789 4.5983071 -1.915411 --3.2547901 4.6145201 -1.913775 --3.2258749 4.6336288 -1.9134477 --3.1984527 4.6548929 -1.9141022 --3.1687701 4.6728663 -1.9134477 --3.1437161 4.6977196 -1.9157382 --3.1158733 4.7184978 -1.9163927 --3.0868626 4.7375278 -1.9163927 --3.0572245 4.7555842 -1.9160655 --3.0239398 4.7678685 -1.9134477 --2.9956298 4.7879357 -1.9141022 --2.9642107 4.8030095 -1.9127933 --2.9351754 4.8219147 -1.9131205 --2.906992 4.8422642 -1.9141022 --2.8767445 4.8591971 -1.913775 --2.8473511 4.877573 -1.9141022 --2.8216102 4.9023237 -1.9170471 --2.7905447 4.917901 -1.9163927 --2.758472 4.9316316 -1.9150838 --2.7308965 4.9534302 -1.9170471 --2.7004514 4.9700933 -1.9170471 --2.6725798 4.9915681 -1.9190104 --2.6392572 5.0028577 -1.9170471 --2.6080751 5.0181193 -1.9167199 --2.5759439 5.0315037 -1.9157382 --2.5441723 5.045527 -1.9150838 --2.5131655 5.0610428 -1.9150838 --2.4783301 5.068727 -1.9121388 --2.4459534 5.081284 -1.9111573 --2.4123025 5.0910721 -1.9091939 --2.3810189 5.1057782 -1.9091939 --2.3476758 5.1159968 -1.9075578 --2.317795 5.1337509 -1.9088666 --2.2870181 5.1496034 -1.9095211 --2.2587802 5.1713338 -1.912466 --2.2229068 5.1755443 -1.9088666 --2.1925781 5.1925688 -1.9101756 --2.161762 5.2085428 -1.9111573 --2.1265521 5.2138338 -1.9082122 --2.0962772 5.2311702 -1.9098483 --2.058259 5.2289853 -1.9042857 --2.0230711 5.233583 -1.9013406 --1.9832128 5.2255764 -1.8938147 --1.9537494 5.2447314 -1.8964324 --1.9302862 5.2805853 -1.9052672 --1.8988051 5.2949986 -1.9062489 --1.8681599 5.3118987 -1.9082122 --1.8379943 5.3304086 -1.91083 --1.8076718 5.3487482 -1.9134477 --1.7700686 5.3453856 -1.9082122 --1.7372366 5.3561459 -1.9082122 --1.7006235 5.3549953 -1.9039584 --1.674461 5.3869877 -1.9118116 --1.6400018 5.3926396 -1.9101756 --1.6068823 5.4026012 -1.9101756 --1.5800297 5.4341373 -1.9180288 --1.5409791 5.4237313 -1.91083 --1.5071658 5.4312634 -1.9101756 --1.4720836 5.4340239 -1.9078851 --1.436783 5.4356451 -1.9052672 --1.3986897 5.4260573 -1.8987229 --1.3794037 5.4904447 -1.9186832 --1.3459134 5.499723 -1.9190104 --1.31805 5.5326982 -1.9278454 --1.2744852 5.4992547 -1.9131205 --1.246321 5.5318623 -1.9219553 --1.2117492 5.5366359 -1.9209738 --1.1775579 5.5430422 -1.9206465 --1.1418099 5.5418334 -1.9177016 --1.1063058 5.5413218 -1.9150838 --1.0706719 5.5396552 -1.9121388 --1.0335394 5.5294003 -1.9062489 --1.0017726 5.5477271 -1.9105028 --0.96965772 5.5649409 -1.9144294 --0.93408692 5.5623984 -1.9114844 --0.9002403 5.569891 -1.9121388 --0.86213607 5.5500975 -1.903304 --0.82778686 5.5534139 -1.9026495 --0.79796445 5.5883241 -1.9131205 --0.75753331 5.5481734 -1.8974141 --0.72567022 5.5695839 -1.903304 --0.68811411 5.5467362 -1.8938147 --0.65428776 5.5527306 -1.8944691 --0.618949 5.5453711 -1.8905425 --0.58550477 5.5547032 -1.8925058 --0.55271405 5.5713563 -1.8970869 --0.51974094 5.5878153 -1.9016678 --0.48821756 5.6229076 -1.9127933 --0.45438877 5.6342745 -1.9157382 --0.41896909 5.6256485 -1.9118116 --0.38431448 5.6262279 -1.9111573 --0.35031113 5.6369681 -1.9141022 --0.3159799 5.6437287 -1.9157382 --0.28111047 5.6408424 -1.9141022 --0.24760193 5.6679506 -1.922937 --0.21257259 5.6627531 -1.9206465 --0.17752798 5.6545062 -1.9173744 --0.14294757 5.660212 -1.9190104 --0.10807152 5.6534243 -1.9163927 --0.073392801 5.6549258 -1.9167199 --0.038724806 5.6599946 -1.9183559 --0.0039859931 5.6421714 -1.9121388 -0.0306125 5.63831 -1.91083 -0.065052241 5.6247878 -1.9062489 -0.099716336 5.6327858 -1.9091939 -0.13439016 5.6367912 -1.91083 -0.16943054 5.6509728 -1.9160655 -0.2037923 5.6413279 -1.9131205 -0.2386436 5.6456361 -1.9150838 -0.27318829 5.6421776 -1.9144294 -0.30847478 5.6526613 -1.9186832 -0.34223351 5.635571 -1.9134477 -0.37674302 5.632422 -1.9131205 -0.41157198 5.6337743 -1.9144294 -0.44620726 5.6320848 -1.9147565 -0.48003125 5.6207671 -1.9118116 -0.51675642 5.6421819 -1.9203193 -0.55044496 5.6295004 -1.9170471 -0.58448696 5.6213179 -1.915411 -0.61948615 5.6223216 -1.9170471 -0.65331572 5.6127834 -1.9150838 -0.68751246 5.6067929 -1.9144294 -0.72153926 5.5996575 -1.9134477 -0.75487089 5.5876336 -1.91083 -0.78609556 5.561377 -1.903304 -0.81965196 5.5527101 -1.9019951 -0.8532756 5.5447745 -1.9010135 -0.88967592 5.5543628 -1.9062489 -0.92498302 5.5562558 -1.9088666 -0.96260202 5.5709605 -1.9160655 -0.99926853 5.5789008 -1.9209738 -1.0371037 5.592175 -1.9278454 -1.0665858 5.5606503 -1.9190104 -1.1019725 5.5604892 -1.921301 -1.1400512 5.5730634 -1.9281725 -1.1693443 5.5428495 -1.9199921 -1.2013234 5.5263367 -1.9167199 -1.2327309 5.5077963 -1.9127933 -1.2705352 5.5176244 -1.9190104 -1.2965232 5.4766231 -1.9072306 -1.3285382 5.4621377 -1.90494 -1.3597367 5.4447155 -1.9016678 -1.3942931 5.4408464 -1.903304 -1.4298147 5.4404135 -1.9062489 -1.4616936 5.4260635 -1.9042857 -1.4967208 5.4233689 -1.9065762 -1.5271411 5.4040809 -1.9029768 -1.562373 5.4018703 -1.9055945 -1.5946839 5.3894639 -1.9046128 -1.6279969 5.3804817 -1.90494 -1.6604215 5.3685861 -1.9042857 -1.6916217 5.352891 -1.9023223 -1.7235632 5.3397131 -1.9013406 -1.7598462 5.3398056 -1.9052672 -1.7865483 5.3109956 -1.8987229 -1.8187953 5.2990398 -1.8983957 -1.8519002 5.2895637 -1.8990501 -1.8798709 5.2656431 -1.8944691 -1.9166719 5.2664399 -1.8990501 -1.9463197 5.2474933 -1.8964324 -1.9808207 5.2416391 -1.8987229 -2.0115869 5.2258592 -1.8974141 -2.0425792 5.2107787 -1.8964324 -2.076616 5.203413 -1.8983957 -2.103523 5.1783175 -1.8938147 -2.1399524 5.1766648 -1.8980684 -2.1720421 5.1643076 -1.8983957 -2.2033169 5.1500144 -1.8980684 -2.2363842 5.1398635 -1.8993773 -2.269027 5.1286368 -1.900359 -2.3016164 5.1172032 -1.9013406 -2.3333647 5.1038437 -1.9016678 -2.369019 5.098856 -1.9052672 -2.4014714 5.0867872 -1.9062489 -2.4326379 5.0719562 -1.9062489 -2.4612288 5.0518379 -1.9042857 -2.4925992 5.037488 -1.9046128 -2.5234618 5.022099 -1.9046128 -2.5512221 5.0006289 -1.9023223 -2.5805531 4.9823642 -1.9013406 -2.6084363 4.9614186 -1.8993773 -2.6388299 4.9453201 -1.8993773 -2.6673236 4.9257121 -1.8980684 -2.6979523 4.9100809 -1.8983957 -2.7303305 4.8975606 -1.9000318 -2.7626567 4.8848271 -1.9016678 -2.7921071 4.8669643 -1.9013406 -2.8228686 4.8513741 -1.9019951 -2.8530633 4.8347759 -1.9023223 -2.878792 4.8106928 -1.8997046 -2.9121785 4.7994003 -1.9023223 -2.9420676 4.7822456 -1.9026495 -2.9638519 4.7520785 -1.8977413 -3.0060883 4.7545667 -1.9062489 -3.0408154 4.7447824 -1.9098483 -3.067812 4.7228656 -1.9085394 -3.0894566 4.6929045 -1.9039584 -3.1234396 4.6817193 -1.9072306 -3.1499896 4.6593351 -1.9059217 -3.1843956 4.6484938 -1.9095211 -3.2026179 4.61412 -1.903304 -3.227607 4.589745 -1.9013406 -3.2502239 4.5621595 -1.8980684 -3.2787087 4.5428967 -1.8983957 -3.301501 4.5158291 -1.8954507 -3.3347726 4.5030789 -1.8987229 -3.368012 4.4900904 -1.9019951 -3.3972147 4.4715972 -1.9029768 -3.4291992 4.4566584 -1.9055945 -3.4570611 4.4362788 -1.9059217 -3.4865587 4.4179497 -1.9072306 -3.5165515 4.4001637 -1.9088666 -3.542295 4.3770347 -1.9082122 -3.5618961 4.3464479 -1.9042857 -3.5945342 4.3317819 -1.9075578 -3.6167896 4.3045812 -1.9052672 -3.6406841 4.2794294 -1.9039584 -3.6705747 4.2613049 -1.9059217 -3.69541 4.2372785 -1.9052672 -3.7238424 4.2173567 -1.9065762 -3.7395706 4.1831589 -1.9013406 -3.7677045 4.1629362 -1.9026495 -0 0 -0 -3.8024368 4.099071 -1.8944691 -3.8326929 4.0811725 -1.8970869 -3.8544061 4.0541549 -1.8954507 -3.877243 4.0283866 -1.8944691 -3.9045262 4.0072269 -1.8957779 -3.9363415 3.9905922 -1.8993773 -3.9627569 3.9683697 -1.900359 -4.0031581 3.9599259 -1.9082122 -4.0233245 3.9313266 -1.9062489 -4.0392103 3.8986928 -1.9023223 -4.0685287 3.8790505 -1.90494 -4.0674844 3.8306959 -1.8931602 -4.0839925 3.7992313 -1.889888 -4.139936 3.8041444 -1.9052672 -4.1485033 3.7653368 -1.8983957 -4.1623802 3.7316129 -1.8941419 -4.1816607 3.7028713 -1.8925058 -4.2277789 3.6976678 -1.903304 -4.261116 3.6809206 -1.9082122 -4.2879357 3.6583846 -1.9101756 -4.3117476 3.6332231 -1.91083 -4.3310537 3.6042809 -1.9095211 -4.3479767 3.5734394 -1.9072306 -4.3720226 3.5484796 -1.9082122 -4.3922381 3.5204048 -1.9075578 -4.4137564 3.4933884 -1.9075578 -4.4321299 3.4639132 -1.9062489 -4.4533005 3.4366531 -1.9062489 -4.4690413 3.4052556 -1.9039584 -4.4921174 3.3794737 -1.90494 -4.5120101 3.3512838 -1.9046128 -4.527153 3.3196251 -1.9023223 -4.5566235 3.2984316 -1.9062489 -4.5813904 3.273706 -1.9082122 -4.5975294 3.242811 -1.9065762 -4.6235456 3.218858 -1.9091939 -4.6471038 3.1931028 -1.91083 -4.6697373 3.1666493 -1.9121388 -4.6843672 3.1347845 -1.9101756 -4.6972046 3.1018183 -1.9075578 -4.7082305 3.0677814 -1.9042857 -4.7341199 3.043432 -1.9072306 -4.7503109 3.012809 -1.9062489 -4.7639003 2.9805987 -1.9042857 -4.773253 2.9458544 -1.9006863 -4.8041544 2.9243696 -1.9059217 -4.8228178 2.895323 -1.9062489 -4.8372397 2.8637514 -1.90494 -4.8628821 2.838779 -1.9082122 -4.8818469 2.80983 -1.9088666 -4.8998179 2.7802887 -1.9091939 -4.9143109 2.7487884 -1.9082122 -4.9360499 2.7213192 -1.9101756 -4.9534855 2.691432 -1.9105028 -4.9682403 2.6600955 -1.9098483 -4.9869761 2.6308832 -1.91083 -5.0063791 2.6019766 -1.9121388 -5.0239329 2.5720699 -1.9127933 -5.0429955 2.5428963 -1.9141022 -5.0635824 2.5144258 -1.9160655 -5.0763683 2.4820642 -1.9150838 -5.0966115 2.4533277 -1.9170471 -5.1081529 2.4203913 -1.9157382 -5.119482 2.3874061 -1.9144294 -5.1254454 2.3520091 -1.9111573 -5.1363349 2.3189611 -1.9098483 -5.1556492 2.2897017 -1.9118116 -5.1609416 2.2542436 -1.9085394 -5.1824908 2.2258887 -1.9114844 -5.2047572 2.1977217 -1.9147565 -5.2198896 2.1664686 -1.915411 -5.2269597 2.1319025 -1.9131205 -5.2531004 2.1050601 -1.9180288 -5.2667975 2.0731339 -1.9183559 -5.2776556 2.0400975 -1.9177016 -5.2883072 2.0070057 -1.9170471 -5.3076067 1.9771569 -1.9196649 -5.3311772 1.948768 -1.9239187 -5.337697 1.9141071 -1.9219553 -5.3546901 1.8831995 -1.9239187 -5.3715048 1.8521553 -1.925882 -5.3773966 1.8173474 -1.9239187 -5.3911376 1.7852087 -1.9249003 -5.3956976 1.7500563 -1.9226098 -5.4099369 1.7180592 -1.9239187 -5.4122553 1.6823094 -1.9209738 -5.4279003 1.6507174 -1.922937 -5.4343038 1.6163045 -1.9216281 -5.4504709 1.5847753 -1.9239187 -5.4682736 1.5536246 -1.9268637 -5.4695082 1.5177703 -1.9239187 -5.4714212 1.4822062 -1.921301 -5.4749308 1.4471586 -1.9193376 -5.4690661 1.4097669 -1.9141022 -5.4757805 1.3757226 -1.9134477 -5.4804468 1.3412002 -1.9121388 -5.4968467 1.3095168 -1.9150838 -5.5103016 1.2770431 -1.9170471 -5.5171118 1.243001 -1.9167199 -5.543098 1.2131621 -1.9232643 -5.5467396 1.1783427 -1.9219553 -5.5594187 1.1454294 -1.9239187 -5.5663424 1.1112958 -1.9239187 -5.5739841 1.0772996 -1.924246 -5.5823474 1.0434248 -1.9249003 -5.5988741 1.0109975 -1.9284997 -5.6059027 0.97678649 -1.9288269 -5.607131 0.94158942 -1.9271909 -5.612803 0.90716702 -1.9271909 -5.620131 0.87300014 -1.9278454 -5.6253819 0.83849919 -1.9278454 -5.636034 0.80476701 -1.9298086 -5.6446109 0.77068043 -1.9311175 -5.6454854 0.73554361 -1.9298086 -5.6527057 0.70123816 -1.9307903 -5.6522098 0.66598868 -1.9291542 -5.6496158 0.63056248 -1.9268637 -5.6486793 0.59539092 -1.9252275 -5.6550474 0.56099933 -1.9262092 -5.660265 0.5264647 -1.9268637 -5.6624475 0.4916425 -1.9265364 -5.6681833 0.45711643 -1.9275181 -5.6850166 0.42337832 -1.9324263 -5.6856217 0.38835934 -1.9317719 -5.6916704 0.35369939 -1.9330808 -5.6946769 0.31882191 -1.933408 -5.6918068 0.28363982 -1.9317719 -5.6915522 0.24862812 -1.9311175 -5.694859 0.21377125 -1.9317719 -5.6932302 0.17873584 -1.9307903 -5.6942196 0.14379947 -1.9307903 -5.6940498 0.10883982 -1.9304631 -5.69839 0.073948026 -1.9317719 -5.6959019 0.03896315 -1.9307903 -5.6988688 0.0040144427 -1.9317719 -5.6978412 -0.030947909 -1.9314448 -5.6984887 -0.065919742 -1.9317719 -5.6941977 -0.10081609 -1.9304631 -5.6981955 -0.13586672 -1.9320991 -5.700088 -0.17091316 -1.9330808 -5.7017651 -0.20598795 -1.9340625 -5.7051144 -0.24116994 -1.9356985 -5.7054148 -0.27626312 -1.936353 -5.6979508 -0.31095558 -1.9343897 -5.7006516 -0.34619907 -1.9360257 -5.6993628 -0.38123435 -1.936353 -5.6922045 -0.41585258 -1.9347169 -5.6820097 -0.45017287 -1.9320991 -5.6810236 -0.48518977 -1.9327536 -5.6779394 -0.52003872 -1.9327536 -5.6746416 -0.55486816 -1.9327536 -5.6711302 -0.58967662 -1.9327536 -5.6786761 -0.62570715 -1.9366802 -5.6813002 -0.66130519 -1.9389707 -5.6677566 -0.69500053 -1.9356985 -5.6558881 -0.72879648 -1.9330808 -5.6531825 -0.76374006 -1.9337353 -5.6483898 -0.79841298 -1.9337353 -5.6377759 -0.83222669 -1.9317719 -5.635365 -0.86723554 -1.9327536 -5.6299376 -0.90179712 -1.9327536 -5.6326871 -0.9377231 -1.9356985 -5.6240339 -0.97178376 -1.9347169 -5.6347075 -1.0092762 -1.9406068 -5.6256213 -1.0433136 -1.9396251 -5.6218977 -1.0783467 -1.9406068 -5.6114678 -1.1120862 -1.9392979 -5.5980582 -1.1451695 -1.9370074 -5.5900021 -1.1793017 -1.9366802 -5.5780439 -1.2125746 -1.9350441 -5.5658884 -1.2457452 -1.933408 -5.5562983 -1.2794489 -1.9327536 -5.5566182 -1.3154784 -1.9356985 -5.5456877 -1.3488779 -1.9347169 -5.5455575 -1.3849425 -1.9376619 -5.5314631 -1.4175348 -1.9356985 -5.5317998 -1.4538523 -1.9389707 -5.5273371 -1.4889973 -1.9406068 -5.5126314 -1.5213749 -1.9386435 -5.4759145 -1.5474565 -1.9288269 -5.4654083 -1.5807642 -1.9284997 -5.5072517 -1.6295624 -1.9471512 -5.4881053 -1.660585 -1.943879 -5.4696884 -1.6917137 -1.9409341 -5.4583044 -1.7249583 -1.9406068 -5.4512143 -1.7595792 -1.9419156 -5.4367256 -1.7918102 -1.9406068 -5.4157777 -1.8218194 -1.9370074 -5.4009223 -1.8537879 -1.9356985 -5.3769608 -1.8825184 -1.9311175 -5.3484011 -1.9094354 -1.9249003 -5.3250413 -1.9380131 -1.9206465 -5.2572379 -1.9499364 -1.9000318 -5.1956778 -1.963441 -1.8817075 -5.1262155 -1.9732076 -1.8604385 -5.0841017 -1.9928927 -1.849313 -4.9770007 -1.9862037 -1.8139734 -4.8964386 -1.9889511 -1.7884505 -4.8413558 -2.00126 -1.7724168 -4.7967591 -2.0173666 -1.7603097 -4.7382493 -2.0270522 -1.7429672 -4.6979976 -2.0440173 -1.7324963 -4.6421638 -2.0536802 -1.7161354 -4.6053472 -2.0712671 -1.7069732 -4.5788026 -2.0931969 -1.7017378 -4.5607314 -2.1188624 -1.6997744 -4.5416632 -2.1439815 -1.6974839 -4.4423771 -2.130517 -1.6644349 -4.361268 -2.1246114 -1.6382575 -4.2922573 -2.1236613 -1.6166611 -4.2512856 -2.1359518 -1.6058629 -4.1421518 -2.1130214 -1.56856 -4.1333036 -2.1405714 -1.5701962 -4.04566 -2.1267409 -1.5410738 -3.9916885 -2.1297183 -1.52504 -4.0391974 -2.1870306 -1.5489269 -4.0886354 -2.2463703 -1.5737956 -4.0764256 -2.272336 -1.57445 -3.9711173 -2.2456517 -1.5381287 -3.9203837 -2.2488084 -1.523404 -3.8893619 -2.2628374 -1.5165324 -3.8721492 -2.2847381 -1.5152235 -3.6310465 -2.1725438 -1.4236026 -3.40763 -2.0672889 -1.3385259 -3.4431653 -2.1178772 -1.3581589 -3.3355072 -2.0799365 -1.3195472 -3.3099046 -2.0922813 -1.3143117 -3.1967735 -2.0482867 -1.2730823 -3.1556211 -2.0493264 -1.2613025 -3.1240473 -2.0561762 -1.2534492 -3.0807195 -2.0548472 -1.2406877 -3.0390923 -2.0541236 -1.2285807 -3.0038269 -2.0572407 -1.2190913 -2.9810572 -2.0686266 -1.2148376 -2.9304385 -2.0602367 -1.1988038 -2.9061997 -2.069952 -1.1938956 -2.8758233 -2.0750222 -1.1863695 -2.8424437 -2.0775669 -1.1775347 -2.7924383 -2.067405 -1.161501 -2.737375 -2.0527384 -1.1431768 -2.7074251 -2.0563445 -1.1356508 -2.6707952 -2.0544734 -1.1251798 -2.655158 -2.0684984 -1.123871 -2.6379662 -2.081238 -1.1219076 -2.6303124 -2.1015158 -1.1241982 -2.6232438 -2.1223722 -1.1268159 -2.6211331 -2.1474147 -1.1317241 -2.615905 -2.1700966 -1.1353235 -2.6170075 -2.1982672 -1.1418679 -2.5984325 -2.2099962 -1.1395774 -2.56478 -2.2086265 -1.1304153 -2.5262587 -2.2025788 -1.1189626 -2.474453 -2.1842561 -1.1012928 -2.4469171 -2.1867993 -1.0947485 -2.3802166 -2.1535702 -1.06988 -2.3697441 -2.1706884 -1.0711888 -2.3376789 -2.1678329 -1.062354 -2.3236446 -2.1814888 -1.0620267 -2.3102155 -2.1957052 -1.0620267 -2.2953379 -2.2085283 -1.0613723 -2.2810669 -2.221911 -1.0610451 -2.2667179 -2.2352018 -1.0607178 -2.2442696 -2.240386 -1.0564641 -2.2218435 -2.2453794 -1.0522102 -2.2020817 -2.2528861 -1.0492653 -2.1803436 -2.2581949 -1.0453386 -2.1912196 -2.2975247 -1.0577729 -2.1718993 -2.3054223 -1.0551552 -2.1750865 -2.3373892 -1.0639901 -2.1619821 -2.3520832 -1.0646445 -2.1538587 -2.372303 -1.0679166 -2.1449378 -2.3918078 -1.0708616 -2.1183217 -2.3914797 -1.0646445 -2.0824616 -2.3802445 -1.0535191 -2.075846 -2.4022753 -1.0577729 -2.0733304 -2.429347 -1.0643172 -2.053515 -2.4362411 -1.0616995 -2.0445709 -2.4560599 -1.0649717 -2.0282626 -2.4670987 -1.0643172 -2.0142775 -2.4809651 -1.0649717 -1.9931083 -2.485903 -1.0616995 -1.9766449 -2.4966037 -1.0610451 -1.9577984 -2.5042171 -1.0590818 -1.9447047 -2.5191758 -1.0603907 -1.9280655 -2.5295572 -1.0597363 -1.913644 -2.5428505 -1.0603907 -1.8974421 -2.5537858 -1.0600635 -1.8772676 -2.559283 -1.0574456 -1.8582052 -2.5661602 -1.0554824 -1.8391292 -2.5729001 -1.0535191 -1.8227631 -2.583364 -1.0531919 -1.8095763 -2.5983777 -1.0548279 -1.7941339 -2.6102111 -1.0551552 -1.7807351 -2.6250815 -1.0567913 -1.7630183 -2.6336021 -1.0558096 -1.7504694 -2.6498907 -1.0581001 -1.7383027 -2.6669161 -1.0607178 -1.7418286 -2.7085357 -1.0734794 -1.7155635 -2.7040088 -1.0672623 -1.7024471 -2.7200925 -1.0695528 -1.6807636 -2.722445 -1.0662806 -1.6797448 -2.7585392 -1.0767516 -1.6598699 -2.7639325 -1.0747882 -1.6284426 -2.7496681 -1.0649717 -1.5986823 -2.7375717 -1.0561368 -1.5908077 -2.762892 -1.062354 -1.5621706 -2.7520523 -1.0541735 -1.5540162 -2.777257 -1.0603907 -1.5351218 -2.7834294 -1.0590818 -1.521171 -2.798609 -1.0613723 -1.5155628 -2.8295519 -1.06988 -1.5012577 -2.8446491 -1.0721705 -1.4789833 -2.844583 -1.0685711 -1.4593492 -2.8493981 -1.0669351 -1.4380106 -2.8507044 -1.0639901 -1.4171312 -2.8527029 -1.0613723 -1.4008453 -2.8638914 -1.062354 -1.3840657 -2.874136 -1.0630084 -1.3712577 -2.8928225 -1.0669351 -1.3578731 -2.9106033 -1.0705345 -1.3533822 -2.9480836 -1.0816598 -1.3383769 -2.963223 -1.0842775 -1.3182528 -2.9670608 -1.0826415 -1.2985102 -2.9716294 -1.0813326 -1.2795068 -2.9778044 -1.0806782 -1.2601089 -2.9829874 -1.0796965 -1.2464887 -3.0020101 -1.0839504 -1.224835 -3.0017264 -1.0810053 -1.20007 -2.9933956 -1.0751154 -1.1920581 -3.0270834 -1.084932 -1.1731213 -3.0334592 -1.0846047 -1.1518054 -3.0335319 -1.081987 -1.1308626 -3.0343432 -1.0796965 -1.1118987 -3.0403373 -1.0793693 -1.0980043 -3.0604458 -1.0842775 -1.0770119 -3.060885 -1.081987 -1.0569789 -3.0638623 -1.0806782 -1.0408808 -3.0783474 -1.0836232 -1.026129 -3.0972357 -1.0882041 -0.99603391 -3.069315 -1.0757699 -0.98232722 -3.0915811 -1.0816598 -0.96165735 -3.0921359 -1.0796965 -0.94926041 -3.1196771 -1.0875497 -0.92606252 -3.1118562 -1.0826415 -0.91169661 -3.1338134 -1.0885314 -0.89477336 -3.1475296 -1.0914763 -0.87897849 -3.165709 -1.0960574 -0.8610189 -3.1765153 -1.0980207 -0.83475572 -3.1561573 -1.0888586 -0.80311865 -3.1136355 -1.0718433 -0.77709675 -3.0910091 -1.0620267 -0.73993671 -3.0213685 -1.0355221 -0.71963364 -3.0184977 -1.0329044 -0.70834619 -3.0541568 -1.0440297 -0.69478047 -3.0814927 -1.0522102 -0.68050206 -3.10693 -1.0597363 -0.66515279 -3.1286099 -1.0659534 -0.65032488 -3.1539199 -1.0734794 -0.63558096 -3.1810184 -1.0816598 -0.62411129 -3.2266099 -1.0963846 -0.60777003 -3.2489567 -1.102929 -0.58748794 -3.2507648 -1.1022745 -0.56801659 -3.2571013 -1.1032562 -0.55364758 -3.2940748 -1.115036 -0.53131694 -3.2843497 -1.110455 -0.51187885 -3.2922168 -1.1120911 -0.49319887 -3.3055768 -1.1156905 -0.47183987 -3.3010569 -1.1130728 -0.45068261 -3.2973359 -1.1107823 -0.42507869 -3.2588089 -1.0963846 -0.3976419 -3.2013376 -1.0754427 -0.37876409 -3.2102864 -1.0777332 -0.36272091 -3.24542 -1.0891858 -0.34408575 -3.2598014 -1.0934397 -0.32891834 -3.3107495 -1.110455 -0.31008223 -3.3287008 -1.1160177 -0.28639001 -3.2928839 -1.102929 -0.26792255 -3.3162429 -1.110455 -0.24581973 -3.2942657 -1.1022745 -0.22573027 -3.2975974 -1.102929 -0.20514184 -3.2932618 -1.1009657 -0.18429933 -3.2831366 -1.0970391 -0.16424461 -3.2860932 -1.0976934 -0.14444786 -3.2955356 -1.1006385 -0.12337799 -3.2736969 -1.0927852 -0.10302351 -3.265892 -1.0898403 -0.082627468 -3.2522929 -1.084932 -0.062741689 -3.2565176 -1.0862409 -0.04269854 -3.2521169 -1.0846047 -0.022881111 -3.2731061 -1.0918036 -0.0027925363 -3.2637355 -1.0885314 --0.017174857 -3.2532969 -1.084932 --0.037392192 -3.2748625 -1.092458 --0.057756376 -3.2896883 -1.0976934 --0.078258462 -3.3024974 -1.1022745 --0.099205025 -3.3246236 -1.1101278 --0.11953405 -3.3220637 -1.1094733 --0.14095822 -3.3458142 -1.117981 --0.1620817 -3.357156 -1.1222348 --0.18365976 -3.3740256 -1.1284519 --0.20464629 -3.3775511 -1.1300881 --0.22454435 -3.363975 -1.1258342 --0.24414545 -3.3483975 -1.120926 --0.26640716 -3.3685021 -1.1284519 --0.2873933 -3.3705702 -1.1297609 --0.30280033 -3.3113427 -1.1098006 --0.32449487 -3.323529 -1.1147088 --0.34693784 -3.3412125 -1.1215804 --0.37064677 -3.3681374 -1.1317241 --0.3942613 -3.3911417 -1.1405591 --0.41586792 -3.3952241 -1.1428496 --0.43911189 -3.4113519 -1.1493939 --0.45940179 -3.4039111 -1.1477579 --0.68517214 -4.848434 -1.6539639 --0.71656686 -4.8553562 -1.6578906 --0.74807233 -4.8620749 -1.6618172 --0.77579635 -4.8443313 -1.6572361 --0.80954552 -4.8637142 -1.6657438 --0.83744049 -4.8474817 -1.6618172 --0.86616755 -4.8366714 -1.6598538 --0.89893341 -4.8479891 -1.6657438 --0.92884141 -4.8433099 -1.6660709 --0.95725471 -4.8310313 -1.6637805 --0.99086028 -4.8445072 -1.670652 --1.0211527 -4.8411098 -1.6716337 --1.0500343 -4.8310599 -1.6703248 --1.0773851 -4.814383 -1.6667254 --1.1060563 -4.8039985 -1.6654166 --1.1394341 -4.8136721 -1.6713065 --1.1624669 -4.779964 -1.6618172 --1.1910869 -4.7699909 -1.6608355 --1.2252626 -4.7818146 -1.6677071 --1.2495322 -4.7550154 -1.6608355 --1.2845885 -4.769156 -1.6686888 --1.309299 -4.7447886 -1.6627988 --1.1367767 -4.0237865 -1.40626 --1.1619703 -4.0185509 -1.4069145 --1.3961449 -4.7189789 -1.6624717 --1.42836 -4.7211761 -1.6663982 --1.4497581 -4.6879501 -1.6575633 --1.4910322 -4.7186093 -1.6719609 --1.5211189 -4.7129683 -1.6732697 --1.5497124 -4.7026486 -1.6729425 --1.5818543 -4.7029028 -1.6765419 --1.6106811 -4.6931081 -1.6765419 --1.6472578 -4.7054319 -1.6847224 --1.6773704 -4.6987953 -1.6860313 --1.7116671 -4.7035093 -1.691594 --1.7381935 -4.6867166 -1.6893035 --1.769926 -4.683918 -1.6922485 --1.7959155 -4.6659155 -1.6896306 --1.8269265 -4.6609659 -1.6919212 --1.8600469 -4.6610765 -1.696175 --1.2118543 -2.984565 -1.0738066 --1.2286998 -2.9735804 -1.0724977 --1.2472887 -2.966856 -1.072825 --1.9783376 -4.6244493 -1.7001016 --2.0025263 -4.6026931 -1.6965022 --2.0311127 -4.5911832 -1.6968294 --2.05847 -4.5769105 -1.696175 --2.0900521 -4.571928 -1.69912 --1.5647732 -3.3688018 -1.2446144 --1.5870286 -3.362555 -1.2459232 --1.6059958 -3.3493462 -1.2446144 --1.620306 -3.3266878 -1.239706 --1.6423647 -3.3200705 -1.241015 --1.6635542 -3.311619 -1.2416694 --1.6898571 -3.3131325 -1.2462504 --1.7131977 -3.3085742 -1.248541 --1.7427044 -3.3155625 -1.2554126 --2.286813 -4.2859473 -1.640548 --2.3027151 -4.2527251 -1.633022 --2.3975046 -4.3635545 -1.6824319 --2.4265351 -4.3528881 -1.684068 --2.4550598 -4.341207 -1.6853769 --2.4872954 -4.3358955 -1.6893035 --2.5062466 -4.3074861 -1.684068 --2.5292668 -4.2863307 -1.6817775 --2.5521219 -4.2650557 -1.6794869 --2.5821664 -4.2557778 -1.6821047 --2.6126885 -4.2470965 -1.6850497 --2.6381989 -4.2301836 -1.6847224 --2.6585486 -4.205132 -1.681123 --2.6837907 -4.1879444 -1.6807958 --2.7073774 -4.1682291 -1.6794869 --2.7313428 -4.1491709 -1.6785053 --2.7572749 -4.1331196 -1.6788325 --2.7778187 -4.1090789 -1.6758876 --2.7976372 -4.0841627 -1.6726153 --2.8258784 -4.0715766 -1.6745787 --2.8540702 -4.0587978 -1.6765419 --2.8772755 -4.0389009 -1.6755604 --2.9003439 -4.0188718 -1.6745787 --2.9110024 -3.9819322 -1.6663982 --2.9353802 -3.9639957 -1.6663982 --2.9488714 -3.9315495 -1.660181 --2.9717958 -3.9118769 -1.6595266 --2.2902231 -2.9770503 -1.259012 --2.3107708 -2.9659226 -1.2603208 --2.324827 -2.9464965 -1.2580303 --3.0745742 -3.8473618 -1.6637805 --3.0856364 -3.8130014 -1.6569089 --3.1089745 -3.7939966 -1.6569089 --3.1418526 -3.7864819 -1.6621444 --3.1650269 -3.7671325 -1.6621444 --3.189307 -3.7490807 -1.6627988 --3.2196531 -3.7380309 -1.6667254 --3.2288616 -3.7025402 -1.6595266 --3.2446375 -3.6748683 -1.6559272 --3.2652352 -3.6527774 -1.6549456 --3.2799759 -3.6242678 -1.651019 --3.3098145 -3.612433 -1.6549456 --3.3332033 -3.5934415 -1.6556001 --3.3519545 -3.5694783 -1.6539639 --3.3672807 -3.541997 -1.6506917 --3.3928833 -3.5253532 -1.652655 --3.4052162 -3.4949951 -1.648074 --3.416641 -3.4639463 -1.6431657 --3.4358277 -3.4409115 -1.6421841 --3.4730024 -3.4357107 -1.6500373 --3.4818501 -3.402451 -1.6441474 --3.4938211 -3.3724935 -1.6398935 --3.517185 -3.3536 -1.6412024 --3.5445764 -3.3384328 -1.6444746 --3.5739899 -3.3249862 -1.6487285 --3.5936284 -3.3023548 -1.6484013 --3.6278205 -3.2929413 -1.6549456 --3.6564019 -3.278187 -1.6588722 --3.6601734 -3.2412851 -1.6513462 --3.6814153 -3.2200096 -1.6520007 --3.7025342 -3.1985953 -1.652655 --3.7407844 -3.1917593 -1.6611627 --3.7581301 -3.1669199 -1.660181 --3.7702265 -3.1377578 -1.6569089 --3.7908688 -3.1157649 -1.6575633 --3.8209226 -3.1013761 -1.6624717 --3.8428302 -3.0802362 -1.6637805 --3.8631401 -3.0577717 -1.6644349 --3.8855526 -3.0369189 -1.6660709 --3.9123442 -3.0193691 -1.6696703 --3.9300451 -2.994734 -1.6693431 --3.9574094 -2.9773786 -1.6732697 --3.9793973 -2.9558568 -1.6749059 --3.995935 -2.9302669 -1.6742514 --4.0176673 -2.9084628 -1.6758876 --4.0400515 -2.8870513 -1.6778508 --4.063096 -2.8660192 -1.6801413 --4.0860343 -2.8448129 -1.6824319 --4.1034131 -2.8196878 -1.6824319 --4.127677 -2.7992284 -1.6853769 --4.1565561 -2.7817295 -1.6902851 --4.1822214 -2.761899 -1.6938845 --4.2085915 -2.7423737 -1.6978111 --4.2269287 -2.7175205 -1.6984656 --4.2475142 -2.6940629 -1.7001016 --4.2767835 -2.6759667 -1.7053372 --4.3043818 -2.65662 -1.7099181 --4.3319035 -2.6370351 -1.7144992 --4.3512435 -2.6123502 -1.7158082 --4.3728833 -2.5889709 -1.7180986 --4.4099069 -2.5744727 -1.7266062 --4.421525 -2.5450094 -1.7249702 --4.4337702 -2.5159669 -1.7236613 --4.4565473 -2.4928646 -1.7266062 --4.5081744 -2.4855392 -1.7410039 --4.4909549 -2.440243 -1.7282424 --4.5616646 -2.4425139 -1.7501659 --4.5857601 -2.4193263 -1.7537653 --4.603034 -2.3924499 -1.754747 --4.6235156 -2.3671744 -1.7570375 --4.6328902 -2.3362088 -1.7550743 --4.6564488 -2.3123589 -1.7586737 --4.6739454 -2.2854035 -1.7599826 --4.7108712 -2.2677431 -1.7688174 --4.7272596 -2.2400084 -1.7697991 --4.7426276 -2.2117586 -1.7704535 --4.7595453 -2.1841927 -1.7717624 --4.7969747 -2.1658299 -1.7809244 --4.7289867 -2.1003189 -1.7501659 --4.7391872 -2.0701287 -1.7491844 --4.7613516 -2.0451109 -1.7527838 --4.8025403 -2.0279815 -1.7635819 --4.8463154 -2.0115094 -1.7753618 --4.8961935 -1.9970729 -1.7894322 --4.9583564 -1.9870179 -1.8080835 --5.022337 -1.9769663 -1.8273894 --5.0872602 -1.966544 -1.8470225 --5.1822834 -1.9667925 -1.8777809 --5.267756 -1.9623212 -1.90494 --5.3267393 -1.9471468 -1.9222826 --5.3884015 -1.932278 -1.9406068 --5.4313583 -1.9101455 -1.9520594 --5.4635243 -1.8838639 -1.9595854 --5.4875145 -1.854538 -1.9641665 --5.5230126 -1.8288476 -1.9730014 --5.5359278 -1.7955073 -1.9736558 --5.5423374 -1.7600765 -1.9720197 --5.5611544 -1.728559 -1.9749647 --5.5589981 -1.6905572 -1.9703836 --5.5765128 -1.6585697 -1.9730014 --5.5865846 -1.6243216 -1.9730014 --5.590992 -1.588464 -1.9710381 --5.6097393 -1.5566533 -1.9743103 --5.6045914 -1.518253 -1.9690747 --5.6092334 -1.4826287 -1.9674387 --5.626461 -1.4503044 -1.9703836 --5.6370869 -1.4162139 -1.9710381 --5.6429167 -1.3809254 -1.9700564 --5.6457682 -1.3449624 -1.9680932 --5.6585174 -1.311361 -1.9697292 --5.6673789 -1.2768238 -1.9700564 --5.6658754 -1.2400069 -1.9667842 --5.6761503 -1.205807 -1.9677659 --5.6936231 -1.1730516 -1.9713653 --5.6997871 -1.1379093 -1.9710381 --5.7029505 -1.1021981 -1.9697292 --5.7133217 -1.0678784 -1.9710381 --5.7113972 -1.0312924 -1.9680932 --5.7120318 -0.99525648 -1.9661298 --5.7189631 -0.96034569 -1.966457 --5.7294121 -0.92598963 -1.9680932 --5.7237806 -0.88907892 -1.9641665 --5.7309976 -0.85421997 -1.964821 --5.7389379 -0.81943929 -1.9658026 --5.7382398 -0.78344458 -1.9638393 --5.7279463 -0.74627036 -1.9586037 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --5.4623103 0.97650236 -1.9482287 --5.4543648 1.0096576 -1.9475535 --5.4397464 1.0415134 -1.9445152 --5.4360232 1.0754193 -1.945528 --5.4173331 1.1063063 -1.9411393 --5.4058371 1.138556 -1.9394515 --5.4015093 1.172303 -1.9404641 --5.3932958 1.2052187 -1.9401267 --5.3876338 1.2387103 -1.9408017 --5.3808479 1.2719613 -1.9411393 --5.3793449 1.3065083 -1.9435025 --5.3785338 1.3413124 -1.9462032 --5.3665547 1.373356 -1.9448528 --5.3653107 1.4081699 -1.9475535 --5.3592963 1.4417976 -1.9485663 --5.3476262 1.4739044 -1.9475535 --5.3384819 1.5066891 -1.9475535 --5.3273282 1.5388947 -1.9468783 --5.3087583 1.5688865 -1.9435025 --5.2936254 1.5997975 -1.9414769 --5.2801118 1.6311374 -1.9401267 --5.2628226 1.6612386 -1.9374259 --5.2426758 1.6903229 -1.9337125 --0 0 -0 --5.2277842 1.7566295 -1.9360756 --5.2177978 1.7889787 -1.9364132 --5.1853971 1.8135046 -1.928311 --5.2220497 1.8623582 -1.9465408 --5.1972542 1.8895416 -1.9414769 --5.1793838 1.919107 -1.9391139 --5.1631074 1.9491889 -1.9374259 --5.1501718 1.9804947 -1.9370884 --5.1545763 2.0185785 -1.9435025 --5.1324754 2.0463345 -1.9397891 --5.106739 2.0724797 -1.9347252 --5.0878363 2.1012602 -1.9323621 --5.0783186 2.1338973 -1.9337125 --5.0564742 2.1613183 -1.9303366 --5.042254 2.1919284 -1.929999 --5.0304317 2.2235868 -1.9306742 --5.023562 2.2574971 -1.9333749 --5.0070472 2.2871056 -1.9323621 --4.994627 2.3185778 -1.9330373 --4.9769011 2.3475745 -1.9316869 --4.9649496 2.3792882 -1.9326997 --4.9443326 2.4068244 -1.9303366 --4.930315 2.4375339 -1.9306742 --4.9169483 2.4685845 -1.9313493 --4.9067407 2.5012724 -1.9333749 --4.8913012 2.5313325 -1.9333749 --4.8673434 2.5569203 -1.929999 --4.83495 2.5778818 -1.9232472 --4.8364277 2.6169055 -1.9303366 --4.8178039 2.6451731 -1.9293238 --4.8014827 2.6746848 -1.9293238 --4.7849808 2.7040958 -1.9293238 --4.7731991 2.7362134 -1.9313493 --4.7612028 2.7682881 -1.9333749 --4.7449379 2.7979283 -1.9337125 --4.7317204 2.8294051 -1.9354004 --4.7166853 2.859849 -1.9364132 --4.7014546 2.8902149 -1.9374259 --4.6788387 2.9160213 -1.9354004 --4.6568789 2.9421618 -1.9337125 --4.6379461 2.9701729 -1.9333749 --4.6148963 2.9955001 -1.9313493 --4.595643 3.023243 -1.9310117 --4.5707407 3.0472078 -1.928311 --4.547277 3.0720346 -1.9262855 --4.5267882 3.098815 -1.9256103 --4.5138769 3.1308239 -1.928311 --4.4868798 3.1530502 -1.9249351 --4.4705157 3.1827052 -1.9262855 --4.4516664 3.2106264 -1.9266231 --4.4372034 3.2417674 -1.9289862 --4.4179854 3.2694926 -1.9293238 --4.4031138 3.3004909 -1.9316869 --4.3872781 3.3308606 -1.9337125 --4.3660111 3.3571439 -1.9333749 --4.3364177 3.3769307 -1.9293238 --4.3133979 3.4017262 -1.928311 --4.2850885 3.4222553 -1.9249351 --4.2186289 3.4117882 -1.9040047 --4.2252903 3.4602699 -1.916833 --4.2047038 3.4867315 -1.9171706 --4.1882768 3.5167022 -1.9195337 --4.1694889 3.5447733 -1.9208841 --4.1433792 3.5666058 -1.9188585 --4.134191 3.6030931 -1.9249351 --4.1176519 3.6333742 -1.9276358 --4.0903659 3.6541817 -1.9252727 --4.0727544 3.6836305 -1.9276358 --4.0493813 3.7079155 -1.9272983 --4.0224118 3.728853 -1.9252727 --3.9953375 3.7495992 -1.9232472 --3.9715729 3.7733953 -1.9229096 --3.9463096 3.7957358 -1.9218968 --3.9215961 3.8185654 -1.9212216 --3.8994329 3.8438773 -1.9218968 --3.8831036 3.8750448 -1.9256103 --3.859916 3.8994672 -1.9259479 --3.8207796 3.9075992 -1.9181833 --3.7947693 3.9289384 -1.9171706 --3.7699404 3.9514678 -1.916833 --3.7494974 3.9786353 -1.9188585 --3.7243731 4.0008779 -1.9185209 --3.7010283 4.0250406 -1.9191961 --3.6813247 4.0532479 -1.9218968 --3.6626713 4.0827661 -1.9252727 --3.6338053 4.1009359 -1.9232472 --3.6110539 4.1259885 -1.9245975 --3.5869005 4.1494923 -1.9252727 --3.5625947 4.1728544 -1.9259479 --3.5332825 4.1903181 -1.9239224 --3.5062997 4.2104726 -1.9232472 --3.4642539 4.2122793 -1.9141324 --3.448432 4.2458768 -1.9198713 --3.4211369 4.2654877 -1.9191961 --3.3761966 4.2627878 -1.9083933 --3.3638957 4.3012176 -1.9164954 --3.3368652 4.321032 -1.9161578 --3.3120012 4.3436708 -1.9171706 --3.2858529 4.3646631 -1.9175082 --3.2533944 4.3771882 -1.9141324 --3.2270319 4.3978271 -1.91447 --3.2044048 4.4236431 -1.9171706 --3.1772015 4.443222 -1.9171706 --3.1498785 4.4626331 -1.9171706 --3.1111364 4.4656582 -1.9100813 --3.0932779 4.4986243 -1.9161578 --3.0656166 4.5175195 -1.9161578 --3.0388875 4.5378089 -1.916833 --3.009949 4.5547991 -1.9161578 --2.9819446 4.5731821 -1.9161578 --2.9477158 4.5818939 -1.9121068 --2.9190419 4.5991001 -1.9117692 --2.8882694 4.6129355 -1.9100813 --2.8579319 4.6273675 -1.9087309 --2.8294849 4.6448159 -1.9087309 --2.8014166 4.6628971 -1.9090685 --2.7741923 4.6824279 -1.9100813 --2.7477837 4.7034254 -1.9117692 --2.7249808 4.7308002 -1.9161578 --2.6945074 4.7449756 -1.915145 --2.6708601 4.7712755 -1.9191961 --2.6374407 4.7801566 -1.9161578 --2.6031134 4.7871537 -1.9124444 --2.5754697 4.8063545 -1.9137948 --2.5454903 4.8212342 -1.9134572 --2.5158598 4.8367624 -1.9134572 --2.4869933 4.8537836 -1.9141324 --2.4605575 4.8756747 -1.916833 --2.4268236 4.8830948 -1.9137948 --2.3972297 4.8987389 -1.9141324 --2.3646748 4.908268 -1.9121068 --2.3341103 4.9218345 -1.9117692 --2.3018758 4.9317989 -1.9100813 --2.2731431 4.9492517 -1.9114317 --2.2411816 4.9596753 -1.9100813 --2.2076483 4.9664526 -1.9073806 --2.1778872 4.9816298 -1.9080558 --2.1495106 5.0000877 -1.9100813 --2.1176906 5.0105815 -1.9090685 --2.0869064 5.0234814 -1.9090685 --2.0563993 5.0370631 -1.9094061 --2.0254538 5.0495863 -1.9094061 --1.9906356 5.0522861 -1.9056926 --1.9599377 5.0652828 -1.9060302 --1.9241399 5.0648947 -1.901304 --1.8956577 5.0836616 -1.9040047 --1.8657234 5.0987329 -1.905355 --1.8363116 5.1154003 -1.9073806 --1.8058275 5.1292348 -1.9083933 --1.7715563 5.1322112 -1.905355 --1.7406358 5.1447678 -1.9060302 --1.7102202 5.1589251 -1.9073806 --1.6773704 5.1657405 -1.9060302 --1.63794 5.1517158 -1.8969153 --1.6088167 5.1697578 -1.8999536 --1.5770655 5.1795321 -1.8999536 --1.5479419 5.1981325 -1.9033295 --1.5141754 5.2012062 -1.9009664 --1.48146 5.2076831 -1.8999536 --1.4469577 5.2076058 -1.8965777 --1.4159632 5.2200203 -1.8979281 --1.3831843 5.2258801 -1.8969153 --1.3496809 5.2288008 -1.8948898 --1.3168831 5.2342453 -1.893877 --1.285638 5.2458839 -1.8952274 --1.2532072 5.252758 -1.8948898 --1.2267013 5.2851048 -1.9040047 --1.1917623 5.2815142 -1.8999536 --1.1607444 5.2951632 -1.9023167 --1.129016 5.3058686 -1.9036671 --1.0989127 5.3246803 -1.9080558 --1.0669591 5.3350148 -1.9094061 --1.033846 5.339613 -1.9087309 --1.0024499 5.3532577 -1.9114317 --0.96773994 5.3491187 -1.9077182 --0.93214691 5.3391929 -1.9019791 --0.90249395 5.3633766 -1.9087309 --0.8710736 5.3781047 -1.9121068 --0.83892691 5.3889289 -1.9141324 --0.80389714 5.3809419 -1.9094061 --0.7704649 5.3829775 -1.9083933 --0.73691016 5.3838735 -1.907043 --0.70312953 5.3826938 -1.9050175 --0.66880977 5.3766317 -1.901304 --0.63669103 5.3881125 -1.9040047 --0.60173196 5.3750796 -1.8979281 --0.56864071 5.3777347 -1.8975905 --0.53768557 5.4017291 -1.9050175 --0.50409329 5.4002404 -1.9033295 --0.47143936 5.4088583 -1.905355 --0.43862259 5.4163399 -1.907043 --0.40573177 5.4236226 -1.9087309 --0.37257445 5.4278884 -1.9094061 --0.33920377 5.4291329 -1.9090685 --0.30567285 5.4273529 -1.9077182 --0.2717987 5.4178448 -1.9036671 --0.23884055 5.4259934 -1.9060302 --0.20557848 5.428297 -1.9063678 --0.17241681 5.4341607 -1.9080558 --0.13882871 5.4257064 -1.9046799 --0.10560808 5.4302206 -1.9060302 --0.072412863 5.4401784 -1.9094061 --0.038922027 5.4254599 -1.9040047 --0.005648056 5.4406571 -1.9094061 -0.02778258 5.4500022 -1.912782 -0.060970549 5.4271398 -1.9046799 -0.094058082 5.4144282 -1.9002912 -0.12732272 5.4156313 -1.9009664 -0.16107874 5.4326248 -1.9073806 -0.19461125 5.4371786 -1.9094061 -0.22824509 5.4424653 -1.9117692 -0.26127401 5.4334407 -1.9090685 -0.29450622 5.4298553 -1.9083933 -0.32810104 5.4326439 -1.9100813 -0.36124161 5.427711 -1.9090685 -0.39460683 5.426331 -1.9094061 -0.42759889 5.420054 -1.9080558 -0.46036938 5.4117012 -1.9060302 -0.49330989 5.405962 -1.9050175 -0.5263797 5.4018965 -1.9046799 -0.55941826 5.3976288 -1.9043423 -0.59304053 5.3987732 -1.9060302 -0.62648094 5.3978376 -1.907043 -0.66061735 5.4023013 -1.9100813 -0.69351298 5.3962789 -1.9094061 -0.72497749 5.3797946 -1.9050175 -0.75823635 5.3771091 -1.9056926 -0.79011875 5.3649054 -1.9029919 -0.82402188 5.3664689 -1.905355 -0.85574645 5.3538756 -1.9026543 -0.88565129 5.3308811 -1.8962401 -0.92090261 5.3401885 -1.9016416 -0.95398319 5.3362908 -1.9023167 -0.98705065 5.3321877 -1.9029919 -1.0202806 5.3288045 -1.9040047 -1.0529583 5.322444 -1.9040047 -1.0850315 5.3131161 -1.9029919 -1.1137333 5.2879362 -1.8962401 -1.1471564 5.2856026 -1.8979281 -1.1851075 5.303268 -1.907043 -1.219523 5.3041525 -1.9100813 -1.2477162 5.2782488 -1.9033295 -1.2785249 5.2640905 -1.9009664 -1.3108006 5.2561464 -1.9009664 -1.3395276 5.2343259 -1.8959025 -1.3752029 5.239665 -1.9009664 -1.4065936 5.2284017 -1.8999536 -1.4376478 5.2160425 -1.8986033 -1.4686034 5.2034993 -1.8972529 -1.500765 5.1952944 -1.8975905 -1.5315475 5.1823773 -1.8962401 -1.5638617 5.1746845 -1.8969153 -1.5955836 5.1649914 -1.8969153 -1.6255456 5.1497178 -1.8948898 -1.6568244 5.138751 -1.8945522 -1.6859697 5.121335 -1.8918515 -1.7227575 5.126955 -1.8979281 -1.7526573 5.111836 -1.8962401 -1.7811939 5.0929885 -1.8932018 -1.8117781 5.0801902 -1.8925266 -1.8432369 5.0698624 -1.8928642 -1.8694056 5.045217 -1.8878005 -1.900992 5.0354128 -1.8884757 -1.9311774 5.0218968 -1.8878005 -1.9598958 5.0046935 -1.885775 -1.9937041 5.000443 -1.8888133 -2.02718 4.9950938 -1.8915139 -2.0603058 4.9886513 -1.893877 -2.0930643 4.9811225 -1.8959025 -2.1239583 4.9690518 -1.8962401 -2.1547832 4.956789 -1.8965777 -2.1878202 4.949501 -1.8989408 -2.2158341 4.9308319 -1.8969153 -2.2480025 4.9214239 -1.8986033 -2.2793462 4.9100995 -1.899616 -2.3102343 4.8977237 -1.9002912 -2.3434963 4.8902473 -1.9029919 -2.3755178 4.8800077 -1.9046799 -2.4058335 4.8661838 -1.9050175 -2.4381802 4.8563781 -1.907043 -2.4683599 4.842165 -1.9073806 -2.5001874 4.8311081 -1.9090685 -2.5271573 4.8106761 -1.907043 -2.5566273 4.7950792 -1.907043 -2.5833139 4.7743344 -1.9050175 -2.6080306 4.7501421 -1.9016416 -2.6334636 4.7274714 -1.8989408 -2.6596429 4.7063069 -1.8969153 -2.6875341 4.6882653 -1.8962401 -2.7171962 4.6733146 -1.8969153 -2.7472544 4.6589866 -1.8979281 -2.7786877 4.6468897 -1.8999536 -2.810076 4.634582 -1.9019791 -2.8424037 4.6236677 -1.9046799 -2.8712182 4.6069388 -1.9050175 -2.9014425 4.5924182 -1.9063678 -2.9275362 4.5713577 -1.9050175 -2.9555304 4.553309 -1.9050175 -2.984448 4.5366611 -1.9056926 -3.0064852 4.5096478 -1.9019791 -3.0251424 4.4778552 -1.8962401 -3.0557508 4.4638696 -1.8982657 -3.0873744 4.4512239 -1.9009664 -3.1146286 4.4321961 -1.9009664 -3.1461322 4.4191365 -1.9036671 -3.1638288 4.3867698 -1.8979281 -3.1840231 4.3581533 -1.893877 -3.2258213 4.3589644 -1.9029919 -3.2587163 4.3473749 -1.9067054 -3.2824845 4.3235493 -1.9050175 -3.314115 4.3100429 -1.9080558 -3.3364506 4.2844276 -1.9056926 -3.3685048 4.2712665 -1.9090685 -3.38114 4.2335997 -1.901304 -3.4147475 4.2222886 -1.9056926 -3.4358201 4.1954303 -1.9029919 -3.4633005 4.1764436 -1.9040047 -3.4785724 4.142859 -1.8982657 -3.4947824 4.1106787 -1.8932018 -0 0 -0 -3.5536211 4.0774183 -1.8979281 -3.5785728 4.0555367 -1.8979281 -3.6027627 4.0328007 -1.8975905 -3.6299651 4.0134115 -1.8989408 -3.6532514 3.9896741 -1.8982657 -3.682142 3.9720156 -1.9006288 -3.7032239 3.9459157 -1.8989408 -3.7286625 3.9244838 -1.899616 -3.7591972 3.9083157 -1.9029919 -3.7863905 3.8885484 -1.9046799 -3.8108397 3.8659127 -1.9050175 -3.8451264 3.8531184 -1.9104189 -3.8693652 3.8301148 -1.9107565 -3.8927937 3.8063009 -1.9107565 -3.9038892 3.7705717 -1.9046799 -3.9303565 3.7497959 -1.9063678 -3.9498661 3.7223811 -1.9046799 -3.969187 3.6948681 -1.9029919 -3.985548 3.6647093 -1.8999536 -4.0072622 3.6395526 -1.899616 -4.0260158 3.611753 -1.8979281 -4.0544415 3.5926006 -1.9009664 -4.0820751 3.5726151 -1.9036671 -4.1067677 3.5499632 -1.9050175 -4.1349154 3.5301991 -1.9080558 -4.157218 3.505368 -1.9083933 -4.1793714 3.4803963 -1.9087309 -4.2028289 3.4564805 -1.9097437 -4.2232275 3.4300337 -1.9094061 -4.246397 3.405823 -1.9104189 -4.2642636 3.3773656 -1.9090685 -4.2871308 3.3528767 -1.9100813 -4.3046432 3.3242068 -1.9087309 -4.3212166 3.2948775 -1.907043 -4.339848 3.2671685 -1.9063678 -4.3462157 3.23037 -1.9002912 -4.3697495 3.2064259 -1.9019791 -4.38553 3.1767919 -1.9002912 -4.3758459 3.1290154 -1.8874629 -4.4049592 3.109164 -1.8918515 -4.44944 3.0998356 -1.9029919 -4.4683762 3.0724759 -1.9029919 -4.489481 3.0465865 -1.9040047 -4.506526 3.0179346 -1.9033295 -4.5249591 2.9902263 -1.9033295 -4.5416446 2.9613769 -1.9026543 -4.5605211 2.9339635 -1.9029919 -4.5800271 2.9069345 -1.9036671 -4.5993733 2.8797765 -1.9043423 -4.6385789 2.8648574 -1.9134572 -4.6335621 2.8226283 -1.9040047 -4.6524081 2.7951138 -1.9046799 -4.6759491 2.7703536 -1.9073806 -4.6920471 2.7411354 -1.907043 -4.7161188 2.7165229 -1.9100813 -4.7277875 2.6847451 -1.9080558 -4.7466354 2.6570647 -1.9090685 -4.7603774 2.6265256 -1.9080558 -4.7739229 2.5959179 -1.907043 -4.7889318 2.5661321 -1.9067054 -4.8045869 2.5366995 -1.9067054 -4.8250718 2.5097778 -1.9087309 -4.8420558 2.4809833 -1.9094061 -4.8613896 2.453347 -1.9110941 -4.8771944 2.4238908 -1.9114317 -4.8936663 2.3947468 -1.9121068 -4.908268 2.3646748 -1.9121068 -4.9192829 2.3329 -1.9107565 -4.945446 2.3082466 -1.9154826 -4.9620819 2.2790372 -1.9164954 -4.97683 2.2489352 -1.916833 -4.9922562 2.2191205 -1.9175082 -5.0057783 2.1884468 -1.9175082 -5.0121942 2.154716 -1.9148074 -5.0322571 2.1268535 -1.9175082 -5.0469508 2.0966582 -1.9181833 -5.0562348 2.0642281 -1.916833 -5.0723 2.0345666 -1.9181833 -5.0838127 2.0030601 -1.9178458 -5.0942516 1.9711493 -1.9171706 -5.1027308 1.938517 -1.9158202 -5.1198211 1.9091444 -1.9178458 -5.1305552 1.8773704 -1.9175082 -5.1455216 1.8471268 -1.9188585 -5.1683006 1.8195844 -1.9232472 -5.1722498 1.7853804 -1.9205465 -5.1857824 1.7545156 -1.9215592 -5.1910896 1.7208856 -1.9195337 -5.2167702 1.6939445 -1.9252727 -5.227066 1.6619031 -1.9252727 -5.2317719 1.6281205 -1.9232472 -5.2362609 1.5943429 -1.9212216 -5.2504559 1.5635273 -1.9229096 -5.2554317 1.5299659 -1.9212216 -5.268342 1.4987209 -1.922572 -5.2819734 1.467627 -1.92426 -5.2917876 1.4354362 -1.9245975 -5.2995853 1.4026985 -1.92426 -5.3053584 1.3694485 -1.9232472 -5.3054457 1.3348022 -1.9202089 -5.3107934 1.301551 -1.9191961 -5.3214264 1.2695956 -1.9202089 -5.3291163 1.23692 -1.9202089 -5.3347692 1.2037834 -1.9195337 -5.3540077 1.1736484 -1.9239224 -5.368474 1.1423424 -1.9266231 -5.3689289 1.1080483 -1.92426 -5.381165 1.0761924 -1.9262855 -5.3848944 1.0426168 -1.9252727 -5.3884149 1.0090362 -1.92426 -5.394505 0.97595447 -1.92426 -5.3966827 0.94218826 -1.9229096 -5.4014339 0.9089008 -1.922572 -5.4059801 0.87559056 -1.9222344 -5.4159012 0.84312791 -1.9239224 -5.4172487 0.80932409 -1.922572 -5.4528618 0.7804727 -1.9337125 -5.4547501 0.74661672 -1.9326997 -5.464829 0.71386492 -1.9347252 -5.4775128 0.68136626 -1.9377635 -5.478786 0.64741248 -1.9367508 -5.4714303 0.61252558 -1.9326997 -5.4807019 0.57953626 -1.9347252 -5.4879012 0.54626966 -1.9360756 -5.486464 0.51214844 -1.9343876 -5.4810634 0.47773826 -1.9313493 -5.4829535 0.44402203 -1.9310117 -5.4808812 0.41001946 -1.9293238 -5.4823551 0.37631714 -1.9289862 -5.4883184 0.34290603 -1.9303366 -5.4921989 0.3093299 -1.9310117 -5.4977541 0.27581352 -1.9323621 -5.5049853 0.24232352 -1.9343876 -5.5063686 0.20854099 -1.9343876 -5.5188341 0.17510968 -1.9384387 -5.5245094 0.14136419 -1.9401267 -5.5290375 0.10753727 -1.9414769 -5.5211225 0.073496327 -1.9384387 -5.5242934 0.039638441 -1.9394515 -5.5187845 0.0057349838 -1.9374259 -5.5130682 -0.02809938 -1.9354004 -5.509027 -0.061884385 -1.93405 -5.5076027 -0.095669694 -1.9337125 -5.5134993 -0.12961629 -1.9360756 -5.5097775 -0.16336055 -1.9350628 -5.5105529 -0.19723204 -1.935738 -5.5111198 -0.23111919 -1.9364132 -5.5142989 -0.26515612 -1.9381011 -5.5078683 -0.29873168 -1.9364132 -5.5049925 -0.33246505 -1.9360756 -5.5019093 -0.36617434 -1.935738 -5.4995589 -0.39992654 -1.935738 -5.4913712 -0.43321991 -1.9337125 -5.484858 -0.46658731 -1.9323621 -5.484704 -0.50048941 -1.9333749 -5.4796562 -0.53395104 -1.9326997 -5.4762769 -0.56756353 -1.9326997 -5.4736271 -0.60125732 -1.9330373 -5.4763799 -0.63559073 -1.9354004 -5.4686394 -0.66872448 -1.93405 -5.4625659 -0.70202696 -1.9333749 -5.4572229 -0.7354058 -1.9330373 -5.456336 -0.76940227 -1.9343876 -5.4496498 -0.80259311 -1.9337125 -5.4455528 -0.83615923 -1.93405 -5.4468265 -0.87059623 -1.9364132 -5.4404535 -0.90384674 -1.9360756 -5.4338775 -0.93705183 -1.935738 -5.4289522 -0.97054142 -1.9360756 -5.4173412 -1.002807 -1.93405 -5.4166336 -1.0370899 -1.9360756 -5.4147849 -1.0712193 -1.9377635 -5.4053435 -1.1038588 -1.9367508 -5.4012318 -1.1375864 -1.9377635 -5.3959899 -1.1711055 -1.9384387 -5.3914585 -1.2048082 -1.9394515 -5.3857989 -1.2382886 -1.9401267 -5.3790159 -1.2715284 -1.9404641 -5.3656244 -1.303177 -1.9384387 -5.3529606 -1.3349367 -1.9367508 -5.3401089 -1.3665903 -1.9350628 -5.3370862 -1.4007642 -1.9370884 -5.3074837 -1.4278628 -1.9293238 -5.3167725 -1.4654028 -1.9360756 -5.2986212 -1.4954423 -1.9326997 -5.2902503 -1.528187 -1.9330373 -5.2699413 -1.5574181 -1.9289862 -5.278307 -1.5951694 -1.935738 -5.2756152 -1.6297486 -1.9384387 -5.2744923 -1.6649212 -1.9418145 -5.257906 -1.695232 -1.9394515 -5.2509818 -1.7286391 -1.9408017 -5.2393837 -1.7605263 -1.9404641 -5.2267017 -1.7920309 -1.9397891 -5.2120538 -1.822825 -1.9384387 -5.1972246 -1.8535067 -1.9370884 -5.1786761 -1.8827889 -1.9343876 -5.1537862 -1.9096245 -1.9293238 -5.1181941 -1.9322369 -1.9202089 -5.075491 -1.9517826 -1.9083933 -5.0292358 -1.9695047 -1.8952274 -4.9409847 -1.9700029 -1.8658572 -4.8869371 -1.9832957 -1.849653 -4.7972422 -1.9812709 -1.8196076 -4.7285867 -1.9869711 -1.7976644 -4.6747584 -1.9981925 -1.7814602 -4.6183825 -2.0077033 -1.7642431 -4.5663719 -2.0185008 -1.7487141 -4.5229907 -2.0325937 -1.7365609 -4.4856029 -2.0489681 -1.7267709 -4.4447703 -2.0633757 -1.7156305 -4.4005256 -2.0757537 -1.7031397 -4.3707285 -2.0945811 -1.696388 -4.3450985 -2.1151812 -1.6913241 -4.2712822 -2.1117704 -1.6670178 -4.2742281 -2.145962 -1.673432 -4.1754379 -2.1285496 -1.6389979 -4.1405625 -2.1428826 -1.6302207 -4.1206694 -2.1647468 -1.62752 -4.1122932 -2.1926467 -1.6295455 -4.0904827 -2.2133591 -1.6261696 -4.0627975 -2.2307158 -1.6204306 -4.0144949 -2.236366 -1.606252 -3.9531648 -2.2340996 -1.5866718 -3.8666987 -2.2166555 -1.5566264 -3.8554664 -2.2417586 -1.5576392 -3.7637959 -2.2194796 -1.5252308 -3.569134 -2.1343348 -1.4496109 -3.588973 -2.1762013 -1.4634521 -3.4913507 -2.1464272 -1.4280053 -3.4397681 -2.1439142 -1.4118011 -3.407449 -2.152915 -1.403699 -3.8959639 -2.4950793 -1.6173923 -3.5939612 -2.3329244 -1.4948478 -3.3129802 -2.1795788 -1.3804054 -3.758522 -2.5058069 -1.578232 -3.0761583 -2.0783393 -1.2895942 -3.0711157 -2.1024919 -1.2929701 -3.0473282 -2.1137865 -1.2882439 -2.9950213 -2.1048462 -1.2710268 -2.9406397 -2.0937071 -1.2527971 -2.9117043 -2.1001494 -1.2457078 -2.9132051 -2.128525 -1.2521219 -2.8176119 -2.0853324 -1.2153249 -2.8025038 -2.1008883 -1.2143121 -2.7805634 -2.1112149 -1.210261 -2.7444232 -2.110451 -1.1997957 -2.6772044 -2.0850358 -1.1751518 -2.6517949 -2.0915153 -1.1694129 -2.6308205 -2.1012862 -1.1656994 -2.6068985 -2.1085112 -1.1606356 -2.5829875 -2.1155219 -1.1555717 -2.5540166 -2.1181135 -1.1481447 -2.540972 -2.1337447 -1.1481447 -2.517791 -2.1407607 -1.1434186 -2.4468195 -2.1064324 -1.1160738 -2.3870113 -2.0805919 -1.093793 -2.3784351 -2.0989356 -1.0958186 -2.3444512 -2.0946779 -1.085691 -2.3315542 -2.1090238 -1.085691 -2.3164868 -2.1213834 -1.0846782 -2.304117 -2.1361971 -1.0850158 -2.2957711 -2.1548033 -1.0873789 -2.2818239 -2.168201 -1.0870413 -2.269834 -2.1834662 -1.0877165 -2.240207 -2.1815934 -1.0796144 -2.2207453 -2.1893513 -1.0765761 -2.2132668 -2.20892 -1.0796144 -2.1943736 -2.2171073 -1.0769137 -2.1754634 -2.2251461 -1.0742129 -2.1630771 -2.2398067 -1.0748881 -2.1473439 -2.250994 -1.0738754 -2.130909 -2.2613873 -1.072525 -2.1169932 -2.2744198 -1.072525 -2.1055465 -2.290138 -1.0738754 -2.097784 -2.3099818 -1.0772513 -2.077913 -2.3165045 -1.0742129 -2.0561683 -2.3207572 -1.0701619 -2.0400298 -2.3312051 -1.0691491 -2.0226095 -2.3401182 -1.0674613 -2.0051565 -2.3489056 -1.0657732 -1.9900992 -2.360445 -1.0654356 -1.9719639 -2.3682721 -1.0634102 -1.9699525 -2.3955934 -1.0704995 -1.9534358 -2.4054439 -1.0694867 -1.9392285 -2.418119 -1.0698243 -1.9196789 -2.4240694 -1.0671237 -1.9018693 -2.4320958 -1.0654356 -1.8880612 -2.4452095 -1.0661108 -1.8735929 -2.4574969 -1.0664485 -1.8567802 -2.4666908 -1.0654356 -1.8438561 -2.4810591 -1.0667861 -1.8347241 -2.5006735 -1.0704995 -1.8127186 -2.502737 -1.0664485 -1.7923999 -2.5069218 -1.0634102 -1.7764411 -2.5171034 -1.0630726 -1.7512766 -2.5140548 -1.056996 -1.7331507 -2.5208752 -1.055308 -1.7239937 -2.5408082 -1.0593591 -1.7130855 -2.5583773 -1.0623974 -1.7056596 -2.5814049 -1.0677987 -1.6918452 -2.5949757 -1.0691491 -1.6723254 -2.5997667 -1.0667861 -1.6694584 -2.6306412 -1.0755633 -1.655284 -2.6440263 -1.0769137 -1.6494178 -2.6709504 -1.084003 -1.6212438 -2.6617286 -1.0759009 -1.6073054 -2.6756604 -1.0775888 -1.5846194 -2.6749449 -1.0732002 -1.5672266 -2.6829922 -1.072525 -1.5450959 -2.6827705 -1.0684739 -1.5272111 -2.6897449 -1.0674613 -1.5106784 -2.6990652 -1.0674613 -1.493634 -2.7074597 -1.0671237 -1.4823899 -2.7264962 -1.0711746 -1.4669665 -2.7380297 -1.0721874 -1.4492595 -2.7453146 -1.0715122 -1.4297807 -2.749145 -1.0694867 -1.4128854 -2.7578664 -1.0694867 -1.3938161 -2.7622821 -1.0677987 -1.3789358 -2.774997 -1.0694867 -1.3693312 -2.7986238 -1.0755633 -1.3554024 -2.8137572 -1.078264 -1.34618 -2.8390303 -1.0850158 -1.3351055 -2.8608837 -1.0904171 -1.3202769 -2.8750093 -1.0927804 -1.3049374 -2.8882029 -1.0948058 -1.2868087 -2.8952951 -1.0944682 -1.2644938 -2.8927872 -1.0904171 -1.2515539 -2.9117332 -1.0948058 -1.2270671 -2.9037516 -1.0887293 -1.2012808 -2.8921027 -1.0813023 -1.1892061 -2.9133623 -1.0867038 -1.1727096 -2.9240987 -1.0880541 -1.1533651 -2.9277363 -1.0867038 -1.1370779 -2.9391472 -1.0883917 -1.1186879 -2.945189 -1.0880541 -1.1012534 -2.9537616 -1.0887293 -1.0895792 -2.978142 -1.095481 -1.0652413 -2.9679391 -1.0890669 -1.0445091 -2.9673166 -1.0863662 -1.0238247 -2.9665518 -1.0836655 -1.0049995 -2.9709947 -1.0829903 -0.9855659 -2.9735315 -1.0816399 -0.96468514 -2.9714656 -1.0786016 -0.94186997 -2.9629765 -1.0732002 -0.92730874 -2.9803839 -1.0775888 -0.91558588 -3.0076284 -1.085691 -0.89845777 -3.0177004 -1.0873789 -0.88545126 -3.0421352 -1.0944682 -0.88248348 -3.1027377 -1.1150612 -0.85889167 -3.0917695 -1.1089846 -0.84212321 -3.1051574 -1.1120229 -0.81992257 -3.0984368 -1.1076342 -0.78418714 -3.0386999 -1.0836655 -0.75794613 -3.0133309 -1.072525 -0.73518401 -3.0005548 -1.0661108 -0.7130444 -2.9894445 -1.0603719 -0.69575256 -2.9983478 -1.0620598 -0.67920727 -3.0108242 -1.065098 -0.66394639 -3.0296462 -1.0704995 -0.64299262 -3.022615 -1.0664485 -0.62557602 -3.0320346 -1.0684739 -0.6054827 -3.0284319 -1.0657732 -0.5870682 -3.0330143 -1.0661108 -0.57849973 -3.0902209 -1.085691 -0.55835408 -3.0872285 -1.0833279 -0.55057573 -3.154577 -1.1066214 -0.53386575 -3.173676 -1.1123605 -0.51182276 -3.1610961 -1.1066214 -0.49125811 -3.1567364 -1.1039207 -0.46520019 -3.1150055 -1.0877165 -0.44714561 -3.1252556 -1.0904171 -0.42770556 -3.1260753 -1.0897421 -0.40888226 -3.1314409 -1.0907547 -0.38896281 -3.1282861 -1.0887293 -0.37042385 -3.1362226 -1.0907547 -0.35337403 -3.1580808 -1.0978441 -0.33329642 -3.1536372 -1.095481 -0.31291342 -3.1453195 -1.0917675 -0.29553446 -3.167799 -1.0991945 -0.27641886 -3.1733036 -1.1005448 -0.2551935 -3.1533611 -1.0927804 -0.2354183 -3.1492355 -1.0907547 -0.21512258 -3.1365345 -1.085691 -0.19563805 -3.1340377 -1.0843406 -0.17635128 -3.1342392 -1.084003 -0.15678599 -3.1286817 -1.0816399 -0.13733703 -3.1239424 -1.0796144 -0.11870169 -3.1388357 -1.0846782 -0.099439919 -3.1395049 -1.0846782 -0.080415882 -3.1494658 -1.0880541 -0.06140196 -3.1658988 -1.093793 -0.041899621 -3.1605687 -1.0917675 -0.022546886 -3.1664138 -1.093793 -0.0031187588 -3.167434 -1.0941306 --0.016335223 -3.1711586 -1.095481 --0.035834793 -3.1747637 -1.0968313 --0.055314101 -3.174484 -1.0968313 --0.075033918 -3.1844361 -1.1005448 --0.094571836 -3.1839159 -1.1005448 --0.11447579 -3.1936233 -1.1042583 --0.13469929 -3.2079082 -1.1096597 --0.15559891 -3.2324071 -1.1187747 --0.1806733 -3.3282027 -1.1535462 --0.19990118 -3.3073003 -1.1464568 --0.219816 -3.3003762 -1.1444314 --0.240881 -3.310231 -1.1484823 --0.26052201 -3.3002453 -1.145444 --0.27957129 -3.2845159 -1.1403803 --0.29877925 -3.2724273 -1.1366668 --0.31930897 -3.2752166 -1.1383547 --0.33969021 -3.2760046 -1.1393675 --0.35834706 -3.2607591 -1.1346413 --0.37823951 -3.2575641 -1.1343037 --0.39890555 -3.260788 -1.1363292 --0.4208245 -3.273217 -1.1417305 --0.44127759 -3.2733717 -1.1427433 --0.46279931 -3.2808554 -1.1464568 --0.48072827 -3.2630539 -1.1410555 --0.72763735 -4.7384486 -1.677483 --0.7552132 -4.7245998 -1.6741072 --0.78372604 -4.7170911 -1.6730944 --0.81297457 -4.7140489 -1.6737696 --0.8422153 -4.710825 -1.6744447 --0.87247461 -4.7129731 -1.6771455 --0.90084565 -4.7047577 -1.6761327 --0.92969656 -4.6991415 -1.6761327 --0.95926553 -4.6970377 -1.677483 --0.98884368 -4.6947474 -1.6788334 --1.0208247 -4.70331 -1.6842347 --1.0459706 -4.6804223 -1.6781582 --1.0727718 -4.6656599 -1.6751199 --1.1013795 -4.6589894 -1.6751199 --1.1319445 -4.6603765 -1.6781582 --1.1605188 -4.6533432 -1.6781582 --1.1913823 -4.6552539 -1.6815341 --1.2208796 -4.6514983 -1.6828845 --1.23204 -4.579381 -1.6589156 --1.1403437 -4.1370544 -1.497211 --1.2656498 -4.4841957 -1.629208 --1.334143 -4.6183267 -1.6822093 --1.3600551 -4.6019292 -1.679171 --1.3890831 -4.5962005 -1.6801838 --1.418092 -4.5902886 -1.6811965 --1.4476472 -4.5859895 -1.6828845 --1.4769142 -4.5806041 -1.6842347 --1.5052867 -4.57235 -1.6845723 --1.5324144 -4.5603504 -1.6835597 --1.5563996 -4.5392866 -1.679171 --1.5848441 -4.5314283 -1.6798462 --1.6151476 -4.5287113 -1.6825469 --1.6454774 -4.5257931 -1.6852475 --1.6784478 -4.5297341 -1.6906489 --1.7075398 -4.5228729 -1.6919993 --1.7389752 -4.521975 -1.6957128 --1.7704636 -4.5208611 -1.6994263 --1.8009582 -4.5169082 -1.702127 --1.2025824 -2.9627969 -1.1049335 --1.2203798 -2.9544921 -1.1045959 --1.8655654 -4.4396019 -1.6852475 --1.89721 -4.4384584 -1.6892986 --1.927785 -4.4345031 -1.6923369 --1.9576218 -4.428618 -1.6947 --1.9940169 -4.4371295 -1.7028022 --2.008692 -4.3974113 -1.6919993 --1.5700114 -3.3817716 -1.2953333 --1.5835048 -3.3567498 -1.2892566 --1.5959371 -3.3299928 -1.2825049 --1.6159276 -3.3192911 -1.2821673 --1.6379324 -3.3126888 -1.2835176 --1.6603392 -3.3067827 -1.2852056 --1.6840175 -3.303242 -1.2879063 --1.7180965 -3.3195992 -1.2987092 --1.7471867 -3.3256614 -1.3054608 --2.2546384 -4.2285829 -1.6768079 --2.2783027 -4.2105293 -1.6751199 --2.3004715 -4.1898694 -1.6724192 --2.3352969 -4.192122 -1.679171 --2.3605123 -4.1768947 -1.6788334 --2.3879693 -4.1655989 -1.6801838 --2.4167953 -4.1565647 -1.6825469 --2.44082 -4.1392245 -1.6815341 --2.4656887 -4.1233621 -1.6811965 --2.4899669 -4.1065454 -1.6805214 --2.5175817 -4.0951996 -1.6822093 --2.5396752 -4.0748816 -1.6801838 --2.5646303 -4.0592217 -1.6801838 --2.5889814 -4.0426164 -1.6798462 --2.6137376 -4.0266547 -1.6798462 --2.6383955 -4.0105414 -1.6798462 --2.6634762 -3.99506 -1.6801838 --2.6705523 -3.9529014 -1.6690433 --2.7021997 -3.9473157 -1.6737696 --2.7220778 -3.924473 -1.6710688 --2.7461066 -3.9076967 -1.6710688 --2.7596607 -3.8762031 -1.6646546 --2.79055 -3.8691225 -1.6690433 --2.8075752 -3.8428061 -1.6649922 --2.8277421 -3.8209667 -1.6629667 --2.8449242 -3.7952585 -1.6592532 --2.8624666 -3.7702334 -1.6558774 --2.8769405 -3.741405 -1.6508136 --2.3030503 -2.9572058 -1.3024225 --2.321152 -2.9430189 -1.3024225 --2.3362296 -2.9250433 -1.3007346 --2.9809136 -3.6857772 -1.6582404 --3.001684 -3.6652324 -1.6572278 --3.0211129 -3.6431224 -1.6555398 --3.0440152 -3.6252375 -1.6558774 --3.0625441 -3.6021883 -1.6538519 --3.0815189 -3.579762 -1.6521639 --3.1077547 -3.5657544 -1.6545271 --3.130198 -3.5473242 -1.6548647 --3.1531591 -3.5294549 -1.6555398 --3.1690738 -3.5037577 -1.6525015 --3.1917841 -3.4856353 -1.6531767 --3.210552 -3.4632237 -1.6518263 --3.2323856 -3.4441454 -1.6521639 --3.2528093 -3.4235644 -1.6518263 --3.2776694 -3.4076121 -1.6538519 --3.3123057 -3.4015999 -1.6609412 --3.3093281 -3.3570774 -1.648788 --3.3285346 -3.3353758 -1.6481129 --3.3422482 -3.3082671 -1.644737 --3.373925 -3.2988853 -1.650476 --3.386656 -3.2709274 -1.6467625 --3.4107485 -3.2539845 -1.648788 --3.438185 -3.2400973 -1.6525015 --3.459379 -3.2202227 -1.6531767 --3.47838 -3.1982987 -1.6528391 --3.4979389 -3.1768954 -1.6528391 --3.5299773 -3.166688 -1.6589156 --3.5514545 -3.1468418 -1.6599284 --3.5714047 -3.1256111 -1.660266 --3.5983486 -3.1104105 -1.6639795 --3.6187978 -3.0894952 -1.6646546 --3.6427233 -3.0714805 -1.6670178 --3.671627 -3.0575051 -1.671744 --3.6954072 -3.0391045 -1.6741072 --3.718369 -3.0199337 -1.6761327 --3.7346261 -2.9952943 -1.6751199 --3.7521968 -2.9717383 -1.6747823 --3.7711017 -2.9492393 -1.6751199 --3.7868922 -2.9243186 -1.6741072 --3.8040156 -2.9004567 -1.6737696 --3.8255007 -2.8798921 -1.6754575 --3.8544309 -2.8647885 -1.6805214 --3.8787661 -2.8460965 -1.6835597 --3.8984432 -2.8239002 -1.6845723 --3.9218221 -2.8043072 -1.687273 --3.9481828 -2.7867048 -1.6913241 --3.9737027 -2.7683463 -1.6950376 --3.9921653 -2.7449787 -1.6957128 --4.0011449 -2.7151453 -1.6923369 --4.0232038 -2.6942105 -1.6947 --4.0459414 -2.6736259 -1.6974007 --4.0819817 -2.6616049 -1.7058405 --4.1045685 -2.640583 -1.7085412 --4.133409 -2.6234198 -1.7139425 --4.1693726 -2.610498 -1.7223822 --4.1877141 -2.58635 -1.723395 --4.2002892 -2.5586469 -1.7220447 --4.2352738 -2.544462 -1.7301468 --4.2621441 -2.5251451 -1.7348731 --4.2799959 -2.50037 -1.7358857 --4.3074918 -2.4811099 -1.7409496 --4.3300009 -2.4588168 -1.7439879 --4.3499341 -2.4349611 -1.7460134 --4.3672652 -2.4095888 -1.7470262 --4.384449 -2.3840957 -1.7480389 --4.4114394 -2.3638179 -1.7531028 --4.4375138 -2.342859 -1.757829 --4.459321 -2.3194969 -1.7608672 --4.4810085 -2.2959549 -1.7639056 --4.5008941 -2.2713859 -1.7662687 --4.5164323 -2.2445641 -1.7669439 --4.5377288 -2.2205338 -1.7699822 --4.5690761 -2.2012298 -1.7770715 --4.591001 -2.1771872 -1.7804474 --4.5181274 -2.1087606 -1.746351 --4.5172958 -2.0747113 -1.7409496 --4.5496693 -2.0558712 -1.7487141 --4.5897222 -2.0401533 -1.759517 --4.6219902 -2.0206268 -1.7672814 --4.662838 -2.004499 -1.7784219 --4.7114639 -1.9912441 -1.7926006 --4.759232 -1.9771061 -1.8064417 --4.8078742 -1.9628123 -1.8206204 --4.8757381 -1.9557062 -1.842226 --4.9533272 -1.9516367 -1.8675451 --5.0310469 -1.9466877 -1.8928642 --5.1044908 -1.9391857 -1.9164954 --5.1648002 -1.9259207 -1.9350628 --5.2118783 -1.9071349 -1.9485663 --5.2447443 -1.8827538 -1.9566684 --5.2624125 -1.8527259 -1.9590316 --5.2888074 -1.8256239 -1.9647706 --5.3079343 -1.7958537 -1.9678088 --5.3242145 -1.7650286 -1.9698343 --5.3430014 -1.7349435 -1.9728726 --5.3517523 -1.7015563 -1.9721975 --5.3674846 -1.6703651 -1.974223 --5.3722301 -1.6357539 -1.9721975 --5.3830676 -1.6030284 -1.9725351 --5.3855724 -1.567863 -1.9698343 --5.3969021 -1.5353035 -1.9705095 --5.4007792 -1.5006474 -1.968484 --5.4135194 -1.4684666 -1.9698343 --5.4105983 -1.4320903 -1.9654458 --5.4147267 -1.3976879 -1.9637578 --5.416811 -1.3628293 -1.9613947 --5.4387846 -1.3329287 -1.9664584 --5.4422832 -1.2984393 -1.9647706 --5.4483137 -1.2645957 -1.9640954 --5.4550524 -1.2309345 -1.9637578 --5.4625025 -1.1974398 -1.9637578 --5.4706678 -1.1640959 -1.9640954 --5.4841604 -1.1318389 -1.9664584 --5.4983859 -1.0996447 -1.9691592 --5.5096507 -1.0667815 -1.9708471 --5.5244193 -1.0345148 -1.9738854 --5.5334415 -1.001101 -1.9748982 --5.543189 -0.96777749 -1.9762485 --5.5499511 -0.93390316 -1.9765861 --5.561152 -0.90073514 -1.9786117 --5.561924 -0.86587125 -1.9769237 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --5.2559419 1.0406026 -1.9463221 --5.267828 1.0765911 -1.9532804 --5.2574534 1.1081195 -1.9518888 --5.2450585 1.1391627 -1.9498012 --5.2333956 1.1703004 -1.9480617 --5.2252026 1.2021794 -1.9477137 --5.2186403 1.234434 -1.9480617 --5.2155223 1.2675397 -1.9498012 --5.2076468 1.2995178 -1.9498012 --5.2041159 1.3326106 -1.9515408 --5.1958413 1.3645173 -1.9515408 --5.1828446 1.3951533 -1.9498012 --5.1696677 1.4256812 -1.9480617 --5.156312 1.4561 -1.9463221 --5.1373734 1.4848455 -1.942495 --5.1227722 1.5147437 -1.9404075 --5.1268415 1.5502211 -1.9456263 --5.1235027 1.5835888 -1.9480617 --5.108326 1.613301 -1.9459741 --5.1090369 1.6480709 -1.9501492 --5.0792394 1.6729318 -1.942495 --5.0626588 1.7019733 -1.9400595 --5.0397062 1.7287438 -1.9351887 --5.0077672 1.7521986 -1.9268386 --4.9889755 1.7800554 -1.9237075 --0 0 -0 --4.9887309 1.8492953 -1.9324054 --5.0290318 1.8994259 -1.9529325 --5.019032 1.9309213 -1.9536283 --5.0088353 1.9623655 -1.9543241 --4.9984417 1.9937574 -1.9550201 --4.914022 1.9951017 -1.9261428 --4.9094853 2.0284398 -1.9292741 --4.9081812 2.063251 -1.933797 --4.904048 2.0970161 -1.9372762 --4.8936677 2.1281896 -1.9383199 --4.8873763 2.1612113 -1.9411033 --4.8842831 2.1957741 -1.9452783 --4.8519602 2.2171259 -1.9376241 --4.8297629 2.2429047 -1.934145 --4.8235397 2.2760997 -1.9372762 --4.790041 2.2963278 -1.9292741 --4.7826033 2.3289609 -1.9320575 --4.7606606 2.3545203 -1.9289262 --4.7519879 2.3866334 -1.9313616 --4.751451 2.4229896 -1.9372762 --4.7314997 2.4495113 -1.9351887 --4.713891 2.4771881 -1.934145 --4.6986027 2.5060654 -1.934145 --4.6889081 2.5379734 -1.9365804 --4.6650305 2.5621812 -1.9331012 --4.6451273 2.5884745 -1.9313616 --4.6275253 2.6160045 -1.9306657 --4.6105733 2.6438828 -1.9303179 --4.5829196 2.6655214 -1.925447 --4.5737448 2.69788 -1.9285783 --4.5619316 2.7287817 -1.9306657 --4.5459037 2.7572083 -1.9310137 --4.5360866 2.7894709 -1.934145 --4.5212717 2.8187399 -1.9351887 --4.5023065 2.8454268 -1.9344928 --4.4879198 2.8750224 -1.9358846 --4.4670496 2.9004626 -1.9344928 --4.443687 2.9242086 -1.9320575 --4.4233212 2.9498587 -1.9310137 --4.4012547 2.9743185 -1.9292741 --4.3829217 3.0012681 -1.9292741 --4.3628836 3.0270355 -1.9285783 --4.3442278 3.0537486 -1.9285783 --4.3254085 3.0803468 -1.9285783 --4.3071866 3.1073778 -1.9289262 --4.2850118 3.1315343 -1.9275346 --4.2732506 3.1633475 -1.9310137 --4.2515101 3.1878202 -1.9299699 --4.2385883 3.2189517 -1.9331012 --4.2053838 3.234607 -1.9268386 --4.1898942 3.2638078 -1.9289262 --4.1719966 3.2911975 -1.9299699 --4.1553855 3.3196609 -1.9317095 --4.1378531 3.3474548 -1.9331012 --4.1223116 3.376941 -1.9355366 --4.1051207 3.405165 -1.9372762 --4.0870209 3.4327018 -1.9386679 --4.0665956 3.4583223 -1.9390157 --4.0460091 3.4838212 -1.9393637 --4.0245566 3.5085814 -1.9393637 --4.0022502 3.5325892 -1.9390157 --3.9798002 3.5564551 -1.9386679 --3.9446967 3.5688543 -1.9320575 --3.9289451 3.5986917 -1.9351887 --3.9074774 3.6233692 -1.9355366 --3.8838046 3.6459932 -1.9348408 --3.8538861 3.6626492 -1.9310137 --3.8347173 3.6894779 -1.9327533 --3.8187215 3.7194808 -1.9362324 --3.7831461 3.7303324 -1.9296221 --3.7588592 3.7521501 -1.9289262 --3.7331285 3.7724771 -1.9275346 --3.7040141 3.7892771 -1.9244033 --3.6735318 3.8045127 -1.9205762 --3.646884 3.8235888 -1.9188366 --3.6207833 3.8431635 -1.9174449 --3.6022422 3.8707995 -1.9202282 --3.5733492 3.8873067 -1.9174449 --3.55006 3.9098535 -1.9177928 --3.5385187 3.9455245 -1.9247512 --3.5142429 3.9671621 -1.9247512 --3.4818113 3.979476 -1.9202282 --3.4561024 3.9993463 -1.9195324 --3.4296722 4.0183372 -1.9184886 --3.4061599 4.0407395 -1.9191844 --3.3837011 4.064446 -1.9205762 --3.3533411 4.0786128 -1.9174449 --3.3371139 4.1100311 -1.9226637 --3.3153503 4.134819 -1.9247512 --3.2835171 4.1469975 -1.9209241 --3.2551234 4.163373 -1.9191844 --3.2283707 4.1817832 -1.9184886 --3.1992419 4.1970391 -1.9164011 --3.1723018 4.2150917 -1.9157053 --3.1480558 4.2367353 -1.9167491 --3.1364138 4.2756295 -1.925795 --3.1002252 4.2811232 -1.9195324 --3.0640876 4.286335 -1.9132699 --3.0496173 4.3219099 -1.9209241 --3.0251837 4.3436184 -1.9223157 --2.9990056 4.3628716 -1.9226637 --2.9642868 4.3695517 -1.9174449 --2.9389839 4.3899956 -1.9184886 --2.9068263 4.4001226 -1.9150095 --2.8782375 4.4155192 -1.9139657 --2.8485553 4.4291534 -1.9122262 --2.8233335 4.4497156 -1.9136178 --2.7984636 4.4709291 -1.9153574 --2.7704854 4.4872184 -1.9150095 --2.7453375 4.5081372 -1.9167491 --2.7132816 4.5176635 -1.9136178 --2.6864657 4.53584 -1.9143137 --2.657166 4.5498095 -1.9132699 --2.6277959 4.5635905 -1.9122262 --2.6025207 4.5845208 -1.9143137 --2.5743415 4.6004033 -1.9143137 --2.5487814 4.6210384 -1.9164011 --2.5176938 4.6316481 -1.9143137 --2.4892271 4.6470089 -1.9143137 --2.4619789 4.6646829 -1.9153574 --2.4341755 4.681365 -1.9160533 --2.4054053 4.6962128 -1.9160533 --2.3773887 4.7125583 -1.9167491 --2.3463435 4.7228584 -1.9150095 --2.3164968 4.7354817 -1.9143137 --2.2853639 4.7453823 -1.9125741 --2.2554009 4.7576213 -1.9118782 --2.2249775 4.7688217 -1.9108344 --2.1960657 4.783236 -1.9111824 --2.1674466 4.7983298 -1.9118782 --2.1368222 4.8089681 -1.9108344 --2.1087756 4.8254256 -1.9122262 --2.0776479 4.8348284 -1.9108344 --2.0483074 4.8483491 -1.9111824 --2.019598 4.8634238 -1.9122262 --1.9914889 4.880065 -1.9139657 --1.9608104 4.8904519 -1.9132699 --1.9297363 4.8997741 -1.9122262 --1.8979454 4.9071503 -1.9104866 --1.8681326 4.91958 -1.9108344 --1.8382387 4.9318285 -1.9111824 --1.8089086 4.9456563 -1.9122262 --1.7794778 4.9593101 -1.9132699 --1.7502587 4.9736733 -1.9146615 --1.7175688 4.9781146 -1.9122262 --1.6827893 4.9761252 -1.9073553 --1.6539928 4.9916968 -1.9094428 --1.6169703 4.982132 -1.9017886 --1.5928962 5.0125117 -1.9097908 --1.5587709 5.0114479 -1.9056157 --1.5285374 5.0227118 -1.9063115 --1.4982244 5.0337934 -1.9070073 --1.468618 5.0473928 -1.908747 --1.4391574 5.0617204 -1.9108344 --1.4078215 5.0695519 -1.9104866 --1.3786497 5.0853343 -1.9132699 --1.3478998 5.0955105 -1.9139657 --1.3173109 5.1064086 -1.9150095 --1.2854971 5.112577 -1.9143137 --1.2538798 5.1194577 -1.9139657 --1.222661 5.1279669 -1.9143137 --1.1899036 5.1298923 -1.9122262 --1.1586108 5.1380115 -1.9125741 --1.127664 5.1477718 -1.9136178 --1.0981994 5.1646814 -1.9174449 --1.0668671 5.1731591 -1.9181408 --1.0349215 5.1786885 -1.9177928 --1.0024147 5.1812596 -1.9164011 --0.97215432 5.1956067 -1.9195324 --0.93992323 5.1996288 -1.9188366 --0.90719664 5.2006803 -1.917097 --0.87433738 5.2006011 -1.9150095 --0.84151328 5.200315 -1.912922 --0.8093012 5.2035275 -1.9122262 --0.77749586 5.2093229 -1.9125741 --0.74485493 5.2093549 -1.9108344 --0.7122429 5.2091823 -1.9090949 --0.68014544 5.2125249 -1.908747 --0.64549518 5.1952009 -1.9007449 --0.61360592 5.1990638 -1.9007449 --0.58179742 5.2036629 -1.9010928 --0.5494644 5.2034054 -1.8997011 --0.51928455 5.2244048 -1.9063115 --0.48426729 5.1957536 -1.8944824 --0.45408008 5.2182417 -1.9017886 --0.42235434 5.2246675 -1.9031802 --0.39021885 5.2262259 -1.9028324 --0.35948509 5.2481642 -1.9101386 --0.32628813 5.2343636 -1.904224 --0.29489785 5.249372 -1.9090949 --0.26272938 5.2520189 -1.9094428 --0.23008977 5.2441659 -1.9059637 --0.19780241 5.2426686 -1.9049199 --0.16507183 5.2259793 -1.8983095 --0.13331006 5.2390776 -1.9028324 --0.10121485 5.242609 -1.9038761 --0.06905704 5.2440686 -1.904224 --0.036955379 5.2556438 -1.9083991 --0.0047034887 5.2510839 -1.9066595 -0.027357973 5.221951 -1.895874 -0.059714004 5.2488713 -1.9059637 -0.091370799 5.217473 -1.8944824 -0.12338289 5.216814 -1.8944824 -0.15539034 5.2159586 -1.8944824 -0.18857752 5.2476988 -1.9066595 -0.22029778 5.2352028 -1.9024844 -0.25241622 5.2337527 -1.9024844 -0.28432074 5.2283607 -1.9010928 -0.31724885 5.2405548 -1.9063115 -0.34939831 5.2385097 -1.9063115 -0.38167131 5.2381372 -1.9070073 -0.41447136 5.2441077 -1.9101386 -0.44664082 5.241466 -1.9101386 -0.47896451 5.2404943 -1.9108344 -0.51101929 5.2365236 -1.9104866 -0.54314035 5.2332892 -1.9104866 -0.57421398 5.2205396 -1.9070073 -0.60634416 5.2178493 -1.9073553 -0.63823473 5.2131 -1.9070073 -0.67056924 5.211875 -1.9080511 -0.70203394 5.2039461 -1.9066595 -0.73382026 5.1986122 -1.9063115 -0.76433516 5.1847372 -1.9028324 -0.79584849 5.1780963 -1.9021366 -0.82671589 5.1675611 -1.900049 -0.85840786 5.1623912 -1.900049 -0.8899079 5.1561031 -1.8997011 -0.92285097 5.1579285 -1.9024844 -0.95499498 5.1549344 -1.9035282 -0.98678374 5.1498981 -1.9038761 -1.0183643 5.1437464 -1.9038761 -1.0484033 5.130053 -1.9010928 -1.0783125 5.1161852 -1.8983095 -1.1092862 5.1076403 -1.8976136 -1.1399908 5.0979929 -1.8965698 -1.1706188 5.088161 -1.8955261 -1.2031132 5.0863566 -1.8976136 -1.2349646 5.0816112 -1.8986573 -1.26544 5.0712094 -1.8976136 -1.2979292 5.0687985 -1.8997011 -1.3304362 5.0661793 -1.9017886 -1.3605211 5.0542994 -1.9003969 -1.3940024 5.054894 -1.9038761 -1.4265224 5.0516582 -1.9059637 -1.4582734 5.0455122 -1.9070073 -1.4886726 5.0346713 -1.9063115 -1.5195367 5.0254421 -1.9063115 -1.5492355 5.0124412 -1.9049199 -1.5785494 4.9983711 -1.9031802 -1.6089011 4.987699 -1.9028324 -1.6403552 4.9804044 -1.9038761 -1.6690899 4.9649143 -1.9017886 -1.703784 4.9669938 -1.9066595 -1.735778 4.9608703 -1.9083991 -1.7630322 4.9412971 -1.9049199 -1.7923563 4.927743 -1.9038761 -1.8215804 4.9140158 -1.9028324 -1.8507036 4.9001155 -1.9017886 -1.879388 4.8851676 -1.9003969 -1.910354 4.8761625 -1.9014407 -1.9378049 4.858254 -1.8990053 -1.9675782 4.8462725 -1.8990053 -1.996919 4.8332419 -1.8986573 -2.0269012 4.8217621 -1.8990053 -2.0549736 4.8057866 -1.8976136 -2.0877893 4.8008242 -1.9007449 -2.1160693 4.7853513 -1.8997011 -2.144238 4.7697124 -1.8986573 -2.1746337 4.7590237 -1.8997011 -2.2033985 4.7447405 -1.8993531 -2.2360725 4.7387614 -1.9024844 -2.2679453 4.7308693 -1.9049199 -2.3018584 4.7269778 -1.9090949 -2.3299875 4.7110844 -1.9083991 -2.3647437 4.708427 -1.9132699 -2.3948679 4.6963339 -1.9143137 -2.4249325 4.6840482 -1.9153574 -2.4514463 4.6649318 -1.9136178 -2.4751682 4.6407042 -1.9097908 -2.5013642 4.6213074 -1.9080511 -2.52877 4.604229 -1.9073553 -2.554234 4.5837131 -1.9052678 -2.5804651 4.5646901 -1.9038761 -2.6140234 4.5585289 -1.9080511 -2.6329858 4.5270076 -1.9014407 -2.6640489 4.5164185 -1.9038761 -2.690748 4.4983783 -1.9031802 -2.715867 4.4777761 -1.9014407 -2.7526252 4.4761992 -1.9080511 -2.7790465 4.457634 -1.9073553 -2.8163667 4.4563465 -1.9143137 -2.8451748 4.4413495 -1.9153574 -2.866755 4.4151602 -1.9115303 -2.8927608 4.3959208 -1.9108344 -2.9191589 4.3773084 -1.9104866 -2.9391363 4.3492179 -1.9059637 -2.9620581 4.3256879 -1.9035282 -2.9858713 4.3035808 -1.9017886 -3.0111427 4.2836452 -1.9010928 -3.0362818 4.2635612 -1.9003969 -3.0612881 4.2433305 -1.8997011 -3.0911405 4.2297645 -1.9021366 -3.1203835 4.2152381 -1.904224 -3.1495645 4.2005124 -1.9063115 -3.1752789 4.181108 -1.9063115 -3.2020175 4.1630321 -1.9070073 -3.2303827 4.1470041 -1.908747 -3.2476358 4.1168017 -1.9038761 -3.2757616 4.1004586 -1.9056157 -3.2926025 4.0700793 -1.9007449 -0 0 -0 -3.3440969 4.0315318 -1.9017886 -3.3772147 4.0209861 -1.9066595 -3.4115436 4.0116129 -1.9122262 -3.4434369 3.9991283 -1.9164011 -3.4697587 3.9800441 -1.9174449 -3.499079 3.9643013 -1.9202282 -3.5183389 3.9371653 -1.9174449 -3.5298479 3.9016013 -1.9104866 -3.5423203 3.8674273 -1.904224 -3.5634332 3.84287 -1.9028324 -3.5940056 3.82845 -1.9066595 -3.6219509 3.8110816 -1.9090949 -3.6621711 3.8063481 -1.9181408 -3.6710632 3.7690337 -1.9104866 -3.6947789 3.7471049 -1.9108344 -3.7143886 3.7210467 -1.9090949 -3.7411499 3.7021413 -1.9111824 -3.7591014 3.67453 -1.908747 -3.7822516 3.6520464 -1.9090949 -3.8025534 3.6268296 -1.9080511 -3.8165452 3.5957162 -1.9038761 -3.8309853 3.5652068 -1.900049 -3.8500276 3.5390959 -1.8986573 -3.8758359 3.5191863 -1.9007449 -3.8966582 3.4947126 -1.9003969 -3.91873 3.4713588 -1.9007449 -3.9484246 3.4546549 -1.9049199 -3.9603243 3.4223957 -1.9003969 -3.9983668 3.4126348 -1.908747 -4.0249667 3.3928697 -1.9115303 -4.0449886 3.3675096 -1.9111824 -4.0612292 3.3390551 -1.9090949 -4.0750895 3.3087559 -1.9059637 -4.0887308 3.2784123 -1.9028324 -4.1087694 3.2532628 -1.9028324 -4.1345634 3.2326088 -1.9056157 -4.1572895 3.2094698 -1.9070073 -4.1880903 3.1924236 -1.9122262 -4.2068505 3.1661022 -1.9118782 -4.2231874 3.1379938 -1.9104866 -4.2325335 3.1048152 -1.9059637 -4.2628965 3.0870321 -1.9111824 -4.2779436 3.0580921 -1.9094428 -4.3019905 3.035568 -1.9118782 -4.3236132 3.0112569 -1.9132699 -4.3420086 2.9846711 -1.9132699 -4.3625684 2.9595513 -1.9143137 -4.3759704 2.929599 -1.9122262 -4.3954287 2.9037266 -1.912922 -4.4210176 2.88182 -1.9164011 -4.4307308 2.8495693 -1.912922 -4.4425898 2.8188145 -1.9104866 -4.468545 2.7969718 -1.9143137 -4.4800377 2.7660542 -1.9118782 -4.4913197 2.735101 -1.9094428 -4.5039983 2.7050786 -1.9077032 -4.518898 2.6764364 -1.9070073 -4.5319967 2.6467681 -1.9056157 -4.5497766 2.6198459 -1.9063115 -4.5747356 2.5969689 -1.9101386 -4.58322 2.5647311 -1.9070073 -4.6021547 2.5383711 -1.9083991 -4.6168199 2.5096376 -1.9080511 -4.6321316 2.481262 -1.9080511 -4.6489277 2.4536679 -1.908747 -4.6630635 2.424664 -1.9083991 -4.6820259 2.3981426 -1.9101386 -4.6991639 2.3706353 -1.9111824 -4.7136216 2.3417571 -1.9111824 -4.7405353 2.3189676 -1.9164011 -4.7529855 2.2890234 -1.9157053 -4.77033 2.2614222 -1.917097 -4.7764688 2.2285435 -1.9139657 -4.7960176 2.2019305 -1.9164011 -4.7957664 2.1662893 -1.9108344 -4.8063979 2.1356807 -1.9097908 -4.8194118 2.106149 -1.9097908 -4.838274 2.0791278 -1.9122262 -4.8552589 2.0512249 -1.9139657 -4.8712173 2.0228324 -1.9153574 -4.8948226 1.9975076 -1.9198804 -4.904376 1.9663898 -1.9188366 -4.9364142 1.9441574 -1.9268386 -4.9220161 1.9036915 -1.9164011 -4.9336042 1.8734547 -1.9164011 -4.9511566 1.8454381 -1.9188366 -4.957984 1.8134145 -1.917097 -4.9672527 1.7823257 -1.9164011 -4.9834018 1.7536799 -1.9184886 -4.9967275 1.723986 -1.9195324 -5.0063233 1.6929941 -1.9191844 -5.015727 1.6619493 -1.9188366 -5.0302892 1.6325881 -1.9205762 -5.048254 1.6042459 -1.9237075 -5.0553164 1.5724055 -1.9226637 -5.0657663 1.5416297 -1.9230115 -5.0715361 1.5094488 -1.9216199 -5.0789018 1.4777786 -1.9209241 -5.0923829 1.4478681 -1.9226637 -5.1020741 1.4168453 -1.9230115 -5.1133866 1.3862482 -1.9240553 -5.1190767 1.3541284 -1.9230115 -5.1281972 1.3229268 -1.9233595 -5.1280346 1.2893801 -1.9202282 -5.1413136 1.2592278 -1.9223157 -5.1434712 1.2263541 -1.9202282 -5.1673388 1.1985807 -1.9264908 -5.1736813 1.166646 -1.9261428 -5.1816583 1.1350794 -1.9264908 -5.1949449 1.1046275 -1.9289262 -5.1988702 1.0721636 -1.9278824 -5.2025928 1.0396932 -1.9268386 -5.2005897 1.0061502 -1.9237075 -5.2066655 0.97422105 -1.9237075 -5.2097774 0.94175547 -1.9226637 -5.2200761 0.91057569 -1.9244033 -5.2264895 0.87868398 -1.9247512 -5.2410378 0.84809393 -1.9282304 -5.2396579 0.81491238 -1.925795 -5.2436323 0.78260893 -1.925447 -5.2566886 0.75161237 -1.9285783 -5.2760639 0.7213726 -1.934145 -5.2831798 0.689349 -1.9351887 -5.2984748 0.65830374 -1.9393637 -5.3014836 0.62567085 -1.9390157 -5.3052225 0.59312975 -1.9390157 -5.3050327 0.56017339 -1.9376241 -5.2962418 0.52640897 -1.9331012 -5.2937708 0.49338111 -1.9310137 -5.2957644 0.46080878 -1.9306657 -5.3078375 0.4290593 -1.934145 -5.3178496 0.39703974 -1.9369283 -5.318315 0.36427483 -1.9362324 -5.3120284 0.3311123 -1.9331012 -5.313024 0.29845968 -1.9327533 -5.3147554 0.26585397 -1.9327533 -5.3172231 0.23327912 -1.9331012 -5.3063755 0.20019202 -1.9285783 -5.3224969 0.16809922 -1.934145 -5.3487329 0.13607617 -1.9435388 -5.3400941 0.10307549 -1.9400595 -5.3368759 0.070258789 -1.9386679 -5.3447065 0.037562106 -1.9414512 -5.3392115 0.0047630905 -1.9393637 -5.3428903 -0.028018259 -1.9407554 -5.3154311 -0.060485832 -1.9306657 -5.3187094 -0.093166061 -1.9320575 -5.3302221 -0.12609015 -1.9365804 -5.3237257 -0.15862466 -1.9344928 -5.3329582 -0.19166006 -1.9383199 -5.3391752 -0.22469585 -1.9411033 -5.3470602 -0.25790587 -1.9445825 -5.3481855 -0.29086331 -1.9456263 -5.3406854 -0.32333252 -1.9435388 -5.3386006 -0.35609627 -1.9435388 -5.3363152 -0.38884661 -1.9435388 -5.3254175 -0.42091566 -1.9404075 -5.3189983 -0.45326465 -1.9390157 -5.3254533 -0.48674825 -1.942495 -5.3158345 -0.5187766 -1.9400595 -5.3125515 -0.55138421 -1.9400595 -5.3062725 -0.58366287 -1.9390157 -5.297935 -0.61566848 -1.9372762 -5.2875438 -0.64736545 -1.9348408 -5.3011389 -0.68207401 -1.9414512 -5.293138 -0.71408617 -1.9400595 -5.2867999 -0.74628836 -1.9393637 -5.2895412 -0.779809 -1.942147 -5.2883635 -0.81282079 -1.9435388 -5.2823505 -0.84510601 -1.9431908 -5.2816896 -0.87827188 -1.9449304 -5.2808204 -0.91146147 -1.9466699 -5.2566719 -0.94054037 -1.9397117 -5.244349 -0.97158015 -1.9372762 -5.243813 -1.0048004 -1.9393637 -5.2366295 -1.0367746 -1.9390157 -5.2310882 -1.0690744 -1.9393637 -5.2280989 -1.1019258 -1.9407554 -5.2249041 -1.1347808 -1.942147 -5.224247 -1.1682523 -1.9445825 -5.2078443 -1.1981817 -1.9411033 -5.2086048 -1.2320579 -1.9442346 -5.20368 -1.2646589 -1.9452783 -5.1985507 -1.2972459 -1.9463221 -5.1859527 -1.3279554 -1.9445825 -5.1767998 -1.3595124 -1.9442346 -5.1710763 -1.3919828 -1.9452783 -5.1479783 -1.4196947 -1.9397117 -5.138268 -1.4510003 -1.9393637 -5.1454792 -1.4871901 -1.9456263 -5.1236711 -1.5150098 -1.9407554 -5.1160736 -1.5469625 -1.9414512 -5.0993199 -1.5761087 -1.9386679 -5.1011744 -1.6110408 -1.9431908 -5.1018996 -1.6457669 -1.9473659 -5.0872531 -1.6755731 -1.9456263 -5.0795422 -1.7076532 -1.9466699 -5.0698552 -1.7390929 -1.9470179 -5.0582042 -1.7698584 -1.9466699 -5.0446005 -1.7999159 -1.9456263 -5.0325804 -1.8305144 -1.9452783 -5.0168586 -1.8597291 -1.9435388 -4.9930754 -1.8858367 -1.9386679 -4.971786 -1.9127331 -1.9348408 -4.9337707 -1.932938 -1.9244033 -4.8939538 -1.9520537 -1.9132699 -4.8532209 -1.970401 -1.9017886 -4.7717271 -1.9714876 -1.8739552 -4.6904054 -1.9716494 -1.8461218 -4.6342602 -1.9815835 -1.828378 -4.5695748 -1.9871628 -1.807155 -4.5410061 -2.0079563 -1.8005446 -4.4542146 -2.0023215 -1.7702757 -4.4213815 -2.0202584 -1.7619257 -4.3612895 -2.0252259 -1.7424424 -4.3191085 -2.0379388 -1.7302653 -4.2718649 -2.0477779 -1.7160006 -4.2381492 -2.0636849 -1.7073027 -4.2035599 -2.0788398 -1.6982569 -4.1597304 -2.0890179 -1.6853839 -4.1134295 -2.0974588 -1.6714672 -4.0721784 -2.1079979 -1.6596379 -4.0458903 -2.1259637 -1.6540713 -4.0435219 -2.156487 -1.6585943 -4.0236187 -2.1776853 -1.6558108 -4.0192189 -2.2072992 -1.6596379 -4.0285277 -2.2447021 -1.6693796 -4.0154943 -2.26984 -1.6697276 -3.8998423 -2.2361171 -1.6262379 -3.8512049 -2.239728 -1.6112775 -3.8252785 -2.2561691 -1.6060586 -3.8387148 -2.2959671 -1.6178879 -3.8381803 -2.3277459 -1.6238024 -3.3215692 -2.0422401 -1.4049623 -3.4911382 -2.1762044 -1.4846354 -3.2716928 -2.0673149 -1.3941768 -3.3102524 -2.1202335 -1.4167914 -3.2515807 -2.110883 -1.3966123 -3.2362182 -2.1292479 -1.3955685 -0 -0 -0 -3.2152822 -2.1724768 -1.3980039 -3.0750487 -2.1052666 -1.3409454 -3.0043106 -2.0840001 -1.3148516 -2.9592583 -2.0797436 -1.3002391 -2.9105549 -2.0722938 -1.2838869 -2.8726983 -2.0720069 -1.2724056 -2.8319285 -2.0691209 -1.2595327 -2.79055 -2.0652552 -1.2463118 -2.760576 -2.0693994 -1.2383097 -2.7261779 -2.0698509 -1.2282201 -2.6993091 -2.0756762 -1.2216097 -2.6665561 -2.0766399 -1.2122159 -2.629478 -2.0737953 -1.2007346 -2.5983951 -2.0752573 -1.1920366 -2.5987301 -2.1017783 -1.1982992 -2.5814342 -2.1141186 -1.1962117 -2.559756 -2.1227336 -1.1920366 -2.5079234 -2.1058314 -1.1732491 -2.4499695 -2.0829067 -1.1513304 -2.4222262 -2.0850506 -1.144024 -2.386071 -2.0795381 -1.1325427 -2.3606164 -2.0829697 -1.1262803 -2.3498881 -2.0992894 -1.127324 -2.3327923 -2.1098938 -1.1252365 -2.3253319 -2.129235 -1.1280198 -2.3087869 -2.1402748 -1.1262803 -2.3010781 -2.1595354 -1.1290636 -2.2592478 -2.1464818 -1.1144511 -2.2115862 -2.1271458 -1.0967072 -2.1864064 -2.1288986 -1.0904447 -2.167963 -2.1370068 -1.0876614 -2.1342452 -2.1297321 -1.0768759 -2.1138849 -2.1354556 -1.0730488 -2.1000869 -2.1477153 -1.072701 -2.0875204 -2.1612353 -1.0730488 -2.0819831 -2.1821461 -1.0772239 -2.0524859 -2.1778169 -1.0685259 -2.0512166 -2.2034123 -1.0751363 -2.0376582 -2.2159569 -1.0751363 -2.0076411 -2.2103679 -1.0660905 -1.9927891 -2.2212486 -1.0653946 -1.9872019 -2.2425594 -1.0699176 -1.9826622 -2.265296 -1.0751363 -1.965661 -2.2738714 -1.0733968 -1.9534973 -2.2880294 -1.0744405 -1.9345887 -2.2942371 -1.0716572 -1.9234735 -2.3096676 -1.0733968 -1.9098607 -2.3221505 -1.0737447 -1.8949854 -2.3330977 -1.0733968 -1.8818069 -2.3461442 -1.0740926 -1.8673757 -2.3576467 -1.0740926 -1.8505652 -2.3661053 -1.072701 -1.834294 -2.3751891 -1.0716572 -1.8219583 -2.3893824 -1.0730488 -1.8004998 -2.3915262 -1.0688739 -1.7869097 -2.4040341 -1.0695697 -1.7710165 -2.4134409 -1.0688739 -1.7561746 -2.4242623 -1.0688739 -1.7401764 -2.4334667 -1.0681781 -1.7338579 -2.4563568 -1.0737447 -1.7058979 -2.4484825 -1.0653946 -1.6897804 -2.4573584 -1.0646988 -1.6725658 -2.4645765 -1.0633072 -1.6563692 -2.4732344 -1.0626113 -1.6437455 -2.487263 -1.064351 -1.6320355 -2.5028005 -1.0667863 -1.6191827 -2.5167105 -1.0685259 -1.6122458 -2.5400577 -1.0744405 -1.6135362 -2.5769255 -1.0862697 -1.5829234 -2.5628426 -1.0758322 -1.5842291 -2.6005363 -1.0880094 -1.5667951 -2.6077967 -1.0869656 -1.5636593 -2.6391437 -1.0963594 -1.5446006 -2.6438303 -1.0942718 -1.5213346 -2.6410697 -1.089053 -1.50325 -2.6470931 -1.0876614 -1.4814878 -2.6464481 -1.0834864 -1.4625058 -2.6505623 -1.0813988 -1.4475574 -2.6619575 -1.0824426 -1.4272143 -2.6633508 -1.0793114 -1.4082208 -2.6670825 -1.0772239 -1.3922617 -2.6765049 -1.0775717 -1.3694046 -2.6724794 -1.072353 -1.3576237 -2.6900401 -1.0761801 -1.3473465 -2.7109153 -1.0813988 -1.3459233 -2.7502947 -1.0942718 -1.3200771 -2.7399166 -1.0866176 -1.3156843 -2.7742293 -1.097403 -1.2934865 -2.771204 -1.0928801 -1.2643377 -2.7526734 -1.0820947 -1.2578391 -2.7834506 -1.0914885 -1.2430196 -2.796257 -1.093576 -1.2138309 -2.7763386 -1.0824426 -1.2063918 -2.8061316 -1.0914885 -1.1949856 -2.8273003 -1.0970552 -1.1750996 -2.8285179 -1.0946198 -1.1517034 -2.8209171 -1.0887052 -1.1427419 -2.8488171 -1.0970552 -1.1221501 -2.8479238 -1.0939239 -1.1026264 -2.8495085 -1.0918365 -1.080132 -2.8430724 -1.0866176 -1.072157 -2.8751247 -1.0967072 -1.0396904 -2.8411441 -1.080703 -1.0193899 -2.8395274 -1.0775717 -1.0035027 -2.8501508 -1.0793114 -0.98507893 -2.8535957 -1.0782676 -0.97115272 -2.8702445 -1.0824426 -0.95882732 -2.8921695 -1.0887052 -0.9326759 -2.8721361 -1.0786155 -0.91304904 -2.8715498 -1.0761801 -0.89624709 -2.8797841 -1.0772239 -0.88674289 -2.9121382 -1.0876614 -0.86404717 -2.9013491 -1.0813988 -0.84910762 -2.9164989 -1.0852259 -0.82914674 -2.9144394 -1.0824426 -0.81952024 -2.9492841 -1.0939239 -0.79135871 -2.9171555 -1.0796593 -0.77128851 -2.9137986 -1.0765281 -0.75152332 -2.9112134 -1.0737447 -0.73798621 -2.9330461 -1.0803552 -0.72175813 -2.9448044 -1.0831385 -0.70041698 -2.9354975 -1.0779197 -0.68366176 -2.9452198 -1.0800072 -0.66866779 -2.9630783 -1.0852259 -0.6554845 -2.9900217 -1.0939239 -0.63673615 -2.9921534 -1.0932281 -0.61533809 -2.981312 -1.0876614 -0.59813464 -2.9905479 -1.0897489 -0.580841 -2.9996846 -1.0918365 -0.56190765 -3.0004275 -1.0907927 -0.54365337 -3.0047414 -1.0911406 -0.53469986 -3.0625138 -1.1116678 -0.5182271 -3.0796058 -1.1168865 -0.49947077 -3.0836532 -1.1172343 -0.4793894 -3.0792484 -1.1144511 -0.45951915 -3.0756409 -1.1120156 -0.43374881 -3.0301406 -1.0939239 -0.41476762 -3.0299582 -1.0928801 -0.39628947 -3.0333757 -1.0932281 -0.38228524 -3.0729661 -1.1071448 -0.36375174 -3.0780473 -1.1081885 -0.34371471 -3.069972 -1.1043614 -0.31848517 -3.0114198 -1.0817468 -0.29944631 -3.0077195 -1.0796593 -0.2841104 -3.0431063 -1.0921843 -0.26810816 -3.0756147 -1.1036656 -0.25051221 -3.0930882 -1.1095802 -0.23194627 -3.1001768 -1.1116678 -0.21157846 -3.0818992 -1.1043614 -0.19254805 -3.0812681 -1.1036656 -0.17327146 -3.075839 -1.1012301 -0.15434857 -3.0759079 -1.1008823 -0.13539048 -3.0749238 -1.1001865 -0.11676653 -3.0822549 -1.1026219 -0.097969539 -3.0866616 -1.1040136 -0.079217434 -3.0947022 -1.1067969 -0.060370333 -3.1026289 -1.1095802 -0.041380379 -3.1066906 -1.1109719 -0.022291757 -3.1031361 -1.1095802 -0.0032635329 -3.1219649 -1.1165385 --0.015913019 -3.1256764 -1.1179302 --0.034928448 -3.1114578 -1.1127114 --0.053869732 -3.1027486 -1.1095802 --0.073018692 -3.1070459 -1.1113198 --0.092138045 -3.1084137 -1.1120156 --0.11107368 -3.1040421 -1.110624 --0.13055348 -3.1136057 -1.1144511 --0.15033628 -3.1267924 -1.1196698 --0.17227924 -3.1763623 -1.1384574 --0.19836117 -3.283798 -1.1788158 --0.29712921 -4.4574227 -1.6158004 --0.23734511 -3.263351 -1.1722053 --0.26136407 -3.3123014 -1.190993 --0.27426118 -3.223762 -1.1586366 --0.29275361 -3.2080142 -1.1534178 --0.31060684 -3.1874959 -1.1464595 --0.32977116 -3.1818001 -1.1450678 --0.50067657 -4.5533113 -1.6578984 --0.36857507 -3.1756513 -1.144372 --0.38691223 -3.1640246 -1.1408927 --0.41003412 -3.1904159 -1.1516782 --0.62520069 -4.6353483 -1.6937339 --0.46700358 -3.3113916 -1.198995 --0.68518603 -4.6486588 -1.701736 --0.71098685 -4.6267614 -1.6951256 --0.73847294 -4.6167574 -1.6930381 --0.76570904 -4.6056662 -1.6906027 --0.79219824 -4.5907187 -1.6867756 --0.82035142 -4.5857716 -1.6867756 --0.84847379 -4.5806518 -1.6867756 --0.8739146 -4.5615482 -1.6815568 --0.90279871 -4.5606985 -1.6832963 --0.9305777 -4.5541544 -1.6829485 --0.95792329 -4.5456071 -1.6819047 --0.98798752 -4.5497208 -1.6857318 --1.013428 -4.5325947 -1.6815568 --1.0485845 -4.5582671 -1.6937339 --1.0683255 -4.5170798 -1.680513 --1.0962434 -4.5113506 -1.6808609 --1.1154979 -4.4708848 -1.6679879 --1.141746 -4.4594154 -1.6662484 --1.1145095 -4.2446856 -1.5865753 --1.1078522 -4.1164641 -1.5399543 --1.1792357 -4.2767797 -1.6043191 --1.2561963 -4.4489985 -1.6735547 --1.2915469 -4.4691253 -1.6843401 --1.3152202 -4.4485307 -1.6794692 --1.3449351 -4.4484529 -1.6826005 --1.3735901 -4.4445949 -1.6843401 --1.3968803 -4.4235682 -1.6794692 --1.4242846 -4.4158058 -1.6798172 --1.4492983 -4.4007506 -1.6773818 --1.478067 -4.3971066 -1.6794692 --1.5104983 -4.4039159 -1.6857318 --1.5415195 -4.4060678 -1.6902547 --1.571678 -4.4053555 -1.6937339 --1.598038 -4.393867 -1.6930381 --1.6239899 -4.3813419 -1.6919943 --1.6501799 -4.3695412 -1.6912985 --1.6786439 -4.363708 -1.6930381 --1.6971751 -4.3323774 -1.684688 --1.1815788 -2.9635389 -1.1419365 --1.1944475 -2.9432042 -1.1367178 --1.2167825 -2.9462166 -1.1408927 --1.8186164 -4.326582 -1.6996485 --1.8436544 -4.3118939 -1.6982569 --1.8584806 -4.2738509 -1.6874714 --1.8945323 -4.284658 -1.6965172 --1.9134796 -4.2567077 -1.6899068 --1.5583019 -3.4110129 -1.3496433 --1.5764368 -3.3954356 -1.3472079 --1.5856333 -3.3611131 -1.3371183 --1.5981175 -3.3344142 -1.33016 --1.6123873 -3.3119035 -1.3249412 --1.627273 -3.2910242 -1.3204182 --1.6558548 -3.2977316 -1.3273766 --1.6828755 -3.3008711 -1.3329433 --1.7117217 -3.3071325 -1.3399017 --1.7393988 -3.3106742 -1.3458163 --1.7817494 -3.3412952 -1.3632121 --2.1919718 -4.0499992 -1.6669443 --2.2127173 -4.0290785 -1.663813 --2.246985 -4.0326219 -1.6711192 --2.2730708 -4.0212069 -1.672163 --2.2879043 -3.9901068 -1.6648567 --2.3161163 -3.9824758 -1.6676401 --2.3338377 -3.9568858 -1.6627692 --2.3696272 -3.9617984 -1.6711192 --2.400701 -3.958405 -1.6759901 --2.4254355 -3.9443986 -1.676338 --2.4381802 -3.9111464 -1.6683359 --2.4676442 -3.9048288 -1.672163 --2.492569 -3.8911927 -1.6728588 --2.5148659 -3.8734667 -1.671815 --2.5380702 -3.8571799 -1.6714672 --2.5471203 -3.8196974 -1.6617255 --2.5841625 -3.8241901 -1.6707714 --2.6155264 -3.8198636 -1.6759901 --2.6244812 -3.7829485 -1.6665963 --2.6320035 -3.7445345 -1.6565067 --2.6679862 -3.7466395 -1.6648567 --2.6909249 -3.7301984 -1.6648567 --2.711549 -3.7105899 -1.663465 --2.7298019 -3.687855 -1.6606817 --2.7456276 -3.6620362 -1.6565067 --2.7652099 -3.6413879 -1.6547672 --2.7840705 -3.6198943 -1.6526796 --2.8021953 -3.5975671 -1.6502442 --2.3299377 -2.954025 -1.3541663 --2.3433368 -2.9338145 -1.351383 --2.365423 -2.9244821 -1.3538184 --2.9068739 -3.5487425 -1.6603338 --2.9226067 -3.5236249 -1.6568546 --2.9477911 -3.5099325 -1.6589421 --2.9577293 -3.4782121 -1.6523317 --2.9796274 -3.4607086 -1.6526796 --3.0075843 -3.4501328 -1.6565067 --3.0342824 -3.4379385 -1.6596379 --3.0534456 -3.4171591 -1.6585943 --3.0579979 -3.3802869 -1.6495483 --3.0742476 -3.3566213 -1.647113 --3.1005242 -3.3438807 -1.6502442 --3.122267 -3.32616 -1.6509401 --3.1464932 -3.3110161 -1.6530275 --3.1641495 -3.2889454 -1.6516359 --3.1698761 -3.2546966 -1.6439817 --3.2003212 -3.2458642 -1.6495483 --3.2135525 -3.2195325 -1.6460692 --3.2352462 -3.2017317 -1.647113 --3.2595248 -3.1864069 -1.6495483 --3.280364 -3.1676488 -1.6502442 --3.2977028 -3.1455207 -1.6492004 --3.3271792 -3.1348681 -1.6544192 --3.3484111 -3.1163096 -1.655463 --3.3716114 -3.0995114 -1.6575505 --3.3891778 -3.0775051 -1.6568546 --3.4191666 -3.0666645 -1.6624213 --3.4337075 -3.041898 -1.6603338 --3.4699504 -3.0362017 -1.6690317 --3.4956098 -3.0209818 -1.6725109 --3.5147936 -3.0000846 -1.6728588 --3.5446069 -2.9881272 -1.6784256 --3.5693607 -2.971719 -1.6815568 --3.5831819 -2.9461904 -1.6794692 --3.612839 -2.9336016 -1.6850359 --3.6293082 -2.9102058 -1.6843401 --3.6500371 -2.8902092 -1.6857318 --3.671396 -2.870645 -1.6874714 --3.689683 -2.8486366 -1.6878192 --3.705601 -2.8248069 -1.6871234 --3.7266099 -2.8048348 -1.688863 --3.7460079 -2.7835929 -1.6899068 --3.772846 -2.7677622 -1.6944298 --3.7927954 -2.7467592 -1.6958214 --3.8217828 -2.732156 -1.7013881 --3.8400073 -2.7097352 -1.7020839 --3.8504062 -2.6818373 -1.6993005 --3.8737435 -2.6629393 -1.7024318 --3.8962178 -2.6433296 -1.7052152 --3.9193761 -2.6240656 -1.7083464 --3.9487033 -2.6087494 -1.7142611 --3.9717057 -2.5890777 -1.7173923 --3.9914603 -2.5671937 -1.7191318 --4.0095124 -2.5441606 -1.7201756 --4.0322008 -2.5239861 -1.7233069 --4.0635686 -2.5090444 -1.7302653 --4.0860949 -2.4884508 -1.7333965 --4.1117363 -2.469605 -1.7379194 --4.1397204 -2.4519708 -1.743486 --4.1644034 -2.4321952 -1.7476611 --4.1833115 -2.4089355 -1.7494007 --4.2151375 -2.3929377 -1.756707 --4.2526517 -2.379843 -1.7664486 --4.2679949 -2.354157 -1.7667966 --4.2716503 -2.3221064 -1.7622737 --4.2874708 -2.2967372 -1.7629695 --4.3288474 -2.2848217 -1.7744508 --4.3602548 -2.2672963 -1.781757 --4.3757539 -2.241354 -1.7824528 --4.4028182 -2.2212162 -1.7880195 --4.4138451 -2.1929083 -1.7869759 --4.3952122 -2.1501365 -1.773755 --4.3745317 -2.106863 -1.7598382 --4.3780575 -2.0755663 -1.7560111 --4.3847623 -2.0458903 -1.7535757 --4.4262047 -2.0322411 -1.7654049 --4.4590988 -2.0143023 -1.773755 --4.509932 -2.0040264 -1.7894112 --4.5522141 -1.9894497 -1.8015883 --4.6160221 -1.983678 -1.8224634 --4.6721554 -1.9739153 -1.8402072 --4.7049608 -1.953835 -1.8485572 --4.8132205 -1.9642277 -1.887176 --4.8852305 -1.9587182 -1.9111824 --4.9503722 -1.9496512 -1.9324054 --4.9910998 -1.9303937 -1.9438866 --5.0282698 -1.9093788 -1.9539763 --5.0583405 -1.8853621 -1.9612825 --5.0777388 -1.8571858 -1.9644138 --5.0908036 -1.8266274 -1.9651096 --5.1107602 -1.7984666 -1.9685888 --5.1172676 -1.7655457 -1.9668492 --5.140439 -1.7383156 -1.9717201 --5.1581283 -1.7090992 -1.9745034 --5.1640592 -1.6759712 -1.9727638 --5.2010522 -1.6527659 -1.9832014 --5.1860275 -1.6130306 -1.9734596 --5.1814756 -1.5768152 -1.967893 --5.1937494 -1.5457944 -1.9689367 --5.2058372 -1.5146822 -1.9699805 --5.2285604 -1.4865543 -1.9751992 --5.2312598 -1.4526898 -1.9727638 --5.2445993 -1.4217896 -1.9745034 --5.2432542 -1.3869475 -1.9706763 --5.2552972 -1.3556854 -1.972068 --5.2616978 -1.322957 -1.9713721 --5.2678952 -1.2902013 -1.9706763 --5.2748003 -1.2576367 -1.9703283 --5.2796779 -1.2246125 -1.9692847 --5.290751 -1.1930181 -1.9706763 --5.2961397 -1.1601313 -1.9699805 --5.3068266 -1.1283921 -1.9713721 --5.3099775 -1.0950521 -1.9699805 --5.3156772 -1.0622666 -1.9696325 --5.3220954 -1.0296302 -1.9696325 --5.32094 -0.99557728 -1.9668492 --5.3241811 -0.96241015 -1.9658054 --5.3364511 -0.93084979 -1.9682409 --5.3522329 -0.89979601 -1.972068 --5.3687592 -0.86873311 -1.976243 --0 -0 -0 --5.408689 -0.80720687 -1.9873763 --5.4385991 -0.77758205 -1.9967701 --5.464633 -0.74711323 -2.0047722 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --5.3409567 -0.037536558 -1.9400595 --0 -0 -0 --5.3428903 0.028018259 -1.9407554 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --5.2527013 -0.13438906 -1.9715911 --5.2328877 -0.10175557 -1.9637177 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --0 0 -0 --5.1187916 1.0126848 -1.9576337 --5.1005878 1.0416461 -1.9529814 --5.0886178 1.0717689 -1.950834 --5.0782957 1.1021799 -1.9494026 --5.0668807 1.1323011 -1.9476131 --5.0571074 1.1627421 -1.9465395 --5.0526042 1.1943942 -1.9476131 --5.0442729 1.2251537 -1.9472553 --5.0430026 1.2576629 -1.9497604 --5.0460467 1.2913597 -1.954055 --5.0298991 1.3201644 -1.950834 --5.0189991 1.3502749 -1.9497604 --5.01332 1.3817897 -1.950834 --5.0020509 1.4117641 -1.9497604 --4.9771466 1.4377662 -1.9433186 --4.9736037 1.4698658 -1.9454659 --4.9591284 1.4987352 -1.9433186 --4.9471622 1.528309 -1.942245 --4.93502 1.5577924 -1.9411713 --4.921814 1.586898 -1.9397398 --4.9102101 1.6164839 -1.9390241 --4.9010844 1.6468793 -1.939382 --4.8917704 1.6772236 -1.9397398 --4.887557 1.7093647 -1.942245 --4.8831334 1.7415172 -1.9447501 --4.8749886 1.7724037 -1.9458238 --4.8657727 1.8029314 -1.9465395 --4.8581128 1.8340722 -1.947971 --4.8345656 1.8591553 -1.9429607 --0 0 -0 --4.7975087 1.9128108 -1.9372346 --4.7804904 1.9401052 -1.9350874 --4.7650437 1.9679757 -1.9336559 --4.7554612 1.9982615 -1.9347295 --4.7491212 2.0299714 -1.9372346 --4.7331505 2.0575845 -1.9358032 --4.7289772 2.0903623 -1.939382 --4.7058411 2.1147473 -1.9350874 --4.6953249 2.1447456 -1.936161 --4.6812296 2.1731222 -1.9358032 --4.6441598 2.1906524 -1.9257826 --4.6390514 2.2231419 -1.9293613 --4.6127291 2.2454352 -1.9239931 --4.6072354 2.2778339 -1.9275719 --4.5798197 2.2993579 -1.9218459 --0 0 -0 --4.5603809 2.3601065 -1.9257826 --4.5466404 2.3884783 -1.9261404 --4.5368433 2.4189665 -1.9282877 --0 0 -0 --4.515821 2.4794011 -1.9322244 --4.5062332 2.5102434 -1.9347295 --4.488307 2.5364678 -1.9336559 --4.4734693 2.5644243 -1.9340137 --4.4592643 2.5927632 -1.9347295 --4.4408584 2.6186533 -1.9336559 --4.4239058 2.6453733 -1.933298 --4.4051952 2.671016 -1.9322244 --4.3887234 2.6979954 -1.9322244 --4.3736711 2.7258611 -1.9329401 --4.3584418 2.7536433 -1.9336559 --4.3430367 2.7813416 -1.9343716 --0 0 -0 --4.3070183 2.8334014 -1.9336559 --4.2918825 2.8613293 -1.9347295 --4.2726974 2.8865645 -1.9340137 --4.2495112 2.9090352 -1.9315087 --4.2308145 2.9345229 -1.9311507 --4.2066169 2.9561329 -1.9282877 --4.191442 2.9840543 -1.9297192 --4.1677513 3.0058935 -1.927214 --4.1560154 3.0363667 -1.9304349 --4.1365557 3.061255 -1.9300771 --4.1049919 3.0770588 -1.9239931 --4.105372 3.1168675 -1.933298 --4.0824685 3.1391535 -1.9315087 --4.0609198 3.1624229 -1.9304349 --4.0443721 3.1895933 -1.9318665 --4.0218062 3.2120185 -1.9304349 --4.0005698 3.235461 -1.9297192 --3.9690824 3.2504821 -1.9239931 --3.9648774 3.2878866 -1.9318665 --3.946774 3.3139539 -1.9329401 --3.9277887 3.339318 -1.9336559 --3.9114716 3.3670104 -1.9358032 --3.8907382 3.3909473 -1.9358032 --3.8656573 3.4110501 -1.9336559 --3.8446548 3.434705 -1.9336559 --3.8221223 3.4569781 -1.9329401 --3.8008387 3.480365 -1.9329401 --3.7746181 3.4991777 -1.9304349 --3.7476292 3.5171609 -1.9275719 --3.7219157 3.536231 -1.9254247 --3.6974556 3.5564127 -1.9239931 --3.673557 3.5770788 -1.9229195 --3.6541996 3.6021738 -1.924351 --3.6320283 3.6245277 -1.924351 --3.6149759 3.6520538 -1.927214 --3.588582 3.6701605 -1.9250668 --3.5640485 3.6900959 -1.9239931 --3.5419841 3.7125704 -1.924351 --3.5152946 3.7301569 -1.9222038 --3.4936132 3.7530229 -1.9229195 --3.4660947 3.7695775 -1.9204143 --3.446667 3.7949212 -1.9225616 --3.4245641 3.8173881 -1.9232774 --3.4072697 3.8453174 -1.9268562 --3.3823812 3.8647463 -1.9261404 --3.360436 3.8875465 -1.927214 --3.3359127 3.9073825 -1.9268562 --3.3088648 3.9242086 -1.9250668 --3.2811384 3.9401326 -1.9229195 --3.255121 3.9580276 -1.9218459 --3.2307737 3.9779263 -1.9218459 --3.2103949 4.0027738 -1.924351 --3.1875131 4.0245929 -1.9254247 --3.166786 4.0492234 -1.9279298 --3.1424515 4.0693173 -1.9282877 --3.1196885 4.0914927 -1.9297192 --3.0950863 4.1113033 -1.9300771 --3.0597742 4.1167283 -1.9236352 --3.0333519 4.1339197 -1.9229195 --3.0008078 4.1426239 -1.9182671 --2.9693575 4.1526036 -1.9143304 --2.9427445 4.1692195 -1.9136146 --0 0 -0 --2.8887146 4.2011704 -1.9118253 --2.8681262 4.2265425 -1.9154041 --2.8452566 4.2487164 -1.9175513 --2.820678 4.2684317 -1.918625 --2.7939241 4.2848763 -1.9182671 --2.7685907 4.3035097 -1.9189829 --2.7371283 4.3125329 -1.9154041 --2.7071464 4.3237066 -1.9128989 --2.679584 4.3386469 -1.9121832 --2.6470821 4.345438 -1.9078885 --2.6290262 4.3760052 -1.9143304 --2.6021259 4.3920546 -1.9143304 --2.5770123 4.4111629 -1.9157619 --2.5540924 4.4341741 -1.9189829 --2.5296037 4.4546337 -1.9211301 --2.5031354 4.4717007 -1.9218459 --2.4742968 4.4845228 -1.9207722 --2.4467337 4.4996204 -1.9207722 --2.41555 4.5079646 -1.9179091 --2.3847919 4.5169215 -1.9154041 --2.3540149 4.5256705 -1.9128989 --2.3274791 4.5425224 -1.9139725 --2.2966177 4.5508828 -1.9114674 --2.2657413 4.5590358 -1.9089622 --2.2438824 4.5854325 -1.9143304 --2.2148938 4.5974321 -1.9136146 --2.1910448 4.6202164 -1.9175513 --2.1618643 4.6318812 -1.9168355 --2.1341827 4.6467557 -1.9175513 --2.1029384 4.6538072 -1.9150462 --2.0766196 4.6717424 -1.9171934 --2.0490377 4.6869631 -1.9182671 --2.0250354 4.7105994 -1.9229195 --2.0004566 4.7332568 -1.927214 --1.9670767 4.735095 -1.9229195 --1.9390447 4.7496691 -1.9239931 --1.9088217 4.7588773 -1.9229195 --1.8789011 4.7687626 -1.9222038 --1.8475829 4.7749767 -1.9200565 --1.8185812 4.787096 -1.9204143 --1.7846055 4.7859163 -1.9154041 --1.755206 4.7967763 -1.9154041 --1.7247939 4.8048191 -1.9143304 --1.6955898 4.8161926 -1.9146882 --1.6675299 4.8309193 -1.9164777 --1.6315708 4.8224854 -1.9089622 --1.6054765 4.8430414 -1.9132568 --1.5716918 4.8403683 -1.9082465 --1.548471 4.8703876 -1.9164777 --1.516615 4.8735557 -1.9139725 --1.4845065 4.8756237 -1.9111094 --1.4564283 4.8909054 -1.9136146 --1.4258686 4.8979564 -1.9128989 --1.3950218 4.9039187 -1.9118253 --1.366156 4.9168849 -1.9136146 --1.3300922 4.9035463 -1.9050256 --1.3059543 4.9341822 -1.9139725 --1.2772883 4.948431 -1.9164777 --1.2434828 4.9425921 -1.9111094 --1.2135769 4.9519429 -1.9118253 --1.1781839 4.938406 -1.903594 --1.1516616 4.9619145 -1.9100358 --1.1193438 4.96069 -1.9068149 --1.0888845 4.9674649 -1.9068149 --1.0583842 4.9740524 -1.9068149 --1.0289769 4.98594 -1.9089622 --0.99579972 4.979341 -1.9039519 --0.96913481 5.0055256 -1.9118253 --0.93926293 5.0159669 -1.9136146 --0 0 -0 --0.87908453 5.0353937 -1.9168355 --0.84786135 5.0388513 -1.9161198 --0.81812245 5.051333 -1.9189829 --0.78653783 5.052567 -1.9175513 --0.75538301 5.0563745 -1.9171934 --0.72540247 5.0683088 -1.9200565 --0.69314998 5.0643382 -1.9168355 --0.6606105 5.0573854 -1.912541 --0.63118124 5.0743165 -1.9175513 --0.59816992 5.0623293 -1.9114674 --0.56626517 5.0584807 -1.9086044 --0.53521627 5.0618601 -1.9086044 --0.50386953 5.0622611 -1.9075307 --0.47210371 5.0578198 -1.9046676 --0.44138524 5.0643425 -1.9060992 --0.41052902 5.0697474 -1.9071728 --0.37913498 5.0684462 -1.9057413 --0.34758037 5.0641561 -1.9032362 --0.31533483 5.047555 -1.8960786 --0.2856195 5.0717692 -1.9046676 --0.25463492 5.0762243 -1.9057413 --0.22340073 5.0758252 -1.9050256 --0.19239347 5.080833 -1.9064571 --0.16118476 5.0809846 -1.9060992 --0.13019703 5.0893455 -1.9089622 --0.099003389 5.0919161 -1.909678 --0.067820609 5.097096 -1.9114674 --0.036517065 5.0936813 -1.9100358 --0.0052569415 5.0891404 -1.9082465 -0.025941392 5.0834742 -1.9060992 -0.057090838 5.0794845 -1.9046676 -0.088289194 5.0809059 -1.9053835 -0.11941963 5.0784016 -1.9046676 -0.15055026 5.0766401 -1.9043097 -0.18173043 5.0765538 -1.9046676 -0.21318862 5.0828066 -1.9075307 -0.24428256 5.0795374 -1.9068149 -0.27529392 5.0751457 -1.9057413 -0.30592322 5.0649724 -1.9025204 -0.33711943 5.0648632 -1.9032362 -0.36852878 5.0673561 -1.9050256 -0.39976132 5.0668612 -1.9057413 -0.43084347 5.0643129 -1.9057413 -0.46216375 5.064364 -1.9068149 -0.49259597 5.0549269 -1.9043097 -0.52456504 5.0610971 -1.9078885 -0.55540574 5.0559268 -1.9071728 -0.58598751 5.0487137 -1.9057413 -0.6169548 5.045023 -1.9057413 -0.64813679 5.042995 -1.9064571 -0.67919248 5.0398483 -1.9068149 -0.70932174 5.0300384 -1.9046676 -0.74017209 5.0255914 -1.9046676 -0 0 -0 -0.80164081 5.0152078 -1.9043097 -0.83071584 5.000062 -1.9003731 -0.86233169 5.000392 -1.9025204 -0.89234024 4.9913297 -1.9010888 -0.92413896 4.992188 -1.903594 -0.9540509 4.9827547 -1.9021626 -0.98641807 4.9859676 -1.9057413 -1.0169928 4.9798212 -1.9057413 -1.0469521 4.970746 -1.9046676 -1.0774324 4.9642282 -1.9046676 -1.1070577 4.9538789 -1.9032362 -1.137015 4.9451728 -1.9025204 -1.1675513 4.9390116 -1.9028783 -1.1969533 4.9281249 -1.9014468 -1.2260398 4.9161577 -1.8996574 -1.2575703 4.91397 -1.9018047 -1.2869872 4.9034519 -1.900731 -1.317535 4.8972659 -1.9014468 -1.3468151 4.8863893 -1.9003731 -1.3795613 4.8879185 -1.9043097 -1.4100453 4.881156 -1.9050256 -1.4378523 4.8652482 -1.9021626 -1.4687581 4.8599095 -1.903594 -1.5010302 4.8588357 -1.9068149 -1.5302532 4.847753 -1.9060992 -1.5593966 4.8364949 -1.9053835 -1.5893354 4.8277225 -1.9057413 -1.6180358 4.8152242 -1.9046676 -1.6466426 4.8025556 -1.903594 -1.6776205 4.7967687 -1.9053835 -1.7076485 4.7881436 -1.9060992 -1.7379528 4.7802086 -1.9071728 -1.767251 4.7694545 -1.9071728 -1.7964826 4.7585211 -1.9071728 -1.8283272 4.7543812 -1.9100358 -1.8537203 4.7335086 -1.9060992 -1.8799636 4.7151065 -1.9032362 -1.9071043 4.6991563 -1.9014468 -1.9391092 4.6951337 -1.9046676 -1.9657115 4.6779819 -1.9025204 -1.9965796 4.6709843 -1.9046676 -2.0233417 4.6543636 -1.9028783 -2.0522397 4.642715 -1.9032362 -2.0810709 4.630887 -1.903594 -2.11061 4.6205788 -1.9046676 -2.1365631 4.6024594 -1.9025204 -2.1611784 4.5816622 -1.8992995 -2.1916709 4.5733676 -1.9014468 -2.2184656 4.5573149 -1.9003731 -2.2505245 4.5519876 -1.9039519 -2.2767372 4.5347552 -1.9025204 -2.305367 4.5223637 -1.9032362 -2.3322141 4.5064745 -1.9025204 -2.3585188 4.4895992 -1.9014468 -2.3811903 4.4659791 -1.8975101 -2.4098811 4.4537482 -1.8985838 -2.4344673 4.4339666 -1.8964365 -2.462991 4.4213929 -1.8975101 -2.4960451 4.4167657 -1.9021626 -2.5282066 4.4102783 -1.9060992 -2.5566278 4.3971043 -1.9071728 -2.5883021 4.3893785 -1.9107516 -2.6161444 4.3750172 -1.9114674 -2.6453602 4.362875 -1.9132568 -2.665235 4.3354239 -1.9082465 -2.6912928 4.3181963 -1.9078885 -2.7167406 4.3000226 -1.9071728 -2.7385423 4.2761946 -1.9039519 -2.7657456 4.2608771 -1.9046676 -2.7949166 4.2485075 -1.9068149 -2.8271472 4.240602 -1.9111094 -2.8473644 4.2146635 -1.9071728 -0 0 -0 -2.909513 4.1947508 -1.9143304 -0 0 -0 -0 0 -0 -0 0 -0 -3.0082762 4.1175604 -1.9121832 -0 0 -0 -3.0540986 4.0743566 -1.9093201 -0 0 -0 -0 0 -0 -3.1171033 4.0027146 -1.9021626 -3.1352451 3.9754477 -1.8982259 -3.1525869 3.9473791 -1.8939313 -0 0 -0 -3.1966488 3.9033377 -1.8914262 -3.2223272 3.8858063 -1.8924998 -3.251513 3.8723977 -1.8957207 -3.2830744 3.861623 -1.9003731 -3.3121891 3.8477752 -1.903594 -3.3412573 3.8337154 -1.9068149 -3.3628645 3.8110411 -1.9057413 -3.3812089 3.7847641 -1.9028783 -3.4062469 3.7660239 -1.9039519 -3.4286602 3.7443638 -1.903594 -3.4553792 3.7273645 -1.9057413 -3.4826574 3.7108591 -1.9082465 -3.5105064 3.6948359 -1.9111094 -3.5357003 3.6759186 -1.912541 -3.5614457 3.6574998 -1.9143304 -3.5818543 3.6335833 -1.9132568 -3.5961676 3.603605 -1.9089622 -3.6182113 3.5814714 -1.9089622 -3.6414537 3.5605087 -1.909678 -3.6545014 3.5296645 -1.9050256 -3.6929793 3.5232899 -1.9139725 -3.7165668 3.5024853 -1.9150462 -3.7366209 3.4783425 -1.9143304 -3.7578931 3.4553494 -1.9143304 -3.7797153 3.4328542 -1.9146882 -3.7944524 3.4039855 -1.9114674 -3.8194606 3.3843548 -1.9136146 -3.8415599 3.3620856 -1.9143304 -3.8578787 3.3347867 -1.9121832 -3.878978 3.3116586 -1.912541 -3.899225 3.2877953 -1.912541 -3.9214776 3.2656012 -1.9136146 -3.9414411 3.241478 -1.9136146 -3.9605315 3.2166438 -1.9132568 -3.9801939 3.192282 -1.9132568 -4.0040979 3.1712787 -1.9154041 -4.0249524 3.1478009 -1.9161198 -4.0404959 3.1201911 -1.9143304 -4.0573378 3.0936418 -1.9132568 -4.0792274 3.0709348 -1.9146882 -4.0934973 3.0425048 -1.912541 -4.1128411 3.0178828 -1.9128989 -4.1395993 2.9986162 -1.9168355 -4.1594396 2.974246 -1.9175513 -4.176085 2.9475913 -1.9168355 -4.1925602 2.9208441 -1.9161198 -4.2119422 2.8961222 -1.9168355 -4.2242246 2.8665531 -1.9143304 -4.2401824 2.8395405 -1.9136146 -4.2520728 2.8098657 -1.9111094 -4.2747087 2.7872932 -1.9136146 -4.2933011 2.762022 -1.9143304 -4.3125329 2.7371283 -1.9154041 -4.3292465 2.7106154 -1.9154041 -4.3370581 2.6786027 -1.9114674 -4.3398561 2.6436813 -1.9053835 -4.3591971 2.6189263 -1.9068149 -4.3727746 2.5907013 -1.9057413 -4.3877826 2.5633507 -1.9053835 -4.4058557 2.5377779 -1.9064571 -4.4229679 2.5116186 -1.9071728 -4.4423695 2.4867134 -1.9089622 -4.460814 2.4612134 -1.9103937 -4.4741912 2.4329038 -1.909678 -4.4947963 2.4084923 -1.9121832 -4.5136185 2.3830476 -1.9139725 -4.524014 2.353153 -1.9121832 -4.5358744 2.3240724 -1.9111094 -4.5608859 2.3016667 -1.9157619 -4.571578 2.2719758 -1.9143304 -4.5980129 2.2500398 -1.9196986 -4.6117325 2.2217846 -1.9196986 -4.6219039 2.1918452 -1.9182671 -4.6217279 2.1571245 -1.912541 -4.643362 2.1326234 -1.9161198 -4.6521053 2.1021693 -1.9143304 -4.6299338 2.0580316 -1.8996574 -4.6630077 2.0385625 -1.9082465 -4.6891537 2.0158143 -1.9139725 -4.6971335 1.9851862 -1.9121832 -4.7014656 1.9531031 -1.9089622 -4.7211413 1.9273957 -1.9121832 -4.7285457 1.8966526 -1.9103937 -4.7496505 1.8713691 -1.9143304 -4.7619143 1.8425276 -1.9146882 -4.7774944 1.8149327 -1.9164777 -4.7876658 1.7852581 -1.9161198 -4.8081756 1.7593783 -1.9200565 -4.821517 1.7307894 -1.9211301 -4.8373308 1.7030334 -1.9232774 -4.8512197 1.6745391 -1.9247088 -4.8658257 1.6462377 -1.9264983 -4.8758354 1.6163505 -1.9264983 -4.8865495 1.586691 -1.9268562 -4.8917437 1.5552629 -1.9250668 -4.89852 1.5243858 -1.9239931 -4.9024215 1.492668 -1.9218459 -4.9088035 1.4617596 -1.9207722 -4.9158874 1.4310901 -1.9200565 -4.9263721 1.4014109 -1.9207722 -4.9375768 1.3719071 -1.9218459 -4.940495 1.3401177 -1.9196986 -4.9540405 1.3112121 -1.9218459 -4.9638009 1.2812569 -1.9225616 -4.9751911 1.251687 -1.9239931 -4.9854984 1.2218033 -1.9250668 -4.9910851 1.1907563 -1.924351 -5.0001168 1.1605315 -1.9250668 -5.0025892 1.1288016 -1.9232774 -5.007597 1.097685 -1.9225616 -5.0096712 1.0659662 -1.9207722 -5.0142889 1.0348297 -1.9200565 -5.0196285 1.00386 -1.9196986 -5.0247769 0.97286367 -1.9193407 -5.0297337 0.94184196 -1.9189829 -5.042769 0.91229278 -1.9218459 -5.0593095 0.88326174 -1.9261404 -5.0655551 0.85235679 -1.9264983 -5.0780635 0.82245398 -1.9293613 -5.0857821 0.79171121 -1.9304349 -5.0970087 0.76145679 -1.9329401 -5.0969634 0.72950596 -1.9311507 -5.0985684 0.69783771 -1.9300771 -5.1101613 0.66750854 -1.9329401 -5.1058211 0.63510257 -1.9297192 -5.0901484 0.60145932 -1.9222038 -5.0965271 0.57052732 -1.9232774 -5.0980749 0.53904831 -1.9225616 -5.1012864 0.50775701 -1.9225616 -5.0987277 0.47592539 -1.9204143 -5.1136451 0.44568616 -1.9250668 -5.1088376 0.41369751 -1.9222038 -5.1140733 0.38255167 -1.9232774 -5.1237769 0.35167724 -1.9261404 -5.1081314 0.31912407 -1.9193407 -5.1249099 0.28861639 -1.9250668 -5.1228538 0.25697768 -1.9236352 -5.1196699 0.22533394 -1.9218459 -5.1274877 0.19416384 -1.924351 -5.1369824 0.16296566 -1.9275719 -5.1388192 0.13146661 -1.9279298 -5.141396 0.099969387 -1.9286456 -5.1456475 0.068470486 -1.9300771 -5.1431694 0.036875788 -1.9290035 -5.1479678 0.0053223954 -1.9307928 -5.1479034 -0.026265042 -1.9307928 -5.1457782 -0.05783065 -1.9300771 -5.144393 -0.089387313 -1.9297192 -5.1428137 -0.12092915 -1.9293613 -5.1373081 -0.15234457 -1.9275719 -5.1288114 -0.18359698 -1.9247088 -5.1369181 -0.21545388 -1.9282877 -5.1336336 -0.2468798 -1.9275719 -5.1254954 -0.27802104 -1.9250668 -5.1339459 -0.31008369 -1.9290035 -5.141264 -0.34219855 -1.9325823 -5.1362734 -0.37353534 -1.9315087 -5.1357465 -0.40519062 -1.9322244 -5.1313028 -0.43653721 -1.9315087 -5.1396866 -0.46903151 -1.9358032 -5.1367121 -0.50055921 -1.9358032 -5.137259 -0.53245282 -1.9372346 -5.1357517 -0.56416821 -1.9379504 -5.1349759 -0.59599268 -1.9390241 -5.1330762 -0.62771565 -1.9397398 -5.130054 -0.65931875 -1.9400977 -5.1240611 -0.69053447 -1.939382 -5.1243505 -0.72261369 -1.9411713 -5.1244392 -0.75472242 -1.9429607 -5.1114054 -0.78487635 -1.9397398 -5.1046491 -0.81592995 -1.9390241 -5.1013889 -0.84754205 -1.9397398 -5.0914917 -0.87803459 -1.9379504 -5.0795736 -0.90810901 -1.9354453 -5.0876789 -0.94180804 -1.9408134 -5.0882239 -0.97423643 -1.9433186 -5.0821505 -1.0054388 -1.9433186 -5.0813746 -1.037724 -1.9454659 -5.0785666 -1.0696527 -1.9468974 -5.0792084 -1.1023779 -1.9497604 -5.0750823 -1.1341333 -1.950834 -5.0707583 -1.1658796 -1.9519078 -5.0616913 -1.1965417 -1.9511919 -5.0506248 -1.2266959 -1.9497604 -5.0348487 -1.2556299 -1.9465395 -5.0198121 -1.2846481 -1.9436765 -5.0037065 -1.313292 -1.9404556 -4.9946523 -1.343727 -1.9400977 -4.9836125 -1.3736042 -1.9390241 -4.9705973 -1.4028894 -1.9372346 -4.9601016 -1.4328438 -1.9365189 -4.9610667 -1.4661617 -1.9404556 -4.9564466 -1.497925 -1.942245 -4.94627 -1.5280335 -1.9418871 -4.936801 -1.5583544 -1.9418871 -4.9307013 -1.5897626 -1.9433186 -4.9288363 -1.6226141 -1.9465395 -4.9117064 -1.6504476 -1.9436765 -4.90767 -1.6826736 -1.9461817 -4.8963714 -1.7124467 -1.9458238 -4.8892903 -1.7437124 -1.9472553 -4.8714781 -1.7711278 -1.9443922 -4.8622704 -1.801634 -1.9451081 -4.846756 -1.8297857 -1.9433186 -4.7805285 -1.8383799 -1.9207722 -4.8108945 -1.8840187 -1.9379504 -4.7844977 -1.9076244 -1.9318665 -4.7311707 -1.920094 -1.9146882 -4.7029014 -1.9423165 -1.9078885 -4.6392422 -1.9494365 -1.8864158 -4.5816851 -1.9584178 -1.8674482 -4.5430341 -1.9749552 -1.856354 -4.4522552 -1.9680681 -1.8234291 -4.3855834 -1.9708577 -1.8005248 -4.3504748 -1.9872566 -1.7908621 -4.2950029 -1.9938648 -1.7726103 -4.2573509 -2.0082319 -1.761874 -4.2104225 -2.0177743 -1.7472008 -4.1685762 -2.029269 -1.7346752 -4.1183777 -2.0361886 -1.7185706 -4.0857773 -2.0513666 -1.7099814 -4.0489874 -2.0641012 -1.699603 -4.0221472 -2.0816116 -1.693519 -4.0159125 -2.1097255 -1.696382 -3.9831159 -2.1237848 -1.6877929 -3.9823289 -2.1548493 -1.6931611 -3.9428387 -2.164865 -1.6817091 -3.9147971 -2.1808388 -1.6752672 -3.8997161 -2.2038996 -1.6745514 -3.8828793 -2.225929 -1.6731199 -3.8295918 -2.226717 -1.6555839 -3.8053999 -2.2440078 -1.6509314 -3.8236172 -2.2864816 -1.6652466 -3.7448375 -2.2706902 -1.6362584 -3.66242 -2.2515748 -1.6054808 -3.5035088 -2.1836333 -1.5399889 -3.5626738 -2.2509682 -1.5729138 -3.2562625 -2.0854766 -1.4397827 -3.2011082 -2.0779672 -1.4204572 -3.1906383 -2.0991092 -1.421531 -3.1831372 -2.1222725 -1.424036 -3.1924949 -2.1569211 -1.4344145 -3.0767155 -2.1063244 -1.3868166 -3.0767777 -2.1342094 -1.3929006 -3.0124342 -2.1170809 -1.3689227 -2.9400511 -2.0932879 -1.3410081 -2.893069 -2.0867114 -1.3249036 -2.8508039 -2.0829427 -1.3109462 -2.8424733 -2.1037281 -1.3130935 -2.8070955 -2.1043293 -1.3023572 -2.7933869 -2.1209493 -1.3019993 -2.7751384 -2.1340652 -1.2994941 -2.7877789 -2.1711314 -1.3120199 -2.7707384 -2.1853051 -1.3102305 -2.6996331 -2.1562345 -1.2819581 -2.6304431 -2.1275496 -1.2544014 -3.3072989 -2.7086015 -1.5961759 -3.2913358 -2.7294397 -1.5965338 -3.2888296 -2.7615914 -1.6036913 -2.4522212 -2.0850234 -1.1914147 -2.4061182 -2.0714018 -1.1745944 -2.3891389 -2.0824459 -1.1724471 -2.3665135 -2.0884175 -1.1674367 -2.3473871 -2.0973003 -1.1642158 -2.3317037 -2.109159 -1.1627843 -2.3228505 -2.1272097 -1.1649317 -2.3001668 -2.1325357 -1.1599213 -2.2686534 -2.1293573 -1.1502585 -2.2244036 -2.1136541 -1.1337961 -2.1689913 -2.0864856 -1.1112498 -2.1588242 -2.1023605 -1.1126813 -2.1412284 -2.1109788 -1.1101761 -2.1183202 -2.1141844 -1.104808 -2.0993955 -2.12117 -1.1015871 -2.0785062 -2.1260006 -1.0972924 -2.0595834 -2.1326697 -1.0940715 -2.036145 -2.1344581 -1.0883455 -2.020448 -2.1441934 -1.0869139 -2.0002542 -2.1490326 -1.0829773 -1.9800775 -2.1537049 -1.0790406 -1.9567797 -2.1547551 -1.0733145 -1.946016 -2.1695013 -1.0747461 -1.9233778 -2.1709185 -1.0693779 -1.9137112 -2.1868949 -1.0715252 -1.9039208 -2.2028344 -1.0736724 -1.8885496 -2.2123446 -1.0725988 -1.8785512 -2.228174 -1.0747461 -1.8809791 -2.2590311 -1.0844089 -1.868862 -2.2726934 -1.0854825 -1.8595917 -2.289916 -1.0883455 -1.8466747 -2.3027399 -1.0890613 -1.83425 -2.3162234 -1.0901349 -1.8177022 -2.3244927 -1.0887034 -1.8016928 -2.333385 -1.0876298 -1.7833779 -2.3391986 -1.0851246 -1.7616895 -2.3403997 -1.0804721 -1.7428393 -2.34517 -1.0776092 -1.7223396 -2.3475389 -1.0736724 -1.697494 -2.3436956 -1.0668727 -1.6771064 -2.3457124 -1.0629361 -1.670221 -2.3666387 -1.0679464 -1.6551343 -2.3760762 -1.0675884 -1.6415821 -2.3877258 -1.0683043 -1.6295223 -2.4016166 -1.0700936 -1.6261876 -2.428638 -1.077967 -1.6189781 -2.4502554 -1.0833352 -1.6049334 -2.4617074 -1.0840509 -1.590809 -2.4730792 -1.0847667 -1.5741031 -2.4804287 -1.083693 -1.5643054 -2.4987459 -1.0876298 -1.5459995 -2.5035307 -1.0854825 -1.5325525 -2.5161593 -1.0869139 -1.5190085 -2.528717 -1.0883455 -1.5058441 -2.5420065 -1.0901349 -1.4911605 -2.5528109 -1.0908506 -1.4777993 -2.5659578 -1.09264 -1.4597213 -2.5709174 -1.0908506 -1.4398135 -2.5724928 -1.0876298 -1.4185879 -2.5714684 -1.0833352 -1.402783 -2.5801244 -1.0833352 -1.3820733 -2.5796299 -1.0793985 -1.3605505 -2.5773273 -1.0747461 -1.352899 -2.601366 -1.0815458 -1.3381894 -2.6121113 -1.0826194 -1.3280272 -2.6319435 -1.0876298 -1.3147624 -2.6458957 -1.0901349 -1.3120492 -2.6815901 -1.1019449 -1.2939492 -2.6862254 -1.1005133 -1.2746413 -2.6882086 -1.0980083 -1.2514079 -2.6815951 -1.0919243 -1.2345406 -2.6883748 -1.0915664 -1.2057152 -2.6686704 -1.0801142 -1.1893178 -2.6760182 -1.0801142 -1.1672641 -2.6704323 -1.0747461 -1.1519632 -2.6801176 -1.0758197 -1.1322244 -2.6793947 -1.0725988 -1.1236452 -2.7052619 -1.0804721 -1.1102018 -2.7198858 -1.083693 -1.0927967 -2.7249136 -1.0829773 -1.0750293 -2.7289612 -1.0819037 -1.0586014 -2.736377 -1.0822616 -1.0407964 -2.7402022 -1.081188 -1.0229843 -2.7439122 -1.0801142 -1.0009936 -2.7361073 -1.0743883 -0.98765743 -2.7518649 -1.0783249 -0.96424043 -2.7393775 -1.0708094 -0.94253784 -2.7311203 -1.0650834 -0.92935413 -2.7474661 -1.0693779 -0.91512358 -2.7610936 -1.0725988 -0.90191442 -2.7782021 -1.0772512 -0.88824666 -2.7943618 -1.0815458 -0.86914134 -2.7935185 -1.0790406 -0.85960174 -2.8238101 -1.0890613 -0.84199244 -2.8281364 -1.0887034 -0.82566774 -2.8368356 -1.0901349 -0.81003463 -2.8481352 -1.09264 -0.79979497 -2.8791423 -1.1030185 -0.77600074 -2.8614659 -1.0940715 -0.75866747 -2.8670762 -1.0944295 -0.73896015 -2.8635402 -1.0912086 -0.71795744 -2.8544376 -1.0858403 -0.69976246 -2.8560684 -1.0847667 -0.68092418 -2.8548586 -1.0826194 -0.66212714 -2.8535256 -1.0804721 -0.64604497 -2.8639107 -1.0829773 -0.6340605 -2.8933594 -1.0929979 -0.61124057 -2.8734496 -1.083693 -0.59624118 -2.8899486 -1.0887034 -0.57831436 -2.892637 -1.0883455 -0.55966675 -2.8915474 -1.0865561 -0.54999512 -2.9380639 -1.1033764 -0.5397734 -2.9845686 -1.1201967 -0.51679105 -2.961149 -1.1098182 -0.50000721 -2.9725516 -1.1130391 -0.48101172 -2.9709549 -1.1112498 -0.46205473 -2.9692371 -1.1094604 -0.44451731 -2.9766338 -1.1112498 -0.42240593 -2.9524996 -1.1008712 -0.40833607 -2.9846401 -1.1123234 -0.38638443 -2.9593127 -1.1015871 -0.36718115 -2.9532881 -1.0983661 -0.34444806 -2.9165385 -1.0833352 -0.32571438 -2.9111736 -1.0804721 -0.30863172 -2.9205458 -1.0833352 -0.29070577 -2.9223847 -1.0833352 -0.27190033 -2.9148161 -1.0797564 -0.25514632 -2.9294529 -1.0847667 -0.23927906 -2.9570234 -1.0947874 -0.22127007 -2.9602983 -1.0955031 -0.2066866 -3.0137682 -1.1155443 -0.18696636 -2.9954088 -1.1080289 -0.16868851 -2.9983642 -1.1087446 -0.15047514 -3.0030732 -1.1101761 -0.132416 -3.0123355 -1.113397 -0.11382393 -3.0102921 -1.1123234 -0.095440023 -3.0137339 -1.113397 -0.077257715 -3.0263977 -1.1180495 -0.058868896 -3.0361507 -1.1216283 -0.040350799 -3.0448577 -1.1248492 -0.021694215 -3.0487831 -1.1262807 -0.0029774758 -3.0404549 -1.1230597 --0.015711294 -3.0469522 -1.1255649 --0.034354646 -3.04213 -1.1237755 --0.052890968 -3.0343928 -1.1209124 --0.071464904 -3.0321441 -1.1201967 --0.089433536 -3.0101812 -1.1119655 --0.10733535 -2.9937119 -1.1058816 --0.12476505 -2.9706061 -1.0972924 --0.14540812 -3.0201502 -1.1166179 --0.16383567 -3.0173364 -1.1159022 --0.18701306 -3.0936363 -1.1456062 --0.20487681 -3.0756598 -1.1391643 --0.22516562 -3.0939023 -1.1466798 --0.24165067 -3.0608125 -1.1345119 --0.26216665 -3.0797412 -1.1423852 --0.28156739 -3.0836542 -1.1445326 --0.30274531 -3.1051028 -1.1534795 --0.32054168 -3.0911124 -1.1488271 --0.34092879 -3.102082 -1.1538373 --0.36017156 -3.1017869 -1.1545532 --0.37942353 -3.1013722 -1.1552689 --0.39832708 -3.0980597 -1.154911 --0.47964773 -3.5582633 -1.3338505 --0.62722427 -4.4475212 -1.6792039 --0.52640462 -3.5733571 -1.3420818 --0.68288815 -4.4468732 -1.6820669 --0.71060276 -4.4453654 -1.6831405 --0.73985416 -4.4528966 -1.6877929 --0.76541793 -4.4381509 -1.6838562 --0.79214275 -4.4306135 -1.6827826 --0.81914365 -4.4247513 -1.6824248 --0.8457514 -4.4168906 -1.6813512 --0.87338048 -4.4143658 -1.6824248 --0.89970303 -4.4052644 -1.6809932 --0.92498487 -4.3914375 -1.6777723 --0.95151687 -4.3838539 -1.6770566 --0.9765656 -4.3697314 -1.6738356 --1.0033593 -4.363657 -1.6738356 --1.0223846 -4.3247037 -1.660952 --1.0475793 -4.3129044 -1.6588048 --1.0679244 -4.2819328 -1.649142 --1.0784402 -4.2137842 -1.6248063 --1.1016684 -4.1971526 -1.6208695 --1.1518952 -4.2813883 -1.6570153 --1.1875694 -4.3084478 -1.6706147 --1.2132225 -4.2983842 -1.6695411 --1.2419057 -4.298933 -1.672762 --1.2690538 -4.2939181 -1.6738356 --1.295917 -4.2878385 -1.6745514 --1.3233045 -4.2833748 -1.675983 --1.3456277 -4.2627077 -1.6709726 --1.3783467 -4.2748117 -1.6792039 --1.406302 -4.271596 -1.6813512 --1.4289173 -4.2522645 -1.6770566 --1.4580096 -4.2522502 -1.6806353 --1.4837652 -4.2423425 -1.6802775 --1.5119631 -4.239315 -1.6827826 --1.5360327 -4.2246923 -1.6806353 --1.5583578 -4.2055564 -1.6766987 --1.5831442 -4.1932945 -1.6756251 --1.6121948 -4.1922174 -1.6792039 --1.6195042 -4.135293 -1.6598784 --1.1735775 -2.9430194 -1.1720892 --1.1919646 -2.9366283 -1.1724471 --1.2110301 -2.9318485 -1.1735207 --1.7306283 -4.1184077 -1.669899 --1.7621038 -4.1223083 -1.675983 --1.7925755 -4.1234078 -1.6809932 --1.8087837 -4.0918331 -1.6724042 --1.8323258 -4.077251 -1.6709726 --1.5725875 -3.4424832 -1.4082894 --1.584246 -3.4124415 -1.3997003 --1.5876294 -3.3654959 -1.3839536 --1.5933213 -3.3245332 -1.370712 --1.6112386 -3.3096566 -1.3685648 --1.6344123 -3.3055675 -1.3710699 --1.6588532 -3.303822 -1.3746488 --1.683758 -3.3027327 -1.3785855 --1.7095699 -3.3031204 -1.3832378 --1.7350157 -3.3024888 -1.3875324 --1.7675459 -3.3148527 -1.397553 --2.1161945 -3.9108768 -1.6620257 --2.1280193 -3.8757176 -1.6523629 --2.15903 -3.8756399 -1.658089 --2.183229 -3.8631322 -1.6584469 --2.2110705 -3.8569548 -1.6616678 --2.2281249 -3.8320136 -1.6566575 --2.258235 -3.8295312 -1.6616678 --2.2802525 -3.8131983 -1.6605941 --2.304091 -3.7999337 -1.660952 --2.3263857 -3.7841337 -1.6602362 --2.3505485 -3.7713728 -1.660952 --2.3701541 -3.751353 -1.6584469 --2.3941345 -3.7383122 -1.6591626 --2.4160106 -3.7219851 -1.6584469 --2.4346976 -3.7008495 -1.6555839 --2.4558063 -3.6835101 -1.6545101 --2.4799294 -3.6706934 -1.6555839 --2.5034606 -3.6569488 -1.6562996 --2.5125489 -3.6223364 -1.6473526 --2.5331175 -3.6045594 -1.646279 --2.5519381 -3.5843842 -1.6441317 --2.5804372 -3.5777471 -1.6484263 --2.6050951 -3.5656166 -1.6502156 --2.638588 -3.5653279 -1.6577311 --2.6559348 -3.5430932 -1.6548681 --2.6764956 -3.5252423 -1.6541523 --2.6940918 -3.5035715 -1.6516472 --2.7126701 -3.4832909 -1.6498578 --2.7241633 -3.4541159 -1.6437738 --2.3485131 -2.9404261 -1.4000582 --2.3512456 -2.9070823 -1.3907533 --2.3737714 -2.8983803 -1.3936163 --2.805727 -3.3833458 -1.6423423 --2.8342392 -3.3753636 -1.6469947 --2.8609443 -3.3650241 -1.6505735 --2.8858018 -3.3523605 -1.6530787 --2.894048 -3.3205106 -1.6459211 --2.9217811 -3.3110931 -1.6502156 --2.9395542 -3.2903175 -1.6487842 --2.9584353 -3.2708337 -1.6480684 --2.9784491 -3.2526195 -1.6480684 --2.995177 -3.2308586 -1.646279 --3.0206952 -3.2185481 -1.6494999 --3.0558219 -3.2162008 -1.658089 --3.0774403 -3.199409 -1.6591626 --3.094408 -3.1777899 -1.6577311 --3.1053274 -3.1500976 -1.6530787 --3.1391075 -3.1455264 -1.660952 --3.1643212 -3.1321187 -1.6641729 --3.1841474 -3.1132965 -1.6645308 --3.1877437 -3.078779 -1.6562996 --3.2133303 -3.0656078 -1.6598784 --3.233439 -3.0471144 -1.6605941 --3.2643764 -3.0386701 -1.6670359 --3.2829599 -3.0185831 -1.6670359 --3.3104053 -3.0065444 -1.6716884 --3.3253155 -2.9830575 -1.669899 --3.3512437 -2.9694102 -1.6738356 --3.3694007 -2.9487915 -1.6738356 --3.3831925 -2.9243975 -1.6716884 --3.4081736 -2.909647 -1.6752672 --3.4273903 -2.889884 -1.675983 --3.4515154 -2.8741779 -1.6792039 --3.4755764 -2.8582842 -1.6824248 --3.4988472 -2.8416147 -1.6852878 --3.53297 -2.8335314 -1.693519 --3.558341 -2.8181779 -1.6974556 --3.5821855 -2.8014691 -1.7006766 --3.6044807 -2.7834318 -1.7031817 --3.6274316 -2.7657926 -1.7060448 --3.6383662 -2.7389896 -1.7031817 --3.6566026 -2.7177277 -1.7038975 --3.6799846 -2.7002122 -1.7071184 --3.703289 -2.682512 -1.7103393 --3.7265146 -2.6646273 -1.7135602 --3.7435572 -2.6422503 -1.7139181 --3.7482073 -2.611223 -1.70855 --3.7672365 -2.5902917 -1.7099814 --3.7961938 -2.5760422 -1.7160654 --3.8158078 -2.555299 -1.7178547 --3.8337519 -2.5333822 -1.7189285 --3.8492243 -2.5098109 -1.7189285 --3.8779011 -2.4947348 -1.7250124 --3.9010189 -2.475898 -1.7285912 --3.9303825 -2.4608359 -1.735033 --3.9636796 -2.4479599 -1.7432642 --3.9818151 -2.4255366 -1.7446958 --4.0006247 -2.4034636 -1.7464851 --4.0257401 -2.3850594 -1.7511375 --4.052392 -2.3673792 -1.7565057 --4.0700784 -2.3443341 -1.7579372 --4.0933175 -2.3243892 -1.761874 --4.1262422 -2.3097212 -1.7701051 --4.1411543 -2.2848108 -1.770463 --4.1583767 -2.2611425 -1.7718946 --4.1721725 -2.2355847 -1.7718946 --4.1924171 -2.2134309 -1.7747576 --4.2075763 -2.1885269 -1.7754734 --4.1935024 -2.1486149 -1.7636633 --4.1649275 -2.1018057 -1.7457694 --4.1835985 -2.0791199 -1.7482746 --4.2155671 -2.0628521 -1.7565057 --4.2424455 -2.043838 -1.7625897 --4.2751546 -2.0273726 -1.7711787 --4.3078208 -2.0105824 -1.7797679 --4.3531685 -1.9993142 -1.7937251 --4.4036441 -1.9898721 -1.8098297 --4.4533134 -1.9795059 -1.8255764 --4.508153 -1.970849 -1.8434703 --4.566484 -1.9630684 -1.8627958 --4.6369286 -1.9597355 -1.8871316 --4.6962919 -1.9509534 -1.9068149 --4.7712808 -1.9478697 -1.9329401 --4.8186746 -1.9328122 -1.9476131 --4.8591118 -1.914507 -1.9594232 --4.8855715 -1.8903855 -1.9655071 --4.9092989 -1.8650161 -1.9705174 --4.9250245 -1.8364897 -1.9723068 --4.9388309 -1.8071985 -1.9733804 --4.9498267 -1.7768605 -1.9733804 --4.964159 -1.747696 -1.974812 --4.9686108 -1.7150704 -1.9723068 --4.976387 -1.6836534 -1.9712331 --4.9821925 -1.6516176 -1.9694438 --5.0020022 -1.6241893 -1.9733804 --5.0074244 -1.5920521 -1.9715911 --5.0144243 -1.5604645 -1.9705174 --5.017652 -1.5277629 -1.9680122 --5.0269318 -1.4969463 -1.9680122 --5.0198846 -1.4613743 -1.9615705 --5.0521078 -1.4371899 -1.9708753 --5.0374398 -1.3996625 -1.9615705 --5.0360203 -1.3660372 -1.9576337 --5.0542364 -1.3377399 -1.9615705 --5.0677743 -1.3081032 -1.9637177 --5.0838552 -1.2790344 -1.9669386 --5.0888867 -1.2471493 -1.965865 --5.1064339 -1.2182854 -1.9698017 --5.1165419 -1.1875637 -1.9708753 --5.1246433 -1.1563524 -1.9712331 --5.1243453 -1.1232862 -1.9683702 --5.1357079 -1.0927948 -1.9701595 --5.1368294 -1.0601293 -1.9680122 --5.1459842 -1.02914 -1.9690859 --0 -0 -0 --5.1224318 -0.95920771 -1.9551287 --5.155786 -0.93274808 -1.965865 --5.1641717 -0.90157723 -1.9669386 --5.19631 -0.87436891 -1.9773171 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 --0 -0 -0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5351443 13.340423 5.4857445 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9488316 -2.2632864 3.2971976 128.0 +7.969614 -2.3221679 3.3115354 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9979534 -2.5449817 3.3479314 128.0 +7.9919157 -2.5971713 3.3519754 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.3939185 -2.2862976 1.9880397 128.0 +4.3830962 -2.3149531 1.9895103 128.0 +4.3425841 -2.3277383 1.9777459 128.0 +4.3355713 -2.3583412 1.9810547 128.0 +4.3120642 -2.3799541 1.9770106 128.0 +4.2689838 -2.3904581 1.9641433 128.0 +4.226747 -2.4009831 1.9516436 128.0 +4.2022672 -2.421299 1.9472319 128.0 +4.1961622 -2.4522016 1.9512759 128.0 +4.0786486 -2.4171882 1.9042183 128.0 +4.0924315 -2.4594212 1.9174533 128.0 +4.0486789 -2.4670575 1.9042183 128.0 +3.5857356 -2.2150939 1.6961354 128.0 +3.6603353 -2.2923615 1.7373109 128.0 +3.9154494 -2.4858129 1.8634106 128.0 +3.9704947 -2.5551016 1.896498 128.0 +3.8963318 -2.5412979 1.8689251 128.0 +3.8643763 -2.5543842 1.8612047 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.0545526 -2.8255713 1.983628 128.0 +4.1655059 -2.9410751 2.0457587 128.0 +0 -0 0 128.0 +2.9402294 -2.1300862 1.465259 128.0 +2.9308519 -2.1508391 1.4670972 128.0 +2.9026759 -2.1576812 1.4597443 128.0 +3.7584021 -2.830193 1.8898804 128.0 +3.729876 -2.8447387 1.8843659 128.0 +3.560034 -2.7498541 1.8082649 128.0 +2.903774 -2.2712555 1.4873172 128.0 +3.2279439 -2.5570679 1.657901 128.0 +2.8372459 -2.2758653 1.4678324 128.0 +2.8520942 -2.3166943 1.4825379 128.0 +2.8529043 -2.3465614 1.4902583 128.0 +4.0857925 -3.4035554 2.1321537 128.0 +2.9418752 -2.4809532 1.5512862 128.0 +3.968065 -3.3887992 2.0928164 128.0 +3.0216296 -2.612391 1.6090053 128.0 +3.0048437 -2.6302695 1.6086377 128.0 +2.8209605 -2.4999571 1.5200369 128.0 +2.7502079 -2.4675174 1.490626 128.0 +2.7370803 -2.4862223 1.4917289 128.0 +2.7265639 -2.5073781 1.4943023 128.0 +2.7097666 -2.5227928 1.4935671 128.0 +2.7307694 -2.5738277 1.5134195 128.0 +3.9565771 -3.776047 2.1920786 128.0 +2.922313 -2.8230159 1.6362104 128.0 +2.9428232 -2.8779671 1.6571658 128.0 +2.9647501 -2.9352386 1.6792241 128.0 +3.0267956 -3.0337141 1.7240759 128.0 +3.2267456 -3.2741785 1.8472345 128.0 +2.7448459 -2.8193479 1.5854765 128.0 +2.8125589 -2.9246423 1.6340046 128.0 +2.8419425 -2.9917531 1.6612098 128.0 +2.8413439 -3.0281284 1.6715037 128.0 +2.9010746 -3.1301036 1.7170907 128.0 +2.8403811 -3.1025622 1.6928266 128.0 +2.9740608 -3.288969 1.7828979 128.0 +2.9216201 -3.27108 1.7637807 128.0 +2.8861182 -3.2715065 1.7545898 128.0 +2.8916416 -3.3186088 1.7700306 128.0 +2.8178585 -3.2742455 1.7376785 128.0 +2.7182388 -3.1979189 1.6891503 128.0 +2.6573219 -3.1653798 1.6637833 128.0 +2.65921 -3.2074044 1.6770183 128.0 +2.5900083 -3.1632047 1.6461366 128.0 +2.5851634 -3.19712 1.6553277 128.0 +2.5202522 -3.156225 1.6266519 128.0 +2.6896348 -3.4112108 1.7472371 128.0 +3.2374752 -4.1586623 2.1134043 128.0 +2.7036643 -3.5169663 1.7836332 128.0 +3.1980014 -4.2136374 2.1211245 128.0 +2.661417 -3.5513682 1.7843684 128.0 +2.6451054 -3.575109 1.7880448 128.0 +2.6286023 -3.598783 1.7917212 128.0 +2.6075585 -3.616353 1.7924565 128.0 +2.5815465 -3.6269801 1.789883 128.0 +2.5458829 -3.6237247 1.7806921 128.0 +2.5172436 -3.6301055 1.7762804 128.0 +2.4838967 -3.6293633 1.7685601 128.0 +0 -0 0 128.0 +2.0138299 -3.0210435 1.465259 128.0 +1.995766 -3.0341206 1.4656266 128.0 +1.9806536 -3.0517709 1.4682001 128.0 +1.9593848 -3.0599499 1.4663619 128.0 +1.9480187 -3.0837107 1.4718764 128.0 +1.8897341 -3.0324516 1.4424654 128.0 +1.8657378 -3.0352728 1.4384214 128.0 +1.8331047 -3.0235972 1.4277599 128.0 +1.7944851 -3.0012579 1.4123192 128.0 +1.4432333 -2.447331 1.1531346 128.0 +1.9252216 -3.3117361 1.544301 128.0 +1.4140165 -2.4664714 1.1538699 128.0 +1.4061716 -2.4880581 1.159752 128.0 +1.3605776 -2.4421954 1.1351203 128.0 +1.3415416 -2.4431596 1.1318116 128.0 +1.5273064 -2.8227546 1.298719 128.0 +1.4780405 -2.7721558 1.2718816 128.0 +1.3758643 -2.6189535 1.1994569 128.0 +1.2726371 -2.4588253 1.1244588 128.0 +1.4596828 -2.8635299 1.3005573 128.0 +1.5083795 -3.0046031 1.3590117 128.0 +1.5471606 -3.1297009 1.4101133 128.0 +1.2155716 -2.4968436 1.1277676 128.0 +1.6833229 -3.5133278 1.5700357 128.0 +1.6506341 -3.5000355 1.5597419 128.0 +1.3032149 -2.8073275 1.2534996 128.0 +1.3122176 -2.8728023 1.278499 128.0 +1.2812352 -2.8511059 1.2656317 128.0 +1.2479396 -2.8231835 1.250191 128.0 +0.96055067 -2.2089436 0.98218304 128.0 +0.98094124 -2.2943356 1.0163734 128.0 +1.4671522 -3.4922237 1.5273898 128.0 +1.451726 -3.515775 1.5336396 128.0 +0.95775992 -2.3594043 1.0365934 128.0 +0.94395304 -2.3669646 1.0373287 128.0 +1.3840559 -3.5349722 1.5306984 128.0 +0.92617327 -2.4078865 1.0498284 128.0 +1.034101 -2.7389631 1.1873249 128.0 +1.2651724 -3.4150715 1.4696707 128.0 +0.91946858 -2.5285463 1.0935773 128.0 +1.2212965 -3.4250836 1.4674648 128.0 +1.2824463 -3.6678033 1.5659916 128.0 +1.147539 -3.3474326 1.4288628 128.0 +1.0044848 -2.9894094 1.2766608 128.0 +0.92832136 -2.819711 1.203501 128.0 +0.91527796 -2.8386321 1.2090155 128.0 +0.88190609 -2.7936389 1.1880602 128.0 +0.86913449 -2.813216 1.1939423 128.0 +0.87200856 -2.8852689 1.2215152 128.0 +1.0609206 -3.5907371 1.5101107 128.0 +0.74529344 -2.5794404 1.0913714 128.0 +0.74156076 -2.6269298 1.1090181 128.0 +0.98428309 -3.5719984 1.4946699 128.0 +0.90323919 -3.3579288 1.4045987 128.0 +0.87696052 -3.3418174 1.3957754 128.0 +0.8720938 -3.4084051 1.4207748 128.0 +0.77364761 -3.1023574 1.2939398 128.0 +0.93363732 -3.8454344 1.5942998 128.0 +0.6883145 -2.9115889 1.2126919 128.0 +0.56100941 -2.4389904 1.0193144 128.0 +0.53651738 -2.3997266 1.0020355 128.0 +0.52985567 -2.4402378 1.0171087 128.0 +0.69069278 -3.2798038 1.3549676 128.0 +0.52457225 -2.5677502 1.0660044 128.0 +0.51925474 -2.6238372 1.0873275 128.0 +0.50820684 -2.6534638 1.097989 128.0 +0.48566574 -2.6226959 1.0843863 128.0 +0.46989065 -2.6274574 1.0851216 128.0 +0.45502153 -2.6376233 1.0880626 128.0 +0.43609169 -2.6238513 1.0814452 128.0 +0 -0 0 128.0 +1.1900495 -7.762095 3.1343341 128.0 +1.1526712 -7.8391781 3.1622744 128.0 +0.4601472 -3.2636645 1.3329093 128.0 +0.31973183 -2.3705482 0.97556555 128.0 +0.30376211 -2.3613963 0.97115391 128.0 +0.2902799 -2.3715239 0.97446269 128.0 +0.27636421 -2.3788033 0.97666848 128.0 +0.26358441 -2.3970942 0.98328596 128.0 +0.25278741 -2.4365935 0.99835908 128.0 +0.2726002 -2.7963135 1.1406349 128.0 +0.32369035 -3.5490437 1.438789 128.0 +0.30944133 -3.6399217 1.4740822 128.0 +0.28491774 -3.6139383 1.4630531 128.0 +0.2642138 -3.6360245 1.4711411 128.0 +0.14874732 -2.229893 0.9134348 128.0 +0.13773625 -2.275322 0.93108141 128.0 +0.1515798 -2.7924387 1.1354879 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.10584817 -2.9555397 1.1990893 128.0 +0.09674453 -3.264751 1.3211449 128.0 +0.07662455 -3.2615643 1.3196745 128.0 +0.057400484 -3.3084648 1.3380563 128.0 +0.036806334 -3.2817872 1.3273948 128.0 +0.016379403 -3.2205741 1.3031307 128.0 +-0.0033832951 -3.2215438 1.3034984 128.0 +-0.023754396 -3.3014376 1.3351152 128.0 +-0.043998457 -3.3002996 1.3347476 128.0 +-0.064930029 -3.3343697 1.3483502 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.2875165 -3.6561685 1.5623153 128.0 +-1.3096116 -3.6473243 1.5619477 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.2623429 -3.2620118 1.4126868 128.0 +-1.2768747 -3.2403631 1.4068046 128.0 +-1.2925746 -3.2221115 1.4023929 128.0 +-1.3672057 -3.3484123 1.4597443 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6324087 -3.7330129 1.6406221 128.0 +-1.6942242 -3.8104403 1.6784889 128.0 +-1.7191058 -3.8033624 1.6799593 128.0 +-1.7280372 -3.7614794 1.6663568 128.0 +-3.4012337 -7.2827697 3.2074938 128.0 +-3.3617082 -7.0844979 3.1299224 128.0 +-3.4010749 -7.0553608 3.126246 128.0 +-3.435302 -7.015986 3.1181579 128.0 +-1.5158021 -3.0497537 1.3762907 128.0 +-1.5256811 -3.0229638 1.3685702 128.0 +-1.5514156 -3.0276127 1.3748201 128.0 +-1.5665278 -3.0114374 1.371879 128.0 +-3.8539882 -7.2953944 3.291683 128.0 +-3.8494501 -7.1798215 3.2505076 128.0 +-3.8938768 -7.1568832 3.2508752 128.0 +-0 -0 0 128.0 +-1.963174 -3.5063548 1.6185639 128.0 +-0 -0 0 128.0 +-1.6604819 -2.8825824 1.3450414 128.0 +-1.7443253 -2.9855349 1.3968784 128.0 +-2.5319765 -4.2722263 1.9931866 128.0 +-2.4340219 -4.0501914 1.8979685 128.0 +-2.3741081 -3.8962257 1.8336319 128.0 +-2.3114216 -3.7415707 1.7685601 128.0 +-2.2548313 -3.6004455 1.7093704 128.0 +-2.2494552 -3.5433683 1.6891503 128.0 +-2.0068421 -3.1189981 1.4961405 128.0 +-2.0015466 -3.069243 1.4784939 128.0 +-2.0162375 -3.0506985 1.4755528 128.0 +-3.0559394 -4.5616546 2.2005343 128.0 +-3.3822131 -4.9820976 2.4104555 128.0 +-5.5705485 -8.0968809 3.9151964 128.0 +-5.9259624 -8.5011845 4.1265879 128.0 +-5.617444 -7.9542336 3.8795354 128.0 +-2.4865239 -3.4765773 1.7196642 128.0 +-5.7479281 -7.9306288 3.9019616 128.0 +-5.7810683 -7.8742228 3.8916676 128.0 +-5.2070746 -7.0021439 3.4795458 128.0 +-6.2706671 -8.3248425 4.1501169 128.0 +-0 -0 0 128.0 +-5.3561201 -6.9323382 3.4931483 128.0 +-5.4266415 -6.9352269 3.5111625 128.0 +-5.4667821 -6.8988843 3.509692 128.0 +-5.5229812 -6.8826165 3.5185153 128.0 +-0 -0 0 128.0 +-5.6111627 -6.8193488 3.5210888 128.0 +-3.2154152 -3.8600426 2.0159802 128.0 +-5.7106171 -6.7691679 3.5310149 128.0 +-5.7955399 -6.7849073 3.5574849 128.0 +-0 -0 0 128.0 +-2.5653198 -2.9306891 1.5696681 128.0 +-3.1848421 -3.593298 1.9281148 128.0 +-3.2142854 -3.5819924 1.9325265 128.0 +-2.6782527 -2.9483502 1.6045936 128.0 +-2.7107763 -2.9476006 1.6130493 128.0 +-2.7357845 -2.9383969 1.6170933 128.0 +-2.6810229 -2.844429 1.5751827 128.0 +-2.6798017 -2.8084192 1.5645211 128.0 +-3.6238074 -3.750788 2.0917137 128.0 +-3.6545587 -3.7364583 2.0961251 128.0 +-2.7441311 -2.7718306 1.5718739 128.0 +-3.6645756 -3.6558704 2.0762727 128.0 +-3.0416284 -2.9976826 1.7181937 128.0 +-2.9079962 -2.8310995 1.6343722 128.0 +-2.9192784 -2.8074033 1.6310636 128.0 +-2.897332 -2.752301 1.6097406 128.0 +-2.9114518 -2.7319269 1.60827 128.0 +-3.1819541 -2.9491045 1.7450312 128.0 +-3.2281199 -2.9552636 1.7601044 128.0 +-3.1047533 -2.8075726 1.6847386 128.0 +-3.0310392 -2.7073402 1.6365781 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-4.0260353 -3.2550223 2.0766404 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-4.1973372 -3.1856363 2.1130366 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-4.0404425 -2.9510167 2.0078921 128.0 +-4.0524378 -2.9218197 2.004951 128.0 +-5.7965436 -4.1248894 2.8424296 128.0 +-5.7479191 -4.0374074 2.8067689 128.0 +-5.9415059 -4.1191325 2.8880167 128.0 +-5.9336619 -4.0600224 2.8722084 128.0 +-5.9337969 -4.0068879 2.8604438 128.0 +-6.0116749 -4.0059772 2.8858109 128.0 +-6.0454674 -3.9751446 2.8902225 128.0 +-6.0947127 -3.9541686 2.9019871 128.0 +-5.8548775 -3.7477822 2.7780931 128.0 +-0 -0 0 128.0 +-5.8593774 -3.6500895 2.758976 128.0 +-6.6519008 -4.0871687 3.1163197 128.0 +-5.8520279 -3.5465903 2.7350795 128.0 +-0 -0 0 128.0 +-5.8975129 -3.4759259 2.7361825 128.0 +-7.3709908 -4.2833204 3.400136 128.0 +-6.9573288 -3.9861174 3.1997736 128.0 +-7.448103 -4.2067189 3.4115329 128.0 +-8.5829649 -4.7782664 3.9133582 128.0 +-5.3604932 -2.9418387 2.4472191 128.0 +-7.0816903 -3.8296542 3.2126408 128.0 +-5.3789544 -2.8666542 2.4394989 128.0 +-7.1429749 -3.7502418 3.2192583 128.0 +-7.0915041 -3.6679022 3.1861708 128.0 +-7.4113755 -3.7758327 3.3181529 128.0 +-6.7660689 -3.3950613 3.022572 128.0 +-6.5841584 -3.2534051 2.9332361 128.0 +-6.1498766 -2.9920983 2.733609 128.0 +-5.5289569 -2.6483071 2.453469 128.0 +-5.5249124 -2.6048181 2.4446456 128.0 +-5.6707153 -2.6311216 2.5012619 128.0 +-8.741827 -3.990366 3.8288016 128.0 +-6.3278465 -2.8420353 2.7722108 128.0 +-7.4408937 -3.2869997 3.2457283 128.0 +-9.1157608 -3.9599135 3.9589453 128.0 +-7.5157361 -3.2104137 3.2608013 128.0 +-7.5344357 -3.1638777 3.2604337 128.0 +-7.0370374 -2.904434 3.0394835 128.0 +-7.0400748 -2.8552613 3.0332336 128.0 +-7.0531421 -2.8102901 3.0313954 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-11.876719 -4.3968048 5.0364914 128.0 +-9.6377573 -3.5010831 4.0835743 128.0 +-12.423872 -4.4267273 5.2438388 128.0 +-0 -0 0 128.0 +-12.581958 -4.3097863 5.2875876 128.0 +-6.6447129 -2.2311912 2.8008866 128.0 +-10.984507 -3.6127696 4.6012082 128.0 +-12.161667 -3.9172733 5.0809755 128.0 +-10.909163 -3.4402344 4.5519447 128.0 +-8.6302633 -2.6637287 3.6004984 128.0 +-6.5862746 -1.9889675 2.7497849 128.0 +-6.6090579 -1.9516762 2.7541966 128.0 +-6.6521826 -1.9201082 2.7670639 128.0 +-10.963908 -3.0911138 4.5331955 128.0 +-6.9110589 -1.9032298 2.8637526 128.0 +-6.9172182 -1.859341 2.8615468 128.0 +-6.9554844 -1.823935 2.872576 128.0 +-8.8469801 -2.2616866 3.6398358 128.0 +-8.8020334 -2.1927555 3.6159394 128.0 +-7.1505589 -1.7350441 2.9387507 128.0 +-7.0850415 -1.6731945 2.9078691 128.0 +-9.7028913 -2.2282095 3.9655628 128.0 +-8.9484997 -1.9973418 3.6545413 128.0 +-8.8406134 -1.9164068 3.6060131 128.0 +-8.6965828 -1.8294104 3.5431471 128.0 +-12.220451 -2.4920003 4.9603901 128.0 +-11.055835 -2.1840565 4.4850349 128.0 +-12.245544 -2.3409765 4.9585519 128.0 +-12.293514 -2.2720454 4.9721546 128.0 +-12.074682 -2.1550901 4.8787746 128.0 +-12.106009 -2.0841146 4.8861275 128.0 +-0 -0 0 128.0 +-12.306999 -1.9635129 4.9567142 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.912019 -1.8169399 5.1846495 128.0 +-12.359775 -1.6620073 4.9600224 128.0 +-12.980387 -1.6643806 5.2033987 128.0 +-12.585098 -1.5353028 5.042006 128.0 +-12.480654 -1.444909 4.9967866 128.0 +-12.347844 -1.3528196 4.9405379 128.0 +-13.035825 -1.347235 5.2107515 128.0 +-12.942953 -1.2574307 5.1706791 128.0 +-12.948573 -1.1778222 5.1699438 128.0 +-12.942583 -1.0972505 5.1647968 128.0 +-12.960197 -1.018689 5.1692085 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.2283025 14.441788 5.6277099 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5173154 13.328074 5.3104157 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9587998 -2.2579985 3.1991751 128.0 +7.9833579 -2.3179851 3.2145569 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9721351 -2.528451 3.2338736 128.0 +7.9760156 -2.5836496 3.2417433 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.5665121 -2.3713434 2.001184 128.0 +4.4742198 -2.358393 1.9675586 128.0 +4.4481368 -2.3796356 1.9625506 128.0 +4.4211411 -2.4002018 1.9571849 128.0 +4.3809733 -2.4133184 1.9460957 128.0 +4.3245082 -2.4169226 1.9278522 128.0 +4.2998481 -2.4378858 1.9235595 128.0 +4.2645698 -2.4525859 1.9146166 128.0 +0 -0 0 128.0 +4.1594014 -2.4605229 1.8813491 128.0 +4.1570392 -2.4936831 1.8870724 128.0 +3.5791581 -2.1770656 1.6348827 128.0 +4.096714 -2.5263748 1.873837 128.0 +4.1769505 -2.6113558 1.9171207 128.0 +4.229475 -2.6804204 1.9482419 128.0 +4.1257329 -2.650305 1.9085355 128.0 +4.0139146 -2.6134157 1.8648942 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +2.9812517 -2.0741069 1.4213262 128.0 +2.9951856 -2.1111879 1.4338462 128.0 +4.2688856 -3.0481434 2.0394595 128.0 +4.411274 -3.1908438 2.115653 128.0 +4.3577137 -3.1930161 2.099556 128.0 +2.9792175 -2.2113259 1.4513743 128.0 +2.954396 -2.221148 1.4460086 128.0 +0 -0 0 128.0 +3.5547788 -2.7413387 1.7497095 128.0 +2.85781 -2.2320478 1.4191798 128.0 +3.5230682 -2.7864926 1.7507826 128.0 +2.8586316 -2.2897143 1.4331307 128.0 +2.8633866 -2.3225043 1.4424313 128.0 +2.8259878 -2.3210661 1.4309845 128.0 +2.8325162 -2.3556764 1.4413582 128.0 +3.1709054 -2.6701195 1.61807 128.0 +3.1729393 -2.7052765 1.6273706 128.0 +2.9159236 -2.5172422 1.5057471 128.0 +2.9911327 -2.6143544 1.5518925 128.0 +2.910691 -2.5757306 1.5189826 128.0 +3.9069021 -3.500097 2.0394595 128.0 +3.9517601 -3.5842261 2.0738003 128.0 +4.0204935 -3.6917708 2.1210189 128.0 +2.6927042 -2.5033407 1.4384965 128.0 +2.9710882 -2.7962718 1.5930299 128.0 +2.9619882 -2.8221788 1.5973225 128.0 +2.6844838 -2.5894303 1.4588864 128.0 +2.5903668 -2.5295277 1.4170336 128.0 +2.5794466 -2.5499694 1.4195375 128.0 +2.6093006 -2.6113234 1.4442199 128.0 +3.0747807 -3.1150594 1.7067835 128.0 +3.0503933 -3.1285188 1.7039219 128.0 +3.1017566 -3.220484 1.7429129 128.0 +0 -0 0 128.0 +3.1988683 -3.4039197 1.8194642 128.0 +3.1086664 -3.3488889 1.7804731 128.0 +3.0262058 -3.3004527 1.7454169 128.0 +2.9833283 -3.2940433 1.7325392 128.0 +3.0128736 -3.3679614 1.7611564 128.0 +2.9463909 -3.3346038 1.7346854 128.0 +0 -0 0 128.0 +2.780859 -3.2262249 1.6617113 128.0 +2.7525353 -3.233273 1.6567034 128.0 +2.856456 -3.397331 1.7303928 128.0 +2.7568014 -3.3199675 1.6831744 128.0 +2.580035 -3.1462049 1.5887372 128.0 +2.5248275 -3.117712 1.5669166 128.0 +2.5342321 -3.1688781 1.5844446 128.0 +2.5147405 -3.1843684 1.5844446 128.0 +2.7691016 -3.5509748 1.7550752 128.0 +3.2349966 -4.2012148 2.0612803 128.0 +6.3218999 -8.3145418 4.0312228 128.0 +3.2566442 -4.3384266 2.1081409 128.0 +3.2377479 -4.3688302 2.1131492 128.0 +2.6693509 -3.6485643 1.7618718 128.0 +2.9022789 -4.0183864 1.9289253 128.0 +2.7566648 -3.8665659 1.8491546 128.0 +2.7554626 -3.9154806 1.8641787 128.0 +2.8358138 -4.0826306 1.934291 128.0 +2.5920851 -3.781101 1.7861966 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +2.0174885 -3.1037309 1.4481548 128.0 +1.9615993 -3.0586727 1.4220415 128.0 +1.9283129 -3.0477676 1.4116678 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.9038813 -3.1354229 1.4352771 128.0 +1.8303829 -3.0565207 1.3948551 128.0 +1.8310663 -3.1006596 1.4095215 128.0 +1.4792532 -2.5405247 1.1562585 128.0 +1.4468958 -2.5204005 1.1433808 128.0 +1.74746 -3.0875175 1.3891317 128.0 +1.4722849 -2.6390824 1.1877375 128.0 +1.6779367 -3.0514531 1.3640915 128.0 +1.7130287 -3.1610293 1.4073752 128.0 +1.673802 -3.1344147 1.391278 128.0 +1.3953326 -2.652107 1.1780792 128.0 +1.253523 -2.4185429 1.073626 128.0 +1.7712772 -3.4690762 1.5222021 128.0 +1.7285572 -3.4373331 1.5039586 128.0 +1.5039153 -3.0370066 1.3283199 128.0 +1.1544933 -2.3680022 1.0392853 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.5219746 -3.326256 1.4313422 128.0 +1.3631231 -3.0281451 1.3022066 128.0 +0.98788905 -2.2312961 0.96488041 128.0 +0.98275709 -2.2570064 0.97310787 128.0 +1.4108392 -3.2947917 1.4030826 128.0 +1.109008 -2.6346688 1.1251372 128.0 +1.3820856 -3.3403308 1.4148872 128.0 +1.4122251 -3.4733117 1.4663984 128.0 +1.4012817 -3.5079265 1.4771298 128.0 +0.91300511 -2.3272901 0.98777425 128.0 +0.914828 -2.3746731 1.0049446 128.0 +1.3034269 -3.4457855 1.4413582 128.0 +1.0195658 -2.7463887 1.1523236 128.0 +1.2354646 -3.3913302 1.4127409 128.0 +0.93171871 -2.6074486 1.0907965 128.0 +1.1606973 -3.3119428 1.3744653 128.0 +1.1027155 -3.2094951 1.3301085 128.0 +1.0511039 -3.1215091 1.2918329 128.0 +0.96578658 -2.9274874 1.2109891 128.0 +0.91678512 -2.8373935 1.1723558 128.0 +0.88160646 -2.7868762 1.1498196 128.0 +0.83050478 -2.6825149 1.1058205 128.0 +1.108956 -3.6607962 1.4953734 128.0 +0.68077648 -2.2985542 0.94842547 128.0 +0.71213126 -2.4596548 1.0110258 128.0 +0.72245842 -2.5538311 1.0467974 128.0 +0.61048567 -2.2098873 0.90836126 128.0 +0.61199802 -2.2694898 0.93053967 128.0 +0.88192892 -3.3514552 1.3576527 128.0 +0.88154954 -3.4354951 1.3887739 128.0 +0.77319473 -3.0920646 1.2510532 128.0 +0.5702669 -2.3418915 0.95343345 128.0 +0.68907267 -2.9068749 1.174502 128.0 +0.67017376 -2.9064987 1.1727134 128.0 +0.53952879 -2.4075747 0.97525418 128.0 +0.76066244 -3.4939001 1.3998631 128.0 +0.7278142 -3.444597 1.378758 128.0 +1.6000967 -7.8071303 3.0829175 128.0 +0.5221234 -2.6307561 1.0575289 128.0 +0.49962485 -2.6008968 1.044651 128.0 +0.48177928 -2.5938144 1.0407162 128.0 +0.46486467 -2.591207 1.0385699 128.0 +0.45134741 -2.6078124 1.0439357 128.0 +0.44256344 -2.6538239 1.0607483 128.0 +0.42597538 -2.6546454 1.0600328 128.0 +0.41252726 -2.6756673 1.0671872 128.0 +0.47651643 -3.2213202 1.2775242 128.0 +0.42777121 -3.0198505 1.198469 128.0 +0.42302915 -3.1242092 1.2378178 128.0 +0.34709805 -2.6877637 1.0682603 128.0 +0.29262173 -2.3812051 0.94914091 128.0 +0.28093112 -2.407999 0.95879924 128.0 +0.39386666 -3.5643206 1.4037981 128.0 +0.36694661 -3.5183735 1.3851968 128.0 +0.24349649 -2.4833934 0.98598564 128.0 +0.33315513 -3.6249008 1.4245455 128.0 +0.3053968 -3.5626783 1.3998631 128.0 +0.1725345 -2.1709547 0.86436218 128.0 +0.26192799 -3.5698831 1.401294 128.0 +0.14412448 -2.1468203 0.8543461 128.0 +0.13134812 -2.1541889 0.85685015 128.0 +0.18827684 -3.4305067 1.3462057 128.0 +0.16767967 -3.4409246 1.3497829 128.0 +0.14497009 -3.4045694 1.3354743 128.0 +0 -0 0 128.0 +0.09784437 -3.230613 1.2682236 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.017159967 -2.997654 1.1784369 128.0 +-0.0012378512 -3.0126441 1.1841604 128.0 +-0.019141575 -2.9219999 1.1494619 128.0 +-0.037468899 -2.9535754 1.1616242 128.0 +-0 -0 0 128.0 +-0.073826902 -2.9575608 1.1634128 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.3275921 -3.5673773 1.488219 128.0 +-0 -0 0 128.0 +-1.3537803 -3.5055168 1.4696178 128.0 +-1.2819891 -3.2598848 1.3719614 128.0 +-1.3019673 -3.2519572 1.3719614 128.0 +-1.3166118 -3.2309349 1.3665956 128.0 +-1.5459689 -3.7283058 1.5762172 128.0 +-0 -0 0 128.0 +-1.5978633 -3.7236428 1.5822984 128.0 +-1.6341243 -3.7445815 1.5951762 128.0 +-1.6892567 -3.8070409 1.625582 128.0 +-1.7102811 -3.7914968 1.6234357 128.0 +-1.7296219 -3.7724421 1.6198586 128.0 +-3.3138368 -7.1130314 3.0360565 128.0 +-3.4117515 -7.2073565 3.0847061 128.0 +-3.3672869 -7.0019779 3.0063663 128.0 +-3.4085476 -6.9778285 3.0049353 128.0 +-1.5100595 -3.0433414 1.3315394 128.0 +-1.5337458 -3.0440266 1.335832 128.0 +-1.5574971 -3.0445354 1.3401246 128.0 +-0 -0 0 128.0 +-4.5365858 -8.6073332 3.7572122 128.0 +-3.9185266 -7.3252358 3.2124107 128.0 +-3.952708 -7.2813573 3.2038255 128.0 +-4.0054202 -7.2716904 3.2102644 128.0 +-4.0431304 -7.2347488 3.2048986 128.0 +-1.9653987 -3.4663429 1.5565429 128.0 +-1.7571442 -3.055114 1.3801888 128.0 +-1.7735047 -3.0402415 1.3784002 128.0 +-4.2080531 -7.1140561 3.1963134 128.0 +-4.2540264 -7.0921059 3.198102 128.0 +-4.3037705 -7.0762424 3.2027524 128.0 +-2.1945751 -3.5585785 1.6316632 128.0 +-2.212904 -3.5395029 1.6291592 128.0 +-2.2220848 -3.5061381 1.6202163 128.0 +-1.973063 -3.0712881 1.4284805 128.0 +-1.9959466 -3.0653846 1.4313422 128.0 +-2.9660904 -4.4951081 2.093117 128.0 +-2.9941351 -4.4776001 2.0934746 128.0 +-5.6766043 -8.3780136 3.9067376 128.0 +-4.6449747 -6.7655478 3.1737773 128.0 +-5.6883388 -8.1773968 3.8459258 128.0 +-4.8685846 -6.9080305 3.267499 128.0 +-5.7209778 -8.0127344 3.801569 128.0 +-5.712574 -7.8980293 3.7640088 128.0 +-5.1963515 -7.0922008 3.3980653 128.0 +-5.2536831 -7.0789309 3.4070082 128.0 +-5.2835536 -7.028646 3.398423 128.0 +-5.3260155 -6.9953513 3.3980653 128.0 +-5.3950672 -6.9965587 3.4145203 128.0 +-0 -0 0 128.0 +-5.4990549 -6.9532652 3.4259672 128.0 +-5.5270228 -6.9011698 3.4170244 128.0 +-3.0406733 -3.7489965 1.8792027 128.0 +-3.0677679 -3.7353206 1.8817067 128.0 +-3.1007793 -3.7286336 1.8877879 128.0 +-3.1891553 -3.7874031 1.926779 128.0 +-0 -0 0 128.0 +-3.193902 -3.6999109 1.9024543 128.0 +-3.2005677 -3.6619613 1.8931537 128.0 +-3.1889439 -3.6037874 1.8734792 128.0 +-0 -0 0 128.0 +-3.3878753 -3.7352438 1.9618351 128.0 +-3.4151516 -3.7192011 1.9643391 128.0 +-2.8167703 -3.0299134 1.6148505 128.0 +-2.6580439 -2.8241906 1.5157632 128.0 +-3.5377803 -3.7131813 1.994745 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.6363811 -3.6786492 2.0115578 128.0 +-3.656903 -3.6542871 2.0104845 128.0 +-2.8558874 -2.8189151 1.5672743 128.0 +-2.8971982 -2.8248098 1.580152 128.0 +-3.0974085 -2.9831979 1.6774509 128.0 +-3.142715 -2.9898853 1.6917595 128.0 +-3.1507947 -2.9609523 1.6863937 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.0400126 -2.6860507 1.584087 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.7467957 -8.2986126 4.9337406 128.0 +-9.8089666 -8.2482672 4.9394641 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.020809 -8.1162796 4.9698696 128.0 +-10.052919 -8.0406408 4.9612846 128.0 +-4.1582689 -3.283993 2.0598493 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.7904873 -4.1823874 2.7663386 128.0 +-0 -0 0 128.0 +-5.8451939 -4.1137013 2.7681272 128.0 +-5.832746 -4.0516515 2.7505991 128.0 +-5.8790617 -4.0305724 2.7606151 128.0 +-5.9624605 -4.0341978 2.7878017 128.0 +-5.9777822 -3.9913137 2.783509 128.0 +-0 -0 0 128.0 +-10.41997 -6.774271 4.7910118 128.0 +-6.0070062 -3.8528748 2.7638347 128.0 +-5.9579372 -3.7700014 2.7309248 128.0 +-6.0110588 -3.7521651 2.744518 128.0 +-5.8868637 -3.6246257 2.6783404 128.0 +-5.8507285 -3.5530486 2.6522272 128.0 +-6.7944961 -4.0693984 3.0639584 128.0 +-6.8137093 -4.0243068 3.0614545 128.0 +-6.8229418 -3.9734933 3.0546579 128.0 +-6.8390961 -3.9269035 3.0510807 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-8.3985767 -4.6189861 3.7017663 128.0 +-0 -0 0 128.0 +-5.4588671 -2.9154003 2.4007528 128.0 +-5.4807844 -2.8840249 2.4025414 128.0 +-7.3553977 -3.8131602 3.2038255 128.0 +-7.3761611 -3.7666824 3.2027524 128.0 +-7.4116478 -3.7276466 3.208118 128.0 +-0 -0 0 128.0 +-6.6586351 -3.2471168 2.8679299 128.0 +-5.5411325 -2.6601284 2.3846555 128.0 +-6.7857866 -3.2066591 2.9051325 128.0 +-6.4615669 -3.0050642 2.7598999 128.0 +-6.4017649 -2.929606 2.72699 128.0 +-0 -0 0 128.0 +-7.4481616 -3.2985964 3.1505258 128.0 +-7.4365845 -3.2390344 3.1372902 128.0 +-7.5103979 -3.2165072 3.1598263 128.0 +-7.5265503 -3.1689141 3.1583955 128.0 +-7.0341835 -2.9109023 2.94627 128.0 +-7.0475869 -2.8659275 2.9444814 128.0 +-9.0100918 -3.5998328 3.7468386 128.0 +-9.4553471 -3.7106318 3.9210463 128.0 +-9.3725033 -3.6119092 3.8777626 128.0 +-0 -0 0 128.0 +-9.4633932 -3.5141785 3.8970792 128.0 +-8.1669436 -2.9757993 3.3597896 128.0 +-11.683909 -4.176425 4.7831421 128.0 +-11.679354 -4.094151 4.7709799 128.0 +-11.695424 -4.0193753 4.7674026 128.0 +-6.6852784 -2.2515917 2.7323556 128.0 +-12.555272 -4.1433487 5.0947127 128.0 +-11.177422 -3.6127009 4.5298791 128.0 +-8.6192713 -2.7274806 3.4932177 128.0 +-11.010397 -3.4100575 4.4454579 128.0 +-6.6618299 -2.0183804 2.696584 128.0 +-6.7054262 -1.9867527 2.7091041 128.0 +-6.7094178 -1.9432331 2.7058847 128.0 +-6.753562 -1.9111842 2.7187624 128.0 +-6.9208746 -1.9127531 2.7806473 128.0 +-6.8937125 -1.8597903 2.7652655 128.0 +-8.616292 -2.2679834 3.4431376 128.0 +-7.1285739 -1.8296207 2.8493288 128.0 +-7.0880289 -1.7729274 2.828939 128.0 +-8.3916521 -2.0444453 3.3386843 128.0 +-8.6420975 -2.0493805 3.4324059 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.8681707 -2.1491308 3.8988678 128.0 +-11.120977 -2.350642 4.3842888 128.0 +-11.14251 -2.2838609 4.3871503 128.0 +-12.192241 -2.4212019 4.7917271 128.0 +-12.216954 -2.3482854 4.7956619 128.0 +-10.135106 -1.8836448 3.9789963 128.0 +-0 -0 0 128.0 +-7.407197 -1.2827176 2.9097829 128.0 +-7.452693 -1.2435471 2.9244492 128.0 +-13.220005 -2.1228821 5.1591015 128.0 +-13.15618 -2.0299046 5.1294112 128.0 +-7.5463734 -1.1168239 2.9523511 128.0 +-7.5928411 -1.076136 2.9677329 128.0 +-12.465825 -1.6890745 4.8489618 128.0 +-12.538931 -1.6206957 4.8732867 128.0 +-12.496737 -1.537341 4.8532543 128.0 +-0 -0 0 128.0 +-12.904492 -1.4269906 5.0034952 128.0 +-12.546136 -1.3094808 4.8621974 128.0 +-12.512114 -1.2283674 4.8460999 128.0 +-12.526855 -1.1522559 4.8489618 128.0 +-12.963538 -1.1122645 5.0142264 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.0174923 12.465459 4.880219 128.0 +-3.9350059 12.471094 4.8729267 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.3725743 12.855971 4.9521027 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.5183342 14.614471 5.5219612 128.0 +-2.4221671 14.590794 5.5073762 128.0 +-0 0 0 128.0 +-2.2241714 14.497064 5.4615374 128.0 +-2.1355865 14.513221 5.4625793 128.0 +-2.0433569 14.503765 5.4542451 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.2782444 13.675879 5.1167054 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.6838136 13.523218 5.0767698 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5343249 13.346725 5.1430974 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9327807 -2.2572198 3.084522 128.0 +7.9556952 -2.3166065 3.0987599 128.0 +7.9530139 -2.3688598 3.1032743 128.0 +7.9688287 -2.4269073 3.1150813 128.0 +7.977067 -2.4830072 3.12411 128.0 +7.9822345 -2.5384462 3.1320972 128.0 +7.9691844 -2.5882459 3.1331389 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.4509439 -2.2804103 1.8822975 128.0 +4.4310451 -2.3046474 1.8798667 128.0 +4.3206344 -2.2809832 1.8395842 128.0 +4.3412695 -2.326061 1.8541692 128.0 +4.3236203 -2.350862 1.8527802 128.0 +4.2869477 -2.3651109 1.8434041 128.0 +4.2887187 -2.4005351 1.8503493 128.0 +4.2934775 -2.4379227 1.8586837 128.0 +4.2727504 -2.4609435 1.8562528 128.0 +4.333674 -2.5315959 1.8888955 128.0 +0 -0 0 128.0 +4.1447458 -2.4898968 1.820832 128.0 +4.123785 -2.5118654 1.8184012 128.0 +3.6216605 -2.2364304 1.6065707 128.0 +4.2190108 -2.6414349 1.873616 128.0 +4.2335982 -2.6868775 1.8871592 128.0 +4.2619796 -2.7417333 1.9069532 128.0 +4.2859182 -2.7944758 1.9250109 128.0 +4.2749491 -2.8248584 1.927789 128.0 +4.2855825 -2.8698266 1.9402905 128.0 +4.2415137 -2.8781593 1.9284835 128.0 +4.1666002 -2.8648007 1.9027861 128.0 +4.2943487 -2.9916575 1.9684188 128.0 +4.3900504 -3.0985489 2.0201609 128.0 +4.6890006 -3.3529501 2.1649697 128.0 +4.550642 -3.2963636 2.1111438 128.0 +3.7358308 -2.7409861 1.7461704 128.0 +4.3314991 -3.219342 2.0288424 128.0 +4.4082952 -3.3186371 2.0736394 128.0 +2.9257209 -2.2302921 1.3926567 128.0 +2.9090126 -2.2459087 1.3912677 128.0 +2.8944387 -2.2631381 1.3909204 128.0 +2.8753529 -2.2767787 1.3884896 128.0 +3.2314277 -2.5913415 1.5642047 128.0 +2.8355517 -2.3024304 1.3829334 128.0 +2.8546824 -2.3471932 1.3989074 128.0 +4.1342349 -3.4427083 2.0225918 128.0 +3.5496297 -2.9927506 1.7496431 128.0 +4.1344604 -3.5297248 2.0434277 128.0 +4.0361176 -3.4887791 2.0059233 128.0 +2.9139822 -2.5497921 1.4641929 128.0 +3.1979263 -2.8332458 1.6124742 128.0 +4.0333309 -3.6182258 2.0368297 128.0 +4.1963673 -3.8112838 2.1295488 128.0 +4.1459861 -3.8122003 2.1160057 128.0 +4.0772233 -3.7953873 2.0930862 128.0 +2.9914689 -2.8187177 1.5523977 128.0 +3.9631822 -3.7810354 2.0587072 128.0 +2.9532819 -2.8519573 1.5506613 128.0 +2.8653376 -2.8011708 1.5141988 128.0 +2.60355 -2.5765347 1.3867532 128.0 +2.5751083 -2.5798466 1.3801552 128.0 +3.2950873 -3.3423972 1.7683953 128.0 +3.211725 -3.2980402 1.7350581 128.0 +3.2382243 -3.3663571 1.760061 128.0 +3.2149246 -3.3834431 1.7586719 128.0 +3.2159178 -3.4263594 1.7704788 128.0 +2.93924 -3.1701987 1.6312264 128.0 +2.9304962 -3.1999335 1.6371299 128.0 +2.9403651 -3.2505486 1.6534512 128.0 +2.9659622 -3.3195906 1.6788014 128.0 +2.9238265 -3.3131118 1.6666472 128.0 +2.8399956 -3.2581604 1.6308792 128.0 +2.8022127 -3.2549102 1.6208085 128.0 +2.6923127 -3.1662841 1.5694135 128.0 +2.692126 -3.20573 1.580526 128.0 +2.8220186 -3.4026845 1.6673417 128.0 +2.804651 -3.4242897 1.6694254 128.0 +2.7093041 -3.3495457 1.6256702 128.0 +2.6734891 -3.3470519 1.6166414 128.0 +2.6459348 -3.3545556 1.6124742 128.0 +2.601109 -3.3396475 1.5978892 128.0 +2.7177219 -3.5339901 1.6812322 128.0 +3.1092567 -4.0951738 1.934387 128.0 +3.0896938 -4.1216798 1.9378597 128.0 +3.0392494 -4.1066337 1.9222327 128.0 +2.9913192 -4.0941548 1.907995 128.0 +2.9557221 -4.0979786 1.901397 128.0 +2.9495518 -4.1427794 1.9135512 128.0 +2.9413254 -4.1853557 1.9246637 128.0 +2.9829111 -4.3004284 1.9684188 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.5631424 -2.3435853 1.073522 128.0 +1.5332762 -2.3296258 1.0631042 128.0 +1.5067031 -2.3201094 1.0547698 128.0 +1.9757673 -3.0843713 1.3867532 128.0 +2.030911 -3.2137854 1.4381481 128.0 +1.9273558 -3.0916698 1.3794607 128.0 +1.8941119 -3.080267 1.3693901 128.0 +1.9665512 -3.2426035 1.4346756 128.0 +1.7407036 -2.9100909 1.286047 128.0 +1.6932929 -2.8706279 1.2645167 128.0 +1.612036 -2.7715068 1.2176361 128.0 +1.6239051 -2.8317933 1.2391665 128.0 +1.6424732 -2.9053922 1.266253 128.0 +1.7309074 -3.106319 1.3471652 128.0 +1.5119535 -2.7526855 1.1933278 128.0 +1.48299 -2.7396395 1.1839516 128.0 +1.8167723 -3.4066186 1.4600258 128.0 +1.808042 -3.4409497 1.4697491 128.0 +1.3284779 -2.5657349 1.1002612 128.0 +1.3480449 -2.6431897 1.1290841 128.0 +0 -0 0 128.0 +1.3911172 -2.8125453 1.1922859 128.0 +1.5728154 -3.2300086 1.3607085 128.0 +0 -0 0 128.0 +1.19595 -2.5340085 1.0679657 128.0 +0 -0 0 128.0 +1.4806108 -3.2403362 1.3495961 128.0 +1.4464848 -3.2177086 1.3367474 128.0 +1.4039767 -3.1750562 1.3159115 128.0 +1.2873102 -2.9599857 1.2256233 128.0 +1.2790707 -2.9911129 1.2349993 128.0 +1.3768864 -3.2755828 1.3461235 128.0 +1.3624865 -3.2978387 1.3516797 128.0 +0.93548101 -2.3033001 0.95093817 128.0 +1.1191926 -2.8055553 1.1488781 128.0 +1.3155659 -3.3581629 1.3659174 128.0 +0.88148838 -2.2903671 0.9391312 128.0 +1.2570434 -3.3284295 1.3478597 128.0 +1.2411559 -3.3483915 1.3527215 128.0 +1.0159535 -2.7927337 1.1308204 128.0 +1.2046949 -3.3766205 1.3579304 128.0 +1.1820973 -3.3786373 1.3558469 128.0 +0.93124443 -2.714263 1.0929687 128.0 +1.0903969 -3.2435391 1.2975067 128.0 +0.97200859 -2.9508591 1.1808263 128.0 +0.92800176 -2.8764353 1.1495726 128.0 +0.90187186 -2.8552454 1.1391547 128.0 +0.88765472 -2.8714778 1.1433219 128.0 +0.86053032 -2.8454499 1.1311677 128.0 +0.67148358 -2.2696822 0.90683573 128.0 +0.67002767 -2.3170068 0.92350435 128.0 +0.72935832 -2.5819154 1.0238634 128.0 +0.99237162 -3.5989435 1.4127979 128.0 +0.89480436 -3.3242228 1.3051465 128.0 +0.86820567 -3.306066 1.2961175 128.0 +0.86439747 -3.3758373 1.3207732 128.0 +0.55912429 -2.2390945 0.88495821 128.0 +0.55797994 -2.2944283 0.90475219 128.0 +0.71395534 -3.0178981 1.1787426 128.0 +0.67778945 -2.9454489 1.1495726 128.0 +1.7732919 -7.937593 3.042156 128.0 +1.7243557 -7.9474077 3.0418088 128.0 +1.6633947 -7.9000249 3.0199313 128.0 +0.56462443 -2.7618065 1.0742165 128.0 +0.53748655 -2.7137005 1.0547698 128.0 +0 -0 0 128.0 +0.48538953 -2.6186569 1.0165708 128.0 +0.48942322 -2.7342119 1.058937 128.0 +0.57100636 -3.3082948 1.2735455 128.0 +0.50050187 -3.009222 1.1599904 128.0 +0.45778561 -2.8603652 1.1030394 128.0 +0.47689712 -3.1022689 1.1926332 128.0 +0.41391754 -2.8063891 1.0808145 128.0 +0.40100482 -2.83952 1.0922742 128.0 +1.1222435 -8.3318501 3.1435568 128.0 +0.30848584 -2.3949683 0.92454618 128.0 +0.30094379 -2.4554601 0.94642371 128.0 +0.48725328 -4.1955085 1.5944165 128.0 +0.46610013 -4.2403674 1.6100434 128.0 +0.39096361 -3.7683568 1.4332864 128.0 +0.25638482 -2.6245117 1.0068475 128.0 +0.34205475 -3.7439196 1.4225214 128.0 +0.31891748 -3.7440794 1.4218268 128.0 +0.29358429 -3.7160494 1.4107144 128.0 +0.16334519 -2.2362468 0.86064976 128.0 +0 -0 0 128.0 +0.13273562 -2.1856627 0.84120303 128.0 +0.11982811 -2.1958001 0.84467566 128.0 +0.38495651 -8.0152416 3.0018735 128.0 +0.12509248 -2.9691539 1.1308204 128.0 +0.28776881 -8.0531006 3.014375 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.051817916 -2.9497643 1.1228334 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +-0.0025166934 -2.9746001 1.1318622 128.0 +-0.020463962 -2.9332681 1.1165826 128.0 +-0 -0 0 128.0 +-0.055518344 -2.884979 1.0988722 128.0 +-0.071889311 -2.833024 1.0797727 128.0 +-0.089181274 -2.8297179 1.0787309 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.2623287 -3.8089852 1.5162823 128.0 +-1.2859772 -3.8020563 1.5166296 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.3829854 -3.7098613 1.4964883 128.0 +-0 -0 0 128.0 +-1.4294226 -3.6952341 1.4975301 128.0 +-1.4427828 -3.6628385 1.4881541 128.0 +-1.3097955 -3.266638 1.333622 128.0 +-1.326623 -3.2507265 1.3304967 128.0 +-1.3609419 -3.2771628 1.3443872 128.0 +-0 -0 0 128.0 +-1.4166181 -3.2963963 1.3589722 128.0 +-1.6033075 -3.6682525 1.5128098 128.0 +-1.6901891 -3.8031521 1.5714972 128.0 +-1.684904 -3.7294776 1.5457997 128.0 +-1.6881772 -3.6764638 1.5284365 128.0 +-3.5192962 -7.5388932 3.1112614 128.0 +-3.4171493 -7.2045288 2.9831214 128.0 +-3.4551833 -7.1707544 2.9779124 128.0 +-3.4323134 -7.0129766 2.9216557 128.0 +-1.5533986 -3.1266925 1.3232042 128.0 +-1.5438126 -3.0601788 1.2995902 128.0 +-1.5625604 -3.0506485 1.2995902 128.0 +-1.5860115 -3.0501537 1.3034101 128.0 +-3.7299178 -7.0635953 2.9883304 128.0 +-4.0270786 -7.514153 3.1873119 128.0 +-1.6477121 -3.0311525 1.3079245 128.0 +-4.7525563 -8.6119089 3.6727858 128.0 +-1.6554585 -2.9583402 1.2856997 128.0 +-0 -0 0 128.0 +-2.0339153 -3.5317445 1.539549 128.0 +-0 -0 0 128.0 +-4.1609583 -7.0221148 3.0529213 128.0 +-4.2310209 -7.0414615 3.0723679 128.0 +-2.1302247 -3.4975822 1.5468415 128.0 +-2.2073472 -3.5745926 1.5860822 128.0 +-2.23123 -3.5641601 1.5874712 128.0 +-1.9760761 -3.1142023 1.3961294 128.0 +-1.9961623 -3.1035957 1.3968239 128.0 +-1.9798149 -3.0370948 1.3728627 128.0 +-4.5222263 -6.8423429 3.0675063 128.0 +-2.805625 -4.1897559 1.8975772 128.0 +-2.8807931 -4.2453928 1.9302199 128.0 +-4.8084459 -6.9920459 3.1727269 128.0 +-2.4221952 -3.4773126 1.5996255 128.0 +-5.614943 -7.9536338 3.6356285 128.0 +-2.2813573 -3.1910596 1.4829451 128.0 +-0 -0 0 128.0 +-5.7270961 -7.8035769 3.6147928 128.0 +-5.2723818 -7.0925202 3.3029506 128.0 +-2.7945225 -3.7124004 1.7510321 128.0 +-5.3590212 -7.0272856 3.3029506 128.0 +-5.4501977 -7.0566077 3.3321207 128.0 +-5.5003281 -7.0318956 3.3362877 128.0 +-5.5451183 -7.0002189 3.3373296 128.0 +-5.6085076 -6.991663 3.3494837 128.0 +-5.6199598 -6.9185443 3.3310788 128.0 +-5.6658802 -6.8882756 3.3331625 128.0 +-3.1804004 -3.8193786 1.8708379 128.0 +-3.1330309 -3.7159269 1.8302081 128.0 +-3.2544374 -3.812151 1.8864647 128.0 +-3.2544577 -3.765156 1.8732687 128.0 +-3.2169597 -3.6759727 1.839237 128.0 +-3.2786446 -3.7003744 1.8611145 128.0 +-2.7168946 -3.0290346 1.5371181 128.0 +-2.7411048 -3.0185535 1.5402435 128.0 +-3.4261954 -3.7263601 1.9048697 128.0 +-2.7153091 -2.9174347 1.5062118 128.0 +-2.9113526 -3.0897245 1.6024035 128.0 +-2.9839962 -3.1281075 1.6312264 128.0 +-2.8441377 -2.9451892 1.5464942 128.0 +-2.8090398 -2.8733821 1.5183659 128.0 +-2.9368126 -2.9673705 1.5763588 128.0 +-3.6633739 -3.6559441 1.9468884 128.0 +-3.0752063 -3.031811 1.6294901 128.0 +-3.0903912 -3.0096145 1.6277537 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.8546121 -3.5734437 1.9767531 128.0 +-3.7934556 -3.4737461 1.9350815 128.0 +-3.8835654 -3.5126657 1.9694606 128.0 +-9.7001419 -8.6637611 4.8465347 128.0 +-4.0044436 -3.5335991 2.0080068 128.0 +-9.7972441 -8.5366812 4.8423676 128.0 +-9.1037607 -7.8347945 4.4780884 128.0 +-9.7662077 -8.3010378 4.7767348 128.0 +-9.8758583 -8.2903929 4.8052106 128.0 +-4.100122 -3.4001241 2.0027978 128.0 +-4.1136513 -3.368962 1.9993252 128.0 +-10.068353 -8.14081 4.8250046 128.0 +-4.2756085 -3.4147627 2.0566237 128.0 +-4.3612885 -3.4395528 2.0871828 128.0 +-4.3941512 -3.4219439 2.0927389 128.0 +-10.085174 -7.7529716 4.7409668 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.955842 -7.2719579 4.5958109 128.0 +-10.096124 -7.2798309 4.6395659 128.0 +-10.14977 -7.2242699 4.643733 128.0 +-10.244553 -7.1974316 4.6666522 128.0 +-0 -0 0 128.0 +-4.553926 -3.1174552 2.0739868 128.0 +-10.407163 -7.02916 4.6808901 128.0 +-10.471947 -6.9797316 4.6906137 128.0 +-5.9472709 -3.9120827 2.6664174 128.0 +-5.9491353 -3.8612258 2.6566942 128.0 +-5.9340148 -3.7998769 2.6396782 128.0 +-5.9825912 -3.779418 2.6507907 128.0 +-5.9666667 -3.7183418 2.6337748 128.0 +-5.9661994 -3.6674235 2.6237042 128.0 +-6.1048775 -3.7012222 2.6740572 128.0 +-0 -0 0 128.0 +-6.9779205 -4.1140914 3.0300019 128.0 +-5.9263005 -3.4454525 2.5688365 128.0 +-7.0107942 -4.0183616 3.0227094 128.0 +-7.0059242 -3.9586649 3.0102079 128.0 +-7.0472879 -3.9251828 3.0175004 128.0 +-6.9660096 -3.8241198 2.9730506 128.0 +-0 -0 0 128.0 +-5.4822054 -2.9228804 2.3309615 128.0 +-5.560647 -2.9210112 2.3563116 128.0 +-5.5626392 -2.8786507 2.3497136 128.0 +-7.3198423 -3.7308221 3.0727153 128.0 +-7.376123 -3.7026618 3.0866058 128.0 +-8.2730579 -4.0893888 3.4477592 128.0 +-5.600409 -2.7260895 2.3368649 128.0 +-6.7469664 -3.2328751 2.8008082 128.0 +-6.8930621 -3.2509997 2.8525505 128.0 +-5.6453853 -2.6205692 2.3351285 128.0 +-6.5724411 -3.001817 2.7060053 128.0 +-8.2793884 -3.7198672 3.3915026 128.0 +-7.4477 -3.2915556 3.0456285 128.0 +-7.4643159 -3.2443008 3.0442395 128.0 +-7.4564862 -3.1866508 3.0331273 128.0 +-7.0323496 -2.954567 2.8549812 128.0 +-7.0538135 -2.9127929 2.8563702 128.0 +-9.2631941 -3.7583733 3.7321677 128.0 +-9.0743895 -3.6171131 3.6477828 128.0 +-9.068469 -3.5504289 3.6366704 128.0 +-9.0594454 -3.4829445 3.624516 128.0 +-9.0674849 -3.4223258 3.6193073 128.0 +-9.1199722 -3.3783474 3.6318085 128.0 +-0 -0 0 128.0 +-7.1953073 -2.5656886 2.8591485 128.0 +-11.777955 -4.1176863 4.6506782 128.0 +-11.806548 -4.0465565 4.6520672 128.0 +-6.7505932 -2.2680326 2.6674592 128.0 +-12.634768 -4.1577888 4.9559226 128.0 +-12.615413 -4.0658059 4.9385595 128.0 +-11.43367 -3.6077704 4.4701014 128.0 +-11.253085 -3.4750338 4.3916202 128.0 +-6.7451701 -2.0382037 2.6396782 128.0 +-6.7746372 -2.0018239 2.6462762 128.0 +-12.359385 -3.5687296 4.7940979 128.0 +-6.9602518 -1.9640995 2.7084363 128.0 +-6.9721723 -1.9213552 2.7084363 128.0 +-7.3352103 -1.9729927 2.8431742 128.0 +-7.0351372 -1.8461179 2.7237158 128.0 +-8.3191948 -2.1283779 3.2102313 128.0 +-8.444931 -2.1054065 3.2532918 128.0 +-11.524285 -2.7976859 4.4218321 128.0 +-9.7159128 -2.2958333 3.7273059 128.0 +-11.236947 -2.5823655 4.2999425 128.0 +-9.7204742 -2.1713231 3.7186244 128.0 +-9.7831039 -2.1223688 3.7373767 128.0 +-11.150431 -2.3472888 4.2499366 128.0 +-11.156354 -2.2771399 4.2468114 128.0 +-9.936429 -1.9648417 3.7811317 128.0 +-12.255588 -2.3451099 4.6510258 128.0 +-12.267902 -2.2695258 4.650331 128.0 +-7.5254445 -1.3449479 2.861232 128.0 +-7.5307832 -1.2982699 2.8601902 128.0 +-7.536757 -1.2517303 2.8594956 128.0 +-7.5868936 -1.2122619 2.8754697 128.0 +-7.6498051 -1.1742148 2.8963056 128.0 +-13.105766 -1.9285986 4.9357815 128.0 +-12.64562 -1.7817259 4.7593718 128.0 +-12.521553 -1.685968 4.7090187 128.0 +-12.907439 -1.6573207 4.8493128 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-13.277231 -1.3745013 4.9732857 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.7673697 12.830887 4.9288197 128.0 +-4.6404943 12.728098 4.8786168 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.0049858 12.648129 4.7782111 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.4584489 12.80934 4.7785482 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.0439706 14.3882 5.2933788 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.5240614 14.558211 5.3179746 128.0 +-2.4295659 14.542779 5.3068562 128.0 +-0 0 0 128.0 +-2.2445951 14.530557 5.2920308 128.0 +-2.1627116 14.593417 5.3098884 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.5140709 15.351512 5.5507941 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.7257905 14.718821 5.3338103 128.0 +1.8088037 14.649085 5.3125839 128.0 +1.8959908 14.617168 5.3051715 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.4893136 13.568455 5.0440497 128.0 +3.56338 13.512194 5.0312467 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9522214 -2.2546356 2.9884343 128.0 +7.9744072 -2.3138804 3.0019114 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.022027 -2.5427341 3.0420063 128.0 +7.9955244 -2.5884292 3.0379632 128.0 +8.0232964 -2.6519165 3.0544727 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.2086215 -2.2505832 1.7384205 128.0 +4.25349 -2.3082442 1.7623426 128.0 +4.2730637 -2.352917 1.7761567 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.0440316 -2.3579698 1.7057382 128.0 +4.1137772 -2.4325726 1.7407789 128.0 +3.638485 -2.1818137 1.5487283 128.0 +3.5799751 -2.1767097 1.5298603 128.0 +3.6082308 -2.2243233 1.5473806 128.0 +3.6001041 -2.2499135 1.5497391 128.0 +3.6085021 -2.2860675 1.5591732 128.0 +4.1838732 -2.686619 1.8098499 128.0 +4.1957197 -2.7307272 1.8219793 128.0 +4.1930327 -2.7657506 1.8280441 128.0 +3.9121814 -2.6151178 1.7144984 128.0 +3.8290186 -2.5936685 1.6855223 128.0 +3.7881899 -2.6000664 1.6747406 128.0 +3.7304211 -2.5942369 1.6565462 128.0 +4.251698 -2.9955499 1.891724 128.0 +4.2332377 -3.0215814 1.891724 128.0 +3.9582469 -2.8621519 1.7785152 128.0 +4.2436953 -3.1083493 1.9129506 128.0 +3.0184319 -2.2396128 1.3755459 128.0 +3.0099022 -2.2620506 1.3779043 128.0 +2.9719901 -2.2622304 1.3671225 128.0 +2.9528332 -2.2764001 1.3647641 128.0 +2.9699819 -2.3188078 1.3789152 128.0 +3.5451162 -2.8029261 1.647786 128.0 +3.327925 -2.6645799 1.5561408 128.0 +3.0087137 -2.4394877 1.4166514 128.0 +3.6246452 -2.9758308 1.7087705 128.0 +2.8655963 -2.3823395 1.3640902 128.0 +2.825712 -2.3786583 1.3522975 128.0 +2.8304124 -2.4124401 1.3613948 128.0 +2.8226855 -2.4359124 1.3647641 128.0 +2.8559031 -2.4953067 1.3876754 128.0 +2.8292544 -2.5028031 1.3822844 128.0 +3.2767849 -2.9346466 1.6046588 128.0 +3.2043068 -2.9053726 1.5783782 128.0 +8.5782776 -7.8735571 4.1973424 128.0 +3.0690889 -2.8521886 1.5298603 128.0 +3.0213552 -2.842582 1.5150353 128.0 +2.8681726 -2.7318571 1.447986 128.0 +2.8723691 -2.7696619 1.4584309 128.0 +2.670023 -2.6063902 1.3657749 128.0 +2.6472826 -2.6161067 1.3624055 128.0 +2.6405003 -2.6416225 1.3671225 128.0 +3.3089888 -3.3511279 1.7158461 128.0 +3.2568059 -3.3390186 1.6996734 128.0 +3.2486699 -3.3718207 1.7060751 128.0 +3.2064977 -3.3691857 1.6949563 128.0 +6.8252258 -7.2595615 3.5962577 128.0 +3.0700829 -3.3061776 1.6450906 128.0 +3.019824 -3.2923441 1.6292548 128.0 +2.997669 -3.3087184 1.628244 128.0 +2.9622405 -3.3102119 1.6201577 128.0 +2.9113169 -3.293761 1.6036481 128.0 +2.6811206 -3.0711386 1.4894285 128.0 +2.6394744 -3.0611508 1.4769621 128.0 +2.6853569 -3.1532652 1.5126767 128.0 +2.9211295 -3.4730108 1.6545247 128.0 +2.9063828 -3.4988353 1.6582309 128.0 +2.7540684 -3.3571975 1.584443 128.0 +2.7393446 -3.3813481 1.5878123 128.0 +2.7150161 -3.393682 1.5857908 128.0 +2.6970603 -3.4139709 1.5874754 128.0 +2.9482753 -3.7793434 1.7458329 128.0 +3.0600641 -3.9726381 1.8250117 128.0 +3.0886431 -4.0610304 1.8563462 128.0 +3.0727136 -4.0919514 1.8617371 128.0 +3.0542774 -4.1198039 1.8657804 128.0 +3.0200431 -4.1263113 1.8603895 128.0 +2.9648888 -4.1035552 1.8421952 128.0 +2.9648054 -4.156929 1.857694 128.0 +2.9208131 -4.1488681 1.8462384 128.0 +2.9017491 -4.1759896 1.8502815 128.0 +2.852638 -4.1595526 1.8354566 128.0 +1.5904398 -2.3501728 1.0460274 128.0 +1.5707595 -2.3520582 1.0426581 128.0 +1.5552616 -2.3600798 1.0419842 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +2.0744133 -3.3222978 1.4321502 128.0 +2.0875692 -3.3894744 1.4550616 128.0 +1.8032148 -2.9685163 1.2734557 128.0 +1.7777071 -2.9674103 1.2684017 128.0 +1.7403064 -2.9458389 1.2549245 128.0 +1.7345225 -2.977613 1.2636847 128.0 +1.7903227 -3.1171911 1.3169198 128.0 +1.86164 -3.2878737 1.3826214 128.0 +1.6390326 -2.936691 1.2340349 128.0 +1.6300606 -2.9631906 1.2407734 128.0 +1.4718131 -2.7149053 1.135651 128.0 +1.8456211 -3.4546397 1.4321502 128.0 +0 -0 0 128.0 +1.3426906 -2.5894234 1.0743296 128.0 +1.3584772 -2.6596572 1.0992625 128.0 +1.378107 -2.7394311 1.1279016 128.0 +1.3771585 -2.7798932 1.140705 128.0 +1.4257231 -2.9228325 1.194277 128.0 +1.1717166 -2.4401336 0.99919397 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.4401979 -3.1978283 1.2855853 128.0 +0 -0 0 128.0 +1.6133797 -3.7029245 1.4759512 128.0 +1.2575958 -2.9356132 1.1733873 128.0 +0.9409104 -2.234386 0.89811468 128.0 +1.510007 -3.647614 1.4432689 128.0 +1.5028566 -3.6943104 1.457757 128.0 +1.4029186 -3.5102522 1.3832953 128.0 +1.3565756 -3.4556947 1.3590362 128.0 +0.89428616 -2.3201764 0.92035216 128.0 +1.0417123 -2.7526813 1.0837636 128.0 +1.3540645 -3.6451197 1.4220423 128.0 +1.3265125 -3.6392064 1.4166514 128.0 +1.0140158 -2.8361058 1.1083596 128.0 +2.7564788 -7.8593793 3.0110085 128.0 +2.5499015 -7.415834 2.8368154 128.0 +1.1107993 -3.2968276 1.2754773 128.0 +0.9435184 -2.8583488 1.1076857 128.0 +0.93262643 -2.8846886 1.1154351 128.0 +0.90922379 -2.8724048 1.1086966 128.0 +0.90133768 -2.9094059 1.1204891 128.0 +0.85614765 -2.82478 1.086796 128.0 +0.69023681 -2.3289945 0.89979935 128.0 +0.69559354 -2.4010086 0.92506915 128.0 +0.74730295 -2.6398578 1.0123342 128.0 +0.67762399 -2.4511065 0.94056797 128.0 +0.82505691 -3.0569589 1.1636163 128.0 +0.73624384 -2.7961087 1.0652324 128.0 +0.57686961 -2.2470396 0.86071539 128.0 +0.56329983 -2.2514503 0.86105227 128.0 +0 -0 0 128.0 +0.70110661 -2.9553266 1.1174568 128.0 +0.68613726 -2.9733336 1.1225107 128.0 +0.60334283 -2.6899426 1.0170513 128.0 +0.70655417 -3.2427878 1.2181991 128.0 +1.6931121 -8.0038071 2.9581103 128.0 +0.56981337 -2.7789891 1.0456904 128.0 +0 -0 0 128.0 +0.54776609 -2.8486431 1.0686017 128.0 +0.49272928 -2.6501606 0.9951508 128.0 +0.47529307 -2.6466472 0.99279231 128.0 +0.45775768 -2.6420922 0.99009687 128.0 +0.43595138 -2.6114197 0.97796732 128.0 +0.42485225 -2.644722 0.98908603 128.0 +0.43449363 -2.8147671 1.0497336 128.0 +0.47685173 -3.2197249 1.1952878 128.0 +0.47826004 -3.3717394 1.2491968 128.0 +0.32753405 -2.4164424 0.90316868 128.0 +0.31971207 -2.4725635 0.92271066 128.0 +0.29785591 -2.4202797 0.90316868 128.0 +0.46451992 -3.9734759 1.4621371 128.0 +0.40436238 -3.653399 1.3458959 128.0 +0.26383263 -2.5264859 0.93955719 128.0 +0.36401612 -3.7039995 1.3624055 128.0 +0.33454019 -3.633034 1.3361249 128.0 +0 -0 0 128.0 +0.17994809 -2.2590835 0.8415103 128.0 +0.1615186 -2.1981721 0.81927288 128.0 +0.19468874 -2.8905146 1.0672541 128.0 +0.1401795 -2.2920856 0.85229212 128.0 +0.44456643 -8.065115 2.9210479 128.0 +0.39599335 -8.0864992 2.9277866 128.0 +0.3879835 -9.0595436 3.2754993 128.0 +0 -0 0 128.0 +0.090755068 -2.9804201 1.0975778 128.0 +0.07357002 -3.0261006 1.1137505 128.0 +0.16201985 -8.8742962 3.2067654 128.0 +0.036257796 -3.0126538 1.1086966 128.0 +0.017573215 -2.9798665 1.0969039 128.0 +-0.00071277423 -2.9940412 1.1019579 128.0 +-0.019019175 -2.983624 1.0982517 128.0 +-0 -0 0 128.0 +-0.054602839 -2.9276252 1.0783727 128.0 +-0 -0 0 128.0 +-0.089278884 -2.8862681 1.0638847 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.3577158 -3.7921112 1.4719081 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.4324058 -3.7110937 1.4540508 128.0 +-1.4499847 -3.6890903 1.4489968 128.0 +-1.345302 -3.3619232 1.3263539 128.0 +-1.3286239 -3.2620437 1.2909762 128.0 +-1.3424875 -3.239043 1.2852484 128.0 +-1.3700171 -3.2489641 1.2923239 128.0 +-1.4444708 -3.3677006 1.3418528 128.0 +-1.6412401 -3.7626762 1.4995364 128.0 +-1.6730744 -3.7723315 1.5072858 128.0 +-1.7016063 -3.7740116 1.5120028 128.0 +-1.4709945 -3.2096901 1.2940085 128.0 +-1.4994043 -3.2193816 1.301421 128.0 +-3.5053949 -7.4085407 2.9635012 128.0 +-3.4659514 -7.2103834 2.8934197 128.0 +-3.5700223 -7.3116632 2.9422746 128.0 +-1.5884165 -3.2027032 1.3098443 128.0 +-1.5542644 -3.0860958 1.2670541 128.0 +-1.5680283 -3.0664408 1.2630109 128.0 +-1.6128362 -3.1069033 1.2832267 128.0 +-1.6792622 -3.1869142 1.3196152 128.0 +-1.7072196 -3.1923263 1.326017 128.0 +-4.1527805 -7.6531348 3.1464548 128.0 +-1.6999496 -3.0870066 1.2916501 128.0 +-1.752835 -3.1373453 1.3165829 128.0 +-1.8518891 -3.267427 1.3745351 128.0 +-1.9633939 -3.4151807 1.4402366 128.0 +-1.9805187 -3.3965619 1.4375411 128.0 +-4.1738653 -7.0590587 2.9651859 128.0 +-1.8714858 -3.1208622 1.3327556 128.0 +-2.0441699 -3.3619452 1.4385519 128.0 +-2.1966591 -3.5633457 1.5285125 128.0 +-1.983494 -3.173718 1.369818 128.0 +-1.9727021 -3.1137638 1.3496021 128.0 +-1.9815972 -3.0857549 1.3428636 128.0 +-2.535074 -3.8950505 1.6936086 128.0 +-1.9638506 -2.9771042 1.3068119 128.0 +-1.9773723 -2.9579532 1.3037796 128.0 +-2.7066529 -3.9958467 1.7576255 128.0 +-2.0929 -3.0491362 1.3539822 128.0 +-2.5437126 -3.6577559 1.6248747 128.0 +-5.7088404 -8.1033821 3.5777264 128.0 +-2.697248 -3.7787747 1.691924 128.0 +-5.5883031 -7.7290378 3.4436278 128.0 +-5.5666409 -7.6004114 3.4018486 128.0 +-5.5021033 -7.416388 3.3351362 128.0 +-5.3919711 -7.1754885 3.24248 128.0 +-2.6801784 -3.5211842 1.6140929 128.0 +-5.5106573 -7.1490498 3.2606745 128.0 +-5.517921 -7.0683446 3.2394478 128.0 +-5.5553489 -7.026968 3.2360785 128.0 +-5.5824738 -6.9729033 3.2269814 128.0 +-5.6257467 -6.93925 3.2273183 128.0 +-6.1443305 -7.4846144 3.4958522 128.0 +-6.1925468 -7.4496689 3.4972 128.0 +-6.2648163 -7.4432278 3.5120249 128.0 +-3.177614 -3.7283471 1.7835692 128.0 +-3.2299538 -3.7429972 1.7997419 128.0 +-3.272681 -3.7457986 1.8105236 128.0 +-0 -0 0 128.0 +-3.3278224 -3.7158771 1.8155776 128.0 +-3.0754797 -3.3919501 1.6690127 128.0 +-2.8371232 -3.090694 1.5318818 128.0 +-2.7297804 -2.9373474 1.4655064 128.0 +-2.7922642 -2.9678628 1.4887546 128.0 +-2.7857487 -2.9247644 1.4759512 128.0 +-0 -0 0 128.0 +-2.9832036 -3.0561161 1.5588362 128.0 +-3.025722 -3.0618653 1.5709658 128.0 +-3.0650933 -3.0638785 1.5814106 128.0 +-3.6907704 -3.6444154 1.8866701 128.0 +-3.7272158 -3.6355076 1.8937457 128.0 +-3.7555544 -3.6184492 1.896778 128.0 +-3.800873 -3.6174085 1.9082336 128.0 +-3.8326006 -3.6030478 1.9129506 128.0 +-3.8256612 -3.5525532 1.8987995 128.0 +-9.6843596 -8.8837643 4.7333994 128.0 +-9.9012499 -8.9714813 4.8119044 128.0 +-4.0180883 -3.5958154 1.960121 128.0 +-4.0584168 -3.587307 1.9688812 128.0 +-9.0356369 -7.8891559 4.3230176 128.0 +-9.0895777 -7.8384848 4.3257132 128.0 +-4.0291471 -3.4314086 1.9244063 128.0 +-4.0602131 -3.4151073 1.9291234 128.0 +-4.1911697 -3.4815845 1.9803369 128.0 +-10.008539 -8.2114697 4.6633177 128.0 +-4.3213615 -3.5010195 2.0207686 128.0 +-10.107818 -8.0874424 4.662981 128.0 +-4.335927 -3.4255447 2.0079651 128.0 +-0 -0 0 128.0 +-9.7477875 -7.5092845 4.4338679 128.0 +-0 -0 0 128.0 +-9.8580256 -7.403234 4.4422913 128.0 +-9.938055 -7.3684034 4.4577899 128.0 +-0 -0 0 128.0 +-4.4973297 -3.2494435 2.0160515 128.0 +-10.236031 -7.3012366 4.5298934 128.0 +-4.4960656 -3.1652806 1.9981942 128.0 +-4.6143661 -3.2064109 2.0413213 128.0 +-0 -0 0 128.0 +-10.490877 -7.10114 4.5639234 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.638751 -6.9191546 4.5720096 128.0 +-5.9693708 -3.8302002 2.5686183 128.0 +-6.0381041 -3.8222075 2.5878234 128.0 +-5.9887719 -3.7397013 2.5571625 128.0 +-6.021225 -3.7088103 2.5612059 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-6.0755029 -3.5896871 2.555815 128.0 +-7.1403308 -4.1600184 2.9877603 128.0 +-7.1436791 -4.1034646 2.9786632 128.0 +-7.1433258 -4.0451713 2.9682183 128.0 +-5.5879459 -3.1191564 2.3206372 128.0 +-7.1907787 -3.9562991 2.9675446 128.0 +-5.6738067 -3.076381 2.3401792 128.0 +-7.0760279 -3.7807856 2.9015059 128.0 +-5.5670033 -2.9306383 2.2818902 128.0 +-7.1544871 -3.7105744 2.9146464 128.0 +-5.6520152 -2.8873765 2.301769 128.0 +-7.3592811 -3.7029123 2.9786632 128.0 +-5.6195321 -2.7843554 2.2748146 128.0 +-5.6373568 -2.7502348 2.2751515 128.0 +-5.6481853 -2.7127392 2.2727928 128.0 +-6.8197703 -3.2241735 2.7300081 128.0 +-6.8462539 -3.1854455 2.7327037 128.0 +-0 -0 0 128.0 +-7.833405 -3.5285251 3.1050124 128.0 +-7.4468908 -3.2995853 2.945307 128.0 +-7.4790802 -3.2590961 2.9500241 128.0 +-8.5703182 -3.6722696 3.3671446 128.0 +-7.0491004 -2.969312 2.7677445 128.0 +-7.1933222 -2.9782343 2.8165994 128.0 +-8.1245422 -3.3055882 3.1693661 128.0 +-8.1770191 -3.2686067 3.1818326 128.0 +-0 -0 0 128.0 +-9.7020187 -3.7408521 3.7515829 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.0748296 -2.4326298 2.7077708 128.0 +-6.8210669 -2.298656 2.6063545 128.0 +-11.310612 -3.7347462 4.2930307 128.0 +-8.4693279 -2.7389388 3.2158625 128.0 +-6.8541436 -2.1701548 2.6033223 128.0 +-6.7702031 -2.0979543 2.5669336 128.0 +-6.7829485 -2.0563736 2.5669336 128.0 +-0 -0 0 128.0 +-8.3766375 -2.4277871 3.1515088 128.0 +-6.9881468 -1.9788975 2.6296027 128.0 +-7.0636792 -1.9535531 2.653188 128.0 +-7.0864406 -1.9131198 2.6572311 128.0 +-8.2971258 -2.1855032 3.1009691 128.0 +-12.144081 -3.1194363 4.517427 128.0 +-13.588713 -3.4018221 5.043376 128.0 +-0 -0 0 128.0 +-11.413449 -2.7088046 4.2283401 128.0 +-11.381233 -2.6274955 4.2104826 128.0 +-9.6351233 -2.1621394 3.5642493 128.0 +-11.352825 -2.4745967 4.1885824 128.0 +-11.340161 -2.3990433 4.1784744 128.0 +-7.4145412 -1.5209603 2.7391052 128.0 +-13.298775 -2.643389 4.8826599 128.0 +-12.348571 -2.3758206 4.5305672 128.0 +-7.5023732 -1.3955928 2.7613428 128.0 +-7.5358157 -1.3540298 2.7704399 128.0 +-11.506126 -1.9948175 4.2094717 128.0 +-11.657448 -1.947455 4.2600117 128.0 +-11.582726 -1.861989 4.2286768 128.0 +-12.675161 -1.9579346 4.6201906 128.0 +-12.609633 -1.8686664 4.5922256 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-13.26563 -1.7169974 4.8172956 128.0 +-13.326376 -1.6417869 4.8354897 128.0 +-13.363318 -1.5631599 4.8452606 128.0 +-14.200845 -1.5728874 5.1434445 128.0 +-14.16528 -1.4810224 5.1272717 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.8620868 12.869967 4.7813468 128.0 +-0 0 0 128.0 +-4.7060485 12.934881 4.7836318 128.0 +-4.5938754 12.871816 4.7500134 128.0 +-4.5101266 12.886378 4.7451172 128.0 +-0 0 0 128.0 +-4.3061695 12.805464 4.6958318 128.0 +-4.2142091 12.791245 4.6811442 128.0 +-4.1225858 12.776381 4.6664567 128.0 +-4.038136 12.782507 4.6596022 128.0 +-3.9573948 12.799819 4.656991 128.0 +-0 0 0 128.0 +-3.7965391 12.835635 4.6527481 128.0 +-0 0 0 128.0 +-3.6253827 12.833956 4.6357756 128.0 +-3.5402844 12.833179 4.6276159 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.4319389 14.503819 5.1772618 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.2031078 14.742807 5.2402558 128.0 +-3.0737939 14.578126 5.1753035 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.8567019 14.902383 5.2702837 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.5137489 14.557501 5.1318932 128.0 +-0 0 0 128.0 +-2.3335729 14.578852 5.1289558 128.0 +-2.243644 14.590094 5.1279764 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.197776 13.778579 4.8064795 128.0 +1.2823849 13.771911 4.8068056 128.0 +1.3692008 13.787298 4.8149652 128.0 +1.6021663 15.183949 5.3029232 128.0 +1.6914172 15.139075 5.2908468 128.0 +1.6214185 13.748495 4.8110485 128.0 +1.8277707 14.720396 5.1527824 128.0 +0 0 0 128.0 +1.9875312 14.545141 5.0999064 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.4858918 14.793329 5.2105541 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5117285 13.617551 4.8867722 128.0 +3.5558169 13.446797 4.83357 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9638782 -2.2630739 2.8895721 128.0 +7.9534726 -2.3129532 2.8908777 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0042171 -2.5423696 2.9306977 128.0 +7.9938612 -2.5931857 2.932656 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.2773299 -1.9943608 1.6603756 128.0 +0 -0 0 128.0 +4.2533855 -2.0471101 1.660702 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.1857266 -2.2407985 1.6701674 128.0 +4.1968126 -2.2799823 1.6799592 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +3.6001163 -2.1308901 1.4753107 128.0 +3.6299205 -2.1787336 1.4926095 128.0 +3.6108325 -2.1975238 1.4903249 128.0 +3.5683265 -2.2017612 1.4785746 128.0 +3.5547495 -2.2236147 1.4785746 128.0 +3.5809453 -2.270705 1.4948943 128.0 +4.1560469 -2.6715076 1.7367517 128.0 +4.7303023 -3.0820198 1.9802409 128.0 +4.4116058 -2.9129999 1.8562115 128.0 +4.4117146 -2.9521086 1.8637186 128.0 +3.6105134 -2.4479358 1.536999 128.0 +3.5915303 -2.4673662 1.535367 128.0 +3.5685668 -2.4839547 1.5321032 128.0 +3.537812 -2.494905 1.5255753 128.0 +4.3921347 -3.1382687 1.8947259 128.0 +3.7059791 -2.6822758 1.6104375 128.0 +3.9851692 -2.921891 1.7370781 128.0 +2.989182 -2.2196095 1.3163573 128.0 +2.9558702 -2.2231305 1.307871 128.0 +2.9399183 -2.2395065 1.3068918 128.0 +2.9470716 -2.2736769 1.3160309 128.0 +2.9777441 -2.3266492 1.3356144 128.0 +3.03159 -2.3988585 1.3656427 128.0 +3.3744774 -2.7041945 1.5239433 128.0 +3.3343394 -2.7057831 1.5134987 128.0 +3.7849634 -3.1103857 1.7223903 128.0 +3.6517558 -3.0386019 1.6711466 128.0 +3.1603851 -2.6625228 1.4576855 128.0 +3.2388923 -2.7628651 1.5007694 128.0 +4.109426 -3.5496757 1.9058232 128.0 +3.3050485 -2.8901641 1.5467908 128.0 +3.2964509 -2.9185371 1.551034 128.0 +3.2707403 -2.9317667 1.5474436 128.0 +3.2407932 -2.9409785 1.5418949 128.0 +3.212944 -2.9518526 1.5373254 128.0 +3.1788564 -2.9567006 1.5298184 128.0 +8.3893776 -7.9023185 4.0104065 128.0 +3.0157938 -2.8747952 1.4694357 128.0 +2.9498188 -2.8466289 1.4462618 128.0 +2.7680428 -2.7041168 1.3669482 128.0 +2.7278829 -2.6977799 1.3555244 128.0 +2.6859024 -2.6890459 1.3431215 128.0 +3.3343456 -3.3798857 1.6701674 128.0 +2.6579776 -2.7272205 1.3457327 128.0 +6.8826609 -7.1519289 3.4581492 128.0 +6.8699036 -7.2269135 3.4738159 128.0 +7.4283867 -7.9112167 3.7780144 128.0 +6.8154073 -7.3481011 3.4914412 128.0 +2.7071428 -2.9538476 1.4142752 128.0 +2.5627708 -2.8309157 1.3493229 128.0 +2.5692863 -2.8733704 1.3617259 128.0 +2.7530198 -3.1172724 1.4668245 128.0 +2.9947212 -3.4333534 1.6039096 128.0 +2.9322753 -3.4036725 1.5820413 128.0 +2.6198549 -3.0788507 1.4266782 128.0 +3.0143027 -3.5870562 1.6486255 128.0 +2.995857 -3.6098492 1.6505839 128.0 +2.8975785 -3.5352995 1.6091319 128.0 +2.8716702 -3.547868 1.6068472 128.0 +2.7749197 -3.4716311 1.5653952 128.0 +2.7816668 -3.5242138 1.5810621 128.0 +3.1782174 -4.0781136 1.8160652 128.0 +2.9911988 -3.887001 1.7243487 128.0 +1.8999722 -2.4998713 1.1149727 128.0 +1.8619156 -2.4812319 1.1019169 128.0 +1.8505927 -2.4979279 1.1042017 128.0 +2.9646215 -4.0546327 1.7651478 128.0 +2.9889069 -4.1409717 1.7941968 128.0 +3.0051141 -4.2177491 1.8190027 128.0 +3.0215774 -4.2964258 1.8444613 128.0 +3.0172498 -4.3467264 1.8578435 128.0 +2.9146867 -4.2544107 1.8114957 128.0 +2.8975246 -4.2855291 1.8170444 128.0 +1.6025525 -2.4009187 1.0274993 128.0 +1.5929867 -2.4186025 1.0307633 128.0 +1.5642182 -2.4069264 1.0219506 128.0 +0 -0 0 128.0 +1.5360787 -2.4283376 1.0229298 128.0 +1.5491537 -2.4826357 1.0412078 128.0 +2.02408 -3.289216 1.3643371 128.0 +1.9822913 -3.2660129 1.3499757 128.0 +1.5851966 -2.6478209 1.0963683 128.0 +1.9137292 -3.2420578 1.3307185 128.0 +1.9398977 -3.3329961 1.3623787 128.0 +1.7816391 -3.1045816 1.2667454 128.0 +1.7318552 -3.0611467 1.2452035 128.0 +1.7691731 -3.1724498 1.2850236 128.0 +1.6277245 -2.9612081 1.1975502 128.0 +1.636071 -3.020185 1.2168074 128.0 +1.6401951 -3.0727019 1.2334534 128.0 +1.6125164 -3.0659735 1.2269255 128.0 +1.4724296 -2.8416128 1.1358619 128.0 +1.3055322 -2.5575547 1.022277 128.0 +1.3848429 -2.7547269 1.0953891 128.0 +1.3796474 -2.7868958 1.1045281 128.0 +0 -0 0 128.0 +1.2411476 -2.5862668 1.0212978 128.0 +1.4870458 -3.1486266 1.233127 128.0 +1.4485883 -3.1165411 1.2174602 128.0 +1.0585836 -2.3137872 0.90934497 128.0 +1.4699205 -3.2668498 1.2677246 128.0 +1.6665977 -3.7659702 1.4527895 128.0 +0.9140349 -2.0988405 0.82121885 128.0 +0.89928126 -2.1000638 0.81958687 128.0 +0.88930899 -2.1125133 0.82219803 128.0 +0.87849575 -2.1231718 0.8241564 128.0 +1.5094017 -3.7146032 1.4152544 128.0 +1.4631177 -3.6649706 1.393386 128.0 +1.437499 -3.6659584 1.3904485 128.0 +1.4030993 -3.6438327 1.3790247 128.0 +1.319263 -3.4896684 1.3189684 128.0 +1.3500646 -3.6386189 1.3708649 128.0 +1.2459687 -3.4220948 1.2882874 128.0 +1.1480778 -3.2142317 1.2093003 128.0 +1.0097076 -2.8821812 1.0852709 128.0 +2.5113697 -7.3176689 2.7022226 128.0 +1.1055872 -3.2849932 1.2275783 128.0 +1.0277487 -3.1166458 1.1639316 128.0 +1.1615337 -3.5969765 1.3359408 128.0 +0.89947259 -2.8441958 1.0607914 128.0 +0.90796256 -2.9336481 1.091146 128.0 +0.89076567 -2.9418783 1.0921252 128.0 +0.77969462 -2.6327541 0.97886676 128.0 +0.75328994 -2.6020741 0.96613741 128.0 +0.67360413 -2.3810515 0.88519192 128.0 +1.9915779 -7.2173347 2.6160548 128.0 +0.8811844 -3.2690234 1.1998349 128.0 +0.84310269 -3.2058012 1.1753554 128.0 +0.8039549 -3.1349118 1.1482648 128.0 +0.76960003 -3.0792563 1.1267228 128.0 +0.75024509 -3.0820835 1.12607 128.0 +0.69759458 -2.944052 1.0754791 128.0 +0.69329274 -3.008153 1.0966947 128.0 +1.9395058 -8.667902 3.097811 128.0 +0.65793079 -3.0238237 1.0993059 128.0 +0.68946451 -3.2655067 1.1831888 128.0 +0.60203725 -2.9399867 1.0669929 128.0 +1.603388 -8.0925684 2.8794541 128.0 +1.553169 -8.0994692 2.878475 128.0 +0.50615114 -2.7256508 0.98800576 128.0 +0.68452978 -3.8192022 1.3705385 128.0 +0.4641445 -2.6822894 0.97070694 128.0 +0.45449963 -2.7261138 0.9850682 128.0 +0.51914519 -3.237535 1.1629524 128.0 +0.50099337 -3.2518706 1.1668692 128.0 +0.60014039 -4.0628333 1.4488729 128.0 +0.411506 -2.9067905 1.0444717 128.0 +0.34627289 -2.5579801 0.92207432 128.0 +0.46518531 -3.6063135 1.286329 128.0 +0.29441002 -2.3950322 0.86397636 128.0 +0.28265476 -2.4221442 0.87278897 128.0 +0.27429822 -2.4830258 0.89335173 128.0 +0.25974053 -2.4912434 0.8956365 128.0 +0.34938586 -3.5680845 1.2687038 128.0 +0.21349148 -2.3229246 0.83623296 128.0 +0.19409788 -2.2639143 0.8153438 128.0 +0.18348004 -2.3065236 0.82970506 128.0 +0.22153033 -3.0240846 1.0777639 128.0 +0.54335886 -8.1287098 2.8438773 128.0 +0.21301986 -3.4992721 1.2412869 128.0 +0.1603885 -2.9276028 1.0431662 128.0 +0.14151132 -2.9096491 1.0366384 128.0 +0.12448998 -2.930295 1.0434926 128.0 +0.31582186 -8.7555571 3.0560327 128.0 +0.08747983 -2.8966439 1.0314161 128.0 +0.070732906 -2.9405947 1.0464301 128.0 +0.050453726 -2.8133864 1.002367 128.0 +0.033383735 -2.8306561 1.0082421 128.0 +0 -0 0 128.0 +-0.0014491337 -2.9357736 1.0444717 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.072847039 -2.9093406 1.0356592 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.4343574 -3.7118115 1.4048098 128.0 +-1.4512172 -3.6879895 1.3992611 128.0 +-0 -0 0 128.0 +-1.4727938 -3.6121421 1.3777192 128.0 +-1.3528273 -3.2608373 1.249773 128.0 +-1.3687634 -3.2428973 1.2461827 128.0 +-1.4289404 -3.3282297 1.2814332 128.0 +-1.6215588 -3.7134922 1.4299421 128.0 +-1.6615857 -3.7423434 1.4446298 128.0 +-1.6638941 -3.6864221 1.427331 128.0 +-1.4936244 -3.2560804 1.2677246 128.0 +-3.426326 -7.3464847 2.8298423 128.0 +-3.4903693 -7.3654666 2.8451829 128.0 +-3.6027596 -7.4835768 2.8987112 128.0 +-3.6465335 -7.4570847 2.8970792 128.0 +-3.7384818 -7.5276866 2.9329824 128.0 +-1.5600933 -3.0950949 1.2275783 128.0 +-1.5751768 -3.0778925 1.2246407 128.0 +-1.5922885 -3.0648148 1.2233353 128.0 +-1.7072465 -3.2372234 1.2944889 128.0 +-1.7159195 -3.2058563 1.286329 128.0 +-2.3179026 -4.266572 1.7073762 128.0 +-2.3358207 -4.237371 1.7015011 128.0 +-2.3608537 -4.2213092 1.7008483 128.0 +-2.3783112 -4.1919475 1.6949733 128.0 +-2.3973842 -4.1658077 1.6904038 128.0 +-1.8065374 -3.095633 1.2683774 128.0 +-2.4343555 -4.1124892 1.6809384 128.0 +-2.0964859 -3.4929764 1.4374491 128.0 +-2.1390193 -3.5147614 1.451484 128.0 +-2.16998 -3.5168521 1.4576855 128.0 +-1.9743664 -3.1565411 1.3163573 128.0 +-1.9891397 -3.1371839 1.3134197 128.0 +-4.7146616 -7.3329048 3.0410187 128.0 +-2.5870144 -3.9709113 1.6672299 128.0 +-2.5607922 -3.8784614 1.6355698 128.0 +-2.5861192 -3.865032 1.636549 128.0 +-2.6219912 -3.8670821 1.644056 128.0 +-2.6836863 -3.9062266 1.6672299 128.0 +-2.6249509 -3.7710118 1.6172917 128.0 +-5.5826745 -7.9137878 3.3749189 128.0 +-2.6759768 -3.7454362 1.6202292 128.0 +-2.6002245 -3.5926738 1.5621313 128.0 +-2.6647105 -3.6345756 1.5869372 128.0 +-5.3270226 -7.1712198 3.1154363 128.0 +-5.3936601 -7.1686087 3.1284921 128.0 +-2.8234162 -3.7059414 1.6394864 128.0 +-5.4864221 -7.1086144 3.1314297 128.0 +-5.5212035 -7.0636468 3.1265337 128.0 +-5.5585737 -7.0222254 3.1232698 128.0 +-0 -0 0 128.0 +-3.023351 -3.7254596 1.6874663 128.0 +-6.137116 -7.4663253 3.3680646 128.0 +-6.2438951 -7.5018988 3.4010303 128.0 +-0 -0 0 128.0 +-3.1193905 -3.6566114 1.6904038 128.0 +-6.5830221 -7.6195641 3.5077608 128.0 +-6.6620164 -7.6160197 3.5247333 128.0 +-3.2463384 -3.6664989 1.7217375 128.0 +-3.322418 -3.7063243 1.749481 128.0 +-3.2783794 -3.6123891 1.7152097 128.0 +-2.7273219 -2.9686859 1.4227614 128.0 +-2.7712438 -2.9795737 1.4358171 128.0 +-2.9016092 -3.0815358 1.4922832 128.0 +-2.9335103 -3.077354 1.498811 128.0 +-2.8814275 -2.985858 1.4635606 128.0 +-3.6489663 -3.7346404 1.8336904 128.0 +-2.8885972 -2.920711 1.4491993 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.7198834 -3.6248393 1.8242249 128.0 +-8.4209251 -8.10359 4.0662193 128.0 +-3.7949181 -3.6082201 1.8389127 128.0 +-3.8224995 -3.5900426 1.8415239 128.0 +-3.834059 -3.55688 1.836628 128.0 +-3.8606908 -3.5377567 1.8389127 128.0 +-3.8844283 -3.5159039 1.8398919 128.0 +-3.9193196 -3.5039701 1.8460933 128.0 +-3.9768879 -3.5117564 1.8627394 128.0 +-9.0898409 -7.9259853 4.1951447 128.0 +-4.0325766 -3.4737911 1.8686144 128.0 +-4.0934186 -3.482662 1.886566 128.0 +-4.122673 -3.4641666 1.8901564 128.0 +-4.1729517 -3.4629443 1.9032122 128.0 +-4.244575 -3.478605 1.9257333 128.0 +-4.3128715 -3.4905431 1.9466225 128.0 +-10.16694 -8.123662 4.5244756 128.0 +-4.4607611 -3.5204866 1.9929702 128.0 +-4.5039034 -3.5098948 2.0024357 128.0 +-4.6662126 -3.5905349 2.0637975 128.0 +-4.5594335 -3.4640794 2.0079844 128.0 +-9.8819666 -7.411037 4.2960005 128.0 +-4.5628538 -3.379185 1.9913383 128.0 +-4.603344 -3.3656251 1.9998245 128.0 +-4.6223755 -3.33621 1.9991717 128.0 +-4.7890487 -3.4119651 2.0611863 128.0 +-10.438712 -7.3392496 4.4370022 128.0 +-10.552668 -7.3230162 4.4660511 128.0 +-10.485095 -7.1812248 4.4190507 128.0 +-11.399846 -7.7052875 4.7819996 128.0 +-11.408377 -7.6094966 4.7660065 128.0 +-11.497492 -7.5674114 4.7836318 128.0 +-10.65976 -6.9227748 4.4197035 128.0 +-10.723526 -6.8710041 4.4285159 128.0 +-10.745507 -6.7924519 4.4203563 128.0 +-10.788588 -6.7273908 4.4210091 128.0 +-6.0944395 -3.7491479 2.5014908 128.0 +-6.06318 -3.6788399 2.4796224 128.0 +-6.1034846 -3.6522424 2.4868031 128.0 +-5.6853242 -3.3549161 2.3102243 128.0 +-5.6445212 -3.2843261 2.2857449 128.0 +-5.6703072 -3.2529216 2.2880297 128.0 +-6.0662036 -3.43065 2.4371912 128.0 +-5.8749366 -3.2751153 2.3533082 128.0 +-5.6703987 -3.1156912 2.2648559 128.0 +-6.1474419 -3.3287585 2.4446983 128.0 +-5.7765956 -3.0823483 2.29162 128.0 +-5.6882977 -2.9905632 2.2498417 128.0 +-5.6637306 -2.9334412 2.2331955 128.0 +-5.6824651 -2.8990633 2.2335219 128.0 +-7.2780199 -3.6566083 2.8432245 128.0 +-7.4019918 -3.6621675 2.8823917 128.0 +-7.4829612 -3.6452353 2.9049127 128.0 +-8.0208597 -3.846463 3.1023805 128.0 +-7.9528422 -3.7540143 3.0674565 128.0 +-7.4553447 -3.4634855 2.8693359 128.0 +-6.9150534 -3.1611412 2.6562011 128.0 +-7.4455581 -3.3484819 2.8497522 128.0 +-7.4564548 -3.2985289 2.8461618 128.0 +-7.0258102 -3.0566938 2.6764376 128.0 +-7.0505176 -3.0161283 2.6787224 128.0 +-8.2757454 -3.4801326 3.1307769 128.0 +-8.2812176 -3.422791 3.1249018 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.2682137 -2.8487768 2.7263756 128.0 +-7.2670302 -2.796999 2.7195215 128.0 +-11.474594 -4.335072 4.2662988 128.0 +-11.490342 -4.2606411 4.262382 128.0 +-11.476295 -4.175518 4.247694 128.0 +-11.446504 -4.0853281 4.227458 128.0 +-11.220648 -3.9272957 4.1357412 128.0 +-11.430506 -3.9221656 4.2036309 128.0 +-0 -0 0 128.0 +-6.8541508 -2.2587466 2.5227063 128.0 +-11.918173 -3.8457489 4.3550773 128.0 +-6.8552141 -2.1662104 2.5132411 128.0 +-0 -0 0 128.0 +-12.618476 -3.81668 4.5829 128.0 +-11.304659 -3.3438516 4.10147 128.0 +-7.0624981 -2.0424647 2.5693805 128.0 +-7.052156 -1.9926697 2.5612206 128.0 +-7.3758869 -2.0353026 2.6728473 128.0 +-8.1941891 -2.2069554 2.9610524 128.0 +-12.885714 -3.3851762 4.631206 128.0 +-12.756985 -3.2678275 4.5780039 128.0 +-12.787801 -3.1922369 4.5819206 128.0 +-14.189487 -3.4496603 5.0731425 128.0 +-6.72188 -1.5912009 2.4159758 128.0 +-11.441453 -2.6335404 4.0848241 128.0 +-7.4530334 -1.6678392 2.6679513 128.0 +-11.401784 -2.4774907 4.0596919 128.0 +-13.552397 -2.8576038 4.8133335 128.0 +-13.368713 -2.7333241 4.742506 128.0 +-7.5390086 -1.4937927 2.6845973 128.0 +-7.5730977 -1.4523089 2.6934099 128.0 +-7.6664433 -1.4214827 2.7231116 128.0 +-11.459195 -2.0514824 4.0505528 128.0 +-11.526523 -1.9906167 4.0698099 128.0 +-11.606587 -1.9311723 4.0936365 128.0 +-11.785291 -1.8866481 4.152061 128.0 +-12.765476 -1.9632058 4.4905305 128.0 +-11.819713 -1.7436745 4.1563039 128.0 +-0 -0 0 128.0 +-13.909497 -1.8776538 4.8773065 128.0 +-11.906993 -1.5331749 4.1762142 128.0 +-12.930402 -1.5842578 4.5290451 128.0 +-13.430932 -1.5619524 4.6997485 128.0 +-13.433686 -1.4787889 4.697464 128.0 +-13.415241 -1.3935038 4.6879983 128.0 +-13.44894 -1.3136419 4.6968112 128.0 +-13.484986 -1.233677 4.7066031 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-6.932714 13.372181 5.0473719 128.0 +-6.8285255 13.371375 5.0312567 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.7541237 13.046803 4.6555562 128.0 +-4.6212835 12.928319 4.6034198 128.0 +-4.5873837 13.086255 4.6492367 128.0 +-0 0 0 128.0 +-4.3583021 12.939261 4.5781412 128.0 +-4.7926559 14.522626 5.124155 128.0 +-4.1294441 12.776008 4.5026221 128.0 +-4.0289311 12.731455 4.4782915 128.0 +-3.9454029 12.738717 4.4722877 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.7110484 12.811914 4.4732356 128.0 +-3.6199629 12.790625 4.4580688 128.0 +-3.5363574 12.794306 4.4517493 128.0 +-3.8075359 14.111909 4.8988614 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.3827968 13.884003 4.790164 128.0 +-0 0 0 128.0 +-3.3426971 14.490252 4.9835439 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.9517183 14.863285 5.0777059 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.5156231 14.52459 4.9402547 128.0 +-0 0 0 128.0 +-2.3349378 14.540316 4.9355149 128.0 +-2.2200637 14.388402 4.8795862 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.1007953 14.860456 4.9936552 128.0 +1.1158608 13.904858 4.6767273 128.0 +1.2000967 13.885461 4.6726193 128.0 +0 0 0 128.0 +1.5074058 15.256675 5.1367941 128.0 +1.5992076 15.230154 5.1311069 128.0 +1.6929425 15.222884 5.1320548 128.0 +1.7796789 15.155672 5.1130958 128.0 +0 0 0 128.0 +1.922276 14.799625 5.0012388 128.0 +2.0060112 14.735847 4.98386 128.0 +2.0961235 14.721381 4.9832277 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.9822171 14.968464 5.1140437 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.3984084 15.112 5.1895628 128.0 +3.481662 15.050191 5.1756597 128.0 +3.5618713 14.977778 5.1582808 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5080793 13.63158 4.7187524 128.0 +3.5628488 13.500632 4.6811509 128.0 +3.6565187 13.518815 4.6950541 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9589763 -2.2580483 2.7862172 128.0 +7.9440598 -2.3065767 2.7859013 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0152922 -2.5421367 2.8314025 128.0 +7.9887118 -2.5877616 2.8276107 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.3058949 -2.0062079 1.6129826 128.0 +4.2797832 -2.0260963 1.607927 128.0 +4.2869368 -2.061775 1.6151946 128.0 +0 -0 0 128.0 +4.2740622 -2.1205511 1.6199342 128.0 +4.2652068 -2.1488705 1.6215142 128.0 +4.2282896 -2.1629045 1.6126667 128.0 +4.2199912 -2.1914313 1.6145626 128.0 +4.2324848 -2.2309959 1.6243579 128.0 +4.2170424 -2.2560291 1.623726 128.0 +4.2106252 -2.2859354 1.6265699 128.0 +4.2089853 -2.318594 1.6313095 128.0 +4.1681762 -2.3295662 1.6211982 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +3.717253 -2.2610459 1.479955 128.0 +3.6782739 -2.2683759 1.4701596 128.0 +3.800251 -2.3758907 1.5235603 128.0 +3.8192611 -2.4204922 1.5368315 128.0 +3.689383 -2.370049 1.4913303 128.0 +4.4675179 -2.9087005 1.8063626 128.0 +4.5652099 -3.0123401 1.8524957 128.0 +4.093915 -2.7376075 1.671123 128.0 +3.6222532 -2.4545555 1.4881705 128.0 +4.4683151 -3.0679379 1.8360647 128.0 +4.0093393 -2.7892039 1.6575359 128.0 +4.0107627 -2.8268688 1.6651194 128.0 +3.9894807 -2.8486688 1.6635395 128.0 +4.163352 -3.0115387 1.7422186 128.0 +4.478488 -3.2814975 1.879986 128.0 +4.0613213 -3.0143442 1.7153603 128.0 +3.0188928 -2.2696271 1.288787 128.0 +3.0101941 -2.2921307 1.2909988 128.0 +3.5776253 -2.758954 1.5355675 128.0 +3.4634166 -2.7049441 1.4944901 128.0 +3.4400563 -2.7208478 1.4916463 128.0 +3.332207 -2.6689587 1.4527807 128.0 +3.2494454 -2.6355715 1.4243425 128.0 +3.755276 -3.0841544 1.6493204 128.0 +3.7990205 -3.1593046 1.6764947 128.0 +3.8231115 -3.2192185 1.6954535 128.0 +3.4920926 -2.9773386 1.5592661 128.0 +3.047843 -2.6311018 1.3718897 128.0 +3.903235 -3.4114084 1.7573856 128.0 +3.2242355 -2.8531373 1.464788 128.0 +3.2102017 -2.8760321 1.4663678 128.0 +3.212173 -2.9135213 1.4752153 128.0 +3.2165997 -2.9537089 1.4853266 128.0 +3.131007 -2.9107349 1.4546766 128.0 +3.1110153 -2.9279411 1.4537287 128.0 +3.031852 -2.8887324 1.4256064 128.0 +2.9771922 -2.8717163 1.4085435 128.0 +2.8108423 -2.7447793 1.3393438 128.0 +2.7615576 -2.7299614 1.3241768 128.0 +2.7279878 -2.730078 1.3162773 128.0 +2.9651437 -3.0040057 1.4366658 128.0 +6.93962 -7.1166544 3.3413947 128.0 +6.9590116 -7.2246981 3.3717287 128.0 +3.3181083 -3.4876542 1.6341534 128.0 +3.3167894 -3.5293791 1.6439488 128.0 +2.5255949 -2.7208662 1.2673002 128.0 +2.5242426 -2.7530937 1.2748839 128.0 +2.5971127 -2.8676772 1.319437 128.0 +2.5851617 -2.8899224 1.3222809 128.0 +2.8991106 -3.2811029 1.4891185 128.0 +2.671788 -3.0615246 1.384213 128.0 +2.6300309 -3.0512729 1.3725218 128.0 +2.6161797 -3.073132 1.3750496 128.0 +2.570406 -3.0571766 1.3611465 128.0 +2.8916619 -3.4823484 1.5384114 128.0 +2.8497829 -3.4750841 1.527668 128.0 +3.0565257 -3.7741358 1.6483725 128.0 +2.9586384 -3.6994653 1.608559 128.0 +3.2258055 -4.0846014 1.7643372 128.0 +2.7368009 -3.5095611 1.5131329 128.0 +2.6660089 -3.4623942 1.4862746 128.0 +1.8901178 -2.4863207 1.0710766 128.0 +1.866282 -2.4864905 1.0663369 128.0 +2.6029558 -3.5124047 1.4869065 128.0 +2.8945491 -3.9563186 1.6635395 128.0 +2.9407761 -4.0716791 1.7036691 128.0 +3.0462859 -4.2727261 1.7785563 128.0 +3.0636985 -4.3534055 1.8038348 128.0 +3.0277264 -4.3588758 1.7984631 128.0 +3.0170195 -4.4008465 1.8079425 128.0 +2.9516764 -4.3627 1.7851919 128.0 +1.6250331 -2.4342182 1.0056686 128.0 +1.6236393 -2.4647417 1.0138842 128.0 +1.6167599 -2.4873846 1.0189399 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.5400531 -2.467629 0.99966502 128.0 +2.0019698 -3.2517869 1.3026901 128.0 +1.9962626 -3.2875261 1.3118535 128.0 +1.6191795 -2.7039223 1.080556 128.0 +1.9340554 -3.2750154 1.2976344 128.0 +1.9010313 -3.2646852 1.2891029 128.0 +1.8648998 -3.2483144 1.2783597 128.0 +1.8196932 -3.2151113 1.2612966 128.0 +1.8309079 -3.2817254 1.2824674 128.0 +1.7750721 -3.2280552 1.2578208 128.0 +1.7204174 -3.17466 1.2334905 128.0 +1.6450297 -3.0805485 1.1939929 128.0 +1.6291898 -3.0964615 1.1962048 128.0 +1.544654 -2.9800568 1.1488078 128.0 +1.6277487 -3.1880417 1.2230631 128.0 +1.273057 -2.5317702 0.9747026 128.0 +1.41879 -2.8651536 1.095723 128.0 +1.8058559 -3.7035303 1.4031718 128.0 +1.7559937 -3.6580923 1.3823171 128.0 +1.5328389 -3.2441924 1.2259068 128.0 +1.4572852 -3.1339605 1.1819856 128.0 +0.9728955 -2.1265831 0.80976093 128.0 +0.9430781 -2.0953133 0.79617375 128.0 +0.92866683 -2.0975904 0.79490983 128.0 +0.930556 -2.1371722 0.8072331 128.0 +0.92190778 -2.1533072 0.81102484 128.0 +1.5441921 -3.6681473 1.3564067 128.0 +1.5198414 -3.6731699 1.3548268 128.0 +1.2095336 -2.9749458 1.1004628 128.0 +1.4735955 -3.6889012 1.3538789 128.0 +0.92197472 -2.3501434 0.87169307 128.0 +1.3992136 -3.6314571 1.3270205 128.0 +0.89373696 -2.3630555 0.872325 128.0 +1.2310067 -3.3157153 1.2088439 128.0 +1.2181102 -3.3437088 1.2161115 128.0 +1.1905445 -3.3314652 1.20916 128.0 +1.1468529 -3.2724526 1.1857774 128.0 +1.0157318 -2.956419 1.0720245 128.0 +1.0947962 -3.251214 1.1734542 128.0 +1.0334941 -3.1326363 1.1295329 128.0 +0.96405995 -2.9836421 1.0751843 128.0 +0.91395789 -2.8890967 1.0401105 128.0 +0.89256412 -2.8828685 1.0360028 128.0 +0.71389288 -2.3571167 0.85115433 128.0 +0.70588636 -2.3832846 0.85873789 128.0 +0.72160852 -2.4923701 0.89507556 128.0 +0.69131511 -2.4438026 0.87674874 128.0 +0.67226261 -2.433367 0.87169307 128.0 +0.88916713 -3.2966573 1.1680825 128.0 +0.83752131 -3.1827757 1.1270051 128.0 +0.84510642 -3.2935359 1.1633428 128.0 +0.76846558 -3.0731621 1.0859276 128.0 +0.74892068 -3.0750539 1.0849797 128.0 +0.70507717 -2.9743519 1.0489579 128.0 +0.7017439 -3.0433357 1.0710766 128.0 +0.69198447 -3.0873923 1.0846637 128.0 +0.70372075 -3.2324884 1.1326927 128.0 +0.67013675 -3.1717682 1.1105741 128.0 +1.7039543 -8.3137445 2.8573129 128.0 +0.43838498 -2.2091496 0.78100669 128.0 +0.42715016 -2.2239101 0.78511447 128.0 +0.50279617 -2.7068739 0.94784427 128.0 +0.42162439 -2.3503826 0.8261919 128.0 +0.51617885 -2.9820752 1.0388466 128.0 +0.44991851 -2.6978896 0.94184065 128.0 +0.5180614 -3.2279956 1.1197375 128.0 +0.42517012 -2.7575924 0.96016753 128.0 +0.43019542 -2.908438 1.0100924 128.0 +0.35906735 -2.5352743 0.88370031 128.0 +0 -0 0 128.0 +1.0361618 -8.0176125 2.7233372 128.0 +0.29774055 -2.4228046 0.84388679 128.0 +0.28793311 -2.4679341 0.85842186 128.0 +0.28603181 -2.5894172 0.89855134 128.0 +0.26146835 -2.5080836 0.87074512 128.0 +0.24727957 -2.5219157 0.87485284 128.0 +0.25301218 -2.7539105 0.95195204 128.0 +0.24852315 -2.9000406 1.000297 128.0 +0.65619779 -8.2432222 2.7849534 128.0 +0.20950966 -2.8565073 0.98481399 128.0 +0.49840802 -7.4100518 2.5043628 128.0 +0.52225018 -8.546526 2.8825912 128.0 +0.48360604 -8.8006134 2.966326 128.0 +0.11495217 -2.3613844 0.81829238 128.0 +0.10600515 -2.4919078 0.86158168 128.0 +0.088807203 -2.4403641 0.84420276 128.0 +0.091910809 -3.0354645 1.0423224 128.0 +0.072938599 -3.021744 1.0375826 128.0 +0 -0 0 128.0 +0.031256661 -2.6391377 0.90992665 128.0 +0 -0 0 128.0 +-0.0012016643 -2.8850529 0.99176556 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.055139288 -2.9291263 1.0066166 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.4244105 -3.7569149 1.369046 128.0 +-3.1026649 -8.0355034 2.8996542 128.0 +-1.4641579 -3.7232587 1.3633583 128.0 +-3.2225444 -8.0505543 2.9189291 128.0 +-1.4828923 -3.6391118 1.3396598 128.0 +-1.4132721 -3.4082046 1.2597167 128.0 +-1.3751665 -3.2595973 1.20916 128.0 +-1.3865379 -3.2310438 1.2018924 128.0 +-1.4146838 -3.2416067 1.2088439 128.0 +-1.6465309 -3.7107267 1.3829491 128.0 +-1.6579573 -3.6754723 1.3737856 128.0 +-3.4800603 -7.591218 2.8121276 128.0 +-3.4933219 -7.4983392 2.7859013 128.0 +-3.4938052 -7.3807168 2.7505116 128.0 +-3.5850749 -7.454906 2.7859013 128.0 +-3.6482382 -7.4685736 2.7991724 128.0 +-3.6834555 -7.4247994 2.7912729 128.0 +-1.5598642 -3.0958784 1.1854614 128.0 +-1.5779667 -3.0845594 1.1848295 128.0 +-1.595552 -3.072293 1.1838815 128.0 +-1.8107724 -3.435112 1.3241768 128.0 +-0 -0 0 128.0 +-1.6767259 -3.0882652 1.2012604 128.0 +-4.1343498 -7.5057831 2.8848031 128.0 +-4.1507072 -7.4272671 2.8645804 128.0 +-4.1943307 -7.3983574 2.8633165 128.0 +-1.8631504 -3.2394712 1.2755158 128.0 +-1.9871904 -3.4066451 1.3443995 128.0 +-2.0433142 -3.4540012 1.3674661 128.0 +-2.0981405 -3.4975402 1.3892686 128.0 +-2.1333649 -3.5072982 1.3981161 128.0 +-1.9536767 -3.1678736 1.2704601 128.0 +-1.9720719 -3.1542172 1.2698282 128.0 +-1.9949434 -3.1476676 1.27204 128.0 +-4.6142359 -7.1835122 2.8743758 128.0 +-2.0939803 -3.2159801 1.3090097 128.0 +-5.313343 -8.0529184 3.2440727 128.0 +-2.4955633 -3.7318923 1.5260881 128.0 +-2.5141575 -3.7102258 1.5235603 128.0 +-2.5771482 -3.7533937 1.5472589 128.0 +-2.6754346 -3.8457744 1.5911801 128.0 +-2.7077258 -3.8416944 1.5962358 128.0 +-2.71526 -3.8026147 1.5870723 128.0 +-2.7535534 -3.8066397 1.5956038 128.0 +-2.7948015 -3.8141637 1.6057152 128.0 +-2.826633 -3.8083718 1.6104548 128.0 +-2.8738899 -3.8228095 1.623726 128.0 +-5.436327 -7.1402512 3.0197268 128.0 +-5.4922023 -7.1225386 3.0263622 128.0 +-5.6403241 -7.2225595 3.0829227 128.0 +-5.9728994 -7.5524702 3.2377532 128.0 +-5.6941338 -7.1098471 3.0645959 128.0 +-6.1171207 -7.5427165 3.2652433 128.0 +-6.1675014 -7.5101728 3.2674551 128.0 +-3.0962195 -3.7231498 1.6436328 128.0 +-3.1141176 -3.6982753 1.6411049 128.0 +-6.4899573 -7.6127076 3.3625653 128.0 +-3.1791039 -3.6827655 1.6512163 128.0 +-3.2316079 -3.6974816 1.6663834 128.0 +-3.2674365 -3.6925054 1.6730189 128.0 +-2.7101791 -3.0250449 1.383581 128.0 +-2.7509966 -3.0329568 1.3946403 128.0 +-2.7958624 -3.0446742 1.4075955 128.0 +-3.4197261 -3.6786151 1.7036691 128.0 +-3.4532864 -3.6693091 1.7090406 128.0 +-3.4940593 -3.6672857 1.7178881 128.0 +-3.5118852 -3.6409972 1.7156763 128.0 +-3.5480785 -3.6336362 1.7223119 128.0 +-3.5749757 -3.6165209 1.7245237 128.0 +-3.6145468 -3.6119552 1.7327392 128.0 +-3.6852536 -3.6377008 1.7554898 128.0 +-0 -0 0 128.0 +-3.7596817 -3.621165 1.7693928 128.0 +-3.7728946 -3.5895257 1.7652851 128.0 +-8.5580873 -8.0433464 3.942389 128.0 +-9.8275318 -9.1235952 4.4969344 128.0 +-10.067929 -9.2324142 4.5803533 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.9226408 -8.7684631 4.4410057 128.0 +-10.072751 -8.7916403 4.4836631 128.0 +-9.1434755 -7.8821878 4.0514021 128.0 +-9.1887779 -7.8234758 4.0501385 128.0 +-9.9838047 -8.3952951 4.3752818 128.0 +-10.462833 -8.6890945 4.5604463 128.0 +-10.678072 -8.7577047 4.6302781 128.0 +-9.7967682 -7.9348083 4.2296152 128.0 +-4.6092963 -3.6863945 1.9965827 128.0 +-4.6176829 -3.6468694 1.9905791 128.0 +-10.450634 -8.1505003 4.4447975 128.0 +-4.6139798 -3.5528793 1.9703563 128.0 +-4.6145468 -3.5084219 1.9615089 128.0 +-4.6291585 -3.4749148 1.958665 128.0 +-4.6603022 -3.4537899 1.9627728 128.0 +-4.7258153 -3.4576259 1.9810996 128.0 +-4.7346363 -3.4196746 1.9760439 128.0 +-10.366869 -7.3918414 4.2713246 128.0 +-10.387201 -7.3106174 4.2612128 128.0 +-0 -0 0 128.0 +-11.275842 -7.7309289 4.5841451 128.0 +-11.484934 -7.7711291 4.6492367 128.0 +-11.548181 -7.71105 4.6555562 128.0 +-0 -0 0 128.0 +-10.674701 -6.939889 4.2713246 128.0 +-10.724269 -6.87887 4.274168 128.0 +-10.763068 -6.8109083 4.2729044 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-6.0924811 -3.6998796 2.4048293 128.0 +-6.1118131 -3.6604772 2.4035652 128.0 +-6.0769753 -3.5891297 2.3814466 128.0 +-6.0414944 -3.5183489 2.359328 128.0 +-0 -0 0 128.0 +-6.0792613 -3.4411411 2.3574321 128.0 +-6.0041561 -3.3501439 2.3207784 128.0 +-5.9813704 -3.2894633 2.3043475 128.0 +-5.8988471 -3.1970878 2.2654819 128.0 +-5.9376006 -3.1711142 2.2727494 128.0 +-0 -0 0 128.0 +-5.7553892 -2.9835954 2.1899626 128.0 +-5.9806004 -3.0539491 2.2673779 128.0 +-7.6842189 -3.8647504 2.8955464 128.0 +-7.7154393 -3.8213181 2.8983903 128.0 +-7.3584151 -3.5884128 2.7574632 128.0 +-7.6385908 -3.6672149 2.8528891 128.0 +-7.8934093 -3.7301414 2.9385197 128.0 +-7.5393543 -3.5063789 2.8001204 128.0 +-7.3795605 -3.3771338 2.7337646 128.0 +-6.9226046 -3.1167593 2.5593436 128.0 +-7.0014544 -3.1007364 2.5811462 128.0 +-7.027307 -3.0607491 2.583674 128.0 +-7.1488667 -3.0616527 2.6209598 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.673143 -5.1539111 4.5873046 128.0 +-12.666644 -5.0609155 4.5737176 128.0 +-11.588187 -4.5477309 4.1768465 128.0 +-11.567183 -4.4577756 4.1594672 128.0 +-11.582782 -4.3823519 4.1553597 128.0 +-11.599669 -4.3075652 4.1518841 128.0 +-11.652624 -4.2460551 4.1613631 128.0 +-11.60252 -4.1473293 4.1345048 128.0 +-11.691318 -4.0983458 4.1569395 128.0 +-0 -0 0 128.0 +-11.696673 -3.9397254 4.1414566 128.0 +-6.9112802 -2.280601 2.4547541 128.0 +-6.9233379 -2.2375677 2.4541221 128.0 +-6.9088964 -2.1861701 2.4443266 128.0 +-12.283762 -3.804481 4.3136659 128.0 +-7.7968864 -2.3623445 2.7441919 128.0 +-7.1617365 -2.1219804 2.5185821 128.0 +-7.0342817 -2.0373421 2.4699211 128.0 +-7.0046568 -1.9822561 2.4553859 128.0 +-6.9471884 -1.920027 2.4313715 128.0 +-6.9441824 -1.873409 2.4263158 128.0 +-7.0298648 -1.8503304 2.4519103 128.0 +-8.1539555 -2.0928521 2.8345623 128.0 +-8.2080612 -2.0531433 2.8487813 128.0 +-8.246315 -2.0090301 2.8576288 128.0 +-8.2354078 -1.95292 2.8497293 128.0 +-7.6176648 -1.7571014 2.6345468 128.0 +-7.5903459 -1.7018151 2.6215916 128.0 +-11.505288 -2.505734 3.9525003 128.0 +-9.5024309 -2.0084727 3.2655594 128.0 +-13.386608 -2.7439086 4.581933 128.0 +-13.358524 -2.6528463 4.5667658 128.0 +-12.503407 -2.4033551 4.2713246 128.0 +-10.401426 -1.9331516 3.5543652 128.0 +-10.419629 -1.8704669 3.5565772 128.0 +-11.717255 -2.0293243 3.9913659 128.0 +-12.640038 -2.1093714 4.2988148 128.0 +-12.678036 -2.0358362 4.3073463 128.0 +-11.915776 -1.8384825 4.0463467 128.0 +-0 -0 0 128.0 +-13.722245 -1.9451712 4.646709 128.0 +-11.948539 -1.6189679 4.0466623 128.0 +-11.996825 -1.5506102 4.0596175 128.0 +-13.606 -1.6738364 4.596468 128.0 +-13.616957 -1.59043 4.5967841 128.0 +-13.64249 -1.5086213 4.6021557 128.0 +-13.609971 -1.4205493 4.5882525 128.0 +-13.641092 -1.3392388 4.5958362 128.0 +-13.654721 -1.256035 4.5977321 128.0 +-13.739685 -1.1788805 4.6236424 128.0 +-14.013367 -1.1157967 4.712749 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.1660256 13.427445 4.9030929 128.0 +-7.0799561 13.464418 4.9006538 128.0 +-6.9774961 13.46955 4.8869352 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-5.0347905 13.320206 4.5893874 128.0 +-0 0 0 128.0 +-4.7716122 13.108021 4.4964037 128.0 +-4.65555 13.03749 4.462564 128.0 +-4.592145 13.113452 4.4787216 128.0 +-4.4760404 13.037788 4.4436622 128.0 +-0 0 0 128.0 +-4.7640491 14.452166 4.9021783 128.0 +-4.1191597 12.758146 4.3226314 128.0 +-4.025877 12.735958 4.3067784 128.0 +-3.9327407 12.712197 4.2906203 128.0 +-3.8585274 12.748851 4.2948885 128.0 +-3.7837422 12.784159 4.298852 128.0 +-3.7012599 12.793411 4.2942786 128.0 +-3.6188064 12.802134 4.2897058 128.0 +-0 0 0 128.0 +-3.8055112 14.122925 4.7131624 128.0 +-3.7163622 14.136798 4.7101135 128.0 +-3.6104012 14.084605 4.6854196 128.0 +-3.7401226 14.972301 4.9710774 128.0 +-3.4172578 14.045488 4.6582866 128.0 +-0 0 0 128.0 +-3.1153517 13.524858 4.4738441 128.0 +-3.328917 14.86905 4.9085803 128.0 +-0 0 0 128.0 +-3.0927303 14.655308 4.8256574 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.8014607 14.600317 4.789988 128.0 +-2.7076545 14.594757 4.7826715 128.0 +-2.6931045 15.030149 4.9189458 128.0 +-2.5095413 14.51802 4.7473073 128.0 +-2.4182239 14.519993 4.7430391 128.0 +-2.3131196 14.434874 4.7107234 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.81921959 14.649478 4.7277961 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.0895079 14.642365 4.7311492 128.0 +0 0 0 128.0 +1.2107738 13.956124 4.5153055 128.0 +1.2969135 13.954122 4.5171347 128.0 +1.3811935 13.932633 4.5128665 128.0 +0 0 0 128.0 +1.549423 13.890971 4.5052447 128.0 +1.7858816 15.164722 4.9189458 128.0 +1.8696331 15.078813 4.8948617 128.0 +1.9469832 14.950894 4.8573632 128.0 +2.0426781 14.967919 4.8668141 128.0 +2.1098416 14.782566 4.8110237 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.503921 15.498081 5.0564394 128.0 +2.6218405 15.618615 5.1006451 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.8420336 15.21009 4.9841866 128.0 +2.6228056 13.575597 4.4570765 128.0 +3.0254872 15.159124 4.9793091 128.0 +3.2120478 15.594548 5.1277776 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.7003736 15.536858 5.143631 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.503114 13.593955 4.5247564 128.0 +3.5652835 13.492098 4.4982328 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9603682 -2.2605774 2.6800222 128.0 +7.9362879 -2.3064537 2.6766689 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0207138 -2.5460739 2.7248373 128.0 +7.9632673 -2.5817232 2.7108135 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.3467875 -2.0911608 1.5751941 128.0 +4.3313079 -2.1165378 1.5742795 128.0 +4.3515067 -2.1595945 1.5861692 128.0 +4.2760949 -2.1549504 1.5639142 128.0 +4.2610965 -2.1802793 1.5633044 128.0 +4.2070751 -2.1853013 1.5486709 128.0 +4.1851635 -2.2066302 1.5456222 128.0 +4.1354418 -2.2129371 1.5325131 128.0 +4.197938 -2.2796483 1.5602558 128.0 +4.1621861 -2.2934077 1.5523293 128.0 +4.1463737 -2.3179734 1.5517195 128.0 +4.1635489 -2.3612325 1.5633044 128.0 +0 -0 0 128.0 +4.0701046 -2.3746955 1.539525 128.0 +3.816972 -2.2584319 1.4508095 128.0 +3.9091935 -2.3455381 1.4904418 128.0 +3.9142525 -2.3813655 1.4977586 128.0 +3.7788074 -2.3308082 1.4523338 128.0 +3.7951152 -2.373147 1.4639187 128.0 +4.817184 -3.0539186 1.8568888 128.0 +4.0388904 -2.5951667 1.5678774 128.0 +4.1170483 -2.681253 1.6038513 128.0 +3.8779912 -2.5595129 1.5184894 128.0 +3.8598387 -2.5816705 1.5175748 128.0 +3.8171251 -2.587131 1.5072094 128.0 +3.8553402 -2.6477201 1.528245 128.0 +3.9570465 -2.7534962 1.5742795 128.0 +3.9657598 -2.7958398 1.5843401 128.0 +3.9183097 -2.7985256 1.5724504 128.0 +3.8941212 -2.8174889 1.5697066 128.0 +3.8544872 -2.8249972 1.5608655 128.0 +4.0228696 -2.9865925 1.6349475 128.0 +3.8644326 -2.9058669 1.5788525 128.0 +3.7268391 -2.8383212 1.530684 128.0 +3.8737211 -2.9879827 1.5971444 128.0 +4.0113964 -3.1336839 1.6605561 128.0 +3.617208 -2.8615174 1.5075142 128.0 +3.9258213 -3.145148 1.6413497 128.0 +3.3385336 -2.7082257 1.4072139 128.0 +3.2821214 -2.6960044 1.3907512 128.0 +3.7523322 -3.1212282 1.593486 128.0 +3.6588235 -3.0815952 1.5623899 128.0 +3.2102051 -2.737416 1.3816053 128.0 +3.2164111 -2.7769849 1.391361 128.0 +3.2595294 -2.8493371 1.4169695 128.0 +3.2583842 -2.8838055 1.4239814 128.0 +3.2533925 -2.9151881 1.429469 128.0 +3.2890406 -2.983743 1.4526386 128.0 +4.3618584 -4.0065746 1.9270076 128.0 +3.8602321 -3.5895495 1.7184803 128.0 +3.1260984 -2.9425676 1.4053847 128.0 +2.6227193 -2.4990163 1.1907603 128.0 +2.6278937 -2.534905 1.1999062 128.0 +3.0359843 -2.964998 1.3895317 128.0 +3.006901 -2.9728541 1.3846539 128.0 +3.079453 -3.0822287 1.4258106 128.0 +3.0952611 -3.1363242 1.4416635 128.0 +2.8885303 -2.9628944 1.3556918 128.0 +3.3649666 -3.4945285 1.5840352 128.0 +2.6163709 -2.7503211 1.2462455 128.0 +2.5890145 -2.7552149 1.2413677 128.0 +2.5545723 -2.7521963 1.2331364 128.0 +2.5517919 -2.7832677 1.2398434 128.0 +2.5877099 -2.8574822 1.2651471 128.0 +3.0157132 -3.3717594 1.4791619 128.0 +2.6488955 -2.9982533 1.3117914 128.0 +2.622937 -3.0058367 1.308133 128.0 +2.5596919 -2.9699183 1.2861828 128.0 +2.5340152 -2.9768634 1.2825243 128.0 +2.7981369 -3.3285093 1.4230669 128.0 +2.8311801 -3.4101136 1.4498949 128.0 +2.8192577 -3.4384708 1.4544679 128.0 +3.3127608 -4.0916543 1.7163463 128.0 +3.0426264 -3.8053761 1.5907422 128.0 +3.1165702 -3.9473333 1.6410449 128.0 +2.9547212 -3.7898405 1.5694017 128.0 +2.9947169 -3.8901742 1.6026319 128.0 +3.0019026 -3.9494278 1.6190946 128.0 +3.1307685 -4.1719589 1.7007983 128.0 +3.077338 -4.1535869 1.6858599 128.0 +1.8376935 -2.5116897 1.0273529 128.0 +1.8005106 -2.4927993 1.0154632 128.0 +3.0484395 -4.2770109 1.712383 128.0 +3.0374784 -4.3174491 1.7209193 128.0 +3.0098436 -4.3344407 1.7203095 128.0 +2.9831915 -4.3528271 1.7203095 128.0 +2.985764 -4.4144454 1.7370771 128.0 +3.0051339 -4.5024023 1.7639052 128.0 +1.6462533 -2.4986029 0.98894006 128.0 +1.6303724 -2.5078583 0.98863524 128.0 +1.6190648 -2.5242298 0.99107414 128.0 +1.5908222 -2.5139916 0.9834525 128.0 +0 -0 0 128.0 +1.5378944 -2.497632 0.97003847 128.0 +1.5087069 -2.4842229 0.96150231 128.0 +0 -0 0 128.0 +1.4529393 -2.4598978 0.94564933 128.0 +1.5460666 -2.6548071 1.0145487 128.0 +1.5330653 -2.6700265 1.0166827 128.0 +1.5879169 -2.8053918 1.0630221 128.0 +1.6801164 -3.0114026 1.1349701 128.0 +1.1039144 -2.0066648 0.76425511 128.0 +1.1174303 -2.0611377 0.78163236 128.0 +0 -0 0 128.0 +1.0796436 -2.051091 0.77309614 128.0 +1.0696661 -2.0627513 0.77492535 128.0 +1.0673766 -2.0896366 0.78224206 128.0 +1.0686454 -2.1242299 0.79230261 128.0 +1.2904265 -2.6053591 0.96180713 128.0 +1.3232191 -2.7134027 0.99747628 128.0 +1.236941 -2.576344 0.9459542 128.0 +1.1954949 -2.5296266 0.92674774 128.0 +0 -0 0 128.0 +1.4340264 -3.1339707 1.1343603 128.0 +1.0233283 -2.272387 0.82888633 128.0 +0.99087042 -2.2368169 0.81425285 128.0 +0.94558924 -2.1703694 0.78894907 128.0 +1.2135835 -2.8337288 1.0179021 128.0 +1.1954347 -2.839366 1.0172925 128.0 +1.5447334 -3.73385 1.3245957 128.0 +0 -0 0 128.0 +1.2033324 -3.0121489 1.0694243 128.0 +1.0006155 -2.5495198 0.90784615 128.0 +0.93739808 -2.4320648 0.86547005 128.0 +0.88609797 -2.3415527 0.83254468 128.0 +0.87138259 -2.3460526 0.83223981 128.0 +2.9209597 -8.0227909 2.7641649 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.1505467 -3.3486197 1.164542 128.0 +1.0209706 -3.0315485 1.0550957 128.0 +1.075086 -3.2584641 1.1294825 128.0 +1.0544871 -3.2631867 1.1288728 128.0 +0.9216634 -2.9126997 1.0090611 128.0 +0.90630668 -2.9264891 1.0118049 128.0 +1.2019286 -3.9684668 1.3584356 128.0 +0.80709648 -2.7236876 0.94046664 128.0 +0.7075485 -2.4422247 0.84504414 128.0 +0.69177306 -2.4437706 0.84412956 128.0 +0.71020824 -2.5691557 0.88437164 128.0 +0.89830208 -3.3303092 1.1352749 128.0 +0.88027143 -3.3449695 1.1383235 128.0 +0.85216534 -3.320785 1.1285679 128.0 +0.77247107 -3.0884783 1.0502177 128.0 +0.75170535 -3.0857565 1.0477788 128.0 +0.71081823 -2.9976325 1.0172925 128.0 +0.70288306 -3.047415 1.0322309 128.0 +1.6037482 -7.1605682 2.3800359 128.0 +0.64823854 -2.9767046 1.0063174 128.0 +0.60165393 -2.8464344 0.96241689 128.0 +1.6600522 -8.1098204 2.6809371 128.0 +0.4259792 -2.143589 0.73072004 128.0 +0.41030684 -2.1330676 0.72645193 128.0 +0.40068391 -2.1542737 0.73254919 128.0 +0.39551735 -2.2016907 0.74718267 128.0 +0.38427064 -2.2172148 0.75145078 128.0 +0.37566319 -2.249594 0.76120645 128.0 +0.36381093 -2.264082 0.76516968 128.0 +0.35556093 -2.302983 0.77705938 128.0 +0.37007123 -2.499212 0.83986145 128.0 +1.0767257 -7.6097941 2.4913113 128.0 +1.0249128 -7.5785046 2.4791167 128.0 +0.38595203 -2.9863958 0.99503738 128.0 +0.33284974 -2.7051127 0.9035781 128.0 +0.29048172 -2.4857376 0.83223981 128.0 +0.26896644 -2.4306731 0.81394798 128.0 +0.75985593 -7.2975607 2.3797309 128.0 +0.28749117 -2.9285824 0.97308713 128.0 +0.75727099 -8.2566595 2.685205 128.0 +0.70546043 -8.2478657 2.6809371 128.0 +0.22699393 -2.8507783 0.94656396 128.0 +0.17827718 -2.4246778 0.80937499 128.0 +0.16295144 -2.4190743 0.80724096 128.0 +0.14804749 -2.4190779 0.80693609 128.0 +0.13252704 -2.407578 0.80297285 128.0 +0.11738355 -2.4007356 0.80053395 128.0 +0.10240944 -2.3957014 0.79870474 128.0 +0.089563742 -2.4476805 0.81516743 128.0 +0.074800134 -2.4567518 0.81791121 128.0 +0.061516691 -2.5323825 0.84199548 128.0 +0.049969375 -2.7583947 0.91424835 128.0 +0.033714347 -2.8167417 0.93284506 128.0 +0 -0 0 128.0 +-0.00098079373 -2.9931364 0.98924494 128.0 +-0 -0 0 128.0 +-0.040754862 -3.2271686 1.0642415 128.0 +-0.060828868 -3.2411411 1.0688145 128.0 +-0.081003696 -3.2521319 1.0724729 128.0 +-0.10158478 -3.2715642 1.0788751 128.0 +-0.12240735 -3.2908654 1.0852772 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.2738461 -8.0295534 2.8068459 128.0 +-1.4789355 -3.5662708 1.2669764 128.0 +-1.4341017 -3.3992009 1.2121007 128.0 +-1.403814 -3.2713251 1.1706392 128.0 +-1.4253849 -3.2661409 1.1718587 128.0 +-1.4496511 -3.2669082 1.1752121 128.0 +-1.6123245 -3.5739121 1.2861828 128.0 +-1.6501125 -3.5985758 1.2983774 128.0 +-3.4473314 -7.3948674 2.6428289 128.0 +-1.6839527 -3.5565388 1.2907557 128.0 +-3.6394396 -7.5631099 2.7178254 128.0 +-3.6962364 -7.562026 2.7254472 128.0 +-3.5218737 -7.0947862 2.5666127 128.0 +-1.7642951 -3.5013855 1.2861828 128.0 +-1.5878283 -3.1039214 1.1471647 128.0 +-1.6081613 -3.0966554 1.1480793 128.0 +-1.6426858 -3.1162121 1.1587495 128.0 +-1.6671703 -3.1161494 1.1624079 128.0 +-4.0370798 -7.4323263 2.7385564 128.0 +-4.07617 -7.3957386 2.7342882 128.0 +-1.7433085 -3.1190135 1.1749073 128.0 +-4.8331237 -8.5197315 3.1665857 128.0 +-0 -0 0 128.0 +-1.8474797 -3.1670012 1.204784 128.0 +-2.076968 -3.5104654 1.3367902 128.0 +-2.0979784 -3.4968386 1.3364854 128.0 +-2.0886915 -3.4334614 1.3175838 128.0 +-1.9646614 -3.1855454 1.2291732 128.0 +-1.9816447 -3.1693935 1.2276489 128.0 +-2.0571663 -3.2456443 1.2611839 128.0 +-2.4432318 -3.8025589 1.4779425 128.0 +-2.1415553 -3.2887788 1.2874023 128.0 +-2.4225333 -3.6705635 1.4389198 128.0 +-5.4849162 -8.1980886 3.1885359 128.0 +-2.5769749 -3.8021483 1.5014169 128.0 +-2.61374 -3.8058884 1.5090386 128.0 +-5.4520454 -7.8331151 3.0861015 128.0 +-2.7535701 -3.905833 1.5608655 128.0 +-2.7802527 -3.8927383 1.5623899 128.0 +-2.3763001 -3.2846565 1.3288637 128.0 +-2.4020414 -3.2776945 1.3319124 128.0 +-0 -0 0 128.0 +-5.4206061 -7.2070255 2.9178164 128.0 +-5.4664574 -7.1759019 2.918731 128.0 +-0 -0 0 128.0 +-5.7036586 -7.2996306 2.9964714 128.0 +-5.9753146 -7.5512609 3.1135395 128.0 +-6.0245142 -7.5181708 3.1150637 128.0 +-6.1197476 -7.5417004 3.1400626 128.0 +-0 -0 0 128.0 +-6.3885107 -7.678329 3.2284732 128.0 +-6.4864416 -7.6994343 3.253777 128.0 +-6.4773092 -7.5935578 3.2260344 128.0 +-6.5561557 -7.5911479 3.2418873 128.0 +-2.7019899 -3.0910623 1.3453264 128.0 +-2.7215369 -3.0751381 1.3456314 128.0 +-2.7638774 -3.084619 1.3569113 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-8.6149187 -9.1489391 4.053741 128.0 +-8.6610355 -9.0855675 4.0491681 128.0 +-8.718605 -9.0343084 4.0500827 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-8.3756571 -8.162446 3.77479 128.0 +-8.4516592 -8.1359968 3.7863748 128.0 +-9.9474792 -9.4587641 4.4250655 128.0 +-8.6140413 -8.0909986 3.8141174 128.0 +-9.9434042 -9.2252245 4.3729339 128.0 +-10.02159 -9.1839848 4.3823848 128.0 +-3.9385812 -3.566144 1.7318944 128.0 +-3.968909 -3.5495269 1.7355528 128.0 +-3.9977531 -3.5314109 1.7386014 128.0 +-0 -0 0 128.0 +-9.2197847 -7.9430208 3.9266124 128.0 +-9.9335499 -8.452199 4.2061729 128.0 +-9.9764738 -8.3837366 4.2025146 128.0 +-10.438169 -8.662941 4.3732386 128.0 +-10.695914 -8.7665482 4.4579911 128.0 +-0 -0 0 128.0 +-10.185168 -8.1411333 4.2049537 128.0 +-10.269321 -8.1056252 4.2189775 128.0 +-4.6064377 -3.5910547 1.9007891 128.0 +-10.820907 -8.3274641 4.401896 128.0 +-10.872558 -8.261488 4.4022007 128.0 +-9.9554472 -7.4688444 4.0150232 128.0 +-10.032469 -7.4308567 4.0275226 128.0 +-0 -0 0 128.0 +-10.250327 -7.399147 4.0778251 128.0 +-10.357589 -7.3803215 4.1022143 128.0 +-11.284574 -7.9367809 4.4473205 128.0 +-0 -0 0 128.0 +-11.168975 -7.6523805 4.3650074 128.0 +-11.40587 -7.7122555 4.4384794 128.0 +-11.30403 -7.542757 4.381165 128.0 +-5.5047865 -3.6252449 2.1410222 128.0 +-10.738415 -6.9765067 4.1302619 128.0 +-10.772199 -6.9048333 4.1269083 128.0 +-5.5842676 -3.5319576 2.1462049 128.0 +-5.602602 -3.4956107 2.1449854 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-6.1813025 -3.6489258 2.3288186 128.0 +-6.1838193 -3.5994339 2.321502 128.0 +-6.1752224 -3.5438881 2.3102219 128.0 +-6.188561 -3.5012424 2.3071733 128.0 +-6.1874671 -3.4506831 2.2989421 128.0 +-6.1551032 -3.3833003 2.2794306 128.0 +-6.0718975 -3.2892358 2.2416275 128.0 +-6.0003772 -3.2030473 2.2083974 128.0 +-6.0005288 -3.1559761 2.2013855 128.0 +-5.8447208 -3.0284307 2.1382785 128.0 +-6.3501582 -3.2409434 2.3132706 128.0 +-6.3129067 -3.1732697 2.2928448 128.0 +-6.2870169 -3.1120894 2.2766869 128.0 +-0 -0 0 128.0 +-7.3887095 -3.5449965 2.6544137 128.0 +-7.3974032 -3.4934947 2.6498408 128.0 +-7.3798323 -3.4299815 2.636122 128.0 +-7.3920774 -3.3806751 2.6330733 128.0 +-6.9749141 -3.1383619 2.4794216 128.0 +-6.9905558 -3.0939643 2.4782021 128.0 +-6.9910688 -3.0430334 2.4718001 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.0080495 -2.8981903 2.4586909 128.0 +-7.0071707 -2.8476083 2.4522886 128.0 +-7.0307035 -2.8070304 2.4544227 128.0 +-12.666869 -4.9663892 4.3863478 128.0 +-12.642886 -4.8677034 4.3677511 128.0 +-12.709933 -4.8041763 4.3805556 128.0 +-11.698878 -4.3402634 4.0253887 128.0 +-11.685016 -4.2537422 4.0116696 128.0 +-11.675018 -4.1691556 3.999475 128.0 +-7.5870075 -2.6573865 2.6044159 128.0 +-11.53703 -3.9609537 3.9357584 128.0 +-11.469042 -3.8591177 3.9046621 128.0 +-6.94628 -2.2904317 2.3724144 128.0 +-6.9556713 -2.2463043 2.3708899 128.0 +-12.455346 -3.9372015 4.212575 128.0 +-6.9927216 -2.1638737 2.3742435 128.0 +-7.0386844 -2.1308556 2.3852186 128.0 +-7.0799375 -2.0960035 2.3946693 128.0 +-7.1109633 -2.0578144 2.4007666 128.0 +-7.9959707 -2.2606962 2.6909974 128.0 +-13.022402 -3.5949106 4.3555565 128.0 +-9.5496731 -2.5736136 3.1970723 128.0 +-7.3914447 -1.9436845 2.4775925 128.0 +-7.5508456 -1.936121 2.5263708 128.0 +-8.2177134 -2.0533538 2.7425196 128.0 +-8.2107239 -1.9981657 2.7361174 128.0 +-9.6231976 -2.2792487 3.1967673 128.0 +-8.1445999 -1.876528 2.7065456 128.0 +-7.8882923 -1.7666138 2.6187446 128.0 +-11.726802 -2.5502198 3.8726516 128.0 +-13.212747 -2.7884226 4.3537273 128.0 +-13.333179 -2.7284837 4.3875675 128.0 +-12.601352 -2.4983318 4.1433711 128.0 +-12.594932 -2.4168382 4.1363592 128.0 +-10.431385 -1.9355965 3.4272447 128.0 +-11.850222 -2.1235769 3.884846 128.0 +-12.715178 -2.1980555 4.1616631 128.0 +-13.770296 -2.2934277 4.4997573 128.0 +-11.950309 -1.9151847 3.905272 128.0 +-11.968425 -1.842837 3.9074061 128.0 +-12.021905 -1.7756234 3.9211249 128.0 +-0 -0 0 128.0 +-13.627469 -1.8420259 4.432992 128.0 +-13.72164 -1.7690843 4.4598203 128.0 +-0 -0 0 128.0 +-14.678865 -1.7095648 4.7616358 128.0 +-14.672039 -1.6175876 4.7561483 128.0 +-14.490335 -1.5076376 4.6945658 128.0 +-13.573237 -1.3281609 4.3967133 128.0 +-13.692098 -1.2550136 4.4323821 128.0 +-13.375002 -1.1432647 4.3281188 128.0 +-13.346637 -1.058393 4.3168387 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-25.98941 -0.78004181 8.3541565 128.0 +-25.991804 -0.62051368 8.3535471 128.0 +-26.000835 -0.46112037 8.3553762 128.0 +-26.016508 -0.30172759 8.3596439 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.766324 12.839646 5.0033722 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.7504902 11.758425 4.3718767 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.6417823 12.405594 4.5220923 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.6469607 12.941532 4.6643558 128.0 +-0 0 0 128.0 +-7.4785275 13.018653 4.6587596 128.0 +-7.4060411 13.0776 4.6634722 128.0 +-7.3568697 13.178702 4.6832066 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.1233916 13.530318 4.7441764 128.0 +-7.0881987 13.666238 4.7762814 128.0 +-6.9998627 13.700963 4.7733359 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.0372348 14.650781 5.0407786 128.0 +-6.9500666 14.699733 5.0428405 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-5.1022782 13.478307 4.4731989 128.0 +-4.9742112 13.387532 4.4331412 128.0 +-4.8098054 13.192449 4.3592114 128.0 +-4.6814561 13.08944 4.3159142 128.0 +-4.5798593 13.057501 4.2961798 128.0 +-4.4778991 13.022098 4.2755618 128.0 +-4.3911977 13.029406 4.2690821 128.0 +-4.306673 13.042493 4.2646642 128.0 +-4.725348 14.610778 4.764205 128.0 +-4.057725 12.814669 4.1742401 128.0 +-3.9679856 12.803725 4.1627526 128.0 +-3.8932309 12.840635 4.1668763 128.0 +-3.7983394 12.810225 4.1494985 128.0 +-3.7233906 12.846141 4.1536222 128.0 +-3.6484044 12.882537 4.15804 128.0 +-3.9285307 14.203361 4.5733428 128.0 +-3.8726962 14.343446 4.6104546 128.0 +-3.7449298 14.216309 4.5624447 128.0 +-3.6476429 14.200145 4.5500741 128.0 +-0 0 0 128.0 +-3.4343948 14.085076 4.4997077 128.0 +-3.5341821 14.890638 4.7483001 128.0 +-3.2842953 14.225793 4.5312233 128.0 +-3.3135147 14.765047 4.6952825 128.0 +-3.2061641 14.708536 4.6711302 128.0 +-0 0 0 128.0 +-3.0369513 14.802941 4.6888027 128.0 +-0 0 0 128.0 +-2.8064919 14.586659 4.609571 128.0 +-2.710294 14.567904 4.5983787 128.0 +-0 0 0 128.0 +-2.521033 14.540746 4.5798225 128.0 +-2.4297178 14.543688 4.5759935 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.1777644 14.708683 4.5792336 128.0 +0 0 0 128.0 +1.2965311 14.026062 4.3727603 128.0 +1.3899771 14.092974 4.396029 128.0 +1.55581 14.841676 4.6307783 128.0 +1.5513223 13.971327 4.363924 128.0 +1.7614106 15.022683 4.6932206 128.0 +1.857887 15.046685 4.7041187 128.0 +1.9541097 15.065329 4.7135439 128.0 +2.0311949 14.94037 4.6784935 128.0 +2.1240399 14.936141 4.6811447 128.0 +2.1992283 14.812229 4.6466832 128.0 +0 0 0 128.0 +2.4728913 15.355879 4.8251748 128.0 +2.5464079 15.216944 4.7865901 128.0 +2.6976016 15.534343 4.8908577 128.0 +2.7321053 15.179847 4.7851176 128.0 +2.5446346 13.656819 4.3129687 128.0 +2.9085982 15.095443 4.7695069 128.0 +3.0104942 15.124174 4.784234 128.0 +3.186305 15.50981 4.9114752 128.0 +3.2879465 15.520819 4.921195 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.587065 15.51819 4.9403405 128.0 +3.5123358 14.780907 4.7138386 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.4848986 13.551285 4.3438954 128.0 +3.5575047 13.489912 4.3312302 128.0 +3.6314838 13.435541 4.3209214 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +5.1746893 14.740621 4.8463821 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.737032 -2.7818556 5.8696165 128.0 +0 -0 0 128.0 +17.777811 -2.8628545 5.5812612 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9562387 -2.2557745 2.5801854 128.0 +7.9450011 -2.3053493 2.581069 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9889736 -2.5322592 2.6143522 128.0 +7.97965 -2.5832908 2.6164141 128.0 +7.9772596 -2.6367025 2.6208322 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.3844395 -2.1409361 1.5351549 128.0 +4.4371457 -2.2004859 1.5578346 128.0 +4.3791757 -2.2053227 1.5425185 128.0 +4.3400345 -2.2191017 1.5336822 128.0 +4.3076758 -2.2360055 1.5272024 128.0 +4.2236986 -2.2254269 1.5027555 128.0 +4.1568708 -2.2229147 1.4841994 128.0 +4.1406331 -2.2470117 1.4833158 128.0 +4.1811829 -2.3023334 1.502461 128.0 +4.1644745 -2.3265474 1.5015773 128.0 +4.1642551 -2.3600652 1.5065845 128.0 +3.9641047 -2.2788999 1.4406074 128.0 +3.8955579 -2.271415 1.4211677 128.0 +3.8708532 -2.2889524 1.4173386 128.0 +3.855916 -2.3121691 1.4170442 128.0 +3.8024595 -2.3119576 1.4029062 128.0 +3.7825074 -2.3317356 1.4008443 128.0 +3.7875795 -2.367054 1.4079133 128.0 +4.1968269 -2.6587098 1.5625472 128.0 +4.3082967 -2.7665021 1.6093792 128.0 +3.985265 -2.5937788 1.4968647 128.0 +3.9493306 -2.6050301 1.4895011 128.0 +3.7966135 -2.5378797 1.4388402 128.0 +3.8616779 -2.6157868 1.4688833 128.0 +3.5902588 -2.4642386 1.3734521 128.0 +3.8230104 -2.6586142 1.466527 128.0 +3.6964684 -2.6044223 1.4249967 128.0 +4.0646834 -2.9012904 1.5704999 128.0 +3.8346074 -2.7727647 1.4897957 128.0 +3.673346 -2.690654 1.4347166 128.0 +4.0021486 -2.9693534 1.5672599 128.0 +3.9976058 -3.0041871 1.5725616 128.0 +3.9562831 -3.0112975 1.5637254 128.0 +4.0217481 -3.1002722 1.5964195 128.0 +4.0229888 -3.1407673 1.604372 128.0 +3.2232163 -2.5484624 1.2977551 128.0 +3.2313919 -2.5873027 1.3071804 128.0 +3.1627481 -2.5643547 1.286268 128.0 +3.1462154 -2.5831063 1.2859734 128.0 +3.3074219 -2.7495778 1.3569578 128.0 +3.2714784 -2.7538209 1.3492998 128.0 +3.2857964 -2.8004949 1.3619649 128.0 +3.2171791 -2.7762799 1.3410527 128.0 +3.7247493 -3.2542932 1.5557728 128.0 +3.4749281 -3.0738587 1.4612253 128.0 +3.9251683 -3.5152278 1.6553276 128.0 +3.957334 -3.5880263 1.6777127 128.0 +3.8697662 -3.552146 1.6503204 128.0 +4.385561 -4.0753961 1.8765277 128.0 +2.671092 -2.5131054 1.1616772 128.0 +2.6639261 -2.5373559 1.1652118 128.0 +2.6379874 -2.5437047 1.1607937 128.0 +2.6120713 -2.5498312 1.1563755 128.0 +2.5868592 -2.5564075 1.152252 128.0 +2.6285563 -2.6296761 1.1772879 128.0 +3.3839314 -3.4270124 1.5157152 128.0 +2.6961863 -2.7643425 1.221469 128.0 +2.7017198 -2.8042305 1.2314835 128.0 +2.6172571 -2.7501516 1.2014403 128.0 +2.5885501 -2.7536271 1.1961386 128.0 +3.1569047 -3.3996599 1.4612253 128.0 +3.1579502 -3.442909 1.4712396 128.0 +2.5483351 -2.8128459 1.2011458 128.0 +2.7783132 -3.1047146 1.3154275 128.0 +2.6731291 -3.0243313 1.27537 128.0 +2.6029811 -2.9816492 1.2512177 128.0 +2.5877576 -3.0011833 1.2526904 128.0 +2.559999 -3.0060923 1.2482723 128.0 +2.5230498 -2.9998047 1.239436 128.0 +2.5900929 -3.1181369 1.2806717 128.0 +2.8127735 -3.4287457 1.3981935 128.0 +3.2645602 -4.0295377 1.6297026 128.0 +3.240968 -4.0509849 1.6302916 128.0 +2.8688638 -3.631402 1.4576907 128.0 +2.6119728 -3.3483145 1.340169 128.0 +2.9500611 -3.8298528 1.5213115 128.0 +0 -0 0 128.0 +1.8847613 -2.5101967 0.99879628 128.0 +1.8761539 -2.5309258 1.0023308 128.0 +1.8402683 -2.5146298 0.99172729 128.0 +1.8304014 -2.5336199 0.99467272 128.0 +1.8331348 -2.5704768 1.0043925 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.6404116 -2.5918403 0.97670573 128.0 +1.5475332 -2.478653 0.93193555 128.0 +1.9142323 -3.1080976 1.1563755 128.0 +1.8911555 -3.113251 1.1540192 128.0 +1.8621931 -3.1084015 1.1481284 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.748014 -3.0435443 1.1130781 128.0 +1.6110997 -2.8454959 1.0391483 128.0 +1.5665916 -2.806932 1.022065 128.0 +0 -0 0 128.0 +1.1079054 -2.0438416 0.74784756 128.0 +1.1020997 -2.0632439 0.75226569 128.0 +1.0956521 -2.0818057 0.75638926 128.0 +1.0837377 -2.0901859 0.75697833 128.0 +1.0743706 -2.1036043 0.75933462 128.0 +1.0756189 -2.1383271 0.76905447 128.0 +1.5186296 -3.0653734 1.0856857 128.0 +1.4947635 -3.0643275 1.0821513 128.0 +1.4813122 -3.0846398 1.0859803 128.0 +1.4856415 -3.142915 1.1027691 128.0 +1.4707639 -3.1615024 1.1060091 128.0 +1.4728222 -3.2173867 1.1219143 128.0 +1.4518753 -3.2237494 1.1210307 128.0 +0.97791815 -2.207751 0.77553439 128.0 +0.96626228 -2.2180901 0.7770071 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.1630541 -2.9628751 1.0123452 128.0 +0 -0 0 128.0 +0.90160137 -2.382591 0.81647557 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +2.8810444 -8.0558968 2.6682532 128.0 +1.015885 -2.8972676 0.97758931 128.0 +0.82560539 -2.4018967 0.81411922 128.0 +0.81970376 -2.4331791 0.82266092 128.0 +0.78917587 -2.3909762 0.80734479 128.0 +0.78948909 -2.4421458 0.82236636 128.0 +0.91989815 -2.9061122 0.97081488 128.0 +0.78294259 -2.5274127 0.84681326 128.0 +1.2776659 -4.2148852 1.3887682 128.0 +0.74072903 -2.4992659 0.83473706 128.0 +0.72059077 -2.4872425 0.82943535 128.0 +2.2100646 -7.8043094 2.5312917 128.0 +2.3881271 -8.6346941 2.7925494 128.0 +0.89615822 -3.3202722 1.091282 128.0 +0.87284702 -3.3146193 1.0877476 128.0 +0.78567523 -3.0598235 1.0049816 128.0 +0.77547342 -3.0988867 1.0158796 128.0 +0.73606771 -3.0200279 0.98937094 128.0 +0.72282028 -3.0468028 0.99643993 128.0 +0.70583183 -3.0586295 0.99879628 128.0 +0.74167317 -3.3062701 1.0756714 128.0 +0.72137231 -3.3107588 1.0756714 128.0 +0.60213345 -2.8476529 0.92840105 128.0 +1.6685641 -8.1339092 2.5904944 128.0 +1.6232822 -8.1674261 2.597858 128.0 +0.422849 -2.199481 0.72163343 128.0 +0.41843578 -2.2508888 0.73694956 128.0 +0.59259981 -3.2993255 1.0644789 128.0 +0.38914967 -2.2464383 0.73400414 128.0 +0.35299423 -2.1149387 0.69217938 128.0 +0.38248882 -2.3812504 0.77465075 128.0 +0.38975793 -2.5252175 0.81883186 128.0 +0.5704217 -3.8509967 1.2311889 128.0 +1.2401172 -8.7384653 2.7516081 128.0 +1.0354795 -7.6332326 2.4055228 128.0 +1.1378199 -8.7918825 2.7636843 128.0 +0.32017848 -2.601429 0.8391552 128.0 +0.29077274 -2.4884958 0.80351573 128.0 +0.27886546 -2.5206275 0.81294107 128.0 +0.26041195 -2.4937775 0.80410486 128.0 +0.81426293 -8.28055 2.5957961 128.0 +0.76765007 -8.3310671 2.6099341 128.0 +0.23485552 -2.7352273 0.87744546 128.0 +0.59098649 -7.4082093 2.3218732 128.0 +0.64077705 -8.7049952 2.721565 128.0 +0.58664429 -8.6982746 2.7183251 128.0 +0.15285935 -2.4988439 0.80292666 128.0 +0.13452321 -2.4453461 0.78613788 128.0 +0.11914203 -2.4384894 0.78378153 128.0 +0.10360449 -2.425808 0.77965796 128.0 +0.088332281 -2.4158931 0.77641803 128.0 +0.073419347 -2.4135239 0.77553439 128.0 +0.059075832 -2.4330361 0.78142518 128.0 +0 -0 0 128.0 +0.045765329 -3.794307 1.2008512 128.0 +0 -0 0 128.0 +-0.0007253568 -3.1093898 0.98966551 128.0 +-0.020329379 -3.1934214 1.0155851 128.0 +-0.040361222 -3.2285924 1.0264831 128.0 +-0.060436152 -3.2426162 1.0309012 128.0 +-0.081297159 -3.2813537 1.0429773 128.0 +-0.10216509 -3.3046727 1.0503409 128.0 +-0.12282832 -3.3144884 1.0535809 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.2775512 -8.0485611 2.7097833 128.0 +-3.316632 -8.0035791 2.7015362 128.0 +-3.3827543 -8.0235853 2.715085 128.0 +-1.419319 -3.3090436 1.1410594 128.0 +-1.4227886 -3.2617297 1.1280997 128.0 +-1.4443249 -3.2564328 1.1292778 128.0 +-1.4792018 -3.2806156 1.1404704 128.0 +-1.6505629 -3.6016188 1.2523959 128.0 +-3.4894292 -7.4933925 2.5790074 128.0 +-3.6272957 -7.6662054 2.6452789 128.0 +-1.7136794 -3.5645981 1.250334 128.0 +-3.7345147 -7.6485958 2.6547043 128.0 +-3.7890165 -7.6409483 2.660006 128.0 +-1.644487 -3.2652888 1.1581428 128.0 +-1.5914135 -3.1121857 1.10866 128.0 +-1.6012353 -3.0845499 1.1024746 128.0 +-1.6522002 -3.1355426 1.1236815 128.0 +-1.6781671 -3.1379871 1.1280997 128.0 +-1.6937439 -3.1209114 1.1257433 128.0 +-4.0716705 -7.3950267 2.6332028 128.0 +-4.3555675 -7.7970719 2.7840078 128.0 +-0 -0 0 128.0 +-4.8337994 -8.4091749 3.0208185 128.0 +-4.8934879 -8.3933916 3.0258257 128.0 +-4.3928924 -7.4295287 2.6915219 128.0 +-2.0969419 -3.4969201 1.2880353 128.0 +-1.9555382 -3.2161446 1.1914259 128.0 +-1.9747338 -3.2032716 1.1911314 128.0 +-2.0743611 -3.3191442 1.2376688 128.0 +-2.2056513 -3.4815421 1.3015841 128.0 +-2.3978665 -3.734122 1.3990772 128.0 +-2.4306366 -3.7345574 1.4046735 128.0 +-2.4708679 -3.7458992 1.4143933 128.0 +-2.4953988 -3.7330513 1.4152769 128.0 +-0 -0 0 128.0 +-5.3387132 -7.7790046 2.9392307 128.0 +-0 -0 0 128.0 +-2.3600671 -3.3495908 1.2942207 128.0 +-2.3689175 -3.3187115 1.2880353 128.0 +-0 -0 0 128.0 +-5.6849246 -7.7619238 2.9966662 128.0 +-2.4210625 -3.2630324 1.2836171 128.0 +-5.4525352 -7.256093 2.8287778 128.0 +-5.8169947 -7.6430397 2.9916589 128.0 +-5.9390388 -7.704844 3.0296547 128.0 +-5.9456296 -7.6162796 3.0093312 128.0 +-5.9691377 -7.5504165 2.9978442 128.0 +-6.2572284 -7.815794 3.1171331 128.0 +-6.1413813 -7.5753312 3.0370181 128.0 +-6.2853665 -7.6564288 3.0844393 128.0 +-6.2882457 -7.5648046 3.0632322 128.0 +-2.6516728 -3.1501064 1.300406 128.0 +-2.6622739 -3.1235936 1.2962824 128.0 +-2.6857598 -3.1122642 1.2983443 128.0 +-2.7016623 -3.0921276 1.2968715 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-8.6294432 -9.2868347 3.9386075 128.0 +-0 -0 0 128.0 +-8.7091465 -9.1449451 3.9235859 128.0 +-8.7684107 -9.0947742 3.9250586 128.0 +-8.8353977 -9.0524273 3.9300656 128.0 +-0 -0 0 128.0 +-9.7540913 -9.7514172 4.2823362 128.0 +-9.8185005 -9.696084 4.2843981 128.0 +-9.8798618 -9.6376581 4.2852817 128.0 +-8.506115 -8.1962585 3.6720481 128.0 +-8.5354805 -8.1241446 3.6632118 128.0 +-8.6185875 -8.1030407 3.6773498 128.0 +-8.6618423 -8.0441532 3.6746988 128.0 +-9.97367 -9.1491737 4.2028103 128.0 +-0 -0 0 128.0 +-8.7123108 -7.7973137 3.6349359 128.0 +-8.7241917 -7.7120614 3.6202087 128.0 +-10.469459 -9.1411285 4.3150306 128.0 +-10.559363 -9.1060505 4.3288736 128.0 +-9.2873468 -7.9101973 3.791337 128.0 +-10.018002 -8.4270353 4.0661435 128.0 +-10.575972 -8.7861738 4.2690821 128.0 +-9.7084179 -7.9652214 3.9017897 128.0 +-10.164737 -8.2357941 4.0634928 128.0 +-10.214333 -8.1726723 4.0631981 128.0 +-0 -0 0 128.0 +-10.328171 -8.0578804 4.0687943 128.0 +-10.767289 -8.2947168 4.2204828 128.0 +-10.600451 -8.0630236 4.1362443 128.0 +-9.9566584 -7.4773111 3.8690958 128.0 +-9.9670401 -7.3898945 3.855547 128.0 +-10.006798 -7.3246474 3.8534851 128.0 +-10.169287 -7.3481874 3.8982553 128.0 +-10.38923 -7.4105186 3.9645269 128.0 +-0 -0 0 128.0 +-11.24372 -7.8136635 4.2514095 128.0 +-11.370258 -7.7985811 4.2808638 128.0 +-11.389406 -7.7093825 4.2702603 128.0 +-11.143272 -7.4434743 4.1615748 128.0 +-10.787399 -7.1104064 4.0134206 128.0 +-5.6036668 -3.6442544 2.0915425 128.0 +-5.6275306 -3.6108348 2.0921314 128.0 +-5.658462 -3.5818598 2.0953715 128.0 +-5.6908708 -3.5536535 2.0992005 128.0 +-5.7443004 -3.5382161 2.1106875 128.0 +-5.7634521 -3.5014143 2.1098039 128.0 +-5.8577843 -3.509702 2.136018 128.0 +-5.830668 -3.4450092 2.1186402 128.0 +-0 -0 0 128.0 +-6.2462187 -3.5878906 2.251478 128.0 +-6.2257075 -3.5254788 2.2364564 128.0 +-5.9802098 -3.3381464 2.1422033 128.0 +-6.0767698 -3.3433137 2.1690066 128.0 +-6.088769 -3.3014088 2.1660612 128.0 +-6.0161982 -3.2144434 2.1336617 128.0 +-6.097537 -3.2099688 2.1551633 128.0 +-5.9321866 -3.076571 2.0909534 128.0 +-6.3747478 -3.2566457 2.2376347 128.0 +-7.3703284 -3.7084715 2.5742946 128.0 +-7.404932 -3.6691189 2.5784183 128.0 +-7.4006815 -3.6106229 2.5692875 128.0 +-7.4666286 -3.5862484 2.5843091 128.0 +-7.3589029 -3.4790924 2.540128 128.0 +-7.3896422 -3.4383085 2.5433679 128.0 +-6.4600458 -2.9576414 2.2211404 128.0 +-6.9799433 -3.1440406 2.3907957 128.0 +-6.9929876 -3.0984433 2.3887341 128.0 +-7.1494083 -3.1154194 2.4349768 128.0 +-7.1200786 -3.0507898 2.4187772 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.0537605 -2.8698699 2.3784251 128.0 +-7.076561 -2.8286633 2.3801923 128.0 +-7.0244017 -2.7579441 2.3572183 128.0 +-12.704009 -4.8984709 4.2278461 128.0 +-12.704332 -4.8092628 4.2181263 128.0 +-12.703146 -4.7199025 4.2081122 128.0 +-12.756108 -4.6507072 4.2160649 128.0 +-12.75831 -4.5630164 4.2075229 128.0 +-11.469485 -4.02282 3.7774935 128.0 +-11.64758 -4.0052018 3.8275654 128.0 +-7.6429982 -2.5756907 2.5171537 128.0 +-6.9898758 -2.3078907 2.3000772 128.0 +-6.992085 -2.2611351 2.2962482 128.0 +-0 -0 0 128.0 +-7.0503411 -2.1847801 2.3062625 128.0 +-7.0892205 -2.1492436 2.3145096 128.0 +-7.3661413 -2.1839514 2.3993375 128.0 +-7.9310336 -2.2986171 2.5763564 128.0 +-7.5312271 -2.1327176 2.4438131 128.0 +-7.5745659 -2.0948746 2.4535329 128.0 +-7.3058858 -1.9723755 2.363698 128.0 +-7.3723726 -1.9418744 2.3810759 128.0 +-0 -0 0 128.0 +-9.4592047 -2.3679128 3.0367236 128.0 +-9.4837685 -2.3123181 3.0399635 128.0 +-9.5740223 -2.2721813 3.064116 128.0 +-9.8820238 -2.2813325 3.1571908 128.0 +-13.232113 -2.9694583 4.2110577 128.0 +-10.272488 -2.2390759 3.2717671 128.0 +-10.337455 -2.1868832 3.287967 128.0 +-10.414336 -2.1364741 3.3079956 128.0 +-12.434939 -2.4716594 3.9389019 128.0 +-12.569051 -2.418247 3.9763086 128.0 +-11.968271 -2.2265737 3.7833843 128.0 +-12.024034 -2.1607032 3.7966387 128.0 +-12.027649 -2.0852516 3.7936933 128.0 +-12.058126 -2.0144045 3.7992897 128.0 +-0 -0 0 128.0 +-14.57052 -2.2507696 4.5754046 128.0 +-13.66805 -2.0255497 4.2899942 128.0 +-13.715229 -1.9466156 4.3008924 128.0 +-13.671044 -1.8548419 4.2835145 128.0 +-13.692594 -1.7722727 4.2867546 128.0 +-0 -0 0 128.0 +-13.730395 -1.606109 4.2920561 128.0 +-14.610034 -1.6182204 4.5618558 128.0 +-13.450628 -1.4062837 4.1995707 128.0 +-0 -0 0 128.0 +-13.39455 -1.2344506 4.1771855 128.0 +-13.406633 -1.1526494 4.178658 128.0 +-13.430601 -1.0717349 4.18396 128.0 +-0 -0 0 128.0 +-14.557347 -0.98206294 4.5282779 128.0 +-26.00354 -1.5943285 8.0609999 128.0 +-14.639867 -0.80729616 4.5503683 128.0 +-12.228724 -0.59903485 3.8048859 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.7189627 12.959994 4.817697 128.0 +-9.6523829 13.037113 4.824214 128.0 +-9.5772991 13.103063 4.8267641 128.0 +-9.5893011 13.289908 4.8735161 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.8926206 12.153441 4.3130579 128.0 +-0 0 0 128.0 +-7.7459593 12.254245 4.3147578 128.0 +-7.7122264 12.368276 4.3379922 128.0 +-7.690948 12.504407 4.3688769 128.0 +-7.6115913 12.547263 4.3674603 128.0 +-7.5580897 12.633235 4.3810611 128.0 +-7.4887142 12.693416 4.3858776 128.0 +-7.4270816 12.767312 4.3955116 128.0 +-7.3619609 12.835938 4.4034452 128.0 +-0 0 0 128.0 +-7.4401007 13.349206 4.5468183 128.0 +-7.3862133 13.445882 4.5641022 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.1606655 13.623705 4.5788364 128.0 +-0 0 0 128.0 +-7.4730501 14.65204 4.8910837 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.1655593 14.712099 4.8664322 128.0 +-7.0656176 14.7359 4.8599153 128.0 +-0 0 0 128.0 +-6.8878884 14.829325 4.8624654 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.9983459 13.480413 4.2793398 128.0 +-4.8834119 13.422506 4.2515717 128.0 +-4.7613211 13.341119 4.2167201 128.0 +-4.5878377 13.108478 4.1348333 128.0 +-4.5213218 13.177202 4.147584 128.0 +-4.3777361 13.018347 4.089498 128.0 +-4.3067751 13.072289 4.0979981 128.0 +-4.2947884 13.310217 4.1637344 128.0 +-4.2806196 13.550311 4.2300377 128.0 +-3.9872653 12.896462 4.0197949 128.0 +-3.9000096 12.894064 4.0115781 128.0 +-3.8118463 12.887403 4.0022273 128.0 +-3.7500072 12.970434 4.0206451 128.0 +-3.6729577 13.002429 4.0234785 128.0 +-3.954124 14.333823 4.424696 128.0 +-3.8785627 14.404118 4.4388633 128.0 +-3.7784154 14.383121 4.4252629 128.0 +-3.6596406 14.287117 4.3889947 128.0 +-3.9355171 15.766443 4.8327141 128.0 +-3.1995857 13.160494 4.033112 128.0 +-3.3443849 14.133675 4.3226914 128.0 +-3.3676915 14.632445 4.4677649 128.0 +-3.3000293 14.75204 4.4977994 128.0 +-3.2405918 14.915398 4.5411515 128.0 +-3.1863928 15.112359 4.5947037 128.0 +-3.0215967 14.779277 4.4884491 128.0 +-3.0813487 15.557671 4.7173924 128.0 +-2.8062553 14.639112 4.4354634 128.0 +-0 0 0 128.0 +-2.5934629 14.488361 4.3802109 128.0 +-2.5019054 14.488881 4.3756771 128.0 +-2.3854272 14.338405 4.3260918 128.0 +-2.2695274 14.178528 4.2739563 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-1.2493594 13.65657 4.0832644 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.82194906 14.652458 4.3674603 128.0 +0.91148144 14.641396 4.3657603 128.0 +1.0039891 14.674755 4.3773775 128.0 +1.1057233 14.825161 4.4238462 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.2319305 13.230565 3.9574587 128.0 +1.3975085 14.072098 4.2096367 128.0 +1.4841291 14.066119 4.2104869 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.8118825 13.895179 4.1716681 128.0 +2.0493684 14.997408 4.5037498 128.0 +2.1357868 14.945627 4.4921327 128.0 +2.2125866 14.832647 4.4623814 128.0 +0 0 0 128.0 +2.2259254 13.763005 4.1507006 128.0 +2.5470836 15.157303 4.5726027 128.0 +2.392179 13.720482 4.1464505 128.0 +2.7980623 15.485407 4.680841 128.0 +2.9059021 15.53676 4.7015252 128.0 +2.9492629 15.250294 4.6207714 128.0 +3.0704081 15.370152 4.6624231 128.0 +3.1026747 15.050463 4.5717525 128.0 +3.1913741 15.014257 4.5666523 128.0 +3.3560855 15.326021 4.6669569 128.0 +3.466305 15.377175 4.6887746 128.0 +3.5627592 15.36496 4.691608 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5118711 13.618104 4.1866856 128.0 +3.574518 13.517493 4.162601 128.0 +3.6907666 13.618411 4.2002864 128.0 +3.7950435 13.670357 4.223237 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +4.6297302 15.217217 4.7309933 128.0 +0 0 0 128.0 +4.7803955 15.046838 4.6961417 128.0 +4.8714466 15.013574 4.6950083 128.0 +4.9571424 14.964284 4.6890578 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +17.876446 -2.4430115 5.3622875 128.0 +18.946239 -2.7078075 5.686152 128.0 +17.829945 -2.659934 5.3577542 128.0 +17.813288 -2.7692864 5.3577542 128.0 +17.788385 -2.8773091 5.3554873 128.0 +18.720871 -3.146198 5.6402502 128.0 +18.704992 -3.261667 5.6413836 128.0 +18.70067 -3.3792775 5.6462002 128.0 +0 -0 0 128.0 +18.098507 -3.5003045 5.4778929 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9672441 -2.2640309 2.4786766 128.0 +7.943994 -2.3101952 2.4758432 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0000677 -2.5410511 2.5115447 128.0 +7.9606085 -2.5823934 2.5041778 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.3195152 -2.078958 1.4478642 128.0 +4.2911711 -2.0978374 1.4427639 128.0 +4.3117142 -2.140769 1.4538145 128.0 +4.3216157 -2.1788476 1.4614648 128.0 +4.2671943 -2.1843381 1.4478642 128.0 +4.2562633 -2.2118073 1.4487143 128.0 +4.2663598 -2.2504153 1.4566479 128.0 +4.3294001 -2.3177588 1.4824324 128.0 +4.3108845 -2.34199 1.4810157 128.0 +4.2913942 -2.3656178 1.4793156 128.0 +4.2801461 -2.3937781 1.480449 128.0 +4.1961551 -2.3806996 1.4569312 128.0 +4.1681709 -2.3987451 1.4523977 128.0 +4.172421 -2.4353991 1.4589148 128.0 +4.0592065 -2.4027977 1.4251965 128.0 +4.0904264 -2.4553103 1.4410639 128.0 +4.0457964 -2.4624054 1.4308635 128.0 +4.0077629 -2.4730768 1.4229298 128.0 +4.3859606 -2.7438896 1.5600692 128.0 +4.3609438 -2.7656116 1.5572357 128.0 +4.2591991 -2.7378485 1.5274844 128.0 +3.8309767 -2.4957988 1.3824114 128.0 +3.9860282 -2.6318533 1.4427639 128.0 +3.8582361 -2.5815694 1.4030956 128.0 +3.8375614 -2.6019642 1.4013954 128.0 +3.8207335 -2.6249189 1.4011121 128.0 +4.5018039 -3.1339235 1.6521566 128.0 +3.8650253 -2.7257929 1.42888 128.0 +3.9332666 -2.8102472 1.4597647 128.0 +4.1311064 -2.9901369 1.5382515 128.0 +3.6247454 -2.6574993 1.3594602 128.0 +3.6037524 -2.6762586 1.3577602 128.0 +3.9665594 -2.9837806 1.4980165 128.0 +4.0229216 -3.065038 1.5257844 128.0 +4.0139074 -3.0972831 1.5294678 128.0 +3.446327 -2.6930099 1.3237587 128.0 +3.1688387 -2.5075297 1.2254376 128.0 +3.1870623 -2.5539227 1.2381883 128.0 +3.1854775 -2.5849154 1.2435719 128.0 +3.1954844 -2.6257296 1.2534889 128.0 +3.2065833 -2.6679902 1.2639728 128.0 +3.2436802 -2.7327366 1.284657 128.0 +3.2049677 -2.7339103 1.2761565 128.0 +3.5886726 -3.0996578 1.4325635 128.0 +4.0329528 -3.5270383 1.6144716 128.0 +3.0464225 -2.6970534 1.2336547 128.0 +4.1578593 -3.727375 1.6813412 128.0 +3.0684769 -2.7845192 1.2557557 128.0 +3.1508851 -2.8948059 1.2957075 128.0 +3.1597414 -2.9389117 1.3064746 128.0 +4.2954803 -4.04531 1.7748454 128.0 +4.2754354 -4.0762239 1.7768288 128.0 +2.6842716 -2.5902238 1.1336336 128.0 +2.6580408 -2.5965898 1.1293834 128.0 +2.6393316 -2.6101522 1.12825 128.0 +3.0026782 -3.0063889 1.2869238 128.0 +3.4696555 -3.5171118 1.4912162 128.0 +2.8538125 -2.9282813 1.2396049 128.0 +3.6762414 -3.8192749 1.5977542 128.0 +3.927572 -4.1309452 1.7156261 128.0 +3.4525292 -3.6760163 1.5215341 128.0 +3.4018693 -3.6668932 1.5093503 128.0 +3.2601192 -3.5575731 1.4572146 128.0 +2.8399637 -3.137301 1.2818235 128.0 +3.3382707 -3.7338951 1.5113337 128.0 +3.3451245 -3.7881012 1.5246509 128.0 +2.7080014 -3.1044667 1.248672 128.0 +2.6275778 -3.049804 1.2209041 128.0 +2.5988746 -3.0541801 1.2163706 128.0 +2.7571039 -3.2808306 1.2976909 128.0 +3.0908144 -3.7243261 1.4614648 128.0 +2.5385704 -3.097048 1.2146705 128.0 +2.5894868 -3.1990547 1.2475387 128.0 +2.5524502 -3.1931541 1.2393216 128.0 +2.5351853 -3.2117674 1.240455 128.0 +2.5113051 -3.2219665 1.2384716 128.0 +1.9190785 -2.4931109 0.96107596 128.0 +1.8735843 -2.4651246 0.94634199 128.0 +1.8601491 -2.4788761 0.94719201 128.0 +1.8466158 -2.4925556 0.94804204 128.0 +1.835248 -2.5092592 0.9500255 128.0 +1.837772 -2.5453608 0.95909256 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.9223447 -3.1237788 1.1152161 128.0 +1.5062653 -2.4811699 0.88910609 128.0 +1.5269505 -2.5504458 0.90979034 128.0 +1.5141959 -2.5647233 0.91149044 128.0 +0 -0 0 128.0 +1.56371 -2.7245414 0.95965922 128.0 +0 -0 0 128.0 +1.5647026 -2.8055174 0.98062682 128.0 +1.5506905 -2.8209496 0.98261023 128.0 +1.5319828 -2.8278811 0.9817602 128.0 +1.5231775 -2.8533053 0.98714381 128.0 +1.1077017 -2.1053472 0.73439926 128.0 +1.0996126 -2.1214726 0.73751605 128.0 +1.0817825 -2.1187818 0.73439926 128.0 +1.1234246 -2.2342191 0.77038419 128.0 +1.5612063 -3.1539955 1.0712975 128.0 +1.5409846 -3.1617911 1.0707308 128.0 +1.220991 -2.5442207 0.86530507 128.0 +1.2008553 -2.5421243 0.86218822 128.0 +0 -0 0 128.0 +1.4728909 -3.220463 1.0778145 128.0 +1.4629334 -3.2513072 1.0848981 128.0 +1.4476104 -3.2707474 1.0882983 128.0 +0.97850591 -2.2470894 0.75565016 128.0 +0.98656887 -2.3041945 0.77208424 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.1752385 -2.9432356 0.96787626 128.0 +0 -0 0 128.0 +1.160037 -3.0120349 0.98516035 128.0 +0.91958904 -2.4314556 0.79956883 128.0 +0.90631926 -2.4415483 0.80098552 128.0 +0 -0 0 128.0 +0.85501927 -2.3928723 0.78228468 128.0 +0.83081901 -2.3709173 0.77378434 128.0 +0.81687802 -2.3777847 0.774351 128.0 +0.81205189 -2.4118412 0.78341812 128.0 +1.0219465 -3.0990298 0.99564415 128.0 +0.93666822 -2.899883 0.93189132 128.0 +0.91452509 -2.8918583 0.92764115 128.0 +0.89138305 -2.8800066 0.9222576 128.0 +1.2306463 -4.0659328 1.2866404 128.0 +0.80077219 -2.7040379 0.86473835 128.0 +0.71945906 -2.4850223 0.79588532 128.0 +2.1892292 -7.7482171 2.4103901 128.0 +2.0297203 -7.3556457 2.2860014 128.0 +0.89944184 -3.336849 1.0525967 128.0 +0.88430941 -3.3627114 1.0588303 128.0 +0.79871422 -3.1144454 0.98147684 128.0 +0.77378452 -3.0960255 0.97439325 128.0 +0.72669005 -2.9851604 0.93925834 128.0 +0.90416867 -3.8173687 1.1905861 128.0 +0.8850292 -3.8415368 1.1962531 128.0 +0.75156671 -3.3555458 1.0474964 128.0 +0.62145966 -2.8558967 0.89505637 128.0 +0 -0 0 128.0 +1.6718701 -8.1748495 2.4968107 128.0 +0.66023725 -3.328764 1.0341792 128.0 +0.63474649 -3.3063796 1.0262455 128.0 +0.54858696 -2.9547117 0.91942412 128.0 +0.58939499 -3.2874873 1.0183119 128.0 +0.41556242 -2.4008093 0.75139999 128.0 +0.41403741 -2.4827805 0.77520108 128.0 +0 -0 0 128.0 +1.2914627 -8.394908 2.5410128 128.0 +1.1593639 -7.8561864 2.3778055 128.0 +1.1482676 -8.1261921 2.4562922 128.0 +0.36666042 -2.7091048 0.83923721 128.0 +0.33081689 -2.5619688 0.79475194 128.0 +0.39282465 -3.1988745 0.98374361 128.0 +0.28341195 -2.4286602 0.75395012 128.0 +0.26672214 -2.4141479 0.74913323 128.0 +0.25893331 -2.4834654 0.76925081 128.0 +0.2806693 -2.8639374 0.88173914 128.0 +0.68085206 -7.4364133 2.2378325 128.0 +0.73194492 -8.5756502 2.5744474 128.0 +0.20176166 -2.5378299 0.78370142 128.0 +0.18528001 -2.5265858 0.78001791 128.0 +0.16888015 -2.5142787 0.7760511 128.0 +0.47131333 -7.7658672 2.3302033 128.0 +0.17707089 -3.2343638 0.9885605 128.0 +0.14220688 -2.9240704 0.89647311 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.083876245 -2.7756937 0.85198778 128.0 +0.067228854 -2.7924547 0.85680467 128.0 +0.050580457 -2.820622 0.86502171 128.0 +0 -0 0 128.0 +0.018215202 -3.2506642 0.99196064 128.0 +-0.00169653 -3.2123542 0.98062682 128.0 +-0.024286063 -3.6217737 1.1016155 128.0 +-0.047392238 -3.6886821 1.1214497 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.3269718 -8.1557379 2.6339502 128.0 +-3.3258288 -8.0120592 2.5945652 128.0 +-3.3685825 -7.9764838 2.5897481 128.0 +-3.4159472 -7.9521399 2.5886147 128.0 +-1.4569523 -3.3368294 1.1072824 128.0 +-1.4411834 -3.2463222 1.0809313 128.0 +-1.4610754 -3.2374179 1.0809313 128.0 +-1.4925165 -3.2536671 1.0891483 128.0 +-3.5832558 -7.6828346 2.5361958 128.0 +-3.680037 -7.7655592 2.5704806 128.0 +-3.7076428 -7.7013588 2.55688 128.0 +-1.7033963 -3.4848371 1.1775522 128.0 +-3.8249123 -7.7016592 2.5721807 128.0 +-1.6367487 -3.2470446 1.1058657 128.0 +-1.6019918 -3.130245 1.0704474 128.0 +-1.6132047 -3.1050408 1.0653472 128.0 +-1.6375983 -3.1052616 1.0687474 128.0 +-4.052114 -7.5671806 2.5676472 128.0 +-4.2056441 -7.7393384 2.6339502 128.0 +-0 -0 0 128.0 +-1.9390413 -3.467521 1.2053201 128.0 +-1.8670125 -3.2912588 1.149501 128.0 +-4.3809109 -7.6105251 2.6260164 128.0 +-4.3951216 -7.5280161 2.6070323 128.0 +-2.0215995 -3.4155896 1.2041868 128.0 +-1.9956112 -3.3250182 1.1772689 128.0 +-1.9521285 -3.2078671 1.1410006 128.0 +-1.9763093 -3.2031727 1.1435508 128.0 +-2.1592572 -3.4519293 1.2345047 128.0 +-2.3222051 -3.662112 1.3127083 128.0 +-2.3539691 -3.6623132 1.3178084 128.0 +-5.3447008 -8.2014961 2.9238129 128.0 +-5.3848801 -8.1533442 2.9184294 128.0 +-0 -0 0 128.0 +-5.4226131 -7.9953818 2.8858447 128.0 +-5.456902 -7.9406204 2.8781943 128.0 +-5.4951081 -7.892036 2.8728106 128.0 +-5.5174427 -7.8213415 2.8594935 128.0 +-0 -0 0 128.0 +-2.3736527 -3.279799 1.2277044 128.0 +-5.5169611 -7.52282 2.787807 128.0 +-5.4257426 -7.30408 2.7198038 128.0 +-5.7011323 -7.5771527 2.8331423 128.0 +-2.434824 -3.1961524 1.2186373 128.0 +-2.4596636 -3.1879845 1.2211875 128.0 +-5.8845296 -7.5283484 2.8546765 128.0 +-5.9300165 -7.4913483 2.8543932 128.0 +-6.0844569 -7.5902462 2.9056787 128.0 +-2.5861244 -3.1869664 1.2441385 128.0 +-2.6111121 -3.1777055 1.2466886 128.0 +-2.6686037 -3.2073202 1.2642561 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-8.648077 -9.1809387 3.7579832 128.0 +-8.7174854 -9.1415815 3.7636502 128.0 +-8.7114611 -9.0237589 3.737299 128.0 +-0 -0 0 128.0 +-8.7952318 -8.8895912 3.7262485 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.9513187 -9.5760145 4.1118822 128.0 +-8.6480761 -8.220541 3.5568078 128.0 +-8.6976547 -8.166667 3.5565243 128.0 +-8.7490063 -8.1144495 3.557091 128.0 +-10.113316 -9.2647858 4.0838308 128.0 +-8.8386793 -7.9981103 3.5534074 128.0 +-8.9276342 -7.9795122 3.5692749 128.0 +-9.2453346 -8.1619329 3.6752462 128.0 +-9.3436747 -8.147274 3.6942306 128.0 +-9.2190723 -7.9396081 3.6262274 128.0 +-9.3406715 -7.9450202 3.654562 128.0 +-10.047233 -8.4402008 3.9084399 128.0 +-10.585999 -8.7824926 4.095448 128.0 +-9.7056675 -7.952239 3.7387156 128.0 +-10.178519 -8.2357388 3.8999395 128.0 +-10.049035 -8.0294695 3.8319366 128.0 +-11.558808 -9.1199656 4.3816276 128.0 +-10.697592 -8.334589 4.0382123 128.0 +-11.69418 -8.9961452 4.3906946 128.0 +-11.75145 -8.9259615 4.3915448 128.0 +-10.062725 -7.5465703 3.7477827 128.0 +-10.123486 -7.4955258 3.7531664 128.0 +-10.190192 -7.4485464 3.7608168 128.0 +-10.328256 -7.4526505 3.7945349 128.0 +-10.291766 -7.3307247 3.7647836 128.0 +-10.321647 -7.256959 3.7593999 128.0 +-5.8242869 -4.0424013 2.1261942 128.0 +-5.8371115 -3.9984608 2.1219442 128.0 +-10.728403 -7.2515345 3.8574376 128.0 +-5.8705797 -3.9164195 2.1165605 128.0 +-5.8520408 -3.8523841 2.1015432 128.0 +-5.8321338 -3.788202 2.0862424 128.0 +-11.435295 -7.3269711 4.0441628 128.0 +-11.452474 -7.2392478 4.0345287 128.0 +-11.512954 -7.1789875 4.0401959 128.0 +-6.5392981 -4.0227132 2.2998853 128.0 +-6.0046306 -3.6433282 2.1066434 128.0 +-6.5758252 -3.9347785 2.2956352 128.0 +-5.9563732 -3.5147972 2.0749087 128.0 +-5.9338903 -3.4526289 2.0598912 128.0 +-5.9716024 -3.4256954 2.0655582 128.0 +-6.2012224 -3.5069778 2.1363947 128.0 +-6.2125716 -3.4632599 2.1329947 128.0 +-6.9826617 -3.8364241 2.3854558 128.0 +-6.107852 -3.3073297 2.0836923 128.0 +-0 -0 0 128.0 +-6.109776 -3.2120523 2.0709419 128.0 +-5.9956598 -3.1052814 2.0264566 128.0 +-6.3503585 -3.2396522 2.1378114 128.0 +-6.4532466 -3.2423768 2.1652961 128.0 +-6.4334769 -3.1831622 2.1522622 128.0 +-6.4770298 -3.1553836 2.1601958 128.0 +-7.4457979 -3.5707812 2.4713097 128.0 +-7.3478794 -3.46855 2.4322078 128.0 +-7.3733726 -3.4254186 2.4336245 128.0 +-6.9816704 -3.191582 2.299602 128.0 +-7.0054955 -3.1506493 2.3010187 128.0 +-7.6649718 -3.3907351 2.5078611 128.0 +-7.6592493 -3.332166 2.4993608 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.1318207 -2.8967946 2.3058355 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.850957 -4.7650113 4.0809975 128.0 +-12.948448 -4.7109833 4.1025319 128.0 +-12.820848 -4.5756907 4.0535131 128.0 +-12.808854 -4.4830012 4.0410457 128.0 +-7.2599745 -2.4915791 2.2993186 128.0 +-9.5749588 -3.2201416 3.0161836 128.0 +-7.0577278 -2.3257976 2.2270653 128.0 +-7.0645642 -2.280093 2.2247987 128.0 +-7.0948825 -2.2419014 2.2298989 128.0 +-0 -0 0 128.0 +-7.8424673 -2.3725576 2.4523253 128.0 +-7.8154931 -2.3121557 2.4395747 128.0 +-7.5402422 -2.1805449 2.3506043 128.0 +-7.4971814 -2.1183398 2.3333201 128.0 +-12.676182 -3.4969888 3.916657 128.0 +-9.3812017 -2.526479 2.9019954 128.0 +-7.9189153 -2.0808289 2.4506254 128.0 +-9.4096413 -2.4106913 2.9014287 128.0 +-7.8470836 -1.9593472 2.4211574 128.0 +-7.9372368 -1.9301856 2.4449584 128.0 +-9.8835888 -2.3390706 3.0323343 128.0 +-9.543541 -2.196888 2.9249463 128.0 +-9.6682129 -2.1631935 2.9586644 128.0 +-9.5866499 -2.0832725 2.9300466 128.0 +-13.307814 -2.8060536 4.0498295 128.0 +-16.924376 -3.4599841 5.1353278 128.0 +-12.136136 -2.403944 3.6868634 128.0 +-12.683763 -2.4315834 3.8472373 128.0 +-12.704102 -2.3547597 3.8489373 128.0 +-13.471644 -2.4115512 4.0750475 128.0 +-13.541 -2.3383057 4.0914812 128.0 +-13.977021 -2.3253353 4.2178535 128.0 +-14.432317 -2.3101296 4.3498926 128.0 +-13.70118 -2.1070209 4.127183 128.0 +-14.568687 -2.1489339 4.3824778 128.0 +-13.566472 -1.916208 4.0795808 128.0 +-14.116856 -1.9056277 4.2402382 128.0 +-12.166956 -1.5666224 3.6559787 128.0 +-13.998295 -1.7150004 4.1983027 128.0 +-0 -0 0 128.0 +-13.447279 -1.4802841 4.0285788 128.0 +-13.435122 -1.3955672 4.0223451 128.0 +-14.478093 -1.4140753 4.3294921 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.183281 -0.96410418 3.6423781 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.221466 -0.66581059 3.6477618 128.0 +-12.225322 -0.59080851 3.6477618 128.0 +-12.2268 -0.51570362 3.6471951 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.6164227 12.969851 4.6066418 128.0 +-9.5917854 13.103917 4.6330857 128.0 +-9.6295414 13.326287 4.6903353 128.0 +-9.516861 13.342043 4.6753411 128.0 +-0 0 0 128.0 +-9.3463774 13.449134 4.6723423 128.0 +-0 0 0 128.0 +-9.6773624 14.296613 4.9234219 128.0 +-8.1625042 12.219631 4.1955366 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.9003439 12.311934 4.1767263 128.0 +-7.8272238 12.364243 4.1780896 128.0 +-7.7838283 12.464264 4.1955366 128.0 +-0 0 0 128.0 +-7.6947346 12.664915 4.2307043 128.0 +-7.6010537 12.685481 4.2219806 128.0 +-7.5338421 12.750104 4.2279782 128.0 +-7.4617643 12.806898 4.2315221 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.355269 13.564284 4.4038157 128.0 +-7.2678204 13.601523 4.4013619 128.0 +-7.1766062 13.63139 4.3967276 128.0 +-7.0941596 13.67773 4.3975453 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.1955614 14.747843 4.6813388 128.0 +-7.1049347 14.791717 4.6813388 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-5.0276985 13.531475 4.1219306 128.0 +-4.9406214 13.551223 4.118659 128.0 +-0 0 0 128.0 +-4.6236391 13.182308 3.9899843 128.0 +-4.5279608 13.167668 3.9771714 128.0 +-4.4400125 13.174234 3.9709013 128.0 +-4.335259 13.129056 3.9493644 128.0 +-4.7209597 14.597211 4.3787351 128.0 +-4.3446136 13.720598 4.109663 128.0 +-4.3056321 13.893118 4.1530089 128.0 +-4.1831722 13.796819 4.1167507 128.0 +-3.8421361 12.957918 3.8613095 128.0 +-3.8003252 13.111546 3.8997483 128.0 +-4.3724041 15.438703 4.57829 128.0 +-3.6919811 13.348217 3.9559073 128.0 +-3.8966897 14.432302 4.2675076 128.0 +-3.8119831 14.470825 4.2718692 128.0 +-0 0 0 128.0 +-3.5848112 14.319585 4.2143474 128.0 +-3.490726 14.316073 4.2069869 128.0 +-3.1755037 13.37958 3.9281003 128.0 +-3.4455223 14.924057 4.3716469 128.0 +-3.3422968 14.893285 4.3566527 128.0 +-3.2500305 14.909753 4.3555627 128.0 +-3.1576881 14.925649 4.3544722 128.0 +-3.1731818 15.466881 4.5055013 128.0 +-2.8992507 14.585812 4.2454257 128.0 +-0 0 0 128.0 +-2.7020895 14.523811 4.2176189 128.0 +-2.5974345 14.453945 4.1928105 128.0 +-0 0 0 128.0 +-2.4078159 14.41261 4.172092 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.91078293 14.79216 4.2309771 128.0 +1.0014638 14.785334 4.2307043 128.0 +1.1006011 14.893091 4.2631454 128.0 +0 0 0 128.0 +1.2901394 14.958025 4.2857728 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.4857255 14.172935 4.0695882 128.0 +1.6060988 14.464771 4.1554623 128.0 +0 0 0 128.0 +1.7389249 14.08303 4.0524135 128.0 +1.7964736 13.849782 3.9888937 128.0 +0 0 0 128.0 +2.1522479 15.134535 4.3631959 128.0 +2.2159684 14.924995 4.3070369 128.0 +0 0 0 128.0 +2.3809066 14.784592 4.274868 128.0 +2.3205879 13.86727 4.0156102 128.0 +2.4023404 13.833811 4.0101581 128.0 +2.4779761 13.767676 3.9954367 128.0 +2.8846943 15.482171 4.4940515 128.0 +2.9255798 15.183589 4.4130845 128.0 +3.0252626 15.198379 4.422626 128.0 +2.8296247 13.773401 4.015883 128.0 +3.2428434 15.307884 4.4654269 128.0 +3.0263317 13.865479 4.0529585 128.0 +3.4251778 15.243468 4.4586115 128.0 +3.2231205 13.943537 4.0867629 128.0 +3.3017211 13.89448 4.0783119 128.0 +3.3755064 13.827225 4.0646811 128.0 +0 0 0 128.0 +3.5245674 13.705558 4.0415087 128.0 +3.5649309 13.518076 3.9929831 128.0 +3.6917372 13.658487 4.0406909 128.0 +3.809104 13.757047 4.0764036 128.0 +3.9052517 13.77507 4.0886712 128.0 +4.4867039 15.463987 4.5941014 128.0 +4.5659018 15.383592 4.5785623 128.0 +0 0 0 128.0 +4.6998968 15.150887 4.5264926 128.0 +4.7913194 15.117177 4.5251298 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.924847 -2.2188385 5.4307604 128.0 +18.938566 -2.3383358 5.4386663 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +17.909508 -2.6590116 5.1619611 128.0 +17.859577 -2.7637031 5.1524196 128.0 +17.287548 -2.7839158 4.9932117 128.0 +0 -0 0 128.0 +17.191416 -2.9853172 4.9757643 128.0 +17.971968 -3.2345657 5.205852 128.0 +18.079472 -3.3685672 5.2426553 128.0 +18.457148 -3.5562458 5.3576994 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9619851 -2.2574034 2.3766422 128.0 +7.9489083 -2.3064828 2.3769147 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0192308 -2.5418482 2.4153538 128.0 +7.9641228 -2.578265 2.4036312 128.0 +7.9892616 -2.6406689 2.4158988 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.3128614 -2.1388626 1.3957695 128.0 +4.3761382 -2.2037935 1.4200323 128.0 +4.34026 -2.2192171 1.4129442 128.0 +4.4170823 -2.2927847 1.4418415 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.3504529 -2.360853 1.4342083 128.0 +14.025976 -7.7222481 4.5684757 128.0 +4.3161139 -2.411247 1.4325726 128.0 +4.2384567 -2.4021108 1.4121264 128.0 +13.985727 -8.0390434 4.6025529 128.0 +4.5037341 -2.6259599 1.5089051 128.0 +4.4726291 -2.644731 1.503998 128.0 +4.2236147 -2.5326138 1.4271203 128.0 +3.6703188 -2.2316296 1.2488294 128.0 +3.5861182 -2.2106946 1.2253844 128.0 +3.5765657 -2.2352061 1.2267474 128.0 +4.3536348 -2.7580314 1.4920028 128.0 +4.377111 -2.8106828 1.5056337 128.0 +3.9146399 -2.547821 1.3551496 128.0 +3.9302571 -2.5924511 1.3657817 128.0 +3.8710806 -2.5876486 1.3510604 128.0 +3.8527405 -2.6097341 1.3502425 128.0 +3.457459 -2.3731065 1.2199321 128.0 +3.5589542 -2.4750156 1.2600065 128.0 +3.4587526 -2.4369652 1.230564 128.0 +4.3044076 -3.0723729 1.5301691 128.0 +4.2199802 -3.0513761 1.5072694 128.0 +3.6880937 -2.7014544 1.3270701 128.0 +3.6351304 -2.6970921 1.3142571 128.0 +3.691586 -2.7742512 1.3401557 128.0 +3.0390217 -2.3132427 1.1138843 128.0 +3.0415356 -2.344768 1.1198819 128.0 +3.0619786 -2.3906188 1.1324222 128.0 +3.0615931 -2.4206982 1.137602 128.0 +3.0887439 -2.4731095 1.1528685 128.0 +3.1482506 -2.5526023 1.1801301 128.0 +3.1600444 -2.5944579 1.1902169 128.0 +3.1825407 -2.6457787 1.2043929 128.0 +3.2023163 -2.6956134 1.2177511 128.0 +3.1930392 -2.7214518 1.2204772 128.0 +3.6388521 -3.1400979 1.3935885 128.0 +3.9383357 -3.4408731 1.5135396 128.0 +3.0624082 -2.7090123 1.1902169 128.0 +3.0292428 -2.7129903 1.1839467 128.0 +2.99757 -2.7179561 1.1782218 128.0 +3.2728775 -3.004329 1.2905396 128.0 +3.9669669 -3.6864569 1.5661545 128.0 +3.0963039 -2.9130831 1.236289 128.0 +2.6470878 -2.5213211 1.0675396 128.0 +2.6308749 -2.5368481 1.0672671 128.0 +2.9347458 -2.8647504 1.1937609 128.0 +2.8171885 -2.783977 1.1539589 128.0 +2.8694389 -2.8706112 1.1817658 128.0 +3.3730147 -3.4159586 1.3919528 128.0 +3.3654282 -3.4503646 1.3974051 128.0 +3.3028021 -3.4279957 1.3805029 128.0 +3.2757359 -3.4419248 1.3780494 128.0 +2.8676879 -3.0505054 1.2180237 128.0 +2.8842726 -3.1061122 1.2327449 128.0 +2.8918262 -3.1528196 1.2439222 128.0 +2.9053748 -3.2068648 1.2578256 128.0 +7.0686097 -7.8981495 3.0350101 128.0 +2.8664401 -3.2429976 1.2580982 128.0 +2.3453004 -2.6865408 1.0421864 128.0 +2.8100903 -3.2589855 1.2510103 128.0 +2.9509993 -3.4651358 1.3213452 128.0 +2.3728733 -2.8212864 1.0762633 128.0 +2.5989923 -3.1288486 1.1842194 128.0 +2.5504515 -3.1090345 1.1711338 128.0 +3.6415894 -4.4948444 1.6708391 128.0 +2.5006859 -3.1258249 1.165954 128.0 +2.48981 -3.1516786 1.1697707 128.0 +2.4804862 -3.1797919 1.1744051 128.0 +2.4491849 -3.1797087 1.1689528 128.0 +2.4389484 -3.2069287 1.1733147 128.0 +1.8824648 -2.5071387 0.92005432 128.0 +1.8842374 -2.5418277 0.92823279 128.0 +1.8509883 -2.5292745 0.91978168 128.0 +1.8467046 -2.5561807 0.92523402 128.0 +1.8645091 -2.6144595 0.94159096 128.0 +1.879451 -2.6699047 0.9568575 128.0 +2.0705838 -2.9800298 1.0599064 128.0 +2.0577018 -3.0006127 1.0626326 128.0 +1.995026 -2.9478493 1.040278 128.0 +1.9950718 -2.9872363 1.049547 128.0 +1.8930405 -2.8725004 1.0064737 128.0 +1.8423309 -2.8332503 0.98929882 128.0 +1.8909039 -2.9473376 1.023921 128.0 +1.8717545 -2.9572587 1.0233759 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.5543251 -2.6683521 0.90669614 128.0 +1.5455915 -2.6911874 0.91105795 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.5033892 -2.773133 0.92550665 128.0 +1.4836246 -2.7772141 0.92387092 128.0 +0 -0 0 128.0 +1.1291419 -2.1777213 0.72676951 128.0 +1.1175095 -2.1880355 0.72785997 128.0 +1.1243898 -2.2352448 0.74067289 128.0 +1.0982645 -2.2171018 0.73276705 128.0 +1.5453639 -3.1680307 1.0304638 128.0 +1.5242298 -3.1739843 1.0293734 128.0 +1.266603 -2.6796665 0.87152863 128.0 +1.6670179 -3.5832407 1.1515054 128.0 +1.6401935 -3.5829046 1.148234 128.0 +1.4790728 -3.284121 1.0522732 128.0 +1.4452511 -3.2623477 1.0427315 128.0 +0 -0 0 128.0 +0.9598158 -2.240736 0.72240764 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.1553363 -3.0528092 0.95658487 128.0 +0.91841763 -2.4727221 0.7791118 128.0 +0.91179717 -2.5018125 0.78619981 128.0 +0.85333306 -2.3868732 0.74994189 128.0 +0.83835298 -2.3911564 0.74966925 128.0 +0.82429111 -2.3980751 0.75021446 128.0 +0.81079048 -2.4067345 0.75130492 128.0 +1.0735724 -3.2521722 1.0021118 128.0 +0.8247202 -2.5510712 0.79137951 128.0 +0.87179244 -2.754205 0.85026461 128.0 +1.2405409 -4.0038204 1.2193868 128.0 +0 -0 0 128.0 +0.77253324 -2.6065168 0.80201155 128.0 +0 -0 0 128.0 +2.3042157 -8.1367207 2.4278941 128.0 +0.91834593 -3.3213332 1.0081093 128.0 +0.89970505 -3.3334074 1.0100176 128.0 +0.87653852 -3.3286312 1.0070188 128.0 +0.79648799 -3.1019127 0.93913746 128.0 +0.77370119 -3.0918086 0.93477559 128.0 +0.73169333 -3.0020897 0.90724134 128.0 +1.8302795 -7.712358 2.2776825 128.0 +0.88679457 -3.8423679 1.1490518 128.0 +0.74394536 -3.3163939 0.9947511 128.0 +0.63648468 -2.9213777 0.87888926 128.0 +1.8113401 -8.5625734 2.5115871 128.0 +1.6800596 -8.1899338 2.4006324 128.0 +0.63381803 -3.1902165 0.95331347 128.0 +0.52387464 -2.7244852 0.81782329 128.0 +0.47071487 -2.5318496 0.76139176 128.0 +0.47440308 -2.6416955 0.79219735 128.0 +0.44980147 -2.5962098 0.77829391 128.0 +0.43703422 -2.6179001 0.78374624 128.0 +0.42126834 -2.6224325 0.78429151 128.0 +0.40693232 -2.636378 0.78756291 128.0 +0.38905534 -2.6274045 0.78429151 128.0 +0.38185152 -2.6926119 0.80228412 128.0 +1.1536301 -8.5038748 2.4633341 128.0 +0.39238527 -3.0339136 0.89851761 128.0 +1.0489523 -8.515481 2.4627888 128.0 +0.28390288 -2.4297805 0.7248612 128.0 +0.82794392 -7.476769 2.1631837 128.0 +0.28038365 -2.6847475 0.79655921 128.0 +0.73556495 -7.4806213 2.1615481 128.0 +0.23231331 -2.5241578 0.74994189 128.0 +0.21871717 -2.5475831 0.75621206 128.0 +0.20407666 -2.5613451 0.75975603 128.0 +0.19047691 -2.5913346 0.7679345 128.0 +0.21694233 -3.2202549 0.94622546 128.0 +0 -0 0 128.0 +0.16993554 -3.0872214 0.90778661 128.0 +0.15584125 -3.1871858 0.93586606 128.0 +0.13228503 -3.0948417 0.90942228 128.0 +0.097263031 -2.6590855 0.78565454 128.0 +0.077886924 -2.5596182 0.75730252 128.0 +0.062415004 -2.5696664 0.76002866 128.0 +0.043020103 -2.3718369 0.70386976 128.0 +0.030525491 -2.5413773 0.75185019 128.0 +0.017621834 -2.9879336 0.87834406 128.0 +-0.00078264094 -3.634532 1.061542 128.0 +-0.018985949 -2.9783039 0.87561786 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.071123593 -2.868763 0.84481227 128.0 +-0.087480702 -2.8278825 0.8333624 128.0 +-0.10557649 -2.8474834 0.83908731 128.0 +-0.12267359 -2.8381307 0.8366338 128.0 +-0.1396599 -2.828676 0.83418024 128.0 +-0.15781184 -2.8421757 0.83826947 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.5506976 -3.7415516 1.1793122 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.4637685 -7.9420433 2.486779 128.0 +-1.5437759 -3.4807246 1.110613 128.0 +-1.4638876 -3.2466414 1.0408232 128.0 +-1.4817772 -3.2332246 1.0394602 128.0 +-1.5446359 -3.3165262 1.0683575 128.0 +-3.5942547 -7.5963659 2.4129002 128.0 +-1.7456803 -3.6311791 1.1733147 128.0 +-0 -0 0 128.0 +-3.8856223 -7.8357863 2.5099514 128.0 +-1.6880449 -3.3517997 1.0950738 128.0 +-1.6047877 -3.1383476 1.0304638 128.0 +-1.6333209 -3.1463749 1.0361887 128.0 +-1.6400403 -3.1124594 1.0285555 128.0 +-4.2715859 -7.9886599 2.5985518 128.0 +-4.3228173 -7.9665279 2.5999148 128.0 +-0 -0 0 128.0 +-4.3780274 -7.8372831 2.5753794 128.0 +-0 -0 0 128.0 +-1.906913 -3.3169138 1.1157926 128.0 +-4.5055542 -7.7279406 2.5663829 128.0 +-2.0659678 -3.4936893 1.1817658 128.0 +-1.9488441 -3.2498949 1.1054332 128.0 +-1.9642504 -3.2304766 1.1029797 128.0 +-2.2187715 -3.5992231 1.2297462 128.0 +-2.2688546 -3.6304178 1.2447401 128.0 +-2.26998 -3.5831034 1.2335628 128.0 +-5.2745333 -8.2147226 2.7978342 128.0 +-5.315393 -8.1676884 2.792927 128.0 +-2.1490958 -3.2579932 1.137602 128.0 +-2.1514037 -3.2183478 1.1286056 128.0 +-2.1721895 -3.2066798 1.1291509 128.0 +-2.1891026 -3.1893246 1.1277878 128.0 +-2.2152216 -3.1853118 1.1310592 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.384624 -7.3518734 2.6138182 128.0 +-0 -0 0 128.0 +-2.4286368 -3.2316103 1.1771313 128.0 +-5.6967468 -7.4850311 2.6969662 128.0 +-2.5039389 -3.2480483 1.1937609 128.0 +-2.5161252 -3.2227638 1.1902169 128.0 +-2.5388355 -3.2110384 1.1915799 128.0 +-2.5849464 -3.2284484 1.203575 128.0 +-2.6089482 -3.2177584 1.2054833 128.0 +-2.6310847 -3.2046642 1.2065738 128.0 +-2.6611536 -3.2010384 1.2112083 128.0 +-6.6692491 -7.9237733 2.9663107 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-8.7789488 -9.4477406 3.6860173 128.0 +-8.769515 -9.3222141 3.6582105 128.0 +-9.2166872 -9.6779146 3.8185089 128.0 +-8.7730713 -9.0996084 3.6132288 128.0 +-8.8273964 -9.0442295 3.6126835 128.0 +-8.9449358 -9.0528612 3.6377642 128.0 +-9.0146036 -9.0120907 3.6434891 128.0 +-9.0984821 -8.9850035 3.6549392 128.0 +-9.1410456 -8.916914 3.650032 128.0 +-0 -0 0 128.0 +-10.042142 -9.5582924 3.9599965 128.0 +-0 -0 0 128.0 +-10.131892 -9.4094601 3.9496372 128.0 +-8.7892027 -8.062561 3.4112203 128.0 +-0 -0 0 128.0 +-8.8860474 -7.9528136 3.410675 128.0 +-9.0860519 -8.0319624 3.4679244 128.0 +-11.128164 -9.7162924 4.2176189 128.0 +-9.3893967 -8.0970535 3.5448022 128.0 +-9.526063 -8.1135292 3.5772436 128.0 +-9.3827686 -7.892652 3.5058181 128.0 +-10.539599 -8.7559557 3.914197 128.0 +-9.5830488 -7.8623562 3.5439844 128.0 +-9.6886711 -7.8500471 3.5649757 128.0 +-0 -0 0 128.0 +-11.500927 -9.086977 4.1849051 128.0 +-10.672756 -8.3267374 3.8673069 128.0 +-11.752573 -9.0537872 4.2353387 128.0 +-0 -0 0 128.0 +-11.826634 -8.8817272 4.2225261 128.0 +-10.118818 -7.5024357 3.6009612 128.0 +-10.232981 -7.4902167 3.6249514 128.0 +-10.348151 -7.4774408 3.6492143 128.0 +-12.15853 -8.6726217 4.2634182 128.0 +-12.212302 -8.5984087 4.2636909 128.0 +-11.379963 -7.9083495 3.9583609 128.0 +-10.6539 -7.307219 3.6922874 128.0 +-10.743153 -7.2719131 3.7075541 128.0 +-10.849173 -7.2470093 3.7285454 128.0 +-11.62283 -7.6611085 3.9760809 128.0 +-11.674459 -7.5927954 3.9777167 128.0 +-5.8753433 -3.7698607 2.0097008 128.0 +-5.9097447 -3.7409444 2.0135176 128.0 +-5.9480925 -3.7142956 2.0186973 128.0 +-5.9724092 -3.6787384 2.0192425 128.0 +-5.9940467 -3.6415234 2.0189698 128.0 +-6.0121517 -3.6022034 2.0176067 128.0 +-6.0275145 -3.5613301 2.0154259 128.0 +-6.0417714 -3.5199194 2.0129724 128.0 +-6.0565815 -3.4789474 2.0107913 128.0 +-6.0761395 -3.4407711 2.010246 128.0 +-6.1114182 -3.4113967 2.0148807 128.0 +-6.4036613 -3.5231862 2.102663 128.0 +-6.2128711 -3.3687074 2.0342364 128.0 +-6.7535949 -3.6084867 2.20135 128.0 +-6.2690663 -3.3002803 2.0391433 128.0 +-6.1781697 -3.2041619 2.0037034 128.0 +-6.214849 -3.174948 2.0091558 128.0 +-6.2170243 -3.1281049 2.0037034 128.0 +-6.8145542 -3.3765543 2.1866288 128.0 +-6.8195801 -3.3270831 2.1817217 128.0 +-7.3584838 -3.5343001 2.3447461 128.0 +-7.3330626 -3.4668744 2.3300247 128.0 +-7.354197 -3.4218142 2.3300247 128.0 +-7.0050244 -3.2071881 2.2147081 128.0 +-7.0210629 -3.162565 2.2136178 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.2171459 -3.0401082 2.2506936 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-13.11417 -5.0566363 4.0142469 128.0 +-13.173744 -4.9869752 4.0229707 128.0 +-13.212213 -4.9090648 4.0254245 128.0 +-9.4890461 -3.4594746 2.8935223 128.0 +-9.4955997 -3.3960013 2.8891604 128.0 +-13.194111 -4.627779 3.9935284 128.0 +-13.050302 -4.4875984 3.942004 128.0 +-13.611863 -4.5875168 4.101757 128.0 +-7.0773973 -2.3367934 2.1435554 128.0 +-7.1007566 -2.2962842 2.1462815 128.0 +-7.7586079 -2.4565792 2.3376582 128.0 +-7.8167276 -2.4223142 2.350471 128.0 +-10.11392 -3.0664158 3.0262864 128.0 +-7.6115699 -2.2567308 2.2812266 128.0 +-10.075937 -2.9203742 3.0042045 128.0 +-12.541238 -3.5517361 3.7250013 128.0 +-9.9543028 -2.7531569 2.9581323 128.0 +-7.9442458 -2.1447492 2.3632839 128.0 +-9.3760815 -2.4697573 2.7790236 128.0 +-10.498113 -2.6965842 3.1028914 128.0 +-9.5139475 -2.3816187 2.810647 128.0 +-9.5489454 -2.3282123 2.8166447 128.0 +-8.7495699 -2.0764818 2.5797412 128.0 +-10.806742 -2.4948471 3.1743169 128.0 +-8.734026 -1.9598945 2.5680187 128.0 +-13.289118 -2.8967214 3.8855724 128.0 +-0 -0 0 128.0 +-12.157807 -2.4942086 3.5483463 128.0 +-17.031769 -3.3855045 4.9520464 128.0 +-12.709968 -2.4453635 3.6991029 128.0 +-18.451136 -3.4328568 5.3495207 128.0 +-13.8782 -2.4939549 4.02706 128.0 +-0 -0 0 128.0 +-14.178215 -2.3686509 4.1047559 128.0 +-14.189632 -2.281152 4.1039376 128.0 +-14.265166 -2.2035921 4.1216578 128.0 +-13.594129 -2.0145926 3.9256468 128.0 +-13.777698 -1.9554836 3.9747179 128.0 +-13.883821 -1.8837168 4.0017066 128.0 +-13.610779 -1.7616808 3.9204671 128.0 +-0 -0 0 128.0 +-12.304038 -1.4392209 3.5418034 128.0 +-12.347063 -1.3675116 3.5516176 128.0 +-12.476748 -1.304435 3.5862398 128.0 +-12.337063 -1.2133478 3.5442569 128.0 +-12.354814 -1.1385977 3.5472558 128.0 +-14.563436 -1.25214 4.1734548 128.0 +-12.314148 -0.98261201 3.5319893 128.0 +-12.25182 -0.90201753 3.5126336 128.0 +-12.228325 -0.82488126 3.5044551 128.0 +-12.210109 -0.74842072 3.4979122 128.0 +-12.208707 -0.67316878 3.4962766 128.0 +-12.194349 -0.59734994 3.4910967 128.0 +-0 -0 0 128.0 +-12.181532 -0.44695535 3.4856446 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.5579128 12.904791 4.3739557 128.0 +-9.5486259 13.059047 4.4060597 128.0 +-9.4920444 13.150267 4.4170222 128.0 +-9.4464645 13.257792 4.433466 128.0 +-9.3893709 13.35025 4.4449506 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.6798267 14.507372 4.7474608 128.0 +-9.572051 14.538272 4.7383256 128.0 +-9.5294657 14.668781 4.7615557 128.0 +-7.9699287 12.434185 4.0252461 128.0 +-7.8785238 12.459191 4.0176773 128.0 +-7.8356433 12.561358 4.0349035 128.0 +-7.833281 12.730887 4.0735331 128.0 +-7.7890701 12.834832 4.0912819 128.0 +-7.6402788 12.765585 4.0544796 128.0 +-7.5647502 12.817213 4.0560455 128.0 +-7.4893613 12.869228 4.0578728 128.0 +-0 0 0 128.0 +-7.6383314 13.503819 4.2267461 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.4436355 13.743994 4.2580671 128.0 +-7.3064485 13.690613 4.2277899 128.0 +-7.5978456 14.449508 4.4459944 128.0 +-7.4695296 14.419565 4.4227648 128.0 +-0 0 0 128.0 +-7.4172711 14.759426 4.4981966 128.0 +-7.2863274 14.723329 4.4736614 128.0 +-7.1764016 14.727839 4.4616551 128.0 +-7.1096931 14.821209 4.4765325 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-6.7161517 15.177985 4.5195994 128.0 +-6.6321383 15.240153 4.5258636 128.0 +-6.5407796 15.285886 4.5274296 128.0 +-6.4547234 15.344419 4.5329108 128.0 +-6.3630314 15.389979 4.5347381 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-5.0356131 13.573686 3.9464214 128.0 +-4.9452991 13.585279 3.9409401 128.0 +-0 0 0 128.0 +-4.5606747 13.023561 3.7629313 128.0 +-4.5251775 13.180954 3.7999947 128.0 +-4.4306736 13.168214 3.7885103 128.0 +-4.3461657 13.18415 3.7853782 128.0 +-4.716783 14.609701 4.1828966 128.0 +-4.2465868 13.434392 3.8414953 128.0 +-4.3702898 14.126974 4.0302057 128.0 +-4.5407186 15.003576 4.2703347 128.0 +-3.8764324 13.097434 3.7250848 128.0 +-4.3951483 15.192632 4.3081813 128.0 +-3.7553153 13.285219 3.7647583 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.8183124 14.524736 4.092587 128.0 +-4.0018125 15.612061 4.3896165 128.0 +-3.3357358 13.352952 3.753274 128.0 +-3.2473531 13.346905 3.7459657 128.0 +-3.1889684 13.466152 3.7736328 128.0 +-3.5210791 15.286947 4.2734671 128.0 +-3.3567972 14.993626 4.1862893 128.0 +-3.2499716 14.946022 4.1674967 128.0 +-3.1510303 14.931678 4.1581006 128.0 +-3.029947 14.806976 4.1184268 128.0 +-2.9596772 14.929451 4.1471381 128.0 +-2.7972834 14.578536 4.0456052 128.0 +-2.6959858 14.531832 4.0281177 128.0 +-2.6035359 14.530046 4.0231581 128.0 +-2.4906657 14.40877 3.9855728 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-1.6130095 13.849237 3.8018217 128.0 +-1.5291646 13.869429 3.804693 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.0063182 14.746469 4.0283785 128.0 +1.0867429 14.605243 3.991837 128.0 +1.2336169 15.308412 4.1844625 128.0 +1.1675084 13.457905 3.6843674 128.0 +0 0 0 128.0 +1.5313886 15.446417 4.2288342 128.0 +0 0 0 128.0 +1.5844963 14.205173 3.8965685 128.0 +1.6726445 14.203813 3.8989174 128.0 +1.7433637 14.061079 3.8628981 128.0 +1.8242445 14.008956 3.8516748 128.0 +2.0876586 15.297328 4.2063875 128.0 +2.1876233 15.327234 4.218133 128.0 +2.2420599 15.048093 4.1455722 128.0 +2.3221998 14.955832 4.1241693 128.0 +2.2591155 13.983571 3.8618541 128.0 +2.5765436 15.3489 4.2400575 128.0 +2.4149675 13.8654 3.8373191 128.0 +2.4955382 13.825623 3.8305328 128.0 +2.8682086 15.350114 4.2541523 128.0 +2.9760809 15.403311 4.2737279 128.0 +2.750356 13.781132 3.8315771 128.0 +3.1255267 15.174644 4.221004 128.0 +2.9607913 13.941805 3.8856061 128.0 +3.1847765 14.556137 4.0607438 128.0 +0 0 0 128.0 +3.24176 13.992151 3.9153612 128.0 +3.3154721 13.921288 3.9012666 128.0 +3.3925676 13.866926 3.8918703 128.0 +0 0 0 128.0 +3.5232024 13.671882 3.8493257 128.0 +3.5611384 13.476417 3.8007777 128.0 +4.2887063 15.834929 4.4676585 128.0 +4.3635874 15.728321 4.4452114 128.0 +4.4410157 15.634393 4.4264188 128.0 +4.5570779 15.67637 4.4459944 128.0 +4.6240077 15.550034 4.4183273 128.0 +4.5859127 15.082674 4.2943478 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +4.7568173 14.368097 4.1241693 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.051399 -1.1830405 5.1930051 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.819519 -1.5168271 5.136888 128.0 +18.378048 -1.5947745 5.0196943 128.0 +18.366955 -1.7074206 5.0194335 128.0 +18.597248 -1.844009 5.0849471 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.160229 -2.3745694 5.5205727 128.0 +18.941086 -2.3488221 5.1924829 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.992311 -2.8300321 5.2238045 128.0 +17.316721 -2.6889637 4.7701688 128.0 +17.293224 -2.7940881 4.768342 128.0 +18.012606 -3.0238936 4.9703636 128.0 +18.328466 -3.1926935 5.0622392 128.0 +0 -0 0 128.0 +18.669365 -3.4886775 5.1671653 128.0 +18.672251 -3.607928 5.1739511 128.0 +0 -0 0 128.0 +18.672897 -3.8463395 5.1867409 128.0 +18.622507 -3.9552248 5.1794324 128.0 +18.62995 -4.0764337 5.1883068 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9429574 -2.2556305 2.264473 128.0 +7.9345293 -2.3059423 2.2660389 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0163164 -2.5446775 2.3059735 128.0 +7.9702501 -2.583988 2.2973602 128.0 +7.9927335 -2.6455896 2.3083227 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +13.713062 -7.233243 4.223875 128.0 +13.656507 -7.3108692 4.220221 128.0 +13.618177 -7.3982134 4.2223091 128.0 +13.579289 -7.4853625 4.2243972 128.0 +0 -0 0 128.0 +3.6129067 -2.0487735 1.1549195 128.0 +13.930318 -8.0167198 4.3776097 128.0 +3.5699859 -2.0827348 1.1494383 128.0 +3.5745833 -2.1149282 1.1549195 128.0 +3.6103697 -2.1661375 1.1703191 128.0 +4.4430242 -2.7032471 1.4381154 128.0 +4.4822145 -2.7649338 1.455864 128.0 +3.4864147 -2.1799989 1.1436961 128.0 +3.4843855 -2.2085886 1.1473502 128.0 +3.4886324 -2.2414114 1.1530924 128.0 +3.4998863 -2.2791123 1.1611837 128.0 +3.8676622 -2.5526919 1.2849025 128.0 +3.8182313 -2.5538261 1.27394 128.0 +4.7852001 -3.2436228 1.5949823 128.0 +4.1008716 -2.8164334 1.377039 128.0 +4.1627374 -2.8966994 1.4031399 128.0 +4.1511955 -2.9266384 1.405228 128.0 +3.4851928 -2.4890263 1.1898948 128.0 +3.4362309 -2.4860239 1.1786714 128.0 +3.420912 -2.5070615 1.1786714 128.0 +3.4093394 -2.5308826 1.1799765 128.0 +3.3104343 -2.4890761 1.1517874 128.0 +3.926255 -2.9902732 1.3663375 128.0 +3.0824704 -2.377351 1.0844468 128.0 +3.070107 -2.3980033 1.0852298 128.0 +3.597297 -2.8457577 1.272113 128.0 +3.2822385 -2.6292987 1.169014 128.0 +3.301271 -2.6779814 1.1812814 128.0 +3.3086419 -2.7178011 1.1896338 128.0 +3.3156474 -2.7578115 1.1979861 128.0 +3.2964487 -2.776238 1.197203 128.0 +3.2220716 -2.7475405 1.1768444 128.0 +3.3088844 -2.8568692 1.2139077 128.0 +3.4693148 -3.0328226 1.2778552 128.0 +3.3415115 -2.9574168 1.2384427 128.0 +3.5094631 -3.144763 1.3060442 128.0 +3.7274146 -3.3816373 1.3926996 128.0 +3.7236545 -3.4201207 1.3989638 128.0 +3.0353944 -2.8222075 1.1525704 128.0 +3.0334806 -2.8553398 1.1583126 128.0 +3.1158123 -2.9691572 1.195637 128.0 +4.0435286 -3.9013262 1.5511327 128.0 +2.9624581 -2.893151 1.1515263 128.0 +3.7784836 -3.7361238 1.4686534 128.0 +3.7050123 -3.7086895 1.4493388 128.0 +3.6320219 -3.680496 1.430024 128.0 +3.3257554 -3.4116304 1.3201388 128.0 +3.3409078 -3.4695311 1.3342333 128.0 +3.2576985 -3.4249003 1.3099594 128.0 +3.2676816 -3.4778981 1.3222269 128.0 +3.2324934 -3.4830205 1.3167456 128.0 +2.9925928 -3.2643545 1.2293073 128.0 +7.0592561 -7.7982173 2.8760195 128.0 +2.8802524 -3.2202265 1.2000742 128.0 +2.3716555 -2.684263 1.0004015 128.0 +2.32532 -2.6645703 0.98813409 128.0 +2.2893965 -2.6561143 0.98004276 128.0 +2.2693028 -2.6657002 0.9784767 128.0 +2.2411048 -2.6655314 0.97351754 128.0 +2.1877213 -2.6346593 0.95785689 128.0 +2.126848 -2.5935273 0.9388032 128.0 +3.4462864 -4.256649 1.5127642 128.0 +3.3947916 -4.2460427 1.5018017 128.0 +2.3735721 -3.0058274 1.0674812 128.0 +2.3568642 -3.0226192 1.0682641 128.0 +2.3064849 -2.9957099 1.0541697 128.0 +2.312587 -3.0420899 1.065132 128.0 +2.3691788 -3.1566136 1.0990633 128.0 +2.3371267 -3.1540241 1.0933211 128.0 +2.219738 -3.0342672 1.0484273 128.0 +1.9270881 -2.6681864 0.92183757 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +2.1379998 -3.0783119 1.0452952 128.0 +1.9826844 -2.8922729 0.98004276 128.0 +1.9930142 -2.9459701 0.99361527 128.0 +1.9631144 -2.9404767 0.98787308 128.0 +1.9020405 -2.887156 0.96673125 128.0 +1.869566 -2.8761051 0.95942301 128.0 +1.8529251 -2.8891478 0.95994502 128.0 +1.8429006 -2.9127018 0.96386015 128.0 +1.8423629 -2.9518039 0.97273451 128.0 +1.8742918 -3.0444515 0.9985745 128.0 +1.8896277 -3.1120148 1.0163232 128.0 +1.8501741 -3.0895882 1.0056218 128.0 +1.8468809 -3.1274867 1.0139741 128.0 +1.9058189 -3.2730942 1.0559967 128.0 +1.5773122 -2.7471561 0.88842827 128.0 +1.8503029 -3.2693465 1.0476444 128.0 +1.4903668 -2.6710272 0.85893416 128.0 +1.5450733 -2.8095653 0.89886868 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.4499083 -2.7969201 0.88373011 128.0 +1.1041408 -2.1617 0.68823361 128.0 +1.1341965 -2.2546916 0.71433461 128.0 +1.0950825 -2.2105608 0.69893503 128.0 +0 -0 0 128.0 +1.5400141 -3.208261 0.99413729 128.0 +1.5219481 -3.2211418 0.99518132 128.0 +1.2056401 -2.5922074 0.80490506 128.0 +1.5429109 -3.3721452 1.0345938 128.0 +1.6128675 -3.5831575 1.0943651 128.0 +1.4951644 -3.3767002 1.0304177 128.0 +1.5984305 -3.6708391 1.114463 128.0 +1.5823314 -3.6956658 1.1189001 128.0 +1.6498179 -3.9197567 1.1818035 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.6135263 -4.0400147 1.2081655 128.0 +1.5865932 -4.0444465 1.2065995 128.0 +1.5416343 -4.0018535 1.1914608 128.0 +1.4917989 -3.9444144 1.1721461 128.0 +0.90730238 -2.4428999 0.73652047 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.9505384 -2.7115653 0.80882019 128.0 +0 -0 0 128.0 +1.1230887 -3.3351343 0.98343593 128.0 +1.1007906 -3.3364615 0.98186982 128.0 +0.80661255 -2.4952223 0.74095762 128.0 +0.80321282 -2.537864 0.75165904 128.0 +0.77792817 -2.5113885 0.74278468 128.0 +0.76334256 -2.5188863 0.74356771 128.0 +0.75252861 -2.539259 0.74800491 128.0 +1.1655135 -4.0257044 1.1650989 128.0 +1.1502404 -4.0662227 1.1744952 128.0 +0.9211148 -3.3334143 0.96699226 128.0 +0.90064406 -3.3390036 0.96699226 128.0 +0.87989402 -3.3435333 0.96673125 128.0 +0.79178745 -3.0851648 0.89312643 128.0 +0.75834161 -3.0318973 0.87694383 128.0 +0.74177712 -3.0449355 0.87929291 128.0 +1.8493965 -7.8073606 2.2013085 128.0 +1.7148148 -7.4422731 2.0969045 128.0 +0.70500034 -3.1447401 0.90330583 128.0 +0.64591277 -2.9660048 0.85266989 128.0 +1.8136501 -8.5918665 2.4062014 128.0 +0.64544892 -3.1496181 0.90121776 128.0 +0.64637685 -3.2557869 0.92940682 128.0 +0.52201581 -2.7155073 0.77958709 128.0 +0.48316643 -2.5990658 0.74669981 128.0 +0.45291427 -2.5221634 0.72477502 128.0 +1.3296909 -7.6891913 2.1417983 128.0 +0.43159851 -2.5856178 0.74069661 128.0 +0.52564436 -3.2745125 0.9286238 128.0 +0.43242916 -2.802531 0.79864085 128.0 +0.41043249 -2.7726619 0.78976649 128.0 +0.38760298 -2.7340271 0.77854306 128.0 +0.37017387 -2.7315707 0.77723801 128.0 +0.35204941 -2.723259 0.77436692 128.0 +0.34214687 -2.7809412 0.78950548 128.0 +0.32764363 -2.805042 0.79550868 128.0 +0.85177046 -7.7207561 2.1321409 128.0 +0.26814166 -2.5678511 0.72999519 128.0 +0.3997533 -4.0768738 1.1395199 128.0 +0.37200162 -4.049449 1.1314286 128.0 +0.28210005 -3.2898812 0.92470866 128.0 +0.20588118 -2.5842438 0.73286629 128.0 +0.55906743 -7.6380825 2.1026468 128.0 +0 -0 0 128.0 +0.17547823 -2.8708827 0.80960327 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.083948635 -2.7620208 0.77906507 128.0 +0.065481894 -2.6987898 0.76183844 128.0 +0 -0 0 128.0 +0.043922469 -3.700377 1.0325058 128.0 +0.017295396 -2.9765854 0.8367483 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.035740983 -2.8412638 0.8002069 128.0 +-0.053340152 -2.8496776 0.80255598 128.0 +-0.071409687 -2.8724573 0.80882019 128.0 +-0.089881979 -2.8989811 0.81612849 128.0 +-0.10835639 -2.9167035 0.82108766 128.0 +-0.13071819 -3.0182118 0.84875476 128.0 +-0.15091726 -3.0510976 0.85789007 128.0 +-0.16914983 -3.0414398 0.85554099 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6125426 -3.7572858 1.1374317 128.0 +-1.6232015 -3.7190127 1.1290795 128.0 +-1.6220888 -3.6551664 1.1131579 128.0 +-1.5559024 -3.4489455 1.0549526 128.0 +-1.4880551 -3.2454364 0.99726945 128.0 +-1.5063087 -3.2327454 0.99622542 128.0 +-1.5310764 -3.2339103 0.99935752 128.0 +-3.7909751 -7.877903 2.395761 128.0 +-3.9706931 -8.1233311 2.4766741 128.0 +-3.9298694 -7.9163837 2.4216011 128.0 +-3.8857896 -7.7085266 2.3660059 128.0 +-1.6185573 -3.1639414 0.99283224 128.0 +-1.6294818 -3.137676 0.98787308 128.0 +-1.6527574 -3.1353028 0.99022216 128.0 +-1.8492194 -3.4561505 1.091755 128.0 +-1.8842176 -3.470185 1.0995853 128.0 +-4.3952641 -7.9745078 2.4939008 128.0 +-4.438457 -7.9372787 2.4907687 128.0 +-0 -0 0 128.0 +-4.771008 -8.2913332 2.6184025 128.0 +-2.0136259 -3.4516041 1.1123748 128.0 +-1.9560801 -3.3062763 1.0706133 128.0 +-1.9519831 -3.2536573 1.0578238 128.0 +-1.9794396 -3.2539876 1.0617388 128.0 +-0 -0 0 128.0 +-2.0637684 -3.3006485 1.0844468 128.0 +-5.1882873 -8.1823578 2.6515508 128.0 +-5.2785921 -8.2128935 2.6716485 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-2.2937937 -3.340266 1.1275134 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.3791308 -7.4328094 2.5126934 128.0 +-2.3934639 -3.2659969 1.1267304 128.0 +-2.4278488 -3.2706232 1.1332556 128.0 +-2.4565766 -3.2672358 1.1371708 128.0 +-2.4683867 -3.2413514 1.1335167 128.0 +-5.7520432 -7.4553638 2.5779459 128.0 +-5.8184857 -7.4465504 2.5870812 128.0 +-5.8628693 -7.4091949 2.5865593 128.0 +-5.9112396 -7.3768477 2.5878644 128.0 +-5.9935012 -7.3861589 2.603786 128.0 +-6.0092878 -7.313447 2.5912576 128.0 +-6.1065373 -7.3395071 2.6134434 128.0 +-6.6490932 -7.8924565 2.8222513 128.0 +-6.7099261 -7.8661976 2.8274715 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-8.6585331 -9.4243155 3.492264 128.0 +-8.6767454 -9.3286028 3.4766033 128.0 +-9.1746082 -9.7432108 3.6504359 128.0 +-9.2149 -9.6664715 3.6428666 128.0 +-8.8349171 -9.15481 3.4719052 128.0 +-9.334178 -9.5540438 3.6433887 128.0 +-8.9893656 -9.0889387 3.4883487 128.0 +-9.0374508 -9.0261059 3.4854777 128.0 +-9.0727329 -8.9508247 3.4779084 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-8.8210764 -8.3878841 3.3231294 128.0 +-8.7991934 -8.2648745 3.2959845 128.0 +-8.8370008 -8.1989107 3.2912862 128.0 +-8.8793135 -8.1373606 3.2884152 128.0 +-8.9254971 -8.0794859 3.2871101 128.0 +-10.148006 -9.073247 3.7125564 128.0 +-10.189738 -8.9986687 3.7075973 128.0 +-11.098161 -9.6802225 4.013762 128.0 +-11.193188 -9.6428137 4.0265512 128.0 +-9.142664 -7.7793779 3.2777138 128.0 +-9.359477 -7.8653378 3.3374851 128.0 +-10.154163 -8.4272785 3.5998001 128.0 +-9.6389694 -7.9004092 3.4016936 128.0 +-9.6122246 -7.7803898 3.3755925 128.0 +-9.6545048 -7.7170453 3.3737655 128.0 +-10.641335 -8.3992033 3.6974177 128.0 +-11.674937 -9.0991821 4.0341206 128.0 +-10.922632 -8.405735 3.7584941 128.0 +-11.612768 -8.8238344 3.9753935 128.0 +-11.719976 -8.7923813 3.9934032 128.0 +-10.236111 -7.5816612 3.4760814 128.0 +-10.277762 -7.5152926 3.4745152 128.0 +-10.3683 -7.4842887 3.4893928 128.0 +-10.351916 -7.3762803 3.4687731 128.0 +-10.555699 -7.4242344 3.5212362 128.0 +-11.391712 -7.9080992 3.7814631 128.0 +-11.709204 -8.0224476 3.8696845 128.0 +-11.229586 -7.5930796 3.6971569 128.0 +-10.872842 -7.255095 3.5661297 128.0 +-0 -0 0 128.0 +-11.421687 -7.4203248 3.7146444 128.0 +-11.456436 -7.3433313 3.7112513 128.0 +-6.0720186 -3.8403308 1.9744909 128.0 +-6.0930109 -3.8014688 1.9737078 128.0 +-6.2724414 -3.8601158 2.0232997 128.0 +-6.1408525 -3.7274134 1.9742298 128.0 +-6.3955469 -3.8284557 2.0473127 128.0 +-6.7739167 -3.9986248 2.1587639 128.0 +-16.049862 -9.340023 5.0528426 128.0 +-7.0192499 -4.0280805 2.2201014 128.0 +-7.0119033 -3.9668775 2.2101829 128.0 +-6.7587094 -3.7691345 2.1243105 128.0 +-6.7284088 -3.6983068 2.107867 128.0 +-6.4216113 -3.4786041 2.0065951 128.0 +-7.1846461 -3.8349564 2.2339349 128.0 +-0 -0 0 128.0 +-6.3054004 -3.2670267 1.952044 128.0 +-6.8567452 -3.4993863 2.1133482 128.0 +-6.8125324 -3.4243095 2.0935113 128.0 +-6.8758106 -3.4034212 2.1063008 128.0 +-6.4591794 -3.148083 1.9747518 128.0 +-7.3096108 -3.5070601 2.2240164 128.0 +-7.3536892 -3.472858 2.2308028 128.0 +-7.0176711 -3.2617204 2.1243105 128.0 +-7.0252614 -3.2129803 2.1206565 128.0 +-16.710625 -7.5171466 4.9862852 128.0 +-7.2486658 -3.2081544 2.1752076 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.3394885 -3.0351975 2.1793838 128.0 +-7.3678122 -2.9941022 2.1822548 128.0 +-7.36901 -2.9420397 2.1772957 128.0 +-7.3788342 -2.8935983 2.1749465 128.0 +-7.3865404 -2.8444536 2.1720755 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-6.9659138 -2.4880347 2.031913 128.0 +-10.547152 -3.6937063 3.0535061 128.0 +-13.295999 -4.5646629 3.8328819 128.0 +-7.0901318 -2.3861694 2.054621 128.0 +-7.1046395 -2.3426201 2.054621 128.0 +-10.423329 -3.3655548 2.9934738 128.0 +-7.6842136 -2.429493 2.2109659 128.0 +-7.5062284 -2.3226864 2.1564147 128.0 +-7.6284437 -2.3092935 2.1869531 128.0 +-7.7952046 -2.3076334 2.2300196 128.0 +-9.4135008 -2.7237413 2.681567 128.0 +-9.5117846 -2.6890302 2.7045357 128.0 +-9.0237455 -2.491432 2.5630684 128.0 +-9.3539162 -2.5208824 2.6512897 128.0 +-9.3953505 -2.4703104 2.6585979 128.0 +-13.353741 -3.4231164 3.7592771 128.0 +-8.8283587 -2.2058454 2.4923346 128.0 +-13.597348 -3.3082643 3.8156552 128.0 +-11.443679 -2.7102003 3.2116783 128.0 +-11.462915 -2.6405821 3.2124612 128.0 +-13.28572 -2.9745657 3.7130785 128.0 +-8.9145079 -1.9389203 2.4985988 128.0 +-16.964348 -3.5798209 4.7197938 128.0 +-12.274249 -2.5118806 3.4194422 128.0 +-12.745847 -2.5269654 3.545249 128.0 +-17.091833 -3.2793207 4.7375426 128.0 +-17.218887 -3.1942749 4.7670369 128.0 +-17.206806 -3.0829456 4.7584233 128.0 +-13.512699 -2.3358471 3.7397015 128.0 +-13.479165 -2.2449651 3.726651 128.0 +-13.46409 -2.1576364 3.7188206 128.0 +-12.390348 -1.9077607 3.4215302 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.383633 -1.5195079 3.4053476 128.0 +-12.375463 -1.441486 3.4006495 128.0 +-12.401346 -1.3674272 3.4053476 128.0 +-12.423906 -1.2928056 3.4092629 128.0 +-12.428722 -1.2162678 3.4084797 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.387434 -0.90596288 3.390209 128.0 +-12.397575 -0.83026004 3.3915141 128.0 +-12.345586 -0.75072271 3.3761146 128.0 +-12.317187 -0.67316949 3.3672402 128.0 +-12.336514 -0.59832674 3.3714163 128.0 +-12.2898 -0.52050078 3.3578439 128.0 +-12.295656 -0.4451867 3.3586268 128.0 +-12.320349 -0.37039867 3.36463 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-13.202861 -0.24123573 3.4471555 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-14.49124 13.800355 5.2073269 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-13.77984 14.300405 5.1680169 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-14.041852 15.884225 5.5150437 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.6517925 13.185892 4.2581363 128.0 +-9.5395155 13.201707 4.2443652 128.0 +-9.4425898 13.237924 4.2373548 128.0 +-9.3622999 13.297196 4.2378554 128.0 +-0 0 0 128.0 +-8.9393911 13.033449 4.1194258 128.0 +-0 0 0 128.0 +-9.6704273 14.476931 4.5345559 128.0 +-9.5622339 14.506895 4.5255423 128.0 +-9.5015469 14.60912 4.5390625 128.0 +-9.3949957 14.641071 4.5310502 128.0 +-7.9196873 12.510294 3.8612838 128.0 +-7.8935475 12.639948 3.8860714 128.0 +-7.9823971 12.958512 3.9681962 128.0 +-9.1399364 15.043462 4.5843816 128.0 +-7.6913991 12.83625 3.9020958 128.0 +-7.6346564 12.92071 3.913363 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.6394815 13.684928 4.0853739 128.0 +-0 0 0 128.0 +-7.4663563 13.769135 4.08287 128.0 +-7.3976998 13.844575 4.0916333 128.0 +-0 0 0 128.0 +-7.5348339 14.527309 4.2643957 128.0 +-0 0 0 128.0 +-7.4195328 14.744944 4.300951 128.0 +-7.2747545 14.680889 4.2694035 128.0 +-7.4617691 15.293423 4.4329014 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-6.8646669 15.238826 4.3545327 128.0 +-0 0 0 128.0 +-6.6624479 15.288193 4.3450179 128.0 +-6.5711851 15.335014 4.3467708 128.0 +-6.4837337 15.391106 4.3512774 128.0 +-6.3928776 15.439544 4.3537812 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.9705324 13.633257 3.7849181 128.0 +-4.8884172 13.668057 3.78617 128.0 +-4.7551088 13.557104 3.7476113 128.0 +-4.516614 13.134674 3.6241741 128.0 +-0 0 0 128.0 +-4.3587341 13.200142 3.6271787 128.0 +-4.7245727 14.608381 4.0027485 128.0 +-4.2347093 13.373547 3.6599784 128.0 +-4.0941014 13.210629 3.6089008 128.0 +-4.4703312 14.743828 4.0165195 128.0 +-3.9030526 13.163343 3.5828614 128.0 +-3.8305664 13.21587 3.5906231 128.0 +-3.7470286 13.230742 3.5883696 128.0 +-4.2857695 15.494803 4.1897826 128.0 +-4.0172257 14.878689 4.0177712 128.0 +-3.9145105 14.859993 4.0062537 128.0 +-3.859633 15.025325 4.0440612 128.0 +-3.6923575 14.749132 3.96419 128.0 +-3.3036063 13.548751 3.638696 128.0 +-3.213479 13.539565 3.6309342 128.0 +-3.1427567 13.612798 3.645206 128.0 +-3.3509095 14.93166 3.9897289 128.0 +-3.2544844 14.930182 3.9839702 128.0 +-3.1501875 14.890199 3.9681962 128.0 +-3.0605149 14.917783 3.9704497 128.0 +-2.9043634 14.611529 3.8848195 128.0 +-2.7927008 14.514991 3.854774 128.0 +-2.4055169 12.929955 3.4333844 128.0 +-2.5891938 14.408095 3.8179681 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-1.7183523 13.94771 3.6664882 128.0 +-0 0 0 128.0 +-1.5423723 13.925407 3.6554716 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.76601869 13.822833 3.6124063 128.0 +0.84820276 13.775354 3.6013894 128.0 +1.0181246 15.031404 3.9283857 128.0 +0 0 0 128.0 +1.1706795 14.620173 3.8252292 128.0 +1.2439808 14.422694 3.7759044 128.0 +1.4203818 15.366297 4.0230293 128.0 +1.5194858 15.40643 4.0357985 128.0 +1.6187321 15.442072 4.0475664 128.0 +1.7250954 15.536733 4.0748582 128.0 +1.8595078 15.859517 4.1617398 128.0 +1.7586956 14.243183 3.7436054 128.0 +1.8423216 14.203321 3.736094 128.0 +1.9595591 14.413354 3.7939317 128.0 +2.0200229 14.204564 3.7426038 128.0 +2.2531421 15.175412 3.9997439 128.0 +2.3093536 14.923068 3.9373994 128.0 +2.2816019 14.167844 3.7433548 128.0 +2.3643374 14.12875 3.736845 128.0 +2.4239891 13.958495 3.696033 128.0 +2.7412474 15.230649 4.0342965 128.0 +2.5700977 13.793498 3.6607294 128.0 +2.9583473 15.353673 4.0758595 128.0 +2.790385 14.018242 3.7285824 128.0 +2.8818014 14.027411 3.7355931 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.7413266 15.744674 4.2173243 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5121336 13.657202 3.6790073 128.0 +3.544028 13.438804 3.6264274 128.0 +3.6531949 13.515874 3.6529677 128.0 +0 0 0 128.0 +0 0 0 128.0 +4.5055981 15.529114 4.213819 128.0 +4.5156841 15.214381 4.1364517 128.0 +4.6140132 15.203063 4.1409583 128.0 +4.5480266 14.661264 4.0019975 128.0 +0 0 0 128.0 +4.7278981 14.60527 4.0022478 128.0 +4.8247166 14.598047 4.0082569 128.0 +0 0 0 128.0 +0 0 0 128.0 +5.1320424 14.619128 4.0390539 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.129284 -1.4135461 4.9927511 128.0 +18.960051 -1.5180711 4.9511881 128.0 +18.410221 -1.5878042 4.8109751 128.0 +0 -0 0 128.0 +18.030937 -1.7782663 4.717834 128.0 +18.633038 -1.9531484 4.877326 128.0 +18.704416 -2.0767348 4.8991089 128.0 +0 -0 0 128.0 +20.041937 -2.4745457 5.2546487 128.0 +18.90593 -2.4521711 4.9624553 128.0 +17.642445 -2.3984809 4.6367106 128.0 +17.771172 -2.5271301 4.6742678 128.0 +17.42877 -2.5876474 4.5888882 128.0 +19.821695 -3.0672908 5.2193451 128.0 +17.525698 -2.8222611 4.6229401 128.0 +17.516645 -2.9311814 4.6251931 128.0 +17.834095 -3.0969048 4.7133269 128.0 +17.790936 -3.2019877 4.7070675 128.0 +17.865179 -3.3286445 4.7318554 128.0 +0 -0 0 128.0 +18.869362 -3.755883 5.0077739 128.0 +18.831736 -3.8686705 5.0040183 128.0 +0 -0 0 128.0 +19.004181 -4.1477771 5.0626073 128.0 +19.07472 -4.2859535 5.0881457 128.0 +19.690437 -4.551383 5.2586546 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9512043 -2.2543473 2.1694663 128.0 +7.9353623 -2.3025529 2.1689653 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0102863 -2.5390136 2.2052705 128.0 +7.9807405 -2.5836439 2.201515 128.0 +7.9739299 -2.635602 2.2040186 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.354799 -7.7378683 5.1835408 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.036779 -8.4413309 5.4176459 128.0 +18.957266 -8.5456467 5.4098845 128.0 +18.889511 -8.6549501 5.4056277 128.0 +18.868523 -8.7858105 5.4148917 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +13.644713 -7.5123491 4.0603361 128.0 +3.4944417 -1.9522945 1.0672934 128.0 +3.4596543 -1.9608123 1.0605332 128.0 +3.4727392 -1.9964769 1.0680445 128.0 +3.4855156 -2.0323753 1.0755559 128.0 +3.4779799 -2.0566802 1.0770582 128.0 +3.4943573 -2.0954056 1.0858215 128.0 +3.4789524 -2.1152983 1.0850704 128.0 +3.4477758 -2.1254296 1.0795621 128.0 +3.4149642 -2.1342323 1.073553 128.0 +3.2145085 -2.0365136 1.0162159 128.0 +3.0797484 -1.9777409 0.97865891 128.0 +3.04808 -1.9839275 0.97264981 128.0 +3.9289241 -2.591572 1.2493197 128.0 +3.9282422 -2.6258519 1.254077 128.0 +3.9296918 -2.6618493 1.2595853 128.0 +3.8765647 -2.6607125 1.2480677 128.0 +3.5525444 -2.4705589 1.1511707 128.0 +3.975008 -2.8006375 1.2896309 128.0 +3.5850029 -2.55896 1.1712011 128.0 +3.6014018 -2.6041651 1.1814667 128.0 +3.5197439 -2.5781636 1.1604348 128.0 +3.4781988 -2.580677 1.1521722 128.0 +3.6573484 -2.7485259 1.215268 128.0 +4.4732428 -3.4047143 1.4859288 128.0 +3.9477057 -3.0432036 1.3211788 128.0 +4.1243305 -3.2198727 1.3852761 128.0 +4.3179159 -3.4138281 1.4556328 128.0 +4.3180499 -3.4571991 1.4626435 128.0 +3.5326464 -2.8642097 1.2082573 128.0 +3.5471833 -2.9122453 1.2190237 128.0 +3.3758724 -2.8064728 1.1674454 128.0 +3.3645144 -2.8321211 1.1694485 128.0 +3.2733848 -2.7899184 1.1444105 128.0 +4.1350965 -3.5682557 1.4446161 128.0 +4.0642729 -3.5508864 1.4278406 128.0 +3.5724759 -3.1601334 1.2655944 128.0 +3.4808929 -3.1174109 1.2405564 128.0 +3.458113 -3.1354592 1.2393045 128.0 +3.0600595 -2.8090074 1.1063527 128.0 +3.0867395 -2.8685887 1.1218762 128.0 +3.0676696 -2.886148 1.1213756 128.0 +3.0877626 -2.9409697 1.134896 128.0 +3.1323886 -3.0203354 1.1574303 128.0 +3.7733991 -3.6832476 1.395792 128.0 +3.3636804 -3.323921 1.2550784 128.0 +3.0009673 -3.0021684 1.1298884 128.0 +3.3668566 -3.409723 1.2713531 128.0 +2.9246888 -2.9985743 1.1153663 128.0 +3.6183331 -3.755434 1.3807693 128.0 +3.5905497 -3.7726562 1.3790165 128.0 +3.3206286 -3.5322323 1.2858752 128.0 +3.0485318 -3.2829728 1.1907308 128.0 +3.8405397 -4.1869688 1.5014523 128.0 +3.8108761 -4.206151 1.4999501 128.0 +2.3729031 -2.6517608 0.95236903 128.0 +2.3469689 -2.6553905 0.94861329 128.0 +2.3249006 -2.663178 0.94635987 128.0 +2.3059869 -2.6744604 0.9453584 128.0 +2.2713277 -2.6671858 0.93809736 128.0 +2.236222 -2.6588461 0.93058592 128.0 +2.1641839 -2.6054969 0.90805173 128.0 +2.1211355 -2.5857949 0.897035 128.0 +2.079021 -2.5664163 0.88626868 128.0 +2.2084043 -2.7605491 0.94635987 128.0 +2.2046292 -2.7907593 0.95186824 128.0 +2.3149121 -2.9675806 1.0054495 128.0 +3.2633018 -4.2364435 1.4150712 128.0 +3.1926994 -4.197825 1.3960423 128.0 +3.1697888 -4.2212067 1.3972943 128.0 +3.0982738 -4.1791396 1.3775142 128.0 +2.3520324 -3.213747 1.0620354 128.0 +1.9330635 -2.6756866 0.88576794 128.0 +1.9868879 -2.7860184 0.91706544 128.0 +1.9502475 -2.7704511 0.90830213 128.0 +1.9437094 -2.7974706 0.91305935 128.0 +1.9385556 -2.8269088 0.91856772 128.0 +1.9271433 -2.8475695 0.92132187 128.0 +1.9101725 -2.8601456 0.92157227 128.0 +1.9394766 -2.9429452 0.94360572 128.0 +1.8897105 -2.9060953 0.92858291 128.0 +1.8666147 -2.9094875 0.92607909 128.0 +1.8430308 -2.9118881 0.92332494 128.0 +1.8671818 -2.9904771 0.94385606 128.0 +1.8553988 -3.0125935 0.94711101 128.0 +1.8278298 -3.0090282 0.94260418 128.0 +1.8337166 -3.0608795 0.95487279 128.0 +1.7868266 -3.024564 0.94060117 128.0 +1.7809072 -3.05722 0.94711101 128.0 +1.7394484 -3.0286343 0.93534315 128.0 +1.8863882 -3.3315716 1.022225 128.0 +0 -0 0 128.0 +1.4369717 -2.6122806 0.80314255 128.0 +1.4735291 -2.7180698 0.83168584 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.6953447 -3.3189731 0.99593514 128.0 +1.0965726 -2.1799667 0.66318011 128.0 +1.0853254 -2.1909914 0.66443199 128.0 +1.633966 -3.3496165 0.99593514 128.0 +1.5517595 -3.2312949 0.95912927 128.0 +1.6382605 -3.465692 1.023477 128.0 +1.5438497 -3.3185594 0.97865891 128.0 +1.2078551 -2.638732 0.78261137 128.0 +1.4847172 -3.2966504 0.96714145 128.0 +1.4672071 -3.3118942 0.96889406 128.0 +1.4348674 -3.2933214 0.96113229 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.97323596 -2.3513341 0.69022113 128.0 +1.6123279 -3.9633372 1.1386517 128.0 +1.5948074 -3.990236 1.1434089 128.0 +1.5288911 -3.894511 1.1141145 128.0 +1.507056 -3.9092386 1.1156168 128.0 +1.4816699 -3.9147904 1.1146152 128.0 +1.4687496 -3.9537563 1.1228778 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.87459105 -2.5960238 0.74054754 128.0 +1.0474787 -3.1731563 0.89628386 128.0 +0.96601659 -2.987922 0.84420484 128.0 +0.87167054 -2.7538202 0.77910602 128.0 +0.80717862 -2.6056085 0.73754299 128.0 +1.2243811 -4.0391603 1.123629 128.0 +0.80872321 -2.7285576 0.76808935 128.0 +0.76069844 -2.6256037 0.73904526 128.0 +1.196525 -4.2258887 1.1679462 128.0 +0.92200762 -3.3345702 0.92683023 128.0 +0.9012773 -3.3392301 0.92657989 128.0 +0.83464855 -3.1696274 0.87975883 128.0 +0.81349808 -3.1681252 0.87800616 128.0 +0.75877279 -3.0321832 0.84044915 128.0 +1.0539333 -4.3235011 1.182969 128.0 +2.0416145 -8.6026802 2.3186927 128.0 +1.9798608 -8.5763693 2.3084271 128.0 +0.66208071 -2.951648 0.81440961 128.0 +0.65158743 -2.9906542 0.82367367 128.0 +0.75487435 -3.5695329 0.97565436 128.0 +0.71310914 -3.4773617 0.95011556 128.0 +0.5558427 -2.7979846 0.76984197 128.0 +1.5335064 -7.9712815 2.1314085 128.0 +0.47807437 -2.5714014 0.7084989 128.0 +0.4607462 -2.5657105 0.70624548 128.0 +0.58724916 -3.3888538 0.92157227 128.0 +0.47485933 -2.8442755 0.77785414 128.0 +1.3325311 -8.2898607 2.2035179 128.0 +1.2130492 -7.8539281 2.0873415 128.0 +0.46955323 -3.1704853 0.86098033 128.0 +0.39293984 -2.770721 0.75582069 128.0 +0.37736368 -2.7836328 0.7585749 128.0 +0.35592604 -2.7522912 0.74981159 128.0 +0.97570491 -7.921073 2.0961049 128.0 +0.3081733 -2.6372147 0.71876448 128.0 +0.307657 -2.7805083 0.75557035 128.0 +0.28182942 -2.6985717 0.73378724 128.0 +0.39901462 -4.0597434 1.0870734 128.0 +0.3707197 -4.0254807 1.077559 128.0 +0.23335418 -2.7177708 0.73754299 128.0 +0.32668567 -4.0972824 1.0950856 128.0 +0.21747991 -2.9579508 0.79913646 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.14161086 -2.5738151 0.69873405 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.072781116 -2.392653 0.65116185 128.0 +0.058500823 -2.4095082 0.65541834 128.0 +0.052129805 -2.8696148 0.77434886 128.0 +0.034097295 -2.8350301 0.76533514 128.0 +0.017010482 -2.8864968 0.77860528 128.0 +-0 -0 0 128.0 +-0.024089793 -3.7955611 1.0137122 128.0 +-0.036602817 -2.9250438 0.78862047 128.0 +-0.055410307 -2.9712272 0.80063874 128.0 +-0.074929088 -3.0230954 0.81415927 128.0 +-0.093208812 -3.0138695 0.8119058 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.15104902 -3.0599921 0.8244248 128.0 +-0.17314157 -3.1189411 0.83994842 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6342411 -3.684751 1.0745544 128.0 +-1.6393141 -3.6358187 1.0635377 128.0 +-1.5704551 -3.4267743 1.0069518 128.0 +-1.5044085 -3.2301292 0.95362091 128.0 +-1.5233718 -3.2190871 0.95312017 128.0 +-1.5577738 -3.2402201 0.96188343 128.0 +-4.0190325 -8.2313795 2.4010677 128.0 +-1.6008596 -3.2277989 0.9638865 128.0 +-1.6267302 -3.2300215 0.96739179 128.0 +-1.6178743 -3.1639469 0.9511171 128.0 +-1.63146 -3.1427891 0.94786215 128.0 +-1.6534204 -3.1378589 0.94936442 128.0 +-1.7452223 -3.2634056 0.98917484 128.0 +-4.216866 -7.7712507 2.3186927 128.0 +-0 -0 0 128.0 +-1.8923361 -3.3870971 1.0354952 128.0 +-1.9006737 -3.3535218 1.0289853 128.0 +-4.8805599 -8.49053 2.5648162 128.0 +-1.9977565 -3.4261312 1.057779 128.0 +-1.9399071 -3.2804658 1.0177182 128.0 +-1.9604969 -3.2693315 1.0179685 128.0 +-2.0524354 -3.3755419 1.0537729 128.0 +-0 -0 0 128.0 +-5.2436328 -8.3913469 2.5911062 128.0 +-5.2287126 -8.2543249 2.5590575 128.0 +-4.634335 -7.2175713 2.250339 128.0 +-4.7556286 -7.3074737 2.2868943 128.0 +-0 -0 0 128.0 +-2.3132961 -3.4605799 1.1086061 128.0 +-0 -0 0 128.0 +-2.3407979 -3.4103785 1.1018459 128.0 +-2.3030949 -3.3116932 1.0753056 128.0 +-2.3233716 -3.2974994 1.0753056 128.0 +-2.3458104 -3.2863336 1.0763071 128.0 +-2.3897543 -3.3048303 1.0868231 128.0 +-5.5406957 -7.5649838 2.4571528 128.0 +-5.6095047 -7.5611691 2.4669178 128.0 +-5.6726594 -7.5490541 2.4741788 128.0 +-0 -0 0 128.0 +-5.752459 -7.4627705 2.4689207 128.0 +-5.8207788 -7.4563336 2.478435 128.0 +-5.8898354 -7.4500985 2.4881999 128.0 +-5.9433031 -7.4236441 2.4914548 128.0 +-5.9302139 -7.3148379 2.4674184 128.0 +-6.5487118 -7.9772449 2.7012734 128.0 +-6.5987735 -7.9384017 2.7017741 128.0 +-6.6230459 -7.8688745 2.6920092 128.0 +-6.6636682 -7.8192458 2.6890047 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-8.7945089 -9.3487854 3.3515103 128.0 +-8.832345 -9.2743158 3.3442492 128.0 +-8.902523 -9.2338867 3.3492568 128.0 +-8.9089746 -9.1278162 3.3307288 128.0 +-9.0798092 -9.1893702 3.3730428 128.0 +-9.3236198 -9.3210402 3.4416471 128.0 +-0 -0 0 128.0 +-9.1053505 -8.8820915 3.3217149 128.0 +-10.456363 -10.075586 3.7874217 128.0 +-10.51869 -10.011905 3.7876723 128.0 +-10.593326 -9.9597759 3.7924294 128.0 +-10.531513 -9.7806082 3.7491136 128.0 +-8.9640198 -8.2229357 3.1779969 128.0 +-8.9856091 -8.1417751 3.1679816 128.0 +-8.9834566 -8.039999 3.1499543 128.0 +-11.038198 -9.7577467 3.8422551 128.0 +-10.24754 -8.9473553 3.550312 128.0 +-9.13799 -7.8802357 3.1527085 128.0 +-11.153289 -9.4995556 3.8209727 128.0 +-10.08007 -8.479249 3.4386425 128.0 +-9.5979767 -7.9736419 3.25912 128.0 +-10.172137 -8.3457012 3.4348867 128.0 +-9.7447491 -7.8954864 3.275645 128.0 +-10.585231 -8.4694529 3.5380433 128.0 +-11.554635 -9.1294146 3.8405023 128.0 +-10.899801 -8.5038862 3.6073985 128.0 +-11.599073 -8.9355288 3.8187194 128.0 +-11.673717 -8.8794298 3.8252292 128.0 +-11.687725 -8.777401 3.8122094 128.0 +-11.765471 -8.7233973 3.8199711 128.0 +-10.349319 -7.5753779 3.3490064 128.0 +-10.428563 -7.5355492 3.3595223 128.0 +-10.479333 -7.4747925 3.3610246 128.0 +-11.381516 -8.0134382 3.6319358 128.0 +-11.439216 -7.9495292 3.63469 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-11.349335 -7.5811281 3.5618293 128.0 +-11.36088 -7.4884353 3.5510631 128.0 +-11.422846 -7.4291425 3.5560706 128.0 +-11.413623 -7.3238807 3.5392952 128.0 +-0 -0 0 128.0 +-6.1790481 -3.8585339 1.9160817 128.0 +-6.2174444 -3.8296876 1.9205885 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.024742 -9.33671 4.8285017 128.0 +-16.070818 -9.2319384 4.8252468 128.0 +-16.189501 -9.1684618 4.8437748 128.0 +-16.42889 -9.171361 4.8981075 128.0 +-16.30673 -8.9723692 4.8455276 128.0 +-6.6942406 -3.6297469 2.0014613 128.0 +-6.4747381 -3.4594738 1.9306037 128.0 +-7.4792929 -3.9374752 2.21804 128.0 +-6.3663063 -3.3017476 1.8867872 128.0 +-6.7045732 -3.4251649 1.9791774 128.0 +-6.9373441 -3.4905849 2.0405204 128.0 +-15.636847 -7.7484837 4.5453219 128.0 +-15.714549 -7.6672511 4.5540853 128.0 +-7.2107363 -3.4633276 2.100862 128.0 +-7.1101923 -3.3614943 2.0660594 128.0 +-7.0156975 -3.2642951 2.0332594 128.0 +-7.0435171 -3.2248137 2.0355129 128.0 +-7.2511888 -3.2662365 2.0888438 128.0 +-0 -0 0 128.0 +-7.3386507 -3.1978946 2.1023643 128.0 +-7.3928394 -3.1676776 2.1121292 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-6.9245663 -2.4285681 1.9298525 128.0 +-7.1050467 -2.4430215 1.9751713 128.0 +-7.107059 -2.3950508 1.971666 128.0 +-9.3445282 -3.0854781 2.5770848 128.0 +-13.265327 -4.2901711 3.6376946 128.0 +-7.6391158 -2.4187386 2.1043675 128.0 +-7.638092 -2.3669479 2.100111 128.0 +-8.9393663 -2.7102587 2.4478889 128.0 +-8.9697514 -2.6594856 2.4516444 128.0 +-7.5929585 -2.2006171 2.0765753 128.0 +-12.601976 -3.5689392 3.4193633 128.0 +-9.163681 -2.5344553 2.4909542 128.0 +-9.1846685 -2.4796946 2.4924564 128.0 +-9.0414925 -2.381609 2.4501421 128.0 +-8.9246569 -2.292361 2.4150889 128.0 +-9.0597067 -2.26789 2.4473879 128.0 +-11.040213 -2.6918733 2.9709325 128.0 +-8.9935989 -2.1344068 2.4226005 128.0 +-13.23641 -3.0558498 3.5453043 128.0 +-17.454811 -3.9172132 4.658494 128.0 +-17.139875 -3.7362123 4.5688577 128.0 +-17.046921 -3.6065235 4.5383115 128.0 +-12.414035 -2.5467827 3.3094463 128.0 +-12.338269 -2.4524417 3.2854099 128.0 +-12.253262 -2.3574803 3.25912 128.0 +-17.292105 -3.2171929 4.5808759 128.0 +-17.389654 -3.1250734 4.6014071 128.0 +-13.398255 -2.3229203 3.5488098 128.0 +-12.436339 -2.0776002 3.2929213 128.0 +-12.45172 -2.0017142 3.2936723 128.0 +-12.437935 -1.9212829 3.2869122 128.0 +-12.420759 -1.8406705 3.2794008 128.0 +-12.41169 -1.7615659 3.2741427 128.0 +-12.4309 -1.6865478 3.2763963 128.0 +-12.443894 -1.6106143 3.2771473 128.0 +-18.299534 -2.2546167 4.8004594 128.0 +-17.60914 -2.0599339 4.6171813 128.0 +-17.600279 -1.9495022 4.6116729 128.0 +-17.353853 -1.8144846 4.5445709 128.0 +-17.311668 -1.7027558 4.5307999 128.0 +-12.49378 -1.1514089 3.276897 128.0 +-17.256987 -1.4837989 4.5115209 128.0 +-12.503109 -0.99769616 3.2758954 128.0 +-12.675067 -0.93319172 3.3189609 128.0 +-12.530831 -0.84529692 3.2801518 128.0 +-12.453644 -0.76335597 3.2588696 128.0 +-12.393326 -0.68335426 3.242094 128.0 +-12.512357 -0.61293787 3.2718894 128.0 +-13.101074 -0.56123835 3.4233692 128.0 +-13.129426 -0.48176482 3.4298792 128.0 +-13.166004 -0.40223086 3.4386425 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-15.93369 14.45571 5.3166413 128.0 +-15.846123 14.55452 5.3171186 128.0 +-15.966307 14.846572 5.387486 128.0 +-15.539049 14.628056 5.2741823 128.0 +-15.397684 14.674214 5.2567697 128.0 +-15.276605 14.738747 5.246274 128.0 +-14.339737 14.005674 4.9557405 128.0 +-14.212098 14.052427 4.9414282 128.0 +-14.150314 14.164101 4.9500155 128.0 +-14.029716 14.216786 4.9383273 128.0 +-13.951709 14.31234 4.9416666 128.0 +-13.906062 14.441751 4.9566946 128.0 +-14.897361 15.662586 5.3416872 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-14.452336 15.765907 5.2856321 128.0 +-0 0 0 128.0 +-14.19563 15.872578 5.262733 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-13.445587 16.399881 5.2412648 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.3955259 13.354053 4.0428729 128.0 +-9.3898439 13.521535 4.0757904 128.0 +-9.0805273 13.248848 3.9775145 128.0 +-8.8777418 13.124925 3.9243217 128.0 +-8.6132107 12.903704 3.8429818 128.0 +-9.5674076 14.525702 4.304544 128.0 +-9.4992657 14.616707 4.3140855 128.0 +-10.096014 15.745707 4.626564 128.0 +-8.0421772 12.713133 3.727293 128.0 +-7.9383168 12.721044 3.7153664 128.0 +-8.0087395 13.011013 3.7850182 128.0 +-7.8622379 12.950327 3.7535317 128.0 +-7.900846 13.195804 3.8100641 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.8338146 13.843842 3.9393492 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.4888539 13.821744 3.8935509 128.0 +-7.5904918 14.216973 3.9908724 128.0 +-7.8426099 14.908768 4.170011 128.0 +-7.5713806 14.60998 4.0741205 128.0 +-7.4511309 14.596478 4.057662 128.0 +-7.4115868 14.741705 4.085093 128.0 +-7.5579491 15.26559 4.2162867 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.0637498 14.953401 4.0943961 128.0 +-6.8584776 14.752522 4.0283222 128.0 +-6.7722721 14.804042 4.0309463 128.0 +-6.806438 15.123397 4.1058455 128.0 +-6.7288437 15.19951 4.1151485 128.0 +-6.6583233 15.293046 4.1292219 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.87184 13.635846 3.5889435 128.0 +-4.7672119 13.605908 3.5734389 128.0 +-4.5476923 13.239037 3.4706309 128.0 +-4.4477868 13.211467 3.4563191 128.0 +-0 0 0 128.0 +-4.3148746 13.356543 3.4799337 128.0 +-4.2527485 13.445731 3.4961541 128.0 +-4.534205 14.64793 3.7986145 128.0 +-4.3648872 14.413365 3.731348 128.0 +-3.9331322 13.280557 3.4343739 128.0 +-3.8450909 13.282052 3.4286492 128.0 +-4.3406262 15.346328 3.9496062 128.0 +-3.7329938 13.513584 3.4758787 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.4103539 13.641639 3.4861357 128.0 +-3.5828948 14.71535 3.7523391 128.0 +-3.4529102 14.569796 3.7101185 128.0 +-3.3856897 14.687235 3.7344489 128.0 +-3.3799863 15.084898 3.8293853 128.0 +-3.2582552 14.971553 3.795752 128.0 +-2.8672135 13.574534 3.4400988 128.0 +-2.647716 12.926844 3.2733638 128.0 +-2.8702738 14.465065 3.6545403 128.0 +-2.7673657 14.408968 3.6361732 128.0 +-2.6734076 14.396077 3.6287787 128.0 +-2.3615534 13.165725 3.3177311 128.0 +-2.3571889 13.622067 3.4279335 128.0 +-2.2815428 13.684171 3.4398601 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-1.9738768 13.939891 3.4904292 128.0 +-1.8901285 13.965213 3.4937687 128.0 +-1.8006761 13.947653 3.4866128 128.0 +-1.7104453 13.920847 3.4773099 128.0 +-1.6195995 13.884779 3.4658604 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.60667741 13.965749 3.4658604 128.0 +0.69153911 13.945274 3.4618053 128.0 +0.77573943 13.916528 3.455842 128.0 +0.858051 13.862073 3.4436767 128.0 +0.94170439 13.836201 3.4386675 128.0 +1.0233454 13.786581 3.4279335 128.0 +1.1023095 13.710346 3.4107592 128.0 +1.2655667 14.616652 3.6359346 128.0 +1.3313466 14.351396 3.5724847 128.0 +1.3586968 13.730255 3.4212546 128.0 +1.6192689 15.397324 3.8351102 128.0 +1.7119935 15.371655 3.8312936 128.0 +0 0 0 128.0 +1.8524985 14.962056 3.7354031 128.0 +2.0614378 15.850826 3.958432 128.0 +1.9404377 14.237694 3.5617509 128.0 +2.0014346 14.04093 3.5159523 128.0 +2.062808 13.862211 3.4746861 128.0 +2.1449969 13.831059 3.470154 128.0 +2.4251742 15.027539 3.7711833 128.0 +2.3677473 14.12071 3.5491085 128.0 +2.4338603 13.988237 3.519769 128.0 +2.4974029 13.849753 3.4889982 128.0 +2.5853672 13.850398 3.4930532 128.0 +2.7073133 14.02593 3.5409985 128.0 +2.9175696 14.631906 3.6969993 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.272347 14.135326 3.5960996 128.0 +3.3482227 14.069633 3.58465 128.0 +3.4155724 13.971471 3.5650902 128.0 +3.9540949 15.753993 4.0218816 128.0 +3.5177238 13.660481 3.4971082 128.0 +3.5409596 13.409541 3.438906 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +4.5051465 15.160094 3.9169271 128.0 +4.6415739 15.275257 3.9536612 128.0 +4.5859737 14.766089 3.830101 128.0 +4.6750212 14.733045 3.8289082 128.0 +4.779109 14.746576 3.8398807 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.294235 -1.4326347 4.7844734 128.0 +19.332514 -1.5548126 4.7961617 128.0 +19.228762 -1.6652721 4.7730236 128.0 +18.50552 -1.7170559 4.5972247 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.181232 -2.025121 4.5256643 128.0 +18.793447 -2.2101805 4.680234 128.0 +18.848925 -2.3340502 4.6974087 128.0 +18.851582 -2.4519169 4.7017021 128.0 +18.891029 -2.5750213 4.7152987 128.0 +17.573132 -2.5052223 4.3923244 128.0 +17.543982 -2.6109996 4.3889847 128.0 +17.562178 -2.723959 4.397572 128.0 +0 -0 0 128.0 +19.158476 -3.2128987 4.8037944 128.0 +25.040569 -4.357832 6.2753072 128.0 +18.057728 -3.2565513 4.5392609 128.0 +17.27943 -3.225738 4.3498654 128.0 +17.240242 -3.3280194 4.3450947 128.0 +17.248068 -3.4394403 4.3522506 128.0 +17.254223 -3.5508864 4.3591681 128.0 +19.099747 -4.0531354 4.828125 128.0 +0 -0 0 128.0 +19.822615 -4.4614744 5.0230069 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9573369 -2.2582183 2.0639992 128.0 +7.9423985 -2.30673 2.0637608 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.005579 -2.5397322 2.095247 128.0 +7.9815311 -2.5861106 2.0931003 128.0 +7.958137 -2.6325946 2.091192 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.53302 -7.6872053 4.9605112 128.0 +0 -0 0 128.0 +18.380178 -7.8895364 4.9452448 128.0 +0 -0 0 128.0 +18.431097 -8.1806927 4.9853187 128.0 +19.130293 -8.631978 5.1873565 128.0 +19.004587 -8.7159958 5.1677966 128.0 +19.0819 -8.8935757 5.2033381 128.0 +18.994495 -8.9951124 5.1945124 128.0 +19.106091 -9.1919155 5.2400723 128.0 +0 -0 0 128.0 +18.990112 -9.4248209 5.2395949 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +14.19519 -7.4844346 3.9739366 128.0 +14.141294 -7.5672698 3.9717898 128.0 +14.102276 -7.6580682 3.9739366 128.0 +3.5101979 -1.9331498 1.0165988 128.0 +3.540652 -1.9783486 1.0285255 128.0 +3.4701614 -1.9669763 1.0120666 128.0 +3.4714949 -1.9959806 1.0158832 128.0 +3.4709253 -2.0240963 1.0192226 128.0 +3.4784982 -2.0572257 1.0249474 128.0 +14.57066 -8.7427568 4.2060294 128.0 +3.4214656 -2.0805743 1.0158832 128.0 +3.2747416 -2.0189254 0.97724074 128.0 +3.1956 -1.997269 0.95791954 128.0 +4.1863685 -2.6528018 1.2496459 128.0 +3.4445372 -2.2122169 1.0378282 128.0 +3.2331595 -2.1045139 0.97986466 128.0 +3.2242382 -2.1269875 0.98105729 128.0 +3.2571354 -2.1775095 0.9946537 128.0 +3.3257053 -2.2530353 1.0189841 128.0 +3.2597866 -2.2376597 1.0034795 128.0 +3.6572981 -2.5438647 1.1265627 128.0 +9.1021357 -6.4164433 2.767673 128.0 +9.0625935 -6.4721723 2.767673 128.0 +3.9277022 -2.8407571 1.2229302 128.0 +3.9297788 -2.8791568 1.2288935 128.0 +3.5206258 -2.6125927 1.1091498 128.0 +4.6206179 -3.4735103 1.4521608 128.0 +4.6015358 -3.5035617 1.4528764 128.0 +3.9455938 -3.0423541 1.2560863 128.0 +3.984247 -3.1113484 1.2739764 128.0 +4.0442853 -3.1984043 1.2987839 128.0 +3.4493613 -2.7622674 1.1177369 128.0 +3.4217896 -2.7748141 1.1143975 128.0 +3.6500671 -2.99735 1.192398 128.0 +3.7973442 -3.1575704 1.2453524 128.0 +3.3344831 -2.8072965 1.102948 128.0 +3.4716222 -2.959415 1.1528014 128.0 +4.1288681 -3.5639679 1.3720137 128.0 +4.0374684 -3.5285096 1.349353 128.0 +3.5627203 -3.1521969 1.2007467 128.0 +3.5903196 -3.2161272 1.2162513 128.0 +3.3979084 -3.0814805 1.1590033 128.0 +3.1851206 -2.9242337 1.0943607 128.0 +3.1898744 -2.964885 1.1019938 128.0 +3.1716223 -2.9844019 1.1019938 128.0 +3.1595774 -3.0098367 1.1041405 128.0 +3.0746591 -2.9651062 1.0814799 128.0 +3.9289517 -3.8362329 1.3810779 128.0 +3.7803543 -3.7366731 1.3379034 128.0 +3.3215415 -3.3235092 1.1864346 128.0 +2.804523 -2.8405838 1.0127822 128.0 +7.4261637 -7.6173339 2.6453052 128.0 +3.1978364 -3.3197229 1.1644895 128.0 +2.4345362 -2.5581679 0.89971739 128.0 +2.4148042 -2.5688109 0.89828616 128.0 +3.062206 -3.2982931 1.1377738 128.0 +2.3686631 -2.5825012 0.89303845 128.0 +3.1120977 -3.4356916 1.1709299 128.0 +2.2778845 -2.5454984 0.87133193 128.0 +2.2557938 -2.5521488 0.86894655 128.0 +2.2841425 -2.6164358 0.88540536 128.0 +3.0065591 -3.4874892 1.1632968 128.0 +3.1569276 -3.7077749 1.2284164 128.0 +2.2249732 -2.6453979 0.88135034 128.0 +2.2111804 -2.6619892 0.88230443 128.0 +2.1732566 -2.6492205 0.87395579 128.0 +2.1587937 -2.6647699 0.8746714 128.0 +2.1545305 -2.6931365 0.87944204 128.0 +2.1692557 -2.7459421 0.89184576 128.0 +2.1577396 -2.766094 0.8939926 128.0 +2.1531658 -2.7954423 0.89900178 128.0 +2.1359727 -2.8086014 0.89900178 128.0 +2.156585 -2.8721449 0.91450649 128.0 +2.0984557 -2.8306999 0.89780915 128.0 +2.0420644 -2.7902193 0.88158888 128.0 +2.0186524 -2.7940354 0.87896496 128.0 +1.9873801 -2.786598 0.87300164 128.0 +2.0048871 -2.8479857 0.88779074 128.0 +1.9823897 -2.8530548 0.8856439 128.0 +1.9571608 -2.8539495 0.88230443 128.0 +1.9434208 -2.8715358 0.88397419 128.0 +0 -0 0 128.0 +2.4549816 -3.7256889 1.1282325 128.0 +2.4347208 -3.7447538 1.1294252 128.0 +1.8765575 -2.9249053 0.88588244 128.0 +1.8715529 -2.9568832 0.89184576 128.0 +1.8533746 -2.9683111 0.89184576 128.0 +1.8590493 -3.0184991 0.90305686 128.0 +1.9437951 -3.2000332 0.95195621 128.0 +1.9520568 -3.2585614 0.96531409 128.0 +1.917709 -3.2462254 0.95839661 128.0 +1.9060596 -3.2721992 0.9624517 128.0 +1.8656437 -3.248457 0.95243329 128.0 +1.7949862 -3.1702487 0.92714876 128.0 +1.8000969 -3.2253065 0.93955249 128.0 +1.7531404 -3.1869309 0.92571753 128.0 +1.7252265 -3.1822579 0.92142391 128.0 +1.3878291 -2.597368 0.75564319 128.0 +1.7642512 -3.3518836 0.96269023 128.0 +1.7552674 -3.3850646 0.9688921 128.0 +1.7375543 -3.4018259 0.9705618 128.0 +1.7114146 -3.4020112 0.96769941 128.0 +1.6844764 -3.4002633 0.96435994 128.0 +0 -0 0 128.0 +1.5863277 -3.3033533 0.93239647 128.0 +1.4884734 -3.1488161 0.88779074 128.0 +1.57719 -3.3903813 0.95076352 128.0 +1.6217936 -3.5430644 0.98940599 128.0 +1.2927791 -2.8701463 0.80549669 128.0 +1.580158 -3.5671396 0.99059862 128.0 +1.4256804 -3.2722411 0.90902019 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.96395534 -2.3687832 0.66046834 128.0 +0.94508135 -2.3638306 0.65760595 128.0 +1.551405 -3.9526522 1.075278 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.4706157 -3.9595981 1.0697918 128.0 +0.90668285 -2.4866107 0.6824134 128.0 +1.1494747 -3.214617 0.87085485 128.0 +0 -0 0 128.0 +1.2862592 -3.7419133 1.0041951 128.0 +0.8246302 -2.4464459 0.66643167 128.0 +1.1918876 -3.6107724 0.96626824 128.0 +0.96377289 -2.9803653 0.80168015 128.0 +0.9419542 -2.9751112 0.79881775 128.0 +0.88922995 -2.8695078 0.7701937 128.0 +1.281041 -4.2272906 1.1172599 128.0 +0.74064112 -2.497489 0.67215645 128.0 +0.80656421 -2.7827754 0.74395502 128.0 +0.8639906 -3.0511992 0.81122148 128.0 +0.92047697 -3.3288474 0.88063473 128.0 +0.89700121 -3.3231807 0.87777233 128.0 +0.81953746 -3.1116672 0.82267106 128.0 +0.80163532 -3.1213405 0.82386374 128.0 +0.75633281 -3.021621 0.79738653 128.0 +2.1605661 -8.8717213 2.2751014 128.0 +1.8978877 -8.0059814 2.0532651 128.0 +0.68663001 -2.9744654 0.78212041 128.0 +0.66942739 -2.9833605 0.78331304 128.0 +1.8414493 -8.4589901 2.1586969 128.0 +1.8061622 -8.548995 2.1784952 128.0 +1.5088332 -7.3640065 1.8786587 128.0 +0.55387694 -2.7864659 0.73012012 128.0 +1.6040061 -8.3490391 2.1205316 128.0 +0.50563943 -2.7176218 0.71127594 128.0 +1.5915722 -8.8708935 2.2460003 128.0 +0.49525714 -2.8566351 0.74443209 128.0 +1.3017317 -7.8044281 1.9757419 128.0 +1.3402274 -8.3511629 2.1097977 128.0 +1.217099 -7.8927603 1.9938704 128.0 +0.43224317 -2.9169247 0.75659734 128.0 +1.203428 -8.495573 2.1398528 128.0 +1.1135279 -8.2237091 2.0706782 128.0 +1.01533 -7.8605371 1.9790813 128.0 +0.95086533 -7.7345653 1.9464022 128.0 +0.31063217 -2.6548636 0.6888538 128.0 +0.3111656 -2.8092332 0.72654212 128.0 +0.28979847 -2.7714872 0.71676224 128.0 +0.26559326 -2.6997585 0.69863367 128.0 +0.27182609 -2.9498749 0.75993681 128.0 +0.25959918 -3.0201867 0.77687263 128.0 +0.65546143 -8.2416553 2.063045 128.0 +0.21386594 -2.9049828 0.74777156 128.0 +0.5552488 -8.2636127 2.066623 128.0 +0.17436479 -2.8443816 0.7322669 128.0 +0 -0 0 128.0 +0.13520572 -2.7590079 0.71079892 128.0 +0 -0 0 128.0 +0.091548368 -2.4906616 0.64448661 128.0 +0.11588217 -3.8054953 0.96746087 128.0 +0.063097827 -2.5799453 0.66619313 128.0 +0.044785943 -2.4414339 0.63208288 128.0 +0.032754149 -2.6931691 0.69386303 128.0 +0 -0 0 128.0 +-0 -0 0 128.0 +-0.018783344 -2.9865918 0.76590014 128.0 +-0.037270185 -2.9990442 0.76900107 128.0 +-0.056131396 -3.0230329 0.77496439 128.0 +-0.075410187 -3.0517564 0.78212041 128.0 +-0.094801009 -3.0725908 0.78736812 128.0 +-0 -0 0 128.0 +-0.13452624 -3.1177666 0.79881775 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.3709383 -3.6173697 0.98248851 128.0 +-1.3938082 -3.6107013 0.98296559 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.4905584 -3.5960393 0.98845184 128.0 +-1.51184 -3.5850363 0.98797476 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6177635 -3.6471367 1.0123051 128.0 +-1.6469024 -3.6521895 1.0163603 128.0 +-1.6656368 -3.6340711 1.0142134 128.0 +-1.5906628 -3.4151745 0.957681 128.0 +-1.5334378 -3.2403486 0.91283673 128.0 +-1.5490807 -3.2221274 0.91045141 128.0 +-1.5739393 -3.223032 0.91331381 128.0 +-1.5962765 -3.2185328 0.91474497 128.0 +-1.6116239 -3.2000058 0.91235965 128.0 +-1.6276891 -3.1831408 0.91045141 128.0 +-1.642265 -3.163614 0.90782756 128.0 +-1.6675346 -3.1646447 0.91092849 128.0 +-1.858309 -3.4745774 1.00014 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-4.9883356 -8.9239759 2.5434515 128.0 +-1.9094806 -3.3687961 0.98344266 128.0 +-1.9940435 -3.468128 1.0149291 128.0 +-1.9330565 -3.3149147 0.97485542 128.0 +-1.9414897 -3.2829332 0.96913064 128.0 +-1.9930791 -3.3234186 0.98415822 128.0 +-0 -0 0 128.0 +-4.5520983 -7.3808045 2.1622751 128.0 +-5.1817794 -8.2872458 2.4330103 128.0 +-5.2408514 -8.2684183 2.4368269 128.0 +-4.8184395 -7.5000091 2.2219083 128.0 +-2.1951485 -3.3723092 1.0206538 128.0 +-2.2152643 -3.3579659 1.0204153 128.0 +-2.2406864 -3.3515747 1.0225621 128.0 +-2.2666583 -3.3458016 1.0249474 128.0 +-2.2750487 -3.31422 1.0196997 128.0 +-5.4312844 -7.8061948 2.3681293 128.0 +-5.3850636 -7.6393843 2.3280556 128.0 +-5.4120803 -7.5785403 2.3197072 128.0 +-5.445385 -7.5270944 2.3142209 128.0 +-5.4897456 -7.4911904 2.3135052 128.0 +-5.5813427 -7.5189619 2.3323493 128.0 +-5.6548071 -7.5210524 2.3435605 128.0 +-5.6931992 -7.4761705 2.3404596 128.0 +-5.7739625 -7.4864631 2.354533 128.0 +-5.8287582 -7.4623728 2.3581109 128.0 +-5.8461156 -7.3906736 2.3469 128.0 +-6.4214711 -8.016283 2.5551395 128.0 +-6.4827747 -7.9918137 2.5599103 128.0 +-6.56498 -7.9924054 2.5727911 128.0 +-6.5356402 -7.8579059 2.5427358 128.0 +-6.635036 -7.8785605 2.5622957 128.0 +-6.7279968 -7.8901615 2.5792315 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.1599503 -9.6121922 3.2936392 128.0 +-9.1553707 -9.4901152 3.2712171 128.0 +-9.1808558 -9.4004145 3.2597675 128.0 +-9.3489838 -9.4557695 3.2984099 128.0 +-9.0392447 -9.0310459 3.1707945 128.0 +-9.1636152 -9.0436211 3.1946478 128.0 +-9.2015476 -8.9702778 3.1886845 128.0 +-9.2473202 -8.9048939 3.1855836 128.0 +-10.466419 -9.9555988 3.5803564 128.0 +-10.524478 -9.8885307 3.5794022 128.0 +-10.602751 -9.8402815 3.5853655 128.0 +-10.673669 -9.7848825 3.5889435 128.0 +-9.0201006 -8.1679659 3.021234 128.0 +-9.0490551 -8.0936928 3.0143166 128.0 +-9.0730715 -8.0155153 3.0059679 128.0 +-9.1081791 -7.9475627 3.0014358 128.0 +-11.077679 -9.5466843 3.6242466 128.0 +-10.274445 -8.7452927 3.346355 128.0 +-9.7108717 -8.1634665 3.1483724 128.0 +-10.219585 -8.4845734 3.2948318 128.0 +-9.7029209 -7.9556437 3.1142621 128.0 +-10.553902 -8.5455055 3.3678231 128.0 +-9.7482386 -7.7947392 3.0980418 128.0 +-9.8324699 -7.7636619 3.1094913 128.0 +-9.9028988 -7.7210965 3.1166472 128.0 +-11.613118 -8.9402437 3.6321182 128.0 +-11.692498 -8.8876219 3.6397512 128.0 +-11.667581 -8.7562599 3.6154208 128.0 +-10.418704 -7.7196908 3.2173085 128.0 +-10.383569 -7.5954232 3.1922624 128.0 +-11.758276 -8.4905586 3.5946684 128.0 +-11.340389 -8.0834627 3.4529796 128.0 +-11.352444 -7.9874654 3.4417684 128.0 +-0 -0 0 128.0 +-11.438392 -7.8398666 3.4384289 128.0 +-11.346309 -7.6748719 3.3969243 128.0 +-11.360877 -7.5835438 3.3873827 128.0 +-11.178477 -7.3630686 3.3201163 128.0 +-11.524743 -7.4901218 3.4083738 128.0 +-0 -0 0 128.0 +-16.154535 -10.218793 4.7274637 128.0 +-16.208693 -10.114338 4.7250786 128.0 +-16.145563 -9.9378338 4.6890597 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.09251 -9.3685951 4.6060505 128.0 +-6.4541826 -3.7054133 1.8602916 128.0 +-16.263741 -9.2029276 4.6222706 128.0 +-11.349741 -6.3310995 3.2244644 128.0 +-11.413905 -6.2753735 3.2316206 128.0 +-11.473543 -6.2167854 3.2375839 128.0 +-6.5056949 -3.4741335 1.8438329 128.0 +-6.5045424 -3.4223964 1.837631 128.0 +-6.5055876 -3.3721452 1.8321446 128.0 +-7.4292016 -3.7930646 2.0811737 128.0 +-7.4662185 -3.7543869 2.08499 128.0 +-7.4690967 -3.6985955 2.0795038 128.0 +-16.126154 -7.8611112 4.4388385 128.0 +-7.043746 -3.381058 1.9514114 128.0 +-7.0020123 -3.3083286 1.9344755 128.0 +-7.0186577 -3.2636654 1.9335214 128.0 +-7.2089977 -3.2984962 1.9795583 128.0 +-7.1679945 -3.2267041 1.9630996 128.0 +-7.1610169 -3.1708696 1.9559436 128.0 +-7.1830096 -3.1280334 1.9566592 128.0 +-17.039738 -7.2946162 4.5850592 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-17.843155 -6.872942 4.7288952 128.0 +-9.5460978 -3.6105046 2.5391579 128.0 +-6.9331818 -2.5740821 1.848842 128.0 +-9.5431461 -3.4761417 2.5269926 128.0 +-6.9358964 -2.4786808 1.8414475 128.0 +-7.099453 -2.4880862 1.8800899 128.0 +-7.1063194 -2.4416392 1.8779432 128.0 +-7.6163435 -2.5646501 2.006274 128.0 +-7.5028167 -2.4752913 1.9728794 128.0 +-7.5631461 -2.4438329 1.9845675 128.0 +-7.6307778 -2.4140689 1.9981639 128.0 +-7.6027713 -2.3539953 1.9871914 128.0 +-9.5159817 -2.8821986 2.4745152 128.0 +-12.615694 -3.7362895 3.264061 128.0 +-9.0077124 -2.6080825 2.3356888 128.0 +-9.0188742 -2.5514419 2.334496 128.0 +-8.8714781 -2.4510756 2.2929914 128.0 +-8.8132133 -2.3768802 2.2743857 128.0 +-12.325208 -3.2425737 3.1626842 128.0 +-13.062623 -3.3509445 3.3446853 128.0 +-12.302831 -3.0757759 3.1471796 128.0 +-13.167869 -3.2062407 3.3611441 128.0 +-0 -0 0 128.0 +-9.1417208 -2.107796 2.336643 128.0 +-17.794241 -3.9868371 4.5113525 128.0 +-17.612448 -3.8327811 4.4595909 128.0 +-12.465667 -2.6330962 3.1617301 128.0 +-12.771765 -2.6159668 3.2344828 128.0 +-12.750425 -2.5301828 3.2251801 128.0 +-17.281569 -3.3188355 4.3546362 128.0 +-13.299939 -2.4699411 3.3549423 128.0 +-17.342024 -3.1102843 4.3598838 128.0 +-0 -0 0 128.0 +-17.296505 -2.8835087 4.3393698 128.0 +-17.387707 -2.7891638 4.3577371 128.0 +-17.798016 -2.7430463 4.4555354 128.0 +-16.562719 -2.4487998 4.1447268 128.0 +-0 -0 0 128.0 +-16.505871 -2.2337801 4.123497 128.0 +-16.51445 -2.1318386 4.1223044 128.0 +-18.18223 -2.2336771 4.5318666 128.0 +-18.064407 -2.1067801 4.4994259 128.0 +-17.747835 -1.9595779 4.4180861 128.0 +-12.720368 -1.325868 3.1736569 128.0 +-17.263128 -1.6919402 4.2928557 128.0 +-12.762758 -1.1721541 3.1803358 128.0 +-12.797771 -1.0962223 3.1872532 128.0 +-17.338783 -1.3776617 4.304544 128.0 +-12.558438 -0.92065406 3.1252346 128.0 +-18.100481 -1.2148103 4.4882145 128.0 +-17.995152 -1.0968784 4.4605451 128.0 +-13.072644 -0.71667093 3.2480793 128.0 +-13.146635 -0.63983798 3.2652538 128.0 +-13.165837 -0.55981845 3.2690701 128.0 +-13.198139 -0.48008031 3.2762263 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-36.584564 30.398211 11.136353 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-16.173849 14.65772 5.1279888 128.0 +-16.040552 14.717184 5.1143489 128.0 +-16.010597 14.871662 5.1336718 128.0 +-15.872931 14.92626 5.1188955 128.0 +-15.529244 14.783669 5.0377383 128.0 +-15.359006 14.802316 5.0120497 128.0 +-14.443298 14.091784 4.7431169 128.0 +-14.339932 14.163718 4.7376609 128.0 +-14.256887 14.255571 4.7390251 128.0 +-14.30466 14.479948 4.7840366 128.0 +-14.057752 14.405755 4.7312956 128.0 +-14.981514 15.541999 5.0718379 128.0 +-14.878481 15.625874 5.0693374 128.0 +-14.757636 15.690626 5.060926 128.0 +-13.951194 15.016801 4.8174543 128.0 +-13.245785 14.434145 4.6058087 128.0 +-13.167434 14.526692 4.609446 128.0 +-0 0 0 128.0 +-13.046238 14.752836 4.6299062 128.0 +-12.978533 14.859012 4.6380901 128.0 +-13.446264 15.586491 4.837914 128.0 +-13.379428 15.702798 4.8483715 128.0 +-13.396943 15.920204 4.8897457 128.0 +-13.557941 16.31366 4.9843154 128.0 +-13.28027 16.18051 4.9190712 128.0 +-13.278851 16.382732 4.9554443 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-11.360662 15.514688 4.5214691 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.3688612 13.47647 3.864027 128.0 +-9.2342033 13.458224 3.842658 128.0 +-9.0373297 13.346108 3.7951458 128.0 +-8.8275757 13.210228 3.7414956 128.0 +-8.4933138 12.880424 3.6341953 128.0 +-10.18959 15.660995 4.3941636 128.0 +-10.10067 15.734695 4.397346 128.0 +-8.208416 12.961355 3.6139629 128.0 +-7.9971552 12.800878 3.5559933 128.0 +-8.0262623 13.024632 3.6039603 128.0 +-7.8627343 12.93633 3.5664506 128.0 +-7.7161169 12.872409 3.5359881 128.0 +-7.610723 12.875082 3.5239396 128.0 +-0 0 0 128.0 +-9.0286913 15.710681 4.2625389 128.0 +-7.8496137 13.855181 3.7499068 128.0 +-7.7649269 13.903934 3.7501342 128.0 +-7.6752415 13.94364 3.7480881 128.0 +-7.6591959 14.118866 3.7821879 128.0 +-0 0 0 128.0 +-7.67733 14.576251 3.8783491 128.0 +-7.7949715 15.022422 3.983376 128.0 +-7.5404286 14.752607 3.9001727 128.0 +-7.628428 15.15348 3.992924 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.0223007 14.845803 3.8663003 128.0 +-6.9528599 14.935402 3.8783491 128.0 +-6.9357147 15.140684 3.9201779 128.0 +-6.8694921 15.242439 3.9354091 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-6.8080473 16.15304 4.1245489 128.0 +-6.6972513 16.166618 4.1175013 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.8504496 13.821189 3.4518757 128.0 +-4.7810788 13.895811 3.4630148 128.0 +-4.4505024 13.197755 3.2838778 128.0 +-4.379827 13.256252 3.2916071 128.0 +-4.3011041 13.291215 3.293653 128.0 +-4.2435908 13.393479 3.3122942 128.0 +-4.5034413 14.522381 3.5819092 128.0 +-4.4269724 14.591674 3.592139 128.0 +-4.298296 14.486927 3.5600853 128.0 +-3.8810658 13.381356 3.2850144 128.0 +-3.8156157 13.463943 3.2993364 128.0 +-4.2592673 15.388554 3.7599094 128.0 +-4.1718774 15.440722 3.7662747 128.0 +-3.5753345 13.562969 3.3068383 128.0 +-3.4922888 13.585595 3.3070657 128.0 +-3.4419987 13.739015 3.338892 128.0 +-3.5956697 14.735255 3.5732706 128.0 +-3.4763792 14.635767 3.544172 128.0 +-0 0 0 128.0 +-3.3759089 15.030778 3.6287394 128.0 +-3.3272126 15.25101 3.6764789 128.0 +-3.2404311 15.30353 3.6842082 128.0 +-2.8187261 13.727235 3.3038831 128.0 +-2.8828692 14.490199 3.4814286 128.0 +-2.7417815 14.237 3.417094 128.0 +-2.6595445 14.281318 3.4236865 128.0 +-2.3773618 13.216259 3.1672568 128.0 +-2.4869218 14.32919 3.4275513 128.0 +-2.2379732 13.381785 3.1997652 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-1.8946189 13.945911 3.3179774 128.0 +-1.8112663 13.974657 3.3220694 128.0 +-0 0 0 128.0 +-1.6269456 13.887506 3.2966084 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.85325205 13.896908 3.2827413 128.0 +0.93555313 13.847689 3.2725112 128.0 +1.0222212 13.864996 3.2779672 128.0 +1.1094469 13.885643 3.2843325 128.0 +1.1919551 13.847528 3.2770579 128.0 +1.3415639 14.541047 3.4414184 128.0 +1.4406811 14.633331 3.4650607 128.0 +1.6299505 15.575314 3.6883001 128.0 +1.7213045 15.527271 3.6794341 128.0 +1.8231119 15.572515 3.6926193 128.0 +1.8511941 15.013996 3.5639498 128.0 +2.0753579 16.02219 3.8040116 128.0 +2.0126376 14.82321 3.5246217 128.0 +2.0216796 14.234022 3.3886776 128.0 +0 0 0 128.0 +2.1448877 13.876117 3.3102484 128.0 +2.2383399 13.914613 3.3225241 128.0 +2.4970512 14.937951 3.5680418 128.0 +2.4400461 14.065522 3.3650351 128.0 +2.496151 13.882557 3.3252521 128.0 +2.8106096 15.099124 3.6178274 128.0 +2.8330777 14.717257 3.5312142 128.0 +0 0 0 128.0 +2.8543012 13.905833 3.3463938 128.0 +0 0 0 128.0 +3.0871804 14.156149 3.4148207 128.0 +3.1727028 14.131239 3.4134567 128.0 +3.25453 14.090631 3.4084554 128.0 +0 0 0 128.0 +3.8543277 15.800831 3.8292453 128.0 +0 0 0 128.0 +3.5101669 13.659427 3.3247974 128.0 +3.5507388 13.473781 3.2852418 128.0 +4.2927351 15.89327 3.8756211 128.0 +4.3870573 15.855368 3.8728931 128.0 +4.4967365 15.872188 3.8835776 128.0 +4.2846413 14.777118 3.6241927 128.0 +4.477684 15.095989 3.7083051 128.0 +4.4933534 14.814753 3.646471 128.0 +4.5864773 14.794344 3.6482897 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +27.761995 4.6433468 6.6033683 128.0 +27.764967 4.4688911 6.5974579 128.0 +27.771654 4.2953186 6.5926838 128.0 +27.775331 4.1215463 6.5874553 128.0 +27.784674 3.9488497 6.583818 128.0 +27.782326 3.7747514 6.5776796 128.0 +27.766335 3.5992033 6.5685863 128.0 +27.736673 3.4224434 6.5565381 128.0 +27.718462 3.2476566 6.5474448 128.0 +27.709799 3.0744035 6.5408521 128.0 +27.703928 2.9017849 6.5351691 128.0 +27.694077 2.7290678 6.5288038 128.0 +27.68412 2.5566704 6.5226655 128.0 +27.687643 2.3857524 6.5199375 128.0 +27.673609 2.2135673 6.5133452 128.0 +27.667248 2.0422895 6.5087986 128.0 +27.659826 1.8711731 6.504252 128.0 +27.649403 1.7001053 6.4992504 128.0 +27.64473 1.5296125 6.4958405 128.0 +27.639004 1.3592411 6.4924307 128.0 +27.629313 1.188872 6.4883385 128.0 +27.61565 1.0185653 6.4835649 128.0 +27.611647 0.84880036 6.4812913 128.0 +27.60368 0.67905098 6.4783359 128.0 +27.609274 0.50970119 6.4787908 128.0 +27.605064 0.34020019 6.4771996 128.0 +27.593 0.17072773 6.4740167 128.0 +27.590607 0.0014168681 6.4733348 128.0 +27.577436 -0.16779909 6.4703794 128.0 +27.571018 -0.33694845 6.469243 128.0 +27.563564 -0.50602543 6.4681063 128.0 +27.556046 -0.6750474 6.4671969 128.0 +27.553331 -0.84417504 6.4676514 128.0 +27.535955 -1.0127938 6.4649234 128.0 +27.521441 -1.1813983 6.4631047 128.0 +27.519508 -1.3505306 6.464469 128.0 +27.51362 -1.5195228 6.4651508 128.0 +27.506695 -1.6884936 6.4658327 128.0 +27.498732 -1.8574365 6.4665151 128.0 +27.492643 -2.0265601 6.4678788 128.0 +27.483574 -2.1955237 6.4687881 128.0 +27.463764 -2.3636177 6.4674244 128.0 +27.457472 -2.5328925 6.46947 128.0 +27.433661 -2.7005577 6.4676514 128.0 +27.449503 -2.8722818 6.4753809 128.0 +27.431364 -3.0406547 6.4753809 128.0 +27.434435 -3.2115171 6.4806094 128.0 +27.397783 -3.3777657 6.4767447 128.0 +27.411308 -3.5503142 6.4849286 128.0 +27.392868 -3.7189641 6.4858379 128.0 +27.351215 -3.8843722 6.4815187 128.0 +27.364433 -4.057693 6.4903846 128.0 +17.612123 -2.7222714 4.1927481 128.0 +18.391178 -2.9583247 4.3809781 128.0 +18.372681 -3.0711153 4.3809781 128.0 +19.190166 -3.3289108 4.5792112 128.0 +18.489838 -3.3244309 4.4180331 128.0 +0 -0 0 128.0 +17.421576 -3.3535876 4.1741071 128.0 +17.495228 -3.4792233 4.1966128 128.0 +19.230698 -3.9471273 4.6153569 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.01659 -4.4938979 4.8215461 128.0 +0 -0 0 128.0 +20.175962 -4.790482 4.8733778 128.0 +20.168894 -4.9197273 4.8788338 128.0 +20.177057 -5.0530872 4.888154 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9709044 -2.2584317 1.9664935 128.0 +7.9578323 -2.3075688 1.9667208 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0946903 -2.5642109 2.0146878 128.0 +7.9972682 -2.5874546 1.9946826 128.0 +8.0117559 -2.6465547 2.0021844 128.0 +0 -0 0 128.0 +19.934326 -6.856811 4.9536257 128.0 +0 -0 0 128.0 +19.830343 -7.0943594 4.949079 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.584295 -7.9391079 5.1827755 128.0 +0 -0 0 128.0 +18.720284 -7.485393 4.7390251 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.543434 -7.8135791 4.7299318 128.0 +18.385942 -7.8804111 4.7021971 128.0 +18.32653 -7.9884076 4.6994696 128.0 +18.269157 -8.0971556 4.6974235 128.0 +19.172693 -8.638731 4.941577 128.0 +19.153856 -8.7720232 4.9504428 128.0 +19.084663 -8.8823986 4.9465785 128.0 +19.047409 -9.007658 4.9511251 128.0 +0 -0 0 128.0 +19.111347 -9.3265629 4.9968185 128.0 +0 -0 0 128.0 +14.42692 -7.2611532 3.802875 128.0 +14.404641 -7.3610592 3.8087857 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +14.222221 -7.7137427 3.8094676 128.0 +14.116608 -7.7689371 3.7940092 128.0 +3.5874407 -2.0034215 0.99169719 128.0 +3.6267681 -2.0546722 1.0055645 128.0 +3.9729526 -2.2830663 1.1021801 128.0 +3.1477752 -1.8347521 0.88303286 128.0 +3.8373268 -2.2682304 1.0730817 128.0 +3.1433995 -1.8842549 0.88803416 128.0 +3.1259532 -1.8999671 0.88644284 128.0 +3.8645701 -2.381386 1.0921776 128.0 +3.1569149 -1.9722322 0.9014467 128.0 +3.8079045 -2.4114401 1.0846757 128.0 +3.1439486 -2.0181875 0.90462935 128.0 +3.1551793 -2.0528393 0.91122198 128.0 +3.1506541 -2.0775204 0.91349524 128.0 +3.1427059 -2.1000593 0.91485924 128.0 +3.1200843 -2.1127517 0.91213125 128.0 +3.0998344 -2.1268988 0.91008532 128.0 +3.1171122 -2.1669986 0.91872388 128.0 +3.1196814 -2.1972976 0.92327052 128.0 +3.5865526 -2.5591247 1.0610332 128.0 +3.5518401 -2.5673933 1.0555773 128.0 +3.4676588 -2.5390928 1.0357995 128.0 +3.4840848 -2.5841041 1.04512 128.0 +3.4557052 -2.596076 1.0414827 128.0 +4.307754 -3.2775903 1.2960937 128.0 +4.0630827 -3.1310043 1.2299403 128.0 +3.9992657 -3.1211298 1.2167552 128.0 +4.0732541 -3.2192702 1.2444896 128.0 +4.0290937 -3.2247324 1.2372149 128.0 +3.9903166 -3.234066 1.2315316 128.0 +3.6722841 -3.0138667 1.1415085 128.0 +3.414789 -2.8378158 1.0689899 128.0 +3.2885168 -2.7671838 1.0357995 128.0 +2.9512284 -2.5145078 0.93759239 128.0 +2.9047723 -2.5058558 0.92804444 128.0 +2.902545 -2.5351617 0.93213642 128.0 +2.9066331 -2.5703392 0.93827438 128.0 +2.8915327 -2.5887752 0.93850172 128.0 +3.3006127 -2.9916325 1.0723997 128.0 +3.7156053 -3.4094682 1.2097079 128.0 +3.6739235 -3.4129832 1.2031152 128.0 +3.6777427 -3.4588101 1.2110718 128.0 +3.6881905 -3.5115261 1.2213017 128.0 +2.9730926 -2.865768 0.99647117 128.0 +0 -0 0 128.0 +2.9169159 -2.8815072 0.9896512 128.0 +3.9052806 -3.9053192 1.3217821 128.0 +2.837534 -2.8727486 0.97510201 128.0 +2.9259551 -2.9988291 1.0105656 128.0 +3.2217686 -3.3427405 1.1162747 128.0 +2.4336352 -2.5563562 0.85643512 128.0 +2.4072289 -2.559891 0.85279781 128.0 +2.3934648 -2.5767536 0.8534798 128.0 +2.3604898 -2.5727365 0.84756923 128.0 +2.8685317 -3.1650999 1.0296615 128.0 +2.3599205 -2.6363339 0.85848111 128.0 +2.3191855 -2.6230443 0.84984255 128.0 +2.2902343 -2.6225567 0.84529591 128.0 +2.2308435 -2.5864208 0.82983738 128.0 +2.2452476 -2.6356394 0.84074926 128.0 +2.2578764 -2.6836405 0.85120648 128.0 +2.2780912 -2.7416308 0.86461908 128.0 +2.2334235 -2.7216842 0.85438913 128.0 +2.2473416 -2.7731624 0.86575574 128.0 +2.5948043 -3.2422929 1.0019271 128.0 +2.4112117 -3.051116 0.94032037 128.0 +2.354697 -3.0174904 0.92599851 128.0 +2.1482909 -2.788142 0.8541618 128.0 +2.0432763 -2.685802 0.82028949 128.0 +2.0384569 -2.71386 0.82483608 128.0 +2.0919652 -2.8209555 0.85234314 128.0 +2.0976305 -2.8651659 0.86143643 128.0 +2.0879979 -2.8890316 0.86461908 128.0 +2.0272417 -2.8415449 0.8473419 128.0 +2.3103485 -3.2806621 0.96919143 128.0 +1.9966661 -2.8726048 0.84916055 128.0 +1.9437402 -2.8334124 0.83461136 128.0 +1.9285023 -2.848511 0.83552068 128.0 +1.9218094 -2.8764837 0.84006727 128.0 +1.7995843 -2.7296925 0.79573768 128.0 +1.9102653 -2.9365816 0.85029721 128.0 +1.9158846 -2.9851243 0.8605271 128.0 +1.8761693 -2.963093 0.85120648 128.0 +1.8600168 -2.9778528 0.85211581 128.0 +1.8069682 -2.9328353 0.83665729 128.0 +1.7894444 -2.9446998 0.83688462 128.0 +1.7783521 -2.9673176 0.84006727 128.0 +2.0123529 -3.4048655 0.9557789 128.0 +2.0478203 -3.5139008 0.98192197 128.0 +1.6443385 -2.8619254 0.80301231 128.0 +1.6205064 -2.8609464 0.80005699 128.0 +1.598648 -2.863184 0.798011 128.0 +1.5932597 -2.8951199 0.80392164 128.0 +1.5782517 -2.9099772 0.80528563 128.0 +1.5562348 -2.9118772 0.80323964 128.0 +1.6340972 -3.103169 0.85120648 128.0 +1.6881373 -3.2540295 0.8882615 128.0 +1.2816468 -2.5082104 0.69002867 128.0 +1.6717247 -3.3214703 0.90053737 128.0 +1.6932704 -3.4162958 0.92258853 128.0 +1.1314548 -2.318723 0.6347872 128.0 +1.6600778 -3.4552495 0.92736244 128.0 +1.5384887 -3.2532201 0.87257564 128.0 +1.6479663 -3.5406907 0.94418496 128.0 +1.635944 -3.5719838 0.94964093 128.0 +1.2038479 -2.6719503 0.71662641 128.0 +1.301101 -2.935678 0.78209782 128.0 +1.4173442 -3.2515714 0.8605271 128.0 +1.4088783 -3.2870574 0.867347 128.0 +1.5982256 -3.7927787 0.99328852 128.0 +1.5782779 -3.8106108 0.99533451 128.0 +1.5772656 -3.8752413 1.0092016 128.0 +1.5596061 -3.9002173 1.0130663 128.0 +1.5274551 -3.8888667 1.0078378 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.90924048 -2.4934566 0.65206438 128.0 +1.1268955 -3.1499667 0.81346953 128.0 +0.86954355 -2.4786983 0.64569908 128.0 +0.84671372 -2.4618871 0.64024311 128.0 +0.85524291 -2.5371656 0.65752029 128.0 +1.0694171 -3.2377002 0.82847339 128.0 +0.95507807 -2.952352 0.75686407 128.0 +0.93782723 -2.9609418 0.75754607 128.0 +1.3240594 -4.2706609 1.0762644 128.0 +1.2961338 -4.2731133 1.0749004 128.0 +0.80837113 -2.7256348 0.69616663 128.0 +0.7916317 -2.7305436 0.69616663 128.0 +0.78203225 -2.7606461 0.70230454 128.0 +0.91653663 -3.3125527 0.83483869 128.0 +0.88603288 -3.2805099 0.8257454 128.0 +0.816733 -3.0994396 0.78073382 128.0 +0.79988205 -3.1128809 0.78277981 128.0 +0.75686204 -3.0223241 0.75981939 128.0 +2.1118062 -8.6549768 2.1122127 128.0 +1.910114 -8.0424538 1.9621742 128.0 +0.75810844 -3.2824352 0.8189255 128.0 +0.78021199 -3.475153 0.86393708 128.0 +0.769669 -3.5293496 0.87575829 128.0 +1.8057796 -8.5289564 2.0676558 128.0 +0.5956341 -2.9022713 0.72412837 128.0 +0.66789615 -3.3585856 0.83188337 128.0 +0.5439502 -2.826169 0.70435053 128.0 +0.54246849 -2.9146578 0.72458303 128.0 +0.51043481 -2.8393402 0.70594186 128.0 +0.49899909 -2.8769598 0.71412581 128.0 +0.49884874 -2.984659 0.73890489 128.0 +1.275537 -7.9265876 1.9067054 128.0 +0.62935412 -4.0713005 0.99419785 128.0 +1.2049016 -8.1217747 1.9492162 128.0 +1.1524408 -8.1106968 1.9448969 128.0 +0.44246262 -3.259093 0.80028433 128.0 +0.99235326 -7.6577773 1.835096 128.0 +0.49093276 -3.98141 0.9689641 128.0 +0.30974975 -2.6467102 0.65456504 128.0 +0.44440055 -4.0084281 0.97396535 128.0 +0.29632151 -2.8323932 0.6973033 128.0 +0.39938015 -4.056221 0.98396796 128.0 +0.26458663 -2.8687856 0.70503253 128.0 +0.24948753 -2.8994617 0.71185249 128.0 +0.2335559 -2.9242353 0.7173084 128.0 +0.21603894 -2.9314404 0.71867239 128.0 +0.19785067 -2.929796 0.7179904 128.0 +0.18034829 -2.9387307 0.71980906 128.0 +0.15784664 -2.8590786 0.70094055 128.0 +0 -0 0 128.0 +0.10629153 -2.4784441 0.61159939 128.0 +0.14167534 -3.8502254 0.93190908 128.0 +0.081616797 -2.6664464 0.65524697 128.0 +0.063888393 -2.6114063 0.6422891 128.0 +0.047594074 -2.5971444 0.63887918 128.0 +0.034432627 -2.8223221 0.69139266 128.0 +0.017525187 -2.8886986 0.70685118 128.0 +-0.00019807987 -2.9160187 0.71321648 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.4053142 -3.6427696 0.94395763 128.0 +-1.4294193 -3.6386104 0.94509429 128.0 +-1.4517184 -3.629771 0.94509429 128.0 +-1.464052 -3.5964415 0.93895638 128.0 +-1.4793849 -3.5711958 0.9348644 128.0 +-1.5133692 -3.5907683 0.94213897 128.0 +-1.5511016 -3.618113 0.95145959 128.0 +-3.572871 -8.1961308 2.1197147 128.0 +-3.61323 -8.1517963 2.1140313 128.0 +-1.6422383 -3.6439967 0.96555412 128.0 +-1.6653774 -3.6356223 0.96600878 128.0 +-1.686421 -3.6226866 0.96532679 128.0 +-1.5878899 -3.3569698 0.89940071 128.0 +-1.554059 -3.2339303 0.87007499 128.0 +-1.5713104 -3.2190828 0.86871099 128.0 +-1.5962219 -3.2198513 0.87143898 128.0 +-1.6115707 -3.2012978 0.86916566 128.0 +-1.6338419 -3.196552 0.87052965 128.0 +-1.6543216 -3.1881957 0.87098432 128.0 +-1.663871 -3.1590285 0.86598307 128.0 +-4.771822 -8.928031 2.3956947 128.0 +-4.8840818 -9.0047312 2.4238839 128.0 +-4.3251314 -7.8586564 2.1265347 128.0 +-5.005609 -8.9645243 2.4293399 128.0 +-0 -0 0 128.0 +-1.9580307 -3.4072204 0.94986826 128.0 +-1.9421277 -3.3320382 0.93281841 128.0 +-1.9605544 -3.3167052 0.93190908 128.0 +-2.0409389 -3.4048495 0.95918882 128.0 +-2.0562294 -3.3831081 0.95668817 128.0 +-2.0943162 -3.398617 0.96441746 128.0 +-2.1269956 -3.4046993 0.9696461 128.0 +-2.1462836 -3.389116 0.9689641 128.0 +-2.1644084 -3.3717852 0.96782744 128.0 +-2.2163854 -3.4066036 0.98123997 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.1743231 -7.6423783 2.1870048 128.0 +-5.2971382 -7.7213039 2.2183764 128.0 +-5.3560867 -7.7054486 2.2231505 128.0 +-5.3937345 -7.6589036 2.2192857 128.0 +-5.5401645 -7.7651896 2.2592962 128.0 +-5.5705943 -7.7073717 2.2524762 128.0 +-5.6131792 -7.66676 2.2506576 128.0 +-0 -0 0 128.0 +-5.9010062 -7.8558092 2.3261313 128.0 +-5.7244573 -7.5241637 2.2395182 128.0 +-5.799046 -7.5259252 2.2504301 128.0 +-6.1021171 -7.8195634 2.3479552 128.0 +-6.3407745 -8.0234156 2.4197919 128.0 +-6.3521619 -7.9372177 2.4056973 128.0 +-6.4847393 -8.0017443 2.4368417 128.0 +-6.5046816 -7.9264221 2.4261572 128.0 +-6.5749764 -7.9125762 2.4341137 128.0 +-6.5456648 -7.7796822 2.4059248 128.0 +-6.7220998 -7.8906002 2.4523003 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.2110987 -9.4406729 3.1115608 128.0 +-9.2572193 -9.3721981 3.1076961 128.0 +-9.4150791 -9.4157619 3.1408865 128.0 +-9.2489147 -9.136754 3.0674586 128.0 +-9.199564 -8.9771309 3.0331316 128.0 +-9.4094181 -9.0698767 3.0833716 128.0 +-9.4176416 -8.9669781 3.0681405 128.0 +-9.4192829 -8.858984 3.0510907 128.0 +-10.541466 -9.7932749 3.3914056 128.0 +-9.0279198 -8.2844553 2.892868 128.0 +-9.0554943 -8.2079763 2.8855937 128.0 +-9.1281776 -8.1723957 2.8926408 128.0 +-9.1351118 -8.0781698 2.8792284 128.0 +-9.1867065 -8.0238876 2.8799102 128.0 +-9.2335548 -7.9654598 2.8792284 128.0 +-9.3356247 -7.9541278 2.895596 128.0 +-9.4379015 -7.9418416 2.9119639 128.0 +-10.373182 -8.6207504 3.1811242 128.0 +-9.7446613 -7.9978013 2.9753895 128.0 +-9.7890129 -7.9341793 2.9740255 128.0 +-10.794674 -8.6401291 3.2602353 128.0 +-11.483112 -9.0761528 3.4493749 128.0 +-9.963335 -7.7760191 2.9828913 128.0 +-11.538862 -8.8923483 3.4332345 128.0 +-11.573833 -8.8066368 3.4275513 128.0 +-11.643223 -8.7471542 3.4320979 128.0 +-11.580136 -8.5891056 3.3982255 128.0 +-10.391239 -7.6088467 3.0390422 128.0 +-11.382402 -8.2278461 3.3111577 128.0 +-11.283648 -8.051507 3.2684193 128.0 +-11.332839 -7.98212 3.2684193 128.0 +-0 -0 0 128.0 +-11.331174 -7.7746778 3.2404575 128.0 +-11.406887 -7.7241158 3.2484143 128.0 +-11.437873 -7.6431575 3.2438676 128.0 +-11.03661 -7.277442 3.118608 128.0 +-11.541416 -7.5091262 3.2468228 128.0 +-0 -0 0 128.0 +-16.731785 -10.59636 4.6558218 128.0 +-16.817961 -10.506911 4.6617322 128.0 +-16.171635 -9.9656715 4.4669094 128.0 +-16.954784 -10.305303 4.6642332 128.0 +-16.030445 -9.609252 4.3955274 128.0 +-11.133944 -6.58144 3.0517726 128.0 +-11.211977 -6.5350676 3.0620027 128.0 +-11.247643 -6.4637232 3.0608659 128.0 +-11.301496 -6.4027481 3.0647306 128.0 +-11.368626 -6.3489528 3.0722325 128.0 +-6.5344515 -3.5966365 1.7737166 128.0 +-15.683574 -8.5080671 4.1977491 128.0 +-15.856574 -8.476409 4.2298031 128.0 +-6.5288954 -3.438535 1.7550755 128.0 +-6.5688872 -3.4082775 1.7600768 128.0 +-6.5532579 -3.349292 1.7505288 128.0 +-16.192032 -8.1512766 4.2643576 128.0 +-6.3644032 -3.1548603 1.6907407 128.0 +-16.32497 -7.9686217 4.2732234 128.0 +-6.9968567 -3.3620884 1.844644 128.0 +-7.0252771 -3.3228409 1.8466899 128.0 +-7.2971401 -3.3968096 1.9114794 128.0 +-7.2284265 -3.3110073 1.8885188 128.0 +-6.3386021 -2.8564441 1.6555043 128.0 +-6.354229 -2.8167081 1.6550497 128.0 +-0 -0 0 128.0 +-7.2511191 -3.1084404 1.874197 128.0 +-0 -0 0 128.0 +-17.532312 -7.2630448 4.4625902 128.0 +-17.582861 -7.1579022 4.4641814 128.0 +-17.709633 -7.0831532 4.485096 128.0 +-7.1273403 -2.7997992 1.8200922 128.0 +-7.0862389 -2.7335799 1.8055429 128.0 +-7.0546126 -2.6717658 1.7934943 128.0 +-7.0991697 -2.6389492 1.8005416 128.0 +-7.0237441 -2.561965 1.7778085 128.0 +-7.0448332 -2.5207887 1.7791725 128.0 +-7.1483788 -2.5084746 1.8009963 128.0 +-0 -0 0 128.0 +-7.4766736 -2.5210807 1.8744243 128.0 +-7.5243645 -2.4858508 1.882381 128.0 +-0 -0 0 128.0 +-8.6172371 -2.7301407 2.1426752 128.0 +-8.722188 -2.7046185 2.1642716 128.0 +-8.7749615 -2.6620762 2.1731374 128.0 +-8.8060675 -2.6126163 2.1767747 128.0 +-8.7209244 -2.5292349 2.1522231 128.0 +-8.6688213 -2.4565575 2.1358552 128.0 +-8.8648663 -2.45346 2.1797302 128.0 +-12.485043 -3.3732152 3.0515454 128.0 +-9.0157785 -2.3765147 2.2090559 128.0 +-12.421751 -3.1930785 3.0265388 128.0 +-13.109899 -3.2843697 3.1874895 128.0 +-9.2784252 -2.2639558 2.2620239 128.0 +-9.3319349 -2.216435 2.2715719 128.0 +-9.3795166 -2.1670265 2.2797558 128.0 +-14.534804 -3.2645001 3.5100725 128.0 +-17.654331 -3.8515921 4.2507176 128.0 +-12.620757 -2.6723003 3.0440433 128.0 +-12.753293 -2.6187105 3.0717778 128.0 +-17.247555 -3.4315288 4.1377339 128.0 +-13.222427 -2.5463655 3.1758955 128.0 +-17.40612 -3.2415485 4.1656957 128.0 +-0 -0 0 128.0 +-17.085747 -2.9654155 4.0806737 128.0 +-17.181419 -2.8735368 4.0990877 128.0 +-16.90741 -2.7211666 4.0302062 128.0 +-17.150909 -2.6525044 4.0838566 128.0 +-16.532068 -2.4530132 3.9340451 128.0 +-17.186989 -2.4425218 4.0849929 128.0 +-16.541626 -2.2473323 3.9294984 128.0 +-18.366825 -2.3806617 4.3559718 128.0 +-17.298622 -2.1343391 4.1013608 128.0 +-17.613159 -2.0635176 4.1722884 128.0 +-0 -0 0 128.0 +-12.696747 -1.32968 3.0126717 128.0 +-12.753122 -1.2565249 3.0240383 128.0 +-12.774168 -1.1795034 3.027221 128.0 +-12.802509 -1.10294 3.0322223 128.0 +-11.957718 -0.95625693 2.8328526 128.0 +-12.997661 -0.95923042 3.0749605 128.0 +-18.007992 -1.2180955 4.2459435 128.0 +-18.038456 -1.1090122 4.2513995 128.0 +-18.050755 -0.99863243 4.2527633 128.0 +-18.04487 -0.88728213 4.2500353 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-20.389574 12.244471 5.2879868 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-16.064939 14.765859 4.8540974 128.0 +-15.969747 14.860162 4.8528028 128.0 +-0 0 0 128.0 +-14.074835 13.422752 4.3302369 128.0 +-14.018902 13.534636 4.3384361 128.0 +-0 0 0 128.0 +-14.971972 14.814183 4.6866693 128.0 +-14.291673 14.315598 4.5024118 128.0 +-14.213163 14.412754 4.5054326 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-14.700869 15.466779 4.7477288 128.0 +-14.074382 14.990726 4.5762014 128.0 +-13.832088 14.914989 4.5274401 128.0 +-13.853748 15.123429 4.5645504 128.0 +-13.258235 14.652776 4.3990641 128.0 +-0 0 0 128.0 +-13.130409 14.874401 4.4167562 128.0 +-13.268607 15.218184 4.4939976 128.0 +-13.336811 15.487257 4.5488 128.0 +-0 0 0 128.0 +-13.390674 15.94136 4.6329455 128.0 +-13.653555 16.458368 4.7578692 128.0 +-0 0 0 128.0 +-12.477162 15.421443 4.4158931 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-11.553669 15.6055 4.3231173 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.3025932 13.583058 3.6704493 128.0 +-9.1408911 13.52419 3.6395957 128.0 +-9.1449594 13.710815 3.6743329 128.0 +-9.0123501 13.693258 3.6549146 128.0 +-8.8313828 13.599249 3.6156466 128.0 +-8.2384405 12.858109 3.4070086 128.0 +-8.1374798 12.873749 3.3979468 128.0 +-8.0805483 12.959067 3.4072244 128.0 +-7.9712143 12.960163 3.3947105 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.6769886 16.403231 4.2409134 128.0 +-9.1058531 15.653686 4.0342174 128.0 +-8.9994316 15.691475 4.0296865 128.0 +-7.9073257 13.985149 3.5826356 128.0 +-7.7652798 13.932756 3.5571764 128.0 +-7.7557936 14.11879 3.592129 128.0 +-7.8712049 14.539658 3.6859839 128.0 +-8.6292048 16.176399 4.0838413 128.0 +-7.6431317 14.541803 3.6626821 128.0 +-7.651176 14.776595 3.7095015 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.1350245 15.117964 3.7265463 128.0 +-7.021565 15.117178 3.7157583 128.0 +-6.9400387 15.184844 3.7217996 128.0 +-7.1169853 15.828291 3.8674362 128.0 +-7.0647492 15.973467 3.8920326 128.0 +-6.9942532 16.080091 3.9073515 128.0 +-6.9077411 16.151434 3.9142559 128.0 +-6.7914796 16.153008 3.9045467 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.8697519 13.914187 3.2900679 128.0 +-4.7430973 13.823735 3.2620194 128.0 +-4.6236496 13.749843 3.2380702 128.0 +-4.450305 13.50807 3.1752846 128.0 +-4.336761 13.440334 3.1532774 128.0 +-4.2462716 13.441551 3.1474519 128.0 +-4.1657343 13.473883 3.1489623 128.0 +-4.4110937 14.584324 3.3994572 128.0 +-4.3395195 14.671979 3.4134815 128.0 +-3.882586 13.429145 3.1215611 128.0 +-4.1448154 14.673383 3.4018307 128.0 +-3.7255447 13.50496 3.1282494 128.0 +-4.1400738 15.375617 3.5511351 128.0 +-3.5652418 13.571383 3.1332119 128.0 +-3.5116951 13.709352 3.1597502 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.4819486 14.715242 3.3739977 128.0 +-3.2435944 14.093058 3.2281454 128.0 +-3.3411684 14.93601 3.4145603 128.0 +-3.2962956 15.17188 3.4633217 128.0 +-3.1054718 14.728424 3.3586791 128.0 +-2.783164 13.612588 3.1027901 128.0 +-2.5892165 13.071938 2.9772189 128.0 +-2.5080411 13.082783 2.97614 128.0 +-2.6612628 14.35855 3.2594304 128.0 +-2.364332 13.207733 2.9975002 128.0 +-2.2955358 13.293196 3.0134661 128.0 +-0 0 0 128.0 +-2.2772341 14.226699 3.2162788 128.0 +-2.1802559 14.177671 3.2022545 128.0 +-2.0942192 14.197545 3.2037647 128.0 +-1.9801786 14.019655 3.1612604 128.0 +-1.8977736 14.058637 3.1673017 128.0 +-1.7926604 13.923779 3.1347222 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.63959974 20.287649 4.5177307 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.0411924 13.960876 3.126092 128.0 +1.1253403 13.935732 3.1219923 128.0 +0 0 0 128.0 +1.3012522 13.974345 3.1338592 128.0 +1.4355513 14.454843 3.2423854 128.0 +2.1475451 20.348764 4.553978 128.0 +1.7000556 15.21634 3.4158549 128.0 +1.8150197 15.388899 3.4566331 128.0 +1.8877391 15.203053 3.4177966 128.0 +2.0695505 15.86992 3.5690429 128.0 +2.1671519 15.858857 3.5694745 128.0 +2.2671835 15.864594 3.5737896 128.0 +2.2288499 14.941613 3.3707614 128.0 +2.1924856 14.104641 3.1867199 128.0 +2.2643268 14.000316 3.1664386 128.0 +2.5243824 15.022274 3.3985941 128.0 +2.4477074 14.038809 3.1815417 128.0 +2.536581 14.0389 3.1849937 128.0 +2.8250692 15.104754 3.428153 128.0 +2.9351315 15.177251 3.4484344 128.0 +2.8077648 14.0559 3.1998811 128.0 +2.9044101 14.089092 3.2113163 128.0 +2.9824779 14.031847 3.2024703 128.0 +3.096518 14.141096 3.2313817 128.0 +3.1905308 14.154216 3.2387176 128.0 +3.6497486 15.739987 3.602917 128.0 +3.3191445 13.925933 3.1959975 128.0 +3.844486 15.701602 3.6046431 128.0 +3.9502809 15.715595 3.6132734 128.0 +3.5217404 13.656362 3.1489623 128.0 +3.562768 13.473075 3.1120677 128.0 +0 0 0 128.0 +4.3279781 15.589456 3.6076636 128.0 +4.1244664 14.510677 3.3660147 128.0 +4.3348198 14.902314 3.4620271 128.0 +4.4401045 14.922229 3.472815 128.0 +4.5435219 14.933939 3.4818769 128.0 +0 0 0 128.0 +4.771688 15.019438 3.5148878 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +27.967991 9.0230293 6.5262218 128.0 +27.980928 8.8380184 6.5165129 128.0 +27.999182 8.6552076 6.5083141 128.0 +27.991943 8.4651575 6.4945054 128.0 +27.975002 8.2730312 6.478755 128.0 +27.971769 8.0857706 6.4664569 128.0 +27.947559 7.8932886 6.4496279 128.0 +27.937105 7.7055626 6.4362507 128.0 +27.920687 7.5169935 6.4217949 128.0 +27.920952 7.3336291 6.4114385 128.0 +27.903938 7.1464272 6.3974142 128.0 +27.890419 6.9608927 6.384469 128.0 +27.881369 6.7771769 6.372818 128.0 +27.880619 6.5960832 6.3633246 128.0 +27.874889 6.4143777 6.3529682 128.0 +27.869888 6.233418 6.3430433 128.0 +27.838909 6.0473728 6.3275089 128.0 +27.837273 5.8683877 6.3188787 128.0 +27.8431 5.6914101 6.3121901 128.0 +27.840141 5.5130649 6.3037753 128.0 +27.82933 5.3336844 6.2938504 128.0 +27.814487 5.1541109 6.2832785 128.0 +27.818676 4.9785318 6.2772369 128.0 +27.801552 4.7996082 6.266665 128.0 +27.792913 4.6226845 6.2582502 128.0 +27.800507 4.4488239 6.2537193 128.0 +27.793501 4.2729678 6.2461681 128.0 +27.771862 4.0953717 6.2355957 128.0 +27.750059 3.9183383 6.2252393 128.0 +27.741646 3.7436855 6.2181196 128.0 +27.738914 3.5701559 6.2125096 128.0 +27.726376 3.3957326 6.2049584 128.0 +27.727291 3.2232885 6.2006431 128.0 +27.718399 3.0500004 6.194386 128.0 +27.712311 2.8773463 6.188992 128.0 +27.710009 2.7053556 6.1846771 128.0 +27.707611 2.5335908 6.1805778 128.0 +27.699286 2.3615427 6.1753993 128.0 +27.683077 2.1891534 6.1687107 128.0 +27.661903 2.0167685 6.1611595 128.0 +27.662066 1.8462205 6.1585703 128.0 +27.664103 1.6759235 6.1566286 128.0 +27.655338 1.5051408 6.1525292 128.0 +27.649424 1.3347168 6.1492925 128.0 +27.643435 1.1644633 6.1462722 128.0 +27.632496 0.9941932 6.1423883 128.0 +27.621483 0.82413036 6.1387205 128.0 +27.617235 0.65442479 6.1367788 128.0 +27.603157 0.4846485 6.132895 128.0 +27.598776 0.31519184 6.1313848 128.0 +27.586521 0.14577134 6.1283641 128.0 +27.559555 -0.02347465 6.122323 128.0 +27.56768 -0.19263825 6.1242647 128.0 +27.559145 -0.36169672 6.1227546 128.0 +27.547621 -0.53062004 6.1208124 128.0 +27.524323 -0.69914234 6.1164975 128.0 +27.525372 -0.86820018 6.1177921 128.0 +27.509768 -1.0367082 6.1156344 128.0 +27.505816 -1.2056139 6.1162815 128.0 +27.502777 -1.3746076 6.1173606 128.0 +27.505524 -1.5439928 6.1199493 128.0 +27.493582 -1.712613 6.1195183 128.0 +27.485479 -1.8814783 6.1201653 128.0 +27.465628 -2.049509 6.1184392 128.0 +27.475893 -2.2198846 6.1236176 128.0 +27.458836 -2.3881779 6.1229701 128.0 +27.449499 -2.5571609 6.1242647 128.0 +27.450783 -2.727278 6.1281486 128.0 +19.142721 -2.0201931 4.2860069 128.0 +27.432714 -3.0658889 6.1320319 128.0 +27.402719 -3.2328961 6.1296587 128.0 +27.38818 -3.4016976 6.1309533 128.0 +27.400681 -3.5741062 6.138505 128.0 +27.360821 -3.7397852 6.1346211 128.0 +17.715664 -2.5318556 3.9869661 128.0 +27.376608 -4.0847764 6.1488609 128.0 +17.680365 -2.7486134 3.9863188 128.0 +17.718109 -2.865937 3.9986172 128.0 +18.536016 -3.1151202 4.185895 128.0 +19.047535 -3.3214195 4.3049936 128.0 +17.743069 -3.2061744 4.0167408 128.0 +17.622284 -3.2961266 3.9940863 128.0 +18.868132 -3.6492028 4.2791023 128.0 +0 -0 0 128.0 +18.066435 -3.7246625 4.1086535 128.0 +19.905672 -4.2314668 4.5293818 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.672356 -4.6892614 4.5013332 128.0 +20.480663 -5.0149922 4.6918473 128.0 +20.418255 -5.1327071 4.6847277 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9567866 -2.2610579 1.8604555 128.0 +7.9277625 -2.3054724 1.8570035 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0130367 -2.5451725 1.8904459 128.0 +7.9814801 -2.5891674 1.886778 128.0 +7.9672971 -2.6387062 1.8872095 128.0 +0 -0 0 128.0 +19.982899 -6.8933196 4.7034984 128.0 +19.966936 -7.0252023 4.7097554 128.0 +19.969408 -7.1640739 4.7205434 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.609943 -7.9700565 4.9153728 128.0 +20.54339 -8.0895681 4.9112735 128.0 +20.51512 -8.2241888 4.9164515 128.0 +18.712191 -7.6349139 4.4983125 128.0 +18.651464 -7.7439685 4.4950762 128.0 +0 -0 0 128.0 +18.578356 -7.9822912 4.5006862 128.0 +18.435974 -8.0554705 4.4782472 128.0 +18.345154 -8.1502008 4.4683223 128.0 +19.355528 -8.7417507 4.7255058 128.0 +19.198587 -8.8130894 4.7004776 128.0 +18.131855 -8.4584208 4.4536505 128.0 +19.236341 -9.1178732 4.7365093 128.0 +19.18795 -9.2395468 4.738451 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +14.234418 -7.9640884 3.636791 128.0 +14.154714 -8.033926 3.6290238 128.0 +14.020533 -8.0719013 3.6074479 128.0 +4.022862 -2.3480542 1.0619353 128.0 +3.9453681 -2.3353741 1.0457535 128.0 +4.0314136 -2.4198675 1.0716444 128.0 +4.1065593 -2.4994082 1.0949463 128.0 +4.1210561 -2.5430257 1.1027136 128.0 +3.0608408 -1.9144654 0.83042699 128.0 +3.0787179 -1.9520432 0.83819425 128.0 +3.0765376 -1.9772352 0.84078336 128.0 +3.1142459 -2.0286012 0.8539446 128.0 +3.1799529 -2.0993412 0.87465733 128.0 +3.1467266 -2.1052332 0.86926341 128.0 +3.1814251 -2.1568439 0.88199311 128.0 +3.1737638 -2.180196 0.88350344 128.0 +3.3502262 -2.3318877 0.93463808 128.0 +3.0949118 -2.1823866 0.86947918 128.0 +4.3166857 -3.0843341 1.2049829 128.0 +4.2336197 -3.0643733 1.1875064 128.0 +4.386375 -3.2161984 1.2345417 128.0 +4.356369 -3.2354815 1.2317368 128.0 +4.3450165 -3.2686095 1.2341101 128.0 +3.8100176 -2.9027495 1.0910627 128.0 +3.5463474 -2.7363229 1.0224515 128.0 +3.8987265 -3.0467172 1.1260154 128.0 +3.9358428 -3.11483 1.1417657 128.0 +4.1741457 -3.3453798 1.2146919 128.0 +3.4561434 -2.8046813 1.0161946 128.0 +3.5738797 -2.9368374 1.0548153 128.0 +3.6601021 -3.0455503 1.0848056 128.0 +3.1254575 -2.6330802 0.93571687 128.0 +2.9547594 -2.5203559 0.89083922 128.0 +2.9333289 -2.5333312 0.88911313 128.0 +2.9485939 -2.5782866 0.898175 128.0 +3.0701301 -2.7180543 0.93873745 128.0 +3.5447969 -3.1775529 1.0845898 128.0 +3.4211335 -3.1047237 1.0535207 128.0 +3.788053 -3.4805129 1.1693828 128.0 +3.7215929 -3.4617822 1.15579 128.0 +7.8344712 -7.3795209 2.4108541 128.0 +3.6321967 -3.4627116 1.1415499 128.0 +2.9892242 -2.8846776 0.95060414 128.0 +2.9993982 -2.9302669 0.95923448 128.0 +3.5157895 -3.4774702 1.1253681 128.0 +2.4727414 -2.4755032 0.80583054 128.0 +2.4746449 -2.5080111 0.81122452 128.0 +2.4707916 -2.5350394 0.81489241 128.0 +2.4646683 -2.5600033 0.817913 128.0 +2.4536228 -2.5800323 0.81942332 128.0 +2.4223745 -2.5786653 0.81446087 128.0 +2.401195 -2.5877521 0.81273484 128.0 +2.2144549 -2.4159434 0.75685352 128.0 +2.2847514 -2.5236166 0.78490204 128.0 +2.245801 -2.5113769 0.77713478 128.0 +2.2135489 -2.5060756 0.77152503 128.0 +2.4580007 -2.8176992 0.85890704 128.0 +2.1972828 -2.5500693 0.77648747 128.0 +2.1303558 -2.5032525 0.75901109 128.0 +2.1237481 -2.5267451 0.76203167 128.0 +2.4024487 -2.8944583 0.86386949 128.0 +2.1983919 -2.6817825 0.79892629 128.0 +2.1198683 -2.6185479 0.77713478 128.0 +2.0927911 -2.6177738 0.77325112 128.0 +1.9333594 -2.4488769 0.72211647 128.0 +1.9434991 -2.493047 0.73117828 128.0 +2.0609205 -2.6775234 0.77929235 128.0 +2.9084334 -3.8277781 1.0949463 128.0 +2.8638041 -3.8174274 1.0871789 128.0 +2.0397544 -2.7534602 0.78986448 128.0 +2.0643032 -2.822686 0.80539906 128.0 +2.1737716 -3.0110965 0.85329729 128.0 +2.4713187 -3.4681942 0.97369027 128.0 +1.9013753 -2.7028351 0.76289475 128.0 +1.4344498 -2.0654216 0.58834654 128.0 +2.4285777 -3.5445163 0.98210484 128.0 +2.4040496 -3.555306 0.98102605 128.0 +1.9303629 -2.8924727 0.80108386 128.0 +1.8894979 -2.8691885 0.79180628 128.0 +1.4905936 -2.2935355 0.63710785 128.0 +1.4469967 -2.2565949 0.62502539 128.0 +1.4628578 -2.3124802 0.63732356 128.0 +1.4594895 -2.3388133 0.64185452 128.0 +2.3253858 -3.7791851 1.0131739 128.0 +2.3117745 -3.8092451 1.0172734 128.0 +1.8011482 -3.0088463 0.80755663 128.0 +1.7707461 -2.9996564 0.80237842 128.0 +2.2628677 -3.8882906 1.0267668 128.0 +1.693972 -2.9517014 0.78468627 128.0 +1.1059217 -1.9539117 0.52879733 128.0 +1.0896342 -1.9529841 0.52685553 128.0 +1.0795107 -1.9630566 0.52771854 128.0 +1.9366235 -3.5754588 0.93118596 128.0 +1.9091341 -3.5769358 0.92859685 128.0 +1.5601062 -2.9662404 0.77325112 128.0 +1.4880064 -2.8717012 0.74736017 128.0 +0 -0 0 128.0 +1.3172375 -2.6201184 0.68069094 128.0 +1.3227799 -2.6719139 0.69147885 128.0 +1.6633233 -3.4130187 0.87163675 128.0 +1.653747 -3.4469337 0.87746221 128.0 +1.1571167 -2.4494326 0.63128239 128.0 +1.6117345 -3.467854 0.87767798 128.0 +0.94231993 -2.0593543 0.53311247 128.0 +0.92926586 -2.0642068 0.5328967 128.0 +1.1637888 -2.6289072 0.66796124 128.0 +0 -0 0 128.0 +1.2635052 -2.9518373 0.74218196 128.0 +0 -0 0 128.0 +1.5612717 -3.7757182 0.9355011 128.0 +1.5263208 -3.7562757 0.92859685 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.93997538 -2.4854324 0.61984718 128.0 +0.92029524 -2.4792507 0.61704236 128.0 +0 -0 0 128.0 +0.89636439 -2.5087507 0.6213575 128.0 +1.1631271 -3.3206539 0.81014574 128.0 +1.1607889 -3.3803747 0.8224439 128.0 +1.1260238 -3.3457839 0.81273484 128.0 +1.1005858 -3.337791 0.80928272 128.0 +0.74674314 -2.311106 0.56935984 128.0 +0.92162895 -2.9143522 0.70809221 128.0 +1.3160574 -4.2540035 1.0166261 128.0 +0.70181584 -2.3169825 0.56763375 128.0 +1.2634784 -4.2688966 1.0164104 128.0 +0.78123605 -2.698765 0.65350544 128.0 +0.65506846 -2.3154125 0.56439739 128.0 +0.91263866 -3.3049386 0.79029602 128.0 +0.85858625 -3.1850727 0.7616002 128.0 +0.81298494 -3.0911164 0.7389456 128.0 +0.78770524 -3.0714526 0.73333591 128.0 +0.7643525 -3.0582275 0.72923648 128.0 +1.9808564 -8.1457348 1.885052 128.0 +0.71620178 -3.0227163 0.71909589 128.0 +0.76485324 -3.3191912 0.78533357 128.0 +0.84888601 -3.7907486 0.89105499 128.0 +1.8721596 -8.6146049 1.9806328 128.0 +0.60314023 -2.8559349 0.6776703 128.0 +0.68336135 -3.3379185 0.78554934 128.0 +0.55837655 -2.8142707 0.66666669 128.0 +0.56351644 -2.9346421 0.69298917 128.0 +0.56470913 -3.0417364 0.71629101 128.0 +1.6148627 -9.0188971 2.0572269 128.0 +1.4523753 -8.4080038 1.9180629 128.0 +1.392749 -8.3685961 1.9072751 128.0 +1.2767415 -7.9729905 1.8168725 128.0 +0.51222759 -3.3249638 0.77605599 128.0 +1.3220695 -8.9598598 2.0339251 128.0 +1.1686655 -8.2706957 1.8783635 128.0 +1.0398294 -7.6990376 1.7493402 128.0 +0.34885809 -2.7021894 0.63473451 128.0 +0.36893734 -3.0037649 0.70140368 128.0 +0.29414392 -2.5210123 0.59352469 128.0 +0.27995083 -2.5344167 0.5961138 128.0 +0.26459628 -2.5380292 0.59654534 128.0 +0.2742455 -2.7981117 0.65393692 128.0 +0.37767407 -4.1192803 0.94672054 128.0 +0.23118255 -2.6991098 0.63128239 128.0 +0.23546615 -2.964272 0.68975276 128.0 +0.21684752 -2.9598179 0.6884582 128.0 +0.19023442 -2.8344359 0.66040969 128.0 +0.1796246 -2.9476361 0.68522185 128.0 +0.13428099 -2.4475296 0.57432228 128.0 +0.1868566 -3.8498323 0.88436645 128.0 +0 -0 0 128.0 +0.091661945 -2.5178938 0.58942533 128.0 +0.083015271 -2.7467959 0.63991266 128.0 +0.065212995 -2.7072306 0.63106662 128.0 +0.048480812 -2.7007456 0.6295563 128.0 +0.032175057 -2.7244256 0.63473451 128.0 +0.015442338 -2.7216423 0.6340872 128.0 +-0.0013021802 -2.7714846 0.64509088 128.0 +-0.018451825 -2.7919292 0.64962178 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.4127504 -3.5903182 0.88522953 128.0 +-1.45801 -3.6395862 0.89903802 128.0 +-1.4766252 -3.6215308 0.89688045 128.0 +-1.5010656 -3.6178129 0.898175 128.0 +-0 -0 0 128.0 +-1.5337832 -3.5722065 0.89170223 128.0 +-3.5951931 -8.2296867 2.0170958 128.0 +-1.5846411 -3.5691774 0.89558589 128.0 +-1.631031 -3.6136694 0.90874714 128.0 +-1.6552105 -3.6080306 0.90982592 128.0 +-1.6760793 -3.5951519 0.90917861 128.0 +-3.8396711 -8.1022978 2.0138595 128.0 +-1.6340641 -3.3957257 0.86537975 128.0 +-1.5836434 -3.2400327 0.82956392 128.0 +-1.5982807 -3.2197609 0.82697487 128.0 +-1.6180067 -3.2098935 0.82697487 128.0 +-1.6403426 -3.2051196 0.82826942 128.0 +-1.6595275 -3.194128 0.82805365 128.0 +-1.6508372 -3.1303451 0.81467664 128.0 +-4.262115 -7.9592214 2.027668 128.0 +-4.2996798 -7.9123302 2.0224898 128.0 +-4.8994389 -8.8853111 2.2747109 128.0 +-4.9810448 -8.9036512 2.287009 128.0 +-1.9890355 -3.506211 0.92341864 128.0 +-1.9262176 -3.3475497 0.88609254 128.0 +-1.9388425 -3.3221767 0.88264042 128.0 +-1.984568 -3.353065 0.89364403 128.0 +-2.0599036 -3.4320664 0.9171617 128.0 +-2.0900652 -3.4343739 0.9210453 128.0 +-4.6005778 -7.4535737 1.9681188 128.0 +-4.7115016 -7.5294929 1.9953043 128.0 +-0 -0 0 128.0 +-4.7417479 -7.375021 1.9700606 128.0 +-4.9234133 -7.5551963 2.0252945 128.0 +-5.1225338 -7.7562246 2.08657 128.0 +-5.2319546 -7.8171473 2.1111662 128.0 +-5.2650204 -7.7630796 2.105341 128.0 +-0 -0 0 128.0 +-5.3057575 -7.620163 2.0844123 128.0 +-5.4047694 -7.6616616 2.1044779 128.0 +-5.4692822 -7.6529794 2.1111662 128.0 +-5.5350361 -7.6453748 2.1182864 128.0 +-0 -0 0 128.0 +-5.750155 -7.7406831 2.1633797 128.0 +-5.7470465 -7.6381598 2.1448245 128.0 +-5.8559594 -7.6842918 2.1674793 128.0 +-5.9185133 -7.6683116 2.1730888 128.0 +-5.9407949 -7.6003127 2.1642427 128.0 +-6.1485505 -7.7673502 2.2216344 128.0 +-6.3549085 -7.927546 2.2777314 128.0 +-6.4415913 -7.9354024 2.2911084 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.2696991 -9.1419201 2.9094708 128.0 +-9.4704113 -9.2258997 2.9541328 128.0 +-9.2538261 -8.9049425 2.8704185 128.0 +-9.3210316 -8.8601017 2.8743024 128.0 +-10.576204 -9.9301834 3.238286 128.0 +-10.636936 -9.8651018 3.238286 128.0 +-10.636783 -9.7442493 3.2201624 128.0 +-0 -0 0 128.0 +-10.750462 -9.6084318 3.218652 128.0 +-0 -0 0 128.0 +-9.3373747 -8.1417818 2.7700913 128.0 +-9.3183413 -8.0250835 2.7500257 128.0 +-9.5094795 -8.0885773 2.7912354 128.0 +-9.4811697 -7.9647646 2.7687967 128.0 +-9.4840174 -7.8684115 2.7556355 128.0 +-10.390205 -8.5130005 3.0007365 128.0 +-9.8288593 -7.9528704 2.8264041 128.0 +-11.319342 -9.0442915 3.2341866 128.0 +-11.42982 -9.0182095 3.2497213 128.0 +-11.404826 -8.8855028 3.2272823 128.0 +-11.417337 -8.7832098 3.2156315 128.0 +-11.467904 -8.7106266 3.2147684 128.0 +-0 -0 0 128.0 +-10.361403 -7.671648 2.8814223 128.0 +-10.405915 -7.6061988 2.880775 128.0 +-11.410564 -8.23347 3.1418421 128.0 +-11.262027 -8.0216951 3.0879028 128.0 +-11.274289 -7.9266114 3.0779779 128.0 +-11.313087 -7.850605 3.0753887 128.0 +-11.518147 -7.8886204 3.1174614 128.0 +-11.491903 -7.7674985 3.0976119 128.0 +-11.117727 -7.4156666 2.9856334 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-11.120554 -7.0294771 2.939677 128.0 +-11.079787 -6.9089355 2.9178853 128.0 +-11.096187 -6.824965 2.9111969 128.0 +-6.4583311 -3.9185085 1.7018734 128.0 +-11.185807 -6.6922936 2.9129231 128.0 +-11.236753 -6.6294861 2.9155121 128.0 +-6.4458017 -3.7503664 1.6805134 128.0 +-6.5076571 -3.733089 1.6904383 128.0 +-6.5355406 -3.6959717 1.6917328 128.0 +-16.490772 -9.1907167 4.2042346 128.0 +-17.911091 -9.8386364 4.5481529 128.0 +-15.979739 -8.6506767 4.0478101 128.0 +-16.009256 -8.5400572 4.0419846 128.0 +-15.987885 -8.4030561 4.0236449 128.0 +-6.6151223 -3.4259772 1.6787874 128.0 +-6.594265 -3.3640308 1.6684309 128.0 +-16.266373 -8.1708927 4.0549297 128.0 +-6.4407449 -3.1867566 1.6205326 128.0 +-6.5040717 -3.1685522 1.6313206 128.0 +-6.9926958 -3.3535666 1.7463195 128.0 +-7.0855532 -3.3447661 1.7640117 128.0 +-7.3751688 -3.4262526 1.8296021 128.0 +-18.021492 -8.2362499 4.4109306 128.0 +-7.3222561 -3.2930508 1.8067318 128.0 +-7.34411 -3.2488501 1.8071634 128.0 +-7.3495793 -3.1974957 1.8037112 128.0 +-7.333148 -3.1369829 1.7950809 128.0 +-7.3504581 -3.0911717 1.7946494 128.0 +-7.3846283 -3.0523508 1.7983173 128.0 +-17.804831 -7.2300439 4.2788868 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.0772219 -2.6247294 1.7005789 128.0 +-7.0959463 -2.5822563 1.7012261 128.0 +-7.1512027 -2.5527775 1.7105038 128.0 +-7.2883906 -2.5514183 1.7389839 128.0 +-7.4609237 -2.5605094 1.7756627 128.0 +-7.9013195 -2.6574991 1.8746955 128.0 +-8.3060732 -2.7369571 1.9650981 128.0 +-8.5187922 -2.7491913 2.0106232 128.0 +-8.5550537 -2.7030447 2.0151541 128.0 +-8.5145712 -2.6329119 2.0019927 128.0 +-8.5791683 -2.5953138 2.0132122 128.0 +-8.6801405 -2.5678196 2.0328462 128.0 +-12.760314 -3.6892769 2.9677255 128.0 +-8.4770136 -2.3950329 1.9791224 128.0 +-8.6976957 -2.3998239 2.0263734 128.0 +-12.548852 -3.3791566 2.9042926 128.0 +-8.7765455 -2.3060539 2.0378087 128.0 +-12.494781 -3.2006865 2.8827169 128.0 +-12.499027 -3.1201773 2.8792648 128.0 +-18.53351 -4.5053811 4.2471704 128.0 +-18.572208 -4.3942742 4.2497592 128.0 +-14.639268 -3.369261 3.3519905 128.0 +-14.642513 -3.2755373 3.3481069 128.0 +-12.639428 -2.7462873 2.8906999 128.0 +-12.7277 -2.683785 2.9068818 128.0 +-13.074938 -2.673286 2.981534 128.0 +-13.024044 -2.5797346 2.9664309 128.0 +-13.041546 -2.5001395 2.9668624 128.0 +-17.524992 -3.2478781 3.9710002 128.0 +-17.03228 -3.0486226 3.8560011 128.0 +-17.143038 -2.9600003 3.8767138 128.0 +-17.029881 -2.8329742 3.8473709 128.0 +-17.609062 -2.8183575 3.9731576 128.0 +-17.343246 -2.6667953 3.9099405 128.0 +-0 -0 0 128.0 +-16.394268 -2.3153749 3.6911621 128.0 +-18.354172 -2.4772646 4.1250515 128.0 +-13.632271 -1.7551541 3.0697789 128.0 +-13.159148 -1.6122634 2.9621158 128.0 +-16.510166 -1.919781 3.7054021 128.0 +-11.903553 -1.3104857 2.6788256 128.0 +-13.068105 -1.3574758 2.9357934 128.0 +-12.912921 -1.2613328 2.8995459 128.0 +-12.102633 -1.1073334 2.7180936 128.0 +-13.331189 -1.1371825 2.9890854 128.0 +-12.053987 -0.9538852 2.7045007 128.0 +-18.062517 -1.3173078 4.0344329 128.0 +-12.024838 -0.80322808 2.6956546 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-20.383766 12.386823 5.0115385 128.0 +-20.309046 12.51269 5.0119472 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-22.251036 14.280746 5.5515699 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-19.266722 13.391662 4.9304214 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-19.171679 14.400386 5.0376921 128.0 +-19.053352 14.495228 5.0299277 128.0 +-0 0 0 128.0 +-16.891403 13.180895 4.5050163 128.0 +-0 0 0 128.0 +-16.788761 13.435504 4.5211577 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-36.820732 30.59444 10.02527 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-16.236031 14.533629 4.5812297 128.0 +-16.129866 14.61786 4.57653 128.0 +-0 0 0 128.0 +-15.963612 14.828021 4.5806165 128.0 +-0 0 0 128.0 +-16.684437 15.88336 4.8411312 128.0 +-14.014641 13.506725 4.0955486 128.0 +-13.9308 13.59178 4.0953441 128.0 +-13.846444 13.676313 4.09514 128.0 +-0 0 0 128.0 +-14.255471 14.430159 4.2667732 128.0 +-14.156405 14.506848 4.2637081 128.0 +-15.159565 15.726705 4.5922632 128.0 +-14.587554 15.320343 4.4484181 128.0 +-14.017765 14.904009 4.3035517 128.0 +-14.359807 15.456607 4.4365673 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-12.987053 15.242305 4.2126269 128.0 +-13.727167 16.312611 4.4829493 128.0 +-13.59303 16.355879 4.4719157 128.0 +-12.576354 15.322899 4.170536 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-11.718069 15.597549 4.1049476 128.0 +-11.455936 15.445083 4.0467148 128.0 +-11.471416 15.665934 4.085741 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.3948317 13.513826 3.4682701 128.0 +-0 0 0 128.0 +-9.2475004 13.656466 3.4754214 128.0 +-9.1004391 13.61854 3.4517198 128.0 +-8.6039095 13.048136 3.2952065 128.0 +-8.840807 13.588063 3.4165759 128.0 +-8.8397627 13.770561 3.4484506 128.0 +-9.4511852 14.923619 3.7199988 128.0 +-8.1208286 12.998827 3.2320702 128.0 +-9.9123907 16.085176 3.9766312 128.0 +-9.8246937 16.164099 3.9811263 128.0 +-9.7253275 16.224077 3.9811263 128.0 +-0 0 0 128.0 +-8.2797642 14.205082 3.4647965 128.0 +-8.966054 15.601692 3.7888563 128.0 +-7.9320674 14.00071 3.3916481 128.0 +-7.9290652 14.197824 3.4272008 128.0 +-0 0 0 128.0 +-8.622014 15.89361 3.8070412 128.0 +-7.8242221 14.636611 3.4970798 128.0 +-7.7712188 14.754498 3.5136304 128.0 +-7.6760316 14.793215 3.5115871 128.0 +-0 0 0 128.0 +-8.150672 16.19083 3.8164403 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.1644254 15.146249 3.5301807 128.0 +-7.7063746 16.553923 3.8442285 128.0 +-7.217339 15.755434 3.6501195 128.0 +-7.1446638 15.852969 3.662379 128.0 +-7.0175014 15.829392 3.6470547 128.0 +-6.9789295 16.00675 3.6777034 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-6.2178421 15.273808 3.4750128 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.7295804 13.746148 3.0671797 128.0 +-4.6589108 13.815722 3.07617 128.0 +-4.5457959 13.758537 3.0573721 128.0 +-4.4841971 13.856953 3.0729008 128.0 +-0 0 0 128.0 +-4.193768 13.523859 2.9883101 128.0 +-4.4176679 14.561008 3.2089815 128.0 +-4.3338094 14.60661 3.213068 128.0 +-4.2345586 14.600021 3.2059166 128.0 +-3.8357882 13.535118 2.9693079 128.0 +-4.2809682 15.46695 3.3826578 128.0 +-4.1336365 15.2992 3.3407712 128.0 +-0 0 0 128.0 +-3.5317132 13.738945 2.9938269 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.491802 14.700689 3.1867099 128.0 +-3.4028568 14.727561 3.1879358 128.0 +-3.3034153 14.708049 3.1793542 128.0 +-3.0941606 14.182892 3.0628889 128.0 +-2.8344908 13.386638 2.889008 128.0 +-2.8732104 13.992537 3.0144639 128.0 +-2.8469033 14.309448 3.0782132 128.0 +-2.7707126 14.387205 3.0910857 128.0 +-2.4613779 13.217354 2.8391528 128.0 +-2.6074708 14.495271 3.1070232 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.2727013 14.121366 3.0183461 128.0 +-0 0 0 128.0 +-2.0703559 13.953564 2.9772766 128.0 +-1.9889698 13.996049 2.9836106 128.0 +-1.9097762 14.057459 2.9940312 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.2002687 13.944143 2.9541879 128.0 +1.2982129 14.071033 2.9823847 128.0 +1.3779106 13.995584 2.9682863 128.0 +1.5156074 14.482423 3.0722878 128.0 +1.6994423 15.330015 3.2522984 128.0 +1.7824348 15.224989 3.2324789 128.0 +1.8912697 15.339096 3.2588367 128.0 +2.0221901 15.611646 3.3187041 128.0 +2.6104188 19.226767 4.0828805 128.0 +2.7712827 19.512772 4.1466298 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.2668018 14.091578 3.012012 128.0 +2.363874 14.141129 3.0254974 128.0 +2.4482558 14.112854 3.0226369 128.0 +2.5356705 14.102384 3.0236585 128.0 +2.6180339 14.064425 3.018959 128.0 +2.7179735 14.119229 3.0340791 128.0 +0 0 0 128.0 +2.8544288 13.906454 2.9960744 128.0 +2.9403114 13.891551 2.9966874 128.0 +3.0267444 13.878986 2.9979134 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5566483 14.580366 3.1654601 128.0 +3.9104693 15.614203 3.3926697 128.0 +3.5331042 13.748695 2.9958701 128.0 +3.5540438 13.486323 2.9439716 128.0 +4.1959372 15.534854 3.3916481 128.0 +4.0139704 14.506861 3.1746547 128.0 +4.1250525 14.560131 3.1916137 128.0 +4.3778634 15.098658 3.314209 128.0 +4.4297862 14.934491 3.2843773 128.0 +4.3790054 14.437708 3.1820104 128.0 +0 0 0 128.0 +4.8478751 15.304898 3.3838837 128.0 +0 0 0 128.0 +4.8007741 14.534104 3.2277794 128.0 +5.1118808 15.16298 3.3728502 128.0 +5.1198139 14.884173 3.3182955 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.219585 12.718421 6.4937134 128.0 +28.19776 12.50099 6.4710331 128.0 +28.098957 12.251443 6.43119 128.0 +28.117821 12.054884 6.4185219 128.0 +28.119997 11.852093 6.40238 128.0 +28.118938 11.64898 6.3858294 128.0 +28.10194 11.440423 6.3660102 128.0 +28.089808 11.235058 6.347621 128.0 +28.075306 11.029917 6.3290272 128.0 +28.067566 10.828548 6.3122725 128.0 +28.053837 10.625957 6.2944965 128.0 +28.064375 10.433496 6.2824411 128.0 +28.057974 10.235602 6.2669125 128.0 +28.051126 10.038511 6.2515879 128.0 +28.037376 9.8399448 6.2350378 128.0 +27.998182 9.6336451 6.2131748 128.0 +28.026155 9.4513474 6.2064323 128.0 +28.018557 9.2577057 6.1921296 128.0 +28.006845 9.0636091 6.1772137 128.0 +28.001276 8.8723717 6.1639323 128.0 +27.983196 8.6780643 6.1481996 128.0 +27.965662 8.4848833 6.132875 128.0 +27.965582 8.2978134 6.1216373 128.0 +27.95862 8.1094284 6.1091733 128.0 +27.934391 7.9169044 6.093236 128.0 +27.908855 7.7249837 6.0772986 128.0 +27.904699 7.5398035 6.0662651 128.0 +27.917309 7.3597074 6.0591135 128.0 +27.90316 7.1731596 6.0464454 128.0 +27.885878 6.9865875 6.0333686 128.0 +27.891132 6.8063002 6.0254002 128.0 +27.882845 6.6232705 6.0147753 128.0 +27.867641 6.4392767 6.0029244 128.0 +27.868423 6.2595811 5.9947515 128.0 +27.846054 6.0753193 5.9818788 128.0 +27.830135 5.8931904 5.9706407 128.0 +27.825499 5.714046 5.962059 128.0 +27.820671 5.5353723 5.9536819 128.0 +27.795477 5.3532696 5.9412179 128.0 +27.789307 5.1754494 5.9330449 128.0 +27.786819 4.9987736 5.9258938 128.0 +27.790928 4.8236623 5.9203768 128.0 +27.792967 4.6485276 5.9146557 128.0 +27.779409 4.4712162 5.90587 128.0 +27.749245 4.291852 5.8938146 128.0 +27.740198 4.1163321 5.8864589 128.0 +27.741673 3.9427378 5.8815551 128.0 +27.731394 3.7678306 5.8744035 128.0 +27.737488 3.5954638 5.8709302 128.0 +27.729881 3.4216051 5.8648005 128.0 +27.695908 3.2450135 5.8533583 128.0 +27.71335 3.0747976 5.8529496 128.0 +27.720987 2.9035718 5.8507018 128.0 +27.717823 2.7314081 5.8464112 128.0 +27.69507 2.557682 5.8382382 128.0 +27.681959 2.3852627 5.8323126 128.0 +27.664848 2.2128663 5.8257742 128.0 +27.650572 2.0410583 5.8200531 128.0 +27.649878 1.8705 5.8173971 128.0 +27.646179 1.6999069 5.814332 128.0 +27.630676 1.5288347 5.8090196 128.0 +27.629759 1.3587863 5.8069763 128.0 +27.612148 1.1881332 5.8016639 128.0 +27.620874 1.0187582 5.8020725 128.0 +27.614864 0.84889936 5.7996206 128.0 +27.593132 0.67879134 5.7941041 128.0 +27.588947 0.50932568 5.7924695 128.0 +27.579807 0.33988854 5.7900176 128.0 +27.581373 0.17065564 5.7900176 128.0 +27.576029 0.0014159139 5.7887917 128.0 +27.553003 -0.16765076 5.7840919 128.0 +27.575926 -0.33700839 5.7892003 128.0 +27.536148 -0.50552249 5.781436 128.0 +27.510998 -0.67394447 5.7769403 128.0 +27.524935 -0.84330541 5.7808228 128.0 +27.526091 -1.0124311 5.7822533 128.0 +27.515448 -1.1811411 5.781436 128.0 +27.510616 -1.3500944 5.7820487 128.0 +27.506701 -1.5191407 5.7830706 128.0 +27.496862 -1.6878902 5.7830706 128.0 +27.475245 -1.8558503 5.7808228 128.0 +27.474079 -2.0251918 5.7830706 128.0 +27.468941 -2.194355 5.7847052 128.0 +27.464712 -2.3636992 5.7867484 128.0 +27.46139 -2.5332539 5.7892003 128.0 +27.449226 -2.7020895 5.7900176 128.0 +19.183884 -2.0074954 4.0589743 128.0 +19.058344 -2.112659 4.0352726 128.0 +27.418173 -3.2096136 5.7949214 128.0 +27.397963 -3.3777878 5.7949214 128.0 +27.388371 -3.5473437 5.7973733 128.0 +27.368999 -3.7157238 5.797986 128.0 +27.33987 -3.8827612 5.7967601 128.0 +27.314564 -4.0502987 5.796556 128.0 +17.846228 -2.7584515 3.8021374 128.0 +17.829933 -2.8680573 3.8023417 128.0 +18.754337 -3.1349037 4.0017633 128.0 +0 -0 0 128.0 +17.808805 -3.2019975 3.8096976 128.0 +18.92539 -3.5227454 4.0510054 128.0 +18.159403 -3.4955997 3.8928578 128.0 +0 -0 0 128.0 +19.934204 -4.0915084 4.2804627 128.0 +0 -0 0 128.0 +18.197266 -3.9683557 3.9204419 128.0 +18.18499 -4.0827246 3.9230981 128.0 +19.693304 -4.5484276 4.2516527 128.0 +20.380299 -4.838995 4.4051013 128.0 +20.399677 -4.976017 4.4157262 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9314537 -2.247256 1.7535729 128.0 +7.9231567 -2.2975156 1.7547989 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9763722 -2.5267365 1.779318 128.0 +7.9653749 -2.5771375 1.7803396 128.0 +7.9280334 -2.6189024 1.7756401 128.0 +0 -0 0 128.0 +19.928196 -6.8547025 4.4316635 128.0 +19.952269 -7.0001831 4.4463749 128.0 +19.851795 -7.1020331 4.4337068 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.451509 -7.887897 4.6082006 128.0 +20.434616 -8.0257607 4.6153517 128.0 +20.411345 -8.1615334 4.6212773 128.0 +18.775074 -7.6412506 4.2639122 128.0 +20.438984 -8.4649582 4.6504955 128.0 +0 -0 0 128.0 +18.575459 -7.9616351 4.2512441 128.0 +18.493055 -8.0609903 4.2436843 128.0 +19.470646 -8.6296444 4.4782495 128.0 +19.318262 -8.7043171 4.4555693 128.0 +19.424692 -8.8960533 4.4923482 128.0 +19.351992 -9.006813 4.4882617 128.0 +19.298132 -9.1262217 4.4886703 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.1571341 -2.1569605 1.0104423 128.0 +4.1481519 -2.1847081 1.0114639 128.0 +4.1208553 -2.2027373 1.0081947 128.0 +4.1218905 -2.2359145 1.0116682 128.0 +4.0291924 -2.2177441 0.99287027 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +14.040711 -8.0673895 3.4128981 128.0 +4.0851955 -2.3810148 1.0198412 128.0 +4.0882068 -2.4164953 1.024132 128.0 +4.0917749 -2.452605 1.0286272 128.0 +4.1059289 -2.4954574 1.0357785 128.0 +4.9339685 -3.0402336 1.2425556 128.0 +4.0949225 -2.5581014 1.0406823 128.0 +4.8508 -3.0717509 1.2313178 128.0 +4.8054981 -3.084538 1.2247794 128.0 +3.1732295 -2.0645807 0.82307601 128.0 +3.1580498 -2.082396 0.82246304 128.0 +3.1582365 -2.110435 0.82573223 128.0 +3.1322579 -2.1209934 0.82246304 128.0 +3.2338114 -2.2188041 0.85147721 128.0 +3.2048635 -2.2279897 0.84759504 128.0 +3.258364 -2.2949555 0.86475831 128.0 +3.2330644 -2.306946 0.86189777 128.0 +3.1894927 -2.3055251 0.85433775 128.0 +3.1839747 -2.3314128 0.85658532 128.0 +4.0400443 -2.9963753 1.0827733 128.0 +4.3886728 -3.2968304 1.1786019 128.0 +4.4704213 -3.4013386 1.2053684 128.0 +4.4339585 -3.4167554 1.2012819 128.0 +3.0499923 -2.3804095 0.84044367 128.0 +3.0322568 -2.3966513 0.83962631 128.0 +3.4592631 -2.7687321 0.9577263 128.0 +3.4308012 -2.7806611 0.95466143 128.0 +4.3770084 -3.5921419 1.2147675 128.0 +3.3090813 -2.7499843 0.9309597 128.0 +3.173044 -2.6700349 0.89847201 128.0 +3.3257582 -2.83355 0.94485384 128.0 +3.310533 -2.8558211 0.94546682 128.0 +3.2811503 -2.8657784 0.94219762 128.0 +3.9103405 -3.4577396 1.1224124 128.0 +3.1793621 -2.8464153 0.92360401 128.0 +3.1545832 -2.8592963 0.92156076 128.0 +4.1893787 -3.8441386 1.2196712 128.0 +3.1192577 -2.8977928 0.92156076 128.0 +3.1042712 -2.91956 0.92237806 128.0 +3.0926797 -2.9446268 0.92421699 128.0 +3.0245087 -2.9153185 0.90970987 128.0 +2.4803562 -2.4204407 0.75626165 128.0 +4.4211407 -4.3671904 1.3300068 128.0 +2.4587736 -2.4590018 0.75871354 128.0 +2.4484551 -2.4789169 0.76014382 128.0 +2.4755874 -2.5373302 0.77281201 128.0 +3.4457479 -3.5750909 1.0692879 128.0 +3.4223964 -3.5947485 1.0688792 128.0 +2.4204159 -2.573911 0.77036011 128.0 +2.374594 -2.556442 0.76116544 128.0 +2.3078988 -2.5154295 0.74543244 128.0 +2.2819018 -2.5179389 0.74216324 128.0 +2.2513907 -2.5151191 0.73746371 128.0 +2.2197037 -2.5105538 0.73235559 128.0 +2.1733465 -2.4887381 0.72254801 128.0 +2.1829731 -2.5309331 0.73051667 128.0 +3.2955871 -3.8683259 1.0936025 128.0 +3.2787225 -3.8967133 1.0958501 128.0 +2.3881702 -2.874079 0.81285971 128.0 +2.1916254 -2.6707597 0.75401407 128.0 +1.8713092 -2.3092513 0.65328175 128.0 +1.8277417 -2.2840071 0.64347416 128.0 +1.8519355 -2.3435607 0.65634662 128.0 +1.9959264 -2.5578303 0.71008414 128.0 +2.2084608 -2.8662152 0.78813636 128.0 +2.1825335 -2.8688059 0.78527582 128.0 +2.9686811 -3.9520004 1.0645884 128.0 +2.9560397 -3.9858658 1.0686749 128.0 +3.4306417 -4.6855154 1.2450075 128.0 +3.393225 -4.6945777 1.2419426 128.0 +1.4526799 -2.0363824 0.55500132 128.0 +1.4395938 -2.0444572 0.55479699 128.0 +1.429816 -2.0572708 0.55581862 128.0 +1.4271352 -2.080534 0.55949646 128.0 +1.4176358 -2.0941148 0.56072241 128.0 +2.1063943 -3.1526952 0.82430196 128.0 +1.668286 -2.5305848 0.66554129 128.0 +1.631906 -2.5087738 0.65757257 128.0 +1.6022034 -2.4964981 0.6520558 128.0 +1.5281934 -2.4136586 0.62917137 128.0 +2.3551736 -3.7703943 0.96079117 128.0 +1.8877504 -3.0639174 0.78404987 128.0 +2.3107615 -3.8023579 0.96160847 128.0 +1.8268569 -3.0482306 0.77465093 128.0 +2.2704027 -3.841383 0.96426469 128.0 +2.2527053 -3.8653901 0.96671665 128.0 +2.2372375 -3.893568 0.97019017 128.0 +1.0971544 -1.9372418 0.49758595 128.0 +1.0857244 -1.9447919 0.49779028 128.0 +1.0737709 -1.9514172 0.49779028 128.0 +1.0697125 -1.9725964 0.5012638 128.0 +1.0742031 -2.0102012 0.50861949 128.0 +1.0677792 -2.0280139 0.51127577 128.0 +1.0765067 -2.0753651 0.52087903 128.0 +1.0677621 -2.089776 0.52271795 128.0 +1.1024592 -2.1907182 0.54478508 128.0 +1.124216 -2.2684815 0.56133538 128.0 +1.2275075 -2.5154912 0.61711621 128.0 +0 -0 0 128.0 +1.3074732 -2.7648613 0.67126238 128.0 +1.6726525 -3.5937159 0.86026317 128.0 +0.95625317 -2.0883086 0.51229739 128.0 +0.94945508 -2.1075232 0.51536226 128.0 +0.92698365 -2.0918319 0.51045841 128.0 +1.1883987 -2.7264977 0.6536904 128.0 +1.4096477 -3.288852 0.77975905 128.0 +1.3829776 -3.2821047 0.77628553 128.0 +1.2268081 -2.9622445 0.70211548 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.4398285 -3.6658325 0.85495073 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.92268527 -2.5303099 0.59504908 128.0 +1.2547965 -3.5073521 0.81040782 128.0 +0.8961035 -2.5543735 0.59790963 128.0 +0.87627268 -2.5477905 0.59525341 128.0 +1.1321529 -3.3582535 0.77260768 128.0 +0.78198081 -2.3678093 0.55336672 128.0 +0.77437007 -2.3939838 0.55806619 128.0 +0.72359139 -2.2848427 0.53313851 128.0 +0.71042818 -2.2920446 0.53375149 128.0 +1.2488784 -4.1173701 0.9309597 128.0 +1.2428055 -4.1897092 0.94505817 128.0 +0.67139119 -2.3160148 0.53620338 128.0 +0.78582877 -2.7740414 0.63468814 128.0 +0.89649397 -3.2401462 0.73460317 128.0 +1.0691329 -3.9581242 0.88866436 128.0 +0.81698632 -3.1004007 0.70211548 128.0 +0.78941643 -3.0721726 0.69496411 128.0 +0.77007526 -3.0750594 0.69455546 128.0 +1.9605894 -8.0353508 1.759294 128.0 +0.78612804 -3.3109488 0.74318486 128.0 +0.77417278 -3.3519535 0.7509492 128.0 +1.7964767 -7.9994001 1.744174 128.0 +0.92684174 -4.2496991 0.94076729 128.0 +0.89932901 -4.2486024 0.93933702 128.0 +0.55776972 -2.7178972 0.61200804 128.0 +1.6506275 -8.2974205 1.7987288 128.0 +1.6048684 -8.3343067 1.8044499 128.0 +0.78457546 -4.2145391 0.92769051 128.0 +0.59663439 -3.3184624 0.73664641 128.0 +0.57324791 -3.3047001 0.73296857 128.0 +1.4066339 -8.4117327 1.8130317 128.0 +1.2933881 -8.0374861 1.7321188 128.0 +1.2530249 -8.1033144 1.7443783 128.0 +0.43938029 -2.9633756 0.65818554 128.0 +0.39267397 -2.7653992 0.61589026 128.0 +0.37688464 -2.7764866 0.61772919 128.0 +0.50444382 -3.8941724 0.85249883 128.0 +0.31928572 -2.590482 0.57768142 128.0 +0.2932452 -2.505862 0.55949646 128.0 +0.28650084 -2.5854485 0.5758425 128.0 +0.27195728 -2.5998144 0.57849872 128.0 +0.26348901 -2.6774204 0.59443611 128.0 +0.38129604 -4.1323447 0.89908499 128.0 +0.24322076 -2.8267455 0.62508488 128.0 +0.21517667 -2.6945019 0.59709233 128.0 +0.18177357 -2.46733 0.54928023 128.0 +0.17627931 -2.6109927 0.5791117 128.0 +0 -0 0 128.0 +0.2107076 -3.8141928 0.83022738 128.0 +0.15372883 -3.1329648 0.68760836 128.0 +0.12351527 -2.8785918 0.63427949 128.0 +0.10296266 -2.8010364 0.61793351 128.0 +0.082644351 -2.6998577 0.59668368 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.033272944 -2.7283287 0.60240477 128.0 +0.016574102 -2.7353337 0.60383505 128.0 +-0.00021054308 -2.7255948 0.6017918 128.0 +-0.016987955 -2.7343521 0.60363072 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.10707791 -2.9017801 0.63897902 128.0 +-0.12509073 -2.9059587 0.64000064 128.0 +-0.14229541 -2.892426 0.63734436 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.5102159 -3.5832844 0.84453017 128.0 +-1.5306315 -3.5703514 0.84371287 128.0 +-0 -0 0 128.0 +-1.53546 -3.4635944 0.82368898 128.0 +-1.6290644 -3.6147573 0.86046749 128.0 +-1.6524363 -3.6073637 0.86108047 128.0 +-1.669583 -3.5865066 0.85862857 128.0 +-3.9977851 -8.4531279 1.9846648 128.0 +-3.9987094 -8.3225555 1.9601457 128.0 +-1.624126 -3.3273139 0.80570835 128.0 +-1.6049541 -3.2374704 0.78711474 128.0 +-1.6256688 -3.2293105 0.78752339 128.0 +-1.6423349 -3.2131729 0.78609312 128.0 +-1.6566105 -3.1926079 0.78364122 128.0 +-1.6944124 -3.2170296 0.79181427 128.0 +-4.6744313 -8.7457981 2.1027648 128.0 +-4.6986055 -8.6627398 2.0898921 128.0 +-4.8437018 -8.8009825 2.1297357 128.0 +-4.926722 -8.8232336 2.1421995 128.0 +-1.95681 -3.4539909 0.86148912 128.0 +-1.9199349 -3.3409135 0.83717442 128.0 +-1.9507482 -3.3468316 0.84146529 128.0 +-2.004616 -3.3912623 0.85515505 128.0 +-2.0374634 -3.3990505 0.86005884 128.0 +-5.0392127 -8.2920885 2.0582218 128.0 +-2.1098297 -3.4237974 0.87231839 128.0 +-2.1333909 -3.4149384 0.87334001 128.0 +-0 -0 0 128.0 +-5.0905075 -7.9311295 1.9999892 128.0 +-5.1582918 -7.929286 2.007345 128.0 +-5.1858349 -7.865612 1.9993762 128.0 +-5.132854 -7.6822472 1.9613717 128.0 +-5.2325773 -7.7284265 1.980987 128.0 +-0 -0 0 128.0 +-5.3823333 -7.7432108 2.0012152 128.0 +-5.4449606 -7.7316494 2.006732 128.0 +-5.4962783 -7.7036729 2.0081623 128.0 +-5.6013556 -7.7499361 2.0287991 128.0 +-5.6580548 -7.7280588 2.0320683 128.0 +-5.6884575 -7.6703935 2.0261428 128.0 +-5.7618704 -7.670567 2.0353374 128.0 +-5.9220304 -7.783874 2.0743635 128.0 +-6.1029124 -7.9203124 2.1199281 128.0 +-6.2314887 -7.9853601 2.1471033 128.0 +-6.3884015 -8.0836859 2.1834731 128.0 +-6.4482794 -8.0573282 2.1869466 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.4965363 -9.0421028 2.7698865 128.0 +-9.4256287 -8.864953 2.733721 128.0 +-10.21708 -9.4918966 2.9437673 128.0 +-9.6426115 -8.8485613 2.7645741 128.0 +-10.648286 -9.6517887 3.0326488 128.0 +-10.546133 -9.4419622 2.9874928 128.0 +-10.718996 -9.4788876 3.019572 128.0 +-10.119325 -8.8385105 2.8373139 128.0 +-9.3973379 -8.1067581 2.6233854 128.0 +-9.4558439 -8.0565634 2.6258373 128.0 +-9.5178328 -8.0091066 2.6293108 128.0 +-9.5938988 -7.9730806 2.6366665 128.0 +-10.376602 -8.5164909 2.834862 128.0 +-9.7647829 -7.9145393 2.656486 128.0 +-11.269012 -9.0198145 3.0457256 128.0 +-11.228149 -8.8746214 3.020185 128.0 +-11.251525 -8.7814674 3.012012 128.0 +-11.292789 -8.7027035 3.0087428 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.388875 -7.7054849 2.7326994 128.0 +-11.408978 -8.3541203 2.9844279 128.0 +-11.224407 -8.1136312 2.9237435 128.0 +-11.250075 -8.0275488 2.9176137 128.0 +-11.311924 -7.9673877 2.9208829 128.0 +-11.359795 -7.8972702 2.9206786 128.0 +-11.336201 -7.7781267 2.9024937 128.0 +-11.442883 -7.7484913 2.9174094 128.0 +-11.029548 -7.3702846 2.8017614 128.0 +-11.043509 -7.2819915 2.7939968 128.0 +-11.058444 -7.1948733 2.7866411 128.0 +-11.123801 -7.1406341 2.7919536 128.0 +-11.13598 -7.0523419 2.7841892 128.0 +-11.17074 -6.9786935 2.782146 128.0 +-0 -0 0 128.0 +-11.242991 -6.8334589 2.7790811 128.0 +-11.236012 -6.7351527 2.7672303 128.0 +-11.239206 -6.6436663 2.7580357 128.0 +-11.319509 -6.5977483 2.7676389 128.0 +-0 -0 0 128.0 +-16.511518 -9.354641 3.9939988 128.0 +-16.56348 -9.250288 3.9927728 128.0 +-16.603632 -9.139513 3.9888906 128.0 +-17.904451 -9.7129173 4.2845492 128.0 +-7.1657405 -3.8303301 1.7288496 128.0 +-6.7144852 -3.5362909 1.6168795 128.0 +-16.102623 -8.3555079 3.8195052 128.0 +-6.5987377 -3.3725393 1.5796922 128.0 +-7.1998763 -3.6242683 1.7153642 128.0 +-16.434361 -8.1472664 3.8615961 128.0 +-6.9860611 -3.4098217 1.6554968 128.0 +-7.0042048 -3.3656199 1.6548839 128.0 +-7.2662992 -3.4368553 1.7106646 128.0 +-7.340497 -3.4169948 1.7229242 128.0 +-17.876211 -8.1888943 4.1370263 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.2642164 -3.1669605 1.686963 128.0 +-17.460897 -7.4858069 3.9982896 128.0 +-17.557014 -7.3998199 4.0097318 128.0 +-17.611132 -7.2956991 4.011775 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.0245495 -2.6603782 1.6007377 128.0 +-7.0948763 -2.6373529 1.612793 128.0 +-7.1403527 -2.6045058 1.6193314 128.0 +-7.2640333 -2.599236 1.6432374 128.0 +-7.3768301 -2.5886548 1.6646916 128.0 +-8.3145094 -2.8605764 1.8681995 128.0 +-8.2205963 -2.7719672 1.8436804 128.0 +-8.3573523 -2.7610934 1.8700384 128.0 +-8.203701 -2.6546025 1.8326468 128.0 +-8.3038206 -2.6308281 1.8510361 128.0 +-8.3422461 -2.5867865 1.8559399 128.0 +-12.997601 -3.9433017 2.8679626 128.0 +-13.019675 -3.8629189 2.8675539 128.0 +-12.872025 -3.7333264 2.8303668 128.0 +-8.6951761 -2.4640272 1.9192808 128.0 +-8.7422085 -2.4195073 1.9262278 128.0 +-8.8107548 -2.3803756 1.9378743 128.0 +-12.56316 -3.3117449 2.7447546 128.0 +-12.567126 -3.230453 2.741281 128.0 +-0 -0 0 128.0 +-13.844016 -3.3781669 3.0073125 128.0 +-18.486477 -4.391129 3.9989026 128.0 +-18.5331 -4.2822437 4.0031934 128.0 +-18.498856 -4.1549301 3.9903209 128.0 +-12.70812 -2.7723806 2.7478194 128.0 +-12.986334 -2.7497184 2.8036003 128.0 +-0 -0 0 128.0 +-17.918394 -3.5650127 3.8462718 128.0 +-14.568879 -2.8057046 3.1297033 128.0 +-17.810665 -3.3168964 3.8143971 128.0 +-17.419296 -3.1335366 3.7271502 128.0 +-17.412153 -3.0220745 3.7216334 128.0 +-17.499886 -2.9268064 3.7363448 128.0 +-13.080485 -2.1051524 2.7982876 128.0 +-13.133787 -2.031137 2.8068695 128.0 +-17.063738 -2.5319147 3.6335692 128.0 +-18.255516 -2.5943995 3.8816199 128.0 +-13.266917 -1.8023552 2.8275063 128.0 +-13.429169 -1.7405497 2.859381 128.0 +-13.343413 -1.6462479 2.8391528 128.0 +-12.136978 -1.4218189 2.5835419 128.0 +-12.93063 -1.4344451 2.7484324 128.0 +-12.150591 -1.2724665 2.5829289 128.0 +-12.196163 -1.2016324 2.5908976 128.0 +-13.229723 -1.2215811 2.8060522 128.0 +-18.143642 -1.563243 3.8340123 128.0 +-12.20353 -0.97592252 2.5882413 128.0 +-13.40519 -0.98931837 2.8385398 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-13.599995 -0.75230438 2.8759313 128.0 +-13.585777 -0.6679284 2.8720491 128.0 +-13.62385 -0.58602846 2.8792005 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-20.435835 12.616043 4.7449198 128.0 +-20.341404 12.730784 4.7410693 128.0 +-0 0 0 128.0 +-22.348505 14.371747 5.2460542 128.0 +-22.533649 14.687045 5.310164 128.0 +-22.641247 14.955929 5.3567543 128.0 +-0 0 0 128.0 +-22.463318 15.237604 5.3584871 128.0 +-0 0 0 128.0 +-22.339058 15.556982 5.373889 128.0 +-19.327091 13.636112 4.6736865 128.0 +-19.265411 13.770423 4.6790771 128.0 +-21.034779 15.231133 5.128231 128.0 +-0 0 0 128.0 +-20.850224 15.491041 5.1291933 128.0 +-19.018103 14.311652 4.7027574 128.0 +-19.373989 14.766563 4.8123021 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-16.856291 13.345014 4.2511005 128.0 +-16.771793 13.446349 4.2505231 128.0 +-0 0 0 128.0 +-16.662373 13.697892 4.2649622 128.0 +-36.815735 30.648039 9.4312897 128.0 +-0 0 0 128.0 +-16.338001 13.943026 4.2470579 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.83448 31.627344 9.2639875 128.0 +-0 0 0 128.0 +-16.018766 14.905782 4.3259916 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-16.496319 15.926762 4.5317979 128.0 +-14.01311 13.696174 3.8774157 128.0 +-14.966 14.808273 4.1636958 128.0 +-15.96743 15.994355 4.4671106 128.0 +-14.29673 14.497504 4.0277753 128.0 +-0 0 0 128.0 +-14.642303 15.217062 4.1762099 128.0 +-14.083565 14.817243 4.0437546 128.0 +-12.903003 13.742938 3.7314839 128.0 +-0 0 0 128.0 +-12.735373 13.902414 3.7320616 128.0 +-12.615595 13.942456 3.7220504 128.0 +-12.51673 14.004967 3.7182 128.0 +-13.432534 15.216695 4.0152612 128.0 +-13.224132 15.167167 3.9809926 128.0 +-0 0 0 128.0 +-13.850725 16.285145 4.2274203 128.0 +-13.778941 16.403639 4.236084 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-11.902407 15.872003 3.9253535 128.0 +-11.45098 15.466781 3.8086853 128.0 +-11.389444 15.582703 3.8198516 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.2206383 13.463374 3.2345848 128.0 +-9.1378546 13.519697 3.2345848 128.0 +-9.1276827 13.684909 3.2603827 128.0 +-8.9777317 13.640652 3.2368951 128.0 +-8.861268 13.645276 3.2251513 128.0 +-8.3491497 13.030927 3.069401 128.0 +-8.6664152 13.710685 3.2153325 128.0 +-8.1761522 13.112417 3.0647805 128.0 +-8.0919437 13.156487 3.0634327 128.0 +-9.7331476 16.045158 3.7149272 128.0 +-7.8865628 13.182373 3.046876 128.0 +-8.4461727 14.316609 3.2942667 128.0 +-8.3265934 14.313876 3.2819452 128.0 +-8.1731968 14.250628 3.2561471 128.0 +-7.9571476 14.073281 3.2049365 128.0 +-8.7294836 15.663067 3.551091 128.0 +-8.6204576 15.693112 3.5458927 128.0 +-8.4754257 15.655961 3.5258706 128.0 +-7.8213434 14.66174 3.293304 128.0 +-7.7819033 14.805876 3.3146739 128.0 +-0 0 0 128.0 +-8.1840553 16.04632 3.5670702 128.0 +-8.0497684 16.025204 3.551476 128.0 +-8.0017519 16.176329 3.5738084 128.0 +-7.3554363 15.10202 3.328728 128.0 +-7.3585029 15.346848 3.3722379 128.0 +-7.7621069 16.446892 3.6011467 128.0 +-7.2473216 15.603313 3.408432 128.0 +-7.1942682 15.741204 3.4286468 128.0 +-6.8513041 15.237305 3.3108234 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-16.3929 38.333405 8.2126255 128.0 +-0 0 0 128.0 +-6.3641915 15.400392 3.3023524 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-6.113812 16.184147 3.4272993 128.0 +-6.0457721 16.306005 3.4450114 128.0 +-0 0 0 128.0 +-5.7146316 16.012976 3.3687725 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.5783978 13.615236 2.8512735 128.0 +-4.4966121 13.648664 2.8524287 128.0 +-4.4097681 13.666659 2.8505034 128.0 +-0 0 0 128.0 +-4.2234697 13.660681 2.8383746 128.0 +-4.1338892 13.667552 2.8345242 128.0 +-0 0 0 128.0 +-4.2353253 14.64959 3.0249283 128.0 +-3.8461461 13.615728 2.8089187 128.0 +-3.8360965 13.905837 2.86321 128.0 +-4.1287103 15.333402 3.1485274 128.0 +-3.6240356 13.795262 2.8314438 128.0 +-3.9672546 15.488432 3.1698973 128.0 +-3.8766589 15.530573 3.1735554 128.0 +-3.7745717 15.526415 3.1679721 128.0 +-3.6686158 15.5044 3.1589236 128.0 +-3.3863986 14.713756 2.99528 128.0 +-3.3031197 14.76586 3.0016332 128.0 +-3.3388731 15.367925 3.118494 128.0 +-3.0022681 14.238766 2.8880453 128.0 +-2.9228997 14.296338 2.8959386 128.0 +-2.6224372 13.239733 2.6810842 128.0 +-2.5527844 13.316291 2.693213 128.0 +-2.6317279 14.199126 2.8662903 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-5.0895672 31.805557 6.352478 128.0 +-2.1600513 14.046214 2.8212402 128.0 +-2.0610874 13.972803 2.8041058 128.0 +-4.4940791 31.828749 6.3395791 128.0 +-0 0 0 128.0 +-4.0291457 31.306299 6.2257986 128.0 +-3.8209989 31.199913 6.2000008 128.0 +-3.629601 31.223747 6.2001929 128.0 +-3.4320467 31.191782 6.1896043 128.0 +-3.259131 31.390871 6.2248359 128.0 +-3.0732257 31.47962 6.2385049 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.77456135 20.561413 4.0699377 128.0 +0.89688116 20.469021 4.052803 128.0 +1.0205477 20.424911 4.0452948 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.8965255 20.361275 4.0451021 128.0 +1.3829834 13.925963 2.7786927 128.0 +1.4744853 13.974792 2.7900515 128.0 +1.6218086 14.516479 2.8988264 128.0 +1.7339674 14.702134 2.9375234 128.0 +1.8677025 15.041788 3.0068314 128.0 +1.8865764 14.467625 2.8955536 128.0 +2.0440388 14.958428 2.9950874 128.0 +2.8265126 19.776442 3.9524992 128.0 +3.1468344 21.092253 4.2170243 128.0 +2.4238386 15.592167 3.1288903 128.0 +2.2600386 13.973816 2.8102663 128.0 +0 0 0 128.0 +2.4401174 13.995297 2.8202775 128.0 +2.5564923 14.14905 2.8539689 128.0 +2.603195 13.918966 2.811229 128.0 +2.6960068 13.941268 2.8189299 128.0 +2.7763059 13.898482 2.8137317 128.0 +3.3261192 16.133928 3.2650032 128.0 +2.9403257 13.833611 2.8077636 128.0 +3.0753374 14.044406 2.8537762 128.0 +3.617564 16.047955 3.2605753 128.0 +0 0 0 128.0 +3.7514098 15.738901 3.2074392 128.0 +0 0 0 128.0 +3.6832068 14.653408 2.9973977 128.0 +3.4975333 13.562525 2.781003 128.0 +3.545553 13.407996 2.75405 128.0 +3.9707911 14.651321 3.0112593 128.0 +4.0740061 14.674902 3.0210779 128.0 +4.3190885 15.195192 3.1323557 128.0 +4.3763289 15.044974 3.1071353 128.0 +4.4817176 15.062043 3.1161838 128.0 +4.6126208 15.160996 3.1421742 128.0 +4.537394 14.591752 3.0310891 128.0 +4.6509147 14.639388 3.0466833 128.0 +4.9108968 15.135126 3.1548808 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.208961 15.269977 6.3262949 128.0 +28.192163 15.037952 6.3018446 128.0 +28.224836 14.833645 6.288753 128.0 +28.222078 14.611909 6.2681532 128.0 +28.205427 14.384526 6.2448583 128.0 +28.21862 14.173755 6.2284937 128.0 +28.191589 13.944223 6.2036586 128.0 +28.18663 13.727159 6.1840215 128.0 +28.207502 13.523832 6.1703525 128.0 +28.170145 13.293967 6.144362 128.0 +28.150616 13.074163 6.1226068 128.0 +28.162476 12.870193 6.107975 128.0 +28.144253 12.653694 6.0871825 128.0 +28.14867 12.448621 6.0715885 128.0 +28.130938 12.234969 6.0515661 128.0 +28.116156 12.023935 6.0325065 128.0 +28.115225 11.820009 6.0167198 128.0 +28.091087 11.607555 5.9963126 128.0 +28.0945 11.407657 5.9820657 128.0 +28.108368 11.21288 5.9703221 128.0 +28.092581 11.007268 5.95261 128.0 +28.079912 10.804034 5.9358606 128.0 +28.077744 10.605879 5.9216137 128.0 +28.065002 10.404746 5.9054422 128.0 +28.043476 10.201488 5.8877301 128.0 +28.034378 10.003833 5.8729057 128.0 +28.021133 9.8057022 5.8575039 128.0 +27.99909 9.6055641 5.8405623 128.0 +27.998903 9.4138842 5.828433 128.0 +28.000217 9.2234907 5.8168821 128.0 +27.999315 9.0331345 5.8051381 128.0 +27.989649 8.8407726 5.7918539 128.0 +27.95149 8.6404676 5.7729869 128.0 +27.956076 8.4543123 5.7631683 128.0 +27.95661 8.2675934 5.7527723 128.0 +27.916313 8.0697422 5.7342901 128.0 +27.919973 7.8854985 5.725049 128.0 +27.902559 7.6960359 5.7117648 128.0 +27.92083 7.5170321 5.7059894 128.0 +27.907583 7.3301182 5.6940527 128.0 +27.889292 7.1426768 5.6813464 128.0 +27.892607 6.9614382 5.6732607 128.0 +27.88998 6.7792697 5.6642122 128.0 +27.861341 6.5915232 5.6501579 128.0 +27.859182 6.4107642 5.6416869 128.0 +27.84724 6.228353 5.6314831 128.0 +27.845615 6.0488296 5.62359 128.0 +27.840918 5.8691559 5.6153116 128.0 +27.812952 5.6852489 5.6026049 128.0 +27.800144 5.5051465 5.5931716 128.0 +27.796778 5.3274469 5.5858555 128.0 +27.802891 5.1519623 5.5806575 128.0 +27.793409 4.9740114 5.5725718 128.0 +27.787628 4.797205 5.5654483 128.0 +27.764267 4.6179214 5.5550518 128.0 +27.761072 4.4425154 5.5488915 128.0 +27.752893 4.2667265 5.5419607 128.0 +27.761076 4.0937815 5.5384951 128.0 +27.752636 3.9187021 5.5319495 128.0 +27.752819 3.7451928 5.527329 128.0 +27.732452 3.5693245 5.518858 128.0 +27.706104 3.3932509 5.5094242 128.0 +27.696186 3.2196741 5.5034561 128.0 +27.685183 3.0463469 5.497488 128.0 +27.684809 2.8744919 5.4938302 128.0 +27.689228 2.7033279 5.4913273 128.0 +27.676956 2.5307889 5.485744 128.0 +27.668497 2.3589191 5.4811234 128.0 +27.653103 2.1867845 5.475348 128.0 +27.650341 2.0159261 5.4722676 128.0 +27.639671 1.8447267 5.4678397 128.0 +27.626961 1.6736751 5.4632192 128.0 +27.612215 1.5027956 5.458406 128.0 +27.618956 1.3332473 5.4580212 128.0 +27.614851 1.1632605 5.4557109 128.0 +27.60774 0.9933036 5.4530153 128.0 +27.604486 0.82362396 5.4512825 128.0 +27.600191 0.65402168 5.4495502 128.0 +27.575232 0.48415941 5.4439669 128.0 +27.575722 0.31492952 5.4435821 128.0 +27.575172 0.14571187 5.4431968 128.0 +27.566715 -0.023481054 5.4414639 128.0 +27.560165 -0.19258541 5.440309 128.0 +27.548653 -0.36155859 5.4383836 128.0 +27.537085 -0.53041667 5.4366512 128.0 +27.52154 -0.69907153 5.434341 128.0 +27.530464 -0.86836106 5.437036 128.0 +27.543249 -1.0379714 5.4406939 128.0 +27.524597 -1.2064379 5.4383836 128.0 +27.521578 -1.3755481 5.4393463 128.0 +27.523396 -1.5449969 5.4414639 128.0 +27.49577 -1.7127492 5.4379988 128.0 +27.4867 -1.881562 5.4383836 128.0 +27.48736 -2.0511317 5.4408865 128.0 +27.478168 -2.2200685 5.4416566 128.0 +27.442522 -2.3867581 5.4374213 128.0 +27.447878 -2.5570097 5.4414639 128.0 +19.407928 -1.9278613 3.8595111 128.0 +27.424192 -2.8946753 5.4433894 128.0 +19.336973 -2.1607568 3.8504624 128.0 +27.406096 -3.2332947 5.4472399 128.0 +27.401321 -3.4033303 5.4503202 128.0 +27.38187 -3.5716515 5.4507051 128.0 +27.371105 -3.7411914 5.4530153 128.0 +27.355406 -3.9101782 5.4545555 128.0 +27.355162 -4.0815754 5.4593687 128.0 +27.33736 -4.2505531 5.4609089 128.0 +18.961611 -3.0671592 3.8015621 128.0 +18.904694 -3.1771026 3.7940536 128.0 +17.824377 -3.1080544 3.5828571 128.0 +18.984987 -3.4306726 3.8181188 128.0 +17.68651 -3.3081441 3.5632198 128.0 +0 -0 0 128.0 +19.777925 -3.9512682 3.990041 128.0 +19.678347 -4.0570893 3.9750242 128.0 +18.45233 -3.9224334 3.7341793 128.0 +18.489264 -4.0490198 3.7465007 128.0 +18.422909 -4.1531096 3.7382224 128.0 +19.679916 -4.5636315 3.9965868 128.0 +19.69068 -4.6936307 4.0044799 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9518347 -2.2596498 1.654942 128.0 +7.9434733 -2.3100436 1.6560972 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0134478 -2.5453031 1.6826652 128.0 +7.9855456 -2.5904868 1.6801624 128.0 +7.9732265 -2.640671 1.6809325 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.989122 -7.0330095 4.1904564 128.0 +19.942822 -7.1545339 4.1898789 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +21.100204 -8.1596746 4.4715385 128.0 +20.448051 -8.0520191 4.3446665 128.0 +20.463839 -8.2036285 4.3585281 128.0 +18.919456 -7.7194958 4.0420218 128.0 +20.564629 -8.5384321 4.4016528 128.0 +20.509138 -8.6633081 4.4010754 128.0 +18.713755 -8.0404758 4.0291228 128.0 +18.599327 -8.1268568 4.0152612 128.0 +0 -0 0 128.0 +19.304846 -8.7188568 4.1889162 128.0 +19.359783 -8.8870964 4.2124038 128.0 +19.320896 -9.0131874 4.2158694 128.0 +19.314884 -9.1551075 4.2266502 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.1667295 -2.165252 0.95435458 128.0 +4.1611757 -2.1949003 0.95608729 128.0 +4.1528196 -2.2231715 0.95724243 128.0 +4.149446 -2.2542346 0.95955271 128.0 +4.1484251 -2.2867618 0.96244055 128.0 +4.1445918 -2.3179233 0.96475077 128.0 +4.1328516 -2.3447638 0.96532834 128.0 +4.1192369 -2.370568 0.96552086 128.0 +4.1630821 -2.429945 0.97880489 128.0 +4.1962199 -2.4839473 0.98977864 128.0 +4.1573453 -2.4955013 0.98438805 128.0 +4.0966964 -2.4934022 0.97399187 128.0 +4.0687957 -2.5107594 0.97110403 128.0 +4.9716082 -3.1104605 1.1836482 128.0 +4.0177927 -2.547883 0.96648347 128.0 +4.8769407 -3.1351409 1.1705568 128.0 +3.1756678 -2.0686388 0.77665681 128.0 +3.1580024 -2.0848401 0.77550173 128.0 +3.159013 -2.1134584 0.77877456 128.0 +3.1874006 -2.1608977 0.78859317 128.0 +3.1805511 -2.1848617 0.79013336 128.0 +3.2057366 -2.2312555 0.7993744 128.0 +4.2912316 -3.0265319 1.0633221 128.0 +4.4058962 -3.1481061 1.0954732 128.0 +3.1029253 -2.2455673 0.78455025 128.0 +3.0487354 -2.2349629 0.77473164 128.0 +3.0136976 -2.2378256 0.76953351 128.0 +3.0022621 -2.2580454 0.77011108 128.0 +2.8221216 -2.1497147 0.72910392 128.0 +3.0527782 -2.3552833 0.78955579 128.0 +2.8009403 -2.1884153 0.73045158 128.0 +3.3644609 -2.66242 0.87484306 128.0 +3.3932307 -2.7192311 0.88620186 128.0 +2.7921798 -2.2655795 0.73853749 128.0 +2.7979336 -2.2988727 0.74354303 128.0 +3.6231489 -3.0147865 0.95782 128.0 +3.8176641 -3.216579 1.0124962 128.0 +3.315686 -2.8284087 0.88812703 128.0 +3.304951 -2.8544748 0.88985974 128.0 +3.2977133 -2.8837461 0.89255506 128.0 +3.2006264 -2.8336527 0.87176269 128.0 +3.1298504 -2.8054101 0.85770857 128.0 +3.3835623 -3.0706096 0.9295193 128.0 +4.2142458 -3.8722844 1.1559252 128.0 +4.2421279 -3.9462025 1.1697867 128.0 +4.0842729 -3.8463237 1.1337851 128.0 +3.9881656 -3.8022299 1.1141478 128.0 +2.5550308 -2.4654324 0.72968149 128.0 +2.4998565 -2.4419649 0.71870774 128.0 +2.4848258 -2.4572577 0.71870774 128.0 +2.4662354 -2.4689856 0.71774513 128.0 +2.3993659 -2.4316661 0.70330596 128.0 +3.4751003 -3.5661485 1.0099934 128.0 +3.4456694 -3.5796256 1.0078757 128.0 +4.0732813 -4.2842631 1.1928893 128.0 +2.4813521 -2.64149 0.7441206 128.0 +3.0722728 -3.3114517 0.91931564 128.0 +2.538228 -2.7694306 0.77011108 128.0 +2.5152621 -2.7784035 0.76837838 128.0 +2.2621205 -2.5296392 0.69887793 128.0 +2.2407122 -2.5368502 0.69714528 128.0 +2.2805603 -2.6141632 0.71370214 128.0 +2.3387506 -2.7143669 0.73603469 128.0 +3.5445297 -4.1661687 1.1062545 128.0 +3.5069087 -4.173562 1.1025965 128.0 +3.192421 -3.8468192 1.0138439 128.0 +2.3168271 -2.8263597 0.75008881 128.0 +3.3795013 -4.1756101 1.0870023 128.0 +1.666422 -2.0840647 0.55660421 128.0 +1.7642169 -2.2344675 0.59164321 128.0 +1.763137 -2.2615075 0.5956862 128.0 +2.0669081 -2.6853077 0.69791538 128.0 +2.4266617 -3.193398 0.8199743 128.0 +3.2035038 -4.2704773 1.0804565 128.0 +3.2379608 -4.3720784 1.1004788 128.0 +3.2186003 -4.4021635 1.1029816 128.0 +1.5167984 -2.1004529 0.54139501 128.0 +2.1493928 -3.0161462 0.7597149 128.0 +1.4756719 -2.0972328 0.53619689 128.0 +1.4985762 -2.1578474 0.5485183 128.0 +2.4710743 -3.6065767 0.89082235 128.0 +1.4912138 -2.2045314 0.55525655 128.0 +2.9051988 -4.3542466 1.0600492 128.0 +2.8541529 -4.335103 1.0513856 128.0 +1.9495008 -3.0003088 0.73507208 128.0 +1.9606969 -3.0584862 0.7458533 128.0 +1.9125357 -3.0240064 0.73507208 128.0 +2.7759767 -4.4504738 1.0621669 128.0 +1.886077 -3.0648019 0.73911506 128.0 +1.8667274 -3.0754781 0.73892254 128.0 +1.8463103 -3.0843477 0.73834497 128.0 +1.825356 -3.0922377 0.73757488 128.0 +1.804868 -3.1008348 0.73699731 128.0 +1.1150951 -1.9422154 0.47247213 128.0 +1.1070203 -1.9558549 0.47401232 128.0 +1.085923 -1.946324 0.47035438 128.0 +1.0867147 -1.9761733 0.47555247 128.0 +1.5398082 -2.8423386 0.66730434 128.0 +1.5338839 -2.873379 0.67211741 128.0 +1.4975085 -2.847122 0.66422403 128.0 +1.4773039 -2.8510282 0.66306889 128.0 +1.4709272 -2.8818939 0.66788191 128.0 +1.5078281 -2.9996016 0.69175464 128.0 +1.0504521 -2.1212862 0.49749997 128.0 +1.0301129 -2.1126935 0.49422711 128.0 +1.042158 -2.1711814 0.50558591 128.0 +1.0401229 -2.2014964 0.51078397 128.0 +1.0067563 -2.1651168 0.50154293 128.0 +1.0040563 -2.194459 0.50654852 128.0 +1.0155185 -2.2560692 0.51848489 128.0 +1.1663524 -2.6347048 0.59838152 128.0 +1.1904726 -2.7344995 0.61821127 128.0 +1.1829312 -2.763407 0.62283176 128.0 +0.92067808 -2.1871364 0.49865511 128.0 +0.91248673 -2.2054412 0.5013504 128.0 +0.86719108 -2.1328063 0.48479354 128.0 +0.85408807 -2.1380873 0.48479354 128.0 +1.4176204 -3.6152184 0.79494643 128.0 +1.4066862 -3.653156 0.80110711 128.0 +0.85376722 -2.2571797 0.50654852 128.0 +1.3699362 -3.6922259 0.80572766 128.0 +1.349268 -3.7060952 0.8068828 128.0 +1.3495857 -3.7790003 0.82035929 128.0 +1.2278513 -3.5056355 0.76183265 128.0 +0.88123721 -2.5654087 0.56526774 128.0 +1.1334575 -3.3678966 0.73025906 128.0 +1.3568203 -4.1157598 0.88331401 128.0 +0.96852827 -2.9986508 0.65132505 128.0 +0.96961492 -3.0662956 0.66403151 128.0 +0.96671975 -3.1237516 0.67462021 128.0 +0.73565996 -2.4289119 0.53099883 128.0 +1.2527479 -4.2326064 0.89910078 128.0 +1.2243013 -4.231729 0.89736813 128.0 +0.90016824 -3.1833653 0.68212855 128.0 +0.91088033 -3.2985625 0.7044611 128.0 +0.62943405 -2.3337851 0.50731862 128.0 +0 -0 0 128.0 +0.76700383 -2.990608 0.63881111 128.0 +0.727732 -2.9114733 0.62186915 128.0 +0.70684129 -2.9034879 0.61936641 128.0 +1.7956061 -7.5860276 1.5625315 128.0 +0.77170599 -3.3489766 0.70734894 128.0 +0.65584755 -2.9274983 0.62167662 128.0 +0.63745588 -2.9295495 0.62129158 128.0 +0.90583348 -4.2920847 0.8937102 128.0 +0.68908906 -3.3659451 0.70715642 128.0 +0.82088685 -4.1401968 0.86117399 128.0 +0.61449128 -3.2006712 0.67250246 128.0 +0.79432881 -4.2811813 0.88735694 128.0 +0.756984 -4.2241535 0.87503558 128.0 +1.4532217 -8.4129076 1.7080781 128.0 +1.4025395 -8.427474 1.7092333 128.0 +1.2940658 -8.0812778 1.6387702 128.0 +1.2610027 -8.1967258 1.6601402 128.0 +0.42153633 -2.8513172 0.59857404 128.0 +0.39786091 -2.8101254 0.58991051 128.0 +0.38166037 -2.8202937 0.59145069 128.0 +0.36146805 -2.8001971 0.58702272 128.0 +0.32710764 -2.6621034 0.55929953 128.0 +0.31450504 -2.6962266 0.56565273 128.0 +0.44429594 -4.0285649 0.82825273 128.0 +0.26903582 -2.5808051 0.5421651 128.0 +0.25481552 -2.5990102 0.54543793 128.0 +0.37524828 -4.0927391 0.83941901 128.0 +0.35262817 -4.1242971 0.84519464 128.0 +0 -0 0 128.0 +0.22026549 -3.0067258 0.62456447 128.0 +0.17105308 -2.5468566 0.53388661 128.0 +0.15488897 -2.5390427 0.53215396 128.0 +0.13930678 -2.5399454 0.53215396 128.0 +0.12315207 -2.5289905 0.52984369 128.0 +0.10874612 -2.55617 0.53504175 128.0 +0.097817309 -2.6891782 0.56103224 128.0 +0.083477534 -2.7623112 0.57527888 128.0 +0.066271484 -2.7519801 0.57316113 128.0 +0.049831212 -2.7778447 0.57816666 128.0 +0.032875054 -2.785948 0.57970685 128.0 +0.015821325 -2.7939475 0.58124703 128.0 +-0.0013319679 -2.8047862 0.58336478 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.054398123 -2.8788509 0.59799647 128.0 +-0.074033201 -2.9559598 0.61320567 128.0 +-0.09232413 -2.9603541 0.61416829 128.0 +-0.15288396 -4.0834937 0.83479846 128.0 +-0.17802295 -4.0844393 0.8351835 128.0 +-0.20313028 -4.0842505 0.83537602 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.3976498 -3.6839237 0.80611271 128.0 +-1.4188116 -3.6716177 0.80534261 128.0 +-1.4474266 -3.6783645 0.80861551 128.0 +-1.4747168 -3.6812546 0.81111825 128.0 +-1.4917152 -3.6585083 0.80823046 128.0 +-1.4994582 -3.6139424 0.80072206 128.0 +-1.5132031 -3.5847871 0.79648662 128.0 +-1.5394323 -3.5853522 0.79860431 128.0 +-1.5782995 -3.6145036 0.8068828 128.0 +-1.5793295 -3.5572236 0.79667914 128.0 +-1.6205164 -3.5903919 0.80592018 128.0 +-1.6462011 -3.588407 0.80765289 128.0 +-1.6656988 -3.5729032 0.80649775 128.0 +-1.6674136 -3.5200536 0.79725671 128.0 +-3.9383912 -8.1804905 1.8143502 128.0 +-1.6807317 -3.4385049 0.78397268 128.0 +-1.6223371 -3.268183 0.74893367 128.0 +-1.6335201 -3.2406447 0.74508321 128.0 +-1.6524788 -3.2288139 0.74469817 128.0 +-1.6736175 -3.2212255 0.74527574 128.0 +-1.7130466 -3.2482126 0.75355422 128.0 +-4.6946917 -8.7667761 1.9841546 128.0 +-4.6710677 -8.5955505 1.9523885 128.0 +-4.7673225 -8.6457796 1.9701005 128.0 +-1.9590058 -3.5031981 0.82055181 128.0 +-1.9223312 -3.3887067 0.79744923 128.0 +-1.9283978 -3.351336 0.79167354 128.0 +-1.9553583 -3.3504562 0.79417634 128.0 +-2.0483892 -3.4608212 0.822092 128.0 +-4.5401993 -7.5618076 1.7635244 128.0 +-5.0703621 -8.3283405 1.9460353 128.0 +-4.6749253 -7.5739908 1.7793112 128.0 +-4.7041292 -7.517714 1.772958 128.0 +-4.6755147 -7.3710504 1.7456199 128.0 +-5.1012416 -7.93399 1.8836582 128.0 +-5.0935626 -7.8162231 1.8634434 128.0 +-0 -0 0 128.0 +-5.1940093 -7.760468 1.8651761 128.0 +-5.2327147 -7.7154589 1.8620957 128.0 +-5.372788 -7.8182535 1.8942468 128.0 +-5.5182419 -7.9252515 1.9277457 128.0 +-5.6697335 -8.0371675 1.9627846 128.0 +-5.7035341 -7.9806738 1.9575865 128.0 +-5.6954155 -7.8668437 1.9385269 128.0 +-5.7046905 -7.7787366 1.9256279 128.0 +-5.730073 -7.7136559 1.9183121 128.0 +-5.9348469 -7.8876934 1.9697155 128.0 +-6.0140672 -7.8917112 1.9797266 128.0 +-5.9622335 -7.7249432 1.9475754 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.6291275 -9.3804913 2.6704955 128.0 +-9.715497 -9.3491259 2.6783888 128.0 +-9.7193317 -9.238636 2.6639497 128.0 +-0 -0 0 128.0 +-9.6607199 -8.9598694 2.6181295 128.0 +-9.5816441 -8.7778063 2.5825129 128.0 +-10.451052 -9.4568548 2.7983301 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.515502 -8.0936995 2.4839416 128.0 +-9.5687418 -8.0383167 2.4849043 128.0 +-10.399595 -8.6278725 2.6841645 128.0 +-10.393128 -8.5153952 2.6691477 128.0 +-9.8157835 -7.9422927 2.5103171 128.0 +-9.8091316 -7.8378158 2.4964557 128.0 +-11.125926 -8.7784758 2.8135393 128.0 +-11.361503 -8.8517551 2.8587818 128.0 +-11.264705 -8.6658115 2.8214326 128.0 +-11.355176 -8.6250162 2.8306737 128.0 +-10.278115 -7.7080717 2.5536346 128.0 +-10.400933 -7.700911 2.5721166 128.0 +-11.118252 -8.1267805 2.7349904 128.0 +-11.075593 -7.9918089 2.7126577 128.0 +-11.124421 -7.9236999 2.7126577 128.0 +-11.231435 -7.8964877 2.7267118 128.0 +-11.432861 -7.9337068 2.7632911 128.0 +-11.085403 -7.5922933 2.6691477 128.0 +-0 -0 0 128.0 +-11.050379 -7.3707528 2.6391144 128.0 +-0 -0 0 128.0 +-11.083209 -7.1977201 2.6258304 128.0 +-11.092461 -7.1073475 2.6177444 128.0 +-11.174849 -7.0637913 2.6267929 128.0 +-16.404156 -10.228343 3.8258197 128.0 +-16.418961 -10.098197 3.814846 128.0 +-16.589685 -10.063417 3.8398738 128.0 +-16.4608 -9.8475924 3.7963638 128.0 +-0 -0 0 128.0 +-16.609245 -9.6616259 3.8029096 128.0 +-16.318346 -9.3589029 3.723783 128.0 +-16.508726 -9.3339338 3.7538166 128.0 +-16.448252 -9.1670227 3.7274411 128.0 +-16.558378 -9.0956869 3.7395699 128.0 +-0 -0 0 128.0 +-7.0337224 -3.7528515 1.5971855 128.0 +-7.0974436 -3.7310774 1.606234 128.0 +-7.1393752 -3.6973834 1.6104695 128.0 +-6.6216784 -3.37801 1.4914908 128.0 +-6.6370192 -3.3346741 1.4903357 128.0 +-7.1446509 -3.5348923 1.596993 128.0 +-7.0029902 -3.4115071 1.5613763 128.0 +-7.0273304 -3.3701701 1.5621464 128.0 +-7.2848272 -3.4387975 1.6135498 128.0 +-7.0726085 -3.2857468 1.563109 128.0 +-7.3148751 -3.3438406 1.611047 128.0 +-7.34868 -3.3049297 1.6139349 128.0 +-0 -0 0 128.0 +-7.2402029 -3.1499298 1.5821687 128.0 +-7.2693191 -3.1096892 1.5842865 128.0 +-7.5895 -3.1916573 1.6483963 128.0 +-7.2361917 -2.9910216 1.5692698 128.0 +-6.8234406 -2.7715919 1.4780143 128.0 +-7.7791243 -3.1041343 1.676312 128.0 +-7.3978343 -2.8995593 1.5919874 128.0 +-6.9777079 -2.6856923 1.4999619 128.0 +-7.3998113 -2.7960763 1.5850565 128.0 +-7.1656389 -2.657505 1.5324981 128.0 +-7.1882653 -2.6158354 1.5338458 128.0 +-8.1986475 -2.9265027 1.7409993 128.0 +-7.3615379 -2.5770123 1.5633016 128.0 +-8.2283735 -2.8237619 1.7398442 128.0 +-8.1274166 -2.7335083 1.7153939 128.0 +-8.2316484 -2.7124441 1.7334911 128.0 +-22.478064 -7.2521124 4.6669483 128.0 +-21.552715 -6.8078952 4.4674954 128.0 +-21.623144 -6.684505 4.4734635 128.0 +-0 -0 0 128.0 +-12.850449 -3.8009193 2.6622169 128.0 +-12.892384 -3.7274482 2.6660674 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.266141 -3.3030555 2.5253339 128.0 +-12.377292 -3.2516577 2.5438159 128.0 +-12.559566 -3.2172759 2.5767372 128.0 +-12.127777 -3.0275366 2.4854817 128.0 +-12.314901 -2.9940825 2.5195582 128.0 +-13.877181 -3.2837138 2.8308661 128.0 +-13.856903 -3.1892624 2.8227804 128.0 +-12.756728 -2.8538415 2.5977221 128.0 +-12.796055 -2.780304 2.6021502 128.0 +-14.326144 -3.0206845 2.9055648 128.0 +-0 -0 0 128.0 +-17.780355 -3.5214019 3.5892103 128.0 +-12.848867 -2.4632196 2.5998399 128.0 +-17.888805 -3.3152783 3.6024942 128.0 +-12.340092 -2.2090931 2.4926052 128.0 +-17.648682 -3.0472717 3.5468554 128.0 +-17.681566 -2.9413385 3.5497432 128.0 +-16.848526 -2.6966839 3.3807089 128.0 +-19.048977 -2.928961 3.8142684 128.0 +-12.960258 -1.9118161 2.6033053 128.0 +-18.200247 -2.5703037 3.639266 128.0 +-16.947557 -2.2875047 3.3882172 128.0 +-12.920258 -1.6635444 2.588866 128.0 +-12.94191 -1.5856669 2.5911763 128.0 +-12.31392 -1.4321479 2.4652669 128.0 +-12.262 -1.3499123 2.4533308 128.0 +-13.569175 -1.40948 2.7095773 128.0 +-13.435953 -1.3123746 2.6816616 128.0 +-18.009323 -1.6471906 3.5811243 128.0 +-18.051355 -1.5394059 3.5874774 128.0 +-13.455877 -1.0646857 2.6812766 128.0 +-13.540452 -0.98780698 2.6966784 128.0 +-13.482615 -0.90046078 2.6841645 128.0 +-13.585837 -0.82364583 2.7034166 128.0 +-13.611212 -0.7413882 2.7074597 128.0 +-13.658631 -0.65993744 2.7159307 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-22.104933 13.053596 4.7448764 128.0 +-21.937504 13.136936 4.7262831 128.0 +-20.871149 12.673018 4.5147147 128.0 +-0 0 0 128.0 +-20.53216 12.814661 4.4753613 128.0 +-0 0 0 128.0 +-22.256115 14.273046 4.8858619 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-18.67576 12.468023 4.1545787 128.0 +-0 0 0 128.0 +-22.31811 15.29882 4.9994082 128.0 +-0 0 0 128.0 +-22.109385 15.557961 4.9950757 128.0 +-19.377745 13.814364 4.4009876 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-19.289299 14.294021 4.4396186 128.0 +-19.465544 14.610491 4.5002728 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-16.405643 12.792651 3.8514872 128.0 +-16.854061 13.309397 3.9747818 128.0 +-16.07305 12.85357 3.8105092 128.0 +-15.968654 12.931524 3.8045521 128.0 +-16.61459 13.62423 3.9767675 128.0 +-16.549599 13.741627 3.9812803 128.0 +-16.447655 13.828357 3.9771285 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-16.108416 14.769099 4.0442815 128.0 +-0 0 0 128.0 +-15.891557 14.933333 4.0356169 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-14.114628 13.761519 3.6512914 128.0 +-14.085925 13.90314 3.6657329 128.0 +-15.950619 15.937958 4.1717281 128.0 +-14.262076 14.426776 3.7565341 128.0 +-14.189779 14.530904 3.7608666 128.0 +-14.187758 14.708307 3.783973 128.0 +-14.402572 15.115515 3.8652067 128.0 +-0 0 0 128.0 +-12.949559 13.928955 3.523845 128.0 +-0 0 0 128.0 +-12.730736 14.035093 3.5110281 128.0 +-12.636502 14.104153 3.5088618 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-13.979698 16.193384 3.9596181 128.0 +-13.869864 16.266882 3.9567299 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-12.108291 14.927966 3.5610318 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-12.588271 16.117241 3.7866807 128.0 +-0 0 0 128.0 +-12.061206 15.839338 3.6872149 128.0 +-9.7041101 12.907568 2.9970901 128.0 +-11.489558 15.479124 3.5713215 128.0 +-10.473453 14.292663 3.2853792 128.0 +-0 0 0 128.0 +-10.293841 14.415309 3.284296 128.0 +-9.4979782 13.47491 3.0590081 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.0644569 13.736111 3.0537732 128.0 +-8.6418772 13.272204 2.9400461 128.0 +-8.830883 13.746182 3.0319302 128.0 +-9.4593239 14.924952 3.2763531 128.0 +-9.7701244 15.626538 3.415714 128.0 +-8.1627932 13.23584 2.8873343 128.0 +-0 0 0 128.0 +-10.162426 16.939823 3.6588733 128.0 +-10.053286 16.993395 3.657068 128.0 +-8.3598757 14.331028 3.0783236 128.0 +-8.2198029 14.291677 3.0591886 128.0 +-8.0383205 14.176715 3.0243485 128.0 +-0 0 0 128.0 +-8.0270147 14.57064 3.086447 128.0 +-7.9355822 14.61616 3.0857248 128.0 +-8.3366747 15.582118 3.2767141 128.0 +-9.1527672 17.362679 3.6355863 128.0 +-8.1294165 15.653571 3.2705765 128.0 +-8.0820436 15.798601 3.2902532 128.0 +-7.6220303 15.127634 3.1422274 128.0 +-7.5002108 15.115967 3.1303132 128.0 +-7.4232955 15.194401 3.1369925 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-17.409882 37.969414 7.6996136 128.0 +-0 0 0 128.0 +-6.7417083 15.193022 3.0839198 128.0 +-0 0 0 128.0 +-6.5566988 15.279128 3.0848224 128.0 +-0 0 0 128.0 +-6.3690834 15.359347 3.0850029 128.0 +-0 0 0 128.0 +-6.1867018 15.452785 3.0882523 128.0 +-6.3538384 16.156813 3.2196701 128.0 +-6.0370035 15.632139 3.1088314 128.0 +-6.1523013 16.22621 3.218226 128.0 +-5.8309956 15.668173 3.1016107 128.0 +-5.7418332 15.723058 3.1054015 128.0 +-5.6382837 15.738548 3.1016107 128.0 +-5.4656377 15.556634 3.0595496 128.0 +-5.3181844 15.439228 3.0303056 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.3951669 13.855054 2.7010386 128.0 +-4.2619448 13.726771 2.671253 128.0 +-4.1636295 13.706551 2.6624076 128.0 +-4.1472397 13.960007 2.7060931 128.0 +-0 0 0 128.0 +-4.1694989 14.693007 2.8364279 128.0 +-3.8041937 13.725932 2.6474245 128.0 +-3.8267732 14.143978 2.7225204 128.0 +-3.6417458 13.795357 2.6519375 128.0 +-0 0 0 128.0 +-3.5078497 13.981153 2.6788347 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.5348995 15.274692 2.9108019 128.0 +-3.3197737 14.756808 2.80935 128.0 +-3.3473995 15.317882 2.9109824 128.0 +-3.0153582 14.216253 2.7004972 128.0 +-3.0111179 14.638149 2.7761345 128.0 +-2.6589663 13.340646 2.5299065 128.0 +-2.5945778 13.447491 2.5468752 128.0 +-0 0 0 128.0 +-5.9235001 32.860924 6.1615906 128.0 +-5.7224317 32.900528 6.1623125 128.0 +-2.3818302 14.211361 2.6779323 128.0 +-5.1446919 31.892385 5.9622974 128.0 +-2.1731997 14.019857 2.6371348 128.0 +-4.7212415 31.740059 5.9227638 128.0 +-4.5222368 31.73922 5.9173484 128.0 +-4.3275361 31.767344 5.9175286 128.0 +-4.1217566 31.710394 5.9021845 128.0 +-3.9359264 31.806345 5.9153624 128.0 +-3.6641123 31.178339 5.7949562 128.0 +-3.4779599 31.247156 5.8036213 128.0 +-3.2949047 31.351053 5.8189654 128.0 +-3.0913429 31.25812 5.7982059 128.0 +-2.8988528 31.269644 5.7969418 128.0 +-2.8646481 33.109474 6.1327076 128.0 +-2.6612806 33.124466 6.1323466 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.75478524 20.715277 3.8377676 128.0 +0.88263041 20.727943 3.841017 128.0 +1.0030507 20.583618 3.8155639 128.0 +1.1317551 20.621271 3.8236873 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.5979046 21.779955 4.0413933 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.1071398 20.204376 3.7615886 128.0 +1.5519289 14.04377 2.6264842 128.0 +1.6844698 14.431599 2.6999555 128.0 +1.7889481 14.550829 2.7239647 128.0 +1.9612192 15.182413 2.8429267 128.0 +2.0557914 15.180815 2.8449123 128.0 +2.1506937 15.180575 2.847259 128.0 +2.2386184 15.132066 2.8407605 128.0 +2.3402681 15.175398 2.8514111 128.0 +2.2541158 14.043934 2.6438141 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.5346437 14.12495 2.6671011 128.0 +2.7351515 14.722229 2.7815502 128.0 +2.7053752 14.080226 2.6647544 128.0 +2.786166 14.035383 2.6595192 128.0 +2.8819056 14.065238 2.6683648 128.0 +2.9764898 14.086745 2.675766 128.0 +3.0647511 14.076867 2.6773906 128.0 +0 0 0 128.0 +3.7017839 16.052805 3.0568419 128.0 +3.7900033 15.986722 3.0487185 128.0 +0 0 0 128.0 +3.8806803 15.518209 2.9691095 128.0 +3.4678721 13.51437 2.5939908 128.0 +3.5329592 13.425303 2.5811739 128.0 +3.9717824 14.725271 2.8324566 128.0 +0 0 0 128.0 +4.2568755 15.045476 2.9030395 128.0 +4.2465305 14.664785 2.8353448 128.0 +4.5627007 15.402339 2.9815655 128.0 +4.4256001 14.609687 2.8349838 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.322584 15.37766 5.9482169 128.0 +28.202198 15.088976 5.9036288 128.0 +28.214207 14.873447 5.8870211 128.0 +28.223759 14.657888 5.8702326 128.0 +28.236111 14.445013 5.8543472 128.0 +28.231106 14.224573 5.8352122 128.0 +28.177765 13.981569 5.8065095 128.0 +28.172001 13.763938 5.7879162 128.0 +28.181469 13.555005 5.7727523 128.0 +28.18766 13.345634 5.7572279 128.0 +28.134396 13.109696 5.7299695 128.0 +28.123112 12.895004 5.7115564 128.0 +28.132669 12.691057 5.6976566 128.0 +28.132694 12.48389 5.6821318 128.0 +28.12583 12.274839 5.665524 128.0 +28.086731 12.053157 5.6427784 128.0 +28.086756 11.849624 5.6281567 128.0 +28.065355 11.638256 5.6095629 128.0 +28.077034 11.441704 5.5978293 128.0 +28.04353 11.227899 5.5774307 128.0 +28.059721 11.035096 5.5671411 128.0 +28.045244 10.831179 5.551075 128.0 +28.059673 10.639363 5.540966 128.0 +28.058979 10.442634 5.5281491 128.0 +27.999649 10.225394 5.5041399 128.0 +27.986862 10.026528 5.4895177 128.0 +27.994965 9.836031 5.4792285 128.0 +27.993414 9.6429291 5.4673142 128.0 +27.984026 9.4480143 5.4541359 128.0 +27.98918 9.2588301 5.4440269 128.0 +27.948153 9.0553865 5.4252529 128.0 +27.9685 8.8727245 5.4185739 128.0 +27.943512 8.676445 5.4034104 128.0 +27.949169 8.4905291 5.3943844 128.0 +27.945112 8.3023481 5.3837337 128.0 +27.923744 8.1098747 5.3700142 128.0 +27.926615 7.9252272 5.3611689 128.0 +27.920692 7.7387481 5.3508792 128.0 +27.907837 7.5510993 5.3395066 128.0 +27.89278 7.3636494 5.3279533 128.0 +27.878382 7.1771593 5.316761 128.0 +27.867517 6.9923205 5.3064713 128.0 +27.855436 6.8078861 5.2961817 128.0 +27.845972 6.6247745 5.2866144 128.0 +27.847767 6.4449186 5.2793937 128.0 +27.843607 6.2642112 5.2712703 128.0 +27.844044 6.0850577 5.2642298 128.0 +27.824089 5.9020534 5.2535791 128.0 +27.799086 5.71873 5.2422066 128.0 +27.792175 5.539782 5.2344441 128.0 +27.779287 5.3602028 5.2257795 128.0 +27.775879 5.1829753 5.2191 128.0 +27.764568 5.0047703 5.2111573 128.0 +27.777311 4.8312821 5.2079082 128.0 +27.7589 4.6527848 5.1990623 128.0 +27.757797 4.4776726 5.1936469 128.0 +27.750731 4.3019953 5.1873288 128.0 +27.741581 4.1264291 5.18083 128.0 +27.74106 3.9525247 5.1761365 128.0 +27.731655 3.77772 5.1699991 128.0 +27.728954 3.6041942 5.1653056 128.0 +27.708572 3.4287901 5.1575432 128.0 +27.699785 3.2552645 5.1521277 128.0 +27.701641 3.0832818 5.1488781 128.0 +27.690693 2.9101653 5.1434627 128.0 +27.687473 2.7381704 5.1396718 128.0 +27.67927 2.5659616 5.135159 128.0 +27.660196 2.3931088 5.1288404 128.0 +27.656712 2.221926 5.1255913 128.0 +27.652168 2.0508759 5.1223421 128.0 +27.64068 1.879565 5.1180096 128.0 +27.624207 1.7082294 5.1129551 128.0 +27.620419 1.5379326 5.1104279 128.0 +27.620495 1.3679899 5.1088028 128.0 +27.613628 1.1978484 5.1060953 128.0 +27.607681 1.0279158 5.1037483 128.0 +27.602654 0.85816264 5.1017628 128.0 +27.587734 0.68828887 5.0981522 128.0 +27.575705 0.51870453 5.095264 128.0 +27.566566 0.34934372 5.0930977 128.0 +27.568192 0.18019187 5.0930977 128.0 +27.568777 0.011033243 5.0930977 128.0 +27.558491 -0.15806952 5.0912929 128.0 +27.547167 -0.32704565 5.0894876 128.0 +27.531857 -0.49583566 5.0871406 128.0 +27.519447 -0.66454506 5.085516 128.0 +27.514851 -0.83338869 5.085516 128.0 +27.52298 -1.0027021 5.0880432 128.0 +27.543825 -1.1727322 5.0930977 128.0 +27.51548 -1.3407109 5.0893068 128.0 +27.521467 -1.5103257 5.0920148 128.0 +27.51659 -1.6794653 5.0929174 128.0 +27.493992 -1.8474813 5.0907512 128.0 +27.476252 -2.0157146 5.0896678 128.0 +27.464348 -2.1843457 5.0898485 128.0 +27.461206 -2.3537467 5.0918341 128.0 +27.459961 -2.5234609 5.0943613 128.0 +27.43515 -2.6910405 5.0927367 128.0 +27.424969 -2.8600428 5.0940003 128.0 +27.431345 -3.0309656 5.0985136 128.0 +27.429815 -3.2012763 5.1017628 128.0 +27.417467 -3.3704822 5.1032071 128.0 +27.405048 -3.539783 5.1048317 128.0 +27.375015 -3.7068148 5.1033874 128.0 +27.355652 -3.8752668 5.1041093 128.0 +27.338169 -4.0440521 5.1053729 128.0 +27.30798 -4.2109704 5.1044707 128.0 +18.099442 -2.904928 3.3976619 128.0 +17.999781 -3.0023379 3.3824985 128.0 +19.395025 -3.3574755 3.6458759 128.0 +19.067167 -3.4213567 3.5886512 128.0 +18.734432 -3.4804447 3.530524 128.0 +0 -0 0 128.0 +19.735138 -3.9174616 3.7260263 128.0 +18.686466 -3.8286426 3.5341344 128.0 +19.707712 -4.1640234 3.7301784 128.0 +0 -0 0 128.0 +18.517811 -4.1506553 3.516263 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9501181 -2.2495515 1.5496875 128.0 +7.941834 -2.2999315 1.5507706 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +8.0686769 -2.5528789 1.5865134 128.0 +7.9602036 -2.5724013 1.568642 128.0 +7.9638853 -2.6276667 1.572433 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.945431 -7.2660003 3.929291 128.0 +0 -0 0 128.0 +21.082916 -7.9747462 4.1702838 128.0 +20.999628 -8.0908747 4.1636047 128.0 +0 -0 0 128.0 +20.373552 -8.1381817 4.0598063 128.0 +19.020294 -7.7333145 3.8016639 128.0 +20.190353 -8.3537416 4.0435596 128.0 +0 -0 0 128.0 +18.819572 -8.0584898 3.7906523 128.0 +18.74362 -8.162425 3.7854171 128.0 +19.053825 -8.4369631 3.8578053 128.0 +19.242962 -8.6623173 3.9063649 128.0 +19.284256 -8.8236036 3.9254999 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +3.9597981 -2.1462228 0.8599239 128.0 +3.9405215 -2.1671619 0.85866022 128.0 +4.1564894 -2.319242 0.90685886 128.0 +3.8656945 -2.188226 0.84855115 128.0 +3.7575116 -2.1575489 0.82851356 128.0 +3.7476022 -2.1825435 0.82923561 128.0 +3.7341399 -2.2054973 0.82923561 128.0 +4.3205123 -2.5876415 0.95758474 128.0 +3.7025902 -2.2486026 0.82833302 128.0 +3.7465167 -2.3068569 0.84078884 128.0 +3.2883892 -2.0527606 0.74475265 128.0 +3.2316785 -2.0450284 0.73518515 128.0 +3.2198975 -2.0653501 0.73536569 128.0 +3.2112877 -2.0877483 0.73626828 128.0 +3.1910245 -2.1025434 0.73464358 128.0 +3.3359447 -2.2274816 0.7694838 128.0 +3.3433957 -2.2622375 0.77417731 128.0 +3.3221505 -2.2777047 0.77255261 128.0 +3.3105357 -2.2997293 0.77309418 128.0 +3.2971668 -2.3205652 0.77327472 128.0 +4.0621414 -2.8962772 0.94891983 128.0 +4.3249722 -3.1238446 1.0124626 128.0 +2.9736712 -2.1758661 0.70955145 128.0 +2.9610546 -2.1946568 0.70973194 128.0 +2.9200001 -2.1921194 0.70341378 128.0 +4.4819093 -3.4076154 1.0666183 128.0 +2.8663819 -2.207386 0.69727612 128.0 +2.8341682 -2.210417 0.69294369 128.0 +2.800482 -2.2119172 0.68825018 128.0 +3.4659157 -2.7720788 0.8478291 128.0 +3.5459177 -2.8719032 0.87075502 128.0 +3.062 -2.5113053 0.76009679 128.0 +4.2330837 -3.5152376 1.0431508 128.0 +3.6257107 -3.0487161 0.90270692 128.0 +3.606936 -3.0709057 0.90270692 128.0 +4.1706429 -3.5951278 1.0438728 128.0 +4.0877361 -3.5676219 1.0290704 128.0 +3.2726502 -2.8919156 0.83483171 128.0 +3.9498129 -3.5335817 1.0059639 128.0 +3.5350978 -3.20189 0.90866405 128.0 +3.4820354 -3.192945 0.90036017 128.0 +3.4263337 -3.1807942 0.89133424 128.0 +3.2849002 -3.0872576 0.86064595 128.0 +3.3478477 -3.1853158 0.88140565 128.0 +3.9998569 -3.8525963 1.0525378 128.0 +2.4605813 -2.3994794 0.66406059 128.0 +2.4549124 -2.4235141 0.66640735 128.0 +2.4942665 -2.4927573 0.68048787 128.0 +2.4733922 -2.5024192 0.67904371 128.0 +2.4875407 -2.547807 0.68680602 128.0 +2.5182955 -2.6111588 0.6990813 128.0 +4.1197886 -4.324131 1.129439 128.0 +2.4590979 -2.6132169 0.69186056 128.0 +3.10202 -3.3370714 0.8694914 128.0 +4.1392903 -4.5078955 1.1565168 128.0 +2.5381203 -2.7986395 0.72670072 128.0 +0 -0 0 128.0 +3.3770494 -3.8165646 0.9685964 128.0 +2.2524989 -2.5775473 0.66153336 128.0 +3.6596911 -4.2396488 1.0612028 128.0 +3.3611095 -3.9424436 0.98412102 128.0 +3.3748698 -4.0081329 0.9949522 128.0 +3.4319746 -4.1270723 1.0184197 128.0 +3.2036939 -3.9010358 0.95975095 128.0 +1.6449211 -2.0285172 0.51260507 128.0 +1.6367477 -2.0439458 0.51386869 128.0 +1.6241755 -2.0539503 0.51386869 128.0 +1.6145694 -2.0677531 0.51477128 128.0 +1.7862597 -2.3167262 0.57019067 128.0 +1.8178942 -2.3878965 0.58409065 128.0 +1.8168029 -2.4170876 0.58824259 128.0 +2.1706829 -2.9249547 0.70178908 128.0 +2.1387415 -2.919178 0.69745666 128.0 +2.1271312 -2.9410121 0.69944239 128.0 +2.1039009 -2.9468048 0.69781768 128.0 +1.5224984 -2.1605639 0.51838166 128.0 +1.4968544 -2.1521027 0.51441026 128.0 +1.5576721 -2.2690847 0.53841931 128.0 +1.7031869 -2.5139072 0.59058934 128.0 +1.7074139 -2.5537434 0.59708798 128.0 +1.9490459 -2.9541101 0.68283463 128.0 +1.5745091 -2.4187241 0.56296986 128.0 +1.9487993 -3.0340762 0.6951099 128.0 +1.952261 -3.0808682 0.70269173 128.0 +1.914027 -3.0619323 0.6960125 128.0 +1.8972685 -3.0769675 0.69673455 128.0 +1.1852036 -1.9490947 0.45195061 128.0 +1.8629086 -3.1059222 0.69799823 128.0 +1.8157699 -3.0698893 0.68788916 128.0 +1.8003685 -3.08692 0.68915278 128.0 +1.1198494 -1.9477531 0.44563243 128.0 +1.0976889 -1.9366202 0.44184154 128.0 +1.1021019 -1.9725099 0.44797918 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.5320383 -2.9507058 0.64348143 128.0 +1.5416784 -3.0143399 0.65467364 128.0 +1.4965984 -2.9710407 0.64384246 128.0 +1.5806429 -3.186337 0.68608397 128.0 +0 -0 0 128.0 +1.4877031 -3.0938122 0.66333854 128.0 +0.9594034 -2.0272362 0.44491038 128.0 +0.96065587 -2.0625052 0.4508675 128.0 +1.4157456 -3.0884855 0.65683985 128.0 +1.3789718 -3.0576656 0.64889699 128.0 +1.3741479 -3.0975351 0.65521514 128.0 +1.3677057 -3.1347551 0.66099179 128.0 +1.0167961 -2.3702934 0.50664788 128.0 +1.3692803 -3.2464557 0.6799463 128.0 +0.89796042 -2.1663587 0.46368435 128.0 +0.88799167 -2.1800253 0.46530902 128.0 +0 -0 0 128.0 +1.1801201 -3.0017376 0.62524897 128.0 +1.3679187 -3.542918 0.73031116 128.0 +0.83596736 -2.2057595 0.46621162 128.0 +0.8227604 -2.2117691 0.46639213 128.0 +1.4613956 -4.0026464 0.81533563 128.0 +1.3671432 -3.8170912 0.77742666 128.0 +1.1849091 -3.3734932 0.6895138 128.0 +0.89349049 -2.5949011 0.53697515 128.0 +1.3447912 -3.9841878 0.80504608 128.0 +1.3274244 -4.0138416 0.80919802 128.0 +0.97048563 -2.9964073 0.61134905 128.0 +0.90538478 -2.8551147 0.58300751 128.0 +0.93626714 -3.0165451 0.61297369 128.0 +0.75391626 -2.4829822 0.50953621 128.0 +0.73250401 -2.466819 0.50556481 128.0 +0.86028296 -2.9633718 0.59961528 128.0 +0.84745455 -2.9875185 0.60322565 128.0 +0.86956698 -3.1386287 0.63102561 128.0 +0.81972086 -3.0309231 0.6095438 128.0 +0.79960161 -3.03019 0.60846072 128.0 +0.7751081 -3.0121789 0.60412824 128.0 +0.74296623 -2.9625003 0.59383863 128.0 +0.71333194 -2.9201865 0.58499324 128.0 +0.70701116 -2.9733083 0.59419972 128.0 +0.68697971 -2.9699247 0.59275556 128.0 +0.67241395 -2.990397 0.59582436 128.0 +0.92727238 -4.2445846 0.83067977 128.0 +0.88141221 -4.1568646 0.81316942 128.0 +0.66145527 -3.2171042 0.63608015 128.0 +0.65920097 -3.3088803 0.65250736 128.0 +0.80605316 -4.1791444 0.81443304 128.0 +0.77913219 -4.1772437 0.81316942 128.0 +0.76133883 -4.2255039 0.82129276 128.0 +1.4650716 -8.4249887 1.6027602 128.0 +1.5138397 -9.0333023 1.714321 128.0 +1.3133252 -8.14326 1.5471603 128.0 +0.43875948 -2.8326023 0.55935949 128.0 +0.4356983 -2.931555 0.57723087 128.0 +0.39966476 -2.8075876 0.55376339 128.0 +0.36092088 -2.6521068 0.52451932 128.0 +0.34210524 -2.6347642 0.52090895 128.0 +0.32895228 -2.6612167 0.52542192 128.0 +0.33707225 -2.8712537 0.56387246 128.0 +0.3184689 -2.86447 0.56224781 128.0 +0.31456143 -2.9964685 0.58625686 128.0 +0.30662528 -3.1040521 0.60575294 128.0 +0.29165962 -3.1499467 0.61387628 128.0 +0.27385274 -3.1693153 0.61712563 128.0 +0.29087606 -3.6248665 0.70070601 128.0 +0.20059578 -2.7094638 0.53192061 128.0 +0.25511476 -3.7567141 0.72435403 128.0 +0 -0 0 128.0 +0.20636949 -3.7124233 0.71568906 128.0 +0.13520984 -2.7371473 0.53625304 128.0 +0.12421154 -2.8715653 0.56080365 128.0 +0.10596725 -2.8555644 0.55773485 128.0 +0.088780195 -2.8669748 0.55972052 128.0 +0.071285278 -2.8713987 0.56044263 128.0 +0.053646855 -2.8707986 0.56026208 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +-0 -0 0 128.0 +-0.034847755 -2.9055159 0.5665803 128.0 +-0.052975852 -2.9219654 0.5696491 128.0 +-0.098953113 -4.0838284 0.7830227 128.0 +-0.12487228 -4.1116548 0.78825778 128.0 +-0.14866677 -4.0714946 0.78103703 128.0 +-0.17657398 -4.1392932 0.79367334 128.0 +-0.19967186 -4.0909767 0.78500843 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.28134209 -2.6943617 0.53047645 128.0 +-0.29927316 -2.7052939 0.5328232 128.0 +-0.31757694 -2.7180607 0.53553098 128.0 +-0.33244875 -2.7014177 0.5328232 128.0 +-0.34876609 -2.697376 0.53246218 128.0 +-0.36649802 -2.7039573 0.53408682 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.3981568 -3.4993386 0.72489554 128.0 +-1.4125637 -3.473382 0.72146571 128.0 +-1.4522743 -3.5091834 0.73031116 128.0 +-0 -0 0 128.0 +-1.5072296 -3.5191269 0.73590726 128.0 +-1.54136 -3.5386696 0.74168384 128.0 +-1.5606546 -3.5237491 0.74060071 128.0 +-1.5883024 -3.5275602 0.74330848 128.0 +-1.6307873 -3.5633626 0.75251502 128.0 +-1.652621 -3.5532892 0.75251502 128.0 +-1.6550649 -3.5021737 0.74421114 128.0 +-3.9382207 -8.203969 1.7034899 128.0 +-4.0764179 -8.3600044 1.7403158 128.0 +-1.6262821 -3.2833719 0.70576054 128.0 +-1.6327002 -3.2460907 0.70016444 128.0 +-1.654376 -3.2395155 0.70088649 128.0 +-1.6710539 -3.2231908 0.69962287 128.0 +-1.7004167 -3.2311563 0.70341378 128.0 +-4.2590551 -7.9752455 1.6926587 128.0 +-4.6340613 -8.5508394 1.8183 128.0 +-1.8994056 -3.4535625 0.75666696 128.0 +-1.942603 -3.4813547 0.76497084 128.0 +-1.9140297 -3.3812022 0.74637735 128.0 +-1.9357197 -3.3711004 0.74673837 128.0 +-2.0068493 -3.445858 0.76515132 128.0 +-2.0529609 -3.4758258 0.77417731 128.0 +-5.0151362 -8.3743525 1.8247987 128.0 +-5.0674472 -8.3451042 1.8251598 128.0 +-0 -0 0 128.0 +-4.9997067 -8.0102749 1.7663105 128.0 +-5.040349 -7.9661479 1.7634223 128.0 +-0 -0 0 128.0 +-5.1168218 -7.8715324 1.756382 128.0 +-5.1693525 -7.846559 1.7578261 128.0 +-5.2294154 -7.8326898 1.7617975 128.0 +-5.3402042 -7.8933277 1.7823768 128.0 +-5.3957653 -7.8709588 1.7847235 128.0 +-5.4473257 -7.8425498 1.7858065 128.0 +-5.5400591 -7.8725247 1.8000675 128.0 +-5.6876035 -7.9777398 1.8314779 128.0 +-5.6944103 -7.8844824 1.8183 128.0 +-5.7200332 -7.8184342 1.8112597 128.0 +-5.7626281 -7.7760773 1.8096352 128.0 +-5.9129663 -7.8774486 1.8410454 128.0 +-5.9147615 -7.7799444 1.826965 128.0 +-0 -0 0 128.0 +-5.9989018 -7.6928134 1.8237156 128.0 +-6.0411143 -7.6496849 1.8222715 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.6610775 -9.2052031 2.48243 128.0 +-9.7016211 -9.1309195 2.4784586 128.0 +-9.7978039 -9.1087246 2.4885676 128.0 +-9.7368746 -8.9413233 2.4595041 128.0 +-9.642211 -8.7459412 2.4224975 128.0 +-10.401868 -9.3193302 2.596518 128.0 +-10.486107 -9.2794485 2.6031973 128.0 +-0 -0 0 128.0 +-9.3893738 -8.1055984 2.3098536 128.0 +-10.700041 -9.1231518 2.6140285 128.0 +-9.5754051 -8.0632601 2.3307939 128.0 +-9.5271502 -7.9232216 2.3075068 128.0 +-10.407844 -8.5482082 2.5051754 128.0 +-10.998626 -8.9210119 2.6324413 128.0 +-10.911908 -8.7402134 2.5992258 128.0 +-10.21706 -8.0812101 2.4241223 128.0 +-11.128413 -8.6916227 2.6248596 128.0 +-10.093489 -7.7840295 2.3726742 128.0 +-10.166883 -7.7416148 2.3786314 128.0 +-10.387935 -7.8097138 2.4185262 128.0 +-10.348783 -7.6813412 2.398669 128.0 +-11.080383 -8.1194315 2.5544572 128.0 +-11.078993 -8.0143948 2.5429039 128.0 +-11.250424 -8.03372 2.5705233 128.0 +-11.176507 -7.8778348 2.5429039 128.0 +-0 -0 0 128.0 +-10.921257 -7.4990053 2.4647391 128.0 +-11.002076 -7.4555798 2.4725015 128.0 +-0 -0 0 128.0 +-11.034453 -7.2815413 2.4596846 128.0 +-11.055021 -7.1981335 2.4544494 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.516806 -9.7713232 3.5554357 128.0 +-16.65546 -9.7158871 3.5722241 128.0 +-16.59881 -9.546814 3.5476735 128.0 +-16.448311 -9.3264084 3.5036268 128.0 +-16.536135 -9.2425833 3.5101254 128.0 +-16.564106 -9.1252832 3.5041683 128.0 +-0 -0 0 128.0 +-16.683514 -8.9259691 3.5059736 128.0 +-17.071205 -8.9991083 3.5751123 128.0 +-17.123482 -8.8928318 3.5745709 128.0 +-16.267941 -8.322156 3.3870113 128.0 +-6.6443696 -3.3475056 1.3987736 128.0 +-7.3097243 -3.6266975 1.5309136 128.0 +-7.0022082 -3.4207249 1.4635799 128.0 +-7.0257244 -3.3789747 1.4641215 128.0 +-7.2303405 -3.4229283 1.5014889 128.0 +-18.79384 -8.7571621 3.8386703 128.0 +-19.02335 -8.7224426 3.8742325 128.0 +-19.088167 -8.6108112 3.8765793 128.0 +-17.53858 -7.7825861 3.5548942 128.0 +-17.462503 -7.6209245 3.530163 128.0 +-17.614685 -7.5590167 3.5512838 128.0 +-20.77087 -8.7629862 4.1708255 128.0 +-7.4068489 -3.071188 1.5049188 128.0 +-7.6459775 -3.1155107 1.5486044 128.0 +-6.9463396 -2.7808137 1.4065359 128.0 +-6.9889007 -2.748219 1.4115903 128.0 +-7.9470057 -3.0688605 1.5968031 128.0 +-7.1738458 -2.7197874 1.4413761 128.0 +-7.204226 -2.6808643 1.4440838 128.0 +-8.1647511 -2.981447 1.6285744 128.0 +-8.1134453 -2.9064126 1.6150354 128.0 +-8.0800886 -2.8386419 1.6051069 128.0 +-8.2545137 -2.8431492 1.6356146 128.0 +-7.2224979 -2.438163 1.43235 128.0 +-22.538584 -7.4556904 4.390337 128.0 +-21.624836 -7.0064964 4.2053046 128.0 +-23.118702 -7.3341031 4.4847484 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.9547 -3.7622046 2.5091467 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.660972 -3.4254904 2.4405496 128.0 +-12.704576 -3.3537652 2.4448819 128.0 +-12.664907 -3.2602987 2.4335093 128.0 +-12.636019 -3.1703184 2.4243028 128.0 +-16.910793 -4.1328492 3.2283351 128.0 +-16.954971 -4.0335617 3.2319455 128.0 +-17.942434 -4.1523442 3.4133673 128.0 +-12.758956 -2.870271 2.4335093 128.0 +-13.989931 -3.057169 2.661505 128.0 +-14.05461 -2.9810681 2.6701698 128.0 +-18.308683 -3.7662604 3.4639125 128.0 +-0 -0 0 128.0 +-14.13897 -2.7280135 2.676127 128.0 +-14.371058 -2.6814437 2.7163827 128.0 +-12.469694 -2.2475345 2.3587744 128.0 +-12.558833 -2.1841269 2.3728549 128.0 +-12.579759 -2.1083272 2.374299 128.0 +-12.607023 -2.0334492 2.3770068 128.0 +-16.757868 -2.597693 3.1456573 128.0 +-12.877163 -1.9152035 2.4226782 128.0 +-17.055286 -2.4298704 3.1951196 128.0 +-12.58686 -1.7144163 2.3647316 128.0 +-12.52594 -1.6278967 2.3515537 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-17.862766 -1.9880425 3.331953 128.0 +-17.904953 -1.8815885 3.3375492 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-20.598967 -1.7820833 3.8280196 128.0 +-25.183134 -2.0231645 4.6701417 128.0 +-19.674702 -1.4590977 3.6541798 128.0 +-19.836367 -1.3487604 3.6823406 128.0 +-19.092291 -1.1805097 3.5440631 128.0 +-0 -0 0 128.0 +-24.665535 -1.2215942 4.5658016 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-22.218649 13.337729 4.4677916 128.0 +-21.749096 13.238049 4.3902073 128.0 +-0 0 0 128.0 +-20.540514 12.850427 4.1793804 128.0 +-22.339108 14.167235 4.5598807 128.0 +-0 0 0 128.0 +-19.238483 12.534328 3.9624817 128.0 +-18.988485 12.538073 3.927063 128.0 +-18.875971 12.630774 3.9198105 128.0 +-21.026838 14.257747 4.3805933 128.0 +-22.2875 15.313128 4.6605716 128.0 +-0 0 0 128.0 +-21.134573 14.905983 4.4588523 128.0 +-19.455629 13.901275 4.1250715 128.0 +-0 0 0 128.0 +-20.837545 15.278487 4.4548044 128.0 +-19.740065 14.660809 4.240942 128.0 +-0 0 0 128.0 +-20.577875 15.678567 4.4602017 128.0 +-19.611223 15.133081 4.2721443 128.0 +-19.734674 15.422476 4.3192005 128.0 +-20.029203 15.851587 4.4042063 128.0 +-16.174465 12.96277 3.5802951 128.0 +-16.016562 12.998412 3.5630915 128.0 +-15.909851 13.074538 3.5571885 128.0 +-15.833874 13.175696 3.5582004 128.0 +-16.281862 13.718478 3.6766007 128.0 +-15.617757 13.323586 3.5462253 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-35.261654 31.611563 8.1368523 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-15.84892 14.74256 3.7373188 128.0 +-0 0 0 128.0 +-15.741717 15.00736 3.7550282 128.0 +-15.646501 15.100928 3.7543535 128.0 +-14.251448 13.92429 3.442836 128.0 +-14.127902 13.97404 3.4337282 128.0 +-14.07811 14.096733 3.4424987 128.0 +-15.572292 15.785621 3.8277214 128.0 +-14.130367 14.500697 3.4979882 128.0 +-14.587942 15.155271 3.6329174 128.0 +-13.372724 14.064371 3.3542888 128.0 +-13.303719 14.164842 3.3586738 128.0 +-13.182367 14.20935 3.3500721 128.0 +-13.716867 14.968743 3.507602 128.0 +-13.33308 14.730338 3.4332223 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-14.071623 16.133614 3.6966715 128.0 +-13.943417 16.186045 3.6890817 128.0 +-0 0 0 128.0 +-13.765931 16.382347 3.6949847 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-12.256024 15.142687 3.3669384 128.0 +-12.13765 15.186034 3.3600233 128.0 +-12.078436 15.303554 3.3694682 128.0 +-12.473236 16.00481 3.505578 128.0 +-10.691784 13.893707 3.0333261 128.0 +-10.599773 13.950416 3.0314708 128.0 +-0 0 0 128.0 +-11.679576 15.769832 3.3913941 128.0 +-9.7350397 13.314032 2.8557255 128.0 +-9.6768131 13.406284 2.8626406 128.0 +-10.192023 14.304319 3.0388918 128.0 +-10.078547 14.330304 3.0313022 128.0 +-9.3665857 13.493059 2.8440878 128.0 +-9.2797184 13.544585 2.8429074 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-8.9681473 13.804612 2.8503284 128.0 +-8.8338137 13.782201 2.8346429 128.0 +-9.4269876 14.908382 3.0517101 128.0 +-8.3609638 13.40365 2.7366507 128.0 +-8.1933451 13.316177 2.7088215 128.0 +-9.5431499 15.725716 3.1810734 128.0 +-9.8660603 16.485147 3.3208938 128.0 +-9.8203268 16.639603 3.3396151 128.0 +-8.3260851 14.307261 2.866014 128.0 +-8.2018461 14.294812 2.853533 128.0 +-8.6142416 15.229437 3.0274229 128.0 +-8.0363674 14.413325 2.8572435 128.0 +-8.0080585 14.572075 2.8786635 128.0 +-9.108285 16.818167 3.3062203 128.0 +-8.2550669 15.468431 3.0336633 128.0 +-8.9324036 16.988001 3.3176892 128.0 +-8.8710632 17.125637 3.3337121 128.0 +-7.6737576 15.039146 2.9225154 128.0 +-0 0 0 128.0 +-18.303068 36.988628 7.0951991 128.0 +-0 0 0 128.0 +-7.1442285 14.893217 2.8599422 128.0 +-0 0 0 128.0 +-8.0465517 17.316439 3.300823 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-7.7463884 17.506685 3.3092561 128.0 +-6.6580615 15.299735 2.8886147 128.0 +-16.395626 38.321285 7.1656995 128.0 +-6.4881511 15.423901 2.8967104 128.0 +-0 0 0 128.0 +-6.2857757 15.47131 2.8909757 128.0 +-6.4935927 16.268509 3.0307961 128.0 +-6.4404116 16.427347 3.0527222 128.0 +-6.0233035 15.645101 2.9021075 128.0 +-5.9425244 15.722334 2.9095285 128.0 +-5.8336024 15.725231 2.9034567 128.0 +-5.7407122 15.770918 2.9053121 128.0 +-5.6448298 15.808631 2.905818 128.0 +-4.6667237 13.32648 2.449589 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.618381 14.610932 2.6555245 128.0 +-4.5114603 14.583437 2.6455734 128.0 +-4.1732688 13.78911 2.4986694 128.0 +-0 0 0 128.0 +-3.9837501 13.770163 2.486357 128.0 +-3.9613667 14.014407 2.5254865 128.0 +-3.7934926 13.742001 2.4728642 128.0 +-3.7265351 13.829737 2.484333 128.0 +-3.9703002 15.103077 2.705617 128.0 +-3.8988414 15.210224 2.7202904 128.0 +-3.8042459 15.229079 2.7194471 128.0 +-3.7125938 15.259796 2.7207963 128.0 +-0 0 0 128.0 +-3.5151005 15.260983 2.7132068 128.0 +-3.2821152 14.659927 2.6040828 128.0 +-4.1539197 19.104649 3.3789134 128.0 +-3.0297434 14.356721 2.544208 128.0 +-2.7646096 13.509792 2.3930874 128.0 +-2.6799388 13.517799 2.3915694 128.0 +-3.6576383 19.064346 3.3551321 128.0 +-2.7794788 14.982074 2.640851 128.0 +-2.6089542 14.5603 2.564616 128.0 +-2.5064752 14.500274 2.5514605 128.0 +-2.3415482 14.059374 2.4723582 128.0 +-3.0768898 19.203583 3.3613725 128.0 +-4.9067411 31.879986 5.5527902 128.0 +-2.1950588 14.863604 2.6044202 128.0 +-0 0 0 128.0 +-1.9254075 14.244731 2.4931035 128.0 +-1.9907489 15.442099 2.6976898 128.0 +-3.8371549 31.286627 5.4271374 128.0 +-3.6435163 31.295876 5.4247761 128.0 +-0 0 0 128.0 +-3.2584798 31.331367 5.4235954 128.0 +-3.0656934 31.345867 5.4227524 128.0 +-2.8715034 31.344456 5.4193792 128.0 +-2.6718273 31.276043 5.4047055 128.0 +-2.5020535 31.571888 5.452774 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.186609 35.995701 6.2041607 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.0317845 20.721964 3.5836682 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.9871548 21.374018 3.7066224 128.0 +0 0 0 128.0 +2.1111374 20.037439 3.481122 128.0 +2.2413714 20.089741 3.4924223 128.0 +1.6877978 14.3324 2.5028858 128.0 +1.7459745 14.082122 2.4615638 128.0 +1.8770516 14.414215 2.5207641 128.0 +2.0810797 15.249148 2.6669934 128.0 +2.1743288 15.23414 2.6666563 128.0 +2.2488699 15.093775 2.6447301 128.0 +0 0 0 128.0 +2.2640588 14.014153 2.4625759 128.0 +2.5653329 15.282146 2.6850402 128.0 +2.6346874 15.126287 2.660753 128.0 +2.5794351 14.2902 2.518234 128.0 +2.7730219 14.840905 2.6169009 128.0 +2.9921658 15.486527 2.732434 128.0 +2.8327703 14.193903 2.5101383 128.0 +2.8657033 13.913668 2.4642625 128.0 +3.2068653 15.100051 2.6749206 128.0 +3.3053582 15.107051 2.6796432 128.0 +3.6150792 16.049976 2.8486419 128.0 +3.718833 16.050539 2.8526897 128.0 +3.8151913 16.018787 2.8511717 128.0 +3.8981783 15.932845 2.8402088 128.0 +3.8315787 15.254748 2.7248442 128.0 +3.4915702 13.549174 2.4276628 128.0 +3.5582671 13.465554 2.4166999 128.0 +4.0212517 14.847703 2.6656442 128.0 +4.1212416 14.855042 2.6713786 128.0 +4.223897 14.870245 2.6786311 128.0 +4.2911162 14.761704 2.6639576 128.0 +4.3585682 14.657626 2.6501274 128.0 +4.4650583 14.685302 2.6599097 128.0 +4.5580077 14.667041 2.6615963 128.0 +4.6819296 14.745893 2.6808238 128.0 +4.7878304 14.764705 2.6894255 128.0 +4.9238844 14.872598 2.7142186 128.0 +5.0301971 14.886927 2.7223144 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.26977 15.309267 5.534575 128.0 +28.210119 15.053852 5.5048904 128.0 +28.242632 14.849284 5.4934216 128.0 +28.223806 14.619048 5.4723387 128.0 +28.255028 14.416031 5.4612069 128.0 +28.218765 14.179993 5.4374261 128.0 +28.195694 13.952375 5.416512 128.0 +28.171782 13.726008 5.3957663 128.0 +28.161264 13.507709 5.3778882 128.0 +28.187462 13.30815 5.3672628 128.0 +28.130928 13.070987 5.341289 128.0 +28.142471 12.866986 5.3284707 128.0 +28.135492 12.655656 5.3124475 128.0 +28.115265 12.439713 5.2942324 128.0 +28.097065 12.226068 5.2766914 128.0 +28.1054 12.025136 5.264379 128.0 +28.091431 11.815774 5.2481875 128.0 +28.081421 11.609297 5.2330084 128.0 +28.083635 11.408953 5.2203588 128.0 +28.045084 11.19331 5.2004566 128.0 +28.05267 10.997277 5.1893249 128.0 +28.060747 10.802281 5.1785307 128.0 +28.052738 10.602026 5.1650376 128.0 +28.035936 10.399535 5.1501956 128.0 +28.02512 10.200347 5.1367025 128.0 +27.988781 9.9930687 5.1188245 128.0 +27.986309 9.7989969 5.1073556 128.0 +28.003023 9.6123734 5.099597 128.0 +28.012896 9.4240274 5.0908265 128.0 +27.977514 9.2214231 5.0741291 128.0 +27.964155 9.0271788 5.0616484 128.0 +27.968266 8.839385 5.0525403 128.0 +27.952293 8.6460581 5.0400596 128.0 +27.946325 8.4566851 5.0296025 128.0 +27.935308 8.2665939 5.0184708 128.0 +27.928692 8.078599 5.0083513 128.0 +27.91703 7.889926 4.9975567 128.0 +27.894606 7.6990786 4.985076 128.0 +27.898491 7.5162387 4.9774861 128.0 +27.901186 7.3336415 4.9698963 128.0 +27.883596 7.1464009 4.9589334 128.0 +27.874323 6.9620414 4.949657 128.0 +27.869587 6.7794628 4.9413924 128.0 +27.86462 6.5974317 4.9332967 128.0 +27.864235 6.4170446 4.9262133 128.0 +27.840563 6.2319593 4.9152503 128.0 +27.824339 6.0492911 4.9058051 128.0 +27.82139 5.8701091 4.89889 128.0 +27.815361 5.6907959 4.8916373 128.0 +27.800444 5.5102453 4.8830357 128.0 +27.806627 5.3343625 4.8783131 128.0 +27.79813 5.156096 4.8712296 128.0 +27.791405 4.9786558 4.8646517 128.0 +27.76898 4.798975 4.8555441 128.0 +27.762901 4.6226707 4.849472 128.0 +27.772251 4.4492722 4.8462677 128.0 +27.758112 4.2724848 4.8391838 128.0 +27.7409 4.0957513 4.8317628 128.0 +27.733301 3.920907 4.8261967 128.0 +27.73144 3.7472343 4.8218117 128.0 +27.721649 3.5728505 4.816246 128.0 +27.718592 3.3996875 4.8120294 128.0 +27.716412 3.2269247 4.8081503 128.0 +27.697479 3.0525894 4.8015723 128.0 +27.676474 2.8785067 4.794826 128.0 +27.664185 2.7057555 4.7897658 128.0 +27.665543 2.5346119 4.7872362 128.0 +27.658968 2.3629668 4.7835255 128.0 +27.652311 2.1915755 4.7799835 128.0 +27.645576 2.020427 4.7766104 128.0 +27.635817 1.8493118 4.7729001 128.0 +27.630903 1.6787511 4.7702012 128.0 +27.631824 1.5086962 4.7686834 128.0 +27.627764 1.3385026 4.7664909 128.0 +27.620684 1.1683325 4.7639608 128.0 +27.601723 0.99790823 4.7595758 128.0 +27.60437 0.82843989 4.7590694 128.0 +27.594152 0.65869486 4.7565398 128.0 +27.582891 0.48910645 4.7540097 128.0 +27.576504 0.31974933 4.752492 128.0 +27.57696 0.15053171 4.7523232 128.0 +27.577366 -0.01868017 4.7523232 128.0 +27.556032 -0.18774945 4.7487812 128.0 +27.547462 -0.3567369 4.7476006 128.0 +27.533915 -0.52555084 4.7457452 128.0 +27.5282 -0.69443607 4.7454081 128.0 +27.516525 -0.86311626 4.7442274 128.0 +27.505787 -1.0317533 4.7433844 128.0 +27.498938 -1.2005062 4.7433844 128.0 +27.49893 -1.3696065 4.7447333 128.0 +27.487057 -1.5381457 4.7442274 128.0 +27.488907 -1.707508 4.7462516 128.0 +27.469061 -1.8755399 4.7447333 128.0 +27.494389 -2.0468338 4.7511425 128.0 +27.475416 -2.2150223 4.7501307 128.0 +27.460325 -2.3834813 4.7499619 128.0 +27.437332 -2.5511994 4.7486129 128.0 +27.455492 -2.7229099 4.7545156 128.0 +27.448071 -2.8923557 4.7562022 128.0 +27.411194 -3.0586417 4.7529979 128.0 +27.402679 -3.228045 4.7548532 128.0 +27.38529 -3.396488 4.7553592 128.0 +27.372732 -3.5656033 4.7568769 128.0 +18.774715 -2.5624943 3.2758613 128.0 +27.385462 -3.9096012 4.7669969 128.0 +27.368755 -4.0787244 4.7683458 128.0 +27.350033 -4.2476382 4.7695265 128.0 +0 -0 0 128.0 +18.124453 -3.0426772 3.1782062 128.0 +18.047178 -3.1436768 3.1680865 128.0 +19.031485 -3.4356506 3.3426511 128.0 +18.991636 -3.5489197 3.3394465 128.0 +0 -0 0 128.0 +18.765902 -3.7456198 3.3079069 128.0 +17.949013 -3.6971834 3.1692672 128.0 +17.971304 -3.8168743 3.1771944 128.0 +18.03228 -3.9456184 3.1920364 128.0 +25.662777 -5.7809763 4.53475 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.104269 -4.4296103 3.2227328 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9478431 -2.2570186 1.4472342 128.0 +7.932898 -2.3054678 1.4470655 128.0 +0 -0 0 128.0 +31.629576 -9.618372 5.6904178 128.0 +0 -0 0 128.0 +7.9744492 -2.5313807 1.4651122 128.0 +7.9709554 -2.5842168 1.4673048 128.0 +7.9334278 -2.6259503 1.4634256 128.0 +0 -0 0 128.0 +24.72106 -8.5232706 4.5079327 128.0 +0 -0 0 128.0 +20.59716 -7.3852663 3.7776289 128.0 +19.891394 -7.2702169 3.6573732 128.0 +19.917532 -7.4186263 3.6703603 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.772738 -8.1757097 3.8533578 128.0 +20.408358 -8.1772518 3.795507 128.0 +19.124775 -7.7993932 3.5676453 128.0 +20.39933 -8.4656191 3.8127105 128.0 +20.382416 -8.6055822 3.8192883 128.0 +18.864765 -8.1014719 3.5465627 128.0 +0 -0 0 128.0 +18.74411 -8.3235588 3.5428522 128.0 +19.225409 -8.6789379 3.6428685 128.0 +19.238087 -8.8271608 3.6553493 128.0 +19.171947 -8.9396219 3.6531568 128.0 +0 -0 0 128.0 +19.172707 -9.2280865 3.6744082 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +3.9867043 -2.009022 0.7973817 128.0 +3.9725473 -2.032548 0.79704434 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +3.8262239 -2.1388941 0.78355145 128.0 +3.8267441 -2.1701145 0.78625005 128.0 +3.8680298 -2.2250233 0.79704434 128.0 +3.7828004 -2.2069724 0.78287679 128.0 +3.7149045 -2.198004 0.77208245 128.0 +3.7047281 -2.2227862 0.77275711 128.0 +3.717962 -2.2618768 0.77815425 128.0 +3.7283382 -2.29966 0.78304547 128.0 +3.7158287 -2.3235388 0.78338277 128.0 +13.50516 -8.5642862 2.769877 128.0 +4.1969414 -2.6967764 0.88710958 128.0 +4.1885738 -2.7278585 0.88879615 128.0 +4.1972547 -2.7703459 0.89402467 128.0 +4.2432528 -2.8382592 0.90701163 128.0 +4.2559419 -2.8847108 0.91325206 128.0 +4.2519717 -2.9202602 0.91611934 128.0 +3.3101707 -2.3031361 0.723508 128.0 +3.2355669 -2.280793 0.7108584 128.0 +3.0787618 -2.1985965 0.68083662 128.0 +3.0532372 -2.2087765 0.6783067 128.0 +3.0555243 -2.2391264 0.68167996 128.0 +3.0306499 -2.2496045 0.67931867 128.0 +2.9907968 -2.2486026 0.67375284 128.0 +2.9408791 -2.2394311 0.66599447 128.0 +2.9473712 -2.2730911 0.67037964 128.0 +2.8844416 -2.2528934 0.65975398 128.0 +2.8527875 -2.2564797 0.65587473 128.0 +2.7919729 -2.2363374 0.64558643 128.0 +2.8769236 -2.3335574 0.66734374 128.0 +2.886157 -2.3705676 0.67257226 128.0 +4.3557572 -3.6234088 1.00298 128.0 +2.9563439 -2.4896464 0.69483554 128.0 +2.9402623 -2.5070996 0.69466686 128.0 +4.2845945 -3.6997485 1.0021366 128.0 +3.9702344 -3.4709442 0.93585271 128.0 +3.304646 -2.9247713 0.78861129 128.0 +3.9640372 -3.5523024 0.94428575 128.0 +4.0370479 -3.6626787 0.96621174 128.0 +3.4933872 -3.2085249 0.84511286 128.0 +3.4656959 -3.2225146 0.84325761 128.0 +2.4140322 -2.2719388 0.60072249 128.0 +2.4107471 -2.2969108 0.60325241 128.0 +2.3788781 -2.2945461 0.59903586 128.0 +2.3816738 -2.3256326 0.60308373 128.0 +2.4094038 -2.381794 0.61320341 128.0 +3.6727753 -3.6764059 0.92269713 128.0 +3.5684707 -3.6160672 0.90279508 128.0 +4.2712235 -4.38199 1.0805641 128.0 +4.2367373 -4.4003034 1.0787089 128.0 +3.6215153 -3.8075802 0.93264812 128.0 +2.6352131 -2.8044097 0.69196832 128.0 +2.6159449 -2.8183584 0.69146234 128.0 +2.9015799 -3.1650236 0.76820326 128.0 +3.5931232 -3.9683912 0.94951427 128.0 +3.4524319 -3.8602939 0.91966122 128.0 +3.4064991 -3.8562832 0.91392672 128.0 +2.9137311 -3.3392794 0.79181588 128.0 +2.3579795 -2.7357368 0.65148956 128.0 +2.595345 -3.0489552 0.71861678 128.0 +2.36164 -2.8089921 0.66144061 128.0 +1.6608073 -1.999657 0.47827429 128.0 +1.6485063 -2.00981 0.47827429 128.0 +1.6435841 -2.0290816 0.48029822 128.0 +1.6797159 -2.0999579 0.49362248 128.0 +1.6551974 -2.0955236 0.4904179 128.0 +1.6629076 -2.1320748 0.4961524 128.0 +1.6660231 -2.1633303 0.50070626 128.0 +1.657488 -2.179791 0.50205553 128.0 +2.2526784 -3.001296 0.67560816 128.0 +3.2742536 -4.4194965 0.97464484 128.0 +2.2255673 -3.0422409 0.67847538 128.0 +2.188977 -3.0310624 0.67324686 128.0 +1.7242435 -2.4182632 0.54169101 128.0 +1.6526749 -2.3481693 0.52482486 128.0 +1.4437765 -2.0780942 0.46646798 128.0 +1.4610786 -2.1308255 0.47557572 128.0 +1.4269991 -2.1087203 0.46916658 128.0 +1.745528 -2.6143277 0.57137537 128.0 +1.8221325 -2.7657719 0.60021651 128.0 +1.9909012 -3.0629048 0.65857333 128.0 +1.807201 -2.8177996 0.60628831 128.0 +1.9505311 -3.0829399 0.65773004 128.0 +1.9279265 -3.0889957 0.65654939 128.0 +1.927013 -3.1301508 0.66245258 128.0 +2.2902298 -3.7722433 0.78861129 128.0 +2.3060124 -3.851352 0.80159819 128.0 +2.2793322 -3.8603354 0.80058622 128.0 +2.2496541 -3.8640251 0.79856229 128.0 +1.1292011 -1.9660244 0.42143539 128.0 +1.1248801 -1.9866437 0.42413399 128.0 +1.0997106 -1.9702631 0.4195801 128.0 +1.1080106 -2.0141199 0.42683256 128.0 +0 -0 0 128.0 +1.1175482 -2.091917 0.4393135 128.0 +1.6849127 -3.2023866 0.6526702 128.0 +1.6892569 -3.259053 0.66160923 128.0 +1.6553421 -3.2421384 0.65638071 128.0 +0.9955101 -1.9786743 0.41249633 128.0 +0.98990732 -1.997997 0.41502625 128.0 +1.4805536 -3.0363529 0.61151683 128.0 +1.4474026 -3.0151629 0.60578233 128.0 +1.4074144 -2.978529 0.5971806 128.0 +0.96175677 -2.0672781 0.423628 128.0 +0.9392184 -2.051626 0.4195801 128.0 +0.93793291 -2.0825205 0.42430264 128.0 +1.3291084 -3.0013547 0.59515667 128.0 +0.97522628 -2.2384863 0.45128846 128.0 +0.96728826 -2.2580216 0.45381838 128.0 +0.95074022 -2.2575541 0.45263776 128.0 +1.3612369 -3.2899468 0.64271915 128.0 +0.91591692 -2.2517002 0.44943318 128.0 +1.344874 -3.3668244 0.65385079 128.0 +1.5723934 -4.0082207 0.77022719 128.0 +0.86440116 -2.2424209 0.44471067 128.0 +1.1279728 -2.9816241 0.57896513 128.0 +1.4483055 -3.901557 0.74560261 128.0 +1.4149004 -3.8844354 0.74088013 128.0 +1.3837487 -3.8726215 0.73716956 128.0 +1.1619391 -3.3154104 0.63462341 128.0 +1.1319749 -3.2945089 0.62956357 128.0 +0.88704842 -2.6334131 0.50897068 128.0 +1.3305594 -4.0336661 0.7602762 128.0 +0.93035668 -2.8786058 0.55113602 128.0 +0.77902508 -2.4613218 0.47523838 128.0 +0.75400621 -2.4340389 0.46950391 128.0 +0 -0 0 128.0 +1.1751598 -3.9676688 0.74155474 128.0 +1.151888 -3.9785922 0.7422294 128.0 +0.88381213 -3.1233702 0.58891618 128.0 +0.88114995 -3.1885943 0.59954184 128.0 +0.83926409 -3.1111388 0.58486831 128.0 +0.83093143 -3.157222 0.59212077 128.0 +0.77484232 -3.0190375 0.56682152 128.0 +0.75534803 -3.0199099 0.56614691 128.0 +0.7335428 -3.0110791 0.56378561 128.0 +0.72595215 -3.0615633 0.57188135 128.0 +0.71157646 -3.0851707 0.57525462 128.0 +0.50663954 -2.258415 0.42953113 128.0 +0.48293254 -2.2162116 0.42160407 128.0 +0.47868371 -2.2634978 0.42936248 128.0 +0.69984496 -3.4155502 0.63006955 128.0 +1.655265 -8.3469639 1.4895681 128.0 +1.6030896 -8.3521233 1.4887248 128.0 +0.7213257 -3.8833544 0.70934045 128.0 +0.6872319 -3.8304634 0.6993894 128.0 +0.66841441 -3.861804 0.70411193 128.0 +0.65134215 -3.9056969 0.71102703 128.0 +0.63095027 -3.9320049 0.71490628 128.0 +0.40368822 -2.6157506 0.48637003 128.0 +0.38935781 -2.6298797 0.48839396 128.0 +0.37348971 -2.6341712 0.48873129 128.0 +0.35824335 -2.6432509 0.48991191 128.0 +0.37174293 -2.8761113 0.52971601 128.0 +0.35648751 -2.8979051 0.53308922 128.0 +0.33345801 -2.855001 0.52533084 128.0 +0.2586188 -2.3367479 0.43577161 128.0 +0.24346051 -2.3304477 0.43442231 128.0 +0.2281975 -2.3220878 0.43273571 128.0 +0.2142148 -2.3263888 0.4332417 128.0 +0.19960088 -2.3237312 0.43256703 128.0 +0.26527399 -3.3340383 0.60578233 128.0 +0.25622839 -3.491909 0.63259947 128.0 +0.22401138 -3.3321252 0.60493898 128.0 +0.20308375 -3.3255661 0.60358971 128.0 +0.18106377 -3.2972233 0.59852988 128.0 +0.16035242 -3.2884271 0.59684324 128.0 +0.14062974 -3.3001819 0.59869856 128.0 +0.11045332 -3.0261586 0.551642 128.0 +0.093329854 -3.0750556 0.55990642 128.0 +0.07408423 -3.0598042 0.55720782 128.0 +0.057696622 -3.1952174 0.58031446 128.0 +0 -0 0 128.0 +0.017120764 -2.9443417 0.53730577 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.074673392 -3.9648466 0.71203899 128.0 +-0.099522702 -3.9850063 0.71558088 128.0 +-0 -0 0 128.0 +-0.08727444 -2.3553133 0.43678358 128.0 +-0.1014235 -2.3478403 0.43560296 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.19631267 -2.651288 0.48839396 128.0 +-0.21828285 -2.7207723 0.50053757 128.0 +-0.23565528 -2.7272375 0.5018869 128.0 +-0.25256747 -2.7277031 0.50222421 128.0 +-0.26959154 -2.7290447 0.50273019 128.0 +-0.28509152 -2.7155762 0.50070626 128.0 +-0.30393559 -2.7333674 0.50407946 128.0 +-0.31966329 -2.722641 0.50256151 128.0 +-0.33429995 -2.7039995 0.49969429 128.0 +-0.35559744 -2.7380614 0.50593477 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.4003394 -3.4975095 0.67813808 128.0 +-1.419912 -3.484288 0.67729473 128.0 +-1.4473102 -3.4900758 0.67999333 128.0 +-1.469081 -3.4820375 0.68016201 128.0 +-1.4841948 -3.4584672 0.67746341 128.0 +-0 -0 0 128.0 +-1.5301245 -3.448101 0.67898136 128.0 +-0 -0 0 128.0 +-1.6344002 -3.5643373 0.70444924 128.0 +-1.6524905 -3.5462019 0.70293128 128.0 +-1.6856143 -3.5600455 0.70748514 128.0 +-4.0259156 -8.3659573 1.622136 128.0 +-4.0611525 -8.3083344 1.6158955 128.0 +-1.667124 -3.359798 0.6752708 128.0 +-1.6557541 -3.2861378 0.66312718 128.0 +-1.6736404 -3.2715294 0.6622839 128.0 +-1.6964099 -3.2664461 0.66329587 128.0 +-1.7417166 -3.3039243 0.67257226 128.0 +-4.1222672 -7.7013693 1.5281916 128.0 +-4.5534477 -8.3826523 1.6658193 128.0 +-1.8636268 -3.3826551 0.69432956 128.0 +-1.9084066 -3.4141684 0.7027626 128.0 +-1.920077 -3.3861063 0.69955808 128.0 +-1.9531102 -3.395618 0.70377457 128.0 +-2.0166452 -3.4567764 0.71827948 128.0 +-4.9548154 -8.3713741 1.6980337 128.0 +-5.0091319 -8.3458843 1.6990457 128.0 +-5.0182204 -8.2459526 1.6852154 128.0 +-4.9936585 -8.0933819 1.6607594 128.0 +-5.0463614 -8.0676022 1.6617714 128.0 +-5.170207 -8.1538506 1.6855527 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.5096431 -8.2350368 1.7288986 128.0 +-5.5490041 -8.1847601 1.7255255 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.7276936 -8.1223125 1.7341272 128.0 +-5.6473365 -7.9049697 1.6958411 128.0 +-5.7997708 -8.0138874 1.7262001 128.0 +-5.3359089 -7.2786646 1.5777781 128.0 +-5.3775311 -7.2418308 1.5769347 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.6492443 -9.2886229 2.3252854 128.0 +-0 -0 0 128.0 +-9.7380743 -9.1465702 2.319551 128.0 +-9.8099108 -9.1013937 2.3232615 128.0 +-9.8125191 -8.9924202 2.3109493 128.0 +-9.9449768 -9.0021524 2.3288274 128.0 +-9.7134323 -8.6847649 2.2630494 128.0 +-9.7384605 -8.6002102 2.2566402 128.0 +-9.8036757 -8.5513077 2.2595074 128.0 +-9.3891954 -8.0889435 2.1540942 128.0 +-9.9837017 -8.4948645 2.2765422 128.0 +-10.690684 -8.9838142 2.4229405 128.0 +-9.6897211 -8.0418921 2.1881638 128.0 +-9.8250322 -8.0528831 2.2072225 128.0 +-10.931623 -8.8481379 2.4399753 128.0 +-11.025747 -8.8128948 2.4487455 128.0 +-11.002239 -8.6840143 2.4318795 128.0 +-11.244246 -8.763566 2.4728642 128.0 +-11.252498 -8.6595449 2.4630818 128.0 +-11.311698 -8.595108 2.464431 128.0 +-10.421956 -7.8187628 2.2628808 128.0 +-11.016299 -8.1594181 2.3792572 128.0 +-10.316601 -7.5436864 2.2203779 128.0 +-10.324329 -7.4525552 2.2122822 128.0 +-10.353807 -7.3776274 2.208909 128.0 +-10.444033 -7.3457098 2.218354 128.0 +-10.948033 -7.6001539 2.3139851 128.0 +-10.956242 -7.5066538 2.3060579 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.520636 -9.6139441 3.3041964 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.662083 -9.2899866 3.2977872 128.0 +-16.54859 -9.0940676 3.2645609 128.0 +-0 -0 0 128.0 +-16.613722 -8.8661776 3.2557905 128.0 +-16.753311 -8.809021 3.2723193 128.0 +-16.848183 -8.7273645 3.2802463 128.0 +-16.322805 -8.3286343 3.1690986 128.0 +-16.405308 -8.2442541 3.1751704 128.0 +-6.7482843 -3.3403218 1.3219187 128.0 +-6.9937253 -3.4085026 1.3647587 128.0 +-7.0225062 -3.3693621 1.3662766 128.0 +-7.1553574 -3.3792286 1.3875279 128.0 +-7.266242 -3.377207 1.4045628 128.0 +-7.1577401 -3.2735448 1.3802755 128.0 +-7.2675848 -3.269995 1.3971417 128.0 +-6.9954586 -3.0961335 1.3424953 128.0 +-6.9302683 -3.0165799 1.3268099 128.0 +-7.9382463 -3.3973629 1.5109881 128.0 +-7.814477 -3.2878325 1.4841709 128.0 +-6.9272323 -2.8647828 1.3161842 128.0 +-21.324978 -8.663559 3.9720955 128.0 +-7.8874035 -3.1489167 1.4867009 128.0 +-7.7368035 -3.0339141 1.4554986 128.0 +-7.1785073 -2.7643785 1.3497478 128.0 +-7.2036328 -2.7234159 1.3512658 128.0 +-7.9613819 -2.9540589 1.4865322 128.0 +-8.0293751 -2.9233558 1.4956399 128.0 +-7.1597118 -2.5572195 1.3343996 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-22.639164 -7.6164479 4.1206861 128.0 +-21.734346 -7.1639433 3.9493263 128.0 +-0 -0 0 128.0 +-27.895897 -8.8165159 5.0395536 128.0 +-0 -0 0 128.0 +-27.651974 -8.3676262 4.9769802 128.0 +-27.802038 -8.2271624 4.9946895 128.0 +-12.97858 -3.7548132 2.3453562 128.0 +-13.006118 -3.6764476 2.3461995 128.0 +-29.331244 -8.0955362 5.2400918 128.0 +-13.015991 -3.5073364 2.3401277 128.0 +-12.801801 -3.3655252 2.2984684 128.0 +-12.774469 -3.2746778 2.2900352 128.0 +-12.754157 -3.1862035 2.2829514 128.0 +-17.132206 -4.1679888 3.0505295 128.0 +-17.12101 -4.0541611 3.0441203 128.0 +-12.779906 -2.9438238 2.2775543 128.0 +-12.777529 -2.8608317 2.2740123 128.0 +-17.801464 -3.8706503 3.1507144 128.0 +-13.943936 -2.9426668 2.4720209 128.0 +-14.024499 -2.8698924 2.4829838 128.0 +-17.949944 -3.5582304 3.1647134 128.0 +-17.927877 -3.4396698 3.1571236 128.0 +-0 -0 0 128.0 +-12.620799 -2.2615881 2.2274618 128.0 +-13.416322 -2.3191955 2.3632343 128.0 +-12.805114 -2.132761 2.2547851 128.0 +-12.824772 -2.0552411 2.2559657 128.0 +-13.263844 -2.0421705 2.3298392 128.0 +-18.017107 -2.6605167 3.1498711 128.0 +-17.216202 -2.4344597 3.0087016 128.0 +-17.289425 -2.3366942 3.0188212 128.0 +-17.288773 -2.2286749 3.0162911 128.0 +-13.690062 -1.6796857 2.3935933 128.0 +-17.893448 -2.0836902 3.1159701 128.0 +-22.218739 -2.4490011 3.8584177 128.0 +-23.329424 -2.4265747 4.0469813 128.0 +-17.528522 -1.7148474 3.0471563 128.0 +-20.407835 -1.8699977 3.5401535 128.0 +-20.388481 -1.7421428 3.5349252 128.0 +-20.022451 -1.5871984 3.4703279 128.0 +-19.021233 -1.3904996 3.2969439 128.0 +-0 -0 0 128.0 +-23.172037 -1.4080368 4.0058279 128.0 +-0 -0 0 128.0 +-18.195065 -0.88191104 3.1505458 128.0 +-24.721447 -1.0458204 4.2674217 128.0 +-18.635962 -0.6741432 3.2244194 128.0 +-23.169842 -0.69554317 3.9999247 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-23.522593 -0.5868091 3.7730711 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.080421 13.613082 5.8658638 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-21.683092 13.348796 4.0802255 128.0 +-20.567739 12.836866 3.886704 128.0 +-22.071825 13.964481 4.1844411 128.0 +-0 0 0 128.0 +-22.945465 14.914599 4.3828278 128.0 +-19.539709 12.872154 3.7521966 128.0 +-19.137552 12.776306 3.6905146 128.0 +-19.054708 12.890725 3.6897297 128.0 +-22.28009 15.272758 4.3264823 128.0 +-20.911627 14.524123 4.0799112 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-19.615908 14.166474 3.8790133 128.0 +-20.737799 15.171143 4.1171088 128.0 +-21.867098 16.204191 4.3589711 128.0 +-20.978176 15.745808 4.2021766 128.0 +-21.712202 16.50598 4.3680744 128.0 +-20.017265 15.412215 4.048521 128.0 +-0 0 0 128.0 +-18.907373 14.930804 3.8623765 128.0 +-0 0 0 128.0 +-37.959785 30.739395 7.7962112 128.0 +-15.980103 13.10396 3.3179114 128.0 +-15.913074 13.213121 3.3207364 128.0 +-15.840016 13.317505 3.322463 128.0 +-15.81591 13.463739 3.3345482 128.0 +-15.875886 13.683681 3.364526 128.0 +-15.883153 13.860705 3.383831 128.0 +-35.712296 31.552368 7.6069274 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-15.699103 14.934933 3.4772172 128.0 +-15.536033 14.962471 3.4615221 128.0 +-15.32301 14.939625 3.4346833 128.0 +-0 0 0 128.0 +-14.054945 14.043856 3.1912515 128.0 +-13.901853 14.062407 3.1761842 128.0 +-13.98298 14.31914 3.2143233 128.0 +-14.544867 15.078503 3.3631134 128.0 +-0 0 0 128.0 +-13.436132 14.275646 3.1491885 128.0 +-0 0 0 128.0 +-13.230543 14.407447 3.1422825 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-14.919446 16.859144 3.6114109 128.0 +-14.048764 16.072943 3.426208 128.0 +-14.823732 17.171034 3.6387205 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-12.479717 15.194354 3.1584485 128.0 +-12.399939 15.287516 3.1619015 128.0 +-0 0 0 128.0 +-12.557576 15.876168 3.2505791 128.0 +-12.608868 16.14361 3.2890322 128.0 +-12.463133 16.160456 3.276947 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.7850008 13.526506 2.6868091 128.0 +-9.6524591 13.517172 2.6733112 128.0 +-10.00349 14.19205 2.7930653 128.0 +-9.8914032 14.217492 2.7861593 128.0 +-9.2695208 13.499601 2.6361136 128.0 +-9.1815281 13.548866 2.634701 128.0 +-9.1388483 13.665697 2.6463156 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-8.8734818 13.812488 2.6427057 128.0 +-8.7457371 13.799107 2.6299925 128.0 +-8.424242 13.474009 2.5590503 128.0 +-8.2724562 13.413647 2.5381758 128.0 +-8.2639074 13.585654 2.5607769 128.0 +-8.1590519 13.600535 2.5541849 128.0 +-9.7394648 16.462957 3.0735378 128.0 +-8.2816687 14.196969 2.6456876 128.0 +-8.2736797 14.385348 2.6709569 128.0 +-8.5423346 15.065565 2.7860024 128.0 +-8.1182098 14.52459 2.6780198 128.0 +-9.0954914 16.510031 3.0292773 128.0 +-8.179697 15.065759 2.758065 128.0 +-0 0 0 128.0 +-7.93571 15.054049 2.7381322 128.0 +-7.7981262 15.015691 2.722594 128.0 +-7.7251868 15.101063 2.7293429 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-6.9502802 14.45039 2.5819654 128.0 +-17.552656 37.073128 6.5523701 128.0 +-8.0835028 17.348164 3.0752642 128.0 +-8.0020142 17.452198 3.0848382 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-6.8435025 15.681227 2.7527287 128.0 +-6.6303096 15.450654 2.7056432 128.0 +-6.6083241 15.663934 2.7354641 128.0 +-6.6785479 16.105587 2.8045228 128.0 +-6.3526173 15.589285 2.7089391 128.0 +-6.2641859 15.646307 2.7120781 128.0 +-6.1572199 15.656877 2.7073696 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-5.1965852 13.963604 2.4014709 128.0 +-5.012218 13.725273 2.355798 128.0 +-4.9192462 13.731596 2.3517172 128.0 +-0 0 0 128.0 +-4.6519384 13.5052 2.3036902 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.7286015 14.594762 2.4717853 128.0 +-4.633585 14.606557 2.4689603 128.0 +-4.5570531 14.677156 2.476023 128.0 +-4.5599232 15.011009 2.5268753 128.0 +-4.1158566 13.854378 2.330529 128.0 +-4.0872397 14.073796 2.362704 128.0 +-4.1979117 14.793122 2.4774356 128.0 +-3.8276978 13.810728 2.3112237 128.0 +-3.9918132 14.753911 2.462682 128.0 +-3.9710422 15.04263 2.5061576 128.0 +-3.8727579 15.043759 2.5023909 128.0 +-3.7337472 14.881404 2.4719422 128.0 +-0 0 0 128.0 +-3.5033011 14.726258 2.4392962 128.0 +-3.5003951 15.12561 2.5009782 128.0 +-3.2789664 14.575437 2.4079061 128.0 +-3.1397064 14.367581 2.3708653 128.0 +-2.90065 13.675521 2.2553492 128.0 +-0 0 0 128.0 +-2.837451 14.236009 2.3405738 128.0 +-2.7902796 14.46164 2.3743184 128.0 +-2.6634455 14.274611 2.3413584 128.0 +-2.5710773 14.264442 2.3371208 128.0 +-2.4642098 14.169028 2.3192284 128.0 +-2.5333128 15.115042 2.469274 128.0 +-2.4715078 15.322376 2.5001936 128.0 +-2.3328092 15.049348 2.4538929 128.0 +-2.2616403 15.205999 2.4768078 128.0 +-2.1905868 15.376027 2.50192 128.0 +-4.2595577 31.268377 5.0487738 128.0 +-1.9156718 14.7397 2.3958209 128.0 +-3.8777092 31.335938 5.0515985 128.0 +-0 0 0 128.0 +-3.5109055 31.543118 5.0774956 128.0 +-3.3077965 31.473705 5.063056 128.0 +-3.1223922 31.572033 5.0756121 128.0 +-2.9230492 31.530611 5.0660381 128.0 +-2.7343791 31.604036 5.0749846 128.0 +-2.5416744 31.635971 5.0774956 128.0 +-2.3479502 31.656879 5.0784373 128.0 +-0 0 0 128.0 +-2.2217679 35.926846 5.7541142 128.0 +-1.7774844 31.921532 5.1145363 128.0 +-1.5824637 31.949593 5.1173615 128.0 +-1.3924747 32.098808 5.1396484 128.0 +-1.1954939 32.10675 5.1396484 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.2588481 20.623518 3.3172836 128.0 +0 0 0 128.0 +1.5031663 20.488321 3.2984493 128.0 +1.6275994 20.462961 3.2959383 128.0 +0 0 0 128.0 +1.8410885 20.03331 3.2308033 128.0 +1.9819053 20.204454 3.2599962 128.0 +2.087404 20.015102 3.231745 128.0 +2.2069216 19.972467 3.2270365 128.0 +2.3079083 19.774132 3.1975296 128.0 +2.4353416 19.809591 3.205534 128.0 +4.2000742 32.517609 5.2443352 128.0 +1.9220343 14.192905 2.3098114 128.0 +2.0414953 14.409661 2.3465378 128.0 +4.7545533 32.141697 5.1972499 128.0 +2.3188541 15.036515 2.4515386 128.0 +2.2484848 14.008844 2.2884657 128.0 +5.6703024 33.997036 5.5111527 128.0 +2.5831068 14.92122 2.440238 128.0 +2.6814148 14.943001 2.4463592 128.0 +2.6500413 14.264048 2.3393183 128.0 +2.8729711 14.952615 2.4534221 128.0 +2.9819689 15.021889 2.4675477 128.0 +3.2570343 15.896322 2.6124139 128.0 +3.3675761 15.93788 2.6224589 128.0 +0 0 0 128.0 +3.260524 14.546176 2.4027267 128.0 +3.6692457 15.911688 2.628737 128.0 +3.7781987 15.936923 2.6365845 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.4803624 13.56305 2.2589591 128.0 +3.5393922 13.449751 2.2438917 128.0 +4.0114594 14.872388 2.4816732 128.0 +4.099483 14.83607 2.4797897 128.0 +4.4076676 15.578486 2.6066067 128.0 +4.2696991 14.744803 2.4731979 128.0 +4.3934698 14.831013 2.4918752 128.0 +4.5310545 14.957844 2.5174582 128.0 +4.6934342 15.158069 2.5554404 128.0 +0 0 0 128.0 +4.8660369 15.058922 2.5486915 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.84934 18.331102 3.202709 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +8.1604261 17.834789 3.1506009 128.0 +8.2393074 17.719009 3.1391435 128.0 +8.2862787 17.537748 3.1162286 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +23.842329 14.503205 4.4686804 128.0 +0 0 0 128.0 +23.896112 14.137117 4.4460793 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.203758 15.089809 5.1170473 128.0 +28.199717 14.865808 5.0997829 128.0 +28.212397 14.651986 5.085814 128.0 +28.219999 14.43677 5.0712175 128.0 +28.179283 14.198461 5.0483027 128.0 +28.191561 13.988414 5.0351186 128.0 +28.156179 13.756208 5.0137734 128.0 +28.158176 13.543801 4.9993339 128.0 +28.150597 13.328086 4.9834819 128.0 +28.126213 13.105884 4.9649615 128.0 +28.131588 12.898891 4.9519343 128.0 +28.125584 12.68786 4.937181 128.0 +28.122562 12.479394 4.9232125 128.0 +28.103565 12.265122 4.9067326 128.0 +28.101151 12.059344 4.8933916 128.0 +28.095451 11.853292 4.8797369 128.0 +28.072777 11.641334 4.8634138 128.0 +28.076914 11.441655 4.8519564 128.0 +28.041153 11.226947 4.8339067 128.0 +28.026794 11.022146 4.8197813 128.0 +28.035858 10.827554 4.8098931 128.0 +28.02512 10.626262 4.7968664 128.0 +28.006493 10.4231 4.7827406 128.0 +27.997561 10.224632 4.7704983 128.0 +28.001198 10.031665 4.7606106 128.0 +27.990479 9.8344545 4.7485251 128.0 +27.974659 9.6364679 4.7358122 128.0 +27.959341 9.4396791 4.723413 128.0 +27.977354 9.2549181 4.7168207 128.0 +27.966909 9.0614643 4.7056775 128.0 +27.966442 8.8720713 4.6964173 128.0 +27.944899 8.6768761 4.6838613 128.0 +27.922016 8.4822798 4.6713052 128.0 +27.924309 8.2961674 4.6631436 128.0 +27.912092 8.1064901 4.6527848 128.0 +27.88435 7.9132318 4.6400714 128.0 +27.886698 7.7293253 4.6325378 128.0 +27.893559 7.547236 4.625946 128.0 +27.88205 7.360816 4.616529 128.0 +27.874086 7.1760535 4.6078963 128.0 +27.852455 6.9885411 4.5972238 128.0 +27.861235 6.8093033 4.5917306 128.0 +27.86598 6.6295352 4.5857663 128.0 +27.84263 6.4437304 4.5754075 128.0 +27.825762 6.2601962 4.5663042 128.0 +27.826021 6.0811186 4.560183 128.0 +27.819334 5.9010444 4.5531206 128.0 +27.801815 5.7192917 4.544488 128.0 +27.792801 5.539907 4.537425 128.0 +27.78845 5.3619709 4.5313044 128.0 +27.789761 5.1855659 4.5262818 128.0 +27.775373 5.0067186 4.5189052 128.0 +27.770544 4.8301048 4.5132546 128.0 +27.74901 4.6511269 4.5050931 128.0 +27.739 4.4746404 4.4989719 128.0 +27.731777 4.299057 4.4934788 128.0 +27.742002 4.126492 4.4909678 128.0 +27.725737 3.950341 4.4843755 128.0 +27.72401 3.7766786 4.4802947 128.0 +27.716301 3.6025493 4.4754295 128.0 +27.721222 3.4303555 4.4727612 128.0 +27.708399 3.2562771 4.4674249 128.0 +27.698412 3.0829222 4.4627161 128.0 +27.686359 2.9097097 4.4578509 128.0 +27.685019 2.7379274 4.4548688 128.0 +27.677694 2.5658157 4.4511018 128.0 +27.673239 2.3942373 4.4479628 128.0 +27.663782 2.2224941 4.4441962 128.0 +27.653261 2.050957 4.4404292 128.0 +27.638721 1.8794317 4.4361916 128.0 +27.634947 1.7088938 4.4338374 128.0 +27.621246 1.5379786 4.4300704 128.0 +27.624245 1.3681757 4.4291286 128.0 +27.631132 1.198608 4.4289718 128.0 +27.621189 1.028419 4.4263034 128.0 +27.600327 0.85809028 4.4220657 128.0 +27.596188 0.68849987 4.4206533 128.0 +27.591005 0.5189926 4.419241 128.0 +27.578857 0.34949967 4.4168863 128.0 +27.56567 0.18017535 4.4145322 128.0 +27.569218 0.011033426 4.4150028 128.0 +27.558891 -0.15807182 4.4134336 128.0 +27.547527 -0.32704991 4.4118638 128.0 +27.533154 -0.495859 4.4099808 128.0 +27.535515 -0.66493285 4.4109221 128.0 +27.522034 -0.83360612 4.4095097 128.0 +27.512453 -1.0023187 4.4088821 128.0 +27.520584 -1.171743 4.4112363 128.0 +27.509918 -1.3404399 4.4107652 128.0 +27.4923 -1.5087254 4.4093528 128.0 +27.485483 -1.6775671 4.4098234 128.0 +27.477629 -1.8463819 4.4102945 128.0 +27.474646 -2.0155969 4.4117069 128.0 +27.491297 -2.1864889 4.4164157 128.0 +27.468506 -2.354372 4.4150028 128.0 +27.459444 -2.5234137 4.4159446 128.0 +27.432632 -2.6907938 4.4142184 128.0 +17.863907 -1.8630953 2.888021 128.0 +27.423069 -3.0300515 4.4182992 128.0 +27.398075 -3.1975722 4.4173574 128.0 +19.301832 -2.3729291 3.124233 128.0 +27.367546 -3.5349395 4.4190836 128.0 +18.847492 -2.552238 3.056273 128.0 +27.381756 -3.8789644 4.428658 128.0 +27.360371 -4.0473361 4.4291286 128.0 +27.334045 -4.2149897 4.4289718 128.0 +26.264278 -4.2151895 4.2610335 128.0 +25.288122 -4.2178612 4.1080055 128.0 +18.257132 -3.1605179 2.9782681 128.0 +18.996593 -3.4086943 3.1008472 128.0 +19.035522 -3.5363741 3.1105783 128.0 +18.237568 -3.5040483 2.9850171 128.0 +18.208942 -3.6145401 2.9839184 128.0 +19.427738 -3.980505 3.1852872 128.0 +20.24651 -4.2778544 3.3223059 128.0 +20.087673 -4.3732243 3.3008037 128.0 +18.341223 -4.1110783 3.020802 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.003475 -5.0022054 3.3105347 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.6965175 -2.126888 1.3026528 128.0 +7.9503589 -2.2496195 1.3467562 128.0 +7.9354572 -2.298085 1.3465993 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9218669 -2.5064366 1.354133 128.0 +7.9871588 -2.5811105 1.3676308 128.0 +7.9111462 -2.6102684 1.3575859 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.605408 -7.3635182 3.5111189 128.0 +20.557055 -7.4887981 3.510648 128.0 +19.798727 -7.3504748 3.3899522 128.0 +19.732008 -7.4637833 3.3863423 128.0 +19.609348 -7.5552464 3.3733153 128.0 +0 -0 0 128.0 +19.426193 -7.7597799 3.3580909 128.0 +19.256535 -7.8293605 3.3372164 128.0 +20.264906 -8.3845863 3.5189664 128.0 +20.234924 -8.5179672 3.5227332 128.0 +18.918505 -8.1008501 3.3042567 128.0 +19.040483 -8.2916956 3.3340774 128.0 +20.085545 -8.8937807 3.5246167 128.0 +19.311937 -8.6933651 3.3993692 128.0 +19.321995 -8.8408709 3.4105129 128.0 +3.9260204 -1.8259312 0.721775 128.0 +3.9192076 -1.8520958 0.72255975 128.0 +3.9184539 -1.881237 0.7244432 128.0 +3.9290299 -1.9160651 0.72836697 128.0 +3.9552562 -1.958982 0.73511589 128.0 +4.098453 -2.0613005 0.76273936 128.0 +3.960825 -2.0226402 0.74045223 128.0 +3.9053752 -2.0246363 0.73276162 128.0 +4.0738015 -2.1437478 0.76525062 128.0 +4.0143981 -2.1440487 0.7569322 128.0 +4.0541339 -2.1973424 0.7665062 128.0 +0 -0 0 128.0 +3.7543223 -2.0948842 0.71690953 128.0 +3.9562738 -2.2394891 0.75614744 128.0 +3.9056284 -2.242579 0.74939853 128.0 +5.2641764 -3.0655873 1.0017767 128.0 +3.7774665 -2.231082 0.73087823 128.0 +3.9475718 -2.3643196 0.76493669 128.0 +3.9431205 -2.3946478 0.76682013 128.0 +3.9418092 -2.4270811 0.76933134 128.0 +3.8581409 -2.408345 0.75646132 128.0 +3.5703764 -2.2593098 0.70513815 128.0 +3.5190356 -2.2571838 0.69807535 128.0 +3.5423822 -2.3029537 0.70513815 128.0 +3.5158138 -2.3164966 0.70278388 128.0 +3.4358225 -2.294158 0.69022775 128.0 +3.4028668 -2.302469 0.68661785 128.0 +3.4579163 -2.3707678 0.69995874 128.0 +3.4627721 -2.4054615 0.70372558 128.0 +3.0432959 -2.1419265 0.62509286 128.0 +3.2745683 -2.3348372 0.67280614 128.0 +3.2457685 -2.3444779 0.669981 128.0 +3.2560318 -2.3824258 0.67484647 128.0 +3.2159603 -2.383544 0.66982406 128.0 +3.3837357 -2.5401793 0.70607984 128.0 +3.3900998 -2.5776286 0.71047449 128.0 +3.3679597 -2.5935614 0.70921892 128.0 +3.2982433 -2.5722754 0.69838923 128.0 +3.0777752 -2.4308832 0.65695399 128.0 +2.9316778 -2.344867 0.63027221 128.0 +2.8581359 -2.3149545 0.61818695 128.0 +2.8293676 -2.32055 0.61520487 128.0 +2.9472866 -2.4476416 0.64251447 128.0 +2.9412842 -2.4733062 0.64439785 128.0 +3.4284112 -2.9189374 0.74924153 128.0 +4.1607723 -3.5866208 0.90666401 128.0 +3.794903 -3.3120856 0.83415234 128.0 +3.3185933 -2.9325063 0.73747015 128.0 +2.5107055 -2.24632 0.5690611 128.0 +2.4829662 -2.2490876 0.56607902 128.0 +3.51156 -3.2200139 0.79083371 128.0 +4.0954294 -3.801836 0.92173135 128.0 +3.9899769 -3.7497959 0.90383887 128.0 +2.4441962 -2.3256819 0.56984586 128.0 +3.3631885 -3.2394547 0.77576637 128.0 +3.3517339 -3.2683032 0.77764976 128.0 +3.4792264 -3.4344957 0.81060964 128.0 +3.6732662 -3.6707797 0.85895073 128.0 +2.4800227 -2.5091257 0.59433031 128.0 +3.1490738 -3.2252173 0.75002629 128.0 +2.5539517 -2.6481221 0.61834389 128.0 +3.7667043 -3.9535825 0.90148461 128.0 +3.1426489 -3.3394485 0.76242548 128.0 +2.7542608 -2.963026 0.67657298 128.0 +3.7099938 -4.0404305 0.90540838 128.0 +2.6533291 -2.925647 0.66134864 128.0 +3.3807001 -3.7737803 0.83886093 128.0 +3.3535538 -3.7900152 0.83791918 128.0 +3.3334854 -3.8142388 0.83870393 128.0 +2.5710502 -2.9786685 0.65899438 128.0 +2.5347829 -2.973346 0.65459973 128.0 +1.7530928 -2.0823388 0.46625781 128.0 +1.7762793 -2.136337 0.47520405 128.0 +1.7512275 -2.1326954 0.47222197 128.0 +1.6671832 -2.0559626 0.45432949 128.0 +1.6483623 -2.0584455 0.45275998 128.0 +1.6344755 -2.0669715 0.45244607 128.0 +1.6181145 -2.0722916 0.45150438 128.0 +1.6192409 -2.1001682 0.45511425 128.0 +1.635044 -2.147779 0.46264794 128.0 +1.6396396 -2.1814525 0.46735647 128.0 +1.6209258 -2.184335 0.46594393 128.0 +1.6308433 -2.2261038 0.47222197 128.0 +1.6553588 -2.2888801 0.48258078 128.0 +1.6694068 -2.3383758 0.49027142 128.0 +1.6624244 -2.3590689 0.49231178 128.0 +1.6930416 -2.4340804 0.50486791 128.0 +1.7954767 -2.6153917 0.53782773 128.0 +1.4458559 -2.1341925 0.44334289 128.0 +1.3717917 -2.0518999 0.42592126 128.0 +1.3542799 -2.0528598 0.42450869 128.0 +1.319563 -2.0271988 0.41807368 128.0 +1.3065656 -2.0344265 0.41791672 128.0 +1.2898284 -2.0357318 0.41666111 128.0 +2.094105 -3.3499391 0.66150558 128.0 +2.370575 -3.8443828 0.75143886 128.0 +1.8475308 -3.037883 0.59872496 128.0 +2.3227117 -3.8723369 0.75128192 128.0 +2.3416524 -3.958765 0.76462281 128.0 +2.2839751 -3.9159038 0.75410706 128.0 +2.2589197 -3.9281321 0.75379312 128.0 +1.1216472 -1.9788715 0.39515874 128.0 +1.1104476 -1.9874407 0.39547265 128.0 +2.2086315 -4.0097017 0.76116985 128.0 +2.1797457 -4.0153666 0.75975728 128.0 +1.0648248 -1.9909985 0.39249057 128.0 +1.0470616 -1.9870111 0.39060715 128.0 +1.0343945 -1.9925219 0.39045021 128.0 +1.0293461 -2.0128989 0.39296141 128.0 +1.6862491 -3.3474236 0.62933052 128.0 +1.665678 -3.357707 0.62933052 128.0 +1.6424428 -3.3625402 0.62838882 128.0 +1.0104599 -2.101634 0.40426195 128.0 +1.0178316 -2.1506398 0.41179562 128.0 +1.0158792 -2.1810148 0.4160333 128.0 +1.0065939 -2.1961844 0.41760284 128.0 +1.0036588 -2.2257254 0.42168358 128.0 +1.0320454 -2.3266268 0.43816349 128.0 +1.01854 -2.3347259 0.4384774 128.0 +0.97420496 -2.2710493 0.42639211 128.0 +1.3284206 -3.149611 0.57690871 128.0 +0.94928885 -2.2901316 0.42764774 128.0 +0.93447357 -2.2940838 0.42733383 128.0 +0.90936691 -2.2722692 0.42262527 128.0 +0.88926256 -2.2621818 0.4199571 128.0 +0.9354983 -2.4232924 0.44648191 128.0 +0.92166209 -2.4317572 0.44695279 128.0 +1.065531 -2.8640585 0.51930743 128.0 +1.0455658 -2.864049 0.5182088 128.0 +0 -0 0 128.0 +1.1776365 -3.3527949 0.59841108 128.0 +1.1470704 -3.3310113 0.59354556 128.0 +0.91841215 -2.7213535 0.49011445 128.0 +0.90790057 -2.7456903 0.4932535 128.0 +0.97597045 -3.0133345 0.53704298 128.0 +0.93028516 -2.9336019 0.52276039 128.0 +0.78047526 -2.514823 0.45213217 128.0 +0.96254003 -3.1696978 0.56011486 128.0 +1.1498102 -3.8713725 0.67547429 128.0 +0.94836199 -3.2666283 0.57424051 128.0 +0.87976593 -3.1013703 0.54598922 128.0 +0.87179941 -3.1466825 0.55258119 128.0 +0.85608673 -3.165319 0.55477852 128.0 +0.82202661 -3.1151288 0.54567534 128.0 +0.78861517 -3.064642 0.53657216 128.0 +0.54337144 -2.1670723 0.38872373 128.0 +0.51435387 -2.1060882 0.37820798 128.0 +0.50256443 -2.1140084 0.37899274 128.0 +0.50094104 -2.1661229 0.38699725 128.0 +0.48568946 -2.1604843 0.38558471 128.0 +0.46841732 -2.145092 0.38260263 128.0 +0.45955032 -2.1682138 0.38589859 128.0 +0.7290355 -3.5455928 0.60892683 128.0 +0.72966301 -3.6623511 0.62713319 128.0 +0.71578538 -3.7113662 0.63435298 128.0 +0.69789106 -3.7419012 0.63859069 128.0 +0.68192661 -3.7849905 0.64486873 128.0 +0.6602127 -3.7978604 0.6462813 128.0 +0.65893888 -3.9333322 0.66746974 128.0 +0.63778061 -3.9558263 0.67045182 128.0 +0.61243695 -3.9528334 0.66935319 128.0 +0.4210569 -2.8331316 0.48885885 128.0 +0.38025939 -2.6714032 0.46249098 128.0 +0.42625383 -3.1316552 0.53594434 128.0 +0.37329277 -2.8746798 0.49435216 128.0 +0.48628697 -3.9325149 0.66338903 128.0 +0.45257983 -3.8540137 0.65036201 128.0 +0 -0 0 128.0 +0.27000886 -2.5726013 0.44475546 128.0 +0.22865242 -2.3157303 0.40347719 128.0 +0.2126155 -2.2974219 0.40033814 128.0 +0.21026437 -2.4344656 0.42199746 128.0 +0.18962739 -2.3648307 0.41069695 128.0 +0.17365228 -2.3462517 0.40755793 128.0 +0.22861473 -3.3670895 0.57000285 128.0 +0.20630418 -3.3418143 0.56576514 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.12249351 -2.8319731 0.48415029 128.0 +0.10879055 -2.9313636 0.49984547 128.0 +0.088161476 -2.8470829 0.48634762 128.0 +0.07096155 -2.8584306 0.48807409 128.0 +0.073440395 -3.9222758 0.65711099 128.0 +0 -0 0 128.0 +0.015521063 -2.4296529 0.41980016 128.0 +0.00058854802 -2.3714337 0.41054001 128.0 +-0.014024462 -2.382256 0.41226646 128.0 +-0.028606316 -2.3791625 0.41179562 128.0 +-0.043239582 -2.3809171 0.41210952 128.0 +-0.057919286 -2.383569 0.41258037 128.0 +-0.072573386 -2.384156 0.41273734 128.0 +-0.087416574 -2.3895874 0.41367903 128.0 +-0.17880584 -4.1917305 0.70042962 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.16004911 -2.6164074 0.45024875 128.0 +-0.18166083 -2.6981485 0.4634327 128.0 +-0.19936885 -2.7127426 0.46594393 128.0 +-0.2158536 -2.7094991 0.46563002 128.0 +-0.23416123 -2.7278037 0.46876904 128.0 +-0.25134614 -2.7312329 0.4695538 128.0 +-0.26607564 -2.7089984 0.46625781 128.0 +-0.28177091 -2.6984744 0.46484527 128.0 +-0.29647949 -2.6800067 0.46217707 128.0 +-0.31188789 -2.6693087 0.46076453 128.0 +-0.3310318 -2.6898899 0.46437439 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.4558531 -3.3991375 0.62132597 128.0 +-0 -0 0 128.0 +-1.5498358 -3.4993148 0.64188665 128.0 +-0 -0 0 128.0 +-1.6349833 -3.5725336 0.65805268 128.0 +-1.6527092 -3.553479 0.65648317 128.0 +-1.6765913 -3.5477362 0.65726793 128.0 +-1.7162772 -3.5747769 0.6638599 128.0 +-0 -0 0 128.0 +-1.6451942 -3.3215649 0.62273854 128.0 +-1.6535648 -3.2875845 0.61850089 128.0 +-1.6755023 -3.280895 0.6191287 128.0 +-1.6896938 -3.2591538 0.61708832 128.0 +-1.7271336 -3.2819374 0.62305248 128.0 +-0 -0 0 128.0 +-4.6925631 -8.6587982 1.5988206 128.0 +-1.9019305 -3.4581542 0.66087782 128.0 +-1.9043486 -3.4127827 0.65475667 128.0 +-1.9223346 -3.3958766 0.65381497 128.0 +-1.9726369 -3.4354076 0.66323209 128.0 +-2.021508 -3.4710336 0.67202139 128.0 +-4.9493356 -8.3807135 1.5804572 128.0 +-4.6470218 -7.759613 1.4710619 128.0 +-4.9344292 -8.126029 1.5445153 128.0 +-4.8526907 -7.8819804 1.5046496 128.0 +-0 -0 0 128.0 +-5.1217122 -8.0947523 1.5559727 128.0 +-5.2992358 -8.2626963 1.5936412 128.0 +-5.3848195 -8.2838488 1.603843 128.0 +-5.4018626 -8.1995182 1.594112 128.0 +-5.522809 -8.2721786 1.6143588 128.0 +-5.4467392 -8.0508108 1.5784168 128.0 +-0 -0 0 128.0 +-5.5789275 -8.0320339 1.5878339 128.0 +-5.6104875 -7.9726133 1.5829685 128.0 +-5.6822324 -7.9702053 1.5892465 128.0 +-5.3447881 -7.4003539 1.4844028 128.0 +-5.3609395 -7.3275652 1.4765552 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.5512023 -7.209445 1.4796942 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.6996593 -9.1290741 2.1505053 128.0 +-9.7294531 -9.0451775 2.144855 128.0 +-9.776041 -8.9772921 2.1429718 128.0 +-9.8865347 -8.9675674 2.1549001 128.0 +-9.9501991 -8.9146442 2.1567836 128.0 +-9.8597527 -8.7251387 2.1260209 128.0 +-9.8350277 -8.5962305 2.1095409 128.0 +-9.5160522 -8.2149639 2.0315361 128.0 +-9.552001 -8.1442451 2.028554 128.0 +-9.5587339 -8.0492201 2.0196078 128.0 +-9.6535015 -8.0283089 2.0290248 128.0 +-9.8430042 -8.0842648 2.057904 128.0 +-10.868816 -8.8157177 2.2577033 128.0 +-10.828666 -8.6735344 2.2385552 128.0 +-10.963787 -8.6718731 2.255192 128.0 +-10.980988 -8.5764732 2.2479722 128.0 +-10.994304 -8.478776 2.2401247 128.0 +-10.36254 -7.8906078 2.1035769 128.0 +-10.837027 -8.1473656 2.1883307 128.0 +-0 -0 0 128.0 +-10.274212 -7.5286541 2.057904 128.0 +-10.306611 -7.4556298 2.0552359 128.0 +-10.441376 -7.4559579 2.0726573 128.0 +-10.851789 -7.6489415 2.1435995 128.0 +-10.797182 -7.5117068 2.1239805 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.609509 -9.1502972 3.0473268 128.0 +-16.671415 -9.0515089 3.0484254 128.0 +-0 -0 0 128.0 +-16.886948 -8.9019718 3.0674167 128.0 +-16.812412 -8.7312746 3.0443447 128.0 +-16.353081 -8.3657131 2.952842 128.0 +-16.381174 -8.2536602 2.9487612 128.0 +-6.7991123 -3.373328 1.2398722 128.0 +-6.8285561 -3.3358815 1.2414417 128.0 +-7.0144362 -3.3735452 1.2706348 128.0 +-7.1555066 -3.3874962 1.2918233 128.0 +-7.1949558 -3.3522873 1.2951192 128.0 +-16.730425 -7.6710553 2.9586492 128.0 +-16.690756 -7.5292673 2.9435818 128.0 +-18.711777 -8.3032103 3.2869918 128.0 +-16.796377 -7.3301997 2.9460931 128.0 +-7.5476103 -3.2386723 1.3389087 128.0 +-7.2033668 -3.0387363 1.2761281 128.0 +-7.2127538 -2.9906969 1.2745585 128.0 +-7.8794036 -3.210638 1.3858372 128.0 +-7.1269708 -2.8531363 1.2536839 128.0 +-7.1572104 -2.8144128 1.2558813 128.0 +-7.2102742 -2.7843208 1.2620025 128.0 +-7.9345841 -3.0082474 1.3822273 128.0 +-7.9621487 -2.9629498 1.3837968 128.0 +-8.021925 -2.9292853 1.3908597 128.0 +-8.1327209 -2.9133184 1.4065548 128.0 +-0 -0 0 128.0 +-23.050972 -7.9403257 3.9082062 128.0 +-22.62579 -7.6388774 3.8287888 128.0 +-22.215609 -7.3488455 3.7523534 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-13.145429 -4.0814295 2.2211337 128.0 +-0 -0 0 128.0 +-13.474749 -4.0030651 2.2675912 128.0 +-13.517077 -3.925544 2.2705734 128.0 +-13.000311 -3.6891077 2.181268 128.0 +-13.510936 -3.7446003 2.2617841 128.0 +-12.339144 -3.338408 2.0651238 128.0 +-12.401411 -3.273726 2.0720296 128.0 +-12.729231 -3.2768598 2.1225681 128.0 +-12.646602 -3.1729739 2.1057742 128.0 +-13.746078 -3.3593445 2.2825017 128.0 +-13.406137 -3.1892147 2.2236447 128.0 +-12.761556 -2.953238 2.1153483 128.0 +-17.210663 -3.8718739 2.8371687 128.0 +-13.6044 -2.972909 2.2467167 128.0 +-13.810776 -2.9293423 2.2773223 128.0 +-12.666706 -2.605531 2.0888233 128.0 +-0 -0 0 128.0 +-22.573317 -4.3555999 3.6872184 128.0 +-12.697957 -2.3692193 2.0864692 128.0 +-12.782235 -2.3038769 2.0977697 128.0 +-0 -0 0 128.0 +-13.523499 -2.2665248 2.2128153 128.0 +-13.550801 -2.1857057 2.2150126 128.0 +-13.585428 -2.1058471 2.2184653 128.0 +-13.585395 -2.0205598 2.2164252 128.0 +-17.41264 -2.4807909 2.8288503 128.0 +-19.601908 -2.6701357 3.1775966 128.0 +-20.211418 -2.6269612 3.2727094 128.0 +-17.847404 -2.2083809 2.8916309 128.0 +-17.73605 -2.0841887 2.8716979 128.0 +-22.341146 -2.4865646 3.6060746 128.0 +-0 -0 0 128.0 +-17.608261 -1.7412361 2.845644 128.0 +-20.258028 -1.8778814 3.2669022 128.0 +-0 -0 0 128.0 +-18.993877 -1.5258343 3.0619233 128.0 +-23.295078 -1.7276616 3.7459183 128.0 +-24.577301 -1.6712115 3.9485428 128.0 +-24.611736 -1.5219008 3.9524667 128.0 +-18.624269 -1.0368893 2.998044 128.0 +-18.376778 -0.91003424 2.9577074 128.0 +-0 -0 0 128.0 +-18.686584 -0.69562948 3.0054207 128.0 +-23.907478 -0.7432273 3.8349099 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.825523 13.216201 5.4878278 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.529678 14.579529 5.5218735 128.0 +-34.483212 14.809868 5.5288272 128.0 +-34.402569 15.025928 5.5305657 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-21.636742 13.352291 3.7565801 128.0 +-21.686935 13.567721 3.7794702 128.0 +-20.729282 13.146201 3.6279316 128.0 +-21.266623 13.670705 3.7355733 128.0 +-21.221302 13.826324 3.7423823 128.0 +-22.148329 14.624746 3.9199982 128.0 +-19.53371 13.070947 3.475234 128.0 +-19.529299 13.242204 3.4887075 128.0 +-21.960194 15.088223 3.9350653 128.0 +-21.893997 15.241342 3.939846 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-19.673346 14.240005 3.5898297 128.0 +-19.708479 14.450556 3.6121404 128.0 +-0 0 0 128.0 +-19.524921 14.687753 3.6112711 128.0 +-20.175007 15.371587 3.7475977 128.0 +-19.242163 14.848266 3.5925822 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-37.971275 30.818068 7.1943021 128.0 +-0 0 0 128.0 +-36.245609 30.162695 6.9381642 128.0 +-15.931821 13.423514 3.0842185 128.0 +-15.834854 13.508815 3.0814657 128.0 +-15.771884 13.623186 3.0853775 128.0 +-15.591922 13.635673 3.0666885 128.0 +-15.814636 14.002654 3.1266665 128.0 +-15.618649 14.001014 3.1050804 128.0 +-15.196157 13.791348 3.038583 128.0 +-15.093035 13.867594 3.0349612 128.0 +-14.995345 13.948484 3.0324984 128.0 +-14.878504 14.011062 3.0262687 128.0 +-14.798698 14.108236 3.0275726 128.0 +-15.636627 15.091398 3.2157643 128.0 +-0 0 0 128.0 +-15.507233 15.338511 3.227499 128.0 +-0 0 0 128.0 +-14.012245 14.204035 2.9552803 128.0 +-13.897898 14.262107 2.9496303 128.0 +-13.847863 14.386324 2.9575982 128.0 +-14.409719 15.155132 3.0958083 128.0 +-0 0 0 128.0 +-14.038956 15.132784 3.0562577 128.0 +-13.722581 14.974979 3.0078697 128.0 +-14.669514 16.207001 3.2345979 128.0 +-0 0 0 128.0 +-14.00324 15.857704 3.1314473 128.0 +-14.617786 16.75988 3.2900848 128.0 +-13.08371 15.187954 2.9690433 128.0 +-12.990913 15.268702 2.9691882 128.0 +-13.663321 16.26022 3.1436169 128.0 +-13.584775 16.369638 3.1485426 128.0 +-12.576591 15.345286 2.9389095 128.0 +-12.686981 15.675213 2.9865732 128.0 +-12.669628 15.851701 3.0051169 128.0 +-12.627291 15.999046 3.0181558 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-14.729075 19.385767 3.5986671 128.0 +-0 0 0 128.0 +-24.875486 33.589256 6.1538148 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.8526936 13.828008 2.519933 128.0 +-9.8268528 13.972377 2.5349998 128.0 +-9.7082119 13.985266 2.5265973 128.0 +-9.6484985 14.082936 2.5334063 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.0225821 13.703602 2.4361956 128.0 +-0 0 0 128.0 +-9.560586 14.916265 2.6280093 128.0 +-8.7862635 13.894955 2.4409766 128.0 +-9.3354559 14.96614 2.6165643 128.0 +-8.3594942 13.586256 2.3695536 128.0 +-8.3196011 13.709195 2.3818679 128.0 +-8.2332945 13.756589 2.3812883 128.0 +-9.4460802 16.005388 2.755064 128.0 +-9.3700876 16.101532 2.7615833 128.0 +-8.2790213 14.429341 2.4696617 128.0 +-8.2424459 14.572023 2.4851632 128.0 +-9.0730867 16.273005 2.761873 128.0 +-8.1001692 14.739713 2.4964633 128.0 +-0 0 0 128.0 +-7.9596701 14.914824 2.5092123 128.0 +-7.9214144 15.064976 2.5260177 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-8.2922421 16.500814 2.737824 128.0 +-7.070148 14.286421 2.367815 128.0 +-8.2446995 16.920664 2.7898338 128.0 +-7.2344661 15.081365 2.48299 128.0 +-8.1010637 17.157463 2.8119996 128.0 +-0 0 0 128.0 +-9.0475521 19.787825 3.2196758 128.0 +-7.0159926 15.596367 2.5378973 128.0 +-6.911356 15.619216 2.5347102 128.0 +-6.8426261 15.723932 2.5447066 128.0 +-6.6603975 15.565489 2.5128341 128.0 +-6.5382962 15.54313 2.5028379 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-13.117701 34.076141 5.3801861 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.8800879 13.935933 2.1958492 128.0 +-0 0 0 128.0 +-4.5888319 13.6384 2.1407969 128.0 +-4.4920545 13.626831 2.1347122 128.0 +-4.405622 13.645663 2.1334083 128.0 +-4.572547 14.465891 2.2552476 128.0 +-4.602685 14.878403 2.3142116 128.0 +-4.4084377 14.566373 2.2622015 128.0 +-4.2330756 14.302818 2.2178702 128.0 +-4.0341773 13.944522 2.1593409 128.0 +-3.9525752 13.983295 2.161514 128.0 +-3.8385372 13.905228 2.1460125 128.0 +-3.7606075 13.956225 2.1502137 128.0 +-3.9236245 14.925467 2.2934945 128.0 +-3.8511274 15.024023 2.3047948 128.0 +-4.9167442 19.684027 3.0045376 128.0 +-0 0 0 128.0 +-3.2928972 13.905183 2.1261647 128.0 +-3.473933 15.08219 2.3000138 128.0 +-3.2462659 14.499743 2.2094674 128.0 +-3.1353786 14.418835 2.1944005 128.0 +-2.923697 13.854012 2.1070414 128.0 +-2.9433298 14.383522 2.1835349 128.0 +-6.1977735 31.269936 4.7014503 128.0 +-3.6844945 19.20437 2.8970408 128.0 +-2.6347797 14.201775 2.1487651 128.0 +-5.6204486 31.374823 4.7008705 128.0 +-2.5785599 14.917491 2.2504668 128.0 +-5.2233105 31.371159 4.6904397 128.0 +-2.4220631 15.115078 2.2752404 128.0 +-2.2189705 14.412825 2.1690476 128.0 +-2.2346618 15.131916 2.2735019 128.0 +-2.0712912 14.646668 2.1997609 128.0 +-4.2511306 31.46171 4.6823268 128.0 +-4.1004877 31.816931 4.7310047 128.0 +-3.8469059 31.366158 4.6608853 128.0 +-3.6660416 31.489418 4.6756625 128.0 +-0 0 0 128.0 +-3.3180168 31.904043 4.7304249 128.0 +-3.1080425 31.779041 4.7091284 128.0 +-2.9295037 31.977829 4.7356405 128.0 +-2.9004226 33.953125 5.0233607 128.0 +-2.6931293 33.984093 5.0253892 128.0 +-2.4655275 33.739456 4.9871421 128.0 +-2.1272087 31.791306 4.699132 128.0 +-1.9373176 31.889685 4.7117362 128.0 +-1.7256548 31.608528 4.6688533 128.0 +-1.5469843 31.934776 4.7152133 128.0 +-1.3537642 32.008911 4.7247748 128.0 +-1.1587282 32.05518 4.7304249 128.0 +-1.0688391 35.626064 5.252552 128.0 +-0 0 0 128.0 +-0.67108774 37.870327 5.5796781 128.0 +-0.43772417 37.788643 5.5672188 128.0 +-0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.5250423 20.489378 3.0422049 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.8998184 20.435175 3.0388727 128.0 +1.9855076 20.02338 2.9800539 128.0 +2.1165261 20.088556 2.9914989 128.0 +2.2071464 19.783138 2.9484713 128.0 +2.3462093 19.919569 2.9706371 128.0 +4.0382419 32.557838 4.8374872 128.0 +4.237042 32.525578 4.836473 128.0 +1.9595994 14.359505 2.155864 128.0 +2.0320041 14.237505 2.1396379 128.0 +2.1464605 14.406796 2.1665847 128.0 +5.2643995 33.895004 5.0562472 128.0 +2.5123973 15.55052 2.3402889 128.0 +2.5259922 15.047894 2.2679965 128.0 +5.5864115 32.065086 4.79953 128.0 +5.7770758 31.997099 4.7946043 128.0 +2.6634626 14.254808 2.1571679 128.0 +2.8858876 14.936684 2.2613325 128.0 +2.8029315 14.044456 2.1308007 128.0 +3.2462828 15.760698 2.3899808 128.0 +3.3509469 15.778229 2.3956308 128.0 +3.1466501 14.381944 2.1894748 128.0 +0 0 0 128.0 +3.6548791 15.774602 2.404758 128.0 +3.3429649 14.036685 2.1465919 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5081463 13.613476 2.0922642 128.0 +3.5455894 13.417594 2.065897 128.0 +4.1605773 15.36198 2.3641932 128.0 +4.1436324 14.935726 2.3033459 128.0 +4.205451 14.805325 2.2874098 128.0 +4.4652901 15.360703 2.3760729 128.0 +4.53689 15.257144 2.3644829 128.0 +4.5826287 15.071877 2.3404338 128.0 +4.4993854 14.478453 2.253799 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.769031 18.401329 2.9584675 128.0 +7.8888221 18.369677 2.9610753 128.0 +7.971683 18.252922 2.9502096 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +8.5719004 18.092794 2.9652767 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +22.881422 13.884965 3.9527397 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +24.054657 13.800767 4.0944271 128.0 +0 0 0 128.0 +24.267141 13.529593 4.1019602 128.0 +24.360107 13.386156 4.1036987 128.0 +24.405241 13.216645 4.0976143 128.0 +28.195927 15.046278 4.7133298 128.0 +28.203642 14.828787 4.6994219 128.0 +28.236111 14.62542 4.6898603 128.0 +28.183416 14.379498 4.6665354 128.0 +28.199503 14.170314 4.6548004 128.0 +28.200785 13.954894 4.6408925 128.0 +28.19426 13.736959 4.6259708 128.0 +28.15044 13.502517 4.6052537 128.0 +28.150442 13.290674 4.5919251 128.0 +28.152498 13.081009 4.5791764 128.0 +28.146744 12.86894 4.565413 128.0 +28.106964 12.642825 4.5464349 128.0 +28.105288 12.435299 4.5338306 128.0 +28.095774 12.225507 4.5202127 128.0 +28.093845 12.020193 4.5080428 128.0 +28.09137 11.815748 4.4960184 128.0 +28.094759 11.614811 4.4851527 128.0 +28.075661 11.405714 4.4709554 128.0 +28.068842 11.202791 4.4589305 128.0 +28.054144 10.997854 4.4458919 128.0 +28.039837 10.794232 4.4331431 128.0 +28.0389 10.596797 4.4227118 128.0 +28.038454 10.400469 4.412571 128.0 +28.018991 10.198117 4.3996768 128.0 +28.014877 10.002384 4.3893909 128.0 +28.01689 9.8097029 4.3802638 128.0 +27.990454 9.6080589 4.3669353 128.0 +27.979483 9.4127884 4.3562145 128.0 +27.977509 9.2214212 4.3470879 128.0 +27.962 9.0264826 4.3360772 128.0 +27.961195 8.8371506 4.3275294 128.0 +27.942106 8.6429071 4.3163743 128.0 +27.945366 8.4563951 4.3088408 128.0 +27.94644 8.2698879 4.3011627 128.0 +27.927271 8.0781879 4.2905865 128.0 +27.908709 7.8875747 4.2803006 128.0 +27.902214 7.7011786 4.2720428 128.0 +27.899261 7.5164461 4.2645092 128.0 +27.897009 7.3325434 4.2572656 128.0 +27.899302 7.1504259 4.2508912 128.0 +27.854334 6.9570494 4.2375627 128.0 +27.843618 6.7731471 4.2295947 128.0 +27.861546 6.596704 4.2261176 128.0 +27.870644 6.41852 4.2214818 128.0 +27.891155 6.2432823 4.218729 128.0 +27.915403 6.0690856 4.2167006 128.0 +27.957926 5.898911 4.2175698 128.0 +27.993593 5.7272534 4.2175698 128.0 +28.033062 5.5563416 4.2182946 128.0 +28.120073 5.3944802 4.2262626 128.0 +28.128323 5.2173266 4.2226405 128.0 +28.137403 5.0406246 4.2193084 128.0 +28.208754 4.8749571 4.2253933 128.0 +28.248871 4.7035666 4.2269869 128.0 +28.278177 4.5303025 4.2271318 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.458664 4.023427 4.2421985 128.0 +28.498505 3.8508518 4.2445168 128.0 +28.542204 3.6785707 4.2475591 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +23.718376 -0.88952422 3.5091348 128.0 +31.534527 -1.3768581 4.6555252 128.0 +31.509672 -1.5695363 4.6532068 128.0 +25.026714 -1.4003624 3.7039907 128.0 +25.147018 -1.5619384 3.7229693 128.0 +0 -0 0 128.0 +19.299397 -1.4364026 2.8674865 128.0 +25.081461 -2.0219231 3.7181883 128.0 +25.061684 -2.1751826 3.7171743 128.0 +30.457579 -2.83216 4.5126791 128.0 +19.224857 -1.9062793 2.8625607 128.0 +18.008385 -1.8972375 2.6852345 128.0 +27.40601 -3.058063 4.0715365 128.0 +27.404417 -3.2282498 4.0741444 128.0 +27.405695 -3.3990197 4.0773315 128.0 +27.387266 -3.5674975 4.0777664 128.0 +27.375645 -3.7369478 4.07936 128.0 +27.366894 -3.9069495 4.081533 128.0 +27.36883 -4.0787349 4.0854445 128.0 +27.329599 -4.2444639 4.0834165 128.0 +17.726768 -2.864166 2.6630688 128.0 +0 -0 0 128.0 +18.523706 -3.2267153 2.7869363 128.0 +19.05662 -3.4401898 2.869225 128.0 +19.158674 -3.5801442 2.887624 128.0 +19.584192 -3.7841957 2.954411 128.0 +25.752081 -5.1404867 3.878854 128.0 +20.190418 -4.1590233 3.0522013 128.0 +18.452394 -3.9190838 2.7959185 128.0 +0 -0 0 128.0 +17.566038 -3.9566686 2.6703126 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.131296 -4.9257026 3.0684271 128.0 +30.965557 -7.7789545 4.708694 128.0 +20.159397 -5.195591 3.0820453 128.0 +20.235233 -5.3477626 3.0984161 128.0 +0 -0 0 128.0 +25.30224 -7.0204697 3.8785641 128.0 +7.9668097 -2.2624078 1.246488 128.0 +7.9242749 -2.3029606 1.2421417 128.0 +0 -0 0 128.0 +31.390017 -9.5455141 4.8377767 128.0 +30.667568 -9.5317583 4.7360749 128.0 +8.0464334 -2.5542421 1.2699577 128.0 +7.9920211 -2.5910497 1.2640178 128.0 +7.9318256 -2.6254196 1.2572087 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.602566 -7.2448449 3.2315555 128.0 +20.585665 -7.381144 3.2359018 128.0 +20.511179 -7.4967852 3.2314107 128.0 +24.173601 -9.0041399 3.8109078 128.0 +19.690536 -7.4719648 3.1175394 128.0 +19.707998 -7.61726 3.1275358 128.0 +19.533834 -7.6880288 3.1075432 128.0 +20.577408 -8.244998 3.2796538 128.0 +20.576818 -8.3916559 3.287622 128.0 +19.249193 -7.9882469 3.0853775 128.0 +20.217068 -8.5357609 3.2470572 128.0 +19.009708 -8.1637268 3.0630667 128.0 +19.22493 -8.3962603 3.105515 128.0 +19.411777 -8.6200914 3.1437616 128.0 +19.390985 -8.7536955 3.1489773 128.0 +19.391764 -8.8976851 3.1578145 128.0 +3.9865742 -1.8578598 0.67785639 128.0 +3.7444093 -1.7729745 0.64047879 128.0 +3.8324201 -1.8435539 0.65655982 128.0 +3.75437 -1.8344373 0.64569426 128.0 +3.7660847 -1.8688811 0.64946097 128.0 +3.7987206 -1.9142294 0.65670472 128.0 +3.7340598 -1.9104468 0.64801228 128.0 +3.6959288 -1.9196333 0.64366603 128.0 +3.5974426 -1.8965676 0.62932348 128.0 +3.6563926 -1.9564365 0.64105827 128.0 +3.6121514 -1.9613563 0.63569796 128.0 +3.8911874 -2.1439972 0.6843757 128.0 +3.562768 -1.9915274 0.63149661 128.0 +3.568553 -2.0236053 0.63453895 128.0 +3.67098 -2.1116045 0.65395212 128.0 +4.7380409 -2.7646248 0.83707321 128.0 +4.7337599 -2.8012061 0.83924633 128.0 +4.7266626 -2.8363106 0.84098482 128.0 +3.8623078 -2.349745 0.69582075 128.0 +3.8074014 -2.3484557 0.68886679 128.0 +3.6419368 -2.2773061 0.66278946 128.0 +3.525121 -2.2344251 0.64496988 128.0 +3.4763882 -2.2335398 0.6388852 128.0 +3.3250053 -2.1651604 0.61483604 128.0 +3.4082601 -2.2493153 0.63178635 128.0 +3.4437325 -2.3032036 0.64047879 128.0 +3.4991429 -2.3714943 0.65279311 128.0 +3.4820793 -2.3912389 0.65235847 128.0 +3.508755 -2.4413919 0.65974706 128.0 +3.5228167 -2.4834068 0.66496253 128.0 +3.5340786 -2.5239594 0.66974342 128.0 +3.6171086 -2.6169605 0.68756294 128.0 +3.6041746 -2.6414459 0.68814242 128.0 +3.6014025 -2.6735406 0.69060528 128.0 +3.5991623 -2.7062955 0.69321305 128.0 +2.9402895 -2.2389817 0.57499564 128.0 +3.2069225 -2.4733946 0.62686062 128.0 +4.0960112 -3.199816 0.79491478 128.0 +3.1328819 -2.478174 0.61874765 128.0 +3.0535367 -2.4459879 0.60672307 128.0 +3.9188781 -3.179265 0.77274901 128.0 +4.0154858 -3.2987452 0.79476994 128.0 +3.82481 -3.1815455 0.76231807 128.0 +3.9898355 -3.3605247 0.79766738 128.0 +3.6176252 -3.0850284 0.73001111 128.0 +3.4241679 -2.9564583 0.69625539 128.0 +3.810374 -3.3311248 0.77492213 128.0 +3.3261466 -2.9438107 0.6842308 128.0 +3.8951886 -3.4905777 0.79969567 128.0 +2.4296334 -2.2036939 0.51414841 128.0 +2.402952 -2.2065098 0.51154065 128.0 +2.3900924 -2.2218864 0.51168555 128.0 +3.5576911 -3.3490446 0.74927938 128.0 +3.4898112 -3.3257475 0.73971766 128.0 +4.3065476 -4.1552014 0.91008985 128.0 +7.9835644 -7.7995706 1.6680722 128.0 +3.4469965 -3.4082079 0.74362928 128.0 +2.4898667 -2.4917929 0.54964262 128.0 +2.5488777 -2.5823972 0.56514418 128.0 +2.532294 -2.5972795 0.56499928 128.0 +2.5286601 -2.6256006 0.56760705 128.0 +2.4143302 -2.5378048 0.54674512 128.0 +2.2652776 -2.4104815 0.51820487 128.0 +2.2437155 -2.4170816 0.51675612 128.0 +2.2047787 -2.4045403 0.51154065 128.0 +2.1674092 -2.3930805 0.50661492 128.0 +2.0643208 -2.3074863 0.48720178 128.0 +2.0756643 -2.3490357 0.49285188 128.0 +3.4522681 -3.9567995 0.80273801 128.0 +2.9862368 -3.4651227 0.70364398 128.0 +1.9057719 -2.2383783 0.46431166 128.0 +1.8449011 -2.1939707 0.45359096 128.0 +1.8219268 -2.1938279 0.45141783 128.0 +1.718749 -2.0955267 0.43070081 128.0 +1.7338687 -2.1406448 0.43722016 128.0 +1.7145241 -2.1435137 0.43577141 128.0 +1.6933712 -2.1438961 0.43388805 128.0 +1.6400447 -2.1027353 0.42432633 128.0 +1.6391793 -2.1284425 0.42722383 128.0 +1.6314756 -2.1455512 0.42852771 128.0 +1.5885944 -2.1159449 0.42128399 128.0 +1.6509532 -2.2274325 0.43982789 128.0 +2.3514285 -3.2143993 0.61700916 128.0 +2.3195012 -3.2119181 0.61396682 128.0 +1.8261119 -2.5612538 0.4944455 128.0 +1.9253304 -2.735903 0.52371013 128.0 +1.7702843 -2.5485177 0.48821589 128.0 +1.542686 -2.2499571 0.43330854 128.0 +1.7383226 -2.5692303 0.48807102 128.0 +1.4770703 -2.2119253 0.42331222 128.0 +1.5483431 -2.3498726 0.4459126 128.0 +2.3811636 -3.6637268 0.67365503 128.0 +2.3575706 -3.6766024 0.67336524 128.0 +1.299143 -2.0526454 0.38955653 128.0 +1.2765752 -2.0446267 0.3868039 128.0 +1.2655609 -2.0549493 0.38723853 128.0 +1.2529281 -2.062676 0.38723853 128.0 +1.628412 -2.7189958 0.49792248 128.0 +1.5890697 -2.6905899 0.49140313 128.0 +1.5745212 -2.7037103 0.49198264 128.0 +2.240304 -3.9028602 0.69277841 128.0 +2.1617615 -3.8200719 0.67655247 128.0 +1.1366514 -2.0365281 0.37535882 128.0 +2.1466444 -3.904413 0.68625909 128.0 +2.0891957 -3.8557355 0.675973 128.0 +2.0734165 -3.883322 0.67843586 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.0277236 -2.0427864 0.3686946 128.0 +1.0796732 -2.1794178 0.38999113 128.0 +1.0957479 -2.2464879 0.39984259 128.0 +1.0742413 -2.2371104 0.39723486 128.0 +1.0300815 -2.1792371 0.3868039 128.0 +1.0546287 -2.2671738 0.39998746 128.0 +1.0349383 -2.261004 0.39795923 128.0 +1.0190163 -2.2627997 0.39723486 128.0 +1.0135194 -2.2880116 0.4002772 128.0 +0.99867183 -2.2923729 0.39998746 128.0 +0.99470598 -2.3221095 0.4037542 128.0 +0.98158985 -2.3309054 0.40418881 128.0 +0.95933145 -2.317682 0.40114644 128.0 +1.2735229 -3.1320603 0.5289256 128.0 +1.2586818 -3.1508434 0.53066409 128.0 +1.3032383 -3.3215609 0.55630684 128.0 +0.88403666 -2.2934334 0.39375788 128.0 +0.86679995 -2.2904844 0.392454 128.0 +0.85754651 -2.3087478 0.39448223 128.0 +1.1025604 -3.0261867 0.50545597 128.0 +1.1179032 -3.1279435 0.52023315 128.0 +1.0326474 -2.9461014 0.49096853 128.0 +1.1093063 -3.2284617 0.53370643 128.0 +2.8818982 -8.5638781 1.3568822 128.0 +0.93457723 -2.8321075 0.47054124 128.0 +0.97219235 -3.0082211 0.4967635 128.0 +0.9605732 -3.0358295 0.50009561 128.0 +1.1950994 -3.8602746 0.62555677 128.0 +0.95906413 -3.1657701 0.51820487 128.0 +1.104687 -3.7294846 0.60339099 128.0 +1.0375241 -3.5831628 0.5800662 128.0 +0.90977824 -3.2152605 0.5231306 128.0 +0.87634557 -3.1711848 0.51559716 128.0 +0.87256968 -3.2347813 0.52443451 128.0 +0.81950861 -3.1137562 0.50531107 128.0 +0.81905401 -3.1915705 0.51632154 128.0 +0.52401066 -2.0935302 0.34986097 128.0 +0.51045364 -2.0938218 0.34942633 128.0 +0.49622902 -2.0911374 0.34855708 128.0 +0.49071521 -2.1259623 0.35333794 128.0 +0.47960618 -2.1376233 0.3546418 128.0 +0.47026393 -2.1579294 0.35724956 128.0 +0.73782969 -3.4919715 0.55645168 128.0 +1.7183243 -8.394702 1.2885015 128.0 +1.6598591 -8.3701468 1.2832861 128.0 +1.5691445 -8.1751366 1.2527176 128.0 +1.5698285 -8.4589586 1.2935721 128.0 +1.3582871 -7.5772653 1.1610122 128.0 +1.3885844 -8.0300589 1.2270749 128.0 +1.3448107 -8.0716124 1.2320006 128.0 +1.3212343 -8.2418938 1.2560496 128.0 +0.42914757 -2.7812047 0.4459126 128.0 +0.40051612 -2.705478 0.43432269 128.0 +0.41090953 -2.8989286 0.46257317 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.32424635 -2.6349425 0.42258784 128.0 +0.30281088 -2.5916729 0.41592363 128.0 +0.26165712 -2.3643267 0.38216794 128.0 +0.24714497 -2.3658876 0.38216794 128.0 +0.23310487 -2.3722835 0.38289228 128.0 +0.21448407 -2.3293293 0.37637296 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.1184784 -2.7759719 0.44069713 128.0 +0.097301111 -2.6619451 0.42389172 128.0 +0.081232645 -2.6713932 0.42519557 128.0 +0 -0 0 128.0 +0.045749377 -2.5198374 0.40288496 128.0 +0 -0 0 128.0 +0.022604642 -3.9568696 0.61324245 128.0 +-0.00055414706 -2.4005291 0.38535514 128.0 +-0.015222455 -2.3915758 0.38405129 128.0 +-0.029793767 -2.3835223 0.38289228 128.0 +-0.044929191 -2.4100049 0.3868039 128.0 +-0.059415925 -2.3978143 0.38506541 128.0 +-0.07422071 -2.4003716 0.38550004 128.0 +-0.09596543 -2.5867453 0.41288128 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.1640223 -2.6576769 0.42374685 128.0 +-0.18599163 -2.7395408 0.43591627 128.0 +-0.20404711 -2.7551222 0.43837914 128.0 +-0.22206211 -2.7676258 0.4404074 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0.27667972 -2.8004849 0.4459126 128.0 +-0.29167959 -2.7780707 0.44287026 128.0 +-0.30828097 -2.7722952 0.44229075 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.9773967 -8.9583473 1.4690149 128.0 +-4.0343251 -8.938283 1.4697393 128.0 +-1.6270218 -3.548259 0.60541922 128.0 +-1.6437446 -3.5274482 0.60368073 128.0 +-1.6640866 -3.5146136 0.60324609 128.0 +-1.7143747 -3.5640693 0.61295265 128.0 +-4.365716 -8.9312124 1.4894421 128.0 +-1.6809691 -3.3876784 0.58759969 128.0 +-1.6772212 -3.3287089 0.57963157 128.0 +-1.6809303 -3.285768 0.57427126 128.0 +-1.6978655 -3.2692466 0.57325715 128.0 +-1.7525201 -3.3244019 0.58412272 128.0 +-4.6116252 -8.6153097 1.4646686 128.0 +-1.8848282 -3.4713089 0.61222833 128.0 +-1.9037037 -3.4553461 0.61150396 128.0 +-1.9065144 -3.4107857 0.60599869 128.0 +-1.9254534 -3.395581 0.60541922 128.0 +-1.9546431 -3.3982811 0.60788208 128.0 +-1.9924184 -3.4152765 0.61280781 128.0 +-4.8895893 -8.2612019 1.4394605 128.0 +-4.9865322 -8.3082409 1.4526441 128.0 +-5.0775466 -8.3434114 1.4639443 128.0 +-5.1405978 -8.3314648 1.4672765 128.0 +-5.2005439 -8.3140259 1.4697393 128.0 +-5.3097548 -8.3738708 1.4856755 128.0 +-5.2818451 -8.2179537 1.464234 128.0 +-5.407794 -8.3014488 1.4845164 128.0 +-5.4046497 -8.1863708 1.4701738 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.5151935 -8.0284176 1.4600327 128.0 +-5.2375827 -7.5250707 1.3762953 128.0 +-5.2842274 -7.4936004 1.3764402 128.0 +-5.332984 -7.4650612 1.3771646 128.0 +-5.3937736 -7.4530368 1.3809314 128.0 +-5.4206796 -7.3942676 1.3762953 128.0 +-5.5568061 -7.4831915 1.3986059 128.0 +-5.5758491 -7.4133744 1.3920866 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.0835943 -8.4276543 1.848151 128.0 +-9.1519136 -8.3871336 1.851483 128.0 +-9.2134743 -8.3401155 1.8535112 128.0 +-9.2836542 -8.3005714 1.857278 128.0 +-10.039772 -8.8662548 1.9950534 128.0 +-9.3616991 -8.1658611 1.8527869 128.0 +-9.9169159 -8.5434952 1.9504322 128.0 +-10.682088 -9.088995 2.0874832 128.0 +-9.8285923 -8.2594872 1.9136341 128.0 +-9.7762918 -8.1137266 1.8940761 128.0 +-10.437372 -8.5546808 2.0098307 128.0 +-10.666569 -8.6336384 2.0431516 128.0 +-11.018473 -8.8070812 2.0992181 128.0 +-11.017158 -8.6957874 2.088932 128.0 +-10.813533 -8.4279327 2.0412683 128.0 +-10.825833 -8.331255 2.0340247 128.0 +-10.426874 -7.9228964 1.9513015 128.0 +-11.031737 -8.2761478 2.053148 128.0 +-10.359512 -7.6730442 1.9214573 128.0 +-10.364064 -7.5783858 1.913779 128.0 +-10.765799 -7.7711654 1.9779583 128.0 +-0 -0 0 128.0 +-10.759991 -7.5678926 1.9599938 128.0 +-10.870439 -7.5462976 1.971439 128.0 +-10.870008 -7.4475827 1.9631811 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.59803 -8.9890814 2.797657 128.0 +-0 -0 0 128.0 +-16.732489 -8.7980738 2.8018584 128.0 +-16.791428 -8.6979694 2.8027277 128.0 +-16.402031 -8.3690519 2.7300007 128.0 +-16.964094 -8.5250196 2.8137381 128.0 +-6.4007287 -3.1683533 1.0795928 128.0 +-6.8576856 -3.342227 1.1508709 128.0 +-6.8976912 -3.3094995 1.1540582 128.0 +-7.1156092 -3.3604643 1.1860754 128.0 +-6.4927082 -3.0178216 1.0822005 128.0 +-16.567181 -7.5751929 2.7011707 128.0 +-16.705393 -7.5147934 2.7159479 128.0 +-7.5452094 -3.3393478 1.2419969 128.0 +-7.540153 -3.2819352 1.2379404 128.0 +-7.1244035 -3.0491905 1.1685456 128.0 +-0 -0 0 128.0 +-7.3057613 -3.0212555 1.1914357 128.0 +-7.1655717 -2.9119513 1.1663725 128.0 +-7.1759524 -2.8649955 1.1652135 128.0 +-7.8262663 -3.0689814 1.2647421 128.0 +-7.8837328 -3.0358307 1.2708268 128.0 +-7.9744062 -3.0146813 1.282127 128.0 +-7.9296703 -2.9422975 1.2722756 128.0 +-7.959662 -2.8979855 1.274159 128.0 +-7.2728148 -2.5975966 1.164634 128.0 +-7.2727408 -2.5473645 1.1621711 128.0 +-22.319126 -7.6615591 3.4889972 128.0 +-7.2396817 -2.4364741 1.1523197 128.0 +-7.2507362 -2.3907676 1.1517402 128.0 +-7.2426705 -2.3389387 1.1482632 128.0 +-22.774033 -7.1979737 3.5310106 128.0 +-7.4267979 -2.298121 1.1721674 128.0 +-7.4436002 -2.2533672 1.1726021 128.0 +-13.294252 -3.9346662 2.0638688 128.0 +-13.267769 -3.8384504 2.0561905 128.0 +-13.03113 -3.6835155 2.0166397 128.0 +-13.213724 -3.6477082 2.0409787 128.0 +-13.500502 -3.6378491 2.0811088 128.0 +-13.530225 -3.5569549 2.0822678 128.0 +-12.781177 -3.2763965 1.9657888 128.0 +-12.711762 -3.1756165 1.9523156 128.0 +-0 -0 0 128.0 +-12.741109 -3.0173333 1.9510117 128.0 +-12.800844 -2.9486451 1.9572413 128.0 +-17.11932 -3.8325305 2.6025114 128.0 +-13.470333 -2.9292059 2.0522788 128.0 +-17.550383 -3.703445 2.6601713 128.0 +-13.354042 -2.7327511 2.0296783 128.0 +-12.741625 -2.5261288 1.9357998 128.0 +-13.611043 -2.6117232 2.0631444 128.0 +-22.541164 -4.181241 3.3906276 128.0 +-18.128094 -3.2479489 2.7304354 128.0 +-18.055056 -3.1206524 2.7166724 128.0 +-23.357059 -3.8892636 3.5008769 128.0 +-16.748619 -2.6836958 2.5174701 128.0 +-17.741732 -2.7312083 2.6621995 128.0 +-19.533781 -2.8843784 2.9250016 128.0 +-17.673002 -2.499022 2.6472776 128.0 +-18.772486 -2.5370307 2.8075085 128.0 +-17.825987 -2.2978899 2.6655316 128.0 +-17.659046 -2.1663125 2.6388748 128.0 +-17.783064 -2.0708432 2.6552455 128.0 +-22.515249 -2.4816675 3.3504975 128.0 +-18.830648 -1.9588691 2.8059149 128.0 +-20.077196 -1.9640173 2.9875872 128.0 +-18.922241 -1.7339566 2.816056 128.0 +-19.860222 -1.697035 2.9523828 128.0 +-19.84856 -1.5734241 2.9491956 128.0 +-24.646885 -1.8014007 3.6522706 128.0 +-18.528658 -1.240274 2.7528908 128.0 +-18.452957 -1.121524 2.7407215 128.0 +-23.645403 -1.2912074 3.5011666 128.0 +-18.72624 -0.90762269 2.7789683 128.0 +-23.687147 -1.0021144 3.505223 128.0 +-23.723503 -0.85786086 3.5097141 128.0 +-23.701618 -0.71147978 3.5058026 128.0 +-23.706526 -0.56605953 3.5059476 128.0 +-23.831236 -0.42274091 3.523767 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-22.477659 -0.56464684 3.0501451 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.971619 13.220984 5.0491567 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-33.996078 13.572515 4.9442601 128.0 +-33.944298 13.793916 4.9489136 128.0 +-0 0 0 128.0 +-34.721657 14.608775 5.0870466 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.17337 15.628646 5.0746827 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-21.535372 13.435551 3.4388859 128.0 +-20.793283 13.150518 3.3342557 128.0 +-20.75893 13.30781 3.3417008 128.0 +-21.91107 14.236826 3.539129 128.0 +-22.014517 14.496916 3.5698402 128.0 +-21.965548 14.658679 3.5763547 128.0 +-19.766808 13.367425 3.2349432 128.0 +-28.079525 19.240885 4.6000571 128.0 +-21.720503 15.080293 3.5810077 128.0 +-20.854191 14.669294 3.454175 128.0 +-20.765404 14.798127 3.4544411 128.0 +-19.796677 14.291767 3.3092613 128.0 +-0 0 0 128.0 +-21.142569 15.661596 3.5634587 128.0 +-19.661861 14.752478 3.3313308 128.0 +-19.478643 14.802681 3.3157759 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-36.459812 30.262308 6.3899407 128.0 +-0 0 0 128.0 +-36.364986 30.945103 6.4391317 128.0 +-0 0 0 128.0 +-15.848733 13.825802 2.8552427 128.0 +-15.625427 13.800753 2.8305144 128.0 +-15.657928 14.001411 2.8516531 128.0 +-15.588621 14.112522 2.8547111 128.0 +-15.316875 14.038482 2.821075 128.0 +-15.247886 14.148379 2.8242657 128.0 +-15.909189 14.944678 2.9620004 128.0 +-15.876085 15.09802 2.9729021 128.0 +-15.561802 14.982058 2.9316881 128.0 +-15.518556 15.124992 2.9408615 128.0 +-0 0 0 128.0 +-15.216076 15.198721 2.918925 128.0 +-14.212338 14.371452 2.7452946 128.0 +-14.01446 14.346371 2.7242887 128.0 +-14.321213 14.841472 2.800601 128.0 +-14.298262 15.000807 2.8138957 128.0 +-14.070065 14.943937 2.7873061 128.0 +-0 0 0 128.0 +-14.399239 15.674562 2.8891447 128.0 +-0 0 0 128.0 +-14.163466 15.802848 2.880636 128.0 +-14.04587 15.86645 2.8765144 128.0 +-0 0 0 128.0 +-13.856585 16.04512 2.8778439 128.0 +-13.045848 15.29509 2.7306702 128.0 +-12.908331 15.323306 2.7216296 128.0 +-12.851466 15.447174 2.7294736 128.0 +-12.791678 15.568622 2.7369187 128.0 +-26.220133 32.313801 5.6160483 128.0 +-15.201451 18.971331 3.2950358 128.0 +-14.867661 18.789886 3.248105 128.0 +-25.667887 32.851089 5.6262856 128.0 +-25.135271 32.57951 5.5536957 128.0 +-25.288046 33.196712 5.6318693 128.0 +-0 0 0 128.0 +-25.055441 33.742458 5.6716208 128.0 +-24.796362 33.825218 5.6599212 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.7694149 14.036939 2.3281026 128.0 +-9.6735611 14.08273 2.3258424 128.0 +-9.6153336 14.18366 2.3326228 128.0 +-21.490816 32.123016 5.2184 128.0 +-21.291124 32.250969 5.2178679 128.0 +-21.11231 32.410896 5.2226543 128.0 +-0 0 0 128.0 +-8.7893486 13.862568 2.2358363 128.0 +-8.6930866 13.898591 2.2330444 128.0 +-9.3638268 15.177262 2.4262185 128.0 +-8.4049139 13.812029 2.2028651 128.0 +-20.081013 33.459206 5.2685213 128.0 +-9.2908611 15.698455 2.480993 128.0 +-9.2583075 15.864736 2.4980106 128.0 +-9.1533747 15.90836 2.4960163 128.0 +-8.2721634 14.583179 2.2830331 128.0 +-8.2226763 14.705462 2.2940676 128.0 +-8.1232004 14.739146 2.2915418 128.0 +-8.0524797 14.825291 2.2971256 128.0 +-7.959023 14.870051 2.2964609 128.0 +-8.621273 16.34758 2.5131667 128.0 +-9.6029062 18.482807 2.8279884 128.0 +-7.3168445 14.29674 2.1883738 128.0 +-7.4453621 14.770607 2.2528536 128.0 +-8.2694902 16.658989 2.5288546 128.0 +-0 0 0 128.0 +-7.3114691 15.194511 2.295929 128.0 +-7.2100387 15.22207 2.2934029 128.0 +-7.1466541 15.3307 2.3029752 128.0 +-7.1061764 15.491374 2.3202586 128.0 +-7.001204 15.513004 2.3170679 128.0 +-6.8708968 15.476861 2.3055012 128.0 +-6.7520065 15.464231 2.2975245 128.0 +-0 0 0 128.0 +-7.2832637 17.255259 2.5464036 128.0 +-13.835594 33.347542 4.8769884 128.0 +-0 0 0 128.0 +-13.524101 33.761391 4.9126186 128.0 +-13.37766 33.99868 4.9349537 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.8287835 14.010626 2.0219223 128.0 +-4.7341599 14.014639 2.018333 128.0 +-0 0 0 128.0 +-4.4670639 13.779408 1.9771188 128.0 +-4.6901097 14.775786 2.113524 128.0 +-4.5243683 14.562931 2.079622 128.0 +-4.1530023 13.663004 1.9495986 128.0 +-4.3037992 14.477702 2.0600786 128.0 +-4.0475368 13.928033 1.9796449 128.0 +-3.9701228 13.981209 1.9836333 128.0 +-0 0 0 128.0 +-3.7961805 14.021222 1.9825697 128.0 +-3.7174182 14.07204 1.9864253 128.0 +-3.8261104 14.851851 2.0913215 128.0 +-3.7295985 14.853899 2.0883965 128.0 +-4.853498 19.84425 2.7744102 128.0 +-0 0 0 128.0 +-3.4629357 14.951896 2.0927839 128.0 +-3.2644415 14.499075 2.0276392 128.0 +-3.038388 13.892387 1.9416217 128.0 +-3.1072659 14.636933 2.0411999 128.0 +-0 0 0 128.0 +-3.825897 19.177074 2.6571498 128.0 +-2.7478507 14.228436 1.9779166 128.0 +-3.7518828 20.087734 2.7752078 128.0 +-2.6339376 14.598562 2.0239167 128.0 +-2.5325816 14.547075 2.0147433 128.0 +-5.2531867 31.307142 4.2922816 128.0 +-5.0600429 31.332916 4.2914839 128.0 +-4.8705807 31.381983 4.2940097 128.0 +-2.1892703 14.701898 2.0279052 128.0 +-4.6718521 32.748291 4.4713631 128.0 +-3.7066908 27.174856 3.7130256 128.0 +-4.1326084 31.750546 4.3289752 128.0 +-3.9421015 31.810715 4.3337612 128.0 +-3.7575002 31.924862 4.3459926 128.0 +-3.5578082 31.913826 4.3414726 128.0 +-0 0 0 128.0 +-3.1945429 32.244064 4.3804264 128.0 +-2.986186 32.150558 4.3652701 128.0 +-2.7751589 32.010288 4.3439984 128.0 +-2.5724101 31.948668 4.3334956 128.0 +-2.6947768 36.246563 4.9095607 128.0 +-2.3845305 34.974964 4.7364621 128.0 +-2.1759579 35.086868 4.7496238 128.0 +-1.7970854 32.172382 4.3563628 128.0 +-1.7792319 35.794949 4.8414912 128.0 +-1.5579685 35.768555 4.8365722 128.0 +-1.3402466 35.824982 4.8429537 128.0 +-1.1275611 36.061371 4.8736649 128.0 +-0.90821421 36.144894 4.8840346 128.0 +-0.68634093 36.145821 4.883503 128.0 +-0.48211867 37.515999 5.0668387 128.0 +-0.25155583 37.464729 5.0596595 128.0 +-0.021658994 37.443764 5.0567346 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.7387241 20.326189 2.7705545 128.0 +3.1655121 34.513851 4.6831498 128.0 +3.3735559 34.456295 4.6780977 128.0 +2.0988176 20.158644 2.7527397 128.0 +2.1926954 19.875456 2.7163117 128.0 +3.801544 32.623219 4.4397211 128.0 +2.4463336 19.927719 2.7272134 128.0 +2.6813946 20.787186 2.8455374 128.0 +4.3020468 31.813046 4.3402758 128.0 +4.4870319 31.714411 4.3305707 128.0 +4.6699557 31.607843 4.3199348 128.0 +2.202723 14.299891 1.9748588 128.0 +5.0694032 31.622532 4.330039 128.0 +2.3599598 14.163265 1.9601015 128.0 +2.6045432 15.060692 2.0842752 128.0 +5.7639198 32.156036 4.4161892 128.0 +2.6479282 14.266522 1.9804425 128.0 +2.7182288 14.160458 1.9682113 128.0 +2.9378941 14.813354 2.0598128 128.0 +3.0058758 14.683384 2.0445237 128.0 +3.3151503 15.70327 2.1869113 128.0 +3.1881545 14.656045 2.0459862 128.0 +0 0 0 128.0 +3.2927783 14.290336 2.0011826 128.0 +3.4180927 14.428995 2.023119 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.4874129 13.600379 1.917425 128.0 +3.5420654 13.469451 1.9022689 128.0 +4.1353183 15.342278 2.1655066 128.0 +4.1470785 15.018538 2.1240268 128.0 +4.1914263 14.823997 2.1004949 128.0 +4.34126 15.001742 2.1289458 128.0 +4.4757071 15.118326 2.1490211 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +4.684423 14.206776 2.0406682 128.0 +4.7715058 14.177765 2.0406682 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.7223105 18.673372 2.7446296 128.0 +7.845583 18.64665 2.7476876 128.0 +7.9625788 18.604538 2.7486181 128.0 +8.0734196 18.548059 2.7475545 128.0 +8.2203684 18.573399 2.7585893 128.0 +0 0 0 128.0 +8.4155226 18.400818 2.7482193 128.0 +8.5249271 18.341646 2.7471557 128.0 +8.6110687 18.233427 2.7389131 128.0 +8.7163534 18.166843 2.7369187 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +34.10363 50.431145 8.2004318 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +14.455091 19.766214 3.3188336 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +38.957561 39.002922 7.4286661 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +22.97711 14.568593 3.683511 128.0 +23.058506 14.422604 3.6823144 128.0 +0 0 0 128.0 +23.906013 14.547659 3.7878754 128.0 +23.014139 13.812115 3.6344531 128.0 +24.007677 14.208776 3.776176 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +24.477367 13.490537 3.7830894 128.0 +24.5292 13.323534 3.7784362 128.0 +28.134594 15.059117 4.3146167 128.0 +28.184385 14.864011 4.3082352 128.0 +28.17128 14.636872 4.2925472 128.0 +28.174978 14.419939 4.2796516 128.0 +28.20717 14.218682 4.2712755 128.0 +28.224638 14.010964 4.2609057 128.0 +28.170277 13.769183 4.2400327 128.0 +28.135452 13.538915 4.2223506 128.0 +28.137381 13.327838 4.2103853 128.0 +28.132393 13.114737 4.1976223 128.0 +28.137562 12.907571 4.1865878 128.0 +28.142155 12.701245 4.1756859 128.0 +28.156149 12.500177 4.1663795 128.0 +28.072456 12.257376 4.1429806 128.0 +28.12528 12.07551 4.1397896 128.0 +28.164146 11.888063 4.134738 128.0 +28.239307 11.716166 4.1351366 128.0 +0 0 0 128.0 +28.461 11.40081 4.1467032 128.0 +0 0 0 128.0 +28.592291 11.04819 4.1457725 128.0 +28.667883 10.875708 4.1469688 128.0 +0 0 0 128.0 +28.747986 10.50438 4.139657 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +31.969593 -0.37390852 4.3227267 128.0 +0 -0 0 128.0 +31.955662 -0.76603025 4.3217959 128.0 +0 -0 0 128.0 +24.487577 -0.88788468 3.3209608 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +24.922321 -1.3633667 3.382117 128.0 +25.328001 -1.5414827 3.4378223 128.0 +30.942961 -2.0737658 4.1940327 128.0 +18.403631 -1.3470325 2.5093112 128.0 +18.371307 -1.4580483 2.5061204 128.0 +25.213417 -2.156687 3.4285161 128.0 +19.593655 -1.7972465 2.6733694 128.0 +19.954134 -1.9538424 2.723491 128.0 +27.41312 -2.8539736 3.7311065 128.0 +27.40593 -3.023319 3.732569 128.0 +27.414427 -3.1946335 3.7362914 128.0 +19.348295 -2.3752151 2.6489069 128.0 +18.067278 -2.3305988 2.4776695 128.0 +27.390266 -3.7040145 3.7416093 128.0 +27.366043 -3.8718696 3.7414765 128.0 +27.381969 -4.0456505 3.7469275 128.0 +18.7883 -2.893981 2.584028 128.0 +0 -0 0 128.0 +25.281086 -4.2121553 3.4719901 128.0 +19.699688 -3.406671 2.71578 128.0 +18.979902 -3.4022834 2.620589 128.0 +17.494017 -3.2468739 2.4207675 128.0 +26.001348 -4.9908576 3.5855281 128.0 +18.657402 -3.7001696 2.5854905 128.0 +17.661415 -3.6154344 2.4522762 128.0 +0 -0 0 128.0 +20.103741 -4.3730497 2.7938206 128.0 +20.113281 -4.5045519 2.7988727 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +38.055622 -9.2613182 5.2877989 128.0 +30.853674 -7.7095404 4.2999926 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +30.587347 -8.4456768 4.2905531 128.0 +7.9599328 -2.2508307 1.1436656 128.0 +7.9231229 -2.2930179 1.1404748 128.0 +7.9431167 -2.3517177 1.1452609 128.0 +7.9769168 -2.415056 1.1520413 128.0 +7.9922466 -2.4733307 1.1562957 128.0 +7.9873157 -2.5256102 1.1577581 128.0 +7.9773273 -2.5763993 1.1585559 128.0 +7.9519558 -2.6221952 1.1572263 128.0 +0 -0 0 128.0 +20.838465 -7.1555982 2.9895205 128.0 +20.527575 -7.1899552 2.9516304 128.0 +20.429869 -7.2967739 2.9440522 128.0 +20.415445 -7.4331813 2.9484396 128.0 +20.374098 -7.5600319 2.9491043 128.0 +0 -0 0 128.0 +20.094807 -7.7382531 2.9225147 128.0 +19.646488 -7.7043753 2.864815 128.0 +19.655914 -7.8475623 2.8730578 128.0 +20.433781 -8.3038292 2.9927113 128.0 +19.34656 -8.0006895 2.8423467 128.0 +19.23407 -8.0927267 2.8331733 128.0 +19.331663 -8.2737656 2.8547111 128.0 +20.112061 -8.7541466 2.9763587 128.0 +19.515076 -8.6371222 2.8967226 128.0 +19.487925 -8.7684946 2.9005783 128.0 +19.750126 -9.032589 2.947243 128.0 +19.421995 -9.0270329 2.9069598 128.0 +19.352798 -9.1396847 2.9049654 128.0 +3.7396672 -1.7946221 0.59046751 128.0 +3.7383857 -1.8223107 0.59192991 128.0 +3.7440109 -1.8535682 0.59445596 128.0 +3.7688751 -1.8947551 0.5999068 128.0 +0 -0 0 128.0 +3.7470999 -1.9417742 0.6001727 128.0 +3.7316058 -1.9628842 0.59964091 128.0 +3.6477935 -1.9474747 0.58873916 128.0 +3.5033092 -1.8980684 0.56853104 128.0 +3.6522832 -2.0078461 0.59312648 128.0 +3.6710572 -2.047596 0.59791261 128.0 +3.6955183 -2.0910671 0.60362935 128.0 +5.1491642 -2.9552705 0.83043927 128.0 +4.9621844 -2.8885925 0.80424845 128.0 +4.9469275 -2.9204969 0.80464727 128.0 +3.9067163 -2.3389318 0.6448434 128.0 +3.8770404 -2.3536024 0.64245027 128.0 +3.7814922 -2.3274813 0.62968725 128.0 +3.7654579 -2.3495913 0.62942135 128.0 +3.7459443 -2.3694727 0.62862366 128.0 +3.6420541 -2.3351803 0.61439818 128.0 +3.7024565 -2.4060829 0.62636358 128.0 +3.7621229 -2.477813 0.63832891 128.0 +3.8095038 -2.5426621 0.64843297 128.0 +3.8012197 -2.5709856 0.64962953 128.0 +0 -0 0 128.0 +3.8426569 -2.6683099 0.66159487 128.0 +3.7767615 -2.6570544 0.653485 128.0 +3.7676516 -2.6853549 0.65468156 128.0 +3.7294061 -2.6927588 0.65109193 128.0 +3.4928052 -2.5547042 0.61453116 128.0 +3.4085717 -2.5253525 0.60309756 128.0 +3.4944894 -2.6223562 0.62011498 128.0 +4.1001639 -3.1162896 0.72487825 128.0 +3.5555122 -2.7369773 0.63593584 128.0 +4.1562004 -3.2400966 0.74096501 128.0 +4.2148147 -3.3275611 0.7543928 128.0 +4.3584418 -3.4845579 0.78257787 128.0 +3.5296423 -2.8577073 0.64324796 128.0 +3.7427635 -3.0684323 0.68326545 128.0 +3.2998326 -2.7393909 0.60934615 128.0 +4.4529552 -3.742873 0.81435251 128.0 +3.5754452 -3.0430269 0.66385496 128.0 +3.8029912 -3.277102 0.70746207 128.0 +4.3773317 -3.8189909 0.81328893 128.0 +3.3568811 -2.9652941 0.63487226 128.0 +2.423209 -2.1672981 0.47014922 128.0 +2.3540227 -2.1315734 0.46004516 128.0 +2.3679342 -2.1707547 0.46496424 128.0 +2.322602 -2.1555815 0.45911452 128.0 +2.318723 -2.1786134 0.46084285 128.0 +2.3225489 -2.2091918 0.4640336 128.0 +2.3882058 -2.2997015 0.47879088 128.0 +2.3343022 -2.2755735 0.47134575 128.0 +2.3689768 -2.3378847 0.48051921 128.0 +2.5782835 -2.5758092 0.52292973 128.0 +2.5777626 -2.6070845 0.52585459 128.0 +2.5658729 -2.627106 0.52665228 128.0 +2.338418 -2.4238462 0.48583713 128.0 +2.3330753 -2.4481928 0.48769841 128.0 +2.3078182 -2.4516382 0.48570418 128.0 +2.2913818 -2.4643011 0.48543829 128.0 +2.3171198 -2.5228369 0.49354815 128.0 +2.2356594 -2.4643431 0.48038626 128.0 +2.102747 -2.3466406 0.45672145 128.0 +2.0541461 -2.3209095 0.44980812 128.0 +2.0189896 -2.3095942 0.44555378 128.0 +1.9905281 -2.3054366 0.44262892 128.0 +2.6407723 -3.0965574 0.57996458 128.0 +2.6664219 -3.1657627 0.58927095 128.0 +1.8710535 -2.2494948 0.42654216 128.0 +1.855328 -2.2586358 0.42614332 128.0 +1.8351893 -2.2622812 0.42481384 128.0 +1.7977225 -2.2441082 0.41976181 128.0 +1.6781372 -2.121413 0.39689469 128.0 +1.7334347 -2.2191408 0.41178489 128.0 +1.6313933 -2.1151662 0.39237443 128.0 +1.6105764 -2.114887 0.3906461 128.0 +2.3547695 -3.1314745 0.55962348 128.0 +2.3361015 -3.1466599 0.5597564 128.0 +2.3085463 -3.149744 0.55789512 128.0 +2.2862711 -3.1598351 0.55723041 128.0 +2.6897213 -3.7657535 0.65481448 128.0 +1.9571664 -2.7761779 0.48969263 128.0 +2.6376452 -3.7903421 0.653485 128.0 +1.9448376 -2.831847 0.49487764 128.0 +1.4480084 -2.1365705 0.38027614 128.0 +1.4023551 -2.096813 0.37243217 128.0 +2.0589311 -3.1194401 0.53542686 128.0 +1.5139256 -2.3248024 0.40620106 128.0 +1.3731676 -2.1372783 0.37482527 128.0 +1.3085457 -2.0644708 0.36192927 128.0 +1.3063656 -2.0892665 0.36458823 128.0 +1.3075732 -2.1200173 0.36817783 128.0 +1.2986623 -2.134774 0.36924142 128.0 +1.6440971 -2.7401216 0.46270412 128.0 +2.2562535 -3.812906 0.62835777 128.0 +2.2188275 -3.8027101 0.62463522 128.0 +2.2087991 -3.8394475 0.62822485 128.0 +2.2272556 -3.9270666 0.63965839 128.0 +1.7576008 -3.1439388 0.51721293 128.0 +2.1315339 -3.8681695 0.62649649 128.0 +0 -0 0 128.0 +1.0591152 -1.9795024 0.33520666 128.0 +1.0585082 -2.0078804 0.33853036 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.1383092 -2.3296888 0.38187152 128.0 +1.0694116 -2.2232065 0.36498708 128.0 +1.0633874 -2.2458494 0.36738014 128.0 +1.0433054 -2.2388573 0.36538592 128.0 +1.0423595 -2.2731433 0.36950731 128.0 +1.0247226 -2.2713659 0.36831078 128.0 +1.016397 -2.2902927 0.37017205 128.0 +1.020569 -2.3382683 0.3762877 128.0 +1.0089396 -2.3508613 0.37721834 128.0 +0.99526691 -2.358834 0.37748423 128.0 +0 -0 0 128.0 +0.97298104 -2.3873899 0.3798773 128.0 +1.6051421 -4.007997 0.61320168 128.0 +1.3018038 -3.3094511 0.51109731 128.0 +1.1882319 -3.076082 0.47639781 128.0 +1.1844524 -3.123162 0.48211458 128.0 +0.85813159 -2.3055835 0.36405644 128.0 +0.85893601 -2.3517659 0.36990616 128.0 +0 -0 0 128.0 +1.1136951 -3.1690547 0.4846406 128.0 +1.0661304 -3.0943074 0.47307408 128.0 +1.0198432 -3.0200379 0.46164054 128.0 +0.91533279 -2.766546 0.42494678 128.0 +0.96467119 -2.9766998 0.4537966 128.0 +0.95838362 -3.0203497 0.45911452 128.0 +0.80338019 -2.5870023 0.39742649 128.0 +0.96592844 -3.1788659 0.47972152 128.0 +0.75801593 -2.551065 0.39104494 128.0 +0.96778411 -3.3313377 0.49939787 128.0 +0.91510439 -3.2237561 0.48357701 128.0 +0.86351764 -3.1147027 0.4676232 128.0 +0.83765483 -3.0950689 0.46416655 128.0 +0.80953401 -3.0656536 0.45938042 128.0 +0.78798819 -3.0600057 0.45791799 128.0 +0.85054576 -3.3887336 0.50272155 128.0 +0.84480804 -3.4555042 0.51123029 128.0 +0.51205629 -2.1522467 0.33081934 128.0 +0.50152457 -2.166935 0.33241472 128.0 +0.49017861 -2.1786735 0.33361128 128.0 +0.47616592 -2.1787355 0.33321244 128.0 +0.46031836 -2.1699822 0.33161703 128.0 +0.43979883 -2.1378186 0.32683089 128.0 +0.42609137 -2.1375608 0.32643205 128.0 +0.43702686 -2.2646966 0.34344944 128.0 +0.40401387 -2.1650369 0.32948986 128.0 +0.51568717 -2.8599877 0.4238832 128.0 +0.48928791 -2.8123236 0.4169699 128.0 +0.43511698 -2.5953453 0.3870565 128.0 +0.42345071 -2.6243842 0.3906461 128.0 +0.40962008 -2.641624 0.39264032 128.0 +0.41559649 -2.7930949 0.41284847 128.0 +1.2067389 -8.4609671 1.1804923 128.0 +1.1531932 -8.4564276 1.1788969 128.0 +1.0932238 -8.4014263 1.1705211 128.0 +1.0170286 -8.2092886 1.1436656 128.0 +0.96385735 -8.1917505 1.1404748 128.0 +0.27033642 -2.4282515 0.36179632 128.0 +0.87145787 -8.2808304 1.1509777 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.24333028 -3.9293487 0.56214947 128.0 +0.21822049 -3.9129553 0.5597564 128.0 +0.19612633 -3.9528267 0.56494141 128.0 +0.11789995 -2.7152359 0.39862302 128.0 +0.094899423 -2.5465448 0.37588885 128.0 +0.078714579 -2.5292478 0.37349579 128.0 +0.062994674 -2.5217566 0.37243217 128.0 +0.046823677 -2.4854307 0.36751309 128.0 +0.031763677 -2.5005369 0.36950731 128.0 +0.016193455 -2.4669874 0.36498708 128.0 +0.0010460755 -2.450191 0.36272696 128.0 +-0.013955048 -2.4442048 0.36192927 128.0 +-0.028396361 -2.3965025 0.35554776 128.0 +-0.04304751 -2.3933103 0.35514891 128.0 +-0.057589337 -2.3870559 0.35435122 128.0 +-0.07649906 -2.5283241 0.37336284 128.0 +-0.095493145 -2.623883 0.38625881 128.0 +-0.11415159 -2.6836519 0.39436868 128.0 +-0.13114455 -2.6937904 0.39583111 128.0 +-0.14669667 -2.6751215 0.39343804 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-4.0849276 -8.9313383 1.3514639 128.0 +-1.6362276 -3.5196328 0.55470437 128.0 +-1.6577928 -3.5095267 0.55470437 128.0 +-1.6801531 -3.501076 0.55497026 128.0 +-4.2737918 -8.7687054 1.3425564 128.0 +-1.6952918 -3.4242332 0.54659456 128.0 +-1.6735412 -3.328753 0.53383148 128.0 +-1.6907808 -3.312242 0.53290087 128.0 +-1.7074251 -3.294765 0.53183728 128.0 +-1.7497528 -3.3263328 0.5382188 128.0 +-1.8676695 -3.4982767 0.56600499 128.0 +-1.876354 -3.4632208 0.56241536 128.0 +-1.8803824 -3.4203739 0.55762923 128.0 +-1.8974724 -3.4018466 0.55656564 128.0 +-1.9290463 -3.4091182 0.5594905 128.0 +-1.9558475 -3.4075334 0.56108588 128.0 +-4.8260121 -8.2909212 1.3208858 128.0 +-4.8893886 -8.2824917 1.3242095 128.0 +-4.9441891 -8.2591381 1.325273 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.1756401 -8.2953901 1.3456142 128.0 +-5.2253823 -8.2618017 1.3453482 128.0 +-5.2524428 -8.1928701 1.3394985 128.0 +-5.2945142 -8.1480207 1.3375043 128.0 +-5.344955 -8.116209 1.3376373 128.0 +-5.3897033 -8.07584 1.3364407 128.0 +-5.4236088 -8.0196295 1.3327181 128.0 +-0 -0 0 128.0 +-5.4300456 -7.8205771 1.3111806 128.0 +-5.3752899 -7.6411924 1.2872498 128.0 +-5.4295516 -7.6185594 1.2889782 128.0 +-5.4228244 -7.5111694 1.2767469 128.0 +-5.4758306 -7.4873548 1.2783422 128.0 +-5.4709339 -7.3851218 1.2669088 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.2479601 -8.4953012 1.7185344 128.0 +-9.3013802 -8.4397287 1.7188002 128.0 +-9.3168259 -8.3500834 1.7122858 128.0 +-9.4925585 -8.4031305 1.734621 128.0 +-9.5178261 -8.3218927 1.7299678 128.0 +-9.9145079 -8.5619793 1.791257 128.0 +-9.6825733 -8.2584972 1.7411355 128.0 +-10.629019 -8.9537115 1.8982805 128.0 +-9.8471889 -8.1923027 1.7523032 128.0 +-10.432549 -8.5715466 1.845234 128.0 +-10.625788 -8.6216564 1.8695636 128.0 +-10.932952 -8.7601995 1.9133036 128.0 +-10.992716 -8.6978712 1.9143672 128.0 +-10.841258 -8.470377 1.8795347 128.0 +-10.52578 -8.1203575 1.817315 128.0 +-10.416935 -7.9348989 1.7905923 128.0 +-10.402851 -7.8237681 1.7800894 128.0 +-10.563655 -7.8436952 1.7989681 128.0 +-10.7123 -7.8525643 1.8157196 128.0 +-0 -0 0 128.0 +-10.759469 -7.6859484 1.8077426 128.0 +-10.784556 -7.6043634 1.8041531 128.0 +-10.848096 -7.5499372 1.806945 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.560184 -8.994854 2.5619588 128.0 +-16.92527 -9.0591164 2.6091554 128.0 +-16.704386 -8.8094521 2.5672767 128.0 +-16.760763 -8.7081614 2.5676754 128.0 +-16.501553 -8.445302 2.5206118 128.0 +-16.36632 -8.2497549 2.4925597 128.0 +-16.460131 -8.1707726 2.4990742 128.0 +-6.9751177 -3.408994 1.0754631 128.0 +-6.8923049 -3.3162773 1.0600411 128.0 +-6.9483519 -3.2908959 1.065359 128.0 +-7.1040573 -3.3114362 1.0854342 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-6.993505 -3.1045032 1.0604399 128.0 +-0 -0 0 128.0 +-7.5410814 -3.2374258 1.134891 128.0 +-7.117034 -3.003772 1.0702782 128.0 +-7.1188526 -2.9532092 1.067885 128.0 +-7.1634545 -2.920325 1.0717405 128.0 +-7.7148652 -3.0900824 1.1488506 128.0 +-7.716157 -3.0357914 1.1463245 128.0 +-7.73279 -2.9876745 1.1460587 128.0 +-7.2023849 -2.7320437 1.0673532 128.0 +-7.2171555 -2.6871076 1.0670873 128.0 +-7.2325764 -2.6424334 1.0669544 128.0 +-7.2785096 -2.6087077 1.0712087 128.0 +-22.466074 -7.8977752 3.2284288 128.0 +-22.546906 -7.7710814 3.2330821 128.0 +-22.615761 -7.6398859 3.2361398 128.0 +-22.686676 -7.5090718 3.2395964 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-28.253899 -8.7782288 4.0027199 128.0 +-28.211452 -8.5755863 3.9892921 128.0 +-28.157139 -8.3706884 3.974402 128.0 +-0 -0 0 128.0 +-28.922274 -8.2132492 4.0670671 128.0 +-13.04069 -3.616704 1.8493555 128.0 +-13.325721 -3.6078565 1.8859162 128.0 +-13.565129 -3.5834925 1.9160956 128.0 +-12.778728 -3.2919786 1.8041531 128.0 +-12.785229 -3.2101283 1.8022918 128.0 +-12.728628 -3.1130157 1.7917888 128.0 +-12.804376 -3.0484006 1.7996328 128.0 +-0 -0 0 128.0 +-13.293335 -2.9929376 1.8618526 128.0 +-13.02679 -2.8490489 1.8227658 128.0 +-12.695971 -2.6951663 1.7750374 128.0 +-17.647594 -3.6334617 2.4509468 128.0 +-13.30252 -2.6537776 1.8536098 128.0 +-13.301037 -2.5687215 1.8512168 128.0 +-17.789427 -3.3225708 2.4615827 128.0 +-13.319853 -2.4031918 1.8496214 128.0 +-18.013407 -3.1361506 2.4867098 128.0 +-17.171171 -2.8810575 2.3695824 128.0 +-18.062277 -2.9167585 2.4883053 128.0 +-19.732073 -3.0623295 2.7125893 128.0 +-19.643639 -2.9252837 2.6980977 128.0 +-17.758696 -2.5332615 2.440311 128.0 +-17.840683 -2.4333582 2.4493513 128.0 +-17.994841 -2.342011 2.46823 128.0 +-17.929201 -2.2216783 2.4574614 128.0 +-18.952415 -2.2305033 2.5938663 128.0 +-18.868227 -2.1032991 2.5807045 128.0 +-18.836422 -1.9828162 2.5747218 128.0 +-19.892717 -1.9706947 2.7155139 128.0 +-19.870882 -1.8454813 2.7109938 128.0 +-0 -0 0 128.0 +-23.094885 -1.8594199 3.1420124 128.0 +-18.522675 -1.3768868 2.5255308 128.0 +-18.56835 -1.2657702 2.5305829 128.0 +-18.518393 -1.1482543 2.522872 128.0 +-0 -0 0 128.0 +-23.784489 -1.1821038 3.2284288 128.0 +-23.821001 -1.0374368 3.2324173 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-49.190346 8.8730946 6.1095753 128.0 +-49.306721 9.2068272 6.1308112 128.0 +-49.370159 9.5325336 6.1457725 128.0 +-49.388622 9.8508196 6.1554251 128.0 +-49.450729 10.179098 6.1707482 128.0 +-49.461143 10.497996 6.1799183 128.0 +-49.448166 10.812738 6.1864338 128.0 +-49.583294 11.161511 6.2116508 128.0 +-49.553528 11.474721 6.216598 128.0 +-49.610626 11.809136 6.232645 128.0 +-49.631733 12.136429 6.2444696 128.0 +-49.69305 12.475061 6.2616029 128.0 +-49.719391 12.806481 6.2746339 128.0 +-49.766563 13.144778 6.2905602 128.0 +-49.70797 13.456119 6.2934561 128.0 +-0 0 0 128.0 +-49.297501 13.996497 6.2629299 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.876663 13.474014 4.5786843 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-33.967323 13.846498 4.4926562 128.0 +-0 0 0 128.0 +-33.975018 14.338329 4.5164251 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.306 15.480584 4.6088481 128.0 +-34.161644 15.668441 4.6023331 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-22.116348 13.642966 3.1927016 128.0 +-21.761213 13.608914 3.1538501 128.0 +-21.237984 13.463653 3.090626 128.0 +-20.744932 13.330202 3.0313835 128.0 +-21.416365 13.948106 3.1406984 128.0 +-21.655964 14.294179 3.1881166 128.0 +-20.094231 13.440985 2.9726238 128.0 +-19.886482 13.479362 2.954284 128.0 +-21.640392 14.862921 3.2251582 128.0 +-21.562639 15.005064 3.2272093 128.0 +-0 0 0 128.0 +-20.535986 14.667871 3.1016057 128.0 +-19.827959 14.346659 3.0089414 128.0 +-20.281586 14.865369 3.090626 128.0 +-20.240999 15.027409 3.0983479 128.0 +-0 0 0 128.0 +-28.060204 21.372255 4.321444 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-40.48867 32.439667 6.3401504 128.0 +-38.434147 31.182636 6.0498505 128.0 +-37.305557 30.648432 5.9025288 128.0 +-36.737522 30.561226 5.8425622 128.0 +-0 0 0 128.0 +-22.864954 19.500032 3.6867905 128.0 +-22.429319 19.367462 3.6361146 128.0 +-36.022034 31.493464 5.8499222 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-15.486316 14.224005 2.5900216 128.0 +-15.366035 14.288339 2.5845921 128.0 +-15.387214 14.485105 2.6028111 128.0 +-39.011269 37.180782 6.5844798 128.0 +-15.416895 14.874112 2.6380429 128.0 +-15.369367 15.011436 2.6455235 128.0 +-0 0 0 128.0 +-32.464771 32.498547 5.617538 128.0 +-32.191544 32.62294 5.6048689 128.0 +-14.069949 14.433651 2.4842057 128.0 +-14.260657 14.810049 2.5331924 128.0 +-14.161306 14.888639 2.5317445 128.0 +-31.279287 33.294609 5.5867705 128.0 +-30.729362 33.114067 5.5251145 128.0 +-14.23499 15.52878 2.5947273 128.0 +-14.135442 15.611417 2.5940032 128.0 +-13.300241 14.871304 2.4592299 128.0 +-0 0 0 128.0 +-27.844465 31.915171 5.1822085 128.0 +-13.087111 15.186544 2.4709334 128.0 +-13.018772 15.296043 2.4756391 128.0 +-12.932337 15.384756 2.477087 128.0 +-15.202024 18.312141 2.9270155 128.0 +-16.790483 20.480185 3.2531505 128.0 +-25.83951 31.916174 5.0254755 128.0 +-0 0 0 128.0 +-15.09127 19.114475 2.9943421 128.0 +-24.946777 32.000408 4.965992 128.0 +-14.87979 19.329695 2.9991682 128.0 +-24.560013 32.314407 4.9675603 128.0 +-24.454218 32.588364 4.986383 128.0 +-24.657393 33.282604 5.0687914 128.0 +-0 0 0 128.0 +-22.518396 31.188242 4.7098379 128.0 +-22.307592 31.299149 4.7058563 128.0 +-22.116838 31.437872 4.7062182 128.0 +-21.861811 31.484106 4.6930666 128.0 +-21.683928 31.640583 4.696445 128.0 +-9.6652145 14.289316 2.1310439 128.0 +-9.521698 14.264956 2.1188574 128.0 +-9.5355434 14.477318 2.1412997 128.0 +-9.4643822 14.563023 2.1452813 128.0 +-21.089981 32.894218 4.7835593 128.0 +-9.2754068 14.662968 2.1431096 128.0 +-8.713912 13.964141 2.0348804 128.0 +-8.6270256 14.015655 2.0346391 128.0 +-8.4764776 13.962251 2.019557 128.0 +-9.1289568 15.247319 2.194268 128.0 +-9.0877123 15.391951 2.2068162 128.0 +-20.040644 34.426624 4.8759823 128.0 +-8.3481913 14.54404 2.0725253 128.0 +-8.2583046 14.594126 2.0724046 128.0 +-8.109129 14.537885 2.057564 128.0 +-7.8638849 14.30377 2.01823 128.0 +-8.7618418 16.171642 2.269799 128.0 +-8.6596441 16.219845 2.2690749 128.0 +-7.6135917 14.473331 2.0219703 128.0 +-8.510643 16.422726 2.2824678 128.0 +-7.5712428 14.831813 2.0582879 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-9.1540852 18.77898 2.5734916 128.0 +-7.3376689 15.289708 2.0955708 128.0 +-7.2441387 15.33534 2.0956914 128.0 +-17.568722 37.794498 5.1000414 128.0 +-7.6185937 16.654436 2.260267 128.0 +-7.6152463 16.920849 2.2895865 128.0 +-7.5241356 16.996304 2.2934477 128.0 +-7.414556 17.030319 2.2918792 128.0 +-7.366169 17.206909 2.3092537 128.0 +-0 0 0 128.0 +-13.91704 33.647541 4.4599581 128.0 +-13.347781 32.84024 4.3429213 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.6437559 14.078893 1.836159 128.0 +-4.6088414 14.266768 1.85655 128.0 +-4.3856401 13.866012 1.8018925 128.0 +-4.3940945 14.195175 1.840382 128.0 +-0 0 0 128.0 +-4.0758433 13.762584 1.7788471 128.0 +-3.9344723 13.590899 1.7539918 128.0 +-3.9749861 14.05324 1.8093733 128.0 +-3.8197148 13.82762 1.7778819 128.0 +-0 0 0 128.0 +-3.7115986 14.108665 1.8074427 128.0 +-3.7628005 14.668697 1.8748897 128.0 +-3.6065373 14.426663 1.8417093 128.0 +-3.5177143 14.447556 1.8415885 128.0 +-3.4374666 14.504609 1.8460529 128.0 +-3.2418516 14.063038 1.788379 128.0 +-3.2197251 14.369398 1.8240933 128.0 +-3.1755996 14.591615 1.8493105 128.0 +-2.9342566 13.892076 1.7600247 128.0 +-3.9494147 19.284948 2.4268939 128.0 +-2.8240094 14.231813 1.7977902 128.0 +-2.8013873 14.586186 1.8395374 128.0 +-2.7946303 15.049143 1.8946775 128.0 +-2.7102962 15.110954 1.9002277 128.0 +-2.5752311 14.882757 1.8700635 128.0 +-2.4510658 14.701461 1.8458115 128.0 +-5.0912061 31.744793 3.9419792 128.0 +-4.8869567 31.714605 3.9344985 128.0 +-0 0 0 128.0 +-4.4978189 31.775135 3.9348605 128.0 +-3.7045236 27.379257 3.3923881 128.0 +-4.1058993 31.81514 3.9332919 128.0 +-3.9004457 31.756969 3.9231567 128.0 +-3.71402 31.85327 3.9320853 128.0 +-0 0 0 128.0 +-3.3443418 32.102806 3.9573026 128.0 +-3.1356881 32.004166 3.9428236 128.0 +-2.9364436 31.992157 3.9390833 128.0 +-2.7423732 32.036278 3.9423411 128.0 +-2.5419798 32.005001 3.9365497 128.0 +-2.3683863 32.33186 3.9745564 128.0 +-2.3541148 35.092358 4.3091373 128.0 +-2.1368172 35.074436 4.3052764 128.0 +-1.9237885 35.127525 4.3102231 128.0 +-1.7057092 35.087109 4.3039489 128.0 +-1.489082 35.06617 4.3002086 128.0 +-1.27364 35.067703 4.2993641 128.0 +-1.0837481 35.914295 4.4014397 128.0 +-0.86436224 35.961948 4.406507 128.0 +-0.66900736 37.383919 4.578805 128.0 +-0.44174156 37.56897 4.6008849 128.0 +-0.21156955 37.634502 4.6086068 128.0 +0.01707652 33.456844 4.1007633 128.0 +0.22207171 33.41243 4.0954542 128.0 +0.42818928 33.496796 4.1059513 128.0 +0.63194519 33.400242 4.0946097 128.0 +0.83674884 33.390774 4.0940065 128.0 +1.0439395 33.459427 4.103056 128.0 +0 0 0 128.0 +1.8154525 41.738148 5.1121073 128.0 +2.0655594 41.606255 5.0975075 128.0 +2.3473713 42.06855 5.1554227 128.0 +2.6028142 42.01075 5.1502347 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.789875 43.744068 5.3710361 128.0 +0 0 0 128.0 +1.9901762 20.106121 2.4899974 128.0 +2.1099751 20.059965 2.4858949 128.0 +2.2171874 19.904573 2.4685204 128.0 +2.322341 19.746655 2.4509046 128.0 +3.9592454 31.966764 3.9493392 128.0 +4.1518569 31.915289 3.9460814 128.0 +4.3488145 31.898066 3.9471674 128.0 +4.5200663 31.699783 3.9261732 128.0 +4.7494278 31.906118 3.9550102 128.0 +5.0256329 32.395302 4.0188375 128.0 +2.3019233 14.264192 1.7904302 128.0 +2.3861187 14.230219 1.788017 128.0 +2.4704945 14.198684 1.7859658 128.0 +2.7175989 15.070305 1.8955221 128.0 +2.6645939 14.274639 1.7992381 128.0 +2.9220932 15.138164 1.908191 128.0 +6.3195586 31.686239 3.9614048 128.0 +3.0319791 14.733634 1.8625828 128.0 +3.3319581 15.702318 1.9852906 128.0 +3.4212441 15.649575 1.9813089 128.0 +3.2599297 14.485512 1.8389341 128.0 +3.4215391 14.779544 1.8781475 128.0 +3.7475746 15.747155 2.0016999 128.0 +0 0 0 128.0 +9.8092604 39.07515 4.9310017 128.0 +3.4981906 13.584654 1.7392718 128.0 +3.5457313 13.427606 1.7222592 128.0 +4.0579 14.993335 1.9221872 128.0 +4.2270188 15.246521 1.9572983 128.0 +4.2613792 15.012119 1.9309951 128.0 +4.2830524 14.743561 1.9003483 128.0 +0 0 0 128.0 +4.2549391 14.003192 1.8131136 128.0 +0 0 0 128.0 +4.5270653 14.266892 1.8535335 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.9109302 18.74649 2.5073719 128.0 +8.0371637 18.724051 2.5108709 128.0 +0 0 0 128.0 +8.3134565 18.730167 2.5249877 128.0 +0 0 0 128.0 +8.5248814 18.58794 2.5197995 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +33.355286 49.206917 7.2596745 128.0 +0 0 0 128.0 +34.012188 48.873741 7.2714987 128.0 +34.493343 48.922119 7.3098679 128.0 +34.634773 48.48822 7.2768078 128.0 +34.933384 48.277206 7.2771697 128.0 +15.387106 20.993347 3.1978898 128.0 +14.670565 19.760399 3.0255921 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +18.378578 20.763559 3.4045746 128.0 +18.51226 20.657793 3.405781 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.033295 19.727383 3.3660851 128.0 +0 0 0 128.0 +38.645 39.081192 6.7145476 128.0 +39.023834 38.982944 6.7385583 128.0 +39.353447 38.83271 6.7541232 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +25.094265 19.316854 3.8833401 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +23.30426 14.541416 3.3729625 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +23.285664 13.747619 3.3209596 128.0 +24.221508 14.100378 3.4407716 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +24.538506 13.489751 3.4377551 128.0 +24.650492 13.355008 3.4418573 128.0 +28.157841 15.032268 3.913866 128.0 +28.183653 14.824554 3.9048169 128.0 +28.194757 14.610241 3.8939579 128.0 +28.198992 14.393644 3.8823748 128.0 +28.152851 14.153025 3.8641555 128.0 +28.197348 13.959317 3.8584847 128.0 +28.40383 13.845189 3.8748941 128.0 +28.724525 13.784019 3.9067473 128.0 +28.988983 13.69272 3.9309993 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.013781 13.728511 4.1566272 128.0 +31.016426 13.502692 4.1458888 128.0 +0 0 0 128.0 +30.857712 12.985534 4.1034179 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +32.540913 -0.41593677 3.9897592 128.0 +32.446434 -0.61386538 3.9786587 128.0 +32.074875 -0.80372721 3.9340158 128.0 +32.494999 -1.0138153 3.9857774 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +24.561899 -1.5212673 3.0253508 128.0 +25.415728 -1.7308002 3.1305633 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +25.318247 -2.1930132 3.1230826 128.0 +25.362633 -2.3537366 3.1302013 128.0 +18.475163 -1.8286426 2.2907932 128.0 +27.460333 -2.8888052 3.390337 128.0 +27.426304 -3.0554848 3.3884065 128.0 +19.673698 -2.3137565 2.4419758 128.0 +19.738928 -2.4443147 2.4517491 128.0 +27.400854 -3.5644073 3.3927503 128.0 +27.392239 -3.7343466 3.3944395 128.0 +27.377653 -3.9036133 3.3955252 128.0 +18.663633 -2.7777085 2.3277142 128.0 +27.318861 -4.2379155 3.3944395 128.0 +19.038763 -3.0728302 2.3782692 128.0 +19.942759 -3.3444724 2.4920485 128.0 +18.62603 -3.2411997 2.3321784 128.0 +18.855885 -3.4005442 2.3630664 128.0 +19.123508 -3.5701194 2.3987808 128.0 +18.828329 -3.6346905 2.3649969 128.0 +18.792044 -3.7474318 2.3633077 128.0 +18.070581 -3.7189479 2.2766764 128.0 +18.136761 -3.8487208 2.2877767 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +18.117002 -4.1944494 2.2945335 128.0 +38.170864 -9.0857782 4.8033466 128.0 +36.456802 -8.9144487 4.5959382 128.0 +31.852129 -7.9958 4.0258355 128.0 +31.259327 -8.051178 3.9576645 128.0 +0 -0 0 128.0 +31.604692 -8.5550575 4.0138903 128.0 +0 -0 0 128.0 +7.9445739 -2.2545943 1.0380154 128.0 +7.9448895 -2.3074539 1.0398252 128.0 +25.744463 -7.651371 3.2986381 128.0 +31.690216 -9.6307755 4.0599813 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9638577 -2.5803814 1.0517702 128.0 +7.9478745 -2.6291981 1.0517702 128.0 +0 -0 0 128.0 +24.707998 -8.5139446 3.2106793 128.0 +24.713358 -8.6858006 3.2181599 128.0 +20.452555 -7.3293829 2.674964 128.0 +20.392281 -7.4492888 2.6730335 128.0 +0 -0 0 128.0 +20.272413 -7.6887622 2.6695344 128.0 +24.904766 -9.6211805 3.2793329 128.0 +0 -0 0 128.0 +19.634439 -7.8631358 2.6049831 128.0 +19.530668 -7.9609771 2.5977437 128.0 +19.45578 -8.070014 2.5943654 128.0 +19.351936 -8.1664667 2.5872464 128.0 +20.107836 -8.631238 2.693907 128.0 +19.679674 -8.5908089 2.6441965 128.0 +19.526787 -8.6670933 2.6309242 128.0 +19.575483 -8.8328867 2.6445584 128.0 +19.665285 -9.0190535 2.6638634 128.0 +3.6715147 -1.7101536 0.52655196 128.0 +3.6681294 -1.7360488 0.5275172 128.0 +3.6636701 -1.7615362 0.5283618 128.0 +3.6715217 -1.7931368 0.53089559 128.0 +3.7449222 -1.8575605 0.54235798 128.0 +3.6217606 -1.8242059 0.52715522 128.0 +3.5504079 -1.8156419 0.51895058 128.0 +3.4837036 -1.8085604 0.5113492 128.0 +3.5375187 -1.8641677 0.5202778 128.0 +3.5548964 -1.9012966 0.52425945 128.0 +3.5309505 -1.9164401 0.52257025 128.0 +3.6278012 -1.9979615 0.53765237 128.0 +3.8849401 -2.170851 0.5751766 128.0 +3.8430526 -2.1784854 0.57119489 128.0 +3.7762661 -2.1713314 0.56371421 128.0 +3.7225747 -2.1709459 0.5580433 128.0 +3.7219985 -2.2013299 0.5598532 128.0 +4.86518 -2.9183185 0.72382551 128.0 +4.7810354 -2.907866 0.7144143 128.0 +13.950861 -8.6053934 2.0265551 128.0 +4.7239504 -2.9531579 0.71139789 128.0 +4.6831045 -2.9677362 0.70814019 128.0 +4.7332864 -3.0404232 0.71803403 128.0 +4.6305289 -3.0146875 0.70584768 128.0 +4.4943023 -2.965385 0.68871444 128.0 +3.8109963 -2.5480247 0.59146523 128.0 +4.4279928 -3.0002611 0.68437082 128.0 +3.9209998 -2.6918335 0.61233878 128.0 +3.9060388 -2.7169757 0.61258012 128.0 +3.8730683 -2.7294507 0.61016697 128.0 +3.8425157 -2.7433548 0.60811585 128.0 +3.3615761 -2.4310913 0.53849697 128.0 +3.3441939 -2.4499111 0.53813499 128.0 +3.3179405 -2.4620996 0.5364458 128.0 +3.4495444 -2.5927942 0.55876726 128.0 +4.3527751 -3.3140783 0.6992116 128.0 +4.2781253 -3.2988858 0.69088626 128.0 +4.3188186 -3.3727446 0.70029747 128.0 +4.1758199 -3.3024764 0.6813544 128.0 +4.4281702 -3.5465291 0.72382551 128.0 +3.6824772 -2.9863272 0.61052895 128.0 +4.5614972 -3.7461734 0.75169724 128.0 +3.6577635 -3.0414498 0.61245948 128.0 +3.703567 -3.1181972 0.62271529 128.0 +4.3973584 -3.7489774 0.73661512 128.0 +3.7852347 -3.2672207 0.64202034 128.0 +2.5073633 -2.1906981 0.43895525 128.0 +2.4886711 -2.201436 0.43811065 128.0 +2.5024688 -2.2411783 0.44257495 128.0 +3.9788682 -3.6086092 0.68714595 128.0 +2.4718535 -2.2690325 0.4420923 128.0 +2.4586112 -2.284833 0.44221297 128.0 +2.4705653 -2.3243725 0.4465566 128.0 +2.424639 -2.3093526 0.4412477 128.0 +2.3461306 -2.2621503 0.4303886 128.0 +3.5280545 -3.4446292 0.63357437 128.0 +2.3407812 -2.3131068 0.43424964 128.0 +2.3510985 -2.3520072 0.4384726 128.0 +3.632086 -3.6792798 0.66265261 128.0 +3.1971745 -3.2785232 0.59086192 128.0 +3.1873255 -3.3088057 0.59267175 128.0 +4.2827477 -4.5015264 0.78946275 128.0 +2.8705294 -3.0539234 0.5436852 128.0 +2.8719938 -3.0933094 0.54730487 128.0 +2.9005833 -3.1628311 0.55587149 128.0 +3.3828092 -3.7347031 0.64672595 128.0 +2.0350592 -2.273958 0.40517136 128.0 +2.015811 -2.2804499 0.40420613 128.0 +1.9900336 -2.2793109 0.40203431 128.0 +1.9721227 -2.2869666 0.40131035 128.0 +1.9548361 -2.2952442 0.4007071 128.0 +3.5304739 -4.1986508 0.70102143 128.0 +3.4019308 -4.0964937 0.68147504 128.0 +2.6039016 -3.174547 0.53330874 128.0 +2.5762539 -3.1804342 0.53174019 128.0 +2.5951228 -3.2442551 0.53922087 128.0 +2.5942357 -3.2842712 0.54296124 128.0 +2.6869423 -3.4449675 0.5652827 128.0 +2.6239746 -3.4071107 0.55695742 128.0 +2.5916071 -3.4081302 0.55466497 128.0 +3.2379375 -4.3132715 0.68980038 128.0 +2.3687699 -3.1955919 0.517744 128.0 +2.3497036 -3.2108676 0.51786464 128.0 +2.6460648 -3.663065 0.58350188 128.0 +2.6004937 -3.6468956 0.57867563 128.0 +2.5814948 -3.667655 0.57939953 128.0 +1.7368686 -2.4994464 0.40420613 128.0 +2.2259755 -3.246222 0.51267642 128.0 +1.3440335 -1.9852556 0.32565865 128.0 +1.3373375 -2.0017221 0.32686523 128.0 +1.328306 -2.0148644 0.32758915 128.0 +1.3272766 -2.0404572 0.33012295 128.0 +1.3158032 -2.0502341 0.33036426 128.0 +1.283565 -2.0272274 0.32589996 128.0 +1.322073 -2.1167593 0.33760366 128.0 +2.3127112 -3.7556455 0.57035029 128.0 +1.6926237 -2.7862427 0.43050927 128.0 +1.6092111 -2.6858497 0.41482392 128.0 +1.3020242 -2.2032778 0.34532568 128.0 +1.2749971 -2.1880612 0.34206796 128.0 +1.268465 -2.2078969 0.34375715 128.0 +1.2558714 -2.2173665 0.34399846 128.0 +1.2388577 -2.2189617 0.34315386 128.0 +1.2218717 -2.220432 0.34230927 128.0 +1.1571578 -2.1336198 0.32927835 128.0 +1.6694865 -3.1250041 0.46489641 128.0 +1.0398555 -1.974578 0.305509 128.0 +1.0245233 -1.9747515 0.3046644 128.0 +1.0047154 -1.9659694 0.30261326 128.0 +0.99976707 -1.9862883 0.30454376 128.0 +1.0443712 -2.1071515 0.32010844 128.0 +1.5107099 -3.0968857 0.45307207 128.0 +1.0562254 -2.1985688 0.33072624 128.0 +0 -0 0 128.0 +1.0572007 -2.2716782 0.33881024 128.0 +1.4057637 -3.0707378 0.44474676 128.0 +1.4471831 -3.2132852 0.46260393 128.0 +1.0682431 -2.4105761 0.35473689 128.0 +1.0367912 -2.3788569 0.34966934 128.0 +1.0815489 -2.5238907 0.36800915 128.0 +1.0156062 -2.4106157 0.35220313 128.0 +1.0023133 -2.4204712 0.35268575 128.0 +0.98557395 -2.4219775 0.35208246 128.0 +0.97363919 -2.4353547 0.35304773 128.0 +1.3058934 -3.326633 0.46863675 128.0 +1.2843866 -3.331804 0.4682748 128.0 +1.5345937 -4.0555286 0.56130105 128.0 +1.5055362 -4.0537004 0.5598532 128.0 +1.1151729 -3.0591893 0.43002665 128.0 +0 -0 0 128.0 +1.1710782 -3.3396542 0.46441379 128.0 +1.1425039 -3.3233051 0.46139738 128.0 +1.0714262 -3.1797192 0.4420923 128.0 +1.0217407 -3.0947857 0.4303886 128.0 +0.97100329 -3.002753 0.41784033 128.0 +0.93370563 -2.9490247 0.41023895 128.0 +0.78030342 -2.5175211 0.35461625 128.0 +0.74930865 -2.4709558 0.34810078 128.0 +0.71835166 -2.4222033 0.34134403 128.0 +0.71423841 -2.4637544 0.34604964 128.0 +0.6969468 -2.4604485 0.34508437 128.0 +0.67760873 -2.4493685 0.34315386 128.0 +0 -0 0 128.0 +0.80883497 -3.0709713 0.42025346 128.0 +0.78948349 -3.0739532 0.42001215 128.0 +2.0637798 -8.2533464 1.0683002 128.0 +2.000422 -8.213769 1.0617847 128.0 +0.549236 -2.3132668 0.32324553 128.0 +0.53882122 -2.3330381 0.3252967 128.0 +0 -0 0 128.0 +0.74417675 -3.4152107 0.4591049 128.0 +0.48819882 -2.3066235 0.3208324 128.0 +0.47722211 -2.3251359 0.32276291 128.0 +0.4619807 -2.3231516 0.32215962 128.0 +0.44472292 -2.3103442 0.32022911 128.0 +0.47383824 -2.546299 0.34906605 128.0 +0.46766517 -2.6019225 0.35558149 128.0 +0.4873881 -2.8111374 0.38104007 128.0 +0.47894153 -2.8669515 0.38755551 128.0 +0.46558464 -2.8963008 0.39081323 128.0 +1.337751 -8.6759396 1.1012394 128.0 +1.3033572 -8.8116474 1.1169249 128.0 +1.1570457 -8.1678162 1.0369295 128.0 +1.1079717 -8.1826315 1.0378947 128.0 +0 -0 0 128.0 +0.30277205 -2.456269 0.33506986 128.0 +0.28493664 -2.4344161 0.33217412 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.22048163 -2.3902597 0.32602063 128.0 +0.20403388 -2.3707969 0.32348683 128.0 +0.1898759 -2.3769522 0.32409012 128.0 +0.17521514 -2.3770826 0.32396945 128.0 +0.16135685 -2.389008 0.3252967 128.0 +0.23876226 -3.9020042 0.50941873 128.0 +0.21318798 -3.8736596 0.505799 128.0 +0.18989733 -3.88481 0.50700557 128.0 +0.11812375 -2.7562397 0.36957768 128.0 +0.14285839 -3.9047046 0.50917739 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.015123528 -2.4956598 0.33760366 128.0 +-0.00018604747 -2.4887569 0.33675906 128.0 +-0.015251162 -2.457936 0.33301872 128.0 +-0.031655706 -2.561028 0.34556702 128.0 +-0.047087081 -2.5458977 0.34375715 128.0 +-0.061512176 -2.4979265 0.33796564 128.0 +-0.076590069 -2.4895644 0.33700037 128.0 +-0.09138228 -2.4761517 0.33543184 128.0 +-0.10618545 -2.4666185 0.33434594 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6447259 -3.5311546 0.50772953 128.0 +-1.6574384 -3.5021563 0.50519574 128.0 +-1.6784656 -3.4910259 0.50507504 128.0 +-1.676316 -3.4325001 0.49855962 128.0 +-1.6792501 -3.3856936 0.49361268 128.0 +-1.6865884 -3.3487325 0.48999298 128.0 +-1.695798 -3.3162284 0.48697656 128.0 +-1.7151988 -3.3039989 0.48673525 128.0 +-1.7743357 -3.367171 0.49687043 128.0 +-1.8296268 -3.4209871 0.505799 128.0 +-1.8865913 -3.4759936 0.51496893 128.0 +-1.886323 -3.4252288 0.50953937 128.0 +-1.9092422 -3.4170558 0.51002198 128.0 +-1.9438864 -3.4294536 0.51340038 128.0 +-1.995091 -3.4699488 0.52076042 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.1757789 -8.3917398 1.2326345 128.0 +-5.1418962 -8.2234783 1.2130882 128.0 +-5.1736541 -8.1624298 1.2088652 128.0 +-5.2413507 -8.1580896 1.2128469 128.0 +-5.2772226 -8.1041489 1.2097098 128.0 +-5.2661448 -7.9796562 1.1963168 128.0 +-5.2200704 -7.8052773 1.1755639 128.0 +-5.2338867 -7.7229776 1.1682039 128.0 +-5.2671242 -7.6702609 1.1651875 128.0 +-5.3044491 -7.6239467 1.1631364 128.0 +-5.3436923 -7.580709 1.1615678 128.0 +-5.4414601 -7.6196699 1.1723062 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.4585447 -8.5649128 1.5851932 128.0 +-9.5582781 -8.5490656 1.5929152 128.0 +-9.5726089 -8.4567404 1.5867617 128.0 +-9.6018772 -8.3782673 1.583142 128.0 +-9.9200754 -8.5492306 1.6259751 128.0 +-10.502296 -8.9391994 1.7105554 128.0 +-10.360888 -8.7098017 1.6794261 128.0 +-9.9054241 -8.2237949 1.5990688 128.0 +-10.36335 -8.4970407 1.6631374 128.0 +-10.674534 -8.6431646 1.703678 128.0 +-10.878564 -8.6983786 1.7272061 128.0 +-10.918486 -8.6210089 1.7251549 128.0 +-10.690109 -8.3347511 1.6818392 128.0 +-10.40043 -8.0068216 1.6295948 128.0 +-10.453315 -7.945858 1.6301981 128.0 +-10.663853 -8.0031109 1.6548121 128.0 +-10.669684 -7.9056182 1.6482966 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.56966 -8.977457 2.3248184 128.0 +-16.642824 -8.8854351 2.327352 128.0 +-16.708452 -8.7891569 2.3289206 128.0 +-6.8321691 -3.5413611 0.96960306 128.0 +-16.441038 -8.3925667 2.2778828 128.0 +-6.8591475 -3.449228 0.96743125 128.0 +-17.111282 -8.4715881 2.3549826 128.0 +-6.9759154 -3.4013298 0.97756642 128.0 +-6.9805441 -3.3507323 0.97539461 128.0 +-7.0270033 -3.3201318 0.97889364 128.0 +-7.0895524 -3.2966185 0.98456448 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.5593343 -3.3471715 1.0391014 128.0 +-7.0727496 -3.0800374 0.97189558 128.0 +-7.0887775 -3.0354099 0.9715336 128.0 +-7.1228237 -2.9984021 0.97358477 128.0 +-7.551137 -3.124227 1.0275183 128.0 +-7.4901557 -3.0453188 1.0170212 128.0 +-7.3187838 -2.9234738 0.99216586 128.0 +-7.4262285 -2.9136682 1.0038695 128.0 +-7.1493802 -2.7545969 0.96550077 128.0 +-7.0965071 -2.6843469 0.95645154 128.0 +-7.0895772 -2.6321189 0.95343512 128.0 +-7.0962663 -2.5851722 0.95222855 128.0 +-7.0456209 -2.5178733 0.94366193 128.0 +-22.45948 -7.8685021 2.9267743 128.0 +-22.256659 -7.6444588 2.8945589 128.0 +-0 -0 0 128.0 +-28.399431 -9.3659611 3.6689332 128.0 +-27.728039 -8.9563084 3.575907 128.0 +-26.41004 -8.3520432 3.4009547 128.0 +-26.457945 -8.1889563 3.4005928 128.0 +-28.206484 -8.5407696 3.6163268 128.0 +-28.138424 -8.3320293 3.601124 128.0 +-29.314226 -8.4848566 3.743499 128.0 +-28.674141 -8.1092701 3.6561437 128.0 +-13.068814 -3.6101706 1.6822011 128.0 +-13.07826 -3.5265553 1.6806326 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.760542 -3.1901612 1.6329732 128.0 +-12.776982 -3.1110997 1.6326113 128.0 +-0 -0 0 128.0 +-13.096663 -3.0191624 1.667843 128.0 +-12.801085 -2.8684471 1.6287502 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-17.935087 -3.6730568 2.2594225 128.0 +-17.634985 -3.4990127 2.219485 128.0 +-17.654173 -3.3903663 2.2192438 128.0 +-13.512884 -2.5094683 1.7047639 128.0 +-17.728647 -3.1795986 2.2234669 128.0 +-18.018776 -3.1176205 2.2568886 128.0 +-18.107088 -3.0185859 2.2654552 128.0 +-17.975304 -2.8833802 2.2469947 128.0 +-13.426523 -2.0695989 1.6854589 128.0 +-13.476287 -1.992691 1.6900438 128.0 +-17.939819 -2.5399239 2.2364976 128.0 +-0 -0 0 128.0 +-18.876392 -2.4365711 2.3476224 128.0 +-23.61055 -2.9001913 2.9255676 128.0 +-19.913568 -2.3223197 2.4710541 128.0 +-19.881069 -2.1949713 2.4653833 128.0 +-19.791477 -2.0622485 2.4528351 128.0 +-23.406876 -2.2936633 2.8928697 128.0 +-24.81534 -2.2779737 3.0631163 128.0 +-18.57193 -1.5902905 2.2998424 128.0 +-18.567484 -1.4752055 2.2981532 128.0 +-19.936506 -1.4608473 2.4639354 128.0 +-19.970848 -1.3402183 2.4670725 128.0 +-23.90547 -1.4567512 2.9452348 128.0 +-23.979378 -1.3136232 2.953198 128.0 +-0 -0 0 128.0 +-22.821383 -0.96951759 2.8105819 128.0 +-22.792181 -0.82821006 2.8063591 128.0 +-22.750198 -0.68693852 2.800688 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-49.173691 8.8140945 5.5056729 128.0 +-49.334682 9.1557369 5.5297327 128.0 +-49.331268 9.4685822 5.5357203 128.0 +-49.405827 9.7975845 5.5506349 128.0 +-49.401264 10.11211 5.5569491 128.0 +-49.422905 10.432901 5.5664206 128.0 +-49.487148 10.764058 5.5808997 128.0 +-49.526875 11.091397 5.5928755 128.0 +-49.582844 11.42387 5.6069193 128.0 +-49.610481 11.751259 5.6180234 128.0 +-49.627266 12.077301 5.6281481 128.0 +-49.665066 12.409774 5.6408854 128.0 +-49.748791 12.755508 5.6590662 128.0 +-49.705158 13.069875 5.6630945 128.0 +-49.822708 13.42816 5.6856298 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-49.907993 14.441598 5.7244954 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-35.638706 13.72368 4.216907 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.648773 15.334766 4.1841378 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-57.558662 26.751484 6.9857183 128.0 +-57.432983 27.122831 6.9905081 128.0 +-57.145386 27.417103 6.9759202 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-56.904232 29.040356 7.0311155 128.0 +-56.815884 29.436068 7.0423288 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-21.56723 13.639976 2.8291807 128.0 +-0 0 0 128.0 +-20.790556 13.50879 2.7498169 128.0 +-21.57984 14.210683 2.8642359 128.0 +-0 0 0 128.0 +-20.19006 13.653643 2.7037661 128.0 +-0 0 0 128.0 +-21.498138 14.925913 2.9007063 128.0 +-27.757793 19.52528 3.7511744 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-20.222666 14.788885 2.7782311 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-41.104141 31.636026 5.715024 128.0 +-40.923363 31.89864 5.7169833 128.0 +-40.637917 32.078926 5.7045727 128.0 +-0 0 0 128.0 +-38.202206 30.924664 5.417273 128.0 +-0 0 0 128.0 +-36.947075 30.666742 5.293056 128.0 +-21.728539 18.261623 3.142935 128.0 +-0 0 0 128.0 +-22.451698 19.344439 3.2801075 128.0 +-37.653824 32.846966 5.5067616 128.0 +-37.318203 32.959599 5.4872746 128.0 +-36.681026 32.799675 5.4234786 128.0 +-36.532875 33.072826 5.4314256 128.0 +-0 0 0 128.0 +-15.677733 14.547215 2.37673 128.0 +-15.359224 14.428074 2.3423281 128.0 +-14.681884 13.962385 2.2533839 128.0 +-15.27411 14.705094 2.3564808 128.0 +-15.077523 14.69516 2.3402596 128.0 +-0 0 0 128.0 +-14.6513 14.634612 2.3023739 128.0 +-14.557734 14.720701 2.3018296 128.0 +-14.069798 14.403018 2.2395577 128.0 +-14.230346 14.747307 2.2788587 128.0 +-13.721211 14.395426 2.21245 128.0 +-13.665334 14.514086 2.2176754 128.0 +-31.642708 34.023155 5.1230059 128.0 +-14.124402 15.375395 2.3209903 128.0 +-14.037143 15.469869 2.3221877 128.0 +-15.778446 17.604689 2.6235313 128.0 +-13.355353 15.086461 2.241082 128.0 +-13.24094 15.143429 2.2374892 128.0 +-13.164665 15.24395 2.24032 128.0 +-0 0 0 128.0 +-17.006336 20.187796 2.9253101 128.0 +-27.300606 32.814018 4.7093115 128.0 +-16.736494 20.369625 2.9217176 128.0 +-0 0 0 128.0 +-15.059933 18.794724 2.672086 128.0 +-14.960365 18.907043 2.6749165 128.0 +-15.035639 19.243654 2.7089918 128.0 +-14.923351 19.34342 2.7100804 128.0 +-24.417732 32.054237 4.4474869 128.0 +-24.693823 32.832649 4.5337095 128.0 +-24.49605 32.989136 4.5344715 128.0 +-24.365459 33.237427 4.5478621 128.0 +-24.138914 33.355705 4.543725 128.0 +-0 0 0 128.0 +-22.338001 31.678562 4.279614 128.0 +-23.637268 33.961628 4.5660429 128.0 +-23.450953 34.138802 4.5703974 128.0 +-23.304073 34.375027 4.5826998 128.0 +-0 0 0 128.0 +-9.4657326 14.338724 1.9161143 128.0 +-9.4160957 14.455672 1.9238439 128.0 +-9.2772369 14.435406 1.9137193 128.0 +-9.2390585 14.571813 1.9240617 128.0 +-19.876472 31.777735 4.1393938 128.0 +-8.6529293 14.025068 1.8392543 128.0 +-9.1630621 15.057845 1.9648867 128.0 +-8.4730072 14.118264 1.8377302 128.0 +-9.0464478 15.285498 1.9796926 128.0 +-8.9900656 15.405108 1.9878576 128.0 +-8.3891878 14.580286 1.8767045 128.0 +-8.2608185 14.563181 1.868104 128.0 +-8.7874632 15.715472 2.0063651 128.0 +-17.765429 32.233513 4.0652552 128.0 +-8.6357021 15.898993 2.0159452 128.0 +-7.7775559 14.531032 1.8394721 128.0 +-17.079142 32.38448 4.0441351 128.0 +-7.6994829 14.819441 1.8634228 128.0 +-9.6863127 18.926279 2.3629041 128.0 +-8.7842579 17.42664 2.1717339 128.0 +-7.5429749 15.195494 1.8923813 128.0 +-9.6108818 19.663111 2.4313812 128.0 +-9.8348885 20.438301 2.5184748 128.0 +-9.29737 19.628645 2.4130917 128.0 +-7.7293577 16.580614 2.0379364 128.0 +-7.6797009 16.741571 2.0516536 128.0 +-17.059626 37.798691 4.5761676 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-16.056255 37.396572 4.4915781 128.0 +-14.200938 33.643406 4.033793 128.0 +-0 0 0 128.0 +-13.796021 33.837234 4.0364056 128.0 +-13.564851 33.863113 4.0295467 128.0 +-13.385934 34.019711 4.0382562 128.0 +-0 0 0 128.0 +-12.974152 34.199074 4.0403247 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.664577 14.695354 1.7229844 128.0 +-4.4061985 14.182604 1.6609304 128.0 +-4.2404523 13.950678 1.6313186 128.0 +-0 0 0 128.0 +-4.0556202 13.955846 1.6260929 128.0 +-4.2881856 15.101185 1.7536849 128.0 +-3.8941514 14.040963 1.6302299 128.0 +-3.7980516 14.028132 1.6260929 128.0 +-3.724601 14.099227 1.6315362 128.0 +-3.6558766 14.191123 1.6393747 128.0 +-3.6801007 14.656785 1.6894535 128.0 +-0 0 0 128.0 +-9.303525 39.074623 4.4334431 128.0 +-3.2856467 14.186506 1.62925 128.0 +-3.2371895 14.37805 1.6485195 128.0 +-3.0813582 14.088834 1.6138998 128.0 +-3.0398595 14.319454 1.6376328 128.0 +-2.9918361 14.53159 1.6592973 128.0 +-2.9887812 14.981528 1.7075254 128.0 +-2.8687105 14.854158 1.6913042 128.0 +-3.6908813 19.761164 2.236074 128.0 +-3.4361041 19.043877 2.1537707 128.0 +-3.3203819 19.071457 2.1545327 128.0 +-0 0 0 128.0 +-3.1623304 19.582792 2.2068977 128.0 +-4.935914 31.8029 3.5591333 128.0 +-4.7305779 31.764748 3.5516214 128.0 +-3.940701 27.623581 3.0903525 128.0 +-4.3322234 31.760326 3.5449805 128.0 +-4.1397023 31.805038 3.547049 128.0 +-4.0102501 32.360584 3.6056194 128.0 +-3.8610027 32.804157 3.6518877 128.0 +-3.5970829 32.266083 3.5900514 128.0 +-3.432966 32.609829 3.6255419 128.0 +-0 0 0 128.0 +-2.9891362 32.182316 3.5741568 128.0 +-2.8034632 32.33672 3.5891805 128.0 +-2.604996 32.353313 3.5891805 128.0 +-2.4059148 32.361748 3.5884185 128.0 +-0 0 0 128.0 +-2.1559336 34.764042 3.8490458 128.0 +-1.9382043 34.698208 3.8404453 128.0 +-1.7269912 34.744198 3.8442554 128.0 +-1.5126907 34.729309 3.8415339 128.0 +-1.3197895 35.278328 3.9007576 128.0 +-1.1254904 35.995171 3.9784884 128.0 +-0.90648061 36.075928 3.9866533 128.0 +-0.68901455 36.286545 4.0091887 128.0 +-0.43817535 34.099369 3.7692463 128.0 +-0.22248633 33.142174 3.6641898 128.0 +-0.019068202 33.045498 3.6535208 128.0 +0.18345843 33.002251 3.6488395 128.0 +0.38596457 33.001495 3.6489484 128.0 +0.5896374 33.065098 3.6562424 128.0 +0.79403377 33.124458 3.6632099 128.0 +0.99101609 32.911301 3.6404567 128.0 +1.19949 33.0854 3.6602705 128.0 +1.4077799 33.202557 3.6739876 128.0 +0 0 0 128.0 +2.2460692 41.062817 4.5382819 128.0 +2.5032361 41.134586 4.5477533 128.0 +2.7641592 41.246399 4.5617971 128.0 +0 0 0 128.0 +2.1728153 27.379786 3.0424509 128.0 +2.3638132 27.635338 3.0720627 128.0 +0 0 0 128.0 +3.3655202 34.374214 3.8170388 128.0 +2.0785728 19.964161 2.2326992 128.0 +2.2037561 19.975733 2.2354209 128.0 +3.8043902 32.647648 3.6341424 128.0 +2.5269549 20.584562 2.3057489 128.0 +4.1125541 31.883734 3.5552139 128.0 +4.3011851 31.806675 3.5495529 128.0 +4.5312161 32.026733 3.5768785 128.0 +4.7073045 31.860653 3.5616372 128.0 +0 0 0 128.0 +5.069294 31.621851 3.5418234 128.0 +5.186286 31.128315 3.4905469 128.0 +2.4631982 14.243241 1.6174924 128.0 +5.5726233 31.088747 3.4934864 128.0 +2.6503141 14.27938 1.6250043 128.0 +2.8862779 15.03603 1.7112268 128.0 +6.2804308 31.669306 3.5703466 128.0 +3.008981 14.698554 1.677587 128.0 +3.0387526 14.393863 1.6455802 128.0 +0 0 0 128.0 +8.6171751 38.478222 4.3528814 128.0 +8.8408365 38.371346 4.3468938 128.0 +3.5400052 14.943693 1.7163436 128.0 +9.1848259 37.741295 4.2884326 128.0 +3.8744485 15.504775 1.784712 128.0 +3.482909 13.582811 1.5701354 128.0 +3.5328183 13.434283 1.5557649 128.0 +10.146045 37.644653 4.304327 128.0 +10.343237 37.459995 4.2905006 128.0 +10.789514 38.162033 4.3777032 128.0 +4.0946469 14.149461 1.6476486 128.0 +11.392443 38.484276 4.4299593 128.0 +4.3742456 14.449223 1.6878204 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +8.0682592 18.851473 2.2801652 128.0 +0 0 0 128.0 +8.3170919 18.791948 2.2850642 128.0 +0 0 0 128.0 +24.775953 54.175301 6.5586333 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +33.505817 50.881725 6.7065835 128.0 +0 0 0 128.0 +0 0 0 128.0 +33.736034 49.23381 6.5708265 128.0 +34.077744 49.083858 6.5785561 128.0 +0 0 0 128.0 +0 0 0 128.0 +14.9857 20.757931 2.8383255 128.0 +14.545374 19.889671 2.7330513 128.0 +29.440413 39.744041 5.4512396 128.0 +29.758295 39.662045 5.464848 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.902716 38.919674 5.5458446 128.0 +32.140285 38.722424 5.5457358 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +36.360596 41.681709 6.0921388 128.0 +0 0 0 128.0 +0 0 0 128.0 +18.665415 20.617914 3.0803366 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +18.986423 19.721273 3.0325441 128.0 +0 0 0 128.0 +0 0 0 128.0 +38.97448 39.019859 6.0743933 128.0 +39.519913 39.083344 6.1216416 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +43.907558 37.919525 6.3881478 128.0 +44.05999 37.581665 6.3767166 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +23.905628 15.993129 3.1844134 128.0 +24.02405 15.859838 3.187135 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +23.440912 14.462457 3.0509427 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +25.851875 14.455627 3.2782567 128.0 +24.625511 13.572187 3.1138678 128.0 +0 0 0 128.0 +28.17663 15.081618 3.5345292 128.0 +28.186867 14.865319 3.5244048 128.0 +28.177872 14.640298 3.5121026 128.0 +28.183992 14.424554 3.5018692 128.0 +28.147699 14.188704 3.4866278 128.0 +28.183477 13.990531 3.4804225 128.0 +28.325054 13.844839 3.4872811 128.0 +28.738207 13.828973 3.5272353 128.0 +28.930323 13.703444 3.5402992 128.0 +30.741903 14.331277 3.7491059 128.0 +30.824741 14.140306 3.7485616 128.0 +0 0 0 128.0 +30.916901 13.725881 3.7390902 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.029688 13.09765 3.7230866 128.0 +31.513462 13.074626 3.7709882 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +32.70829 -0.58327883 3.6171591 128.0 +32.466583 -0.77827156 3.59114 128.0 +32.109459 -0.96688098 3.5526011 128.0 +33.016853 -1.1970057 3.6527586 128.0 +0 -0 0 128.0 +35.59211 -1.7279104 3.93701 128.0 +0 -0 0 128.0 +18.598263 -1.1320111 2.0750599 128.0 +18.599892 -1.2467047 2.0760398 128.0 +25.432592 -1.8613571 2.8272212 128.0 +25.434566 -2.0184743 2.8287454 128.0 +24.81159 -2.1223223 2.7616832 128.0 +25.036667 -2.2964013 2.7879202 128.0 +0 -0 0 128.0 +27.477398 -2.8606648 3.0599785 128.0 +27.436604 -3.0267024 3.0574746 128.0 +18.611103 -2.1689007 2.0864909 128.0 +27.405289 -3.3641326 3.0583456 128.0 +19.366869 -2.4982116 2.1730402 128.0 +19.372849 -2.6199279 2.1754353 128.0 +25.299345 -3.579494 2.8327734 128.0 +18.38044 -2.7158179 2.0692899 128.0 +27.366814 -4.2151546 3.066946 128.0 +18.287819 -2.9318869 2.0628669 128.0 +20.294304 -3.3813727 2.287677 128.0 +19.009592 -3.2873466 2.1472387 128.0 +18.983192 -3.4028733 2.1465855 128.0 +19.108561 -3.5464942 2.1629155 128.0 +20.102705 -3.8587275 2.2762458 128.0 +18.208466 -3.611145 2.0674393 128.0 +18.194729 -3.7245963 2.068419 128.0 +18.193903 -3.840889 2.0709231 128.0 +18.192335 -3.9573116 2.073427 128.0 +37.428646 -8.3821344 4.2350874 128.0 +37.12756 -8.5542784 4.207109 128.0 +37.866585 -8.969573 4.2962708 128.0 +0 -0 0 128.0 +37.647579 -9.407073 4.2842956 128.0 +31.500662 -8.076869 3.5959301 128.0 +31.29669 -8.2295561 3.5785115 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9643154 -2.2520697 0.94088483 128.0 +7.9551215 -2.3022768 0.9414292 128.0 +0 -0 0 128.0 +25.779713 -7.8040252 2.9843161 128.0 +32.002747 -9.9025221 3.7032728 128.0 +0 -0 0 128.0 +7.9687304 -2.5736232 0.95155382 128.0 +7.9839435 -2.6327417 0.95514643 128.0 +0 -0 0 128.0 +24.935337 -8.5623159 2.9218266 128.0 +26.873146 -9.4124146 3.152842 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.259144 -7.5173793 2.4010074 128.0 +25.044046 -9.4679956 2.9666796 128.0 +20.149599 -7.7593517 2.3991566 128.0 +19.664797 -7.711555 2.3477714 128.0 +19.753744 -7.8866186 2.3638837 128.0 +0 -0 0 128.0 +19.547079 -8.0836086 2.3510375 128.0 +19.444885 -8.1814222 2.3448322 128.0 +20.009361 -8.563798 2.4180994 128.0 +0 -0 0 128.0 +19.555521 -8.6550217 2.3765123 128.0 +19.773098 -8.896801 2.4090636 128.0 +3.69098 -1.6884003 0.47896269 128.0 +19.644402 -9.1303988 2.4068861 128.0 +19.588009 -9.250762 2.4068861 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +5.1218171 -2.6539986 0.66621375 128.0 +5.1071959 -2.686301 0.66643149 128.0 +5.0669394 -2.7049494 0.66349202 128.0 +5.0790906 -2.7516127 0.66708463 128.0 +3.4409103 -1.8916698 0.46448341 128.0 +3.9275801 -2.190644 0.52697301 128.0 +3.9850113 -2.2548378 0.53590006 128.0 +3.7564168 -2.1560519 0.50879222 128.0 +4.8943543 -2.8491132 0.65467381 128.0 +4.8690758 -2.8745432 0.65369403 128.0 +4.7941999 -2.8701587 0.64639997 128.0 +4.7391081 -2.8768275 0.64160979 128.0 +4.6875033 -2.8850129 0.63725513 128.0 +4.6604357 -2.907933 0.63605762 128.0 +4.6618285 -2.9486945 0.63856155 128.0 +3.8486221 -2.4675987 0.53513801 128.0 +3.9401045 -2.5604908 0.54907298 128.0 +3.8354857 -2.5261221 0.53742421 128.0 +3.7934542 -2.5319517 0.53394049 128.0 +3.8824253 -2.6258996 0.54776657 128.0 +3.8006384 -2.6047213 0.5390572 128.0 +3.7870343 -2.6296933 0.53938383 128.0 +3.1756659 -2.2342446 0.45969325 128.0 +4.5203018 -3.2217011 0.64237189 128.0 +4.3126545 -3.1138074 0.61700588 128.0 +3.8168433 -2.791666 0.55233896 128.0 +3.7525139 -2.7801235 0.54591584 128.0 +4.2084908 -3.1580603 0.61069161 128.0 +4.1914086 -3.1856279 0.61101824 128.0 +4.1899014 -3.2252307 0.61352217 128.0 +4.174737 -3.2545455 0.61417538 128.0 +4.2350554 -3.3435388 0.62538862 128.0 +4.246295 -3.3949099 0.62985218 128.0 +4.0044093 -3.2420247 0.59871626 128.0 +3.9329326 -3.224313 0.5914222 128.0 +3.8480575 -3.1944199 0.58216852 128.0 +3.6602044 -3.0766289 0.55810893 128.0 +3.5693371 -3.0378292 0.54776657 128.0 +3.6131368 -3.1135275 0.55680251 128.0 +3.3699851 -2.9402554 0.52425134 128.0 +2.542733 -2.2462466 0.40602189 128.0 +2.5363126 -2.2684321 0.40711057 128.0 +2.5186613 -2.2806163 0.40656623 128.0 +4.01792 -3.6829698 0.63137633 128.0 +2.5072448 -2.3269033 0.40907016 128.0 +3.5123417 -3.2998269 0.56224585 128.0 +3.5107572 -3.3391266 0.56507641 128.0 +2.4331958 -2.343014 0.4043889 128.0 +2.298465 -2.2406466 0.38599038 128.0 +2.3059018 -2.2756522 0.38925639 128.0 +2.3305779 -2.3283951 0.39524406 128.0 +2.3043642 -2.330636 0.39339334 128.0 +2.2705703 -2.3248215 0.39034507 128.0 +2.8326366 -2.9359992 0.48124892 128.0 +2.9304798 -3.0749266 0.49964741 128.0 +2.9108758 -3.0921259 0.49953854 128.0 +2.937206 -3.1586981 0.5068326 128.0 +2.9735873 -3.2374203 0.51586854 128.0 +2.0578773 -2.2684226 0.36987808 128.0 +2.0399389 -2.2765653 0.36922488 128.0 +2.0213194 -2.2838295 0.36846283 128.0 +2.0000703 -2.2879574 0.36726528 128.0 +1.9742987 -2.2866447 0.36530569 128.0 +1.9370072 -2.2714889 0.36138648 128.0 +2.8568132 -3.3917646 0.52011436 128.0 +2.8531139 -3.429862 0.52305377 128.0 +1.8399649 -2.2399383 0.35191506 128.0 +1.8499875 -2.2805181 0.35605201 128.0 +3.8710866 -4.8315692 0.71248215 128.0 +3.2917712 -4.1606693 0.61548173 128.0 +1.837687 -2.3525658 0.36138648 128.0 +3.2277141 -4.1842232 0.61319554 128.0 +2.5845418 -3.3934283 0.501607 128.0 +2.7459135 -3.651525 0.53481138 128.0 +2.7199006 -3.6635165 0.53415823 128.0 +1.8369473 -2.5064392 0.37477711 128.0 +1.8471763 -2.5530963 0.37956724 128.0 +1.4015644 -1.9625921 0.29857028 128.0 +2.4028928 -3.4082694 0.4911558 128.0 +2.4131677 -3.467823 0.49714348 128.0 +2.3957841 -3.4883001 0.49790552 128.0 +2.7904644 -4.1167397 0.57912022 128.0 +2.3494804 -3.5124803 0.49725235 128.0 +1.606596 -2.4342756 0.35387465 128.0 +1.3279381 -2.0392871 0.30096537 128.0 +1.3218497 -2.0574317 0.30227175 128.0 +1.3001513 -2.0512319 0.30042103 128.0 +1.3160069 -2.1046803 0.30629984 128.0 +2.6361797 -4.2733684 0.58434582 128.0 +2.6099093 -4.289463 0.58434582 128.0 +1.7297647 -2.8828588 0.40264702 128.0 +2.2127838 -3.7394602 0.51031637 128.0 +0 -0 0 128.0 +1.2232703 -2.1267064 0.3031427 128.0 +0 -0 0 128.0 +1.1800995 -2.1111908 0.29933235 128.0 +1.1464906 -2.0809572 0.29465109 128.0 +1.1374962 -2.0949407 0.295522 128.0 +1.118522 -2.0904877 0.29410675 128.0 +0 -0 0 128.0 +1.06941 -2.0590694 0.28855455 128.0 +1.0431687 -2.0390458 0.28528854 128.0 +1.0342174 -2.0525093 0.28615946 128.0 +1.0631526 -2.1425123 0.29639295 128.0 +1.5402156 -3.1519198 0.41865045 128.0 +1.0372117 -2.1562932 0.29650182 128.0 +1.5056762 -3.1795669 0.41973913 128.0 +1.0824964 -2.3229232 0.31511804 128.0 +1.0806575 -2.3566272 0.31838405 128.0 +1.457528 -3.2302999 0.42256966 128.0 +1.0778756 -2.428766 0.3254604 128.0 +0 -0 0 128.0 +1.0503428 -2.4472909 0.32611361 128.0 +1.3546189 -3.2101481 0.41603765 128.0 +1.3448009 -3.2422717 0.41886818 128.0 +1.3361408 -3.2780766 0.42213419 128.0 +1.3237643 -3.3055916 0.42442039 128.0 +1.299089 -3.3025515 0.423114 128.0 +1.278442 -3.3095334 0.42300513 128.0 +1.5218604 -4.0125198 0.50443757 128.0 +1.4857638 -3.9910405 0.50084496 128.0 +0 -0 0 128.0 +1.1468567 -3.2004843 0.40678397 128.0 +1.1341208 -3.2271545 0.40907016 128.0 +1.1259595 -3.2678852 0.41298938 128.0 +0 -0 0 128.0 +1.0317321 -3.1181962 0.39415541 128.0 +0.97364455 -3.0043771 0.38032931 128.0 +0.9181971 -2.8937566 0.36693868 128.0 +0.8644402 -2.7835226 0.35365692 128.0 +0.80484396 -2.6489654 0.33765349 128.0 +0.94607788 -3.1836321 0.39818347 128.0 +0.74786294 -2.5746412 0.3280732 128.0 +0.89091629 -3.1385839 0.39176032 128.0 +0.83178771 -3.0003076 0.37543032 128.0 +2.2981727 -8.4889183 0.99760449 128.0 +0.66693252 -2.5259049 0.32056141 128.0 +0.78683758 -3.0555398 0.38000271 128.0 +0.77848482 -3.1017675 0.384684 128.0 +2.0827749 -8.5166903 0.99466509 128.0 +0.58609223 -2.4631827 0.31174317 128.0 +0.56782699 -2.4531748 0.31021905 128.0 +0.9639551 -4.2826977 0.5152154 128.0 +0.73756319 -3.3737595 0.41266277 128.0 +0.72283548 -3.4064207 0.41581991 128.0 +0.57521528 -2.7954578 0.34701604 128.0 +0.55785733 -2.7979598 0.34690717 128.0 +0.54482633 -2.8228025 0.34930226 128.0 +0.81661934 -4.3739057 0.52174741 128.0 +1.4867004 -8.2409906 0.95155382 128.0 +0.51085085 -2.9361608 0.36084214 128.0 +0.49414137 -2.9470828 0.36171308 128.0 +1.3788197 -8.539772 0.9818188 128.0 +1.2812643 -8.2573128 0.9495942 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.1395372 -8.3563223 0.95808583 128.0 +1.0851628 -8.3394995 0.95547301 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.26870921 -2.4136572 0.30042103 128.0 +0.25555959 -2.431078 0.30216289 128.0 +0 -0 0 128.0 +0.35075349 -3.7801521 0.45022184 128.0 +0.20484301 -2.3670366 0.29465109 128.0 +0.19215053 -2.3910384 0.29715502 128.0 +0.1788763 -2.4110076 0.29922348 128.0 +0.16272672 -2.3922246 0.29704615 128.0 +0.15050687 -2.4328642 0.30140084 128.0 +0.13635258 -2.4476368 0.30292496 128.0 +0.12883446 -2.5993376 0.31947273 128.0 +0.11058958 -2.5474441 0.31370279 128.0 +0.096109055 -2.5788689 0.31707767 128.0 +0.079817437 -2.5645065 0.31544465 128.0 +0 -0 0 128.0 +0.050078202 -2.6567297 0.3254604 128.0 +0.031807121 -2.5039148 0.3086949 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +-0.014061082 -2.4633205 0.30423138 128.0 +-0.029140629 -2.4602058 0.30390477 128.0 +-0.043226041 -2.4033284 0.29769936 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6550375 -3.5036924 0.45882234 128.0 +-1.6730647 -3.4863014 0.4579514 128.0 +-1.6778764 -3.4420135 0.45381445 128.0 +-1.6725072 -3.3781996 0.44728243 128.0 +-1.6815971 -3.3447809 0.4444519 128.0 +-1.6948589 -3.3202331 0.44271004 128.0 +-1.7106267 -3.3009448 0.44162136 128.0 +-1.7535205 -3.3334973 0.44695583 128.0 +-1.8464936 -3.4586031 0.4638302 128.0 +-1.8686273 -3.4489563 0.46404794 128.0 +-1.886403 -3.4313276 0.46328586 128.0 +-1.9117789 -3.4275019 0.46426567 128.0 +-1.9401156 -3.4286852 0.46589866 128.0 +-4.8411069 -8.4354916 1.0996127 128.0 +-0 -0 0 128.0 +-4.9841776 -8.4430761 1.1082132 128.0 +-0 -0 0 128.0 +-5.0889592 -8.3838263 1.1085398 128.0 +-0 -0 0 128.0 +-5.13095 -8.2237558 1.0960201 128.0 +-5.1722813 -8.1778355 1.0941694 128.0 +-5.1762257 -8.0739746 1.0848068 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-5.2312651 -7.838418 1.0665172 128.0 +-5.2725801 -7.7962909 1.0652108 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.6962147 -8.7980089 1.4683448 128.0 +-9.7411327 -8.7303867 1.4670385 128.0 +-9.8548059 -8.7238245 1.4758567 128.0 +-10.066046 -8.8012581 1.4988276 128.0 +-10.314712 -8.907609 1.5270241 128.0 +-9.9857302 -8.5170832 1.4718286 128.0 +-0 -0 0 128.0 +-9.8174562 -8.1675653 1.433072 128.0 +-10.009475 -8.2239218 1.4532124 128.0 +-10.589272 -8.5920258 1.5278951 128.0 +-10.533966 -8.4404869 1.5127625 128.0 +-10.56607 -8.3602724 1.5100409 128.0 +-10.347713 -8.0847425 1.4725907 128.0 +-10.406569 -8.0283842 1.4738971 128.0 +-0 -0 0 128.0 +-10.412947 -7.8313608 1.4613774 128.0 +-11.048991 -8.2040882 1.5416123 128.0 +-0 -0 0 128.0 +-10.705117 -7.7467651 1.4816266 128.0 +-0 -0 0 128.0 +-10.815624 -7.6262708 1.483804 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.608984 -8.8898191 2.0975955 128.0 +-16.653545 -8.7826395 2.0963979 128.0 +-16.699183 -8.6761656 2.095418 128.0 +-16.449472 -8.4186459 2.0581856 128.0 +-16.325064 -8.2289581 2.0366299 128.0 +-16.528393 -8.2046595 2.0553551 128.0 +-6.96982 -3.4064045 0.88405633 128.0 +-6.9825282 -3.359695 0.88307655 128.0 +-6.9850445 -3.3082767 0.88089919 128.0 +-7.0989118 -3.3090374 0.89222133 128.0 +-7.1516089 -3.2803385 0.89614058 128.0 +-7.1951594 -3.2470276 0.89897108 128.0 +-7.0759406 -3.1411026 0.88231444 128.0 +-7.0868821 -3.0940461 0.88133466 128.0 +-7.17698 -3.0810943 0.8898263 128.0 +-7.4540086 -3.1460137 0.92052674 128.0 +-7.4373631 -3.0853605 0.91628093 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.629528 -2.947772 0.9302159 128.0 +-21.321993 -8.0887947 2.5319743 128.0 +-22.824463 -8.4989719 2.7018065 128.0 +-21.939705 -8.0165663 2.592613 128.0 +-22.295406 -7.9918199 2.6283214 128.0 +-22.416235 -7.8802538 2.6367042 128.0 +-7.014853 -2.41747 0.84704161 128.0 +-22.50654 -7.6029878 2.6361599 128.0 +-22.559374 -7.4669337 2.6369219 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-26.728428 -8.3042564 3.099715 128.0 +-28.244497 -8.5856304 3.2674789 128.0 +-28.297598 -8.4124479 3.2675877 128.0 +-0 -0 0 128.0 +-28.622461 -8.1281052 3.2930624 128.0 +-29.21492 -8.1029749 3.35479 128.0 +-13.031208 -3.5281098 1.5129802 128.0 +-0 -0 0 128.0 +-33.868992 -8.7258024 3.8648314 128.0 +-12.775781 -3.2077558 1.4770542 128.0 +-12.801016 -3.1307218 1.4777074 128.0 +-12.83449 -3.0555711 1.4793404 128.0 +-12.914976 -2.9911189 1.4863079 128.0 +-0 -0 0 128.0 +-18.333494 -4.0098276 2.089757 128.0 +-34.431213 -7.3099308 3.8893263 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-25.295584 -4.8854961 2.855962 128.0 +-17.893822 -3.3420711 2.0280294 128.0 +-17.985403 -3.2451003 2.0359766 128.0 +-18.167543 -3.1629896 2.0540485 128.0 +-18.122887 -3.0407629 2.0469723 128.0 +-19.576904 -3.1613796 2.2062445 128.0 +-19.528154 -3.030678 2.1987326 128.0 +-17.971279 -2.6762056 2.024328 128.0 +-18.832695 -2.6864908 2.1178446 128.0 +-18.833067 -2.5687351 2.1161027 128.0 +-23.69437 -3.083926 2.6512923 128.0 +-23.818403 -2.9515643 2.662941 128.0 +-19.646217 -2.3121715 2.2009101 128.0 +-19.697577 -2.1957667 2.2050469 128.0 +-23.499952 -2.4738216 2.6223338 128.0 +-18.485535 -1.8312622 2.0688546 128.0 +-18.616188 -1.7289281 2.0820274 128.0 +-19.936666 -1.7282758 2.2260582 128.0 +-19.937979 -1.605196 2.2250786 128.0 +-19.986115 -1.4857033 2.2293243 128.0 +-23.639547 -1.6115731 2.62941 128.0 +-23.014015 -1.4271072 2.5597353 128.0 +-22.887356 -1.2783275 2.5449293 128.0 +-22.882856 -1.137277 2.543623 128.0 +-22.843719 -0.99485862 2.538615 128.0 +-0 -0 0 128.0 +-22.813471 -0.71318197 2.5341516 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-49.16497 8.8685169 4.8715057 128.0 +-49.35228 9.2153358 4.8954048 128.0 +-49.32901 9.5245867 4.8987775 128.0 +-49.394581 9.8520088 4.9111123 128.0 +-49.466763 10.182399 4.9243145 128.0 +-49.421852 10.489655 4.9261456 128.0 +-49.50922 10.826091 4.9412751 128.0 +-49.536053 11.150875 4.950623 128.0 +-49.625729 11.491442 4.9664268 128.0 +-49.627872 11.813242 4.9737511 128.0 +-49.66951 12.145668 4.9852185 128.0 +-49.750443 12.48947 5.0008302 128.0 +-49.766369 12.818583 5.0101776 128.0 +-49.730083 13.135141 5.014514 128.0 +-49.74847 13.467083 5.0245361 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.923733 14.486938 3.695251 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.66758 15.134483 3.6969855 128.0 +-0 0 0 128.0 +-57.826153 26.094934 6.1768923 128.0 +-35.176559 16.133978 3.7814994 128.0 +-0 0 0 128.0 +-56.627186 26.819172 6.100955 128.0 +-56.485779 27.177778 6.1035566 128.0 +-56.537048 27.630938 6.1271667 128.0 +-0 0 0 128.0 +-56.269264 28.360733 6.1353579 128.0 +-56.171276 28.744911 6.1437416 128.0 +-55.995609 29.089949 6.1439347 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-21.886375 14.254247 2.5634215 128.0 +-21.158049 13.965493 2.4891224 128.0 +-21.940622 14.676162 2.5903077 128.0 +-21.872404 14.82559 2.5929096 128.0 +-20.085985 13.795231 2.3938155 128.0 +-21.743561 15.130976 2.5993662 128.0 +-19.964806 14.075665 2.399694 128.0 +-19.902361 14.21526 2.402585 128.0 +-20.117151 14.555927 2.4387226 128.0 +-20.399944 14.952129 2.4834368 128.0 +-20.731363 15.391502 2.5345113 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-39.839108 31.124235 4.9293256 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-39.382446 32.354786 4.9693179 128.0 +-36.927437 30.719221 4.6852283 128.0 +-0 0 0 128.0 +-35.395061 30.186991 4.538558 128.0 +-23.653843 20.42491 3.0603857 128.0 +-22.425817 19.60593 2.9186299 128.0 +-36.930668 32.689892 4.8097343 128.0 +-21.056126 18.869253 2.7720559 128.0 +-36.542213 33.154671 4.811758 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-15.276191 14.558417 2.0777321 128.0 +-15.188724 14.65395 2.078021 128.0 +-14.453432 14.116734 1.9907128 128.0 +-32.069229 31.711004 4.4011388 128.0 +-0 0 0 128.0 +-14.223998 14.413682 1.995242 128.0 +-14.077626 14.441527 1.9872435 128.0 +-13.975633 14.51401 1.9854126 128.0 +-29.834373 31.368567 4.2259436 128.0 +-29.701309 31.614876 4.2344241 128.0 +-14.273466 15.380214 2.0661681 128.0 +-14.081979 15.361844 2.0522912 128.0 +-0 0 0 128.0 +-13.483031 15.07571 1.9928328 128.0 +-15.726168 17.802759 2.3344536 128.0 +-27.255968 31.240601 4.0486283 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-27.43457 32.639156 4.1627269 128.0 +-0 0 0 128.0 +-15.320852 18.687443 2.374253 128.0 +-16.569324 20.465256 2.584044 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-24.663654 32.040752 3.9493706 128.0 +-0 0 0 128.0 +-23.329515 31.089464 3.7978816 128.0 +-23.014484 31.064871 3.777741 128.0 +-23.03849 31.499548 3.8130114 128.0 +-22.802248 31.581406 3.8059766 128.0 +-22.582043 31.684248 3.80164 128.0 +-0 0 0 128.0 +-23.901943 34.422379 4.0919938 128.0 +-23.752174 34.658707 4.1025939 128.0 +-0 0 0 128.0 +-23.323412 34.945091 4.1023049 128.0 +-21.951807 33.331055 3.8986814 128.0 +-0 0 0 128.0 +-9.2569675 14.436951 1.6950589 128.0 +-9.212369 14.563299 1.7030574 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-8.5734663 14.122035 1.634155 128.0 +-8.4902325 14.180353 1.6348296 128.0 +-19.084608 32.326332 3.6691356 128.0 +-8.4537792 14.520896 1.6614269 128.0 +-8.8337011 15.390021 1.7526864 128.0 +-8.7704716 15.499377 1.7588539 128.0 +-8.7610149 15.706766 1.7759109 128.0 +-8.6956406 15.816923 1.7821747 128.0 +-7.9275703 14.631601 1.6458155 128.0 +-17.453516 32.693626 3.6227829 128.0 +-17.230806 32.758698 3.6182537 128.0 +-7.7530689 14.960632 1.6660526 128.0 +-7.6733437 15.031859 1.6686544 128.0 +-7.5832005 15.083106 1.6691363 128.0 +-9.4978809 19.184553 2.1072204 128.0 +-9.591054 19.67552 2.153862 128.0 +-9.4270878 19.64426 2.1442251 128.0 +-7.7140465 16.33028 1.7832347 128.0 +-16.076323 34.583755 3.727052 128.0 +-0 0 0 128.0 +-17.820328 39.60006 4.2389531 128.0 +-0 0 0 128.0 +-16.290606 37.421021 3.9860864 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-8.4513168 20.431736 2.1753519 128.0 +-8.3261652 20.484129 2.1754482 128.0 +-13.250509 33.183208 3.4940367 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-11.750396 37.966431 3.8824918 128.0 +-4.3772373 14.454158 1.4968323 128.0 +-4.3031592 14.530373 1.5018433 128.0 +-4.0744634 14.074622 1.4532744 128.0 +-3.9376521 13.921208 1.4353501 128.0 +-3.8807735 14.048727 1.4457577 128.0 +-3.7983849 14.08669 1.4472033 128.0 +-3.5594802 13.530237 1.3891903 128.0 +-3.6408098 14.192983 1.4532744 128.0 +-3.6535623 14.614833 1.4931703 128.0 +-3.7671983 15.47256 1.5764313 128.0 +-3.644655 15.379159 1.5648673 128.0 +-3.2949762 14.293576 1.4548162 128.0 +-3.2100387 14.326152 1.456069 128.0 +-3.2727253 15.038067 1.5246823 128.0 +-3.1082206 14.716035 1.4908575 128.0 +-2.9196448 14.255071 1.443445 128.0 +-3.8652444 19.481417 1.9575624 128.0 +-3.7627125 19.593719 1.9663318 128.0 +-5.0660415 27.285955 2.7215595 128.0 +-3.5005553 19.518892 1.9545752 128.0 +-5.5263901 31.94595 3.1735203 128.0 +-5.3139086 31.881077 3.1638837 128.0 +-4.3977213 27.419754 2.723294 128.0 +-4.5240064 29.358614 2.9106314 128.0 +-4.7148318 31.896685 3.1563671 128.0 +-4.1746869 29.491749 2.9184372 128.0 +-4.2970395 31.7598 3.1375756 128.0 +-0 0 0 128.0 +-3.9916432 32.499714 3.2048397 128.0 +-3.4792821 29.839401 2.9432034 128.0 +-3.5998354 32.612534 3.2112963 128.0 +-3.4004858 32.64193 3.2120671 128.0 +-3.2155609 32.819687 3.2273896 128.0 +-3.0127585 32.823929 3.225944 128.0 +-0 0 0 128.0 +-2.8344634 35.689247 3.5008788 128.0 +-2.6625221 36.349228 3.5633247 128.0 +-2.3870988 35.58429 3.4875803 128.0 +-0 0 0 128.0 +-1.9510067 35.624821 3.4889293 128.0 +-1.6940806 34.84774 3.4125104 128.0 +-1.4914089 35.12101 3.4380476 128.0 +-1.2869631 35.434868 3.4676323 128.0 +-1.0708641 35.48687 3.4719687 128.0 +-0.86189002 35.858952 3.5074317 128.0 +-0.60486859 33.793579 3.3069885 128.0 +-0.40331617 34.292301 3.3549793 128.0 +-0.18507691 32.895691 3.2195837 128.0 +0.016831543 33.007687 3.230377 128.0 +0.21920298 32.983074 3.2280641 128.0 +0.42148989 32.97414 3.2273896 128.0 +0.62354338 32.957001 3.2260404 128.0 +0 0 0 128.0 +1.0332433 33.116989 3.2425191 128.0 +0 0 0 128.0 +1.4513342 33.372295 3.2687309 128.0 +1.664421 33.530766 3.285017 128.0 +1.8636394 33.403648 3.273742 128.0 +2.5202339 40.678463 3.9805934 128.0 +1.8829477 27.648407 2.7177048 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.1854582 34.320351 3.3717473 128.0 +3.3933351 34.273415 3.3691452 128.0 +2.1013374 19.977892 1.9795341 128.0 +3.6843455 33.068836 3.2561069 128.0 +3.7922683 32.238968 3.1774714 128.0 +3.9911129 32.223984 3.1783388 128.0 +4.2125216 32.381489 3.1961665 128.0 +4.4326501 32.512825 3.2115853 128.0 +4.4958773 31.530188 3.1182058 128.0 +4.6842747 31.468534 3.1149292 128.0 +4.882463 31.472643 3.1182058 128.0 +5.078815 31.462727 3.1202295 128.0 +5.279182 31.475145 3.1245661 128.0 +5.4349976 31.22839 3.1035581 128.0 +2.5813613 14.315136 1.4429631 128.0 +2.6724377 14.316639 1.4446977 128.0 +2.8613875 14.8238 1.4963504 128.0 +6.2497854 31.336464 3.1283243 128.0 +3.0061541 14.608189 1.4786189 128.0 +7.0709863 33.316681 3.3321404 128.0 +7.4590092 34.112793 3.4154015 128.0 +3.4111657 15.157281 1.5388482 128.0 +3.543179 15.30479 1.555616 128.0 +3.63218 15.262427 1.5535923 128.0 +3.6325998 14.858913 1.5156238 128.0 +3.8431952 15.312279 1.5631326 128.0 +3.5082722 13.62379 1.3967069 128.0 +3.543247 13.4182 1.3783009 128.0 +4.1124282 15.194749 1.5586997 128.0 +3.9454415 14.231185 1.464453 128.0 +4.2297974 14.900893 1.5343189 128.0 +4.2431016 14.606076 1.5072398 128.0 +4.349659 14.637012 1.5130218 128.0 +4.4451771 14.629093 1.5149492 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.9138594 20.485882 2.1608968 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.8688173 18.970795 2.023092 128.0 +7.9676547 18.88089 2.0187554 128.0 +8.114768 18.904816 2.0264649 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.144136 31.902866 3.6368525 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +32.686779 50.865173 5.8884659 128.0 +32.840183 50.420952 5.8604231 128.0 +33.146748 50.215179 5.8600378 128.0 +32.371719 48.392654 5.6715441 128.0 +0 0 0 128.0 +33.851849 49.285599 5.8235145 128.0 +0 0 0 128.0 +33.586292 47.635696 5.6777115 128.0 +14.88233 20.836212 2.513696 128.0 +14.663877 20.266329 2.4565504 128.0 +14.579053 19.890987 2.4223402 128.0 +0 0 0 128.0 +29.889103 39.744995 4.8493414 128.0 +14.563346 19.12122 2.3617253 128.0 +30.341755 39.332661 4.8441377 128.0 +30.548206 39.101826 4.8387408 128.0 +0 0 0 128.0 +30.711447 38.331741 4.7900758 128.0 +30.882101 38.06374 4.7802463 128.0 +31.160568 37.928905 4.7871847 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +36.082199 41.784988 5.379745 128.0 +36.391632 41.624252 5.3876472 128.0 +36.835693 41.614071 5.4153042 128.0 +37.126873 41.428036 5.4206042 128.0 +37.474678 41.303387 5.4341922 128.0 +0 0 0 128.0 +0 0 0 128.0 +38.444878 40.836334 5.4647403 128.0 +0 0 0 128.0 +19.043331 19.737783 2.6900475 128.0 +39.228279 40.160931 5.4700408 128.0 +38.650219 39.086468 5.356617 128.0 +38.802704 38.762054 5.3447638 128.0 +19.230791 18.977163 2.6504407 128.0 +0 0 0 128.0 +39.644413 38.171043 5.3628807 128.0 +0 0 0 128.0 +0 0 0 128.0 +44.073734 40.899242 5.8559904 128.0 +0 0 0 128.0 +44.370876 40.172939 5.8296819 128.0 +43.519932 38.919289 5.6872516 128.0 +43.423702 38.356323 5.6440792 128.0 +43.664986 38.095047 5.6449466 128.0 +44.191986 38.0798 5.6825299 128.0 +44.292156 37.695034 5.6656656 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +18.469414 14.582032 2.3129637 128.0 +0 0 0 128.0 +0 0 0 128.0 +25.233669 19.178741 3.1032689 128.0 +0 0 0 128.0 +25.483118 18.87949 3.1051962 128.0 +0 0 0 128.0 +0 0 0 128.0 +25.809288 18.3951 3.1031725 128.0 +0 0 0 128.0 +26.876835 18.66284 3.2026231 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +24.130493 15.892711 2.8320923 128.0 +24.19417 15.722656 2.8282378 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +24.036156 14.79394 2.7672374 128.0 +23.756351 14.421511 2.7253177 128.0 +24.105722 14.431914 2.754806 128.0 +23.840681 14.075263 2.7151029 128.0 +24.299934 14.146029 2.7569261 128.0 +24.106571 13.83614 2.7257032 128.0 +25.754696 14.572652 2.8996456 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.178577 15.043337 3.1272643 128.0 +28.182257 14.82382 3.1176276 128.0 +28.195797 14.61078 3.1092436 128.0 +28.179417 14.383653 3.0977759 128.0 +28.178211 14.165773 3.0881393 128.0 +28.184317 13.952868 3.0794663 128.0 +28.395557 13.841157 3.0930541 128.0 +28.680965 13.763117 3.1146402 128.0 +28.987177 13.691868 3.1384428 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.108519 13.316331 3.3108432 128.0 +31.217165 13.136783 3.3137343 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +32.511108 12.065789 3.3920805 128.0 +36.643612 13.34409 3.810313 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +32.77787 -0.62014788 3.2086942 128.0 +32.764492 -0.8210327 3.2078271 128.0 +37.267548 -1.1628867 3.644562 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +31.332573 -1.7480181 3.0729134 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +25.46649 -1.8913125 2.5070467 128.0 +30.530182 -2.4560628 3.0000598 128.0 +25.446321 -2.2041128 2.5075285 128.0 +30.664246 -2.8459899 3.0162497 128.0 +25.429243 -2.5173895 2.5086849 128.0 +27.429701 -2.8855815 2.7049844 128.0 +27.432253 -3.0561478 2.7070081 128.0 +27.414961 -3.2246442 2.7072008 128.0 +27.408489 -3.3945117 2.70855 128.0 +27.38221 -3.561981 2.7080681 128.0 +27.367727 -3.731004 2.7088392 128.0 +19.318449 -2.7541521 1.9239304 128.0 +27.387812 -4.0766816 2.7154884 128.0 +27.360315 -4.244348 2.7152956 128.0 +18.521622 -2.989332 1.8510771 128.0 +18.831776 -3.1580904 1.8833599 128.0 +0 -0 0 128.0 +19.083504 -3.4416084 1.9120773 128.0 +19.167698 -3.5783718 1.922485 128.0 +18.394821 -3.5509768 1.8484751 128.0 +37.693897 -7.5179625 3.7559621 128.0 +37.761124 -7.7725883 3.7672369 128.0 +37.611458 -7.9826455 3.7572148 128.0 +0 -0 0 128.0 +37.489304 -8.4387856 3.7550948 128.0 +38.166992 -8.8377542 3.8276591 128.0 +38.142063 -9.0789223 3.8306465 128.0 +0 -0 0 128.0 +37.78064 -9.484252 3.8059766 128.0 +31.417963 -8.0920429 3.1757369 128.0 +31.394667 -8.2917852 3.1784351 128.0 +31.403725 -8.5006495 3.1845062 128.0 +31.304935 -8.6804113 3.1798806 128.0 +7.974371 -2.2630548 0.83720058 128.0 +7.9393072 -2.3058317 0.8350805 128.0 +31.553928 -9.3782463 3.2217038 128.0 +0 -0 0 128.0 +32.214005 -10.006304 3.3005321 128.0 +0 -0 0 128.0 +7.9680457 -2.5817389 0.84558451 128.0 +7.9501643 -2.629956 0.84539181 128.0 +25.223816 -8.5189247 2.6122794 128.0 +0 -0 0 128.0 +26.709957 -9.3876295 2.7757177 128.0 +25.186419 -9.0260992 2.6249998 128.0 +25.174501 -9.1965246 2.629529 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +20.003086 -7.7273216 2.110786 128.0 +0 -0 0 128.0 +24.267952 -9.7190475 2.5656378 128.0 +19.638098 -8.0047741 2.0878506 128.0 +19.745825 -8.190341 2.1043293 128.0 +19.494371 -8.2265835 2.083225 128.0 +19.929192 -8.5545444 2.1343958 128.0 +19.879065 -8.6778612 2.1346848 128.0 +19.638947 -8.7168846 2.1149297 128.0 +19.629547 -8.8572845 2.1196516 128.0 +19.876099 -9.1157522 2.1517417 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +5.0937438 -2.7652435 0.59580147 128.0 +5.1786733 -2.8526547 0.60707635 128.0 +0 -0 0 128.0 +4.9173107 -2.7878191 0.58192462 128.0 +0 -0 0 128.0 +3.8012543 -2.2168591 0.460695 128.0 +3.8209872 -2.2599118 0.46445331 128.0 +3.8036349 -2.2812657 0.46406785 128.0 +3.8728948 -2.3552668 0.47351182 128.0 +3.8685355 -2.3852575 0.4746682 128.0 +13.600703 -8.5050182 1.5877062 128.0 +4.5812507 -2.9031599 0.55976021 128.0 +4.5641885 -2.9317534 0.55985659 128.0 +4.0081658 -2.6093125 0.49769992 128.0 +4.0419207 -2.6667581 0.50348192 128.0 +4.0436821 -2.7036841 0.505602 128.0 +3.9718163 -2.6910253 0.49914542 128.0 +3.2644155 -2.240839 0.41800445 128.0 +3.208122 -2.2312613 0.41299337 128.0 +3.2033191 -2.2572134 0.41405341 128.0 +3.1602511 -2.2559981 0.41058421 128.0 +3.1366727 -2.2683444 0.40942779 128.0 +3.1315258 -2.2940209 0.41048783 128.0 +4.3808408 -3.2512989 0.56284398 128.0 +4.301147 -3.2332489 0.55561644 128.0 +3.743592 -2.8500576 0.49018329 128.0 +4.0318122 -3.1088674 0.52757365 128.0 +4.1099191 -3.2095344 0.53952318 128.0 +4.5249252 -3.5786936 0.59319955 128.0 +4.5098724 -3.6119919 0.59406686 128.0 +4.4582534 -3.6157651 0.59040487 128.0 +4.5721087 -3.7548916 0.60746187 128.0 +4.4778214 -3.7236741 0.59849972 128.0 +3.7781322 -3.1810079 0.51282954 128.0 +3.7153761 -3.1673133 0.50733662 128.0 +3.5783525 -3.0885661 0.49230337 128.0 +3.7923739 -3.3142171 0.52227348 128.0 +3.9068644 -3.4568372 0.53971589 128.0 +3.3133521 -2.9679046 0.46532062 128.0 +2.5373011 -2.300616 0.36625543 128.0 +2.5282681 -2.3208547 0.36692998 128.0 +2.543864 -2.3641152 0.37088102 128.0 +2.5322089 -2.3824086 0.37126651 128.0 +3.5147178 -3.3483279 0.50463831 128.0 +3.964699 -3.8239048 0.56795138 128.0 +3.5039809 -3.4211137 0.50878209 128.0 +2.332139 -2.3045607 0.35208949 128.0 +2.2947412 -2.2955883 0.34890938 128.0 +2.2785153 -2.3074999 0.34862027 128.0 +2.3039138 -2.3620656 0.35411319 128.0 +2.3390825 -2.4277837 0.36105162 128.0 +2.2102761 -2.3223627 0.34505469 128.0 +2.9524493 -3.1411259 0.45202199 128.0 +2.9737422 -3.2029595 0.45780399 128.0 +3.0885425 -3.3678966 0.47707739 128.0 +3.0023522 -3.3144732 0.46763343 128.0 +2.9288793 -3.2734766 0.45992407 128.0 +2.592454 -2.9333017 0.41366795 128.0 +2.5076644 -2.8726497 0.40383852 128.0 +1.8993939 -2.2025607 0.316241 128.0 +1.889069 -2.2179637 0.31672281 128.0 +1.8658179 -2.2180839 0.31527731 128.0 +1.8496299 -2.2264271 0.31489184 128.0 +1.8390892 -2.2415829 0.31537369 128.0 +1.8284318 -2.2566934 0.31585553 128.0 +1.8226304 -2.2779765 0.3171083 128.0 +1.8265043 -2.3117731 0.31990293 128.0 +2.8336134 -3.6331205 0.48073933 128.0 +1.8241036 -2.3679295 0.3240467 128.0 +2.1919756 -2.8822904 0.38523972 128.0 +1.8851136 -2.5103531 0.3385981 128.0 +2.1925824 -2.9577596 0.39111808 128.0 +2.2501893 -3.0747976 0.40354943 128.0 +1.8420826 -2.5494685 0.33917633 128.0 +1.8177396 -2.5485649 0.33773082 128.0 +2.7532964 -3.9118774 0.49779627 128.0 +2.5810778 -3.7153065 0.47264451 128.0 +1.465564 -2.1365781 0.28549993 128.0 +1.5053989 -2.2238574 0.29465479 128.0 +2.3382058 -3.5013974 0.44228894 128.0 +2.3451447 -3.5589049 0.44730002 128.0 +2.3671925 -3.6408315 0.45510572 128.0 +2.6794841 -4.177319 0.51514232 128.0 +1.3986987 -2.2092628 0.28781274 128.0 +1.4119873 -2.2608709 0.29272747 128.0 +1.4074786 -2.2847505 0.29446205 128.0 +1.6816261 -2.7681248 0.3482348 128.0 +1.6743232 -2.7946172 0.35006577 128.0 +1.7208996 -2.9128373 0.36220801 128.0 +1.6003455 -2.7469954 0.34245279 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.1133974 -2.0230923 0.25822809 128.0 +1.133202 -2.0893981 0.26478106 128.0 +1.129266 -2.1129954 0.26661202 128.0 +1.1176697 -2.1225274 0.26690111 128.0 +1.0959247 -2.1125541 0.26507014 128.0 +1.6055585 -3.1432056 0.37637395 128.0 +1.5746191 -3.1298759 0.37386841 128.0 +1.5549433 -3.1385865 0.37377205 128.0 +1.5347838 -3.1462789 0.37357932 128.0 +1.0839999 -2.2564533 0.27701965 128.0 +1.5024347 -3.1783764 0.37502483 128.0 +1.4820652 -3.1857302 0.37483206 128.0 +1.8243241 -3.9858761 0.45905676 128.0 +1.0989567 -2.4394062 0.29369113 128.0 +1.4259952 -3.2188416 0.37550664 128.0 +1.0772812 -2.4718735 0.29571483 128.0 +1.0648354 -2.4848423 0.2963894 128.0 +1.0673264 -2.5335314 0.30082229 128.0 +1.0407293 -2.5133588 0.29802763 128.0 +1.0267869 -2.5233858 0.2984131 128.0 +1.0031645 -2.5093019 0.29629302 128.0 +0.99210978 -2.5265296 0.29744944 128.0 +1.2759948 -3.3100135 0.37810856 128.0 +1.2655171 -3.3438492 0.38080683 128.0 +1.4929181 -4.0196977 0.44980556 128.0 +1.2148521 -3.3329396 0.37810856 128.0 +1.1883521 -3.3234589 0.37637395 128.0 +1.1738603 -3.3475966 0.37810856 128.0 +1.1251721 -3.272836 0.36972463 128.0 +1.0441091 -3.0985553 0.35122219 128.0 +0 -0 0 128.0 +0.97541642 -3.0164175 0.34158549 128.0 +0.9664923 -3.0527148 0.34466922 128.0 +0.92802799 -2.9948802 0.33821264 128.0 +0.89838612 -2.9633651 0.33445433 128.0 +0.93076521 -3.1396585 0.351704 128.0 +0.90677917 -3.1290567 0.35006577 128.0 +0.90733314 -3.2044804 0.35710058 128.0 +0.91838777 -3.3212819 0.36827913 128.0 +0.8925513 -3.3066726 0.36625543 128.0 +0.82262683 -3.1234145 0.3473675 128.0 +0.80146849 -3.1206901 0.34659657 128.0 +1.0402792 -4.1578269 0.44961283 128.0 +1.0265173 -4.2124872 0.45443115 128.0 +2.0832169 -8.7882643 0.90909034 128.0 +2.0341711 -8.8222198 0.91121042 128.0 +0.65445769 -2.9165268 0.3240467 128.0 +0.64522499 -2.9603641 0.32799774 128.0 +1.7735649 -8.3946028 0.86533976 128.0 +0.74020922 -3.6096878 0.39140719 128.0 +1.6574422 -8.3503208 0.85888314 128.0 +1.6011077 -8.3339415 0.85628122 128.0 +1.5374073 -8.276083 0.84963191 128.0 +1.4881781 -8.294178 0.85049921 128.0 +0.52599859 -3.0343778 0.33281609 128.0 +1.4068986 -8.435524 0.86264145 128.0 +1.3782774 -8.5884676 0.87680739 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.58441126 -4.1213379 0.43766332 128.0 +0.56191391 -4.1455598 0.43968701 128.0 +0.53621197 -4.146955 0.43949428 128.0 +0.5056619 -4.1086745 0.43544689 128.0 +0.47133824 -4.033596 0.42783388 128.0 +0.41699472 -3.768301 0.40171844 128.0 +0.3946898 -3.7787085 0.40248939 128.0 +0.3713026 -3.779078 0.40229666 128.0 +0.22588345 -2.4491355 0.27277949 128.0 +0.20592988 -2.3929555 0.26719022 128.0 +0.19140065 -2.3961585 0.26738295 128.0 +0.1777847 -2.412178 0.26882845 128.0 +0.25766918 -3.8254344 0.40586224 128.0 +0.23352647 -3.816015 0.4048022 128.0 +0 -0 0 128.0 +0.13205652 -2.6941831 0.29581121 128.0 +0.11126103 -2.5945032 0.28607813 128.0 +0.095952958 -2.6120467 0.28771639 128.0 +0.0786044 -2.5688112 0.28347623 128.0 +0.063724712 -2.6060622 0.28704181 128.0 +0.047981907 -2.6203368 0.28839093 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6494948 -3.4853845 0.40798229 128.0 +-1.6574711 -3.4473932 0.40499493 128.0 +-1.6755332 -3.4308984 0.40432036 128.0 +-1.6850471 -3.3973725 0.40181482 128.0 +-1.6816691 -3.338973 0.39661101 128.0 +-1.6989509 -3.3223891 0.39593643 128.0 +-1.7243524 -3.3216178 0.39699647 128.0 +-1.7799869 -3.3778872 0.40432036 128.0 +-1.8448298 -3.4493926 0.41337886 128.0 +-1.8616846 -3.4301362 0.41251156 128.0 +-1.8841377 -3.4212637 0.41280064 128.0 +-1.9099523 -3.4183261 0.41376433 128.0 +-1.9613376 -3.4602201 0.41973907 128.0 +-0 -0 0 128.0 +-4.9022655 -8.4031124 0.97654718 128.0 +-4.9704623 -8.4011421 0.97972727 128.0 +-5.0208931 -8.3687782 0.97953457 128.0 +-5.0219603 -8.2553339 0.97018695 128.0 +-5.0568414 -8.1989517 0.96729594 128.0 +-5.1920295 -8.3036346 0.98281103 128.0 +-5.2423487 -8.2707796 0.98271465 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.064565 -9.0018129 1.3419706 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.122234 -8.7234211 1.3283828 128.0 +-9.978487 -8.4934263 1.3033274 128.0 +-10.034986 -8.4358826 1.3039056 128.0 +-10.36074 -8.6017418 1.338405 128.0 +-10.040761 -8.2325935 1.2917634 128.0 +-10.491819 -8.4952459 1.3416815 128.0 +-10.531308 -8.4207649 1.3401396 128.0 +-10.456999 -8.2566919 1.3246245 128.0 +-10.401487 -8.1097612 1.311615 128.0 +-10.527561 -8.1046762 1.3209625 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.640414 -7.5846071 1.2997619 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.464136 -9.051403 1.8536789 128.0 +-0 -0 0 128.0 +-16.584507 -8.8543053 1.8548354 128.0 +-16.667595 -8.7676678 1.8580154 128.0 +-0 -0 0 128.0 +-16.457434 -8.4009352 1.8236125 128.0 +-16.670527 -8.381156 1.8411512 128.0 +-0 -0 0 128.0 +-6.9980912 -3.4121382 0.78843892 128.0 +-6.9982562 -3.3592308 0.78622252 128.0 +-7.0115361 -3.3128266 0.78545153 128.0 +-7.013679 -3.2613513 0.78352422 128.0 +-7.0435152 -3.2228088 0.78458428 128.0 +-7.0631571 -3.1795299 0.78458428 128.0 +-7.0852642 -3.1373398 0.78487337 128.0 +-7.4064612 -3.2253017 0.81677079 128.0 +-7.4087262 -3.1723542 0.81493986 128.0 +-7.4161253 -3.1218171 0.81368709 128.0 +-0 -0 0 128.0 +-7.4382005 -3.024204 0.81204885 128.0 +-7.4510703 -2.9762926 0.81147063 128.0 +-7.5470295 -2.9610436 0.81956547 128.0 +-7.606854 -2.9307773 0.82390195 128.0 +-21.53418 -8.1430387 2.263624 128.0 +-22.121243 -8.2102165 2.3191311 128.0 +-0 -0 0 128.0 +-7.603375 -2.717098 0.81638533 128.0 +-22.552311 -7.9010196 2.3482339 128.0 +-22.599424 -7.7621694 2.3481376 128.0 +-22.640024 -7.6211333 2.3474631 128.0 +-0 -0 0 128.0 +-28.432882 -9.1839457 2.9274957 128.0 +-27.817732 -8.7971535 2.8593643 128.0 +-27.319691 -8.4556341 2.8034713 128.0 +-28.216053 -8.5436678 2.8889489 128.0 +-0 -0 0 128.0 +-28.687832 -8.3035765 2.9261465 128.0 +-28.738241 -8.1273956 2.9261465 128.0 +-29.200127 -8.0648355 2.9675844 128.0 +-12.996867 -3.5046151 1.3379232 128.0 +-13.009463 -3.4225235 1.3370558 128.0 +-0 -0 0 128.0 +-12.797483 -3.199393 1.3118078 128.0 +-12.819775 -3.1215153 1.3120968 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-18.116335 -3.9424014 1.8296835 128.0 +-18.13434 -3.8299339 1.8291054 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-19.611546 -3.6415086 1.96585 128.0 +-18.17079 -3.2588663 1.8219743 128.0 +-18.277733 -3.1624084 1.8305509 128.0 +-18.164249 -3.0281112 1.8175414 128.0 +-19.703852 -3.1605387 1.9667174 128.0 +-18.142 -2.7960386 1.8118557 128.0 +-18.216909 -2.6932538 1.8175414 128.0 +-24.202427 -3.4261725 2.4012358 128.0 +-24.693489 -3.3412442 2.4472029 128.0 +-23.991909 -3.0965636 2.3767586 128.0 +-19.614183 -2.4094992 1.9479258 128.0 +-19.648373 -2.2914083 1.9498532 128.0 +-23.485865 -2.5927455 2.3223114 128.0 +-23.363722 -2.4342597 2.3089163 128.0 +-18.429152 -1.8061414 1.8274672 128.0 +-24.6437 -2.2622256 2.4306278 128.0 +-25.913628 -2.2184861 2.5527246 128.0 +-23.714092 -1.8837832 2.3378265 128.0 +-23.133562 -1.694923 2.2803917 128.0 +-23.092878 -1.5495503 2.2754769 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-49.183647 8.8158789 4.2746429 128.0 +-49.28244 9.1460419 4.2879167 128.0 +-49.380005 9.4779358 4.3012753 128.0 +-49.371746 9.7908258 4.3056717 128.0 +-49.433739 10.118757 4.3163247 128.0 +-49.470165 10.442878 4.3249488 128.0 +-49.521996 10.771637 4.3350945 128.0 +-49.52206 11.09032 4.3409281 128.0 +-49.566685 11.420146 4.3508201 128.0 +-49.665356 11.764257 4.3656158 128.0 +-49.617409 12.074903 4.3678141 128.0 +-49.744427 12.429604 4.3854847 128.0 +-49.735752 12.752166 4.3914876 128.0 +-49.805939 13.096374 4.404592 128.0 +-49.732338 13.403805 4.4052687 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-40.9743 13.509734 3.6956623 128.0 +-40.899136 13.763754 3.6964231 128.0 +-40.873283 14.034833 3.7017496 128.0 +-40.781696 14.283716 3.7013268 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-36.704685 13.876146 3.3644054 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-35.157673 14.036253 3.246969 128.0 +-0 0 0 128.0 +-34.986462 14.468158 3.2473073 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-34.856747 15.171727 3.2604966 128.0 +-0 0 0 128.0 +-57.944756 26.071098 5.4262633 128.0 +-34.413002 15.738235 3.2457008 128.0 +-56.453014 26.237621 5.317028 128.0 +-56.298168 26.58692 5.3177042 128.0 +-56.128582 26.929274 5.3171968 128.0 +-56.032158 27.307213 5.323792 128.0 +-55.888554 27.662882 5.326159 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-33.353218 18.332275 3.2642167 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-56.922161 34.072735 5.6639261 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-52.169712 32.993538 5.2724714 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-20.849678 13.729876 2.1530945 128.0 +-21.263988 14.19051 2.2039921 128.0 +-0 0 0 128.0 +-20.231756 13.863505 2.1158938 128.0 +-20.100475 13.955563 2.1111591 128.0 +-21.061735 14.815281 2.2198026 128.0 +-20.066465 14.300056 2.1256168 128.0 +-20.400875 14.72794 2.1698351 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-20.750399 15.569189 2.2360356 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-41.093483 32.438538 4.4771338 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-37.843143 31.020292 4.1867981 128.0 +-37.047916 30.750439 4.1201749 128.0 +-0 0 0 128.0 +-35.569702 30.268364 3.9978347 128.0 +-21.749407 18.739359 2.4708238 128.0 +-22.498274 19.626373 2.5681379 128.0 +-37.048405 32.721313 4.2289872 128.0 +-0 0 0 128.0 +-36.78664 33.302555 4.2453051 128.0 +-35.935917 32.935871 4.1709876 128.0 +-0 0 0 128.0 +-15.447275 14.510783 1.8331672 128.0 +-0 0 0 128.0 +-15.086431 14.524413 1.8117766 128.0 +-0 0 0 128.0 +-14.492828 14.299758 1.762401 128.0 +-14.421734 14.405314 1.7644302 128.0 +-14.267912 14.427646 1.7565672 128.0 +-14.183294 14.519197 1.7570745 128.0 +-14.103626 14.615989 1.7582581 128.0 +-29.519476 30.969303 3.6651406 128.0 +-14.167738 15.047674 1.7885262 128.0 +-14.062926 15.121189 1.7870042 128.0 +-13.771692 14.991461 1.7621473 128.0 +-0 0 0 128.0 +-27.673754 30.876343 3.5530307 128.0 +-27.600683 31.177618 3.5679955 128.0 +-15.459797 17.680996 2.0277107 128.0 +-27.52211 31.868408 3.6077328 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-26.006786 31.258938 3.4851391 128.0 +-0 0 0 128.0 +-16.523836 20.364277 2.260047 128.0 +-15.343698 19.148848 2.1169083 128.0 +-25.157007 31.793215 3.4749088 128.0 +-15.343751 19.637983 2.1494591 128.0 +-25.211111 32.677807 3.5368822 128.0 +-23.56642 30.936703 3.3347292 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-23.129068 31.550877 3.3542597 128.0 +-22.931536 31.687357 3.3537524 128.0 +-22.763897 31.865572 3.3577261 128.0 +-0 0 0 128.0 +-23.600088 33.908211 3.5402641 128.0 +-23.363941 34.012135 3.5361211 128.0 +-23.102247 34.077328 3.5281737 128.0 +-23.529343 35.170002 3.6253188 128.0 +-21.920347 33.204067 3.4108219 128.0 +-34.679203 53.237862 5.4260097 128.0 +-34.316334 53.394325 5.4204292 128.0 +-20.808161 32.817635 3.3320239 128.0 +-9.1331596 14.602147 1.4962457 128.0 +-19.802177 32.095314 3.2347941 128.0 +-0 0 0 128.0 +-8.5495348 14.245773 1.4445872 128.0 +-8.9035006 15.043977 1.5181435 128.0 +-8.4433832 14.468377 1.4562548 128.0 +-8.4120941 14.620096 1.4660623 128.0 +-8.3010883 14.634169 1.4624268 128.0 +-18.438381 32.974251 3.240459 128.0 +-10.295351 18.680185 1.8446656 128.0 +-8.004632 14.737204 1.4578612 128.0 +-7.953084 14.858956 1.4648787 128.0 +-7.8715229 14.925984 1.4666542 128.0 +-7.8266506 15.06419 1.4752779 128.0 +-16.640186 32.512962 3.1339293 128.0 +-8.0089912 15.888705 1.5446068 128.0 +-7.9596429 16.03483 1.5538225 128.0 +-9.5479498 19.534361 1.8797528 128.0 +-14.963616 31.096052 2.9629743 128.0 +-0 0 0 128.0 +-14.519845 31.146387 2.9507148 128.0 +-14.51667 31.645161 2.9890149 128.0 +-14.358707 31.814468 2.9965396 128.0 +-14.187082 31.955704 3.0015278 128.0 +-8.851491 20.272406 1.9117962 128.0 +-8.7269354 20.326336 1.9117962 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-13.74491 33.711884 3.1239526 128.0 +-13.420712 33.503296 3.0972357 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-4.2587996 14.654939 1.3297719 128.0 +-4.0397711 14.226458 1.2896963 128.0 +-3.9840956 14.365237 1.2997575 128.0 +-3.8130615 14.083565 1.2728715 128.0 +-3.6464005 13.803237 1.2462391 128.0 +-3.8689122 15.017977 1.3507396 128.0 +-3.6034176 14.351413 1.2903727 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.3242543 14.353183 1.2849617 128.0 +-3.3155789 14.726174 1.3156525 128.0 +-3.1898136 14.584657 1.3016176 128.0 +-4.1627145 19.608027 1.735684 128.0 +-3.1225317 15.166303 1.3487105 128.0 +-3.9009187 19.553078 1.7266375 128.0 +-3.8022232 19.687197 1.7361913 128.0 +-3.6250012 19.408478 1.7101507 128.0 +-4.9281535 27.312273 2.3897429 128.0 +-4.6890278 26.931667 2.3544021 128.0 +-4.5382013 27.046408 2.3618422 128.0 +-3.1750858 19.661768 1.7247773 128.0 +-4.916924 31.680557 2.7551568 128.0 +-4.7393236 31.823469 2.7648797 128.0 +-0 0 0 128.0 +-4.2932248 31.474447 2.7302153 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.8209047 32.463509 2.8084216 128.0 +-3.3548877 30.093817 2.6041551 128.0 +-2.7580588 26.199614 2.2701929 128.0 +-3.6572714 36.914024 3.1823747 128.0 +-3.4267392 36.893108 3.1787393 128.0 +-0 0 0 128.0 +-2.1680055 26.926842 2.3270087 128.0 +-2.0022273 26.932682 2.3264167 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.0227957 36.212273 3.1122849 128.0 +-1.8322293 36.860924 3.1663954 128.0 +-1.5655987 35.943687 3.0875971 128.0 +-1.3423028 35.879932 3.0814252 128.0 +-0.84262997 26.951986 2.3228657 128.0 +-0 0 0 128.0 +-0.62224817 32.772358 2.8161154 128.0 +-0.3484396 27.122343 2.3363934 128.0 +-0.22552204 33.593578 2.8853598 128.0 +-0 0 0 128.0 +0.18052746 32.473858 2.7903285 128.0 +0.41778681 35.725224 3.0663757 128.0 +0.59458828 33.342918 2.8644764 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.97238076 26.818995 2.3119593 128.0 +1.1421533 26.935968 2.322443 128.0 +1.3201605 27.191198 2.3447635 128.0 +1.8520793 33.858585 2.9120767 128.0 +0 0 0 128.0 +2.0660541 30.827871 2.6564898 128.0 +2.1320636 29.132174 2.5133512 128.0 +0 0 0 128.0 +1.7086952 19.975061 1.7359376 128.0 +3.1591237 34.444191 2.969738 128.0 +3.3709922 34.430107 2.9702454 128.0 +2.0787637 19.965994 1.7381359 128.0 +2.1944604 19.891459 1.7328939 128.0 +2.3560252 20.217094 1.7618937 128.0 +3.9715476 32.354069 2.8007278 128.0 +4.1591597 32.24509 2.7935412 128.0 +4.4049997 32.57444 2.8239784 128.0 +4.7165885 33.337063 2.8917007 128.0 +4.9094019 33.228638 2.884937 128.0 +5.1192636 33.237282 2.888319 128.0 +5.3500757 33.373482 2.9027765 128.0 +5.2925968 31.766447 2.767416 128.0 +5.4673796 31.617516 2.7574396 128.0 +5.6176815 31.340137 2.7364717 128.0 +2.6702423 14.386765 1.2764224 128.0 +2.7669194 14.414145 1.2802271 128.0 +2.9057031 14.651017 1.3022094 128.0 +6.4500532 31.510094 2.7639496 128.0 +8.071084 38.234028 3.3505397 128.0 +8.3042603 38.177944 3.3500323 128.0 +8.524642 38.065014 3.3447058 128.0 +3.455539 14.996788 1.3406785 128.0 +3.5392246 14.940398 1.3376348 128.0 +3.6244693 14.89226 1.3353519 128.0 +3.7882404 15.15975 1.3607162 128.0 +3.4859815 13.594796 1.2256939 128.0 +3.5239761 13.400655 1.21056 128.0 +3.9826291 14.775736 1.3333229 128.0 +4.0641999 14.718364 1.3304483 128.0 +10.450277 36.962124 3.2940619 128.0 +10.793475 37.300266 3.3296564 128.0 +11.106142 37.517105 3.3547671 128.0 +11.314482 37.376724 3.3484259 128.0 +11.846974 38.287048 3.4355097 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.9044762 20.156782 1.8719745 128.0 +8.1510315 20.416059 1.9001287 128.0 +0 0 0 128.0 +8.2825346 20.02813 1.8738345 128.0 +8.0478363 19.127373 1.7956281 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +18.97023 31.691463 3.1688473 128.0 +19.22068 31.667315 3.1780629 128.0 +0 0 0 128.0 +31.796783 50.966972 5.1320381 128.0 +32.097729 50.753227 5.1302629 128.0 +32.345623 50.457176 5.1203709 128.0 +0 0 0 128.0 +32.69276 49.647007 5.0787735 128.0 +0 0 0 128.0 +32.407032 47.922249 4.9435821 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +14.652793 20.561457 2.1771905 128.0 +14.612461 20.240911 2.1530945 128.0 +14.615807 19.985987 2.1357625 128.0 +0 0 0 128.0 +14.648274 19.522976 2.1058326 128.0 +30.071188 39.570938 4.2519841 128.0 +15.038074 19.538366 2.1268849 128.0 +15.214032 19.518028 2.1346633 128.0 +30.714823 38.909828 4.2410774 128.0 +30.832914 38.570419 4.2247601 128.0 +30.904741 38.177593 4.2026086 128.0 +31.123886 37.969524 4.200664 128.0 +31.18318 37.569286 4.1776671 128.0 +31.420164 37.385635 4.178597 128.0 +31.730331 37.287758 4.18925 128.0 +0 0 0 128.0 +0 0 0 128.0 +36.533829 41.365154 4.7176714 128.0 +0 0 0 128.0 +43.847591 48.435078 5.5785332 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.094419 19.833452 2.3708887 128.0 +0 0 0 128.0 +39.388332 39.921135 4.793426 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.987881 19.287409 2.3916874 128.0 +0 0 0 128.0 +0 0 0 128.0 +20.973562 19.505928 2.4651592 128.0 +0 0 0 128.0 +0 0 0 128.0 +44.331745 39.733749 5.0862136 128.0 +43.678688 38.667747 4.9846721 128.0 +43.88662 38.374088 4.9814591 128.0 +44.104664 38.089752 4.979599 128.0 +0 0 0 128.0 +44.573334 37.549503 4.9801064 128.0 +18.117117 15.072847 2.034559 128.0 +18.189245 14.944953 2.0323608 128.0 +18.289114 14.839971 2.0332909 128.0 +18.312954 14.673886 2.0260198 128.0 +18.519073 14.65337 2.0386174 128.0 +18.62748 14.554187 2.0406466 128.0 +18.716433 14.439617 2.0406466 128.0 +18.834799 14.347448 2.0438592 128.0 +0 0 0 128.0 +25.542898 18.966742 2.7343581 128.0 +0 0 0 128.0 +0 0 0 128.0 +20.974356 14.983342 2.2220008 128.0 +21.107428 14.88365 2.2263126 128.0 +21.035606 14.640582 2.2094877 128.0 +20.909863 14.363417 2.1873362 128.0 +20.998425 14.235405 2.1874208 128.0 +21.297388 14.248135 2.209065 128.0 +21.29294 14.056801 2.1997647 128.0 +0 0 0 128.0 +24.19142 15.547477 2.4748821 128.0 +0 0 0 128.0 +25.066343 15.678504 2.5435345 128.0 +25.119675 15.498244 2.5393071 128.0 +0 0 0 128.0 +23.960651 14.38019 2.4059758 128.0 +23.889801 14.139009 2.3903346 128.0 +24.422749 14.252822 2.4342148 128.0 +0 0 0 128.0 +0 0 0 128.0 +24.728792 13.827611 2.4388649 128.0 +24.872511 13.708324 2.4446142 128.0 +0 0 0 128.0 +25.859367 13.841259 2.5235813 128.0 +28.16218 14.852299 2.7363873 128.0 +28.151983 14.626847 2.7267487 128.0 +28.165808 14.415246 2.7195623 128.0 +28.166531 14.198197 2.7112765 128.0 +28.170118 13.983899 2.7034137 128.0 +28.294779 13.83004 2.7071338 128.0 +28.648466 13.785788 2.7324979 128.0 +28.945034 13.710412 2.7524512 128.0 +0 0 0 128.0 +30.720474 14.092473 2.9026921 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.049744 13.331165 2.9020157 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.144571 12.254601 2.8747067 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +37.829212 -0.90675598 3.2456162 128.0 +36.641716 -1.1033003 3.1453431 128.0 +31.883459 -1.1559289 2.7419674 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +31.468758 -1.7213827 2.7089939 128.0 +31.774874 -1.9337434 2.7359645 128.0 +0 -0 0 128.0 +31.714962 -2.3210521 2.7330899 128.0 +31.443853 -2.4952741 2.7112765 128.0 +30.686333 -2.6247387 2.6481197 128.0 +30.856194 -2.8300843 2.6640146 128.0 +19.445843 -1.9040824 1.6927339 128.0 +19.435774 -2.0235703 1.692903 128.0 +27.421566 -3.0250437 2.3757079 128.0 +27.405458 -3.1935883 2.3759615 128.0 +27.392269 -3.3625348 2.3765533 128.0 +27.39385 -3.5334787 2.3784981 128.0 +27.368692 -3.7010972 2.3782444 128.0 +25.241058 -3.5712483 2.1979048 128.0 +27.382328 -4.0457029 2.3834863 128.0 +27.336308 -4.2104568 2.3817108 128.0 +18.669704 -2.9931021 1.6392154 128.0 +18.553682 -3.0913904 1.6308452 128.0 +18.530437 -3.2044964 1.630507 128.0 +18.590851 -3.3325515 1.6374398 128.0 +19.160809 -3.55619 1.688422 128.0 +19.138626 -3.6736917 1.688422 128.0 +18.323063 -3.6338701 1.6198541 128.0 +37.874786 -7.7528119 3.3151989 128.0 +19.299799 -4.0743279 1.7085443 128.0 +37.813797 -8.2250576 3.3184116 128.0 +37.58857 -8.4179478 3.3032777 128.0 +37.590584 -8.6609554 3.3080122 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +37.392895 -9.3434372 3.3052223 128.0 +37.52211 -9.6207085 3.3216245 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +31.50182 -8.6981659 2.8078299 128.0 +7.9534888 -2.2490087 0.73616445 128.0 +7.9194393 -2.2919519 0.73438895 128.0 +7.8736978 -2.3311684 0.73159891 128.0 +31.873966 -9.648778 2.8605874 128.0 +25.768679 -7.9736123 2.3236268 128.0 +31.557447 -9.9773188 2.8431706 128.0 +7.979105 -2.5769732 0.74631011 128.0 +7.9621964 -2.6255717 0.7462256 128.0 +25.407524 -8.5505323 2.3095074 128.0 +0 -0 0 128.0 +25.261185 -8.8478451 2.3059564 128.0 +0 -0 0 128.0 +24.622635 -8.9649143 2.2582715 128.0 +24.645636 -9.1449442 2.2653735 128.0 +24.535002 -9.2755585 2.2604699 128.0 +0 -0 0 128.0 +20.001865 -7.8437285 1.857855 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.872515 -8.2181845 1.8595459 128.0 +19.581083 -8.2387247 1.8373946 128.0 +19.866354 -8.5025959 1.8684235 128.0 +19.805588 -8.6207552 1.8676625 128.0 +19.674868 -8.7078409 1.860476 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +3.9693034 -2.0878882 0.41539156 128.0 +3.9783938 -2.123934 0.41750523 128.0 +3.9223554 -2.1250508 0.41336241 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +3.813195 -2.1576385 0.40659863 128.0 +3.7912416 -2.1760359 0.40575317 128.0 +3.7821243 -2.2017639 0.40617588 128.0 +3.7925696 -2.2391109 0.40854323 128.0 +3.8189425 -2.2863922 0.41251695 128.0 +13.896151 -8.4346189 1.4141502 128.0 +6.7828126 -4.1744027 0.71063113 128.0 +6.7486172 -4.2106686 0.70978564 128.0 +6.687284 -4.229629 0.70623469 128.0 +4.1395965 -2.6541257 0.45208514 128.0 +4.1290822 -2.6832759 0.45267698 128.0 +4.0967283 -2.698149 0.45107058 128.0 +4.1074467 -2.7414873 0.45386064 128.0 +4.0789924 -2.7588241 0.45267698 128.0 +3.2178257 -2.2053714 0.36584678 128.0 +3.1747673 -2.2046168 0.36280307 128.0 +3.1587353 -2.2223356 0.36254942 128.0 +3.1466627 -2.2428319 0.36271852 128.0 +4.116055 -2.9718816 0.46561274 128.0 +4.0333977 -2.9500277 0.45884892 128.0 +4.1529379 -3.0767329 0.47339109 128.0 +4.1459365 -3.1111269 0.47465929 128.0 +4.117249 -3.1292727 0.47364473 128.0 +4.7849474 -3.6832039 0.54720098 128.0 +4.672667 -3.6426618 0.53756255 128.0 +4.2748146 -3.3749235 0.4969798 128.0 +4.1660771 -3.3307853 0.48742595 128.0 +4.1029654 -3.321804 0.48277584 128.0 +4.8423319 -3.9697416 0.56613958 128.0 +4.8370509 -4.0152884 0.56825328 128.0 +4.8443604 -4.0718179 0.57180429 128.0 +3.7303247 -3.1748207 0.45047873 128.0 +3.5892384 -3.092937 0.43686661 128.0 +3.7601645 -3.2806194 0.45825711 128.0 +4.2702227 -3.7719483 0.51828575 128.0 +3.3200066 -2.9691896 0.4127706 128.0 +3.8261971 -3.4642956 0.47279924 128.0 +2.5362573 -2.3250232 0.32678586 128.0 +3.7118146 -3.4445701 0.4645136 128.0 +2.8379822 -2.6663742 0.36525494 128.0 +2.7897975 -2.6535251 0.36153486 128.0 +2.7562354 -2.6540074 0.35950571 128.0 +2.3217423 -2.2633326 0.30996093 128.0 +2.2978809 -2.2677383 0.30877727 128.0 +2.2768731 -2.2747536 0.30793178 128.0 +2.251662 -2.2773459 0.30657902 128.0 +3.5989041 -3.684561 0.47186923 128.0 +3.6488788 -3.7818611 0.48074672 128.0 +3.6091051 -3.7868688 0.47871757 128.0 +3.0748739 -3.2663031 0.41547611 128.0 +3.4259653 -3.6842172 0.46172354 128.0 +3.0318635 -3.3008554 0.41513792 128.0 +2.9432545 -3.2441304 0.40651408 128.0 +2.9193032 -3.2576768 0.40600678 128.0 +2.6846025 -3.0330567 0.37852889 128.0 +4.0531559 -4.6359415 0.55734664 128.0 +2.5957291 -3.0061977 0.37184966 128.0 +1.8911505 -2.2177281 0.28214484 128.0 +1.8620998 -2.2110012 0.28011569 128.0 +1.7803085 -2.1404259 0.27106911 128.0 +1.6817439 -2.0473769 0.25965521 128.0 +1.6691498 -2.0576572 0.25965521 128.0 +1.6758083 -2.091965 0.2622762 128.0 +1.6487198 -2.0842364 0.2603316 128.0 +1.643262 -2.1037354 0.26134616 128.0 +2.1075139 -2.7322857 0.32763135 128.0 +2.0013454 -2.6278563 0.31511831 128.0 +2.0510664 -2.7276824 0.32441854 128.0 +2.0313208 -2.7362161 0.3239958 128.0 +1.877229 -2.5613871 0.30429626 128.0 +1.8462887 -2.5518699 0.30209804 128.0 +2.6038439 -3.6455424 0.41496882 128.0 +2.5584574 -3.6288779 0.41158694 128.0 +2.4814978 -3.5659966 0.40347037 128.0 +2.4381313 -3.5499461 0.40025759 128.0 +2.4873142 -3.6695826 0.4109951 128.0 +1.4679812 -2.1949043 0.25889429 128.0 +1.4577798 -2.2088597 0.25940159 128.0 +1.4409359 -2.2127535 0.25889429 128.0 +1.4197892 -2.2098181 0.25771064 128.0 +1.4014012 -2.2109146 0.25694969 128.0 +1.4073598 -2.2507284 0.26007795 128.0 +1.5881575 -2.5747769 0.2915296 128.0 +2.1566308 -3.5446191 0.38689908 128.0 +1.3462077 -2.2437863 0.25686514 128.0 +1.363373 -2.304311 0.26202255 128.0 +1.3396658 -2.2962821 0.26041615 128.0 +1.6848476 -2.9288771 0.32154393 128.0 +1.6693028 -2.9434934 0.32196668 128.0 +1.6468337 -2.9458535 0.32120574 128.0 +8.9226589 -16.189642 1.6033673 128.0 +1.1330491 -2.0867536 0.23632014 128.0 +1.1757104 -2.1973281 0.24629673 128.0 +1.1529093 -2.1868737 0.24460578 128.0 +1.1031756 -2.1240556 0.23792654 128.0 +1.089214 -2.1290104 0.23775744 128.0 +1.1286076 -2.2397559 0.24764949 128.0 +1.5627749 -3.1489537 0.33312693 128.0 +1.5565511 -3.1853392 0.33566335 128.0 +1.5266072 -3.1732814 0.3336342 128.0 +1.5352601 -3.2420218 0.33921432 128.0 +1.5283902 -3.279377 0.34183532 128.0 +1.4766637 -3.2198627 0.3354097 128.0 +1.4495009 -3.2125151 0.33388785 128.0 +1.4071196 -3.1703494 0.32915321 128.0 +1.7353339 -3.9752011 0.40287855 128.0 +1.6967576 -3.9528127 0.39983484 128.0 +0 -0 0 128.0 +7.1296573 -17.184916 1.613513 128.0 +1.6255927 -3.9879882 0.40025759 128.0 +1.0037938 -2.5068464 0.26396713 128.0 +1.5703292 -3.9918737 0.39882028 128.0 +1.5440102 -3.9967866 0.39839754 128.0 +1.2533138 -3.3046701 0.33473334 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.1794963 -3.2915366 0.33152053 128.0 +1.1764622 -3.3475931 0.335917 128.0 +1.1175849 -3.2435889 0.3259404 128.0 +0 -0 0 128.0 +1.0438805 -3.1548972 0.31680927 128.0 +1.0248101 -3.1621909 0.31689382 128.0 +0.97463655 -3.0715485 0.30826998 128.0 +0.95665848 -3.0803256 0.30852363 128.0 +0.9229598 -3.0375171 0.30421171 128.0 +0.92815655 -3.1233518 0.31131369 128.0 +0.92371309 -3.1796999 0.31579471 128.0 +0.93222308 -3.284035 0.32450309 128.0 +0.92244166 -3.3271399 0.32780045 128.0 +0.90383232 -3.3394697 0.32839227 128.0 +0.82147622 -3.1108551 0.30784726 128.0 +1.0574414 -4.1058326 0.39459291 128.0 +0.97811103 -3.896733 0.37573883 128.0 +0.95678687 -3.9133079 0.37666884 128.0 +0.70495588 -2.9623857 0.29322055 128.0 +0.69441068 -2.9996598 0.29609516 128.0 +0.76858222 -3.4150541 0.33185872 128.0 +0.87472701 -4.0008283 0.38233352 128.0 +0.74979413 -3.5333941 0.34132802 128.0 +1.7115952 -8.3141994 0.75510305 128.0 +1.6654222 -8.3489733 0.75721675 128.0 +1.6090604 -8.3326206 0.75493395 128.0 +1.5496688 -8.2982597 0.75112933 128.0 +0.53895605 -2.9889352 0.29254416 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +1.414184 -8.7587385 0.7876538 128.0 +0.64409995 -4.1522932 0.3913801 128.0 +0.61097699 -4.104919 0.38698363 128.0 +0.5369429 -3.766299 0.35764569 128.0 +0.52823406 -3.8751612 0.36669225 128.0 +0.52952749 -4.0710058 0.38317901 128.0 +0 -0 0 128.0 +0.4426043 -3.7634981 0.35637745 128.0 +0.42380962 -3.804764 0.35967481 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.1896459 -2.3599365 0.23572831 128.0 +0.17545758 -2.3650305 0.23606649 128.0 +0.25923535 -3.8075233 0.35866025 128.0 +0.23580627 -3.8080478 0.3585757 128.0 +0.21338101 -3.8263357 0.36001301 128.0 +0.14165778 -2.8572624 0.27757928 128.0 +0.11249989 -2.5912905 0.25492057 128.0 +0 -0 0 128.0 +0.1153329 -3.6999528 0.3489373 128.0 +0.090174317 -3.6029725 0.34065163 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6464229 -3.4307711 0.35773021 128.0 +-1.6630776 -3.4116471 0.35688475 128.0 +-1.6764656 -3.3861971 0.35544744 128.0 +-1.6904992 -3.3624923 0.35417923 128.0 +-1.6975113 -3.3254306 0.35164282 128.0 +-1.7146752 -3.308759 0.35105097 128.0 +-1.7715844 -3.367846 0.35773021 128.0 +-1.834443 -3.4360261 0.36533949 128.0 +-1.8531187 -3.4203246 0.36491674 128.0 +-1.869751 -3.4010308 0.36415583 128.0 +-1.9027164 -3.4112506 0.3662695 128.0 +-4.8006225 -8.4851284 0.86205554 128.0 +-4.8689618 -8.4840326 0.86484563 128.0 +-4.8587747 -8.3472118 0.85436171 128.0 +-4.9104071 -8.3181 0.85444629 128.0 +-4.9495835 -8.2681494 0.85250169 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.8494816 -8.4008656 1.1332836 128.0 +-10.047918 -8.4641733 1.1496013 128.0 +-10.024599 -8.3399067 1.1413157 128.0 +-10.064805 -8.2693844 1.140132 128.0 +-10.456573 -8.4843493 1.1774174 128.0 +-9.9501371 -7.9726577 1.1167123 128.0 +-10.352054 -8.1909256 1.1549278 128.0 +-10.392695 -8.1198902 1.1539133 128.0 +-10.551982 -8.1405725 1.1656653 128.0 +-10.826048 -8.2465525 1.1895922 128.0 +-10.50695 -7.9020634 1.1503623 128.0 +-11.128825 -8.2633705 1.2109827 128.0 +-10.588664 -7.7619281 1.1488404 128.0 +-10.628019 -7.6909695 1.1479949 128.0 +-10.685551 -7.633142 1.149094 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.454226 -8.9372988 1.6236587 128.0 +-16.500849 -8.8319368 1.6228977 128.0 +-16.615543 -8.7625971 1.6287315 128.0 +-16.647776 -8.6494551 1.6267024 128.0 +-16.465481 -8.4268398 1.6042973 128.0 +-16.604074 -8.369606 1.6125829 128.0 +-16.748829 -8.3140888 1.6214604 128.0 +-6.9979925 -3.4201751 0.69575077 128.0 +-7.0035825 -3.3698266 0.69431347 128.0 +-7.0169239 -3.3233776 0.69363713 128.0 +-7.0182185 -3.2714186 0.69186163 128.0 +-7.0571785 -3.2370188 0.69363713 128.0 +-7.0814486 -3.1957054 0.69405985 128.0 +-7.2994556 -3.2403376 0.71249115 128.0 +-7.3274193 -3.1990767 0.71325213 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.381381 -3.0621333 0.71291393 128.0 +-7.394495 -3.0145271 0.71240664 128.0 +-7.3980532 -2.9631701 0.71105385 128.0 +-7.4049687 -2.9133425 0.71003932 128.0 +-0 -0 0 128.0 +-21.683807 -8.2260618 2.0026848 128.0 +-22.151272 -8.2482891 2.0404775 128.0 +-22.690002 -8.2907324 2.0846112 128.0 +-22.473124 -8.0555258 2.0605152 128.0 +-0 -0 0 128.0 +-22.298038 -7.6853013 2.0360811 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-28.390957 -9.0122023 2.562304 128.0 +-27.646421 -8.5894823 2.4912844 128.0 +-27.302013 -8.2991257 2.4561126 128.0 +-28.446972 -8.4568558 2.5530038 128.0 +-28.530859 -8.291604 2.5558784 128.0 +-28.561069 -8.1106701 2.5541029 128.0 +-0 -0 0 128.0 +-12.874602 -3.4857049 1.1665953 128.0 +-12.978597 -3.4285309 1.1738664 128.0 +-12.89518 -3.3219819 1.1647353 128.0 +-12.776156 -3.2078502 1.1525605 128.0 +-12.850768 -3.1428912 1.1573796 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-40.454212 -9.1089239 3.5533688 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-18.148788 -3.7366638 1.6070874 128.0 +-0 -0 0 128.0 +-17.947714 -3.466238 1.585866 128.0 +-17.906937 -3.344521 1.5805395 128.0 +-18.245811 -3.2920914 1.6080174 128.0 +-25.079296 -4.3664865 2.1948609 128.0 +-18.226858 -3.0582101 1.6030291 128.0 +-19.521103 -3.1523676 1.7126871 128.0 +-18.243322 -2.8312516 1.6013381 128.0 +-18.405226 -2.7408369 1.6137667 128.0 +-24.151873 -3.4453866 2.1049025 128.0 +-0 -0 0 128.0 +-19.377403 -2.521981 1.692903 128.0 +-25.59856 -3.1721904 2.2235227 128.0 +-24.756603 -2.9137189 2.1499662 128.0 +-23.575771 -2.6281631 2.0476639 128.0 +-23.791624 -2.5045307 2.0647426 128.0 +-0 -0 0 128.0 +-23.358227 -2.1694336 2.0253434 128.0 +-23.866453 -2.0690207 2.0675325 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-23.704178 -1.4699163 2.0500312 128.0 +-0 -0 0 128.0 +-43.411266 -2.1578948 3.7228866 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-49.162308 8.876894 3.6510806 128.0 +-49.323586 9.2188835 3.6670353 128.0 +-49.359119 9.5393353 3.6738937 128.0 +-49.386707 9.8593979 3.6803191 128.0 +-49.410271 10.179755 3.6866 128.0 +-49.505905 10.516524 3.6983674 128.0 +-49.52034 10.837576 3.7042873 128.0 +-49.579399 11.169724 3.7136726 128.0 +-49.553654 11.48386 3.7169213 128.0 +-49.642345 11.82584 3.7288332 128.0 +-49.660885 12.152741 3.7356915 128.0 +-49.737251 12.495384 3.747026 128.0 +-49.745602 12.82249 3.7534513 128.0 +-49.802914 13.163676 3.7637029 128.0 +-49.732758 13.472143 3.764569 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-40.962105 14.123637 3.1712809 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-35.390694 14.181326 2.794718 128.0 +-0 0 0 128.0 +-35.323624 14.660055 2.8033092 128.0 +-34.748783 14.672049 2.7652631 128.0 +-34.916534 14.995989 2.7856216 128.0 +-34.172184 14.925293 2.7341475 128.0 +-34.165642 15.172744 2.7409337 128.0 +-57.879444 26.131144 4.6316886 128.0 +-34.186279 15.686961 2.7576103 128.0 +-56.651394 26.418316 4.559567 128.0 +-56.418827 26.73254 4.554008 128.0 +-0 0 0 128.0 +-56.106239 27.432512 4.5555964 128.0 +-0 0 0 128.0 +-55.788532 28.130632 4.5574732 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-33.519325 19.019003 2.8246062 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-21.287041 13.86916 1.8740308 128.0 +-21.234833 14.021499 1.8769186 128.0 +-20.864086 13.961261 1.8521562 128.0 +-21.062819 14.282146 1.877063 128.0 +-21.17783 14.550634 1.8948948 128.0 +-20.33836 14.158294 1.8287654 128.0 +-20.869717 14.719165 1.8835604 128.0 +-20.219889 14.447403 1.8338189 128.0 +-20.323954 14.710977 1.8510733 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-41.433456 31.973949 3.8232627 128.0 +-0 0 0 128.0 +-40.123737 31.75638 3.7388682 128.0 +-39.832401 31.925251 3.7299883 128.0 +-0 0 0 128.0 +-37.666935 30.956345 3.5640872 128.0 +-37.035465 30.820026 3.5225756 128.0 +-35.915157 30.262596 3.4344993 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-21.750717 19.022367 2.1265647 128.0 +-22.319065 19.762474 2.1928387 128.0 +-21.318106 19.11075 2.1073611 128.0 +-0 0 0 128.0 +-35.804665 32.899784 3.5546296 128.0 +-35.804401 33.307037 3.5746274 128.0 +-36.132298 34.028027 3.6276176 128.0 +-15.138253 14.431985 1.5489423 128.0 +-15.060897 14.535683 1.5500973 128.0 +-14.966431 14.622942 1.549592 128.0 +-31.18364 30.846024 3.2099044 128.0 +-30.970528 31.013493 3.2075219 128.0 +-14.334723 14.530966 1.5124844 128.0 +-14.269655 14.643651 1.5150112 128.0 +-31.821976 33.061539 3.35653 128.0 +-0 0 0 128.0 +-14.07758 14.988894 1.5234579 128.0 +-13.956857 15.044278 1.5204258 128.0 +-14.011846 15.290681 1.5362362 128.0 +-13.896343 15.352704 1.533926 128.0 +-13.777949 15.410912 1.531327 128.0 +-16.464998 18.645788 1.8355516 128.0 +-16.251293 18.632959 1.8246503 128.0 +-0 0 0 128.0 +-15.768721 18.533949 1.7964226 128.0 +-16.51124 19.649805 1.8928013 128.0 +-24.272051 29.249241 2.7861991 128.0 +-24.059883 29.358278 2.7825172 128.0 +-15.377516 18.999861 1.8042917 128.0 +-24.602537 30.783422 2.8874149 128.0 +-15.508365 19.64986 1.8469582 128.0 +-15.354399 19.702166 1.8430598 128.0 +-23.905844 31.06743 2.8724706 128.0 +-23.699684 31.193674 2.8706658 128.0 +-23.513823 31.346483 2.8713877 128.0 +-25.657326 34.645031 3.1555426 128.0 +-25.209396 34.480545 3.1267371 128.0 +-25.078485 34.746998 3.1367722 128.0 +-22.93075 32.185417 2.8955004 128.0 +-22.697836 32.275745 2.8910968 128.0 +-22.511311 32.431618 2.8926127 128.0 +-23.465145 34.25267 3.0403214 128.0 +-23.296429 34.457977 3.0457358 128.0 +-23.046366 34.543022 3.0407543 128.0 +-21.803495 33.118427 2.9051023 128.0 +-0 0 0 128.0 +-34.241798 53.429089 4.6284399 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-8.9783821 14.592268 1.2751836 128.0 +-8.9554195 14.757082 1.2844965 128.0 +-8.8636789 14.810042 1.2843522 128.0 +-8.5085526 14.416618 1.2467391 128.0 +-8.4384937 14.500451 1.2494104 128.0 +-10.932629 19.055017 1.6251789 128.0 +-10.561663 18.672895 1.5878547 128.0 +-8.3071117 14.898989 1.269769 128.0 +-8.2261028 14.96891 1.2713573 128.0 +-8.0676117 14.896315 1.2612501 128.0 +-8.1117525 15.199844 1.2821141 128.0 +-7.8855958 14.996843 1.2614667 128.0 +-16.872009 32.573807 2.6903257 128.0 +-16.122929 31.600805 2.6028991 128.0 +-15.479586 30.805248 2.5304887 128.0 +-9.6515846 19.503613 1.6101626 128.0 +-9.5531349 19.606403 1.6137002 128.0 +-8.9331884 18.623253 1.5300997 128.0 +-8.8200274 18.68042 1.5303164 128.0 +-8.7052402 18.734188 1.5303164 128.0 +-14.192173 31.041187 2.5055819 128.0 +-14.065263 31.269587 2.5168443 128.0 +-13.845288 31.292364 2.5118628 128.0 +-13.646654 31.362095 2.5107076 128.0 +-8.5701723 20.029528 1.6119674 128.0 +-8.4277782 20.035767 1.6083578 128.0 +-12.646802 30.59129 2.431078 128.0 +-0 0 0 128.0 +-11.81537 29.603846 2.3422074 128.0 +-11.627678 29.660927 2.3410523 128.0 +-11.458719 29.766155 2.3437235 128.0 +-11.298779 29.896549 2.3484161 128.0 +-11.201139 30.197229 2.3663201 128.0 +-11.038155 30.32725 2.3710849 128.0 +-10.887743 30.494915 2.3788097 128.0 +-10.516527 30.035864 2.3385255 128.0 +-10.790833 31.436586 2.4408243 128.0 +-10.595512 31.495588 2.4403188 128.0 +-10.193834 30.928175 2.3921657 128.0 +-10.004483 30.992041 2.3923099 128.0 +-9.8246498 31.086128 2.3948367 128.0 +-9.6437435 31.178225 2.3972914 128.0 +-9.2962828 30.721298 2.3583066 128.0 +-9.0561037 30.603695 2.3451674 128.0 +-8.8276958 30.518801 2.3346272 128.0 +-4.0799923 14.434207 1.120761 128.0 +-3.941468 14.278216 1.1071886 128.0 +-3.806051 14.124928 1.093905 128.0 +-3.7167752 14.13837 1.093183 128.0 +-3.5819228 13.973472 1.0791774 128.0 +-3.7012763 14.816742 1.1404699 128.0 +-3.4945605 14.363327 1.1050228 128.0 +-3.4047546 14.377705 1.1045175 128.0 +-3.3187087 14.408045 1.1052394 128.0 +-3.2809942 14.654919 1.1220605 128.0 +-3.2323227 14.864828 1.1361383 128.0 +-4.1644249 19.735645 1.4950136 128.0 +-4.0172668 19.633795 1.4856284 128.0 +-0 0 0 128.0 +-3.8017657 19.815811 1.4955189 128.0 +-3.6602843 19.731873 1.4876498 128.0 +-0 0 0 128.0 +-3.4063213 19.708471 1.4827406 128.0 +-3.2768118 19.677841 1.4789865 128.0 +-4.4099998 27.527046 2.052927 128.0 +-4.9536476 32.184822 2.3920934 128.0 +-4.0657516 27.537649 2.0498948 128.0 +-4.2124376 29.795975 2.2131972 128.0 +-4.340764 32.125252 2.3814809 128.0 +-4.1579676 32.263062 2.3896387 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.3147097 30.076731 2.2252536 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.3662879 36.747593 2.706064 128.0 +-2.5054138 29.327168 2.1655493 128.0 +-0 0 0 128.0 +-1.937393 26.508757 1.9589307 128.0 +-1.8421849 27.529245 2.0321352 128.0 +-1.6657994 27.417578 2.0232553 128.0 +-0 0 0 128.0 +-1.6775286 34.631683 2.5447111 128.0 +-1.458811 34.494839 2.5340986 128.0 +-0 0 0 128.0 +-1.0057286 33.52018 2.4624102 128.0 +-0.64360231 26.960762 1.9870863 128.0 +-0.47795036 26.952236 1.98622 128.0 +-0.38045022 32.830894 2.4115856 128.0 +-0.17690596 32.446629 2.3836467 128.0 +0.02222706 32.503952 2.3877618 128.0 +0.2215509 32.486248 2.3865345 128.0 +0.35983568 27.785969 2.0464296 128.0 +0.61906493 32.422249 2.3822751 128.0 +0 0 0 128.0 +1.0188932 32.476013 2.3868954 128.0 +0 0 0 128.0 +1.1829083 27.096233 1.9982041 128.0 +1.3551539 27.209 2.0069396 128.0 +0 0 0 128.0 +2.1293917 34.27607 2.5208149 128.0 +2.3434727 34.318085 2.5248578 128.0 +2.0479004 27.508707 2.031702 128.0 +1.6238855 20.14678 1.4980457 128.0 +1.7504071 20.170221 1.5005003 128.0 +1.8687781 20.101501 1.4963131 128.0 +1.9976965 20.146229 1.5004281 128.0 +2.102766 19.958027 1.4876498 128.0 +2.2488654 20.156874 1.5030992 128.0 +2.3574452 20.014915 1.4937862 128.0 +2.491508 20.091135 1.5004281 128.0 +4.183919 32.117893 2.3794594 128.0 +4.3594561 31.934488 2.3679807 128.0 +4.5537691 31.896278 2.3671865 128.0 +4.7416015 31.815453 2.3633602 128.0 +4.8817625 31.43194 2.3374426 128.0 +5.0637107 31.33444 2.3325336 128.0 +5.2837973 31.469011 2.3447342 128.0 +5.5219908 31.6954 2.3637934 128.0 +5.6360726 31.216295 2.3310897 128.0 +5.8385019 31.23995 2.3354213 128.0 +2.7860005 14.419906 1.0980922 128.0 +2.9211001 14.636302 1.1153466 128.0 +2.9573104 14.358255 1.096143 128.0 +3.0754099 14.481304 1.106611 128.0 +3.3032506 15.097422 1.1536814 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.5244145 14.798294 1.1361383 128.0 +3.5980775 14.706636 1.1309403 128.0 +3.6520345 14.540151 1.1201835 128.0 +3.5131228 13.632782 1.054054 128.0 +3.5317078 13.36508 1.0356445 128.0 +3.9633896 14.634123 1.1324564 128.0 +10.22475 36.848675 2.8030202 128.0 +10.487185 36.913807 2.8126943 128.0 +10.774474 37.058502 2.8285048 128.0 +11.089523 37.287098 2.8508127 128.0 +11.399074 37.484585 2.8709548 128.0 +10.333581 33.247028 2.5551069 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +8.0369473 20.058247 1.5991169 128.0 +0 0 0 128.0 +8.289753 19.975613 1.6004887 128.0 +8.0846987 19.14888 1.5395571 128.0 +8.1929884 19.077835 1.5378966 128.0 +8.4987335 19.459526 1.5720443 128.0 +8.3839769 18.880146 1.5303164 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.061195 31.752104 2.7156658 128.0 +19.325676 31.749563 2.7254119 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.863455 50.240028 4.3412528 128.0 +32.476402 50.518429 4.3821149 128.0 +31.933073 49.009586 4.2690592 128.0 +32.213951 48.783596 4.2665324 128.0 +21.248585 31.753355 2.8005657 128.0 +13.756501 20.287691 1.809273 128.0 +21.649073 31.508297 2.8021541 128.0 +14.063694 20.20248 1.8167812 128.0 +14.365031 20.367653 1.839089 128.0 +0 0 0 128.0 +14.330824 19.798805 1.8041472 128.0 +14.261533 19.450705 1.7808287 128.0 +0 0 0 128.0 +14.755188 19.614557 1.8116554 128.0 +14.80514 19.431625 1.8032809 128.0 +15.032557 19.480967 1.8161315 128.0 +30.38623 38.88052 3.6068258 128.0 +30.569752 38.624519 3.6004727 128.0 +30.731941 38.343609 3.5918818 128.0 +30.925779 38.103981 3.587189 128.0 +31.103901 37.84647 3.5809083 128.0 +31.25132 37.553711 3.5713787 128.0 +31.487585 37.368877 3.5721006 128.0 +32.008247 37.517166 3.60466 128.0 +32.385853 37.491394 3.621048 128.0 +36.330502 41.539707 4.0295205 128.0 +0 0 0 128.0 +43.560047 48.58913 4.758461 128.0 +43.47393 47.898495 4.7171659 128.0 +43.742043 47.603668 4.7144947 128.0 +44.040783 47.342407 4.7152891 128.0 +18.967598 20.141298 2.037622 128.0 +0 0 0 128.0 +19.126749 19.817318 2.0285978 128.0 +19.662741 20.124035 2.071553 128.0 +0 0 0 128.0 +19.481222 19.454851 2.0278759 128.0 +0 0 0 128.0 +19.923519 19.414085 2.0485954 128.0 +20.033644 19.283173 2.047729 128.0 +39.735821 37.778763 4.003675 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +43.580421 38.959702 4.2662435 128.0 +43.800713 38.67572 4.2645111 128.0 +0 0 0 128.0 +17.659985 15.212996 1.7222073 128.0 +17.57675 14.954413 1.7054584 128.0 +17.678104 14.854624 1.7063969 128.0 +17.960039 14.904463 1.7243732 128.0 +18.028011 14.775016 1.7222073 128.0 +18.434656 14.920115 1.7516624 128.0 +18.095768 14.463008 1.7118114 128.0 +18.134844 14.312776 1.7072632 128.0 +18.642439 14.528606 1.7458147 128.0 +18.420576 14.174914 1.7174425 128.0 +18.583448 14.119544 1.7243732 128.0 +18.723192 14.04535 1.7292101 128.0 +18.834669 13.949196 1.7315203 128.0 +20.849888 15.244333 1.9045688 128.0 +21.001265 15.158139 1.9097668 128.0 +21.225475 15.122745 1.9214622 128.0 +21.191408 14.903296 1.9102721 128.0 +20.887518 14.498874 1.8754747 128.0 +21.025459 14.404257 1.8798064 128.0 +21.062216 14.240342 1.8753303 128.0 +21.154175 14.114161 1.8757635 128.0 +21.293695 14.019194 1.8803838 128.0 +21.453758 13.936628 1.8868091 128.0 +21.72781 13.925814 1.9030528 128.0 +24.457443 15.464236 2.1295247 128.0 +24.740591 15.43158 2.1456239 128.0 +24.85775 15.293594 2.147573 128.0 +0 0 0 128.0 +24.066162 14.40253 2.0651278 128.0 +24.109413 14.228233 2.0613737 128.0 +0 0 0 128.0 +24.55472 14.087639 2.0841148 128.0 +0 0 0 128.0 +24.760595 13.80468 2.0870025 128.0 +0 0 0 128.0 +25.747311 13.943368 2.1544316 128.0 +28.195948 15.046289 2.3483438 128.0 +28.181801 14.817305 2.3396807 128.0 +28.163252 14.587686 2.3308008 128.0 +28.156277 14.365652 2.323004 128.0 +28.171705 14.156346 2.3171563 128.0 +28.178474 13.943855 2.3107309 128.0 +28.356754 13.816123 2.3182392 128.0 +28.643337 13.738915 2.3344827 128.0 +28.916506 13.652321 2.3496435 128.0 +30.794323 14.308407 2.4928758 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.113331 13.538419 2.491071 128.0 +31.23708 13.36491 2.4943197 128.0 +31.416872 13.214365 2.5020444 128.0 +0 0 0 128.0 +36.6045 14.870162 2.8948507 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +36.748482 13.888037 2.8786073 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +36.348709 -1.8107553 2.6693175 128.0 +32.221149 -1.8032628 2.3709407 128.0 +32.029297 -1.9897343 2.3578734 128.0 +0 -0 0 128.0 +25.682556 -1.9118736 1.8991543 128.0 +31.505077 -2.5400596 2.3228595 128.0 +36.515781 -3.1698585 2.6880879 128.0 +31.032583 -2.8856502 2.2909498 128.0 +30.964668 -3.0710845 2.2873402 128.0 +25.487839 -2.6857107 1.89013 128.0 +27.426584 -3.0603597 2.0325685 128.0 +27.428091 -3.2310398 2.0340846 128.0 +27.397852 -3.3980465 2.0333626 128.0 +27.408134 -3.5702164 2.0356727 128.0 +27.396582 -3.7398069 2.0364668 128.0 +27.394842 -3.9109406 2.0380552 128.0 +27.366383 -4.0783706 2.0377662 128.0 +19.168507 -2.9766386 1.4391356 128.0 +19.633326 -3.1723421 1.4745827 128.0 +18.723318 -3.1432524 1.4092474 128.0 +18.612299 -3.2421534 1.4025333 128.0 +19.286968 -3.4817877 1.4536465 128.0 +19.236809 -3.5947499 1.4515529 128.0 +18.916693 -3.6551759 1.429606 128.0 +19.190269 -3.8303492 1.4514807 128.0 +19.178127 -3.9504418 1.452347 128.0 +38.104858 -8.0943279 2.8547111 128.0 +0 -0 0 128.0 +37.60276 -8.47122 2.8250394 128.0 +37.921238 -8.7878113 2.8526175 128.0 +37.73756 -8.989583 2.8430157 128.0 +32.184731 -7.8756466 2.4333882 128.0 +32.099041 -8.0637445 2.4306448 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +31.589703 -8.7653189 2.4079759 128.0 +7.9260449 -2.2508249 0.63143164 128.0 +7.9178309 -2.3010869 0.63186485 128.0 +0 -0 0 128.0 +31.444279 -9.5620174 2.4139681 128.0 +0 -0 0 128.0 +25.726479 -8.1692638 1.988819 128.0 +7.9763422 -2.585964 0.64197195 128.0 +7.9527502 -2.6323488 0.64139438 128.0 +25.407341 -8.5858536 1.9762572 128.0 +25.315521 -8.7282581 1.9732972 128.0 +26.439487 -9.2977381 2.063684 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.008368 -2.7079651 0.57887459 128.0 +20.11832 -7.9181051 1.5999833 128.0 +19.932335 -7.9864898 1.5892986 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.763577 -8.3442659 1.5878547 128.0 +19.564459 -8.4020023 1.5762316 128.0 +19.785824 -8.6412621 1.5978175 128.0 +19.615753 -8.7106829 1.5885767 128.0 +19.645567 -8.868638 1.5952185 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.0051303 -2.0803406 0.36171573 128.0 +3.9940546 -2.1058073 0.3618601 128.0 +3.9740241 -2.1265082 0.36128256 128.0 +3.9512613 -2.1456144 0.36048841 128.0 +3.8672731 -2.1308126 0.35464072 128.0 +3.8610897 -2.1583967 0.35521829 128.0 +3.8512433 -2.1840162 0.35550705 128.0 +3.88272 -2.2334785 0.35926113 128.0 +7.1326227 -4.162539 0.63280332 128.0 +13.726668 -8.1253586 1.1896338 128.0 +13.639784 -8.187356 1.1865295 128.0 +13.803131 -8.4010658 1.2046502 128.0 +13.807341 -8.520175 1.209415 128.0 +6.7673702 -4.232831 0.61280566 128.0 +0 -0 0 128.0 +7.0748358 -4.546946 0.64377677 128.0 +6.9874725 -4.5516114 0.63865101 128.0 +3.9157321 -2.5844359 0.37463841 128.0 +3.8724468 -2.5901082 0.37225601 128.0 +6.7043929 -4.5451064 0.62132454 128.0 +3.8666756 -2.655509 0.37456623 128.0 +3.8363936 -2.6694965 0.37333891 128.0 +4.695292 -3.3104208 0.45087504 128.0 +4.0394907 -2.8851199 0.39434731 128.0 +4.1210866 -2.9817882 0.40322715 128.0 +4.1702757 -3.0565615 0.40929142 128.0 +4.12502 -3.0624664 0.40690902 128.0 +4.8808541 -3.6705532 0.47708136 128.0 +4.8669667 -3.707082 0.4778755 128.0 +4.3356256 -3.3444483 0.43138272 128.0 +3.8010788 -2.9693067 0.384168 128.0 +3.7108381 -2.9356256 0.37752616 128.0 +5.0430212 -4.0406141 0.50278234 128.0 +3.6412344 -2.9539144 0.37442183 128.0 +4.2078791 -3.4568703 0.42921689 128.0 +4.8305645 -4.0185518 0.48985967 128.0 +4.8058162 -4.0481157 0.48985967 128.0 +3.7360878 -3.186101 0.39044884 128.0 +3.6794844 -3.1770165 0.38691136 128.0 +3.5886002 -3.1371536 0.38005295 128.0 +4.4839978 -3.9691145 0.4684903 128.0 +3.3374388 -2.9905379 0.35940552 128.0 +3.3352742 -3.0257072 0.36099377 128.0 +3.9416275 -3.6204188 0.42243069 128.0 +3.9149573 -3.64046 0.42199752 128.0 +3.1962435 -3.0086308 0.35276368 128.0 +3.5985682 -3.4294422 0.39485267 128.0 +2.7902229 -2.6915908 0.3156561 128.0 +2.7700884 -2.7051754 0.31529513 128.0 +2.289705 -2.2633851 0.26808041 128.0 +4.4358444 -4.4405746 0.48935431 128.0 +3.6002409 -3.6482761 0.4060427 128.0 +2.2476556 -2.3051476 0.26808041 128.0 +4.2392354 -4.4028988 0.47744235 128.0 +3.513236 -3.693687 0.40402126 128.0 +3.1163464 -3.3167479 0.3644591 128.0 +3.1020412 -3.3423879 0.36510882 128.0 +4.1817884 -4.562233 0.48300126 128.0 +2.6337943 -2.9084024 0.31904921 128.0 +3.0187221 -3.3751252 0.36279863 128.0 +3.9182038 -4.4358182 0.46343675 128.0 +2.7004349 -3.0947008 0.33233285 128.0 +2.6950648 -3.1270819 0.33384892 128.0 +2.6687176 -3.1352031 0.33305478 128.0 +1.710125 -2.0335605 0.22736311 128.0 +1.6957043 -2.0417128 0.22714654 128.0 +1.6812482 -2.0497646 0.22692995 128.0 +1.6717765 -2.0639186 0.22729091 128.0 +1.6565905 -2.0710208 0.22700214 128.0 +1.6506484 -2.0897591 0.22779627 128.0 +1.6396339 -2.1022081 0.22801286 128.0 +1.6340028 -2.1217148 0.22887918 128.0 +2.1060545 -2.7702336 0.28692296 128.0 +2.0944033 -2.7902849 0.28757271 128.0 +2.0309446 -2.7405634 0.28194159 128.0 +1.7215372 -2.3528059 0.2460613 128.0 +2.6818259 -3.7139587 0.36662489 128.0 +2.6404681 -3.7043495 0.36431471 128.0 +2.6974359 -3.8338866 0.37434962 128.0 +2.492445 -3.5889869 0.35131982 128.0 +1.6355909 -2.385581 0.24440084 128.0 +1.5410422 -2.2774129 0.23407714 128.0 +1.5054518 -2.2544675 0.23126158 128.0 +1.4893967 -2.26033 0.2309728 128.0 +1.4744129 -2.2677534 0.23082842 128.0 +1.4421731 -2.2482061 0.22837383 128.0 +1.4288841 -2.2578559 0.22844602 128.0 +1.4150033 -2.2665808 0.22844602 128.0 +2.4698055 -4.0124688 0.37608227 128.0 +2.4368606 -4.0139046 0.37492719 128.0 +1.3556304 -2.2631433 0.22599143 128.0 +2.3864067 -4.0417881 0.3747828 128.0 +2.3505266 -4.0373893 0.37319455 128.0 +2.3118126 -4.0275116 0.37117311 128.0 +10.498816 -18.561769 1.578614 128.0 +10.457574 -18.756516 1.589443 128.0 +8.9691219 -16.32119 1.383041 128.0 +1.6252706 -2.9989865 0.28194159 128.0 +1.1861367 -2.2204597 0.21725598 128.0 +1.1734182 -2.2294617 0.21740037 128.0 +1.1578816 -2.233077 0.2171116 128.0 +10.476711 -20.533361 1.7035813 128.0 +1.1335256 -2.2533565 0.21761696 128.0 +1.576152 -3.1828225 0.29212093 128.0 +1.5653294 -3.2103665 0.2935648 128.0 +1.5460328 -3.2208102 0.29363701 128.0 +1.5241122 -3.2257261 0.29327604 128.0 +1.4933645 -3.2114992 0.291399 128.0 +1.4678253 -3.2079027 0.29038829 128.0 +7.8004642 -17.340548 1.411341 128.0 +1.4089795 -3.1818919 0.28692296 128.0 +1.386246 -3.1831608 0.28634542 128.0 +7.4368062 -17.38032 1.4033997 128.0 +7.2851686 -17.318975 1.3950251 128.0 +7.1562843 -17.308968 1.3907658 128.0 +7.0525713 -17.35902 1.3912711 128.0 +8.1677227 -20.463552 1.6298715 128.0 +7.8818512 -20.1047 1.5981063 128.0 +7.7913051 -20.238317 1.6047481 128.0 +1.2572964 -3.3238523 0.29226533 128.0 +1.0072722 -2.7124395 0.24447304 128.0 +0.99436212 -2.7288787 0.24526717 128.0 +0.98195863 -2.7471399 0.24620569 128.0 +0.97661877 -2.7860613 0.24873248 128.0 +0.9663049 -2.8118122 0.25024855 128.0 +0.95889139 -2.8469939 0.25248656 128.0 +0.95045775 -2.880295 0.25458017 128.0 +0.95605028 -2.9582098 0.2600669 128.0 +0.96222425 -3.0410542 0.26591459 128.0 +0.94796699 -3.0611939 0.26699749 128.0 +0.92858833 -3.0650437 0.26685309 128.0 +0.91033 -3.0725965 0.26699749 128.0 +0.91224253 -3.1499836 0.27241203 128.0 +0.94225931 -3.3302066 0.28555128 128.0 +0.92578763 -3.3503473 0.28663421 128.0 +0.86785638 -3.2172837 0.27623829 128.0 +0.82198799 -3.1231906 0.26880234 128.0 +0.9828015 -3.8305836 0.32128721 128.0 +0.9580707 -3.8317034 0.32092625 128.0 +0.75587553 -3.1029027 0.26620337 128.0 +0.74003887 -3.1210701 0.26721409 128.0 +0.78667068 -3.4113081 0.28843904 128.0 +0.77356631 -3.4511099 0.29103801 128.0 +0.76635844 -3.5201173 0.2958028 128.0 +1.7779984 -8.4228611 0.65814334 128.0 +1.7070951 -8.3398046 0.65121275 128.0 +0.79992419 -4.0306368 0.33247724 128.0 +0.79471612 -4.137341 0.3399854 128.0 +1.5389307 -8.2923403 0.64550942 128.0 +0.64682353 -3.6048455 0.30013445 128.0 +0.61501336 -3.5527253 0.29601941 128.0 +1.4397532 -8.6419659 0.66918898 128.0 +0.65165657 -4.0612879 0.33276603 128.0 +0.62778652 -4.0721107 0.33327138 128.0 +0.60322565 -4.078846 0.33348796 128.0 +0.58781797 -4.1506133 0.33846933 128.0 +0.5093326 -3.7617416 0.3098084 128.0 +0.48981002 -3.7924941 0.31182984 128.0 +0.46495256 -3.7825584 0.3108913 128.0 +0.43746829 -3.7486842 0.30822015 128.0 +0 -0 0 128.0 +0.39576495 -3.7954361 0.31125227 128.0 +2.1241627 -21.715271 1.6143498 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0.22938477 -3.1243927 0.26179954 128.0 +0.21360366 -3.1764948 0.26548141 128.0 +0.19362548 -3.1697812 0.26490387 128.0 +0.1646096 -2.9956295 0.25219777 128.0 +0.13494162 -2.7634668 0.23530443 128.0 +0.13811077 -3.2405703 0.26981306 128.0 +0.11862033 -3.252321 0.27060717 128.0 +0.098811619 -3.2579722 0.27096814 128.0 +0.079104327 -3.2704825 0.27183446 128.0 +0.059494194 -3.2968345 0.2737115 128.0 +0.040681221 -3.4198084 0.28259134 128.0 +0.018892037 -3.2713845 0.27183446 128.0 +-0.001117967 -3.1836684 0.26548141 128.0 +-0.020761976 -3.1995595 0.26663652 128.0 +-0.040678777 -3.2213128 0.26822478 128.0 +-0.060806073 -3.2399495 0.26959646 128.0 +-0.08101242 -3.2524772 0.27053499 128.0 +-0.10206366 -3.2868104 0.27306178 128.0 +-0.12346438 -3.3190129 0.27544418 128.0 +-0.14448029 -3.3331394 0.27652708 128.0 +-0.1655252 -3.3441441 0.2773934 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.4662026 -21.47769 1.5932692 128.0 +-1.5998119 -21.493155 1.5950742 128.0 +-1.7314208 -21.47995 1.5948576 128.0 +-1.8652576 -21.492769 1.5965902 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6467557 -3.4236007 0.31002498 128.0 +-1.6725508 -3.4232881 0.31081912 128.0 +-1.6819905 -3.3897352 0.30894208 128.0 +-1.6937762 -3.3615394 0.30749819 128.0 +-1.7116431 -3.3457565 0.30706504 128.0 +-1.7312201 -3.333421 0.30692065 128.0 +-1.8042308 -3.4224191 0.31507856 128.0 +-1.8327292 -3.4253526 0.31623363 128.0 +-1.8575218 -3.4210539 0.3168112 128.0 +-1.8832935 -3.4183261 0.31753314 128.0 +-1.9232218 -3.4406543 0.32034868 128.0 +-4.7613678 -8.3932762 0.73351365 128.0 +-4.8112855 -8.36131 0.73329705 128.0 +-4.836854 -8.2877016 0.72961521 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.9191599 -8.4399576 0.97774518 128.0 +-10.021159 -8.4212809 0.98250997 128.0 +-10.113323 -8.3933897 0.98633623 128.0 +-10.112947 -8.2888212 0.98149925 128.0 +-10.445054 -8.4543734 1.0077056 128.0 +-10.553611 -8.4355793 1.0129757 128.0 +-10.389076 -8.2001314 0.99305028 128.0 +-10.399073 -8.1049643 0.98936838 128.0 +-10.37114 -7.9813986 0.98229337 128.0 +-10.4088 -7.9091654 0.98128265 128.0 +-10.540113 -7.9073906 0.98879081 128.0 +-10.637328 -7.8787766 0.99319464 128.0 +-10.711236 -7.8321953 0.99550486 128.0 +-10.752622 -7.7616553 0.99492729 128.0 +-10.848783 -7.7302551 0.99925894 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.352236 -8.8559847 1.3810918 128.0 +-16.459064 -8.7836552 1.3854234 128.0 +-16.554142 -8.7043123 1.3888165 128.0 +-16.489449 -8.5415668 1.3792148 128.0 +-16.468695 -8.4030619 1.3732948 128.0 +-0 -0 0 128.0 +-16.6108 -8.2202377 1.3765435 128.0 +-7.0076547 -3.4152889 0.59930545 128.0 +-7.0050964 -3.3610122 0.59742838 128.0 +-7.0183721 -3.3145602 0.59685081 128.0 +-7.037673 -3.2710135 0.59677863 128.0 +-7.0748463 -3.2356486 0.59815031 128.0 +-7.2346482 -3.2551813 0.60926819 128.0 +-7.2481008 -3.2079043 0.6087628 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-22.25441 -8.7244892 1.7652348 128.0 +-22.079473 -8.4999943 1.7475474 128.0 +-21.952078 -8.2966642 1.7336862 128.0 +-22.176508 -8.2263241 1.7471142 128.0 +-22.40933 -8.1566095 1.761192 128.0 +-22.4552 -8.0176144 1.7609032 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-28.422279 -8.9828568 2.1926219 128.0 +-27.539248 -8.5183144 2.1215832 128.0 +-27.516533 -8.3266468 2.1159523 128.0 +-28.470909 -8.425065 2.1841753 128.0 +-28.514404 -8.2479954 2.1835978 128.0 +-28.577913 -8.0766764 2.1846085 128.0 +-28.652893 -7.9083371 2.1865578 128.0 +-0 -0 0 128.0 +-12.974053 -3.4107933 1.0060451 128.0 +-12.810199 -3.2838335 0.9922561 128.0 +-12.80785 -3.1996119 0.9905957 128.0 +-12.844687 -3.1252069 0.99189514 128.0 +-34.068565 -8.0660543 2.5691848 128.0 +-34.099922 -7.8528333 2.5678852 128.0 +-34.255501 -7.6676316 2.5758986 128.0 +-35.022156 -7.6138582 2.6292498 128.0 +-0 -0 0 128.0 +-34.922405 -7.1445336 2.6151721 128.0 +-0 -0 0 128.0 +-18.939125 -3.6336219 1.4309055 128.0 +-18.263807 -3.3880453 1.3795757 128.0 +-18.31665 -3.2817197 1.3819581 128.0 +-0 -0 0 128.0 +-18.38801 -3.0621035 1.3843405 128.0 +-18.26759 -2.9269786 1.3741611 128.0 +-18.923998 -2.91313 1.4209428 128.0 +-18.260693 -2.69647 1.371129 128.0 +-19.187439 -2.7130668 1.4376917 128.0 +-24.236725 -3.2751572 1.8053024 128.0 +-0 -0 0 128.0 +-23.669226 -2.9032052 1.7611198 128.0 +-23.693527 -2.7587259 1.7616252 128.0 +-23.756605 -2.6184266 1.7650182 128.0 +-23.502388 -2.4445565 1.7453816 128.0 +-25.92017 -2.5352528 1.9201627 128.0 +-23.919964 -2.1916161 1.7736815 128.0 +-23.867373 -2.0392041 1.7689167 128.0 +-0 -0 0 128.0 +-44.364353 -3.2415764 3.2548089 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-45.063847 -2.4597418 3.3017349 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-40.057011 14.314319 2.5996921 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-39.607433 15.539605 2.6002338 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-35.425083 14.656776 2.3464653 128.0 +-35.252605 14.839398 2.3411095 128.0 +-34.725941 14.869191 2.3125854 128.0 +-34.496773 15.022208 2.3035588 128.0 +-34.330933 15.201263 2.2987444 128.0 +-0 0 0 128.0 +-57.075562 26.114347 3.8191888 128.0 +-56.807449 26.414404 3.8120878 128.0 +-56.485458 26.687422 3.8014965 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-40.631016 20.119881 2.7686102 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-33.682472 19.062901 2.3684902 128.0 +-34.332733 19.710022 2.4218676 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-20.978449 13.819917 1.5497155 128.0 +-20.916502 13.963896 1.5514004 128.0 +-20.943695 14.168599 1.5596447 128.0 +-20.927994 14.345941 1.5648801 128.0 +-20.453424 14.205892 1.5365366 128.0 +-20.698942 14.56549 1.561089 128.0 +-20.499453 14.613999 1.552965 128.0 +-20.457951 14.77457 1.5565757 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-40.901764 30.699594 3.1183617 128.0 +-40.672894 30.919781 3.1153529 128.0 +-40.524326 31.201036 3.1185424 128.0 +-0 0 0 128.0 +-40.356174 31.867956 3.1352718 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-36.798763 30.174955 2.9041901 128.0 +-36.917805 30.653328 2.9280806 128.0 +-36.240799 30.468813 2.8896272 128.0 +-0 0 0 128.0 +-34.470669 29.710211 2.7787201 128.0 +-22.474581 19.61261 1.8335124 128.0 +-21.700768 19.173172 1.7809775 128.0 +-21.499388 19.231432 1.7742376 128.0 +-32.994232 29.87986 2.7187834 128.0 +-32.750675 30.027107 2.7139089 128.0 +-20.70133 19.215109 1.7380108 128.0 +-21.126427 19.852373 1.7829634 128.0 +-20.481329 19.484211 1.7394551 128.0 +-32.968067 31.750334 2.7946069 128.0 +-14.931726 14.558145 1.2924567 128.0 +-14.87835 14.68525 1.2955258 128.0 +-14.737123 14.725468 1.291193 128.0 +-14.46403 14.631054 1.2755469 128.0 +-14.437448 14.784515 1.281023 128.0 +-14.354775 14.881445 1.2817452 128.0 +-14.187449 14.889752 1.2751256 128.0 +-29.02862 30.841713 2.5886195 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-17.376225 19.156332 1.5944273 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-25.031542 29.357054 2.3610885 128.0 +-15.778474 18.736908 1.5119842 128.0 +-24.070053 28.941387 2.3045819 128.0 +-23.813456 28.992887 2.2971199 128.0 +-0 0 0 128.0 +-23.434034 29.255665 2.2950134 128.0 +-15.517074 19.617622 1.5431561 128.0 +-23.19676 29.699152 2.3071091 128.0 +-23.055546 29.894674 2.3112013 128.0 +-23.086367 30.317499 2.3325644 128.0 +-23.385193 31.104036 2.3812478 128.0 +-23.129051 31.159575 2.3746886 128.0 +-23.08552 31.502996 2.3897932 128.0 +-0 0 0 128.0 +-23.563278 32.996712 2.4796381 128.0 +-22.979078 32.599754 2.4397404 128.0 +-22.589348 32.468105 2.4197614 128.0 +-22.36484 32.569893 2.4171135 128.0 +-22.133215 32.660236 2.4137437 128.0 +-23.009474 34.405937 2.5305481 128.0 +-20.471701 31.021536 2.2759373 128.0 +-20.306026 31.185041 2.2787054 128.0 +-20.048473 31.206593 2.2713637 128.0 +-20.467409 32.292686 2.3401465 128.0 +-20.149282 32.226383 2.3265464 128.0 +-19.955881 32.357059 2.3270881 128.0 +-8.8877325 14.61115 1.0662496 128.0 +-8.8425894 14.739878 1.071485 128.0 +-8.5634155 14.475133 1.0491592 128.0 +-8.4905319 14.554995 1.0510849 128.0 +-18.788713 32.666706 2.3071091 128.0 +-8.3171883 14.66851 1.051807 128.0 +-8.2533274 14.766318 1.0550566 128.0 +-8.176054 14.841162 1.0567416 128.0 +-10.273906 18.922762 1.3333173 128.0 +-18.016577 33.673897 2.3376193 128.0 +-17.606195 33.397942 2.3113217 128.0 +-15.752043 30.33049 2.0956457 128.0 +-15.583827 30.462116 2.0980527 128.0 +-15.371468 30.507244 2.0946827 128.0 +-14.89293 30.01442 2.0552063 128.0 +-9.5886364 19.626274 1.3520926 128.0 +-9.0284262 18.770811 1.2909523 128.0 +-14.393897 30.401649 2.0630896 128.0 +-14.234489 30.548208 2.0670011 128.0 +-9.1927147 20.048944 1.3649104 128.0 +-13.887689 30.785189 2.0712736 128.0 +-13.712298 30.900843 2.0733197 128.0 +-8.6640072 19.852474 1.3410802 128.0 +-8.5274658 19.871323 1.3388536 128.0 +-8.3964529 19.902121 1.3374695 128.0 +-12.486772 30.111454 2.0004449 128.0 +-12.286331 30.149605 1.9979775 128.0 +-12.099621 30.220718 1.9977368 128.0 +-11.611465 29.525238 1.9479098 128.0 +-11.41246 29.550303 1.9449612 128.0 +-11.747989 30.983385 2.0328805 128.0 +-11.329951 30.443071 1.9935243 128.0 +-11.115891 30.437946 1.9887704 128.0 +-10.521212 29.367605 1.9158955 128.0 +-10.306073 29.332726 1.9095768 128.0 +-10.288128 29.866346 1.9396054 128.0 +-10.178439 30.147375 1.9535064 128.0 +-10.048131 30.375105 1.9640374 128.0 +-9.8514099 30.40485 1.9620515 128.0 +-9.6091223 30.289658 1.9509789 128.0 +-9.6394711 31.044901 1.9949687 128.0 +-9.1064196 29.976463 1.9239593 128.0 +-8.9757614 30.211662 1.9352726 128.0 +-8.7974567 30.29109 1.9368372 128.0 +-8.5555601 30.147646 1.9245008 128.0 +-8.4061451 30.328472 1.9325646 128.0 +-3.8564699 14.253727 0.92543429 128.0 +-3.7607841 14.246238 0.92350858 128.0 +-3.6640916 14.233278 0.92128205 128.0 +-3.5652707 14.209989 0.91845369 128.0 +-3.5320477 14.452677 0.93217415 128.0 +-3.4199662 14.375998 0.92609626 128.0 +-3.4230745 14.791538 0.95052832 128.0 +-4.4247227 19.667845 1.2505732 128.0 +-4.2519565 19.456684 1.2358899 128.0 +-0 0 0 128.0 +-4.0390215 19.634499 1.243713 128.0 +-3.9487176 19.810646 1.2530404 128.0 +-3.8142266 19.767855 1.2489485 128.0 +-3.7148352 19.908636 1.2561697 128.0 +-3.5895977 19.914354 1.2551467 128.0 +-0 0 0 128.0 +-5.2080498 31.071371 1.9345504 128.0 +-4.4521317 27.599482 1.7206196 128.0 +-4.9877043 32.173599 1.9980377 128.0 +-0 0 0 128.0 +-4.5649099 32.038692 1.9862429 128.0 +-0 0 0 128.0 +-3.4575102 26.600561 1.6523782 128.0 +-0 0 0 128.0 +-3.2072563 27.291321 1.6918547 128.0 +-3.3606598 30.193415 1.8667305 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.4562285 37.281181 2.2924259 128.0 +-3.2268941 37.295719 2.2920649 128.0 +-3.0258141 37.661068 2.3130066 128.0 +-0 0 0 128.0 +-2.5407357 37.361744 2.2928472 128.0 +-1.7609044 28.47583 1.7552216 128.0 +-2.002404 35.959927 2.2064924 128.0 +-0 0 0 128.0 +-1.5576808 35.905998 2.2019191 128.0 +-1.2497644 33.563782 2.0600808 128.0 +-1.0412527 33.48901 2.0551462 128.0 +-0.6726352 26.960669 1.661104 128.0 +-0.62904787 33.437389 2.0514152 128.0 +-0.4119648 32.502396 1.9948483 128.0 +-0.2136115 32.67001 2.0048378 128.0 +-0.013098006 32.549923 1.9975562 128.0 +0.18600231 32.44059 1.990997 128.0 +0 0 0 128.0 +0.5069834 28.151339 1.732655 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.1820407 32.447548 1.9926819 128.0 +1.2184982 28.619087 1.7621419 128.0 +0 0 0 128.0 +1.4978091 27.293327 1.683129 128.0 +1.8866708 30.912273 1.9022954 128.0 +0 0 0 128.0 +2.0345471 27.733007 1.7116531 128.0 +0 0 0 128.0 +3.5538716 41.465446 2.5442085 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.0892498 20.032804 1.24949 128.0 +2.2154179 20.049372 1.2512953 128.0 +2.3554041 20.181147 1.2601414 128.0 +4.2828455 34.840038 2.1514301 128.0 +0 0 0 128.0 +2.7316971 20.172949 1.2624884 128.0 +4.5046897 31.799231 1.9714392 128.0 +4.7017665 31.784815 1.9722817 128.0 +4.9072013 31.823439 1.976434 128.0 +5.1136036 31.862705 1.9807066 128.0 +5.3392272 32.011894 1.9917792 128.0 +0 0 0 128.0 +2.6662173 14.858294 0.94529283 128.0 +2.7662685 14.889744 0.94824153 128.0 +0 0 0 128.0 +2.8679388 14.447375 0.9232077 128.0 +2.9811733 14.549785 0.93060952 128.0 +0 0 0 128.0 +9.1167669 41.878353 2.6190693 128.0 +9.3700628 41.806038 2.6181064 128.0 +3.4432018 14.93134 0.95901334 128.0 +0 0 0 128.0 +3.5569687 14.603799 0.94138134 128.0 +3.6397293 14.554585 0.93969637 128.0 +3.4863479 13.586379 0.8808428 128.0 +3.5409443 13.455648 0.87404275 128.0 +9.9291477 36.814308 2.3339484 128.0 +10.147406 36.72575 2.3322635 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +8.1466379 20.036928 1.3392147 128.0 +7.9664321 19.254208 1.2914337 128.0 +8.0642862 19.157124 1.2883044 128.0 +0 0 0 128.0 +8.2975712 19.053974 1.288124 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +32.26062 63.187164 4.3123431 128.0 +32.539318 62.778877 4.2981415 128.0 +33.053116 62.82362 4.3148708 128.0 +33.053364 61.899364 4.2656455 128.0 +33.307949 61.465454 4.2498789 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +38.760017 64.727242 4.5835629 128.0 +19.24114 31.688559 2.2702205 128.0 +19.513708 31.697405 2.279247 128.0 +0 0 0 128.0 +20.229427 31.974335 2.3162563 128.0 +32.477028 50.642712 3.6621857 128.0 +31.565897 48.563572 3.5270872 128.0 +31.872618 48.383144 3.5281103 128.0 +13.586473 20.351141 1.5104196 128.0 +13.746325 20.319479 1.5142107 128.0 +13.944676 20.342607 1.522094 128.0 +21.872381 31.491892 2.3467662 128.0 +14.313316 20.340569 1.5346711 128.0 +13.982427 19.613499 1.4873716 128.0 +14.447307 20.004782 1.5228763 128.0 +14.121872 19.303478 1.4771414 128.0 +14.559776 19.64794 1.509517 128.0 +0 0 0 128.0 +29.994928 39.456291 3.0232213 128.0 +30.203579 39.228794 3.0199716 128.0 +30.350418 38.92308 3.0108247 128.0 +30.317104 38.392212 2.9844067 128.0 +30.532154 38.180519 2.982481 128.0 +30.792234 38.02504 2.9850085 128.0 +31.023706 37.833843 2.9848881 128.0 +31.27886 37.671188 2.9871147 128.0 +31.612835 37.601566 2.9968033 128.0 +31.863016 37.43045 2.9986689 128.0 +0 0 0 128.0 +42.595024 48.811405 3.9408073 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.065226 20.040888 1.7028069 128.0 +19.009192 19.738031 1.6872811 128.0 +0 0 0 128.0 +19.301865 19.555845 1.6917343 128.0 +0 0 0 128.0 +19.911644 19.684538 1.7232071 128.0 +0 0 0 128.0 +0 0 0 128.0 +39.949059 38.065701 3.3619001 128.0 +45.591896 42.911942 3.8098011 128.0 +0 0 0 128.0 +0 0 0 128.0 +43.177914 39.16626 3.5496538 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.570004 15.357338 1.442058 128.0 +0 0 0 128.0 +17.598391 15.005211 1.4294809 128.0 +17.669516 14.879586 1.4278561 128.0 +17.68911 14.711528 1.4222596 128.0 +17.752048 14.580538 1.4201534 128.0 +18.048162 14.639233 1.4362208 128.0 +18.005205 14.422128 1.4259906 128.0 +18.139549 14.347915 1.429541 128.0 +18.143858 14.171211 1.4231622 128.0 +18.305559 14.117528 1.428879 128.0 +18.832588 14.340574 1.4622775 128.0 +18.511732 13.917622 1.4314667 128.0 +18.567926 13.782355 1.4293003 128.0 +20.833271 15.266538 1.5923212 128.0 +20.35396 14.724189 1.5497155 128.0 +20.49185 14.633247 1.5532659 128.0 +20.683235 14.579124 1.5607882 128.0 +20.776398 14.454791 1.561089 128.0 +21.14365 14.518588 1.5814892 128.0 +21.0679 14.277143 1.5695138 128.0 +20.765131 13.886797 1.5412304 128.0 +20.874109 13.775067 1.5429755 128.0 +21.481874 13.987699 1.5806466 128.0 +21.568977 13.856704 1.580767 128.0 +21.687319 13.745474 1.5831741 128.0 +0 0 0 128.0 +0 0 0 128.0 +25.118429 15.279477 1.8076963 128.0 +24.20253 14.519618 1.736747 128.0 +24.208693 14.322048 1.73097 128.0 +24.321981 14.188326 1.7327753 128.0 +24.565195 14.128902 1.7436675 128.0 +24.68008 13.994156 1.7456534 128.0 +0 0 0 128.0 +25.475063 14.034635 1.7886802 128.0 +0 0 0 128.0 +28.144936 15.058336 1.9595842 128.0 +28.173225 14.851843 1.9552515 128.0 +28.152208 14.620727 1.9476691 128.0 +28.14275 14.397249 1.9409894 128.0 +28.128046 14.172644 1.934069 128.0 +28.16083 13.973166 1.9304584 128.0 +28.279221 13.816323 1.9326849 128.0 +28.573055 13.743361 1.9467063 128.0 +28.903139 13.684394 1.9631348 128.0 +30.834118 14.367719 2.0860171 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.026752 13.768172 2.0816243 128.0 +31.181091 13.608281 2.0862579 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +36.555431 14.635971 2.4091101 128.0 +0 0 0 128.0 +36.65593 14.156788 2.4041755 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +41.506668 14.298059 2.6818345 128.0 +0 0 0 128.0 +0 0 0 128.0 +42.648777 13.818705 2.7379799 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +47.97842 14.254436 3.0526481 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +37.62899 -2.0648623 2.3071694 128.0 +37.072609 -2.2625763 2.2743726 128.0 +37.4823 -2.5185101 2.3000083 128.0 +25.571749 -1.8760238 1.5810077 128.0 +0 -0 0 128.0 +31.732855 -2.719815 1.9553117 128.0 +31.621138 -2.9057965 1.9495949 128.0 +0 -0 0 128.0 +27.467922 -2.8645215 1.7001592 128.0 +27.449829 -3.0330076 1.7001592 128.0 +27.405914 -3.198487 1.6986548 128.0 +27.417477 -3.3704834 1.7005804 128.0 +27.4042 -3.5396733 1.7010618 128.0 +27.386909 -3.7084253 1.7013627 128.0 +27.384396 -3.8793383 1.7026265 128.0 +27.370939 -4.0488992 1.7032884 128.0 +19.25209 -2.9688466 1.2095923 128.0 +19.303488 -3.0981486 1.2138649 128.0 +19.417034 -3.2387021 1.2219889 128.0 +18.800756 -3.2546139 1.1855214 128.0 +18.942545 -3.3989973 1.1954507 128.0 +19.263842 -3.5787859 1.2164526 128.0 +19.073895 -3.6647165 1.2061622 128.0 +0 -0 0 128.0 +18.775194 -3.8468201 1.1906364 128.0 +18.672131 -3.9452374 1.185762 128.0 +18.761686 -4.0845747 1.1928028 128.0 +37.607021 -8.4289694 2.3586812 128.0 +37.680065 -8.6884947 2.3664441 128.0 +37.463844 -8.8810825 2.3563945 128.0 +0 -0 0 128.0 +37.212593 -9.3052845 2.347729 128.0 +0 -0 0 128.0 +9.0556774 -2.3831956 0.5997538 128.0 +32.000362 -8.6308374 2.0333619 128.0 +8.9872646 -2.48351 0.59734666 128.0 +7.9988799 -2.2633464 0.53638691 128.0 +7.9119725 -2.2912853 0.53181338 128.0 +8.924715 -2.6439795 0.59638381 128.0 +8.8424063 -2.6787248 0.59223157 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.9842396 -2.5801675 0.54108071 128.0 +7.9635181 -2.6275456 0.54077983 128.0 +25.441631 -8.5669508 1.6536419 128.0 +7.2254853 -2.4827983 0.49582726 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.4252286 -2.7052295 0.51165396 128.0 +7.3963246 -2.7462227 0.51087165 128.0 +0 -0 0 128.0 +7.016499 -2.7036443 0.48854578 128.0 +7.018362 -2.7539372 0.48974934 128.0 +7.2775712 -2.9072866 0.5076822 128.0 +7.2632942 -2.9533901 0.50792295 128.0 +7.1998401 -2.9792025 0.50497425 128.0 +7.1998248 -3.0310688 0.50617778 128.0 +5.7202539 -2.4496961 0.41037524 128.0 +19.748598 -8.6000481 1.3337986 128.0 +4.643784 -2.0565765 0.34141186 128.0 +4.5764642 -2.0604482 0.33780119 128.0 +4.5582891 -2.0859983 0.33744013 128.0 +4.5435939 -2.1130865 0.33731979 128.0 +4.5576186 -2.1537178 0.3391251 128.0 +4.532619 -2.1760273 0.33834279 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +3.957773 -2.0210819 0.30313897 128.0 +3.9435248 -2.0444098 0.30301863 128.0 +3.9309063 -2.0685682 0.30301863 128.0 +3.8846803 -2.0747821 0.30073187 128.0 +3.875387 -2.1004813 0.30097258 128.0 +3.8685484 -2.1275873 0.30139384 128.0 +3.8528059 -2.1498253 0.30121329 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.1716061 -4.1762114 0.5355444 128.0 +7.087399 -4.1856236 0.53145236 128.0 +13.792784 -8.2597666 1.0044473 128.0 +7.1694574 -4.3536172 0.54090017 128.0 +6.8221483 -4.2002473 0.51821327 128.0 +6.7826986 -4.233572 0.51725042 128.0 +3.949281 -2.4990284 0.3169798 128.0 +6.9226537 -4.4398828 0.53103107 128.0 +6.8818898 -4.4735718 0.53006822 128.0 +3.8984449 -2.5685527 0.31667891 128.0 +6.7476058 -4.5050354 0.52435136 128.0 +3.527653 -2.3868852 0.29200613 128.0 +3.4874177 -2.3909903 0.29014063 128.0 +2.9381387 -2.0410905 0.25090492 128.0 +2.9516826 -2.0774617 0.25283059 128.0 +3.0835586 -2.1986713 0.26354221 128.0 +3.0781019 -2.2233944 0.26414397 128.0 +3.0523171 -2.2333992 0.26324129 128.0 +3.0385556 -2.2520857 0.26324129 128.0 +2.9767797 -2.2347357 0.25963065 128.0 +4.8018203 -3.65081 0.39888135 128.0 +4.7453194 -3.6540198 0.3962937 128.0 +4.4709144 -3.486655 0.37703693 128.0 +4.4627538 -3.5245385 0.37805992 128.0 +5.5846887 -4.4663887 0.4663403 128.0 +5.5835538 -4.5219297 0.46838632 128.0 +5.0161638 -4.1136909 0.42632228 128.0 +3.6583939 -3.0380731 0.32191435 128.0 +3.6190543 -3.0431199 0.32028955 128.0 +3.7758951 -3.2147315 0.33419055 128.0 +3.7092202 -3.1974354 0.33045954 128.0 +3.5376081 -3.0875614 0.3183037 128.0 +3.7302957 -3.2962458 0.33533391 128.0 +3.3491681 -2.9963133 0.30614784 128.0 +3.337379 -3.0228374 0.30668944 128.0 +3.3069961 -3.0324652 0.30572662 128.0 +3.9372635 -3.6550295 0.35910404 128.0 +4.4777913 -4.20818 0.4056814 128.0 +3.9355073 -3.74435 0.36271468 128.0 +3.4803486 -3.3522854 0.32654801 128.0 +3.4582844 -3.3721838 0.32642767 128.0 +3.3977437 -3.3540735 0.32305771 128.0 +4.4313335 -4.4282188 0.41290268 128.0 +3.6693199 -3.7121105 0.34989688 128.0 +7.8581128 -8.0472746 0.71330869 128.0 +3.5181525 -3.6476607 0.34074989 128.0 +3.4640296 -3.6359372 0.33798173 128.0 +3.1508937 -3.348208 0.3124063 128.0 +3.8167574 -4.1058335 0.37318555 128.0 +2.7443006 -2.988878 0.27985027 128.0 +2.7198737 -2.9990065 0.27930868 128.0 +3.6579397 -4.0832067 0.36572355 128.0 +3.5481415 -4.0098939 0.35802084 128.0 +2.726619 -3.1199596 0.28502557 128.0 +2.7472143 -3.1827207 0.28869638 128.0 +3.4134994 -4.0038857 0.35242432 128.0 +2.6153615 -3.1062474 0.28003082 128.0 +3.1324115 -3.7668903 0.33057991 128.0 +3.0984685 -3.7729268 0.32955688 128.0 +1.6748812 -2.0654528 0.19554164 128.0 +1.6646725 -2.0788071 0.19578235 128.0 +1.6549821 -2.0928965 0.19608323 128.0 +1.6470248 -2.1093051 0.19656466 128.0 +1.6383185 -2.1249044 0.1969859 128.0 +1.6421822 -2.1571529 0.19867086 128.0 +1.6247163 -2.1616037 0.19824962 128.0 +1.6506892 -2.2244315 0.20222133 128.0 +1.6476297 -2.2490106 0.20330453 128.0 +1.6718286 -2.3116465 0.20721607 128.0 +1.6738559 -2.3446059 0.20890105 128.0 +2.4151235 -3.4268787 0.28797424 128.0 +1.6529392 -2.3764415 0.20974353 128.0 +1.6400217 -2.3890076 0.20992406 128.0 +1.6410117 -2.4221623 0.21160902 128.0 +1.6116911 -2.4106128 0.21004441 128.0 +1.5880727 -2.4071267 0.20908158 128.0 +1.6391797 -2.5180395 0.21636304 128.0 +1.7882583 -2.7841909 0.23471718 128.0 +1.7679349 -2.7900524 0.23435612 128.0 +1.5274621 -2.4436822 0.20896122 128.0 +1.706316 -2.7673585 0.23122689 128.0 +1.3635172 -2.2422216 0.19343543 128.0 +1.6747954 -2.7923691 0.23152778 128.0 +1.6586467 -2.8043113 0.23164813 128.0 +1.6685697 -2.8609943 0.23489772 128.0 +1.6599418 -2.8867536 0.23598091 128.0 +1.6692779 -2.9446411 0.23929067 128.0 +1.4690301 -2.628958 0.21678428 128.0 +1.6195301 -2.9404242 0.23760569 128.0 +1.581453 -2.9134626 0.23507825 128.0 +1.2343823 -2.3079021 0.19301419 128.0 +1.5893381 -3.0156524 0.24073492 128.0 +1.5813861 -3.0457218 0.24211901 128.0 +1.5708513 -3.0713634 0.24320221 128.0 +1.5667987 -3.1103609 0.24518806 128.0 +1.5538961 -3.1324344 0.24603054 128.0 +1.0486903 -2.1472874 0.17929372 128.0 +1.0238127 -2.1293943 0.17766893 128.0 +1.0427643 -2.203299 0.18218224 128.0 +9.1671524 -19.673681 1.3437279 128.0 +0.9856922 -2.1506004 0.17784946 128.0 +0.96796262 -2.1465993 0.1771875 128.0 +1.4013613 -3.1588593 0.24356326 128.0 +1.3699743 -3.1399527 0.24175794 128.0 +8.764842 -20.424446 1.3751405 128.0 +8.5601978 -20.290226 1.3628644 128.0 +8.3843012 -20.218815 1.3548006 128.0 +8.2111111 -20.14971 1.3469776 128.0 +7.7986598 -19.478764 1.3001595 128.0 +7.7944393 -19.81979 1.3191755 128.0 +7.5953608 -19.667046 1.3062373 128.0 +7.1938934 -18.973139 1.2585167 128.0 +1.2415789 -3.337074 0.24988191 128.0 +1.4015394 -3.8387525 0.28159544 128.0 +1.386039 -3.8698328 0.28303969 128.0 +1.1792822 -3.3574786 0.24976155 128.0 +1.2519661 -3.6355102 0.26703247 128.0 +6.75634 -20.011923 1.3085843 128.0 +4.6947002 -14.192564 0.93644679 128.0 +6.5262542 -20.142704 1.3117136 128.0 +0.99302953 -3.1313748 0.23327293 128.0 +0.96580487 -3.1116703 0.23164813 128.0 +0.95365751 -3.1404598 0.23309238 128.0 +0.93550724 -3.1500795 0.2333331 128.0 +0.89722908 -3.0905774 0.22924103 128.0 +0.95128554 -3.3533754 0.2453686 128.0 +0.93442452 -3.3726161 0.24621108 128.0 +0.84540403 -3.1258395 0.23044458 128.0 +0.82264107 -3.1174562 0.2296021 128.0 +5.1782603 -20.11446 1.2874018 128.0 +0.80205786 -3.1979933 0.23399505 128.0 +0.76891148 -3.1475847 0.23056494 128.0 +0.772919 -3.2503226 0.23664285 128.0 +0.77321798 -3.3425272 0.24205883 128.0 +0.77548128 -3.4484882 0.24831729 128.0 +0.8103599 -3.709651 0.26414397 128.0 +0.83750361 -3.9498801 0.27864674 128.0 +0.67446148 -3.2803237 0.23712428 128.0 +0.65588224 -3.2922318 0.23760569 128.0 +0.76408994 -3.9616861 0.27846619 128.0 +0.56361055 -3.0223393 0.22057547 128.0 +0.73861527 -4.0994525 0.28634945 128.0 +0.71173704 -4.0940733 0.28574768 128.0 +0.68313742 -4.0776901 0.28448397 128.0 +0.65921718 -4.0887032 0.2849052 128.0 +0.64053994 -4.1341 0.28743264 128.0 +3.1112823 -20.917507 1.310149 128.0 +2.9831579 -20.938181 1.3102692 128.0 +2.8551664 -20.960047 1.3105099 128.0 +2.7263756 -20.976181 1.3104498 128.0 +2.5995784 -21.008366 1.3114127 128.0 +0.44133368 -3.7583294 0.26336166 128.0 +0.42897677 -3.8571966 0.26919886 128.0 +0.40425792 -3.849829 0.2685971 128.0 +0.38003871 -3.8462768 0.26823604 128.0 +2.0075614 -21.656685 1.3464359 128.0 +1.4876558 -17.196457 1.0758178 128.0 +1.5691963 -19.533516 1.2166331 128.0 +1.44525 -19.488028 1.2133234 128.0 +0.17341481 -2.5554962 0.18964425 128.0 +0.1571151 -2.5465493 0.18904248 128.0 +1.1140485 -20.009649 1.2434121 128.0 +0.9900158 -19.991184 1.2419076 128.0 +0.86789614 -20.009848 1.24269 128.0 +0.12072874 -3.2518754 0.23140742 128.0 +0.10086644 -3.255548 0.23158795 128.0 +0.081287436 -3.2720716 0.23255078 128.0 +0.062448796 -3.3383775 0.23652251 128.0 +0.0420397 -3.3446865 0.23688357 128.0 +0.021202449 -3.2969694 0.23399505 128.0 +0.00097470795 -3.3030267 0.23435612 128.0 +-0.019275168 -3.2999759 0.23417558 128.0 +-0.24638507 -20.744894 1.2859576 128.0 +-0.38099626 -21.150187 1.3105099 128.0 +-0.08001367 -3.299062 0.23417558 128.0 +-0.10013401 -3.2945182 0.23393488 128.0 +-0.74015868 -20.313639 1.2606831 128.0 +-0.86431998 -20.297745 1.2600211 128.0 +-0.9932192 -20.381788 1.265437 128.0 +-0.14929445 -2.7139857 0.19909211 128.0 +-0.16606593 -2.7150111 0.19921246 128.0 +-0.18292253 -2.716929 0.199393 128.0 +-0.19922476 -2.7107778 0.19909211 128.0 +-0.21632877 -2.7154746 0.19945318 128.0 +-1.8467233 -21.544762 1.3388536 128.0 +-1.9798894 -21.543959 1.3395156 128.0 +-2.1195452 -21.607899 1.3441492 128.0 +-2.2893567 -21.951897 1.3658131 128.0 +-2.3471704 -21.241938 1.3236287 128.0 +-0 -0 0 128.0 +-2.7192137 -22.119045 1.3787513 128.0 +-2.7941513 -21.63171 1.3501669 128.0 +-0 -0 0 128.0 +-3.0176773 -21.301273 1.332234 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-3.4955206 -20.95693 1.3161064 128.0 +-3.5482852 -20.497402 1.2893275 128.0 +-3.6937311 -20.585285 1.2960674 128.0 +-3.8123138 -20.521013 1.2935399 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-6.0411115 -25.4832 1.6141053 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-6.1886368 -24.11849 1.5363561 128.0 +-0 -0 0 128.0 +-6.0186214 -22.31465 1.4285781 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6628873 -3.4635444 0.26685196 128.0 +-1.6591733 -3.4021339 0.26342183 128.0 +-1.6778024 -3.3874168 0.26312095 128.0 +-1.6931745 -3.3663568 0.26239881 128.0 +-1.7119826 -3.3523481 0.2621581 128.0 +-1.7375728 -3.3515289 0.26282007 128.0 +-1.7915678 -3.4044082 0.26715285 128.0 +-1.8237073 -3.4144835 0.2685971 128.0 +-1.8460506 -3.4058621 0.26877764 128.0 +-1.8770138 -3.4128392 0.27004135 128.0 +-1.9149399 -3.4317677 0.27214757 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.927496 -8.6770563 0.83011317 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.9358807 -8.3668289 0.81831837 128.0 +-0 -0 0 128.0 +-10.149652 -8.3361368 0.82704413 128.0 +-10.430851 -8.4604616 0.84491682 128.0 +-10.356359 -8.2952042 0.83516806 128.0 +-10.396885 -8.2234526 0.83438575 128.0 +-10.67056 -8.3340054 0.85147619 128.0 +-10.606884 -8.1799822 0.84275043 128.0 +-0 -0 0 128.0 +-10.796622 -8.1169872 0.84955049 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.365303 -8.7557135 1.1541688 128.0 +-16.461103 -8.6774769 1.1570574 128.0 +-16.42634 -8.5307627 1.1510998 128.0 +-16.443718 -8.4120817 1.1487529 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.0343008 -3.4364047 0.50720078 128.0 +-7.0102768 -3.3715444 0.50419194 128.0 +-7.019104 -3.3229136 0.50340962 128.0 +-7.0420752 -3.2810473 0.50359017 128.0 +-7.1310334 -3.2693963 0.50816363 128.0 +-7.2392182 -3.2653956 0.51400083 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-22.1495 -8.5541306 1.4666705 128.0 +-22.179169 -8.4095697 1.4652263 128.0 +-22.215384 -8.2677517 1.4642634 128.0 +-22.38571 -8.1751156 1.4719661 128.0 +-22.352757 -8.0079784 1.4666705 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-27.773079 -8.4370327 1.7851298 128.0 +-28.489334 -8.4640417 1.8269531 128.0 +-28.525396 -8.2846212 1.8259903 128.0 +-28.567049 -8.1069832 1.8254486 128.0 +-28.548922 -7.9128828 1.8212363 128.0 +-34.044773 -9.2116776 2.1614797 128.0 +-12.920165 -3.4106836 0.84082472 128.0 +-12.810349 -3.2977445 0.83270079 128.0 +-12.823565 -3.2173789 0.83227956 128.0 +-34.090897 -8.3319283 2.1509488 128.0 +-34.102535 -8.1133518 2.1485415 128.0 +-34.149731 -7.9034996 2.1484213 128.0 +-34.662109 -7.798326 2.1771259 128.0 +-40.403316 -8.8299532 2.5285022 128.0 +-18.37022 -3.896559 1.1673478 128.0 +-0 -0 0 128.0 +-18.455811 -3.6786404 1.1697549 128.0 +-18.598589 -3.5885918 1.1771567 128.0 +-18.446577 -3.441994 1.1665052 128.0 +-18.410372 -3.3184719 1.163015 128.0 +-18.399902 -3.2001426 1.1611495 128.0 +-18.292196 -3.0658948 1.1533866 128.0 +-18.30081 -2.9520085 1.1527848 128.0 +-19.039639 -2.9514525 1.1967746 128.0 +-23.574394 -3.5065198 1.4720865 128.0 +-24.348478 -3.4691033 1.5179417 128.0 +-24.194244 -3.2957885 1.5072904 128.0 +-0 -0 0 128.0 +-24.509253 -3.032845 1.5240798 128.0 +-23.641121 -2.7782342 1.4702812 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-23.935595 -2.3670723 1.4852654 128.0 +-0 -0 0 128.0 +-25.89311 -2.2401984 1.6020699 128.0 +-0 -0 0 128.0 +-44.428097 -3.2953346 2.72101 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-42.066727 13.350698 2.1476352 128.0 +-46.310181 15.010961 2.3652859 128.0 +-0 0 0 128.0 +-40.622429 13.720304 2.0874503 128.0 +-0 0 0 128.0 +-40.79401 14.338344 2.1048508 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-40.222248 15.539385 2.0990665 128.0 +-35.633854 14.018454 1.8680308 128.0 +-0 0 0 128.0 +-35.307449 14.392839 1.8601909 128.0 +-35.171421 14.58969 1.8577529 128.0 +-34.893505 14.725989 1.8480009 128.0 +-34.698776 14.895288 1.8425992 128.0 +-60.870846 26.574751 3.2141378 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-55.488098 25.864021 2.9653192 128.0 +-55.187531 26.137304 2.9578617 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-33.751747 19.143105 1.8924584 128.0 +-0 0 0 128.0 +-34.021564 19.851868 1.9205672 128.0 +-0 0 0 128.0 +-33.73428 20.2432 1.9182725 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-49.357815 33.017384 2.8774078 128.0 +-20.882116 14.154287 1.2427571 128.0 +-20.839334 14.31269 1.2453384 128.0 +-20.518282 14.278245 1.2317622 128.0 +-20.474369 14.434957 1.2343436 128.0 +-20.429302 14.591665 1.236925 128.0 +-20.377419 14.744264 1.2391717 128.0 +-44.793015 32.832752 2.6933632 128.0 +-44.589909 33.106384 2.6933155 128.0 +-41.405895 31.138197 2.514864 128.0 +-41.503288 31.611984 2.5322645 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-36.863373 30.665924 2.3302934 128.0 +-0 0 0 128.0 +-34.620811 29.52663 2.2130785 128.0 +-34.341465 29.654287 2.2069118 128.0 +-34.118256 29.828941 2.2043304 128.0 +-21.734533 19.238096 1.4245549 128.0 +-33.018444 29.590069 2.1573393 128.0 +-21.394733 19.41074 1.417958 128.0 +-32.762447 30.09371 2.1644621 128.0 +-21.030577 19.556187 1.4098314 128.0 +-32.437958 30.537994 2.1675694 128.0 +-32.200077 30.688904 2.1642709 128.0 +-32.092392 30.964275 2.1696727 128.0 +-14.760887 14.417062 1.0229074 128.0 +-14.703399 14.538264 1.0250108 128.0 +-14.60474 14.619022 1.0243894 128.0 +-14.434786 14.627306 1.0189397 128.0 +-14.358009 14.729192 1.019848 128.0 +-14.239651 14.788231 1.0179359 128.0 +-28.0693 29.512625 1.984672 128.0 +-0 0 0 128.0 +-27.65814 29.804335 1.9813735 128.0 +-27.486893 29.986734 1.982234 128.0 +-0 0 0 128.0 +-16.759832 18.740009 1.2386459 128.0 +-27.229824 30.826733 2.0038891 128.0 +-16.68751 19.126415 1.2502145 128.0 +-25.021889 29.037537 1.8698951 128.0 +-24.76362 29.096956 1.8640152 128.0 +-16.04792 19.0916 1.2290374 128.0 +-24.233076 29.191908 1.851156 128.0 +-15.694012 19.142643 1.2200981 128.0 +-16.172701 19.97533 1.2654638 128.0 +-15.50158 19.388405 1.2234443 128.0 +-15.485065 19.6133 1.2313797 128.0 +-23.077507 29.602465 1.8317955 128.0 +-22.756525 29.563038 1.8208961 128.0 +-22.656898 29.810268 1.8273975 128.0 +-22.962147 30.599871 1.8663576 128.0 +-22.843523 30.834095 1.8719506 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-23.15905 32.493881 1.9450904 128.0 +-22.981647 32.667233 1.9469548 128.0 +-21.631157 31.151913 1.8504868 128.0 +-21.482517 31.346672 1.8541198 128.0 +-20.841 30.81432 1.8157812 128.0 +-20.75633 31.098642 1.8248161 128.0 +-20.326145 30.862534 1.8040215 128.0 +-19.997066 30.772257 1.7917837 128.0 +-19.734018 30.779175 1.7852346 128.0 +-20.517069 32.436932 1.8722852 128.0 +-20.196045 32.367298 1.8612905 128.0 +-19.152615 31.118484 1.7841829 128.0 +-18.930216 31.184185 1.7813146 128.0 +-8.7658978 14.640842 0.85210449 128.0 +-8.5687571 14.512859 0.84201789 128.0 +-8.5142183 14.624728 0.84531635 128.0 +-8.414876 14.660234 0.84440804 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-10.495008 19.090384 1.0780252 128.0 +-10.321533 19.050785 1.0723844 128.0 +-10.187511 19.082037 1.0706635 128.0 +-16.388134 31.156513 1.7202214 128.0 +-0 0 0 128.0 +-15.599977 30.562571 1.6776282 128.0 +-0 0 0 128.0 +-14.820951 29.937983 1.6341746 128.0 +-9.3395243 19.159451 1.0555096 128.0 +-0 0 0 128.0 +-9.4040136 19.908463 1.0891635 128.0 +-9.2694702 19.939522 1.0877771 128.0 +-9.1382246 19.976948 1.0867733 128.0 +-9.0351505 20.076366 1.0890679 128.0 +-13.799134 31.17334 1.666968 128.0 +-13.791782 31.680546 1.6890533 128.0 +-13.428913 31.371552 1.6685933 128.0 +-12.317258 29.269526 1.5552027 128.0 +-12.140867 29.352858 1.5556329 128.0 +-12.043269 29.630379 1.5661497 128.0 +-11.872345 29.731546 1.5675839 128.0 +-12.041981 30.70212 1.6137624 128.0 +-11.928037 30.969311 1.6237055 128.0 +-11.364404 30.054356 1.5731769 128.0 +-10.836093 29.197363 1.5258989 128.0 +-10.633156 29.198542 1.5226005 128.0 +-10.419189 29.166349 1.5176767 128.0 +-10.250269 29.258955 1.5191586 128.0 +-10.100393 29.408211 1.5235566 128.0 +-9.963727 29.600273 1.5301535 128.0 +-9.6696186 29.320299 1.5129919 128.0 +-9.5484705 29.561579 1.5221703 128.0 +-9.4277344 29.811991 1.5318266 128.0 +-9.1985683 29.720421 1.5243692 128.0 +-9.0391893 29.852783 1.5281936 128.0 +-8.8833513 30.000587 1.5328305 128.0 +-9.1497746 31.611773 1.6104161 128.0 +-8.5376301 30.189039 1.5368938 128.0 +-8.352499 30.241821 1.5369416 128.0 +-8.2192955 30.487316 1.546598 128.0 +-8.0877104 30.748732 1.557067 128.0 +-3.6675286 14.297175 0.74182111 128.0 +-3.5978968 14.392089 0.74540639 128.0 +-3.5031428 14.38769 0.74411571 128.0 +-3.4219339 14.439045 0.7455976 128.0 +-3.354357 14.551264 0.75009114 128.0 +-3.2759249 14.620307 0.75248134 128.0 +-4.2847729 19.690098 0.99981821 128.0 +-0 0 0 128.0 +-4.0195827 19.627682 0.99427295 128.0 +-3.9128716 19.72154 0.99766701 128.0 +-3.8207898 19.896244 1.0050288 128.0 +-3.6937149 19.892796 1.003738 128.0 +-3.5759921 19.939665 1.0049332 128.0 +-3.451875 19.951389 1.0044552 128.0 +-4.4555507 26.730164 1.3323414 128.0 +-4.4350433 27.652521 1.3757472 128.0 +-4.2698498 27.70883 1.3771814 128.0 +-4.7431321 32.088188 1.5878049 128.0 +-3.8017166 26.856182 1.3335365 128.0 +-3.6237378 26.781998 1.3288517 128.0 +-3.4783821 26.951336 1.3359745 128.0 +-0 0 0 128.0 +-6.3972287 54.8731 2.6793568 128.0 +-3.3314054 30.179911 1.4885643 128.0 +-4.548883 43.669441 2.136688 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-3.1658332 36.985241 1.8119569 128.0 +-2.9633415 37.312645 1.826776 128.0 +-1.9840353 27.082317 1.3350184 128.0 +-1.8272461 27.234505 1.3417587 128.0 +-0 0 0 128.0 +-1.4385294 26.261501 1.2941462 128.0 +-1.2847319 26.421482 1.3014123 128.0 +-0 0 0 128.0 +-1.2628459 34.770226 1.700574 128.0 +-0.81247628 26.914894 1.3241191 128.0 +-0.8066572 33.557861 1.6419188 128.0 +-0.60259026 33.666042 1.6468904 128.0 +-0.39046785 33.196678 1.6242791 128.0 +-0.18675275 33.195454 1.6241357 128.0 +0.016952762 33.229935 1.6257612 128.0 +0.21602245 32.50705 1.5911989 128.0 +0.42730719 33.427979 1.6353697 128.0 +0.62233841 32.893433 1.609938 128.0 +0 0 0 128.0 +0.95908546 30.742813 1.5074466 128.0 +1.215829 32.55899 1.5947365 128.0 +1.3329306 30.65189 1.5037658 128.0 +0 0 0 128.0 +1.6412739 29.420504 1.4456364 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.0647593 27.800497 1.3695805 128.0 +2.5016677 31.096804 1.5284804 128.0 +2.425163 27.996969 1.3803364 128.0 +1.8854673 20.319328 1.012056 128.0 +2.0103056 20.309364 1.0121516 128.0 +2.1061342 20.02347 0.99900556 128.0 +2.2291775 20.012156 0.99910116 128.0 +4.0339599 34.293007 1.6879538 128.0 +4.2446704 34.270584 1.6880972 128.0 +2.5855579 19.878588 0.99479878 128.0 +2.7327206 20.047422 1.003738 128.0 +2.8242266 19.809763 0.99307787 128.0 +2.9454298 19.790085 0.99298227 128.0 +4.9313846 31.787918 1.5749457 128.0 +0 0 0 128.0 +0 0 0 128.0 +5.6163869 32.27039 1.6030543 128.0 +5.8756475 32.575432 1.6195945 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.8929391 14.508431 0.74344641 128.0 +2.9776771 14.469862 0.74244255 128.0 +3.0925398 14.574432 0.74846584 128.0 +9.2447853 42.278492 2.1066194 128.0 +3.375803 15.000205 0.77126825 128.0 +3.463948 14.962667 0.7704556 128.0 +3.5415812 14.881857 0.76753956 128.0 +3.5509655 14.525105 0.75104725 128.0 +3.6597247 14.581515 0.75491935 128.0 +3.5146568 13.648575 0.70993596 128.0 +3.5276737 13.359245 0.69669431 128.0 +10.040635 37.092041 1.8744843 128.0 +10.274445 37.052834 1.8756316 128.0 +10.511971 37.025608 1.8774481 128.0 +11.285257 38.840405 1.9711435 128.0 +9.9808083 33.581036 1.712047 128.0 +10.185218 33.514385 1.711808 128.0 +0 0 0 128.0 +10.583032 33.346886 1.7098001 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.8048105 19.840658 1.0557964 128.0 +8.0835047 20.184618 1.0760175 128.0 +8.1585598 20.015322 1.0698508 128.0 +8.169838 19.696404 1.0559398 128.0 +8.4466772 20.015844 1.0751569 128.0 +0 0 0 128.0 +24.544844 56.221462 2.9713423 128.0 +0 0 0 128.0 +0 0 0 128.0 +25.067888 54.653416 2.9130695 128.0 +0 0 0 128.0 +36.687317 77.462212 4.1374202 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.377886 63.217304 3.4130971 128.0 +31.665833 62.826462 3.4025326 128.0 +31.461443 61.479488 3.3406267 128.0 +0 0 0 128.0 +32.180908 61.026932 3.3372805 128.0 +32.598118 60.909344 3.3416784 128.0 +33.21199 61.151443 3.3658192 128.0 +0 0 0 128.0 +34.196819 61.162987 3.3890519 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.522827 31.647116 1.8150163 128.0 +0 0 0 128.0 +0 0 0 128.0 +35.181343 54.746899 3.1498895 128.0 +0 0 0 128.0 +21.01158 31.831961 1.8608123 128.0 +0 0 0 128.0 +13.816323 20.38356 1.2139314 128.0 +13.938307 20.294283 1.2136924 128.0 +0 0 0 128.0 +14.257097 20.22212 1.2195722 128.0 +13.923402 19.493782 1.1819029 128.0 +14.054462 19.424168 1.1828589 128.0 +14.419631 19.673502 1.2027931 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +30.465221 39.492706 2.422507 128.0 +30.515102 39.059452 2.4075921 128.0 +0 0 0 128.0 +30.55555 38.137173 2.3741772 128.0 +30.805344 37.969135 2.3754203 128.0 +31.082758 37.834198 2.3788142 128.0 +31.787041 38.210995 2.4141891 128.0 +31.827204 37.785286 2.3998001 128.0 +35.413467 41.522938 2.6472325 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +43.99667 47.897537 3.1480253 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.071959 20.011736 1.3584423 128.0 +19.23531 19.936747 1.3612627 128.0 +19.272125 19.731173 1.3554306 128.0 +0 0 0 128.0 +19.711384 19.691549 1.3688635 128.0 +19.83326 19.571634 1.3689591 128.0 +19.42795 18.937836 1.3338711 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.701563 15.636785 1.1657929 128.0 +17.653414 15.402456 1.1566625 128.0 +17.531174 15.107371 1.1429906 128.0 +17.517805 14.909534 1.1363459 128.0 +17.628075 14.817834 1.1375409 128.0 +17.780916 14.761067 1.1414131 128.0 +18.098261 14.837862 1.1554674 128.0 +18.118317 14.669341 1.1511172 128.0 +18.052729 14.433772 1.1416043 128.0 +18.079802 14.274455 1.1378756 128.0 +18.05912 14.07912 1.1313264 128.0 +18.201368 14.011303 1.1347204 128.0 +18.424576 14.003917 1.1429906 128.0 +20.581036 15.44449 1.266898 128.0 +18.698576 13.853465 1.1491573 128.0 +18.850952 13.788002 1.1531727 128.0 +20.551659 14.839109 1.2485892 128.0 +20.56098 14.654757 1.2438087 128.0 +20.795116 14.630044 1.25227 128.0 +21.150326 14.686749 1.2677585 128.0 +21.289482 14.590574 1.2706267 128.0 +21.678127 14.662234 1.2879317 128.0 +20.928555 13.968917 1.2396499 128.0 +20.826176 13.716629 1.228894 128.0 +20.947638 13.613075 1.2310451 128.0 +21.413376 13.729575 1.2527959 128.0 +22.20717 14.046958 1.2929989 128.0 +0 0 0 128.0 +24.34462 14.983776 1.4035213 128.0 +0 0 0 128.0 +24.458097 14.642859 1.3996969 128.0 +24.456306 14.438686 1.3946297 128.0 +25.140953 14.635575 1.4276621 128.0 +24.658506 14.152895 1.3961116 128.0 +24.728365 13.991982 1.3952034 128.0 +25.393002 14.163035 1.4269451 128.0 +0 0 0 128.0 +25.556108 13.8456 1.4264671 128.0 +28.142223 15.023931 1.5621821 128.0 +28.137518 14.80029 1.5569714 128.0 +28.151531 14.587843 1.5528603 128.0 +28.136417 14.361707 1.5472673 128.0 +28.153505 14.153355 1.5434908 128.0 +28.169994 13.945778 1.539762 128.0 +28.268503 13.779231 1.5404791 128.0 +28.715443 13.779659 1.559744 128.0 +28.91506 13.657806 1.5658629 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.083828 13.759515 1.6622832 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +36.597061 14.613578 1.9213798 128.0 +36.923164 14.481743 1.9335698 128.0 +36.819309 14.180965 1.9237221 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +42.40295 14.854438 2.1856871 128.0 +0 0 0 128.0 +41.662823 14.023589 2.1392694 128.0 +42.432983 13.993532 2.1737838 128.0 +42.642563 13.77312 2.1800461 128.0 +0 0 0 128.0 +0 0 0 128.0 +48.252041 14.609587 2.4482255 128.0 +48.165504 14.261351 2.4394772 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.432268 0.74084944 0.87046111 128.0 +17.425507 0.63347471 0.86993527 128.0 +17.446037 0.52705348 0.87074792 128.0 +17.351084 0.41764778 0.86606318 128.0 +17.344332 0.3110151 0.86563295 128.0 +17.462772 0.20595682 0.87122595 128.0 +17.457714 0.098769873 0.87093914 128.0 +17.446005 -0.0083439611 0.8703655 128.0 +17.437634 -0.11533709 0.86998308 128.0 +0 -0 0 128.0 +17.424919 -0.3291257 0.86950505 128.0 +17.470501 -0.43723956 0.87179965 128.0 +17.383627 -0.54180884 0.86778408 128.0 +17.475798 -0.6520443 0.87237328 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +17.410774 -1.4001404 0.87136936 128.0 +17.431709 -1.5095319 0.87280351 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +27.423088 -2.8848855 1.355096 128.0 +27.427702 -3.0556407 1.3561954 128.0 +25.494844 -2.9987106 1.2639819 128.0 +27.424818 -3.3965347 1.3579643 128.0 +27.40247 -3.5646174 1.3579165 128.0 +25.393761 -3.4618106 1.2619742 128.0 +27.377428 -3.9035811 1.3589203 128.0 +27.362841 -4.0729637 1.3593984 128.0 +27.347206 -4.2423139 1.3598764 128.0 +19.264338 -3.1092517 0.96931934 128.0 +19.568991 -3.2817681 0.9850468 128.0 +18.938372 -3.2955713 0.95540845 128.0 +19.02199 -3.4305108 0.96047568 128.0 +19.323622 -3.6074905 0.97620314 128.0 +18.925501 -3.6534548 0.95789427 128.0 +18.931133 -3.7751772 0.95928055 128.0 +19.074909 -3.9257061 0.96745503 128.0 +19.07489 -4.0478592 0.9686501 128.0 +37.657127 -8.234128 1.8802207 128.0 +37.570812 -8.4571352 1.8784997 128.0 +37.624283 -8.7120705 1.8837104 128.0 +37.511814 -8.9288845 1.8808421 128.0 +37.602833 -9.1947145 1.8880606 128.0 +37.365513 -9.3800268 1.879169 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +9.0478516 -2.4482918 0.48401523 128.0 +9.0153332 -2.4989576 0.48315477 128.0 +7.9678526 -2.261204 0.43181348 128.0 +7.9288898 -2.3028045 0.4305706 128.0 +8.9103613 -2.6474006 0.48028654 128.0 +8.8767471 -2.6967952 0.47942606 128.0 +26.121584 -8.1136465 1.3444836 128.0 +9.0971823 -2.8862057 0.49218968 128.0 +7.984695 -2.5871363 0.43711972 128.0 +7.9715152 -2.6370223 0.43726313 128.0 +25.538906 -8.6253567 1.3255055 128.0 +7.2416248 -2.4944615 0.40198392 128.0 +7.2214713 -2.5371923 0.4017449 128.0 +11.238646 -4.0269232 0.6067754 128.0 +0 -0 0 128.0 +7.3579535 -2.7383466 0.41116226 128.0 +7.2550921 -2.75085 0.4067643 128.0 +0 -0 0 128.0 +7.0218749 -2.7614138 0.39653429 128.0 +7.0187078 -2.8100183 0.39725134 128.0 +7.2112961 -2.9386287 0.40810281 128.0 +7.1857486 -2.979759 0.40772039 128.0 +19.701118 -8.3138437 1.0588081 128.0 +19.590992 -8.4093523 1.0557486 128.0 +4.8228421 -2.1043603 0.28725481 128.0 +4.7167192 -2.0925751 0.28237882 128.0 +4.6682835 -2.1054528 0.28051448 128.0 +4.5926313 -2.1053224 0.27721602 128.0 +4.5090113 -2.1005456 0.27348733 128.0 +4.6422787 -2.1974373 0.28123152 128.0 +4.5648022 -2.1951311 0.27783746 128.0 +4.562016 -2.2283621 0.27841112 128.0 +3.9631236 -1.9658692 0.24714743 128.0 +3.9982605 -2.0139775 0.24968103 128.0 +4.5780234 -2.3415346 0.28151834 128.0 +3.9785631 -2.0656536 0.24996784 128.0 +3.9649301 -2.0895607 0.24992004 128.0 +3.9256144 -2.0997097 0.24848594 128.0 +3.8854468 -2.1089785 0.24700402 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.1878109 -4.1930785 0.43367782 128.0 +7.0785656 -4.1877575 0.42904088 128.0 +7.1452355 -4.286622 0.43420368 128.0 +7.1580505 -4.3542681 0.43640265 128.0 +13.782349 -8.5014324 0.81041956 128.0 +6.7585583 -4.2256794 0.4168987 128.0 +3.5251503 -2.2335844 0.23514867 128.0 +3.8508594 -2.4733372 0.25446141 128.0 +3.3920171 -2.2079854 0.2291254 128.0 +3.3742373 -2.2260053 0.22888638 128.0 +3.3796103 -2.2594414 0.22998586 128.0 +3.3135951 -2.2448261 0.22697422 128.0 +3.3096387 -2.2719021 0.22754787 128.0 +3.035743 -2.1112943 0.21239406 128.0 +2.9468119 -2.0763512 0.20794831 128.0 +2.9730301 -2.122262 0.2102429 128.0 +2.9251561 -2.1152847 0.20818733 128.0 +2.9145386 -2.1349647 0.20833074 128.0 +2.9879961 -2.2171171 0.21349356 128.0 +2.9735374 -2.2348089 0.21344575 128.0 +5.4357333 -4.1389785 0.36240238 128.0 +25.302156 -19.517902 1.5647634 128.0 +5.2900796 -4.1315765 0.35666591 128.0 +3.375257 -2.6690593 0.24136317 128.0 +4.4064698 -3.5291417 0.30561146 128.0 +4.3211288 -3.5045068 0.30169156 128.0 +0 -0 0 128.0 +3.9645042 -3.2966342 0.28218761 128.0 +4.0152483 -3.3807447 0.28663337 128.0 +3.885752 -3.3126273 0.27979741 128.0 +3.6211691 -3.1255405 0.26435679 128.0 +3.5680845 -3.1181149 0.26220563 128.0 +3.5817933 -3.1690805 0.26430899 128.0 +3.4931035 -3.1290004 0.25986323 128.0 +3.3517816 -3.0396278 0.2519756 128.0 +3.8075335 -3.4959767 0.28280905 128.0 +2.8468347 -2.6458685 0.22142898 128.0 +4.0676126 -3.8279564 0.30274323 128.0 +3.8018286 -3.6219788 0.28672898 128.0 +2.7904625 -2.6908855 0.22095095 128.0 +2.7660391 -2.7002792 0.2204251 128.0 +4.4688997 -4.4175625 0.3361581 128.0 +4.4544163 -4.4576206 0.33701855 128.0 +3.6033452 -3.6501524 0.2808969 128.0 +2.7498326 -2.8195643 0.22391479 128.0 +3.5132499 -3.6473248 0.27778965 128.0 +3.1727829 -3.33442 0.25570431 128.0 +2.8438232 -3.0254951 0.23414479 128.0 +3.8205612 -4.1155419 0.30417734 128.0 +3.7567663 -4.0969353 0.30145255 128.0 +3.592787 -3.9666321 0.29155716 128.0 +3.6203156 -4.0466785 0.29528585 128.0 +3.5808699 -4.0523462 0.29423416 128.0 +2.7226562 -3.1190858 0.23357114 128.0 +3.3841689 -3.9257267 0.28347832 128.0 +2.6796439 -3.1469374 0.23323652 128.0 +3.754123 -4.4647427 0.31459859 128.0 +3.1167533 -3.7529385 0.26889816 128.0 +3.3710291 -4.1103349 0.28983623 128.0 +1.6827472 -2.0767376 0.16334738 128.0 +1.6849422 -2.1057482 0.16449466 128.0 +1.6695142 -2.112911 0.16430345 128.0 +3.6068954 -4.6251054 0.31612831 128.0 +2.9832079 -3.8738215 0.26942399 128.0 +2.9460859 -3.8745575 0.2683723 128.0 +1.6477321 -2.1939931 0.16674145 128.0 +1.6716976 -2.2546268 0.16975307 128.0 +1.6566527 -2.2632291 0.16965747 128.0 +2.4794211 -3.4322464 0.23806471 128.0 +2.4287496 -3.4059107 0.23562671 128.0 +1.6957467 -2.4085312 0.1763978 128.0 +1.6854937 -2.4254546 0.17678024 128.0 +1.6604162 -2.4209197 0.17591977 128.0 +1.5839779 -2.3400478 0.17066135 128.0 +1.5779071 -2.3621852 0.1713784 128.0 +1.5804138 -2.3976831 0.17286032 128.0 +2.3727872 -3.6494417 0.24375336 128.0 +2.3428028 -3.6521597 0.2430841 128.0 +2.3240869 -3.6723752 0.24341872 128.0 +2.3110271 -3.7018204 0.24427919 128.0 +2.7275081 -4.4296408 0.28438658 128.0 +1.5092312 -2.4841142 0.17453346 128.0 +1.4801084 -2.4701881 0.17324276 128.0 +1.804628 -3.0546703 0.2052235 128.0 +1.7828361 -3.0605063 0.20493667 128.0 +1.6700555 -2.9076524 0.19590175 128.0 +1.768754 -3.1238832 0.20723125 128.0 +1.752472 -3.1399117 0.20751807 128.0 +1.724031 -3.1339741 0.2066098 128.0 +1.7019141 -3.1392241 0.20632298 128.0 +1.2578695 -2.3539114 0.16315615 128.0 +1.5949135 -3.0299189 0.19929582 128.0 +1.5919162 -3.0698018 0.20092115 128.0 +1.1997981 -2.348196 0.16162643 128.0 +1.5447043 -3.0703645 0.19991727 128.0 +1.5165302 -3.060986 0.1989134 128.0 +1.5406071 -3.1582265 0.20359817 128.0 +1.0661902 -2.2193365 0.15326077 128.0 +1.0034966 -2.1219699 0.14776333 128.0 +1.0123508 -2.1751883 0.15024912 128.0 +1.0018933 -2.1877177 0.15058376 128.0 +8.0899744 -17.975859 0.9788323 128.0 +7.8800721 -17.800467 0.96707261 128.0 +1.3932121 -3.1976526 0.20235527 128.0 +7.6960201 -17.977554 0.97132713 128.0 +7.6913271 -18.275782 0.98437756 128.0 +7.3511438 -17.77158 0.95583868 128.0 +7.34162 -18.061571 0.96850669 128.0 +7.2576962 -18.173996 0.97199637 128.0 +7.1529751 -18.235855 0.97290468 128.0 +6.7189469 -17.443289 0.93002462 128.0 +6.6181488 -17.501003 0.93088514 128.0 +1.2416987 -3.3427205 0.20608397 128.0 +1.2139879 -3.3305664 0.20508009 128.0 +1.3366616 -3.7386699 0.2254445 128.0 +1.1819412 -3.3706658 0.20637079 128.0 +1.1982211 -3.4855509 0.21182042 128.0 +5.968545 -17.7299 0.93074173 128.0 +5.9547367 -18.054567 0.94527406 128.0 +4.616848 -14.291557 0.75420231 128.0 +1.2622889 -3.9881923 0.23562671 128.0 +0.97527951 -3.1475697 0.19312914 128.0 +0.95652688 -3.1554065 0.19322474 128.0 +0.93799835 -3.1640894 0.19336815 128.0 +0.92328674 -3.1860967 0.19418082 128.0 +0.89828414 -3.1724784 0.19322474 128.0 +0.86843181 -3.1403806 0.1913604 128.0 +0.85148621 -3.15433 0.19179063 128.0 +0.82805079 -3.1440389 0.19102576 128.0 +0.83181846 -3.2390428 0.19547153 128.0 +0.78843755 -3.1500876 0.19083455 128.0 +4.404335 -18.090233 0.92648715 128.0 +4.278976 -18.056654 0.92352331 128.0 +0.79716134 -3.454124 0.20508009 128.0 +0.77158582 -3.4394562 0.204124 128.0 +0.9258554 -4.2503242 0.24360995 128.0 +0.73179638 -3.4603934 0.20469765 128.0 +0.90147507 -4.3973856 0.25025466 128.0 +0.87525356 -4.4067531 0.25044587 128.0 +0.58587146 -3.0455856 0.18385521 128.0 +3.4543614 -18.603323 0.94097173 128.0 +3.3849201 -18.873898 0.95311385 128.0 +3.2678566 -18.887423 0.95277923 128.0 +3.1348286 -18.804649 0.94780767 128.0 +3.0225492 -18.843256 0.94876373 128.0 +2.9258828 -18.984848 0.95473921 128.0 +2.7627573 -18.687231 0.93948978 128.0 +2.6753345 -18.896687 0.94881153 128.0 +0.44084227 -3.2504621 0.19241208 128.0 +0.42050609 -3.250134 0.19226867 128.0 +2.3873112 -19.433479 0.9724744 128.0 +2.3686354 -20.310923 1.0140637 128.0 +0.4271102 -3.8599715 0.22128557 128.0 +0.34692827 -3.3200772 0.19518469 128.0 +0.37737355 -3.8410637 0.22013828 128.0 +0.25204167 -2.7342401 0.16683705 128.0 +0.27511317 -3.201498 0.18920922 128.0 +0.25664967 -3.2180617 0.18992628 128.0 +0.23616983 -3.209614 0.18944824 128.0 +0.17236821 -2.5532341 0.15789774 128.0 +0.19731151 -3.2212436 0.18987848 128.0 +0.2329496 -4.2347183 0.23839933 128.0 +0.2066222 -4.229084 0.23806471 128.0 +0.13997571 -3.2712338 0.19212526 128.0 +0.15507148 -4.2412829 0.23854274 128.0 +0.60554177 -20.049873 0.99542022 128.0 +0.079811193 -3.2762518 0.19226867 128.0 +0.059778351 -3.2806747 0.19245988 128.0 +0.039577108 -3.274987 0.19217306 128.0 +0.01952051 -3.28216 0.19250768 128.0 +-0.00061173114 -3.269233 0.19188623 128.0 +-0.021685751 -3.4209905 0.19915241 128.0 +-0.044468462 -3.5606215 0.20584494 128.0 +-0.059121642 -3.1807842 0.1876795 128.0 +-0.078061126 -3.1573951 0.18658002 128.0 +-0.098680437 -3.1967914 0.18849216 128.0 +-0.11971149 -3.2340558 0.1903087 128.0 +-0.87340462 -20.093981 0.99800164 128.0 +-0.13575123 -2.7564752 0.16750631 128.0 +-0.15644807 -2.8234072 0.17075697 128.0 +-1.2419471 -20.055559 0.99709338 128.0 +-0.17967491 -2.6538551 0.16272593 128.0 +-0.19269823 -2.6088738 0.16062255 128.0 +-0.21086597 -2.6345246 0.16191326 128.0 +-0.22676842 -2.6301956 0.16176985 128.0 +-0 -0 0 128.0 +-1.9604914 -19.806404 0.98796284 128.0 +-2.1581972 -20.518167 1.0228118 128.0 +-2.2905812 -20.56311 1.0256323 128.0 +-2.4321191 -20.679613 1.0319424 128.0 +-2.555645 -20.637537 1.0306517 128.0 +-2.803771 -21.555513 1.0757306 128.0 +-2.8126209 -20.633322 1.032038 128.0 +-2.9178751 -20.46636 1.0248196 128.0 +-3.0344262 -20.387804 1.0219035 128.0 +-3.1573222 -20.354982 1.0212343 128.0 +-3.2792926 -20.317478 1.0203738 128.0 +-3.654103 -21.788401 1.0927488 128.0 +-3.1023414 -17.828354 0.9014858 128.0 +-3.2187693 -17.848301 0.90339792 128.0 +-4.023365 -21.550529 1.0846221 128.0 +-3.4129326 -17.679962 0.89718342 128.0 +-4.3279681 -21.702303 1.0945175 128.0 +-4.3420172 -21.097139 1.0662655 128.0 +-4.4726295 -21.075962 1.0665523 128.0 +-0 -0 0 128.0 +-5.2519603 -23.333849 1.1800863 128.0 +-5.8664827 -25.336914 1.2800919 128.0 +-4.4833012 -18.837654 0.96214879 128.0 +-5.0721798 -20.745466 1.0575174 128.0 +-4.688591 -18.679495 0.95712942 128.0 +-5.9079409 -22.939291 1.1690915 128.0 +-6.491693 -24.580086 1.2521266 128.0 +-5.5716796 -20.584852 1.0560354 128.0 +-6.2514997 -22.546562 1.1551806 128.0 +-6.3700809 -22.438597 1.1517386 128.0 +-0 -0 0 128.0 +-7.6928716 -25.884077 1.3277522 128.0 +-7.8338299 -25.77809 1.3248363 128.0 +-6.5401201 -21.05644 1.0906454 128.0 +-6.6894431 -21.079702 1.0938482 128.0 +-6.8263602 -21.062014 1.0950433 128.0 +-6.9943819 -21.137318 1.100971 128.0 +-0 -0 0 128.0 +-8.0450706 -23.347496 1.2172776 128.0 +-9.9957638 -28.44001 1.478143 128.0 +-10.136041 -28.283173 1.4733148 128.0 +-10.251805 -28.06283 1.4652838 128.0 +-10.448548 -28.065859 1.4686779 128.0 +-0 -0 0 128.0 +-10.742854 -27.807878 1.4621288 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-1.6810538 -3.4964046 0.22109435 128.0 +-1.6678258 -3.4151289 0.21731785 128.0 +-1.678979 -3.3851476 0.21626617 128.0 +-1.6916258 -3.3587265 0.2154057 128.0 +-1.7103826 -3.344727 0.21521449 128.0 +-1.7419251 -3.3554423 0.21636178 128.0 +-1.7895046 -3.3959358 0.21913441 128.0 +-1.8286902 -3.4192371 0.22099875 128.0 +-1.8544031 -3.4167297 0.22147679 128.0 +-1.8811182 -3.4157846 0.22205043 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-9.8523788 -8.3861065 0.65462697 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.288568 -8.4357367 0.672171 128.0 +-10.30287 -8.3422813 0.6698764 128.0 +-10.374148 -8.2951231 0.67111927 128.0 +-10.555779 -8.334672 0.67910254 128.0 +-10.631142 -8.288784 0.68058443 128.0 +-10.587607 -8.1508951 0.67489576 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.474388 -8.6660509 0.92629594 128.0 +-16.463396 -8.5317163 0.92285407 128.0 +-16.589279 -8.4682264 0.92682177 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.019136 -3.4223952 0.40915447 128.0 +-7.0138869 -3.3667309 0.40776819 128.0 +-7.0335097 -3.3232045 0.40772039 128.0 +-7.0537682 -3.2799852 0.40772039 128.0 +-7.073761 -3.2366424 0.40772039 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-22.262234 -8.4183064 1.1744933 128.0 +-22.281628 -8.2697334 1.1728679 128.0 +-22.488693 -8.1899338 1.1808512 128.0 +-22.496193 -8.0366726 1.1787 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-27.99431 -8.4765339 1.4352629 128.0 +-28.376223 -8.4024334 1.4517553 128.0 +-0 -0 0 128.0 +-28.358011 -8.0198793 1.4458276 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.806067 -3.3690333 0.66915935 128.0 +-12.79457 -3.2822056 0.6675818 128.0 +-12.827065 -3.2067862 0.66820323 128.0 +-34.10482 -8.3022556 1.7152976 128.0 +-34.289249 -8.1246128 1.7218945 128.0 +-34.275188 -7.8994861 1.7187873 128.0 +-0 -0 0 128.0 +-40.477524 -8.8070707 2.0179434 128.0 +-40.547413 -8.562047 2.0187562 128.0 +-40.608971 -8.3150949 2.0192342 128.0 +-40.591625 -8.0523577 2.0159357 128.0 +-18.362047 -3.5262611 0.93026364 128.0 +-18.418694 -3.42009 0.9319846 128.0 +-18.486525 -3.3154714 0.9342792 128.0 +-18.744707 -3.2431734 0.94584769 128.0 +-18.400688 -3.0675118 0.92820811 128.0 +-0 -0 0 128.0 +-24.148949 -3.7214346 1.2048008 128.0 +-24.034966 -3.5530381 1.1982039 128.0 +-24.172028 -3.4218705 1.203797 128.0 +-24.235132 -3.2792466 1.2058525 128.0 +-24.384573 -3.1472239 1.2121148 128.0 +-23.813534 -2.9251144 1.1836716 128.0 +-28.105171 -3.2771389 1.3896103 128.0 +-0 -0 0 128.0 +-24.013357 -2.5019121 1.19089 128.0 +-24.016329 -2.3533535 1.1903163 128.0 +-28.025942 -2.5725448 1.3823441 128.0 +-25.905457 -2.2177868 1.2797573 128.0 +-0 -0 0 128.0 +-44.444916 -3.2552567 2.1681907 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-118.43729 10.108509 4.2904339 128.0 +-118.49245 10.845967 4.2947264 128.0 +-118.45948 11.576319 4.2960143 128.0 +-118.41008 12.305433 4.2968726 128.0 +-118.15354 13.012061 4.2904339 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-46.568428 14.714111 1.7837377 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-40.974304 14.343148 1.5895336 128.0 +-40.833755 14.575814 1.5875661 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-35.481033 14.158172 1.4030204 128.0 +-0 0 0 128.0 +-35.105129 14.510057 1.3952937 128.0 +-34.979507 14.710077 1.3938986 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-55.83197 25.521805 2.2329934 128.0 +-55.195774 25.641594 2.2141061 128.0 +-55.009384 25.966562 2.2129972 128.0 +-54.824692 26.291937 2.2120314 128.0 +-54.683899 26.638344 2.2128899 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-52.435963 28.391294 2.1699996 128.0 +-52.292301 28.729826 2.1712873 128.0 +-52.120274 29.053062 2.1715021 128.0 +-0 0 0 128.0 +-33.858063 19.421824 1.4327824 128.0 +-0 0 0 128.0 +-33.707554 19.889175 1.4365385 128.0 +-33.542858 20.070484 1.4347856 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-49.59272 33.524052 2.1782987 128.0 +-20.823997 14.26398 0.9390983 128.0 +-0 0 0 128.0 +-20.478985 14.400036 0.93172938 128.0 +-20.406521 14.537018 0.93244481 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-37.528084 30.368135 1.7636341 128.0 +-37.144699 30.436949 1.7545481 128.0 +-36.941093 30.65089 1.7537968 128.0 +-39.822182 33.456036 1.8973126 128.0 +-34.646973 29.47275 1.6637955 128.0 +-34.248913 29.498262 1.6535648 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-21.678122 19.377697 1.0763898 128.0 +-21.536585 19.490229 1.0753167 128.0 +-21.443853 19.646988 1.0766401 128.0 +-32.651978 30.286264 1.629741 128.0 +-32.341679 30.369747 1.6236597 128.0 +-32.247437 30.655754 1.6282384 128.0 +-32.163139 30.953526 1.6334254 128.0 +-32.167305 31.339981 1.6431552 128.0 +-14.664004 14.463601 0.77286762 128.0 +-14.599026 14.577312 0.77408385 128.0 +-14.444644 14.601256 0.77079284 128.0 +-14.338716 14.673173 0.76997012 128.0 +-28.193798 29.207264 1.4886935 128.0 +-27.959574 29.322571 1.4858675 128.0 +-27.667439 29.374998 1.4800367 128.0 +-27.626225 29.694201 1.4873699 128.0 +-27.604446 30.03828 1.4958835 128.0 +-28.879879 31.815775 1.573651 128.0 +-27.255768 30.399323 1.497064 128.0 +-27.13896 30.645292 1.5008558 128.0 +-25.257481 28.87582 1.4088154 128.0 +-25.918053 30.00049 1.4547104 128.0 +-24.81171 29.078682 1.4038789 128.0 +-16.32711 19.37467 0.94253236 128.0 +-24.025948 28.867865 1.3799834 128.0 +-15.924403 19.374386 0.9333033 128.0 +-16.053377 19.777439 0.94739735 128.0 +-15.666698 19.54495 0.93223017 128.0 +-23.069599 29.144768 1.3661041 128.0 +-22.898336 29.296007 1.3665692 128.0 +-22.729139 29.450197 1.367213 128.0 +-22.634626 29.702772 1.3723284 128.0 +-22.921806 30.465576 1.4003018 128.0 +-22.370924 30.116282 1.378481 128.0 +-22.222355 30.302944 1.3806989 128.0 +-22.915649 31.653774 1.4343921 128.0 +-21.700647 30.366032 1.3715771 128.0 +-21.303076 30.19973 1.3584847 128.0 +-21.087679 30.287228 1.3566246 128.0 +-20.297523 29.537235 1.3184563 128.0 +-20.148998 29.710022 1.3205668 128.0 +-0 0 0 128.0 +-19.954174 30.214388 1.3316917 128.0 +-19.743855 30.29858 1.3300821 128.0 +-19.546764 30.402344 1.3293667 128.0 +-0 0 0 128.0 +-19.258087 30.777164 1.3351617 128.0 +-18.929255 30.668541 1.3256464 128.0 +-18.715256 30.742285 1.3238935 128.0 +-18.503637 30.818842 1.3223196 128.0 +-8.5993919 14.524383 0.63979721 128.0 +-8.5267382 14.605354 0.64097768 128.0 +-20.993952 36.471268 1.5419216 128.0 +-20.778158 36.614174 1.5425297 128.0 +-20.556034 36.746208 1.5427443 128.0 +-18.020723 32.68322 1.3715414 128.0 +-17.969196 33.06802 1.3827379 128.0 +-17.770203 33.185581 1.3830599 128.0 +-10.109722 19.161716 0.81110746 128.0 +-16.432871 31.61441 1.3109801 128.0 +-16.320108 31.873873 1.3173832 128.0 +-16.167877 32.059963 1.320853 128.0 +-10.004933 20.146049 0.84076214 128.0 +-9.6247425 19.682766 0.81987149 128.0 +-9.5709839 19.88102 0.82541609 128.0 +-9.6435432 20.350275 0.84169221 128.0 +-14.710059 31.540033 1.2813253 128.0 +-9.3172197 20.301779 0.83518177 128.0 +-9.1871281 20.346725 0.83471674 128.0 +-14.142839 31.841074 1.2827204 128.0 +-13.320694 30.49313 1.2267021 128.0 +-12.984242 30.227201 1.2131804 128.0 +-12.412449 29.392118 1.1776593 128.0 +-12.193937 29.37635 1.1741178 128.0 +-12.055358 29.553329 1.1780884 128.0 +-11.859295 29.590567 1.1766934 128.0 +-11.692883 29.701832 1.1781958 128.0 +-11.502849 29.753445 1.1774446 128.0 +-11.1509 29.377796 1.1603816 128.0 +-10.931703 29.341715 1.1564109 128.0 +-11.143689 30.481054 1.1972978 128.0 +-0 0 0 128.0 +-10.187812 28.963835 1.1346259 128.0 +-10.014137 29.038082 1.1350909 128.0 +-9.824254 29.064899 1.1338032 128.0 +-9.6328478 29.085735 1.1323366 128.0 +-9.5571976 29.461792 1.1442842 128.0 +-9.3689823 29.497021 1.1434258 128.0 +-9.2180786 29.651291 1.1470745 128.0 +-9.0374222 29.712074 1.1472534 128.0 +-8.8731794 29.828272 1.1495427 128.0 +-8.7058964 29.936852 1.1515818 128.0 +-8.5826902 30.203115 1.159523 128.0 +-8.7772741 31.624531 1.2103902 128.0 +-8.6099844 31.777143 1.2140747 128.0 +-8.3709059 31.663195 1.207922 128.0 +-3.68309 14.286437 0.56371099 128.0 +-3.6048598 14.346567 0.56510603 128.0 +-3.5250795 14.40239 0.56635809 128.0 +-3.4447496 14.457773 0.56761009 128.0 +-3.3598101 14.495188 0.56821817 128.0 +-3.2760792 14.538929 0.56907672 128.0 +-4.3071256 19.676207 0.7565915 128.0 +-4.1792507 19.669027 0.75537527 128.0 +-4.0504165 19.655149 0.7539444 128.0 +-3.929934 19.680613 0.75398022 128.0 +-3.8421094 19.875082 0.76020443 128.0 +-6.4432201 34.462402 1.2905544 128.0 +-0 0 0 128.0 +-4.8826065 28.014484 1.0534959 128.0 +-5.7443786 34.197697 1.2768539 128.0 +-4.4886909 27.76449 1.0423352 128.0 +-0 0 0 128.0 +-4.7886453 32.116169 1.1979059 128.0 +-3.9086177 27.364569 1.0250576 128.0 +-4.7724657 34.942009 1.2979592 128.0 +-4.5577178 34.968651 1.2978876 128.0 +-4.3429451 34.994968 1.2978518 128.0 +-0 0 0 128.0 +-3.0479665 27.297779 1.0187975 128.0 +-4.5841632 43.47097 1.6002651 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-2.0930116 25.939034 0.96710747 128.0 +-0 0 0 128.0 +-1.8656067 27.294802 1.0148984 128.0 +-2.3190215 37.288036 1.3729007 128.0 +-2.0776563 37.078056 1.3648878 128.0 +-1.3853416 27.774668 1.0310314 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0.84747517 26.956415 1.0009832 128.0 +-0.84299296 33.318996 1.2286338 128.0 +-0.63972336 33.38549 1.2308517 128.0 +-0.43964261 33.755524 1.2439798 128.0 +-0.23279703 33.798557 1.2454464 128.0 +-0.025498645 33.917274 1.2496675 128.0 +0.18235661 33.868824 1.2479504 128.0 +0.39101943 33.941013 1.2505976 128.0 +0.57493806 32.559074 1.2012327 128.0 +0 0 0 128.0 +0 0 0 128.0 +1.0371946 28.745878 1.0652291 128.0 +1.293807 30.64006 1.1333382 128.0 +2.0015054 41.378094 1.5184554 128.0 +1.5440509 28.316778 1.0507058 128.0 +1.6870868 27.801025 1.0325695 128.0 +2.8414361 42.510864 1.560666 128.0 +2.0309587 27.817101 1.0339646 128.0 +4.0105038 50.652943 1.8543867 128.0 +2.3896706 27.995205 1.0413336 128.0 +4.0784178 44.554077 1.6370741 128.0 +0 0 0 128.0 +2.0846021 20.056047 0.75737852 128.0 +2.2080622 20.046852 0.75752157 128.0 +3.3205118 28.538078 1.0640128 128.0 +2.4518347 20.001383 0.75691348 128.0 +2.5824296 20.047415 0.75913131 128.0 +2.688271 19.904425 0.75455254 128.0 +4.6790881 33.113636 1.2326759 128.0 +2.9305761 19.858072 0.75412327 128.0 +3.0510001 19.830828 0.75380135 128.0 +3.1712005 19.802853 0.75347936 128.0 +5.5508642 33.352592 1.2458757 128.0 +8.3690023 48.449005 1.7955066 128.0 +5.3127723 29.668777 1.1144866 128.0 +5.3815875 29.025417 1.0922724 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.9625714 14.484672 0.56481987 128.0 +3.1027436 14.709705 0.57372701 128.0 +3.1819065 14.639608 0.57186687 128.0 +3.3065882 14.775848 0.57759035 128.0 +3.3987582 14.762098 0.57784075 128.0 +3.481447 14.707901 0.57662451 128.0 +3.53668 14.542545 0.57133031 128.0 +9.5820885 38.376499 1.4514551 128.0 +3.4688282 13.537703 0.53584486 128.0 +3.5340512 13.448505 0.53334087 128.0 +3.6011696 13.369634 0.53123033 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +10.170821 33.61972 1.2928796 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.6734419 20.307718 0.81268144 128.0 +7.8190813 20.315279 0.81479192 128.0 +0 0 0 128.0 +0 0 0 128.0 +8.0235958 19.754034 0.79880202 128.0 +8.1064806 19.612074 0.79522485 128.0 +8.3963432 19.965458 0.81089282 128.0 +8.4499092 19.752769 0.80463278 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.721132 63.138176 2.564811 128.0 +31.626583 61.998711 2.5268931 128.0 +31.697117 61.206253 2.5028188 128.0 +0 0 0 128.0 +32.311283 60.560501 2.492588 128.0 +32.659428 60.318916 2.490871 128.0 +0 0 0 128.0 +33.739235 60.527248 2.5160184 128.0 +34.186237 60.453926 2.5215631 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.583662 31.835915 1.3735088 128.0 +19.737915 31.649857 1.3707544 128.0 +29.815207 47.162247 2.0328155 128.0 +20.48284 31.963968 1.3945068 128.0 +0 0 0 128.0 +0 0 0 128.0 +20.727764 31.071907 1.3725787 128.0 +13.657419 20.203238 0.90851355 128.0 +13.850025 20.219645 0.91287774 128.0 +0 0 0 128.0 +14.190228 20.180597 0.91867274 128.0 +14.024456 19.686981 0.9008227 128.0 +14.148499 19.605421 0.90103734 128.0 +14.234322 19.471445 0.89896256 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.184301 39.518757 1.8375382 128.0 +31.345095 39.225174 1.8328879 128.0 +31.584558 39.03133 1.8328521 128.0 +32.048943 39.111984 1.8455869 128.0 +0 0 0 128.0 +32.21022 38.339287 1.8279872 128.0 +32.444859 38.140926 1.8279872 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.190229 19.939934 1.0262022 128.0 +19.274559 19.783155 1.0242705 128.0 +19.391373 19.660248 1.0240558 128.0 +19.669809 19.699306 1.0320687 128.0 +39.218018 38.798317 2.0102794 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.4681 15.661517 0.87538904 128.0 +17.419474 15.426165 0.86848515 128.0 +17.053452 14.916319 0.8465929 128.0 +17.148436 14.814667 0.84677178 128.0 +17.323399 14.781171 0.8507424 128.0 +17.776756 14.980499 0.86773396 128.0 +17.586439 14.636518 0.85460573 128.0 +17.933775 14.740282 0.86655349 128.0 +18.580986 15.082182 0.89223748 128.0 +17.540186 14.059682 0.84026134 128.0 +18.252207 14.447379 0.86884284 128.0 +18.509796 14.467434 0.87653375 128.0 +18.427332 14.221699 0.86880708 128.0 +20.219234 15.407655 0.94553721 128.0 +20.368494 15.32476 0.94800544 128.0 +18.685986 13.880102 0.86880708 128.0 +18.799812 13.786462 0.87009484 128.0 +20.821972 15.073832 0.95573211 128.0 +21.484848 15.353693 0.98084378 128.0 +20.134048 14.202519 0.9175638 128.0 +20.554611 14.311126 0.93212283 128.0 +20.202217 13.882492 0.91302079 128.0 +20.177843 13.684229 0.90829897 128.0 +20.236513 13.543487 0.90722579 128.0 +20.797062 13.734638 0.92772293 128.0 +21.000675 13.684794 0.93283826 128.0 +21.148975 13.597296 0.93559271 128.0 +21.291925 13.505278 0.93813246 128.0 +32.017426 20.03417 1.3875313 128.0 +32.059811 19.787998 1.3841687 128.0 +24.565531 14.954885 1.0650501 128.0 +32.452736 19.484652 1.3905361 128.0 +24.517599 14.516356 1.0554992 128.0 +24.623468 14.375722 1.0562146 128.0 +24.66964 14.200434 1.0544976 128.0 +25.222174 14.313176 1.0736711 128.0 +0 0 0 128.0 +25.445803 14.030088 1.0757101 128.0 +0 0 0 128.0 +28.11985 15.057537 1.1773731 128.0 +28.172823 14.864194 1.1757991 128.0 +28.14645 14.630207 1.1710773 128.0 +28.112934 14.394374 1.1661408 128.0 +28.11685 14.179304 1.1627783 128.0 +28.167521 13.988735 1.1613474 128.0 +28.258211 13.818274 1.161562 128.0 +28.608997 13.772942 1.1721504 128.0 +28.968409 13.727672 1.1830608 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.040531 14.015918 1.2547113 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +36.625698 14.678935 1.4479853 128.0 +36.804348 14.489073 1.4514194 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +39.385025 13.582557 1.5268618 128.0 +39.444901 13.332959 1.5260032 128.0 +42.560799 14.095821 1.6404366 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +48.262527 14.357177 1.8379675 128.0 +0 0 0 128.0 +48.399513 13.753733 1.8366439 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.359333 0.43901116 0.65718222 128.0 +17.3617 0.332488 0.65718222 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.442581 -0.094108373 0.65997237 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +17.298166 -0.51804709 0.65507168 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +17.455393 -0.84456861 0.66115284 128.0 +17.465849 -0.95252734 0.66172522 128.0 +17.41379 -1.0568939 0.66007972 128.0 +17.493727 -1.1695207 0.66319185 128.0 +17.501173 -1.2779295 0.66372842 128.0 +17.421272 -1.379612 0.66115284 128.0 +17.413475 -1.4865658 0.6611886 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +27.442514 -2.8521948 1.0231974 128.0 +27.42251 -3.0203066 1.0231259 128.0 +27.403461 -3.1885109 1.0231259 128.0 +27.399252 -3.3585405 1.0236982 128.0 +25.464174 -3.2800865 0.95462316 128.0 +25.423761 -3.4335952 0.95390773 128.0 +27.407005 -3.8727882 1.026381 128.0 +27.377785 -4.0401521 1.0262022 128.0 +27.350504 -4.2077589 1.0261307 128.0 +27.811644 -4.4535527 1.0438018 128.0 +19.261532 -3.2058637 0.7345562 128.0 +19.170595 -3.3117425 0.73198062 128.0 +19.169588 -3.4328318 0.73269606 128.0 +19.293591 -3.5773509 0.73799026 128.0 +19.121111 -3.6668725 0.73251724 128.0 +19.134523 -3.7913144 0.73384076 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +37.660179 -8.1847639 1.4151112 128.0 +37.561462 -8.4049959 1.4133584 128.0 +37.509182 -8.6353102 1.4133584 128.0 +37.497311 -8.8751974 1.4148966 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +9.0494394 -2.4376402 0.37108082 128.0 +9.0314217 -2.4923232 0.3709735 128.0 +7.9686532 -2.251797 0.3320182 128.0 +7.934526 -2.2948196 0.331267 128.0 +8.9178934 -2.6385787 0.36850527 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +9.0822229 -2.8700252 0.37655386 128.0 +7.9754772 -2.5742676 0.33559537 128.0 +7.9481421 -2.6194029 0.3351661 128.0 +25.557838 -8.5961542 1.0008043 128.0 +0 -0 0 128.0 +7.221333 -2.5281932 0.3094821 128.0 +11.23213 -4.0096731 0.46251306 128.0 +11.227037 -4.0856929 0.46326426 128.0 +7.3497305 -2.7260122 0.31620714 128.0 +7.24125 -2.7364423 0.31270152 128.0 +6.9995499 -2.6943147 0.30408058 128.0 +6.9698596 -2.7321069 0.30357978 128.0 +11.13541 -4.4437132 0.46476668 128.0 +7.1996903 -2.9246089 0.31377468 128.0 +7.1889987 -2.9717844 0.31406087 128.0 +19.674353 -8.2739267 0.79958898 128.0 +19.663643 -8.4117842 0.80116296 128.0 +19.691385 -8.5669641 0.8042751 128.0 +5.6973052 -2.5206757 0.25861484 128.0 +4.7684727 -2.144882 0.22277169 128.0 +4.6525159 -2.1271524 0.2187295 128.0 +4.7127895 -2.1897638 0.221627 128.0 +4.7227621 -2.2297311 0.22255707 128.0 +4.8297396 -2.3165727 0.22735046 128.0 +4.6932473 -2.2866435 0.22248551 128.0 +4.6737537 -2.3127387 0.22227089 128.0 +4.5996447 -2.3113136 0.21987419 128.0 +4.6200948 -2.3572035 0.22126928 128.0 +4.6188555 -2.392401 0.22180586 128.0 +4.6014357 -2.4193017 0.22169854 128.0 +4.5168486 -2.4103267 0.21887258 128.0 +4.4984589 -2.4360929 0.2187295 128.0 +4.4956889 -2.470386 0.21923029 128.0 +4.4891753 -2.5027902 0.21958801 128.0 +32.471661 -18.36269 1.3708975 128.0 +4.4130468 -2.5318341 0.2177279 128.0 +3.3781402 -1.9658474 0.17551738 128.0 +3.3565466 -1.980952 0.1751239 128.0 +3.3520467 -2.0061281 0.17544584 128.0 +3.3507817 -2.033397 0.17591088 128.0 +3.3884633 -2.0848114 0.1780214 128.0 +3.3586476 -2.0949869 0.17730597 128.0 +3.3719163 -2.1321101 0.17841488 128.0 +3.2973461 -2.1133993 0.17580356 128.0 +3.1611152 -2.0535743 0.17054513 128.0 +3.009887 -1.9817201 0.16460705 128.0 +2.9835374 -1.9907233 0.16399893 128.0 +3.3620555 -2.2731569 0.18088312 128.0 +3.3834975 -2.3180273 0.18242131 128.0 +3.3651056 -2.3358953 0.18224245 128.0 +3.5117571 -2.469738 0.18928945 128.0 +3.0342088 -2.161901 0.16897118 128.0 +3.0751822 -2.2196596 0.17136788 128.0 +3.1534779 -2.3057201 0.17544584 128.0 +3.5673487 -2.6420038 0.19451211 128.0 +5.4778261 -4.1089315 0.28072169 128.0 +3.0786712 -2.3391941 0.17401497 128.0 +0 -0 0 128.0 +5.2972088 -4.127985 0.27599984 128.0 +3.4987485 -2.7613313 0.19515601 128.0 +5.5756149 -4.4559498 0.29109547 128.0 +3.4389625 -2.7833133 0.19397554 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +4.7953668 -4.0796733 0.26097578 128.0 +3.7161906 -3.20119 0.21118169 128.0 +3.6128726 -3.151026 0.20721103 128.0 +3.5844803 -3.1651978 0.20678177 128.0 +3.5746777 -3.1957901 0.20724681 128.0 +3.3564162 -3.0379529 0.19766001 128.0 +3.7989874 -3.4811013 0.22005305 128.0 +3.8918581 -3.6103644 0.22563341 128.0 +3.8419483 -3.608181 0.2242741 128.0 +2.8679938 -2.7269371 0.17727019 128.0 +3.4834301 -3.3529177 0.20867768 128.0 +3.45277 -3.3644652 0.20817687 128.0 +3.8034708 -3.7519073 0.22684966 128.0 +3.7803781 -3.7751744 0.22684966 128.0 +3.7543314 -3.7954576 0.22670656 128.0 +3.5507658 -3.6340194 0.21747749 128.0 +2.9793863 -3.0869997 0.18918215 128.0 +3.7838328 -3.9687917 0.23189345 128.0 +7.745223 -8.2236576 0.43997693 128.0 +3.9479115 -4.2439375 0.24308997 128.0 +3.5235021 -3.8346786 0.22202049 128.0 +3.8700101 -4.2639465 0.24173065 128.0 +3.832433 -4.2749629 0.24112253 128.0 +3.7875783 -4.2774496 0.24012092 128.0 +3.8599551 -4.4134398 0.24548666 128.0 +3.8301888 -4.4340158 0.24534358 128.0 +3.1406076 -3.6812491 0.20882076 128.0 +3.7658281 -4.4692216 0.244807 128.0 +3.7664638 -4.5260415 0.24638095 128.0 +3.7468712 -4.5591035 0.24684599 128.0 +3.7289038 -4.5944223 0.24741833 128.0 +3.7118938 -4.6312518 0.24806222 128.0 +3.0445404 -3.8468518 0.21121746 128.0 +3.103348 -3.9709682 0.21601085 128.0 +3.5503047 -4.6006904 0.24362655 128.0 +3.5395749 -4.6454391 0.24466392 128.0 +3.5542648 -4.7245669 0.24723947 128.0 +1.6521981 -2.2248504 0.13480929 128.0 +1.6337875 -2.2284992 0.13452311 128.0 +2.4628103 -3.4025304 0.18596269 128.0 +1.6452487 -2.3028562 0.13691981 128.0 +1.5734813 -2.2312458 0.13334265 128.0 +1.5620452 -2.244139 0.13348573 128.0 +1.556736 -2.2660358 0.13402231 128.0 +1.5366322 -2.2664471 0.13362882 128.0 +1.5188057 -2.2700195 0.13337842 128.0 +1.5065007 -2.2817976 0.13348573 128.0 +1.4886522 -2.2851374 0.13323534 128.0 +1.4864932 -2.312722 0.13402231 128.0 +1.4754864 -2.3268628 0.13423695 128.0 +1.4855664 -2.3748424 0.13588244 128.0 +1.5103345 -2.4476936 0.1385653 128.0 +1.500484 -2.465451 0.13892302 128.0 +1.488929 -2.4806089 0.13917342 128.0 +2.4074819 -4.0668049 0.20477857 128.0 +1.8982592 -3.2521234 0.17040205 128.0 +1.8363888 -3.1909564 0.16739723 128.0 +1.653017 -2.9136052 0.15552105 128.0 +1.7907499 -3.2019134 0.1669322 128.0 +1.7324661 -3.1428297 0.16407047 128.0 +1.2751123 -2.3473182 0.13123213 128.0 +1.2672901 -2.3674319 0.13173293 128.0 +1.2443457 -2.3592534 0.13108903 128.0 +1.2404473 -2.3872387 0.13191178 128.0 +1.621581 -3.1678078 0.16299732 128.0 +1.2245589 -2.4290504 0.13298494 128.0 +1.572361 -3.1668823 0.16217457 128.0 +8.2062654 -16.782089 0.70429343 128.0 +1.4887291 -3.0931935 0.15849009 128.0 +1.4637301 -3.089627 0.15798929 128.0 +7.77178 -16.664022 0.69377655 128.0 +7.6723032 -16.717754 0.69402695 128.0 +7.5432587 -16.706223 0.69173759 128.0 +7.3724551 -16.598757 0.68572795 128.0 +1.3834702 -3.1678724 0.15934862 128.0 +1.3636119 -3.1753836 0.15931284 128.0 +7.36272 -17.435007 0.71305746 128.0 +7.0900846 -17.081121 0.69760412 128.0 +6.8692589 -16.840227 0.68662226 128.0 +6.7988892 -16.964619 0.68980592 128.0 +6.7279825 -17.090635 0.69306111 128.0 +6.665514 -17.241587 0.6972822 128.0 +6.3546081 -16.742126 0.67660618 128.0 +6.2011685 -16.645014 0.67141932 128.0 +1.2164651 -3.3284042 0.16246074 128.0 +1.2223361 -3.409179 0.16525093 128.0 +1.1758605 -3.3440242 0.16249652 128.0 +1.2576284 -3.6478288 0.17372881 128.0 +5.8441582 -17.290356 0.68891162 128.0 +5.7533526 -17.372374 0.69066441 128.0 +5.6614513 -17.452976 0.69238144 128.0 +5.5324726 -17.41881 0.68980592 128.0 +0.97751021 -3.1455083 0.15351784 128.0 +0.96313542 -3.1677008 0.15412596 128.0 +0.94966477 -3.193666 0.15487716 128.0 +0.93646961 -3.221504 0.15569991 128.0 +0.94646192 -3.3319707 0.15959902 128.0 +0.87575138 -3.1566799 0.15287395 128.0 +0.84930903 -3.1359503 0.15190811 128.0 +0.83235019 -3.1497979 0.15223007 128.0 +0.80951464 -3.1412978 0.15172926 128.0 +4.4108157 -17.553732 0.68347436 128.0 +3.9829602 -16.27293 0.63528997 128.0 +0.81132281 -3.4064784 0.16095833 128.0 +0.78724623 -3.397763 0.16045754 128.0 +0.77473193 -3.4395759 0.16181685 128.0 +3.9850502 -18.205013 0.70268369 128.0 +3.87431 -18.234009 0.70286256 128.0 +1.7243441 -8.3687325 0.34146193 128.0 +0.61082309 -3.0606496 0.14732935 128.0 +1.6184819 -8.3735638 0.34088957 128.0 +3.370189 -18.026932 0.69205952 128.0 +3.2463689 -17.974497 0.68941242 128.0 +3.12658 -17.93993 0.68744498 128.0 +2.9826696 -17.757725 0.68014759 128.0 +2.8731756 -17.772732 0.68004024 128.0 +2.7671392 -17.809776 0.68075567 128.0 +2.6662095 -17.882761 0.68279469 128.0 +2.5780554 -18.05015 0.68826771 128.0 +2.4729338 -18.107216 0.68977016 128.0 +2.3945932 -18.373756 0.69885612 128.0 +2.2820551 -18.390087 0.6989277 128.0 +2.1639075 -18.359081 0.69731796 128.0 +2.048445 -18.347183 0.69642365 128.0 +1.9338386 -18.340523 0.69574398 128.0 +1.7740817 -17.876686 0.67864519 128.0 +0.3012329 -3.2409515 0.15212275 128.0 +0.28038961 -3.2317872 0.15172926 128.0 +0.20540547 -2.5501075 0.12718993 128.0 +0.21515769 -2.8921556 0.13942382 128.0 +0.17211956 -2.5235221 0.12615256 128.0 +0.15278561 -2.4626901 0.12393472 128.0 +0.13347781 -2.3887465 0.12125184 128.0 +0.11762306 -2.3655658 0.12039332 128.0 +0.1055517 -2.4221537 0.12239654 128.0 +0.089411095 -2.3888016 0.1211803 128.0 +0.098723851 -3.1514399 0.14847404 128.0 +0.081863381 -3.2498922 0.15197966 128.0 +0.061307825 -3.2183597 0.15083496 128.0 +0.041728538 -3.2316658 0.1513 128.0 +0.021933096 -3.2368579 0.15147886 128.0 +0.0020556725 -3.2159448 0.15072766 128.0 +-0.01745691 -3.1749239 0.14926101 128.0 +-0.036500521 -3.1367838 0.1479017 128.0 +-0.052414335 -2.9476511 0.14114086 128.0 +-0.067386888 -2.8163948 0.13645478 128.0 +-0.085354216 -2.8389034 0.13727753 128.0 +-0.1015831 -2.8053687 0.13609706 128.0 +-0.11803593 -2.78672 0.13545318 128.0 +-0.13305692 -2.743021 0.13391499 128.0 +-1.0448407 -19.159248 0.72242963 128.0 +-1.1572359 -19.067686 0.71938902 128.0 +-0.17772681 -2.6533566 0.13080287 128.0 +-0.19400415 -2.652216 0.13080287 128.0 +-0.20806581 -2.623081 0.12980126 128.0 +-0.22577147 -2.6406739 0.13048092 128.0 +-1.7621752 -19.248131 0.72747344 128.0 +-1.9030871 -19.470692 0.73587978 128.0 +-2.0254135 -19.486481 0.73688138 128.0 +-2.1542406 -19.558121 0.73992193 128.0 +-2.2835608 -19.624941 0.74281943 128.0 +-2.4190094 -19.733561 0.74725515 128.0 +-2.5506425 -19.800613 0.75022417 128.0 +-2.668879 -19.76082 0.74936563 128.0 +-2.7842069 -19.702513 0.74786323 128.0 +-2.9463313 -19.964848 0.75798661 128.0 +-3.0359576 -19.733042 0.75025994 128.0 +-3.1961648 -19.958765 0.75913131 128.0 +-2.9545317 -17.751284 0.67975408 128.0 +-3.0678184 -17.758425 0.68068415 128.0 +-3.1200073 -17.42251 0.66916567 128.0 +-3.6853793 -19.876282 0.75920284 128.0 +-3.429178 -17.881502 0.6873377 128.0 +-3.5423284 -17.877771 0.68798155 128.0 +-4.0656295 -19.878511 0.7618857 128.0 +-3.7905281 -17.970831 0.69302535 128.0 +-4.5579948 -20.971657 0.80381006 128.0 +-4.1971292 -18.755821 0.72357434 128.0 +-4.3049593 -18.698551 0.72242963 128.0 +-4.4499927 -18.800154 0.72715145 128.0 +-5.020052 -20.642761 0.79604763 128.0 +-4.6324315 -18.552149 0.72006869 128.0 +-5.2715039 -20.573795 0.79583299 128.0 +-5.6254497 -21.408058 0.82792014 128.0 +-5.7910066 -21.500515 0.83264196 128.0 +-5.8832169 -21.321037 0.82731199 128.0 +-6.050611 -21.414368 0.83214116 128.0 +-6.231585 -21.548685 0.83854431 128.0 +-6.6656089 -22.53064 0.87664109 128.0 +-6.8043075 -22.491228 0.87671262 128.0 +-6.4243455 -20.774414 0.81396919 128.0 +-7.4019585 -23.425667 0.91498822 128.0 +-7.5965061 -23.537683 0.92092633 128.0 +-7.7345324 -23.471647 0.9202109 128.0 +-6.9567704 -20.683432 0.81672359 128.0 +-0 -0 0 128.0 +-8.4307184 -24.08367 0.94897127 128.0 +-8.5793419 -24.034309 0.94907856 128.0 +-8.7994394 -24.181248 0.95669794 128.0 +-9.0028963 -24.275784 0.96238565 128.0 +-9.3010941 -24.61553 0.97751701 128.0 +-7.9906607 -20.761097 0.83189076 128.0 +-9.8993044 -25.256924 1.0066351 128.0 +-10.248536 -25.68301 1.0254152 128.0 +-10.588696 -26.069632 1.0428002 128.0 +-10.8019 -26.133471 1.0478083 128.0 +-11.106934 -26.411236 1.0611868 128.0 +-11.109993 -25.971382 1.046735 128.0 +-0 -0 0 128.0 +-10.933022 -24.714436 1.0029507 128.0 +-0 -0 0 128.0 +-16.015455 -35.035347 1.4145031 128.0 +-16.262547 -35.006207 1.4172575 128.0 +-16.490259 -34.933777 1.4183664 128.0 +-1.6701081 -3.4816906 0.17383611 128.0 +-1.663868 -3.4147761 0.17158251 128.0 +-1.6679494 -3.3704648 0.17022319 128.0 +-1.6854584 -3.3539159 0.16997278 128.0 +-1.7060059 -3.3435111 0.16997278 128.0 +-1.7292466 -3.3383048 0.17018741 128.0 +-1.7724826 -3.3709762 0.17194022 128.0 +-1.7968966 -3.3670907 0.1722264 128.0 +-1.8398865 -3.397306 0.17390767 128.0 +-1.8655094 -3.3947115 0.17426538 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.324634 -8.4858923 0.51398844 128.0 +-10.302796 -8.3625479 0.51059014 128.0 +-10.459961 -8.384181 0.51545507 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.482691 -8.6962051 0.70268369 128.0 +-16.454163 -8.5525007 0.69939274 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-7.0081286 -3.4266422 0.31484783 128.0 +-7.0155158 -3.377074 0.31431127 128.0 +-7.0370078 -3.3343921 0.31434703 128.0 +-7.075449 -3.2995994 0.31506246 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-36.100494 -15.770309 1.4457318 128.0 +-0 -0 0 128.0 +-36.292221 -15.326502 1.4457675 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-22.281677 -8.4573307 0.88869607 128.0 +-22.331278 -8.3197556 0.88862455 128.0 +-22.382845 -8.1829195 0.88866031 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-28.179754 -8.760582 1.0919147 128.0 +-28.223417 -8.5846014 1.0915569 128.0 +-28.306211 -8.4203825 1.0927017 128.0 +-28.355427 -8.2459822 1.09263 128.0 +-28.412218 -8.0737534 1.0928805 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.791137 -3.3813896 0.50919503 128.0 +-12.778742 -3.2943578 0.5079788 128.0 +-12.82973 -3.223681 0.5091235 128.0 +-0 -0 0 128.0 +-34.276806 -8.1674509 1.296886 128.0 +-34.365215 -7.9660063 1.2983168 128.0 +-0 -0 0 128.0 +-40.494522 -8.8646927 1.5194212 128.0 +-40.586277 -8.624157 1.5208163 128.0 +-40.617874 -8.3707256 1.5200651 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-18.61767 -3.3625467 0.71280706 128.0 +-18.481413 -3.2209623 0.70711941 128.0 +-18.694983 -3.1401172 0.7141664 128.0 +-52.395634 -8.4711733 1.9354452 128.0 +-27.515995 -4.2754335 1.032355 128.0 +-27.544676 -4.1069603 1.0324622 128.0 +-24.075089 -3.4387167 0.9061169 128.0 +-24.196733 -3.3047254 0.9097656 128.0 +-23.993586 -3.127131 0.90171695 128.0 +-24.05695 -2.9853892 0.90332669 128.0 +-24.08077 -2.8384244 0.90354133 128.0 +-27.876806 -3.112627 1.0396523 128.0 +-27.859602 -2.9377463 1.0383645 128.0 +-27.857214 -2.7647734 1.0376492 128.0 +-29.46575 -2.7419686 1.0948837 128.0 +-25.913755 -2.2510931 0.9666782 128.0 +-29.672497 -2.3943212 1.1011795 128.0 +-39.859879 -2.9704437 1.4663361 128.0 +-0 -0 0 128.0 +-42.269211 -2.6288648 1.5515442 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-59.64743 14.963211 1.4528253 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-53.626659 14.506974 1.3159205 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-46.857353 14.231781 1.1642264 128.0 +-46.77774 14.521692 1.1644337 128.0 +-46.696331 14.811162 1.164641 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-41.017223 14.408766 1.0375727 128.0 +-41.019337 14.692875 1.0398073 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-40.740593 15.731489 1.0421339 128.0 +-35.704819 14.039183 0.91985726 128.0 +-34.987812 14.005708 0.90421557 128.0 +-0 0 0 128.0 +-35.042332 14.528973 0.90992862 128.0 +-34.90094 14.721954 0.9086386 128.0 +-35.208675 15.10692 0.91863632 128.0 +-35.183125 15.352262 0.92034101 128.0 +-60.180759 26.701727 1.5528949 128.0 +-56.176434 25.33864 1.4558431 128.0 +-55.881767 25.619524 1.4523416 128.0 +-55.070145 25.657501 1.4357324 128.0 +-54.969509 26.022301 1.4372066 128.0 +-54.656544 26.285868 1.4333135 128.0 +-0 0 0 128.0 +-39.927402 19.808788 1.0628436 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-52.220428 27.935982 1.4004637 128.0 +-0 0 0 128.0 +-51.727444 28.494144 1.3966167 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-33.819103 19.44869 0.93476176 128.0 +-0 0 0 128.0 +-33.619194 19.886671 0.93586749 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-55.879112 37.365807 1.5847542 128.0 +-49.54842 33.574169 1.4149536 128.0 +-20.80162 14.281446 0.61722928 128.0 +-20.752171 14.435648 0.618312 128.0 +-20.543083 14.478043 0.61492562 128.0 +-27.640432 19.735455 0.81840533 128.0 +-45.485168 32.900894 1.3293507 128.0 +-45.230019 33.140957 1.3278533 128.0 +-0 0 0 128.0 +-44.875061 33.734955 1.3294429 128.0 +-44.493828 33.87764 1.3244209 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-37.080982 30.453087 1.1414665 128.0 +-36.894196 30.680677 1.1414896 128.0 +-0 0 0 128.0 +-35.172939 29.986942 1.1008536 128.0 +-35.47261 30.620295 1.1155968 128.0 +-34.713482 30.338676 1.0981352 128.0 +-21.948648 19.420805 0.71112525 128.0 +-21.925871 19.641838 0.71411997 128.0 +-21.651655 19.636971 0.70935148 128.0 +-0 0 0 128.0 +-33.954689 31.564167 1.1040555 128.0 +-32.888214 30.951078 1.0764581 128.0 +-33.650925 32.060532 1.1067969 128.0 +-38.755245 37.380199 1.2765284 128.0 +-32.703476 31.932556 1.0890359 128.0 +-0 0 0 128.0 +-14.520478 14.5296 0.50914294 128.0 +-14.420519 14.60775 0.50879735 128.0 +-14.238489 14.601472 0.50575656 128.0 +-28.167448 29.244032 0.97141248 128.0 +-27.977142 29.405449 0.97106695 128.0 +-27.634615 29.404627 0.96563041 128.0 +-27.546852 29.674019 0.96878636 128.0 +-27.64127 30.144602 0.97823125 128.0 +-27.439678 30.295855 0.97767836 128.0 +-27.257936 30.468866 0.97783965 128.0 +-27.089005 30.656521 0.97848463 128.0 +-26.058321 29.857269 0.94897515 128.0 +-25.881809 30.024929 0.94922853 128.0 +-26.331543 30.928427 0.97178108 128.0 +-26.246788 31.214905 0.97555906 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-15.835533 19.551872 0.61557066 128.0 +-15.690915 19.618219 0.61467224 128.0 +-23.395195 29.622566 0.90559781 128.0 +-23.053766 29.561373 0.89963138 128.0 +-22.730444 29.518499 0.89428693 128.0 +-22.686848 29.838867 0.89953923 128.0 +-22.386301 29.821598 0.89504713 128.0 +-22.417185 30.247555 0.90334022 128.0 +-22.240023 30.396637 0.90368575 128.0 +-22.334642 30.922358 0.91476625 128.0 +-21.339531 29.92975 0.88281488 128.0 +-21.198059 30.120626 0.88451958 128.0 +-20.717415 29.8248 0.87258673 128.0 +-20.56794 30.000834 0.8739689 128.0 +-20.170593 29.811817 0.86521512 128.0 +-19.934555 29.856033 0.86302668 128.0 +-20.48744 31.095644 0.89387232 128.0 +-19.830393 30.504103 0.87417626 128.0 +-20.831305 32.47826 0.9249022 128.0 +-19.156292 30.273743 0.86132199 128.0 +-18.960648 30.375446 0.86090732 128.0 +-18.798019 30.530376 0.86196703 128.0 +-18.732277 30.845957 0.86738056 128.0 +-18.494888 30.88055 0.86523819 128.0 +-8.5905056 14.543907 0.42503735 128.0 +-8.5197182 14.628308 0.4258897 128.0 +-20.767126 36.168926 0.99684459 128.0 +-18.247553 32.236938 0.88938022 128.0 +-18.171669 32.567429 0.89516234 128.0 +-17.854918 32.46632 0.88958752 128.0 +-17.688717 32.636791 0.89120007 128.0 +-17.387346 32.555996 0.88627028 128.0 +-17.708647 33.652973 0.91207099 128.0 +-10.028624 19.34412 0.53789222 128.0 +-10.082956 19.744526 0.54666907 128.0 +-9.9827271 19.848 0.54775178 128.0 +-9.8217106 19.83004 0.54572457 128.0 +-9.6761904 19.841408 0.54448062 128.0 +-15.008182 31.261818 0.8348763 128.0 +-9.5276489 20.161131 0.54964072 128.0 +-17.400606 37.415733 0.9866395 128.0 +-14.493025 31.670044 0.83835477 128.0 +-14.276677 31.71006 0.83713388 128.0 +-13.40907 30.2778 0.7988475 128.0 +-13.121246 30.125778 0.79297328 128.0 +-12.44343 29.055113 0.76413178 128.0 +-12.221085 29.026798 0.76152873 128.0 +-12.015228 29.034727 0.75987011 128.0 +-11.808983 29.039371 0.75816542 128.0 +-11.58051 28.98595 0.75505549 128.0 +-12.008986 30.60228 0.79331881 128.0 +-12.342555 32.028996 0.8267445 128.0 +-12.18223 32.200439 0.82911724 128.0 +-11.430441 30.782528 0.79244345 128.0 +-10.985023 30.148521 0.77518922 128.0 +-10.426704 29.171322 0.74964195 128.0 +-10.172785 29.021526 0.74443579 128.0 +-9.9620333 28.988852 0.74213213 128.0 +-9.7635536 28.988794 0.74065781 128.0 +-9.5761003 29.019676 0.73996675 128.0 +-9.4110775 29.118793 0.74095726 128.0 +-9.2762604 29.315153 0.74432057 128.0 +-9.1299229 29.480389 0.74694669 128.0 +-8.992341 29.679373 0.75040215 128.0 +-8.8339167 29.814508 0.75233722 128.0 +-8.6566515 29.888317 0.75282097 128.0 +-8.5161037 30.092861 0.75646073 128.0 +-8.3762999 30.3074 0.76035386 128.0 +-8.2159557 30.453783 0.76263446 128.0 +-8.4322262 32.036022 0.79914701 128.0 +-3.7226944 14.501791 0.38080764 128.0 +-3.5982299 14.38276 0.37744433 128.0 +-3.5146432 14.423994 0.37790507 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-8.7897587 40.36404 0.98769915 128.0 +-4.1614652 19.687611 0.49949071 128.0 +-4.0349665 19.685352 0.4988457 128.0 +-3.9137144 19.707779 0.49879962 128.0 +-3.813468 19.839417 0.50133359 128.0 +-5.2005262 27.983265 0.69165957 128.0 +-4.9181795 27.398655 0.67723888 128.0 +-4.7753839 27.575092 0.68067127 128.0 +-4.6820974 28.059456 0.69131404 128.0 +-4.4542236 27.741186 0.68322831 128.0 +-5.5702486 36.108139 0.8776778 128.0 +-4.7562661 32.138294 0.78442681 128.0 +-4.9313536 34.794918 0.84558821 128.0 +-4.7470136 35.040493 0.85061014 128.0 +-3.8367412 29.688122 0.72559208 128.0 +-4.3118968 35.057407 0.84971172 128.0 +-3.53473 30.269184 0.73803169 128.0 +-3.3807843 30.57847 0.74471217 128.0 +-0 0 0 128.0 +-2.9360707 29.912231 0.72837943 128.0 +-0 0 0 128.0 +-3.3865347 39.483475 0.94895208 128.0 +-0 0 0 128.0 +-1.9242084 26.202429 0.64121008 128.0 +-1.8394387 27.344889 0.66733325 128.0 +-2.2723711 37.193718 0.89444822 128.0 +-2.3018849 41.901642 1.0027879 128.0 +-1.3624274 27.920319 0.67993408 128.0 +-0 0 0 128.0 +-0.99139583 27.158659 0.66203487 128.0 +-0 0 0 128.0 +-0.95559865 39.475914 0.94570398 128.0 +-0 0 0 128.0 +-0.33740401 28.251446 0.686845 128.0 +-0.22185197 38.279156 0.91787612 128.0 +0.013368707 39.196556 0.93900043 128.0 +0 0 0 128.0 +0 0 0 128.0 +0.63754863 34.008957 0.81960326 128.0 +0 0 0 128.0 +0.87088495 28.076 0.68306702 128.0 +1.0438458 28.089111 0.6835047 128.0 +1.3326907 30.769939 0.74549544 128.0 +2.0549598 41.539124 0.99414933 128.0 +1.7154622 30.846096 0.74768388 128.0 +1.9027861 30.804056 0.74696976 128.0 +1.9582024 28.826859 0.70158821 128.0 +2.0652683 27.873133 0.67984194 128.0 +2.2612252 28.170853 0.6870293 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.0499642 30.861385 0.75040215 128.0 +2.1031315 20.028496 0.49985927 128.0 +2.2197931 19.959574 0.49856925 128.0 +2.3524866 20.032953 0.50059646 128.0 +2.4765897 20.028063 0.50082678 128.0 +2.5963411 19.988695 0.50027394 128.0 +2.7146235 19.940689 0.49953678 128.0 +2.8314276 19.885057 0.49863836 128.0 +4.9794087 33.490829 0.81600958 128.0 +5.2002764 33.559425 0.81833625 128.0 +4.6711516 28.969997 0.7119776 128.0 +4.9206977 29.369694 0.72199839 128.0 +4.9399805 28.414078 0.70036733 128.0 +5.2530761 29.153612 0.71840471 128.0 +0 0 0 128.0 +11.938848 61.889206 1.488186 128.0 +5.9248085 29.734377 0.734438 128.0 +2.9969018 14.576113 0.37871134 128.0 +3.0678225 14.470409 0.37666109 128.0 +0 0 0 128.0 +3.2958481 14.656981 0.38198251 128.0 +3.3762534 14.595575 0.38101497 128.0 +3.4745381 14.611543 0.38189036 128.0 +10.63012 43.505211 1.0677733 128.0 +0 0 0 128.0 +3.4976671 13.59243 0.35922262 128.0 +3.5263994 13.363855 0.35429284 128.0 +3.614337 13.364162 0.3548227 128.0 +8.3890495 30.274826 0.75970882 128.0 +8.5315361 30.070824 0.75606912 128.0 +9.7990313 33.747791 0.84556514 128.0 +0 0 0 128.0 +10.225797 33.669003 0.84662485 128.0 +0 0 0 128.0 +11.984549 37.785381 0.94922853 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.9245462 20.155308 0.53485143 128.0 +7.9956775 19.975439 0.53160334 128.0 +0 0 0 128.0 +8.1169033 19.578451 0.5241856 128.0 +8.3468504 19.788956 0.53070492 128.0 +0 0 0 128.0 +8.5626726 19.624563 0.52918452 128.0 +0 0 0 128.0 +24.895916 55.19495 1.4310329 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +37.932098 77.648117 2.0270975 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +32.320435 60.415848 1.6146322 128.0 +32.690052 60.215519 1.6146092 128.0 +33.07869 60.049706 1.6155537 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.498558 47.509277 1.3123959 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.804775 31.679937 0.89670575 128.0 +0 0 0 128.0 +20.504904 31.921532 0.91004378 128.0 +20.717295 31.821087 0.9107579 128.0 +20.734304 31.423845 0.90331715 128.0 +21.142906 31.619307 0.91227829 128.0 +21.327547 31.475739 0.9119097 128.0 +13.823077 20.13405 0.59856987 128.0 +14.01487 20.147335 0.60133421 128.0 +14.158962 20.09038 0.60216355 128.0 +14.215738 19.910372 0.59953737 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.76317 36.368107 1.1042398 128.0 +0 0 0 128.0 +0 0 0 128.0 +31.743048 38.651619 1.1882993 128.0 +31.971943 38.446896 1.188023 128.0 +35.994926 42.748112 1.3235224 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.422506 19.892063 0.67643261 128.0 +19.469696 19.697149 0.67399073 128.0 +19.73304 19.72006 0.67864406 128.0 +39.242149 38.736404 1.3063835 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.392761 15.75371 0.57654715 128.0 +17.419802 15.584704 0.57440478 128.0 +17.581776 15.53644 0.576455 128.0 +17.370964 15.161383 0.56710225 128.0 +17.391726 14.992503 0.56491381 128.0 +17.223047 14.663871 0.55703539 128.0 +18.214872 15.316457 0.5841952 128.0 +17.447077 14.489095 0.55839455 128.0 +17.837912 14.629639 0.56740171 128.0 +18.694157 15.140915 0.59013855 128.0 +18.044985 14.432741 0.56825405 128.0 +18.232059 14.399817 0.57115668 128.0 +17.861242 13.929877 0.55774951 128.0 +18.42799 14.190856 0.57175559 128.0 +18.505962 14.070861 0.57150221 128.0 +20.531652 15.413035 0.6273883 128.0 +18.806557 13.93854 0.57521105 128.0 +18.580282 13.595024 0.56631905 128.0 +18.752501 13.54515 0.56885302 128.0 +19.048536 13.581885 0.57488853 128.0 +20.30311 14.289229 0.60789955 128.0 +20.22208 14.047466 0.60317713 128.0 +20.371386 13.966648 0.6049509 128.0 +20.381348 13.79041 0.60285461 128.0 +20.703377 13.823855 0.60944301 128.0 +20.714342 13.648162 0.6074158 128.0 +20.782608 13.510996 0.60700113 128.0 +21.615767 13.864649 0.62754953 128.0 +21.65143 13.700752 0.62621343 128.0 +31.906252 19.916121 0.90248787 128.0 +32.059353 19.739367 0.90334022 128.0 +32.19696 19.55266 0.90380096 128.0 +20.297495 12.156982 0.58099318 128.0 +20.289928 11.983914 0.57880473 128.0 +20.306059 11.825989 0.57728434 128.0 +20.306278 11.659855 0.57537228 128.0 +20.259113 11.468066 0.57223934 128.0 +20.224335 11.285091 0.569475 128.0 +20.251148 11.137661 0.56836927 128.0 +20.276917 10.990328 0.56726354 128.0 +20.230209 10.804953 0.56429183 128.0 +20.248352 10.65548 0.56304789 128.0 +20.281399 10.514476 0.56221855 128.0 +20.337519 10.385741 0.56201124 128.0 +20.416939 10.268842 0.56242591 128.0 +0 0 0 128.0 +20.998802 10.240548 0.5741514 128.0 +21.201839 10.179002 0.57774502 128.0 +21.595633 10.205466 0.58619934 128.0 +23.08832 10.737975 0.62255067 128.0 +23.131954 10.586123 0.62199777 128.0 +23.184624 10.438653 0.62169832 128.0 +22.783867 10.090563 0.60999584 128.0 +24.004829 10.455534 0.63913679 128.0 +24.261526 10.390691 0.64397442 128.0 +24.714582 10.405711 0.65371877 128.0 +25.138239 10.402943 0.66270292 128.0 +25.656313 10.433394 0.67401379 128.0 +25.943592 10.365154 0.67956555 128.0 +26.629313 10.450072 0.69497681 128.0 +26.726515 10.299421 0.69580615 128.0 +62.645271 23.699089 1.5791564 128.0 +0 0 0 128.0 +0 0 0 128.0 +37.500999 13.403625 0.95346725 128.0 +0 0 0 128.0 +39.433537 13.550909 0.99661422 128.0 +42.515575 14.318857 1.0695472 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +48.336655 14.321196 1.1974678 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.164778 0.73249793 0.43169484 128.0 +17.225897 0.62923938 0.43300793 128.0 +17.211447 0.52298605 0.43259326 128.0 +17.417217 0.42227408 0.43726963 128.0 +17.413485 0.31528792 0.4371314 128.0 +17.35911 0.20776857 0.43584138 128.0 +17.35206 0.10120507 0.43565708 128.0 +17.339357 -0.0052622561 0.43535763 128.0 +17.349997 -0.11172601 0.43561101 128.0 +17.343985 -0.21811828 0.43549582 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +17.371264 -1.0725234 0.43685499 128.0 +17.376324 -1.1799048 0.4371314 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +17.473537 -1.6181632 0.4401722 128.0 +0 -0 0 128.0 +27.411886 -2.8788722 0.67092693 128.0 +27.435436 -3.0516577 0.67189443 128.0 +27.426125 -3.2211075 0.6721248 128.0 +27.40386 -3.3890848 0.67207873 128.0 +27.393454 -3.5585852 0.67233211 128.0 +25.389923 -3.4567764 0.62625951 128.0 +27.379395 -3.8989887 0.6730693 128.0 +27.379677 -4.0705886 0.6736452 128.0 +27.360111 -4.239429 0.67378342 128.0 +27.725416 -4.4704232 0.6829288 128.0 +19.308702 -3.2346392 0.48693591 128.0 +19.295385 -3.3542531 0.48709717 128.0 +19.173101 -3.45432 0.48472443 128.0 +19.151545 -3.5718989 0.48472443 128.0 +0 -0 0 128.0 +43.591114 -8.6864281 1.0600102 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +37.648212 -8.467659 0.92499435 128.0 +37.597496 -8.6989555 0.92504042 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +9.1141195 -2.4645281 0.25337079 128.0 +9.0419836 -2.504652 0.25201163 128.0 +7.9867773 -2.2650743 0.22710939 128.0 +7.9333658 -2.3026068 0.22616491 128.0 +7.9305882 -2.3546579 0.22644134 128.0 +7.9035554 -2.3994973 0.22614187 128.0 +7.8686333 -2.4417226 0.2256581 128.0 +7.8897147 -2.5014443 0.22653349 128.0 +7.9265265 -2.5667541 0.22780047 128.0 +7.9220181 -2.6191094 0.22807692 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +7.2442818 -2.543793 0.21273473 128.0 +7.2050076 -2.5797665 0.21215883 128.0 +11.220526 -4.0960741 0.31105369 128.0 +7.3133516 -2.7202897 0.21561427 128.0 +0 -0 0 128.0 +6.9996352 -2.7017872 0.20870338 128.0 +6.9810648 -2.7439537 0.20865731 128.0 +11.121155 -4.4509673 0.31183693 128.0 +7.2135043 -2.9380636 0.21529177 128.0 +7.1814885 -2.9765258 0.21494623 128.0 +0 -0 0 128.0 +19.632633 -8.4231739 0.52807873 128.0 +19.631893 -8.5658712 0.52936882 128.0 +4.6088166 -2.043715 0.15198798 128.0 +4.5907221 -2.0694892 0.15184978 128.0 +4.5997477 -2.1076181 0.15240264 128.0 +4.6329455 -2.1573353 0.15357749 128.0 +4.6078744 -2.180161 0.15327802 128.0 +4.6052217 -2.213593 0.15355445 128.0 +4.589756 -2.2409308 0.15350838 128.0 +4.5714417 -2.266829 0.15339321 128.0 +4.5458403 -2.2889886 0.15309374 128.0 +4.6892471 -2.3974252 0.15717116 128.0 +4.6815467 -2.4298387 0.15735546 128.0 +4.341094 -2.2869637 0.14887808 128.0 +4.3437285 -2.3225176 0.14931577 128.0 +4.4427357 -2.4106593 0.15228747 128.0 +4.3691912 -2.4055545 0.15074404 128.0 +4.3805294 -2.4469504 0.15143512 128.0 +4.4880567 -2.5433085 0.15468323 128.0 +3.3561454 -1.9288378 0.12501247 128.0 +3.3528826 -1.9544317 0.12524283 128.0 +3.3373857 -1.9729316 0.1251507 128.0 +3.3260744 -1.9938866 0.12517373 128.0 +3.3300061 -2.0241287 0.12561142 128.0 +4.3394961 -2.6747673 0.15327802 128.0 +3.4185078 -2.1358576 0.12869829 128.0 +3.0101445 -1.9063339 0.11791729 128.0 +3.4130685 -2.1911557 0.12927419 128.0 +3.3828034 -2.2011466 0.12881346 128.0 +2.974545 -1.9614178 0.11791729 128.0 +2.9499884 -1.9712964 0.11757175 128.0 +3.0222542 -2.0465636 0.11992145 128.0 +3.0121124 -2.066767 0.11999056 128.0 +2.9460304 -2.0480995 0.1184932 128.0 +2.9644599 -2.0880237 0.11936858 128.0 +3.024003 -2.1578796 0.12141881 128.0 +3.0333865 -2.1928003 0.12206382 128.0 +3.9222522 -2.872591 0.14784145 128.0 +3.190084 -2.3663068 0.12733914 128.0 +5.4625354 -4.1051927 0.19326906 128.0 +5.4531517 -4.1507459 0.19372979 128.0 +23.465782 -18.0947 0.71861207 128.0 +5.3143473 -4.1490469 0.19117275 128.0 +5.5883222 -4.4184871 0.19997261 128.0 +5.5720301 -4.4614429 0.20029514 128.0 +21.565794 -17.49 0.67562634 128.0 +3.4625978 -2.8423183 0.13904159 128.0 +3.457391 -2.8737388 0.13941017 128.0 +21.688335 -18.261343 0.6891256 128.0 +21.576639 -18.394726 0.6891486 128.0 +21.467905 -18.530689 0.68928683 128.0 +3.6839111 -3.2182546 0.14853254 128.0 +2.8495181 -2.5199788 0.12346904 128.0 +2.8176205 -2.5227396 0.12296224 128.0 +3.3367331 -3.0249159 0.13959445 128.0 +3.771714 -3.4618635 0.15378483 128.0 +2.8841999 -2.6796825 0.12653287 128.0 +4.4387641 -4.1759305 0.17624523 128.0 +2.8778796 -2.7403905 0.12738521 128.0 +2.8660476 -2.7628558 0.12754647 128.0 +3.4606071 -3.3775694 0.14724252 128.0 +4.3072166 -4.2561951 0.17534681 128.0 +4.2683001 -4.269814 0.17493215 128.0 +2.9884071 -3.0258889 0.13381234 128.0 +3.2503505 -3.3319201 0.14307293 128.0 +3.5322199 -3.665751 0.15311676 128.0 +3.6957147 -3.8829191 0.15933657 128.0 +2.7242899 -2.897244 0.12745433 128.0 +2.6738143 -2.8787351 0.12634858 128.0 +2.6425874 -2.8803496 0.12588786 128.0 +3.6523275 -4.0309863 0.16115645 128.0 +3.732173 -4.1703024 0.16477314 128.0 +2.7916825 -3.1577532 0.13293697 128.0 +2.7683101 -3.1703038 0.13279875 128.0 +3.1965704 -3.7067037 0.14860165 128.0 +3.4692817 -4.0733733 0.15910621 128.0 +3.4628806 -4.1167746 0.15977426 128.0 +3.1444061 -3.7849116 0.1492006 128.0 +3.1629629 -3.8551548 0.150721 128.0 +3.2160089 -3.9692736 0.15353142 128.0 +3.2115743 -4.013916 0.15426858 128.0 +3.1831675 -4.0288391 0.15413037 128.0 +1.6601778 -2.1270485 0.097990885 128.0 +1.6672229 -2.1633351 0.098751083 128.0 +1.6527075 -2.1719327 0.098705009 128.0 +1.6363487 -2.1780348 0.09858983 128.0 +1.6068822 -2.1663475 0.097967848 128.0 +1.6035947 -2.1898828 0.098359466 128.0 +1.5848596 -2.1923869 0.098152138 128.0 +1.5678953 -2.197186 0.098013923 128.0 +1.5549595 -2.2075825 0.09803696 128.0 +1.553932 -2.2351463 0.098543756 128.0 +1.5345353 -2.236393 0.098313391 128.0 +1.5219046 -2.2474227 0.098359466 128.0 +1.5125269 -2.2633703 0.098543756 128.0 +2.4583647 -3.7294135 0.13874212 128.0 +2.4207237 -3.721796 0.13812013 128.0 +2.4005401 -3.740787 0.13823532 128.0 +2.354022 -3.7182736 0.13722172 128.0 +2.2893443 -3.6656485 0.13540184 128.0 +2.1708925 -3.5238342 0.1311862 128.0 +1.9157243 -3.1525526 0.12081987 128.0 +1.5367907 -2.5638638 0.10469445 128.0 +1.908921 -3.2300563 0.12227115 128.0 +1.8815196 -3.2287493 0.12192561 128.0 +1.8641618 -3.2445683 0.12204079 128.0 +1.3424172 -2.3693759 0.098566793 128.0 +1.3298022 -2.3810606 0.098658934 128.0 +1.3108317 -2.3812912 0.098451607 128.0 +1.3004827 -2.3971999 0.098658934 128.0 +1.2890459 -2.4113076 0.098820195 128.0 +1.684819 -3.1995077 0.11913822 128.0 +1.6642352 -3.2080102 0.11909214 128.0 +1.2444433 -2.4346261 0.098820195 128.0 +1.6516924 -3.2817807 0.12047432 128.0 +1.6306373 -3.2900617 0.12042825 128.0 +7.7149563 -15.819281 0.4413701 128.0 +7.6225047 -15.876234 0.44162348 128.0 +1.1580712 -2.4481518 0.09822125 128.0 +1.3466375 -2.8930566 0.10934778 128.0 +1.3958337 -3.047627 0.11305663 128.0 +7.3688903 -16.365734 0.44938672 128.0 +7.2634759 -16.39967 0.4491103 128.0 +7.177083 -16.476927 0.44993961 128.0 +1.3611561 -3.1756232 0.11542937 128.0 +6.8785338 -16.33617 0.44424963 128.0 +6.7770209 -16.375298 0.44418052 128.0 +6.5796394 -16.178564 0.4382602 128.0 +6.5243797 -16.329111 0.4410015 128.0 +6.4317322 -16.38838 0.44148529 128.0 +6.3145189 -16.384623 0.4404256 128.0 +6.1912274 -16.363214 0.43895128 128.0 +6.0506907 -16.293116 0.4363021 128.0 +5.989275 -16.436081 0.43890521 128.0 +1.1927979 -3.3340762 0.11741049 128.0 +1.1703339 -3.3356714 0.11727227 128.0 +5.5535026 -16.15873 0.42952943 128.0 +5.4379773 -16.14418 0.42835459 128.0 +1.2067829 -3.6538084 0.12448264 128.0 +5.2698884 -16.303877 0.43063518 128.0 +5.183321 -16.378798 0.4316718 128.0 +5.1031294 -16.476189 0.43326131 128.0 +0.96544737 -3.1828773 0.11245769 128.0 +0.94845521 -3.1973681 0.11266501 128.0 +0.96052092 -3.3125994 0.11529115 128.0 +0.95405889 -3.367491 0.116466 128.0 +0.89796257 -3.2451203 0.11340217 128.0 +0.85121614 -3.1511497 0.11102943 128.0 +0.83390057 -3.164048 0.11121372 128.0 +4.4222288 -17.227716 0.44565484 128.0 +4.335115 -17.329206 0.44742864 128.0 +4.2145076 -17.297199 0.44604647 128.0 +0.80789292 -3.4024327 0.1163969 128.0 +0.79014605 -3.420964 0.1167194 128.0 +3.7090919 -16.540697 0.42641953 128.0 +3.6005116 -16.530909 0.42565933 128.0 +3.6327429 -17.185543 0.44056383 128.0 +0.6387229 -3.1112311 0.10900224 128.0 +1.6576272 -8.3436365 0.23183183 128.0 +1.6107395 -8.3762312 0.23236167 128.0 +3.0457129 -16.385881 0.41985419 128.0 +2.9763706 -16.57843 0.4239316 128.0 +2.8843126 -16.652531 0.42524469 128.0 +2.7944181 -16.743874 0.42697239 128.0 +2.6626306 -16.580065 0.42275676 128.0 +2.5375314 -16.44492 0.41923219 128.0 +2.5613945 -17.30377 0.43888217 128.0 +2.4533491 -17.306292 0.43858269 128.0 +2.3487236 -17.332909 0.43885913 128.0 +2.2478349 -17.389627 0.4398497 128.0 +2.1453621 -17.437822 0.44065598 128.0 +2.037282 -17.441721 0.44044864 128.0 +1.8139192 -16.401581 0.41605321 128.0 +1.7232045 -16.507858 0.41826469 128.0 +0.24072391 -2.4414713 0.092346989 128.0 +0.2258303 -2.443898 0.092370026 128.0 +0.21100138 -2.4472296 0.0924161 128.0 +0.19582291 -2.446485 0.092370026 128.0 +0.18051517 -2.4436524 0.092277877 128.0 +0.28420705 -4.2102594 0.13305214 128.0 +1.0398514 -17.009682 0.42849278 128.0 +0.13194226 -2.3816762 0.090780519 128.0 +0.11674187 -2.3704584 0.09050408 128.0 +0.10279061 -2.3851135 0.090826593 128.0 +0.089574546 -2.4246631 0.091725007 128.0 +0.083784223 -2.7249498 0.098635897 128.0 +0.068947457 -2.803369 0.10043273 128.0 +0.051690917 -2.8007407 0.10036363 128.0 +0.20951751 -17.50606 0.43922773 128.0 +0.017144727 -2.7711725 0.099672534 128.0 +0.00014859522 -2.750231 0.099188775 128.0 +-0.016589902 -2.7291863 0.098705009 128.0 +-0.033158615 -2.7150381 0.098382503 128.0 +-0.049685743 -2.7077866 0.09822125 128.0 +-0.066523626 -2.7164254 0.098428577 128.0 +-0.55387026 -17.869635 0.4477742 128.0 +-0.66592175 -17.930838 0.44927156 128.0 +-0.11469438 -2.6727912 0.097461052 128.0 +-0.13025193 -2.6550624 0.097069435 128.0 +-0.14565182 -2.6382422 0.096700847 128.0 +-0.16115861 -2.6263227 0.096447453 128.0 +-0.17686361 -2.6192999 0.09630923 128.0 +-1.2858365 -17.359785 0.4369241 128.0 +-0.20971341 -2.625901 0.096516557 128.0 +-1.5744915 -18.218197 0.45717299 128.0 +-1.6852318 -18.197243 0.45691961 128.0 +-1.7926267 -18.14378 0.45592904 128.0 +-1.9452884 -18.526167 0.46505141 128.0 +-1.9799854 -17.804449 0.44860348 128.0 +-2.2282481 -18.975508 0.47606277 128.0 +-2.3496702 -19.002157 0.47700727 128.0 +-2.4514055 -18.873373 0.47435808 128.0 +-2.601027 -19.106613 0.48014021 128.0 +-2.7316079 -19.18432 0.48232865 128.0 +-2.8580928 -19.22653 0.48371083 128.0 +-2.9847388 -19.264942 0.48502389 128.0 +-3.1049595 -19.259096 0.48532337 128.0 +-3.226212 -19.258417 0.48576105 128.0 +-3.3497999 -19.269777 0.48649821 128.0 +-3.4747121 -19.286247 0.48737359 128.0 +-3.4114625 -18.291615 0.46456766 128.0 +-3.6526031 -18.938831 0.4802554 128.0 +-3.7763615 -18.9543 0.48115379 128.0 +-3.9076979 -19.004215 0.48288152 128.0 +-4.0323215 -19.018021 0.48377994 128.0 +-3.7564659 -17.196789 0.44141617 128.0 +-3.864326 -17.184145 0.44166955 128.0 +-4.7141414 -20.377222 0.51775849 128.0 +-4.8451004 -20.373201 0.51835746 128.0 +-5.0238886 -20.563541 0.52358669 128.0 +-5.1506991 -20.535238 0.52365577 128.0 +-5.2883177 -20.548752 0.52473849 128.0 +-5.4359908 -20.59808 0.52669656 128.0 +-5.5233746 -20.420546 0.52326417 128.0 +-5.6528411 -20.401686 0.52363276 128.0 +-5.8404121 -20.586861 0.52890807 128.0 +-5.4990702 -18.940596 0.49027619 128.0 +-6.2890391 -21.174896 0.54480314 128.0 +-6.4775414 -21.329138 0.54945648 128.0 +-6.5955462 -21.247934 0.54846591 128.0 +-6.7602568 -21.315701 0.55109203 128.0 +-6.6607537 -20.563372 0.53388393 128.0 +-6.8426862 -20.691065 0.53798437 128.0 +-6.9624805 -20.627851 0.53747755 128.0 +-7.1914754 -20.88249 0.544734 128.0 +-7.3492956 -20.922861 0.54680729 128.0 +-7.6005974 -21.2209 0.55521554 128.0 +-8.1363354 -22.2848 0.5824675 128.0 +-8.2551365 -22.18667 0.58129263 128.0 +-8.4187603 -22.208515 0.58308947 128.0 +-8.7882452 -22.760773 0.59801698 128.0 +-8.9738359 -22.82365 0.60091954 128.0 +-9.3808641 -23.435476 0.61748266 128.0 +-9.5256166 -23.380253 0.6175518 128.0 +-9.9254551 -23.940105 0.63298613 128.0 +-10.086151 -23.911913 0.63381541 128.0 +-10.270528 -23.937773 0.63602692 128.0 +-10.743897 -24.622911 0.65484756 128.0 +-10.849771 -24.45509 0.65229052 128.0 +-10.983178 -24.351604 0.65136909 128.0 +-11.11864 -24.253765 0.6506089 128.0 +-11.267672 -24.185991 0.6506319 128.0 +-11.462917 -24.215796 0.65316594 128.0 +-0 -0 0 128.0 +-1.6634265 -3.4076285 0.12319261 128.0 +-1.6811937 -3.3910887 0.12303135 128.0 +-1.6938726 -3.3646386 0.1226167 128.0 +-1.7163068 -3.3577421 0.12270884 128.0 +-1.7516211 -3.3755391 0.123446 128.0 +-1.7750971 -3.3700342 0.12358423 128.0 +-1.7990431 -3.3652496 0.12374548 128.0 +-1.8497089 -3.4094994 0.12519677 128.0 +-17.703773 -32.139832 0.8813175 128.0 +-17.890404 -32.012272 0.88083375 128.0 +-18.613604 -32.831577 0.90545958 128.0 +-18.824175 -32.733215 0.90589726 128.0 +-19.691599 -33.760445 0.93639731 128.0 +-0 -0 0 128.0 +-20.576008 -34.30241 0.95752162 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-18.680666 -29.477987 0.83996731 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-30.252485 -44.061905 1.267383 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.305405 -8.4525442 0.34293595 128.0 +-10.353189 -8.3860064 0.34282076 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.476727 -8.670949 0.46484408 128.0 +-16.455063 -8.5310392 0.46290904 128.0 +-16.581892 -8.4681015 0.46484408 128.0 +-0 -0 0 128.0 +-7.0133934 -3.4745383 0.21616715 128.0 +-6.9977384 -3.4134748 0.21522266 128.0 +-7.0158472 -3.3691752 0.21515355 128.0 +-7.0255413 -3.3209381 0.21487711 128.0 +-7.0684485 -3.2883065 0.21545301 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-36.023994 -15.689958 0.94121188 128.0 +-0 -0 0 128.0 +-36.335449 -15.29791 0.94425273 128.0 +-36.256809 -15.003575 0.93996793 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-40.098396 -15.451829 1.0260086 128.0 +-0 -0 0 128.0 +-22.343803 -8.2972412 0.58502454 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-43.160305 -15.128184 1.0896579 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-28.313412 -8.3892097 0.71626234 128.0 +-0 -0 0 128.0 +-52.892445 -14.967333 1.3024442 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.802219 -3.3704076 0.34086269 128.0 +-12.80426 -3.2870698 0.34042498 128.0 +-12.854254 -3.2159617 0.34113911 128.0 +-34.33828 -8.3654261 0.85019547 128.0 +-34.423985 -8.1628761 0.85102475 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-40.530678 -8.5658998 0.99037141 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-46.386196 -8.3257046 1.1217475 128.0 +-18.549795 -3.2127941 0.4696126 128.0 +-18.592825 -3.1028624 0.47016549 128.0 +-52.451218 -8.4207001 1.2598962 128.0 +-29.780655 -4.5943418 0.73015326 128.0 +-29.863668 -4.4197187 0.73144329 128.0 +-27.533398 -3.9024515 0.67659384 128.0 +-24.216219 -3.2809894 0.5989154 128.0 +-24.114933 -3.1167121 0.59610498 128.0 +-27.753372 -3.41378 0.68014145 128.0 +-27.687407 -3.2333393 0.67813724 128.0 +-27.609343 -3.052629 0.67587972 128.0 +-27.655396 -2.8860681 0.6765247 128.0 +-25.857782 -2.5382607 0.63450652 128.0 +-27.622028 -2.540345 0.6749813 128.0 +-25.874035 -2.2196445 0.63420701 128.0 +-29.566559 -2.3535874 0.71925706 128.0 +-29.594402 -2.1731505 0.71957958 128.0 +-29.616158 -1.9921254 0.71978694 128.0 +-39.47686 -2.4117887 0.9471553 128.0 +-41.976509 -2.3059957 1.0045156 128.0 +-41.754211 -2.0368998 0.99907911 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-243.81808 1.5853306 5.6540952 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 -0 0 128.0 +-121.53112 -2.287369 1.3726013 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-74.574036 2.7161655 0.85656738 128.0 +-95.583656 4.0686855 1.0879976 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-59.896358 14.198633 0.71288013 128.0 +-59.752731 14.552397 0.71225339 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-50.012844 14.149378 0.60753363 128.0 +-0 0 0 128.0 +-80.117027 23.73168 0.95481086 128.0 +-79.874199 24.193834 0.95371133 128.0 +-0 0 0 128.0 +-46.985939 14.864061 0.57790118 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-41.244026 14.170177 0.5155465 128.0 +-41.127991 14.413057 0.51521665 128.0 +-41.066086 14.674901 0.51553553 128.0 +-73.036285 26.60556 0.89074093 128.0 +-0 0 0 128.0 +-51.784092 19.587044 0.64479691 128.0 +-0 0 0 128.0 +-63.385979 24.868639 0.78472376 128.0 +-61.931221 24.737455 0.7693193 128.0 +-0 0 0 128.0 +-35.068668 14.509316 0.45332381 128.0 +-35.009392 14.737022 0.45368668 128.0 +-0 0 0 128.0 +-35.188957 15.323624 0.45804083 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-30.885534 14.131563 0.40948534 128.0 +-30.811844 14.327131 0.4096503 128.0 +-0 0 0 128.0 +-63.207561 30.339127 0.80695635 128.0 +-31.184652 15.204737 0.41750097 128.0 +-39.899395 19.757601 0.52558529 128.0 +-27.182873 13.66903 0.37057281 128.0 +-0 0 0 128.0 +-26.974024 13.981331 0.37008899 128.0 +-0 0 0 128.0 +-28.768305 15.362098 0.39461964 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-27.224066 15.188004 0.37879732 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-33.804535 19.683559 0.46614441 128.0 +-33.674511 19.885525 0.46603444 128.0 +-0 0 0 128.0 +-46.984688 28.528654 0.64043176 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-44.152622 28.315012 0.61276746 128.0 +-0 0 0 128.0 +-43.245693 28.488348 0.60544455 128.0 +-42.933685 28.662111 0.60364127 128.0 +-42.582256 28.806787 0.60132128 128.0 +-20.82119 14.27273 0.31358388 128.0 +-20.715975 14.388239 0.31335297 128.0 +-20.608492 14.501844 0.3131001 128.0 +-20.469454 14.592615 0.31242937 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-45.351215 33.606117 0.65668285 128.0 +-44.862652 33.672466 0.65281248 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-58.407139 45.542934 0.85042101 128.0 +-57.795422 45.638947 0.84578097 128.0 +-56.967636 45.555565 0.83808422 128.0 +-56.263519 45.561298 0.83209175 128.0 +-37.102253 30.423813 0.56360722 128.0 +-40.06525 33.266647 0.60863316 128.0 +-54.235123 45.596966 0.81513691 128.0 +-53.58884 45.617771 0.80985916 128.0 +-52.929211 45.61932 0.80436146 128.0 +-52.109608 45.473148 0.79649979 128.0 +-51.776402 45.745022 0.79571909 128.0 +-21.987999 19.668488 0.36040211 128.0 +-21.742384 19.690269 0.35855487 128.0 +-33.600468 30.806213 0.53726232 128.0 +-0 0 0 128.0 +-35.9795 33.809334 0.57890177 128.0 +-33.700783 32.059734 0.54747701 128.0 +-47.154987 45.412998 0.75588292 128.0 +-46.760178 45.589096 0.75411272 128.0 +-46.320862 45.718513 0.7516607 128.0 +-14.52954 14.518057 0.26186174 128.0 +-14.440888 14.607646 0.26187274 128.0 +-0 0 0 128.0 +-43.829098 45.435997 0.73018682 128.0 +-43.506714 45.659191 0.72950512 128.0 +-43.036579 45.724316 0.72647035 128.0 +-27.995453 30.112122 0.48811314 128.0 +-0 0 0 128.0 +-41.290768 45.519993 0.71179157 128.0 +-41.020695 45.783665 0.7119565 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-38.911564 45.635242 0.69546348 128.0 +-0 0 0 128.0 +-25.247221 30.356766 0.47016871 128.0 +-25.096657 30.555151 0.47079545 128.0 +-16.017351 19.747133 0.31559604 128.0 +-15.73147 19.63979 0.31270427 128.0 +-26.411491 33.39056 0.50414437 128.0 +-36.5481 46.792698 0.68888825 128.0 +-36.594948 47.449982 0.69491369 128.0 +-36.341274 47.723751 0.69560641 128.0 +-23.020603 30.619116 0.45723817 128.0 +-0 0 0 128.0 +-36.52354 49.84042 0.71545303 128.0 +-36.473747 50.418438 0.72026902 128.0 +-36.533291 51.158829 0.72726202 128.0 +-36.460091 51.724476 0.7318691 128.0 +-36.464691 52.41098 0.73808146 128.0 +-21.622375 31.488667 0.45602867 128.0 +-0 0 0 128.0 +-20.575058 30.765846 0.44298819 128.0 +-22.091082 33.475384 0.4770298 128.0 +-20.298544 31.173552 0.44505531 128.0 +-20.265789 31.544849 0.44828796 128.0 +-19.592209 30.91186 0.43843612 128.0 +-19.722893 31.544443 0.4450883 128.0 +-0 0 0 128.0 +-22.29388 36.649284 0.50770682 128.0 +-22.146263 36.914864 0.50936711 128.0 +-8.5911598 14.522028 0.22154179 128.0 +-8.5074348 14.58397 0.22166274 128.0 +-0 0 0 128.0 +-20.945118 36.938393 0.50293487 128.0 +-20.937132 37.458118 0.50787175 128.0 +-20.417389 37.06039 0.50127459 128.0 +-19.873266 36.602352 0.49398464 128.0 +-17.953365 33.555756 0.45447832 128.0 +-19.969591 37.88105 0.50688219 128.0 +-10.134372 19.513994 0.277794 128.0 +-10.008069 19.563347 0.27764007 128.0 +-9.9206896 19.689575 0.27844274 128.0 +-9.8143568 19.779636 0.27880558 128.0 +-9.7200222 19.895187 0.27948731 128.0 +-15.004944 31.19586 0.41665432 128.0 +-17.618586 37.212376 0.48873985 128.0 +-14.630284 31.397585 0.41689622 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-39.634052 90.812889 1.1255467 128.0 +-0 0 0 128.0 +-38.315693 90.816109 1.1198621 128.0 +-37.743561 91.015327 1.1194553 128.0 +-0 0 0 128.0 +-13.665918 34.132656 0.44029433 128.0 +-13.444882 34.187019 0.43995348 128.0 +-11.922794 30.871662 0.39990839 128.0 +-12.068175 31.827793 0.410299 128.0 +-11.48376 30.856335 0.39803919 128.0 +-11.197136 30.660406 0.3949275 128.0 +-10.483346 29.261913 0.37779674 128.0 +-11.796575 33.574757 0.42731982 128.0 +-9.9658375 28.930777 0.372475 128.0 +-9.7762985 28.956327 0.37206817 128.0 +-9.5918465 28.995832 0.37183726 128.0 +-9.4226894 29.081728 0.37215614 128.0 +-9.2743082 29.234308 0.37325567 128.0 +-9.1226292 29.38043 0.37428921 128.0 +-0 0 0 128.0 +-8.7967129 29.609024 0.37565264 128.0 +-9.9402065 34.225582 0.42790258 128.0 +-9.7417545 34.327297 0.42837536 128.0 +-9.040554 32.617241 0.4081879 128.0 +-9.3738365 34.644058 0.4306514 128.0 +-8.5497618 32.385406 0.40431753 128.0 +-0 0 0 128.0 +-3.618005 14.420146 0.19948511 128.0 +-3.5292192 14.441103 0.19947411 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-0 0 0 128.0 +-8.8383989 40.441963 0.4912028 128.0 +-8.5801258 40.448483 0.49067503 128.0 +-4.0515456 19.695375 0.25711176 128.0 +-3.9380496 19.75713 0.25752959 128.0 +-3.8214846 19.805466 0.25780445 128.0 +-6.3232107 33.885998 0.41504902 128.0 +-6.1084299 33.886761 0.41463119 128.0 +-4.7980313 27.586153 0.34389809 128.0 +-4.6075158 27.488844 0.34249067 128.0 +-4.4780974 27.760429 0.34520653 128.0 +-4.9780707 32.111462 0.3933222 128.0 +-4.7756481 32.105793 0.39292637 128.0 +-5.1426601 36.093262 0.43689677 128.0 +-4.9289279 36.181602 0.43753451 128.0 +-4.5924935 35.331619 0.42778161 128.0 +-4.3672652 35.291653 0.42703393 128.0 +-3.5615349 30.305592 0.3715404 128.0 +-3.3855834 30.417311 0.37254098 128.0 +-3.1781862 30.240608 0.37036389 128.0 +-3.9496455 39.935734 0.4772827 128.0 +-3.7119153 40.038872 0.47816232 128.0 +-3.4534996 39.914452 0.47654602 128.0 +-3.2293475 40.194038 0.47940481 128.0 +-1.9654515 26.500605 0.3282077 128.0 +-1.8599424 27.352173 0.33746579 128.0 +-1.6883121 27.302191 0.33679506 128.0 +-1.5308774 27.493744 0.33879623 128.0 +-0 0 0 128.0 +-1.1825775 27.261709 0.33605838 128.0 +-1.0218683 27.445318 0.33800456 128.0 +-1.2251269 39.40057 0.46946502 128.0 +-1.0522946 42.169319 0.49984518 128.0 +-0.74512362 39.603592 0.47156513 128.0 +-0.49954411 39.405449 0.46934405 128.0 +-0.25954214 39.681747 0.47235677 128.0 +-0.017295182 42.675411 0.50526589 128.0 +0 0 0 128.0 +0.40487328 34.110531 0.41111267 128.0 +0.61396605 34.096409 0.41099173 128.0 +0 0 0 128.0 +1.7331256 57.234299 0.66564411 128.0 +0 0 0 128.0 +1.1919328 27.99494 0.34411797 128.0 +2.0214903 41.491268 0.49278614 128.0 +1.5515983 28.273743 0.34737259 128.0 +1.7606211 28.846569 0.35379389 128.0 +1.8776656 27.943289 0.34396404 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +2.2032709 19.939425 0.25659499 128.0 +2.3331089 19.990088 0.25730968 128.0 +4.920568 40.028255 0.47947076 128.0 +5.0924387 39.427082 0.47314844 128.0 +5.3365436 39.411938 0.47333536 128.0 +0 0 0 128.0 +4.9622545 33.545914 0.40889162 128.0 +5.1686044 33.518787 0.40893558 128.0 +4.701283 29.293346 0.36223832 128.0 +4.9320927 29.570694 0.36565787 128.0 +5.1240158 29.600962 0.36633959 128.0 +5.2566333 29.296335 0.36329389 128.0 +5.52176 29.723629 0.3684397 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +3.0600665 14.482341 0.19877042 128.0 +3.1699274 14.56002 0.19985895 128.0 +3.2642362 14.562738 0.20011185 128.0 +3.3528559 14.539512 0.20007886 128.0 +3.4445426 14.529368 0.20019981 128.0 +7.5881186 31.156326 0.38861617 128.0 +9.5280294 38.103409 0.46789268 128.0 +3.4912164 13.605353 0.19045793 128.0 +3.5161083 13.36126 0.18792899 128.0 +3.6084404 13.378053 0.18836881 128.0 +0 0 0 128.0 +9.7910862 34.607441 0.43148705 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +10.721687 33.891354 0.42688 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +7.722497 20.043465 0.27219737 128.0 +7.845336 19.995703 0.27219737 128.0 +7.9649124 19.939758 0.27210942 128.0 +8.085227 19.88588 0.27205443 128.0 +8.1176395 19.619684 0.26948154 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +25.001104 55.540684 0.70575511 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +44.835667 87.817581 1.120225 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.833994 31.779224 0.44792512 128.0 +29.560266 46.722862 0.64396125 128.0 +20.449732 31.887804 0.45255414 128.0 +20.550188 31.615845 0.45064095 128.0 +20.935219 31.779751 0.45446736 128.0 +21.092068 31.594145 0.45371965 128.0 +21.261436 31.428516 0.45324686 128.0 +13.799527 20.130854 0.30438077 128.0 +0 0 0 128.0 +14.073145 19.99925 0.30490854 128.0 +35.1385 49.290676 0.7016319 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +28.817959 36.493732 0.54732311 128.0 +29.075062 36.358391 0.54791683 128.0 +35.440617 43.765381 0.65525347 128.0 +35.667278 43.496838 0.65453875 128.0 +31.94887 38.478138 0.58594978 128.0 +36.007896 42.829315 0.65128416 128.0 +0 0 0 128.0 +37.33765 43.320404 0.66487443 128.0 +0 0 0 128.0 +0 0 0 128.0 +37.163403 41.546623 0.64895314 128.0 +36.974628 40.828629 0.64169621 128.0 +37.229858 40.606884 0.64178419 128.0 +37.608925 40.518398 0.64389527 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +19.576649 19.834253 0.34244668 128.0 +19.702221 19.718004 0.34251267 128.0 +39.232964 38.786022 0.64264178 128.0 +36.691608 35.831081 0.59993583 128.0 +36.878387 35.574032 0.59944105 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +38.790546 35.622765 0.61512041 128.0 +0 0 0 128.0 +17.272182 15.474992 0.29101044 128.0 +17.313644 15.32167 0.29022977 128.0 +17.340324 15.156577 0.28925118 128.0 +17.300541 14.93554 0.28732699 128.0 +17.365988 14.807046 0.28695315 128.0 +17.491699 14.729841 0.28745893 128.0 +17.39109 14.463664 0.28473207 128.0 +17.997219 14.781915 0.29209897 128.0 +17.507475 14.200656 0.28388545 128.0 +17.445217 13.973562 0.28178534 128.0 +17.572193 13.899136 0.28236809 128.0 +19.382963 15.139044 0.30644789 128.0 +18.653595 14.385947 0.29503474 128.0 +20.085176 15.294424 0.31360587 128.0 +19.441746 14.616855 0.30346817 128.0 +19.847414 14.73211 0.30780032 128.0 +18.970377 13.901372 0.29461691 128.0 +20.088278 14.531986 0.30863598 128.0 +20.295059 14.492715 0.31023031 128.0 +20.513554 14.459516 0.31197858 128.0 +20.638004 14.358502 0.31246236 128.0 +20.593004 14.140468 0.3106921 128.0 +20.446781 13.856213 0.30760241 128.0 +21.041765 14.071803 0.31435356 128.0 +20.789705 13.719367 0.30990043 128.0 +22.298843 14.519678 0.32860354 128.0 +22.39677 14.388527 0.32872447 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +32.082245 19.515676 0.44892567 128.0 +20.36153 12.215246 0.29710186 128.0 +20.48171 12.117066 0.29768461 128.0 +24.729992 14.426349 0.35082516 128.0 +21.370832 12.291576 0.30709663 128.0 +21.586763 12.240119 0.30887789 128.0 +21.725178 12.14305 0.30968055 128.0 +21.794022 12.006623 0.30961457 128.0 +21.781164 11.825912 0.30853701 128.0 +28.185488 15.080035 0.38750565 128.0 +23.102867 12.178865 0.32318282 128.0 +23.1745 12.035497 0.32314983 128.0 +0 0 0 128.0 +20.326273 10.241507 0.28628242 128.0 +21.312227 10.57484 0.29761863 128.0 +0 0 0 128.0 +20.370768 9.7980146 0.28456715 128.0 +21.599966 10.226545 0.29879513 128.0 +21.694937 10.109022 0.29919097 128.0 +22.607325 10.365822 0.30948263 128.0 +22.275831 10.048862 0.30472162 128.0 +22.601213 10.029208 0.3078993 128.0 +22.927181 10.005936 0.31107694 128.0 +23.436567 10.057511 0.31644267 128.0 +23.840559 10.058115 0.32053295 128.0 +24.199245 10.034983 0.32407346 128.0 +24.663174 10.050466 0.32885644 128.0 +25.123545 10.058768 0.33358443 128.0 +25.46582 10.014949 0.33690503 128.0 +26.039824 10.056648 0.34295246 128.0 +26.415194 10.015803 0.3466469 128.0 +26.674826 9.9274769 0.34897792 128.0 +0 0 0 128.0 +34.063728 12.203708 0.43388405 128.0 +34.125702 11.990157 0.43374109 128.0 +35.566647 12.251803 0.44965139 128.0 +35.648731 12.035898 0.44973934 128.0 +35.708622 11.812539 0.44958541 128.0 +35.733818 11.57811 0.44904664 128.0 +35.771782 11.348351 0.4486728 128.0 +35.80827 11.118565 0.44829896 128.0 +35.73613 10.856203 0.44669363 128.0 +34.270344 10.181635 0.42912304 128.0 +35.713982 10.372503 0.44494537 128.0 +36.116524 10.249541 0.44882673 128.0 +0 0 0 128.0 +37.780083 10.222405 0.46637532 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +55.232815 13.499333 0.66122395 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +56.55093 11.272648 0.67007524 128.0 +56.605289 10.922793 0.66992128 128.0 +54.980534 10.259754 0.65100926 128.0 +0 0 0 128.0 +57.421333 9.9876671 0.67689234 128.0 +130.49535 21.87435 1.4909552 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.278984 0.64320016 0.22613785 128.0 +17.230633 0.53554964 0.22556609 128.0 +0 0 0 128.0 +17.355879 0.32632136 0.22688553 128.0 +0 0 0 128.0 +0 0 0 128.0 +0 0 0 128.0 +17.324663 -0.099516995 0.22651169 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +17.348886 -0.41909015 0.22683056 128.0 +17.317003 -0.52465552 0.22651169 128.0 +17.349432 -0.63221085 0.22690752 128.0 +0 -0 0 128.0 +17.33737 -0.84492153 0.22687453 128.0 +17.337851 -0.95161438 0.22694051 128.0 +17.345659 -1.0588322 0.22709444 128.0 +17.3538 -1.1662486 0.22725937 128.0 +17.393188 -1.2761455 0.22777615 128.0 +17.43786 -1.387045 0.22835891 128.0 +17.436993 -1.4946986 0.22844687 128.0 +17.475288 -1.6060535 0.22897464 128.0 +0 -0 0 128.0 +27.41963 -2.8594861 0.33914807 128.0 +27.430391 -3.0308604 0.33946696 128.0 +27.409292 -3.1988811 0.33944497 128.0 +27.393118 -3.3674891 0.33948892 128.0 +27.403673 -3.5396054 0.3398408 128.0 +25.365952 -3.4347994 0.31747624 128.0 +27.399757 -3.8815141 0.34030259 128.0 +27.379381 -4.050148 0.34034657 128.0 +27.364885 -4.2197447 0.34046751 128.0 +27.676138 -4.4417591 0.34422794 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +19.286777 -3.4607582 0.25147113 128.0 +19.334982 -3.5920005 0.2522518 128.0 +0 -0 0 128.0 +43.56049 -8.6463528 0.52434283 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +0 -0 0 128.0 +37.596889 -8.4266987 0.45967913 128.0 +37.547398 -8.6579046 0.45971212 128.0 +10.880705 -2.5796394 0.15896724 128.0 +10.975428 -2.6733267 0.16022071 128.0 +0 -0 0 128.0 +64.156784 -16.461508 0.76432735 128.0 +0 -0 0 128.0 +60.046654 -16.19486 0.71987319 128.0 +9.041564 -2.4985125 0.13915361 128.0 +8.0388708 -2.2746601 0.12787238 128.0 +7.9383183 -2.2989135 0.12688279 128.0 +7.9585786 -2.3578026 0.12727863 128.0 +7.9334345 -2.4034026 0.12715769 128.0 +7.8516736 -2.4313343 0.12638801 128.0 +7.8966699 -2.4984658 0.12708071 128.0 +7.9173484 -2.5585544 0.12749854 128.0 +7.9451818 -2.6214967 0.12800433 128.0 +46.81715 -15.764372 0.57920963 128.0 +46.569176 -15.999681 0.57746136 128.0 +46.097378 -16.154499 0.57311821 128.0 +7.2098994 -2.5767913 0.12019762 128.0 +11.256542 -4.1008735 0.16774152 128.0 +7.328661 -2.7211034 0.12196787 128.0 +42.457542 -16.059404 0.53515124 128.0 +7.0297208 -2.7087381 0.11884519 128.0 +11.022191 -4.324759 0.16620217 128.0 +11.014019 -4.3997269 0.16642208 128.0 +7.1806064 -2.9197724 0.12124218 128.0 +7.1911993 -2.9756274 0.12158304 128.0 +37.538315 -15.801529 0.48385793 128.0 +4.6437483 -1.9887637 0.091554731 128.0 +4.6213732 -2.0128284 0.091433778 128.0 +4.6052785 -2.0395274 0.091389798 128.0 +4.5607638 -2.053381 0.09100496 128.0 +4.5598993 -2.086735 0.0911479 128.0 +4.6784835 -2.1758065 0.092742227 128.0 +4.7220039 -2.2313831 0.093434937 128.0 +4.6352038 -2.2252665 0.09254431 128.0 +4.5585465 -2.2229905 0.091774635 128.0 +4.537652 -2.2473695 0.091686673 128.0 +4.5157366 -2.2711267 0.091587715 128.0 +4.7501893 -2.4256496 0.094655417 128.0 +4.6997051 -2.4363449 0.094215602 128.0 +4.6218371 -2.4320796 0.093434937 128.0 +4.3104539 -2.3021359 0.0897405 128.0 +4.3261385 -2.344739 0.09011434 128.0 +4.3633666 -2.3996651 0.090763062 128.0 +4.5965619 -2.5647461 0.093885742 128.0 +4.5981431 -2.602752 0.094105653 128.0 +4.423389 -2.5398123 0.092093505 128.0 +3.3500273 -1.9510506 0.078635193 128.0 +3.3422978 -1.9741114 0.078690164 128.0 +3.3404167 -2.000747 0.078822114 128.0 +4.2135692 -2.5588589 0.090213299 128.0 +3.379477 -2.0809038 0.079646759 128.0 +3.4981301 -2.1836607 0.081351042 128.0 +3.4669199 -2.1938567 0.081120141 128.0 +3.4769619 -2.2302022 0.081428006 128.0 +3.47998 -2.2623932 0.081647918 128.0 +3.4952593 -2.3029563 0.082032755 128.0 +3.5467629 -2.3682196 0.082901388 128.0 +2.9855351 -2.0201497 0.075644456 128.0 +3.0176213 -2.06896 0.0762382 128.0 +2.9884439 -2.0760286 0.076018296 128.0 +2.9584761 -2.0822423 0.075787395 128.0 +2.9887981 -2.1311193 0.07637015 128.0 +4.0149198 -2.8999348 0.090466186 128.0 +4.0043139 -2.9298286 0.090565145 128.0 +3.9910822 -2.9579155 0.09063112 128.0 +5.4555717 -4.0952101 0.1110165 128.0 +5.4335251 -4.1310282 0.11106049 128.0 +5.3692522 -4.1343989 0.11052171 128.0 +5.3769021 -4.1930909 0.11098352 128.0 +5.5880718 -4.4131517 0.11430412 128.0 +5.5476122 -4.4367399 0.11411719 128.0 +20.090954 -16.269661 0.32028005 128.0 +20.003119 -16.402775 0.32045597 128.0 +19.885941 -16.511787 0.32022509 128.0 +3.4615922 -2.9107387 0.08573819 128.0 +3.4398599 -2.928683 0.085683212 128.0 +4.5852432 -3.9524651 0.10257208 128.0 +3.622905 -3.1619942 0.088882856 128.0 +3.5809541 -3.1643023 0.088552997 128.0 +2.8445027 -2.5448971 0.077975467 128.0 +3.3461809 -3.0308082 0.085650228 128.0 +3.7712266 -3.4580822 0.092269428 128.0 +3.8891866 -3.6104057 0.094358541 128.0 +2.8700931 -2.6974766 0.079316899 128.0 +2.8795693 -2.7398474 0.079712734 128.0 +3.4785144 -3.3505192 0.089113764 128.0 +3.4621863 -3.375988 0.089179732 128.0 +3.0336137 -2.994683 0.082879394 128.0 +2.9819357 -2.9800222 0.082362615 128.0 +2.9628916 -2.9975519 0.082351618 128.0 +2.9472377 -3.018537 0.082395598 128.0 +2.977951 -3.0876608 0.08317627 128.0 +2.9623983 -3.1094947 0.083231248 128.0 +3.7704735 -4.0064735 0.096502639 128.0 +3.7308402 -4.013422 0.096260741 128.0 +2.9249516 -3.1855905 0.083561108 128.0 +3.8653886 -4.2618351 0.099273466 128.0 +3.8211496 -4.2653646 0.09897659 128.0 +3.2448761 -3.6672127 0.089850448 128.0 +3.2381074 -3.7051227 0.09011434 128.0 +3.4871464 -4.0397887 0.094688408 128.0 +3.1742299 -3.7232754 0.089806467 128.0 +3.470803 -4.1220498 0.095260166 128.0 +3.4965975 -4.204772 0.096139789 128.0 +13.404035 -16.319687 0.26822805 128.0 +3.4422157 -4.2442575 0.096095808 128.0 +3.2066848 -4.0038543 0.092412367 128.0 +3.1746132 -4.0140438 0.092280425 128.0 +3.5395486 -4.532279 0.099240482 128.0 +1.6594976 -2.1523654 0.065891579 128.0 +3.3255491 -4.3677382 0.096370697 128.0 +3.3467596 -4.4520001 0.09725032 128.0 +1.6225785 -2.1865613 0.065946557 128.0 +1.6097225 -2.1972826 0.065957546 128.0 +1.5962099 -2.2071183 0.065957546 128.0 +1.5785694 -2.2111747 0.065880582 128.0 +1.5609394 -2.2150979 0.06580361 128.0 +1.5284725 -2.197547 0.065440767 128.0 +1.5160919 -2.2085328 0.065462761 128.0 +1.505878 -2.2227604 0.065528728 128.0 +1.4994375 -2.242764 0.065671667 128.0 +1.4768356 -2.2385688 0.065495744 128.0 +1.5007213 -2.3054066 0.066254422 128.0 +1.5346508 -2.3894455 0.067233011 128.0 +1.5263842 -2.408952 0.067364953 128.0 +1.526418 -2.4420121 0.067672826 128.0 +1.9145368 -3.1049662 0.076117255 128.0 +1.9146771 -3.1482639 0.076524079 128.0 +1.8973814 -3.1633828 0.076568067 128.0 +1.5912807 -2.6904452 0.070377678 128.0 +1.4951316 -2.5636921 0.068640411 128.0 +1.4295173 -2.4861391 0.067540877 128.0 +1.4827945 -2.6157699 0.069069237 128.0 +1.4330527 -2.5645931 0.068310551 128.0 +1.3087231 -2.3762789 0.065836601 128.0 +1.297935 -2.3912945 0.065924563 128.0 +1.3002203 -2.4309537 0.066320397 128.0 +1.4340342 -2.7210574 0.069827914 128.0 +7.8548656 -15.124939 0.22341099 128.0 +1.681532 -3.2877076 0.076612048 128.0 +7.6695676 -15.221977 0.22343299 128.0 +1.6326153 -3.2910762 0.076403134 128.0 +1.6246818 -3.3261881 0.076711006 128.0 +1.1530298 -2.3980339 0.065264843 128.0 +1.1382941 -2.4050636 0.065264843 128.0 +1.1260495 -2.4174409 0.065330811 128.0 +1.1349517 -2.4761143 0.065957546 128.0 +1.3639878 -3.024451 0.072488785 128.0 +1.3733906 -3.0958285 0.07324747 128.0 +1.1663785 -2.6734619 0.06807965 128.0 +1.1353616 -2.6465693 0.067672826 128.0 +1.1225995 -2.6617775 0.067771785 128.0 +1.1269302 -2.7184935 0.068365529 128.0 +1.3536314 -3.3226256 0.075457536 128.0 +6.3445745 -15.847083 0.22370787 128.0 +6.2139153 -15.801034 0.2227073 128.0 +6.0566816 -15.683088 0.22087108 128.0 +5.955729 -15.707802 0.22072813 128.0 +5.8536549 -15.729055 0.22055221 128.0 +5.7529168 -15.753406 0.22042026 128.0 +1.1921777 -3.3287339 0.074885778 128.0 +1.1700732 -3.3312693 0.0748308 128.0 +5.5355778 -16.070293 0.22290522 128.0 +1.2167511 -3.6049635 0.077843525 128.0 +1.1892697 -3.5962226 0.077656604 128.0 +5.119247 -15.800378 0.21863902 128.0 +5.055161 -15.935382 0.21983752 128.0 +1.0084133 -3.2488892 0.073412396 128.0 +0.97014767 -3.1947396 0.072719693 128.0 +0.96220315 -3.2399316 0.073170498 128.0 +0.97633111 -3.362926 0.07451193 128.0 +0.95758921 -3.375587 0.074588902 128.0 +0.88824749 -3.2060225 0.072587743 128.0 +0.85994011 -3.1795599 0.0722249 128.0 +4.2112598 -15.952499 0.21742953 128.0 +4.1152921 -15.985786 0.2175175 128.0 +3.9969282 -15.930237 0.21660487 128.0 +0.83388144 -3.4134026 0.07464388 128.0 +0.80690384 -3.3931625 0.074358001 128.0 +3.7005475 -15.990393 0.21648392 128.0 +3.586998 -15.944509 0.21571425 128.0 +3.4884562 -15.963287 0.21568127 128.0 +3.3786139 -15.928636 0.21505453 128.0 +1.7125515 -8.3261852 0.12947769 128.0 +1.6686636 -8.3728209 0.12988453 128.0 +1.617447 -8.3838835 0.12989552 128.0 +2.9852207 -15.99889 0.21496657 128.0 +2.9299283 -16.255053 0.21762745 128.0 +2.8296199 -16.269768 0.21759446 128.0 +0.46843502 -2.7968678 0.06718903 128.0 +0.45142421 -2.8006766 0.06720002 128.0 +0.43392467 -2.8014176 0.067178033 128.0 +0.41069493 -2.7634761 0.066727221 128.0 +0.39232025 -2.7560446 0.066617273 128.0 +0.37270242 -2.7385843 0.066397361 128.0 +0.35344264 -2.7219791 0.066188447 128.0 +0.33317262 -2.695318 0.065869585 128.0 +1.8929759 -16.109177 0.21436182 128.0 +1.7978575 -16.154276 0.21473567 128.0 +1.7064379 -16.238594 0.21554932 128.0 +0.23877667 -2.4180887 0.062724918 128.0 +0.2246736 -2.4274735 0.06281288 128.0 +0.21460214 -2.4845946 0.063428618 128.0 +0.19646965 -2.4499824 0.063032784 128.0 +0.17817831 -2.4072649 0.062548988 128.0 +0.16245431 -2.3943462 0.062395055 128.0 +0.14726597 -2.3873136 0.06230709 128.0 +0.13228129 -2.3821819 0.062241118 128.0 +0.11781044 -2.3859448 0.062274106 128.0 +0.10295159 -2.3816278 0.062219128 128.0 +0.090048343 -2.42818 0.062724918 128.0 +0.085592933 -2.7645042 0.066419356 128.0 +0.068928093 -2.7769728 0.066551298 128.0 +0.30674854 -16.316126 0.21545036 128.0 +0.20993975 -16.578665 0.21832015 128.0 +0.10885292 -16.677633 0.21939769 128.0 +0.0065362477 -16.719984 0.2198595 128.0 +-0.016092926 -2.743783 0.066177458 128.0 +-0.032868877 -2.7386332 0.06612248 128.0 +-0.30415764 -16.880236 0.22165175 128.0 +-0.40743759 -16.866056 0.2215198 128.0 +-0.081547849 -2.6805937 0.065495744 128.0 +-0.096538499 -2.6400719 0.065055929 128.0 +-0.11316107 -2.6494203 0.065165885 128.0 +-0.12805326 -2.6207108 0.064858012 128.0 +-0.14648668 -2.6628087 0.065330811 128.0 +-0.15996015 -2.6149497 0.064814031 128.0 +-0.17492975 -2.5979559 0.064638108 128.0 +-1.2731464 -17.352301 0.22732535 128.0 +-1.3719848 -17.24847 0.2262698 128.0 +-1.4752322 -17.209839 0.22593993 128.0 +-1.6072428 -17.488234 0.22911759 128.0 +-1.7104192 -17.436245 0.22865579 128.0 +-1.8184109 -17.435368 0.22876574 128.0 +-1.9273344 -17.441772 0.22896366 128.0 +-2.0325804 -17.414721 0.22879872 128.0 +-2.1368351 -17.381079 0.22856782 128.0 +-2.2611179 -17.504496 0.23008518 128.0 +-2.3604312 -17.430838 0.22942546 128.0 +-2.4980528 -17.632849 0.23183344 128.0 +-2.6146851 -17.674561 0.23247117 128.0 +-2.7116566 -17.584064 0.23164652 128.0 +-2.8820827 -17.957083 0.23598969 128.0 +-2.9754326 -17.838455 0.23486815 128.0 +-3.0635135 -17.696703 0.23349373 128.0 +-3.1632116 -17.628361 0.23294397 128.0 +-3.3009021 -17.767885 0.23472522 128.0 +-3.4260857 -17.831747 0.23567082 128.0 +-3.5453629 -17.860411 0.23623158 128.0 +-3.6591001 -17.858892 0.23646249 128.0 +-3.8696845 -18.314514 0.24183922 128.0 +-3.9811366 -18.286518 0.24179523 128.0 +-4.0705223 -18.160269 0.24065171 128.0 +-4.233099 -18.357107 0.24315865 128.0 +-4.2909946 -18.100193 0.24055275 128.0 +-4.609715 -18.926538 0.25020668 128.0 +-4.4909577 -17.958866 0.23956317 128.0 +-5.0700073 -19.758657 0.26031139 128.0 +-5.2148128 -19.81711 0.26133397 128.0 +-4.3997297 -16.312037 0.22178368 128.0 +-4.9268761 -17.830713 0.23942024 128.0 +-5.7003732 -20.147858 0.26624888 128.0 +-5.8205538 -20.100975 0.26611695 128.0 +-5.9474735 -20.077347 0.26625988 128.0 +-6.080699 -20.073971 0.26664472 128.0 +-6.2212048 -20.09264 0.26729345 128.0 +-6.3063731 -19.933964 0.26590803 128.0 +-6.5017366 -20.121351 0.26852494 128.0 +-6.6410537 -20.129509 0.26908571 128.0 +-6.7784805 -20.130077 0.26956949 128.0 +-6.9444308 -20.211992 0.27100989 128.0 +-7.1314812 -20.349243 0.27311 128.0 +-7.2794247 -20.370073 0.27386868 128.0 +-7.4621162 -20.483809 0.27572688 128.0 +-7.8281364 -21.085398 0.28332469 128.0 +-7.9280052 -20.959341 0.28241205 128.0 +-8.1017551 -21.027868 0.28379747 128.0 +-8.3274069 -21.22444 0.28671125 128.0 +-8.4860401 -21.244448 0.2875579 128.0 +-8.8324032 -21.72368 0.29386923 128.0 +-9.2923775 -22.459082 0.30327025 128.0 +-9.4773378 -22.51408 0.30461168 128.0 +-9.8368931 -22.973024 0.31080207 128.0 +-10.012799 -22.992912 0.31176966 128.0 +-10.186889 -23.006016 0.31267127 128.0 +-10.29092 -22.861013 0.31168169 128.0 +-10.440151 -22.817444 0.31192359 128.0 +-11.005353 -23.667831 0.3230179 128.0 +-11.108081 -23.510351 0.32192937 128.0 +-1.6458892 -3.4281306 0.07782153 128.0 +-1.6559373 -3.3954971 0.077546649 128.0 +-1.6723033 -3.3763115 0.077436693 128.0 +-1.6925393 -3.3650935 0.077425703 128.0 +-1.7067896 -3.3421767 0.077271767 128.0 +-1.7396886 -3.3556111 0.077568643 128.0 +-1.7644358 -3.3528378 0.077667601 128.0 +-1.7887431 -3.349005 0.077755563 128.0 +-4.5566921 -8.4080629 0.14116576 128.0 +-15.774196 -28.687149 0.39599407 128.0 +-15.984021 -28.650948 0.39676374 128.0 +-16.96871 -29.982134 0.41482911 128.0 +-17.320127 -30.169697 0.41853452 128.0 +-17.416367 -29.910769 0.41659933 128.0 +-17.519234 -29.667299 0.41486207 128.0 +-17.55864 -29.321609 0.41181636 128.0 +-18.709215 -30.812502 0.43238866 128.0 +-19.65016 -31.919058 0.448167 128.0 +-19.863113 -31.82588 0.44852984 128.0 +-0 -0 0 128.0 +-20.681843 -32.249748 0.45728216 128.0 +-20.859171 -32.091217 0.45687532 128.0 +-21.08099 -32.001038 0.4573811 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-27.891108 -39.124226 0.56434393 128.0 +-0 -0 0 128.0 +-28.390377 -38.808067 0.5647397 128.0 +-0 -0 0 128.0 +-29.53195 -39.346062 0.57696658 128.0 +-25.528334 -33.580692 0.49984518 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-31.350031 -39.700287 0.59225011 128.0 +-31.518097 -39.413464 0.59093064 128.0 +-31.079721 -38.380058 0.57905567 128.0 +-31.29244 -38.161572 0.57867086 128.0 +-32.044685 -38.593536 0.5875991 128.0 +-0 -0 0 128.0 +-32.467262 -38.140285 0.58677441 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-37.967926 -38.943142 0.63406545 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-38.651287 -38.210964 0.63364762 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-10.308075 -8.4662609 0.18268421 128.0 +-10.362935 -8.4053717 0.1827282 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-137.87766 -95.928505 1.8829616 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-16.529774 -8.7136784 0.24147636 128.0 +-16.438284 -8.5369663 0.23968412 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-6.9975982 -3.4718182 0.1219019 128.0 +-6.989121 -3.4143307 0.12153906 128.0 +-6.999126 -3.3661807 0.12140711 128.0 +-7.0196486 -3.3231714 0.12140711 128.0 +-7.0652852 -3.291863 0.12171498 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-36.030697 -15.724849 0.46828851 128.0 +-36.056667 -15.473502 0.46745285 128.0 +-0 -0 0 128.0 +-36.306648 -15.055913 0.46820053 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-39.914101 -15.415154 0.50649732 128.0 +-0 -0 0 128.0 +-22.330256 -8.310504 0.29800346 128.0 +-0 -0 0 128.0 +-43.069599 -15.430271 0.53907657 128.0 +-0 -0 0 128.0 +-46.093845 -15.878278 0.57208461 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-49.572826 -15.059782 0.60570842 128.0 +-28.370607 -8.4287672 0.36144665 128.0 +-52.617386 -15.281996 0.63849658 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-12.781356 -3.3740363 0.18136477 128.0 +-12.791165 -3.2928054 0.18124382 128.0 +-12.885809 -3.2329977 0.18209046 128.0 +-34.310001 -8.3854799 0.42438406 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-40.251869 -8.5384169 0.48846498 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-18.644392 -3.3606589 0.24432416 128.0 +-18.599642 -3.2348862 0.24359846 128.0 +-18.664505 -3.1283042 0.24410425 128.0 +-27.216496 -4.3903461 0.33914807 128.0 +-27.248852 -4.2241855 0.33921406 128.0 +-27.096228 -4.0304265 0.33723488 128.0 +-27.208551 -3.8766456 0.33821347 128.0 +-24.171286 -3.2926607 0.30424884 128.0 +-24.140463 -3.1377125 0.30368808 128.0 +-27.47278 -3.3996086 0.34040156 128.0 +-27.37693 -3.2173181 0.33911508 128.0 +-26.906212 -2.9947364 0.3336944 128.0 +-26.874357 -2.8243604 0.33314461 128.0 +-25.850323 -2.556458 0.32164347 128.0 +-27.496429 -2.5490091 0.33965388 128.0 +-25.877756 -2.2388699 0.32162148 128.0 +-28.400764 -2.2817135 0.34930778 128.0 +-28.348415 -2.1025243 0.34858209 128.0 +-39.609116 -2.693589 0.47255468 128.0 +-39.573997 -2.4473531 0.47199392 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-41.790157 -1.8130132 0.49596381 128.0 +-0 -0 0 128.0 +-0 -0 0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-63.69471 13.90506 -0.088954993 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-58.071224 13.80186 -0.078384236 128.0 +-58.000015 14.161477 -0.078413032 128.0 +-103.11124 25.848337 -0.16787472 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-79.59021 22.041191 -0.12234329 128.0 +-49.870895 14.140506 -0.063309491 128.0 +-80.311562 23.305803 -0.12433803 128.0 +-79.42218 23.577017 -0.1228463 128.0 +-95.351631 28.943829 -0.15509996 128.0 +-0 0 -0 128.0 +-46.979084 14.891832 -0.058406163 128.0 +-75.000839 24.282578 -0.11513998 128.0 +-74.76783 24.715012 -0.11497295 128.0 +-74.478333 25.127277 -0.11469649 128.0 +-74.266968 25.56459 -0.11458322 128.0 +-41.074894 14.420976 -0.047366962 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-67.428421 25.077675 -0.10190637 128.0 +-0 0 -0 128.0 +-65.715294 25.362761 -0.099024661 128.0 +-63.890629 25.109999 -0.095584273 128.0 +-33.914139 13.569011 -0.033918336 128.0 +-33.838577 13.780243 -0.033935618 128.0 +-35.016224 14.510988 -0.036560066 128.0 +-60.718445 25.60078 -0.090298899 128.0 +-32.716221 14.030639 -0.032132868 128.0 +-0 0 -0 128.0 +-58.759697 26.058912 -0.087196402 128.0 +-30.920891 13.939944 -0.0289075 128.0 +-30.848412 14.135657 -0.028936299 128.0 +-54.657639 25.453695 -0.079545751 128.0 +-29.134178 13.785151 -0.025668694 128.0 +-29.082394 13.979687 -0.025739729 128.0 +-31.132008 15.200878 -0.03030324 128.0 +-39.88942 19.781271 -0.049271464 128.0 +-27.177671 13.685473 -0.022209104 128.0 +-27.09853 13.854707 -0.022220625 128.0 +-27.022772 14.025787 -0.022241743 128.0 +-29.039143 15.299369 -0.026805252 128.0 +-28.906803 15.456985 -0.026722698 128.0 +-55.108612 29.905033 -0.08416494 128.0 +-27.421133 15.098113 -0.023887064 128.0 +-27.325357 15.264619 -0.023881303 128.0 +-0 0 -0 128.0 +-58.06604 33.380104 -0.092376187 128.0 +-33.784008 19.697445 -0.03886966 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-46.635838 28.354017 -0.068573751 128.0 +-46.205608 28.482208 -0.067997791 128.0 +-45.33036 28.327961 -0.066413902 128.0 +-44.713043 28.325144 -0.065407895 128.0 +-44.240528 28.407686 -0.064728267 128.0 +-43.62957 28.394951 -0.063729942 128.0 +-43.024624 28.378553 -0.062741213 128.0 +-42.595291 28.47196 -0.062153734 128.0 +-42.423927 28.735588 -0.062163331 128.0 +-42.412529 29.109098 -0.062549226 128.0 +-42.245438 29.377354 -0.062578022 128.0 +-20.568188 14.490368 -0.012093358 128.0 +-27.725225 19.7887 -0.02918588 128.0 +-42.596207 30.799803 -0.064707145 128.0 +-42.490318 31.122044 -0.064906813 128.0 +-42.394127 31.453079 -0.065135278 128.0 +-42.430569 31.885635 -0.0656882 128.0 +-59.851288 45.554832 -0.10819392 128.0 +-59.152473 45.598854 -0.10718023 128.0 +-58.533421 45.696945 -0.10635661 128.0 +-57.57653 45.52124 -0.10470361 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-37.057423 30.422913 -0.055839311 128.0 +-40.087452 33.324444 -0.06387201 128.0 +-54.158623 45.587109 -0.099698536 128.0 +-53.537685 45.628609 -0.098840356 128.0 +-52.80019 45.562302 -0.097682677 128.0 +-52.115238 45.532097 -0.096651718 128.0 +-51.850605 45.864929 -0.096692033 128.0 +-34.237518 30.661085 -0.052026466 128.0 +-21.785242 19.751211 -0.020245086 128.0 +-49.656101 45.580132 -0.093195967 128.0 +-36.138134 33.582241 -0.058502156 128.0 +-38.141876 35.883007 -0.064328939 128.0 +-0 0 -0 128.0 +-38.89724 37.504059 -0.067525506 128.0 +-46.560085 45.447346 -0.088703491 128.0 +-46.125286 45.578949 -0.088284962 128.0 +-14.508456 14.512506 -0.0031871223 128.0 +-14.419136 14.601254 -0.0031871223 128.0 +-44.450409 45.571224 -0.086008005 128.0 +-43.862583 45.524086 -0.085157506 128.0 +-43.333557 45.530865 -0.084464438 128.0 +-28.818958 30.654184 -0.044565886 128.0 +-31.160261 33.554935 -0.05170393 128.0 +-41.729729 45.493923 -0.082310356 128.0 +-41.318871 45.604607 -0.081935979 128.0 +-40.774864 45.562927 -0.081177637 128.0 +-40.219685 45.501312 -0.080380894 128.0 +-39.91935 45.723888 -0.080321379 128.0 +-39.315449 45.593845 -0.079372965 128.0 +-38.800243 45.55862 -0.078677975 128.0 +-38.322361 45.56089 -0.078088582 128.0 +-37.855503 45.57056 -0.077527978 128.0 +-37.490185 45.69838 -0.077270716 128.0 +-37.107101 45.801678 -0.076959699 128.0 +-15.748447 19.683119 -0.01218551 128.0 +-23.967539 30.336422 -0.038015321 128.0 +-23.926722 30.669779 -0.038470328 128.0 +-36.537579 47.43293 -0.078739412 128.0 +-36.481934 47.966652 -0.079488158 128.0 +-36.361061 48.421497 -0.080044918 128.0 +-0 0 -0 128.0 +-36.491146 49.857426 -0.082408264 128.0 +-36.548809 50.584568 -0.083602421 128.0 +-36.472321 51.136791 -0.084378041 128.0 +-36.457779 51.785641 -0.085378289 128.0 +-36.448616 52.453461 -0.08641886 128.0 +-36.413956 53.09589 -0.087396063 128.0 +-0 0 -0 128.0 +-20.472097 30.649588 -0.034551892 128.0 +-22.053944 33.46072 -0.040728085 128.0 +-20.180574 31.03096 -0.034855228 128.0 +-20.110212 31.341892 -0.035283357 128.0 +-19.808952 31.293169 -0.034893628 128.0 +-19.736267 31.605824 -0.035327516 128.0 +-22.105862 35.889099 -0.044713717 128.0 +-21.879524 36.01466 -0.044692598 128.0 +-8.7522354 14.606459 0.0035189523 128.0 +-8.5922518 14.541073 0.0037838931 128.0 +-8.5073986 14.601296 0.0037666142 128.0 +-19.102451 33.256031 -0.037420165 128.0 +-21.136986 37.326721 -0.046144012 128.0 +-20.878313 37.40332 -0.046028819 128.0 +-20.569851 37.387909 -0.045715883 128.0 +-20.3167 37.470345 -0.045621809 128.0 +-17.895218 33.492943 -0.036694456 128.0 +-19.838583 37.684982 -0.045552693 128.0 +-19.624472 37.839737 -0.045625649 128.0 +-19.393742 37.962997 -0.045633327 128.0 +-9.9016285 19.678185 -0.0060822726 128.0 +-9.7780352 19.733192 -0.0060707536 128.0 +-15.152164 31.057861 -0.03013429 128.0 +-14.958714 31.14484 -0.030122772 128.0 +-14.774597 31.251408 -0.030155409 128.0 +-17.367006 37.32645 -0.042828411 128.0 +-41.484543 90.615135 -0.155123 128.0 +-0 0 -0 128.0 +-15.254027 34.427902 -0.03608394 128.0 +-39.566326 90.805077 -0.15395381 128.0 +-0 0 -0 128.0 +-38.339565 91.023888 -0.1534124 128.0 +-37.709187 91.085571 -0.15305531 128.0 +-37.108513 91.214272 -0.15284605 128.0 +-14.032166 35.10532 -0.03637192 128.0 +-13.415257 34.168697 -0.034263913 128.0 +-13.618299 35.321526 -0.036467914 128.0 +-13.076361 34.54586 -0.034705479 128.0 +-12.847081 34.579514 -0.034611408 128.0 +-11.511686 31.576988 -0.028316183 128.0 +-11.148018 31.172457 -0.027348572 128.0 +-11.007499 31.385595 -0.027644232 128.0 +-10.921354 31.762726 -0.028273946 128.0 +-10.448452 31.004686 -0.026603667 128.0 +-11.971889 36.259613 -0.037099548 128.0 +-11.257843 34.812851 -0.034033529 128.0 +-9.9559689 31.444397 -0.02711243 128.0 +-0 0 -0 128.0 +-10.713197 35.337639 -0.034682442 128.0 +-10.487926 35.374905 -0.034626767 128.0 +-0 0 -0 128.0 +-9.8318167 34.719658 -0.033067837 128.0 +-10.139648 36.663612 -0.036821168 128.0 +-9.4646912 35.058784 -0.033507489 128.0 +-9.2435389 35.093956 -0.033463329 128.0 +-0 0 -0 128.0 +-3.6177094 14.449944 0.0076120957 128.0 +-3.5308728 14.479643 0.0075967372 128.0 +-9.027318 38.040424 -0.03885046 128.0 +-8.8031816 38.136024 -0.038931094 128.0 +-8.6025105 38.338612 -0.039224833 128.0 +-8.8125324 40.4347 -0.04324118 128.0 +-8.194499 38.739689 -0.039810389 128.0 +-8.7323637 42.571503 -0.047222976 128.0 +-3.9279275 19.761328 -0.0024710142 128.0 +-3.8150997 19.829247 -0.0025574078 128.0 +-6.3711452 34.250362 -0.030673772 128.0 +-0 0 -0 128.0 +-6.2387881 35.990154 -0.033916418 128.0 +-4.6442461 27.802679 -0.017906696 128.0 +-5.6651316 35.245506 -0.032324854 128.0 +-4.9526505 32.066685 -0.026083384 128.0 +-4.7588773 32.117245 -0.026123701 128.0 +-5.9326444 41.809059 -0.044861544 128.0 +-0 0 -0 128.0 +-3.9091363 30.207006 -0.022266701 128.0 +-3.7306824 30.286997 -0.022376133 128.0 +-3.5454714 30.315277 -0.022387652 128.0 +-3.352792 30.276827 -0.02227246 128.0 +-4.1873007 40.061646 -0.041121654 128.0 +-0 0 -0 128.0 +-3.6985774 40.144867 -0.041188851 128.0 +-3.4564636 40.216621 -0.041284844 128.0 +-0 0 -0 128.0 +-3.6960762 50.225052 -0.060475774 128.0 +-2.5120621 37.253288 -0.035473425 128.0 +-2.2826993 37.256023 -0.035450388 128.0 +-1.5122617 27.433256 -0.016537836 128.0 +-2.5361254 51.807823 -0.063372843 128.0 +-0 0 -0 128.0 +-1.5498794 42.273476 -0.045003615 128.0 +-0 0 -0 128.0 +-0.9609375 39.41217 -0.039478254 128.0 +-0.71881771 39.402328 -0.039449457 128.0 +-0.47741041 39.436996 -0.039508972 128.0 +-0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0.42259097 33.985268 -0.02904189 128.0 +0.63260096 34.062019 -0.02919548 128.0 +0 0 -0 128.0 +1.7663835 57.2286 -0.073713213 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +2.0377593 41.337685 -0.043248862 128.0 +1.7058239 30.769651 -0.022954011 128.0 +1.7640526 28.640629 -0.018880066 128.0 +1.8961951 27.986742 -0.017643675 128.0 +2.07548 28.077299 -0.017841421 128.0 +0 0 -0 128.0 +6.4901714 75.207298 -0.1087142 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +2.2141359 19.940371 -0.002307826 128.0 +2.3306203 19.876749 -0.0022118329 128.0 +4.8416252 39.201027 -0.039622243 128.0 +5.1003413 39.311401 -0.039894864 128.0 +5.3475204 39.323956 -0.039981257 128.0 +5.5347605 38.911221 -0.039245952 128.0 +4.9813414 33.544044 -0.028895982 128.0 +5.1939549 33.557316 -0.028982375 128.0 +4.7684846 29.606348 -0.021362446 128.0 +4.9512119 29.583435 -0.021375885 128.0 +8.3469305 48.055347 -0.057430875 128.0 +8.6409264 47.99929 -0.057423197 128.0 +5.3356781 28.633001 -0.019707527 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +3.0855935 14.566712 0.0076236152 128.0 +3.1625435 14.490841 0.0077349669 128.0 +3.2603891 14.511165 0.0076562525 128.0 +10.015924 43.323151 -0.049158193 128.0 +10.284105 43.27158 -0.049179312 128.0 +0 0 -0 128.0 +9.5396414 38.057476 -0.039115399 128.0 +3.4568577 13.443601 0.0095607545 128.0 +3.5176013 13.339948 0.0097239427 128.0 +3.6179171 13.386652 0.0095876325 128.0 +9.5379248 34.443691 -0.032405488 128.0 +0 0 -0 128.0 +9.9384232 34.250103 -0.032257657 128.0 +10.119077 34.089737 -0.032059912 128.0 +13.645247 44.954594 -0.053984724 128.0 +10.575172 34.087154 -0.032309495 128.0 +11.974465 37.776455 -0.039871827 128.0 +12.198947 37.680389 -0.039827671 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +7.9582639 19.892036 -0.0049226764 128.0 +8.0752659 19.830791 -0.0048977183 128.0 +8.1925812 19.770708 -0.0048766001 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +25.060951 55.586693 -0.080853179 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +37.950043 77.719231 -0.12983844 128.0 +0 0 -0 128.0 +38.46328 76.378654 -0.12797041 128.0 +38.85973 76.001427 -0.12766899 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +33.466679 62.58466 -0.10004411 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +37.897297 67.836815 -0.11297245 128.0 +41.104572 72.528877 -0.12384271 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +19.849514 31.763821 -0.035699967 128.0 +20.168732 31.838255 -0.036147296 128.0 +20.316698 31.640697 -0.035980269 128.0 +20.63265 31.703178 -0.036410317 128.0 +20.853769 31.616884 -0.036504392 128.0 +21.024033 31.453417 -0.036423754 128.0 +40.008133 59.065388 -0.10075254 128.0 +13.780765 20.079929 -0.010545949 128.0 +13.923125 20.022907 -0.010611225 128.0 +14.038234 19.926474 -0.010586266 128.0 +35.171116 49.275406 -0.080018036 128.0 +0 0 -0 128.0 +34.63327 47.283909 -0.076314628 128.0 +34.910831 47.054451 -0.076276228 128.0 +34.121109 45.405201 -0.072832003 128.0 +33.740707 44.33004 -0.070745111 128.0 +0 0 -0 128.0 +33.80032 43.295471 -0.069241859 128.0 +33.915249 42.89743 -0.068777256 128.0 +34.037823 42.513664 -0.068347208 128.0 +34.204201 42.188274 -0.068061143 128.0 +34.17878 41.632126 -0.06720297 128.0 +31.965347 38.45261 -0.059790384 128.0 +34.392796 40.859943 -0.06632559 128.0 +34.585129 40.58041 -0.066154726 128.0 +34.715225 40.230404 -0.065807231 128.0 +0 0 -0 128.0 +35.147331 39.734703 -0.065636359 128.0 +35.261719 39.374523 -0.065265827 128.0 +35.633633 39.30188 -0.065640204 128.0 +35.665833 38.855598 -0.065048881 128.0 +35.974373 38.712208 -0.065248549 128.0 +31.467413 33.448528 -0.05195735 128.0 +36.45155 38.2729 -0.06526199 128.0 +34.08556 35.351906 -0.05807019 128.0 +36.943619 37.848465 -0.065331101 128.0 +19.603533 19.839458 -0.017336497 128.0 +37.495117 37.482044 -0.065574922 128.0 +37.771358 37.297646 -0.065701634 128.0 +36.790405 35.885864 -0.062458992 128.0 +38.656136 37.245541 -0.066847794 128.0 +38.942619 37.063492 -0.067003302 128.0 +39.017025 36.680691 -0.066602051 128.0 +39.757973 36.920319 -0.067955554 128.0 +40.142944 36.821678 -0.068370245 128.0 +40.49485 36.689484 -0.06869854 128.0 +17.552824 15.709215 -0.0090139005 128.0 +17.152121 15.162134 -0.0077410326 128.0 +17.692299 15.447253 -0.0088814301 128.0 +17.159676 14.797702 -0.007291785 128.0 +17.311817 14.744651 -0.007447294 128.0 +17.480022 14.703806 -0.0076431194 128.0 +17.566069 14.593079 -0.0076335203 128.0 +17.429523 14.299822 -0.0070729209 128.0 +18.230234 14.770474 -0.008835353 128.0 +18.322863 14.660212 -0.0088411132 128.0 +18.36853 14.512794 -0.0087336004 128.0 +18.34054 14.308783 -0.0084494613 128.0 +18.363029 14.145939 -0.0082920324 128.0 +18.422419 14.012418 -0.0082267569 128.0 +18.516846 13.905721 -0.0082478756 128.0 +18.73196 13.88832 -0.0085588936 128.0 +18.829737 13.782571 -0.0085896114 128.0 +19.484592 14.079062 -0.0099411933 128.0 +19.911741 14.202537 -0.010745615 128.0 +21.252039 14.962559 -0.013688762 128.0 +20.85811 14.494641 -0.012554124 128.0 +20.405653 13.995373 -0.011294696 128.0 +20.565678 13.920347 -0.011467483 128.0 +20.829493 13.913309 -0.011880253 128.0 +21.320267 14.052682 -0.012813305 128.0 +21.414474 13.927051 -0.012832504 128.0 +20.865755 13.388767 -0.011386849 128.0 +20.848656 13.19791 -0.011162225 128.0 +0 0 -0 128.0 +20.378115 12.552475 -0.0097396076 128.0 +0 0 -0 128.0 +20.48687 12.275249 -0.0096416948 128.0 +0 0 -0 128.0 +20.816553 12.128123 -0.010042946 128.0 +21.259113 12.211841 -0.010858887 128.0 +21.425013 12.132903 -0.011060473 128.0 +21.428328 11.961736 -0.010904963 128.0 +21.424217 11.787612 -0.010736016 128.0 +21.453945 11.633056 -0.010643862 128.0 +21.395264 11.431928 -0.010361643 128.0 +20.30315 10.688836 -0.0078408653 128.0 +20.329292 10.543801 -0.0077563915 128.0 +21.102472 10.780972 -0.0092846006 128.0 +20.322262 10.225671 -0.0074664922 128.0 +21.251104 10.530079 -0.0093229981 128.0 +21.262289 10.373618 -0.009209726 128.0 +20.433123 9.814373 -0.0073090638 128.0 +21.504614 10.167048 -0.009457388 128.0 +21.700781 10.097336 -0.009741528 128.0 +23.095285 10.574215 -0.012556043 128.0 +22.277124 10.034784 -0.010697618 128.0 +22.557707 9.99512 -0.011158385 128.0 +23.123743 10.076613 -0.012216228 128.0 +23.416773 10.03378 -0.012700033 128.0 +23.831789 10.038963 -0.01343726 128.0 +24.258823 10.044015 -0.014197525 128.0 +24.653458 10.030634 -0.014888675 128.0 +25.048828 10.012782 -0.015579825 128.0 +25.478405 10.003608 -0.01634009 128.0 +25.886406 9.9808989 -0.017054278 128.0 +26.348383 9.973732 -0.017877899 128.0 +26.843103 9.9731064 -0.018766794 128.0 +37.393585 13.631952 -0.040202044 128.0 +0 0 -0 128.0 +35.279125 12.372876 -0.035565577 128.0 +35.402607 12.172756 -0.035663489 128.0 +35.463364 11.95083 -0.035636611 128.0 +35.428722 11.697581 -0.035419669 128.0 +35.346642 11.430441 -0.03511057 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +34.15575 10.354928 -0.032311413 128.0 +34.151531 10.125262 -0.032177024 128.0 +34.372456 9.9617243 -0.032495718 128.0 +36.089794 10.21976 -0.03580172 128.0 +36.386032 10.062889 -0.036268245 128.0 +37.234894 10.052093 -0.037834853 128.0 +38.293839 10.086259 -0.039816149 128.0 +38.947773 10.003329 -0.040991105 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +59.381443 13.706731 -0.080791742 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +54.514877 11.181882 -0.070629917 128.0 +54.575596 10.84581 -0.070616484 128.0 +54.639153 10.510359 -0.070612639 128.0 +54.694748 10.173438 -0.070597284 128.0 +0 0 -0 128.0 +57.433441 9.9552145 -0.075698353 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +17.20414 0.73718035 0.003150339 128.0 +17.192348 0.6310181 0.0031810568 128.0 +17.187901 0.52527213 0.0031964155 128.0 +17.364748 0.42403525 0.0028623599 128.0 +17.366024 0.31746095 0.0028642796 128.0 +17.317648 0.21029532 0.0029602726 128.0 +17.312613 0.10399663 0.0029717919 128.0 +17.312925 -0.0022335283 0.0029717919 128.0 +17.310585 -0.10845093 0.0029756315 128.0 +17.307594 -0.21463971 0.0029794713 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +17.343088 -1.0677462 0.0028508406 128.0 +17.33621 -1.1741413 0.0028508406 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +17.46946 -1.6147131 0.002528304 128.0 +0 -0 -0 128.0 +27.431543 -2.8760998 -0.016743261 128.0 +27.422325 -3.0453563 -0.016760539 128.0 +27.417027 -3.2151904 -0.016787417 128.0 +27.40373 -3.3842158 -0.016800856 128.0 +27.392366 -3.5535851 -0.016820055 128.0 +25.365507 -3.4489448 -0.012936177 128.0 +27.387287 -3.8952389 -0.01689877 128.0 +27.370783 -4.0643864 -0.016914129 128.0 +27.364107 -4.2351604 -0.016950605 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +19.311617 -3.4758072 -0.0014611671 128.0 +19.286978 -3.5936859 -0.0014554076 128.0 +0 -0 -0 128.0 +43.583519 -8.6770086 -0.049106356 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +37.646927 -8.4604702 -0.037869412 128.0 +37.58456 -8.6890554 -0.037850212 128.0 +0 -0 -0 128.0 +11.165174 -2.7251568 0.014145383 128.0 +11.084223 -2.7775645 0.014272094 128.0 +11.203526 -2.8806493 0.014001394 128.0 +10.917802 -2.8786883 0.014533195 128.0 +10.947235 -2.9584126 0.014439122 128.0 +9.0669651 -2.5098743 0.018148294 128.0 +9.0302286 -2.559459 0.018190529 128.0 +7.9156866 -2.2959776 0.02038685 128.0 +7.9244571 -2.3513343 0.020340774 128.0 +7.9213629 -2.4033995 0.020317735 128.0 +7.8625331 -2.4383271 0.020406049 128.0 +7.8855538 -2.4986126 0.020329256 128.0 +7.9994607 -2.5888433 0.020068154 128.0 +7.9388003 -2.6231265 0.020158388 128.0 +25.549292 -8.6189356 -0.015556786 128.0 +0 -0 -0 128.0 +41.091877 -14.426938 -0.047401521 128.0 +10.882875 -3.8951273 0.014018672 128.0 +7.2458758 -2.64325 0.021402458 128.0 +11.236345 -4.1779342 0.013195052 128.0 +7.2624545 -2.7507493 0.021300705 128.0 +7.0616541 -2.724324 0.021678917 128.0 +11.070054 -4.3496656 0.013375519 128.0 +7.1502438 -2.8598139 0.021425495 128.0 +7.197391 -2.9300363 0.021291105 128.0 +34.093346 -14.128507 -0.034642126 128.0 +0 -0 -0 128.0 +9.0951881 -3.8996356 0.0172114 128.0 +19.585396 -8.5415144 -0.0048113246 128.0 +5.6497474 -2.5044129 0.024345605 128.0 +5.6643577 -2.5525956 0.024282249 128.0 +4.7222314 -2.1627805 0.026238587 128.0 +4.7460389 -2.2090242 0.026159873 128.0 +4.642909 -2.1957583 0.026349939 128.0 +4.7041535 -2.2601666 0.02619059 128.0 +4.5706849 -2.230629 0.026445933 128.0 +4.7835689 -2.3710394 0.025960207 128.0 +4.7992969 -2.4156389 0.025894932 128.0 +29.407227 -15.03519 -0.027198823 128.0 +4.3246307 -2.243535 0.026856782 128.0 +4.3275924 -2.2788851 0.026820306 128.0 +4.272964 -2.2837036 0.026908619 128.0 +4.268539 -2.3151257 0.026887501 128.0 +4.6904883 -2.581486 0.025931409 128.0 +4.6282916 -2.5843685 0.026033163 128.0 +4.4896784 -2.543196 0.026303863 128.0 +4.5078001 -2.5901337 0.026228989 128.0 +4.414938 -2.5729144 0.026399856 128.0 +4.3302064 -2.5592356 0.026553445 128.0 +3.3041382 -1.9799469 0.02881504 128.0 +4.2557521 -2.586205 0.026649438 128.0 +4.4747481 -2.7571018 0.026119556 128.0 +7.0119672 -4.3807735 0.020336935 128.0 +4.4498696 -2.817693 0.026098438 128.0 +4.468679 -2.8681784 0.026015883 128.0 +4.4635682 -2.9037259 0.025987085 128.0 +3.5908797 -2.3672235 0.027953023 128.0 +4.3802114 -2.9266055 0.026096517 128.0 +23.075123 -15.629151 -0.01729618 128.0 +22.949108 -15.750071 -0.017227065 128.0 +22.942345 -15.953391 -0.01743825 128.0 +4.1280437 -2.9070828 0.026516967 128.0 +4.0905943 -2.9184139 0.026563045 128.0 +4.0588346 -2.9334972 0.026595682 128.0 +21.228949 -15.548425 -0.014308877 128.0 +21.084158 -15.642043 -0.014191765 128.0 +5.4838729 -4.1197395 0.023042019 128.0 +5.4282541 -4.1302953 0.023114974 128.0 +5.3909292 -4.1543665 0.023143772 128.0 +3.8976638 -3.0415192 0.026718553 128.0 +5.570951 -4.4031706 0.022577412 128.0 +5.5461702 -4.4391456 0.022571653 128.0 +19.148695 -15.524011 -0.011116148 128.0 +18.992023 -15.591084 -0.010964479 128.0 +18.747589 -15.583943 -0.010593946 128.0 +18.436638 -15.517724 -0.010054465 128.0 +4.2048941 -3.5822973 0.025605034 128.0 +3.4954066 -3.0148158 0.027348267 128.0 +3.6892042 -3.2217493 0.026806867 128.0 +3.595964 -3.179394 0.026995013 128.0 +3.5763879 -3.2013986 0.026995013 128.0 +3.3803625 -3.0634174 0.02745194 128.0 +3.7762542 -3.4648221 0.026371058 128.0 +3.8669989 -3.5920813 0.026077319 128.0 +16.68022 -15.691469 -0.0077563915 128.0 +16.573486 -15.783866 -0.0077295131 128.0 +3.4978819 -3.3711247 0.02688366 128.0 +3.2595911 -3.1801751 0.027467299 128.0 +3.9441967 -3.8959799 0.025566636 128.0 +3.0803409 -3.0799015 0.027847432 128.0 +3.5454857 -3.589015 0.026524646 128.0 +3.5282848 -3.6157134 0.026511207 128.0 +3.0099452 -3.1223962 0.027883908 128.0 +3.0369196 -3.1893396 0.027755277 128.0 +2.970717 -3.1583691 0.027885828 128.0 +3.910044 -4.209034 0.025180744 128.0 +3.7672055 -4.105454 0.02551288 128.0 +3.7446296 -4.1314564 0.0255052 128.0 +3.2757521 -3.6588056 0.026781907 128.0 +3.7691469 -4.2625136 0.025286335 128.0 +3.2121918 -3.6776359 0.026835663 128.0 +3.8843822 -4.5030813 0.024792932 128.0 +3.8754814 -4.5489092 0.024737256 128.0 +3.2546675 -3.867769 0.026505448 128.0 +3.7976425 -4.5699711 0.024802532 128.0 +3.4035735 -4.147089 0.025910292 128.0 +12.435716 -15.348301 -0.0017145888 128.0 +12.346929 -15.431344 -0.0017318676 128.0 +3.5733833 -4.5213366 0.025146186 128.0 +3.5412683 -4.5376577 0.025159625 128.0 +3.599401 -4.6710048 0.024888925 128.0 +3.5385888 -4.6508169 0.024990678 128.0 +3.5189919 -4.6844368 0.024961879 128.0 +1.6112524 -2.1714566 0.031019041 128.0 +2.5292747 -3.4538813 0.02799142 128.0 +2.5747972 -3.5617406 0.027772557 128.0 +2.7880588 -3.9072025 0.026995013 128.0 +11.079247 -15.73586 -0.0007373796 128.0 +1.5107893 -2.1722291 0.031130394 128.0 +1.5200551 -2.2144463 0.031053599 128.0 +10.499628 -15.511456 0.00024942897 128.0 +10.073788 -15.0808 0.0013917462 128.0 +9.9667568 -15.120619 0.0014416627 128.0 +1.5023229 -2.3080897 0.030923048 128.0 +1.4832723 -2.3096895 0.030940328 128.0 +1.467468 -2.3162124 0.030946087 128.0 +1.9897497 -3.1844225 0.029001268 128.0 +1.4200548 -2.3033936 0.031015201 128.0 +1.3809737 -2.27104 0.031107355 128.0 +1.3546785 -2.2588828 0.031153431 128.0 +1.3433361 -2.2714572 0.031143833 128.0 +1.3540384 -2.3219965 0.031049758 128.0 +1.6216654 -2.8210635 0.029963117 128.0 +1.5496324 -2.7343707 0.030176222 128.0 +1.5425731 -2.7612913 0.030137826 128.0 +1.4759539 -2.6804595 0.03033557 128.0 +1.2888472 -2.3747461 0.03102288 128.0 +1.266241 -2.3676155 0.031055519 128.0 +1.4668902 -2.784158 0.030168543 128.0 +1.4787822 -2.8490331 0.030047592 128.0 +1.4667319 -2.8687396 0.030024553 128.0 +7.3614211 -14.62919 0.0047687818 128.0 +7.2710752 -14.673188 0.0047707018 128.0 +1.1580694 -2.3712749 0.031143833 128.0 +1.1608144 -2.4143934 0.031067038 128.0 +6.9775343 -14.757527 0.0048705344 128.0 +6.8750415 -14.774675 0.0049242903 128.0 +6.7792616 -14.805671 0.0049473289 128.0 +6.6599522 -14.784076 0.0050797993 128.0 +6.5654678 -14.816434 0.0050970782 128.0 +6.5726957 -15.081962 0.0046247924 128.0 +1.330954 -3.1036043 0.029726975 128.0 +1.3146026 -3.1181636 0.029713536 128.0 +6.2117348 -15.001739 0.0050375625 128.0 +6.1493378 -15.112747 0.0048858933 128.0 +6.0687394 -15.180837 0.0048225378 128.0 +1.0969927 -2.7911141 0.030452682 128.0 +1.076249 -2.7884619 0.03047188 128.0 +5.7380166 -15.157165 0.0050951582 128.0 +5.6184402 -15.120845 0.0052410676 128.0 +5.4813752 -15.033835 0.0054887296 128.0 +1.2010976 -3.3554595 0.029367961 128.0 +1.1844573 -3.37409 0.029344922 128.0 +5.15593 -14.993169 0.0057709492 128.0 +5.0845919 -15.086121 0.005646158 128.0 +5.0279813 -15.226237 0.005425374 128.0 +1.1603675 -3.5848286 0.028976308 128.0 +4.8144951 -15.203849 0.0055924021 128.0 +4.495296 -14.504289 0.0070572561 128.0 +0.96799403 -3.1892867 0.029811449 128.0 +0.96460718 -3.2498155 0.029702017 128.0 +0.9646883 -3.3248277 0.029563786 128.0 +0.9543494 -3.3662848 0.029492751 128.0 +0.88436949 -3.1937692 0.029847926 128.0 +0.86553806 -3.2020319 0.029842166 128.0 +4.0125074 -15.231268 0.005970615 128.0 +3.9393711 -15.335024 0.0058131861 128.0 +3.8755515 -15.480166 0.0055732033 128.0 +0.82766759 -3.3903868 0.029510031 128.0 +0.80800337 -3.4002664 0.02950043 128.0 +3.597827 -15.582983 0.0055060084 128.0 +3.5133083 -15.654529 0.0054080957 128.0 +3.4254916 -15.713897 0.0053332211 128.0 +0.64547718 -3.0463178 0.030231899 128.0 +0.62014306 -3.017894 0.030295253 128.0 +0.60102928 -3.0186999 0.030301014 128.0 +0.57777363 -2.997781 0.030349011 128.0 +2.9413104 -15.808629 0.0053389804 128.0 +0.5347544 -2.970197 0.030416206 128.0 +0.49619815 -2.8561704 0.030644668 128.0 +0.49381784 -2.9499044 0.030468041 128.0 +2.5045447 -15.577877 0.0059187785 128.0 +0.44109967 -2.8490074 0.030675385 128.0 +0.41657647 -2.8041785 0.03076754 128.0 +0.39809832 -2.797771 0.030784817 128.0 +0.37958017 -2.7902517 0.030804018 128.0 +0.36219576 -2.7905447 0.030807856 128.0 +1.95489 -15.865948 0.0055194474 128.0 +1.8584306 -15.88559 0.0055040885 128.0 +0.30581838 -2.7520123 0.03089425 128.0 +0.31386888 -2.9925368 0.030433483 128.0 +0.4134739 -4.1946201 0.028118132 128.0 +0.38690299 -4.1881161 0.02813541 128.0 +1.3174525 -15.320387 0.0066886428 128.0 +1.2254108 -15.353103 0.0066406461 128.0 +1.137566 -15.447099 0.0064736186 128.0 +1.0453856 -15.4927 0.0063987439 128.0 +0.15146655 -2.4542832 0.031489406 128.0 +0.14916427 -2.6868148 0.031043999 128.0 +0.11728097 -2.3730564 0.031648755 128.0 +0.10126474 -2.3397627 0.03171403 128.0 +0.087235816 -2.3493338 0.031696752 128.0 +0.081078604 -2.6206985 0.03117647 128.0 +0.066944361 -2.7011228 0.03102288 128.0 +0.051753316 -2.7774699 0.030876972 128.0 +0.03474633 -2.780735 0.030871212 128.0 +0.017825956 -2.8048954 0.030825134 128.0 +0.00061628362 -2.7989521 0.030836655 128.0 +-0.016519781 -2.7929032 0.030848173 128.0 +-0.033431981 -2.7747507 0.030882731 128.0 +-0.29715145 -16.033175 0.0054234546 128.0 +-0.39834362 -16.145014 0.00520459 128.0 +-0.49761617 -16.149261 0.0051911511 128.0 +-0.09563417 -2.6142037 0.031187989 128.0 +-0.11081013 -2.5935864 0.031226385 128.0 +-0.79123998 -16.065454 0.0053293812 128.0 +-0.14201978 -2.5810483 0.031247504 128.0 +-0.15693137 -2.5651567 0.031276304 128.0 +-0.17375016 -2.5801086 0.031245586 128.0 +-1.2181647 -16.485983 0.0044731232 128.0 +-1.3372705 -16.702478 0.0040411544 128.0 +-1.4424815 -16.72584 0.0039797188 128.0 +-1.5459111 -16.725636 0.00396244 128.0 +-1.6505711 -16.736734 0.003922123 128.0 +-1.7660656 -16.848619 0.0036859801 128.0 +-1.8670948 -16.816595 0.0037262973 128.0 +-1.9761865 -16.855474 0.0036283843 128.0 +-2.085948 -16.894638 0.0035285517 128.0 +-2.1736145 -16.758553 0.0037666142 128.0 +-2.3053787 -16.957939 0.0033538442 128.0 +-2.4092464 -16.942484 0.0033557641 128.0 +-2.5188882 -16.965958 0.0032808895 128.0 +-2.6443608 -17.088535 0.0030121088 128.0 +-2.3197246 -14.406363 0.0081957337 128.0 +-2.8647611 -17.119892 0.0028853982 128.0 +-2.9892647 -17.21431 0.0026665339 128.0 +-3.1107812 -17.28422 0.0024937466 128.0 +-3.2319849 -17.346401 0.002334398 128.0 +-3.3716695 -17.499062 0.0019965025 128.0 +-3.3704011 -16.932751 0.0030639451 128.0 +-3.5841432 -17.446573 0.002015701 128.0 +-3.6496651 -17.228598 0.0023996732 128.0 +-3.7811186 -17.324095 0.0021673702 128.0 +-3.9744053 -17.687904 0.0014051853 128.0 +-4.132422 -17.877529 0.00098281587 128.0 +-4.2818131 -18.019175 0.00065259979 128.0 +-3.877542 -15.884504 0.0048186979 128.0 +-4.4452257 -17.736359 0.001105687 128.0 +-4.5464969 -17.679695 0.0011632828 128.0 +-4.7752776 -18.107853 0.00025710842 128.0 +-4.9322286 -18.248112 -8.0787118e-05 128.0 +-5.1201711 -18.492165 -0.00062794751 128.0 +-5.2556381 -18.538328 -0.00078345626 128.0 +-5.4888535 -18.917732 -0.0016070766 128.0 +-5.3125482 -17.899168 0.00036462065 128.0 +-5.8553691 -19.292944 -0.0024978921 128.0 +-5.9466715 -19.169741 -0.0023231849 128.0 +-6.1566534 -19.424583 -0.0029106622 128.0 +-6.2486176 -19.302721 -0.0027417145 128.0 +-6.3707056 -19.27541 -0.0027647528 128.0 +-6.2832985 -18.626701 -0.0015302822 128.0 +-6.6025333 -19.183489 -0.0027397946 128.0 +-6.7631845 -19.265274 -0.0029893764 128.0 +-6.8913789 -19.251657 -0.0030469724 128.0 +-7.065259 -19.362131 -0.0033599096 128.0 +-7.2745662 -19.562105 -0.0038590736 128.0 +-7.4104056 -19.559179 -0.0039454675 128.0 +-7.1990075 -18.655056 -0.0021791952 128.0 +-7.7376599 -19.690136 -0.0044062338 128.0 +-7.9753528 -19.934744 -0.00501099 128.0 +-8.1250544 -19.953041 -0.00515114 128.0 +-8.2718344 -19.961935 -0.0052740113 128.0 +-8.3941631 -19.910805 -0.0052740113 128.0 +-8.4468012 -19.697174 -0.0049361154 128.0 +-8.6262732 -19.779715 -0.005218335 128.0 +-8.7584229 -19.751093 -0.0052701714 128.0 +-9.6114779 -21.320583 -0.0086894436 128.0 +-8.9938908 -19.62849 -0.0052413736 128.0 +-10.066591 -21.618025 -0.0095725795 128.0 +-10.207175 -21.573025 -0.0096090576 128.0 +-10.477999 -21.798391 -0.010223413 128.0 +-1.6878434 -3.4591329 0.0288208 128.0 +-1.6854887 -3.4012299 0.028922552 128.0 +-1.6892347 -3.356885 0.028995508 128.0 +-1.7111661 -3.3491278 0.028989749 128.0 +-1.7524158 -3.378505 0.028903354 128.0 +-1.7735791 -3.3685734 0.028901435 128.0 +-1.8060042 -3.3796732 0.028853439 128.0 +-4.5535502 -8.3932962 0.017877592 128.0 +-13.123835 -23.835772 -0.016029073 128.0 +-13.432252 -24.045504 -0.016668387 128.0 +-12.779783 -22.551512 -0.013554372 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-15.644053 -26.457903 -0.022800421 128.0 +-16.633047 -27.740479 -0.025887558 128.0 +-17.104271 -28.13348 -0.027001077 128.0 +-17.287592 -28.045877 -0.027041394 128.0 +-17.423315 -27.881611 -0.026910845 128.0 +-17.527704 -27.66943 -0.026672782 128.0 +-18.342312 -28.566048 -0.028965095 128.0 +-18.533609 -28.478107 -0.029022692 128.0 +-18.703594 -28.357174 -0.029007332 128.0 +-19.339052 -28.932735 -0.030602736 128.0 +-19.542574 -28.852442 -0.03069297 128.0 +-19.968235 -29.094757 -0.031537708 128.0 +-19.925999 -28.654785 -0.030796643 128.0 +-20.203392 -28.676674 -0.031136459 128.0 +-20.858271 -29.223654 -0.032720342 128.0 +-21.69639 -30.006752 -0.034880187 128.0 +-21.878328 -29.870642 -0.034874428 128.0 +-22.080862 -29.762339 -0.034937784 128.0 +-21.924229 -29.175421 -0.03385498 128.0 +-22.056803 -28.979872 -0.033709072 128.0 +-23.076746 -29.936928 -0.036358479 128.0 +-23.056925 -29.534655 -0.035724927 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-27.461658 -33.035172 -0.046264965 128.0 +-27.638083 -32.835445 -0.046188168 128.0 +-27.888985 -32.723846 -0.046335999 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-29.447313 -33.291012 -0.049119797 128.0 +-29.999277 -33.498554 -0.050121963 128.0 +-30.282173 -33.399784 -0.050344668 128.0 +-30.331007 -33.043911 -0.049903098 128.0 +-0 -0 -0 128.0 +-31.319405 -33.291206 -0.051542662 128.0 +-31.403772 -32.973137 -0.051210526 128.0 +-32.586281 -33.796997 -0.05392329 128.0 +-32.731571 -33.533443 -0.053754341 128.0 +-32.858692 -33.253021 -0.053541236 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-34.14814 -33.308681 -0.055372782 128.0 +-35.130344 -33.848553 -0.057448152 128.0 +-35.410538 -33.701988 -0.057642061 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-10.317468 -8.4654455 0.01058788 128.0 +-10.36844 -8.40135 0.0105898 128.0 +-0 -0 -0 128.0 +-35.622787 -28.14382 -0.050949425 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-20.970184 -15.747928 -0.014138009 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-16.403454 -8.6360474 0.00061996217 128.0 +-16.465012 -8.5398388 0.00060076354 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-6.9725189 -3.4558086 0.021269986 128.0 +-6.9747181 -3.4037538 0.021310303 128.0 +-7.0071907 -3.3665216 0.021285346 128.0 +-7.0240989 -3.3217533 0.021293025 128.0 +-7.070642 -3.2908247 0.021237349 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-36.128246 -15.47979 -0.039249793 128.0 +-36.217018 -15.25549 -0.03923827 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-22.288456 -8.437108 -0.0095437821 128.0 +-22.370741 -8.3116817 -0.0096071372 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-28.350088 -8.4054546 -0.020559944 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-12.790498 -3.3697069 0.010816344 128.0 +-12.787687 -3.2851927 0.01086242 128.0 +-12.938564 -3.2394438 0.01060324 128.0 +-34.335182 -8.3710165 -0.03163946 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-40.29821 -8.5241213 -0.04286873 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-18.684622 -3.3577132 -0.00023629586 128.0 +-18.663488 -3.235831 -0.00015566169 128.0 +-0 -0 -0 128.0 +-27.184938 -4.3697987 -0.016651107 128.0 +-27.151941 -4.1937566 -0.016535915 128.0 +-27.227612 -4.0345497 -0.016633829 128.0 +-27.207302 -3.8610873 -0.016547434 128.0 +-24.213108 -3.284869 -0.010701458 128.0 +-28.658913 -3.7088552 -0.019269798 128.0 +-27.537767 -3.3921452 -0.017058117 128.0 +-28.429129 -3.3249531 -0.018741837 128.0 +-27.682676 -3.0656219 -0.017261622 128.0 +-27.959558 -2.9227271 -0.017760787 128.0 +-25.849222 -2.5419731 -0.013656124 128.0 +-25.893211 -2.385977 -0.0137118 128.0 +-25.88644 -2.2252567 -0.013671483 128.0 +-27.48258 -2.1926033 -0.016720222 128.0 +-29.464193 -2.1687617 -0.020510027 128.0 +-30.66824 -2.0682261 -0.022802342 128.0 +-30.674364 -1.8796436 -0.022790823 128.0 +-39.461002 -2.1747808 -0.039664481 128.0 +-41.614037 -2.0373433 -0.043778744 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-112.10613 -2.0430038 -0.17905407 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-152.03152 5.6283779 -0.25586963 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 -0 -0 128.0 +-112.13109 -2.1691427 -1.5296394 128.0 +-87.869766 -1.1604209 -1.1906796 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-87.842247 0.45699403 -1.1902047 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-69.695068 14.240609 -0.95689672 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-58.084858 13.737114 -0.79704374 128.0 +-57.993649 14.091841 -0.79696 128.0 +-102.68208 25.618589 -1.4413565 128.0 +-80.788139 20.683647 -1.1280731 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-53.612816 14.782949 -0.74016184 128.0 +-49.893295 14.087354 -0.68752438 128.0 +-0 0 -0 128.0 +-79.722786 23.569513 -1.1244429 128.0 +-0 0 -0 128.0 +-43.599976 13.4742 -0.60081929 128.0 +-43.516479 13.741471 -0.60081929 128.0 +-43.523651 14.037996 -0.60217357 128.0 +-43.473736 14.316986 -0.60271811 128.0 +-0 0 -0 128.0 +-57.872692 19.849243 -0.81791723 128.0 +-41.057556 14.364251 -0.5709821 128.0 +-40.997841 14.62632 -0.57141489 128.0 +-0 0 -0 128.0 +-66.871391 24.785845 -0.95943785 128.0 +-51.793354 19.559565 -0.73667127 128.0 +-51.651833 19.869097 -0.73636413 128.0 +-0 0 -0 128.0 +-33.835629 13.494775 -0.4722555 128.0 +-0 0 -0 128.0 +-35.017662 14.466754 -0.49265426 128.0 +-32.89938 13.828585 -0.46192348 128.0 +-45.917103 19.632528 -0.66091251 128.0 +-57.269749 24.903149 -0.83562124 128.0 +-57.050938 25.225372 -0.83462995 128.0 +-31.045296 13.955397 -0.4388859 128.0 +-32.978107 15.068114 -0.46988192 128.0 +-29.235653 13.57564 -0.41369811 128.0 +-29.158133 13.757757 -0.41379586 128.0 +-29.075872 13.937706 -0.41383773 128.0 +-31.124926 15.155459 -0.44699791 128.0 +-39.858063 19.711163 -0.58449745 128.0 +-39.815891 19.995293 -0.58574009 128.0 +-27.158171 13.848122 -0.38927826 128.0 +-27.084232 14.020476 -0.38945979 128.0 +-28.91227 15.19241 -0.41965997 128.0 +-28.847622 15.385055 -0.42012072 128.0 +-49.971077 27.045437 -0.75701416 128.0 +-27.431393 15.065022 -0.4006016 128.0 +-27.279917 15.200447 -0.39966613 128.0 +-0 0 -0 128.0 +-24.698093 14.161838 -0.36114448 128.0 +-24.582211 14.296527 -0.36068371 128.0 +-24.419096 14.402898 -0.35946903 128.0 +-24.477859 14.640738 -0.3618705 128.0 +-46.649906 28.291969 -0.72543174 128.0 +-46.045292 28.313187 -0.71838081 128.0 +-45.405701 28.305315 -0.71072954 128.0 +-44.861786 28.34996 -0.70462805 128.0 +-44.160751 28.287613 -0.69590169 128.0 +-43.822811 28.451872 -0.69317907 128.0 +-43.193008 28.421234 -0.68558365 128.0 +-42.651764 28.441643 -0.67944032 128.0 +-42.452423 28.686579 -0.67903543 128.0 +-42.386162 29.022219 -0.68090636 128.0 +-42.302586 29.347864 -0.68252593 128.0 +-20.567867 14.457172 -0.31465042 128.0 +-20.473886 14.579622 -0.31456664 128.0 +-42.755093 30.842825 -0.6997413 128.0 +-42.577957 31.114023 -0.6999647 128.0 +-42.740673 31.637035 -0.70612204 128.0 +-42.536144 31.891495 -0.70595449 128.0 +-42.157303 32.013412 -0.70275712 128.0 +-41.533661 31.943529 -0.6952455 128.0 +-41.335297 32.196545 -0.69521755 128.0 +-41.006645 32.346771 -0.69289982 128.0 +-40.780834 32.576557 -0.69242513 128.0 +-39.747581 32.152672 -0.67747164 128.0 +-37.055691 30.353209 -0.63245755 128.0 +-38.616573 32.029678 -0.66416568 128.0 +-38.211811 32.091755 -0.66038191 128.0 +-37.963142 32.282215 -0.65944648 128.0 +-37.584763 32.359924 -0.65613741 128.0 +-37.00185 32.255501 -0.64903069 128.0 +-0 0 -0 128.0 +-36.480213 32.597214 -0.64672691 128.0 +-21.780056 19.703651 -0.37371042 128.0 +-0 0 -0 128.0 +-34.516834 32.004776 -0.62088293 128.0 +-34.284813 32.183117 -0.62021273 128.0 +-33.859825 32.177284 -0.61584258 128.0 +-33.233727 31.972662 -0.60754901 128.0 +-33.012566 32.15226 -0.60707432 128.0 +-32.673679 32.215214 -0.6043098 128.0 +-14.499795 14.473185 -0.24967043 128.0 +-14.414233 14.565434 -0.24974024 128.0 +-31.885046 32.616692 -0.60051209 128.0 +-31.553038 32.675777 -0.59787327 128.0 +-28.968853 30.37042 -0.54966182 128.0 +-28.792929 30.559242 -0.54988521 128.0 +-31.195564 33.518921 -0.60298342 128.0 +-29.858515 32.47966 -0.57965261 128.0 +-29.610935 32.609699 -0.57866126 128.0 +-29.116529 32.463257 -0.57251793 128.0 +-28.730473 32.430992 -0.56859457 128.0 +-28.379496 32.433594 -0.56538326 128.0 +-28.136147 32.556427 -0.56444776 128.0 +-0 0 -0 128.0 +-27.457382 32.570522 -0.55844402 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-15.792456 19.694794 -0.31610247 128.0 +-24.13438 30.478991 -0.50646287 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-24.577986 32.241261 -0.52969593 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-23.842556 32.500351 -0.52644271 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-36.490772 52.389946 -0.85511243 128.0 +-0 0 -0 128.0 +-22.287708 32.85117 -0.5179258 128.0 +-22.017294 32.885109 -0.51620847 128.0 +-22.132584 33.500122 -0.52425069 128.0 +-20.203802 30.992567 -0.48019999 128.0 +-20.020287 31.126884 -0.48038149 128.0 +-0 0 -0 128.0 +-30.335291 48.460873 -0.76192886 128.0 +-30.02949 48.633331 -0.76171941 128.0 +-29.742477 48.836315 -0.76204056 128.0 +-8.7100029 14.501678 -0.19981147 128.0 +-8.6020041 14.523017 -0.19929488 128.0 +-8.5354242 14.614378 -0.19992317 128.0 +-19.023228 33.034416 -0.49589348 128.0 +-20.306108 35.76783 -0.53791964 128.0 +-0 0 -0 128.0 +-19.908636 36.092247 -0.53916228 128.0 +-12.601949 23.18149 -0.33203334 128.0 +-17.943346 33.494873 -0.4941901 128.0 +-12.24558 23.199982 -0.32991108 128.0 +-12.094232 23.257826 -0.32964578 128.0 +-11.949472 23.328037 -0.32958993 128.0 +-9.9333248 19.689009 -0.27153519 128.0 +-9.80165 19.728098 -0.27120012 128.0 +-23.849833 48.75042 -0.72142458 128.0 +-14.953458 31.047215 -0.44479188 128.0 +-17.591145 37.104191 -0.53698415 128.0 +-17.379635 37.246769 -0.53752869 128.0 +-37.055695 80.702591 -1.2036085 128.0 +-0 0 -0 128.0 +-15.262177 34.34491 -0.48839578 128.0 +-0 0 -0 128.0 +-14.841537 34.534206 -0.48846561 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-14.574777 35.711567 -0.50219041 128.0 +-14.043517 35.022606 -0.49049011 128.0 +-13.488659 34.245697 -0.47754717 128.0 +-20.591818 53.234615 -0.76061642 128.0 +-13.072721 34.422668 -0.47775662 128.0 +-19.914644 53.42334 -0.75972283 128.0 +-19.571699 53.504147 -0.75912249 128.0 +-0 0 -0 128.0 +-11.068791 31.450817 -0.42916822 128.0 +-10.942142 31.710964 -0.43201649 128.0 +-0 0 -0 128.0 +-10.349297 31.230658 -0.42301089 128.0 +-10.263671 31.620733 -0.42781389 128.0 +-11.190683 35.210861 -0.47950187 128.0 +-23.106415 74.27739 -1.0498011 128.0 +-10.74756 35.312057 -0.4790132 128.0 +-10.406304 34.959499 -0.47292569 128.0 +-10.575209 36.340878 -0.49209577 128.0 +-10.342727 36.372379 -0.49162105 128.0 +-10.219435 36.795479 -0.49684289 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-3.6376059 14.466204 -0.17188711 128.0 +-3.5463955 14.478539 -0.17174751 128.0 +-9.0678511 38.025951 -0.50946474 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-8.8485365 40.386997 -0.54092151 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-3.9484355 19.755316 -0.24490932 128.0 +-3.8292344 19.789968 -0.2450629 128.0 +-9.612524 51.363159 -0.69326288 128.0 +-8.0110731 44.308216 -0.59233028 128.0 +-7.2732859 41.68713 -0.55449277 128.0 +-4.6734653 27.79306 -0.35713732 128.0 +-4.5154643 27.899191 -0.35824034 128.0 +-4.9877734 32.063202 -0.41669998 128.0 +-4.7921247 32.101112 -0.41681167 128.0 +-6.0059838 41.994553 -0.55595875 128.0 +-5.7513137 42.053398 -0.5562799 128.0 +-5.5001588 42.141438 -0.55703384 128.0 +-0 0 -0 128.0 +-3.5777307 30.306574 -0.38972506 128.0 +-4.8382411 43.261044 -0.57144284 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-3.7412734 40.127033 -0.52634501 128.0 +-0 0 -0 128.0 +-3.764312 46.546478 -0.61567503 128.0 +-0 0 -0 128.0 +-2.5537474 37.264954 -0.48517051 128.0 +-1.7052749 27.344204 -0.34616306 128.0 +-1.5317371 27.252323 -0.3447389 128.0 +-0 0 -0 128.0 +-2.2853315 52.045769 -0.6910429 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-1.0803896 42.405102 -0.55591691 128.0 +-0.76139379 39.372795 -0.51348585 128.0 +-0 0 -0 128.0 +-0.31952214 45.224461 -0.59510875 128.0 +-0.042018421 45.21957 -0.59502494 128.0 +0.23546521 45.222973 -0.59508079 128.0 +0.38545442 33.972496 -0.43800628 128.0 +0.59421289 33.987488 -0.4382576 128.0 +1.0260112 43.439644 -0.5703398 128.0 +1.2923839 43.427536 -0.57027 128.0 +1.5577859 43.389809 -0.56986511 128.0 +1.8205476 43.297516 -0.56872022 128.0 +1.4806128 30.718336 -0.3930341 128.0 +1.6692318 30.711668 -0.39307597 128.0 +1.7003577 28.100855 -0.3567045 128.0 +1.8700228 28.048988 -0.35613206 128.0 +3.0958364 42.507256 -0.55872327 128.0 +3.3502197 42.406719 -0.55759233 128.0 +3.6113777 42.39732 -0.55775988 128.0 +3.8641775 42.294701 -0.55664295 128.0 +0 0 -0 128.0 +4.3917809 42.329628 -0.55784369 128.0 +2.1894791 19.910019 -0.24328971 128.0 +4.5406599 39.085293 -0.51303905 128.0 +4.778089 39.037838 -0.51277375 128.0 +5.0051579 38.911587 -0.51141942 128.0 +5.2344661 38.81078 -0.51044208 128.0 +5.4741826 38.78981 -0.51060963 128.0 +4.9459724 33.557156 -0.43723837 128.0 +5.1533008 33.53606 -0.43737799 128.0 +4.745945 29.6709 -0.3831768 128.0 +4.903481 29.494253 -0.38109642 128.0 +5.1263576 29.706989 -0.38454509 128.0 +7.7336407 43.232445 -0.57686019 128.0 +8.0107832 43.249069 -0.57778168 128.0 +8.3679981 43.679321 -0.58460915 128.0 +8.6793423 43.84687 -0.58773673 128.0 +8.9576263 43.838833 -0.58839291 128.0 +3.0680475 14.557763 -0.1713426 128.0 +3.1505251 14.507396 -0.1708958 128.0 +10.268962 45.929432 -0.62077123 128.0 +7.1711078 31.1737 -0.41026342 128.0 +10.233033 43.268055 -0.5844416 128.0 +7.5505199 31.072664 -0.41010985 128.0 +9.5009565 38.079815 -0.51162887 128.0 +3.447268 13.463312 -0.15765966 128.0 +3.4978168 13.32005 -0.15590042 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +9.9156771 34.311474 -0.46231443 128.0 +0 0 -0 128.0 +10.35161 34.238895 -0.4630684 128.0 +15.808257 51.152779 -0.71120423 128.0 +11.89915 37.682037 -0.51538467 128.0 +12.129831 37.607365 -0.51537073 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +8.0335274 19.788385 -0.26181751 128.0 +8.1536503 19.735949 -0.26177564 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +24.606321 55.650841 -0.81325382 128.0 +24.950195 55.505196 -0.81335157 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +35.965126 71.616753 -1.0826402 128.0 +0 0 -0 128.0 +36.449173 70.41256 -1.0707304 128.0 +0 0 -0 128.0 +33.416451 62.658245 -0.95517939 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +37.453468 66.258659 -1.0263865 128.0 +37.849869 66.011124 -1.0261213 128.0 +26.90773 46.267288 -0.71096689 128.0 +0 0 -0 128.0 +30.450312 50.91074 -0.79194754 128.0 +26.151587 43.120625 -0.66779584 128.0 +30.40029 49.439571 -0.77402014 128.0 +29.621357 47.516853 -0.74546742 128.0 +20.045488 31.720329 -0.48755807 128.0 +30.551718 47.695381 -0.75451493 128.0 +20.562279 31.670713 -0.49086708 128.0 +20.776556 31.574856 -0.4913837 128.0 +20.929964 31.386881 -0.49037841 128.0 +30.143255 44.60815 -0.71536499 128.0 +30.372902 44.358829 -0.7142899 128.0 +13.874165 19.998121 -0.30346671 128.0 +13.99661 19.912615 -0.30346671 128.0 +30.287006 42.532215 -0.69269043 128.0 +30.513481 42.298542 -0.69188058 128.0 +30.704012 42.016869 -0.69026101 128.0 +30.877365 41.714363 -0.68829232 128.0 +31.06736 41.436913 -0.68677044 128.0 +31.255718 41.159504 -0.6852625 128.0 +29.931307 38.917282 -0.64915633 128.0 +31.590101 40.556705 -0.6814369 128.0 +0 0 -0 128.0 +31.844526 39.864433 -0.6760475 128.0 +32.002377 39.561783 -0.67413467 128.0 +32.228046 39.344563 -0.67377168 128.0 +31.802427 38.342583 -0.65919513 128.0 +32.133553 38.261581 -0.66128945 128.0 +32.801701 38.574055 -0.6706441 128.0 +33.039726 38.374336 -0.67068601 128.0 +33.273251 38.169376 -0.67065811 128.0 +31.574814 35.775421 -0.62988853 128.0 +33.743137 37.762665 -0.67074186 128.0 +33.964149 37.543785 -0.67053241 128.0 +34.181042 37.320667 -0.67026716 128.0 +34.398518 37.098503 -0.67004377 128.0 +0 0 -0 128.0 +31.681355 33.337952 -0.60578978 128.0 +34.080074 35.424297 -0.64999408 128.0 +35.247673 36.190857 -0.66902453 128.0 +19.558523 19.836639 -0.35258564 128.0 +19.709538 19.745981 -0.35317206 128.0 +35.990299 35.617519 -0.6706441 128.0 +36.298256 35.484089 -0.67240334 128.0 +36.746189 35.483658 -0.67688525 128.0 +34.137115 32.561787 -0.62234896 128.0 +37.267647 35.113712 -0.67858863 128.0 +37.497768 34.898685 -0.67888182 128.0 +37.876823 34.82021 -0.68202329 128.0 +38.08902 34.586472 -0.68200934 128.0 +38.412922 34.452923 -0.68411762 128.0 +17.892511 15.850657 -0.2973792 128.0 +17.905905 15.667483 -0.29582939 128.0 +17.488024 15.113377 -0.28634909 128.0 +17.570541 14.997349 -0.28616756 128.0 +17.968792 15.147695 -0.29176641 128.0 +18.135937 15.099214 -0.29312074 128.0 +17.820446 14.65234 -0.28574869 128.0 +18.100967 14.697775 -0.28918341 128.0 +18.165068 14.56579 -0.28872263 128.0 +18.831833 14.911537 -0.29901278 128.0 +19.423946 15.187426 -0.30789271 128.0 +18.521116 14.299235 -0.29032829 128.0 +25.745344 19.625952 -0.41563886 128.0 +20.567007 15.47974 -0.32304168 128.0 +18.915209 14.055498 -0.29265997 128.0 +19.022058 13.95455 -0.29302299 128.0 +19.104895 13.835811 -0.29298112 128.0 +21.325449 15.245398 -0.32964578 128.0 +20.117983 14.196443 -0.30741802 128.0 +20.323683 14.155601 -0.30944252 128.0 +20.67795 14.214726 -0.31398022 128.0 +20.634047 13.998882 -0.31177419 128.0 +20.731186 13.879799 -0.31196967 128.0 +21.238932 14.031786 -0.31904849 128.0 +21.11606 13.765233 -0.3155719 128.0 +21.281698 13.687877 -0.31692624 128.0 +21.539204 13.667399 -0.31980246 128.0 +21.592148 13.51588 -0.31929982 128.0 +20.178152 12.459071 -0.29474035 128.0 +31.95299 19.459969 -0.48600826 128.0 +20.255808 12.166238 -0.29353958 128.0 +20.252651 11.995859 -0.292283 128.0 +20.236078 11.818918 -0.29083094 128.0 +20.066465 11.55531 -0.28693548 128.0 +20.071775 11.394942 -0.28588831 128.0 +20.093325 11.244712 -0.2851204 128.0 +20.118166 11.097062 -0.28442231 128.0 +20.141954 10.949532 -0.28372419 128.0 +20.130316 10.783713 -0.28248155 128.0 +20.166924 10.644589 -0.28202081 128.0 +20.089918 10.446836 -0.27978685 128.0 +20.135841 10.314252 -0.27950761 128.0 +20.210356 10.196362 -0.2796891 128.0 +20.448944 10.15981 -0.28243965 128.0 +20.714785 10.133894 -0.28560907 128.0 +20.98197 10.105528 -0.28879246 128.0 +21.369745 10.131233 -0.29383281 128.0 +21.5937 10.075603 -0.29633203 128.0 +23.084484 10.599238 -0.31829455 128.0 +22.320776 10.083198 -0.30560291 128.0 +22.552179 10.021577 -0.30819988 128.0 +22.907352 10.011554 -0.31268173 128.0 +23.554451 10.122701 -0.32158962 128.0 +23.755199 10.036748 -0.32369789 128.0 +24.308525 10.095212 -0.33113974 128.0 +24.859741 10.145744 -0.33852574 128.0 +25.205515 10.106895 -0.34279817 128.0 +0 0 -0 128.0 +26.016808 10.063407 -0.35311621 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +33.928082 12.175149 -0.4669359 128.0 +33.912544 11.935205 -0.46560952 128.0 +33.890617 11.69428 -0.46421328 128.0 +33.88596 11.460483 -0.46309632 128.0 +0 0 -0 128.0 +33.871876 10.994392 -0.46086237 128.0 +33.885334 10.769391 -0.46008047 128.0 +33.921181 10.552064 -0.45964766 128.0 +33.950851 10.333247 -0.45914501 128.0 +34.0462 10.134434 -0.45961973 128.0 +34.578178 10.062243 -0.46646121 128.0 +35.838596 10.190936 -0.48387203 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +39.993279 10.318583 -0.54033512 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +59.403427 13.781195 -0.8151108 128.0 +0 0 -0 128.0 +54.501759 11.941136 -0.74268895 128.0 +54.483047 11.587151 -0.74139047 128.0 +54.60894 11.264145 -0.74218637 128.0 +54.622116 10.917883 -0.74140447 128.0 +54.616417 10.568655 -0.74038523 128.0 +54.659595 10.229473 -0.74009204 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +17.182083 0.64859176 -0.20369297 128.0 +17.200729 0.54362643 -0.20390239 128.0 +0 0 -0 128.0 +17.33507 0.33500129 -0.20570353 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +17.286076 -0.090253249 -0.20497748 128.0 +17.287195 -0.19633958 -0.20500541 128.0 +17.290665 -0.30249545 -0.20507522 128.0 +17.294481 -0.4087249 -0.20515899 128.0 +17.222685 -0.51278245 -0.2041956 128.0 +17.244196 -0.6193459 -0.20454466 128.0 +17.220091 -0.72430271 -0.20426542 128.0 +17.122438 -0.82547385 -0.20296693 128.0 +17.104073 -0.92981428 -0.20278543 128.0 +17.298658 -1.0468814 -0.20559183 128.0 +17.328823 -1.1554649 -0.20610842 128.0 +17.337364 -1.2629328 -0.20633182 128.0 +17.430962 -1.3773205 -0.20775597 128.0 +17.419193 -1.4839944 -0.20771408 128.0 +17.439632 -1.5935776 -0.20813294 128.0 +0 -0 -0 128.0 +27.478786 -2.8511193 -0.34936041 128.0 +27.435928 -3.0169404 -0.34901133 128.0 +27.412928 -3.1847658 -0.34895548 128.0 +27.405771 -3.3544874 -0.34913701 128.0 +27.401533 -3.5247514 -0.34937435 128.0 +25.402481 -3.4262099 -0.32151979 128.0 +27.388889 -3.8653555 -0.3498351 128.0 +27.386419 -4.0365453 -0.35014227 128.0 +27.370029 -4.2058759 -0.35026795 128.0 +27.431581 -4.3877907 -0.35151058 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +19.289841 -3.4508917 -0.23723012 128.0 +19.242741 -3.5644524 -0.2368671 128.0 +15.614437 -2.9916468 -0.18559799 128.0 +15.466311 -3.0617709 -0.18375498 128.0 +15.315959 -3.1297903 -0.18188404 128.0 +15.272006 -3.218554 -0.18153499 128.0 +15.212885 -3.3037138 -0.1809765 128.0 +15.24307 -3.4083407 -0.18170254 128.0 +15.26572 -3.511893 -0.18233083 128.0 +15.310052 -3.6211438 -0.18328026 128.0 +11.128964 -2.704555 -0.12352213 128.0 +11.001561 -2.7451968 -0.12193044 128.0 +11.031005 -2.8245533 -0.12260062 128.0 +10.997993 -2.8881221 -0.12237723 128.0 +13.590897 -3.6582198 -0.16013096 128.0 +31.665052 -8.7313452 -0.42225695 128.0 +9.0241766 -2.5483158 -0.09453664 128.0 +7.9075255 -2.2855191 -0.078535981 128.0 +7.9163656 -2.3407993 -0.078871071 128.0 +7.8693118 -2.3794911 -0.078396358 128.0 +7.8755808 -2.4342265 -0.07870353 128.0 +7.8614497 -2.4828053 -0.078717493 128.0 +7.9640698 -2.5690544 -0.080448799 128.0 +7.9348602 -2.6134942 -0.080253333 128.0 +37.182716 -12.498667 -0.51134962 128.0 +37.111 -12.728527 -0.51143336 128.0 +37.040695 -12.958967 -0.51155907 128.0 +0 -0 -0 128.0 +10.855143 -3.9482262 -0.12489042 128.0 +7.2116761 -2.6733873 -0.070996404 128.0 +7.2624874 -2.743021 -0.072001681 128.0 +11.075533 -4.2608042 -0.12930247 128.0 +7.0914197 -2.7783248 -0.069949239 128.0 +7.160614 -2.8562329 -0.071247727 128.0 +7.1707478 -2.9113989 -0.071666591 128.0 +33.708141 -13.925773 -0.47286984 128.0 +9.1098719 -3.8294654 -0.10158754 128.0 +9.098156 -3.8904004 -0.10176905 128.0 +19.596277 -8.5215244 -0.26198506 128.0 +8.9765692 -3.9694085 -0.10065208 128.0 +5.6515088 -2.540812 -0.050122947 128.0 +9.0154009 -4.1195726 -0.10200641 128.0 +4.8508501 -2.2528734 -0.038283017 128.0 +4.8061891 -2.2680886 -0.037808303 128.0 +28.885622 -13.846511 -0.41089171 128.0 +4.7788935 -2.3273349 -0.037822265 128.0 +28.741314 -14.213679 -0.41132456 128.0 +28.574926 -14.350277 -0.41009587 128.0 +4.3281546 -2.2073333 -0.031441547 128.0 +5.2673368 -2.7270651 -0.046422966 128.0 +5.3823919 -2.8286335 -0.048503332 128.0 +4.7852783 -2.5524721 -0.039330181 128.0 +4.6683984 -2.5270543 -0.037724528 128.0 +4.6037245 -2.5286977 -0.036942646 128.0 +4.471951 -2.4921691 -0.035085678 128.0 +4.447 -2.5141494 -0.034932092 128.0 +3.6247811 -2.0788383 -0.021947265 128.0 +4.3821025 -2.5489271 -0.03438757 128.0 +4.3577676 -2.5706875 -0.034247946 128.0 +3.556726 -2.1277561 -0.021472551 128.0 +3.5478783 -2.1521323 -0.021542363 128.0 +3.5490861 -2.1827645 -0.02177972 128.0 +3.5551424 -2.2166662 -0.022100849 128.0 +3.605715 -2.2790341 -0.023161976 128.0 +3.523463 -2.2574298 -0.022031039 128.0 +3.4952881 -2.2697506 -0.021793682 128.0 +3.487978 -2.2955515 -0.021905379 128.0 +4.0594912 -2.7074442 -0.031734753 128.0 +4.0618572 -2.745178 -0.032055885 128.0 +21.858358 -14.966868 -0.33351332 128.0 +21.762827 -15.098428 -0.33345747 128.0 +4.0916262 -2.8764019 -0.033438139 128.0 +21.172728 -15.077257 -0.32654619 128.0 +21.017376 -15.161843 -0.3254711 128.0 +20.857748 -15.242143 -0.32432622 128.0 +20.223753 -14.970072 -0.31494361 128.0 +4.735888 -3.5511816 -0.046255421 128.0 +4.7418804 -3.6013381 -0.046744097 128.0 +4.5675144 -3.5133266 -0.044063359 128.0 +4.5821581 -3.5695503 -0.044705618 128.0 +4.5562444 -3.5945022 -0.04463581 128.0 +4.550509 -3.6354966 -0.044929013 128.0 +4.5133457 -3.6514015 -0.044663731 128.0 +3.8936913 -3.1898823 -0.033884931 128.0 +3.8548045 -3.1977549 -0.033535875 128.0 +4.1988168 -3.5267963 -0.040167909 128.0 +4.1542454 -3.5330615 -0.039749045 128.0 +3.4846148 -3.000684 -0.027811382 128.0 +3.4616148 -3.0180666 -0.027727608 128.0 +3.1019249 -2.7381999 -0.021374816 128.0 +2.9501097 -2.6365926 -0.018847661 128.0 +2.9220123 -2.6439118 -0.018624267 128.0 +2.9005728 -2.6570637 -0.018526532 128.0 +2.89448 -2.6843293 -0.018722001 128.0 +3.8774626 -3.6402597 -0.037864152 128.0 +3.1947396 -3.0364919 -0.025144605 128.0 +3.3828552 -3.2549939 -0.029151751 128.0 +2.9953492 -2.9178019 -0.021989152 128.0 +2.9261241 -2.8855808 -0.020983875 128.0 +2.857409 -2.8526218 -0.019978598 128.0 +2.8356316 -2.8658366 -0.019894825 128.0 +2.808208 -2.8731716 -0.019699354 128.0 +2.8183088 -2.9191196 -0.020257842 128.0 +3.9501383 -4.1417575 -0.043518834 128.0 +3.9369934 -4.1790166 -0.043770153 128.0 +4.0011983 -4.2997112 -0.045613162 128.0 +4.0234642 -4.3771815 -0.046618439 128.0 +3.2880442 -3.6215644 -0.031902298 128.0 +3.267096 -3.6431601 -0.031930223 128.0 +3.9203322 -4.4257998 -0.046157688 128.0 +3.9391937 -4.5024462 -0.04713504 128.0 +3.8716102 -4.4803839 -0.046283346 128.0 +3.8635211 -4.5268712 -0.04670221 128.0 +3.4070885 -4.0421071 -0.03741736 128.0 +3.3879805 -4.0698524 -0.037543021 128.0 +12.573801 -15.292579 -0.24005048 128.0 +12.411657 -15.28561 -0.23854257 128.0 +12.235689 -15.25929 -0.23671353 128.0 +12.107689 -15.290964 -0.2359456 128.0 +3.560261 -4.5538936 -0.044314679 128.0 +3.5463064 -4.5938568 -0.04463581 128.0 +3.5077469 -4.6020117 -0.044398453 128.0 +2.9965935 -3.981935 -0.033186819 128.0 +2.7424924 -3.6912572 -0.027811382 128.0 +2.9427717 -4.0119581 -0.033075124 128.0 +2.9310024 -4.0477552 -0.033382293 128.0 +2.9061105 -4.0656633 -0.033382293 128.0 +1.5251374 -2.1619177 -0.00054324296 128.0 +1.508986 -2.1671326 -0.00047343204 128.0 +1.5041571 -2.1887105 -0.00068286475 128.0 +1.4963129 -2.2061729 -0.00082248659 128.0 +1.4760723 -2.2053423 -0.00065494038 128.0 +1.454245 -2.2018437 -0.0004455077 128.0 +1.4461679 -2.2191017 -0.00058512948 128.0 +1.4211655 -2.2102733 -0.0002919237 128.0 +9.4393568 -14.876232 -0.20961294 128.0 +9.3229647 -14.894037 -0.2089567 128.0 +1.3902222 -2.2522225 -0.00055720512 128.0 +1.3706555 -2.2513165 -0.00040362115 128.0 +1.3578457 -2.2613986 -0.00043154552 128.0 +1.3617799 -2.2997983 -0.00092022185 128.0 +1.3612591 -2.331423 -0.0012972007 128.0 +1.5320542 -2.661201 -0.0064771697 128.0 +1.3409388 -2.3627343 -0.0015345578 128.0 +1.4514264 -2.5942912 -0.0051088762 128.0 +1.5093734 -2.7371044 -0.0072450894 128.0 +1.1749617 -2.1621258 0.0020397604 128.0 +7.6102057 -14.206475 -0.18864174 128.0 +1.1548753 -2.1887615 0.0018442898 128.0 +1.1248157 -2.1638701 0.0023469285 128.0 +7.2968197 -14.245364 -0.18709193 128.0 +1.4603028 -2.8952532 -0.008878665 128.0 +1.4438452 -2.9068453 -0.0089205513 128.0 +7.0918155 -14.496719 -0.1889489 128.0 +7.0022979 -14.53906 -0.18893494 128.0 +6.9189529 -14.5944 -0.18913041 128.0 +1.1103537 -2.3805208 -0.00027796152 128.0 +1.0961435 -2.3881977 -0.0002919237 128.0 +1.0843507 -2.4012573 -0.00038965896 128.0 +1.0691904 -2.4069517 -0.00037569678 128.0 +1.0499966 -2.4033885 -0.00022211281 128.0 +1.037204 -2.4143791 -0.0002919237 128.0 +1.3305939 -3.150177 -0.01134997 128.0 +1.3031859 -3.13889 -0.011056765 128.0 +1.2884357 -3.1579363 -0.011224311 128.0 +5.8680863 -14.634833 -0.18376894 128.0 +5.7679176 -14.644514 -0.183378 128.0 +5.6783128 -14.680562 -0.18339196 128.0 +1.2662839 -3.3353624 -0.013416373 128.0 +1.0746554 -2.8839784 -0.006574905 128.0 +5.4047251 -14.776021 -0.18329422 128.0 +5.264987 -14.672441 -0.18126971 128.0 +1.1827208 -3.3616612 -0.013360525 128.0 +5.0972576 -14.772809 -0.18181422 128.0 +5.0126042 -14.821803 -0.18207951 128.0 +4.9115 -14.821909 -0.18163273 128.0 +4.805335 -14.805164 -0.18094857 128.0 +1.1063043 -3.4821227 -0.014617121 128.0 +1.0142273 -3.26161 -0.011294122 128.0 +0.97701728 -3.211334 -0.010470353 128.0 +0.96414119 -3.2402685 -0.010805446 128.0 +0.96435744 -3.3152487 -0.011810723 128.0 +0.93442494 -3.2874415 -0.011322047 128.0 +0.89550459 -3.225673 -0.010344693 128.0 +0.85685486 -3.161623 -0.0093394164 128.0 +3.9698379 -15.006261 -0.1803482 128.0 +3.8564525 -14.948041 -0.17916141 128.0 +0.86045659 -3.4231653 -0.012885811 128.0 +0.83800876 -3.4225533 -0.012802037 128.0 +3.3867459 -14.203376 -0.16748904 128.0 +3.4100339 -14.700191 -0.17431654 128.0 +3.3774099 -14.976393 -0.17797463 128.0 +3.291445 -15.024183 -0.17836557 128.0 +0.65670508 -3.0896685 -0.0077058417 128.0 +1.7255254 -8.3670902 -0.082892179 128.0 +1.6776812 -8.3951702 -0.083143502 128.0 +1.6280376 -8.415123 -0.083283126 128.0 +0.54812491 -2.930892 -0.0052345353 128.0 +0.5288856 -2.9273126 -0.0051368005 128.0 +0.51091403 -2.9305027 -0.0051368005 128.0 +2.4953914 -14.841205 -0.1737441 128.0 +2.4098725 -14.890783 -0.17423277 128.0 +0.44351378 -2.8534529 -0.0039220904 128.0 +0.4227488 -2.8343637 -0.0036149225 128.0 +0.4059158 -2.8408637 -0.0036707714 128.0 +0.38983193 -2.8532076 -0.0038103932 128.0 +0.36752924 -2.8188605 -0.0032937925 128.0 +0.35355604 -2.8478539 -0.0036707714 128.0 +1.7933547 -15.193029 -0.17722067 128.0 +1.6830933 -15.05171 -0.17508446 128.0 +0.43658367 -4.1366158 -0.021681985 128.0 +1.4899479 -14.987651 -0.17391163 128.0 +1.4035274 -15.056246 -0.17474937 128.0 +1.2981091 -14.915154 -0.17265505 128.0 +1.2021334 -14.868023 -0.17188711 128.0 +1.0939724 -14.648772 -0.16871771 128.0 +1.0234867 -14.938517 -0.17268297 128.0 +0.93622625 -15.01537 -0.17367429 128.0 +0.83273846 -14.819171 -0.17085391 128.0 +0.2100966 -4.20434 -0.022380093 128.0 +0.10515164 -2.4034629 0.0028076803 128.0 +0.094817989 -2.520968 0.0011741052 128.0 +0.086965695 -2.7623584 -0.0021907801 128.0 +0.06998907 -2.7618403 -0.002176818 128.0 +0.052828647 -2.7512209 -0.002023234 128.0 +0.036263477 -2.7754889 -0.0023583265 128.0 +0.019317593 -2.7876577 -0.0025258726 128.0 +0.0022143589 -2.7897236 -0.0025537969 128.0 +-0.078268327 -14.980331 -0.17278069 128.0 +-0.17100038 -15.051558 -0.17378597 128.0 +-0.26471421 -15.128205 -0.17487502 128.0 +-0.36119232 -15.281239 -0.17703916 128.0 +-0.45625773 -15.322711 -0.17765351 128.0 +-0.092255756 -2.5590844 0.00064354239 128.0 +-0.10997211 -2.6064231 -2.6642283e-05 128.0 +-0.74568099 -15.466521 -0.17981763 128.0 +-0.84235805 -15.494603 -0.18027839 128.0 +-0.1556952 -2.5670285 0.00048995839 128.0 +-0.18361303 -2.7486019 -0.0020651205 128.0 +-0.20526771 -2.8132427 -0.0029866246 128.0 +-0.2209508 -2.7919943 -0.0027073808 128.0 +-0.23858711 -2.7965639 -0.002791154 128.0 +-0.2525582 -2.7601957 -0.0023024776 128.0 +-0.26978093 -2.7615798 -0.0023443643 128.0 +-0.2870301 -2.762856 -0.0023862508 128.0 +-0.30288449 -2.7511036 -0.002246629 128.0 +-0.32022074 -2.7531664 -0.0023024776 128.0 +-0.33747223 -2.7541273 -0.0023443643 128.0 +-0.355768 -2.7629137 -0.0024979482 128.0 +-2.1713486 -16.097631 -0.19041494 128.0 +-2.2703605 -16.085985 -0.19044286 128.0 +-2.3808281 -16.151878 -0.1915738 128.0 +-2.5025158 -16.284222 -0.19365416 128.0 +-2.6306539 -16.445297 -0.19615339 128.0 +-2.7633214 -16.620201 -0.19886205 128.0 +-2.864059 -16.596035 -0.19876432 128.0 +-2.9609065 -16.550591 -0.19837338 128.0 +-3.0685947 -16.565538 -0.19884808 128.0 +-3.1959548 -16.680939 -0.20076092 128.0 +-3.3137791 -16.739485 -0.20187788 128.0 +-3.4260361 -16.76586 -0.20254807 128.0 +-3.553792 -16.862911 -0.20423749 128.0 +-3.4660263 -15.960391 -0.19165757 128.0 +-3.5865812 -16.040308 -0.19310963 128.0 +-3.6291223 -15.77536 -0.18963306 128.0 +-3.7573767 -15.886105 -0.19154587 128.0 +-3.8446293 -15.820971 -0.19094549 128.0 +-4.2742047 -17.130089 -0.21012953 128.0 +-4.4422231 -17.349579 -0.21367593 128.0 +-4.5397067 -17.288147 -0.21318725 128.0 +-4.6534953 -17.288933 -0.21360612 128.0 +-4.7900553 -17.370907 -0.21521176 128.0 +-4.9136677 -17.401812 -0.21609138 128.0 +-5.0919695 -17.619169 -0.21969363 128.0 +-5.2402368 -17.723753 -0.22167626 128.0 +-5.4249907 -17.942989 -0.22534831 128.0 +-5.6149907 -18.168257 -0.22913206 128.0 +-5.4921217 -17.391642 -0.21826948 128.0 +-5.8381343 -18.099888 -0.22915998 128.0 +-5.9443917 -18.049479 -0.22895055 128.0 +-6.005012 -17.863861 -0.22675849 128.0 +-6.0953703 -17.770876 -0.22593471 128.0 +-6.1230693 -17.500963 -0.22250003 128.0 +-6.5569043 -18.378462 -0.23607126 128.0 +-6.6736503 -18.349159 -0.23623881 128.0 +-6.7982755 -18.340681 -0.23672749 128.0 +-7.2317896 -19.148922 -0.24941911 128.0 +-7.0318065 -18.279205 -0.23707654 128.0 +-7.133986 -18.210577 -0.23669957 128.0 +-7.4945054 -18.79059 -0.24608214 128.0 +-7.6499043 -18.843384 -0.2475761 128.0 +-7.785615 -18.84507 -0.24831609 128.0 +-8.0223694 -19.085463 -0.25268626 128.0 +-8.210474 -19.20229 -0.25521341 128.0 +-8.3269463 -19.148798 -0.25517154 128.0 +-8.409915 -19.019613 -0.25398475 128.0 +-8.5285091 -18.972212 -0.25405455 128.0 +-8.6829891 -19.003197 -0.25533909 128.0 +-8.8865967 -19.137289 -0.25822926 128.0 +-9.4032116 -19.928829 -0.27129784 128.0 +-9.3476791 -19.500172 -0.26555938 128.0 +-1.6637357 -3.4160125 -0.0166556 128.0 +-1.670481 -3.3770583 -0.016208809 128.0 +-1.6911708 -3.3667448 -0.016208809 128.0 +-1.7086174 -3.350069 -0.016111074 128.0 +-1.7410922 -3.3626099 -0.016474091 128.0 +-1.7658778 -3.3598297 -0.01659975 128.0 +-1.8005759 -3.3753996 -0.017018616 128.0 +-4.5445132 -8.3960629 -0.096910208 128.0 +-4.6031647 -8.3811665 -0.097119644 128.0 +-11.975682 -21.492325 -0.30715272 128.0 +-12.16736 -21.524635 -0.3088561 128.0 +-12.367343 -21.568411 -0.31076893 128.0 +-12.72264 -21.875896 -0.31696814 128.0 +-12.905395 -21.8801 -0.3183085 128.0 +-13.054289 -21.825388 -0.3187134 128.0 +-14.650661 -24.156725 -0.35810071 128.0 +-12.95033 -21.060501 -0.30882818 128.0 +-15.627822 -25.06888 -0.37609798 128.0 +-13.861602 -21.934608 -0.3259179 128.0 +-0 -0 -0 128.0 +-17.168503 -26.443382 -0.40384081 128.0 +-14.009623 -21.290672 -0.31948134 128.0 +-17.655912 -26.476952 -0.40797362 128.0 +-17.812441 -26.359835 -0.40783399 128.0 +-17.855782 -26.07761 -0.4049159 128.0 +-18.661783 -26.899204 -0.42074901 128.0 +-18.861557 -26.834091 -0.42160073 128.0 +-18.939434 -26.596493 -0.41952035 128.0 +-19.211077 -26.630615 -0.42211732 128.0 +-19.449039 -26.614767 -0.4238905 128.0 +-19.672657 -26.576904 -0.42531466 128.0 +-19.721996 -26.304491 -0.42267582 128.0 +-19.845535 -26.133612 -0.42181015 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-20.349216 -25.796865 -0.42239657 128.0 +-20.553925 -25.730112 -0.42344373 128.0 +-20.767382 -25.672701 -0.42468634 128.0 +-20.72303 -25.298809 -0.42024639 128.0 +-20.199953 -24.353834 -0.40541855 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-20.560644 -23.880144 -0.40361744 128.0 +-0 -0 -0 128.0 +-24.229856 -27.453175 -0.47489434 128.0 +-22.685625 -25.387766 -0.43901154 128.0 +-0 -0 -0 128.0 +-23.996311 -26.200262 -0.45970351 128.0 +-24.162739 -26.05913 -0.45982915 128.0 +-0 -0 -0 128.0 +-24.474506 -25.754129 -0.45970351 128.0 +-23.594307 -24.524759 -0.43880212 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-30.393509 -30.078613 -0.56069195 128.0 +-30.488119 -29.804184 -0.55894667 128.0 +-30.697754 -29.642946 -0.55947727 128.0 +-0 -0 -0 128.0 +-31.739653 -29.905134 -0.57253188 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-30.871597 -28.032637 -0.54587811 128.0 +-0 -0 -0 128.0 +-31.241716 -27.67688 -0.54640865 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-10.286439 -8.5638275 -0.15049706 128.0 +-10.315622 -8.4814978 -0.15007819 128.0 +-10.344183 -8.3991337 -0.14965934 128.0 +-10.444669 -8.3749132 -0.15053895 128.0 +-34.15469 -27.044994 -0.57193148 128.0 +-18.819786 -14.715022 -0.29718372 128.0 +-35.389427 -27.322887 -0.58790427 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-35.813892 -26.273451 -0.58382732 128.0 +-35.763062 -25.900131 -0.58018315 128.0 +-36.008347 -25.742428 -0.58167714 128.0 +-36.119053 -25.488138 -0.5808813 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-35.956543 -24.394581 -0.57032585 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-38.406502 -24.041409 -0.59629554 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-43.010307 -25.475986 -0.66162455 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-16.309479 -8.7368221 -0.22195549 128.0 +-16.35482 -8.6323833 -0.22182985 128.0 +-16.375544 -8.5152626 -0.2213272 128.0 +-16.447063 -8.4246531 -0.22163437 128.0 +-16.564507 -8.3569069 -0.22266757 128.0 +-6.9471698 -3.4513202 -0.071917906 128.0 +-6.9727068 -3.4108253 -0.071987718 128.0 +-6.9953055 -3.368845 -0.072015643 128.0 +-7.0257831 -3.3305712 -0.072169229 128.0 +-6.9953446 -3.2637217 -0.071387343 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-36.240147 -15.57471 -0.51439339 128.0 +-0 -0 -0 128.0 +-51.91539 -21.560703 -0.7485531 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-39.822113 -15.685162 -0.5612365 128.0 +-22.210083 -8.5908871 -0.29612261 128.0 +-22.403526 -8.5080528 -0.29823089 128.0 +-22.382229 -8.3431845 -0.29714185 128.0 +-22.531601 -8.2417612 -0.29860786 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-46.205154 -15.627079 -0.64468843 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-49.58609 -15.425236 -0.68872517 128.0 +-28.307062 -8.6154394 -0.37676814 128.0 +-28.361309 -8.4421587 -0.37679607 128.0 +-28.441378 -8.2763605 -0.37721494 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-12.790716 -3.3836639 -0.14834689 128.0 +-12.808332 -3.3043685 -0.148305 128.0 +-34.385952 -8.6471071 -0.45869824 128.0 +-34.335419 -8.410738 -0.45721823 128.0 +-34.488503 -8.2242556 -0.45868427 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-40.241013 -8.5581264 -0.53807324 128.0 +-40.270245 -8.3064051 -0.53775209 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-18.685234 -3.3781159 -0.22874112 128.0 +-18.663256 -3.2560115 -0.22814074 128.0 +-0 -0 -0 128.0 +-52.4828 -8.4946632 -0.70598239 128.0 +-27.100389 -4.215692 -0.34656796 128.0 +-26.97345 -4.0265908 -0.34441778 128.0 +-24.15387 -3.4542692 -0.30430445 128.0 +-24.173618 -3.3058634 -0.30429047 128.0 +-24.185516 -3.1564393 -0.30417877 128.0 +-27.664465 -3.4380307 -0.35286489 128.0 +-27.835976 -3.2860403 -0.35498714 128.0 +-27.718483 -3.0998423 -0.35306036 128.0 +-29.768478 -3.1443121 -0.38158512 128.0 +-27.775331 -2.7615383 -0.35335359 128.0 +-25.862312 -2.4111478 -0.32629487 128.0 +-25.914473 -2.2557096 -0.32682544 128.0 +-27.721792 -2.2417564 -0.35195735 128.0 +-29.910749 -2.2341599 -0.38242283 128.0 +-29.923895 -2.0505888 -0.38242283 128.0 +-50.764397 -3.1661811 -0.67382753 128.0 +-56.846699 -3.195549 -0.75863379 128.0 +-62.719334 -3.1397827 -0.84048009 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-64.695351 13.28217 -1.7159134 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-60.622372 13.613406 -1.6120911 128.0 +-60.634125 14.0074 -1.6147171 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-60.520927 15.555174 -1.6215343 128.0 +-60.426277 15.92674 -1.6215874 128.0 +-53.578827 14.47397 -1.4360918 128.0 +-0 0 -0 128.0 +-49.878994 14.1334 -1.3390601 128.0 +-0 0 -0 128.0 +-46.882305 13.907934 -1.2610209 128.0 +-64.157372 19.462238 -1.7424393 128.0 +-47.145401 14.617804 -1.2731698 128.0 +-43.54982 13.796344 -1.1756076 128.0 +-43.480515 14.068533 -1.1760584 128.0 +-43.432289 14.347917 -1.177146 128.0 +-41.363693 13.946574 -1.1217068 128.0 +-57.884743 19.913843 -1.5877403 128.0 +-41.109257 14.424984 -1.1194522 128.0 +-0 0 -0 128.0 +-61.903477 22.579121 -1.7118815 128.0 +-61.061954 22.697639 -1.6920136 128.0 +-0 0 -0 128.0 +-51.601479 19.904934 -1.4309988 128.0 +-58.628738 23.030083 -1.6348503 128.0 +-33.809036 13.520113 -0.92960638 128.0 +-56.775127 23.110107 -1.5899684 128.0 +-35.007427 14.500186 -0.96886468 128.0 +-32.930805 13.877306 -0.91164833 128.0 +-45.879795 19.666986 -1.2879711 128.0 +-54.65691 23.827709 -1.5455642 128.0 +-54.361629 24.097 -1.5412669 128.0 +-31.026426 13.981014 -0.8664217 128.0 +-32.985851 15.108223 -0.92613149 128.0 +-52.726192 24.542995 -1.5066507 128.0 +-29.123678 13.773965 -0.81827718 128.0 +-52.145329 25.055693 -1.4985337 128.0 +-31.111189 15.183991 -0.88201892 128.0 +-39.901302 19.778492 -1.1451292 128.0 +-50.765438 25.553259 -1.4715039 128.0 +-27.19828 13.899727 -0.77389938 128.0 +-27.132002 14.07648 -0.77448297 128.0 +-28.962662 15.252617 -0.83199108 128.0 +-49.804783 26.621288 -1.461928 128.0 +-49.33823 26.762417 -1.4528031 128.0 +-24.909523 13.709434 -0.71787673 128.0 +-24.591904 13.731882 -0.71079427 128.0 +-24.434122 13.841126 -0.70856613 128.0 +-24.320133 13.974355 -0.70769078 128.0 +-24.187292 14.096134 -0.70625836 128.0 +-24.101206 14.244788 -0.70628488 128.0 +-24.044214 14.410904 -0.70723981 128.0 +-24.036491 14.607489 -0.70975977 128.0 +-23.997471 14.786164 -0.71135134 128.0 +-22.563362 14.094189 -0.66933429 128.0 +-22.321905 14.134496 -0.66448009 128.0 +-22.192696 14.244195 -0.66315377 128.0 +-22.130014 14.396453 -0.66394955 128.0 +-22.010384 14.511608 -0.6629681 128.0 +-21.959993 14.672492 -0.66421485 128.0 +-21.891899 14.822093 -0.664931 128.0 +-21.885443 15.014392 -0.66766322 128.0 +-20.677435 14.372953 -0.63161451 128.0 +-20.549625 14.471927 -0.63034123 128.0 +-20.466137 14.60181 -0.63052696 128.0 +-20.402081 14.745852 -0.63137579 128.0 +-35.695366 26.135281 -1.1373307 128.0 +-35.455647 26.29545 -1.1347311 128.0 +-35.270454 26.495096 -1.1339619 128.0 +-35.048351 26.66622 -1.1319989 128.0 +-34.89278 26.887482 -1.1322907 128.0 +-34.746845 27.116449 -1.1329539 128.0 +-34.664509 27.396086 -1.1358187 128.0 +-34.502003 27.613264 -1.1360309 128.0 +-34.423557 27.898718 -1.139161 128.0 +-34.311226 28.158245 -1.1412034 128.0 +-34.42688 28.608477 -1.1511772 128.0 +-34.321831 28.879034 -1.1536441 128.0 +-34.631737 29.504648 -1.1706471 128.0 +-37.296097 32.171715 -1.2703846 128.0 +-36.788548 32.129684 -1.2594824 128.0 +-36.386272 32.17403 -1.2522408 128.0 +-21.907738 19.611818 -0.74363333 128.0 +-21.747734 19.710293 -0.74222749 128.0 +-21.661739 19.875805 -0.74350071 128.0 +-34.492275 32.0415 -1.2126377 128.0 +-34.078022 32.04845 -1.2047329 128.0 +-33.639652 32.027405 -1.1958998 128.0 +-33.379887 32.172855 -1.1935921 128.0 +-33.065228 32.263268 -1.1892684 128.0 +-14.596773 14.417728 -0.50781816 128.0 +-14.48612 14.485107 -0.50699586 128.0 +-14.419449 14.596478 -0.50784469 128.0 +-14.329615 14.68468 -0.50784469 128.0 +-30.953527 32.11433 -1.1469595 128.0 +-30.668356 32.211704 -1.1435908 128.0 +-28.751217 30.571434 -1.0770108 128.0 +-29.755058 32.030457 -1.1234841 128.0 +-29.406574 32.047436 -1.1175424 128.0 +-29.099287 32.105793 -1.1131921 128.0 +-28.846403 32.22192 -1.1109904 128.0 +-28.319054 32.026112 -1.097807 128.0 +-28.024693 32.087837 -1.0938812 128.0 +-27.843601 32.278114 -1.0945444 128.0 +-27.539354 32.324318 -1.0902207 128.0 +-29.042788 34.515881 -1.1603817 128.0 +-28.823429 34.684975 -1.1600899 128.0 +-28.598015 34.846497 -1.1595858 128.0 +-15.899518 19.616882 -0.63344479 128.0 +-15.752617 19.681292 -0.63233072 128.0 +-24.18696 30.603188 -0.99846762 128.0 +-25.042994 32.089184 -1.0435085 128.0 +-24.643057 31.979349 -1.0347019 128.0 +-24.404608 32.075062 -1.0328717 128.0 +-24.167112 32.17065 -1.0310944 128.0 +-23.907928 32.235626 -1.0283623 128.0 +-23.678978 32.339775 -1.0269829 128.0 +-23.473658 32.475548 -1.0266912 128.0 +-23.237951 32.568512 -1.0250466 128.0 +-22.978968 32.627121 -1.0223409 128.0 +-22.482788 32.342316 -1.0086005 128.0 +-22.135752 32.263687 -1.0016507 128.0 +-21.814631 32.217621 -0.99584156 128.0 +-21.525457 32.214554 -0.99149132 128.0 +-21.288321 32.28677 -0.98960793 128.0 +-20.168022 30.999825 -0.94475269 128.0 +-20.538454 31.997068 -0.97231305 128.0 +-20.327297 32.099686 -0.9715969 128.0 +-20.028801 32.061871 -0.96653044 128.0 +-19.811769 32.151821 -0.96552247 128.0 +-19.593349 32.238609 -0.96446139 128.0 +-8.732193 14.567242 -0.41407564 128.0 +-8.5719452 14.500927 -0.41038856 128.0 +-18.896961 32.422787 -0.95920926 128.0 +-18.597061 32.363041 -0.95385104 128.0 +-18.376949 32.43914 -0.95271045 128.0 +-18.174149 32.545181 -0.95252478 128.0 +-18.004478 32.711254 -0.95419586 128.0 +-12.600727 23.229078 -0.66463923 128.0 +-12.404241 23.205452 -0.66161531 128.0 +-12.222495 23.206829 -0.65938711 128.0 +-12.059614 23.242346 -0.65821999 128.0 +-11.898579 23.280298 -0.65715891 128.0 +-9.9272137 19.72047 -0.54925162 128.0 +-9.7931499 19.755037 -0.54848236 128.0 +-9.7024422 19.877642 -0.55033916 128.0 +-14.90826 31.025913 -0.87679332 128.0 +-16.040792 33.9146 -0.9589175 128.0 +-15.860657 34.073105 -0.96069473 128.0 +-15.637553 34.139793 -0.95981938 128.0 +-15.426138 34.231453 -0.95971328 128.0 +-15.213782 34.320892 -0.95958066 128.0 +-14.995317 34.396187 -0.95907664 128.0 +-14.778864 34.475605 -0.95873183 128.0 +-14.562388 34.554581 -0.95841348 128.0 +-14.340528 34.620193 -0.95775038 128.0 +-14.133486 34.721424 -0.95814824 128.0 +-13.920916 34.809349 -0.95820129 128.0 +-13.765907 35.043911 -0.96247196 128.0 +-13.215697 34.259399 -0.93777639 128.0 +-13.028248 34.400612 -0.93950051 128.0 +-13.216396 35.554661 -0.96992576 128.0 +-13.018539 35.691437 -0.97151726 128.0 +-12.785152 35.731113 -0.97040319 128.0 +-12.559712 35.791908 -0.96992576 128.0 +-10.871369 31.599407 -0.85013479 128.0 +-10.65428 31.597317 -0.84822494 128.0 +-10.453931 31.64311 -0.8476944 128.0 +-11.63201 35.948597 -0.9659999 128.0 +-11.429327 36.076469 -0.96759146 128.0 +-11.198574 36.116322 -0.96676916 128.0 +-10.771323 35.507076 -0.94798881 128.0 +-0 0 -0 128.0 +-8.723959 30.081451 -0.79451001 128.0 +-8.4907122 29.963215 -0.78978842 128.0 +-8.2915058 29.959833 -0.78827643 128.0 +-8.1093445 30.016901 -0.7884621 128.0 +-7.9331636 30.097025 -0.78931093 128.0 +-3.7042887 14.409198 -0.35818559 128.0 +-3.63305 14.500504 -0.36006895 128.0 +-3.5387959 14.501157 -0.35948536 128.0 +-3.4686902 14.602351 -0.36166048 128.0 +-7.0615559 30.565815 -0.79583633 128.0 +-6.8638005 30.563702 -0.7946161 128.0 +-6.6750708 30.600359 -0.79448348 128.0 +-6.4820094 30.616291 -0.79382032 128.0 +-4.0444984 19.69693 -0.49696907 128.0 +-3.9153743 19.680197 -0.49585497 128.0 +-3.7930331 19.695999 -0.49564278 128.0 +-3.69754 19.855505 -0.49932986 128.0 +-5.4345427 30.215317 -0.77803743 128.0 +-5.2428913 30.212635 -0.7770825 128.0 +-4.6616459 27.876936 -0.71339381 128.0 +-4.4906669 27.906002 -0.71342033 128.0 +-4.6680183 30.188437 -0.77397895 128.0 +-4.4794717 30.194756 -0.77339542 128.0 +-4.28793 30.178125 -0.77222824 128.0 +-4.0982409 30.171179 -0.77135289 128.0 +-3.9072573 30.151146 -0.77015924 128.0 +-3.7177753 30.138836 -0.76920432 128.0 +-3.531498 30.15016 -0.76891249 128.0 +-3.3506198 30.209015 -0.76992053 128.0 +-3.1701927 30.276728 -0.77119374 128.0 +-2.9896483 30.349331 -0.77262616 128.0 +-2.8083324 30.420856 -0.77405852 128.0 +-2.6319959 30.558027 -0.77726817 128.0 +-2.4485867 30.625418 -0.77864754 128.0 +-2.2664344 30.718624 -0.78074306 128.0 +-2.0817475 30.788803 -0.78225505 128.0 +-1.6808945 27.350714 -0.69052851 128.0 +-1.714244 31.001675 -0.78729498 128.0 +-1.5328141 31.19133 -0.79206961 128.0 +-1.3478341 31.349957 -0.79604852 128.0 +-1.1587218 31.446545 -0.79840934 128.0 +-0.96801507 31.527002 -0.80037224 128.0 +-0.77849704 31.693243 -0.80464292 128.0 +-0.58554173 31.78038 -0.80684453 128.0 +-0.39237902 31.934311 -0.81084996 128.0 +-0.19683588 32.003094 -0.8126272 128.0 +-0.00046133818 32.166641 -0.81695092 128.0 +0.19717415 32.209023 -0.81809151 128.0 +0.39636198 32.334152 -0.82146031 128.0 +0.59639269 32.420063 -0.82382113 128.0 +0.79940784 32.582684 -0.82825094 128.0 +1.0027225 32.688076 -0.83119529 128.0 +1.2062192 32.761227 -0.8333174 128.0 +1.4106941 32.834103 -0.83546597 128.0 +1.6185132 32.954628 -0.83891433 128.0 +1.6926854 30.629429 -0.77740079 128.0 +1.7255114 28.095118 -0.71031684 128.0 +2.2733841 33.63736 -0.85801297 128.0 +2.4951839 33.832134 -0.86358345 128.0 +2.7169094 33.993557 -0.86830503 128.0 +2.9516044 34.280014 -0.87639546 128.0 +3.1750286 34.403603 -0.88018864 128.0 +3.3948858 34.473011 -0.88257599 128.0 +2.0792034 19.86743 -0.49346766 128.0 +2.2020602 19.863239 -0.49370638 128.0 +2.3225017 19.83744 -0.49338809 128.0 +4.2190671 34.210651 -0.8780666 128.0 +4.411171 34.04731 -0.87440598 128.0 +4.5992765 33.867058 -0.87032104 128.0 +4.791244 33.727352 -0.8673501 128.0 +4.9703746 33.510433 -0.8623367 128.0 +5.1797161 33.504002 -0.86299986 128.0 +4.7573647 29.570173 -0.75814301 128.0 +4.9362416 29.525637 -0.75774515 128.0 +6.1814823 35.626949 -0.92289531 128.0 +6.4247437 35.726089 -0.92660898 128.0 +6.6663427 35.806877 -0.92987162 128.0 +6.896131 35.818306 -0.93130404 128.0 +7.1621985 36.008659 -0.93761718 128.0 +2.994375 14.589606 -0.35861 128.0 +3.0600269 14.458492 -0.35555953 128.0 +3.1578465 14.481441 -0.35670015 128.0 +3.2477386 14.466669 -0.35683277 128.0 +8.7363911 37.819347 -0.99337465 128.0 +7.4118176 31.2117 -0.81464314 128.0 +9.2569427 37.94334 -0.99976736 128.0 +9.5082893 37.960491 -1.0018098 128.0 +3.4637578 13.480166 -0.33272073 128.0 +3.5288243 13.391961 -0.33089045 128.0 +3.6484737 13.509024 -0.33471018 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +9.9626637 34.356022 -0.91260326 128.0 +12.722 42.884987 -1.1503814 128.0 +15.525048 51.179214 -1.3825625 128.0 +15.84974 51.118317 -1.383544 128.0 +4.5430851 14.343377 -0.36264196 128.0 +4.6387029 14.339008 -0.36330509 128.0 +4.7328696 14.32926 -0.3638356 128.0 +4.831244 14.331209 -0.36471096 128.0 +4.9363241 14.351395 -0.36611685 128.0 +5.0196557 14.30763 -0.36574548 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +7.9572086 19.899462 -0.53208935 128.0 +8.0539074 19.788229 -0.53031212 128.0 +8.1977463 19.792927 -0.53187716 128.0 +8.2941923 19.683298 -0.5301795 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +24.640669 55.588055 -1.5768647 128.0 +24.978413 55.429436 -1.576679 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +25.159445 51.548622 -1.4854831 128.0 +25.473936 51.390591 -1.4854034 128.0 +17.776485 35.316479 -1.0125529 128.0 +17.45647 34.15728 -0.98127884 128.0 +17.127985 33.013142 -0.95029658 128.0 +17.229141 32.715492 -0.94454044 128.0 +17.32588 32.415207 -0.93870479 128.0 +17.147419 31.613243 -0.91772276 128.0 +17.333359 31.493422 -0.91729838 128.0 +17.487282 31.31665 -0.91517627 128.0 +17.617514 31.10004 -0.91186059 128.0 +17.58288 30.599594 -0.89987087 128.0 +17.742117 30.442766 -0.89838541 128.0 +17.862448 30.221457 -0.89493704 128.0 +18.029045 30.08042 -0.89398211 128.0 +18.188354 29.928225 -0.89270884 128.0 +18.364832 29.804996 -0.89236403 128.0 +18.525122 29.656143 -0.89124995 128.0 +18.713692 29.552896 -0.89159477 128.0 +18.795853 29.283566 -0.88674057 128.0 +18.902128 29.055405 -0.88318604 128.0 +19.074551 28.930531 -0.8829208 128.0 +19.258371 28.822922 -0.88323915 128.0 +19.424774 28.689312 -0.88276166 128.0 +13.779795 20.086023 -0.60975718 128.0 +13.893081 19.987141 -0.60930622 128.0 +14.01776 19.904787 -0.60941231 128.0 +14.136146 19.813519 -0.60925317 128.0 +20.592575 28.490711 -0.89621025 128.0 +20.799486 28.408182 -0.8976692 128.0 +21.029976 28.3563 -0.90018916 128.0 +21.263613 28.306652 -0.90284175 128.0 +21.536171 28.306118 -0.90719199 128.0 +21.821114 28.318344 -0.91204625 128.0 +22.334574 28.619715 -0.92671508 128.0 +22.607697 28.606047 -0.93090618 128.0 +22.910851 28.626781 -0.93634397 128.0 +23.204403 28.631666 -0.94133085 128.0 +23.545803 28.691202 -0.94828063 128.0 +23.965471 28.839876 -0.95841348 128.0 +24.436758 29.042601 -0.97056234 128.0 +24.589216 28.862436 -0.96952784 128.0 +24.809597 28.76173 -0.97130507 128.0 +24.972458 28.593903 -0.97077459 128.0 +31.291981 35.388794 -1.2169083 128.0 +31.417185 35.094086 -1.2132742 128.0 +31.629913 34.898434 -1.2131947 128.0 +31.830608 34.689705 -1.2126907 128.0 +32.097973 34.553066 -1.2148393 128.0 +13.601102 14.463413 -0.49023148 128.0 +13.696485 14.386926 -0.49049675 128.0 +32.670269 33.895935 -1.2126111 128.0 +19.443209 19.927166 -0.70217335 128.0 +19.556684 19.798956 -0.70185506 128.0 +19.676386 19.677172 -0.70180202 128.0 +19.786085 19.545532 -0.70140415 128.0 +33.690353 32.873642 -1.2124519 128.0 +33.884949 32.660057 -1.2122133 128.0 +34.082539 32.449463 -1.2121336 128.0 +15.240884 14.334245 -0.51858765 128.0 +15.276548 14.192154 -0.51670432 128.0 +15.341982 14.078552 -0.51593506 128.0 +15.427337 13.983479 -0.51590854 128.0 +15.573177 13.942563 -0.51805717 128.0 +15.700372 13.883826 -0.51954257 128.0 +15.910253 13.896384 -0.52394593 128.0 +18.11924 15.63061 -0.59837759 128.0 +18.102947 15.423843 -0.59447825 128.0 +17.830088 15.003553 -0.5817458 128.0 +17.919506 14.891951 -0.58166623 128.0 +18.304962 15.023331 -0.59177262 128.0 +18.114107 14.681629 -0.5821172 128.0 +18.207752 14.57333 -0.58224982 128.0 +18.344671 14.499144 -0.58386791 128.0 +20.199385 15.764521 -0.64331239 128.0 +18.400066 14.179582 -0.57980943 128.0 +25.694588 19.550257 -0.82013404 128.0 +18.46958 13.875267 -0.57638758 128.0 +18.523857 13.739051 -0.57537961 128.0 +18.600552 13.619817 -0.57514089 128.0 +21.679834 15.670882 -0.67323363 128.0 +21.84882 15.589816 -0.67562097 128.0 +22.111614 15.573456 -0.68105876 128.0 +20.98126 14.58564 -0.64145559 128.0 +44.937477 30.830542 -1.4094863 128.0 +21.305183 14.426268 -0.64615071 128.0 +21.478912 14.352472 -0.64888287 128.0 +21.495634 14.173638 -0.64662814 128.0 +21.586388 14.044203 -0.64676076 128.0 +21.784044 13.983302 -0.6502887 128.0 +21.855921 13.840817 -0.64986432 128.0 +0 0 -0 128.0 +31.901608 19.6576 -0.95772386 128.0 +20.038797 12.179303 -0.58564514 128.0 +20.042841 12.013978 -0.58346999 128.0 +20.028402 11.838891 -0.58076435 128.0 +19.997889 11.655878 -0.57760781 128.0 +19.985823 11.485143 -0.57506132 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +19.989786 11.003018 -0.56888074 128.0 +19.985746 10.841551 -0.56673217 128.0 +20.028971 10.706466 -0.56604248 128.0 +20.048294 10.559147 -0.56466317 128.0 +20.055029 10.406011 -0.56293899 128.0 +20.116722 10.28185 -0.56288594 128.0 +20.207111 10.172155 -0.56370819 128.0 +0 0 -0 128.0 +20.749058 10.12773 -0.5760693 128.0 +21.016247 10.098932 -0.5821172 128.0 +21.400431 10.122366 -0.59158695 128.0 +21.729492 10.115305 -0.59941208 128.0 +22.358276 10.241533 -0.61596423 128.0 +22.274874 10.038444 -0.61172009 128.0 +22.518827 9.9825945 -0.61702526 128.0 +22.75285 9.9197321 -0.62203866 128.0 +24.894367 10.671969 -0.68211979 128.0 +24.956617 10.517855 -0.68204021 128.0 +0 0 -0 128.0 +26.320801 10.714285 -0.71747881 128.0 +26.555904 10.620504 -0.72233307 128.0 +26.956463 10.589293 -0.73190892 128.0 +26.571383 10.250294 -0.71912342 128.0 +0 0 -0 128.0 +59.368942 22.067822 -1.6440814 128.0 +33.866692 12.353024 -0.91997749 128.0 +33.908909 12.133203 -0.91904908 128.0 +33.921406 11.9034 -0.9173249 128.0 +33.888882 11.658944 -0.91438049 128.0 +33.887787 11.426514 -0.91236454 128.0 +33.895565 11.197987 -0.91064036 128.0 +33.861866 10.95687 -0.9078021 128.0 +33.883671 10.734703 -0.90655535 128.0 +33.922165 10.518307 -0.90581268 128.0 +33.974586 10.306484 -0.90549433 128.0 +34.043896 10.099815 -0.90568 128.0 +34.738888 10.074481 -0.92318714 128.0 +35.561787 10.076961 -0.94419563 128.0 +38.991146 10.790594 -1.0369302 128.0 +39.071098 10.555057 -1.037328 128.0 +39.151558 10.319452 -1.037779 128.0 +39.215111 10.079278 -1.0378056 128.0 +0 0 -0 128.0 +54.281136 13.243236 -1.4460125 128.0 +55.39817 13.156122 -1.4742891 128.0 +56.475227 13.046341 -1.5014516 128.0 +58.217209 13.072969 -1.5466782 128.0 +0 0 -0 128.0 +54.582611 11.555172 -1.4438639 128.0 +54.626045 11.214615 -1.4431477 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +54.787834 10.200642 -1.4421928 128.0 +0 0 -0 128.0 +58.494049 10.149547 -1.538747 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +17.308853 0.74468386 -0.42312098 128.0 +17.154259 0.63261795 -0.41890335 128.0 +17.169807 0.52771717 -0.41922167 128.0 +17.318628 0.42593384 -0.42309445 128.0 +17.31192 0.31949532 -0.42285573 128.0 +17.272572 0.21276329 -0.42176816 128.0 +17.266556 0.106734 -0.42158249 128.0 +17.274881 0.00078622595 -0.42179468 128.0 +17.285557 -0.10527819 -0.42208648 128.0 +17.275591 -0.21122779 -0.42184773 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +17.148874 -0.52549684 -0.41866463 128.0 +0 -0 -0 128.0 +17.150122 -0.73628682 -0.41890335 128.0 +17.055422 -0.83708763 -0.41651604 128.0 +17.024014 -0.94028687 -0.41582635 128.0 +0 -0 -0 128.0 +17.306414 -1.1690897 -0.42367804 128.0 +17.327827 -1.2773911 -0.42444727 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +17.403906 -1.6055888 -0.42717946 128.0 +0 -0 -0 128.0 +27.473154 -2.8756194 -0.69639075 128.0 +27.435122 -3.0419333 -0.69586021 128.0 +27.417925 -3.2104473 -0.69591326 128.0 +27.400686 -3.3789873 -0.69599283 128.0 +27.394308 -3.5489783 -0.69639075 128.0 +25.40082 -3.4492354 -0.64360422 128.0 +27.39323 -3.8912096 -0.69758439 128.0 +27.369827 -4.0593648 -0.69761091 128.0 +27.363174 -4.2301292 -0.69811493 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +19.37171 -3.3605654 -0.48511198 128.0 +19.297598 -3.4698088 -0.48367959 128.0 +15.277112 -2.8435369 -0.37574574 128.0 +15.136675 -2.913594 -0.37243 128.0 +15.127337 -3.0081713 -0.37266874 128.0 +14.943105 -3.066956 -0.36818585 128.0 +14.919116 -3.1575522 -0.36805323 128.0 +13.37291 -2.9160271 -0.32659325 128.0 +13.286491 -2.9826937 -0.32473645 128.0 +13.222162 -3.0535858 -0.32348973 128.0 +13.05048 -3.0983913 -0.31932515 128.0 +13.072011 -3.1883616 -0.32043925 128.0 +11.099257 -2.7792773 -0.26701611 128.0 +11.002604 -2.8269222 -0.26484099 128.0 +13.177369 -3.4722595 -0.32500172 128.0 +13.030359 -3.5191548 -0.32155335 128.0 +13.021046 -3.6025076 -0.32189816 128.0 +13.029473 -3.691057 -0.32274699 128.0 +7.9392433 -2.3013146 -0.18274334 128.0 +7.9335985 -2.3525445 -0.18298207 128.0 +7.9209275 -2.4017603 -0.18303512 128.0 +7.8735781 -2.4402506 -0.18213324 128.0 +7.9070582 -2.5039141 -0.18348606 128.0 +7.9324427 -2.5656176 -0.18462668 128.0 +7.922246 -2.6161234 -0.18478583 128.0 +25.496387 -8.5961332 -0.67737168 128.0 +25.411024 -8.7413568 -0.6764698 128.0 +37.167397 -13.041692 -1.0086005 128.0 +37.185501 -13.304865 -1.0113857 128.0 +10.908256 -3.9777362 -0.27149898 128.0 +7.2246528 -2.6844172 -0.16791536 128.0 +7.2117848 -2.7301126 -0.16802147 128.0 +7.1855707 -2.7707138 -0.16775621 128.0 +7.095861 -2.7862422 -0.16568719 128.0 +7.1436033 -2.8557136 -0.16754401 128.0 +7.1389089 -2.9047687 -0.16791536 128.0 +32.548946 -13.481788 -0.89825279 128.0 +0 -0 -0 128.0 +9.1000395 -3.8998389 -0.22611317 128.0 +19.574535 -8.5327148 -0.53002036 128.0 +9.0103722 -3.9929864 -0.22491951 128.0 +5.6382174 -2.5396287 -0.12748991 128.0 +5.5943546 -2.5612712 -0.1266676 128.0 +27.773024 -12.927183 -0.77628672 128.0 +28.342915 -13.404671 -0.79535884 128.0 +5.3174024 -2.5538387 -0.11993003 128.0 +27.648056 -13.493645 -0.77976161 128.0 +27.543243 -13.652381 -0.77912498 128.0 +5.3203888 -2.6769021 -0.12144201 128.0 +5.2940722 -2.7044926 -0.12115022 128.0 +26.182571 -13.583856 -0.74610025 128.0 +5.3648534 -2.8242235 -0.12428027 128.0 +24.772612 -13.240613 -0.7087518 128.0 +4.4651585 -2.4208217 -0.098178796 128.0 +4.4327054 -2.4385331 -0.097648278 128.0 +4.4089317 -2.4608119 -0.097383015 128.0 +4.3954892 -2.4888036 -0.09743607 128.0 +3.725754 -2.1396832 -0.077409022 128.0 +3.7237825 -2.1690478 -0.077753857 128.0 +3.7043796 -2.1882949 -0.077568173 128.0 +3.6968846 -2.214581 -0.077753857 128.0 +4.5468693 -2.762126 -0.10457154 128.0 +4.54175 -2.7973149 -0.1049429 128.0 +13.67407 -8.5409584 -0.39121035 128.0 +3.5122073 -2.2228115 -0.073695391 128.0 +3.5069146 -2.2497201 -0.073960654 128.0 +4.1256728 -2.682785 -0.093987703 128.0 +3.462352 -2.2815802 -0.073430136 128.0 +4.0184665 -2.6837814 -0.091626897 128.0 +3.4696856 -2.3479974 -0.074570753 128.0 +3.4527404 -2.3675463 -0.074491173 128.0 +3.4578476 -2.4023817 -0.075127795 128.0 +3.4324172 -2.4160702 -0.074782953 128.0 +4.9180593 -3.5077624 -0.1236967 128.0 +4.8980637 -3.5390444 -0.12374976 128.0 +4.8819022 -3.5731657 -0.12393544 128.0 +4.8004704 -3.5589857 -0.12197252 128.0 +3.3167274 -2.490201 -0.07345666 128.0 +4.7572303 -3.6182323 -0.12199905 128.0 +3.2867107 -2.5313249 -0.073483184 128.0 +4.8306789 -3.7685931 -0.12597793 128.0 +4.5847325 -3.6221235 -0.11844458 128.0 +4.7653379 -3.8125975 -0.12534131 128.0 +4.6354604 -3.7555327 -0.12170726 128.0 +4.4971938 -3.6894109 -0.11775491 128.0 +4.2807288 -3.5559289 -0.11107038 128.0 +3.8243754 -3.2165508 -0.096003674 128.0 +3.7984796 -3.2347698 -0.095791467 128.0 +3.1412265 -2.7082241 -0.07345666 128.0 +3.107233 -2.7123227 -0.072846569 128.0 +3.0688152 -2.7121334 -0.072077312 128.0 +3.4207828 -3.0609691 -0.085207634 128.0 +3.3989739 -3.0792155 -0.08510153 128.0 +3.3034158 -3.0297227 -0.082342833 128.0 +3.8618803 -3.5860727 -0.10324524 128.0 +3.863106 -3.6316166 -0.10409407 128.0 +3.243469 -3.0865681 -0.082210205 128.0 +3.4641404 -3.3374279 -0.091043331 128.0 +3.4629147 -3.3774705 -0.091759525 128.0 +2.9144402 -2.877383 -0.072077312 128.0 +2.8847136 -2.8831947 -0.071626373 128.0 +2.8318439 -2.8652809 -0.07030008 128.0 +2.8079264 -2.8761632 -0.070061348 128.0 +2.7916131 -2.8947778 -0.070114397 128.0 +4.0331173 -4.2346134 -0.1185772 128.0 +4.0221243 -4.2753015 -0.11916077 128.0 +3.9012477 -4.1980953 -0.11547367 128.0 +3.3124416 -3.6083891 -0.093377605 128.0 +4.0810375 -4.5011964 -0.12462511 128.0 +4.0553422 -4.5283871 -0.12470469 128.0 +4.0678725 -4.5988669 -0.12632276 128.0 +3.3945124 -3.8851101 -0.10030086 128.0 +3.9824021 -4.6151338 -0.12515563 128.0 +3.950768 -4.6356778 -0.12502299 128.0 +12.3539 -14.680944 -0.47253871 128.0 +3.8054178 -4.5777097 -0.12136243 128.0 +3.6142805 -4.4023757 -0.11454527 128.0 +3.5714648 -4.4050541 -0.11388212 128.0 +3.5556118 -4.4409337 -0.11435959 128.0 +3.5413122 -4.4791374 -0.11491663 128.0 +3.4897771 -4.470047 -0.11388212 128.0 +11.17581 -14.501831 -0.44922248 128.0 +2.716192 -3.5681934 -0.082395889 128.0 +2.85395 -3.7973981 -0.089451775 128.0 +2.9348035 -3.9553523 -0.094093807 128.0 +2.9730752 -4.0587826 -0.096905552 128.0 +2.9574842 -4.0899115 -0.097329967 128.0 +10.32559 -14.470433 -0.43511069 128.0 +2.9335492 -4.1634927 -0.098550156 128.0 +2.9182172 -4.1961889 -0.099027619 128.0 +2.911077 -4.2412181 -0.09990298 128.0 +1.4810808 -2.1854467 -0.033455614 128.0 +1.4620897 -2.1861815 -0.033190355 128.0 +1.4442459 -2.1884348 -0.032978147 128.0 +1.4302456 -2.1964176 -0.032951623 128.0 +1.414042 -2.2009456 -0.032818995 128.0 +1.396767 -2.2036686 -0.032633312 128.0 +1.3932817 -2.2283063 -0.033137303 128.0 +1.3853511 -2.2461753 -0.03342909 128.0 +1.37933 -2.2674472 -0.033826977 128.0 +1.3700165 -2.2835848 -0.034065712 128.0 +1.3590306 -2.2971117 -0.034224864 128.0 +1.3569905 -2.3261356 -0.034861486 128.0 +1.3765583 -2.3933573 -0.03666525 128.0 +1.3736719 -2.4226336 -0.037301868 128.0 +1.4923176 -2.6701634 -0.044569965 128.0 +1.4378281 -2.6100838 -0.042474419 128.0 +1.3750778 -2.5327432 -0.039874882 128.0 +1.2393523 -2.3163195 -0.033110779 128.0 +1.223719 -2.3212268 -0.033031199 128.0 +1.4308851 -2.755501 -0.045790154 128.0 +1.1223571 -2.1936457 -0.028787058 128.0 +7.155107 -14.212941 -0.38563991 128.0 +7.0593281 -14.239559 -0.38513589 128.0 +1.0861737 -2.2229166 -0.029052317 128.0 +1.0958914 -2.2781956 -0.030484715 128.0 +1.0912944 -2.3047581 -0.031068284 128.0 +6.5347948 -14.036938 -0.37426028 128.0 +6.4493752 -14.078588 -0.37431332 128.0 +6.3296041 -14.044072 -0.37216476 128.0 +6.2295394 -14.051574 -0.37126285 128.0 +1.0400561 -2.382967 -0.032394581 128.0 +1.0230519 -2.383791 -0.032235425 128.0 +5.6864634 -13.491384 -0.35189897 128.0 +1.313516 -3.1682644 -0.054411069 128.0 +1.2786002 -3.1383028 -0.053323507 128.0 +1.2730529 -3.1804318 -0.054304969 128.0 +5.5681829 -14.173046 -0.36746967 128.0 +5.338294 -13.836674 -0.35693887 128.0 +5.4090614 -14.280508 -0.36861026 128.0 +1.1169524 -3.0017617 -0.048389692 128.0 +1.0865247 -2.9756889 -0.047461286 128.0 +1.0928286 -3.0510087 -0.049397677 128.0 +1.1796665 -3.3585594 -0.057859436 128.0 +1.1401764 -3.3109081 -0.056320935 128.0 +4.8146191 -14.276683 -0.363199 128.0 +4.7128186 -14.263242 -0.36200532 128.0 +4.3519564 -13.447308 -0.33845034 128.0 +4.4209065 -13.952152 -0.35176632 128.0 +1.0457752 -3.3691499 -0.05701061 128.0 +0.98039782 -3.2281852 -0.05292562 128.0 +0.96142447 -3.2370152 -0.0530052 128.0 +0.96938449 -3.3388634 -0.055657789 128.0 +0.92571646 -3.2629964 -0.053403087 128.0 +0.89608014 -3.2339313 -0.052448153 128.0 +3.6837578 -13.633069 -0.33813202 128.0 +3.5954518 -13.638017 -0.33765456 128.0 +3.493788 -13.590112 -0.33574468 128.0 +0.85287666 -3.4004023 -0.056427039 128.0 +3.3497345 -13.726166 -0.33831769 128.0 +3.2545943 -13.700748 -0.33707097 128.0 +3.1470685 -13.619164 -0.33431229 128.0 +3.1729453 -14.125899 -0.34757525 128.0 +0.68298632 -3.1260972 -0.048310116 128.0 +1.8046637 -8.5198641 -0.19449431 128.0 +1.7276282 -8.4103317 -0.19123162 128.0 +1.6687759 -8.3844976 -0.19025017 128.0 +1.6061484 -8.3366632 -0.18868513 128.0 +0.55219418 -2.9598343 -0.043296721 128.0 +0.52676886 -2.9228282 -0.04220916 128.0 +2.4409678 -14.062662 -0.34213743 128.0 +2.3569427 -14.091178 -0.34250879 128.0 +2.2761524 -14.140905 -0.34346372 128.0 +0.44327357 -2.8597941 -0.040193193 128.0 +2.0967307 -14.129208 -0.34242922 128.0 +0.42923418 -3.0134752 -0.044172075 128.0 +1.9678437 -14.482738 -0.35123581 128.0 +0.52360708 -4.0326805 -0.071308061 128.0 +1.7941298 -14.53953 -0.35213768 128.0 +1.7062782 -14.562179 -0.352456 128.0 +1.6084118 -14.49587 -0.3504135 128.0 +1.5221422 -14.531316 -0.35110319 128.0 +1.4047383 -14.253869 -0.34346372 128.0 +1.3304789 -14.40556 -0.34728345 128.0 +1.2507232 -14.514045 -0.34996256 128.0 +1.1512909 -14.391905 -0.3465142 128.0 +1.046715 -14.178374 -0.34065199 128.0 +0.9684602 -14.314188 -0.34410036 128.0 +0.17702475 -2.8634863 -0.039530046 128.0 +0.15956169 -2.8665149 -0.039583094 128.0 +0.14010701 -2.829499 -0.038575113 128.0 +0.18392022 -4.2544904 -0.076401033 128.0 +0.10243235 -2.7510877 -0.036453042 128.0 +0.085090429 -2.7366767 -0.036055151 128.0 +0.068223365 -2.7341492 -0.035975575 128.0 +0.051831603 -2.7555053 -0.036532618 128.0 +0.17558622 -14.237868 -0.34123555 128.0 +0.088220999 -14.238677 -0.34123555 128.0 +0.00085145648 -14.284934 -0.34245574 128.0 +-0.085475832 -14.069751 -0.33675268 128.0 +-0.032877129 -2.7687931 -0.036877453 128.0 +-0.049681287 -2.7585444 -0.036612198 128.0 +-0.067367651 -2.7891674 -0.0374345 128.0 +-0.45826423 -14.959677 -0.36054641 128.0 +-0.54853696 -14.915626 -0.35945883 128.0 +-0.63699812 -14.84107 -0.35757551 128.0 +-0.73153335 -14.907771 -0.35945883 128.0 +-0.82497907 -14.938934 -0.36041376 128.0 +-0.16845047 -2.7598536 -0.036771353 128.0 +-0.18639308 -2.7737286 -0.03716924 128.0 +-0.20142272 -2.7456155 -0.036453042 128.0 +-0.21778765 -2.738349 -0.036293887 128.0 +-0.23355629 -2.7250097 -0.035975575 128.0 +-0.24953705 -2.7155619 -0.035763368 128.0 +-0.2656067 -2.7080107 -0.035604212 128.0 +-0.28200951 -2.7043417 -0.035551161 128.0 +-0.30091205 -2.7234249 -0.036108203 128.0 +-0.31622142 -2.7096131 -0.035789892 128.0 +-1.8972207 -15.388997 -0.37484387 128.0 +-1.9926379 -15.384997 -0.37505606 128.0 +-2.0898266 -15.393283 -0.37561309 128.0 +-2.1877544 -15.404913 -0.37627625 128.0 +-2.2974927 -15.494037 -0.37903494 128.0 +-2.4061153 -15.567572 -0.38139576 128.0 +-2.5117555 -15.61568 -0.38309342 128.0 +-2.5452008 -15.227282 -0.37306663 128.0 +-2.636193 -15.197589 -0.37269527 128.0 +-2.8046033 -15.599268 -0.38396877 128.0 +-2.9048409 -15.606335 -0.3846319 128.0 +-3.0215263 -15.697176 -0.38757628 128.0 +-3.1419709 -15.799915 -0.3908655 128.0 +-3.2432816 -15.801882 -0.39144906 128.0 +-3.3741367 -15.942071 -0.39579931 128.0 +-3.3887999 -15.540162 -0.38545421 128.0 +-3.4974506 -15.578573 -0.38707229 128.0 +-3.5740707 -15.475004 -0.38484412 128.0 +-3.6393886 -15.328291 -0.38144881 128.0 +-3.7295814 -15.290133 -0.38102439 128.0 +-3.9149089 -15.632532 -0.39102465 128.0 +-3.9634709 -15.424263 -0.38598472 128.0 +-4.0483556 -15.362922 -0.38497674 128.0 +-4.1255975 -15.275064 -0.38325256 128.0 +-4.2147131 -15.233084 -0.38280162 128.0 +-4.3214569 -15.254063 -0.38410139 128.0 +-4.4358559 -15.299267 -0.38609084 128.0 +-4.5137243 -15.218092 -0.38460538 128.0 +-4.6165929 -15.221678 -0.38548073 128.0 +-4.7353659 -15.275177 -0.38776198 128.0 +-4.9262218 -15.552689 -0.3963033 128.0 +-5.0769558 -15.693366 -0.40107796 128.0 +-5.2101569 -15.773923 -0.40420803 128.0 +-5.8140693 -17.245882 -0.44633114 128.0 +-5.9366899 -17.259037 -0.44771048 128.0 +-6.0461187 -17.23266 -0.44800228 128.0 +-6.1540999 -17.201826 -0.44818795 128.0 +-6.262958 -17.173134 -0.44845322 128.0 +-6.3811007 -17.16905 -0.44943467 128.0 +-6.2657485 -16.547165 -0.43290904 128.0 +-6.849999 -17.760033 -0.46850678 128.0 +-6.9964905 -17.813501 -0.47123894 128.0 +-7.1505761 -17.882545 -0.47444859 128.0 +-7.3491139 -18.056839 -0.48070869 128.0 +-7.4567099 -18.004019 -0.4804965 128.0 +-7.5697575 -17.964375 -0.48068216 128.0 +-7.6892953 -17.93964 -0.4813188 128.0 +-7.8335834 -17.970926 -0.48360002 128.0 +-7.9692259 -17.980097 -0.48527116 128.0 +-8.070775 -17.911722 -0.48471409 128.0 +-7.9719591 -17.406534 -0.47142464 128.0 +-8.7253428 -18.746601 -0.51208884 128.0 +-8.9120131 -18.844524 -0.51654518 128.0 +-9.0499868 -18.83634 -0.51792455 128.0 +-1.6774455 -3.4393554 -0.064941853 128.0 +-1.6772062 -3.3860073 -0.063668609 128.0 +-1.6871635 -3.3542228 -0.063031986 128.0 +-1.7104424 -3.3491483 -0.063191138 128.0 +-1.7387869 -3.3536744 -0.063642085 128.0 +-1.7751703 -3.3730145 -0.064543962 128.0 +-1.8099707 -3.3885067 -0.065339737 128.0 +-4.5490665 -8.3885202 -0.2166169 128.0 +-4.6038265 -8.36658 -0.21680258 128.0 +-4.6604376 -8.3477745 -0.21709438 128.0 +-10.580641 -18.678854 -0.53304428 128.0 +-10.846965 -18.877934 -0.54113466 128.0 +-11.402044 -19.564995 -0.56429178 128.0 +-11.54782 -19.538553 -0.56564462 128.0 +-12.132092 -20.242434 -0.58962399 128.0 +-12.121078 -19.945507 -0.58272725 128.0 +-12.127861 -19.683529 -0.5768916 128.0 +-12.254234 -19.618069 -0.57718337 128.0 +-12.592587 -19.887083 -0.58800596 128.0 +-12.191115 -18.994274 -0.56230235 128.0 +-12.920728 -19.861771 -0.59214395 128.0 +-12.127785 -18.395082 -0.54805791 128.0 +-12.242093 -18.322815 -0.54813749 128.0 +-13.271238 -19.60154 -0.5915339 128.0 +-0 -0 -0 128.0 +-16.417976 -23.619186 -0.72668332 128.0 +-17.421421 -24.737391 -0.76625991 128.0 +-17.426561 -24.424969 -0.75957543 128.0 +-0 -0 -0 128.0 +-16.511951 -22.552624 -0.70509124 128.0 +-18.210846 -24.555315 -0.77461559 128.0 +-18.296926 -24.357594 -0.77177733 128.0 +-18.553177 -24.385679 -0.77647239 128.0 +-18.719542 -24.29355 -0.77721512 128.0 +-18.828274 -24.127008 -0.77549094 128.0 +-18.988977 -24.027496 -0.776048 128.0 +-19.160412 -23.940968 -0.7770825 128.0 +-19.437243 -23.983707 -0.78257334 128.0 +-20.175734 -24.584942 -0.80732203 128.0 +-19.655342 -23.653423 -0.77946985 128.0 +-19.018106 -22.603043 -0.74724084 128.0 +-20.508799 -24.073204 -0.80257386 128.0 +-20.041687 -23.234642 -0.77761304 128.0 +-20.030657 -22.935802 -0.77143246 128.0 +-19.998177 -22.617014 -0.7645092 128.0 +-20.207254 -22.572828 -0.76732099 128.0 +-20.319197 -22.419527 -0.76628643 128.0 +-0 -0 -0 128.0 +-21.645332 -23.301485 -0.80732203 128.0 +-21.535872 -22.900259 -0.79756051 128.0 +-21.910347 -23.013838 -0.80657929 128.0 +-22.024782 -22.851616 -0.80557132 128.0 +-0 -0 -0 128.0 +-20.955406 -21.21489 -0.75466812 128.0 +-20.798193 -20.798931 -0.74389863 128.0 +-21.204922 -20.947004 -0.7543233 128.0 +-21.240753 -20.726442 -0.75090146 128.0 +-21.566183 -20.787186 -0.75822258 128.0 +-21.688257 -20.649641 -0.75803691 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-25.203209 -23.126682 -0.87106371 128.0 +-25.382412 -23.005838 -0.87241656 128.0 +-25.461277 -22.794323 -0.87021488 128.0 +-25.88973 -22.893261 -0.88045388 128.0 +-26.879026 -23.4757 -0.91037512 128.0 +-27.077822 -23.357996 -0.91231149 128.0 +-0 -0 -0 128.0 +-10.24828 -8.6243057 -0.31882116 128.0 +-10.264869 -8.5312338 -0.31757444 128.0 +-10.276838 -8.435113 -0.3161951 128.0 +-10.297337 -8.3467207 -0.31513408 128.0 +-10.442015 -8.3583355 -0.31831717 128.0 +-10.481339 -8.2848091 -0.31791928 128.0 +-28.994385 -22.627897 -0.93934137 128.0 +-0 -0 -0 128.0 +-26.670753 -20.292936 -0.85268128 128.0 +-0 -0 -0 128.0 +-28.355831 -21.030607 -0.90018916 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-21.910666 -15.633941 -0.67763692 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-26.050852 -17.873466 -0.80172503 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-26.158197 -17.018349 -0.79148608 128.0 +-29.655813 -19.035736 -0.8984915 128.0 +-33.736458 -21.363722 -1.0230041 128.0 +-33.990692 -21.233639 -1.0268768 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-20.888342 -12.174825 -0.60495597 128.0 +-20.941851 -12.034474 -0.60431933 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-33.440773 -18.405979 -0.97629195 128.0 +-16.280212 -8.8316774 -0.45487249 128.0 +-16.312939 -8.7203083 -0.45423585 128.0 +-16.36083 -8.6172552 -0.45407671 128.0 +-16.417833 -8.5190067 -0.45420933 128.0 +-16.401255 -8.3830805 -0.45216683 128.0 +-16.555069 -8.333971 -0.4552173 128.0 +-6.9470897 -3.4447172 -0.16916208 128.0 +-6.9779773 -3.4068487 -0.16945387 128.0 +-6.9987502 -3.3639686 -0.16945387 128.0 +-7.0310073 -3.3265176 -0.1697987 128.0 +-39.04771 -18.176092 -1.1062953 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-36.224079 -15.528328 -1.0092106 128.0 +-40.098354 -16.898506 -1.1180463 128.0 +-40.231762 -16.664772 -1.1189216 128.0 +-40.707317 -16.569851 -1.1296382 128.0 +-41.922977 -16.765533 -1.1614957 128.0 +-39.98645 -15.707252 -1.1033775 128.0 +-22.282955 -8.5961723 -0.59715736 128.0 +-22.408199 -8.4868984 -0.59922642 128.0 +-22.389576 -8.3231239 -0.59723693 128.0 +-22.414867 -8.1763391 -0.59652072 128.0 +-45.708988 -16.355047 -1.2516042 128.0 +-46.838528 -16.435692 -1.2805705 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-49.135933 -16.232355 -1.3365401 128.0 +-0 -0 -0 128.0 +-49.204685 -15.58801 -1.3330121 128.0 +-49.27076 -15.276922 -1.3322164 128.0 +-28.410942 -8.6189032 -0.75121975 128.0 +-28.378956 -8.4193983 -0.74888545 128.0 +-28.373436 -8.2286835 -0.74732047 128.0 +-51.716953 -14.654218 -1.3897511 128.0 +-12.676634 -3.509006 -0.31242844 128.0 +-12.715297 -3.4358499 -0.31290591 128.0 +-12.736139 -3.3577657 -0.31290591 128.0 +-12.749725 -3.2778132 -0.31272021 128.0 +-12.776385 -3.2012208 -0.31290591 128.0 +-12.926895 -3.1547501 -0.3164869 128.0 +-52.779922 -12.534389 -1.4028814 128.0 +-53.841526 -12.437985 -1.4297255 128.0 +-0 -0 -0 128.0 +-40.192421 -8.7670813 -1.0549942 128.0 +-40.284576 -8.5285816 -1.0560553 128.0 +-40.312649 -8.2764149 -1.0554187 128.0 +-0 -0 -0 128.0 +-18.431669 -3.5496261 -0.46147743 128.0 +-18.803947 -3.5017793 -0.47094718 128.0 +-18.683403 -3.360858 -0.46712744 128.0 +-18.706629 -3.2466681 -0.46720701 128.0 +-18.631546 -3.1160011 -0.46466053 128.0 +-18.879288 -3.0384586 -0.47081453 128.0 +-52.161602 -8.0648584 -1.3639679 128.0 +-24.063999 -3.5701964 -0.60893488 128.0 +-24.250734 -3.4459534 -0.6133647 128.0 +-24.200102 -3.2874038 -0.61145484 128.0 +-27.673729 -3.5863075 -0.70387101 128.0 +-24.084841 -2.9712203 -0.60734332 128.0 +-29.901943 -3.502434 -0.76228106 128.0 +-29.924858 -3.3191135 -0.76233411 128.0 +-29.81044 -3.121387 -0.75875312 128.0 +-38.500031 -3.7922425 -0.9899528 128.0 +-25.894688 -2.3906682 -0.6534453 128.0 +-25.91584 -2.2323365 -0.65363097 128.0 +-29.895004 -2.3902159 -0.75920403 128.0 +-36.081173 -2.6618819 -0.92342585 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-56.872089 -3.1437817 -1.4748195 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-46.796406 13.532393 -1.8431183 128.0 +-46.34454 13.710425 -1.8283105 128.0 +-46.061554 13.934639 -1.8203281 128.0 +-43.611458 13.486085 -1.724848 128.0 +-43.543133 13.758243 -1.7254651 128.0 +-43.45314 14.023625 -1.7252722 128.0 +-43.500092 14.334079 -1.7307096 128.0 +-0 0 -0 128.0 +-45.469246 15.604053 -1.8183614 128.0 +-41.128498 14.397123 -1.6448314 128.0 +-40.946213 14.615955 -1.6410139 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-33.122765 13.217169 -1.3394573 128.0 +-32.656834 13.264109 -1.323454 128.0 +-32.312561 13.355837 -1.3125023 128.0 +-32.477787 13.65805 -1.3228755 128.0 +-31.352448 13.411806 -1.2791846 128.0 +-31.274147 13.605922 -1.2793773 128.0 +-31.136156 13.773709 -1.2771022 128.0 +-31.024628 13.952613 -1.2759839 128.0 +-30.928434 14.138144 -1.2755597 128.0 +-30.811197 14.313758 -1.2742871 128.0 +-29.140511 13.755658 -1.2067647 128.0 +-29.000597 13.907845 -1.2044125 128.0 +-30.647614 14.929667 -1.2787989 128.0 +-29.533506 14.611849 -1.2347995 128.0 +-30.581745 15.364747 -1.2839663 128.0 +-27.211203 13.881143 -1.1420573 128.0 +-30.359837 15.722793 -1.2826166 128.0 +-29.007694 15.24901 -1.2278968 128.0 +-41.974854 22.395288 -1.799196 128.0 +-41.471977 22.454973 -1.7831926 128.0 +-24.640057 13.537693 -1.0481583 128.0 +-24.492811 13.653111 -1.0453433 128.0 +-24.356386 13.773626 -1.0430295 128.0 +-24.206406 13.885526 -1.0401374 128.0 +-24.11125 14.028264 -1.0397133 128.0 +-24.03849 14.184069 -1.0403302 128.0 +-23.949291 14.330273 -1.040253 128.0 +-23.953176 14.532931 -1.0444179 128.0 +-22.695814 13.961322 -0.99151045 128.0 +-22.412163 13.977117 -0.98252547 128.0 +-22.235603 14.057239 -0.97839928 128.0 +-22.100134 14.162139 -0.97616267 128.0 +-21.94075 14.250669 -0.97284633 128.0 +-21.801983 14.351512 -0.97049403 128.0 +-21.833218 14.564868 -0.97604698 128.0 +-21.784002 14.725981 -0.97793657 128.0 +-21.745173 14.894942 -0.98036599 128.0 +-21.710014 15.067399 -0.98302674 128.0 +-20.530807 14.436475 -0.9317776 128.0 +-20.46463 14.578411 -0.93285733 128.0 +-33.150002 23.922773 -1.5408292 128.0 +-20.338238 14.867956 -0.93544102 128.0 +-32.600971 24.140461 -1.5286821 128.0 +-32.435444 24.327452 -1.5278723 128.0 +-32.213154 24.471008 -1.5243632 128.0 +-31.996662 24.61763 -1.5211624 128.0 +-31.810328 24.78647 -1.5194657 128.0 +-31.581551 24.921146 -1.5157251 128.0 +-31.315632 25.02463 -1.5101722 128.0 +-31.110226 25.174822 -1.5076271 128.0 +-30.877878 25.301905 -1.5037708 128.0 +-30.704361 25.476215 -1.5028839 128.0 +-30.493906 25.619141 -1.5001847 128.0 +-30.301125 25.775982 -1.4984107 128.0 +-30.101509 25.926207 -1.4963284 128.0 +-29.898935 26.072985 -1.4941304 128.0 +-29.727903 26.246691 -1.4935905 128.0 +-21.891926 19.568806 -1.0963612 128.0 +-21.782555 19.712822 -1.0969396 128.0 +-29.087975 26.650383 -1.4856466 128.0 +-21.517763 19.958937 -1.0958213 128.0 +-28.735432 26.98344 -1.4844127 128.0 +-28.438238 27.034637 -1.4774328 128.0 +-14.816531 14.2596 -0.75678223 128.0 +-28.072847 27.350901 -1.4757361 128.0 +-27.901651 27.519831 -1.4755819 128.0 +-14.473764 14.452243 -0.75254041 128.0 +-14.417143 14.573457 -0.7543143 128.0 +-28.454741 29.117897 -1.5343508 128.0 +-14.186556 14.696798 -0.75149924 128.0 +-27.95874 29.321697 -1.5267154 128.0 +-28.086607 29.820026 -1.5440685 128.0 +-28.127722 30.233227 -1.5567939 128.0 +-0 0 -0 128.0 +-29.19523 32.163177 -1.6395099 128.0 +-28.8379 32.163898 -1.6302935 128.0 +-28.518105 32.202591 -1.623198 128.0 +-28.261425 32.310032 -1.619766 128.0 +-27.932642 32.332359 -1.6120921 128.0 +-27.574169 32.316147 -1.6026058 128.0 +-27.385666 32.496956 -1.6032228 128.0 +-26.996538 32.437038 -1.5918084 128.0 +-26.782408 32.58432 -1.5909215 128.0 +-26.500731 32.647957 -1.5859469 128.0 +-15.781321 19.687943 -0.9369449 128.0 +-24.030985 30.359301 -1.4574192 128.0 +-15.588377 19.943892 -0.94006848 128.0 +-24.698191 32.001446 -1.5232062 128.0 +-24.391136 32.007736 -1.5161879 128.0 +-24.178061 32.135239 -1.5151467 128.0 +-23.852316 32.110523 -1.5068558 128.0 +-23.608156 32.192616 -1.5038095 128.0 +-23.342207 32.242973 -1.4993362 128.0 +-23.043415 32.244946 -1.4926649 128.0 +-22.802505 32.325306 -1.4898114 128.0 +-22.494104 32.307159 -1.4824075 128.0 +-22.12793 32.200806 -1.470993 128.0 +-22.017429 32.464985 -1.4770087 128.0 +-21.782242 32.546322 -1.4745407 128.0 +-20.215881 30.610653 -1.3788679 128.0 +-19.988943 30.674679 -1.37613 128.0 +-19.809538 30.811039 -1.3767855 128.0 +-19.640985 30.964918 -1.3782895 128.0 +-20.120081 32.154716 -1.4269935 128.0 +-8.8438931 14.328982 -0.61302233 128.0 +-8.7381382 14.353958 -0.6117112 128.0 +-8.7028799 14.495543 -0.61568314 128.0 +-8.5934086 14.514277 -0.61414063 128.0 +-8.4784937 14.522722 -0.61217397 128.0 +-8.4964066 14.760666 -0.62046486 128.0 +-18.56698 32.717834 -1.4149621 128.0 +-18.412712 32.914864 -1.4186641 128.0 +-18.154434 32.925716 -1.4141909 128.0 +-17.994526 33.114632 -1.4176229 128.0 +-12.41199 23.179457 -0.977898 128.0 +-12.248546 23.215408 -0.97616267 128.0 +-12.087434 23.254663 -0.97462022 128.0 +-10.04722 19.62299 -0.81397003 128.0 +-9.9990692 19.827915 -0.82017857 128.0 +-9.7981033 19.729593 -0.81331444 128.0 +-13.786988 28.194235 -1.1743724 128.0 +-9.6185379 19.979795 -0.81894457 128.0 +-13.367644 28.208694 -1.1678555 128.0 +-13.13095 28.154346 -1.1620711 128.0 +-12.912102 28.134487 -1.1578293 128.0 +-12.692348 28.109364 -1.1534332 128.0 +-12.465684 28.065254 -1.1483045 128.0 +-12.220439 27.974558 -1.1412861 128.0 +-12.01267 27.965466 -1.137777 128.0 +-11.805474 27.954878 -1.1342678 128.0 +-11.59503 27.933577 -1.130373 128.0 +-11.401901 27.951458 -1.1281749 128.0 +-11.190774 27.922575 -1.1240873 128.0 +-10.988119 27.911682 -1.1208096 128.0 +-10.790706 27.911472 -1.1180331 128.0 +-10.587325 27.893078 -1.1145625 128.0 +-10.38109 27.863878 -1.1107062 128.0 +-10.140615 27.737474 -1.1029167 128.0 +-9.9250231 27.673134 -1.0977494 128.0 +-9.7139215 27.616625 -1.0929676 128.0 +-9.5198517 27.60486 -1.0900755 128.0 +-9.3307734 27.605007 -1.0877231 128.0 +-9.1505346 27.629488 -1.0864121 128.0 +-8.9663391 27.640442 -1.0845996 128.0 +-8.7669258 27.601606 -1.0808206 128.0 +-8.5736675 27.578543 -1.0777355 128.0 +-8.3856764 27.569447 -1.0752676 128.0 +-8.1901417 27.532267 -1.0717199 128.0 +-8.0001249 27.510038 -1.0688276 128.0 +-7.8188839 27.515354 -1.0670924 128.0 +-7.6370773 27.516596 -1.0652415 128.0 +-7.4610391 27.536898 -1.0642003 128.0 +-7.2766104 27.524195 -1.0618865 128.0 +-3.7695274 14.621683 -0.54592407 128.0 +-3.6390684 14.482694 -0.5394842 128.0 +-3.5491855 14.500868 -0.53932995 128.0 +-3.4386015 14.431973 -0.53574365 128.0 +-3.3912797 14.630939 -0.54280055 128.0 +-6.195981 27.495556 -1.0508963 128.0 +-6.0292916 27.542816 -1.0512819 128.0 +-5.8624635 27.590046 -1.0517061 128.0 +-5.6930637 27.625498 -1.0517061 128.0 +-3.9438119 19.750103 -0.7404319 128.0 +-3.8233118 19.777855 -0.74058616 128.0 +-3.7073948 19.830408 -0.74174303 128.0 +-4.9830117 27.588739 -1.0451119 128.0 +-4.8182697 27.645376 -1.0461531 128.0 +-4.6508675 27.688215 -1.046693 128.0 +-4.4799314 27.710314 -1.0464616 128.0 +-4.3035288 27.696796 -1.0448805 128.0 +-4.1367459 27.744423 -1.0457289 128.0 +-3.9706707 27.79896 -1.0468858 128.0 +-3.8059752 27.866364 -1.0485826 128.0 +-3.6488678 27.996206 -1.0527472 128.0 +-3.4851408 28.083517 -1.0552924 128.0 +-3.3190753 28.157961 -1.0573747 128.0 +-3.1554434 28.260223 -1.0605754 128.0 +-2.9874325 28.330727 -1.0625806 128.0 +-2.8185759 28.399237 -1.0645473 128.0 +-2.6487134 28.463755 -1.0663983 128.0 +-2.4783378 28.529247 -1.0683264 128.0 +-2.3069365 28.589733 -1.0701002 128.0 +-2.1348121 28.648191 -1.0718355 128.0 +-1.9620569 28.705614 -1.0735708 128.0 +-1.7015777 27.361742 -1.0211648 128.0 +-1.613058 28.788389 -1.0759231 128.0 +-1.4397215 28.864611 -1.0785068 128.0 +-1.2664273 28.960752 -1.0819002 128.0 +-1.0915192 29.04287 -1.0847925 128.0 +-0.9145202 29.087971 -1.0862963 128.0 +-0.73814654 29.176947 -1.0895356 128.0 +-0.56144333 29.302813 -1.0942402 128.0 +-0.38453871 29.528521 -1.1028396 128.0 +-0.20471984 29.729172 -1.1105134 128.0 +-0.022370653 29.820801 -1.1140226 128.0 +0.16142274 29.972261 -1.119884 128.0 +0.34764895 30.172543 -1.1276736 128.0 +0.53524584 30.309717 -1.1330724 128.0 +0.72361249 30.406757 -1.1369671 128.0 +0.91238302 30.475658 -1.1398207 128.0 +1.1009097 30.512426 -1.1414789 128.0 +1.2891212 30.529057 -1.1424044 128.0 +1.4795089 30.58445 -1.1448724 128.0 +1.6694826 30.617701 -1.1465305 128.0 +1.7053078 28.101357 -1.0496622 128.0 +2.0649397 30.892023 -1.158022 128.0 +2.2565603 30.907673 -1.1591403 128.0 +2.4500282 30.942057 -1.1610299 128.0 +2.6461267 31.000118 -1.1638836 128.0 +2.843941 31.066887 -1.1671227 128.0 +3.0521007 31.228859 -1.1741025 128.0 +2.0497854 19.721008 -0.7283619 128.0 +2.1812532 19.803411 -0.73206389 128.0 +2.3008759 19.773773 -0.73144686 128.0 +3.8562329 31.459955 -1.1863654 128.0 +4.050344 31.44462 -1.1867124 128.0 +4.2476211 31.451855 -1.1879849 128.0 +4.4479351 31.47764 -1.1900287 128.0 +4.6560192 31.551577 -1.1940006 128.0 +4.8688231 31.647844 -1.1988981 128.0 +4.734149 29.564075 -1.1186501 128.0 +5.329493 32.022377 -1.2159811 128.0 +5.5478191 32.116096 -1.2209556 128.0 +5.8028955 32.406044 -1.2336812 128.0 +6.0245771 32.493626 -1.2385399 128.0 +6.2345672 32.511986 -1.240738 128.0 +6.472002 32.665237 -1.2482963 128.0 +2.9526541 14.436176 -0.53184885 128.0 +3.0574677 14.495029 -0.5348953 128.0 +3.1467745 14.47795 -0.53497243 128.0 +3.2883532 14.694353 -0.54430449 128.0 +3.3185999 14.413899 -0.53400838 128.0 +7.4011254 31.269133 -1.2032555 128.0 +8.1802816 33.638885 -1.2991984 128.0 +8.3971825 33.630718 -1.3008951 128.0 +3.4409401 13.428851 -0.49818406 128.0 +3.5192101 13.392022 -0.49756706 128.0 +9.3141537 34.581989 -1.3453188 128.0 +9.5264359 34.525154 -1.3453573 128.0 +9.7413588 34.477589 -1.3458201 128.0 +4.1851764 14.471776 -0.54457438 128.0 +4.2177687 14.256099 -0.53693908 128.0 +4.275651 14.132393 -0.53300571 128.0 +4.35461 14.081071 -0.5320031 128.0 +4.4358096 14.037888 -0.53134757 128.0 +4.5117335 13.979024 -0.53007501 128.0 +4.6202512 14.020359 -0.53289008 128.0 +4.6921754 13.950072 -0.53119332 128.0 +4.7789807 13.9248 -0.53134757 128.0 +4.8735757 13.921622 -0.53242731 128.0 +4.9736857 13.932865 -0.53412402 128.0 +5.0672832 13.924622 -0.53504956 128.0 +5.2196846 14.07409 -0.54249203 128.0 +12.765947 33.785755 -1.3570031 128.0 +12.965117 33.686272 -1.3561547 128.0 +5.7119513 14.572915 -0.567249 128.0 +5.7308979 14.361255 -0.55992216 128.0 +5.7888274 14.251755 -0.5568372 128.0 +5.8601346 14.177181 -0.55521756 128.0 +5.9477887 14.142799 -0.55529469 128.0 +6.04035 14.119819 -0.55587316 128.0 +6.1296644 14.088904 -0.55614305 128.0 +6.2341876 14.092151 -0.55787838 128.0 +6.3225875 14.05819 -0.5580712 128.0 +6.4627333 14.137276 -0.56308424 128.0 +15.104807 32.514027 -1.3467456 128.0 +15.299333 32.410793 -1.3463213 128.0 +15.563158 32.452362 -1.3521442 128.0 +15.190478 31.183023 -1.301782 128.0 +15.220679 30.764114 -1.287784 128.0 +15.192039 30.237978 -1.2691199 128.0 +15.357764 30.105915 -1.2674617 128.0 +15.203536 29.357153 -1.2390413 128.0 +15.200655 28.915707 -1.2238864 128.0 +15.243735 28.570629 -1.2128961 128.0 +15.399248 28.440531 -1.211315 128.0 +15.528719 28.264059 -1.2077287 128.0 +15.6279 28.035576 -1.2018673 128.0 +15.753885 27.858265 -1.198281 128.0 +15.908613 27.733339 -1.197047 128.0 +16.068432 27.617929 -1.1962758 128.0 +16.239113 27.521397 -1.1963915 128.0 +16.448208 27.488979 -1.1994379 128.0 +16.624861 27.401207 -1.2000549 128.0 +16.80315 27.315704 -1.2008262 128.0 +16.984716 27.234982 -1.2018673 128.0 +17.172865 27.164038 -1.2034098 128.0 +17.407686 27.165007 -1.2083073 128.0 +17.642075 27.162436 -1.2131275 128.0 +17.886425 27.172195 -1.2186034 128.0 +18.191444 27.269754 -1.2282438 128.0 +18.355627 27.153481 -1.2280511 128.0 +13.743557 20.064207 -0.90173763 128.0 +13.86698 19.980322 -0.90177619 128.0 +13.990464 19.896494 -0.90185332 128.0 +19.367815 27.188042 -1.2514198 128.0 +14.201996 19.679554 -0.89977098 128.0 +19.878086 27.191944 -1.2630656 128.0 +20.135538 27.192331 -1.2689656 128.0 +20.350573 27.13302 -1.2720891 128.0 +20.571075 27.079256 -1.2755597 128.0 +20.706377 26.912924 -1.2736316 128.0 +20.890776 26.810589 -1.2748656 128.0 +21.005989 26.61993 -1.2718192 128.0 +21.449638 26.841824 -1.2891722 128.0 +21.224216 26.228096 -1.2652636 128.0 +21.854048 26.670105 -1.2938381 128.0 +21.746742 26.209446 -1.2774879 128.0 +22.582701 26.879625 -1.3180166 128.0 +22.679871 26.661398 -1.3140062 128.0 +22.968893 26.667862 -1.3214488 128.0 +23.130121 26.524166 -1.3213331 128.0 +13.110271 14.848841 -0.72762924 128.0 +13.061288 14.611665 -0.71953118 128.0 +13.144664 14.524579 -0.7191841 128.0 +13.068155 14.26314 -0.70973635 128.0 +13.144554 14.170964 -0.70911938 128.0 +13.221682 14.079846 -0.70857948 128.0 +13.333987 14.025975 -0.71004486 128.0 +13.441971 13.966935 -0.71127886 128.0 +13.583899 13.942168 -0.71440238 128.0 +13.686733 13.876343 -0.71536642 128.0 +13.890234 13.910897 -0.72184491 128.0 +31.600235 31.261948 -1.678612 128.0 +14.965378 14.624271 -0.7707032 128.0 +14.849932 14.334379 -0.75971299 128.0 +14.850824 14.160242 -0.75508553 128.0 +14.87851 14.013357 -0.75196201 128.0 +14.953241 13.911591 -0.75138354 128.0 +15.013304 13.796588 -0.75007242 128.0 +15.091757 13.698835 -0.74976397 128.0 +15.168831 13.599973 -0.74941689 128.0 +15.275931 13.527843 -0.75065088 128.0 +15.412803 13.481224 -0.75342733 128.0 +15.592018 13.470017 -0.75836331 128.0 +15.818042 13.496681 -0.76565158 128.0 +34.205498 28.825508 -1.689448 128.0 +34.391708 28.623394 -1.6899493 128.0 +34.566692 28.411831 -1.6899493 128.0 +18.110456 14.70024 -0.86336821 128.0 +18.219027 14.603839 -0.86429369 128.0 +35.395638 28.017595 -1.705297 128.0 +18.359076 14.349627 -0.86244273 128.0 +35.863358 27.678812 -1.7114669 128.0 +25.753592 19.625137 -1.2127419 128.0 +36.300129 27.311728 -1.7162873 128.0 +26.09516 19.383894 -1.2176778 128.0 +36.74456 26.946352 -1.7216474 128.0 +36.956154 26.754372 -1.723884 128.0 +37.305794 26.660158 -1.7327148 128.0 +20.897871 14.741336 -0.9501332 128.0 +20.929705 14.572292 -0.94739527 128.0 +21.063196 14.474156 -0.94947761 128.0 +38.187008 25.898132 -1.7438207 128.0 +0 0 -0 128.0 +38.607838 25.497505 -1.748718 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +21.871948 13.873195 -0.96274304 128.0 +0 0 -0 128.0 +31.777578 19.613792 -1.4043189 128.0 +24.417881 14.864996 -1.0663983 128.0 +20.031527 12.026769 -0.86487216 128.0 +20.049915 11.871049 -0.86240417 128.0 +19.998976 11.675755 -0.85688978 128.0 +19.981907 11.501974 -0.85295641 128.0 +19.998222 11.348573 -0.85056555 128.0 +19.96196 11.166622 -0.84589952 128.0 +19.994223 11.024145 -0.84431851 128.0 +19.993885 10.864518 -0.84134918 128.0 +20.023174 10.721821 -0.83972961 128.0 +20.017881 10.561455 -0.83664459 128.0 +20.037977 10.415385 -0.8347165 128.0 +20.098839 10.290872 -0.83460081 128.0 +20.165173 10.169154 -0.83475506 128.0 +20.450035 10.155906 -0.84435707 128.0 +20.675343 10.110129 -0.85137534 128.0 +20.944067 10.082773 -0.86024469 128.0 +21.986187 10.418801 -0.90212321 128.0 +22.110378 10.311999 -0.9047069 128.0 +22.265869 10.218654 -0.90864027 128.0 +22.458382 10.140647 -0.91415465 128.0 +22.569494 10.024558 -0.916237 128.0 +22.822874 9.9698915 -0.92433506 128.0 +24.379251 10.472143 -0.98715293 128.0 +24.338108 10.278039 -0.98275685 128.0 +24.360107 10.111653 -0.98106009 128.0 +24.455002 9.9755793 -0.98244834 128.0 +24.901604 9.9799862 -0.99849021 128.0 +25.131594 9.8936262 -1.0055085 128.0 +25.683002 9.9291344 -1.0258309 128.0 +26.216158 9.9507942 -1.0453433 128.0 +44.215805 16.473488 -1.7841182 128.0 +33.822701 12.365421 -1.352954 128.0 +33.90358 12.15968 -1.3531854 128.0 +33.830498 11.899696 -1.3471698 128.0 +33.9076 11.693521 -1.3473625 128.0 +33.837666 11.43757 -1.3416167 128.0 +33.910053 11.230673 -1.3417325 128.0 +33.875671 10.989092 -1.3375678 128.0 +34.074841 10.823076 -1.3429279 128.0 +33.867706 10.528949 -1.331899 128.0 +33.911594 10.314836 -1.3310893 128.0 +33.96563 10.103999 -1.3307422 128.0 +34.582539 10.056968 -1.3530698 128.0 +35.870083 10.193127 -1.4022751 128.0 +35.925213 9.9709692 -1.4020052 128.0 +36.845066 9.9831991 -1.4363642 128.0 +37.610855 9.9433861 -1.4645146 128.0 +0 0 -0 128.0 +39.784584 9.9973984 -1.5462664 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +17.130878 0.74895418 -0.62493807 128.0 +17.159117 0.644728 -0.62586355 128.0 +0 0 -0 128.0 +17.2936 0.43734726 -0.63079953 128.0 +17.240011 0.33015475 -0.62864006 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +17.263905 -0.093148455 -0.62944984 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +17.265259 -0.41104728 -0.62968123 128.0 +17.249428 -0.51658863 -0.62917989 128.0 +17.260912 -0.62295961 -0.62975836 128.0 +0 -0 -0 128.0 +17.293888 -0.83675796 -0.63137794 128.0 +17.300402 -0.94350821 -0.63184071 128.0 +17.299273 -1.0499463 -0.63203353 128.0 +17.303473 -1.1568059 -0.63245767 128.0 +17.294056 -1.2628107 -0.63238055 128.0 +17.308893 -1.3707151 -0.63326752 128.0 +17.346951 -1.4808884 -0.63507992 128.0 +0 -0 -0 128.0 +17.292664 -1.6902492 -0.63373023 128.0 +17.387321 -1.8072714 -0.63781786 128.0 +27.428604 -3.0209775 -1.028106 128.0 +27.417492 -3.1901431 -1.0284145 128.0 +27.404345 -3.3591645 -1.0286844 128.0 +27.389162 -3.528017 -1.0289158 128.0 +25.403297 -3.4308317 -0.95244694 128.0 +27.391298 -3.870569 -1.0307667 128.0 +27.390759 -4.0420666 -1.0316923 128.0 +27.377293 -4.2118802 -1.032155 128.0 +27.350935 -4.3797851 -1.032155 128.0 +0 -0 -0 128.0 +15.396317 -2.6598115 -0.56616926 128.0 +15.150524 -2.7131951 -0.55718422 128.0 +15.106081 -2.8010056 -0.55610448 128.0 +14.969863 -2.8708725 -0.55143845 128.0 +14.850024 -2.9424753 -0.54742801 128.0 +13.395506 -2.7398334 -0.49085724 128.0 +13.306089 -2.8067155 -0.48800364 128.0 +13.161676 -2.8607204 -0.48299056 128.0 +13.065865 -2.9239697 -0.47990558 128.0 +12.944456 -2.9803228 -0.47581798 128.0 +12.882168 -3.049336 -0.47408268 128.0 +12.873896 -3.1309192 -0.47450686 128.0 +12.840869 -3.2064643 -0.47396699 128.0 +10.990481 -2.8162196 -0.40104586 128.0 +13.019938 -3.4214439 -0.48272061 128.0 +12.835636 -3.4573514 -0.47620359 128.0 +12.859453 -3.5485361 -0.47801602 128.0 +12.823976 -3.6235697 -0.47747615 128.0 +7.9471426 -2.2984679 -0.28246704 128.0 +7.9501376 -2.3522897 -0.28316116 128.0 +7.9336414 -2.4004478 -0.28308403 128.0 +7.8786678 -2.4366841 -0.28146443 128.0 +7.9216905 -2.503345 -0.28381673 128.0 +7.9309063 -2.5598838 -0.28481933 128.0 +7.9321327 -2.6141276 -0.28551346 128.0 +25.480364 -8.570097 -1.0006497 128.0 +32.552799 -11.17153 -1.2913703 128.0 +32.016785 -11.207641 -1.2722819 128.0 +31.949293 -11.404553 -1.272359 128.0 +31.85524 -11.591833 -1.271395 128.0 +10.975738 -4.0706863 -0.41496682 128.0 +10.960835 -4.1418405 -0.415391 128.0 +7.1713505 -2.7604349 -0.25975391 128.0 +7.1384616 -2.7981865 -0.25909835 128.0 +7.122086 -2.8423052 -0.25913692 128.0 +7.1026602 -2.8851998 -0.25905979 128.0 +28.776541 -11.894331 -1.1648476 128.0 +28.095074 -11.815023 -1.1393965 128.0 +9.0906878 -3.8890815 -0.34478357 128.0 +19.588549 -8.5222263 -0.78759348 128.0 +8.9929314 -3.9785161 -0.34270123 128.0 +5.5143671 -2.4803205 -0.19655043 128.0 +5.411799 -2.4742284 -0.19284846 128.0 +26.874477 -12.484958 -1.1067729 128.0 +26.029268 -12.287057 -1.073995 128.0 +25.924555 -12.432712 -1.0727611 128.0 +25.810051 -12.573168 -1.0711414 128.0 +5.3333554 -2.6390698 -0.19284846 128.0 +5.3063474 -2.6663618 -0.19238572 128.0 +5.2952275 -2.7015953 -0.19261709 128.0 +3.7967093 -1.9666389 -0.12821819 128.0 +3.7757258 -1.9852486 -0.12783258 128.0 +3.7731714 -2.0135527 -0.12825675 128.0 +3.7774413 -2.0457063 -0.12898944 128.0 +3.7788305 -2.0765443 -0.12960644 128.0 +4.4983115 -2.5078828 -0.16196012 128.0 +4.4123836 -2.4955955 -0.15883659 128.0 +4.3839865 -2.5151644 -0.15825815 128.0 +3.715503 -2.1621234 -0.12910512 128.0 +3.6737664 -2.1681232 -0.12783258 128.0 +3.6363842 -2.1762586 -0.12675282 128.0 +3.599896 -2.1845353 -0.12571165 128.0 +3.5881264 -2.2076299 -0.12578878 128.0 +13.623747 -8.4964952 -0.5828281 128.0 +4.1621442 -2.6316714 -0.15324508 128.0 +4.1425529 -2.6550038 -0.15309082 128.0 +3.4792347 -2.2601881 -0.1233208 128.0 +3.4335837 -2.2606161 -0.12185543 128.0 +3.3506525 -2.2356162 -0.11865477 128.0 +3.3492897 -2.2645276 -0.1192332 128.0 +3.4202459 -2.3431981 -0.1232051 128.0 +4.9302654 -3.422128 -0.19481513 128.0 +4.9296103 -3.4666839 -0.19577919 128.0 +4.8797607 -3.4765747 -0.19442952 128.0 +4.855906 -3.5046966 -0.19431382 128.0 +4.7963953 -3.5067098 -0.1925014 128.0 +4.8550949 -3.5955381 -0.19635762 128.0 +5.4244981 -4.0689349 -0.22489366 128.0 +3.2971721 -2.5051768 -0.1230123 128.0 +4.8569927 -3.7373066 -0.19971253 128.0 +3.2582991 -2.5393078 -0.12262667 128.0 +4.8758736 -3.8480048 -0.20291319 128.0 +4.8521705 -3.8778501 -0.20291319 128.0 +4.829062 -3.9081781 -0.20295176 128.0 +4.8034453 -3.9364684 -0.20287463 128.0 +5.2782941 -4.3799701 -0.22790152 128.0 +15.867697 -13.331332 -0.76299077 128.0 +15.398183 -13.098891 -0.74336261 128.0 +16.12085 -13.885014 -0.78427714 128.0 +3.1335089 -2.7330115 -0.12366785 128.0 +3.6582685 -3.2303438 -0.15154833 128.0 +3.0572691 -2.7333004 -0.12146981 128.0 +3.0463676 -2.7573719 -0.1217783 128.0 +3.3417878 -3.0622239 -0.13812868 128.0 +3.8855941 -3.6045544 -0.16774446 128.0 +3.3017726 -3.10095 -0.13801299 128.0 +3.4615693 -3.2912042 -0.14753786 128.0 +3.4787495 -3.3484132 -0.14954309 128.0 +3.4466867 -3.3585384 -0.14892611 128.0 +3.3890195 -3.3431358 -0.14692087 128.0 +4.1356678 -4.1299219 -0.18876086 128.0 +3.5304604 -3.5691679 -0.15694705 128.0 +2.7842503 -2.8496552 -0.11695803 128.0 +4.0908732 -4.2384176 -0.19053473 128.0 +2.7449334 -2.8792686 -0.11672665 128.0 +4.2358704 -4.4977908 -0.20164065 128.0 +3.3383176 -3.5887253 -0.15235814 128.0 +7.5509739 -8.2171593 -0.39387327 128.0 +7.656229 -8.4349899 -0.40281972 128.0 +3.3877659 -3.7790198 -0.15906796 128.0 +4.0826583 -4.6106472 -0.2008694 128.0 +4.0615282 -4.6438847 -0.20129359 128.0 +4.0257711 -4.6604009 -0.2008694 128.0 +3.9951541 -4.682734 -0.20075372 128.0 +3.988884 -4.7339034 -0.20210339 128.0 +11.344852 -13.631495 -0.64761263 128.0 +3.45207 -4.2004457 -0.17302749 128.0 +11.208207 -13.808479 -0.64954072 128.0 +3.5733864 -4.4584627 -0.18370922 128.0 +3.563328 -4.5022426 -0.18478896 128.0 +2.9436445 -3.7666488 -0.14769211 128.0 +2.8179078 -3.6517432 -0.14121366 128.0 +2.8996229 -3.8056674 -0.14784636 128.0 +2.8912368 -3.8433497 -0.14881042 128.0 +10.289147 -13.851862 -0.62910277 128.0 +10.224051 -13.942132 -0.63041389 128.0 +10.094363 -13.943897 -0.62752175 128.0 +9.9208841 -13.882812 -0.62169886 128.0 +9.8009539 -13.894431 -0.61938512 128.0 +1.5002177 -2.1553414 -0.064551979 128.0 +2.9425623 -4.2826614 -0.16373399 128.0 +2.9078159 -4.2882309 -0.16315556 128.0 +1.446396 -2.1618295 -0.063587926 128.0 +1.4386109 -2.179002 -0.063973546 128.0 +1.4208492 -2.1810906 -0.063665047 128.0 +2.7898126 -4.3398094 -0.16230719 128.0 +1.4078933 -2.2203016 -0.064667664 128.0 +1.3990138 -2.2365222 -0.065014727 128.0 +1.386314 -2.2467649 -0.065091848 128.0 +1.3751001 -2.2594967 -0.065284662 128.0 +1.3591528 -2.2644649 -0.065130413 128.0 +1.34676 -2.2753413 -0.065246098 128.0 +1.356957 -2.3249834 -0.06709709 128.0 +1.5625123 -2.7151809 -0.084103025 128.0 +1.5640711 -2.7568727 -0.085529827 128.0 +1.5642006 -2.7969403 -0.086879499 128.0 +1.5199898 -2.7574825 -0.084720016 128.0 +1.3718349 -2.5253086 -0.07411541 128.0 +1.2152702 -2.2702878 -0.062585309 128.0 +1.196654 -2.2688639 -0.062199686 128.0 +1.2698151 -2.4437366 -0.069487944 128.0 +6.7572341 -13.197683 -0.53539658 128.0 +1.3706689 -2.71877 -0.080709547 128.0 +6.5983253 -13.286771 -0.53570509 128.0 +6.5162358 -13.326109 -0.53566653 128.0 +1.0685532 -2.220437 -0.058304902 128.0 +1.0561925 -2.2296607 -0.058420587 128.0 +1.4086934 -3.0212538 -0.091854028 128.0 +6.1151257 -13.324898 -0.52899528 128.0 +6.027493 -13.349419 -0.52845538 128.0 +5.9118013 -13.310354 -0.52525473 128.0 +5.8364196 -13.361029 -0.52587175 128.0 +5.6083999 -13.056881 -0.51160371 128.0 +5.5235138 -13.080002 -0.51114094 128.0 +5.5998416 -13.491113 -0.52691293 128.0 +1.2870582 -3.1561284 -0.094746195 128.0 +5.4405551 -13.575511 -0.52760702 128.0 +1.1439061 -2.9066932 -0.083755963 128.0 +1.1437061 -2.9593265 -0.085645512 128.0 +5.2347884 -13.792 -0.53250444 128.0 +5.1368065 -13.788278 -0.53103906 128.0 +4.9896584 -13.64873 -0.52402073 128.0 +1.1587864 -3.2319963 -0.095710248 128.0 +1.1664547 -3.3172846 -0.098910913 128.0 +1.0760334 -3.1212785 -0.090620033 128.0 +4.6055207 -13.626023 -0.51827496 128.0 +4.4772139 -13.519327 -0.51279914 128.0 +4.3843093 -13.516129 -0.51156515 128.0 +4.2135658 -13.266589 -0.50038213 128.0 +4.0872889 -13.148108 -0.49455923 128.0 +0.97757578 -3.2151737 -0.09289521 128.0 +0.95982397 -3.2278159 -0.093165144 128.0 +0.96009165 -3.3027287 -0.095941626 128.0 +0.92369241 -3.2518468 -0.093666449 128.0 +0.90372205 -3.2574532 -0.093666449 128.0 +3.6423876 -13.443957 -0.50072914 128.0 +3.5572743 -13.456393 -0.50034356 128.0 +0.86556423 -3.3586857 -0.097059928 128.0 +0.84713131 -3.3726556 -0.097406983 128.0 +3.267643 -13.350707 -0.49363372 128.0 +3.2116055 -13.479374 -0.4979527 128.0 +3.1279345 -13.494932 -0.49779844 128.0 +0.70852733 -3.145803 -0.087650746 128.0 +1.8145413 -8.2904367 -0.29071936 128.0 +1.7592763 -8.2808886 -0.28990954 128.0 +1.7245687 -8.3698225 -0.29299453 128.0 +1.6706359 -8.3675079 -0.29249322 128.0 +1.6073128 -8.3157921 -0.2900638 128.0 +1.5588289 -8.3392496 -0.29060367 128.0 +1.5364059 -8.5079584 -0.29685074 128.0 +0.51659715 -2.9661148 -0.079398431 128.0 +0.64522427 -3.8433216 -0.11360312 128.0 +0.49212143 -3.0462143 -0.082290597 128.0 +0.47541562 -3.0620129 -0.08279191 128.0 +2.0516696 -13.761552 -0.50015074 128.0 +1.9950294 -13.968757 -0.50774747 128.0 +1.9092813 -13.980735 -0.50774747 128.0 +1.8228153 -13.987233 -0.50755471 128.0 +1.7404031 -14.02592 -0.50863445 128.0 +1.6592225 -14.078015 -0.51025403 128.0 +1.5689287 -14.053173 -0.50890434 128.0 +1.4795264 -14.032722 -0.50774747 128.0 +1.3894473 -14.001762 -0.50620502 128.0 +1.2959146 -13.928437 -0.50304288 128.0 +1.2103405 -13.935131 -0.50300431 128.0 +1.1260995 -13.958232 -0.50362134 128.0 +1.0373129 -13.923026 -0.5020017 128.0 +0.96263176 -14.086644 -0.50809455 128.0 +0.87785459 -14.119213 -0.50913572 128.0 +0.78947079 -14.093405 -0.50794029 128.0 +0.69416702 -13.921335 -0.50111479 128.0 +0.12196018 -2.7972651 -0.071261808 128.0 +0.10434368 -2.7859783 -0.07079906 128.0 +0.085802197 -2.740623 -0.069025196 128.0 +0.067973003 -2.7011404 -0.06748271 128.0 +0.050957255 -2.6785278 -0.066595778 128.0 +0.034078293 -2.6448183 -0.065284662 128.0 +0.017904507 -2.6529715 -0.065593161 128.0 +0.0016594146 -2.6969986 -0.067289896 128.0 +-0.074633121 -13.81752 -0.49644876 128.0 +-0.15900044 -13.780831 -0.49506053 128.0 +-0.24769813 -14.014384 -0.50412261 128.0 +-0.33451572 -14.047565 -0.5054723 128.0 +-0.41920918 -13.995308 -0.50354421 128.0 +-0.099735767 -2.7541502 -0.069565065 128.0 +-0.59741175 -14.142858 -0.5094828 128.0 +-0.69407463 -14.343534 -0.51738805 128.0 +-0.78598809 -14.410846 -0.52016455 128.0 +-0.87070525 -14.344909 -0.51781225 128.0 +-0.18557112 -2.7707324 -0.070374876 128.0 +-0.20184104 -2.7595754 -0.069989257 128.0 +-0.21995261 -2.7732272 -0.070567682 128.0 +-0.23526521 -2.7519126 -0.069796443 128.0 +-0.2516908 -2.7454417 -0.069603629 128.0 +-1.4228936 -14.556743 -0.52764559 128.0 +-1.5122886 -14.548732 -0.52768415 128.0 +-0.29879192 -2.709553 -0.068408199 128.0 +-0.31471896 -2.7017133 -0.068176828 128.0 +-1.8192132 -14.839785 -0.5401783 128.0 +-1.9181482 -14.88979 -0.54256916 128.0 +-2.0106776 -14.886652 -0.54291624 128.0 +-2.1138654 -14.958136 -0.54619402 128.0 +-2.2193184 -15.037807 -0.54981887 128.0 +-2.3120027 -15.02687 -0.54993457 128.0 +-2.4003706 -14.988721 -0.54900908 128.0 +-2.4954112 -14.992438 -0.54974174 128.0 +-2.5958602 -15.026078 -0.55166984 128.0 +-2.6883619 -15.011835 -0.55174696 128.0 +-2.7756863 -14.969511 -0.55074435 128.0 +-2.8806577 -15.020895 -0.55344373 128.0 +-2.983839 -15.058808 -0.55564177 128.0 +-3.087594 -15.096019 -0.55783981 128.0 +-3.2158377 -15.24594 -0.56451106 128.0 +-3.3437018 -15.384108 -0.57075816 128.0 +-3.4439254 -15.38963 -0.57179934 128.0 +-3.5344784 -15.351655 -0.57114375 128.0 +-3.6088157 -15.246054 -0.5678274 128.0 +-3.7013512 -15.219739 -0.56767315 128.0 +-3.7917635 -15.185107 -0.56721044 128.0 +-3.8446896 -15.004742 -0.56096333 128.0 +-4.032927 -15.347154 -0.57557845 128.0 +-4.1241612 -15.311505 -0.57515424 128.0 +-4.2047443 -15.237748 -0.57322615 128.0 +-4.2908268 -15.185699 -0.57218492 128.0 +-4.3955817 -15.199402 -0.57380456 128.0 +-4.4709024 -15.111777 -0.57137513 128.0 +-4.5291114 -14.970243 -0.56678623 128.0 +-4.6368227 -14.993722 -0.56886858 128.0 +-4.783226 -15.13745 -0.57584834 128.0 +-4.8843036 -15.133492 -0.57688951 128.0 +-4.9604945 -15.052938 -0.57484573 128.0 +-5.066143 -15.061996 -0.57646537 128.0 +-5.3060441 -15.460671 -0.59401119 128.0 +-5.4655166 -15.612679 -0.60156935 128.0 +-5.5652423 -15.590143 -0.60203212 128.0 +-5.9922352 -16.466553 -0.63943744 128.0 +-6.0844731 -16.406054 -0.63847339 128.0 +-6.2012706 -16.411409 -0.64024723 128.0 +-6.2939563 -16.352533 -0.63939887 128.0 +-6.3912582 -16.306164 -0.63909042 128.0 +-6.5467405 -16.405855 -0.64487469 128.0 +-6.6070476 -16.266315 -0.64074856 128.0 +-6.793376 -16.435099 -0.64950216 128.0 +-6.9200444 -16.454823 -0.65208584 128.0 +-7.022058 -16.414808 -0.65220153 128.0 +-7.1864257 -16.518021 -0.65837151 128.0 +-7.3725338 -16.665522 -0.66646957 128.0 +-7.5090795 -16.696522 -0.66970879 128.0 +-7.6579137 -16.751921 -0.67402774 128.0 +-7.9154835 -17.038115 -0.68821865 128.0 +-8.1414442 -17.246763 -0.69920886 128.0 +-1.6569729 -3.4543002 -0.11105801 128.0 +-1.6685096 -3.4243047 -0.11020964 128.0 +-1.6748668 -3.3844464 -0.10893708 128.0 +-1.6825925 -3.3482115 -0.10781878 128.0 +-1.7071917 -3.3458357 -0.10816585 128.0 +-1.7345819 -3.3486075 -0.10874428 128.0 +-1.7578857 -3.3432081 -0.10897565 128.0 +-1.8000033 -3.3729138 -0.11074951 128.0 +-4.5497036 -8.4021549 -0.33194235 128.0 +-9.9728041 -18.151356 -0.76245093 128.0 +-4.6451707 -8.3325977 -0.33136392 128.0 +-10.252347 -18.129377 -0.76696271 128.0 +-10.329087 -18.006321 -0.7643019 128.0 +-10.47003 -17.995289 -0.76665419 128.0 +-10.600054 -17.964272 -0.76815814 128.0 +-10.719316 -17.914328 -0.76885223 128.0 +-10.841992 -17.869576 -0.76981628 128.0 +-11.081275 -18.013792 -0.77937973 128.0 +-11.243415 -18.028553 -0.78315884 128.0 +-11.358096 -17.965982 -0.78346729 128.0 +-11.703718 -18.263618 -0.80031902 128.0 +-11.903735 -18.327221 -0.80656606 128.0 +-12.041787 -18.293066 -0.80837852 128.0 +-12.140495 -18.198883 -0.80745304 128.0 +-12.21388 -18.067755 -0.80483079 128.0 +-12.295712 -17.950426 -0.80286413 128.0 +-12.381695 -17.840164 -0.8012445 128.0 +-13.127181 -18.668736 -0.84393287 128.0 +-13.236845 -18.581326 -0.84362435 128.0 +-13.419024 -18.594561 -0.84813613 128.0 +-13.533455 -18.51268 -0.84817469 128.0 +-13.521917 -18.260649 -0.84007663 128.0 +-13.697261 -18.262072 -0.84416425 128.0 +-15.237985 -20.058735 -0.93532532 128.0 +-16.250389 -21.121153 -0.99162614 128.0 +-16.920153 -21.714687 -1.0255609 128.0 +-17.098879 -21.668507 -1.0284145 128.0 +-15.853539 -19.838764 -0.94323057 128.0 +-17.160465 -21.206142 -1.0159589 128.0 +-16.095798 -19.642723 -0.94323057 128.0 +-16.341719 -19.695087 -0.9508273 128.0 +-16.950762 -20.175915 -0.98013461 128.0 +-17.396023 -20.449808 -0.9993 128.0 +-17.378363 -20.176868 -0.99085492 128.0 +-0 -0 -0 128.0 +-18.138525 -20.544128 -1.0208178 128.0 +-18.358803 -20.538239 -1.0262935 128.0 +-18.591757 -20.543751 -1.0324636 128.0 +-18.888243 -20.615692 -1.0422198 128.0 +-18.917208 -20.394644 -1.0367054 128.0 +-18.95307 -20.183487 -1.0316923 128.0 +-19.039377 -20.027704 -1.0296099 128.0 +-18.750322 -19.482826 -1.006704 128.0 +-19.23839 -19.746033 -1.0271034 128.0 +-19.340944 -19.609118 -1.0261008 128.0 +-19.453133 -19.482296 -1.0256766 128.0 +-19.550285 -19.340782 -1.0244812 128.0 +-17.328062 -16.933191 -0.8981899 128.0 +-17.4151 -16.810587 -0.89730299 128.0 +-19.621656 -18.709402 -1.0094805 128.0 +-20.718075 -19.513578 -1.0615394 128.0 +-20.90765 -19.451429 -1.0652415 128.0 +-16.457586 -15.123874 -0.82577008 128.0 +-0 -0 -0 128.0 +-20.480951 -18.362867 -1.0247511 128.0 +-0 -0 -0 128.0 +-22.93856 -20.064091 -1.1392808 128.0 +-23.664644 -20.444271 -1.1700535 128.0 +-10.180075 -8.6859207 -0.47963563 128.0 +-24.14909 -20.350662 -1.1819307 128.0 +-24.262753 -20.193153 -1.1813908 128.0 +-10.30658 -8.4710522 -0.47805458 128.0 +-10.358363 -8.4076529 -0.47805458 128.0 +-18.695412 -14.985708 -0.88785523 128.0 +-10.516387 -8.3239403 -0.48079249 128.0 +-18.851133 -14.734236 -0.88654411 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-24.972036 -18.788465 -1.1692051 128.0 +-25.397284 -18.865488 -1.1841288 128.0 +-25.17977 -18.465242 -1.1682025 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-19.403606 -13.68725 -0.87956434 128.0 +-19.560211 -13.618752 -0.88299638 128.0 +-19.602228 -13.470179 -0.88106829 128.0 +-25.148506 -17.055357 -1.1358488 128.0 +-25.568245 -17.111929 -1.1505024 128.0 +-19.502481 -12.879651 -0.86514211 128.0 +-26.065138 -16.985096 -1.1638064 128.0 +-19.864992 -12.771756 -0.8745898 128.0 +-20.084745 -12.739548 -0.88106829 128.0 +-26.316608 -16.46693 -1.1612227 128.0 +-26.312563 -16.240589 -1.1564796 128.0 +-26.326365 -16.026871 -1.1526234 128.0 +-26.34882 -15.819768 -1.1492299 128.0 +-27.09285 -16.041155 -1.1782672 128.0 +-20.943901 -12.227441 -0.89911538 128.0 +-0 -0 -0 128.0 +-29.005198 -16.460049 -1.2502244 128.0 +-28.464674 -15.923195 -1.2218812 128.0 +-28.614344 -15.777188 -1.2241949 128.0 +-16.213242 -8.8100605 -0.6753003 128.0 +-28.919437 -15.48571 -1.2291694 128.0 +-28.083286 -14.816954 -1.1885633 128.0 +-16.406349 -8.527648 -0.67676568 128.0 +-16.295599 -8.3434772 -0.66970879 128.0 +-28.105009 -14.173333 -1.1779202 128.0 +-6.9379191 -3.4452174 -0.26214474 128.0 +-6.9526443 -3.3995094 -0.26187482 128.0 +-6.9823761 -3.3611195 -0.26226044 128.0 +-7.0344725 -3.3331904 -0.26361012 128.0 +-29.911209 -13.950363 -1.2368819 128.0 +-28.831057 -13.231797 -1.1874065 128.0 +-28.925364 -13.060813 -1.1879849 128.0 +-29.161119 -12.952449 -1.194579 128.0 +-32.89732 -14.37098 -1.3485966 128.0 +-32.815941 -14.096286 -1.3415011 128.0 +-33.195469 -14.01868 -1.3538024 128.0 +-33.459904 -13.889054 -1.3612835 128.0 +-33.555595 -13.688016 -1.3617463 128.0 +-33.713158 -13.511605 -1.3648312 128.0 +-22.119057 -8.7076206 -0.88056695 128.0 +-22.463793 -8.6845226 -0.89263695 128.0 +-22.347563 -8.4823389 -0.88565719 128.0 +-22.391699 -8.3422661 -0.88534868 128.0 +-22.246317 -8.1330042 -0.87728918 128.0 +-22.664513 -8.1285944 -0.89240557 128.0 +-35.49897 -12.486592 -1.4154248 128.0 +-35.620262 -12.284178 -1.4172758 128.0 +-35.740402 -12.080744 -1.4191269 128.0 +-35.731331 -11.833885 -1.415772 128.0 +-35.896416 -11.644637 -1.419551 128.0 +-36.042427 -11.448059 -1.4225974 128.0 +-28.095722 -8.734457 -1.0986363 128.0 +-28.33712 -8.6191874 -1.106233 128.0 +-28.345415 -8.432045 -1.1044592 128.0 +-28.133717 -8.1815042 -1.0938932 128.0 +-12.659086 -3.5970371 -0.47107482 128.0 +-12.786834 -3.548692 -0.47531667 128.0 +-13.064918 -3.5396824 -0.48557422 128.0 +-12.792708 -3.3818049 -0.47385129 128.0 +-12.810315 -3.3024983 -0.47373563 128.0 +-12.650081 -3.1785352 -0.46656305 128.0 +-34.301109 -8.3959913 -1.3259991 128.0 +-12.966137 -3.0893056 -0.47759184 128.0 +-34.692619 -8.0419035 -1.3375292 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-39.785458 -8.4539833 -1.5328468 128.0 +-39.868877 -8.216361 -1.5341194 128.0 +-39.933239 -7.9745111 -1.5346978 128.0 +-18.898798 -3.6533611 -0.70603436 128.0 +-40.108635 -7.4989281 -1.5378599 128.0 +-18.708172 -3.3788943 -0.69685656 128.0 +-18.718708 -3.2623236 -0.69647098 128.0 +-28.002573 -4.7036757 -1.0589943 128.0 +-18.764238 -3.0334871 -0.69674093 128.0 +-23.986126 -3.7269106 -0.89996374 128.0 +-28.440207 -4.2404985 -1.0728767 128.0 +-28.467669 -4.0661955 -1.0729538 128.0 +-24.192242 -3.304112 -0.90547818 128.0 +-28.543169 -3.7201638 -1.0740336 128.0 +-27.684875 -3.4356639 -1.0397904 128.0 +-27.712381 -3.266547 -1.0400603 128.0 +-28.195673 -3.1482351 -1.0580689 128.0 +-28.605001 -3.0163579 -1.0732238 128.0 +-0 -0 -0 128.0 +-25.877863 -2.4080448 -0.96617508 128.0 +-25.905094 -2.2503405 -0.96667641 128.0 +-30.170414 -2.4345055 -1.1312984 128.0 +-30.65712 -2.2845418 -1.1495769 128.0 +-30.831066 -2.1073632 -1.1557854 128.0 +-32.212749 -2.003324 -1.2087314 128.0 +-35.306301 -1.9783573 -1.3278501 128.0 +-39.003445 -1.9455712 -1.4702604 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-37.87191 2.7999074 -1.9066927 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-37.362038 4.1496253 -1.8870642 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-37.155926 5.0526333 -1.8822592 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-37.028996 5.7314186 -1.880828 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-37.695934 6.7858419 -1.9234076 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-38.337566 9.11133 -1.9798906 128.0 +-0 0 -0 128.0 +-38.230618 9.5830479 -1.9802995 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-38.183426 13.143114 -2.029882 128.0 +-37.232323 13.071774 -1.982702 128.0 +-36.905071 13.211782 -1.9693096 128.0 +-35.471416 12.944585 -1.8956517 128.0 +-35.213474 13.095841 -1.8859396 128.0 +-34.845753 13.203018 -1.8702471 128.0 +-34.895454 13.467284 -1.8774544 128.0 +-34.830753 13.688452 -1.8784767 128.0 +-33.281101 13.315709 -1.7977136 128.0 +-32.471779 13.223584 -1.7575366 128.0 +-32.145542 13.321252 -1.7439909 128.0 +-31.588358 13.318026 -1.7176151 128.0 +-30.953508 13.274615 -1.6868434 128.0 +-30.424757 13.269444 -1.6618989 128.0 +-30.222258 13.402431 -1.6551515 128.0 +-29.908203 13.483356 -1.6421682 128.0 +-28.980562 13.279676 -1.5946304 128.0 +-28.410563 13.229991 -1.5670789 128.0 +-28.074282 13.283603 -1.5526643 128.0 +-27.902239 13.412343 -1.5475527 128.0 +-27.122126 13.242799 -1.5078356 128.0 +-26.644003 13.212401 -1.4851913 128.0 +-26.415258 13.301519 -1.4767572 128.0 +-25.849421 13.216013 -1.4489502 128.0 +-25.579929 13.27683 -1.4381136 128.0 +-25.128658 13.238939 -1.4167472 128.0 +-24.78187 13.25112 -1.4013612 128.0 +-24.440275 13.26193 -1.3862309 128.0 +-24.106491 13.272906 -1.3715097 128.0 +-23.726421 13.253988 -1.354028 128.0 +-23.320566 13.215647 -1.3349618 128.0 +-23.020853 13.233058 -1.3220806 128.0 +-22.774439 13.27798 -1.3123175 128.0 +-22.486223 13.295471 -1.3000497 128.0 +-22.209793 13.316607 -1.2884463 128.0 +-22.185694 13.487914 -1.2919222 128.0 +-22.311649 13.752711 -1.3044968 128.0 +-22.037138 13.770796 -1.2930468 128.0 +-21.980066 13.923391 -1.2947336 128.0 +-21.948004 14.092532 -1.298005 128.0 +-21.86363 14.228572 -1.2981584 128.0 +-21.770912 14.359158 -1.2978517 128.0 +-21.72142 14.518556 -1.3002541 128.0 +-21.758434 14.737257 -1.3080748 128.0 +-21.747469 14.925306 -1.3130331 128.0 +-21.729273 15.109783 -1.3176335 128.0 +-20.530741 14.463984 -1.2484226 128.0 +-20.443232 14.590847 -1.2485249 128.0 +-21.838352 15.789835 -1.3423225 128.0 +-27.311508 20.003803 -1.6957375 128.0 +-20.200071 14.986092 -1.250365 128.0 +-29.417582 22.106215 -1.8464271 128.0 +-29.286949 22.290537 -1.8467849 128.0 +-28.898102 22.275921 -1.83053 128.0 +-28.70656 22.41041 -1.8270031 128.0 +-28.493303 22.526667 -1.822096 128.0 +-28.260216 22.625546 -1.8159109 128.0 +-28.089827 22.773363 -1.8138663 128.0 +-27.869287 22.879383 -1.8085502 128.0 +-27.657724 22.99122 -1.8038476 128.0 +-27.375549 23.042154 -1.7944423 128.0 +-27.093794 23.090494 -1.7850369 128.0 +-26.882044 23.196278 -1.7803342 128.0 +-26.672274 23.302305 -1.775785 128.0 +-26.459225 23.403986 -1.7710311 128.0 +-26.274948 23.529917 -1.768271 128.0 +-21.745722 19.715378 -1.4653584 128.0 +-25.848114 23.725639 -1.7588145 128.0 +-25.652304 23.837564 -1.7553387 128.0 +-25.405905 23.900761 -1.7483357 128.0 +-14.910282 14.199741 -1.0168678 128.0 +-24.690121 23.805206 -1.718433 128.0 +-24.515005 23.928349 -1.7163883 128.0 +-14.602343 14.428263 -1.0136986 128.0 +-14.454936 14.458964 -1.0094559 128.0 +-23.795343 24.096966 -1.6963509 128.0 +-23.574518 24.168165 -1.6910349 128.0 +-23.378662 24.263454 -1.687559 128.0 +-14.04135 14.7522 -1.0054178 128.0 +-22.964916 24.427004 -1.6790227 128.0 +-22.676651 24.418892 -1.6686461 128.0 +-22.41028 24.430984 -1.6598542 128.0 +-22.216368 24.519924 -1.6565317 128.0 +-21.986246 24.567217 -1.6504489 128.0 +-21.773581 24.632069 -1.6456951 128.0 +-21.56292 24.697496 -1.6410947 128.0 +-21.31706 24.720425 -1.633734 128.0 +-21.09893 24.773205 -1.6285201 128.0 +-20.884815 24.828827 -1.623613 128.0 +-20.698254 24.915791 -1.620904 128.0 +-20.500011 24.987503 -1.6172746 128.0 +-20.32053 25.081001 -1.6151789 128.0 +-15.752859 19.688633 -1.2535853 128.0 +-19.923925 25.217981 -1.6079715 128.0 +-19.728273 25.287788 -1.6045979 128.0 +-19.490467 25.301552 -1.5976973 128.0 +-17.285381 22.725903 -1.4244145 128.0 +-19.001007 25.302435 -1.582567 128.0 +-18.785324 25.337517 -1.5774043 128.0 +-18.580547 25.385414 -1.5731617 128.0 +-18.398115 25.462517 -1.5708615 128.0 +-18.21254 25.534271 -1.5683057 128.0 +-18.025627 25.603077 -1.5656477 128.0 +-17.792967 25.604939 -1.5589004 128.0 +-17.550234 25.589266 -1.5511819 128.0 +-17.358185 25.645191 -1.5480127 128.0 +-17.12784 25.642422 -1.5413165 128.0 +-16.893787 25.631124 -1.5342114 128.0 +-16.68611 25.657274 -1.5295087 128.0 +-16.475513 25.676802 -1.5244994 128.0 +-16.262104 25.68965 -1.5191834 128.0 +-8.9158115 14.276649 -0.8245188 128.0 +-15.782746 25.622818 -1.5032864 128.0 +-15.603971 25.684181 -1.5011905 128.0 +-8.6776905 14.482033 -0.82712573 128.0 +-8.5891752 14.535865 -0.82717681 128.0 +-8.3872156 14.394995 -0.81572688 128.0 +-14.72174 25.628979 -1.475786 128.0 +-8.4052925 14.841846 -0.83601987 128.0 +-14.330193 25.671669 -1.4678119 128.0 +-14.144966 25.709238 -1.4648983 128.0 +-13.97029 25.764816 -1.4631093 128.0 +-12.40435 23.215397 -1.3102217 128.0 +-12.233293 23.237164 -1.3071036 128.0 +-12.058299 23.249729 -1.3035256 128.0 +-11.892698 23.278811 -1.3009697 128.0 +-12.983074 25.802959 -1.4414362 128.0 +-9.779912 19.73698 -1.0904235 128.0 +-12.600212 25.826597 -1.4338199 128.0 +-12.397406 25.8116 -1.428606 128.0 +-12.207638 25.821272 -1.4248745 128.0 +-12.019483 25.832306 -1.4212965 128.0 +-11.837889 25.855625 -1.418485 128.0 +-11.65113 25.865854 -1.4150093 128.0 +-11.459838 25.86381 -1.4109199 128.0 +-11.266219 25.853987 -1.4064729 128.0 +-11.057421 25.806044 -1.3999811 128.0 +-10.866694 25.797012 -1.3957385 128.0 +-10.691394 25.822603 -1.3934895 128.0 +-10.492857 25.78966 -1.3880712 128.0 +-10.295499 25.756184 -1.382704 128.0 +-10.102233 25.729628 -1.3777969 128.0 +-9.9183035 25.724037 -1.3741165 128.0 +-9.7330561 25.71249 -1.3701806 128.0 +-9.5444994 25.689342 -1.3656824 128.0 +-9.3548841 25.66016 -1.3609287 128.0 +-9.168005 25.635265 -1.3564816 128.0 +-8.9943438 25.644857 -1.3539768 128.0 +-8.8225336 25.658009 -1.3517278 128.0 +-8.6509018 25.670017 -1.3494787 128.0 +-8.4788284 25.678991 -1.3471273 128.0 +-8.3063574 25.684921 -1.3446738 128.0 +-8.1314201 25.681133 -1.3417602 128.0 +-7.9630494 25.696201 -1.33992 128.0 +-7.7930627 25.704435 -1.3377732 128.0 +-7.6210041 25.703894 -1.3352174 128.0 +-7.4478559 25.697414 -1.332406 128.0 +-7.2688174 25.667679 -1.328419 128.0 +-7.1002736 25.672331 -1.3263232 128.0 +-6.9397545 25.704807 -1.325761 128.0 +-3.7727721 14.320971 -0.72100919 128.0 +-6.6141067 25.750309 -1.3237674 128.0 +-3.6338458 14.514419 -0.72882992 128.0 +-3.5383325 14.510244 -0.72744977 128.0 +-3.4047337 14.344141 -0.71758443 128.0 +-3.4026768 14.737464 -0.73716176 128.0 +-5.7716994 25.720848 -1.3122152 128.0 +-5.6127076 25.750898 -1.3119596 128.0 +-5.4496379 25.761402 -1.3107328 128.0 +-4.037406 19.679802 -0.99125874 128.0 +-3.9228055 19.73555 -0.99289441 128.0 +-3.7995615 19.748461 -0.99233216 128.0 +-3.654942 19.645725 -0.98578936 128.0 +-4.6686783 25.982306 -1.3141576 128.0 +-4.5118947 26.026207 -1.3149755 128.0 +-4.359354 26.096743 -1.3172246 128.0 +-4.1999378 26.127932 -1.3174802 128.0 +-4.0387788 26.148273 -1.3172246 128.0 +-3.877528 26.167624 -1.316969 128.0 +-3.7159116 26.184002 -1.3166112 128.0 +-3.5547769 26.203341 -1.3164579 128.0 +-3.395467 26.236544 -1.3170712 128.0 +-3.2357612 26.267788 -1.3176335 128.0 +-3.0763798 26.303019 -1.3184514 128.0 +-2.9188855 26.357134 -1.3202915 128.0 +-2.7627108 26.428185 -1.3230518 128.0 +-2.6040154 26.480419 -1.3248919 128.0 +-2.4424016 26.505844 -1.3254031 128.0 +-2.2791204 26.513367 -1.3250453 128.0 +-2.1165533 26.528843 -1.3251475 128.0 +-1.9561535 26.574198 -1.3268343 128.0 +-1.7942693 26.603636 -1.3277545 128.0 +-1.632708 26.642056 -1.3291857 128.0 +-1.4731594 26.72337 -1.3328661 128.0 +-1.3137481 26.82567 -1.3376709 128.0 +-1.1531793 26.928017 -1.3425269 128.0 +-0.99034357 27.000454 -1.3459005 128.0 +-0.82574904 27.04196 -1.3477408 128.0 +-0.66070676 27.083458 -1.349632 128.0 +-0.49571368 27.152905 -1.3530056 128.0 +-0.3298811 27.220345 -1.3563282 128.0 +-0.16325143 27.288769 -1.359753 128.0 +0.0042033577 27.345182 -1.3626155 128.0 +0.17326128 27.545376 -1.3728898 128.0 +0.34321958 27.619688 -1.3767745 128.0 +0.51452363 27.715916 -1.381835 128.0 +0.68734258 27.824057 -1.38756 128.0 +0.8593806 27.86224 -1.389758 128.0 +1.035978 28.009136 -1.3975787 128.0 +1.2135488 28.134954 -1.4043771 128.0 +1.3870935 28.145931 -1.4053483 128.0 +1.5614824 28.167803 -1.406933 128.0 +1.7287582 28.06798 -1.4023325 128.0 +1.9162817 28.283028 -1.4139358 128.0 +2.1106339 28.552597 -1.4284016 128.0 +2.2931287 28.630695 -1.4331043 128.0 +2.4760602 28.700661 -1.4374491 128.0 +2.666559 28.841055 -1.4454743 128.0 +1.9473773 19.744205 -0.97847974 128.0 +3.0505989 29.095196 -1.460349 128.0 +2.201432 19.826019 -0.98400027 128.0 +2.3401458 19.957947 -0.99151433 128.0 +2.428889 19.670645 -0.97745746 128.0 +3.7949433 29.252232 -1.4727701 128.0 +3.9765139 29.244228 -1.473588 128.0 +4.1610827 29.255861 -1.4754792 128.0 +4.3501997 29.294977 -1.478853 128.0 +4.5437722 29.357544 -1.4835045 128.0 +4.7304926 29.370523 -1.4856514 128.0 +4.916224 29.374434 -1.4873893 128.0 +5.1273084 29.521812 -1.4966413 128.0 +5.3508258 29.725689 -1.5089091 128.0 +5.5629463 29.852327 -1.517241 128.0 +5.7860832 30.025528 -1.5280775 128.0 +2.9330425 14.736255 -0.73205018 128.0 +2.9371638 14.298311 -0.71012151 128.0 +3.0701814 14.493982 -0.72131586 128.0 +3.158844 14.473895 -0.72126478 128.0 +3.3016891 14.694914 -0.73389035 128.0 +7.155046 30.950109 -1.5889053 128.0 +3.3882363 14.259783 -0.71318847 128.0 +7.6146231 31.188868 -1.6062337 128.0 +7.8398504 31.27718 -1.6133898 128.0 +3.46031 13.457022 -0.67418706 128.0 +3.5346644 13.404635 -0.67255133 128.0 +8.632391 31.934509 -1.6561738 128.0 +8.8574953 31.986813 -1.6617966 128.0 +4.0840421 14.406684 -0.72944331 128.0 +4.0972099 14.122392 -0.71564204 128.0 +4.1727014 14.059648 -0.7136485 128.0 +4.2458372 13.990776 -0.7113483 128.0 +4.3203568 13.928215 -0.7094059 128.0 +4.4968805 14.188948 -0.72484285 128.0 +4.480185 13.840894 -0.70761681 128.0 +4.5634594 13.808402 -0.70736122 128.0 +4.6394801 13.754592 -0.70598114 128.0 +4.7228141 13.723033 -0.70582777 128.0 +4.8195009 13.729603 -0.70777017 128.0 +4.9225049 13.752426 -0.71063262 128.0 +5.0201488 13.758552 -0.71262616 128.0 +5.1295419 13.794886 -0.71630651 128.0 +5.2516007 13.862144 -0.72172481 128.0 +5.4448004 14.110102 -0.73711067 128.0 +5.6397753 14.352483 -0.7522921 128.0 +5.6739373 14.183161 -0.74488026 128.0 +5.7310977 14.07501 -0.7408421 128.0 +5.8238525 14.055264 -0.74171108 128.0 +5.8820472 13.953008 -0.73803073 128.0 +5.9840841 13.955203 -0.74017763 128.0 +6.0604153 13.897168 -0.73900193 128.0 +6.1609583 13.894412 -0.74094439 128.0 +6.2777042 13.926451 -0.74488026 128.0 +6.3871689 13.940328 -0.74784499 128.0 +6.4945097 13.947951 -0.750503 128.0 +6.6218333 13.996306 -0.75551236 128.0 +6.7958603 14.13903 -0.76594001 128.0 +14.837479 30.387814 -1.6938462 128.0 +14.74367 29.73164 -1.6615921 128.0 +14.757821 29.307018 -1.6424748 128.0 +14.723677 28.797993 -1.6184504 128.0 +14.81636 28.545786 -1.6091473 128.0 +14.950733 28.377468 -1.6047002 128.0 +15.062878 28.16983 -1.598004 128.0 +15.176373 27.968031 -1.5916656 128.0 +15.27881 27.749285 -1.5843561 128.0 +15.394722 27.558237 -1.5786822 128.0 +15.538905 27.419815 -1.5761265 128.0 +15.693916 27.301443 -1.5747974 128.0 +15.851078 27.187378 -1.5737751 128.0 +16.006924 27.071552 -1.5727017 128.0 +16.170675 26.9694 -1.5724971 128.0 +16.355568 26.902098 -1.5744396 128.0 +16.511419 26.786783 -1.5735706 128.0 +16.701933 26.727312 -1.5761265 128.0 +16.927078 26.721348 -1.5820048 128.0 +17.115002 26.654797 -1.5843049 128.0 +17.331619 26.631308 -1.5893143 128.0 +17.555187 26.616165 -1.5949371 128.0 +17.777002 26.595957 -1.6003554 128.0 +17.969542 26.530201 -1.6030644 128.0 +18.177767 26.486137 -1.6072049 128.0 +13.854783 19.924635 -1.2051275 128.0 +13.98368 19.849045 -1.2057409 128.0 +18.966244 26.572996 -1.6339896 128.0 +14.177049 19.607969 -1.2014471 128.0 +19.402445 26.490522 -1.6436504 128.0 +19.720531 26.581108 -1.6570429 128.0 +19.916859 26.504313 -1.6599053 128.0 +20.189199 26.526237 -1.6692084 128.0 +20.512552 26.610672 -1.682703 128.0 +20.770092 26.605536 -1.6905749 128.0 +20.823315 26.338928 -1.6815274 128.0 +21.199259 26.478844 -1.6991112 128.0 +21.481464 26.496437 -1.7088743 128.0 +21.736795 26.477596 -1.7163883 128.0 +21.927578 26.378283 -1.7186886 128.0 +22.321836 26.519823 -1.7371925 128.0 +22.542442 26.450768 -1.7417929 128.0 +22.804796 26.428389 -1.7496648 128.0 +12.964895 14.840658 -0.97163022 128.0 +12.877053 14.55886 -0.95782894 128.0 +12.904845 14.411131 -0.95312631 128.0 +12.943386 14.276928 -0.94934374 128.0 +13.005756 14.170018 -0.94745243 128.0 +13.092457 14.08995 -0.94745243 128.0 +13.128024 13.955524 -0.94366986 128.0 +13.243024 13.905806 -0.94586784 128.0 +13.341963 13.838665 -0.94689018 128.0 +13.455924 13.786555 -0.94903702 128.0 +13.555005 13.718649 -0.95011044 128.0 +13.756882 13.753128 -0.95864683 128.0 +13.889334 13.716174 -0.96212268 128.0 +14.721766 14.36079 -1.015641 128.0 +14.754947 14.217526 -1.0117562 128.0 +14.802117 14.088857 -1.0089449 128.0 +14.760221 13.877376 -0.99994844 128.0 +14.853874 13.794702 -1.0005618 128.0 +14.900702 13.668872 -0.99795491 128.0 +14.981332 13.574504 -0.99775046 128.0 +15.074017 13.490982 -0.99841493 128.0 +15.163995 13.40485 -0.9989261 128.0 +15.303889 13.362126 -1.002862 128.0 +15.490722 13.358624 -1.0099671 128.0 +15.611935 13.296994 -1.0126252 128.0 +15.815516 13.303805 -1.0208037 128.0 +15.993646 13.286918 -1.0272443 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +18.170286 14.538146 -1.1540627 128.0 +18.260715 14.42762 -1.154165 128.0 +25.553154 19.935284 -1.621824 128.0 +25.726421 19.81773 -1.6251465 128.0 +25.760096 19.593 -1.6195238 128.0 +25.948511 19.486143 -1.6239197 128.0 +26.021858 19.292658 -1.6210061 128.0 +26.148611 19.139116 -1.6215684 128.0 +29.166847 21.074495 -1.8047676 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +20.912912 14.532721 -1.2664665 128.0 +29.490765 20.225836 -1.7933177 128.0 +0 0 -0 128.0 +29.745882 19.868517 -1.79388 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +19.275091 12.368203 -1.135201 128.0 +30.456581 19.279419 -1.8079368 128.0 +30.599716 19.108047 -1.8094703 128.0 +24.179783 14.893965 -1.4165426 128.0 +20.076406 12.197365 -1.1653594 128.0 +20.221121 12.116035 -1.1695509 128.0 +19.995857 11.814951 -1.1517625 128.0 +20.033459 11.671927 -1.1497179 128.0 +19.966137 11.4692 -1.1415393 128.0 +19.990944 11.320886 -1.1388813 128.0 +19.997244 11.162965 -1.135201 128.0 +19.96036 10.982288 -1.1290671 128.0 +20.022102 10.856751 -1.1287603 128.0 +19.990566 10.681456 -1.1230866 128.0 +19.077438 10.043626 -1.0665013 128.0 +20.089996 10.419704 -1.1213486 128.0 +20.082401 10.259893 -1.1172594 128.0 +20.161928 10.145005 -1.1182306 128.0 +0 0 -0 128.0 +20.757034 10.127141 -1.1451175 128.0 +20.893503 10.035473 -1.1493601 128.0 +21.401619 10.11836 -1.1746625 128.0 +21.875299 10.17853 -1.1979202 128.0 +22.179794 10.155107 -1.2115681 128.0 +22.569502 10.16647 -1.2299699 128.0 +22.692635 10.054897 -1.2333946 128.0 +23.019415 10.031157 -1.2482182 128.0 +25.663755 10.99646 -1.3920583 128.0 +25.718779 10.833744 -1.3913937 128.0 +25.602066 10.600096 -1.3812728 128.0 +25.22999 10.265176 -1.357146 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +26.134979 10.076729 -1.3966587 128.0 +26.201921 9.9182987 -1.3969653 128.0 +27.194723 10.103728 -1.4478767 128.0 +27.757257 10.119318 -1.4751726 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +34.81525 11.970821 -1.8473471 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +36.530758 8.9062271 -1.8875242 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +36.030876 7.8528714 -1.8504653 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +36.133072 7.1811285 -1.8485739 128.0 +36.16861 6.9577761 -1.848165 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +35.700138 6.1885242 -1.8174955 128.0 +0 0 -0 128.0 +35.478565 5.7025843 -1.8022119 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +35.299671 5.0091548 -1.7878484 128.0 +35.355473 4.7959552 -1.7891773 128.0 +35.381264 4.5785437 -1.789024 128.0 +35.41761 4.3624606 -1.789484 128.0 +0 0 -0 128.0 +35.931042 3.978709 -1.8133041 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +35.956539 2.8683083 -1.8092147 128.0 +35.894775 2.6418407 -1.8051766 128.0 +35.994011 2.4271863 -1.8094703 128.0 +35.984303 2.2048204 -1.8082435 128.0 +36.031059 1.9858508 -1.8099815 128.0 +36.033588 1.7642918 -1.8095214 128.0 +17.133806 0.73417145 -0.84077364 128.0 +17.137989 0.62902659 -0.84077364 128.0 +18.617907 0.56887686 -0.91637397 128.0 +18.614058 0.45445862 -0.91601616 128.0 +18.597525 0.33989081 -0.91504496 128.0 +18.595264 0.22572392 -0.91484052 128.0 +18.3706 0.11028069 -0.9032883 128.0 +18.279051 -0.0024232266 -0.89858568 128.0 +17.741405 -0.11117904 -0.87108535 128.0 +17.917145 -0.22224009 -0.88013285 128.0 +18.008307 -0.33390126 -0.88488662 128.0 +17.962988 -0.44332954 -0.88268864 128.0 +17.98189 -0.55421829 -0.8838132 128.0 +17.97316 -0.6643579 -0.88355762 128.0 +17.953779 -0.77398044 -0.88279086 128.0 +17.87388 -0.88043827 -0.87895721 128.0 +17.950907 -0.99468523 -0.88319981 128.0 +17.920542 -1.1033367 -0.88197303 128.0 +17.695223 -1.1984806 -0.87077862 128.0 +18.325954 -1.3542525 -0.90354389 128.0 +18.307344 -1.4658751 -0.90303278 128.0 +18.330839 -1.5810133 -0.90471959 128.0 +0 -0 -0 128.0 +17.293335 -1.7055018 -0.85242808 128.0 +17.306383 -1.81408 -0.8536548 128.0 +27.430222 -3.0462334 -1.3755989 128.0 +27.426884 -3.2163467 -1.3764168 128.0 +27.410597 -3.3850641 -1.3766212 128.0 +27.402185 -3.5548594 -1.3772857 128.0 +25.398718 -3.4534619 -1.2749518 128.0 +27.393082 -3.8960636 -1.379177 128.0 +27.38249 -4.0661254 -1.3798926 128.0 +27.366896 -4.2355924 -1.3804038 128.0 +27.485331 -4.4267826 -1.3879178 128.0 +31.09816 -5.204783 -1.5768421 128.0 +15.373507 -2.6694827 -0.76164627 128.0 +15.094407 -2.7165127 -0.74799836 128.0 +14.982222 -2.7913287 -0.74304008 128.0 +13.433047 -2.5879655 -0.66319716 128.0 +13.288606 -2.6447918 -0.65650094 128.0 +13.116586 -2.694315 -0.64837354 128.0 +13.120323 -2.7790937 -0.64944696 128.0 +13.058142 -2.8497472 -0.64709562 128.0 +12.914715 -2.9015651 -0.64050168 128.0 +12.905425 -2.9827783 -0.64096171 128.0 +12.76154 -3.0321164 -0.63436776 128.0 +12.806728 -3.1259983 -0.63774145 128.0 +12.698184 -3.1821775 -0.63303876 128.0 +11.009988 -2.8308659 -0.54486394 128.0 +12.752813 -3.3627269 -0.63804811 128.0 +12.72037 -3.4377856 -0.63743472 128.0 +12.710587 -3.5189705 -0.63804811 128.0 +12.70605 -3.601799 -0.63896823 128.0 +7.9101691 -2.2943764 -0.38456458 128.0 +7.9103031 -2.3471324 -0.3853313 128.0 +7.9043531 -2.3982358 -0.38579136 128.0 +7.865643 -2.439292 -0.38451347 128.0 +7.9047918 -2.5047114 -0.38742706 128.0 +7.9120774 -2.5605502 -0.38865384 128.0 +7.9180264 -2.6162591 -0.38982952 128.0 +25.249105 -8.5176544 -1.3268855 128.0 +25.197311 -8.6727448 -1.3269366 128.0 +25.170948 -8.8367844 -1.328419 128.0 +25.073002 -8.9755793 -1.3260676 128.0 +27.075788 -9.8804741 -1.4382159 128.0 +10.954924 -4.0732636 -0.561221 128.0 +10.997898 -4.1662388 -0.56495243 128.0 +7.1698499 -2.766084 -0.3563486 128.0 +7.1276464 -2.8001618 -0.35496849 128.0 +7.122385 -2.8486667 -0.35563299 128.0 +26.487511 -10.78636 -1.4268169 128.0 +26.366394 -10.926122 -1.4238012 128.0 +26.174625 -11.035315 -1.4169005 128.0 +9.0649776 -3.8866782 -0.4678323 128.0 +9.0409594 -3.9422269 -0.4678323 128.0 +8.9983406 -3.9895291 -0.46680999 128.0 +24.494764 -11.042613 -1.3382332 128.0 +5.6276159 -2.577692 -0.27982816 128.0 +5.5827231 -2.5986819 -0.27819246 128.0 +5.3346725 -2.5231044 -0.26505569 128.0 +24.205587 -11.635226 -1.3376198 128.0 +23.234529 -11.344434 -1.2864017 128.0 +23.142117 -11.475692 -1.2851238 128.0 +3.8163455 -1.9206208 -0.18168572 128.0 +5.3036723 -2.7105634 -0.26786706 128.0 +3.8137624 -1.9783512 -0.1829125 128.0 +3.7856476 -1.993335 -0.18199241 128.0 +3.8032885 -2.0325382 -0.18373035 128.0 +3.7898679 -2.0553601 -0.18367924 128.0 +3.7859333 -2.0833929 -0.18419039 128.0 +4.4662056 -2.4938154 -0.2248275 128.0 +4.5029511 -2.5507181 -0.22789446 128.0 +4.5071292 -2.5897479 -0.22907013 128.0 +3.629272 -2.1148078 -0.17800538 128.0 +3.6807005 -2.1751618 -0.18183906 128.0 +3.63902 -2.1807566 -0.18015224 128.0 +3.6213038 -2.2004499 -0.17989667 128.0 +3.7701106 -2.322726 -0.18965979 128.0 +3.7811949 -2.3616934 -0.19119327 128.0 +3.765789 -2.3843155 -0.19114216 128.0 +3.7805004 -2.426264 -0.19293121 128.0 +3.7772603 -2.457042 -0.19364683 128.0 +5.0526242 -3.3314211 -0.27277419 128.0 +3.4105635 -2.2784319 -0.1729449 128.0 +3.346081 -2.2651503 -0.16982684 128.0 +3.354351 -2.3008981 -0.17120697 128.0 +3.7124124 -2.5803056 -0.19441357 128.0 +3.6907952 -2.5990093 -0.19405575 128.0 +4.9168258 -3.5081742 -0.2721608 128.0 +4.8757849 -3.5242326 -0.27093402 128.0 +17.650635 -12.927366 -1.0828072 128.0 +17.73941 -13.160392 -1.0935416 128.0 +3.9638124 -2.9773953 -0.2167512 128.0 +3.1833727 -2.4215853 -0.16773109 128.0 +3.1470985 -2.4246094 -0.16635096 128.0 +3.1353111 -2.4463325 -0.16655542 128.0 +3.1453106 -2.4853451 -0.16819113 128.0 +3.1518304 -2.5220749 -0.16962238 128.0 +5.3813148 -4.3615985 -0.31755167 128.0 +5.3251195 -4.3704543 -0.31560928 128.0 +15.863201 -13.186062 -1.0188102 128.0 +15.46721 -13.018175 -0.99775046 128.0 +15.307992 -13.045462 -0.99243438 128.0 +4.9417987 -4.2629776 -0.29705423 128.0 +14.816592 -12.943868 -0.96999454 128.0 +4.9137979 -4.3451357 -0.29874104 128.0 +3.6550581 -3.2718549 -0.21409318 128.0 +3.4521706 -3.128526 -0.20146756 128.0 +3.4012733 -3.120609 -0.19926958 128.0 +3.8546512 -3.5806065 -0.23229042 128.0 +2.7633631 -2.5982244 -0.1571501 128.0 +2.7401371 -2.6082432 -0.15663895 128.0 +2.7190492 -2.6201549 -0.15628113 128.0 +2.7100675 -2.6437654 -0.1567923 128.0 +4.2551756 -4.2032866 -0.26914495 128.0 +4.2187138 -4.2187219 -0.26837823 128.0 +3.5626254 -3.6063733 -0.22247617 128.0 +2.6910908 -2.7573781 -0.16021706 128.0 +2.6838222 -2.7839072 -0.16093268 128.0 +2.6852794 -2.819855 -0.16231281 128.0 +3.3581281 -3.5704737 -0.2138887 128.0 +3.3599417 -3.6166258 -0.21567777 128.0 +7.6824017 -8.3739796 -0.54465944 128.0 +7.6167936 -8.4054174 -0.54358602 128.0 +7.5850554 -8.4743214 -0.54511946 128.0 +11.642211 -13.169809 -0.86270231 128.0 +4.0808992 -4.6726975 -0.2805438 128.0 +7.49822 -8.6941872 -0.55063999 128.0 +10.935498 -12.838995 -0.82620561 128.0 +3.9704137 -4.7187428 -0.27865252 128.0 +3.3919485 -4.0815759 -0.23464175 128.0 +3.3674738 -4.1030841 -0.23469287 128.0 +3.2460489 -4.0049415 -0.22687215 128.0 +2.9961901 -3.7432618 -0.20841931 128.0 +2.7218137 -3.4434125 -0.18766627 128.0 +10.335429 -13.247096 -0.82298529 128.0 +10.259438 -13.317385 -0.82344538 128.0 +10.164834 -13.363392 -0.8223719 128.0 +9.7852087 -13.0294 -0.79701847 128.0 +9.7288675 -13.121286 -0.79906309 128.0 +9.6782551 -13.221836 -0.80167001 128.0 +9.618001 -13.310114 -0.80351019 128.0 +9.5396299 -13.373757 -0.80381685 128.0 +3.001893 -4.2621136 -0.22983687 128.0 +2.9357934 -4.2230425 -0.22625875 128.0 +2.9216876 -4.2582726 -0.22733217 128.0 +1.4742577 -2.1761827 -0.097549006 128.0 +2.8880711 -4.3220425 -0.22907013 128.0 +2.8323698 -4.2954865 -0.22636098 128.0 +1.445385 -2.2205324 -0.098622441 128.0 +1.4365865 -2.2369242 -0.099082485 128.0 +1.4324484 -2.2608862 -0.10000257 128.0 +1.4100858 -2.2560792 -0.099184714 128.0 +1.394645 -2.2621379 -0.099031366 128.0 +1.3791829 -2.2680919 -0.098878019 128.0 +1.3816646 -2.3039265 -0.10051373 128.0 +1.3832499 -2.339016 -0.10209832 128.0 +1.3568069 -2.3267488 -0.10087154 128.0 +1.3703594 -2.3835268 -0.10373403 128.0 +1.5274456 -2.6951873 -0.12157346 128.0 +7.4014263 -13.258048 -0.74017763 128.0 +7.2616897 -13.197335 -0.73399258 128.0 +7.1220274 -13.133656 -0.72770536 128.0 +7.0375419 -13.170061 -0.72729641 128.0 +1.1281859 -2.1407192 -0.086865798 128.0 +6.7264318 -12.968183 -0.7107349 128.0 +6.6244726 -12.965631 -0.7082302 128.0 +6.5286336 -12.973917 -0.70639002 128.0 +6.4914675 -13.099641 -0.71129715 128.0 +1.1031483 -2.2586918 -0.091670685 128.0 +1.3279262 -2.7623591 -0.11988664 128.0 +6.1404076 -12.98667 -0.69826263 128.0 +6.0627136 -13.02863 -0.69851822 128.0 +5.9843202 -13.069218 -0.69872266 128.0 +1.3495524 -2.9935362 -0.13108101 128.0 +1.2640066 -2.8501871 -0.12259578 128.0 +5.6805129 -13.034328 -0.69074857 128.0 +5.5996418 -13.067101 -0.69064635 128.0 +5.5065656 -13.070842 -0.68895954 128.0 +5.3720164 -12.973353 -0.68170106 128.0 +5.290431 -13.001446 -0.68144548 128.0 +1.2664723 -3.1655707 -0.13752161 128.0 +5.1432581 -13.097925 -0.68323457 128.0 +5.0997958 -13.225217 -0.68849951 128.0 +1.2143533 -3.2051587 -0.1384417 128.0 +1.194664 -3.2125494 -0.1384417 128.0 +4.7874351 -13.130126 -0.67832744 128.0 +4.6896305 -13.111295 -0.67572051 128.0 +1.1789535 -3.3583951 -0.14518899 128.0 +1.1641692 -3.3825657 -0.14610907 128.0 +4.4392085 -13.170787 -0.67439151 128.0 +1.0186279 -3.0817454 -0.12913862 128.0 +4.2664943 -13.191012 -0.67260247 128.0 +4.1444817 -13.087455 -0.66565067 128.0 +4.0437059 -13.046816 -0.66212368 128.0 +0.97890592 -3.2252841 -0.13552809 128.0 +0.96392292 -3.2475073 -0.13639706 128.0 +0.94592422 -3.2600753 -0.13675487 128.0 +0.92100561 -3.2485216 -0.13583478 128.0 +3.613646 -13.063646 -0.65675652 128.0 +3.5508587 -13.150174 -0.66018128 128.0 +3.4652715 -13.153364 -0.65921009 128.0 +0.86857927 -3.3775165 -0.14150865 128.0 +0.87378341 -3.4864452 -0.14697805 128.0 +0.85923374 -3.5198791 -0.1484604 128.0 +3.1109934 -13.106178 -0.65246278 128.0 +0.82226342 -3.5574052 -0.14989164 128.0 +0.72259015 -3.2154725 -0.13169441 128.0 +1.828351 -8.384716 -0.40225065 128.0 +1.7940208 -8.4768744 -0.40649328 128.0 +1.717896 -8.3703232 -0.40035936 128.0 +1.6602757 -8.3493614 -0.39872366 128.0 +1.6193883 -8.413331 -0.40153503 128.0 +1.543813 -8.294486 -0.39483887 128.0 +0.5660224 -3.1442549 -0.12653171 128.0 +0.54654843 -3.1466849 -0.12648059 128.0 +2.2495885 -13.463464 -0.66166365 128.0 +2.1640837 -13.459265 -0.66074359 128.0 +2.0907552 -13.532496 -0.66386163 128.0 +2.008121 -13.548034 -0.664015 128.0 +1.9328097 -13.615473 -0.66687745 128.0 +1.8415804 -13.570667 -0.66396385 128.0 +1.7655814 -13.638166 -0.66687745 128.0 +1.6828424 -13.656672 -0.6672864 128.0 +1.5972754 -13.651862 -0.66651964 128.0 +1.5113913 -13.642546 -0.66554844 128.0 +1.425474 -13.630704 -0.66447502 128.0 +1.3396616 -13.617328 -0.66335046 128.0 +1.2464647 -13.520871 -0.6579833 128.0 +1.1586058 -13.471548 -0.65506971 128.0 +1.0760829 -13.480394 -0.65517193 128.0 +0.99693888 -13.535547 -0.65767664 128.0 +0.91561371 -13.567317 -0.65900564 128.0 +0.83173853 -13.562712 -0.65849447 128.0 +0.75157958 -13.623402 -0.66135699 128.0 +0.66001815 -13.465164 -0.65302509 128.0 +0.57981813 -13.525834 -0.65593868 128.0 +0.49696049 -13.53313 -0.65614313 128.0 +0.41464394 -13.559881 -0.65736991 128.0 +0.33029157 -13.515245 -0.65496749 128.0 +0.049341578 -2.6450548 -0.098417982 128.0 +0.033183254 -2.6512995 -0.098724678 128.0 +0.082632691 -13.715775 -0.66503727 128.0 +-0.0015296314 -13.728008 -0.66565067 128.0 +-0.085579678 -13.698778 -0.66416836 128.0 +-0.170068 -13.732947 -0.66595739 128.0 +-0.25221062 -13.617814 -0.6601302 128.0 +-0.33709726 -13.669923 -0.66289043 128.0 +-0.41979644 -13.629664 -0.66094804 128.0 +-0.5040468 -13.643799 -0.66181701 128.0 +-0.5881418 -13.649428 -0.66227704 128.0 +-0.67808115 -13.771246 -0.66871762 128.0 +-0.77556711 -14.001158 -0.68072987 128.0 +-0.86355084 -14.030027 -0.68246782 128.0 +-0.958538 -14.15599 -0.68921512 128.0 +-1.0447901 -14.141874 -0.68880618 128.0 +-1.1135943 -13.911209 -0.6773051 128.0 +-1.2085495 -14.015553 -0.68303007 128.0 +-1.2955364 -14.018813 -0.68359238 128.0 +-1.3988907 -14.186514 -0.69263989 128.0 +-1.491537 -14.231299 -0.69540012 128.0 +-1.587101 -14.296323 -0.69923383 128.0 +-1.6796789 -14.327975 -0.70138067 128.0 +-1.7685417 -14.325328 -0.70178962 128.0 +-1.8557643 -14.309256 -0.70153403 128.0 +-1.947298 -14.325307 -0.70296526 128.0 +-2.0545721 -14.449534 -0.71001923 128.0 +-2.1500905 -14.483086 -0.71242172 128.0 +-2.2545013 -14.570288 -0.71763551 128.0 +-2.3397305 -14.530544 -0.71630651 128.0 +-2.4304931 -14.525764 -0.71681768 128.0 +-2.5161572 -14.490898 -0.71579534 128.0 +-2.6080327 -14.491896 -0.71666431 128.0 +-2.7234383 -14.617979 -0.72407615 128.0 +-2.8172395 -14.622568 -0.72520065 128.0 +-2.8770697 -14.455148 -0.71737993 128.0 +-2.9886284 -14.548743 -0.72320718 128.0 +-3.042232 -14.362087 -0.71441525 128.0 +-3.241497 -14.85247 -0.74109769 128.0 +-3.3347592 -14.842046 -0.74160886 128.0 +-3.4451137 -14.904984 -0.74600482 128.0 +-3.5323472 -14.866076 -0.74508476 128.0 +-3.6324995 -14.880989 -0.74702716 128.0 +-3.6890113 -14.719893 -0.7397176 128.0 +-3.7725439 -14.670867 -0.73833746 128.0 +-3.8688598 -14.671584 -0.73961532 128.0 +-3.9788795 -14.721804 -0.74355125 128.0 +-4.0875282 -14.763522 -0.74707824 128.0 +-4.1864843 -14.767949 -0.74866283 128.0 +-4.2878757 -14.779388 -0.75065637 128.0 +-4.3770585 -14.748013 -0.75040078 128.0 +-4.4738503 -14.741903 -0.75152534 128.0 +-4.5659962 -14.719897 -0.75183201 128.0 +-4.7105536 -14.862964 -0.76103288 128.0 +-4.7444425 -14.657057 -0.75152534 128.0 +-4.9051285 -14.841968 -0.7630775 128.0 +-5.0436759 -14.952588 -0.77069378 128.0 +-5.1226506 -14.884531 -0.76870024 128.0 +-5.1367941 -14.633264 -0.75679028 128.0 +-5.1736336 -14.453851 -0.74876511 128.0 +-5.2694139 -14.441535 -0.74983853 128.0 +-5.4216371 -14.580227 -0.75919271 128.0 +-5.5768199 -14.72039 -0.76870024 128.0 +-5.9745021 -15.4825 -0.81240433 128.0 +-6.0880198 -15.492953 -0.81501126 128.0 +-6.1647882 -15.409872 -0.81250656 128.0 +-6.2607322 -15.375456 -0.812711 128.0 +-6.3522801 -15.330293 -0.81235319 128.0 +-6.5835838 -15.61679 -0.83044821 128.0 +-6.9170513 -16.130472 -0.86132222 128.0 +-7.0003242 -16.052025 -0.85932869 128.0 +-6.9921994 -15.768668 -0.84588522 128.0 +-7.0576258 -15.656275 -0.84200042 128.0 +-7.1252656 -15.550939 -0.83852452 128.0 +-7.2015772 -15.466187 -0.83622432 128.0 +-7.2984762 -15.426221 -0.8364799 128.0 +-1.6427835 -3.4199102 -0.15720122 128.0 +-1.6615456 -3.4052787 -0.15694565 128.0 +-1.6779716 -3.3860726 -0.15643448 128.0 +-1.6955721 -3.3694692 -0.15607667 128.0 +-1.7148509 -3.3563342 -0.15592332 128.0 +-1.7450751 -3.3643632 -0.15699676 128.0 +-1.7740653 -3.3694961 -0.15791684 128.0 +-4.5003343 -8.4180307 -0.45157745 128.0 +-4.6543164 -8.5789785 -0.46256739 128.0 +-9.3829746 -17.042236 -0.95874906 128.0 +-4.65452 -8.3337679 -0.45157745 128.0 +-4.6981812 -8.2920189 -0.45081073 128.0 +-9.7413673 -16.947161 -0.96350282 128.0 +-9.8678074 -16.925892 -0.96580303 128.0 +-9.9445353 -16.819466 -0.96309388 128.0 +-10.102506 -16.849775 -0.96856326 128.0 +-10.228014 -16.824165 -0.97076124 128.0 +-10.630297 -17.246519 -0.99994844 128.0 +-10.84548 -17.356279 -1.0105294 128.0 +-10.995063 -17.35774 -1.0146698 128.0 +-10.601124 -16.510946 -0.96728539 128.0 +-10.813913 -16.617178 -0.97776413 128.0 +-11.723476 -17.775164 -1.0528533 128.0 +-11.848972 -17.727802 -1.0543869 128.0 +-11.952484 -17.647324 -1.0539268 128.0 +-12.094451 -17.623056 -1.0569937 128.0 +-12.207488 -17.555893 -1.0574538 128.0 +-12.287369 -17.441473 -1.0550002 128.0 +-12.348899 -17.302347 -1.0510131 128.0 +-12.43318 -17.196306 -1.0491219 128.0 +-12.507772 -17.077799 -1.0464638 128.0 +-12.798584 -17.25177 -1.0624632 128.0 +-12.922198 -17.196865 -1.0639966 128.0 +-13.069814 -17.17288 -1.0675747 128.0 +-13.235303 -17.170666 -1.0726352 128.0 +-14.002316 -17.936943 -1.127687 128.0 +-14.150514 -17.89926 -1.1308562 128.0 +-14.288164 -17.847178 -1.1331564 128.0 +-14.480427 -17.86157 -1.1399037 128.0 +-14.600524 -17.785505 -1.1407726 128.0 +-14.58233 -17.542757 -1.1306006 128.0 +-14.678119 -17.439199 -1.1296805 128.0 +-15.115233 -17.736448 -1.1557496 128.0 +-15.991733 -18.533289 -1.2159129 128.0 +-16.277966 -18.63261 -1.2293564 128.0 +-15.822266 -17.888329 -1.1853456 128.0 +-15.837784 -17.686012 -1.1781384 128.0 +-16.775146 -18.502954 -1.2413175 128.0 +-16.030664 -17.465311 -1.1764004 128.0 +-15.214964 -16.37389 -1.1070361 128.0 +-17.046503 -18.120489 -1.2363592 128.0 +-17.217291 -18.078468 -1.2408063 128.0 +-16.652712 -17.272251 -1.1910195 128.0 +-16.678852 -17.088276 -1.1851923 128.0 +-16.760927 -16.962883 -1.1835566 128.0 +-16.955809 -16.9508 -1.1901505 128.0 +-17.109953 -16.896263 -1.1937798 128.0 +-16.190952 -15.793789 -1.1206841 128.0 +-16.282522 -15.689295 -1.1203263 128.0 +-17.240818 -16.409781 -1.1812564 128.0 +-17.348459 -16.310524 -1.1817676 128.0 +-16.218006 -15.061416 -1.0958418 128.0 +-16.144518 -14.809731 -1.0843407 128.0 +-14.402562 -13.050145 -0.95777786 128.0 +-18.520473 -16.575144 -1.2351325 128.0 +-16.757097 -14.812977 -1.1077517 128.0 +-17.931782 -15.656325 -1.1814097 128.0 +-18.056252 -15.570786 -1.1833521 128.0 +-10.188469 -8.6782532 -0.64801574 128.0 +-18.116804 -15.239396 -1.1747136 128.0 +-17.924191 -14.890559 -1.1556984 128.0 +-10.337215 -8.4816456 -0.64740235 128.0 +-10.367335 -8.4004555 -0.64597106 128.0 +-18.068127 -14.456416 -1.1473665 128.0 +-18.152571 -14.342185 -1.1471109 128.0 +-10.587923 -8.2610312 -0.65036702 128.0 +-17.549463 -13.519276 -1.0968641 128.0 +-17.620163 -13.402271 -1.0960974 128.0 +-17.795504 -13.364066 -1.102078 128.0 +-17.942152 -13.302799 -1.1062183 128.0 +-18.049229 -13.211332 -1.107854 128.0 +-18.171238 -13.130164 -1.1104609 128.0 +-18.344965 -13.085108 -1.1163392 128.0 +-19.534708 -13.753581 -1.1858057 128.0 +-19.516212 -13.562225 -1.1794162 128.0 +-19.448338 -13.338858 -1.1700621 128.0 +-19.533953 -13.222073 -1.1703176 128.0 +-19.248468 -12.857351 -1.1477755 128.0 +-19.400377 -12.787365 -1.1522737 128.0 +-19.764809 -12.854287 -1.1697553 128.0 +-18.417719 -11.818117 -1.0830628 128.0 +-19.950598 -12.629469 -1.1715443 128.0 +-20.175114 -12.598853 -1.1804385 128.0 +-19.498632 -12.010793 -1.1351498 128.0 +-23.618608 -14.349179 -1.3774902 128.0 +-19.702812 -11.805512 -1.1386257 128.0 +-22.281315 -13.165204 -1.2876285 128.0 +-21.153557 -12.324446 -1.2160662 128.0 +-22.437731 -12.888798 -1.2874241 128.0 +-21.935869 -12.422168 -1.2532786 128.0 +-22.427645 -12.519514 -1.2776608 128.0 +-22.540792 -12.401883 -1.2798078 128.0 +-16.22933 -8.800416 -0.90793985 128.0 +-22.268473 -11.898447 -1.2552722 128.0 +-16.666618 -8.7745771 -0.92705721 128.0 +-6.8676977 -3.5628054 -0.35900664 128.0 +-6.896544 -3.5242336 -0.35941556 128.0 +-6.9126859 -3.4791577 -0.35910887 128.0 +-6.9177957 -3.4286962 -0.35818878 128.0 +-6.9207516 -3.3774276 -0.35716647 128.0 +-6.9179382 -3.3236578 -0.35583746 128.0 +-6.9228525 -3.2738917 -0.35496849 128.0 +-6.9491487 -3.2343011 -0.35532629 128.0 +-6.9843001 -3.198668 -0.35619527 128.0 +-7.0374875 -3.1709278 -0.35808656 128.0 +-7.0230269 -3.1127191 -0.35619527 128.0 +-25.843914 -11.26183 -1.4059106 128.0 +-26.082357 -11.175803 -1.415367 128.0 +-26.237877 -11.052382 -1.420223 128.0 +-26.565414 -10.998906 -1.4346377 128.0 +-26.834993 -10.918114 -1.4458321 128.0 +-22.058779 -8.8177185 -1.178905 128.0 +-27.472668 -10.786519 -1.4736391 128.0 +-28.039667 -10.811019 -1.5011394 128.0 +-22.378935 -8.4713535 -1.1877481 128.0 +-22.413641 -8.3276196 -1.186828 128.0 +-28.176678 -10.272204 -1.4980214 128.0 +-22.791559 -8.1511402 -1.2019072 128.0 +-28.421242 -9.9679623 -1.5045642 128.0 +-28.599922 -9.8339729 -1.5109537 128.0 +-28.749634 -9.6885977 -1.5158097 128.0 +-28.847424 -9.524847 -1.5179055 128.0 +-27.867649 -9.0121346 -1.4620869 128.0 +-27.844347 -8.8162556 -1.4578954 128.0 +-27.865484 -8.63519 -1.4561574 128.0 +-27.869202 -8.4492731 -1.4535506 128.0 +-27.918606 -8.277544 -1.4534483 128.0 +-27.96887 -8.1060829 -1.4534483 128.0 +-12.533863 -3.5500789 -0.62976736 128.0 +-13.06846 -3.6149771 -0.6570121 128.0 +-30.151623 -8.1400919 -1.5615072 128.0 +-12.783478 -3.3678582 -0.6396327 128.0 +-12.799065 -3.2881148 -0.63937712 128.0 +-12.771528 -3.197638 -0.63687247 128.0 +-12.590059 -3.0702529 -0.62629145 128.0 +-13.091603 -3.1075349 -0.65169609 128.0 +-31.265734 -7.217484 -1.6053647 128.0 +-31.258759 -7.0141368 -1.6027067 128.0 +-31.317795 -6.8258195 -1.6035756 128.0 +-31.343456 -6.6302223 -1.6027578 128.0 +-18.370798 -3.7689366 -0.92286569 128.0 +-18.469004 -3.6711321 -0.92680162 128.0 +-19.005077 -3.6565809 -0.95358634 128.0 +-32.05835 -5.96347 -1.631996 128.0 +-18.729057 -3.3656955 -0.93697369 128.0 +-18.751324 -3.251054 -0.93707591 128.0 +-26.672998 -4.4555888 -1.3471273 128.0 +-26.546013 -4.2671232 -1.3391533 128.0 +-19.089281 -2.9487877 -0.95164394 128.0 +-26.519321 -3.9296267 -1.3351662 128.0 +-26.507336 -3.7617831 -1.3333261 128.0 +-24.237928 -3.2882349 -1.2149417 128.0 +-26.47821 -3.4267321 -1.3295435 128.0 +-26.484861 -3.2624915 -1.3288279 128.0 +-23.800364 -2.783783 -1.189486 128.0 +-26.556652 -2.9409719 -1.3305658 128.0 +-26.82848 -2.8045382 -1.3436515 128.0 +-26.736847 -2.6292205 -1.3380798 128.0 +-25.89921 -2.3865294 -1.2942225 128.0 +-26.016848 -2.2364609 -1.2995385 128.0 +-26.998734 -2.154022 -1.3492743 128.0 +-27.207655 -2.0027549 -1.359344 128.0 +-29.910795 -2.0171738 -1.497408 128.0 +-32.725681 -2.0052648 -1.6411458 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-38.362576 -1.6423633 -1.9283147 128.0 +-38.40287 -1.4080775 -1.9298993 128.0 +-38.502625 -1.1752158 -1.9346019 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-38.329044 0.24154732 -1.9248388 128.0 +-0 0 -0 128.0 +-38.402077 0.71335316 -1.928877 128.0 +-38.301132 0.94659877 -1.9239699 128.0 +-0 0 -0 128.0 +-38.380444 1.4200151 -1.9287747 128.0 +-38.273228 1.6512647 -1.9237654 128.0 +-0 0 -0 128.0 +-37.744522 2.0927651 -1.8978497 128.0 +-37.86454 2.3325541 -1.9046992 128.0 +-37.660198 2.5520079 -1.8949871 128.0 +-31.019409 -0.7847842 -1.9204605 128.0 +-31.033619 -0.59462923 -1.9210901 128.0 +-31.025705 -0.40405625 -1.9203975 128.0 +-31.061533 -0.21391261 -1.9225383 128.0 +-31.054276 -0.023312513 -1.9220346 128.0 +-31.041859 0.16716903 -1.9212791 128.0 +-31.009312 0.35727912 -1.9193271 128.0 +-0 0 -0 128.0 +-30.94173 0.73633659 -1.9154863 128.0 +-30.912689 0.92546117 -1.9139751 128.0 +-0 0 -0 128.0 +-30.856127 1.3029277 -1.9112676 128.0 +-30.815653 1.4906902 -1.9092528 128.0 +-30.763075 1.6774075 -1.9065453 128.0 +-0 0 -0 128.0 +-30.420525 2.0334289 -1.8863336 128.0 +-30.459234 2.2238257 -1.8896078 128.0 +-30.473867 2.4129624 -1.8914337 128.0 +-30.446556 2.5988827 -1.8906782 128.0 +-30.36941 2.7801013 -1.8868374 128.0 +-30.380585 2.969207 -1.8886633 128.0 +-30.866072 3.2079666 -1.9206494 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-30.436649 4.1105289 -1.9005007 128.0 +-30.110443 4.2547617 -1.8813595 128.0 +-30.043289 4.4334626 -1.8787779 128.0 +-30.009602 4.6168108 -1.8784001 128.0 +-29.974794 4.7999125 -1.8780223 128.0 +-29.928043 4.9809589 -1.8769519 128.0 +-29.882166 5.161952 -1.8760074 128.0 +-29.83814 5.3430977 -1.8752518 128.0 +-29.797926 5.524807 -1.8748111 128.0 +-29.778168 5.7103586 -1.8757555 128.0 +-29.758232 5.89607 -1.876763 128.0 +-29.746918 6.0837507 -1.8784001 128.0 +-29.858437 6.2976713 -1.8880336 128.0 +-29.95772 6.5108566 -1.8969747 128.0 +-29.982458 6.7091517 -1.9011933 128.0 +-30.078835 6.9247875 -1.9101343 128.0 +-30.108618 7.1264567 -1.9148567 128.0 +-30.302883 7.3690753 -1.9303459 128.0 +-30.268717 7.5577731 -1.9311016 128.0 +-30.378393 7.7834826 -1.9413018 128.0 +-30.344542 7.9735389 -1.9422463 128.0 +-30.508982 8.2171974 -1.9562244 128.0 +-30.408922 8.3907042 -1.9530133 128.0 +-30.59889 8.6455116 -1.9688803 128.0 +-30.630594 8.8577738 -1.9744842 128.0 +-30.551743 9.038475 -1.97291 128.0 +-30.68294 9.2824068 -1.9852512 128.0 +-30.713125 9.4976244 -1.9910439 128.0 +-30.775129 9.7240839 -1.9990405 128.0 +-30.730082 9.9176378 -2.0000479 128.0 +-30.82505 10.157542 -2.010437 128.0 +-30.994848 10.424754 -2.0259264 128.0 +-30.900091 10.604373 -2.0239115 128.0 +-30.971972 10.841913 -2.0331044 128.0 +-30.94058 11.044498 -2.035497 128.0 +-30.969767 11.269629 -2.0420454 128.0 +-31.092798 11.53093 -2.055016 128.0 +-0 0 -0 128.0 +-31.043028 11.947823 -2.0613756 128.0 +-31.03046 12.16211 -2.0655313 128.0 +-0 0 -0 128.0 +-30.94915 12.570528 -2.0703166 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-30.583145 13.082727 -2.0614386 128.0 +-30.046543 13.071865 -2.030082 128.0 +-29.634459 13.109424 -2.0072258 128.0 +-29.010067 13.046638 -1.969636 128.0 +-28.414812 12.989141 -1.9339349 128.0 +-28.013262 13.013979 -1.9115825 128.0 +-27.788479 13.117457 -1.9015081 128.0 +-27.384407 13.132792 -1.8789037 128.0 +-27.01889 13.162024 -1.8589439 128.0 +-26.63706 13.178862 -1.8377879 128.0 +-26.311342 13.219293 -1.8205355 128.0 +-25.955915 13.240809 -1.8011423 128.0 +-25.7572 13.339241 -1.7928311 128.0 +-25.205784 13.250449 -1.7593968 128.0 +-25.277218 13.486603 -1.7703526 128.0 +-24.462923 13.245619 -1.717903 128.0 +-23.984076 13.177298 -1.6893171 128.0 +-23.765907 13.247924 -1.6794316 128.0 +-23.400965 13.23335 -1.6589051 128.0 +-23.179081 13.296241 -1.6487048 128.0 +-22.801174 13.266069 -1.6271079 128.0 +-22.534544 13.296684 -1.6135705 128.0 +-22.252131 13.314795 -1.5988368 128.0 +-22.251926 13.500778 -1.6048814 128.0 +-22.212023 13.663727 -1.6080925 128.0 +-22.151476 13.814548 -1.6098555 128.0 +-22.062077 13.947539 -1.6095408 128.0 +-22.002972 14.099878 -1.6115556 128.0 +-21.953705 14.259083 -1.6143891 128.0 +-21.939159 14.441808 -1.6199299 128.0 +-21.953083 14.644827 -1.6277375 128.0 +-21.920689 14.818377 -1.632145 128.0 +-21.822765 14.94809 -1.6316414 128.0 +-21.794588 15.126094 -1.6365526 128.0 +-20.555138 14.453583 -1.5481502 128.0 +-20.465252 14.578856 -1.5480872 128.0 +-21.832146 15.755385 -1.6614237 128.0 +-24.223858 17.708384 -1.8559216 128.0 +-24.095495 17.842432 -1.8544105 128.0 +-23.985561 17.989943 -1.8544105 128.0 +-23.869959 18.133154 -1.8540328 128.0 +-23.740053 18.26528 -1.8525845 128.0 +-23.606277 18.394039 -1.8508844 128.0 +-23.489052 18.535448 -1.8505696 128.0 +-23.340572 18.651812 -1.8477992 128.0 +-23.191551 18.767054 -1.8450288 128.0 +-23.07519 18.908367 -1.8449658 128.0 +-22.946447 19.039402 -1.8439584 128.0 +-22.836069 19.185617 -1.8445251 128.0 +-22.612253 19.235493 -1.835773 128.0 +-22.239716 19.155041 -1.8146168 128.0 +-22.033756 19.214396 -1.8072499 128.0 +-21.746363 19.199951 -1.7930199 128.0 +-21.518019 19.234587 -1.7837012 128.0 +-21.407732 19.373623 -1.7843938 128.0 +-21.348061 19.559223 -1.7894939 128.0 +-21.266426 19.725815 -1.7928311 128.0 +-14.965987 14.053778 -1.2580718 128.0 +-21.363451 20.30917 -1.8224874 128.0 +-21.370029 20.566517 -1.8340099 128.0 +-21.206261 20.661037 -1.8307358 128.0 +-14.593845 14.394403 -1.2560569 128.0 +-14.468523 14.44701 -1.2527827 128.0 +-21.014688 21.242275 -1.8479881 128.0 +-20.89023 21.377243 -1.8485548 128.0 +-20.768372 21.515072 -1.8494363 128.0 +-20.54299 21.544592 -1.8409361 128.0 +-13.951496 14.812834 -1.2466122 128.0 +-20.476242 22.009153 -1.8593848 128.0 +-20.346888 22.140991 -1.8599514 128.0 +-20.156988 22.206305 -1.8549142 128.0 +-19.909756 22.206217 -1.844462 128.0 +-19.724825 22.273422 -1.8398657 128.0 +-19.536533 22.335438 -1.8349544 128.0 +-19.33844 22.384657 -1.8290987 128.0 +-19.174814 22.472527 -1.8265802 128.0 +-19.023058 22.573732 -1.8252579 128.0 +-18.88036 22.685429 -1.82488 128.0 +-18.739542 22.799307 -1.8247541 128.0 +-18.588602 22.900688 -1.8236837 128.0 +-15.763615 19.665855 -1.5529355 128.0 +-18.134596 22.910315 -1.8062425 128.0 +-17.919312 22.926012 -1.7986238 128.0 +-17.733179 22.977066 -1.7939644 128.0 +-17.295452 22.696482 -1.7631117 128.0 +-17.345474 23.054184 -1.7830086 128.0 +-17.195953 23.149765 -1.78219 128.0 +-17.042372 23.239552 -1.7809937 128.0 +-16.879557 23.316198 -1.7788528 128.0 +-16.712381 23.38604 -1.7762713 128.0 +-16.507593 23.401699 -1.7695971 128.0 +-16.311226 23.427195 -1.7638043 128.0 +-16.135519 23.480776 -1.7602782 128.0 +-15.919437 23.473616 -1.7522188 128.0 +-15.728478 23.501184 -1.7469298 128.0 +-15.539981 23.530626 -1.7418926 128.0 +-15.332646 23.529379 -1.7346517 128.0 +-15.137788 23.544945 -1.7287959 128.0 +-8.9950495 14.181514 -1.022332 128.0 +-14.772012 23.607952 -1.719792 128.0 +-14.611676 23.673519 -1.717966 128.0 +-14.442789 23.724367 -1.7151326 128.0 +-8.689517 14.473289 -1.0278728 128.0 +-8.5995302 14.524616 -1.0277469 128.0 +-13.892447 23.795719 -1.7012174 128.0 +-13.73622 23.863214 -1.6999581 128.0 +-13.583137 23.935764 -1.6991396 128.0 +-13.416524 23.98382 -1.6966209 128.0 +-13.249352 24.029858 -1.6940393 128.0 +-13.098799 24.10544 -1.6936616 128.0 +-12.423446 23.20085 -1.6232041 128.0 +-12.24965 23.217503 -1.6189854 128.0 +-12.071056 23.223156 -1.6140742 128.0 +-11.915598 23.271912 -1.6123112 128.0 +-11.812127 23.423004 -1.6178521 128.0 +-9.7988224 19.731041 -1.3527077 128.0 +-11.828073 24.188404 -1.6615496 128.0 +-11.66428 24.229052 -1.6593459 128.0 +-11.493597 24.254171 -1.6561346 128.0 +-11.318827 24.269064 -1.6522938 128.0 +-11.130569 24.252796 -1.6463751 128.0 +-10.976619 24.309721 -1.6456195 128.0 +-10.79565 24.305471 -1.6407083 128.0 +-10.633127 24.341074 -1.6386305 128.0 +-10.454424 24.338003 -1.6339711 128.0 +-10.291302 24.369513 -1.6317673 128.0 +-10.113647 24.364912 -1.6271709 128.0 +-9.9417162 24.371988 -1.623456 128.0 +-9.7693367 24.376022 -1.6196151 128.0 +-9.5903368 24.361216 -1.6145779 128.0 +-9.4230433 24.373989 -1.6114926 128.0 +-9.2570181 24.38843 -1.6085963 128.0 +-9.0810661 24.374628 -1.603874 128.0 +-8.9148865 24.384899 -1.6008517 128.0 +-8.7465639 24.387472 -1.5973886 128.0 +-8.5795393 24.391724 -1.5941144 128.0 +-8.4147453 24.400509 -1.591218 128.0 +-8.2370644 24.369425 -1.5857401 128.0 +-8.0669851 24.357927 -1.5816474 128.0 +-7.9025936 24.361401 -1.5786251 128.0 +-7.7351403 24.353312 -1.5749102 128.0 +-7.5612698 24.322166 -1.5697471 128.0 +-7.4037571 24.34137 -1.5679841 128.0 +-7.2411714 24.342337 -1.5650877 128.0 +-7.0802469 24.347017 -1.5625061 128.0 +-6.9138083 24.330482 -1.5586023 128.0 +-6.7571826 24.346483 -1.5569023 128.0 +-3.8365011 14.160343 -0.88840598 128.0 +-6.4405584 24.361959 -1.5526206 128.0 +-6.283978 24.37396 -1.5508577 128.0 +-3.6379607 14.478286 -0.90465087 128.0 +-3.5462074 14.488703 -0.90389532 128.0 +-5.8280225 24.459286 -1.5491576 128.0 +-5.6726499 24.472223 -1.5477095 128.0 +-3.341449 14.828998 -0.92184025 128.0 +-5.3682823 24.52342 -1.546639 128.0 +-4.1375375 19.472731 -1.2187818 128.0 +-5.0639162 24.572788 -1.5456946 128.0 +-3.9354012 19.707989 -1.2307451 128.0 +-3.8136435 19.727846 -1.2304932 128.0 +-4.6186409 24.70402 -1.5484021 128.0 +-4.4616508 24.702429 -1.5465131 128.0 +-4.316165 24.764736 -1.5487798 128.0 +-4.1664448 24.804533 -1.5496613 128.0 +-4.0149655 24.834557 -1.5499761 128.0 +-3.8617415 24.853792 -1.5496613 128.0 +-3.7097576 24.880968 -1.5499132 128.0 +-3.5561743 24.897335 -1.5495354 128.0 +-3.4045558 24.927586 -1.5501021 128.0 +-3.2524419 24.954935 -1.5505428 128.0 +-3.1027019 25.002153 -1.5523058 128.0 +-2.9521542 25.0455 -1.55388 128.0 +-2.8016343 25.091906 -1.5557059 128.0 +-2.648458 25.116564 -1.5562097 128.0 +-2.4940987 25.130356 -1.5560837 128.0 +-2.3404098 25.151148 -1.5564616 128.0 +-2.1894102 25.203812 -1.5589172 128.0 +-2.0388157 25.267504 -1.5621283 128.0 +-1.8863351 25.314373 -1.5643321 128.0 +-1.7330157 25.355341 -1.566221 128.0 +-1.5796361 25.401358 -1.5684878 128.0 +-1.4265389 25.460394 -1.571636 128.0 +-1.271036 25.48362 -1.5725805 128.0 +-1.1155198 25.51088 -1.5738398 128.0 +-0.96076679 25.565115 -1.5768621 128.0 +-0.80551565 25.6224 -1.5801363 128.0 +-0.64969862 25.682732 -1.5836623 128.0 +-0.49378374 25.774044 -1.5892031 128.0 +-0.3363564 25.832472 -1.5927292 128.0 +-0.17808601 25.86898 -1.5949329 128.0 +-0.019387871 25.914495 -1.5977664 128.0 +0.13986748 25.960035 -1.6006627 128.0 +0.29994512 26.027548 -1.6050073 128.0 +0.46075082 26.088081 -1.6089741 128.0 +0.62226319 26.145626 -1.6128149 128.0 +0.78473783 26.210148 -1.6171595 128.0 +0.94957441 26.316544 -1.6242115 128.0 +1.1148622 26.400961 -1.6299413 128.0 +1.2815107 26.490318 -1.6360489 128.0 +1.4479939 26.554703 -1.6406454 128.0 +1.6151943 26.616047 -1.6451159 128.0 +1.7868621 26.731106 -1.6530493 128.0 +1.9567329 26.800262 -1.6581495 128.0 +2.1322451 26.928034 -1.6670276 128.0 +2.3028638 26.978085 -1.6710572 128.0 +2.4725394 27.009165 -1.6739537 128.0 +1.9133424 19.575638 -1.2037332 128.0 +2.820612 27.138594 -1.6842169 128.0 +2.1835735 19.82448 -1.2211115 128.0 +3.1763825 27.299212 -1.6967468 128.0 +3.3535407 27.358458 -1.701784 128.0 +3.5565324 27.610561 -1.7191623 128.0 +3.7338941 27.64756 -1.7229402 128.0 +3.9126813 27.68935 -1.7270958 128.0 +4.0944524 27.745783 -1.732259 128.0 +4.2834363 27.842453 -1.7400666 128.0 +4.4747062 27.943756 -1.748252 128.0 +4.6767187 28.099871 -1.7600265 128.0 +4.8583913 28.124735 -1.7634895 128.0 +5.034564 28.115026 -1.7648118 128.0 +5.2337232 28.227856 -1.7740675 128.0 +2.8603587 14.915033 -0.92095876 128.0 +2.8276901 14.27065 -0.88066131 128.0 +5.8180056 28.447449 -1.7947199 128.0 +3.0528531 14.473149 -0.8960247 128.0 +3.1390579 14.442442 -0.89526916 128.0 +6.3589497 28.417349 -1.800009 128.0 +3.4185963 14.848273 -0.92410696 128.0 +6.7106433 28.351744 -1.8009535 128.0 +3.4611845 14.232078 -0.88689482 128.0 +7.0483871 28.228527 -1.7984349 128.0 +3.4490588 13.46054 -0.83948237 128.0 +3.5206804 13.397617 -0.83677489 128.0 +3.6087897 13.397927 -0.8382231 128.0 +3.9569099 14.339522 -0.90131372 128.0 +3.9970639 14.14594 -0.89023197 128.0 +4.0624394 14.047325 -0.88538367 128.0 +4.1230755 13.936003 -0.87971687 128.0 +4.1848116 13.832109 -0.87455374 128.0 +4.2625289 13.783289 -0.87304258 128.0 +4.3352947 13.719761 -0.87058699 128.0 +4.4190893 13.691952 -0.87052399 128.0 +4.506454 13.675006 -0.8712166 128.0 +4.5855055 13.632908 -0.87027216 128.0 +4.6710129 13.610179 -0.87064993 128.0 +4.7564135 13.586914 -0.87102771 128.0 +4.8631773 13.623269 -0.87543523 128.0 +4.9572554 13.622246 -0.87738717 128.0 +5.073019 13.678596 -0.88324285 128.0 +5.1850734 13.721899 -0.88828003 128.0 +5.3000002 13.769928 -0.893695 128.0 +5.4929166 14.01405 -0.91245848 128.0 +5.6046925 14.044968 -0.916866 128.0 +5.6918921 14.013088 -0.91705489 128.0 +5.7670937 13.952074 -0.91529191 128.0 +5.8491116 13.908145 -0.91472524 128.0 +5.9264898 13.853642 -0.91346592 128.0 +6.0157623 13.827084 -0.91415852 128.0 +6.1093726 13.809991 -0.91554374 128.0 +6.2075019 13.802281 -0.91762161 128.0 +6.3107452 13.804779 -0.92045504 128.0 +6.4197183 13.818294 -0.92410696 128.0 +6.5631757 13.903191 -0.93279612 128.0 +6.6768427 13.922051 -0.93695176 128.0 +6.8552346 14.07193 -0.95036322 128.0 +12.889429 26.05204 -1.7966089 128.0 +13.056207 25.986731 -1.7976164 128.0 +13.231285 25.937244 -1.7998201 128.0 +13.40533 25.884817 -1.801898 128.0 +13.575048 25.823278 -1.8034091 128.0 +13.753912 25.77824 -1.8061795 128.0 +13.925131 25.717936 -1.8079425 128.0 +14.096127 25.6565 -1.8097056 128.0 +14.263491 25.587831 -1.8110279 128.0 +14.426613 25.511124 -1.8118464 128.0 +14.601248 25.454155 -1.8141761 128.0 +14.78225 25.407217 -1.8173243 128.0 +14.955112 25.345261 -1.819465 128.0 +15.127256 25.281282 -1.821543 128.0 +15.290378 25.201639 -1.8225504 128.0 +15.444201 25.106495 -1.8224874 128.0 +15.613804 25.036663 -1.8243763 128.0 +15.770331 24.94545 -1.8247541 128.0 +15.935482 24.867542 -1.8262023 128.0 +16.095921 24.781851 -1.8271468 128.0 +16.255358 24.694292 -1.8280283 128.0 +16.41765 24.610691 -1.8292876 128.0 +13.624529 20.154581 -1.4976525 128.0 +16.691917 24.368668 -1.8263283 128.0 +16.830885 24.251032 -1.8251948 128.0 +13.932926 19.814663 -1.4910412 128.0 +14.215796 19.955587 -1.5086083 128.0 +17.175716 23.80035 -1.8145539 128.0 +14.268196 19.517784 -1.4881448 128.0 +17.446297 23.560516 -1.8124131 128.0 +17.592329 23.45542 -1.8126019 128.0 +17.730484 23.33988 -1.8120352 128.0 +17.872145 23.229067 -1.8119093 128.0 +18.010046 23.113457 -1.8114686 128.0 +18.155237 23.007215 -1.8118464 128.0 +18.307903 22.910198 -1.8130426 128.0 +18.436832 22.783466 -1.8119093 128.0 +18.568691 22.660648 -1.8111538 128.0 +18.704199 22.542446 -1.8108389 128.0 +18.852436 22.43948 -1.8118464 128.0 +18.958727 22.286894 -1.8088241 128.0 +19.052135 22.120235 -1.8046684 128.0 +12.96013 14.861593 -1.2068814 128.0 +12.881319 14.589516 -1.1906996 128.0 +12.926033 14.460349 -1.1864809 128.0 +12.938846 14.297145 -1.1793659 128.0 +12.99464 14.182899 -1.1764065 128.0 +13.069204 14.089727 -1.1752732 128.0 +13.149262 14.002724 -1.1747065 128.0 +13.271378 13.960114 -1.1780436 128.0 +13.370626 13.892801 -1.1793029 128.0 +13.512728 13.869117 -1.184466 128.0 +13.617196 13.805839 -1.186229 128.0 +13.755948 13.776405 -1.1910774 128.0 +13.901236 13.752105 -1.1964923 128.0 +14.936108 14.595668 -1.2803613 128.0 +14.974402 14.454534 -1.2758908 128.0 +15.010085 14.312103 -1.2712944 128.0 +14.827363 13.965181 -1.2478715 128.0 +14.899621 13.861703 -1.2467381 128.0 +14.981455 13.767319 -1.2464863 128.0 +15.008008 13.622813 -1.241575 128.0 +15.05416 13.497157 -1.2384268 128.0 +15.132957 13.401224 -1.238112 128.0 +15.347111 13.423763 -1.2491938 128.0 +15.451845 13.348916 -1.2510827 128.0 +15.664043 13.365277 -1.2619126 128.0 +15.893809 13.393682 -1.2741277 128.0 +16.187408 13.472116 -1.2915061 128.0 +22.695223 18.65399 -1.8162539 128.0 +22.841799 18.5408 -1.8188984 128.0 +22.963697 18.407164 -1.819591 128.0 +18.219847 14.421765 -1.4288321 128.0 +23.237391 18.162697 -1.8235579 128.0 +23.36578 18.033188 -1.8249431 128.0 +23.481546 17.893715 -1.8253838 128.0 +23.590099 17.748697 -1.8253208 128.0 +23.698561 17.603617 -1.8253208 128.0 +23.801298 17.454332 -1.8249431 128.0 +23.899864 17.302109 -1.8243134 128.0 +23.990963 17.144691 -1.82318 128.0 +21.14596 14.916345 -1.5954367 128.0 +20.863605 14.52627 -1.5667248 128.0 +21.322479 14.652337 -1.5950589 128.0 +24.351627 16.51491 -1.8191503 128.0 +24.511389 16.404591 -1.8236208 128.0 +24.704023 16.314934 -1.8306098 128.0 +23.430714 15.268351 -1.7272218 128.0 +19.271187 12.389968 -1.4082426 128.0 +23.447762 14.872754 -1.7146288 128.0 +23.541117 14.730189 -1.7148178 128.0 +23.596235 14.563974 -1.7122362 128.0 +23.650204 14.397638 -1.7096547 128.0 +20.026358 12.023664 -1.4365138 128.0 +20.041359 11.865983 -1.4322321 128.0 +20.04915 11.705048 -1.4275098 128.0 +19.938955 11.477249 -1.4142872 128.0 +21.175573 12.016722 -1.4989117 128.0 +20.039103 11.209778 -1.4114538 128.0 +20.052446 11.05625 -1.407487 128.0 +20.066418 10.903934 -1.4036462 128.0 +20.022089 10.721241 -1.3957126 128.0 +20.034536 10.570242 -1.3919348 128.0 +19.170099 9.9642572 -1.3258847 128.0 +20.086344 10.284473 -1.3865198 128.0 +20.151743 10.162381 -1.3867086 128.0 +20.261988 10.062512 -1.3901087 128.0 +20.812868 10.177382 -1.4244875 128.0 +20.977436 10.098837 -1.4316654 128.0 +21.259964 10.074644 -1.4470918 128.0 +21.723871 10.13173 -1.4751111 128.0 +21.967039 10.081504 -1.487704 128.0 +23.126352 10.442269 -1.5637025 128.0 +22.424749 9.9602642 -1.5108751 128.0 +22.8284 9.9723053 -1.5344869 128.0 +29.589602 12.710349 -1.9945699 128.0 +29.633936 12.514574 -1.9923033 128.0 +29.713854 12.334038 -1.992555 128.0 +25.522474 10.411037 -1.7018471 128.0 +25.584949 10.253867 -1.701784 128.0 +25.62324 10.087182 -1.700147 128.0 +25.72747 9.9463263 -1.7030433 128.0 +25.872923 9.820508 -1.7087731 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +29.346014 9.7190514 -1.9131566 128.0 +29.331049 9.5147839 -1.9082453 128.0 +29.336563 9.3180151 -1.9047823 128.0 +29.306461 9.1108723 -1.8990525 128.0 +29.311207 8.9154863 -1.8957154 128.0 +29.227612 8.6944895 -1.8866484 128.0 +29.07629 8.4556255 -1.873237 128.0 +29.214985 8.3018837 -1.8789667 128.0 +29.201904 8.1048508 -1.8748111 128.0 +0 0 -0 128.0 +28.928658 7.6479316 -1.8506327 128.0 +29.039789 7.486979 -1.8548512 128.0 +28.979679 7.2821403 -1.8479881 128.0 +28.927845 7.0806952 -1.8417546 128.0 +28.919292 6.8908029 -1.8384175 128.0 +0 0 -0 128.0 +28.819613 6.4943705 -1.8266431 128.0 +28.729254 6.2890277 -1.8182688 128.0 +0 0 -0 128.0 +28.732912 5.9212961 -1.8136723 128.0 +28.691385 5.7294421 -1.8086982 128.0 +28.693665 5.5470357 -1.8066202 128.0 +28.732067 5.3717875 -1.8069351 128.0 +28.763504 5.1952124 -1.8068721 128.0 +28.824335 5.023766 -1.8087611 128.0 +28.872334 4.8497849 -1.8098944 128.0 +28.932091 4.6774745 -1.8118464 128.0 +28.952356 4.4986362 -1.8113426 128.0 +28.979414 4.3209033 -1.8113426 128.0 +28.978706 4.1391969 -1.8096426 128.0 +28.98477 3.9587429 -1.8084463 128.0 +0 0 -0 128.0 +29.269857 3.6323817 -1.8236208 128.0 +29.270781 3.450263 -1.8222985 128.0 +29.306278 3.2722576 -1.823243 128.0 +29.312902 3.0910151 -1.8224244 128.0 +29.33231 2.911195 -1.8224874 128.0 +29.348627 2.7310681 -1.8224244 128.0 +29.444372 2.5578477 -1.8274616 128.0 +29.416739 2.3736801 -1.8247541 128.0 +29.472549 2.1962533 -1.8273987 128.0 +29.539238 2.0190475 -1.8307987 128.0 +29.622789 1.8422213 -1.8353322 128.0 +29.624567 1.6599219 -1.8347656 128.0 +29.658117 1.4793113 -1.8362767 128.0 +29.692558 1.2984387 -1.8379138 128.0 +18.523102 0.69600946 -1.1322683 128.0 +18.525028 0.58227801 -1.1321423 128.0 +17.68021 0.44713339 -1.0786223 128.0 +17.693598 0.33885169 -1.0793149 128.0 +0 0 -0 128.0 +18.442921 0.12684907 -1.1264125 128.0 +17.778673 0.013175506 -1.084478 128.0 +17.708561 -0.09553732 -1.0800705 128.0 +17.532001 -0.20217182 -1.0689888 128.0 +17.518457 -0.30953103 -1.0682331 128.0 +17.540173 -0.417586 -1.0697443 128.0 +17.549252 -0.52556086 -1.0704999 128.0 +17.533728 -0.63279945 -1.0697443 128.0 +0 -0 -0 128.0 +17.650246 -0.85399199 -1.0776778 128.0 +17.664604 -0.96336228 -1.0789372 128.0 +17.910395 -1.087023 -1.0948672 128.0 +17.933262 -1.1988952 -1.0967562 128.0 +17.958414 -1.3113067 -1.098834 128.0 +17.976892 -1.4235995 -1.1005341 128.0 +17.851475 -1.5239472 -1.0931672 128.0 +26.214075 -2.3997653 -1.6235819 128.0 +26.213757 -2.5620227 -1.6245264 128.0 +25.874926 -2.6892929 -1.6040628 128.0 +25.23991 -2.7799475 -1.5648358 128.0 +25.202551 -2.9324577 -1.5635766 128.0 +16.218134 -1.9881479 -0.99368298 128.0 +15.58005 -2.007051 -0.95388925 128.0 +15.448757 -2.0865836 -0.94633353 128.0 +15.253835 -2.1556451 -0.93474799 128.0 +14.987565 -2.2119048 -0.91862905 128.0 +14.92735 -2.2966933 -0.91566968 128.0 +14.893268 -2.3850868 -0.91441041 128.0 +14.870477 -2.4751146 -0.91390669 128.0 +14.837307 -2.5632539 -0.91277331 128.0 +14.834071 -2.6565323 -0.91359186 128.0 +13.397559 -2.4842534 -0.82248193 128.0 +13.158587 -2.523561 -0.80812597 128.0 +13.15754 -2.6071625 -0.80907047 128.0 +13.40823 -2.7424355 -0.82625979 128.0 +12.970263 -2.7358887 -0.79912204 128.0 +12.913247 -2.8067315 -0.79654044 128.0 +12.873382 -2.8809006 -0.79509228 128.0 +12.80197 -2.9475217 -0.7916292 128.0 +12.726344 -3.0124562 -0.78791428 128.0 +12.707621 -3.0904868 -0.78791428 128.0 +12.662274 -3.1618736 -0.78621423 128.0 +11.004893 -2.8199122 -0.67955202 128.0 +12.654373 -3.3253906 -0.78829211 128.0 +12.946926 -3.4873247 -0.80875564 128.0 +12.732871 -3.5136099 -0.79616266 128.0 +12.628476 -3.5683355 -0.7907477 128.0 +7.9219561 -2.2911847 -0.48310214 128.0 +7.9048772 -2.3389003 -0.48291326 128.0 +7.9027958 -2.3911166 -0.48373181 128.0 +7.8813009 -2.4374983 -0.48329106 128.0 +7.8966494 -2.4954331 -0.48530591 128.0 +7.915381 -2.5548735 -0.48757264 128.0 +7.9109302 -2.6071413 -0.48832822 128.0 +13.952639 -4.6930385 -0.89155424 128.0 +13.879213 -4.7633367 -0.88859487 128.0 +13.835595 -4.8434625 -0.88765037 128.0 +13.534915 -4.8316398 -0.86951655 128.0 +0 -0 -0 128.0 +10.993011 -4.0770917 -0.70253414 128.0 +10.993927 -4.1543441 -0.70429718 128.0 +7.1643291 -2.7577324 -0.44714931 128.0 +7.1509895 -2.8030968 -0.44740117 128.0 +7.1299477 -2.8454423 -0.44714931 128.0 +0 -0 -0 128.0 +19.830132 -8.1966085 -1.316566 128.0 +19.528311 -8.212513 -1.2993766 128.0 +19.66474 -8.4122543 -1.3122214 128.0 +9.0380287 -3.9323344 -0.58466423 128.0 +9.01373 -3.9877167 -0.58466423 128.0 +19.717735 -8.8677578 -1.3268292 128.0 +19.587614 -8.9541388 -1.3216032 128.0 +5.5943904 -2.5993106 -0.35200962 128.0 +5.5530653 -2.6216598 -0.35024661 128.0 +5.4486856 -2.6133919 -0.34407607 128.0 +5.3509002 -2.6070025 -0.3383463 128.0 +5.3204904 -2.632705 -0.33733886 128.0 +5.3800387 -2.7033846 -0.34269086 128.0 +3.8528907 -1.9658453 -0.23571382 128.0 +3.8602531 -1.9995462 -0.23709904 128.0 +3.8549786 -2.0269096 -0.23760276 128.0 +3.8512745 -2.055223 -0.2382324 128.0 +20.283644 -10.982797 -1.4180651 128.0 +20.119656 -11.054187 -1.411139 128.0 +19.894537 -11.089966 -1.3998053 128.0 +19.595034 -11.081153 -1.3830568 128.0 +19.489447 -11.179824 -1.3803493 128.0 +19.364408 -11.266577 -1.3762565 128.0 +13.949396 -8.2311277 -0.98467898 128.0 +3.7894678 -2.2678545 -0.2414436 128.0 +6.8420897 -4.1515841 -0.46773878 128.0 +4.0512247 -2.4924951 -0.26291457 128.0 +3.8944323 -2.4291122 -0.25239947 128.0 +4.0144277 -2.5382891 -0.26247382 128.0 +3.4962802 -2.2408752 -0.22482093 128.0 +3.4975302 -2.2720709 -0.22595429 128.0 +3.4443429 -2.2676983 -0.22299495 128.0 +3.3498302 -2.2350676 -0.21688737 128.0 +3.267426 -2.2091897 -0.21166131 128.0 +3.2282844 -2.2117131 -0.20970939 128.0 +3.1998944 -2.2212374 -0.20857604 128.0 +3.18049 -2.2368116 -0.20813528 128.0 +3.157764 -2.2499151 -0.20744267 128.0 +3.6820805 -2.6576202 -0.2493142 128.0 +3.6294482 -2.6536593 -0.24648078 128.0 +3.6435757 -2.6984477 -0.24887344 128.0 +3.1662683 -2.375237 -0.2125428 128.0 +3.1413031 -2.3867719 -0.21172427 128.0 +3.130554 -2.4090445 -0.21203908 128.0 +3.635299 -2.8330584 -0.2535958 128.0 +3.6452687 -2.8769488 -0.25579956 128.0 +5.4121985 -4.3253646 -0.39992577 128.0 +15.161747 -12.269358 -1.193344 128.0 +15.111652 -12.383031 -1.1954219 128.0 +14.93093 -12.388853 -1.1868587 128.0 +14.726257 -12.372383 -1.1762806 128.0 +14.775496 -12.569205 -1.1866698 128.0 +14.702631 -12.663537 -1.1870476 128.0 +2.9536202 -2.5761452 -0.21008718 128.0 +4.9106412 -4.3360381 -0.37612513 128.0 +2.8972297 -2.5902481 -0.20800935 128.0 +3.5598547 -3.2220559 -0.26574799 128.0 +2.8424132 -2.6047065 -0.20605744 128.0 +3.4461436 -3.1969504 -0.25938854 128.0 +2.7498496 -2.5826883 -0.20083137 128.0 +2.7440774 -2.609139 -0.20171288 128.0 +2.7093198 -2.607934 -0.20007579 128.0 +2.6825442 -2.6140623 -0.19913132 128.0 +3.6413367 -3.5919952 -0.28551891 128.0 +2.6714509 -2.6679394 -0.20102027 128.0 +2.6248486 -2.6537731 -0.19831279 128.0 +2.6154914 -2.6769667 -0.19894244 128.0 +2.5851536 -2.6786036 -0.19768314 128.0 +3.3696554 -3.5344322 -0.2709111 128.0 +12.012933 -12.754668 -1.0682331 128.0 +11.640089 -12.511753 -1.0409695 128.0 +7.6962595 -8.3752508 -0.68043357 128.0 +7.5622177 -8.3314238 -0.6726889 128.0 +2.8905525 -3.2244711 -0.23602864 128.0 +2.8561563 -3.2257094 -0.23464341 128.0 +10.972216 -12.544418 -1.0142725 128.0 +10.788688 -12.488407 -1.0040091 128.0 +3.0942891 -3.6269662 -0.26360717 128.0 +3.3703918 -3.9999895 -0.29282281 128.0 +3.3898375 -4.073524 -0.29716736 128.0 +2.8159745 -3.4265668 -0.24263994 128.0 +10.279767 -12.664697 -0.99191993 128.0 +10.194374 -12.718189 -0.99116439 128.0 +9.9959764 -12.628691 -0.97894925 128.0 +9.7572718 -12.483773 -0.96245247 128.0 +3.1754084 -4.1149468 -0.29074496 128.0 +3.1609881 -4.1486416 -0.29187834 128.0 +9.5336342 -12.671625 -0.96327102 128.0 +9.4777222 -12.759527 -0.96560073 128.0 +9.2936068 -12.673383 -0.95433003 128.0 +9.2525406 -12.781097 -0.95829678 128.0 +9.1797457 -12.84575 -0.95892644 128.0 +9.0662355 -12.852902 -0.95514858 128.0 +2.9616885 -4.2543335 -0.28986347 128.0 +2.9824436 -4.3406954 -0.29508954 128.0 +2.9888039 -4.4076462 -0.29880446 128.0 +2.9739151 -4.444149 -0.30018967 128.0 +8.562109 -12.965064 -0.94305933 128.0 +8.4796705 -13.013175 -0.94274449 128.0 +2.8160453 -4.38061 -0.29137462 128.0 +2.7655919 -4.3607244 -0.28860417 128.0 +2.7472532 -4.3911481 -0.28961161 128.0 +2.7244515 -4.4147162 -0.29011533 128.0 +1.4092124 -2.3155289 -0.13383693 128.0 +2.6793184 -4.4632187 -0.29124868 128.0 +1.4056065 -2.3747275 -0.1369222 128.0 +1.3789322 -2.3626225 -0.13541104 128.0 +1.3763591 -2.3917978 -0.1369222 128.0 +1.3631351 -2.4028018 -0.13711108 128.0 +2.4870646 -4.4466262 -0.28425962 128.0 +6.9215946 -12.553836 -0.86724985 128.0 +6.8668323 -12.637284 -0.87020916 128.0 +6.7731433 -12.649266 -0.8680684 128.0 +6.631597 -12.569659 -0.85944223 128.0 +6.5888691 -12.676528 -0.86416459 128.0 +6.4663868 -12.629662 -0.85799402 128.0 +6.4027023 -12.696725 -0.85994595 128.0 +6.1977143 -12.480131 -0.84193802 128.0 +6.2073917 -12.694547 -0.85434204 128.0 +5.9423604 -12.343928 -0.82714128 128.0 +5.8271875 -12.297185 -0.82134855 128.0 +5.7414989 -12.311002 -0.81983739 128.0 +5.7141423 -12.451216 -0.82714128 128.0 +5.7004762 -12.625209 -0.83677489 128.0 +5.5690193 -12.538642 -0.82840061 128.0 +5.4851866 -12.557029 -0.82733023 128.0 +1.3223946 -3.079433 -0.17426027 128.0 +1.3030864 -3.0865698 -0.1741973 128.0 +5.2194524 -12.574752 -0.82178932 128.0 +5.174993 -12.686936 -0.82726723 128.0 +5.0710597 -12.653604 -0.8228597 128.0 +1.2529031 -3.183553 -0.1786678 128.0 +0.94543213 -2.4464872 -0.12829603 128.0 +0.93784058 -2.4718363 -0.12961829 128.0 +0.90802151 -2.4382653 -0.12697378 128.0 +0.89270079 -2.4428537 -0.12691081 128.0 +0.87836879 -2.4501641 -0.12703674 128.0 +0.85470796 -2.4310293 -0.12539965 128.0 +0 -0 -0 128.0 +4.3054667 -12.738357 -0.81114829 128.0 +4.2507582 -12.83559 -0.81587064 128.0 +4.1703811 -12.856685 -0.81555581 128.0 +1.0129812 -3.1904173 -0.17400841 128.0 +0.99605268 -3.2051501 -0.17457509 128.0 +0.97898144 -3.2197948 -0.17514177 128.0 +0.95892215 -3.2247844 -0.17507881 128.0 +0.93688756 -3.2229412 -0.17457509 128.0 +0.93100786 -3.2775893 -0.17778629 128.0 +3.5664458 -12.850797 -0.80422217 128.0 +3.4763041 -12.831017 -0.80151469 128.0 +3.3947029 -12.841493 -0.80082208 128.0 +0.86698586 -3.3641996 -0.18200493 128.0 +3.2242141 -12.831852 -0.79754788 128.0 +3.1411474 -12.833944 -0.79641455 128.0 +3.0671988 -12.873364 -0.79773682 128.0 +2.9856725 -12.881248 -0.79704416 128.0 +0.70874864 -3.146785 -0.16632672 128.0 +1.8919027 -8.6438122 -0.52106988 128.0 +1.8006595 -8.4756336 -0.50948435 128.0 +0.64627463 -3.1377933 -0.16494149 128.0 +0.62583661 -3.1358275 -0.1645637 128.0 +0.60544711 -3.1337295 -0.16418591 128.0 +2.4323885 -13.011301 -0.79792571 128.0 +1.4892639 -8.2469759 -0.49153942 128.0 +2.2747645 -13.052952 -0.7987442 128.0 +1.4420141 -8.5864716 -0.51212889 128.0 +2.1413343 -13.246387 -0.80938524 128.0 +2.054652 -13.22476 -0.80718148 128.0 +1.9717015 -13.225273 -0.80642593 128.0 +1.8947496 -13.266762 -0.80831486 128.0 +1.814121 -13.284071 -0.80869263 128.0 +0.50618529 -3.8864088 -0.21008718 128.0 +1.6399052 -13.216195 -0.80302584 128.0 +0.45646858 -3.8754783 -0.20901679 128.0 +0.43057606 -3.8593609 -0.20782046 128.0 +0.41002753 -3.8917055 -0.20970939 128.0 +1.2825379 -12.924726 -0.78224748 128.0 +1.2067237 -12.970113 -0.78464013 128.0 +1.124699 -12.949433 -0.78287715 128.0 +1.058629 -13.122219 -0.79339224 128.0 +0.98476875 -13.21804 -0.79905903 128.0 +0.90364581 -13.223834 -0.79905903 128.0 +0.82143557 -13.212196 -0.79798865 128.0 +0.7409659 -13.227949 -0.79868126 128.0 +0.65784729 -13.193372 -0.79622567 128.0 +0.57740521 -13.209126 -0.79698122 128.0 +0.4946574 -13.167541 -0.79414779 128.0 +0.41159454 -13.098506 -0.78961432 128.0 +0.33242807 -13.148674 -0.79263663 128.0 +0.25281447 -13.206346 -0.79616266 128.0 +0.17326014 -13.321412 -0.80334067 128.0 +0.091793664 -13.362144 -0.80585927 128.0 +0.0096776215 -13.197783 -0.79547006 128.0 +-0.072535813 -13.427135 -0.80995196 128.0 +-0.15262476 -13.226847 -0.79735899 128.0 +-0.23407963 -13.242624 -0.79842943 128.0 +-0.31571013 -13.256903 -0.79943687 128.0 +-0.39659923 -13.239753 -0.79849237 128.0 +-0.47390836 -13.128357 -0.7916292 128.0 +-0.55845225 -13.219929 -0.79761088 128.0 +-0.63700259 -13.163421 -0.79427373 128.0 +-0.73150402 -13.411387 -0.81020379 128.0 +-0.80924809 -13.331933 -0.80548143 128.0 +-0.90135127 -13.481065 -0.81524098 128.0 +-0.95273668 -13.046277 -0.78810322 128.0 +-1.0697886 -13.50779 -0.81769663 128.0 +-1.1434001 -13.392582 -0.81083345 128.0 +-1.2246443 -13.375376 -0.81020379 128.0 +-1.3063998 -13.36463 -0.8100149 128.0 +-1.3924022 -13.395076 -0.81247056 128.0 +-1.4937938 -13.560876 -0.82355231 128.0 +-1.5971566 -13.724937 -0.83457112 128.0 +-1.6844978 -13.740635 -0.83620822 128.0 +-1.7729841 -13.762705 -0.83828604 128.0 +-1.8907868 -13.998826 -0.85402727 128.0 +-1.9737144 -13.966209 -0.852705 128.0 +-2.068696 -14.017024 -0.85673475 128.0 +-2.1596713 -14.036619 -0.85881257 128.0 +-2.2459157 -14.024089 -0.85887551 128.0 +-2.3281553 -13.987401 -0.85742736 128.0 +-2.4195423 -14.005306 -0.85950518 128.0 +-2.537622 -14.169974 -0.87102771 128.0 +-2.62834 -14.174745 -0.87234998 128.0 +-2.722595 -14.196576 -0.87480557 128.0 +-2.8011184 -14.136528 -0.87203515 128.0 +-2.8856061 -14.108319 -0.87134254 128.0 +-2.9809749 -14.132339 -0.87405002 128.0 +-3.0890393 -14.212282 -0.88040948 128.0 +-3.1722636 -14.17553 -0.8792761 128.0 +-3.3171721 -14.407696 -0.89558393 128.0 +-3.4130988 -14.41912 -0.89766181 128.0 +-3.4953775 -14.372693 -0.8960247 128.0 +-3.5839844 -14.352911 -0.89615065 128.0 +-3.6682692 -14.316149 -0.89520615 128.0 +-3.7494483 -14.268274 -0.89356905 128.0 +-3.8366666 -14.244036 -0.89350611 128.0 +-3.9319577 -14.249088 -0.89539504 128.0 +-4.0206709 -14.229496 -0.89570987 128.0 +-4.1847 -14.470128 -0.91315109 128.0 +-4.2728419 -14.442265 -0.9130252 128.0 +-4.3605108 -14.41291 -0.91283625 128.0 +-4.4559407 -14.408766 -0.91434741 128.0 +-4.554791 -14.414461 -0.91655117 128.0 +-4.6452966 -14.392891 -0.91699195 128.0 +-4.7194672 -14.321462 -0.91415852 128.0 +-4.811707 -14.305477 -0.91504002 128.0 +-4.9081397 -14.301171 -0.91674012 128.0 +-5.0043707 -14.295278 -0.91837716 128.0 +-5.1228571 -14.350776 -0.9241699 128.0 +-4.8733044 -13.391533 -0.86189783 128.0 +-5.340219 -14.399119 -0.93172568 128.0 +-5.4408159 -14.398758 -0.93392944 128.0 +-5.6118693 -14.580259 -0.94847429 128.0 +-5.6975846 -14.536259 -0.94784468 128.0 +-5.8440003 -14.644702 -0.95760417 128.0 +-5.9975924 -14.76576 -0.96830821 128.0 +-6.0587268 -14.657662 -0.96345991 128.0 +-6.1485505 -14.620211 -0.96345991 128.0 +-6.2275448 -14.557433 -0.96175987 128.0 +-6.6018133 -15.174206 -1.0068426 128.0 +-6.396028 -14.458011 -0.96024871 128.0 +-6.6602244 -14.808973 -0.98726058 128.0 +-6.3169689 -13.818394 -0.92139947 128.0 +-6.9945035 -15.055591 -1.0101798 128.0 +-6.9589458 -14.741633 -0.99129033 128.0 +-1.651041 -3.4419305 -0.20366478 128.0 +-1.6655732 -3.4182768 -0.20272031 128.0 +-1.6772224 -3.3892076 -0.20139806 128.0 +-1.6935061 -3.3699346 -0.20076841 128.0 +-1.7159659 -3.3630362 -0.20102027 128.0 +-1.7328972 -3.3453541 -0.20051655 128.0 +-1.7687157 -3.3638103 -0.20259438 128.0 +-4.4892006 -8.4133015 -0.56445253 128.0 +-4.6818686 -8.6462545 -0.58315307 128.0 +-8.3289356 -15.159238 -1.0540661 128.0 +-8.4198503 -15.104361 -1.0538143 128.0 +-4.6898999 -8.292779 -0.56388587 128.0 +-8.6393309 -15.060498 -1.0582218 128.0 +-9.2806349 -15.950934 -1.1271052 128.0 +-9.365654 -15.872201 -1.1255311 128.0 +-9.2225389 -15.412775 -1.0960007 128.0 +-9.5592079 -15.755221 -1.1254681 128.0 +-9.6274633 -15.650368 -1.122068 128.0 +-9.5865316 -15.371668 -1.1057601 128.0 +-9.7275991 -15.386792 -1.1113011 128.0 +-10.358132 -16.16375 -1.1740139 128.0 +-9.9298201 -15.288022 -1.1129382 128.0 +-10.473397 -15.910379 -1.1645691 128.0 +-10.533163 -15.78936 -1.1602876 128.0 +-10.61252 -15.6988 -1.1583357 128.0 +-10.782528 -15.741251 -1.166584 128.0 +-10.19836 -14.694184 -1.0912783 128.0 +-11.030567 -15.686938 -1.1726916 128.0 +-11.150353 -15.652288 -1.1752732 128.0 +-11.256697 -15.598144 -1.1764065 128.0 +-11.335114 -15.505415 -1.1745806 128.0 +-11.111113 -15.004862 -1.1407685 128.0 +-11.002967 -14.669735 -1.1197383 128.0 +-11.086735 -14.593998 -1.1191087 128.0 +-11.818112 -15.360202 -1.1855364 128.0 +-11.919498 -15.296844 -1.1862921 128.0 +-12.089176 -15.319787 -1.1940366 128.0 +-12.885098 -16.124002 -1.2649978 128.0 +-13.167107 -16.271179 -1.2833836 128.0 +-13.220521 -16.133728 -1.2787871 128.0 +-13.334561 -16.070738 -1.2802984 128.0 +-13.447684 -16.006191 -1.2817465 128.0 +-13.610954 -16.000154 -1.288106 128.0 +-13.759675 -15.975323 -1.2930171 128.0 +-12.464249 -14.292935 -1.1592802 128.0 +-12.831119 -14.532657 -1.1859142 128.0 +-12.750444 -14.26391 -1.1698582 128.0 +-12.837727 -14.185407 -1.1698582 128.0 +-12.893512 -14.072518 -1.1669618 128.0 +-12.60973 -13.594354 -1.1326461 128.0 +-12.690856 -13.514544 -1.1324571 128.0 +-14.305559 -15.04801 -1.2727425 128.0 +-14.410771 -14.973613 -1.2739389 128.0 +-14.532323 -14.915647 -1.2766464 128.0 +-14.629878 -14.832592 -1.2772131 128.0 +-14.609198 -14.63096 -1.2672646 128.0 +-15.227262 -15.06396 -1.3141733 128.0 +-14.548526 -14.216906 -1.2461715 128.0 +-13.768087 -13.290053 -1.1701101 128.0 +-13.846485 -13.202569 -1.1698582 128.0 +-13.929414 -13.119412 -1.1700472 128.0 +-14.561316 -13.546952 -1.2175854 128.0 +-14.552309 -13.372936 -1.2097149 128.0 +-14.634089 -13.283393 -1.2097149 128.0 +-14.678166 -13.160038 -1.2065667 128.0 +-15.602164 -13.816754 -1.2776538 128.0 +-15.682893 -13.717476 -1.277339 128.0 +-10.123095 -8.745203 -0.8068037 128.0 +-15.484114 -13.211746 -1.24699 128.0 +-16.216625 -13.665728 -1.3007618 128.0 +-16.39529 -13.645134 -1.3085694 128.0 +-10.327724 -8.4884329 -0.80623704 128.0 +-10.380389 -8.4255323 -0.80629998 128.0 +-15.315971 -12.276753 -1.2012147 128.0 +-15.455961 -12.233957 -1.2064407 128.0 +-15.647111 -12.229854 -1.2157595 128.0 +-15.75741 -12.161055 -1.2185929 128.0 +-15.846021 -12.075028 -1.2197262 128.0 +-15.730808 -11.835363 -1.2048036 128.0 +-16.440054 -12.211746 -1.2548605 128.0 +-16.280479 -11.938893 -1.2365378 128.0 +-16.3316 -11.822971 -1.2348378 128.0 +-16.389223 -11.712095 -1.2337044 128.0 +-16.668737 -11.758011 -1.2497604 128.0 +-16.897823 -11.765004 -1.2618496 128.0 +-17.936157 -12.325253 -1.3358332 128.0 +-18.007317 -12.212167 -1.3355184 128.0 +-18.06864 -12.092565 -1.3345109 128.0 +-18.103357 -11.95562 -1.3315516 128.0 +-18.234068 -11.881911 -1.3358961 128.0 +-18.327618 -11.783299 -1.3374703 128.0 +-18.436655 -11.694142 -1.3402407 128.0 +-18.508062 -11.580797 -1.3402407 128.0 +-18.661152 -11.517863 -1.3463483 128.0 +-18.768982 -11.425979 -1.3491187 128.0 +-19.115107 -11.476536 -1.3694563 128.0 +-19.559589 -11.580728 -1.396909 128.0 +-19.661306 -11.478609 -1.3991756 128.0 +-20.854067 -12.004027 -1.4809039 128.0 +-20.997637 -11.915743 -1.486004 128.0 +-21.160938 -11.837353 -1.4925523 128.0 +-21.251526 -11.717409 -1.4938745 128.0 +-21.287947 -11.56773 -1.491356 128.0 +-21.089302 -11.292726 -1.4720888 128.0 +-6.8216081 -3.5987892 -0.44941604 128.0 +-16.375376 -8.5115471 -1.1271682 128.0 +-16.451277 -8.4231901 -1.1288682 128.0 +-7.1861067 -3.6236143 -0.47057217 128.0 +-6.9489894 -3.4507153 -0.45231241 128.0 +-6.956583 -3.4014356 -0.45136794 128.0 +-6.9737263 -3.3569551 -0.45111609 128.0 +-6.8670292 -3.253839 -0.44223806 128.0 +-22.052197 -10.284863 -1.4979674 128.0 +-22.133936 -10.158102 -1.4992895 128.0 +-7.258666 -3.2772129 -0.46528316 128.0 +-22.328979 -9.9177256 -1.5042638 128.0 +-22.407705 -9.7885208 -1.5055231 128.0 +-22.485683 -9.6587238 -1.5067824 128.0 +-22.573946 -9.5329971 -1.5087973 128.0 +-21.977568 -9.1226406 -1.4640923 128.0 +-21.928709 -8.9450207 -1.4569772 128.0 +-21.968359 -8.8043594 -1.4559698 128.0 +-21.978323 -8.652215 -1.4530106 128.0 +-21.978868 -8.4970417 -1.4494845 128.0 +-21.977407 -8.3418341 -1.4458954 128.0 +-22.047817 -8.2141438 -1.4472177 128.0 +-22.108114 -8.0824757 -1.4479103 128.0 +-22.228687 -7.9722781 -1.4526957 128.0 +-22.63212 -7.9605861 -1.4764334 128.0 +-22.843761 -7.8778596 -1.4873263 128.0 +-24.032841 -8.1232901 -1.5633247 128.0 +-24.101181 -7.9819498 -1.564584 128.0 +-24.156349 -7.8360734 -1.5650247 128.0 +-24.17544 -7.6786413 -1.5631357 128.0 +-24.302153 -7.5550475 -1.5684248 128.0 +-24.511326 -7.4554548 -1.5791918 128.0 +-24.676184 -7.3404875 -1.5870624 128.0 +-12.488862 -3.6316268 -0.78338087 128.0 +-13.155073 -3.7379863 -0.82563019 128.0 +-25.136005 -6.9763222 -1.6085963 128.0 +-25.21109 -6.8308334 -1.6107371 128.0 +-12.78553 -3.3799074 -0.7971701 128.0 +-12.805062 -3.3011439 -0.79710716 128.0 +-12.880248 -3.236376 -0.80069613 128.0 +-12.489809 -3.0569081 -0.77406204 128.0 +-25.74564 -6.1345491 -1.6325859 128.0 +-13.141807 -3.0460742 -0.81391871 128.0 +-25.866688 -5.8288999 -1.6356711 128.0 +-25.937063 -5.6777587 -1.6379379 128.0 +-18.313959 -3.8912992 -1.1440427 128.0 +-26.093735 -5.3773756 -1.6436676 128.0 +-19.149157 -3.8237989 -1.1947923 128.0 +-26.274364 -5.0793037 -1.6511605 128.0 +-26.450226 -4.9451389 -1.6604792 128.0 +-18.7272 -3.3823311 -1.1634358 128.0 +-18.720072 -3.2625611 -1.1616728 128.0 +-26.343861 -4.4250326 -1.6481382 128.0 +-26.328152 -4.2564569 -1.6454307 128.0 +-18.340075 -2.8495445 -1.1337794 128.0 +-19.213032 -2.8645749 -1.1883699 128.0 +-24.258108 -3.4648607 -1.5087973 128.0 +-24.241335 -3.310818 -1.5064045 128.0 +-26.346375 -3.4338143 -1.6390712 128.0 +-26.371899 -3.2727058 -1.6393861 128.0 +-26.407343 -3.1126988 -1.6403935 128.0 +-26.366432 -2.9439621 -1.6366156 128.0 +-26.425686 -2.7865217 -1.6392601 128.0 +-26.219824 -2.602242 -1.625156 128.0 +-25.852715 -2.4057043 -1.6009146 128.0 +-25.914715 -2.2511764 -1.6039369 128.0 +-26.877062 -2.1687152 -1.6640053 128.0 +-27.069008 -2.017112 -1.6753389 128.0 +-28.151243 -1.9241574 -1.7430259 128.0 +-30.880852 -1.9204763 -1.9148567 128.0 +-30.994688 -1.736711 -1.921342 128.0 +-31.013733 -1.546946 -1.9219086 128.0 +-31.035603 -1.3571873 -1.9227272 128.0 +-31.021404 -1.165906 -1.921342 128.0 +-31.013012 -0.97506958 -1.9203975 128.0 +-25.864546 1.9118208 -1.9218043 128.0 +-25.843384 2.0697696 -1.9211264 128.0 +-25.826223 2.2279599 -1.920825 128.0 +-25.805115 2.3857417 -1.9202977 128.0 +-25.772129 2.5422711 -1.9189419 128.0 +-25.741169 2.6987977 -1.917812 128.0 +-25.703312 2.8543797 -1.9162301 128.0 +-25.663527 3.0094824 -1.914573 128.0 +-25.618847 3.1637156 -1.9126143 128.0 +-25.572254 3.3173854 -1.9105805 128.0 +-25.515846 3.4693933 -1.9078689 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-25.347214 4.0823264 -1.9020686 128.0 +-25.30792 4.2354722 -1.9010141 128.0 +-25.259842 4.3869243 -1.8993568 128.0 +-25.209877 4.5377693 -1.8976244 128.0 +-25.166855 4.6896281 -1.8964945 128.0 +-25.090607 4.8349018 -1.8928788 128.0 +-25.033087 4.9833117 -1.8907696 128.0 +-25.004969 5.1374202 -1.8909956 128.0 +-24.960293 5.2880635 -1.8900163 128.0 +-24.936144 5.4430318 -1.8906943 128.0 +-24.939247 5.6042442 -1.8935567 128.0 +-24.931593 5.7634525 -1.8956659 128.0 +-24.938446 5.9264679 -1.8989803 128.0 +-24.940359 6.0888371 -1.9019933 128.0 +-24.948957 6.2533927 -1.905609 128.0 +-24.997997 6.4289641 -1.9124638 128.0 +-25.023643 6.5995226 -1.917586 128.0 +-25.019258 6.7628298 -1.9204484 128.0 +-25.061857 6.9396381 -1.9270772 128.0 +-25.105145 7.1177673 -1.9338566 128.0 +-25.130907 7.2919636 -1.9393554 128.0 +-25.129663 7.4590812 -1.9428204 128.0 +-25.150213 7.6334085 -1.9480933 128.0 +-25.144808 7.8005857 -1.9514077 128.0 +-25.153503 7.9728045 -1.9559274 128.0 +-25.16008 8.1451159 -1.9603716 128.0 +-25.20336 8.3303261 -1.967829 128.0 +-25.225468 8.5096798 -1.9737045 128.0 +-25.239721 8.6873446 -1.9790527 128.0 +-25.234865 8.8592272 -1.9829696 128.0 +-25.236361 9.0340652 -1.9874892 128.0 +-25.227289 9.2058363 -1.9912556 128.0 +-25.203974 9.3729687 -1.9939673 128.0 +-25.190746 9.5444012 -1.997583 128.0 +-25.176361 9.7160244 -2.0011988 128.0 +-25.179379 9.8951235 -2.006321 128.0 +-25.174664 10.072032 -2.010916 128.0 +-25.199198 10.261666 -2.0179965 128.0 +-25.177212 10.433272 -2.0213864 128.0 +-25.193577 10.621654 -2.0280151 128.0 +-25.188414 10.80198 -2.0329866 128.0 +-25.213058 10.996197 -2.0405192 128.0 +-25.203451 11.176568 -2.0453403 128.0 +-25.287117 11.399858 -2.0579951 128.0 +-25.15777 11.5278 -2.0530989 128.0 +-25.133568 11.703839 -2.0570159 128.0 +-25.103643 11.877882 -2.0605562 128.0 +-25.066238 12.048973 -2.0635693 128.0 +-25.021404 12.216989 -2.0660551 128.0 +-25.26757 12.529779 -2.0931728 128.0 +-25.335382 12.757689 -2.1054511 128.0 +-0 0 -0 128.0 +-25.035313 12.994128 -2.0933988 128.0 +-24.894239 13.115425 -2.0882013 128.0 +-24.528397 13.115572 -2.0637953 128.0 +-24.145094 13.101741 -2.0378075 128.0 +-23.9044 13.161625 -2.0240228 128.0 +-23.433199 13.090174 -1.9902763 128.0 +-22.963791 13.013443 -1.95653 128.0 +-22.675167 13.034328 -1.9383762 128.0 +-22.435402 13.080295 -1.9244407 128.0 +-22.116964 13.077117 -1.9035752 128.0 +-21.835339 13.092068 -1.8858734 128.0 +-21.655762 13.165707 -1.8771355 128.0 +-21.409048 13.196299 -1.8624468 128.0 +-21.504406 13.437863 -1.87819 128.0 +-21.363426 13.532738 -1.8729925 128.0 +-21.149096 13.579514 -1.8612415 128.0 +-20.998516 13.665511 -1.8552154 128.0 +-20.690359 13.646401 -1.8349525 128.0 +-20.547379 13.733753 -1.8296043 128.0 +-20.366955 13.794701 -1.8208663 128.0 +-20.196426 13.860724 -1.8130324 128.0 +-19.975101 13.889879 -1.8005282 128.0 +-19.888683 14.011608 -1.8004528 128.0 +-19.783669 14.120054 -1.7987202 128.0 +-19.650599 14.207874 -1.7944267 128.0 +-19.560638 14.326413 -1.7942007 128.0 +-19.465157 14.440818 -1.7935227 128.0 +-19.359444 14.547401 -1.7919408 128.0 +-19.240459 14.643569 -1.7891538 128.0 +-19.13998 14.753436 -1.7881745 128.0 +-19.04595 14.868144 -1.7878733 128.0 +-18.946541 14.978544 -1.78712 128.0 +-18.83326 15.077688 -1.7850862 128.0 +-19.036272 15.432859 -1.813861 128.0 +-18.950468 15.556967 -1.8147649 128.0 +-19.713463 16.386906 -1.8991309 128.0 +-19.554565 16.458754 -1.893406 128.0 +-19.398567 16.531857 -1.8879825 128.0 +-19.292234 16.646664 -1.8875306 128.0 +-19.176214 16.752916 -1.8861747 128.0 +-19.04393 16.844498 -1.883237 128.0 +-18.92536 16.947727 -1.8817304 128.0 +-18.813627 17.056833 -1.8809772 128.0 +-18.685843 17.151047 -1.878642 128.0 +-15.016438 13.953461 -1.5111226 128.0 +-18.440557 17.347628 -1.875177 128.0 +-18.239901 17.371048 -1.8653845 128.0 +-18.204752 17.551851 -1.8729172 128.0 +-18.086723 17.653473 -1.8718626 128.0 +-14.559365 14.385793 -1.5087874 128.0 +-14.466592 14.470625 -1.5083355 128.0 +-17.715979 17.940117 -1.8672676 128.0 +-17.584679 18.027067 -1.8650079 128.0 +-17.46059 18.120981 -1.8635767 128.0 +-17.340137 18.218386 -1.8625973 128.0 +-17.228024 18.32444 -1.8625973 128.0 +-13.791854 14.850807 -1.4936467 128.0 +-16.988377 18.519777 -1.8610909 128.0 +-16.857685 18.605194 -1.8592077 128.0 +-16.709961 18.671127 -1.8554413 128.0 +-16.566025 18.740431 -1.852127 128.0 +-16.438263 18.827454 -1.8506957 128.0 +-16.337408 18.945332 -1.8524283 128.0 +-16.2215 19.045979 -1.8525037 128.0 +-16.05876 19.090971 -1.8471555 128.0 +-15.852753 19.082529 -1.8366849 128.0 +-15.688565 19.122391 -1.8311108 128.0 +-15.5157 19.15011 -1.8244821 128.0 +-15.349939 19.184998 -1.8186818 128.0 +-15.248005 19.299166 -1.8206403 128.0 +-15.182047 19.459978 -1.8271185 128.0 +-15.172494 19.695751 -1.8407526 128.0 +-15.143714 19.909914 -1.8522776 128.0 +-15.076948 20.076614 -1.859283 128.0 +-14.928535 20.135103 -1.8561193 128.0 +-14.795874 20.214254 -1.8549894 128.0 +-14.693753 20.335375 -1.8578519 128.0 +-14.573334 20.431644 -1.8584545 128.0 +-14.448841 20.522312 -1.858605 128.0 +-14.329474 20.620409 -1.859509 128.0 +-14.211703 20.721102 -1.8607142 128.0 +-14.090442 20.816998 -1.8615428 128.0 +-13.964108 20.90555 -1.8617688 128.0 +-13.842155 21.00083 -1.8626727 128.0 +-13.714666 21.087875 -1.8628987 128.0 +-9.0666971 14.129318 -1.2308315 128.0 +-13.448987 21.245319 -1.8620701 128.0 +-13.317846 21.326595 -1.8619947 128.0 +-13.185169 21.405363 -1.8617688 128.0 +-9.1396694 15.042992 -1.2922982 128.0 +-8.6879511 14.499158 -1.2394941 128.0 +-8.5973005 14.549618 -1.2392681 128.0 +-12.707083 21.810383 -1.8694521 128.0 +-8.2050476 14.283076 -1.2069529 128.0 +-12.525935 22.119127 -1.8828603 128.0 +-12.412821 22.236492 -1.8864007 128.0 +-8.2445183 14.983848 -1.2545594 128.0 +-12.233113 22.560711 -1.9013153 128.0 +-12.120767 22.684601 -1.9055337 128.0 +-10.173595 19.324343 -1.6123618 128.0 +-11.813477 22.777634 -1.9009387 128.0 +-10.221922 20.008066 -1.6598929 128.0 +-10.03353 19.940357 -1.6488953 128.0 +-9.7848253 19.746897 -1.6274271 128.0 +-9.466301 19.402374 -1.5934547 128.0 +-10.766891 22.416487 -1.8412046 128.0 +-9.4657173 20.021021 -1.6355624 128.0 +-10.416545 22.386898 -1.8278718 128.0 +-10.271099 22.433165 -1.8264406 128.0 +-10.124659 22.476671 -1.8248587 128.0 +-9.9966516 22.561165 -1.8267418 128.0 +-9.8038607 22.497753 -1.8164974 128.0 +-9.7155046 22.673891 -1.8260639 128.0 +-9.5769711 22.734915 -1.8262146 128.0 +-9.4754343 22.885384 -1.8337473 128.0 +-9.3611364 23.007748 -1.8390201 128.0 +-9.2212677 23.068459 -1.8393214 128.0 +-9.0635157 23.083763 -1.836007 128.0 +-8.8969555 23.074743 -1.8308095 128.0 +-8.7410851 23.091597 -1.8277965 128.0 +-8.5752735 23.080297 -1.8225988 128.0 +-8.416419 23.085638 -1.8188325 128.0 +-8.270916 23.126516 -1.8180039 128.0 +-8.1245689 23.164598 -1.8170247 128.0 +-7.9693131 23.176294 -1.8140116 128.0 +-7.8119907 23.180344 -1.8104713 128.0 +-7.6592956 23.196594 -1.8079854 128.0 +-7.5063891 23.210894 -1.8054243 128.0 +-7.3544989 23.227045 -1.8030893 128.0 +-7.2044635 23.247923 -1.8012061 128.0 +-7.0556068 23.27165 -1.7996242 128.0 +-6.9050298 23.288692 -1.7975904 128.0 +-6.7509012 23.292313 -1.7945772 128.0 +-6.6045952 23.321783 -1.7936734 128.0 +-3.9015102 14.10465 -1.0681256 128.0 +-6.3004932 23.336575 -1.7886264 128.0 +-6.1571841 23.374794 -1.7886264 128.0 +-6.0141392 23.414064 -1.7887771 128.0 +-3.6311777 14.503757 -1.0920795 128.0 +-3.5371566 14.505421 -1.0904976 128.0 +-5.5531373 23.398552 -1.7792859 128.0 +-3.2795005 14.203783 -1.0638319 128.0 +-5.2557597 23.421152 -1.7758962 128.0 +-5.1376414 23.570848 -1.7850108 128.0 +-4.9698076 23.492664 -1.7765741 128.0 +-4.8227611 23.509041 -1.7755196 128.0 +-3.916204 19.70233 -1.4800879 128.0 +-3.7969341 19.7348 -1.4807658 128.0 +-4.3999767 23.651669 -1.7799639 128.0 +-3.4878273 19.40892 -1.4522923 128.0 +-4.1117868 23.717638 -1.7810185 128.0 +-3.9693015 23.761108 -1.7824497 128.0 +-3.8209 23.769264 -1.7812444 128.0 +-3.6714828 23.769594 -1.7795119 128.0 +-3.5243971 23.783785 -1.7789093 128.0 +-3.3811975 23.824707 -1.7804159 128.0 +-3.2381644 23.868719 -1.7822237 128.0 +-3.0919034 23.890118 -1.7823744 128.0 +-2.9450145 23.90666 -1.7822237 128.0 +-2.8010497 23.94805 -1.7840315 128.0 +-2.6571264 23.992537 -1.7861407 128.0 +-2.5125554 24.034176 -1.7880992 128.0 +-2.3670857 24.069979 -1.7896811 128.0 +-2.2211795 24.103909 -1.7911876 128.0 +-2.0732388 24.117085 -1.7911876 128.0 +-1.9276773 24.160166 -1.7935227 128.0 +-1.7805676 24.18745 -1.7947279 128.0 +-1.6339332 24.224783 -1.7967618 128.0 +-1.4873953 24.269188 -1.7993982 128.0 +-1.339606 24.298767 -1.8009801 128.0 +-1.1903889 24.304537 -1.8008294 128.0 +-1.0422596 24.335293 -1.8026372 128.0 +-0.89489275 24.395041 -1.8067049 128.0 +-0.74728781 24.468843 -1.8119024 128.0 +-0.59803396 24.509853 -1.8146895 128.0 +-0.44815966 24.541973 -1.816874 128.0 +-0.29886493 24.651947 -1.8250093 128.0 +-0.14808345 24.735083 -1.8311862 128.0 +0.0036993716 24.778402 -1.8344252 128.0 +0.1560335 24.82478 -1.8379655 128.0 +0.30882499 24.861244 -1.8408279 128.0 +0.46286744 24.939636 -1.8469294 128.0 +0.61785883 25.016075 -1.8529556 128.0 +0.77318996 25.071615 -1.8574752 128.0 +0.92852479 25.107254 -1.8605636 128.0 +1.0853583 25.165838 -1.8654598 128.0 +1.2430439 25.225433 -1.8705068 128.0 +1.3995683 25.249191 -1.8729172 128.0 +1.5526892 25.211266 -1.8707327 128.0 +1.7064091 25.187336 -1.8696781 128.0 +1.8609235 25.176392 -1.8696781 128.0 +2.0156865 25.168476 -1.8699794 128.0 +2.1705081 25.160601 -1.8703561 128.0 +1.8547066 20.064051 -1.4847581 128.0 +1.9206872 19.473759 -1.4408426 128.0 +2.0798757 19.840445 -1.4696175 128.0 +2.1965103 19.781719 -1.4661524 128.0 +2.3145943 19.740139 -1.4640433 128.0 +3.0910947 25.031004 -1.8678703 128.0 +2.52689 19.480833 -1.4465674 128.0 +3.3985686 24.995138 -1.8681716 128.0 +3.5494843 24.957031 -1.866891 128.0 +3.7041624 24.945633 -1.8677197 128.0 +3.8583767 24.930319 -1.8683223 128.0 +4.0125422 24.914049 -1.8689249 128.0 +4.1655011 24.889944 -1.8690002 128.0 +4.3186564 24.866863 -1.8692262 128.0 +4.470449 24.835972 -1.8689249 128.0 +2.7992861 15.024914 -1.1171633 128.0 +4.7709246 24.75868 -1.8673429 128.0 +2.8210509 14.173812 -1.0543407 128.0 +5.0669656 24.66213 -1.864556 128.0 +3.069397 14.49028 -1.0815338 128.0 +3.1510181 14.438051 -1.0789727 128.0 +5.4995012 24.473234 -1.8574752 128.0 +3.4613912 14.975383 -1.1237167 128.0 +5.7924938 24.3748 -1.8552154 128.0 +5.9400535 24.331049 -1.8546127 128.0 +3.5371344 14.114072 -1.0617981 128.0 +3.4520187 13.424789 -1.0097473 128.0 +3.5259337 13.371537 -1.0072615 128.0 +6.5257492 24.142328 -1.8518257 128.0 +3.9559014 14.288247 -1.0825883 128.0 +4.0326166 14.225332 -1.0795753 128.0 +4.0386739 13.920688 -1.0575799 128.0 +4.1098242 13.847849 -1.0538135 128.0 +4.173861 13.753671 -1.0483899 128.0 +4.2519679 13.707802 -1.0468081 128.0 +4.3341894 13.675751 -1.0463561 128.0 +4.4253926 13.671667 -1.048164 128.0 +4.5292277 13.704849 -1.052985 128.0 +4.6078143 13.660739 -1.0517043 128.0 +4.6857061 13.615237 -1.0503484 128.0 +4.8018641 13.679374 -1.0578058 128.0 +4.9095731 13.716308 -1.063154 128.0 +4.9939842 13.686861 -1.0632293 128.0 +5.0723095 13.641007 -1.0620241 128.0 +5.1937213 13.7094 -1.0700841 128.0 +5.3089805 13.758208 -1.0766375 128.0 +5.531177 14.076177 -1.105111 128.0 +5.6167021 14.040122 -1.1049604 128.0 +5.6986074 13.995235 -1.1041318 128.0 +5.787046 13.966455 -1.1046591 128.0 +5.8958788 13.985812 -1.1091787 128.0 +5.9658608 13.912715 -1.1061656 128.0 +6.0503182 13.87402 -1.106015 128.0 +6.1248226 13.812935 -1.1040565 128.0 +6.2254462 13.810546 -1.1069943 128.0 +6.371552 13.906249 -1.1181426 128.0 +6.4925423 13.943727 -1.1245453 128.0 +6.5997295 13.949595 -1.128387 128.0 +10.891538 22.658611 -1.8617688 128.0 +11.025113 22.580605 -1.8608649 128.0 +11.162128 22.50985 -1.8606389 128.0 +11.294206 22.429359 -1.8596597 128.0 +11.432979 22.362301 -1.8598857 128.0 +11.569517 22.290842 -1.8598104 128.0 +11.711651 22.230021 -1.8607142 128.0 +11.84501 22.152464 -1.8602623 128.0 +11.980712 22.079369 -1.8602623 128.0 +12.106343 21.98797 -1.8587557 128.0 +12.229845 21.893251 -1.8570232 128.0 +12.359525 21.80999 -1.8563453 128.0 +12.476715 21.705215 -1.8538595 128.0 +12.590072 21.594656 -1.8509218 128.0 +12.702542 21.483524 -1.847984 128.0 +12.825919 21.391495 -1.8467788 128.0 +12.950717 21.30217 -1.8458749 128.0 +13.078041 21.217211 -1.8454229 128.0 +13.208509 21.137413 -1.8454982 128.0 +13.335289 21.051756 -1.8451216 128.0 +13.457205 20.95863 -1.8441423 128.0 +13.579568 20.866468 -1.8433137 128.0 +13.678246 20.738638 -1.8393214 128.0 +13.445593 20.116299 -1.7904344 128.0 +13.418898 19.812164 -1.7702467 128.0 +13.482653 19.645596 -1.7625633 128.0 +13.555119 19.493731 -1.756236 128.0 +13.640016 19.361282 -1.7517164 128.0 +13.765509 19.286963 -1.7526202 128.0 +13.936178 19.27486 -1.7593997 128.0 +14.075397 19.217947 -1.7621114 128.0 +14.202558 19.144033 -1.7633166 128.0 +14.396437 19.158562 -1.7729585 128.0 +14.549957 19.117474 -1.7774781 128.0 +15.162552 19.670683 -1.8387941 128.0 +15.291554 19.58828 -1.8398488 128.0 +15.420116 19.505035 -1.8409033 128.0 +15.553842 19.427956 -1.8426358 128.0 +15.694108 19.358488 -1.845197 128.0 +15.82778 19.280323 -1.8470048 128.0 +15.964271 19.20508 -1.8491893 128.0 +16.103643 19.1327 -1.8517504 128.0 +16.236259 19.051744 -1.8535582 128.0 +16.353504 18.952517 -1.8536335 128.0 +16.461615 18.842806 -1.8527296 128.0 +13.116278 14.829296 -1.4581678 128.0 +13.236958 14.781963 -1.4615575 128.0 +13.325399 14.698248 -1.4613315 128.0 +13.31284 14.504551 -1.4498818 128.0 +13.243424 14.252399 -1.4323307 128.0 +13.466599 14.315396 -1.4473207 128.0 +13.556246 14.234664 -1.4475467 128.0 +13.604573 14.111018 -1.4433284 128.0 +13.55647 13.88956 -1.4287903 128.0 +13.713632 13.879172 -1.4365489 128.0 +13.864121 13.860327 -1.4435544 128.0 +14.117779 13.941745 -1.4614822 128.0 +17.875734 17.437073 -1.8490386 128.0 +17.980236 17.324986 -1.8488126 128.0 +14.932532 14.212974 -1.5199357 128.0 +14.905396 14.013852 -1.5081095 128.0 +15.57859 14.467663 -1.5686722 128.0 +15.207049 13.949862 -1.5215176 128.0 +15.26871 13.834866 -1.5191072 128.0 +15.203955 13.607262 -1.5039665 128.0 +15.319288 13.542112 -1.5072055 128.0 +15.433641 13.475403 -1.5103693 128.0 +15.614209 13.465102 -1.5201617 128.0 +15.832426 13.48477 -1.5336453 128.0 +17.416687 14.650536 -1.6818883 128.0 +17.503952 14.541481 -1.6816624 128.0 +17.599787 14.439497 -1.6823404 128.0 +17.705101 14.345045 -1.6839975 128.0 +17.81381 14.252957 -1.6860313 128.0 +17.927532 14.164402 -1.6885924 128.0 +18.051058 14.082961 -1.6921328 128.0 +18.203487 14.02305 -1.6984603 128.0 +18.312206 13.928597 -1.7006447 128.0 +18.426828 13.838127 -1.7034318 128.0 +18.563459 13.763402 -1.7083281 128.0 +18.756191 13.728745 -1.7184973 128.0 +18.90797 13.662454 -1.7248247 128.0 +19.088865 13.61566 -1.7338638 128.0 +19.252773 13.555104 -1.7413212 128.0 +19.492809 13.545963 -1.755784 128.0 +19.631477 13.464453 -1.7609062 128.0 +19.83099 13.423107 -1.7716026 128.0 +20.037361 13.384248 -1.7829016 128.0 +20.199038 13.313727 -1.790133 128.0 +20.348061 13.23357 -1.7962345 128.0 +19.225365 12.336299 -1.6882159 128.0 +19.10775 12.095974 -1.670966 128.0 +19.154545 11.961603 -1.6685555 128.0 +19.168146 11.807242 -1.6632826 128.0 +19.133703 11.624692 -1.6538668 128.0 +19.143084 11.470173 -1.6484433 128.0 +19.153006 11.316993 -1.6431704 128.0 +19.138508 11.150571 -1.6358637 128.0 +19.148634 10.999654 -1.6308168 128.0 +19.148085 10.84363 -1.6249413 128.0 +19.14286 10.686084 -1.6187645 128.0 +19.130312 10.525647 -1.6120604 128.0 +19.1472 10.382402 -1.6079928 128.0 +19.165689 10.240758 -1.6041511 128.0 +19.111691 10.061656 -1.594208 128.0 +24.432089 12.671453 -2.0417244 128.0 +24.519146 12.526292 -2.0425532 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +20.820173 10.157943 -1.7126217 128.0 +21.014244 10.093459 -1.7236948 128.0 +21.386801 10.111355 -1.7496825 128.0 +21.616602 10.058173 -1.7636933 128.0 +24.261911 11.108292 -1.9783747 128.0 +24.348707 10.967814 -1.9799565 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +24.246742 10.389365 -1.9553246 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +24.397352 9.0645418 -1.9287343 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +24.218292 8.3275547 -1.8972477 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +24.027498 7.6079082 -1.8665144 128.0 +24.088015 7.4647617 -1.8676443 128.0 +24.030302 7.2855783 -1.859509 128.0 +23.979906 7.1099362 -1.8520516 128.0 +23.97998 6.9501753 -1.8486619 128.0 +23.984756 6.7923112 -1.8457242 128.0 +23.97216 6.6301327 -1.8415059 128.0 +23.970995 6.4717436 -1.8382668 128.0 +23.914791 6.299397 -1.8308095 128.0 +23.932711 6.1473317 -1.8292276 128.0 +23.862606 5.9734945 -1.8208663 128.0 +0 0 -0 128.0 +23.816717 5.6523581 -1.8117518 128.0 +23.816944 5.4982662 -1.8091154 128.0 +23.831745 5.347877 -1.8076842 128.0 +23.861189 5.2009106 -1.8074582 128.0 +23.895578 5.0550222 -1.8076842 128.0 +23.921261 4.9073048 -1.8073075 128.0 +24.008625 4.7719007 -1.8117518 128.0 +24.074663 4.6316538 -1.8146142 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +24.352999 3.7615671 -1.8241054 128.0 +24.379566 3.6126535 -1.8244067 128.0 +24.400288 3.4628553 -1.8243314 128.0 +24.42404 3.3134747 -1.8245573 128.0 +24.448856 3.1641891 -1.824934 128.0 +24.486614 3.0164297 -1.8263652 128.0 +24.52249 2.8682101 -1.8277211 128.0 +24.570351 2.7210901 -1.8300562 128.0 +24.625263 2.5743196 -1.832994 128.0 +24.670366 2.4260995 -1.8352537 128.0 +24.720535 2.2779717 -1.8379655 128.0 +24.770807 2.1294048 -1.8407526 128.0 +24.813227 1.9797517 -1.8430125 128.0 +24.841812 1.8287071 -1.844293 128.0 +24.90629 1.6798673 -1.8483607 128.0 +24.946983 1.528903 -1.8506957 128.0 +24.964855 1.3762959 -1.8513737 128.0 +24.999722 1.2244043 -1.8534075 128.0 +25.032667 1.072094 -1.855366 128.0 +0 0 -0 128.0 +17.426193 0.53253829 -1.2796433 128.0 +17.522837 0.42788506 -1.286724 128.0 +17.545073 0.32072207 -1.2882305 128.0 +17.531754 0.21288088 -1.2871006 128.0 +17.467916 0.10491908 -1.2822044 128.0 +17.432333 -0.0022569741 -1.2794926 128.0 +17.423018 -0.10916289 -1.2788147 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +17.375504 -1.0697441 -1.2776848 128.0 +18.295835 -1.2391992 -1.3478893 128.0 +18.299822 -1.3523196 -1.3487933 128.0 +18.297142 -1.4650576 -1.3492452 128.0 +18.22522 -1.571897 -1.3444996 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +22.86816 -2.3974502 -1.6995902 128.0 +22.504166 -2.498965 -1.6730752 128.0 +22.35372 -2.6212001 -1.6628307 128.0 +16.639881 -2.054476 -1.2291743 128.0 +15.717204 -2.0384767 -1.1598736 128.0 +14.988056 -2.0374427 -1.1052617 128.0 +14.476727 -2.0584409 -1.0672216 128.0 +13.605711 -2.0197682 -1.0016873 128.0 +13.473826 -2.084754 -0.99257278 128.0 +13.36135 -2.15137 -0.98496479 128.0 +13.275121 -2.2211301 -0.97939062 128.0 +13.219979 -2.2953746 -0.97622687 128.0 +13.194852 -2.3745041 -0.9753983 128.0 +13.16925 -2.4534118 -0.97456968 128.0 +13.377192 -2.5771995 -0.99174422 128.0 +12.921044 -2.5716043 -0.95784712 128.0 +12.943115 -2.6586661 -0.96078491 128.0 +12.782185 -2.7074399 -0.94963652 128.0 +12.733183 -2.7788 -0.94715071 128.0 +12.72173 -2.8581891 -0.94760269 128.0 +12.710753 -2.9377668 -0.94812995 128.0 +12.802114 -3.04176 -0.95664191 128.0 +12.592375 -3.0736566 -0.9418025 128.0 +12.564573 -3.1486819 -0.94112462 128.0 +11.013382 -2.8317389 -0.82165629 128.0 +12.438211 -3.2797415 -0.93434519 128.0 +12.507376 -3.3802018 -0.94135058 128.0 +12.225011 -3.384491 -0.92086166 128.0 +12.11 -3.4327791 -0.91347963 128.0 +7.9229426 -2.2980835 -0.58580804 128.0 +7.9029574 -2.3449516 -0.58535606 128.0 +7.8893743 -2.3936889 -0.5854314 128.0 +7.8754907 -2.4423475 -0.58550674 128.0 +7.8774662 -2.4960487 -0.58686262 128.0 +7.9075389 -2.5590806 -0.5904783 128.0 +7.9361858 -2.6222622 -0.5940187 128.0 +11.86556 -4.0021329 -0.9085834 128.0 +11.832294 -4.0719419 -0.90790546 128.0 +11.852247 -4.1603236 -0.91152114 128.0 +11.739188 -4.2017107 -0.90451574 128.0 +11.742225 -4.2842598 -0.90685087 128.0 +11.054948 -4.1104665 -0.85359484 128.0 +11.003409 -4.1683273 -0.85148567 128.0 +7.1811881 -2.7704601 -0.54407698 128.0 +7.1621976 -2.8137414 -0.54392636 128.0 +11.73304 -4.6935554 -0.91724598 128.0 +11.720643 -4.7722297 -0.91860187 128.0 +11.545594 -4.7837358 -0.90670025 128.0 +11.455382 -4.8289185 -0.90172869 128.0 +19.063942 -8.17521 -1.5295776 128.0 +9.0106449 -3.9290042 -0.70520103 128.0 +9.016448 -3.9975593 -0.70768684 128.0 +18.790241 -8.4706287 -1.5196345 128.0 +18.729753 -8.5820255 -1.5189565 128.0 +18.656857 -8.6875257 -1.5172993 128.0 +5.5383162 -2.6194696 -0.42543727 128.0 +5.4978743 -2.6417377 -0.42340344 128.0 +5.3632846 -2.6176662 -0.41346031 128.0 +5.2801223 -2.6172976 -0.40781081 128.0 +5.3450079 -2.6904609 -0.41466555 128.0 +5.3612485 -2.7400033 -0.41745263 128.0 +5.3514156 -2.7765231 -0.41805524 128.0 +17.910809 -9.4358635 -1.4919142 128.0 +17.85697 -9.5479355 -1.4922909 128.0 +17.800678 -9.6587515 -1.4925168 128.0 +17.713127 -9.7524004 -1.4901063 128.0 +17.641636 -9.8545809 -1.489127 128.0 +17.56262 -9.9523172 -1.4875453 128.0 +17.485662 -10.050946 -1.4861894 128.0 +3.5100124 -2.04527 -0.26951078 128.0 +3.4862385 -2.0601704 -0.26853153 128.0 +3.4760976 -2.0830612 -0.26875752 128.0 +3.4675109 -2.106941 -0.26913416 128.0 +3.4765873 -2.1417825 -0.27109265 128.0 +3.4473135 -2.1530335 -0.26966146 128.0 +3.4643624 -2.1933563 -0.2723732 128.0 +3.4676201 -2.225348 -0.27387974 128.0 +3.4480503 -2.2427754 -0.27335244 128.0 +16.471842 -10.863778 -1.4531962 128.0 +16.404873 -10.964643 -1.4531962 128.0 +3.3112421 -2.2415512 -0.26468986 128.0 +4.2445264 -2.9118838 -0.35146636 128.0 +3.2155368 -2.2347629 -0.25843775 128.0 +4.2052126 -2.9614542 -0.35116506 128.0 +15.647705 -11.167824 -1.4148549 128.0 +15.615248 -11.289919 -1.4182446 128.0 +4.2280202 -3.0955129 -0.35847175 128.0 +4.1088457 -3.0471268 -0.34905589 128.0 +5.4595718 -4.1014771 -0.47846735 128.0 +5.439064 -4.1385231 -0.4789193 128.0 +5.5730948 -4.2947969 -0.49413532 128.0 +5.50105 -4.2933207 -0.48976636 128.0 +5.4378395 -4.2979269 -0.48622602 128.0 +14.791824 -11.841842 -1.3939893 128.0 +14.628263 -11.858903 -1.3851761 128.0 +14.602235 -11.987035 -1.389771 128.0 +3.6514487 -3.0340478 -0.3212603 128.0 +14.251876 -11.995153 -1.3698094 128.0 +13.979931 -11.913555 -1.3501492 128.0 +2.9185662 -2.5170321 -0.25376749 128.0 +2.9000633 -2.5322685 -0.25346619 128.0 +2.8911929 -2.5559614 -0.25414413 128.0 +2.8487141 -2.5497043 -0.25143236 128.0 +2.8359709 -2.5698147 -0.25173366 128.0 +3.5180106 -3.2277679 -0.32329413 128.0 +3.4586954 -3.2126374 -0.31922647 128.0 +12.907904 -12.142403 -1.3013374 128.0 +12.825935 -12.214498 -1.3005841 128.0 +2.6481345 -2.5517771 -0.24043465 128.0 +2.6260052 -2.5617089 -0.2397567 128.0 +2.5903778 -2.5581486 -0.23764755 128.0 +2.5598283 -2.5591848 -0.23606569 128.0 +2.5461791 -2.576972 -0.23629166 128.0 +2.5372818 -2.599685 -0.23704493 128.0 +2.5309687 -2.6252577 -0.23809952 128.0 +2.9623358 -3.1109712 -0.28713727 128.0 +2.9411426 -3.1269095 -0.28691128 128.0 +2.9171512 -3.1397822 -0.28638399 128.0 +7.7009516 -8.3942032 -0.82316279 128.0 +7.6339021 -8.4243011 -0.82143027 128.0 +7.5767484 -8.4650383 -0.82082766 128.0 +10.691221 -12.093894 -1.1820197 128.0 +10.58468 -12.122459 -1.1783288 128.0 +2.8920739 -3.3522632 -0.2970804 128.0 +3.4022455 -3.9932215 -0.3589237 128.0 +10.173615 -12.09393 -1.1564839 128.0 +9.9367399 -11.96053 -1.1372756 128.0 +10.049734 -12.248703 -1.159497 128.0 +9.8155813 -12.114111 -1.1404393 128.0 +9.6345444 -12.040962 -1.1275585 128.0 +9.6210594 -12.176532 -1.1349405 128.0 +9.5320578 -12.217254 -1.1332079 128.0 +9.3309565 -12.111986 -1.1176153 128.0 +9.2286959 -12.132502 -1.1141503 128.0 +9.1169558 -12.139462 -1.10948 128.0 +9.0428915 -12.195975 -1.1095554 128.0 +9.0073462 -12.305144 -1.1146022 128.0 +8.9293375 -12.356948 -1.114301 128.0 +8.8556652 -12.414752 -1.1146022 128.0 +8.6943684 -12.34818 -1.1034539 128.0 +2.930162 -4.2149377 -0.35041177 128.0 +2.9031165 -4.2311931 -0.35026112 128.0 +2.8916311 -4.2703972 -0.35221961 128.0 +2.8997116 -4.3394709 -0.35688987 128.0 +2.871933 -4.3555164 -0.35673922 128.0 +7.9561896 -12.232658 -1.0649619 128.0 +7.8099031 -12.170463 -1.0550187 128.0 +2.7262115 -4.3048491 -0.34754935 128.0 +7.6288052 -12.215483 -1.0505744 128.0 +2.6836379 -4.3549609 -0.34905589 128.0 +2.6884463 -4.4233313 -0.35365084 128.0 +2.6950779 -4.4962001 -0.3586224 128.0 +2.6638885 -4.5066423 -0.35809511 128.0 +2.6346803 -4.520318 -0.35786912 128.0 +2.618814 -4.5571513 -0.35967699 128.0 +1.3998247 -2.4698017 -0.1770848 128.0 +2.4849343 -4.4496317 -0.34762469 128.0 +6.6117768 -12.015972 -0.99867427 128.0 +6.5360227 -12.052809 -0.99837297 128.0 +6.4478483 -12.066301 -0.99611318 128.0 +6.375083 -12.108284 -0.99633914 128.0 +6.303422 -12.152484 -0.99679112 128.0 +6.1593337 -12.055067 -0.98526609 128.0 +6.0825605 -12.087289 -0.98481411 128.0 +6.0312996 -12.170845 -0.98873115 128.0 +5.9473257 -12.188804 -0.98714924 128.0 +5.8797636 -12.240347 -0.98842984 128.0 +1.1614977 -2.4543006 -0.16774428 128.0 +1.1434721 -2.4550526 -0.16721699 128.0 +1.124236 -2.4529557 -0.16646372 128.0 +1.1030213 -2.4461699 -0.16533382 128.0 +5.4958715 -12.402184 -0.98737526 128.0 +5.3507624 -12.277524 -0.97434372 128.0 +5.2694378 -12.296375 -0.97321379 128.0 +5.2078238 -12.36156 -0.97592556 128.0 +5.1364536 -12.404338 -0.97682947 128.0 +5.0275545 -12.355263 -0.97027606 128.0 +0.95737112 -2.3922 -0.15727384 128.0 +0.92846358 -2.3618298 -0.15433611 128.0 +0.9135955 -2.3665519 -0.15426078 128.0 +0.90329307 -2.3833041 -0.1551647 128.0 +0.90427846 -2.4308653 -0.1585544 128.0 +4.508256 -12.364244 -0.95679259 128.0 +1.1698384 -3.2680418 -0.224842 128.0 +1.1590036 -3.3015058 -0.22695115 128.0 +1.1568793 -3.3613622 -0.23116945 128.0 +4.1531558 -12.321855 -0.94489092 128.0 +4.0805979 -12.356575 -0.9456442 128.0 +3.9930446 -12.345326 -0.94278181 128.0 +3.9193268 -12.376249 -0.94330907 128.0 +3.8250163 -12.341011 -0.93863881 128.0 +0.97856832 -3.2241702 -0.21715866 128.0 +0.9624511 -3.2425425 -0.21813791 128.0 +0.95003074 -3.2742462 -0.22017173 128.0 +0.94486368 -3.3327832 -0.2243147 128.0 +3.4568834 -12.496745 -0.94210386 128.0 +3.3809192 -12.520609 -0.94232982 128.0 +0.88894486 -3.3708246 -0.22597189 128.0 +0.86750108 -3.3733182 -0.22574592 128.0 +3.1234941 -12.475282 -0.93411922 128.0 +3.0305934 -12.427365 -0.92892164 128.0 +2.9715493 -12.518494 -0.93457115 128.0 +2.8922145 -12.525804 -0.93374258 128.0 +0.72083259 -3.2076383 -0.21098186 128.0 +1.8966749 -8.6982508 -0.63514709 128.0 +0.67501938 -3.1859996 -0.20864673 128.0 +1.7200724 -8.3809357 -0.60893339 128.0 +1.6639513 -8.3678589 -0.60712552 128.0 +1.6225578 -8.4298096 -0.61111784 128.0 +2.3309257 -12.526678 -0.92515528 128.0 +1.4800246 -8.2321854 -0.59447062 128.0 +2.209723 -12.742981 -0.93961805 128.0 +2.134284 -12.77302 -0.9408986 128.0 +1.3840957 -8.6055717 -0.62106097 128.0 +1.9670312 -12.731236 -0.93577641 128.0 +1.893991 -12.77759 -0.93841285 128.0 +1.8135927 -12.775149 -0.93735826 128.0 +1.7393258 -12.816669 -0.93969339 128.0 +1.6612911 -12.832044 -0.94007003 128.0 +1.5822802 -12.840016 -0.93991935 128.0 +0.45414311 -3.8743618 -0.25730786 128.0 +1.4000182 -12.636459 -0.92304617 128.0 +0.4127824 -3.9391484 -0.26182747 128.0 +0.38148376 -3.8691638 -0.25632861 128.0 +0.35672987 -3.8605092 -0.25550002 128.0 +1.0957135 -12.739536 -0.928545 128.0 +0.31012124 -3.874536 -0.25625327 128.0 +0.28700012 -3.8853161 -0.25693122 128.0 +0.2629537 -3.8840194 -0.25670522 128.0 +0.78773767 -12.844204 -0.93472183 128.0 +0.70293438 -12.74027 -0.92651117 128.0 +0.62479705 -12.745339 -0.92658651 128.0 +0.54572898 -12.729008 -0.92508 128.0 +0.47571951 -12.953338 -0.9418025 128.0 +0.39544016 -12.930099 -0.93984401 128.0 +0.31221101 -12.772783 -0.92779171 128.0 +0.23646581 -12.919023 -0.93871415 128.0 +0.15784194 -12.974073 -0.94278181 128.0 +0.077716276 -12.888046 -0.93622833 128.0 +-0.0013743453 -12.937141 -0.93991935 128.0 +-0.080572017 -12.907972 -0.9377349 128.0 +-0.16069233 -12.981019 -0.94330907 128.0 +-0.24097005 -13.013686 -0.94587016 128.0 +-0.32103798 -13.020934 -0.9465481 128.0 +-0.39781779 -12.918055 -0.93894011 128.0 +-0.47474939 -12.852592 -0.93419451 128.0 +-0.5537315 -12.852426 -0.93442053 128.0 +-0.62727672 -12.741224 -0.92628521 128.0 +-0.719473 -12.990025 -0.94541824 128.0 +-0.78266376 -12.717638 -0.92515528 128.0 +-0.86182964 -12.729509 -0.92643589 128.0 +-0.95933759 -12.986514 -0.94632214 128.0 +-1.0415522 -13.012191 -0.94873261 128.0 +-1.1237748 -13.033372 -0.95084172 128.0 +-1.2003267 -12.989493 -0.94805467 128.0 +-1.2873511 -13.056309 -0.95370418 128.0 +-1.3505876 -12.887506 -0.9415012 128.0 +-1.4353638 -12.930511 -0.94541824 128.0 +-1.5381458 -13.121514 -0.96063423 128.0 +-1.6416134 -13.297881 -0.9747957 128.0 +-1.7329296 -13.362712 -0.98052049 128.0 +-1.8389453 -13.52869 -0.99400401 128.0 +-1.922202 -13.519127 -0.99415463 128.0 +-2.0065827 -13.516941 -0.99490792 128.0 +-2.098484 -13.562514 -0.99935222 128.0 +-2.1532733 -13.373163 -0.98586869 128.0 +-2.2939 -13.709816 -1.0126851 128.0 +-2.3694451 -13.64636 -1.0089188 128.0 +-2.4579039 -13.658062 -1.0109526 128.0 +-2.5549998 -13.714284 -1.0164514 128.0 +-2.6508019 -13.759055 -1.0211216 128.0 +-2.7505593 -13.81979 -1.0270724 128.0 +-2.8367093 -13.80949 -1.0275998 128.0 +-2.9226296 -13.797677 -1.0280517 128.0 +-3.0059595 -13.77364 -1.0275998 128.0 +-3.0683308 -13.656674 -1.0199918 128.0 +-3.1803727 -13.760003 -1.029483 128.0 +-3.278578 -13.798437 -1.0340025 128.0 +-3.3944054 -13.905929 -1.0439457 128.0 +-3.475302 -13.867429 -1.0425898 128.0 +-3.5431852 -13.779209 -1.0373923 128.0 +-3.6225796 -13.737926 -1.0358857 128.0 +-3.7120106 -13.734691 -1.0373923 128.0 +-3.7943521 -13.704929 -1.036865 128.0 +-3.8868058 -13.711129 -1.0392001 128.0 +-3.9919841 -13.759803 -1.044925 128.0 +-4.0791755 -13.744609 -1.0456781 128.0 +-4.1871848 -13.797563 -1.051855 128.0 +-4.2948151 -13.845895 -1.0577304 128.0 +-4.3796911 -13.819283 -1.0577304 128.0 +-4.4702382 -13.810173 -1.0591617 128.0 +-4.5545788 -13.781538 -1.0590863 128.0 +-4.6349106 -13.741049 -1.0581071 128.0 +-4.7210846 -13.718008 -1.0585591 128.0 +-4.8249888 -13.745233 -1.0630786 128.0 +-4.8840284 -13.644958 -1.0574292 128.0 +-4.8483472 -13.287817 -1.0311401 128.0 +-4.9315267 -13.262491 -1.0315168 128.0 +-5.011044 -13.227321 -1.0311401 128.0 +-5.1746936 -13.410287 -1.0484653 128.0 +-5.3010159 -13.490577 -1.0575799 128.0 +-5.1154914 -12.78752 -1.0030432 128.0 +-5.5831394 -13.71172 -1.0810064 128.0 +-5.6812935 -13.711287 -1.0837935 128.0 +-5.7610559 -13.666062 -1.082965 128.0 +-5.5940332 -13.045776 -1.0349065 128.0 +-5.8569641 -13.430731 -1.0694815 128.0 +-5.9356246 -13.386337 -1.0688035 128.0 +-6.1029 -13.538744 -1.0844715 128.0 +-6.2926211 -13.734014 -1.1038305 128.0 +-6.3624597 -13.664411 -1.1012694 128.0 +-6.4790249 -13.694517 -1.1070695 128.0 +-1.6549587 -3.4452362 -0.25135702 128.0 +-1.675192 -3.4332247 -0.25120637 128.0 +-1.6838213 -3.3978679 -0.24909723 128.0 +-1.702396 -3.3830192 -0.24872059 128.0 +-1.7199441 -3.3662951 -0.24819331 128.0 +-1.7401075 -3.3547933 -0.24811798 128.0 +-1.7708855 -3.3634613 -0.24977517 128.0 +-4.4915514 -8.4016066 -0.6823017 128.0 +-4.7166181 -8.6937828 -0.70979595 128.0 +-7.6408749 -13.87852 -1.1594217 128.0 +-1.8499776 -3.3137653 -0.2493232 128.0 +-1.8707674 -3.3032193 -0.24939853 128.0 +-4.7456641 -8.2572823 -0.68207568 128.0 +-8.3995752 -14.407832 -1.2224702 128.0 +-8.5121851 -14.397222 -1.2260859 128.0 +-8.1188354 -13.541697 -1.155354 128.0 +-8.2064352 -13.499293 -1.156032 128.0 +-7.805613 -12.664363 -1.08643 128.0 +-7.9058971 -12.652592 -1.0896691 128.0 +-8.0004597 -12.630798 -1.0920795 128.0 +-8.1133709 -12.636848 -1.097051 128.0 +-8.1951084 -12.593514 -1.0976537 128.0 +-8.2184191 -12.461419 -1.0902717 128.0 +-8.258152 -12.356044 -1.0853001 128.0 +-9.561882 -14.118119 -1.2507178 128.0 +-9.9118509 -14.443121 -1.2858953 128.0 +-9.9980087 -14.378756 -1.2855941 128.0 +-10.088919 -14.321215 -1.2859707 128.0 +-9.7322607 -13.636536 -1.2281951 128.0 +-9.7041502 -13.422227 -1.2138076 128.0 +-9.4846344 -12.950558 -1.1752403 128.0 +-10.597764 -14.285525 -1.306309 128.0 +-10.805033 -14.37966 -1.3213743 128.0 +-10.951644 -14.390056 -1.328681 128.0 +-11.10244 -14.40393 -1.3364396 128.0 +-11.204725 -14.353613 -1.3381722 128.0 +-11.332786 -14.335435 -1.3430685 128.0 +-11.526484 -14.397956 -1.3558739 128.0 +-11.659199 -14.381953 -1.3612221 128.0 +-10.906943 -13.286667 -1.2611881 128.0 +-11.037348 -13.278536 -1.2669884 128.0 +-11.064675 -13.146482 -1.2606609 128.0 +-11.151601 -13.085931 -1.2614142 128.0 +-12.107905 -14.03264 -1.3627287 128.0 +-12.172785 -13.934054 -1.3603183 128.0 +-12.22568 -13.822504 -1.3566272 128.0 +-12.275005 -13.707859 -1.3526349 128.0 +-12.236311 -13.497099 -1.3388501 128.0 +-12.36138 -13.468043 -1.3435957 128.0 +-12.382013 -13.325472 -1.336741 128.0 +-12.429379 -13.212934 -1.3329747 128.0 +-12.483397 -13.108259 -1.3300369 128.0 +-12.648726 -13.119707 -1.3393021 128.0 +-12.714362 -13.026865 -1.3377203 128.0 +-12.801764 -12.956408 -1.3385488 128.0 +-13.067204 -13.063723 -1.358435 128.0 +-13.138601 -12.974891 -1.3575312 128.0 +-13.228674 -12.904473 -1.3586611 128.0 +-13.271701 -12.788467 -1.3548948 128.0 +-13.365811 -12.721917 -1.3565519 128.0 +-13.421097 -12.618494 -1.3542168 128.0 +-13.524575 -12.560332 -1.3569286 128.0 +-13.576405 -12.454194 -1.3543675 128.0 +-13.587537 -12.31174 -1.3477387 128.0 +-13.555079 -12.131718 -1.3368163 128.0 +-13.46788 -11.905673 -1.3205457 128.0 +-10.07851 -8.8002739 -0.97336447 128.0 +-13.750411 -11.858018 -1.3342552 128.0 +-13.797859 -11.752089 -1.3317693 128.0 +-14.139853 -11.894421 -1.358435 128.0 +-10.335933 -8.5872393 -0.97773343 128.0 +-10.337546 -8.4819164 -0.97276187 128.0 +-10.401018 -8.427743 -0.97389174 128.0 +-15.115817 -12.094501 -1.425024 128.0 +-15.190526 -12.002142 -1.4250994 128.0 +-15.269387 -11.913002 -1.4256266 128.0 +-10.645001 -8.200984 -0.97773343 128.0 +-15.501735 -11.791126 -1.4339125 128.0 +-15.574589 -11.696385 -1.4339879 128.0 +-15.629242 -11.588131 -1.4324061 128.0 +-15.671082 -11.470812 -1.4296943 128.0 +-15.729856 -11.366264 -1.4286397 128.0 +-15.81148 -11.278219 -1.4297696 128.0 +-15.928491 -11.214856 -1.4342139 128.0 +-16.208275 -11.263711 -1.4536482 128.0 +-16.404549 -11.251461 -1.4653238 128.0 +-16.639263 -11.262934 -1.4804645 128.0 +-16.746202 -11.186101 -1.4839295 128.0 +-16.824514 -11.089723 -1.4848335 128.0 +-16.954103 -11.026507 -1.4904077 128.0 +-17.261473 -11.076275 -1.5119511 128.0 +-17.367868 -10.994684 -1.5154161 128.0 +-17.291216 -10.798127 -1.5026106 128.0 +-17.357994 -10.69235 -1.5026859 128.0 +-17.425831 -10.587195 -1.5029119 128.0 +-17.483622 -10.475973 -1.5023093 128.0 +-17.53727 -10.362412 -1.5014054 128.0 +-17.674622 -10.297777 -1.5078834 128.0 +-17.771198 -10.208503 -1.5108212 128.0 +-17.843914 -10.105165 -1.5117252 128.0 +-17.92909 -10.008608 -1.513759 128.0 +-16.197384 -8.9121304 -1.3591883 128.0 +-16.370104 -8.8767395 -1.3693575 128.0 +-6.8182774 -3.6440458 -0.54663813 128.0 +-16.354271 -8.610158 -1.3588117 128.0 +-16.347485 -8.4788904 -1.3537648 128.0 +-7.2056561 -3.6821353 -0.57390642 128.0 +-7.2058439 -3.6266489 -0.57202321 128.0 +-6.9527607 -3.4460194 -0.54882258 128.0 +-6.972878 -3.4028561 -0.54874724 128.0 +-6.9936261 -3.3600073 -0.54874724 128.0 +-6.9266653 -3.2756941 -0.54144055 128.0 +-6.8128271 -3.1708789 -0.53029221 128.0 +-19.140152 -8.7635708 -1.5528536 128.0 +-19.215385 -8.6557913 -1.5546614 128.0 +-7.3185906 -3.243664 -0.56735295 128.0 +-7.2981329 -3.1811714 -0.56403857 128.0 +-19.518106 -8.3634634 -1.5667137 128.0 +-19.626034 -8.2675428 -1.571384 128.0 +-19.727987 -8.1683235 -1.5756023 128.0 +-19.835001 -8.0704184 -1.5802726 128.0 +-19.954519 -7.976687 -1.5859973 128.0 +-20.036503 -7.8672161 -1.5887091 128.0 +-20.124405 -7.7595501 -1.5919482 128.0 +-20.181896 -7.6398058 -1.5927768 128.0 +-20.248959 -7.5234675 -1.594434 128.0 +-20.275066 -7.3919091 -1.5928521 128.0 +-20.473087 -7.3220916 -1.6051304 128.0 +-20.525156 -7.1989732 -1.605733 128.0 +-20.601004 -7.0839205 -1.6082941 128.0 +-20.680935 -6.9697995 -1.6112318 128.0 +-20.760241 -6.8549643 -1.6141696 128.0 +-20.8503 -6.7430987 -1.6180112 128.0 +-20.929308 -6.6270752 -1.6210244 128.0 +-21.01244 -6.5118113 -1.6244141 128.0 +-21.088263 -6.3937511 -1.6272764 128.0 +-12.447251 -3.6911399 -0.94338441 128.0 +-21.311672 -6.1769481 -1.6388015 128.0 +-13.185286 -3.734524 -0.99784565 128.0 +-21.445456 -5.9314332 -1.6434717 128.0 +-21.491074 -5.8023334 -1.644225 128.0 +-12.791831 -3.3700581 -0.96191478 128.0 +-12.801644 -3.2887771 -0.96108621 128.0 +-12.852537 -3.2179132 -0.96349663 128.0 +-21.844006 -5.3260684 -1.6610982 128.0 +-21.919935 -5.2022953 -1.664488 128.0 +-21.988363 -5.076221 -1.6673503 128.0 +-13.193259 -2.9611194 -0.98406088 128.0 +-18.215155 -3.9705536 -1.3709394 128.0 +-22.054661 -4.6656752 -1.6655425 128.0 +-19.282314 -3.9558833 -1.4495806 128.0 +-21.957682 -4.3643613 -1.6537915 128.0 +-21.83227 -4.200357 -1.6421158 128.0 +-21.685091 -4.0342278 -1.6288583 128.0 +-18.718964 -3.3638823 -1.3993375 128.0 +-18.722548 -3.2460668 -1.398057 128.0 +-21.513723 -3.593987 -1.610328 128.0 +-21.528479 -3.4608061 -1.6098007 128.0 +-21.550295 -3.3287969 -1.6098759 128.0 +-21.597933 -3.2005954 -1.6119851 128.0 +-19.358284 -2.7475445 -1.4396374 128.0 +-21.849016 -2.9642594 -1.6282557 128.0 +-21.976562 -2.8443418 -1.6366169 128.0 +-22.208363 -2.735888 -1.6529629 128.0 +-22.530769 -2.6353488 -1.6762389 128.0 +-22.652563 -2.5087926 -1.6842989 128.0 +-23.014647 -2.4060228 -1.7106632 128.0 +-23.218521 -2.2833931 -1.7250507 128.0 +-23.263868 -2.1438103 -1.7274611 128.0 +-23.436539 -2.0147684 -1.7395887 128.0 +-24.118418 -1.9243484 -1.790359 128.0 +-26.024239 -1.9156947 -1.9338566 128.0 +-26.068336 -1.7581898 -1.9363424 128.0 +-26.097544 -1.5993624 -1.9377736 128.0 +-26.216387 -1.4452335 -1.9460595 128.0 +-26.118193 -1.2791312 -1.9379995 128.0 +-26.20525 -1.1222585 -1.9440256 128.0 +-26.166801 -0.95980221 -1.9406359 128.0 +-26.190138 -0.79977471 -1.9419918 128.0 +-26.165644 -0.63835597 -1.9398074 128.0 +-26.160095 -0.47763118 -1.9391295 128.0 +-26.136608 -0.3167938 -1.937171 128.0 +-26.121109 -0.15631595 -1.9358904 128.0 +-26.112602 0.003961341 -1.9352125 128.0 +-26.109095 0.16416624 -1.9349865 128.0 +-26.103607 0.32431582 -1.9346851 128.0 +-26.096142 0.48438567 -1.9343085 128.0 +-26.08869 0.64440078 -1.9340072 128.0 +-26.076271 0.8042196 -1.9334046 128.0 +-26.051912 0.96350437 -1.9319733 128.0 +-26.030567 1.1226926 -1.9308435 128.0 +-26.009245 1.2817043 -1.9297889 128.0 +-25.985956 1.4404414 -1.928659 128.0 +-25.967672 1.599309 -1.927981 128.0 +-25.946426 1.7578716 -1.9271525 128.0 +-22.53828 -0.57403761 -1.9388834 128.0 +-22.550343 -0.43590793 -1.9396694 128.0 +-22.531673 -0.2972571 -1.9378355 128.0 +-22.539051 -0.15904202 -1.9383594 128.0 +-22.527649 -0.020730797 -1.9373115 128.0 +-22.515398 0.11743451 -1.9362636 128.0 +-22.493334 0.25534707 -1.9344296 128.0 +-22.483376 0.39321956 -1.933731 128.0 +-22.467594 0.53086191 -1.9325957 128.0 +-22.447981 0.66823649 -1.9311984 128.0 +-22.406624 0.80464005 -1.9279672 128.0 +-22.38534 0.94143987 -1.9265699 128.0 +-22.352276 1.0774815 -1.924212 128.0 +-22.318386 1.2131528 -1.9218541 128.0 +-22.283676 1.3484489 -1.9194962 128.0 +-22.268024 1.4846897 -1.9188849 128.0 +-22.24061 1.6199934 -1.917313 128.0 +-22.217342 1.755409 -1.9161777 128.0 +-22.198212 1.8910227 -1.9154791 128.0 +-22.17528 2.026196 -1.9145185 128.0 +-22.142599 2.1602883 -1.9127718 128.0 +-22.125956 2.2958038 -1.9125099 128.0 +-22.100559 2.4303253 -1.9115492 128.0 +-22.078304 2.5650814 -1.9109379 128.0 +-22.050283 2.6990509 -1.9098899 128.0 +-22.029356 2.8337898 -1.9095407 128.0 +-21.996744 2.9669089 -1.9082307 128.0 +-21.97122 3.1008482 -1.9076194 128.0 +-21.923201 3.2313905 -1.9050869 128.0 +-21.89016 3.3638811 -1.9039515 128.0 +-21.84845 3.4948294 -1.9021176 128.0 +-21.812838 3.6265361 -1.900895 128.0 +-21.784285 3.7592926 -1.9003711 128.0 +-21.78042 3.8963959 -1.9021176 128.0 +-21.767857 4.0321417 -1.9031656 128.0 +-21.711397 4.1596332 -1.9003711 128.0 +-21.650286 4.28581 -1.8972272 128.0 +-21.61187 4.4161801 -1.8961792 128.0 +-21.56097 4.5437751 -1.8940833 128.0 +-21.618353 4.6945868 -1.9017683 128.0 +-21.48609 4.8041067 -1.8925114 128.0 +-21.44747 4.9338427 -1.8917254 128.0 +-21.40225 5.0619102 -1.8904154 128.0 +-21.361109 5.1907845 -1.8895422 128.0 +-21.309525 5.3169332 -1.8877956 128.0 +-21.273605 5.4468446 -1.8875335 128.0 +-21.2446 5.5785394 -1.8879702 128.0 +-21.224401 5.7126722 -1.8892802 128.0 +-21.22064 5.8515334 -1.8921621 128.0 +-21.237064 5.9965181 -1.8969651 128.0 +-21.239109 6.1380525 -1.9005457 128.0 +-21.258366 6.285203 -1.9057854 128.0 +-21.276613 6.4328203 -1.9110253 128.0 +-21.277668 6.5758977 -1.9147804 128.0 +-21.291065 6.7234287 -1.9197582 128.0 +-21.276905 6.8628097 -1.9222908 128.0 +-21.263727 7.0028925 -1.924998 128.0 +-21.248686 7.1427541 -1.9276179 128.0 +-21.240265 7.2852802 -1.9309365 128.0 +-21.257223 7.4371824 -1.9367002 128.0 +-21.268423 7.5878921 -1.9420273 128.0 +-21.281382 7.7400403 -1.9476163 128.0 +-21.271786 7.8846693 -1.9511969 128.0 +-21.292902 8.0414371 -1.9577466 128.0 +-21.282209 8.1869583 -1.9614145 128.0 +-21.308561 8.3475466 -1.9686629 128.0 +-21.307833 8.4984331 -1.9734659 128.0 +-21.30513 8.6492491 -1.9781817 128.0 +-21.274675 8.7893209 -1.9803649 128.0 +-21.263508 8.9378366 -1.9844694 128.0 +-21.257727 9.0892868 -1.9891852 128.0 +-21.23353 9.2334547 -1.9922417 128.0 +-21.212919 9.3796806 -1.9957349 128.0 +-21.201307 9.5304937 -2.0001888 128.0 +-21.214916 9.6935215 -2.0071752 128.0 +-21.185759 9.8377762 -2.0101445 128.0 +-21.174547 9.9909639 -2.0149474 128.0 +-21.148777 10.137924 -2.0184407 128.0 +-21.108566 10.278402 -2.0206239 128.0 +-21.136183 10.45277 -2.0295315 128.0 +-21.110819 10.601933 -2.0333741 128.0 +-21.094179 10.756155 -2.0381773 128.0 +-21.064941 10.904618 -2.0418451 128.0 +-21.024971 11.048029 -2.0445523 128.0 +-20.990189 11.194641 -2.0478709 128.0 +-20.964033 11.346457 -2.05215 128.0 +-20.939423 11.499812 -2.0566909 128.0 +-20.898054 11.644564 -2.0596602 128.0 +-20.873041 11.799043 -2.0643761 128.0 +-20.847782 11.954148 -2.0691793 128.0 +-20.837765 12.118903 -2.0756416 128.0 +-20.81707 12.278416 -2.0811434 128.0 +-20.85932 12.47648 -2.0931947 128.0 +-20.800261 12.615084 -2.0950286 128.0 +-20.69446 12.725256 -2.0921469 128.0 +-20.621061 12.855157 -2.0926709 128.0 +-20.595692 13.015502 -2.0982599 128.0 +-20.392971 13.063181 -2.0855098 128.0 +-20.136972 13.074147 -2.0671706 128.0 +-19.869129 13.074255 -2.0475214 128.0 +-19.602879 13.072125 -2.0279596 128.0 +-19.280457 13.028741 -2.002372 128.0 +-19.04891 13.043243 -1.9863033 128.0 +-18.802364 13.04461 -1.9685755 128.0 +-18.576084 13.057195 -1.9529434 128.0 +-18.304922 13.035138 -1.932421 128.0 +-18.138958 13.085433 -1.9231641 128.0 +-17.9417 13.111261 -1.9105012 128.0 +-17.692766 13.096642 -1.8921621 128.0 +-17.464621 13.094404 -1.8760061 128.0 +-17.292709 13.132037 -1.8659632 128.0 +-17.153374 13.192955 -1.8595008 128.0 +-17.077602 13.302242 -1.8601121 128.0 +-17.023815 13.428988 -1.863256 128.0 +-16.874939 13.480344 -1.8558329 128.0 +-16.716005 13.522235 -1.8472747 128.0 +-16.558737 13.563949 -1.838891 128.0 +-16.403122 13.605515 -1.830682 128.0 +-16.253727 13.65081 -1.8231716 128.0 +-16.100601 13.69156 -1.8152246 128.0 +-15.959669 13.741345 -1.8086749 128.0 +-15.781188 13.75719 -1.7977587 128.0 +-15.646437 13.809597 -1.7919077 128.0 +-15.518324 13.866844 -1.7868426 128.0 +-15.297755 13.839502 -1.7708613 128.0 +-15.133945 13.861115 -1.7615169 128.0 +-14.971908 13.882597 -1.7523474 128.0 +-14.850854 13.940794 -1.7480682 128.0 +-14.681269 13.952052 -1.7379379 128.0 +-14.534363 13.983167 -1.730515 128.0 +-14.423312 14.047758 -1.7274585 128.0 +-14.32053 14.119907 -1.7254498 128.0 +-14.242788 14.21666 -1.7265851 128.0 +-14.172807 14.321486 -1.7287683 128.0 +-14.103467 14.427412 -1.7311263 128.0 +-14.000836 14.499345 -1.7293797 128.0 +-13.890292 14.562634 -1.7266724 128.0 +-13.792478 14.638888 -1.7256244 128.0 +-13.934506 14.972635 -1.7554913 128.0 +-13.851138 15.067388 -1.7566265 128.0 +-14.882827 16.390343 -1.903253 128.0 +-14.734087 16.427959 -1.8969651 128.0 +-14.607907 16.489721 -1.8936467 128.0 +-14.468406 16.535561 -1.8885815 128.0 +-14.342571 16.59614 -1.8853503 128.0 +-14.217834 16.657312 -1.8822938 128.0 +-14.101233 16.727482 -1.8803725 128.0 +-14.002153 16.818283 -1.8808966 128.0 +-13.899328 16.904652 -1.8809838 128.0 +-13.790945 16.984205 -1.8803725 128.0 +-13.677748 17.057625 -1.8791499 128.0 +-13.567261 17.134199 -1.878364 128.0 +-13.455736 17.209276 -1.8774906 128.0 +-13.340756 17.279688 -1.8761808 128.0 +-13.223004 17.346169 -1.8745215 128.0 +-13.119317 17.430956 -1.8749582 128.0 +-13.004392 17.500732 -1.8738228 128.0 +-12.890282 17.57136 -1.8728622 128.0 +-12.77229 17.636406 -1.8713776 128.0 +-12.654565 17.701477 -1.8699803 128.0 +-12.541118 17.77228 -1.8692816 128.0 +-12.426708 17.841539 -1.8684957 128.0 +-12.315872 17.915812 -1.8683211 128.0 +-12.202355 17.986095 -1.8677971 128.0 +-12.08456 18.04987 -1.8666618 128.0 +-11.962049 18.106224 -1.8648279 128.0 +-9.1425714 14.025079 -1.4301012 128.0 +-11.709857 18.206411 -1.8601121 128.0 +-11.587249 18.261095 -1.8583655 128.0 +-11.472341 18.327627 -1.8579289 128.0 +-11.357051 18.393438 -1.8574922 128.0 +-11.245013 18.464479 -1.8576669 128.0 +-8.6924763 14.472498 -1.4424145 128.0 +-8.5979271 14.516133 -1.4414539 128.0 +-10.864049 18.601238 -1.8508551 128.0 +-10.736287 18.644241 -1.8484973 128.0 +-10.619719 18.706301 -1.848148 128.0 +-10.505712 18.77285 -1.8483226 128.0 +-10.399949 18.854403 -1.8500692 128.0 +-8.1872196 15.06082 -1.4652076 128.0 +-10.178143 18.999926 -1.8519905 128.0 +-10.052534 19.04528 -1.8503312 128.0 +-9.9157219 19.0686 -1.846576 128.0 +-9.7912664 19.114897 -1.8451787 128.0 +-9.6325121 19.092791 -1.8371444 128.0 +-9.4876976 19.096224 -1.83173 128.0 +-9.3558998 19.12455 -1.8288481 128.0 +-9.2682047 19.243525 -1.8348738 128.0 +-9.181962 19.36754 -1.8414235 128.0 +-9.0814867 19.463236 -1.8452661 128.0 +-8.9722834 19.541225 -1.8474493 128.0 +-8.8632851 19.620422 -1.8498073 128.0 +-8.7512255 19.693554 -1.8516412 128.0 +-8.640995 19.771524 -1.853999 128.0 +-8.5254164 19.837902 -1.855309 128.0 +-8.4077978 19.899933 -1.8562696 128.0 +-8.2889748 19.959427 -1.8570555 128.0 +-8.1746311 20.030203 -1.8589768 128.0 +-8.0586195 20.097551 -1.8606361 128.0 +-7.9409924 20.161449 -1.8620334 128.0 +-7.8142595 20.202364 -1.8613347 128.0 +-7.6855555 20.237823 -1.8601995 128.0 +-7.5553184 20.268732 -1.8587148 128.0 +-7.4236226 20.295063 -1.8568809 128.0 +-7.2949171 20.328979 -1.8558329 128.0 +-7.1700435 20.373358 -1.8558329 128.0 +-7.0481491 20.426386 -1.8567063 128.0 +-6.9303427 20.491896 -1.8588022 128.0 +-6.8091769 20.548218 -1.8601121 128.0 +-6.6863503 20.600033 -1.8610728 128.0 +-6.5631442 20.651115 -1.8620334 128.0 +-6.4363079 20.690998 -1.8620334 128.0 +-6.3103895 20.733913 -1.8623827 128.0 +-6.1827655 20.771288 -1.8622954 128.0 +-4.2884922 14.737925 -1.3080143 128.0 +-3.9720962 13.969621 -1.2356181 128.0 +-5.8039188 20.89789 -1.8637799 128.0 +-5.6789713 20.945608 -1.8649153 128.0 +-5.5559502 21.001245 -1.8668364 128.0 +-5.4292245 21.043623 -1.8676225 128.0 +-3.6486135 14.509974 -1.2740431 128.0 +-3.5507431 14.496287 -1.2708119 128.0 +-5.0386496 21.130302 -1.8667492 128.0 +-4.904624 21.142384 -1.8650899 128.0 +-3.207916 14.224901 -1.2407705 128.0 +-4.2318192 19.316092 -1.6959324 128.0 +-4.1780825 19.646677 -1.7232666 128.0 +-4.0634913 19.701212 -1.7258865 128.0 +-3.9314008 19.670094 -1.7209086 128.0 +-3.8043876 19.661572 -1.7180269 128.0 +-3.7468994 20.02236 -1.7481556 128.0 +-3.480226 19.249964 -1.6773312 128.0 +-3.3680379 19.305304 -1.6803877 128.0 +-3.3565722 19.962191 -1.7369773 128.0 +-3.4645069 21.406345 -1.8634306 128.0 +-3.3343198 21.435076 -1.8641293 128.0 +-3.2042048 21.464983 -1.8650025 128.0 +-3.0732841 21.490156 -1.8655266 128.0 +-2.9421751 21.514532 -1.8660505 128.0 +-2.8093355 21.526253 -1.8655266 128.0 +-2.6760943 21.534187 -1.8647406 128.0 +-2.5422773 21.536352 -1.863518 128.0 +-2.4093096 21.544617 -1.8629067 128.0 +-2.2761273 21.550077 -1.8621206 128.0 +-2.1452355 21.577517 -1.8633432 128.0 +-2.0123355 21.585314 -1.8629067 128.0 +-1.8824447 21.627028 -1.8655266 128.0 +-1.7492266 21.632214 -1.8650025 128.0 +-1.6180936 21.664394 -1.8669238 128.0 +-1.4860865 21.687828 -1.8681464 128.0 +-1.3536048 21.706482 -1.8690197 128.0 +-1.2211177 21.727308 -1.870155 128.0 +-1.088177 21.742352 -1.8708537 128.0 +-0.95505393 21.755585 -1.871465 128.0 +-0.82169658 21.765018 -1.8718143 128.0 +-0.68851137 21.781599 -1.8728622 128.0 +-0.55507743 21.794376 -1.8736482 128.0 +-0.4216283 21.812311 -1.8749582 128.0 +-0.2878615 21.820463 -1.8754821 128.0 +-0.15397526 21.822815 -1.8755695 128.0 +-0.020076625 21.830322 -1.8761808 128.0 +0.11390834 21.837008 -1.8767921 128.0 +0.2480762 21.851837 -1.8781893 128.0 +0.3823781 21.86285 -1.8793246 128.0 +0.51663643 21.865072 -1.8797612 128.0 +0.65075862 21.860495 -1.879674 128.0 +0.78491557 21.857086 -1.8797612 128.0 +0.91918075 21.855841 -1.8801106 128.0 +1.0531725 21.847799 -1.8799359 128.0 +1.1872082 21.840925 -1.8799359 128.0 +1.3221016 21.848145 -1.8812459 128.0 +1.455008 21.822723 -1.8797612 128.0 +1.5882312 21.804443 -1.8789753 128.0 +1.7214417 21.787336 -1.878364 128.0 +1.693541 19.879532 -1.7114772 128.0 +1.8041593 19.744761 -1.7005609 128.0 +1.930596 19.787849 -1.705364 128.0 +2.0542371 19.79743 -1.7072853 128.0 +2.1711006 19.742863 -1.7036175 128.0 +2.3039241 19.830101 -1.712525 128.0 +2.4198682 19.769117 -1.7084205 128.0 +2.5263824 19.639286 -1.6982903 128.0 +2.6162169 19.396349 -1.6782045 128.0 +2.7364342 19.388807 -1.6789905 128.0 +3.1760521 21.547712 -1.8718143 128.0 +3.3085091 21.529787 -1.8719889 128.0 +3.4408658 21.511049 -1.8721635 128.0 +3.5734437 21.493462 -1.8725129 128.0 +3.704411 21.466223 -1.8720763 128.0 +3.8351784 21.438187 -1.8716396 128.0 +3.9661043 21.411312 -1.8713776 128.0 +2.7044377 14.11519 -1.2223439 128.0 +4.2302961 21.369823 -1.8721635 128.0 +4.3637323 21.355177 -1.8732115 128.0 +3.0533509 14.488019 -1.2604196 128.0 +3.1379628 14.449542 -1.2586731 128.0 +3.2413442 14.496123 -1.2646115 128.0 +4.888957 21.252333 -1.8741722 128.0 +3.5576959 15.041766 -1.3174459 128.0 +5.1547976 21.213003 -1.8761808 128.0 +5.2863078 21.186773 -1.8767047 128.0 +3.425801 13.379463 -1.1731774 128.0 +3.5073254 13.356263 -1.1730027 128.0 +5.6715078 21.071451 -1.8753948 128.0 +5.7972507 21.023769 -1.8742595 128.0 +4.027317 14.262523 -1.2616423 128.0 +4.0580602 14.041354 -1.2437397 128.0 +4.1271944 13.958872 -1.2384999 128.0 +4.1922989 13.865582 -1.2322996 128.0 +4.2720032 13.822466 -1.2307276 128.0 +4.338738 13.738997 -1.2254878 128.0 +4.4202051 13.703583 -1.2247019 128.0 +4.5060754 13.68188 -1.2252258 128.0 +4.578197 13.619037 -1.2219946 128.0 +4.7363315 13.808359 -1.2421678 128.0 +4.7749143 13.647396 -1.2299416 128.0 +4.8622451 13.628162 -1.2309023 128.0 +5.016593 13.792799 -1.2490668 128.0 +5.1956453 14.016763 -1.2729079 128.0 +5.4082499 14.320118 -1.3043464 128.0 +5.5807772 14.507018 -1.3250436 128.0 +5.6867628 14.516097 -1.3291481 128.0 +5.6288505 14.112659 -1.2943909 128.0 +5.7097178 14.06401 -1.2930809 128.0 +5.8369842 14.128147 -1.3025125 128.0 +5.9370728 14.124208 -1.3055691 128.0 +5.9758468 13.975765 -1.2949148 128.0 +6.0960484 14.018313 -1.3025125 128.0 +6.1831565 13.983378 -1.3027745 128.0 +6.3999438 14.236838 -1.3308073 128.0 +6.5368576 14.306031 -1.3412869 128.0 +6.6899629 14.406603 -1.3549103 128.0 +9.19522 19.487997 -1.8514664 128.0 +9.3116093 19.424921 -1.8508551 128.0 +9.4328032 19.371899 -1.8512918 128.0 +9.5554638 19.321693 -1.8520777 128.0 +9.6827803 19.280502 -1.8538244 128.0 +9.816287 19.2509 -1.8567935 128.0 +9.9429245 19.207115 -1.8584528 128.0 +10.06615 19.156328 -1.8595008 128.0 +10.183501 19.094202 -1.8595008 128.0 +10.295729 19.022598 -1.8586274 128.0 +10.384922 18.909294 -1.8536497 128.0 +10.485721 18.818241 -1.8509425 128.0 +10.590695 18.735336 -1.8491086 128.0 +10.711896 18.681234 -1.8502438 128.0 +10.836336 18.63238 -1.8519905 128.0 +10.96058 18.582699 -1.853737 128.0 +11.083599 18.530485 -1.855309 128.0 +11.206906 18.478313 -1.8569683 128.0 +11.317467 18.404957 -1.8565316 128.0 +11.424388 18.325869 -1.8555709 128.0 +11.530232 18.245319 -1.8545229 128.0 +11.634444 18.162485 -1.8533003 128.0 +11.741871 18.084906 -1.852689 128.0 +11.854807 18.015848 -1.8530384 128.0 +11.972864 17.954372 -1.854261 128.0 +12.085593 17.884697 -1.8546977 128.0 +12.201859 17.820068 -1.8557457 128.0 +12.308699 17.74159 -1.8553963 128.0 +12.416182 17.664101 -1.8552216 128.0 +12.528378 17.593264 -1.8558329 128.0 +12.630847 17.508789 -1.855047 128.0 +12.738041 17.430958 -1.855047 128.0 +12.841792 17.348467 -1.8546103 128.0 +12.945608 17.266157 -1.854261 128.0 +13.047091 17.180845 -1.8536497 128.0 +13.151051 17.098888 -1.8534751 128.0 +13.25021 17.010799 -1.852689 128.0 +13.350019 16.923702 -1.8520777 128.0 +13.448635 16.835243 -1.8513792 128.0 +13.55356 16.75473 -1.8516412 128.0 +13.656742 16.672022 -1.8517284 128.0 +13.743519 16.56951 -1.8496325 128.0 +13.867352 16.51157 -1.852689 128.0 +13.991635 16.453489 -1.8558329 128.0 +13.054977 15.162468 -1.7164549 128.0 +13.092127 15.01825 -1.7090318 128.0 +13.121408 14.86668 -1.7007356 128.0 +13.136713 14.701206 -1.6907799 128.0 +13.167192 14.554575 -1.6830076 128.0 +13.221263 14.435308 -1.6784666 128.0 +13.359032 14.407238 -1.6848415 128.0 +13.470362 14.349692 -1.6878108 128.0 +13.56296 14.271825 -1.6884221 128.0 +13.694476 14.234281 -1.6940112 128.0 +13.954623 14.327683 -1.7157563 128.0 +14.042973 14.242499 -1.7158436 128.0 +14.141358 14.167346 -1.7172408 128.0 +14.240767 14.092923 -1.7188128 128.0 +14.337656 14.015723 -1.7201227 128.0 +14.426969 13.930945 -1.7205594 128.0 +14.520825 13.850412 -1.7216073 128.0 +14.632363 13.786329 -1.7248385 128.0 +14.742202 13.720041 -1.727895 128.0 +14.859844 13.66034 -1.7319123 128.0 +15.015656 13.634534 -1.7404705 128.0 +15.151687 13.589368 -1.746671 128.0 +15.269084 13.52653 -1.7506881 128.0 +15.478493 13.543449 -1.7654468 128.0 +15.612554 13.492515 -1.7713852 128.0 +15.814006 13.498003 -1.7850959 128.0 +15.954414 13.449514 -1.791733 128.0 +16.081808 13.388974 -1.7968855 128.0 +16.255993 13.365969 -1.8073651 128.0 +16.36554 13.288579 -1.8105088 128.0 +16.456873 13.196013 -1.8116442 128.0 +16.561743 13.113958 -1.8143514 128.0 +16.767458 13.11027 -1.8283241 128.0 +16.916185 13.060104 -1.8359218 128.0 +17.086317 13.024912 -1.8458774 128.0 +17.289282 13.012683 -1.8594135 128.0 +17.495934 13.000826 -1.8732989 128.0 +17.754492 13.024632 -1.8927734 128.0 +17.97204 13.015367 -1.9077067 128.0 +18.146378 12.972631 -1.9179243 128.0 +18.389235 12.976492 -1.9354775 128.0 +0 0 -0 128.0 +18.901724 12.993646 -1.9732039 128.0 +19.21851 13.038499 -1.9983549 128.0 +19.414867 12.998476 -2.0106683 128.0 +19.619764 12.962024 -2.0238552 128.0 +19.767359 12.886005 -2.0310161 128.0 +19.917269 12.810278 -2.0384393 128.0 +19.972786 12.673416 -2.0360813 128.0 +20.045107 12.547455 -2.0355573 128.0 +20.065777 12.389682 -2.0297935 128.0 +20.126957 12.257518 -2.0283089 128.0 +20.153965 12.105066 -2.0234184 128.0 +20.187578 11.957314 -2.0193141 128.0 +20.224438 11.812119 -2.0156462 128.0 +0 0 -0 128.0 +20.216265 11.476974 -2.0003633 128.0 +20.296738 11.358552 -2.0014114 128.0 +0 0 -0 128.0 +20.243801 11.0049 -1.9823736 128.0 +20.263527 10.855077 -1.9776578 128.0 +20.364109 10.748673 -1.9810636 128.0 +20.39963 10.607893 -1.9780945 128.0 +20.443941 10.472077 -1.9760858 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +20.409527 9.9845524 -1.9542534 128.0 +20.449764 9.8491907 -1.9522449 128.0 +20.515213 9.7260885 -1.9527688 128.0 +0 0 -0 128.0 +20.517143 9.4203949 -1.9415907 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +20.499029 8.9589615 -1.9236007 128.0 +20.47765 8.8003654 -1.9163524 128.0 +20.495474 8.6594296 -1.9129465 128.0 +0 0 -0 128.0 +20.51811 8.373764 -1.9051741 128.0 +20.490511 8.2161951 -1.8977512 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +20.400797 7.7474499 -1.8754821 128.0 +20.419949 7.6116881 -1.8728622 128.0 +20.353065 7.4448409 -1.8622954 128.0 +20.404928 7.3221722 -1.8629067 128.0 +20.424101 7.1879025 -1.8605487 128.0 +20.421677 7.0465245 -1.8562696 128.0 +20.428669 6.9089584 -1.852951 128.0 +20.437582 6.7725124 -1.8498945 128.0 +20.447485 6.6368327 -1.8470126 128.0 +20.444151 6.497364 -1.8429955 128.0 +20.454145 6.3626256 -1.8402883 128.0 +20.439432 6.220758 -1.8353978 128.0 +20.411337 6.0756159 -1.829372 128.0 +20.40519 5.9377337 -1.8254422 128.0 +20.368416 5.7917099 -1.8188052 128.0 +20.358458 5.6540928 -1.8147007 128.0 +20.362001 5.5207267 -1.8119061 128.0 +20.399343 5.3967028 -1.8122555 128.0 +20.436897 5.2726779 -1.8126922 128.0 +20.470797 5.147666 -1.8128668 128.0 +20.518446 5.0259919 -1.8143514 128.0 +20.541145 4.89815 -1.8136528 128.0 +20.587311 4.775847 -1.8151374 128.0 +20.624001 4.6511893 -1.815836 128.0 +20.657991 4.5258341 -1.81636 128.0 +20.691217 4.4002376 -1.8168839 128.0 +20.722706 4.2742019 -1.8173206 128.0 +20.776871 4.1526318 -1.8198532 128.0 +20.781422 4.0210948 -1.8180193 128.0 +20.84487 3.9008369 -1.8215125 128.0 +20.868412 3.772862 -1.8215125 128.0 +20.958883 3.6565595 -1.8275381 128.0 +21.04085 3.537967 -1.8328652 128.0 +21.060196 3.4084778 -1.8326906 128.0 +21.078745 3.2788844 -1.832516 128.0 +21.110291 3.1512511 -1.8335639 128.0 +21.142048 3.023495 -1.8346992 128.0 +21.179941 2.8964126 -1.8364458 128.0 +21.215096 2.7687213 -1.8380177 128.0 +21.277159 2.6441479 -1.8420348 128.0 +21.304855 2.5149455 -1.8430828 128.0 +21.361465 2.3888247 -1.8467506 128.0 +21.384636 2.2586501 -1.8475367 128.0 +21.414946 2.1290698 -1.8490212 128.0 +21.454386 2.0001271 -1.8513792 128.0 +21.503967 1.871731 -1.8546977 128.0 +21.534906 1.7413561 -1.8564442 128.0 +21.544191 1.6091135 -1.856357 128.0 +21.575523 1.4783891 -1.8582782 128.0 +21.604074 1.3472167 -1.8600248 128.0 +21.613922 1.2147431 -1.8601995 128.0 +21.642859 1.0831957 -1.8621206 128.0 +21.669001 0.95125133 -1.8638673 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +17.330353 -0.090483397 -1.4817129 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +17.366207 -0.83722013 -1.4866034 128.0 +17.367704 -0.94413978 -1.4872147 128.0 +17.376501 -1.0515906 -1.4885246 128.0 +17.373697 -1.158456 -1.488874 128.0 +17.378183 -1.2659054 -1.4899219 128.0 +17.388958 -1.3740026 -1.4915812 128.0 +17.388142 -1.4813496 -1.4922798 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +19.669609 -2.0409768 -1.6960198 128.0 +19.303209 -2.1227612 -1.6648431 128.0 +19.503559 -2.2659919 -1.6837063 128.0 +19.293505 -2.3616598 -1.666415 128.0 +15.746406 -2.0256858 -1.3542117 128.0 +15.218339 -2.0527666 -1.3086256 128.0 +14.701404 -2.0749769 -1.2640002 128.0 +13.869416 -2.044445 -1.1914293 128.0 +13.28159 -2.0411544 -1.1404288 128.0 +12.739597 -2.0379677 -1.0934454 128.0 +12.327879 -2.0497732 -1.0579896 128.0 +11.920438 -2.0572832 -1.0228832 128.0 +12.261592 -2.1937094 -1.0544091 128.0 +11.745407 -2.1758344 -1.009609 128.0 +11.875658 -2.2754138 -1.0224465 128.0 +11.729548 -2.3221259 -1.010657 128.0 +11.688726 -2.388669 -1.0082991 128.0 +11.679699 -2.4615772 -1.008823 128.0 +11.500828 -2.4976838 -0.99415171 128.0 +11.465842 -2.5638573 -0.99240512 128.0 +11.355724 -2.6125009 -0.9839341 128.0 +11.323001 -2.6782315 -0.98244953 128.0 +11.325714 -2.752362 -0.98419613 128.0 +11.317312 -2.8239737 -0.98498207 128.0 +11.000605 -2.8167701 -0.95790988 128.0 +11.105481 -2.9163451 -0.96900076 128.0 +11.046014 -2.9732995 -0.9652456 128.0 +11.031404 -3.0420799 -0.96559489 128.0 +10.861055 -3.0669425 -0.95179683 128.0 +7.9240756 -2.2903018 -0.68552881 128.0 +7.9270687 -2.3439636 -0.68710077 128.0 +7.906816 -2.3908293 -0.68657678 128.0 +7.8843832 -2.4369466 -0.68587816 128.0 +7.8892307 -2.4915776 -0.68771207 128.0 +7.883275 -2.5429959 -0.6885854 128.0 +7.9394336 -2.6150002 -0.69522244 128.0 +10.721091 -3.6041098 -0.95398009 128.0 +10.589469 -3.6323361 -0.9438498 128.0 +10.502101 -3.6745453 -0.93782407 128.0 +10.607899 -3.7847729 -0.94978821 128.0 +10.578859 -3.8477476 -0.94926429 128.0 +10.55038 -3.9108548 -0.94882762 128.0 +10.064875 -3.8013086 -0.90559947 128.0 +7.2074389 -2.7728829 -0.63941878 128.0 +7.1624627 -2.8061543 -0.63679892 128.0 +7.1284542 -2.8434069 -0.63522696 128.0 +10.176234 -4.1314759 -0.92524862 128.0 +10.176473 -4.2044883 -0.92769384 128.0 +10.131197 -4.2587447 -0.92585993 128.0 +10.0719 -4.3067298 -0.92271608 128.0 +10.119283 -4.4006252 -0.92978978 128.0 +9.0033312 -3.9812412 -0.82543087 128.0 +10.26532 -4.6147342 -0.94908959 128.0 +10.122645 -4.6254716 -0.93808609 128.0 +10.180812 -4.7277718 -0.94646972 128.0 +5.5009856 -2.5959055 -0.49567428 128.0 +5.4687843 -2.6218593 -0.49410233 128.0 +5.3925853 -2.6261473 -0.48825124 128.0 +5.3388658 -2.6406393 -0.48458341 128.0 +5.3501601 -2.687207 -0.48729062 128.0 +5.3380084 -2.7222471 -0.48772728 128.0 +15.964769 -8.2645397 -1.5383898 128.0 +15.903176 -8.356781 -1.5373418 128.0 +15.832263 -8.4438915 -1.5354207 128.0 +15.7565 -8.5280752 -1.5330627 128.0 +15.676807 -8.6097288 -1.5303555 128.0 +15.616722 -8.7018795 -1.5296569 128.0 +15.557832 -8.7945967 -1.5291328 128.0 +14.027524 -8.0435553 -1.3799739 128.0 +13.92107 -8.0964212 -1.3742101 128.0 +3.4843967 -2.0555716 -0.31708521 128.0 +6.95471 -4.160099 -0.67286605 128.0 +3.4691305 -2.1043746 -0.31813318 128.0 +3.4510615 -2.1224904 -0.31760919 128.0 +13.593461 -8.4743166 -1.3666998 128.0 +13.574051 -8.5783195 -1.3701056 128.0 +13.561424 -8.6872377 -1.3742975 128.0 +13.534602 -8.7876444 -1.377092 128.0 +13.432992 -8.8393145 -1.3721142 128.0 +13.352809 -8.904438 -1.3694071 128.0 +13.28389 -8.9767199 -1.3679224 128.0 +4.3381615 -2.9708197 -0.42336535 128.0 +4.3018441 -2.9848897 -0.42144409 128.0 +4.2736683 -3.0043552 -0.42039615 128.0 +14.350636 -10.219354 -1.5068638 128.0 +14.290085 -10.308964 -1.5071259 128.0 +14.239429 -10.405855 -1.5085231 128.0 +14.196131 -10.508441 -1.5107937 128.0 +5.4746947 -4.1050935 -0.56230676 128.0 +5.4620972 -4.1482477 -0.56370401 128.0 +5.5091891 -4.2375569 -0.57173836 128.0 +5.4988022 -4.2835236 -0.57348496 128.0 +13.778725 -10.869244 -1.5009254 128.0 +13.669743 -10.920009 -1.4962096 128.0 +13.551363 -10.96233 -1.4904459 128.0 +13.424504 -10.996667 -1.4837215 128.0 +13.333008 -11.059116 -1.4810143 128.0 +13.245829 -11.124701 -1.4788311 128.0 +13.167454 -11.197378 -1.4776957 128.0 +2.8979399 -2.495574 -0.29769805 128.0 +2.871309 -2.5034895 -0.29638809 128.0 +2.8558939 -2.5210605 -0.29638809 128.0 +2.8344285 -2.5332265 -0.29568946 128.0 +2.8099666 -2.5425508 -0.29464149 128.0 +3.5260074 -3.2298741 -0.38162181 128.0 +3.490052 -3.2365475 -0.37970054 128.0 +3.4519691 -3.2408566 -0.37751731 128.0 +3.4717355 -3.2997191 -0.38232043 128.0 +3.4822931 -3.350657 -0.38607562 128.0 +2.5817397 -2.5149779 -0.27839819 128.0 +2.5754812 -2.5398641 -0.27953348 128.0 +2.554913 -2.5506928 -0.27892217 128.0 +2.5574331 -2.5847309 -0.28119275 128.0 +2.5645058 -2.6238818 -0.28407463 128.0 +2.8175428 -2.9183264 -0.31804585 128.0 +2.8827808 -3.0227807 -0.32861272 128.0 +10.72105 -11.379106 -1.3329905 128.0 +10.625916 -11.417693 -1.3297594 128.0 +2.9149728 -3.1714025 -0.3400529 128.0 +7.6582613 -8.4342747 -0.96114111 128.0 +2.8951247 -3.228441 -0.34258547 128.0 +10.133766 -11.439401 -1.3021632 128.0 +2.7588573 -3.1535203 -0.329748 128.0 +9.9307432 -11.491294 -1.2938669 128.0 +9.8348236 -11.522462 -1.2904611 128.0 +7.4139013 -8.794981 -0.97083467 128.0 +9.7819204 -11.749462 -1.3026872 128.0 +9.5913296 -11.665372 -1.2863566 128.0 +9.4975939 -11.696937 -1.2833 128.0 +9.3801498 -11.698259 -1.276925 128.0 +9.3026285 -11.748566 -1.276139 128.0 +9.2168655 -11.78816 -1.2742177 128.0 +9.1254892 -11.820048 -1.2715105 128.0 +9.0370884 -11.855221 -1.2692399 128.0 +8.935421 -11.872244 -1.2650481 128.0 +8.8142776 -11.862081 -1.2579744 128.0 +8.6888838 -11.844455 -1.2502021 128.0 +8.6125383 -11.892705 -1.2496781 128.0 +8.3789225 -11.72085 -1.2254878 128.0 +8.3102932 -11.776925 -1.2260118 128.0 +8.2133913 -11.792545 -1.2222567 128.0 +8.1352358 -11.834511 -1.2213833 128.0 +7.9360676 -11.6979 -1.2016468 128.0 +2.8389881 -4.240953 -0.40982926 128.0 +2.8332305 -4.2890458 -0.41306046 128.0 +7.6633682 -11.756041 -1.1926519 128.0 +7.5964794 -11.811219 -1.1935252 128.0 +7.4480724 -11.738168 -1.1811243 128.0 +7.3806653 -11.791247 -1.1819104 128.0 +7.3134103 -11.844788 -1.1827836 128.0 +7.2255678 -11.864766 -1.1802511 128.0 +7.0382452 -11.718442 -1.1607766 128.0 +2.6802871 -4.5257516 -0.42354 128.0 +2.6494527 -4.5369511 -0.42301604 128.0 +2.6016791 -4.5185919 -0.41952285 128.0 +6.5567274 -11.549783 -1.126718 128.0 +6.514926 -11.641954 -1.1319578 128.0 +6.4760885 -11.741025 -1.1378962 128.0 +6.3563452 -11.693019 -1.1291633 128.0 +6.2901235 -11.742338 -1.1302112 128.0 +6.2244658 -11.793047 -1.1314338 128.0 +5.9037995 -11.353756 -1.0842758 128.0 +1.2491074 -2.4393272 -0.20268342 128.0 +5.9515953 -11.797115 -1.1207796 128.0 +5.8728919 -11.820921 -1.119557 128.0 +1.2118758 -2.478013 -0.20425536 128.0 +5.6742182 -11.781708 -1.1088154 128.0 +5.5920043 -11.7956 -1.1068069 128.0 +5.5174165 -11.825175 -1.1063702 128.0 +1.094995 -2.3856966 -0.19255319 128.0 +1.0590096 -2.3451629 -0.18801205 128.0 +1.0352954 -2.3306789 -0.18600348 128.0 +1.0169855 -2.3278596 -0.18513018 128.0 +0.99560273 -2.3175817 -0.18355824 128.0 +0.97554773 -2.3098824 -0.18224829 128.0 +0.96212041 -2.3176649 -0.18242295 128.0 +4.9023042 -12.012485 -1.0998205 128.0 +4.8181233 -12.016449 -1.0973753 128.0 +4.7077923 -11.9531 -1.0886424 128.0 +0.91932797 -2.3777421 -0.18591614 128.0 +4.6300774 -12.192502 -1.1057589 128.0 +4.4626198 -11.972389 -1.0825293 128.0 +4.3989992 -12.026677 -1.0850618 128.0 +4.3291602 -12.064694 -1.0861098 128.0 +1.1674213 -3.3181908 -0.27080053 128.0 +1.1392405 -3.302691 -0.26870462 128.0 +4.0824175 -12.071561 -1.07956 128.0 +3.9656527 -11.96778 -1.0676832 128.0 +3.8764594 -11.943564 -1.0632294 128.0 +3.8049126 -11.972821 -1.0637534 128.0 +3.7402544 -12.024479 -1.0663732 128.0 +0.98615819 -3.2413661 -0.25944766 128.0 +0.96482992 -3.2425821 -0.25901103 128.0 +0.95465797 -3.2819188 -0.26206756 128.0 +0.96175045 -3.3835335 -0.27080053 128.0 +3.3384542 -12.021251 -1.0561557 128.0 +0.91468215 -3.3748903 -0.26896659 128.0 +0.89191866 -3.3727348 -0.26826796 128.0 +3.1049192 -12.035328 -1.0520512 128.0 +3.0400028 -12.089899 -1.0552824 128.0 +2.9671855 -12.11413 -1.0558064 128.0 +2.896034 -12.145674 -1.057029 128.0 +1.9042574 -8.2097807 -0.70124817 128.0 +0.71654361 -3.1787996 -0.24809483 128.0 +0.6948933 -3.1734056 -0.24722153 128.0 +1.7851481 -8.3954449 -0.71487159 128.0 +1.726356 -8.3711176 -0.71172774 128.0 +1.6743735 -8.3786221 -0.71146572 128.0 +1.6286097 -8.4180794 -0.71408564 128.0 +2.2738614 -12.151728 -1.0462002 128.0 +2.1948259 -12.140944 -1.0440168 128.0 +1.4317757 -8.2081614 -0.69286454 128.0 +2.0648363 -12.28092 -1.0541471 128.0 +1.3887211 -8.5820808 -0.72456515 128.0 +1.9393958 -12.468735 -1.0686438 128.0 +1.8606461 -12.465621 -1.0673339 128.0 +1.7789048 -12.440315 -1.0641026 128.0 +1.6963294 -12.405595 -1.0600855 128.0 +1.6146339 -12.373295 -1.0563303 128.0 +1.5375766 -12.374071 -1.0555444 128.0 +1.4541464 -12.319958 -1.0499552 128.0 +1.3785253 -12.328648 -1.0499552 128.0 +1.3052591 -12.359659 -1.0519639 128.0 +1.2313685 -12.387261 -1.0537105 128.0 +0.35753405 -3.8386552 -0.30040526 128.0 +1.062417 -12.207916 -1.0366812 128.0 +0.99841273 -12.349245 -1.048558 128.0 +0.9188354 -12.304475 -1.0441042 128.0 +0.84665704 -12.35858 -1.0483834 128.0 +0.24203457 -3.8865919 -0.3038111 128.0 +0.21840601 -3.8919823 -0.30416045 128.0 +0.61858428 -12.363115 -1.0475974 128.0 +0.54315102 -12.376631 -1.0484707 128.0 +0.46501839 -12.321993 -1.0434055 128.0 +0.38776577 -12.27284 -1.0388645 128.0 +0.32037282 -12.585694 -1.0661113 128.0 +0.24343148 -12.602364 -1.0674212 128.0 +0.16645555 -12.630514 -1.0697792 128.0 +0.089023501 -12.641259 -1.0706524 128.0 +0.011325684 -12.502103 -1.0584263 128.0 +-0.06550508 -12.524848 -1.0604348 128.0 +-0.14227584 -12.517238 -1.0598235 128.0 +-0.2209395 -12.622705 -1.0691679 128.0 +-0.29645872 -12.539447 -1.0620068 128.0 +-0.37108311 -12.459724 -1.0551951 128.0 +-0.4542453 -12.644374 -1.0716131 128.0 +-0.53177935 -12.640353 -1.0715257 128.0 +-0.60841811 -12.617948 -1.0698664 128.0 +-0.68107241 -12.526442 -1.0621815 128.0 +-0.76104838 -12.573734 -1.0667226 128.0 +-0.83758873 -12.559881 -1.0659366 128.0 +-0.92201877 -12.655848 -1.0748442 128.0 +-1.0045984 -12.712517 -1.080346 128.0 +-1.0830892 -12.712069 -1.08087 128.0 +-1.168772 -12.789508 -1.088293 128.0 +-1.2470315 -12.780112 -1.0881183 128.0 +-1.3228555 -12.747449 -1.0859351 128.0 +-1.4007208 -12.736121 -1.0856731 128.0 +-1.4859685 -12.788637 -1.0910876 128.0 +-1.5686456 -12.813888 -1.0941441 128.0 +-1.6449531 -12.786236 -1.0925722 128.0 +-1.709131 -12.670267 -1.0832279 128.0 +-1.810923 -12.83019 -1.0983359 128.0 +-1.8912112 -12.829678 -1.0992966 128.0 +-1.969897 -12.817832 -1.0992966 128.0 +-2.0513406 -12.82321 -1.1008685 128.0 +-2.1406021 -12.874257 -1.1065449 128.0 +-2.2469976 -13.019911 -1.1206923 128.0 +-2.3347373 -13.050006 -1.1246221 128.0 +-2.4261963 -13.097145 -1.1301239 128.0 +-2.5203829 -13.154412 -1.1365863 128.0 +-2.5973744 -13.120132 -1.134927 128.0 +-2.6634707 -13.033675 -1.1286393 128.0 +-2.7631128 -13.110665 -1.137023 128.0 +-2.8492136 -13.119749 -1.1393808 128.0 +-2.9398768 -13.147712 -1.1434853 128.0 +-3.0343397 -13.189616 -1.1488998 128.0 +-3.1159003 -13.173658 -1.1491617 128.0 +-3.1479852 -12.953913 -1.1310846 128.0 +-3.2826319 -13.155694 -1.151083 128.0 +-3.3884933 -13.23374 -1.1599907 128.0 +-3.4554629 -13.158742 -1.1551001 128.0 +-3.5224168 -13.086308 -1.1504717 128.0 +-3.5976155 -13.046203 -1.1488124 128.0 +-3.6773272 -13.022923 -1.1487252 128.0 +-3.7621431 -13.017342 -1.150297 128.0 +-3.86115 -13.058973 -1.1562355 128.0 +-3.9544666 -13.078899 -1.1602526 128.0 +-4.026113 -13.026788 -1.1577201 128.0 +-4.0129805 -12.707355 -1.1306479 128.0 +-4.0982146 -12.705247 -1.1327437 128.0 +-4.2966828 -13.046039 -1.1665404 128.0 +-4.3864903 -13.048701 -1.1692475 128.0 +-4.4700279 -13.031906 -1.1702082 128.0 +-4.6258955 -13.221441 -1.1903813 128.0 +-4.7173104 -13.221895 -1.1930885 128.0 +-4.779964 -13.142147 -1.1883727 128.0 +-4.8708992 -13.140593 -1.1909926 128.0 +-4.9194102 -13.025651 -1.1830456 128.0 +-4.9591851 -12.891088 -1.1732647 128.0 +-5.0494537 -12.88917 -1.175972 128.0 +-5.0682931 -12.70712 -1.1617372 128.0 +-4.9621887 -12.222577 -1.1188583 128.0 +-5.1051755 -12.356707 -1.1344904 128.0 +-5.3843207 -12.809123 -1.180513 128.0 +-5.5360494 -12.94713 -1.1968437 128.0 +-5.6165786 -12.915659 -1.1971056 128.0 +-1.5750866 -3.5613592 -0.3038111 128.0 +-1.5969089 -3.5516276 -0.3038111 128.0 +-1.6149454 -3.5336075 -0.30302516 128.0 +-6.0518417 -13.03234 -1.222082 128.0 +-6.1410446 -13.014781 -1.2240032 128.0 +-1.6560311 -3.453876 -0.29822201 128.0 +-1.6719594 -3.4329019 -0.29717407 128.0 +-1.6775361 -3.391325 -0.29411754 128.0 +-1.6929487 -3.370285 -0.29306957 128.0 +-1.7199317 -3.3722584 -0.29429218 128.0 +-1.7396752 -3.3598723 -0.29411754 128.0 +-1.7630384 -3.3544257 -0.29464149 128.0 +-4.5033989 -8.4434566 -0.80132788 128.0 +-4.7201285 -8.7205477 -0.83171862 128.0 +-6.8393316 -12.453052 -1.2079346 128.0 +-1.8390107 -3.2997057 -0.29359356 128.0 +-1.8606933 -3.2909615 -0.29385555 128.0 +-1.8778782 -3.2742972 -0.29333156 128.0 +-7.4263415 -12.768862 -1.2573631 128.0 +-7.4534359 -12.636392 -1.2485428 128.0 +-7.59168 -12.692157 -1.2589351 128.0 +-7.6745806 -12.653854 -1.2598083 128.0 +-7.7713847 -12.637923 -1.2630396 128.0 +-7.8740788 -12.630579 -1.2672313 128.0 +-7.9359975 -12.557605 -1.2646989 128.0 +-8.0053778 -12.496931 -1.2634763 128.0 +-8.060751 -12.414989 -1.2600703 128.0 +-8.1581316 -12.397752 -1.2634763 128.0 +-8.2456551 -12.364865 -1.2653102 128.0 +-8.3024063 -12.285975 -1.2623409 128.0 +-8.5943127 -12.551258 -1.2959628 128.0 +-8.6160841 -12.418894 -1.2874918 128.0 +-8.5517759 -12.166118 -1.2660961 128.0 +-9.2104549 -12.933811 -1.3543863 128.0 +-9.3496714 -12.960268 -1.3633813 128.0 +-9.4448872 -12.924372 -1.3657392 128.0 +-9.8274603 -13.276132 -1.4104519 128.0 +-10.048568 -13.40209 -1.4308871 128.0 +-10.272792 -13.527414 -1.4514968 128.0 +-10.407223 -13.531247 -1.4589199 128.0 +-10.517599 -13.502501 -1.4628497 128.0 +-10.571254 -13.400951 -1.4587452 128.0 +-10.290184 -12.881286 -1.4077448 128.0 +-10.301992 -12.735031 -1.3984004 128.0 +-10.455688 -12.764058 -1.40888 128.0 +-10.766573 -12.980298 -1.4408426 128.0 +-10.862674 -12.933825 -1.4431132 128.0 +-10.912789 -12.832779 -1.4391834 128.0 +-10.975725 -12.747459 -1.4370874 128.0 +-11.081228 -12.711412 -1.4407554 128.0 +-11.143195 -12.625255 -1.4386594 128.0 +-11.196557 -12.529902 -1.4355155 128.0 +-11.271893 -12.459487 -1.4353409 128.0 +-11.469237 -12.522324 -1.4510602 128.0 +-11.148951 -12.023646 -1.3998851 128.0 +-11.189109 -11.919421 -1.3956059 128.0 +-11.375262 -11.969692 -1.4100153 128.0 +-11.826277 -12.292361 -1.4577845 128.0 +-11.927195 -12.24597 -1.4610158 128.0 +-11.270533 -11.430554 -1.369669 128.0 +-11.341161 -11.36189 -1.3697563 128.0 +-12.375036 -12.246488 -1.4886993 128.0 +-12.388685 -12.110437 -1.4811889 128.0 +-12.482108 -12.052877 -1.4835469 128.0 +-12.486629 -11.910053 -1.4751632 128.0 +-12.666053 -11.933636 -1.4880006 128.0 +-12.879777 -11.98668 -1.5048553 128.0 +-13.008086 -11.95799 -1.511405 128.0 +-13.095963 -11.891342 -1.5131515 128.0 +-13.148659 -11.792805 -1.5107937 128.0 +-13.129055 -11.630651 -1.5000521 128.0 +-10.053705 -8.7966547 -1.1335298 128.0 +-13.201451 -11.408735 -1.4920177 128.0 +-13.270448 -11.326871 -1.4919305 128.0 +-13.368641 -11.269631 -1.495249 128.0 +-10.290291 -8.5670347 -1.1362369 128.0 +-10.315732 -8.4815884 -1.1331804 128.0 +-10.391553 -8.4376001 -1.1358876 128.0 +-13.811385 -11.074635 -1.5143741 128.0 +-13.860334 -10.974839 -1.5122783 128.0 +-13.84109 -10.822089 -1.502672 128.0 +-13.891462 -10.724783 -1.5009254 128.0 +-10.689057 -8.1480875 -1.1406908 128.0 +-14.023618 -10.554704 -1.5011001 128.0 +-14.091314 -10.470834 -1.5014493 128.0 +-14.151281 -10.381228 -1.5010127 128.0 +-14.210679 -10.291281 -1.5005761 128.0 +-14.278419 -10.207368 -1.5011001 128.0 +-14.380664 -10.147709 -1.5053792 128.0 +-14.478625 -10.084332 -1.5092217 128.0 +-14.56732 -10.013927 -1.5121036 128.0 +-14.650747 -9.939455 -1.5144615 128.0 +-14.738775 -9.8676624 -1.5173434 128.0 +-14.818993 -9.7902203 -1.5194393 128.0 +-14.902151 -9.7143412 -1.5218846 128.0 +-14.993315 -9.643198 -1.525203 128.0 +-15.053885 -9.5520868 -1.5253778 128.0 +-15.126566 -9.468524 -1.5268623 128.0 +-15.206417 -9.3891392 -1.5291328 128.0 +-15.286714 -9.3096476 -1.5314908 128.0 +-15.359774 -9.225421 -1.5331501 128.0 +-15.43409 -9.1416636 -1.534984 128.0 +-15.506235 -9.0563354 -1.5366433 128.0 +-15.580504 -8.9719572 -1.5385644 128.0 +-15.649122 -8.884057 -1.5399617 128.0 +-15.707685 -8.7903013 -1.5403984 128.0 +-6.7647128 -3.7310705 -0.6396808 128.0 +-6.7647233 -3.6771219 -0.63741022 128.0 +-15.819407 -8.4742823 -1.5356826 128.0 +-15.827939 -8.3542709 -1.5314034 128.0 +-15.866529 -8.2505608 -1.5301808 128.0 +-7.2714119 -3.7243714 -0.67862982 128.0 +-7.0575495 -3.560323 -0.6554001 128.0 +-6.936522 -3.4460297 -0.6414274 128.0 +-6.9530616 -3.4012141 -0.64099073 128.0 +-6.9711075 -3.3571901 -0.64072877 128.0 +-6.9861751 -3.3117924 -0.64020479 128.0 +-6.7563062 -3.1521816 -0.61601448 128.0 +-16.904072 -7.761384 -1.5930581 128.0 +-16.951376 -7.6575165 -1.5930581 128.0 +-16.978926 -7.5448651 -1.5912242 128.0 +-7.33002 -3.203253 -0.66369641 128.0 +-7.3248253 -3.1475964 -0.66133857 128.0 +-17.266335 -7.2950349 -1.6056336 128.0 +-17.321812 -7.1935382 -1.6066816 128.0 +-17.386837 -7.0957761 -1.6086901 128.0 +-17.446692 -6.9956326 -1.610262 128.0 +-17.561583 -6.9169269 -1.6170738 128.0 +-17.605553 -6.8097596 -1.6172484 128.0 +-17.66563 -6.7086792 -1.6189951 128.0 +-17.723263 -6.6064219 -1.620567 128.0 +-17.791533 -6.5078168 -1.6231868 128.0 +-17.867697 -6.4116502 -1.6265928 128.0 +-17.951805 -6.31777 -1.6307845 128.0 +-18.031668 -6.2217989 -1.634627 128.0 +-18.093096 -6.1190209 -1.6368103 128.0 +-18.158669 -6.0172896 -1.6394302 128.0 +-18.214199 -5.9119081 -1.6411768 128.0 +-18.26532 -5.8048644 -1.6425741 128.0 +-18.313911 -5.6968241 -1.6437967 128.0 +-12.374086 -3.765897 -1.0963273 128.0 +-18.421587 -5.4833078 -1.6473771 128.0 +-13.182655 -3.8358901 -1.1660163 128.0 +-18.618761 -5.2941637 -1.6593413 128.0 +-18.702726 -5.1942172 -1.6640571 128.0 +-18.750589 -5.0837936 -1.6655418 128.0 +-12.777818 -3.3802514 -1.1211289 128.0 +-12.795424 -3.301038 -1.1208669 128.0 +-12.830895 -3.226352 -1.1222643 128.0 +-18.940338 -4.6394029 -1.6719168 128.0 +-12.395678 -2.9556539 -1.07956 128.0 +-18.943443 -4.3944693 -1.667201 128.0 +-18.928265 -4.2687273 -1.6634458 128.0 +-13.288736 -2.9112017 -1.1550128 128.0 +-18.652803 -3.9667034 -1.6341904 128.0 +-18.688499 -3.8545923 -1.6352384 128.0 +-18.557455 -3.708998 -1.6214403 128.0 +-18.543676 -3.5880589 -1.6182091 128.0 +-18.553593 -3.4720104 -1.6171612 128.0 +-18.586311 -3.3602293 -1.6182091 128.0 +-18.654665 -3.2545128 -1.6224883 128.0 +-18.698843 -3.1441188 -1.6246715 128.0 +-18.727617 -3.0309174 -1.6255448 128.0 +-18.839375 -2.9304979 -1.633841 128.0 +-18.905279 -2.8220541 -1.6381202 128.0 +-19.17765 -2.7425313 -1.6607386 128.0 +-19.246428 -2.6319623 -1.6653671 128.0 +-19.449896 -2.5383165 -1.6819597 128.0 +-19.602516 -2.4360054 -1.6940985 128.0 +-19.979181 -2.3584304 -1.7260611 128.0 +-20.058617 -2.2431042 -1.7318249 128.0 +-20.14135 -2.1273103 -1.7379379 128.0 +-20.353273 -2.0234983 -1.7554913 128.0 +-20.889017 -1.9474088 -1.8016013 128.0 +-22.314779 -1.9423203 -1.9260459 128.0 +-22.488125 -1.8184533 -1.9402807 128.0 +-22.506807 -1.6810282 -1.9409794 128.0 +-22.517693 -1.5429657 -1.9410666 128.0 +-22.552586 -1.406383 -1.9433372 128.0 +-22.572725 -1.2686476 -1.9443852 128.0 +-22.478601 -1.1250391 -1.9354775 128.0 +-22.560719 -0.99041355 -1.9421146 128.0 +-22.536507 -0.85083693 -1.9394947 128.0 +-22.56719 -0.71335828 -1.9417653 128.0 +-19.574688 1.4431789 -1.9282776 128.0 +-19.546619 1.5617529 -1.9263839 128.0 +-19.527746 1.6808908 -1.9254869 128.0 +-19.508148 1.7998559 -1.9245899 128.0 +-19.491787 1.919034 -1.9240916 128.0 +-19.46777 2.0373538 -1.9228956 128.0 +-19.450945 2.1563287 -1.9224969 128.0 +-19.426477 2.2743633 -1.9214005 128.0 +-19.403269 2.3924227 -1.9205035 128.0 +-19.378357 2.5101552 -1.9195069 128.0 +-19.359632 2.6286094 -1.9192078 128.0 +-19.337227 2.7465086 -1.9186099 128.0 +-19.316074 2.8645239 -1.9182112 128.0 +-19.288301 2.9814706 -1.9172145 128.0 +-19.259821 3.0981843 -1.9162178 128.0 +-19.211987 3.2115426 -1.9133275 128.0 +-19.170351 3.3256218 -1.9111348 128.0 +-19.123144 3.4384305 -1.9084438 128.0 +-19.069405 3.5496922 -1.9051548 128.0 +-19.030655 3.6634345 -1.9034605 128.0 +-0 0 -0 128.0 +-18.977444 3.8952932 -1.9027628 128.0 +-18.947344 4.0104265 -1.9021648 128.0 +-18.936962 4.1297908 -1.9036598 128.0 +-18.899616 4.2432919 -1.9024638 128.0 +-18.869347 4.3582821 -1.9020652 128.0 +-18.828695 4.4707608 -1.9006698 128.0 +-18.794144 4.5845566 -1.8999721 128.0 +-18.752146 4.696404 -1.8985767 128.0 +-18.714304 4.8091469 -1.8976798 128.0 +-18.673859 4.9210954 -1.8965834 128.0 +-18.628902 5.0316906 -1.8950884 128.0 +-18.588089 5.1432467 -1.8940917 128.0 +-18.541821 5.2531352 -1.8925967 128.0 +-18.50255 5.3648667 -1.8918991 128.0 +-18.467375 5.4777288 -1.8916998 128.0 +-18.462934 5.599894 -1.8947895 128.0 +-18.450085 5.7198534 -1.8970817 128.0 +-18.456377 5.8461761 -1.9014671 128.0 +-18.459919 5.9721785 -1.9056531 128.0 +-18.455051 6.0959468 -1.9090418 128.0 +-18.441814 6.2173362 -1.9116331 128.0 +-18.436249 6.3417063 -1.9151216 128.0 +-18.433607 6.4675589 -1.9190085 128.0 +-18.428238 6.5929475 -1.9226962 128.0 +-18.411743 6.7147622 -1.9252875 128.0 +-18.422424 6.8470235 -1.9308689 128.0 +-18.416355 6.9736767 -1.9347559 128.0 +-18.406639 7.0994387 -1.9383439 128.0 +-18.393293 7.2242517 -1.941633 128.0 +-18.372641 7.3465819 -1.9442242 128.0 +-18.353022 7.4696798 -1.9470149 128.0 +-18.328905 7.5912905 -1.949407 128.0 +-18.325993 7.7221603 -1.954191 128.0 +-18.332222 7.8575921 -1.9600713 128.0 +-18.306467 7.9798698 -1.962563 128.0 +-18.291725 8.1073694 -1.9663504 128.0 +-18.264315 8.2296734 -1.968842 128.0 +-18.242422 8.354846 -1.9720314 128.0 +-18.218779 8.47964 -1.9751211 128.0 +-18.197887 8.6061592 -1.9786094 128.0 +-18.168953 8.7292929 -1.9813005 128.0 +-18.149029 8.8571968 -1.9850878 128.0 +-18.140697 8.9913702 -1.9902705 128.0 +-18.149178 9.1347227 -1.9974465 128.0 +-18.120253 9.2599497 -2.0005362 128.0 +-18.141699 9.4117451 -2.0094066 128.0 +-18.121466 9.5428209 -2.0136921 128.0 +-18.086264 9.6664972 -2.0163832 128.0 +-18.0511 9.790575 -2.0191739 128.0 +-18.000275 9.9064283 -2.0202703 128.0 +-17.947838 10.021541 -2.0212669 128.0 +-17.913713 10.147173 -2.0244563 128.0 +-17.870094 10.267805 -2.026649 128.0 +-17.831686 10.391791 -2.0295393 128.0 +-17.797567 10.518729 -2.0330276 128.0 +-17.77195 10.651267 -2.0376124 128.0 +-17.759829 10.792671 -2.0438914 128.0 +-17.700895 10.906138 -2.0447884 128.0 +-17.653896 11.027196 -2.0471804 128.0 +-17.613644 11.152878 -2.0504694 128.0 +-17.584234 11.286006 -2.0551538 128.0 +-17.540508 11.41051 -2.0582435 128.0 +-17.493425 11.533258 -2.0610342 128.0 +-17.470312 11.672442 -2.0668149 128.0 +-17.433792 11.803408 -2.0711005 128.0 +-17.385653 11.927045 -2.0740905 128.0 +-17.333385 12.048264 -2.0766819 128.0 +-17.312822 12.192208 -2.0832598 128.0 +-17.264416 12.31728 -2.0865488 128.0 +-17.227221 12.45096 -2.0913329 128.0 +-17.198668 12.5917 -2.0973129 128.0 +-17.122683 12.698177 -2.0975122 128.0 +-17.070698 12.822723 -2.1008012 128.0 +-17.004368 12.936866 -2.102396 128.0 +-16.900236 13.022131 -2.0993063 128.0 +-16.760401 13.079058 -2.0917315 128.0 +-16.607233 13.124271 -2.0824625 128.0 +-16.326746 13.066131 -2.056848 128.0 +-16.151186 13.089002 -2.044589 128.0 +-15.905203 13.052138 -2.0231607 128.0 +-15.671764 13.022293 -2.0032272 128.0 +-15.468228 13.014424 -1.9870812 128.0 +-15.343396 13.071018 -1.9812008 128.0 +-15.140097 13.058977 -1.9649551 128.0 +-14.981744 13.083556 -1.9545896 128.0 +-14.786392 13.07373 -1.9392409 128.0 +-14.625831 13.092532 -1.9284769 128.0 +-14.403669 13.053728 -1.9093409 128.0 +-14.258054 13.081987 -1.9004705 128.0 +-14.121383 13.11708 -1.892796 128.0 +-13.961627 13.129176 -1.8819324 128.0 +-13.820992 13.157648 -1.87366 128.0 +-13.700597 13.204226 -1.8681782 128.0 +-13.663473 13.331126 -1.8743577 128.0 +-13.594159 13.427299 -1.8761517 128.0 +-13.458747 13.457689 -1.8686767 128.0 +-13.310889 13.474182 -1.8594075 128.0 +-13.180711 13.507174 -1.8526303 128.0 +-13.047868 13.536212 -1.8454542 128.0 +-12.918597 13.567734 -1.8387765 128.0 +-12.793524 13.60253 -1.8326968 128.0 +-12.660383 13.627554 -1.8254211 128.0 +-12.539529 13.664657 -1.8199394 128.0 +-12.411347 13.692679 -1.8133614 128.0 +-12.276658 13.712234 -1.8057867 128.0 +-12.164609 13.755996 -1.8016007 128.0 +-12.055102 13.801898 -1.7978133 128.0 +-11.944842 13.846222 -1.7939264 128.0 +-11.822879 13.876081 -1.7882453 128.0 +-11.711889 13.917909 -1.7842586 128.0 +-11.623091 13.985682 -1.7837603 128.0 +-11.534533 14.05366 -1.7833616 128.0 +-11.432422 14.104845 -1.78087 128.0 +-11.336335 14.163074 -1.779375 128.0 +-11.228242 14.205824 -1.7759862 128.0 +-11.142702 14.276805 -1.7762853 128.0 +-11.061572 14.353577 -1.7773815 128.0 +-10.964857 14.410092 -1.7759862 128.0 +-10.886989 14.49142 -1.7777803 128.0 +-10.817426 14.584323 -1.7810693 128.0 +-10.728322 14.651226 -1.7811689 128.0 +-10.575273 14.629683 -1.7704049 128.0 +-10.467393 14.669187 -1.7673153 128.0 +-10.361718 14.711171 -1.7646242 128.0 +-10.909033 15.691994 -1.8765503 128.0 +-10.820423 15.770122 -1.8779457 128.0 +-10.711741 15.818915 -1.8758527 128.0 +-10.616135 15.886826 -1.8761517 128.0 +-9.1826172 13.925545 -1.6330637 128.0 +-10.436658 16.040928 -1.8791417 128.0 +-10.501425 16.359226 -1.9094405 128.0 +-10.40351 16.427557 -1.9099388 128.0 +-10.286175 16.464922 -1.9068491 128.0 +-9.3753958 15.213831 -1.7522655 128.0 +-10.037877 16.515081 -1.8980784 128.0 +-8.6744223 14.470853 -1.6521997 128.0 +-8.576355 14.508388 -1.6504058 128.0 +-9.7246723 16.684153 -1.8965834 128.0 +-9.6275702 16.752998 -1.8976798 128.0 +-8.0224228 14.159917 -1.5923995 128.0 +-9.4188347 16.865538 -1.8971814 128.0 +-9.3132534 16.919525 -1.8967828 128.0 +-9.2035685 16.965857 -1.8955867 128.0 +-8.0777464 15.110726 -1.6785119 128.0 +-8.9863329 17.061674 -1.8937927 128.0 +-8.8869743 17.12709 -1.8949888 128.0 +-8.7803583 17.17864 -1.8946898 128.0 +-8.6694193 17.221527 -1.8934938 128.0 +-8.5613775 17.269939 -1.8929954 128.0 +-8.4456482 17.302473 -1.8908027 128.0 +-8.3358765 17.346794 -1.8900054 128.0 +-8.2258778 17.390419 -1.8892081 128.0 +-8.1173382 17.436956 -1.8888094 128.0 +-8.0072937 17.480103 -1.8881117 128.0 +-7.8978434 17.52437 -1.8876134 128.0 +-7.7861352 17.563404 -1.8866167 128.0 +-7.6730523 17.598989 -1.885321 128.0 +-7.5617867 17.638424 -1.8845237 128.0 +-7.4499393 17.676237 -1.8836267 128.0 +-7.3401976 17.718859 -1.8833277 128.0 +-7.2290878 17.758034 -1.8827296 128.0 +-7.1155572 17.79097 -1.8815337 128.0 +-7.0000758 17.81855 -1.8798393 128.0 +-6.884882 17.846313 -1.8782446 128.0 +-6.7667923 17.865889 -1.8758527 128.0 +-6.6514955 17.892151 -1.874258 128.0 +-6.5378356 17.922344 -1.8731617 128.0 +-6.4267378 17.959311 -1.8728627 128.0 +-6.3174086 18.001223 -1.8731617 128.0 +-6.2048941 18.034002 -1.8725636 128.0 +-6.0928512 18.067963 -1.872165 128.0 +-5.975944 18.087057 -1.8702713 128.0 +-5.8602567 18.109184 -1.8687763 128.0 +-5.7433214 18.126778 -1.8668827 128.0 +-5.628159 18.149323 -1.865587 128.0 +-5.513514 18.17304 -1.8644906 128.0 +-4.3741531 14.741832 -1.5024998 128.0 +-4.0247941 13.875813 -1.4094107 128.0 +-5.1807861 18.281021 -1.8654873 128.0 +-5.0751524 18.336439 -1.8679789 128.0 +-4.9677362 18.386446 -1.8699723 128.0 +-4.8573613 18.426203 -1.8709689 128.0 +-4.7459421 18.462406 -1.8716667 128.0 +-3.6271346 14.476886 -1.4571513 128.0 +-3.5349362 14.485335 -1.4557559 128.0 +-4.4122024 18.57568 -1.8746567 128.0 +-4.2959018 18.592707 -1.87366 128.0 +-3.1589332 14.063495 -1.4060221 128.0 +-4.0625405 18.621666 -1.8713677 128.0 +-3.1915553 15.071731 -1.5053902 128.0 +-3.8259149 18.632103 -1.8674806 128.0 +-3.7111301 18.653276 -1.8672813 128.0 +-3.5962298 18.673742 -1.867082 128.0 +-3.4832211 18.70426 -1.8679789 128.0 +-3.3652184 18.707653 -1.8661849 128.0 +-3.2508774 18.73089 -1.8664839 128.0 +-3.1342449 18.740671 -1.8654873 128.0 +-3.0220401 18.777233 -1.8672813 128.0 +-2.9075284 18.800339 -1.8677796 128.0 +-2.7913871 18.812904 -1.8672813 128.0 +-2.6770201 18.837559 -1.8680786 128.0 +-2.5629914 18.865461 -1.8692746 128.0 +-2.4489765 18.894648 -1.87067 128.0 +-2.3342128 18.919193 -1.8716667 128.0 +-2.2187772 18.939089 -1.8722646 128.0 +-2.1032948 18.95927 -1.8729624 128.0 +-1.9857841 18.960934 -1.871866 128.0 +-1.8691121 18.96979 -1.871567 128.0 +-1.752589 18.97991 -1.8714674 128.0 +-1.6362681 18.99229 -1.8716667 128.0 +-1.5197822 19.002964 -1.8717663 128.0 +-1.403739 19.019871 -1.8725636 128.0 +-1.2868075 19.025146 -1.8722646 128.0 +-1.1696813 19.026726 -1.8716667 128.0 +-1.0524193 19.024603 -1.8707696 128.0 +-0.93591076 19.035671 -1.871268 128.0 +-0.81913519 19.042049 -1.8713677 128.0 +-0.70238972 19.0497 -1.8716667 128.0 +-0.58539826 19.050669 -1.8713677 128.0 +-0.46829936 19.045944 -1.8705703 128.0 +-0.35113412 19.032541 -1.8689756 128.0 +-0.23443137 19.041302 -1.8696733 128.0 +-0.11763431 19.049347 -1.870371 128.0 +-0.00074752688 19.048716 -1.8702713 128.0 +0.11612095 19.046371 -1.870072 128.0 +0.23303403 19.04928 -1.8704706 128.0 +0.35007885 19.056444 -1.8713677 128.0 +0.46712261 19.058912 -1.871866 128.0 +0.58417928 19.059666 -1.8722646 128.0 +0.70166588 19.070637 -1.8737596 128.0 +0.81926632 19.079889 -1.875155 128.0 +0.93666482 19.081461 -1.8758527 128.0 +1.0533442 19.068399 -1.875155 128.0 +1.1702038 19.059591 -1.8749557 128.0 +1.2869278 19.049074 -1.8746567 128.0 +1.4044455 19.049749 -1.8755536 128.0 +1.5222578 19.052675 -1.8767496 128.0 +1.6407567 19.061811 -1.8786434 128.0 +1.759059 19.066248 -1.8801384 128.0 +1.8779652 19.0749 -1.8821317 128.0 +1.9930023 19.044216 -1.8802381 128.0 +2.110147 19.034595 -1.880537 128.0 +2.2301426 19.048962 -1.8833277 128.0 +2.3453991 19.022079 -1.882032 128.0 +2.4618165 19.005358 -1.8818327 128.0 +2.5782511 18.988909 -1.8817331 128.0 +2.6937363 18.965836 -1.8810353 128.0 +2.8094738 18.945013 -1.8806367 128.0 +2.924753 18.921518 -1.8800387 128.0 +3.0398495 18.897322 -1.8794407 128.0 +3.1545954 18.871443 -1.8787431 128.0 +3.2684574 18.840948 -1.8776467 128.0 +3.3806551 18.801931 -1.875753 128.0 +3.4952295 18.776922 -1.8753543 128.0 +2.704253 14.049551 -1.3953576 128.0 +3.7213109 18.712122 -1.8732613 128.0 +3.8358562 18.687962 -1.8731617 128.0 +3.0689557 14.500663 -1.4468856 128.0 +3.1525705 14.457255 -1.4443939 128.0 +3.2499404 14.476473 -1.4483806 128.0 +4.3047495 18.63764 -1.8782446 128.0 +4.4176474 18.605066 -1.8776467 128.0 +4.5442238 18.628843 -1.8829291 128.0 +4.6478038 18.558142 -1.8785437 128.0 +3.4442694 13.404347 -1.3485141 128.0 +3.5241694 13.374303 -1.3476171 128.0 +4.985497 18.45792 -1.8773477 128.0 +5.104763 18.449038 -1.87964 128.0 +5.2197671 18.42407 -1.8803377 128.0 +5.3338251 18.395517 -1.8807364 128.0 +5.4460316 18.360537 -1.880537 128.0 +5.5574317 18.322966 -1.8801384 128.0 +4.3008871 13.87401 -1.4171847 128.0 +4.5563321 14.385189 -1.473696 128.0 +4.4435549 13.735931 -1.4083143 128.0 +4.7396965 14.349923 -1.4759883 128.0 +4.6588349 13.819912 -1.4230651 128.0 +4.7642622 13.851282 -1.4294438 128.0 +6.3331318 18.050541 -1.8783443 128.0 +6.4430985 18.009468 -1.878145 128.0 +6.5545039 17.972399 -1.878444 128.0 +6.6663909 17.936506 -1.8789424 128.0 +6.7798457 17.90457 -1.879939 128.0 +6.893518 17.872843 -1.8810353 128.0 +7.0070558 17.840397 -1.8821317 128.0 +5.9768877 14.947836 -1.5747584 128.0 +6.0726204 14.921019 -1.5758548 128.0 +5.8731298 14.181154 -1.4997091 128.0 +6.0898743 14.452934 -1.5331973 128.0 +6.1102242 14.256167 -1.5158552 128.0 +6.2305889 14.294112 -1.5241275 128.0 +7.7456603 17.475771 -1.876949 128.0 +7.852335 17.427008 -1.8768493 128.0 +7.9587026 17.377594 -1.8767496 128.0 +8.0626602 17.323021 -1.8761517 128.0 +8.1662483 17.267826 -1.8755536 128.0 +8.2707548 17.214703 -1.8752546 128.0 +8.377099 17.165419 -1.8754539 128.0 +8.4800568 17.109238 -1.8749557 128.0 +8.5902462 17.067549 -1.8761517 128.0 +8.69979 17.024265 -1.877248 128.0 +8.8086681 16.979395 -1.8782446 128.0 +8.9168587 16.932949 -1.8791417 128.0 +9.0257492 16.887571 -1.8802381 128.0 +9.1310978 16.835371 -1.8806367 128.0 +9.2404633 16.790358 -1.8819324 128.0 +9.3423424 16.731607 -1.8817331 128.0 +9.4453201 16.674833 -1.8818327 128.0 +9.5474577 16.616564 -1.8818327 128.0 +9.6522417 16.562828 -1.8824307 128.0 +9.7719145 16.534126 -1.8860188 128.0 +9.878809 16.483244 -1.887115 128.0 +9.9740782 16.412966 -1.8860188 128.0 +10.066246 16.337904 -1.8844241 128.0 +10.16525 16.274143 -1.8842247 128.0 +10.253736 16.19381 -1.8821317 128.0 +10.341081 16.112167 -1.879939 128.0 +10.431067 16.035069 -1.8783443 128.0 +10.523782 15.962456 -1.8773477 128.0 +10.616552 15.890137 -1.8764507 128.0 +10.726684 15.843645 -1.8787431 128.0 +10.842836 15.805426 -1.8821317 128.0 +10.970283 15.782716 -1.8875138 128.0 +11.086397 15.742765 -1.8909024 128.0 +11.198389 15.696313 -1.8935934 128.0 +11.320136 15.662787 -1.8979788 128.0 +11.447184 15.635583 -1.9032611 128.0 +11.527494 15.544271 -1.9006698 128.0 +11.572453 15.406422 -1.8922977 128.0 +11.526382 15.15062 -1.8690753 128.0 +11.604551 15.060696 -1.8666832 128.0 +11.641034 14.917827 -1.8576136 128.0 +11.679905 14.779763 -1.8491418 128.0 +11.720632 14.645672 -1.8411685 128.0 +11.774563 14.529418 -1.8354875 128.0 +11.80668 14.387674 -1.8265175 128.0 +11.854673 14.266747 -1.8202385 128.0 +11.8728 14.111515 -1.8094743 128.0 +11.923026 13.995985 -1.8038931 128.0 +11.991781 13.902974 -1.8013017 128.0 +12.080134 13.832879 -1.8018 128.0 +12.172035 13.766696 -1.8028964 128.0 +12.267559 13.704353 -1.8045907 128.0 +12.363445 13.642094 -1.8063847 128.0 +12.459701 13.579906 -1.8082784 128.0 +12.552949 13.514133 -1.8097734 128.0 +12.639724 13.441204 -1.8103714 128.0 +12.738427 13.380691 -1.8127635 128.0 +12.838934 13.32162 -1.8154544 128.0 +12.949618 13.272501 -1.8196404 128.0 +13.075566 13.238098 -1.8260192 128.0 +13.123479 13.124551 -1.8213347 128.0 +13.242697 13.082238 -1.8268164 128.0 +13.36545 13.042429 -1.8327965 128.0 +13.508271 13.020939 -1.8415672 128.0 +13.680877 13.026314 -1.8544242 128.0 +13.864925 13.040283 -1.8687763 128.0 +14.008832 13.014557 -1.877547 128.0 +14.150743 12.985537 -1.8860188 128.0 +14.331899 12.990676 -1.8997728 128.0 +14.558869 13.034561 -1.9196066 128.0 +14.725042 13.021441 -1.9311678 128.0 +14.896846 13.011349 -1.943427 128.0 +15.042706 12.976891 -1.9521977 128.0 +15.233389 12.9792 -1.9668487 128.0 +15.399537 12.958515 -1.9782108 128.0 +15.606562 12.969981 -1.9948552 128.0 +15.827379 12.990121 -2.0131938 128.0 +16.033564 12.995505 -2.0295393 128.0 +16.297117 13.04423 -2.0531604 128.0 +16.428373 12.984707 -2.0597384 128.0 +16.625402 12.975482 -2.0746884 128.0 +16.676331 12.851363 -2.0711005 128.0 +16.712109 12.716263 -2.0657184 128.0 +16.748449 12.582404 -2.0605357 128.0 +16.799765 12.460434 -2.0573463 128.0 +16.825325 12.320086 -2.0510674 128.0 +16.872377 12.196217 -2.0475791 128.0 +16.918545 12.072233 -2.0440907 128.0 +16.93454 11.927518 -2.0370142 128.0 +16.975542 11.801236 -2.0331273 128.0 +16.999224 11.663643 -2.027247 128.0 +17.035042 11.535131 -2.0229614 128.0 +17.087297 11.418227 -2.0207686 128.0 +17.128794 11.294545 -2.01738 128.0 +17.166912 11.169156 -2.0136921 128.0 +17.212513 11.0491 -2.0110013 128.0 +17.251402 10.925179 -2.0076125 128.0 +17.284357 10.798036 -2.0036259 128.0 +17.313013 10.668811 -1.9992405 128.0 +17.344137 10.541709 -1.9952538 128.0 +17.376915 10.416162 -1.9915662 128.0 +17.407949 10.290106 -1.9877788 128.0 +17.445831 10.16857 -1.9848884 128.0 +17.482014 10.04646 -1.9818984 128.0 +17.515623 9.9233103 -1.9787091 128.0 +17.544037 9.7977009 -1.9750214 128.0 +17.58116 9.6773939 -1.9724301 128.0 +17.6612 9.5807219 -1.974822 128.0 +17.619614 9.418705 -1.9634601 128.0 +17.642738 9.2923336 -1.959573 128.0 +17.67646 9.1719913 -1.9569817 128.0 +17.704939 9.0493212 -1.953892 128.0 +17.737022 8.9288836 -1.9513006 128.0 +17.763838 8.8061848 -1.948211 128.0 +17.782663 8.6800022 -1.9443239 128.0 +17.785364 8.5465946 -1.9387426 128.0 +17.801489 8.420289 -1.9347559 128.0 +17.81403 8.2928476 -1.9304702 128.0 +17.82206 8.1639128 -1.9257859 128.0 +17.840067 8.0400982 -1.9222975 128.0 +17.858135 7.9167728 -1.9189088 128.0 +17.880836 7.7959151 -1.9161181 128.0 +17.894497 7.6715493 -1.9124305 128.0 +17.919224 7.5523329 -1.9100385 128.0 +17.933971 7.4292951 -1.9066498 128.0 +17.958023 7.3104868 -1.9043574 128.0 +17.972977 7.1883383 -1.9011681 128.0 +17.989887 7.0673738 -1.8982778 128.0 +18.009705 6.9479046 -1.895786 128.0 +18.041759 6.8333921 -1.8946898 128.0 +18.018995 6.6986418 -1.8878127 128.0 +18.006475 6.5685196 -1.8821317 128.0 +17.994911 6.4394751 -1.87665 128.0 +17.981506 6.3104906 -1.8710686 128.0 +17.991661 6.1903291 -1.8680786 128.0 +18.006676 6.0721884 -1.8656867 128.0 +18.029425 5.9569058 -1.8641917 128.0 +18.045755 5.839735 -1.8620986 128.0 +18.042356 5.7165785 -1.8580123 128.0 +18.04668 5.5963364 -1.8548229 128.0 +18.057825 5.4785666 -1.8524309 128.0 +18.052944 5.3563442 -1.8484442 128.0 +18.075914 5.2427015 -1.8474475 128.0 +18.10487 5.1308775 -1.8471485 128.0 +18.144644 5.0220795 -1.8480456 128.0 +18.18088 4.9122086 -1.8486435 128.0 +18.214527 4.8015747 -1.8490422 128.0 +18.242682 4.6894741 -1.8489425 128.0 +18.272078 4.5776925 -1.8490422 128.0 +18.301756 4.4659629 -1.8492416 128.0 +18.323006 4.3522019 -1.8486435 128.0 +18.357121 4.2414837 -1.8494409 128.0 +18.371151 4.1261506 -1.8482449 128.0 +18.388344 4.0116534 -1.8474475 128.0 +18.438896 3.9043128 -1.8501385 128.0 +18.454708 3.7894998 -1.8493413 128.0 +18.538118 3.6882267 -1.8555206 128.0 +18.580919 3.5783596 -1.8576136 128.0 +18.605461 3.4648283 -1.8579125 128.0 +18.630287 3.3513064 -1.8583113 128.0 +18.647558 3.2364199 -1.8580123 128.0 +18.664122 3.1214473 -1.8577132 128.0 +18.676046 3.0057614 -1.8570156 128.0 +18.692171 2.8908067 -1.8568163 128.0 +18.717432 2.7772272 -1.8576136 128.0 +18.754807 2.6652656 -1.8597066 128.0 +18.786583 2.5522802 -1.8613013 128.0 +18.825573 2.440028 -1.8636932 128.0 +18.852041 2.3259318 -1.8648893 128.0 +18.879793 2.2118342 -1.8662846 128.0 +18.909822 2.0978124 -1.8679789 128.0 +18.932234 1.9827802 -1.8689756 128.0 +18.961868 1.868332 -1.8707696 128.0 +18.987837 1.7533205 -1.8722646 128.0 +19.012117 1.6379751 -1.87366 128.0 +19.034704 1.5223186 -1.8749557 128.0 +19.06254 1.4068855 -1.8768493 128.0 +19.081734 1.2906314 -1.8779457 128.0 +19.096247 1.1739508 -1.8786434 128.0 +19.097128 1.056427 -1.8780453 128.0 +19.090332 0.93859488 -1.8767496 128.0 +19.023161 0.81832385 -1.8694739 128.0 +18.914469 0.69741184 -1.858112 128.0 +18.886566 0.58036572 -1.8549225 128.0 +19.018091 0.46761623 -1.8677796 128.0 +18.898235 0.34866452 -1.8555206 128.0 +19.006479 0.23400477 -1.8661849 128.0 +19.084171 0.11784724 -1.8738593 128.0 +19.138268 0.0007455732 -1.8792413 128.0 +19.20557 -0.11710127 -1.8860188 128.0 +19.237324 -0.2353459 -1.8893077 128.0 +19.251436 -0.35367286 -1.8909024 128.0 +19.262829 -0.47213295 -1.8922977 128.0 +19.280455 -0.59095997 -1.8943907 128.0 +19.240669 -0.70793229 -1.8908027 128.0 +19.241928 -0.82623398 -1.8914007 128.0 +19.236496 -0.94428468 -1.8914007 128.0 +19.129004 -1.0566957 -1.8812346 128.0 +19.002981 -1.1667247 -1.8692746 128.0 +18.960718 -1.2809533 -1.8657863 128.0 +0 -0 -0 128.0 +18.942579 -1.5134548 -1.8656867 128.0 +18.918066 -1.6283748 -1.8641917 128.0 +0 -0 -0 128.0 +19.087774 -1.8792334 -1.8834274 128.0 +19.030361 -1.9915516 -1.8788427 128.0 +18.104977 -2.0070338 -1.78685 128.0 +17.634754 -2.0644886 -1.7407041 128.0 +0 -0 -0 128.0 +16.537449 -2.1419892 -1.6325653 128.0 +15.568593 -2.1136405 -1.5359879 128.0 +14.674628 -2.0839863 -1.4468856 128.0 +13.940111 -2.0669551 -1.3738296 128.0 +13.330283 -2.0601521 -1.3133316 128.0 +12.947033 -2.0823069 -1.2757572 128.0 +12.285312 -2.0532303 -1.2098773 128.0 +11.820532 -2.050142 -1.1639307 128.0 +11.587386 -2.0830004 -1.1415056 128.0 +10.982573 -2.0438595 -1.081207 128.0 +10.567271 -2.0336914 -1.0401442 128.0 +10.576064 -2.1027639 -1.0423368 128.0 +10.610723 -2.177424 -1.0472206 128.0 +10.691586 -2.262481 -1.0568882 128.0 +10.301277 -2.2459695 -1.0183171 128.0 +10.261089 -2.3032477 -1.0156261 128.0 +10.296207 -2.3775885 -1.020709 128.0 +10.183648 -2.4174972 -1.0106428 128.0 +10.193756 -2.4860699 -1.013234 128.0 +9.7719622 -2.4467766 -0.9712742 128.0 +9.9870882 -2.5658927 -0.99509466 128.0 +9.7796869 -2.5766542 -0.97526091 128.0 +9.79251 -2.6443982 -0.97825092 128.0 +9.7933617 -2.7092113 -0.9800449 128.0 +9.7325172 -2.7567723 -0.97546023 128.0 +7.9465246 -2.3034263 -0.79097646 128.0 +7.9408264 -2.3546889 -0.79187346 128.0 +7.9186115 -2.4010577 -0.79107612 128.0 +7.8695164 -2.4389911 -0.7874881 128.0 +7.8999333 -2.5016568 -0.79227215 128.0 +7.8929548 -2.5528398 -0.79316914 128.0 +7.9328852 -2.6196384 -0.7990495 128.0 +9.2951241 -3.1330805 -0.94476277 128.0 +9.236208 -3.1764596 -0.94057673 128.0 +9.0165606 -3.1628931 -0.91934764 128.0 +9.056942 -3.2396131 -0.92572635 128.0 +9.1930008 -3.3520672 -0.94237077 128.0 +9.1685286 -3.4070246 -0.94197208 128.0 +8.968791 -3.3955526 -0.92283601 128.0 +9.009058 -3.4741564 -0.92941403 128.0 +7.1584754 -2.8108394 -0.73257154 128.0 +7.1457133 -2.8565574 -0.7330699 128.0 +9.1297455 -3.7151754 -0.94954681 128.0 +9.1122932 -3.7734094 -0.95014477 128.0 +9.0614605 -3.8176575 -0.94715476 128.0 +8.9665327 -3.8426056 -0.93938076 128.0 +8.92272 -3.8888025 -0.93718809 128.0 +8.992384 -3.9850123 -0.9474538 128.0 +9.0748081 -4.0883536 -0.95921451 128.0 +8.9807997 -4.1124663 -0.95163977 128.0 +8.9066849 -4.1448183 -0.94625777 128.0 +8.8792858 -4.1985397 -0.94605845 128.0 +5.4515996 -2.6183236 -0.56802118 128.0 +5.3942981 -2.6316478 -0.56343651 128.0 +5.3459554 -2.6487875 -0.55984849 128.0 +5.3429337 -2.6882508 -0.56134349 128.0 +8.7161942 -4.4535379 -0.94266975 128.0 +8.6330614 -4.478065 -0.93639076 128.0 +8.5974989 -4.5267792 -0.93549371 128.0 +8.5599079 -4.5742874 -0.9343974 128.0 +8.5220585 -4.6215053 -0.93330103 128.0 +8.5249224 -4.6909814 -0.93688905 128.0 +8.4655733 -4.7262211 -0.93340075 128.0 +13.950337 -7.9018335 -1.5681803 128.0 +13.823945 -7.9426637 -1.5592103 128.0 +13.632246 -7.9441619 -1.5426656 128.0 +13.495875 -7.9760141 -1.5324996 128.0 +6.9434175 -4.160574 -0.77303636 128.0 +3.5038366 -2.1281936 -0.37287304 128.0 +3.4898653 -2.1491308 -0.37277338 128.0 +3.4783006 -2.1715581 -0.37297273 128.0 +13.052356 -8.2643356 -1.5096759 128.0 +13.12533 -8.4238176 -1.5244266 128.0 +13.089242 -8.5145044 -1.5263202 128.0 +13.07164 -8.6176634 -1.5305063 128.0 +13.084702 -8.7419329 -1.5384796 128.0 +13.050591 -8.8354435 -1.5408716 128.0 +12.984645 -8.9074736 -1.5394763 128.0 +4.2507362 -2.9535754 -0.48071283 128.0 +12.867851 -9.0615606 -1.5386789 128.0 +12.796618 -9.129365 -1.5367852 128.0 +12.745199 -9.2112093 -1.5373832 128.0 +12.68844 -9.2892389 -1.5373832 128.0 +12.622413 -9.3603983 -1.536287 128.0 +12.544057 -9.4221334 -1.5336956 128.0 +5.470118 -4.160656 -0.6506452 128.0 +5.4673419 -4.2117553 -0.65353554 128.0 +12.306533 -9.6030693 -1.5258219 128.0 +12.253623 -9.6833353 -1.5266192 128.0 +12.196307 -9.7602053 -1.5269182 128.0 +12.134644 -9.8336039 -1.5267189 128.0 +12.073309 -9.9072447 -1.5266192 128.0 +2.8590169 -2.3744347 -0.33450121 128.0 +2.8565755 -2.4021828 -0.3360959 128.0 +2.8273916 -2.4074044 -0.33420223 128.0 +2.823868 -2.4344568 -0.33569723 128.0 +2.8321095 -2.4720287 -0.3387869 128.0 +2.8496854 -2.5183618 -0.34317225 128.0 +11.565606 -10.352799 -1.5170512 128.0 +3.600786 -3.2621355 -0.44891903 128.0 +3.5704381 -3.2747498 -0.44752368 128.0 +3.4802942 -3.2315819 -0.43795565 128.0 +3.4843192 -3.2753716 -0.44124466 128.0 +3.4886577 -3.3200173 -0.44463333 128.0 +3.4811161 -3.3537905 -0.44642735 128.0 +3.474715 -3.3889854 -0.4484207 128.0 +3.4743836 -3.4305208 -0.45131105 128.0 +3.4764867 -3.4749935 -0.45460007 128.0 +2.5558763 -2.5858934 -0.32642817 128.0 +10.677741 -10.941894 -1.4936295 128.0 +10.593829 -10.99001 -1.4912374 128.0 +10.510417 -11.038231 -1.488945 128.0 +3.507314 -3.7278686 -0.47493213 128.0 +3.4958866 -3.7617123 -0.47662649 128.0 +3.0563316 -3.3292642 -0.41493255 128.0 +7.6370649 -8.42484 -1.10124 128.0 +2.7862825 -3.1107492 -0.3805474 128.0 +2.7546201 -3.1136241 -0.37865373 128.0 +2.7132099 -3.1049862 -0.37526506 128.0 +9.6565304 -11.193316 -1.4429985 128.0 +9.5444345 -11.201609 -1.4363208 128.0 +9.4498987 -11.229506 -1.4323342 128.0 +7.3623905 -8.8582544 -1.1159909 128.0 +9.2608862 -11.283092 -1.4243608 128.0 +9.1125431 -11.2423 -1.4118028 128.0 +8.9967604 -11.239738 -1.4043278 128.0 +8.8875227 -11.243986 -1.3978493 128.0 +8.8104057 -11.28811 -1.3965536 128.0 +8.7306528 -11.328557 -1.3948593 128.0 +8.6326618 -11.344696 -1.390175 128.0 +8.5353994 -11.360855 -1.3855903 128.0 +8.4347086 -11.371454 -1.3804076 128.0 +8.3383245 -11.386867 -1.3759226 128.0 +8.2420702 -11.401525 -1.3714375 128.0 +8.0812254 -11.324714 -1.3557898 128.0 +8.0213261 -11.387916 -1.3574842 128.0 +7.7729731 -11.180373 -1.3261887 128.0 +7.734622 -11.272163 -1.3315707 128.0 +7.7328115 -11.419106 -1.3436304 128.0 +7.5879736 -11.354648 -1.3301754 128.0 +7.4852982 -11.35115 -1.3241954 128.0 +7.4274449 -11.415215 -1.326388 128.0 +7.340601 -11.434615 -1.3232983 128.0 +7.2144084 -11.391171 -1.3128333 128.0 +7.1385789 -11.425941 -1.3117369 128.0 +7.0725121 -11.476304 -1.3125343 128.0 +6.9993777 -11.515233 -1.3120359 128.0 +6.900456 -11.511023 -1.3065543 128.0 +6.8109636 -11.521453 -1.3028666 128.0 +6.7060723 -11.504568 -1.2960893 128.0 +6.5649619 -11.422991 -1.2819365 128.0 +6.4903345 -11.455266 -1.2810395 128.0 +6.3864517 -11.43493 -1.2741625 128.0 +6.3238444 -11.487848 -1.2757572 128.0 +6.2745857 -11.565793 -1.2802422 128.0 +6.1561289 -11.515445 -1.2701758 128.0 +6.0612464 -11.50722 -1.2649931 128.0 +5.858098 -11.288941 -1.2361894 128.0 +5.824944 -11.395555 -1.2441627 128.0 +1.2312765 -2.4436722 -0.23632914 128.0 +1.200793 -2.4199781 -0.23284079 128.0 +1.1313701 -2.3155243 -0.22038241 128.0 +1.1102463 -2.3080728 -0.21878773 128.0 +1.0905331 -2.3031483 -0.21749206 128.0 +1.0969548 -2.3539987 -0.22237575 128.0 +1.0837333 -2.363399 -0.22267476 128.0 +1.1248051 -2.4933801 -0.23622948 128.0 +5.080235 -11.458632 -1.2177509 128.0 +5.0448208 -11.569854 -1.2265216 128.0 +4.9435496 -11.53017 -1.2188473 128.0 +4.8800502 -11.577708 -1.2207409 128.0 +4.8020649 -11.590887 -1.2189469 128.0 +4.7199759 -11.593407 -1.2160566 128.0 +4.6384068 -11.596281 -1.2132659 128.0 +4.5700765 -11.631932 -1.2140633 128.0 +4.4989762 -11.660684 -1.2141629 128.0 +1.2030679 -3.1736758 -0.30220908 128.0 +4.3316231 -11.65066 -1.2072859 128.0 +4.2303934 -11.595692 -1.1986148 128.0 +4.1682138 -11.646727 -1.2013059 128.0 +1.1874127 -3.380636 -0.32114583 128.0 +1.1498163 -3.3389311 -0.31596315 128.0 +1.1172276 -3.3100941 -0.31217578 128.0 +1.0928389 -3.3046045 -0.31088012 128.0 +3.7823436 -11.686741 -1.1926348 128.0 +1.0431895 -3.2893095 -0.30789012 128.0 +1.0082543 -3.2481289 -0.30290675 128.0 +0.98455054 -3.2418759 -0.3016111 128.0 +0.96379131 -3.2449942 -0.30131209 128.0 +0.9469105 -3.261359 -0.30240843 128.0 +0.94993699 -3.3484814 -0.31088012 128.0 +3.2478571 -11.732882 -1.1816714 128.0 +0.9113692 -3.3694925 -0.3118768 128.0 +0.89346653 -3.3856049 -0.31297314 128.0 +3.0365438 -11.810915 -1.1837645 128.0 +2.9647415 -11.83222 -1.1840634 128.0 +2.8897264 -11.840522 -1.1830667 128.0 +2.8149509 -11.849317 -1.1821698 128.0 +1.8963628 -8.2045918 -0.80572718 128.0 +0.71810889 -3.1929016 -0.2900497 128.0 +2.5630784 -11.746493 -1.166522 128.0 +1.7779912 -8.3938589 -0.82167393 128.0 +1.7214519 -8.3802433 -0.81918222 128.0 +1.6678642 -8.3799133 -0.81808591 128.0 +1.6250675 -8.4349346 -0.82267058 128.0 +2.1951771 -11.78535 -1.1630337 128.0 +2.1355016 -11.869108 -1.1702098 128.0 +1.4227581 -8.1938152 -0.79526216 128.0 +1.981485 -11.84535 -1.1652263 128.0 +1.926151 -11.965348 -1.1761898 128.0 +1.3321977 -8.6099844 -0.83492965 128.0 +1.7742095 -11.954619 -1.172801 128.0 +1.7060016 -12.00173 -1.1764888 128.0 +1.6271065 -11.973519 -1.1726017 128.0 +1.5543748 -11.989199 -1.1731998 128.0 +1.4682379 -11.896793 -1.1629341 128.0 +1.3924357 -11.88186 -1.160542 128.0 +1.3199424 -11.894135 -1.1609406 128.0 +1.247558 -11.907948 -1.1615387 128.0 +1.1763214 -11.934194 -1.1634324 128.0 +1.1051753 -11.963976 -1.1657248 128.0 +1.0337932 -11.994324 -1.1681167 128.0 +0.95669037 -11.9568 -1.1637313 128.0 +0.89047813 -12.059692 -1.1734987 128.0 +0.8188796 -12.100669 -1.1770867 128.0 +0.74510378 -12.113411 -1.1778841 128.0 +0.21856233 -3.9342523 -0.35692632 128.0 +0.58766204 -11.943748 -1.1600437 128.0 +0.51564658 -11.976952 -1.1630337 128.0 +0.44533208 -12.066399 -1.1717048 128.0 +0.37156016 -12.077855 -1.1726017 128.0 +0.29746923 -12.080902 -1.1727014 128.0 +0.22436105 -12.138212 -1.1782827 128.0 +0.15042664 -12.184133 -1.1827677 128.0 +0.075377449 -12.138062 -1.1780834 128.0 +0.00089607463 -12.239787 -1.1882495 128.0 +-0.073948532 -12.197772 -1.1840634 128.0 +-0.14799617 -12.132418 -1.1775851 128.0 +-0.21931924 -11.962156 -1.1606417 128.0 +-0.29777277 -12.166492 -1.1812727 128.0 +-0.37214446 -12.155485 -1.1803758 128.0 +-0.44723514 -12.166894 -1.181771 128.0 +-0.52342021 -12.199708 -1.1853591 128.0 +-0.60119712 -12.255897 -1.1913391 128.0 +-0.67808974 -12.282775 -1.1944288 128.0 +-0.75087911 -12.236671 -1.1902428 128.0 +-0.82353109 -12.196095 -1.1866548 128.0 +-0.90977174 -12.345614 -1.2022028 128.0 +-0.97360981 -12.191021 -1.1872528 128.0 +-1.0645332 -12.372183 -1.2060899 128.0 +-1.1441778 -12.406041 -1.2101762 128.0 +-1.2209612 -12.405719 -1.2108738 128.0 +-1.2945713 -12.374243 -1.2084819 128.0 +-1.3747519 -12.404635 -1.2123688 128.0 +-1.4570906 -12.449333 -1.2177509 128.0 +-1.5330853 -12.437196 -1.2174519 128.0 +-1.614357 -12.466039 -1.221339 128.0 +-1.6967098 -12.499281 -1.2257243 128.0 +-1.7768714 -12.513263 -1.2282159 128.0 +-1.854056 -12.505077 -1.2285149 128.0 +-1.9345523 -12.518049 -1.2310066 128.0 +-2.002156 -12.448965 -1.2252259 128.0 +-2.0862172 -12.482572 -1.2299103 128.0 +-2.166172 -12.489143 -1.2319037 128.0 +-2.2452292 -12.489326 -1.233299 128.0 +-2.327831 -12.507596 -1.236588 128.0 +-2.4069784 -12.505779 -1.2378837 128.0 +-2.4782312 -12.463449 -1.235093 128.0 +-2.548655 -12.418769 -1.232103 128.0 +-2.6433563 -12.490506 -1.241073 128.0 +-2.7515452 -12.618903 -1.2559234 128.0 +-2.8330643 -12.620229 -1.257817 128.0 +-2.9124629 -12.611333 -1.2587141 128.0 +-2.9741547 -12.527395 -1.2519367 128.0 +-3.0556827 -12.528243 -1.2539301 128.0 +-3.1332223 -12.512154 -1.2542291 128.0 +-3.2099366 -12.492693 -1.2542291 128.0 +-3.2964208 -12.510286 -1.2581161 128.0 +-3.3837607 -12.529208 -1.2622024 128.0 +-3.4650867 -12.524512 -1.2638968 128.0 +-3.5388863 -12.492485 -1.2628005 128.0 +-3.6157494 -12.471491 -1.2629001 128.0 +-3.7159779 -12.5292 -1.2712722 128.0 +-3.7927856 -12.506164 -1.2712722 128.0 +-3.8361499 -12.375263 -1.2600098 128.0 +-3.9135134 -12.356235 -1.2605081 128.0 +-3.9852738 -12.319682 -1.2592124 128.0 +-4.0557966 -12.279881 -1.2576177 128.0 +-4.1059518 -12.180277 -1.2497441 128.0 +-4.1666918 -12.114396 -1.2454584 128.0 +-4.1925125 -11.950585 -1.2308073 128.0 +-4.3277788 -12.097952 -1.2492458 128.0 +-4.3647628 -11.969279 -1.238382 128.0 +-4.4838877 -12.065384 -1.251538 128.0 +-4.5976586 -12.142793 -1.2628005 128.0 +-4.66993 -12.108784 -1.2622024 128.0 +-4.6888409 -11.939131 -1.247053 128.0 +-4.5203643 -11.305922 -1.1818708 128.0 +-4.9651766 -12.200484 -1.2816375 128.0 +-5.0654573 -12.23138 -1.2883152 128.0 +-5.1377072 -12.19365 -1.2876176 128.0 +-5.2092929 -12.15458 -1.2868202 128.0 +-1.5450281 -3.5467663 -0.34975028 128.0 +-1.5631324 -3.5290325 -0.34885329 128.0 +-1.5823038 -3.513932 -0.34825528 128.0 +-1.6021775 -3.5005383 -0.34785661 128.0 +-1.6202669 -3.4834251 -0.34705928 128.0 +-1.6309742 -3.4509308 -0.3445676 128.0 +-1.6486703 -3.4336836 -0.34377027 128.0 +-1.6592332 -3.4020424 -0.34137824 128.0 +-1.6721218 -3.3757505 -0.33958423 128.0 +-1.6941457 -3.3680933 -0.33988324 128.0 +-1.7075346 -3.3434587 -0.33828858 128.0 +-1.7298505 -3.3364513 -0.33868724 128.0 +-1.7539995 -3.3328176 -0.33948457 128.0 +-1.779107 -3.3307676 -0.34048125 128.0 +-1.805204 -3.3302839 -0.34167725 128.0 +-1.8304023 -3.3278618 -0.34267393 128.0 +-1.8517574 -3.3183055 -0.34287325 128.0 +-1.8691406 -3.3016863 -0.34227526 128.0 +-1.8690377 -3.2547839 -0.33818889 128.0 +-1.9050071 -3.2707636 -0.34137824 128.0 +-7.0848994 -11.988313 -1.3570855 128.0 +-7.2565446 -12.108477 -1.3762215 128.0 +-7.3891015 -12.159806 -1.387484 128.0 +-7.511075 -12.191325 -1.3965536 128.0 +-7.6384568 -12.229398 -1.4065204 128.0 +-7.7239981 -12.199111 -1.4085137 128.0 +-7.8110676 -12.170747 -1.4108061 128.0 +-7.9181566 -12.172632 -1.4167861 128.0 +-7.9932451 -12.124649 -1.4168857 128.0 +-8.1111631 -12.140734 -1.4247594 128.0 +-8.1046104 -11.971269 -1.4103078 128.0 +-8.2088737 -11.96644 -1.4157894 128.0 +-8.4866085 -12.209967 -1.4516696 128.0 +-8.5206871 -12.099906 -1.4445932 128.0 +-7.911068 -11.089201 -1.326687 128.0 +-8.8719616 -12.275869 -1.479377 128.0 +-9.0799694 -12.402637 -1.5019017 128.0 +-8.4991312 -11.461183 -1.3914707 128.0 +-8.9278822 -11.886143 -1.4512709 128.0 +-9.5874939 -12.602411 -1.5483466 128.0 +-9.6452045 -12.518126 -1.5451573 128.0 +-9.7218332 -12.458708 -1.5451573 128.0 +-9.8172216 -12.423021 -1.548247 128.0 +-9.901968 -12.373425 -1.5496423 128.0 +-9.9946194 -12.333306 -1.5523334 128.0 +-10.138283 -12.354816 -1.5630974 128.0 +-10.281947 -12.37426 -1.5737617 128.0 +-10.403166 -12.364993 -1.5808381 128.0 +-10.534336 -12.366064 -1.5894095 128.0 +-10.614564 -12.306468 -1.5901071 128.0 +-10.723912 -12.280076 -1.5952898 128.0 +-10.751601 -12.160377 -1.5881138 128.0 +-10.719823 -11.975563 -1.572167 128.0 +-10.380803 -11.45468 -1.5106725 128.0 +-10.489911 -11.433291 -1.5164531 128.0 +-10.566639 -11.376001 -1.5174499 128.0 +-10.632152 -11.306602 -1.5168518 128.0 +-10.709561 -11.2498 -1.5180478 128.0 +-10.812914 -11.219695 -1.5230312 128.0 +-10.864181 -11.135333 -1.5205395 128.0 +-10.909925 -11.045811 -1.5173502 128.0 +-10.962719 -10.963885 -1.5152571 128.0 +-10.99085 -10.857955 -1.5097755 128.0 +-11.007415 -10.74167 -1.5027988 128.0 +-11.056639 -10.658046 -1.5005064 128.0 +-11.116062 -10.584515 -1.4997091 128.0 +-11.191671 -10.526333 -1.5012041 128.0 +-11.280107 -10.479812 -1.5044931 128.0 +-11.361059 -10.425874 -1.5067855 128.0 +-11.441038 -10.370667 -1.5089781 128.0 +-11.520765 -10.314872 -1.5111709 128.0 +-10.019201 -8.8605337 -1.3019696 128.0 +-11.709432 -10.227696 -1.5195428 128.0 +-11.768953 -10.153057 -1.5191442 128.0 +-11.83103 -10.080653 -1.5191442 128.0 +-11.908649 -10.021322 -1.5212371 128.0 +-10.303118 -8.5630178 -1.3041623 128.0 +-10.325468 -8.4750204 -1.3002752 128.0 +-10.396602 -8.4271669 -1.3027669 128.0 +-12.255098 -9.8093634 -1.5345926 128.0 +-12.318959 -9.7370672 -1.5350909 128.0 +-12.391025 -9.6710901 -1.5366856 128.0 +-12.458014 -9.6009521 -1.5376823 128.0 +-12.527776 -9.5327654 -1.5390776 128.0 +-10.739515 -8.0686674 -1.3077503 128.0 +-12.672585 -9.3996496 -1.5426656 128.0 +-12.753305 -9.3387613 -1.5455559 128.0 +-12.826495 -9.2719898 -1.5475492 128.0 +-12.897725 -9.203516 -1.5493433 128.0 +-12.969412 -9.1350889 -1.551237 128.0 +-13.029305 -9.0581779 -1.5517353 128.0 +-13.10187 -8.9898825 -1.5538284 128.0 +-13.172439 -8.9199209 -1.555722 128.0 +-13.242641 -8.849431 -1.5576156 128.0 +-13.313306 -8.7789631 -1.5596091 128.0 +-13.39528 -8.7155571 -1.5629977 128.0 +-13.481163 -8.6541624 -1.5668848 128.0 +-13.555867 -8.5851202 -1.569476 128.0 +-13.615885 -8.506526 -1.5703731 128.0 +-13.678836 -8.4296064 -1.5716687 128.0 +-13.75071 -8.3579178 -1.5740608 128.0 +-13.838432 -8.2953835 -1.5783464 128.0 +-13.917339 -8.2270231 -1.5816355 128.0 +-14.003664 -8.1625156 -1.5858215 128.0 +-14.071602 -8.0868473 -1.5879145 128.0 +-14.135675 -8.0086908 -1.5896088 128.0 +-6.7323408 -3.760586 -0.73466456 128.0 +-6.7256503 -3.7028944 -0.73127586 128.0 +-14.375155 -7.798378 -1.6003728 128.0 +-14.436776 -7.7175312 -1.6019676 128.0 +-14.483858 -7.6288037 -1.6019676 128.0 +-14.562191 -7.5562849 -1.6055555 128.0 +-7.3588257 -3.7619948 -0.79007947 128.0 +-6.9773722 -3.5132253 -0.74473095 128.0 +-6.9479814 -3.4451592 -0.73904991 128.0 +-6.9600477 -3.3980982 -0.73805326 128.0 +-6.9861484 -3.3579137 -0.73865122 128.0 +-7.0345049 -3.3281717 -0.74174094 128.0 +-6.7381597 -3.1375687 -0.70675778 128.0 +-15.122584 -6.9275331 -1.6283793 128.0 +-15.18295 -6.8427877 -1.6303726 128.0 +-15.254669 -6.762804 -1.6336616 128.0 +-15.317769 -6.6786184 -1.6360537 128.0 +-7.3525243 -3.1528463 -0.76356804 128.0 +-7.3891535 -3.1150141 -0.76546168 128.0 +-15.476716 -6.4115291 -1.6402397 128.0 +-15.53604 -6.3246975 -1.6424323 128.0 +-15.601348 -6.239965 -1.6453227 128.0 +-15.656013 -6.1506672 -1.6471167 128.0 +-15.715738 -6.0630817 -1.6495087 128.0 +-15.777769 -5.9760523 -1.6521997 128.0 +-15.847717 -5.8916087 -1.6557877 128.0 +-15.916286 -5.806191 -1.6592761 128.0 +-15.969414 -5.7147899 -1.6611698 128.0 +-16.015446 -5.6206489 -1.6623658 128.0 +-16.0581 -5.5251875 -1.6632627 128.0 +-16.0917 -5.4265528 -1.6632627 128.0 +-16.15587 -5.3380132 -1.6665518 128.0 +-16.233763 -5.2534842 -1.6713358 128.0 +-16.330194 -5.1742096 -1.6781132 128.0 +-12.328172 -3.8233936 -1.2551261 128.0 +-16.390556 -4.9728456 -1.6779138 128.0 +-13.303297 -3.9474335 -1.3522018 128.0 +-16.265905 -4.7178512 -1.6586781 128.0 +-16.502289 -4.6768165 -1.6803058 128.0 +-16.545059 -4.5794525 -1.6818008 128.0 +-16.579571 -4.4796643 -1.6824986 128.0 +-12.766736 -3.3658292 -1.2847272 128.0 +-12.778475 -3.2852015 -1.2838302 128.0 +-16.489342 -4.1311817 -1.6649572 128.0 +-16.498913 -4.026154 -1.6633625 128.0 +-16.502975 -3.9200153 -1.6612694 128.0 +-16.515085 -3.8159938 -1.6600734 128.0 +-16.553722 -3.7180753 -1.6616681 128.0 +-16.568447 -3.6147373 -1.6608708 128.0 +-13.316599 -2.8200309 -1.3256904 128.0 +-16.540403 -3.3965387 -1.6535951 128.0 +-16.533607 -3.2895501 -1.6508044 128.0 +-16.653143 -3.2072265 -1.6609704 128.0 +-16.673487 -3.1051667 -1.6610701 128.0 +-16.699081 -3.0040343 -1.6617677 128.0 +-16.74465 -2.9062765 -1.6645584 128.0 +-16.781796 -2.8067601 -1.6665518 128.0 +-16.982409 -2.7332907 -1.6851895 128.0 +-17.083427 -2.6421103 -1.6937609 128.0 +-17.242033 -2.5584054 -1.7082126 128.0 +-17.30962 -2.4599788 -1.713495 128.0 +-17.405237 -2.3647015 -1.7216676 128.0 +-17.525003 -2.2715392 -1.7323321 128.0 +-17.637365 -2.1761429 -1.7422987 128.0 +-17.435932 -2.0427704 -1.7206711 128.0 +-17.78043 -1.97259 -1.7541592 128.0 +-18.42753 -1.9299536 -1.8181454 128.0 +-19.56789 -1.9280066 -1.9317659 128.0 +-19.710138 -1.8199728 -1.944922 128.0 +-19.747702 -1.7013037 -1.947613 128.0 +-19.798435 -1.583352 -1.9516994 128.0 +-19.800831 -1.461329 -1.9510016 128.0 +-19.779642 -1.3377932 -1.9480116 128.0 +-19.789465 -1.2165245 -1.948211 128.0 +-19.802517 -1.0954051 -1.948809 128.0 +-19.792965 -0.97309768 -1.9472142 128.0 +-19.787628 -0.85116225 -1.946118 128.0 +-19.766624 -0.72877997 -1.9435266 128.0 +-19.786638 -0.60796851 -1.9451213 128.0 +-19.750206 -0.48557267 -1.9411346 128.0 +-19.771717 -0.36472613 -1.9430283 128.0 +-19.756668 -0.24319507 -1.9413339 128.0 +-19.808533 -0.12227612 -1.946417 128.0 +-19.784035 -0.00073148467 -1.9439253 128.0 +-19.774712 0.12060595 -1.9430283 128.0 +-19.7736 0.24193902 -1.9430283 128.0 +-19.739908 0.36267623 -1.9398389 128.0 +-19.733332 0.48369342 -1.9394403 128.0 +-19.715075 0.60430759 -1.9379452 128.0 +-19.699062 0.72482592 -1.9367492 128.0 +-19.682316 0.8451705 -1.9355532 128.0 +-19.662846 0.96523917 -1.934158 128.0 +-19.641651 1.0850458 -1.932663 128.0 +-19.616747 1.2044456 -1.9308689 128.0 +-19.594095 1.3237821 -1.9293739 128.0 +-17.631426 -0.448975 -1.9434843 128.0 +-17.612984 -0.34037846 -1.9411398 128.0 +-17.58493 -0.23190701 -1.9377905 128.0 +-17.517456 -0.12351847 -1.9300872 128.0 +-17.589434 -0.016098185 -1.9381254 128.0 +-17.57827 0.091772035 -1.9368974 128.0 +-17.560484 0.19943708 -1.9349995 128.0 +-17.547007 0.30697411 -1.9336598 128.0 +-17.540819 0.41454092 -1.9332131 128.0 +-17.536951 0.52213198 -1.9331015 128.0 +-17.530437 0.62961996 -1.9327666 128.0 +-17.515324 0.73671371 -1.9315386 128.0 +-17.481688 0.84278482 -1.9283009 128.0 +-17.474203 0.94992673 -1.9280776 128.0 +-17.453167 1.0562284 -1.9264029 128.0 +-17.419586 1.1615146 -1.9233886 128.0 +-17.382397 1.2662121 -1.9200394 128.0 +-17.376282 1.3730012 -1.9202627 128.0 +-17.359608 1.4789195 -1.9193695 128.0 +-17.344269 1.5848658 -1.9186996 128.0 +-17.325317 1.6903901 -1.9176949 128.0 +-17.308687 1.7960492 -1.917025 128.0 +-17.295366 1.9020023 -1.9168017 128.0 +-17.275473 2.0071716 -1.9159086 128.0 +-17.26086 2.1128926 -1.9156853 128.0 +-17.241657 2.2180028 -1.9150155 128.0 +-17.229692 2.3240197 -1.9152387 128.0 +-17.21314 2.4294176 -1.9150155 128.0 +-17.192993 2.534265 -1.9144572 128.0 +-17.173191 2.6391079 -1.9140106 128.0 +-17.149805 2.7433324 -1.9132292 128.0 +-17.119905 2.8463914 -1.9117779 128.0 +-17.109953 2.9527354 -1.912671 128.0 +-17.095427 3.0583644 -1.9131175 128.0 +-17.063635 3.1608498 -1.9116662 128.0 +-17.028303 3.2624993 -1.9098799 128.0 +-16.995293 3.364413 -1.9084285 128.0 +-16.964592 3.4666417 -1.9073122 128.0 +-16.896328 3.5608337 -1.9019533 128.0 +-16.872217 3.6640189 -1.9017301 128.0 +-16.800928 3.7566347 -1.8961478 128.0 +-16.852133 3.8768058 -1.9047444 128.0 +-16.747761 3.9611528 -1.895478 128.0 +-16.659407 4.0483546 -1.8881097 128.0 +-16.739351 4.1767192 -1.9002787 128.0 +-16.690304 4.2734361 -1.8975992 128.0 +-16.588797 4.3560805 -1.8888911 128.0 +-16.616453 4.4725065 -1.8952547 128.0 +-16.565704 4.5680394 -1.8925754 128.0 +-16.550753 4.6733789 -1.8941383 128.0 +-16.498854 4.7682233 -1.8914589 128.0 +-16.483582 4.8735948 -1.8931335 128.0 +-16.435293 4.9691801 -1.8910123 128.0 +-16.373161 5.0602493 -1.8873281 128.0 +-16.376867 5.1716895 -1.8914589 128.0 +-16.345772 5.2723837 -1.8915706 128.0 +-16.327271 5.3772426 -1.8932452 128.0 +-16.302448 5.4801731 -1.89425 128.0 +-16.285435 5.5859032 -1.8962595 128.0 +-16.249916 5.6853952 -1.8961478 128.0 +-16.233444 5.7916741 -1.8983808 128.0 +-16.231222 5.903399 -1.9023999 128.0 +-16.232899 6.0170407 -1.9069772 128.0 +-16.226353 6.1281161 -1.9106615 128.0 +-16.203285 6.2332721 -1.9124477 128.0 +-16.183239 6.3398256 -1.9146805 128.0 +-16.163418 6.4467354 -1.917025 128.0 +-16.150259 6.5566306 -1.9202627 128.0 +-16.13636 6.6666069 -1.9235003 128.0 +-16.113474 6.7731934 -1.9257331 128.0 +-16.103592 6.8856096 -1.9296407 128.0 +-16.071974 6.9890451 -1.9309803 128.0 +-16.060598 7.1015944 -1.9348878 128.0 +-16.008564 7.1963396 -1.9338831 128.0 +-15.998454 7.3101244 -1.9381254 128.0 +-15.962312 7.4123363 -1.9392419 128.0 +-15.958771 7.5300698 -1.944489 128.0 +-15.944527 7.6433129 -1.9485081 128.0 +-15.940214 7.7618842 -1.953867 128.0 +-15.9395 7.8828926 -1.959784 128.0 +-15.926353 7.9983859 -1.9642497 128.0 +-15.907077 8.1113052 -1.9680456 128.0 +-15.883483 8.2224617 -1.9713949 128.0 +-15.855604 8.3317842 -1.9742975 128.0 +-15.819966 8.4373331 -1.9763072 128.0 +-15.784503 8.543231 -1.9784284 128.0 +-15.759659 8.6552286 -1.9820008 128.0 +-15.726221 8.7628899 -1.9845687 128.0 +-15.706761 8.8787794 -1.9890343 128.0 +-15.654572 8.97647 -1.9893693 128.0 +-15.637856 9.0948372 -1.9943932 128.0 +-15.607435 9.2057638 -1.9977424 128.0 +-15.567713 9.3115578 -1.9999753 128.0 +-15.545973 9.4285469 -2.0046642 128.0 +-15.534387 9.5523863 -2.0108047 128.0 +-15.500781 9.6632948 -2.014154 128.0 +-15.461358 9.7709646 -2.0168333 128.0 +-15.42287 9.8795862 -2.0197361 128.0 +-15.366127 9.9767389 -2.0202942 128.0 +-15.307942 10.073021 -2.0207407 128.0 +-15.258249 10.175029 -2.0224154 128.0 +-15.192236 10.266234 -2.0219688 128.0 +-15.148636 10.372733 -2.0246482 128.0 +-15.100219 10.476251 -2.0267694 128.0 +-15.040531 10.572135 -2.0274394 128.0 +-15.007758 10.687281 -2.0319049 128.0 +-14.970914 10.800095 -2.0359242 128.0 +-14.921213 10.904063 -2.0382686 128.0 +-14.897159 11.02734 -2.0442972 128.0 +-14.843527 11.12927 -2.0463068 128.0 +-14.789206 11.230955 -2.0483165 128.0 +-14.760189 11.352386 -2.0540102 128.0 +-14.707502 11.456174 -2.0564663 128.0 +-14.656437 11.561587 -2.0592575 128.0 +-14.589879 11.655022 -2.0599272 128.0 +-14.559813 11.778073 -2.0659559 128.0 +-14.517251 11.891747 -2.0703101 128.0 +-14.476902 12.007879 -2.0751107 128.0 +-14.428063 12.117572 -2.0787947 128.0 +-14.367066 12.21746 -2.0808043 128.0 +-14.31367 12.324188 -2.0840421 128.0 +-14.267745 12.437902 -2.0885077 128.0 +-14.221706 12.552175 -2.0930851 128.0 +-14.154795 12.648471 -2.0946481 128.0 +-14.104185 12.759751 -2.0987787 128.0 +-14.042482 12.86149 -2.1013465 128.0 +-13.9582 12.942681 -2.1005652 128.0 +-13.865481 13.015841 -2.0985556 128.0 +-13.724126 13.042486 -2.089066 128.0 +-13.549309 13.035507 -2.0743291 128.0 +-13.40215 13.053225 -2.0638347 128.0 +-13.222028 13.036838 -2.0480931 128.0 +-13.034878 13.011013 -2.0311236 128.0 +-12.900274 13.035655 -2.0224154 128.0 +-12.75683 13.049899 -2.0122559 128.0 +-12.595062 13.043575 -1.9990822 128.0 +-12.430425 13.032166 -1.9853501 128.0 +-12.301842 13.056839 -1.9774235 128.0 +-12.170041 13.076791 -1.9689387 128.0 +-12.050566 13.108787 -1.9624635 128.0 +-11.892411 13.09714 -1.949513 128.0 +-11.744145 13.094407 -1.9381254 128.0 +-11.598999 13.093326 -1.9271845 128.0 +-11.454965 13.091706 -1.9163551 128.0 +-11.297094 13.072274 -1.9030697 128.0 +-11.170865 13.087681 -1.8951432 128.0 +-11.033984 13.089117 -1.8853186 128.0 +-10.908319 13.102351 -1.8773919 128.0 +-10.791112 13.124516 -1.8709167 128.0 +-10.677804 13.150368 -1.8651114 128.0 +-10.604374 13.224941 -1.866451 128.0 +-10.547088 13.320144 -1.870805 128.0 +-10.470667 13.391654 -1.8718098 128.0 +-10.37919 13.44385 -1.8701352 128.0 +-10.269997 13.472509 -1.8652229 128.0 +-10.146501 13.48128 -1.8576313 128.0 +-10.028027 13.495426 -1.8509327 128.0 +-9.9191675 13.521448 -1.8460205 128.0 +-9.8278542 13.570788 -1.8444575 128.0 +-9.7311077 13.612243 -1.8418897 128.0 +-9.6210442 13.634346 -1.8367542 128.0 +-9.5133495 13.658875 -1.8320652 128.0 +-9.415287 13.696518 -1.8292741 128.0 +-9.3232584 13.742518 -1.8277111 128.0 +-9.2183046 13.768913 -1.8235804 128.0 +-9.1194038 13.803659 -1.8206776 128.0 +-9.030736 13.853527 -1.8198961 128.0 +-8.9364233 13.89447 -1.8179983 128.0 +-8.836092 13.925547 -1.8148723 128.0 +-8.7314978 13.949179 -1.8108531 128.0 +-8.629035 13.975434 -1.8072805 128.0 +-8.5224447 13.994168 -1.8028148 128.0 +-8.4072514 13.997641 -1.7964512 128.0 +-8.3100634 14.030152 -1.7939951 128.0 +-8.2158003 14.067148 -1.7922088 128.0 +-8.1273479 14.11385 -1.7917622 128.0 +-8.051878 14.183329 -1.79433 128.0 +-7.9884801 14.27496 -1.7998005 128.0 +-7.8964205 14.315876 -1.7987957 128.0 +-7.7875471 14.325643 -1.7938834 128.0 +-7.7117009 14.395931 -1.7967862 128.0 +-7.6501298 14.493951 -1.8032614 128.0 +-7.5853519 14.587346 -1.8091785 128.0 +-7.5124664 14.66634 -1.8133093 128.0 +-7.4268107 14.721031 -1.8144257 128.0 +-7.3367863 14.767214 -1.8145373 128.0 +-7.2486587 14.817309 -1.8152071 128.0 +-7.1606236 14.867775 -1.8159887 128.0 +-7.0730934 14.919514 -1.8169935 128.0 +-6.9885592 14.977942 -1.8188914 128.0 +-6.897769 15.02325 -1.8192263 128.0 +-6.7837744 15.017293 -1.8133093 128.0 +-6.6571999 14.981444 -1.8038197 128.0 +-6.5659461 15.023831 -1.8040429 128.0 +-6.4752073 15.067489 -1.8044895 128.0 +-6.3865008 15.11609 -1.8056059 128.0 +-6.2951546 15.158663 -1.8060524 128.0 +-6.1648483 15.105917 -1.795 128.0 +-6.05688 15.105643 -1.7904226 128.0 +-5.9575238 15.12588 -1.788413 128.0 +-5.8635254 15.159369 -1.7880781 128.0 +-5.7739272 15.204352 -1.7891945 128.0 +-5.6867747 15.256255 -1.7912041 128.0 +-5.961421 16.297855 -1.9116662 128.0 +-5.8478808 16.296713 -1.9072005 128.0 +-5.7444768 16.322914 -1.9060841 128.0 +-5.6419439 16.35128 -1.9053025 128.0 +-5.5424633 16.388414 -1.9056375 128.0 +-5.4436774 16.427773 -1.9063073 128.0 +-5.3363328 16.441017 -1.9039629 128.0 +-5.2272248 16.44788 -1.9009485 128.0 +-5.1173487 16.451176 -1.8975992 128.0 +-5.0128374 16.470858 -1.8962595 128.0 +-4.9091282 16.492735 -1.8952547 128.0 +-4.8053389 16.513958 -1.89425 128.0 +-4.7009311 16.532618 -1.8930219 128.0 +-4.5967407 16.551577 -1.8919055 128.0 +-4.493535 16.573715 -1.8912356 128.0 +-4.392519 16.603857 -1.8915706 128.0 +-4.294529 16.645891 -1.8933568 128.0 +-3.635113 14.456291 -1.636691 128.0 +-3.5451603 14.473497 -1.6361328 128.0 +-3.4788768 14.589708 -1.6470737 128.0 +-3.8847251 16.746271 -1.8933568 128.0 +-3.7829919 16.774639 -1.8939151 128.0 +-3.0842521 14.078546 -1.5812048 128.0 +-3.5768564 16.819799 -1.8939151 128.0 +-3.4707742 16.827805 -1.8923521 128.0 +-3.36765 16.849758 -1.8924637 128.0 +-3.2626882 16.862299 -1.8915706 128.0 +-3.1602585 16.887863 -1.8922404 128.0 +-3.0576379 16.912804 -1.8929102 128.0 +-2.9553425 16.940056 -1.8939151 128.0 +-2.852828 16.96669 -1.8949199 128.0 +-2.7542262 17.018211 -1.8988273 128.0 +-2.6448641 17.003368 -1.8952547 128.0 +-2.5397499 17.014362 -1.8946966 128.0 +-2.4334748 17.016836 -1.8932452 128.0 +-2.3294196 17.034401 -1.8935801 128.0 +-2.2207389 17.016842 -1.8900076 128.0 +-2.1202059 17.061705 -1.8935801 128.0 +-2.0133801 17.056629 -1.8915706 128.0 +-1.910452 17.084463 -1.8933568 128.0 +-1.8077801 17.116617 -1.8957013 128.0 +-1.7005571 17.105631 -1.8932452 128.0 +-1.5972277 17.133554 -1.8952547 128.0 +-1.4899995 17.119272 -1.8925754 128.0 +-1.3842888 17.120169 -1.8916821 128.0 +-1.2796595 17.134285 -1.8923521 128.0 +-1.1742296 17.13785 -1.8919055 128.0 +-1.0681854 17.130846 -1.8903425 128.0 +-0.96310824 17.138069 -1.8904542 128.0 +-0.85842985 17.153582 -1.8915706 128.0 +-0.75289965 17.152569 -1.8909007 128.0 +-0.64790183 17.163818 -1.8916821 128.0 +-0.54260588 17.168463 -1.8917938 128.0 +-0.43737856 17.176437 -1.8923521 128.0 +-0.33205459 17.182772 -1.8927987 128.0 +-0.22668245 17.189453 -1.8933568 128.0 +-0.12121272 17.191515 -1.8934685 128.0 +-0.015730878 17.197897 -1.8941383 128.0 +0.089819558 17.202639 -1.8946966 128.0 +0.19537127 17.201763 -1.8946966 128.0 +0.300933 17.201235 -1.8948082 128.0 +0.40635484 17.194098 -1.89425 128.0 +0.51167089 17.18532 -1.8935801 128.0 +0.61703712 17.179871 -1.8933568 128.0 +0.72264791 17.180725 -1.8939151 128.0 +0.82829237 17.180931 -1.8944733 128.0 +0.93418229 17.184456 -1.895478 128.0 +1.0397265 17.180384 -1.8957013 128.0 +1.1455865 17.180622 -1.8964828 128.0 +1.2506945 17.169306 -1.8960363 128.0 +1.3559415 17.160316 -1.8959246 128.0 +1.4612942 17.152664 -1.8960363 128.0 +1.566875 17.147333 -1.8964828 128.0 +1.6720595 17.137396 -1.8964828 128.0 +1.7767711 17.12286 -1.8960363 128.0 +1.8818015 17.111637 -1.8960363 128.0 +1.9873344 17.104704 -1.8965945 128.0 +2.0924909 17.09416 -1.8968178 128.0 +2.1970859 17.079027 -1.8965945 128.0 +2.3010426 17.059317 -1.8959246 128.0 +2.4042845 17.035036 -1.8948082 128.0 +2.5076053 17.012098 -1.8939151 128.0 +2.6129987 17.003267 -1.8946966 128.0 +2.7193198 16.99967 -1.8961478 128.0 +2.826184 16.99835 -1.8979342 128.0 +2.9326274 16.99342 -1.8993856 128.0 +3.0371919 16.97706 -1.8996089 128.0 +2.5914898 13.989586 -1.5604392 128.0 +3.2460458 16.942415 -1.9000554 128.0 +3.3480117 16.912432 -1.898939 128.0 +3.4521194 16.893517 -1.8991623 128.0 +3.051851 14.480901 -1.6246337 128.0 +3.1387489 14.453162 -1.6236289 128.0 +3.2379968 14.481152 -1.6290994 128.0 +3.4446352 14.973325 -1.6881582 128.0 +3.5373597 14.955775 -1.6886047 128.0 +3.6734061 15.116297 -1.7097051 128.0 +4.1721487 16.721031 -1.8981575 128.0 +3.4334719 13.409425 -1.517122 128.0 +3.5068529 13.354465 -1.5132146 128.0 +4.4748311 16.62509 -1.8962595 128.0 +4.581511 16.614563 -1.8982691 128.0 +4.6841798 16.589008 -1.898604 128.0 +4.782845 16.549452 -1.8973759 128.0 +4.8831739 16.515982 -1.8969294 128.0 +4.9881606 16.498075 -1.8983808 128.0 +4.5382748 14.684098 -1.6887164 128.0 +4.6585116 14.751686 -1.6999923 128.0 +4.6839652 14.521374 -1.6762124 128.0 +4.7450037 14.407411 -1.6661646 128.0 +4.8326831 14.376142 -1.6659414 128.0 +4.9385343 14.397918 -1.6720817 128.0 +5.0349894 14.390795 -1.6748728 128.0 +5.413693 15.173924 -1.7720016 128.0 +5.5134892 15.1591 -1.7742344 128.0 +5.6043277 15.119393 -1.7735646 128.0 +5.6752262 15.027081 -1.7666427 128.0 +5.7501984 14.947456 -1.7612839 128.0 +5.8276701 14.875806 -1.7569299 128.0 +5.8776064 14.736387 -1.7444259 128.0 +5.9279213 14.601522 -1.7324802 128.0 +5.9760451 14.464763 -1.7203112 128.0 +6.0211749 14.324301 -1.7076956 128.0 +6.0644174 14.18292 -1.6949683 128.0 +6.1461763 14.133595 -1.693517 128.0 +6.2183161 14.062898 -1.6894978 128.0 +6.3224139 14.06436 -1.6944101 128.0 +6.4205685 14.051514 -1.6976478 128.0 +6.5254993 14.052412 -1.7026716 128.0 +6.6306825 14.052551 -1.7076956 128.0 +6.7322459 14.043862 -1.7117147 128.0 +6.8274264 14.021052 -1.7140592 128.0 +6.9243422 14.001165 -1.7168503 128.0 +7.0649757 14.067646 -1.7305822 128.0 +7.1547713 14.031114 -1.7314754 128.0 +7.2558055 14.016072 -1.7351596 128.0 +7.3527637 13.9924 -1.737839 128.0 +7.446898 13.962804 -1.7398486 128.0 +7.5556092 13.959672 -1.745319 128.0 +7.6569076 13.941793 -1.7490033 128.0 +7.7573028 13.92146 -1.7524642 128.0 +8.2391605 14.575201 -1.8430061 128.0 +8.7733116 15.300254 -1.9434843 128.0 +8.8685255 15.248711 -1.9438192 128.0 +8.9679813 15.204279 -1.945159 128.0 +9.0667152 15.158347 -1.9463869 128.0 +9.1631613 15.108377 -1.9471685 128.0 +9.2582951 15.056102 -1.9477267 128.0 +9.3526058 15.002383 -1.9481733 128.0 +9.4471369 14.948915 -1.9487314 128.0 +9.5483322 14.905729 -1.9507411 128.0 +9.6482706 14.860197 -1.9525273 128.0 +9.7540178 14.823132 -1.9555416 128.0 +9.8613262 14.787807 -1.9588909 128.0 +9.9607792 14.740194 -1.9606771 128.0 +10.058334 14.689458 -1.9621285 128.0 +10.1766 14.66829 -1.9677106 128.0 +10.281269 14.626709 -1.9706134 128.0 +10.384658 14.582777 -1.9732928 128.0 +10.490219 14.541349 -1.9764187 128.0 +10.59449 14.49757 -1.9793215 128.0 +10.695662 14.449064 -1.981666 128.0 +10.812732 14.421329 -1.9870248 128.0 +10.929863 14.392701 -1.9923836 128.0 +11.037961 14.35136 -1.9960679 128.0 +11.147796 14.311586 -2.000087 128.0 +11.258787 14.272564 -2.0043294 128.0 +11.358554 14.218741 -2.0065622 128.0 +11.445585 14.148779 -2.0065622 128.0 +11.488105 14.02447 -1.9987472 128.0 +11.488296 13.850456 -1.9836755 128.0 +11.481035 13.670123 -1.967599 128.0 +11.485516 13.506303 -1.953867 128.0 +11.502038 13.35876 -1.9424795 128.0 +11.54461 13.242988 -1.9357809 128.0 +11.576989 13.116767 -1.9275194 128.0 +11.655268 13.043262 -1.9271845 128.0 +11.770413 13.010559 -1.9331015 128.0 +11.899691 12.992323 -1.9413631 128.0 +12.052834 12.998492 -1.9535321 128.0 +12.189494 12.985155 -1.9629101 128.0 +12.34561 12.990797 -1.975414 128.0 +12.495361 12.987848 -1.9868015 128.0 +12.658019 12.996363 -2.0001986 128.0 +12.8359 13.018228 -2.0159402 128.0 +12.990654 13.014481 -2.0278859 128.0 +13.135247 12.998837 -2.038157 128.0 +13.282267 12.98399 -2.048763 128.0 +13.457476 12.994748 -2.0637231 128.0 +13.517542 12.893411 -2.0607088 128.0 +13.644135 12.855203 -2.0680771 128.0 +13.724939 12.773273 -2.0684121 128.0 +13.79574 12.682093 -2.0672956 128.0 +13.819591 12.548437 -2.0591457 128.0 +13.864516 12.434874 -2.0543451 128.0 +13.915263 12.327164 -2.0505493 128.0 +13.954742 12.210138 -2.0451906 128.0 +14.006091 12.10414 -2.0417295 128.0 +14.052887 11.994746 -2.0377104 128.0 +14.104187 11.889719 -2.0344727 128.0 +14.15702 11.786421 -2.0315702 128.0 +14.199138 11.674719 -2.027216 128.0 +14.242733 11.564823 -2.0231969 128.0 +14.297145 11.464158 -2.0208523 128.0 +14.350858 11.363262 -2.018508 128.0 +14.399175 11.258466 -2.0154936 128.0 +14.454612 11.159577 -2.0135956 128.0 +14.503057 11.055614 -2.0108047 128.0 +14.544418 10.946696 -2.0071204 128.0 +14.586585 10.838873 -2.0036595 128.0 +14.631183 10.733295 -2.0006452 128.0 +14.658134 10.61534 -1.9952863 128.0 +14.722183 10.524621 -1.9951746 128.0 +14.762938 10.417474 -1.991937 128.0 +14.800487 10.308518 -1.9883645 128.0 +14.843806 10.204 -1.9856851 128.0 +14.878178 10.093758 -1.9818892 128.0 +14.909279 9.9818201 -1.9777585 128.0 +14.949517 9.8764563 -1.9749674 128.0 +14.99402 9.774231 -1.9728462 128.0 +15.049532 9.6793566 -1.972288 128.0 +15.096054 9.578846 -1.9706134 128.0 +15.141067 9.477602 -1.9688271 128.0 +15.181179 9.3735552 -1.9664826 128.0 +15.219736 9.268857 -1.9640265 128.0 +15.250766 9.1599455 -1.9606771 128.0 +15.279323 9.0499897 -1.9571047 128.0 +15.313112 8.9435368 -1.9543135 128.0 +15.338421 8.8325481 -1.9505178 128.0 +15.373316 8.7274733 -1.9480616 128.0 +15.4101 8.6237583 -1.9459404 128.0 +15.450542 8.5223217 -1.9443774 128.0 +15.472859 8.4112215 -1.9405816 128.0 +15.510163 8.3086147 -1.9387953 128.0 +15.529214 8.1965895 -1.9347762 128.0 +15.572162 8.0974817 -1.9338831 128.0 +15.612709 7.9972501 -1.9327666 128.0 +15.648177 7.894587 -1.9310919 128.0 +15.680304 7.7904639 -1.9290824 128.0 +15.678714 7.6700854 -1.922942 128.0 +15.679821 7.5517459 -1.9172482 128.0 +15.686353 7.4366622 -1.912336 128.0 +15.696568 7.3238845 -1.907982 128.0 +15.713215 7.2145796 -1.9045211 128.0 +15.749036 7.114347 -1.9035163 128.0 +15.766965 7.006279 -1.9003903 128.0 +15.795089 6.9030352 -1.898604 128.0 +15.812496 6.7953939 -1.8955897 128.0 +15.832841 6.6893468 -1.8930219 128.0 +15.842384 6.579113 -1.8892261 128.0 +15.869574 6.4765248 -1.8876631 128.0 +15.889645 6.3712621 -1.8853186 128.0 +15.899776 6.2623549 -1.8818576 128.0 +15.900829 6.1503372 -1.8773919 128.0 +15.903894 6.0396018 -1.8732612 128.0 +15.911787 5.9311428 -1.8698003 128.0 +15.917083 5.8221321 -1.866116 128.0 +15.938478 5.7193222 -1.8644415 128.0 +15.959209 5.6164694 -1.8627669 128.0 +15.953917 5.5048251 -1.8580779 128.0 +15.996807 5.4100142 -1.8591943 128.0 +16.011778 5.3058181 -1.8570731 128.0 +16.044033 5.2074718 -1.8570731 128.0 +16.080418 5.1104345 -1.8576313 128.0 +16.115269 5.0128512 -1.8580779 128.0 +16.145723 4.9138756 -1.8580779 128.0 +16.177475 4.8152819 -1.8583012 128.0 +16.2258 4.7214818 -1.860534 128.0 +16.256376 4.6223769 -1.8607572 128.0 +16.287306 4.5233402 -1.8610922 128.0 +16.311876 4.4225378 -1.8607572 128.0 +16.344469 4.3238921 -1.8614271 128.0 +16.367805 4.2227778 -1.8610922 128.0 +16.387627 4.1208134 -1.8604224 128.0 +16.37689 4.0114346 -1.8562915 128.0 +16.46306 3.9256256 -1.8634367 128.0 +16.478125 3.822515 -1.8624319 128.0 +16.507086 3.722647 -1.8631017 128.0 +16.563591 3.6287355 -1.8670093 128.0 +16.598181 3.5297225 -1.8684605 128.0 +16.611742 3.4262054 -1.8675674 128.0 +16.626604 3.3230443 -1.8668976 128.0 +16.620338 3.2158651 -1.8638833 128.0 +16.670038 3.1194913 -1.8673441 128.0 +16.695711 3.0183849 -1.8681257 128.0 +16.722727 2.9174225 -1.8691305 128.0 +16.789312 2.822999 -1.8747126 128.0 +16.804358 2.7196109 -1.8744893 128.0 +16.857059 2.6221023 -1.87862 128.0 +16.880693 2.519794 -1.8795131 128.0 +16.906658 2.4177163 -1.8807412 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +16.978867 2.10991 -1.8842021 128.0 +17.006296 2.0074377 -1.8858768 128.0 +17.035084 1.904929 -1.8877747 128.0 +17.051392 1.8008898 -1.888333 128.0 +17.064098 1.6964272 -1.8885562 128.0 +17.074186 1.591692 -1.8885562 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +17.130133 0.96266204 -1.8895611 128.0 +17.147627 0.85813171 -1.8909007 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +17.236425 -0.089995176 -1.8984923 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +17.245449 -0.83140129 -1.9017301 128.0 +17.240025 -0.93720174 -1.9017301 128.0 +17.213118 -1.0417068 -1.8993856 128.0 +17.235157 -1.1492215 -1.9026232 128.0 +17.203003 -1.2531484 -1.8998321 128.0 +17.216785 -1.3604021 -1.9022882 128.0 +17.178408 -1.4634868 -1.898939 128.0 +0 -0 -0 128.0 +0 -0 -0 128.0 +17.11001 -1.775438 -1.8945849 128.0 +17.100771 -1.8806068 -1.8948082 128.0 +17.03363 -1.9790785 -1.8885562 128.0 +16.281376 -1.9930176 -1.8048245 128.0 +15.707031 -2.0206215 -1.7411883 128.0 +15.233436 -2.0548024 -1.6889397 128.0 +15.019805 -2.1199079 -1.6661646 128.0 +14.106952 -2.0794525 -1.5640118 128.0 +13.535043 -2.0800982 -1.5004873 128.0 +12.894989 -2.0628209 -1.4291478 128.0 +12.304695 -2.0459192 -1.3633904 128.0 +11.857111 -2.0463562 -1.3138213 128.0 +11.973456 -2.142169 -1.3285581 128.0 +11.009339 -2.0395038 -1.2199301 128.0 +10.516426 -2.0150275 -1.165002 128.0 +10.14025 -2.0075445 -1.1233593 128.0 +9.8444147 -2.0118363 -1.0908715 128.0 +9.5566969 -2.0142148 -1.0592767 128.0 +9.2936096 -2.0184119 -1.0304729 128.0 +9.2471066 -2.0678096 -1.0265654 128.0 +9.0734806 -2.0875301 -1.0080328 128.0 +8.9637938 -2.1202941 -0.99686855 128.0 +9.0066233 -2.188864 -1.0033438 128.0 +8.928422 -2.2279689 -0.9958638 128.0 +8.8520079 -2.2666905 -0.98860705 128.0 +9.0253611 -2.3701749 -1.0103773 128.0 +8.9876175 -2.4193106 -1.0076978 128.0 +8.9429054 -2.4662235 -1.0042369 128.0 +8.6014862 -2.4289727 -0.96616691 128.0 +7.9286418 -2.2916214 -0.88924533 128.0 +7.9363499 -2.3467073 -0.8918131 128.0 +7.9132404 -2.3927715 -0.89080828 128.0 +7.8898644 -2.4386406 -0.88980353 128.0 +7.9012866 -2.4953845 -0.89292949 128.0 +7.9028502 -2.5493095 -0.89493906 128.0 +7.9002733 -2.6021042 -0.89650208 128.0 +8.3617315 -2.8110573 -0.95310473 128.0 +8.347146 -2.8632782 -0.95343965 128.0 +8.2843962 -2.89869 -0.94808084 128.0 +8.3347797 -2.9738426 -0.95623076 128.0 +8.2920942 -3.0160971 -0.95332801 128.0 +8.1988878 -3.0392904 -0.94439662 128.0 +8.2507391 -3.1162224 -0.95288146 128.0 +8.3557472 -3.2145972 -0.96784157 128.0 +7.1626 -2.8062079 -0.82627898 128.0 +7.1387849 -2.8475273 -0.82549751 128.0 +8.1515217 -3.3095438 -0.95042533 128.0 +8.1025887 -3.3477361 -0.94696444 128.0 +8.1102943 -3.4093263 -0.95042533 128.0 +8.1020145 -3.4644954 -0.95198834 128.0 +8.0596437 -3.505029 -0.94942057 128.0 +8.0089025 -3.5415566 -0.94584799 128.0 +7.987927 -3.5910392 -0.94595963 128.0 +7.9666467 -3.6403975 -0.94607127 128.0 +7.9522715 -3.6929781 -0.94707608 128.0 +7.9033985 -3.7294056 -0.94383842 128.0 +7.7504296 -3.7155457 -0.92765027 128.0 +5.3821402 -2.6210613 -0.63458908 128.0 +5.3659563 -2.6540363 -0.63458908 128.0 +5.3389139 -2.6815596 -0.63324934 128.0 +7.7100296 -3.9317162 -0.93434882 128.0 +7.6557541 -3.9634178 -0.93055302 128.0 +7.7430129 -4.0690222 -0.94473159 128.0 +7.6310921 -4.0701609 -0.93367898 128.0 +7.6243277 -4.1268406 -0.93602347 128.0 +7.5143714 -4.1271448 -0.92519414 128.0 +7.5184212 -4.1896195 -0.92899001 128.0 +7.5462093 -4.2659912 -0.93591183 128.0 +7.4819598 -4.2904644 -0.93099958 128.0 +7.2235522 -4.2014041 -0.90085614 128.0 +7.3859477 -4.3567142 -0.92541742 128.0 +6.9625034 -4.1647601 -0.87350374 128.0 +7.4687295 -4.5299883 -0.94339186 128.0 +7.4323282 -4.5705252 -0.94227546 128.0 +7.2219887 -4.5024915 -0.91816068 128.0 +7.4344864 -4.6985474 -0.95009041 128.0 +7.3251839 -4.6926193 -0.93937272 128.0 +7.2620797 -4.715291 -0.93479538 128.0 +7.2371612 -4.7624927 -0.93535364 128.0 +7.1358724 -4.7588444 -0.9256407 128.0 +7.1402969 -4.8253517 -0.93021804 128.0 +11.767116 -8.0574121 -1.5642351 128.0 +11.715005 -8.1277628 -1.5639002 128.0 +6.8055525 -4.7839584 -0.89661372 128.0 +11.597383 -8.2588062 -1.5615557 128.0 +11.531178 -8.3187647 -1.5594345 128.0 +11.459859 -8.3747044 -1.5566435 128.0 +11.385892 -8.4283094 -1.5535175 128.0 +11.315675 -8.4843025 -1.5509497 128.0 +5.4915347 -4.1706018 -0.73674184 128.0 +5.4674168 -4.2054305 -0.73696512 128.0 +11.111335 -8.6551208 -1.5443628 128.0 +11.053337 -8.7194433 -1.5436929 128.0 +10.994192 -8.7827597 -1.5429114 128.0 +10.940095 -8.8500538 -1.5429114 128.0 +10.904806 -8.9327564 -1.5457025 128.0 +10.823784 -8.9779291 -1.5419066 128.0 +2.8763311 -2.4161401 -0.38406357 128.0 +2.8220851 -2.4002686 -0.37825817 128.0 +2.8005266 -2.4117038 -0.37725338 128.0 +10.51255 -9.1644535 -1.5288445 128.0 +10.50306 -9.2702122 -1.5358779 128.0 +10.4445 -9.3331594 -1.5356547 128.0 +10.392195 -9.4017363 -1.5364362 128.0 +3.606837 -3.3039026 -0.51155913 128.0 +3.4822915 -3.2293518 -0.49559429 128.0 +3.4747283 -3.2622201 -0.49749222 128.0 +3.5209196 -3.3464582 -0.50776333 128.0 +3.4953067 -3.3631763 -0.50698179 128.0 +3.4767406 -3.3866398 -0.50731677 128.0 +3.4898617 -3.4413986 -0.51267558 128.0 +9.9000683 -9.8820801 -1.5335335 128.0 +8.0420551 -8.126667 -1.246501 128.0 +3.5141497 -3.5952992 -0.52685416 128.0 +3.4706237 -3.5946336 -0.52339327 128.0 +9.6291895 -10.095458 -1.5294027 128.0 +3.118222 -3.310034 -0.47293088 128.0 +2.8920364 -3.1079633 -0.43899161 128.0 +9.4020529 -10.227826 -1.5228158 128.0 +7.6315808 -8.4048929 -1.2374579 128.0 +7.4843183 -8.3450327 -1.2213814 128.0 +7.5390677 -8.5105562 -1.2393558 128.0 +2.5728447 -2.9409394 -0.40103319 128.0 +2.5885403 -2.9957678 -0.4068386 128.0 +2.5643034 -3.004792 -0.40583381 128.0 +8.9016943 -10.559798 -1.5136611 128.0 +8.8278313 -10.603528 -1.5120981 128.0 +7.3538814 -8.9442425 -1.2629124 128.0 +8.6939125 -10.707203 -1.5115399 128.0 +8.6292944 -10.761897 -1.5117632 128.0 +8.5612478 -10.812305 -1.5114282 128.0 +8.4867859 -10.854456 -1.5099769 128.0 +8.3884439 -10.865423 -1.5041715 128.0 +8.3023386 -10.891399 -1.5005989 128.0 +8.2126446 -10.911965 -1.4963566 128.0 +8.1052303 -10.907913 -1.4887649 128.0 +7.9787784 -10.876514 -1.477489 128.0 +7.9107256 -10.923656 -1.4772657 128.0 +7.794425 -10.903275 -1.4677761 128.0 +7.7090421 -10.924914 -1.4642036 128.0 +7.6282315 -10.95244 -1.4615241 128.0 +7.544559 -10.975291 -1.4582865 128.0 +7.49437 -11.04687 -1.4617474 128.0 +7.4082017 -11.065396 -1.4580632 128.0 +7.3341403 -11.101523 -1.4568352 128.0 +7.2116151 -11.063068 -1.445671 128.0 +7.1161809 -11.064485 -1.4399772 128.0 +7.0220671 -11.066826 -1.4345067 128.0 +6.9245024 -11.062534 -1.4282547 128.0 +6.8356094 -11.070992 -1.423789 128.0 +6.7375698 -11.063499 -1.4173137 128.0 +6.6557431 -11.081632 -1.4142994 128.0 +6.5926867 -11.130812 -1.4154159 128.0 +6.5022125 -11.133298 -1.4105035 128.0 +6.4179082 -11.145428 -1.406931 128.0 +6.2816935 -11.06534 -1.3915243 128.0 +6.1966934 -11.073324 -1.3876169 128.0 +6.1166325 -11.089384 -1.3848258 128.0 +6.0052824 -11.047256 -1.3746663 128.0 +1.3418064 -2.5055413 -0.28135258 128.0 +5.8882828 -11.156151 -1.3792437 128.0 +5.7784553 -11.112721 -1.3691959 128.0 +5.6770859 -11.083403 -1.361046 128.0 +1.1384612 -2.2573545 -0.24607359 128.0 +1.1303372 -2.275867 -0.24752493 128.0 +1.1298896 -2.3104317 -0.25098586 128.0 +5.3787961 -11.168355 -1.3546823 128.0 +1.0946404 -2.3097563 -0.24919957 128.0 +1.0821282 -2.3200314 -0.24964614 128.0 +1.0811419 -2.3555267 -0.25321871 128.0 +5.0249481 -11.124019 -1.3333586 128.0 +4.953773 -11.148285 -1.3325772 128.0 +4.8912449 -11.19213 -1.3342518 128.0 +4.82758 -11.2338 -1.3357031 128.0 +4.7376738 -11.213779 -1.3296745 128.0 +4.653151 -11.20501 -1.3250972 128.0 +4.5873151 -11.240711 -1.3259903 128.0 +4.5245447 -11.284327 -1.3278883 128.0 +4.4421091 -11.27859 -1.3238691 128.0 +4.3835769 -11.333439 -1.3272183 128.0 +4.318893 -11.373129 -1.3287814 128.0 +1.1739427 -3.1503222 -0.33974153 128.0 +4.170126 -11.401008 -1.3258786 128.0 +4.0658545 -11.330976 -1.3144912 128.0 +4.0120883 -11.400703 -1.31985 128.0 +1.1555973 -3.3500922 -0.36017209 128.0 +1.1340646 -3.3542957 -0.35983717 128.0 +3.7809269 -11.410364 -1.3124815 128.0 +1.0756353 -3.3150287 -0.35358518 128.0 +1.0606925 -3.3386135 -0.35559475 128.0 +1.0171624 -3.2710452 -0.34688666 128.0 +0.99273217 -3.2629645 -0.34521201 128.0 +0.97099113 -3.2632797 -0.34454215 128.0 +0.95094973 -3.269176 -0.34454215 128.0 +0.92924166 -3.2692144 -0.34387231 128.0 +0.91155815 -3.2834721 -0.34487709 128.0 +0.89607513 -3.3062675 -0.34688666 128.0 +3.0395522 -11.490086 -1.2972982 128.0 +2.9610484 -11.477729 -1.2937256 128.0 +2.8939598 -11.509173 -1.2952887 128.0 +2.8171387 -11.501618 -1.2923859 128.0 +1.9463761 -8.1634741 -0.90487522 128.0 +0.73716605 -3.179219 -0.32868895 128.0 +1.9883865 -8.8178225 -0.97755444 128.0 +2.5244553 -11.523608 -1.287362 128.0 +2.4419167 -11.483477 -1.2809983 128.0 +1.7293773 -8.3857641 -0.92396611 128.0 +1.6771115 -8.3923197 -0.92351949 128.0 +1.6287953 -8.4190388 -0.92541742 128.0 +2.1575346 -11.530177 -1.279882 128.0 +2.0816185 -11.51484 -1.2766443 128.0 +2.0146835 -11.548933 -1.2791005 128.0 +1.3760411 -8.1850185 -0.89449251 128.0 +1.8742375 -11.581615 -1.2801052 128.0 +1.3451548 -8.6490517 -0.94540143 128.0 +1.7199399 -11.523149 -1.2709506 128.0 +1.6563786 -11.583656 -1.2766443 128.0 +1.577865 -11.539449 -1.270504 128.0 +1.5038151 -11.524279 -1.267713 128.0 +1.4341782 -11.542165 -1.2687178 128.0 +1.3625143 -11.543839 -1.2679362 128.0 +1.2957439 -11.588523 -1.2720671 128.0 +1.2247181 -11.597243 -1.2721786 128.0 +1.1556007 -11.625306 -1.2745231 128.0 +1.0857236 -11.648009 -1.2763094 128.0 +1.0121638 -11.630692 -1.27363 128.0 +0.94198185 -11.651541 -1.2753047 128.0 +0.86950916 -11.644218 -1.2738533 128.0 +0.79906446 -11.664206 -1.275528 128.0 +0.72797418 -11.676824 -1.2764211 128.0 +0.65648013 -11.684048 -1.276756 128.0 +0.58268875 -11.646171 -1.2720671 128.0 +0.51130545 -11.651512 -1.2722903 128.0 +0.44152886 -11.700109 -1.2774259 128.0 +0.36809647 -11.650949 -1.2716204 128.0 +0.29799324 -11.707627 -1.2777607 128.0 +0.22622786 -11.71321 -1.2782073 128.0 +0.15453649 -11.728289 -1.2797704 128.0 +0.08264748 -11.739947 -1.2809983 128.0 +0.010579268 -11.706446 -1.2772026 128.0 +-0.06142595 -11.740077 -1.2809983 128.0 +-0.13339297 -11.733517 -1.2803285 128.0 +-0.20602828 -11.769241 -1.2844594 128.0 +-0.27948228 -11.820409 -1.2903764 128.0 +-0.35268536 -11.841318 -1.2929442 128.0 +-0.42398113 -11.801193 -1.2887018 128.0 +-0.49751085 -11.825176 -1.2917161 128.0 +-0.57182914 -11.858627 -1.2958468 128.0 +-0.64668435 -11.893595 -1.3002009 128.0 +-0.71922988 -11.88246 -1.2994194 128.0 +-0.78928375 -11.835186 -1.2946187 128.0 +-0.85741341 -11.76867 -1.287697 128.0 +-0.92976499 -11.765169 -1.2879202 128.0 +-1.0016842 -11.756272 -1.2875853 128.0 +-1.0741621 -11.753863 -1.2880319 128.0 +-1.1451045 -11.735183 -1.2866921 128.0 +-1.2106284 -11.665664 -1.2796587 128.0 +-1.2779492 -11.619492 -1.2753047 128.0 +-1.3598849 -11.703233 -1.2856874 128.0 +-1.4794741 -12.085279 -1.3298978 128.0 +-1.5516986 -12.061189 -1.3282231 128.0 +-1.6340429 -12.113484 -1.3352566 128.0 +-1.7072282 -12.095359 -1.3343635 128.0 +-1.7856135 -12.113166 -1.3376011 128.0 +-1.8650362 -12.135377 -1.3413969 128.0 +-1.9391485 -12.121742 -1.3411736 128.0 +-2.0089266 -12.082168 -1.3380476 128.0 +-2.0803201 -12.053946 -1.3362614 128.0 +-2.1691158 -12.124103 -1.3457509 128.0 +-2.24401 -12.113497 -1.3460859 128.0 +-2.3130596 -12.072171 -1.3429599 128.0 +-2.376477 -12.004135 -1.3368196 128.0 +-2.4759495 -12.1159 -1.3513331 128.0 +-2.5516791 -12.107286 -1.3521146 128.0 +-2.6273961 -12.0982 -1.3528961 128.0 +-2.7004957 -12.077002 -1.3523378 128.0 +-2.7736568 -12.056331 -1.3518913 128.0 +-2.8484957 -12.042953 -1.3523378 128.0 +-2.9263251 -12.041664 -1.3542358 128.0 +-3.0037646 -12.037945 -1.3559104 128.0 +-3.0829937 -12.040467 -1.3583666 128.0 +-3.1502531 -11.996333 -1.3554639 128.0 +-3.2124381 -11.934555 -1.3505516 128.0 +-3.2850785 -11.912704 -1.3503283 128.0 +-3.3710725 -11.938228 -1.3556871 128.0 +-3.4478471 -11.929729 -1.3571385 128.0 +-3.5170374 -11.895007 -1.3555756 128.0 +-3.5727029 -11.81613 -1.348877 128.0 +-3.6433775 -11.788289 -1.3482071 128.0 +-3.7282083 -11.805511 -1.3528961 128.0 +-3.8021004 -11.787143 -1.3534544 128.0 +-3.8895845 -11.809842 -1.3589247 128.0 +-3.9660912 -11.797998 -1.3603761 128.0 +-4.0277686 -11.742421 -1.356692 128.0 +-4.091867 -11.694974 -1.3540125 128.0 +-4.1655526 -11.675262 -1.3546823 128.0 +-4.2262435 -11.619598 -1.3511099 128.0 +-4.2535992 -11.475109 -1.3369312 128.0 +-4.3091836 -11.409747 -1.3322423 128.0 +-4.3737597 -11.36918 -1.3305676 128.0 +-4.4532237 -11.367111 -1.3335819 128.0 +-4.5273051 -11.35065 -1.3349217 128.0 +-4.5916328 -11.309766 -1.3333586 128.0 +-4.7083707 -11.396187 -1.347314 128.0 +-4.8070869 -11.435791 -1.3556871 128.0 +-1.5412173 -3.603698 -0.4023729 128.0 +-1.5561674 -3.5777698 -0.40036336 128.0 +-5.0420852 -11.40263 -1.3627206 128.0 +-5.0838432 -11.308937 -1.3550173 128.0 +-5.1494207 -11.269395 -1.3540125 128.0 +-1.5459871 -3.3284941 -0.37435067 128.0 +-1.563413 -3.3126543 -0.37356919 128.0 +-1.5815619 -3.2985184 -0.37301096 128.0 +-1.6069919 -3.2994738 -0.37435067 128.0 +-1.6439462 -3.3234007 -0.37859309 128.0 +-1.6848217 -3.3541019 -0.38372862 128.0 +-1.712593 -3.3578658 -0.38551491 128.0 +-1.7381893 -3.357002 -0.38674298 128.0 +-1.7656884 -3.3594689 -0.3884176 128.0 +-1.7914124 -3.358217 -0.38964567 128.0 +-4.7739029 -8.8199062 -1.0887502 128.0 +-6.2285471 -11.34086 -1.4156392 128.0 +-1.8447 -3.3099165 -0.38774776 128.0 +-1.8581284 -3.2864239 -0.38618475 128.0 +-1.8743042 -3.268064 -0.38529164 128.0 +-1.892323 -3.2530658 -0.38484505 128.0 +-1.9178011 -3.250809 -0.38607311 128.0 +-6.727447 -11.247198 -1.4343951 128.0 +-6.8303423 -11.261788 -1.4417634 128.0 +-6.90452 -11.228131 -1.4428798 128.0 +-6.9816957 -11.199047 -1.4446661 128.0 +-7.1033669 -11.240005 -1.4558303 128.0 +-7.2204413 -11.27152 -1.4658781 128.0 +-7.3765888 -11.361196 -1.4838526 128.0 +-7.5111632 -11.414509 -1.497138 128.0 +-7.5953946 -11.389703 -1.5000408 128.0 +-7.6551223 -11.328063 -1.4980311 128.0 +-7.7166262 -11.269399 -1.4964682 128.0 +-7.7805305 -11.21449 -1.4954634 128.0 +-7.8743386 -11.202311 -1.5003756 128.0 +-7.9584899 -11.17564 -1.5033901 128.0 +-8.0402842 -11.145134 -1.5059578 128.0 +-8.103241 -11.088368 -1.504953 128.0 +-8.1498413 -11.009685 -1.5009339 128.0 +-8.2184343 -10.961061 -1.5011572 128.0 +-8.3065701 -10.938128 -1.5050646 128.0 +-8.3468723 -10.852294 -1.5001523 128.0 +-8.414525 -10.802442 -1.5003756 128.0 +-8.4781876 -10.747487 -1.4999291 128.0 +-8.5408716 -10.691381 -1.4993709 128.0 +-8.6150618 -10.64959 -1.5009339 128.0 +-8.6827631 -10.599605 -1.5013804 128.0 +-8.7495413 -10.548423 -1.5017154 128.0 +-8.8249645 -10.507475 -1.5036134 128.0 +-8.8950653 -10.459942 -1.504618 128.0 +-8.9545393 -10.399894 -1.5038366 128.0 +-9.0168781 -10.343256 -1.5036134 128.0 +-9.0999002 -10.310087 -1.5069625 128.0 +-9.1762333 -10.268878 -1.5091954 128.0 +-9.2544022 -10.22933 -1.5117632 128.0 +-9.3371296 -10.194339 -1.5151125 128.0 +-9.4022083 -10.13977 -1.5155591 128.0 +-9.4669676 -10.084786 -1.5160056 128.0 +-9.5430441 -10.041636 -1.5183501 128.0 +-9.6217031 -10.000795 -1.5211412 128.0 +-9.6849661 -9.9437056 -1.521476 128.0 +-9.7667274 -9.9053211 -1.5248253 128.0 +-9.8350439 -9.8529444 -1.5260534 128.0 +-9.90026 -9.7973051 -1.526835 128.0 +-9.9708471 -9.7467937 -1.5285095 128.0 +-10.046906 -9.7013073 -1.5310774 128.0 +-10.114873 -9.6477089 -1.5324171 128.0 +-10.177496 -9.588871 -1.5329752 128.0 +-10.244143 -9.5336905 -1.5342033 128.0 +-9.8795938 -9.0819187 -1.469674 128.0 +-9.899085 -8.9883928 -1.4642036 128.0 +-9.9192801 -8.8962984 -1.4589564 128.0 +-9.9535971 -8.8174753 -1.455942 128.0 +-9.9147778 -8.6750898 -1.4420984 128.0 +-9.9106779 -8.5647058 -1.4336135 128.0 +-9.9539738 -8.4959917 -1.4322739 128.0 +-10.002118 -8.4315529 -1.4317156 128.0 +-9.976531 -8.3058023 -1.4204397 128.0 +-9.9720402 -8.198988 -1.4124014 128.0 +-10.05919 -8.1677151 -1.4177604 128.0 +-10.177341 -8.1605473 -1.4275849 128.0 +-10.318373 -8.170125 -1.440647 128.0 +-10.350305 -8.0925808 -1.4380792 128.0 +-10.409204 -8.0362072 -1.4394189 128.0 +-10.527073 -8.024601 -1.4491318 128.0 +-10.676154 -8.0351553 -1.4631988 128.0 +-10.773113 -8.0050602 -1.4698973 128.0 +-11.591231 -8.5031128 -1.5770739 128.0 +-11.644796 -8.4329958 -1.5772973 128.0 +-11.715723 -8.3752565 -1.5799767 128.0 +-11.790439 -8.319829 -1.5832143 128.0 +-11.855128 -8.2569828 -1.5851122 128.0 +-11.922766 -8.1959076 -1.5874567 128.0 +-11.999969 -8.1410084 -1.591141 128.0 +-12.069512 -8.0804939 -1.5938203 128.0 +-12.138765 -8.0194321 -1.5964998 128.0 +-12.20689 -7.9572806 -1.5990676 128.0 +-12.274709 -7.8945951 -1.6016353 128.0 +-12.319562 -7.8170009 -1.6011888 128.0 +-12.384141 -7.7518077 -1.6034216 128.0 +-12.42978 -7.6746297 -1.6031983 128.0 +-12.486822 -7.6044207 -1.604538 128.0 +-12.565619 -7.5471039 -1.6087804 128.0 +-12.615965 -7.472393 -1.6093386 128.0 +-12.686462 -7.4093766 -1.6125762 128.0 +-12.794551 -7.3675971 -1.6207261 128.0 +-6.7132907 -3.8108923 -0.82929337 128.0 +-12.903945 -7.2211957 -1.6232939 128.0 +-12.94627 -7.1409225 -1.6230706 128.0 +-12.994207 -7.0637245 -1.6236289 128.0 +-13.045189 -6.9880838 -1.6246337 128.0 +-13.101004 -6.9148669 -1.6263083 128.0 +-13.164346 -6.8453541 -1.6289877 128.0 +-7.3757572 -3.7778227 -0.89304113 128.0 +-6.9418797 -3.5019639 -0.8355453 128.0 +-6.948998 -3.4522283 -0.83375907 128.0 +-6.9575524 -3.4034111 -0.83219606 128.0 +-6.9827809 -3.3628125 -0.83275425 128.0 +-7.0293236 -3.3322496 -0.83599192 128.0 +-6.6930261 -3.122654 -0.79178154 128.0 +-6.7138662 -3.0823567 -0.79200482 128.0 +-13.679688 -6.1794972 -1.6484134 128.0 +-13.731876 -6.1019011 -1.6501998 128.0 +-13.780896 -6.0227027 -1.6516511 128.0 +-13.833112 -5.9447021 -1.653549 128.0 +-7.3563228 -3.1077991 -0.85921353 128.0 +-7.4183874 -3.0805171 -0.86446071 128.0 +-14.032198 -5.726624 -1.6647133 128.0 +-14.064304 -5.6393065 -1.6643783 128.0 +-14.09217 -5.550354 -1.6635969 128.0 +-14.135229 -5.4673667 -1.6647133 128.0 +-14.188948 -5.3882937 -1.6671693 128.0 +-14.255264 -5.3136268 -1.6711885 128.0 +-14.33333 -5.2427864 -1.676659 128.0 +-14.357746 -5.1520548 -1.6757659 128.0 +-14.359093 -5.0533028 -1.6721933 128.0 +-14.370101 -4.9582949 -1.6698488 128.0 +-14.378603 -4.8627052 -1.667281 128.0 +-14.40817 -4.7743883 -1.667281 128.0 +-14.453261 -4.6911073 -1.669179 128.0 +-14.665504 -4.6607308 -1.6908376 128.0 +-14.755504 -4.5898442 -1.6980944 128.0 +-14.81286 -4.5081902 -1.7015553 128.0 +-14.882151 -4.4296904 -1.7064675 128.0 +-14.868021 -4.3263516 -1.7016668 128.0 +-14.818775 -4.2135687 -1.6928471 128.0 +-14.770622 -4.1020856 -1.6842507 128.0 +-14.773455 -4.0053959 -1.6816829 128.0 +-12.77069 -3.3783658 -1.4461175 128.0 +-12.781557 -3.2974598 -1.445001 128.0 +-12.821788 -3.2240613 -1.4473455 128.0 +-14.65013 -3.5884302 -1.6565634 128.0 +-14.653506 -3.494091 -1.6544422 128.0 +-12.299105 -2.8529816 -1.3804717 128.0 +-14.64875 -3.3035121 -1.6490834 128.0 +-14.660007 -3.2116528 -1.6480786 128.0 +-14.681382 -3.1220536 -1.6483018 128.0 +-13.384418 -2.7604833 -1.4973613 128.0 +-14.89107 -2.9761324 -1.6680626 128.0 +-14.942224 -2.8911257 -1.6718583 128.0 +-14.981172 -2.8034093 -1.6743145 128.0 +-15.026449 -2.7165616 -1.6775521 128.0 +-15.078077 -2.6304591 -1.6815712 128.0 +-15.251712 -2.5644252 -1.6995456 128.0 +-15.33779 -2.4822268 -1.7075839 128.0 +-15.521626 -2.4143443 -1.7267864 128.0 +-15.586273 -2.3265436 -1.7324802 128.0 +-15.648458 -2.2377586 -1.7379507 128.0 +-15.681586 -2.1443925 -1.7401835 128.0 +-15.558465 -2.0303824 -1.7247769 128.0 +-15.861547 -1.9710375 -1.7577114 128.0 +-16.361855 -1.9313519 -1.8129743 128.0 +-17.320498 -1.9368519 -1.9200394 128.0 +-17.513893 -1.849748 -1.9405816 128.0 +-17.520958 -1.7418567 -1.940135 128.0 +-17.565947 -1.6375465 -1.9440424 128.0 +-17.564774 -1.528785 -1.9428145 128.0 +-17.564909 -1.4202597 -1.9418097 128.0 +-17.683292 -1.3206745 -1.9542019 128.0 +-17.668261 -1.2105842 -1.9516342 128.0 +-17.700151 -1.1036977 -1.9544252 128.0 +-17.723457 -0.99601907 -1.9563231 128.0 +-17.648842 -0.88322616 -1.94728 128.0 +-17.662865 -0.7753107 -1.9482849 128.0 +-17.652393 -0.66635615 -1.9466102 128.0 +-17.652178 -0.5579049 -1.9461637 128.0 +-15.757541 1.1615255 -1.9354826 128.0 +-15.742205 1.2575573 -1.934491 128.0 +-15.732215 1.3539556 -1.9342432 128.0 +-15.719659 1.4500964 -1.9337474 128.0 +-15.701577 1.5456475 -1.9326319 128.0 +-15.678968 1.6406181 -1.9310205 128.0 +-15.65184 1.7349318 -1.9289134 128.0 +-15.631044 1.8297826 -1.9276739 128.0 +-15.580131 1.9207989 -1.922716 128.0 +-15.567067 2.0162332 -1.922592 128.0 +-15.595699 2.1173227 -1.9277979 128.0 +-15.583397 2.2131157 -1.9279218 128.0 +-15.568542 2.3085463 -1.9277979 128.0 +-15.552123 2.4037266 -1.92755 128.0 +-15.531203 2.4981613 -1.9268063 128.0 +-15.505795 2.5917754 -1.9255668 128.0 +-15.480802 2.6853414 -1.9244512 128.0 +-15.452314 2.7781713 -1.9229639 128.0 +-15.429123 2.8718426 -1.9222202 128.0 +-15.414135 2.9670229 -1.922592 128.0 +-15.391747 3.0607719 -1.9220963 128.0 +-15.363928 3.1533601 -1.9209807 128.0 +-15.33167 3.2449 -1.9193695 128.0 +-15.293051 3.3348942 -1.9170144 128.0 +-15.251 3.4238842 -1.9142876 128.0 +-15.211335 3.513154 -1.9119326 128.0 +-15.191423 3.6068816 -1.9121804 128.0 +-15.229739 3.7148452 -1.9199891 128.0 +-15.157568 3.7959256 -1.9136678 128.0 +-15.092667 3.878237 -1.9083381 128.0 +-15.083939 3.9748175 -1.9103212 128.0 +-15.023822 4.0577202 -1.9057351 128.0 +-15.036895 4.1604156 -1.910693 128.0 +-14.988171 4.246109 -1.9077183 128.0 +-14.936104 4.3305321 -1.9043717 128.0 +-14.948255 4.4336681 -1.9094536 128.0 +-14.940709 4.5313549 -1.9120564 128.0 +-14.893668 4.6170664 -1.9095775 128.0 +-14.860329 4.7068667 -1.9089578 128.0 +-14.818894 4.7939882 -1.9073465 128.0 +-14.778836 4.8814006 -1.9059831 128.0 +-14.747666 4.971673 -1.9058591 128.0 +-14.719698 5.0630379 -1.9062309 128.0 +-14.693036 5.1549039 -1.9068507 128.0 +-14.652721 5.2419529 -1.9057351 128.0 +-14.617485 5.3307414 -1.9053633 128.0 +-14.591942 5.4230981 -1.9063549 128.0 +-14.57695 5.5195599 -1.9088339 128.0 +-14.553918 5.613184 -1.9103212 128.0 +-14.544139 5.7121754 -1.9136678 128.0 +-14.505131 5.7998352 -1.913172 128.0 +-14.501437 5.9018221 -1.9175102 128.0 +-14.480536 5.9971457 -1.9196173 128.0 +-14.469984 6.0970597 -1.9232118 128.0 +-14.466045 6.2001967 -1.9277979 128.0 +-14.440463 6.294394 -1.9295331 128.0 +-14.439671 6.3997703 -1.934739 128.0 +-14.403749 6.4898806 -1.9352348 128.0 +-14.3817 6.5864029 -1.9377137 128.0 +-14.35271 6.6799674 -1.939325 128.0 +-14.322217 6.7729998 -1.9408123 128.0 +-14.288438 6.8646197 -1.9419279 128.0 +-14.257641 6.9578209 -1.9435393 128.0 +-14.260911 7.0680904 -1.9499846 128.0 +-14.235887 7.1648302 -1.9525875 128.0 +-14.204909 7.2588191 -1.9544467 128.0 +-14.171553 7.3517828 -1.956058 128.0 +-14.139346 7.4455357 -1.9579172 128.0 +-14.110022 7.5410409 -1.9602722 128.0 +-14.077441 7.6350465 -1.9622554 128.0 +-14.048583 7.7313285 -1.9648583 128.0 +-14.022539 7.8294787 -1.967957 128.0 +-14.015676 7.9388494 -1.9739065 128.0 +-13.991651 8.0390368 -1.9775009 128.0 +-13.970351 8.1412258 -1.9815912 128.0 +-13.925261 8.2298222 -1.982335 128.0 +-13.898332 8.3293953 -1.9858055 128.0 +-13.863921 8.4248247 -1.9882845 128.0 +-13.832241 8.5222273 -1.9912592 128.0 +-13.795679 8.6169291 -1.9936142 128.0 +-13.76099 8.7130947 -1.996341 128.0 +-13.723134 8.8075514 -1.9986961 128.0 +-13.697113 8.9099874 -2.0029104 128.0 +-13.662066 9.0069733 -2.0058851 128.0 +-13.627995 9.1049662 -2.0091076 128.0 +-13.585018 9.1973162 -2.0110908 128.0 +-13.538965 9.2877979 -2.0127022 128.0 +-13.495572 9.3803253 -2.0148094 128.0 +-13.447497 9.4698124 -2.0162966 128.0 +-13.41337 9.569437 -2.020015 128.0 +-13.372093 9.6643486 -2.022742 128.0 +-13.330956 9.7596989 -2.0255928 128.0 +-13.291543 9.8566818 -2.0288153 128.0 +-13.237954 9.9434156 -2.0299308 128.0 +-13.198014 10.040678 -2.0332775 128.0 +-13.157379 10.137824 -2.0366242 128.0 +-13.107443 10.228133 -2.0386074 128.0 +-13.054558 10.316365 -2.0402186 128.0 +-12.98404 10.390692 -2.039103 128.0 +-12.935457 10.482661 -2.0415821 128.0 +-12.877796 10.5675 -2.0426974 128.0 +-12.830266 10.660905 -2.0455484 128.0 +-12.790424 10.761151 -2.0497625 128.0 +-12.757389 10.867744 -2.0552163 128.0 +-12.723525 10.974337 -2.0606699 128.0 +-12.679864 11.073088 -2.0646362 128.0 +-12.633983 11.170402 -2.0683548 128.0 +-12.57999 11.260949 -2.0708337 128.0 +-12.526097 11.351921 -2.0734365 128.0 +-12.465712 11.437287 -2.075048 128.0 +-12.410566 11.527743 -2.0776508 128.0 +-12.348996 11.612514 -2.0792623 128.0 +-12.289009 11.699015 -2.0812454 128.0 +-12.228425 11.785216 -2.0832286 128.0 +-12.167245 11.871115 -2.0852118 128.0 +-12.104059 11.955311 -2.086947 128.0 +-12.044508 12.043388 -2.0894258 128.0 +-11.987818 12.134715 -2.0925245 128.0 +-11.929073 12.224378 -2.0953753 128.0 +-11.862793 12.306631 -2.0969868 128.0 +-11.813742 12.407216 -2.1018207 128.0 +-11.746907 12.489591 -2.1035559 128.0 +-11.676805 12.568704 -2.1047955 128.0 +-11.606844 12.648157 -2.1061587 128.0 +-11.570999 12.765458 -2.1139677 128.0 +-11.531503 12.879836 -2.1212804 128.0 +-11.418735 12.912437 -2.1149592 128.0 +-11.337332 12.980017 -2.1145873 128.0 +-11.273029 13.067369 -2.1175621 128.0 +-11.143088 13.078132 -2.1080182 128.0 +-11.001942 13.074127 -2.0962429 128.0 +-10.849851 13.055147 -2.082237 128.0 +-10.733031 13.076985 -2.075048 128.0 +-10.570122 13.040835 -2.0586867 128.0 +-10.433483 13.034946 -2.0474076 128.0 +-10.301624 13.033324 -2.0369959 128.0 +-10.188494 13.054046 -2.0303028 128.0 +-10.056117 13.048718 -2.0196433 128.0 +-9.9326038 13.053316 -2.0107191 128.0 +-9.8159685 13.065619 -2.0031581 128.0 +-9.6995583 13.076984 -1.9955974 128.0 +-9.5528975 13.045781 -1.9815912 128.0 +-9.4436073 13.06394 -1.9753939 128.0 +-9.3321495 13.078019 -1.9687006 128.0 +-9.219162 13.088791 -1.9616356 128.0 +-9.0752449 13.053856 -1.9477534 128.0 +-8.9584885 13.056109 -1.9396969 128.0 +-8.8492804 13.068105 -1.9332516 128.0 +-8.7408152 13.080079 -1.9269302 128.0 +-8.6227055 13.076303 -1.9183779 128.0 +-8.5071363 13.0749 -1.9103212 128.0 +-8.3945913 13.076748 -1.9028844 128.0 +-8.2956161 13.098667 -1.8985462 128.0 +-8.1877518 13.105558 -1.8921009 128.0 +-8.0749102 13.103173 -1.8844161 128.0 +-7.9639544 13.102443 -1.8771032 128.0 +-7.8737168 13.134891 -1.8747482 128.0 +-7.8182192 13.225668 -1.8809456 128.0 +-7.7963777 13.375412 -1.8956953 128.0 +-7.7027903 13.403209 -1.8928446 128.0 +-7.6008415 13.415685 -1.8878866 128.0 +-7.4970956 13.423949 -1.8824329 128.0 +-7.3930564 13.430578 -1.8768553 128.0 +-7.2953696 13.447777 -1.8728889 128.0 +-7.192605 13.454657 -1.8675592 128.0 +-7.0955801 13.471319 -1.8637168 128.0 +-7.0009069 13.491702 -1.8604941 128.0 +-6.9017358 13.502595 -1.856032 128.0 +-6.7986798 13.504804 -1.8504544 128.0 +-6.6998234 13.514259 -1.8459923 128.0 +-6.6045895 13.530145 -1.8425218 128.0 +-6.5167189 13.560576 -1.8411583 128.0 +-6.4312687 13.595822 -1.8405386 128.0 +-6.3351636 13.608039 -1.8368201 128.0 +-6.2498941 13.643046 -1.8363243 128.0 +-6.1444583 13.63319 -1.8297551 128.0 +-6.0586805 13.6661 -1.8291354 128.0 +-5.9743166 13.702107 -1.8290114 128.0 +-5.8854384 13.727563 -1.8275241 128.0 +-5.8003259 13.761588 -1.8272761 128.0 +-5.7100816 13.783168 -1.8254169 128.0 +-5.6119351 13.784858 -1.8209548 128.0 +-5.5165629 13.792314 -1.8173603 128.0 +-5.4274778 13.814819 -1.8158729 128.0 +-5.3401098 13.841381 -1.8150053 128.0 +-5.2536745 13.870175 -1.8145095 128.0 +-5.1622467 13.885407 -1.8122785 128.0 +-5.0725303 13.904702 -1.8106672 128.0 +-4.9754176 13.902864 -1.806329 128.0 +-4.885747 13.920959 -1.8047177 128.0 +-4.7924905 13.928156 -1.8017429 128.0 +-4.7050366 13.951658 -1.8009992 128.0 +-4.6159186 13.969901 -1.7996358 128.0 +-4.5215616 13.971526 -1.7961652 128.0 +-4.4270587 13.971574 -1.7925707 128.0 +-4.3200903 13.930234 -1.7836465 128.0 +-4.2161012 13.895707 -1.7757138 128.0 +-4.12568 13.904192 -1.7734828 128.0 +-4.035037 13.911137 -1.7711278 128.0 +-3.9417593 13.907947 -1.7675333 128.0 +-3.8531721 13.920395 -1.7660459 128.0 +-3.7635453 13.928449 -1.7640628 128.0 +-3.669919 13.920574 -1.7600964 128.0 +-3.5777662 13.916882 -1.7567499 128.0 +-3.49086 13.932797 -1.7560061 128.0 +-3.4060097 13.956846 -1.7563779 128.0 +-3.3223712 13.986172 -1.7574935 128.0 +-3.2378314 14.012094 -1.7582372 128.0 +-3.1591849 14.064616 -1.7624514 128.0 +-3.081496 14.123486 -1.7675333 128.0 +-3.0058744 14.19455 -1.7742264 128.0 +-2.9354825 14.294375 -1.784638 128.0 +-2.8690107 14.419173 -1.7982724 128.0 +-2.7891114 14.481328 -1.8039739 128.0 +-2.7023826 14.509875 -1.8054613 128.0 +-2.6099639 14.507627 -1.8031063 128.0 +-2.5169964 14.500882 -1.8002555 128.0 +-2.4204466 14.471033 -1.7945539 128.0 +-2.330663 14.479733 -1.7938102 128.0 +-2.2401054 14.482975 -1.7924469 128.0 +-2.1491594 14.482705 -1.7907115 128.0 +-2.0598359 14.492673 -1.7903397 128.0 +-1.9702042 14.500122 -1.7897199 128.0 +-1.8813236 14.512922 -1.7898439 128.0 +-1.7915099 14.518284 -1.7891002 128.0 +-1.7055094 14.555614 -1.7924469 128.0 +-1.6187901 14.589474 -1.7954216 128.0 +-1.5281041 14.588276 -1.7940581 128.0 +-1.437591 14.587502 -1.7928187 128.0 +-1.3537098 14.65731 -1.8005034 128.0 +-1.2686002 14.721693 -1.8075684 128.0 +-1.1797476 14.747993 -1.8099234 128.0 +-1.0882118 14.7411 -1.8081882 128.0 +-0.99667114 14.731659 -1.806205 128.0 +-0.9057132 14.728583 -1.8050895 128.0 +-0.81417352 14.713058 -1.8024865 128.0 +-0.72271258 14.69399 -1.7995118 128.0 +-0.63300681 14.709052 -1.8008753 128.0 +-0.54336238 14.729517 -1.8029823 128.0 +-0.45288226 14.729598 -1.8026105 128.0 +-0.36220264 14.720196 -1.8011231 128.0 +-0.27110818 14.680472 -1.7959174 128.0 +-0.18091601 14.67293 -1.7948018 128.0 +-0.091008604 14.694601 -1.7974048 128.0 +-0.00084140874 14.74549 -1.8037261 128.0 +0.089916304 14.790862 -1.8094276 128.0 +0.18069403 14.792016 -1.8096756 128.0 +0.27116016 14.774755 -1.8076924 128.0 +0.3613725 14.754957 -1.8054613 128.0 +0.451078 14.725683 -1.8021147 128.0 +0.54054749 14.698839 -1.79914 128.0 +0.63055718 14.69128 -1.7986442 128.0 +0.72049451 14.68317 -1.7981484 128.0 +0.81161618 14.697298 -1.8005034 128.0 +0.90287751 14.709868 -1.8027345 128.0 +0.9924491 14.694151 -1.801495 128.0 +1.0798904 14.65117 -1.796909 128.0 +1.1680279 14.622507 -1.7941821 128.0 +1.2559396 14.594304 -1.7915791 128.0 +1.3439143 14.569526 -1.7894721 128.0 +1.440582 14.635068 -1.7987682 128.0 +1.5312841 14.634835 -1.7998837 128.0 +1.6305702 14.710967 -1.8106672 128.0 +1.725422 14.740108 -1.8156251 128.0 +1.8188703 14.753863 -1.8187238 128.0 +1.9098742 14.746362 -1.8192196 128.0 +1.9999195 14.731416 -1.8188477 128.0 +2.0894346 14.712973 -1.818104 128.0 +2.1773424 14.68417 -1.8161209 128.0 +2.2622461 14.637192 -1.8119066 128.0 +2.3405068 14.551518 -1.8028585 128.0 +2.4096186 14.416504 -1.7876128 128.0 +2.4878514 14.342787 -1.7801759 128.0 +2.5601764 14.240333 -1.7691447 128.0 +2.6273422 14.116073 -1.7553864 128.0 +2.7142825 14.101635 -1.7556343 128.0 +2.8011446 14.086661 -1.7558821 128.0 +2.887526 14.069208 -1.7558821 128.0 +2.9768817 14.065787 -1.7577415 128.0 +3.0631318 14.047257 -1.7577415 128.0 +3.1503537 14.033038 -1.7583611 128.0 +3.2370696 14.016345 -1.758733 128.0 +3.3264508 14.0107 -1.7605922 128.0 +3.4212945 14.026658 -1.7653022 128.0 +3.5138063 14.03139 -1.7686489 128.0 +3.4330907 13.360858 -1.684984 128.0 +3.5142479 13.336662 -1.6846122 128.0 +3.7924464 14.041928 -1.7786885 128.0 +3.8711236 13.991616 -1.775218 128.0 +3.9547374 13.959963 -1.7742264 128.0 +4.0491643 13.965931 -1.7781928 128.0 +4.1313944 13.929407 -1.7767054 128.0 +4.2153454 13.899047 -1.7760857 128.0 +4.3023124 13.878608 -1.7768294 128.0 +4.3822942 13.835867 -1.7747222 128.0 +4.4649687 13.802108 -1.7738546 128.0 +4.5582886 13.800834 -1.7773252 128.0 +4.6460538 13.782007 -1.7785647 128.0 +4.7366648 13.771068 -1.7809197 128.0 +4.8260016 13.75579 -1.7827789 128.0 +4.9139924 13.736197 -1.7841423 128.0 +4.9992037 13.708582 -1.7845142 128.0 +5.0897932 13.695322 -1.7868692 128.0 +5.1839223 13.690744 -1.7904637 128.0 +5.273901 13.674417 -1.7925707 128.0 +5.3704047 13.674126 -1.796909 128.0 +5.4648924 13.667634 -1.8005034 128.0 +5.5613723 13.665093 -1.8047177 128.0 +5.6470141 13.635296 -1.8053374 128.0 +5.7348113 13.610448 -1.8067008 128.0 +5.8205614 13.580476 -1.8074445 128.0 +5.904573 13.546325 -1.8076924 128.0 +5.9924064 13.520726 -1.8091798 128.0 +6.0874858 13.510843 -1.8128982 128.0 +6.1789503 13.492182 -1.8155011 128.0 +6.2679019 13.467508 -1.8173603 128.0 +6.3631473 13.455706 -1.8210788 128.0 +6.459343 13.445029 -1.8250451 128.0 +6.5517297 13.425653 -1.8278959 128.0 +6.6419172 13.401202 -1.830127 128.0 +6.7374053 13.386786 -1.8338454 128.0 +6.8261924 13.358447 -1.8357046 128.0 +6.9199119 13.339211 -1.8389273 128.0 +7.015964 13.323717 -1.8427696 128.0 +7.1041336 13.292668 -1.844505 128.0 +7.1983371 13.272378 -1.8478515 128.0 +7.2853808 13.238392 -1.8493389 128.0 +7.3751817 13.209035 -1.8515699 128.0 +7.4580483 13.166986 -1.8520657 128.0 +7.5065627 13.065054 -1.8440092 128.0 +7.6080732 13.055613 -1.8493389 128.0 +7.6991458 13.027477 -1.8520657 128.0 +7.8080153 13.028504 -1.8591307 128.0 +7.9115167 13.019356 -1.8648324 128.0 +8.0167608 13.011961 -1.8709058 128.0 +8.1316738 13.018911 -1.8792104 128.0 +8.2347622 13.005657 -1.8846641 128.0 +8.333169 12.984112 -1.8890022 128.0 +9.0723286 13.946638 -2.0400946 128.0 +9.1615562 13.896507 -2.0409622 128.0 +9.2554722 13.853232 -2.0429454 128.0 +9.3503141 13.810971 -2.0451765 128.0 +9.4438629 13.76643 -2.0471597 128.0 +9.5372171 13.72126 -2.0491428 128.0 +9.630372 13.675464 -2.051126 128.0 +9.7215939 13.626616 -2.0527372 128.0 +9.8085098 13.571534 -2.0534811 128.0 +9.8974609 13.5191 -2.0547204 128.0 +9.9961863 13.479635 -2.0580671 128.0 +10.098376 13.444227 -2.0621574 128.0 +10.199905 13.407282 -2.0661237 128.0 +10.294699 13.36095 -2.0687265 128.0 +10.39297 13.318651 -2.0720732 128.0 +10.484341 13.267087 -2.0740564 128.0 +10.572989 13.211802 -2.0755436 128.0 +10.666352 13.162097 -2.0780227 128.0 +10.767057 13.120947 -2.081989 128.0 +10.874634 13.08745 -2.0873187 128.0 +10.982843 13.053885 -2.0927725 128.0 +11.087188 13.014953 -2.0974824 128.0 +11.184338 12.966965 -2.1008291 128.0 +11.290454 12.928737 -2.105911 128.0 +11.373514 12.863676 -2.1066546 128.0 +11.382733 12.716022 -2.0936401 128.0 +11.330596 12.50257 -2.0694702 128.0 +11.410452 12.436467 -2.0700901 128.0 +11.481143 12.360404 -2.0690985 128.0 +11.546571 12.278882 -2.0672393 128.0 +11.60938 12.194866 -2.0650082 128.0 +11.667459 12.106256 -2.0620334 128.0 +11.721426 12.013843 -2.058439 128.0 +11.783763 11.930401 -2.0564559 128.0 +11.844114 11.845243 -2.0542247 128.0 +11.891158 11.747242 -2.0497625 128.0 +11.948099 11.659506 -2.0471597 128.0 +12.010842 11.577711 -2.0456722 128.0 +12.070157 11.492848 -2.043689 128.0 +12.129605 11.408374 -2.0418298 128.0 +12.184837 11.320227 -2.039351 128.0 +12.234326 11.227136 -2.0360043 128.0 +12.283133 11.133864 -2.0326579 128.0 +12.32608 11.035784 -2.0284436 128.0 +12.373491 10.942198 -2.0250969 128.0 +12.42545 10.853015 -2.0226181 128.0 +12.477533 10.764256 -2.020263 128.0 +12.530506 10.676553 -2.0181558 128.0 +12.582113 10.587967 -2.0159247 128.0 +12.630816 10.497248 -2.0133219 128.0 +12.677345 10.40507 -2.0104711 128.0 +12.710886 10.302722 -2.0056372 128.0 +12.763017 10.215855 -2.003902 128.0 +12.816117 10.129967 -2.0024145 128.0 +12.871774 10.046254 -2.0014229 128.0 +12.917454 9.9549723 -1.9989439 128.0 +12.961709 9.8629074 -1.996341 128.0 +13.002942 9.7688875 -1.9933662 128.0 +13.045103 9.6759148 -1.9906394 128.0 +13.073003 9.5728283 -1.9858055 128.0 +13.10013 9.4697647 -1.9809715 128.0 +13.147488 9.3817129 -1.9793602 128.0 +13.160185 9.2694407 -1.972543 128.0 +13.192369 9.171526 -1.9688246 128.0 +13.254943 9.0948973 -1.9698162 128.0 +13.303925 9.0089445 -1.9688246 128.0 +13.33915 8.9139137 -1.9658499 128.0 +13.36957 8.8160582 -1.9622554 128.0 +13.401786 8.7197895 -1.9590328 128.0 +13.433326 8.6234579 -1.9558101 128.0 +13.470895 8.5313148 -1.9535791 128.0 +13.512048 8.4416647 -1.9519677 128.0 +13.550919 8.3507891 -1.9501085 128.0 +13.592575 8.261817 -1.948745 128.0 +13.619181 8.1639748 -1.9452745 128.0 +13.643391 8.0651093 -1.9415561 128.0 +13.662614 7.9637556 -1.937218 128.0 +13.687131 7.8659315 -1.9337474 128.0 +13.718734 7.7725081 -1.9313923 128.0 +13.754038 7.6814122 -1.9296571 128.0 +13.783525 7.5873055 -1.9271781 128.0 +13.808886 7.4912343 -1.9242034 128.0 +13.837089 7.3970089 -1.9217244 128.0 +13.852364 7.2962461 -1.9175102 128.0 +13.89511 7.2101984 -1.9172623 128.0 +13.925836 7.1180305 -1.9154031 128.0 +13.935568 7.0154967 -1.910693 128.0 +13.954348 6.9179592 -1.9073465 128.0 +13.983156 6.8256783 -1.9054873 128.0 +14.007781 6.731586 -1.9031322 128.0 +14.036263 6.6395698 -1.901397 128.0 +14.065043 6.5478764 -1.8997856 128.0 +14.091423 6.4552536 -1.8979264 128.0 +14.118101 6.3629618 -1.8961911 128.0 +14.141456 6.2693791 -1.8940841 128.0 +14.166014 6.1765432 -1.8922248 128.0 +14.180844 6.0797324 -1.8891262 128.0 +14.178562 5.9760365 -1.8837963 128.0 +14.194795 5.8805723 -1.8810695 128.0 +14.221419 5.7896233 -1.87983 128.0 +14.207844 5.6827264 -1.8732609 128.0 +14.236903 5.5932651 -1.8725171 128.0 +14.259846 5.5015187 -1.8710297 128.0 +14.272918 5.4061871 -1.8683029 128.0 +14.289079 5.3122859 -1.8660718 128.0 +14.318609 5.2234898 -1.8657 128.0 +14.35039 5.1355338 -1.8657 128.0 +14.390058 5.0503416 -1.8668156 128.0 +14.427343 4.9642105 -1.8676832 128.0 +14.480099 4.8832006 -1.8706579 128.0 +14.516384 4.7964392 -1.8715255 128.0 +14.544598 4.7069726 -1.8714015 128.0 +14.566584 4.6155424 -1.8705339 128.0 +14.607899 4.5301905 -1.8722693 128.0 +14.616429 4.4347124 -1.8697903 128.0 +14.65478 4.3483305 -1.8712777 128.0 +14.704059 4.2649612 -1.8742524 128.0 +14.712766 4.1697893 -1.8720213 128.0 +14.666348 4.0595875 -1.8627253 128.0 +14.768576 3.9904797 -1.8727651 128.0 +14.843637 3.9131889 -1.8793342 128.0 +14.865447 3.8215425 -1.8790864 128.0 +14.885728 3.7295346 -1.8787146 128.0 +14.925684 3.6423604 -1.8809456 128.0 +14.960303 3.55369 -1.8825569 128.0 +14.975059 3.4602652 -1.8816893 128.0 +14.98439 3.365706 -1.8802019 128.0 +15.032875 3.2798321 -1.8837963 128.0 +15.06825 3.1908183 -1.8857795 128.0 +15.088516 3.0985007 -1.8859035 128.0 +15.113084 3.0070224 -1.8866472 128.0 +15.136122 2.9151716 -1.8872669 128.0 +15.166406 2.824604 -1.8888782 128.0 +15.194195 2.7334235 -1.8902416 128.0 +15.215569 2.6409903 -1.8908614 128.0 +15.22953 2.5472522 -1.8906136 128.0 +15.25369 2.4551761 -1.891729 128.0 +15.282197 2.3636575 -1.8934643 128.0 +15.30819 2.27159 -1.8949517 128.0 +15.330683 2.178874 -1.8960673 128.0 +15.346713 2.0851662 -1.8964391 128.0 +15.365123 1.9917263 -1.8971827 128.0 +15.380994 1.8978959 -1.8976785 128.0 +15.402205 1.8046381 -1.898918 128.0 +15.426796 1.7116289 -1.9006532 128.0 +15.445889 1.6178694 -1.9017688 128.0 +15.459476 1.5234537 -1.9022646 128.0 +15.478414 1.4294792 -1.9035041 128.0 +15.486894 1.3344786 -1.9035041 128.0 +15.510616 1.2406924 -1.9054873 128.0 +15.515958 1.1453518 -1.9052393 128.0 +15.526653 1.0503937 -1.9057351 128.0 +15.532806 0.95510411 -1.9057351 128.0 +15.553236 0.86059988 -1.9075943 128.0 +15.579037 0.76617283 -1.9101973 128.0 +15.599307 0.67124856 -1.9121804 128.0 +15.614039 0.57592189 -1.9135438 128.0 +15.633149 0.4805918 -1.915527 128.0 +15.645723 0.38490286 -1.9167665 128.0 +15.649775 0.28893176 -1.9170144 128.0 +15.683996 0.19330221 -1.9211047 128.0 +15.675957 0.097008787 -1.9199891 128.0 +15.67328 0.00082116749 -1.9196173 128.0 +15.658106 -0.095256627 -1.9177581 128.0 +15.633413 -0.1910384 -1.9147834 128.0 +15.64286 -0.28716078 -1.9161468 128.0 +15.647747 -0.38330877 -1.9170144 128.0 +15.653035 -0.47955802 -1.9180059 128.0 +15.655748 -0.57581347 -1.9187497 128.0 +15.65886 -0.67216289 -1.9196173 128.0 +15.663361 -0.76866961 -1.9207329 128.0 +15.667266 -0.86525685 -1.9218484 128.0 +15.666615 -0.96167743 -1.9224681 128.0 +15.664379 -1.0580556 -1.9229639 128.0 +15.675405 -1.1554649 -1.925195 128.0 +15.669009 -1.2517047 -1.925319 128.0 +15.668942 -1.3485056 -1.9263105 128.0 +15.678159 -1.4462651 -1.9285415 128.0 +15.686765 -1.5441883 -1.9307727 128.0 +15.742129 -1.6472318 -1.9389532 128.0 +15.728767 -1.7434646 -1.9385813 128.0 +15.627103 -1.8293209 -1.9271781 128.0 +15.574222 -1.9200701 -1.9219723 128.0 +15.344669 -1.9874116 -1.8945799 128.0 +14.7147 -1.997649 -1.8167406 128.0 +14.276777 -2.0274544 -1.7630712 128.0 +13.816483 -2.048614 -1.706551 128.0 +13.637926 -2.1077247 -1.6856037 128.0 +13.320055 -2.1423352 -1.647056 128.0 +13.243044 -2.213387 -1.6389993 128.0 +12.013962 -2.0837097 -1.4849322 128.0 +11.552683 -2.0767584 -1.4280401 128.0 +11.519238 -2.1437907 -1.4254372 128.0 +10.607481 -2.0414343 -1.3111572 128.0 +10.356317 -2.0590484 -1.2807901 128.0 +10.022724 -2.056695 -1.2398872 128.0 +9.5410337 -2.0188811 -1.1800205 128.0 +9.3161488 -2.0310698 -1.1528759 128.0 +8.7836018 -1.9714329 -1.0863159 128.0 +8.6234159 -1.9911156 -1.0673518 128.0 +8.4922886 -2.0157866 -1.0521063 128.0 +8.5038605 -2.0737369 -1.055205 128.0 +8.5102272 -2.1306992 -1.0576839 128.0 +8.4499016 -2.1707723 -1.0516105 128.0 +8.7309942 -2.300226 -1.0896624 128.0 +8.2770195 -2.2349639 -1.0327704 128.0 +8.3042727 -2.2970898 -1.0381001 128.0 +8.2604256 -2.3396139 -1.0342578 128.0 +7.9342775 -2.2998745 -0.99372679 128.0 +7.8734026 -2.3346856 -0.98765337 128.0 +7.8143001 -2.3694127 -0.9818278 128.0 +7.8403683 -2.4299529 -0.98715758 128.0 +7.8366623 -2.4816113 -0.98864496 128.0 +7.7882447 -2.5189569 -0.98430675 128.0 +7.7085724 -2.5455301 -0.9758783 128.0 +7.7191358 -2.6016586 -0.97934884 128.0 +7.7171021 -2.6538157 -0.98120809 128.0 +7.7062907 -2.7030885 -0.98195177 128.0 +7.6886258 -2.7499881 -0.9818278 128.0 +7.4991488 -2.7342057 -0.95889747 128.0 +7.6738324 -2.8513932 -0.98443073 128.0 +7.6422725 -2.8931534 -0.98257148 128.0 +7.582716 -2.9239197 -0.97699386 128.0 +7.1545625 -2.8093021 -0.92196101 128.0 +7.1427183 -2.8553596 -0.9227047 128.0 +7.1250634 -2.8991327 -0.9227047 128.0 +7.4793401 -3.0969763 -0.97302753 128.0 +7.3577838 -3.0996487 -0.95914537 128.0 +7.2957611 -3.1263611 -0.95331979 128.0 +7.2527914 -3.1607578 -0.95009714 128.0 +7.200603 -3.1907237 -0.94563502 128.0 +7.2143626 -3.2499304 -0.95022112 128.0 +7.149178 -3.2734737 -0.94402373 128.0 +7.1748371 -3.3386357 -0.95034504 128.0 +7.1981702 -3.4033864 -0.95641851 128.0 +7.1869903 -3.4522171 -0.95778191 128.0 +5.4089541 -2.6388013 -0.71360463 128.0 +5.3935499 -2.6723812 -0.71372861 128.0 +6.9219184 -3.483088 -0.92976969 128.0 +7.0780144 -3.6162651 -0.95468324 128.0 +7.0442419 -3.6536856 -0.95307189 128.0 +6.9883285 -3.6792684 -0.94836187 128.0 +6.9874988 -3.733773 -0.9514606 128.0 +6.9984741 -3.7950299 -0.95629454 128.0 +6.9715791 -3.8359864 -0.95579875 128.0 +6.904593 -3.8545003 -0.94960135 128.0 +6.8307371 -3.8684249 -0.94241238 128.0 +6.8163362 -3.9157031 -0.94377583 128.0 +6.8659096 -4.0004258 -0.95443535 128.0 +6.8762569 -4.0631809 -0.95951718 128.0 +6.8248119 -4.0894814 -0.95567483 128.0 +6.7648249 -4.1101503 -0.95059294 128.0 +6.7166691 -4.137526 -0.94724637 128.0 +6.6617002 -4.1602602 -0.94290817 128.0 +6.6653895 -4.2196383 -0.94724637 128.0 +6.7086821 -4.3049469 -0.95753402 128.0 +6.6605158 -4.3319602 -0.95431137 128.0 +6.5749927 -4.3339643 -0.9455111 128.0 +6.5837531 -4.3979321 -0.95084083 128.0 +6.5402112 -4.4271193 -0.94836187 128.0 +6.5865631 -4.5176907 -0.95951718 128.0 +6.6418247 -4.6157928 -0.97215986 128.0 +6.4908762 -4.5701799 -0.95344377 128.0 +6.4417105 -4.5949359 -0.95022112 128.0 +6.4109826 -4.6326313 -0.94984925 128.0 +6.3576179 -4.6537085 -0.94600689 128.0 +6.3201766 -4.6861281 -0.94464344 128.0 +6.3127246 -4.7409115 -0.94799006 128.0 +5.4898806 -4.175693 -0.82342243 128.0 +5.4594398 -4.2056656 -0.82267874 128.0 +10.176337 -7.9405737 -1.5741746 128.0 +10.130537 -8.0053263 -1.5746704 128.0 +10.085876 -8.0710554 -1.5754141 128.0 +10.044641 -8.1396618 -1.5767776 128.0 +9.9860716 -8.1942167 -1.5754141 128.0 +9.9188156 -8.2413836 -1.5726873 128.0 +9.8581896 -8.2937832 -1.5710759 128.0 +9.8010721 -8.3489676 -1.5700843 128.0 +9.733881 -8.3953381 -1.5674814 128.0 +9.6612587 -8.4366283 -1.5640109 128.0 +9.5877533 -8.4766874 -1.5604165 128.0 +9.5163393 -8.5181484 -1.5571938 128.0 +9.4477186 -8.5617189 -1.554467 128.0 +9.423521 -8.6456928 -1.5593009 128.0 +3.5252962 -3.2733884 -0.56276011 128.0 +3.5138187 -3.3031154 -0.56424749 128.0 +3.5157633 -3.345825 -0.56808984 128.0 +3.5015974 -3.3735321 -0.5692054 128.0 +3.4900644 -3.4039631 -0.5708167 128.0 +3.5100563 -3.46576 -0.57800567 128.0 +3.5483639 -3.546874 -0.58854127 128.0 +8.051445 -8.1495628 -1.392839 128.0 +8.0033674 -8.200943 -1.3932108 128.0 +3.2214954 -3.3408043 -0.541565 128.0 +3.1769888 -3.3353546 -0.53722686 128.0 +3.1897731 -3.3902056 -0.54330027 128.0 +7.7645783 -8.3570805 -1.3867655 128.0 +2.6575289 -2.8946235 -0.45269439 128.0 +7.6067977 -8.3914433 -1.3766017 128.0 +2.6085703 -2.912231 -0.45021543 128.0 +2.5913095 -2.9289255 -0.45033938 128.0 +2.5772054 -2.9492548 -0.45108306 128.0 +2.5707269 -2.9785376 -0.45331413 128.0 +2.551759 -2.9934998 -0.45319018 128.0 +7.3643284 -8.750782 -1.3904839 128.0 +7.2800555 -8.7591715 -1.3845344 128.0 +7.2507229 -8.8335915 -1.3893684 128.0 +7.2507396 -8.9449835 -1.4001518 128.0 +7.8647237 -9.8252392 -1.5338916 128.0 +7.8073654 -9.8772039 -1.5345113 128.0 +7.7521071 -9.9319639 -1.5356269 128.0 +7.6710329 -9.9534044 -1.5315366 128.0 +7.6098156 -10.000285 -1.5315366 128.0 +7.5423522 -10.038857 -1.530297 128.0 +7.4563785 -10.052268 -1.5252153 128.0 +7.3863516 -10.086621 -1.5234799 128.0 +7.3283911 -10.137383 -1.5243475 128.0 +7.2712383 -10.189428 -1.5254631 128.0 +7.2074375 -10.232229 -1.5252153 128.0 +7.1490488 -10.282779 -1.5262069 128.0 +7.0830135 -10.32236 -1.5255871 128.0 +7.0056357 -10.345084 -1.5224884 128.0 +6.9376173 -10.381275 -1.5214968 128.0 +6.8650494 -10.410393 -1.5195136 128.0 +6.7929263 -10.439843 -1.5176544 128.0 +6.7201653 -10.467966 -1.5156713 128.0 +6.6473145 -10.495589 -1.5136881 128.0 +6.5817385 -10.534496 -1.5134401 128.0 +6.5133324 -10.568769 -1.5125725 128.0 +6.4432077 -10.600056 -1.5113331 128.0 +6.375495 -10.635135 -1.5107133 128.0 +6.3065848 -10.668075 -1.5098457 128.0 +6.2290168 -10.685994 -1.506871 128.0 +6.1524553 -10.705086 -1.5041441 128.0 +6.0812745 -10.733137 -1.5027807 128.0 +6.0133677 -10.766784 -1.5022849 128.0 +5.9467125 -10.802609 -1.5021609 128.0 +5.8538232 -10.790049 -1.4952198 128.0 +5.7809582 -10.813512 -1.4934846 128.0 +5.6488433 -10.724106 -1.475884 128.0 +5.6459966 -10.880116 -1.4929888 128.0 +5.5384912 -10.835031 -1.4818335 128.0 +5.4241691 -10.773972 -1.4685711 128.0 +5.3434167 -10.777712 -1.4644808 128.0 +5.2719626 -10.799594 -1.4629934 128.0 +5.2030201 -10.826372 -1.4622498 128.0 +5.1390381 -10.863476 -1.4629934 128.0 +5.0722842 -10.894804 -1.4629934 128.0 +4.9983153 -10.910385 -1.4608862 128.0 +4.9263844 -10.929993 -1.4593989 128.0 +4.8423386 -10.921913 -1.4541931 128.0 +4.7764211 -10.954148 -1.4545649 128.0 +4.7016902 -10.965921 -1.4522099 128.0 +4.6246829 -10.971704 -1.4491112 128.0 +4.5458832 -10.972371 -1.4453928 128.0 +4.467998 -10.974323 -1.4419223 128.0 +4.4016824 -11.004295 -1.4422941 128.0 +4.3431478 -11.054187 -1.4453928 128.0 +4.2616687 -11.045447 -1.4406828 128.0 +4.1864352 -11.051901 -1.4380798 128.0 +4.1109376 -11.056917 -1.435353 128.0 +1.1622131 -3.1832147 -0.3851428 128.0 +3.9856396 -11.13643 -1.4393194 128.0 +3.9090192 -11.137267 -1.4362206 128.0 +1.1621698 -3.3748426 -0.40770131 128.0 +1.1430254 -3.3866115 -0.40832105 128.0 +3.6750333 -11.121592 -1.4249414 128.0 +3.6094725 -11.152429 -1.426057 128.0 +1.0343481 -3.261399 -0.38923308 128.0 +1.0090278 -3.2506242 -0.38700202 128.0 +0.97351003 -3.2054775 -0.38030884 128.0 +0.95495206 -3.2151959 -0.38080463 128.0 +0.935206 -3.2209947 -0.38080463 128.0 +0.91975272 -3.2419479 -0.38278779 128.0 +0.92604208 -3.3422089 -0.39505863 128.0 +0.89930695 -3.3248372 -0.39208388 128.0 +2.9279709 -11.105327 -1.3964334 128.0 +2.8600218 -11.124044 -1.3965573 128.0 +2.8006322 -11.176998 -1.4011434 128.0 +2.733645 -11.200721 -1.402011 128.0 +1.9378986 -8.1558647 -1.0089724 128.0 +0.73277074 -3.1671531 -0.36791405 128.0 +1.9889715 -8.8528872 -1.0952401 128.0 +2.4458897 -11.209172 -1.394946 128.0 +2.3692567 -11.187079 -1.390236 128.0 +1.7265141 -8.4049034 -1.033638 128.0 +1.6735551 -8.4085264 -1.0327704 128.0 +1.6211796 -8.4147396 -1.0322746 128.0 +1.5767814 -8.4635496 -1.0372325 128.0 +2.031127 -11.288673 -1.3945742 128.0 +1.9528328 -11.249106 -1.3880049 128.0 +1.3616612 -8.137826 -0.99248731 128.0 +1.817479 -11.289858 -1.390236 128.0 +1.7495358 -11.309624 -1.3913516 128.0 +1.2816626 -8.6336374 -1.0521063 128.0 +1.6021049 -11.270313 -1.3837907 128.0 +1.5317198 -11.271082 -1.3826752 128.0 +1.4596007 -11.257635 -1.3798244 128.0 +1.388676 -11.251606 -1.3779652 128.0 +1.3128027 -11.201768 -1.3706522 128.0 +1.2451388 -11.219475 -1.3718917 128.0 +1.1801991 -11.264405 -1.3766017 128.0 +1.1143661 -11.30501 -1.380816 128.0 +1.0470759 -11.334361 -1.3836668 128.0 +0.97606295 -11.323766 -1.3815596 128.0 +0.90395468 -11.2969 -1.3774694 128.0 +0.83484012 -11.305202 -1.3778412 128.0 +0.76706266 -11.333873 -1.380816 128.0 +0.69531512 -11.302711 -1.3763539 128.0 +0.62824935 -11.348377 -1.3815596 128.0 +0.5551011 -11.28066 -1.3726354 128.0 +0.48681068 -11.305664 -1.3753623 128.0 +0.41571569 -11.261832 -1.3695368 128.0 +0.34605908 -11.246318 -1.3673056 128.0 +0.27728975 -11.258149 -1.3685452 128.0 +0.20873487 -11.28841 -1.3721396 128.0 +0.14064562 -11.385724 -1.3841625 128.0 +0.070623748 -11.360573 -1.38094 128.0 +0.00091572758 -11.338963 -1.378213 128.0 +-0.068664968 -11.339746 -1.378337 128.0 +-0.13847482 -11.357965 -1.380692 128.0 +-0.20794393 -11.344995 -1.3792046 128.0 +-0.27747849 -11.340529 -1.3788328 128.0 +-0.34681377 -11.330679 -1.3778412 128.0 +-0.41859677 -11.389818 -1.3855259 128.0 +-0.48796394 -11.375138 -1.3840386 128.0 +-0.55336732 -11.282732 -1.3728833 128.0 +-0.6214906 -11.259309 -1.3704044 128.0 +-0.69360822 -11.304805 -1.3766017 128.0 +-0.76577187 -11.341917 -1.3818076 128.0 +-0.83702958 -11.359765 -1.3846583 128.0 +-0.91035414 -11.399916 -1.39036 128.0 +-0.99024898 -11.509785 -1.4048618 128.0 +-1.0557446 -11.448159 -1.3979207 128.0 +-1.1257747 -11.43949 -1.3976729 128.0 +-1.1961516 -11.434341 -1.3979207 128.0 +-1.2633353 -11.400159 -1.3945742 128.0 +-1.3348777 -11.40599 -1.3963095 128.0 +-1.399493 -11.354252 -1.3908558 128.0 +-1.4700277 -11.35234 -1.3917234 128.0 +-1.549674 -11.41685 -1.4010195 128.0 +-1.6318421 -11.492598 -1.4118029 128.0 +-1.7116483 -11.545187 -1.4197356 128.0 +-1.7860954 -11.558002 -1.4227103 128.0 +-1.8561921 -11.541927 -1.4220906 128.0 +-1.9340146 -11.572405 -1.4274204 128.0 +-2.0109234 -11.594539 -1.4317585 128.0 +-2.0872982 -11.61128 -1.435477 128.0 +-2.1574144 -11.592402 -1.4347333 128.0 +-2.2328191 -11.601357 -1.437584 128.0 +-2.312093 -11.628313 -1.4427899 128.0 +-2.3881893 -11.637236 -1.4457647 128.0 +-2.4659207 -11.652456 -1.449607 128.0 +-2.5411792 -11.654557 -1.4518381 128.0 +-2.6115551 -11.633904 -1.4512184 128.0 +-2.6846774 -11.625396 -1.4522099 128.0 +-2.7559588 -11.608705 -1.4522099 128.0 +-2.8311353 -11.607964 -1.4543171 128.0 +-2.9112289 -11.625988 -1.4589031 128.0 +-2.9869564 -11.625205 -1.4611342 128.0 +-3.0589898 -11.609537 -1.461506 128.0 +-3.1265438 -11.577138 -1.4597708 128.0 +-3.1946094 -11.547215 -1.4584073 128.0 +-3.2737882 -11.556993 -1.4622498 128.0 +-3.3427043 -11.530016 -1.461382 128.0 +-3.4212909 -11.535925 -1.4648526 128.0 +-3.4971948 -11.531807 -1.4670837 128.0 +-3.5440819 -11.433362 -1.4570439 128.0 +-3.6090741 -11.39532 -1.4549367 128.0 +-3.6746495 -11.359743 -1.4532015 128.0 +-3.7480178 -11.348289 -1.4546889 128.0 +-3.8156767 -11.319436 -1.4539452 128.0 +-3.8724697 -11.259216 -1.4491112 128.0 +-3.9470677 -11.251161 -1.4512184 128.0 +-4.0143576 -11.222058 -1.4505986 128.0 +-4.0882397 -11.211199 -1.4524578 128.0 +-4.1562619 -11.184043 -1.4522099 128.0 +-4.2304311 -11.173177 -1.4541931 128.0 +-4.2978373 -11.144232 -1.4538213 128.0 +-4.3621449 -11.107491 -1.4524578 128.0 +-4.4261642 -11.070382 -1.4510944 128.0 +-4.4928851 -11.040258 -1.4507226 128.0 +-4.5650992 -11.023483 -1.4522099 128.0 +-1.5188596 -3.6069164 -0.45071122 128.0 +-1.5448724 -3.6066492 -0.4519507 128.0 +-4.8045092 -11.02309 -1.463861 128.0 +-4.913877 -11.087747 -1.4767516 128.0 +-4.9777408 -11.04834 -1.4755121 128.0 +-5.027256 -10.977895 -1.4700584 128.0 +-4.0836201 -8.775218 -1.1708483 128.0 +-5.1883225 -10.971888 -1.4778671 128.0 +-1.5642214 -3.2579396 -0.41327897 128.0 +-1.5907111 -3.2616563 -0.41513819 128.0 +-1.61422 -3.2589469 -0.41612977 128.0 +-1.6373093 -3.2551851 -0.4169974 128.0 +-1.7186687 -3.3652434 -0.43385431 128.0 +-1.7424841 -3.3608 -0.43472195 128.0 +-1.766772 -3.3570688 -0.43571353 128.0 +-5.8537555 -10.953499 -1.5131923 128.0 +-5.9137578 -10.904291 -1.5113331 128.0 +-5.9882097 -10.881709 -1.5133163 128.0 +-6.0500274 -10.836098 -1.5120767 128.0 +-6.1134682 -10.793591 -1.5113331 128.0 +-6.1780982 -10.753295 -1.5109612 128.0 +-6.2804389 -10.777767 -1.5200094 128.0 +-1.9157344 -3.2432697 -0.43236694 128.0 +-1.9381495 -3.2357094 -0.43298668 128.0 +-6.4772429 -10.659492 -1.5198854 128.0 +-6.5185804 -10.580688 -1.5141839 128.0 +-6.5807509 -10.536283 -1.5135641 128.0 +-6.6394367 -10.486485 -1.5122007 128.0 +-6.7052636 -10.448053 -1.5125725 128.0 +-6.7762804 -10.417526 -1.5141839 128.0 +-6.8455358 -10.384036 -1.5154233 128.0 +-6.9113274 -10.345138 -1.5159191 128.0 +-6.9724483 -10.299249 -1.5154233 128.0 +-7.0377579 -10.259546 -1.5159191 128.0 +-7.1028423 -10.219429 -1.5164149 128.0 +-7.1642709 -10.174031 -1.516167 128.0 +-7.2346315 -10.14119 -1.5179023 128.0 +-7.3176475 -10.125559 -1.5223644 128.0 +-7.3849149 -10.087673 -1.5234799 128.0 +-7.4561305 -10.054922 -1.5254631 128.0 +-7.5266261 -10.020884 -1.5273223 128.0 +-7.6041946 -9.9958344 -1.530669 128.0 +-7.6726532 -9.9584188 -1.5321563 128.0 +-7.7299495 -9.9064598 -1.5314126 128.0 +-7.7948956 -9.8642931 -1.5322802 128.0 +-7.8633361 -9.8263493 -1.5338916 128.0 +-7.9372268 -9.7948751 -1.5366185 128.0 +-8.0072498 -9.7582617 -1.5386016 128.0 +-8.0783911 -9.722683 -1.5408326 128.0 +-8.1468401 -9.6835613 -1.542568 128.0 +-8.2041731 -9.6311255 -1.542196 128.0 +-8.2553368 -9.5715885 -1.5407087 128.0 +-8.315217 -9.5222492 -1.5409566 128.0 +-8.378089 -9.4762516 -1.5418242 128.0 +-8.4360771 -9.4246664 -1.5418242 128.0 +-8.5037422 -9.3837547 -1.5436834 128.0 +-8.5772619 -9.3489466 -1.5466582 128.0 +-8.6499977 -9.3128624 -1.549509 128.0 +-8.7076569 -9.260335 -1.5496329 128.0 +-8.777998 -9.2211037 -1.5521119 128.0 +-8.8481855 -9.1813583 -1.5545908 128.0 +-8.9161358 -9.1389675 -1.556698 128.0 +-8.9894772 -9.1017351 -1.5597967 128.0 +-9.0697136 -9.0709629 -1.5641348 128.0 +-9.1393204 -9.029088 -1.5666138 128.0 +-9.19526 -8.9735327 -1.5667378 128.0 +-9.2544346 -8.9210749 -1.5674814 128.0 +-9.2989378 -8.8545437 -1.5657462 128.0 +-9.3588762 -8.8027582 -1.5667378 128.0 +-9.4178019 -8.7498951 -1.5676054 128.0 +-9.4800863 -8.6999941 -1.5690928 128.0 +-9.5538769 -8.6603193 -1.5725633 128.0 +-9.6282768 -8.6207285 -1.5761578 128.0 +-9.7018051 -8.5798922 -1.5796283 128.0 +-9.7348356 -8.503231 -1.5764056 128.0 +-9.7778111 -8.4355612 -1.5749183 128.0 +-9.7931299 -8.3445196 -1.5689688 128.0 +-9.7963114 -8.2440252 -1.5611601 128.0 +-9.7963409 -8.1419048 -1.5529796 128.0 +-9.7486973 -8.0016985 -1.5372381 128.0 +-9.8022375 -7.9454794 -1.5379819 128.0 +-9.8771458 -7.9062653 -1.542196 128.0 +-10.00566 -7.9088831 -1.5549628 128.0 +-10.134574 -7.9102187 -1.5677294 128.0 +-10.254447 -7.9030004 -1.5790086 128.0 +-10.397511 -7.9120302 -1.5938823 128.0 +-10.510127 -7.8963571 -1.6039221 128.0 +-10.620548 -7.8778243 -1.61359 128.0 +-10.67349 -7.8160267 -1.6143337 128.0 +-10.738939 -7.763176 -1.6170605 128.0 +-10.793641 -7.7023239 -1.6181761 128.0 +-10.83502 -7.6319509 -1.6173085 128.0 +-10.893867 -7.5738201 -1.6191677 128.0 +-10.943406 -7.5090795 -1.6196635 128.0 +-10.997492 -7.4473538 -1.620903 128.0 +-11.080109 -7.4045415 -1.6264806 128.0 +-11.13776 -7.3446088 -1.6283399 128.0 +-11.205906 -7.2912812 -1.6318104 128.0 +-11.247929 -7.220778 -1.6314385 128.0 +-11.289508 -7.1500335 -1.6310667 128.0 +-11.347474 -7.0895643 -1.6331738 128.0 +-11.400054 -7.0255299 -1.6345372 128.0 +-11.459907 -6.965755 -1.6370162 128.0 +-11.508389 -6.8988781 -1.6378838 128.0 +-11.557338 -6.8321733 -1.6388754 128.0 +-6.6557264 -3.8802245 -0.92419207 128.0 +-6.7000585 -3.8511775 -0.92716682 128.0 +-11.746756 -6.6554527 -1.6482954 128.0 +-11.794302 -6.587121 -1.649287 128.0 +-11.846668 -6.5213265 -1.6510223 128.0 +-11.897799 -6.4546647 -1.6526337 128.0 +-11.951182 -6.3890233 -1.6546168 128.0 +-12.005085 -6.3234324 -1.6567239 128.0 +-7.4106259 -3.845999 -1.0047581 128.0 +-7.4323177 -3.7995527 -1.0045103 128.0 +-6.9369788 -3.4928942 -0.93200076 128.0 +-6.9360538 -3.4392469 -0.92890209 128.0 +-6.9472165 -3.3918362 -0.92753863 128.0 +-6.9678979 -3.3491449 -0.92753863 128.0 +-7.0224037 -3.3224487 -0.93224865 128.0 +-12.373769 -5.7606707 -1.6667637 128.0 +-6.6900516 -3.0653718 -0.88105822 128.0 +-12.479717 -5.6246977 -1.6717216 128.0 +-12.536674 -5.5580702 -1.6748203 128.0 +-12.57418 -5.4826283 -1.6753161 128.0 +-12.579311 -5.3932524 -1.6714737 128.0 +-12.621311 -5.319819 -1.6727132 128.0 +-12.744474 -5.2798672 -1.684984 128.0 +-7.4441514 -3.0311563 -0.96583855 128.0 +-12.827656 -5.1308126 -1.6875869 128.0 +-12.846889 -5.0472908 -1.6859756 128.0 +-12.870211 -4.9655123 -1.684984 128.0 +-12.878164 -4.8780146 -1.6820092 128.0 +-12.892041 -4.7930269 -1.6799022 128.0 +-12.932395 -4.7179127 -1.6813896 128.0 +-13.117126 -4.6942954 -1.7020888 128.0 +-13.234633 -4.6449323 -1.7138638 128.0 +-13.263824 -4.5639615 -1.7139878 128.0 +-13.283115 -4.4796371 -1.7128723 128.0 +-13.299988 -4.3946257 -1.7115089 128.0 +-13.254951 -4.289721 -1.7020888 128.0 +-13.27913 -4.2077103 -1.7018409 128.0 +-13.224136 -4.1011748 -1.6913054 128.0 +-13.192078 -4.0026741 -1.6838685 128.0 +-13.053715 -3.8733988 -1.6626734 128.0 +-12.698882 -3.6835182 -1.6134661 128.0 +-12.731747 -3.6085055 -1.6148295 128.0 +-13.010906 -3.6015038 -1.6481715 128.0 +-12.90631 -3.4874461 -1.6318104 128.0 +-12.759548 -3.363935 -1.6101195 128.0 +-12.766494 -3.2821226 -1.6083843 128.0 +-12.94714 -3.2439885 -1.6290835 128.0 +-13.109475 -3.199291 -1.6474278 128.0 +-13.136582 -3.1206267 -1.6484194 128.0 +-13.270535 -3.0665393 -1.6631691 128.0 +-13.340416 -2.9965768 -1.6697384 128.0 +-13.393453 -2.9222772 -1.6742005 128.0 +-13.438313 -2.8457954 -1.6776711 128.0 +-13.503151 -2.7730629 -1.6837445 128.0 +-13.514072 -2.6889956 -1.6830008 128.0 +-13.628732 -2.6249707 -1.6955196 128.0 +-13.756767 -2.5621817 -1.7097735 128.0 +-13.839617 -2.4898412 -1.718326 128.0 +-13.910361 -2.4145446 -1.725391 128.0 +-14.028658 -2.3464904 -1.7385294 128.0 +-14.11039 -2.2712433 -1.7470819 128.0 +-14.156422 -2.1896236 -1.7511722 128.0 +-14.134254 -2.0974793 -1.7467101 128.0 +-14.144894 -2.0104346 -1.7464621 128.0 +-14.489306 -1.9687356 -1.7883565 128.0 +-14.891788 -1.9304056 -1.8375639 128.0 +-15.587808 -1.9233994 -1.9237076 128.0 +-15.728424 -1.8428357 -1.9399447 128.0 +-15.786776 -1.751542 -1.9458942 128.0 +-15.84361 -1.6594982 -1.9517198 128.0 +-15.838681 -1.5607938 -1.9498606 128.0 +-15.813376 -1.4603888 -1.9455224 128.0 +-15.85071 -1.3658006 -1.9491169 128.0 +-15.857803 -1.2684376 -1.948993 128.0 +-15.853412 -1.1702365 -1.9475056 128.0 +-15.791982 -1.0683235 -1.9389532 128.0 +-15.748718 -0.96836424 -1.9327558 128.0 +-15.869294 -0.87806445 -1.9471338 128.0 +-15.859517 -0.77994579 -1.9452745 128.0 +-15.866978 -0.68274665 -1.9456464 128.0 +-15.796497 -0.58263826 -1.9363502 128.0 +-15.874162 -0.48798305 -1.9456464 128.0 +-15.891737 -0.39093679 -1.9475056 128.0 +-15.882923 -0.29321888 -1.9461422 128.0 +-15.927089 -0.19628026 -1.9514719 128.0 +-15.876395 -0.098234303 -1.9450266 128.0 +-15.869753 -0.00081688107 -1.944159 128.0 +-15.8129 0.096209824 -1.937094 128.0 +-15.746526 0.19242904 -1.9289134 128.0 +-15.781756 0.28972086 -1.9334995 128.0 +-15.772738 0.38637984 -1.9326319 128.0 +-15.799825 0.48406607 -1.9363502 128.0 +-15.790607 0.58078361 -1.9356066 128.0 +-15.799635 0.67821616 -1.937218 128.0 +-15.802114 0.77548915 -1.9380856 128.0 +-15.803002 0.87276322 -1.9388292 128.0 +-15.782494 0.96879917 -1.93697 128.0 +-15.762391 1.0646832 -1.9352348 128.0 +-14.390461 -0.36386102 -1.9309767 128.0 +-14.444923 -0.2765626 -1.9381605 128.0 +-14.450312 -0.18797666 -1.9387027 128.0 +-14.53937 -0.099916063 -1.9507661 128.0 +-14.276164 -0.010501053 -1.9147117 128.0 +-14.409712 0.077814609 -1.93301 128.0 +-14.357446 0.16563658 -1.9259617 128.0 +-14.425503 0.25495273 -1.9354497 128.0 +-14.284008 0.34013942 -1.9163382 128.0 +-14.264816 0.42727423 -1.914034 128.0 +-14.379751 0.51904309 -1.9301635 128.0 +-14.400053 0.60826868 -1.9334166 128.0 +-14.223857 0.68828684 -1.9098321 128.0 +-14.364793 0.7834776 -1.9297569 128.0 +-14.319168 0.86914355 -1.9241997 128.0 +-14.308623 0.95665765 -1.923522 128.0 +-14.347939 1.0477537 -1.9297569 128.0 +-14.326424 1.1345984 -1.9277238 128.0 +-14.333013 1.2236618 -1.9296213 128.0 +-14.323261 1.3114039 -1.9293503 128.0 +-14.311987 1.398976 -1.9289436 128.0 +-14.279483 1.4843086 -1.9256907 128.0 +-14.264197 1.5712472 -1.9248774 128.0 +-14.248383 1.6580541 -1.9240642 128.0 +-14.238925 1.7455698 -1.9241997 128.0 +-14.212223 1.8308804 -1.922031 128.0 +-14.203668 1.9184483 -1.9224377 128.0 +-14.176913 2.003485 -1.9204044 128.0 +-14.163373 2.0902905 -1.9202689 128.0 +-14.158114 2.1783612 -1.9213532 128.0 +-14.140569 2.2645662 -1.9208111 128.0 +-14.120543 2.3503125 -1.9199978 128.0 +-14.107809 2.4372478 -1.9202689 128.0 +-14.089663 2.5232418 -1.9198623 128.0 +-14.058329 2.6067572 -1.9176936 128.0 +-14.021635 2.6890502 -1.9148473 128.0 +-14.012647 2.7765751 -1.9159316 128.0 +-13.98661 2.8607161 -1.9147117 128.0 +-14.003694 2.9538431 -1.9195912 128.0 +-13.971751 3.0367668 -1.9176936 128.0 +-13.966392 3.1254675 -1.9195912 128.0 +-13.941157 3.2097712 -1.9187779 128.0 +-13.892277 3.2884064 -1.9147117 128.0 +-13.853546 3.369138 -1.9121364 128.0 +-13.810503 3.4485583 -1.9090189 128.0 +-13.773727 3.5292988 -1.9068502 128.0 +-13.747022 3.6124873 -1.9061725 128.0 +-13.75234 3.7042415 -1.9101032 128.0 +-13.824862 3.8149068 -1.9236575 128.0 +-13.766869 3.8899651 -1.9187779 128.0 +-13.711332 3.9652815 -1.9143051 128.0 +-13.732347 4.0628285 -1.9208111 128.0 +-13.67302 4.1366844 -1.9159316 128.0 +-13.519596 4.1809888 -1.8976333 128.0 +-13.422832 4.2414775 -1.8874676 128.0 +-13.493671 4.3551006 -1.9014285 128.0 +-13.424351 4.423861 -1.8953291 128.0 +-13.418552 4.5134125 -1.8984466 128.0 +-13.435588 4.6110983 -1.9049526 128.0 +-13.398625 4.690505 -1.9037328 128.0 +-13.363995 4.7706304 -1.9029195 128.0 +-13.348436 4.8576226 -1.9049526 128.0 +-13.323024 4.9411578 -1.9056304 128.0 +-13.297089 5.0245643 -1.9063081 128.0 +-13.267858 5.106771 -1.9065791 128.0 +-13.227971 5.1848311 -1.9053593 128.0 +-13.191308 5.2640629 -1.9046816 128.0 +-13.157842 5.3445311 -1.904546 128.0 +-13.107404 5.4179749 -1.9019706 128.0 +-13.052907 5.4894652 -1.8988532 128.0 +-13.032642 5.5752978 -1.9008863 128.0 +-13.008182 5.6595073 -1.9023774 128.0 +-12.969586 5.7376142 -1.9018351 128.0 +-12.971185 5.8337469 -1.9073924 128.0 +-12.969386 5.9288788 -1.9125431 128.0 +-12.941749 6.0125203 -1.9138985 128.0 +-12.926116 6.1019664 -1.9171515 128.0 +-12.911659 6.1923032 -1.9206755 128.0 +-12.882328 6.2757502 -1.922031 128.0 +-12.859563 6.3625846 -1.9244708 128.0 +-12.845955 6.4542685 -1.9284015 128.0 +-12.74433 6.5014534 -1.9189135 128.0 +-12.769303 6.6132445 -1.9289436 128.0 +-12.77058 6.7135997 -1.9354497 128.0 +-12.727397 6.7908993 -1.9351786 128.0 +-12.709885 6.8820739 -1.9389738 128.0 +-12.669155 6.9608846 -1.9392449 128.0 +-12.638321 7.0452437 -1.9411426 128.0 +-12.606928 7.1294861 -1.9430401 128.0 +-12.578415 7.21558 -1.9454799 128.0 +-12.543324 7.2981043 -1.9469708 128.0 +-12.502574 7.3774486 -1.9476485 128.0 +-12.454521 7.452498 -1.9472419 128.0 +-12.416183 7.5334024 -1.9484618 128.0 +-12.395041 7.6250181 -1.9525281 128.0 +-12.358951 7.7077446 -1.9542902 128.0 +-12.317286 7.7871385 -1.9552389 128.0 +-12.311818 7.8898315 -1.9621516 128.0 +-12.273977 7.9722424 -1.9639137 128.0 +-12.255449 8.0675592 -1.9689287 128.0 +-12.196651 8.1365576 -1.9674377 128.0 +-12.173583 8.2295523 -1.9719107 128.0 +-12.185799 8.3472042 -1.9823475 128.0 +-12.164469 8.4427195 -1.9873625 128.0 +-12.138371 8.5354357 -1.9916999 128.0 +-12.065596 8.5953836 -1.9883113 128.0 +-12.016645 8.6721544 -1.9889891 128.0 +-11.972007 8.7521553 -1.9904801 128.0 +-11.945948 8.8460855 -1.995224 128.0 +-11.91443 8.9364567 -1.9991548 128.0 +-11.89172 9.033967 -2.0047121 128.0 +-11.833709 9.10495 -2.0043054 128.0 +-11.783871 9.1822605 -2.0053897 128.0 +-11.757642 9.2783279 -2.0106759 128.0 +-11.686558 9.3391638 -2.0082362 128.0 +-11.633655 9.4144354 -2.0090494 128.0 +-11.594062 9.5007114 -2.0123024 128.0 +-11.541649 9.5767336 -2.0133867 128.0 +-11.497083 9.659481 -2.0159621 128.0 +-11.429296 9.7227821 -2.0144711 128.0 +-11.400952 9.8198843 -2.0201638 128.0 +-11.340485 9.8896542 -2.0201638 128.0 +-11.253593 9.936101 -2.01542 128.0 +-11.225656 10.034678 -2.0215192 128.0 +-11.202073 10.137938 -2.0285676 128.0 +-11.15719 10.222545 -2.0318205 128.0 +-11.11169 10.306981 -2.0350735 128.0 +-11.06196 10.387854 -2.0376489 128.0 +-11.00304 10.460311 -2.0385976 128.0 +-10.958638 10.546865 -2.042393 128.0 +-10.908621 10.628426 -2.0452392 128.0 +-10.835442 10.687507 -2.0437484 128.0 +-10.785786 10.769892 -2.0468657 128.0 +-10.709047 10.825304 -2.0448327 128.0 +-10.661813 10.91065 -2.0486279 128.0 +-10.615996 10.997963 -2.0528297 128.0 +-10.550365 11.065045 -2.0532362 128.0 +-10.493822 11.141833 -2.0555406 128.0 +-10.427283 11.208189 -2.0559471 128.0 +-10.38178 11.297491 -2.0606911 128.0 +-10.324251 11.374185 -2.0631309 128.0 +-10.267494 11.452073 -2.0658417 128.0 +-10.204914 11.523758 -2.0674682 128.0 +-10.145103 11.598835 -2.0697725 128.0 +-10.085402 11.67436 -2.0722122 128.0 +-10.024512 11.748837 -2.0745165 128.0 +-9.964365 11.824519 -2.0770917 128.0 +-9.9011307 11.89686 -2.0791249 128.0 +-9.8317213 11.961981 -2.0799382 128.0 +-9.759388 12.02362 -2.0802093 128.0 +-9.6872873 12.085595 -2.080616 128.0 +-9.6154089 12.147915 -2.0811582 128.0 +-9.544961 12.21215 -2.0821068 128.0 +-9.4807453 12.284605 -2.0845466 128.0 +-9.4147978 12.355155 -2.0867152 128.0 +-9.3513203 12.429317 -2.0895617 128.0 +-9.3044195 12.526228 -2.0963387 128.0 +-9.2367601 12.595866 -2.0985076 128.0 +-9.1598806 12.653108 -2.0986431 128.0 +-9.0884066 12.71794 -2.1001341 128.0 +-9.0141973 12.779134 -2.1010828 128.0 +-8.9254265 12.819567 -2.0986431 128.0 +-8.876339 12.917369 -2.1058269 128.0 +-8.8002491 12.976509 -2.1066401 128.0 +-8.7072353 13.010502 -2.1033871 128.0 +-8.6048536 13.029787 -2.0978298 128.0 +-8.4928284 13.033365 -2.0898328 128.0 +-8.3832264 13.039395 -2.0823779 128.0 +-8.2531748 13.011943 -2.0696368 128.0 +-8.1542597 13.032103 -2.0647573 128.0 +-8.0429192 13.031304 -2.0566249 128.0 +-7.9205618 13.011015 -2.0455103 128.0 +-7.8135486 13.01435 -2.0383265 128.0 +-7.7037644 13.011748 -2.0303295 128.0 +-7.6008019 13.019414 -2.0240946 128.0 +-7.5010018 13.03146 -2.0186729 128.0 +-7.4003625 13.041049 -2.0129802 128.0 +-7.2950521 13.041249 -2.0059319 128.0 +-7.1842775 13.030237 -1.9972571 128.0 +-7.0800643 13.029676 -1.9903445 128.0 +-6.9831448 13.04143 -1.9854649 128.0 +-6.8849607 13.049858 -1.9801788 128.0 +-6.7855663 13.054935 -1.974486 128.0 +-6.6782417 13.043411 -1.9663534 128.0 +-6.5735455 13.035488 -1.9588985 128.0 +-6.4806571 13.049844 -1.9549679 128.0 +-6.382618 13.052871 -1.9494106 128.0 +-6.2860751 13.057865 -1.94426 128.0 +-6.1969252 13.077388 -1.9414136 128.0 +-6.1031656 13.086432 -1.9370762 128.0 +-6.0008507 13.07591 -1.9298924 128.0 +-5.907865 13.084492 -1.9256907 128.0 +-5.8093705 13.079749 -1.9195912 128.0 +-5.7056041 13.061582 -1.9115942 128.0 +-5.6097102 13.059932 -1.9061725 128.0 +-5.5171356 13.064899 -1.9018351 128.0 +-5.4224329 13.063733 -1.8966845 128.0 +-5.3290753 13.064651 -1.8919405 128.0 +-5.2373853 13.068594 -1.8877387 128.0 +-5.1429448 13.064529 -1.8824525 128.0 +-5.0494661 13.061648 -1.8774375 128.0 +-4.9604363 13.069228 -1.8740489 128.0 +-4.8704658 13.073423 -1.8702537 128.0 +-4.7853942 13.090034 -1.8683561 128.0 +-4.6999679 13.105162 -1.866323 128.0 +-4.617166 13.127211 -1.8653742 128.0 +-4.5407314 13.16747 -1.8671362 128.0 +-4.4785709 13.250461 -1.8751333 128.0 +-4.4059057 13.304027 -1.8789284 128.0 +-4.3257194 13.335522 -1.8796061 128.0 +-4.2486115 13.376922 -1.8817748 128.0 +-4.1682172 13.408416 -1.882588 128.0 +-4.0806766 13.416677 -1.8801483 128.0 +-3.9898012 13.412973 -1.8760821 128.0 +-3.9043822 13.426737 -1.8745911 128.0 +-3.8094654 13.406602 -1.8683561 128.0 +-3.7205079 13.405856 -1.8649676 128.0 +-3.6412904 13.439908 -1.8665941 128.0 +-3.5529315 13.439967 -1.8634765 128.0 +-3.4607513 13.424098 -1.8581904 128.0 +-3.3746955 13.430667 -1.8561573 128.0 +-3.2886894 13.436686 -1.8541241 128.0 +-3.2027366 13.442155 -1.852091 128.0 +-3.1197493 13.459622 -1.8518199 128.0 +-3.0351434 13.469813 -1.8506 128.0 +-2.9484112 13.469793 -1.8480247 128.0 +-2.8659127 13.4886 -1.8481603 128.0 +-2.7840941 13.510783 -1.848838 128.0 +-2.699589 13.519839 -1.8477536 128.0 +-2.6130087 13.517667 -1.8451784 128.0 +-2.5283778 13.52468 -1.8439584 128.0 +-2.4437592 13.531164 -1.8427385 128.0 +-2.3632395 13.560545 -1.8447716 128.0 +-2.2809739 13.580653 -1.845585 128.0 +-2.1958621 13.583634 -1.8440939 128.0 +-2.112169 13.594894 -1.8438228 128.0 +-2.0287125 13.607598 -1.8438228 128.0 +-1.9436384 13.609001 -1.8423319 128.0 +-1.8563441 13.593184 -1.8385367 128.0 +-1.7705978 13.586635 -1.836097 128.0 +-1.685734 13.585444 -1.8344704 128.0 +-1.6017636 13.590612 -1.8337927 128.0 +-1.5182331 13.5992 -1.8336571 128.0 +-1.4336183 13.597421 -1.8321662 128.0 +-1.3501592 13.605962 -1.8321662 128.0 +-1.2685772 13.634706 -1.8350126 128.0 +-1.1848924 13.642234 -1.8350126 128.0 +-1.1005253 13.641347 -1.8339282 128.0 +-1.0160664 13.637962 -1.8325728 128.0 +-0.93250149 13.645917 -1.8328439 128.0 +-0.84826207 13.643471 -1.8317596 128.0 +-0.76286811 13.618743 -1.8276933 128.0 +-0.67914259 13.620198 -1.8272867 128.0 +-0.59594756 13.633018 -1.8285066 128.0 +-0.51280683 13.650279 -1.8304042 128.0 +-0.42925867 13.6601 -1.8313529 128.0 +-0.34520814 13.653563 -1.8301331 128.0 +-0.26117805 13.642547 -1.828371 128.0 +-0.17732199 13.632995 -1.8268801 128.0 +-0.093777537 13.649678 -1.8290488 128.0 +-0.010012331 13.636126 -1.8271512 128.0 +0.07369481 13.642865 -1.8281 128.0 +0.15745008 13.646119 -1.8286421 128.0 +0.24110821 13.640934 -1.8281 128.0 +0.32489711 13.64316 -1.8286421 128.0 +0.4089002 13.650812 -1.8299975 128.0 +0.49243805 13.642106 -1.8291843 128.0 +0.57626051 13.641797 -1.8295909 128.0 +0.65990633 13.637015 -1.8294554 128.0 +0.74286795 13.619848 -1.8276933 128.0 +0.82792377 13.639757 -1.8310819 128.0 +0.91430891 13.674952 -1.8366392 128.0 +0.99935371 13.684895 -1.8388078 128.0 +1.0821309 13.66369 -1.8367747 128.0 +1.1642643 13.637049 -1.8340638 128.0 +1.2480081 13.630635 -1.8341993 128.0 +1.3332587 13.639484 -1.8365036 128.0 +1.4191769 13.652727 -1.8394855 128.0 +1.5032471 13.646716 -1.8398921 128.0 +1.587068 13.63822 -1.8400277 128.0 +1.6713233 13.633142 -1.8407054 128.0 +1.7549433 13.622631 -1.8407054 128.0 +1.838497 13.611606 -1.8407054 128.0 +1.9219817 13.600069 -1.8407054 128.0 +2.0066957 13.596842 -1.8419253 128.0 +2.0887308 13.575459 -1.8407054 128.0 +2.1721456 13.563366 -1.8408409 128.0 +2.2527256 13.534145 -1.8386723 128.0 +2.3355584 13.519092 -1.8385367 128.0 +2.4200377 13.513284 -1.8397566 128.0 +2.5052559 13.510844 -1.8415186 128.0 +2.5961328 13.537059 -1.847347 128.0 +2.6847296 13.549059 -1.8512777 128.0 +2.7666235 13.526507 -1.8504645 128.0 +2.8538623 13.529635 -1.8533108 128.0 +2.9378767 13.51671 -1.8539885 128.0 +3.0183787 13.487794 -1.8524976 128.0 +3.095747 13.445848 -1.8492446 128.0 +3.1672378 13.380321 -1.8427385 128.0 +3.2570035 13.392405 -1.8472115 128.0 +3.3271163 13.324104 -1.8404343 128.0 +3.4033992 13.282324 -1.8374524 128.0 +3.4833231 13.255442 -1.8366392 128.0 +3.5661373 13.239559 -1.8374524 128.0 +3.657584 13.254677 -1.8427385 128.0 +3.7493501 13.269169 -1.8480247 128.0 +3.8240921 13.223071 -1.8447716 128.0 +3.9096525 13.214559 -1.8469404 128.0 +4.0058665 13.240582 -1.8541241 128.0 +4.0905461 13.227112 -1.8557507 128.0 +4.17342 13.207433 -1.8565639 128.0 +4.2485995 13.163661 -1.8539885 128.0 +4.3258796 13.126993 -1.8524976 128.0 +4.4038172 13.09269 -1.8514132 128.0 +4.4895363 13.081354 -1.8537174 128.0 +4.5772462 13.075068 -1.856835 128.0 +4.6613841 13.057935 -1.8584615 128.0 +4.7498879 13.052363 -1.86185 128.0 +4.8433218 13.059202 -1.8671362 128.0 +4.9349165 13.059823 -1.8716091 128.0 +5.0252771 13.056112 -1.8755399 128.0 +5.1143317 13.048093 -1.8789284 128.0 +5.2038441 13.040392 -1.8824525 128.0 +5.2964363 13.039427 -1.887061 128.0 +5.3831573 13.023165 -1.8895007 128.0 +5.4744868 13.017288 -1.8935671 128.0 +5.58426 13.053594 -1.9040039 128.0 +5.6840124 13.064509 -1.9107809 128.0 +5.7744889 13.052945 -1.9143051 128.0 +5.8581285 13.0254 -1.915525 128.0 +5.9544168 13.025254 -1.9209466 128.0 +6.0475836 13.017227 -1.925284 128.0 +6.1501799 13.028257 -1.9326034 128.0 +6.2467122 13.025116 -1.9378895 128.0 +6.3412671 13.016826 -1.942498 128.0 +6.4311228 12.998096 -1.9456154 128.0 +6.5298824 12.99646 -1.9514438 128.0 +6.6284127 12.993217 -1.9571365 128.0 +6.7298827 12.994531 -1.9636426 128.0 +6.832078 12.995965 -1.9702842 128.0 +6.9284811 12.985269 -1.9751637 128.0 +7.0297265 12.98259 -1.9813987 128.0 +7.1283364 12.973946 -1.9868203 128.0 +7.2381997 12.984484 -1.9953595 128.0 +7.3513851 12.999333 -2.0047121 128.0 +7.455658 12.996953 -2.0114892 128.0 +7.557188 12.988642 -2.017453 128.0 +7.6508398 12.96592 -2.0212481 128.0 +7.7526364 12.956141 -2.0272121 128.0 +7.856142 12.948139 -2.0335827 128.0 +7.978528 12.969734 -2.0448327 128.0 +8.088891 12.970136 -2.0528297 128.0 +8.1942635 12.961294 -2.0594711 128.0 +8.3062458 12.961658 -2.0677392 128.0 +8.4298725 12.978581 -2.0788538 128.0 +8.5828896 13.038335 -2.097152 128.0 +8.6929693 13.030758 -2.1046069 128.0 +8.7833033 12.992769 -2.1071823 128.0 +8.8623009 12.937814 -2.1070466 128.0 +8.9031057 12.827843 -2.0978298 128.0 +8.9457464 12.721913 -2.0892906 128.0 +8.9673042 12.587701 -2.0760074 128.0 +9.0501699 12.540476 -2.0773628 128.0 +9.1351318 12.495907 -2.0792606 128.0 +9.2110443 12.438824 -2.0791249 128.0 +9.2794657 12.371767 -2.0773628 128.0 +9.3342266 12.286983 -2.072619 128.0 +9.3852758 12.198069 -2.0671971 128.0 +9.4447212 12.120713 -2.0638087 128.0 +9.5023441 12.041533 -2.060149 128.0 +9.5636806 11.967521 -2.0574381 128.0 +9.6363087 11.907844 -2.0573025 128.0 +9.6909819 11.826268 -2.0533719 128.0 +9.7500782 11.75057 -2.0505254 128.0 +9.8086119 11.674594 -2.0476789 128.0 +9.8704309 11.602869 -2.045646 128.0 +9.9349737 11.53458 -2.0442905 128.0 +9.9983988 11.465189 -2.0427995 128.0 +10.062658 11.396939 -2.0415797 128.0 +10.125135 11.326856 -2.0400887 128.0 +10.187133 11.256435 -2.0385976 128.0 +10.246639 11.183489 -2.0367 128.0 +10.294853 11.098614 -2.0326338 128.0 +10.340379 11.011402 -2.0281608 128.0 +10.394096 10.933386 -2.02545 128.0 +10.446559 10.854412 -2.0226038 128.0 +10.501902 10.778754 -2.0204349 128.0 +10.555318 10.701416 -2.0179951 128.0 +10.612381 10.628035 -2.0163686 128.0 +10.668941 10.554357 -2.0147421 128.0 +10.727124 10.482462 -2.0135224 128.0 +10.780549 10.406122 -2.0114892 128.0 +10.833441 10.329523 -2.0094559 128.0 +10.88652 10.253345 -2.0075583 128.0 +10.944152 10.181629 -2.0066097 128.0 +10.999124 10.107582 -2.0052543 128.0 +11.052133 10.031911 -2.0036278 128.0 +11.095775 9.9480333 -2.0003746 128.0 +11.130646 9.8567734 -1.9956306 128.0 +11.171527 9.7713318 -1.9921066 128.0 +11.214778 9.6883507 -1.9891247 128.0 +11.261201 9.6084232 -1.9868203 128.0 +11.307066 9.5282907 -1.9845161 128.0 +11.350087 9.4460564 -1.9818053 128.0 +11.385636 9.3579912 -1.9778745 128.0 +11.422072 9.2710953 -1.9742149 128.0 +11.458644 9.1847239 -1.9706908 128.0 +11.498471 9.1013288 -1.9678444 128.0 +11.546293 9.0245028 -1.966489 128.0 +11.575566 8.9335098 -1.9620161 128.0 +11.646712 8.8749266 -1.9648625 128.0 +11.694614 8.7985306 -1.9637781 128.0 +11.728498 8.7118378 -1.9603896 128.0 +11.776938 8.6361942 -1.9595762 128.0 +11.819274 8.5562162 -1.9578142 128.0 +11.848981 8.4674034 -1.9540191 128.0 +11.869139 8.3722668 -1.9487329 128.0 +11.894267 8.2811651 -1.9443955 128.0 +11.932608 8.1996107 -1.9423624 128.0 +11.977775 8.1229019 -1.9415492 128.0 +12.019156 8.0437441 -1.9401937 128.0 +12.047618 7.9561944 -1.9368051 128.0 +12.079608 7.8713036 -1.9340943 128.0 +12.122677 7.7938213 -1.9332811 128.0 +12.146845 7.7044315 -1.9294858 128.0 +12.193049 7.6292295 -1.9293503 128.0 +12.210967 7.5365772 -1.9247419 128.0 +12.234978 7.4481149 -1.9212177 128.0 +12.253266 7.3565822 -1.9168804 128.0 +12.284534 7.2731824 -1.9147117 128.0 +12.311818 7.1876783 -1.9120009 128.0 +12.349678 7.1085391 -1.911052 128.0 +12.392201 7.0321398 -1.9109164 128.0 +12.418688 6.9467797 -1.9083412 128.0 +12.443726 6.8608813 -1.9056304 128.0 +12.456861 6.7687879 -1.9011574 128.0 +12.519122 6.7034516 -1.9044105 128.0 +12.549502 6.6209617 -1.902784 128.0 +12.602199 6.5502319 -1.9046816 128.0 +12.601586 6.4520116 -1.8984466 128.0 +12.580783 6.3442307 -1.8892297 128.0 +12.615924 6.2651544 -1.8886875 128.0 +12.628317 6.1750045 -1.8847568 128.0 +12.674003 6.1012702 -1.8859767 128.0 +12.698667 6.0174489 -1.8840791 128.0 +12.721881 5.9331365 -1.8820459 128.0 +12.740037 5.8466992 -1.879335 128.0 +12.759418 5.7610784 -1.8768953 128.0 +12.789095 5.6802664 -1.8760821 128.0 +12.810997 5.5961342 -1.8741845 128.0 +12.828707 5.5103831 -1.8717446 128.0 +12.855887 5.4288659 -1.8707958 128.0 +12.883466 5.3476024 -1.8699826 128.0 +12.901358 5.2624626 -1.8678139 128.0 +12.874546 5.1596122 -1.8591392 128.0 +12.945604 5.0961251 -1.8649676 128.0 +12.980327 5.0180254 -1.8655097 128.0 +13.011799 4.9386368 -1.8656453 128.0 +13.01029 4.8469439 -1.8610368 128.0 +13.077006 4.7806315 -1.8664585 128.0 +13.116352 4.7039819 -1.8679495 128.0 +13.192636 4.6401796 -1.8748622 128.0 +13.189013 4.548161 -1.8702537 128.0 +13.220426 4.4684181 -1.8707958 128.0 +13.243833 4.3859692 -1.8702537 128.0 +13.26861 4.3040128 -1.8699826 128.0 +13.308933 4.227016 -1.8720157 128.0 +13.357326 4.1523337 -1.8752688 128.0 +13.342741 4.0581865 -1.869576 128.0 +13.461405 4.004209 -1.8829947 128.0 +13.531386 3.9348166 -1.8895007 128.0 +13.535261 3.8460279 -1.8866544 128.0 +13.466956 3.7374666 -1.8736422 128.0 +13.489635 3.6547644 -1.8736422 128.0 +13.51468 3.5726845 -1.8740489 128.0 +13.561292 3.4961243 -1.877573 128.0 +13.602667 3.4179189 -1.8804194 128.0 +13.603173 3.3294432 -1.877573 128.0 +13.638767 3.2495875 -1.8797417 128.0 +13.669066 3.1683016 -1.8812326 128.0 +13.686316 3.0839345 -1.8809615 128.0 +13.705949 3.0001106 -1.8810971 128.0 +13.740575 2.9194572 -1.8834014 128.0 +13.757259 2.8348916 -1.8832659 128.0 +13.798684 2.755276 -1.8866544 128.0 +13.824085 2.6722496 -1.8878742 128.0 +13.851909 2.5895615 -1.8895007 128.0 +13.871437 2.5052235 -1.8900429 128.0 +13.881667 2.4192121 -1.8893652 128.0 +13.887456 2.3325131 -1.8881453 128.0 +13.900529 2.2470992 -1.8880098 128.0 +13.916013 2.1620691 -1.8882809 128.0 +13.955476 2.0805867 -1.8919405 128.0 +13.959152 1.9936574 -1.8907206 128.0 +13.977012 1.9087726 -1.8915339 128.0 +13.988461 1.8229754 -1.8915339 128.0 +14.02593 1.7404044 -1.8951936 128.0 +14.0452 1.655354 -1.8964134 128.0 +14.063955 1.5701327 -1.8976333 128.0 +14.10584 1.4872376 -1.9021062 128.0 +14.129489 1.4021257 -1.9041394 128.0 +14.15065 1.316596 -1.9059014 128.0 +14.160437 1.229916 -1.9061725 128.0 +14.167717 1.143006 -1.9061725 128.0 +14.180391 1.0564948 -1.9069858 128.0 +14.202422 0.97054696 -1.9091544 128.0 +14.206133 0.8832612 -1.9088833 128.0 +14.210296 0.796022 -1.9087478 128.0 +14.210954 0.70861679 -1.9082056 128.0 +14.206126 0.62101698 -1.9069858 128.0 +14.234421 0.5347687 -1.9103743 128.0 +14.228522 0.44713756 -1.9091544 128.0 +14.194351 0.35889694 -1.9041394 128.0 +14.226004 0.27236509 -1.9082056 128.0 +14.255146 0.18543245 -1.9120009 128.0 +14.256016 0.097961031 -1.9120009 128.0 +14.270219 0.010496514 -1.9138985 128.0 +14.257135 -0.076994903 -1.9121364 128.0 +14.257385 -0.16448499 -1.912272 128.0 +14.26007 -0.2520335 -1.9128141 128.0 +14.26915 -0.33978602 -1.9143051 128.0 +14.24699 -0.4267408 -1.9115942 128.0 +14.210439 -0.51293647 -1.9069858 128.0 +14.24761 -0.60183364 -1.9125431 128.0 +14.257504 -0.68991405 -1.9144406 128.0 +14.244098 -0.77689809 -1.9132208 128.0 +14.236096 -0.86410356 -1.9128141 128.0 +14.238435 -0.95196688 -1.9138985 128.0 +14.211575 -1.0377996 -1.911052 128.0 +14.228643 -1.1268573 -1.9143051 128.0 +14.217512 -1.2138044 -1.9137629 128.0 +14.200917 -1.3002058 -1.9125431 128.0 +14.222255 -1.3902073 -1.9166093 128.0 +14.214442 -1.4775497 -1.9167448 128.0 +14.205109 -1.5647399 -1.9167448 128.0 +14.177526 -1.6498106 -1.9143051 128.0 +14.173036 -1.7374943 -1.9151183 128.0 +14.153264 -1.8232867 -1.9138985 128.0 +14.138865 -1.9096974 -1.9134918 128.0 +14.103336 -1.9930892 -1.9102387 128.0 +13.449818 -1.9850014 -1.8215939 128.0 +12.98497 -1.9978952 -1.7589732 128.0 +12.717128 -2.0366476 -1.7235966 128.0 +12.44149 -2.0708885 -1.6871356 128.0 +12.292841 -2.1237483 -1.6682951 128.0 +12.223989 -2.189182 -1.6605692 128.0 +11.225439 -2.0815523 -1.5235356 128.0 +10.876756 -2.0860207 -1.4767734 128.0 +10.516789 -2.0839803 -1.4283847 128.0 +10.274723 -2.1016231 -1.3963966 128.0 +9.7555838 -2.0579 -1.3256433 128.0 +9.1444426 -1.9876904 -1.2418779 128.0 +8.8961601 -1.990975 -1.2088056 128.0 +8.7959137 -2.0252969 -1.1964712 128.0 +8.5789242 -2.0308533 -1.1677362 128.0 +8.2977037 -2.0181401 -1.1299198 128.0 +8.1323233 -2.0308552 -1.1083684 128.0 +7.8893642 -2.0217006 -1.0758382 128.0 +8.039712 -2.1128738 -1.0988804 128.0 +7.6831479 -2.0696659 -1.0502206 128.0 +7.8107014 -2.1555076 -1.0701454 128.0 +7.5170145 -2.1241956 -1.0302958 128.0 +7.675159 -2.2198191 -1.0546936 128.0 +7.5340843 -2.2292094 -1.0365309 128.0 +7.522161 -2.2759695 -1.0368019 128.0 +7.4436889 -2.3021786 -1.027585 128.0 +7.4464283 -2.3531818 -1.0300248 128.0 +7.3290744 -2.3656604 -1.0152507 128.0 +7.3802915 -2.432291 -1.0247387 128.0 +7.2290611 -2.4317336 -1.005085 128.0 +7.2149415 -2.476366 -1.0052205 128.0 +7.2042866 -2.5222263 -1.0058982 128.0 +7.1588154 -2.5557253 -1.0015608 128.0 +6.9586511 -2.5325229 -0.9747234 128.0 +7.0470238 -2.6137559 -0.98990417 128.0 +6.9604149 -2.6303322 -0.97960293 128.0 +6.9589391 -2.6786849 -0.98177159 128.0 +6.8934817 -2.7021725 -0.97458786 128.0 +7.0092831 -2.7972941 -0.99410599 128.0 +6.8423619 -2.7794788 -0.97201252 128.0 +6.7848902 -2.8047585 -0.96604866 128.0 +6.8113914 -2.8647721 -0.97255468 128.0 +6.7463169 -2.8862498 -0.96550649 128.0 +6.7121267 -2.9204757 -0.96306676 128.0 +6.6786776 -2.9547918 -0.9607625 128.0 +6.6721683 -3.0009985 -0.96252453 128.0 +6.614882 -3.0241699 -0.95669621 128.0 +6.5791292 -3.0567703 -0.95412093 128.0 +6.6184874 -3.1245716 -0.96293116 128.0 +6.5759635 -3.1539843 -0.95940709 128.0 +5.4217191 -2.6415002 -0.78672576 128.0 +5.400969 -2.6725209 -0.786048 128.0 +6.5628314 -3.2976208 -0.96645528 128.0 +6.5142317 -3.3234208 -0.96211791 128.0 +6.4910774 -3.3619618 -0.96171129 128.0 +6.4536638 -3.3929679 -0.95913601 128.0 +6.2849941 -3.3536849 -0.93622929 128.0 +6.264298 -3.3921859 -0.93622929 128.0 +6.3640666 -3.4968719 -0.95506972 128.0 +6.3528752 -3.5416439 -0.95669621 128.0 +6.2835908 -3.5537348 -0.9492414 128.0 +6.2676835 -3.595674 -0.95019019 128.0 +6.232657 -3.6265905 -0.94815701 128.0 +6.1565289 -3.6330457 -0.93961787 128.0 +6.1188173 -3.6615963 -0.93717808 128.0 +6.1114821 -3.7083223 -0.93961787 128.0 +6.0421991 -3.717201 -0.932163 128.0 +6.0840106 -3.7945743 -0.94259977 128.0 +6.0656376 -3.8350103 -0.94341302 128.0 +6.0570078 -3.881778 -0.94585282 128.0 +6.016458 -3.9080768 -0.94314194 128.0 +5.9435382 -3.9127796 -0.93514496 128.0 +5.9433203 -3.9651194 -0.93907565 128.0 +5.9082079 -3.9942989 -0.93731362 128.0 +5.9203715 -4.0556707 -0.94341302 128.0 +5.8677006 -4.0727148 -0.93880457 128.0 +5.8158545 -4.0898356 -0.93433172 128.0 +5.8269639 -4.1513119 -0.94043112 128.0 +5.8616385 -4.2304707 -0.95059681 128.0 +5.8915601 -4.3072863 -0.9600848 128.0 +5.8721862 -4.3486614 -0.96130466 128.0 +5.6781516 -4.2591777 -0.93270516 128.0 +5.4956985 -4.1752725 -0.90586776 128.0 +5.4676204 -4.2071028 -0.90546107 128.0 +5.7699485 -4.4963341 -0.96238899 128.0 +5.708806 -4.5052624 -0.95656067 128.0 +5.6903429 -4.5476279 -0.95818716 128.0 +5.6068778 -4.5375848 -0.94842809 128.0 +5.6279774 -4.6120915 -0.95710284 128.0 +5.613297 -4.6579247 -0.95954263 128.0 +5.5777831 -4.6865439 -0.95832276 128.0 +5.5315647 -4.7059155 -0.95520526 128.0 +5.4838181 -4.7236032 -0.95181668 128.0 +5.4046998 -4.7135344 -0.94273531 128.0 +5.244957 -4.6311989 -0.91887981 128.0 +5.2784915 -4.7187576 -0.93026543 128.0 +8.7844353 -7.950078 -1.5824966 128.0 +8.7267227 -7.9957972 -1.5808702 128.0 +3.5439742 -3.2876914 -0.62299019 128.0 +3.5143452 -3.3005581 -0.62122816 128.0 +3.4933093 -3.321377 -0.62109262 128.0 +3.4828582 -3.3523674 -0.62299019 128.0 +3.4239016 -3.3363397 -0.61567092 128.0 +3.3822038 -3.3364136 -0.61160463 128.0 +3.3532548 -3.3487029 -0.60997814 128.0 +3.320102 -3.3565371 -0.60753834 128.0 +7.788744 -7.9706812 -1.4862614 128.0 +7.7259278 -8.0040655 -1.4835505 128.0 +7.6588936 -8.0326767 -1.4800264 128.0 +7.5483236 -8.0146093 -1.4678276 128.0 +7.4720097 -8.0317593 -1.4624058 128.0 +7.3883963 -8.0402508 -1.4554932 128.0 +2.5849071 -2.8482277 -0.48785418 128.0 +7.1747503 -8.0026941 -1.4320443 128.0 +2.5602703 -2.8916016 -0.49002287 128.0 +2.5509593 -2.9169512 -0.49178493 128.0 +7.1739106 -8.3043394 -1.4629481 128.0 +7.1382556 -8.3662901 -1.4662011 128.0 +7.1519108 -8.4872093 -1.4800264 128.0 +7.0958967 -8.5263634 -1.4792131 128.0 +7.0755315 -8.608778 -1.4861258 128.0 +7.0494256 -8.6851082 -1.4919542 128.0 +7.0245075 -8.7637596 -1.4981891 128.0 +7.0136471 -8.8610754 -1.5076771 128.0 +7.0396843 -9.0069838 -1.5255687 128.0 +7.0242391 -9.1017752 -1.5345145 128.0 +6.9778676 -9.1573124 -1.5366832 128.0 +6.8965297 -9.1667032 -1.5309905 128.0 +6.8549242 -9.2287312 -1.534379 128.0 +6.795239 -9.2666235 -1.5337013 128.0 +6.7597494 -9.3378372 -1.5387163 128.0 +6.6942616 -9.3678532 -1.5368187 128.0 +6.6286597 -9.397418 -1.5349212 128.0 +6.5425668 -9.3972588 -1.528144 128.0 +6.497128 -9.4551907 -1.531126 128.0 +6.4412141 -9.4981585 -1.5316682 128.0 +6.381711 -9.5358553 -1.5313971 128.0 +6.3148899 -9.5624323 -1.5293639 128.0 +6.2463603 -9.5860577 -1.5269241 128.0 +6.2029629 -9.6483727 -1.5308549 128.0 +6.1340923 -9.6711922 -1.5284151 128.0 +6.0819931 -9.7204065 -1.5303128 128.0 +6.0196333 -9.7533264 -1.5296351 128.0 +5.9493704 -9.7731533 -1.5269241 128.0 +5.8750114 -9.7856894 -1.523129 128.0 +5.8199048 -9.8300791 -1.5244844 128.0 +5.7639751 -9.8733053 -1.5257043 128.0 +5.7092166 -9.9187908 -1.5273308 128.0 +5.6418915 -9.9424324 -1.5255687 128.0 +5.5740075 -9.9647579 -1.5236712 128.0 +5.5084543 -9.9909639 -1.5224513 128.0 +5.4508319 -10.031539 -1.5235356 128.0 +5.3891768 -10.064795 -1.5235356 128.0 +5.313911 -10.072262 -1.5196048 128.0 +5.2428694 -10.087095 -1.516894 128.0 +1.375152 -2.6865344 -0.37454054 128.0 +5.0950451 -10.103788 -1.5097102 128.0 +5.0593958 -10.188103 -1.5178428 128.0 +4.9941759 -10.213614 -1.5170295 128.0 +4.9296932 -10.240495 -1.5164874 128.0 +4.8633718 -10.263388 -1.515403 128.0 +4.796536 -10.284954 -1.5141832 128.0 +4.729619 -10.306087 -1.5129633 128.0 +4.656507 -10.313242 -1.5097102 128.0 +4.5939431 -10.343431 -1.5099813 128.0 +4.5331669 -10.377779 -1.5109302 128.0 +4.4709687 -10.40904 -1.5114723 128.0 +4.4043179 -10.429889 -1.5105236 128.0 +4.3390989 -10.453972 -1.5101168 128.0 +4.2718787 -10.47306 -1.5090325 128.0 +4.2016397 -10.48436 -1.5068638 128.0 +4.1404963 -10.518241 -1.5080837 128.0 +4.0751648 -10.5416 -1.5078126 128.0 +4.0037255 -10.548807 -1.5052373 128.0 +3.9306221 -10.550893 -1.5019844 128.0 +3.8804381 -10.614824 -1.5078126 128.0 +1.1653794 -3.2503781 -0.43404377 128.0 +3.7462692 -10.651363 -1.5063217 128.0 +1.1528616 -3.3440485 -0.4455649 128.0 +1.1408875 -3.3764014 -0.44922453 128.0 +1.1083115 -3.3475981 -0.44407392 128.0 +3.4360497 -10.593076 -1.485177 128.0 +1.052151 -3.3137329 -0.43729678 128.0 +1.018268 -3.2766056 -0.4310618 128.0 +0.98459244 -3.2382412 -0.42469132 128.0 +0.96300942 -3.2385237 -0.42387804 128.0 +0.94561017 -3.2529337 -0.42509794 128.0 +0.95054936 -3.346354 -0.43756786 128.0 +0.92204922 -3.323483 -0.43350157 128.0 +2.9333808 -10.827331 -1.4962915 128.0 +2.871449 -10.862367 -1.4987313 128.0 +2.8121655 -10.908563 -1.5027976 128.0 +2.7350371 -10.885255 -1.4971048 128.0 +1.9982306 -8.1648836 -1.1116215 128.0 +0.76579529 -3.21542 -0.41384789 128.0 +2.5333169 -10.929893 -1.4965626 128.0 +1.9887489 -8.8265944 -1.1994531 128.0 +2.3915834 -10.926283 -1.4918187 128.0 +2.324702 -10.941721 -1.4919542 128.0 +1.7377477 -8.4337683 -1.1396788 128.0 +1.677235 -8.4005508 -1.1335794 128.0 +1.6258466 -8.4116573 -1.1337149 128.0 +1.5789375 -8.4467955 -1.137239 128.0 +1.978991 -10.958158 -1.4850415 128.0 +1.9122262 -10.973022 -1.4854481 128.0 +1.842563 -10.97087 -1.4835505 128.0 +1.3106 -8.1084003 -1.0853262 128.0 +1.7061214 -10.981885 -1.4820596 128.0 +1.294436 -8.6834164 -1.162721 128.0 +1.5766926 -11.040247 -1.4873457 128.0 +1.5077144 -11.040878 -1.4861258 128.0 +1.4355863 -11.016519 -1.4815173 128.0 +1.3699157 -11.040852 -1.4836861 128.0 +1.3021445 -11.049049 -1.4836861 128.0 +1.2350941 -11.063724 -1.4846349 128.0 +1.1663537 -11.063211 -1.4835505 128.0 +1.0998193 -11.083962 -1.4854481 128.0 +1.031146 -11.083596 -1.4844993 128.0 +0.96191829 -11.075896 -1.4826018 128.0 +0.89505559 -11.095416 -1.4844993 128.0 +0.8272531 -11.10465 -1.4850415 128.0 +0.75808704 -11.094691 -1.4830084 128.0 +0.68845928 -11.074412 -1.4796197 128.0 +0.61955249 -11.061611 -1.4773155 128.0 +0.55196428 -11.071141 -1.4781288 128.0 +0.48376286 -11.068381 -1.4773155 128.0 +0.41528109 -11.05629 -1.4752824 128.0 +0.34730858 -11.054668 -1.4747403 128.0 +0.27804279 -11.000135 -1.4670143 128.0 +0.21122576 -11.037296 -1.4718938 128.0 +0.14354987 -11.042347 -1.4724361 128.0 +0.075717412 -11.032122 -1.470945 128.0 +0.0080226455 -11.030397 -1.4706739 128.0 +-0.059743915 -11.046091 -1.4728427 128.0 +-0.12754314 -11.047498 -1.4731138 128.0 +-0.19579887 -11.073254 -1.4767734 128.0 +-0.2636216 -11.066892 -1.4760957 128.0 +-0.331018 -11.04823 -1.4737915 128.0 +-0.39937383 -11.061833 -1.4759601 128.0 +-0.46611223 -11.032447 -1.4723005 128.0 +-0.5351373 -11.057089 -1.4760957 128.0 +-0.60297227 -11.053597 -1.4760957 128.0 +-0.67366451 -11.097159 -1.4826018 128.0 +-0.74260157 -11.105668 -1.4843638 128.0 +-0.81246185 -11.124618 -1.4876168 128.0 +-0.88054955 -11.117448 -1.4873457 128.0 +-0.94849557 -11.108874 -1.4869391 128.0 +-1.015015 -11.085086 -1.4844993 128.0 +-1.0813745 -11.061886 -1.4821951 128.0 +-1.1496383 -11.058984 -1.4827373 128.0 +-1.2240889 -11.111795 -1.4910053 128.0 +-1.2905291 -11.089314 -1.4889722 128.0 +-1.3632483 -11.119539 -1.4942584 128.0 +-1.4349946 -11.138479 -1.4980536 128.0 +-1.5027816 -11.125538 -1.4975114 128.0 +-1.567553 -11.091581 -1.4941229 128.0 +-1.6332662 -11.066072 -1.4919542 128.0 +-1.6982734 -11.037236 -1.4893788 128.0 +-1.7622052 -11.003129 -1.4861258 128.0 +-1.8311497 -11.000905 -1.4873457 128.0 +-1.9021569 -11.009965 -1.4901921 128.0 +-1.9684546 -10.991259 -1.4892433 128.0 +-2.0403738 -11.003328 -1.4926319 128.0 +-2.1201649 -11.054823 -1.5015777 128.0 +-2.1925774 -11.06493 -1.5048307 128.0 +-2.2687664 -11.092037 -1.5105236 128.0 +-2.3433259 -11.10893 -1.5148609 128.0 +-2.4110241 -11.092406 -1.5145898 128.0 +-2.4775262 -11.070636 -1.513641 128.0 +-2.5474081 -11.063915 -1.5148609 128.0 +-2.6090858 -11.022044 -1.5112013 128.0 +-2.6719847 -10.986573 -1.5084903 128.0 +-2.7424667 -10.982468 -1.5102524 128.0 +-2.8070974 -10.954876 -1.5087614 128.0 +-2.8762767 -10.945112 -1.5098457 128.0 +-2.9459572 -10.936825 -1.5112013 128.0 +-3.0093195 -10.905171 -1.5093036 128.0 +-3.0705187 -10.866479 -1.5064572 128.0 +-3.133008 -10.833158 -1.5044241 128.0 +-3.1968906 -10.805179 -1.5032042 128.0 +-3.2616954 -10.780618 -1.5025265 128.0 +-3.3356853 -10.785958 -1.5061861 128.0 +-3.404192 -10.772846 -1.5072705 128.0 +-3.4647515 -10.734783 -1.5048307 128.0 +-3.5259027 -10.699207 -1.5027976 128.0 +-3.5936964 -10.683945 -1.5037464 128.0 +-3.6569328 -10.655133 -1.5027976 128.0 +-3.7389369 -10.680186 -1.5097102 128.0 +-3.810394 -10.67384 -1.51215 128.0 +-3.8778486 -10.655845 -1.5129633 128.0 +-3.9379911 -10.617915 -1.5109302 128.0 +-3.9953632 -10.573163 -1.5079482 128.0 +-4.0583844 -10.543825 -1.5072705 128.0 +-4.1273422 -10.529795 -1.5088969 128.0 +-4.191874 -10.504272 -1.5088969 128.0 +-4.2532654 -10.471009 -1.5078126 128.0 +-1.497961 -3.6231759 -0.49801987 128.0 +-1.5259253 -3.6276159 -0.50005305 128.0 +-4.4569716 -10.418274 -1.511879 128.0 +-4.5164657 -10.380737 -1.510388 128.0 +-4.5720592 -10.334707 -1.5076771 128.0 +-4.6366048 -10.30917 -1.5080837 128.0 +-4.0337334 -8.8234596 -1.2889112 128.0 +-4.7615128 -10.2488 -1.5076771 128.0 +-1.5288742 -3.2379923 -0.45152876 128.0 +-1.555568 -3.2428441 -0.45369744 128.0 +-1.6366147 -3.3588288 -0.47280896 128.0 +-1.6730096 -3.3806927 -0.47768849 128.0 +-1.6919426 -3.3668222 -0.47714633 128.0 +-1.7161708 -3.3634379 -0.47823066 128.0 +-1.7408768 -3.3607626 -0.47945055 128.0 +-1.7596211 -3.3465097 -0.47890836 128.0 +-5.3889637 -10.099736 -1.5277374 128.0 +-5.4201703 -10.009848 -1.5189271 128.0 +-4.8350563 -8.7997875 -1.3352668 128.0 +-5.569612 -9.9910431 -1.5265175 128.0 +-5.6308112 -9.9566803 -1.5265175 128.0 +-5.7011647 -9.9382725 -1.5290928 128.0 +-5.7729988 -9.9219437 -1.5320748 128.0 +-4.8157272 -8.1609478 -1.2580075 128.0 +-1.9309673 -3.2264311 -0.47606197 128.0 +-1.9522697 -3.2170634 -0.47646859 128.0 +-6.0178714 -9.782342 -1.5328881 128.0 +-6.0856452 -9.757844 -1.5349212 128.0 +-6.1496391 -9.7270184 -1.5360055 128.0 +-6.1953092 -9.6674128 -1.5324814 128.0 +-6.2523518 -9.6258936 -1.5319393 128.0 +-6.312932 -9.5898314 -1.5323459 128.0 +-6.371655 -9.5509157 -1.5323459 128.0 +-6.440681 -9.527236 -1.5349212 128.0 +-6.5040565 -9.494894 -1.536141 128.0 +-6.5638885 -9.4572487 -1.5365477 128.0 +-6.6354704 -9.4362469 -1.5398008 128.0 +-6.7041674 -9.4106874 -1.542376 128.0 +-6.7548265 -9.3597326 -1.5407495 128.0 +-6.8285012 -9.3405056 -1.5445447 128.0 +-6.8998351 -9.3175411 -1.5477977 128.0 +-6.9497428 -9.2655172 -1.5461712 128.0 +-7.0052657 -9.2211227 -1.5459001 128.0 +-7.0617137 -9.1779652 -1.5459001 128.0 +-7.1215491 -9.1391516 -1.5467134 128.0 +-7.1879253 -9.1085052 -1.5490177 128.0 +-7.2480083 -9.0696478 -1.5499665 128.0 +-7.3172336 -9.0419483 -1.5529484 128.0 +-7.3889031 -9.0168056 -1.5564724 128.0 +-7.447886 -8.975873 -1.5572857 128.0 +-7.5047326 -8.9322805 -1.5576923 128.0 +-7.5638924 -8.8913469 -1.5586412 128.0 +-7.6241255 -8.8515253 -1.5598611 128.0 +-7.6848054 -8.8120451 -1.5612165 128.0 +-7.7361073 -8.761755 -1.5606743 128.0 +-7.8035889 -8.7296343 -1.5635207 128.0 +-7.8782797 -8.7050962 -1.5678581 128.0 +-7.949616 -8.6763163 -1.5715177 128.0 +-8.0242634 -8.6506205 -1.575855 128.0 +-8.0900774 -8.6149445 -1.5784304 128.0 +-8.1598511 -8.5830946 -1.5818189 128.0 +-8.1979351 -8.5178738 -1.5789726 128.0 +-8.2763186 -8.4943781 -1.5841231 128.0 +-8.3428936 -8.4582491 -1.5869696 128.0 +-8.4030361 -8.4153128 -1.5885961 128.0 +-8.4601479 -8.3691683 -1.5896804 128.0 +-8.5184269 -8.3240252 -1.5910358 128.0 +-8.5622129 -8.264719 -1.5896804 128.0 +-8.6134806 -8.2127104 -1.589816 128.0 +-8.6680384 -8.1637802 -1.5906292 128.0 +-8.7339249 -8.125288 -1.5936111 128.0 +-8.7916412 -8.0789194 -1.5951021 128.0 +-8.8513174 -8.0341454 -1.5969998 128.0 +-8.9092999 -7.9876204 -1.5986263 128.0 +-8.9863281 -7.9577646 -1.6037768 128.0 +-9.0618334 -7.9259591 -1.6086564 128.0 +-9.1252899 -7.8831615 -1.6113672 128.0 +-9.1561537 -7.8122301 -1.6082498 128.0 +-9.2046738 -7.7565403 -1.6083853 128.0 +-9.2627554 -7.7087889 -1.6102829 128.0 +-9.3160048 -7.6568418 -1.6113672 128.0 +-9.37358 -7.6082773 -1.6132648 128.0 +-9.4231796 -7.5530977 -1.613807 128.0 +-9.4910984 -7.5123539 -1.6176022 128.0 +-9.5479431 -7.4625182 -1.6194998 128.0 +-9.5998278 -7.4086356 -1.6205841 128.0 +-9.6529856 -7.355598 -1.6219395 128.0 +-9.7208967 -7.3135047 -1.6258703 128.0 +-9.7504768 -7.2424951 -1.6232949 128.0 +-9.8115101 -7.1948352 -1.6261414 128.0 +-9.8651028 -7.1414695 -1.6277679 128.0 +-9.9079304 -7.0802279 -1.6276324 128.0 +-9.9609022 -7.026154 -1.6292589 128.0 +-10.037163 -6.9881144 -1.6348162 128.0 +-10.097816 -6.9387407 -1.6377981 128.0 +-10.116423 -6.8605242 -1.6338673 128.0 +-10.181382 -6.8137517 -1.6376625 128.0 +-10.256068 -6.7729921 -1.6430842 128.0 +-10.312375 -6.7196712 -1.645524 128.0 +-10.365079 -6.6637707 -1.6474216 128.0 +-10.406609 -6.6005769 -1.6475571 128.0 +-10.458672 -6.5439568 -1.6494547 128.0 +-10.474178 -6.4645691 -1.645524 128.0 +-10.528033 -6.4089375 -1.6478282 128.0 +-10.583299 -6.3539081 -1.6504035 128.0 +-6.6313596 -3.9259496 -1.0159284 128.0 +-6.6519012 -3.8831882 -1.0153862 128.0 +-10.732807 -6.1777992 -1.6558253 128.0 +-10.791192 -6.1235638 -1.6590782 128.0 +-10.832886 -6.0596538 -1.6597559 128.0 +-10.878539 -5.9978542 -1.6611114 128.0 +-10.924712 -5.9361954 -1.6626023 128.0 +-10.965298 -5.8713894 -1.66328 128.0 +-11.003746 -5.8053842 -1.6636868 128.0 +-7.4814453 -3.8884399 -1.1151456 128.0 +-11.142946 -5.7051358 -1.6742591 128.0 +-6.9482746 -3.5036719 -1.0262296 128.0 +-6.9323726 -3.4424627 -1.0205368 128.0 +-6.9400139 -3.393333 -1.0185037 128.0 +-6.9598117 -3.3502562 -1.0183681 128.0 +-7.0088878 -3.3210659 -1.0227054 128.0 +-11.400158 -5.3166752 -1.6825272 128.0 +-6.6502099 -3.0517254 -0.96266007 128.0 +-6.6543622 -3.0043392 -0.96049142 128.0 +-11.461681 -5.0906515 -1.6773765 128.0 +-11.48907 -5.0186415 -1.6768343 128.0 +-11.506903 -4.9425769 -1.6749368 128.0 +-11.471297 -4.8441257 -1.6651777 128.0 +-11.51819 -4.7808652 -1.667753 128.0 +-11.545474 -4.7093525 -1.6674819 128.0 +-7.4734058 -2.9948666 -1.0630972 128.0 +-11.772025 -4.6340985 -1.6924218 128.0 +-11.805782 -4.5639234 -1.693235 128.0 +-11.828933 -4.4896402 -1.6925573 128.0 +-11.844189 -4.412478 -1.6907952 128.0 +-11.852429 -4.3329163 -1.6880844 128.0 +-11.768745 -4.2206392 -1.6720903 128.0 +-11.748625 -4.1322389 -1.6654488 128.0 +-11.739102 -4.048121 -1.6604337 128.0 +-11.745887 -3.9699867 -1.6578584 128.0 +-11.729583 -3.8844459 -1.65203 128.0 +-11.723981 -3.8029237 -1.6478282 128.0 +-11.755593 -3.7336147 -1.6490481 128.0 +-11.78585 -3.6637666 -1.6501324 128.0 +-11.800526 -3.5890744 -1.6490481 128.0 +-11.806182 -3.5117974 -1.6467439 128.0 +-11.824654 -3.4384599 -1.6463373 128.0 +-11.856965 -3.3690906 -1.6479638 128.0 +-11.904145 -3.3036935 -1.6517589 128.0 +-11.949056 -3.2373259 -1.6552831 128.0 +-11.980189 -3.166986 -1.6569096 128.0 +-12.032974 -3.1020749 -1.6616535 128.0 +-12.107514 -3.0421889 -1.669515 128.0 +-12.16156 -2.9765575 -1.6745301 128.0 +-12.202725 -2.9073915 -1.6777831 128.0 +-12.220335 -2.8324623 -1.6777831 128.0 +-12.237485 -2.7574263 -1.6777831 128.0 +-12.300631 -2.692457 -1.6842892 128.0 +-12.445814 -2.6443212 -1.7023164 128.0 +-12.502561 -2.5763049 -1.7080091 128.0 +-12.581286 -2.5121541 -1.7168194 128.0 +-12.690822 -2.4531519 -1.729967 128.0 +-12.75433 -2.384341 -1.7367442 128.0 +-12.861344 -2.322768 -1.7496208 128.0 +-12.938798 -2.2548671 -1.758431 128.0 +-12.978771 -2.1798654 -1.7620907 128.0 +-12.679898 -2.0497417 -1.7188525 128.0 +-12.891956 -2.0029361 -1.7465032 128.0 +-13.197004 -1.9674863 -1.7870305 128.0 +-13.605078 -1.9430779 -1.8417897 128.0 +-14.17138 -1.9353222 -1.9183713 128.0 +-14.368672 -1.8725356 -1.9439889 128.0 +-14.407422 -1.7877526 -1.9477841 128.0 +-14.434848 -1.7012887 -1.9500883 128.0 +-14.427291 -1.6107069 -1.9476485 128.0 +-14.421138 -1.5204897 -1.9454799 128.0 +-14.437098 -1.4326597 -1.9464287 128.0 +-14.39925 -1.3397331 -1.9400581 128.0 +-14.445695 -1.2547004 -1.9453443 128.0 +-14.455097 -1.1661991 -1.9456154 128.0 +-14.463957 -1.0776296 -1.9458865 128.0 +-14.459423 -0.9881168 -1.9443955 128.0 +-14.467192 -0.89949983 -1.9446666 128.0 +-14.434848 -0.80860716 -1.9395159 128.0 +-14.466256 -0.72135437 -1.9431757 128.0 +-14.437745 -0.6311487 -1.9387027 128.0 +-14.399763 -0.54098505 -1.93301 128.0 +-14.459257 -0.45439503 -1.9407359 128.0 +-13.182233 0.97150278 -1.9392607 128.0 +-13.217429 1.0556799 -1.9454761 128.0 +-13.170303 1.1332808 -1.9394088 128.0 +-13.163102 1.2140709 -1.9394088 128.0 +-13.148516 1.2941366 -1.9383729 128.0 +-13.141311 1.3748931 -1.9385208 128.0 +-13.139508 1.4562639 -1.9395567 128.0 +-13.137201 1.5376644 -1.9405926 128.0 +-13.144205 1.6203023 -1.9431083 128.0 +-13.130093 1.7004147 -1.9425163 128.0 +-13.104712 1.7789506 -1.9402966 128.0 +-13.080821 1.8575175 -1.9383729 128.0 +-13.054502 1.9355679 -1.9361532 128.0 +-13.036516 2.0147254 -1.9352652 128.0 +-12.991687 2.0894928 -1.9303819 128.0 +-12.969842 2.167701 -1.92905 128.0 +-12.953374 2.2467341 -1.928606 128.0 +-12.950051 2.3280983 -1.9302338 128.0 +-12.942329 2.4087818 -1.9312698 128.0 +-12.918565 2.4864659 -1.9299378 128.0 +-12.896276 2.5643353 -1.928902 128.0 +-12.872548 2.6418257 -1.9277182 128.0 +-12.864803 2.722604 -1.92905 128.0 +-12.851721 2.8023329 -1.929642 128.0 +-12.836214 2.8815703 -1.9299378 128.0 +-12.804801 2.9571607 -1.9278661 128.0 +-12.746964 3.026304 -1.9217988 128.0 +-12.741606 3.107743 -1.9238707 128.0 +-12.719419 3.1851447 -1.9234266 128.0 +-12.709215 3.2655916 -1.9249065 128.0 +-12.653554 3.3341854 -1.9194312 128.0 +-12.654818 3.417696 -1.9228348 128.0 +-12.635515 3.4958079 -1.9231308 128.0 +-12.606215 3.571115 -1.9219469 128.0 +-12.600213 3.6530812 -1.9244626 128.0 +-12.717886 3.7719576 -1.9463639 128.0 +-12.582828 3.8160434 -1.928902 128.0 +-12.601684 3.9063592 -1.9355612 128.0 +-12.519966 3.9653873 -1.9265343 128.0 +-12.495399 4.0421338 -1.9265343 128.0 +-12.43186 4.1060081 -1.920467 128.0 +-12.425176 4.1885309 -1.9234266 128.0 +-12.360898 4.2515001 -1.9173595 128.0 +-12.348577 4.3321772 -1.9195791 128.0 +-12.325487 4.4091978 -1.920171 128.0 +-12.261966 4.4715252 -1.9143997 128.0 +-12.255619 4.554605 -1.9178034 128.0 +-12.229292 4.6304188 -1.9180993 128.0 +-12.208032 4.7082167 -1.9192832 128.0 +-12.178913 4.7830353 -1.9192832 128.0 +-12.14199 4.8547359 -1.9180993 128.0 +-12.104645 4.9261632 -1.9169154 128.0 +-12.055916 4.9927731 -1.9139558 128.0 +-12.005004 5.0582032 -1.9107002 128.0 +-11.963743 5.1274829 -1.9090724 128.0 +-11.929337 5.1996088 -1.9086285 128.0 +-11.883646 5.266696 -1.9064088 128.0 +-11.874549 5.3500781 -1.9102563 128.0 +-11.858582 5.4306636 -1.9130679 128.0 +-11.838486 5.5095849 -1.9152876 128.0 +-11.839324 5.5986128 -1.921059 128.0 +-11.790486 5.6642985 -1.9186913 128.0 +-11.751064 5.7343678 -1.9179513 128.0 +-11.727178 5.8120732 -1.9198751 128.0 +-11.715145 5.895927 -1.9238707 128.0 +-11.704287 5.9807515 -1.9281621 128.0 +-11.657713 6.0474448 -1.9265343 128.0 +-11.638762 6.1285391 -1.929642 128.0 +-11.640189 6.220818 -1.9363011 128.0 +-11.603539 6.293067 -1.9365971 128.0 +-11.576836 6.3708229 -1.9386688 128.0 +-11.556523 6.4523458 -1.9419245 128.0 +-11.50639 6.5172839 -1.9401486 128.0 +-11.500484 6.6074734 -1.9460679 128.0 +-11.463141 6.6799068 -1.9466598 128.0 +-11.411722 6.7440786 -1.9448841 128.0 +-11.388788 6.8251586 -1.9481397 128.0 +-11.34416 6.8933697 -1.9476957 128.0 +-11.306702 6.9659595 -1.9485836 128.0 +-11.273811 7.0414929 -1.9503595 128.0 +-11.235407 7.1137099 -1.9512473 128.0 +-11.203198 7.1899943 -1.9533191 128.0 +-11.16799 7.264533 -1.9549469 128.0 +-11.147149 7.3487101 -1.9592383 128.0 +-11.115005 7.4257607 -1.961606 128.0 +-11.090524 7.5082388 -1.9654536 128.0 +-11.051585 7.581183 -1.9667854 128.0 +-11.026785 7.6640935 -1.970781 128.0 +-11.00866 7.75211 -1.9761083 128.0 +-10.963302 7.8212352 -1.9765522 128.0 +-10.928731 7.8982067 -1.9790679 128.0 +-10.880063 7.9651155 -1.9790679 128.0 +-10.850844 8.0464535 -1.9827675 128.0 +-10.801268 8.1128817 -1.9827675 128.0 +-10.778045 8.1993656 -1.9877988 128.0 +-10.735365 8.2713804 -1.9892787 128.0 +-10.721834 8.3663025 -1.9963818 128.0 +-10.657107 8.4215078 -1.9938661 128.0 +-10.628397 8.5052795 -1.9983056 128.0 +-10.579851 8.5734482 -1.9990455 128.0 +-10.528576 8.6394587 -1.9993415 128.0 +-10.482212 8.7095871 -2.0006733 128.0 +-10.435385 8.7794714 -2.0020051 128.0 +-10.409172 8.8670673 -2.0074804 128.0 +-10.372541 8.9462738 -2.0110321 128.0 +-10.312984 9.005847 -2.0101442 128.0 +-10.264939 9.0755081 -2.0116239 128.0 +-10.216428 9.1449184 -2.0131037 128.0 +-10.16965 9.2160673 -2.0150275 128.0 +-10.138413 9.3016968 -2.0202069 128.0 +-10.093467 9.3751736 -2.0227227 128.0 +-10.043676 9.4443827 -2.0243504 128.0 +-9.9798079 9.5003757 -2.0231667 128.0 +-9.9298706 9.5696678 -2.0249424 128.0 +-9.8773365 9.6366329 -2.0262742 128.0 +-9.8194284 9.6984472 -2.0265701 128.0 +-9.7660284 9.7648096 -2.0279019 128.0 +-9.7205238 9.839325 -2.0310097 128.0 +-9.6668749 9.9058628 -2.0324895 128.0 +-9.6072845 9.9664154 -2.0327854 128.0 +-9.5609531 10.040935 -2.036041 128.0 +-9.5133915 10.11454 -2.0391486 128.0 +-9.4524965 10.174172 -2.0394447 128.0 +-9.4119558 10.256028 -2.044328 128.0 +-9.3568192 10.322379 -2.0461037 128.0 +-9.2959442 10.382545 -2.0466957 128.0 +-9.2320633 10.439388 -2.0466957 128.0 +-9.1684847 10.496584 -2.0468438 128.0 +-9.1103659 10.560131 -2.0483234 128.0 +-9.0492468 10.62035 -2.0492115 128.0 +-8.9909153 10.683999 -2.0508392 128.0 +-8.9264545 10.740487 -2.0511351 128.0 +-8.8798332 10.818756 -2.0557227 128.0 +-8.8288507 10.892247 -2.0594223 128.0 +-8.7698851 10.956253 -2.0613458 128.0 +-8.7098522 11.019169 -2.0631218 128.0 +-8.6518106 11.084879 -2.0654895 128.0 +-8.5763884 11.128356 -2.0637136 128.0 +-8.528904 11.208318 -2.068893 128.0 +-8.470068 11.273882 -2.0714087 128.0 +-8.4001436 11.324847 -2.0712607 128.0 +-8.3334188 11.380166 -2.0720007 128.0 +-8.2744417 11.446314 -2.0748122 128.0 +-8.2235832 11.524242 -2.0798438 128.0 +-8.1663837 11.593891 -2.0833952 128.0 +-8.1024294 11.654338 -2.085319 128.0 +-8.0358019 11.711173 -2.0866508 128.0 +-7.9710007 11.770905 -2.0885746 128.0 +-7.9030213 11.826172 -2.0897584 128.0 +-7.835752 11.882698 -2.0912383 128.0 +-7.7702441 11.94216 -2.0933101 128.0 +-7.7037668 12.000432 -2.0952339 128.0 +-7.6373959 12.059174 -2.0973055 128.0 +-7.5695457 12.115874 -2.0990813 128.0 +-7.5018058 12.173038 -2.1010051 128.0 +-7.4310813 12.2256 -2.1021891 128.0 +-7.3599939 12.277753 -2.1033728 128.0 +-7.2890496 12.330344 -2.1047046 128.0 +-7.2187324 12.384236 -2.1063325 128.0 +-7.1445789 12.431726 -2.1069243 128.0 +-7.0710897 12.480494 -2.1078122 128.0 +-6.9982352 12.530555 -2.1089962 128.0 +-6.9274163 12.584522 -2.11092 128.0 +-6.8477111 12.622445 -2.1101799 128.0 +-6.7682676 12.660735 -2.1095881 128.0 +-6.7134967 12.745779 -2.1169872 128.0 +-6.6734214 12.860475 -2.1294177 128.0 +-6.5948353 12.902061 -2.1295657 128.0 +-6.5093207 12.929914 -2.1274939 128.0 +-6.4254699 12.960751 -2.126014 128.0 +-6.3371477 12.982157 -2.1230545 128.0 +-6.2440939 12.993162 -2.1184671 128.0 +-6.1486073 12.998151 -2.1129916 128.0 +-6.0595551 13.015907 -2.109736 128.0 +-5.9672217 13.025868 -2.1052966 128.0 +-5.8697133 13.023465 -2.0989335 128.0 +-5.7732615 13.022165 -2.0928662 128.0 +-5.6758614 13.017454 -2.086355 128.0 +-5.5767884 13.007495 -2.0791037 128.0 +-5.4761324 12.992254 -2.0711126 128.0 +-5.3872275 13.003681 -2.0675611 128.0 +-5.303236 13.026416 -2.0659335 128.0 +-5.209621 13.024734 -2.0604579 128.0 +-5.1097183 13.005825 -2.052319 128.0 +-5.0269723 13.029551 -2.0511351 128.0 +-4.9357224 13.030554 -2.0463998 128.0 +-4.8408589 13.020732 -2.0400364 128.0 +-4.7486749 13.016741 -2.0347092 128.0 +-4.6597214 13.020492 -2.0307136 128.0 +-4.5735197 13.031107 -2.0279019 128.0 +-4.4851122 13.034609 -2.0240545 128.0 +-4.3946218 13.030957 -2.019171 128.0 +-4.3074479 13.036077 -2.0157676 128.0 +-4.2179413 13.033092 -2.0111799 128.0 +-4.126842 13.023844 -2.0057046 128.0 +-4.0366011 13.015859 -2.0005252 128.0 +-3.9509199 13.021453 -1.9975656 128.0 +-3.8656034 13.027435 -1.994754 128.0 +-3.780638 13.033812 -1.9920903 128.0 +-3.6960099 13.040587 -1.9895747 128.0 +-3.6095946 13.040145 -1.9860231 128.0 +-3.5199714 13.026721 -1.9805478 128.0 +-3.4377062 13.039467 -1.9792159 128.0 +-3.3524635 13.040199 -1.9761083 128.0 +-3.2680621 13.043256 -1.9734446 128.0 +-3.1823432 13.040003 -1.969893 128.0 +-3.0977015 13.040039 -1.9669334 128.0 +-3.010731 13.028929 -1.962346 128.0 +-2.9270468 13.030753 -1.9598303 128.0 +-2.8424001 13.027209 -1.9565747 128.0 +-2.7628229 13.04634 -1.9568707 128.0 +-2.681129 13.055296 -1.9556868 128.0 +-2.5973072 13.053072 -1.9528751 128.0 +-2.5160444 13.062936 -1.9519873 128.0 +-2.4333103 13.064516 -1.9499154 128.0 +-2.346976 13.045133 -1.9447361 128.0 +-2.2640145 13.042723 -1.9422204 128.0 +-2.1805186 13.035884 -1.9391128 128.0 +-2.0981345 13.034371 -1.936893 128.0 +-2.0173621 13.042113 -1.9361532 128.0 +-1.9399109 13.071856 -1.9388168 128.0 +-1.8595279 13.082533 -1.9386688 128.0 +-1.7765585 13.074097 -1.9357092 128.0 +-1.6932544 13.061213 -1.9321576 128.0 +-1.6118701 13.061541 -1.9306778 128.0 +-1.5336509 13.087884 -1.9331934 128.0 +-1.4521173 13.086235 -1.9315656 128.0 +-1.370456 13.082111 -1.929642 128.0 +-1.2896752 13.085353 -1.928902 128.0 +-1.2075433 13.073324 -1.9259424 128.0 +-1.1257771 13.062751 -1.9232787 128.0 +-1.0437924 13.046739 -1.9198751 128.0 +-0.96422863 13.059801 -1.920911 128.0 +-0.88354361 13.057578 -1.9197271 128.0 +-0.80219471 13.043011 -1.9167675 128.0 +-0.72149438 13.035838 -1.9149917 128.0 +-0.64115489 13.033105 -1.9139558 128.0 +-0.56079119 13.027901 -1.912624 128.0 +-0.480661 13.026155 -1.9118841 128.0 +-0.40054309 13.022928 -1.9109962 128.0 +-0.32070112 13.028107 -1.9114401 128.0 +-0.24095613 13.040706 -1.9130679 128.0 +-0.16098379 13.045895 -1.9136598 128.0 +-0.080926605 13.045648 -1.9135119 128.0 +-0.00087844487 13.047877 -1.9138079 128.0 +0.079212286 13.052582 -1.9145478 128.0 +0.15921482 13.044928 -1.9135119 128.0 +0.239254 13.043705 -1.9135119 128.0 +0.31928417 13.041991 -1.9135119 128.0 +0.39921123 13.036821 -1.9130679 128.0 +0.47930542 13.037091 -1.9135119 128.0 +0.5595029 13.038845 -1.9142518 128.0 +0.63983709 13.042081 -1.9152876 128.0 +0.72034121 13.046797 -1.9166195 128.0 +0.80092728 13.051016 -1.9179513 128.0 +0.88132536 13.050789 -1.9186913 128.0 +0.9624058 13.058945 -1.920763 128.0 +1.0436982 13.067581 -1.9229827 128.0 +1.1237749 13.059945 -1.9228348 128.0 +1.2053428 13.068562 -1.9252025 128.0 +1.2854103 13.059935 -1.9250544 128.0 +1.3640784 13.038032 -1.9229827 128.0 +1.4460151 13.04711 -1.9256464 128.0 +1.5269639 13.04585 -1.9268303 128.0 +1.6075884 13.041142 -1.9275702 128.0 +1.6868144 13.025148 -1.9266822 128.0 +1.7664373 13.012593 -1.9263864 128.0 +1.8479174 13.013259 -1.9281621 128.0 +1.9296173 13.014394 -1.9300859 128.0 +2.0124586 13.021856 -1.9330455 128.0 +2.0937355 13.01805 -1.9343773 128.0 +2.1779773 13.031296 -1.9383729 128.0 +2.2584021 13.02061 -1.9388168 128.0 +2.3422794 13.028894 -1.9422204 128.0 +2.4256189 13.032751 -1.945032 128.0 +2.5074108 13.027333 -1.9465119 128.0 +2.5925078 13.037892 -1.9505074 128.0 +2.6722591 13.020771 -1.9503595 128.0 +2.7543561 13.014772 -1.9519873 128.0 +2.838588 13.017919 -1.9550948 128.0 +2.9218783 13.015696 -1.9574625 128.0 +3.0043576 13.009086 -1.9592383 128.0 +3.0870943 13.002915 -1.9611621 128.0 +3.1672895 12.98565 -1.9614581 128.0 +3.2555602 13.000507 -1.9667854 128.0 +3.3394539 12.996571 -1.9693011 128.0 +3.4294717 13.015045 -1.9753684 128.0 +3.5159726 13.01858 -1.9792159 128.0 +3.6037009 13.025357 -1.9836553 128.0 +3.6892176 13.022982 -1.986763 128.0 +3.7748406 13.020047 -1.9898707 128.0 +3.8616915 13.020344 -1.9935702 128.0 +3.9492619 13.021956 -1.9975656 128.0 +4.0331898 13.010703 -1.9996374 128.0 +4.1165304 12.997025 -2.0014131 128.0 +4.2007685 12.985636 -2.003633 128.0 +4.2906055 12.990605 -2.0085163 128.0 +4.3854022 13.009017 -2.0156195 128.0 +4.4735069 13.006179 -2.0194671 128.0 +4.5623965 13.004615 -2.0236106 128.0 +4.6511021 13.001517 -2.027606 128.0 +4.7358737 12.98667 -2.0298257 128.0 +4.8230505 12.977761 -2.0330813 128.0 +4.9137988 12.97752 -2.0378168 128.0 +5.0146923 13.002487 -2.0466957 128.0 +5.1052279 12.999088 -2.0511351 128.0 +5.1948085 12.992312 -2.0551307 128.0 +5.285243 12.986757 -2.0594223 128.0 +5.3735342 12.975098 -2.0628257 128.0 +5.4653378 12.971045 -2.0675611 128.0 +5.5685935 12.992715 -2.0765882 128.0 +5.6711349 13.010883 -2.085171 128.0 +5.7620835 13.001157 -2.0893145 128.0 +5.8527203 12.989902 -2.0933101 128.0 +5.9446702 12.980721 -2.0977495 128.0 +6.0421538 12.982553 -2.1041126 128.0 +6.1394596 12.982784 -2.110328 128.0 +6.2327123 12.973394 -2.1150634 128.0 +6.3269477 12.965125 -2.1200948 128.0 +6.4362502 12.986314 -2.1301575 128.0 +6.5162559 12.947461 -2.1303055 128.0 +6.5789242 12.874651 -2.1248302 128.0 +6.6108823 12.743622 -2.1095881 128.0 +6.6714387 12.669566 -2.1039648 128.0 +6.7248082 12.583038 -2.0962696 128.0 +6.8094349 12.555448 -2.0986373 128.0 +6.8367486 12.423323 -2.0832472 128.0 +6.935029 12.420859 -2.0900545 128.0 +6.9764996 12.316978 -2.0795476 128.0 +7.0682049 12.302236 -2.0844312 128.0 +7.1301107 12.235564 -2.0804355 128.0 +7.1990137 12.181368 -2.0786598 128.0 +7.2614183 12.116608 -2.0751083 128.0 +7.3525786 12.099714 -2.0799916 128.0 +7.4220128 12.046794 -2.0786598 128.0 +7.502079 12.011091 -2.0804355 128.0 +7.5703449 11.956478 -2.0789559 128.0 +7.6307445 11.889828 -2.0754042 128.0 +7.6927686 11.826202 -2.0724447 128.0 +7.7564774 11.765568 -2.0700769 128.0 +7.8208308 11.706242 -2.0680051 128.0 +7.880867 11.640836 -2.0648975 128.0 +7.9443121 11.580844 -2.0628257 128.0 +8.0112696 11.526196 -2.06179 128.0 +8.067605 11.456609 -2.0580902 128.0 +8.133729 11.401256 -2.0570545 128.0 +8.1977386 11.343118 -2.0555747 128.0 +8.2636786 11.287816 -2.0546868 128.0 +8.32866 11.231339 -2.0536509 128.0 +8.3902893 11.170534 -2.0518751 128.0 +8.4550791 11.11412 -2.0509872 128.0 +8.5164747 11.053414 -2.0493593 128.0 +8.5707502 10.983798 -2.0461037 128.0 +8.6232662 10.91238 -2.0425522 128.0 +8.6702852 10.834556 -2.0378168 128.0 +8.7278833 10.770395 -2.0357451 128.0 +8.7781191 10.697527 -2.0320456 128.0 +8.8328466 10.630533 -2.0295298 128.0 +8.8947248 10.572352 -2.02879 128.0 +8.9555798 10.51306 -2.0279019 128.0 +9.0115204 10.448176 -2.0259783 128.0 +9.0715561 10.388216 -2.0250902 128.0 +9.1331606 10.330136 -2.0246463 128.0 +9.1943941 10.271691 -2.0242023 128.0 +9.2506046 10.207754 -2.0227227 128.0 +9.3077154 10.144972 -2.0215387 128.0 +9.3630571 10.080424 -2.0200589 128.0 +9.4037285 10.00045 -2.0154715 128.0 +9.4410448 9.9174929 -2.0102921 128.0 +9.4934835 9.850832 -2.0085163 128.0 +9.5496044 9.7881489 -2.0076284 128.0 +9.6094837 9.7293692 -2.0076284 128.0 +9.6641054 9.665328 -2.0065925 128.0 +9.701417 9.5843039 -2.0020051 128.0 +9.7465925 9.5114737 -1.9991934 128.0 +9.7919531 9.4391365 -1.9965298 128.0 +9.8432398 9.3727398 -1.995198 128.0 +9.8940802 9.3060684 -1.9938661 128.0 +9.9444733 9.2391262 -1.9925343 128.0 +9.996604 9.1739225 -1.9916464 128.0 +10.04318 9.1037779 -1.9897226 128.0 +10.084113 9.0287905 -1.986763 128.0 +10.121541 8.9510221 -1.9832114 128.0 +10.177018 8.8893995 -1.9833595 128.0 +10.226129 8.8222656 -1.9823235 128.0 +10.264258 8.7458849 -1.9792159 128.0 +10.301081 8.6687317 -1.9759603 128.0 +10.343428 8.5965137 -1.9738885 128.0 +10.386806 8.5253572 -1.9721128 128.0 +10.438921 8.4614639 -1.9721128 128.0 +10.48215 8.3904552 -1.970485 128.0 +10.5249 8.3192348 -1.9688572 128.0 +10.56951 8.2496309 -1.9676733 128.0 +10.612096 8.178586 -1.9661934 128.0 +10.647124 8.1019402 -1.9633818 128.0 +10.680821 8.0245781 -1.9604222 128.0 +10.718738 7.9506431 -1.9583504 128.0 +10.75136 7.8730397 -1.9553908 128.0 +10.781832 7.7941771 -1.9521352 128.0 +10.807715 7.7123652 -1.9481397 128.0 +10.841897 7.6367941 -1.9457719 128.0 +10.87637 7.5616584 -1.9435523 128.0 +10.90136 7.4802332 -1.9397047 128.0 +10.933949 7.4043317 -1.937337 128.0 +10.975063 7.3343554 -1.9365971 128.0 +11.000869 7.254355 -1.9331934 128.0 +11.03191 7.1780896 -1.9308258 128.0 +11.0591 7.0995798 -1.9278661 128.0 +11.072373 7.0125413 -1.9225388 128.0 +11.112677 6.9428988 -1.9220948 128.0 +11.150859 6.8719883 -1.9213549 128.0 +11.191969 6.8029246 -1.921207 128.0 +11.217383 6.7244639 -1.9183953 128.0 +11.243958 6.6469541 -1.9158796 128.0 +11.276841 6.5733557 -1.9145478 128.0 +11.309245 6.4996042 -1.9132159 128.0 +11.341168 6.4257026 -1.9118841 128.0 +11.371747 6.3511715 -1.9104042 128.0 +11.380177 6.2645864 -1.9052249 128.0 +11.409709 6.1899257 -1.9037451 128.0 +11.433519 6.1123414 -1.9013773 128.0 +11.448057 6.0300903 -1.8975298 128.0 +11.46465 5.9492574 -1.8941263 128.0 +11.50182 5.8792496 -1.8942742 128.0 +11.539444 5.8094544 -1.8945702 128.0 +11.544745 5.7236071 -1.8895388 128.0 +11.566316 5.6461558 -1.8873191 128.0 +11.601633 5.5755081 -1.887467 128.0 +11.629367 5.5012569 -1.8864312 128.0 +11.648558 5.4231195 -1.8840635 128.0 +11.671722 5.3470135 -1.8824357 128.0 +11.706115 5.2761092 -1.8827317 128.0 +11.732843 5.2017779 -1.8818437 128.0 +11.757287 5.1265268 -1.8806598 128.0 +11.801248 5.0597439 -1.8827317 128.0 +11.833895 4.9880056 -1.8830276 128.0 +11.877069 4.9205985 -1.8850993 128.0 +11.909786 4.8487482 -1.8855432 128.0 +11.96778 4.7869635 -1.8901308 128.0 +12.004292 4.7163329 -1.8913146 128.0 +12.016396 4.6361804 -1.8886509 128.0 +12.050165 4.5644636 -1.8895388 128.0 +12.091851 4.4956079 -1.8917586 128.0 +12.105271 4.4162459 -1.8895388 128.0 +12.134934 4.3428855 -1.8899827 128.0 +12.145489 4.2627788 -1.887467 128.0 +12.195731 4.1965399 -1.8913146 128.0 +12.24468 4.129528 -1.8950142 128.0 +12.392808 4.0949559 -1.9143997 128.0 +12.324545 3.9886982 -1.8997495 128.0 +12.320502 3.9040413 -1.89531 128.0 +12.290381 3.8116772 -1.8868752 128.0 +12.340984 3.744518 -1.8911666 128.0 +12.360883 3.6678808 -1.8907226 128.0 +12.391705 3.5944457 -1.8920544 128.0 +12.424945 3.5215793 -1.8938303 128.0 +12.412958 3.4360435 -1.8886509 128.0 +12.465315 3.368325 -1.8935343 128.0 +12.502962 3.2963126 -1.896198 128.0 +12.543068 3.2247033 -1.8993056 128.0 +12.556862 3.1462381 -1.8984177 128.0 +12.549027 3.0625684 -1.8942742 128.0 +12.573357 2.9868822 -1.8951621 128.0 +12.608792 2.9136839 -1.8978258 128.0 +12.618713 2.8345296 -1.896642 128.0 +12.605913 2.7505162 -1.8920544 128.0 +12.643839 2.6776218 -1.89531 128.0 +12.672625 2.6025755 -1.8972338 128.0 +12.684475 2.5239973 -1.896642 128.0 +12.717204 2.4494846 -1.8993056 128.0 +12.727133 2.3705022 -1.8985656 128.0 +12.755066 2.2948158 -1.9006375 128.0 +12.788395 2.2198901 -1.9035971 128.0 +12.799825 2.1410542 -1.9033011 128.0 +12.809792 2.0620043 -1.9028572 128.0 +12.811452 1.981704 -1.9012294 128.0 +12.840001 1.9055238 -1.9037451 128.0 +12.859284 1.8278158 -1.9049289 128.0 +12.880057 1.7502091 -1.9064088 128.0 +12.903304 1.6727974 -1.9083325 128.0 +12.91627 1.5939559 -1.9087764 128.0 +12.930719 1.5152482 -1.9095163 128.0 +12.943705 1.4363142 -1.9101083 128.0 +12.951291 1.3567631 -1.9099603 128.0 +12.958387 1.277173 -1.9098123 128.0 +12.974843 1.1984557 -1.9111441 128.0 +12.978011 1.1184816 -1.9105523 128.0 +12.999417 1.0400108 -1.9127719 128.0 +13.019362 0.96124655 -1.9148437 128.0 +13.029949 0.88167655 -1.9155836 128.0 +13.03314 0.80158848 -1.9152876 128.0 +13.0388 0.72165811 -1.9154357 128.0 +13.06669 0.64280409 -1.9189873 128.0 +13.037782 0.56121564 -1.9141039 128.0 +13.061734 0.48197073 -1.9172114 128.0 +13.064445 0.40181634 -1.9172114 128.0 +13.067655 0.3216711 -1.9173595 128.0 +13.074327 0.24157433 -1.9180993 128.0 +13.073585 0.161323 -1.9178034 128.0 +13.080262 0.081138238 -1.9186913 128.0 +13.074579 0.00087786233 -1.9178034 128.0 +13.080273 -0.079382807 -1.9186913 128.0 +13.06075 -0.15940936 -1.9158796 128.0 +13.06447 -0.23963673 -1.9166195 128.0 +13.063743 -0.31981862 -1.9167675 128.0 +13.079328 -0.40051666 -1.9194312 128.0 +13.087496 -0.48116302 -1.921059 128.0 +13.097141 -0.56200963 -1.9229827 128.0 +13.086533 -0.64202178 -1.9219469 128.0 +13.109009 -0.72378159 -1.9259424 128.0 +13.107282 -0.80438536 -1.9263864 128.0 +13.103086 -0.88486171 -1.9265343 128.0 +13.092479 -0.96488017 -1.9257944 128.0 +13.099128 -1.0462207 -1.9277182 128.0 +13.075711 -1.1251329 -1.9252025 128.0 +13.061667 -1.2047063 -1.9241666 128.0 +13.063872 -1.2857981 -1.9256464 128.0 +13.037048 -1.3639754 -1.9228348 128.0 +13.036297 -1.4448158 -1.9240186 128.0 +13.017364 -1.5236272 -1.9225388 128.0 +13.012677 -1.604077 -1.9232787 128.0 +13.006514 -1.6843995 -1.9238707 128.0 +12.983193 -1.7624437 -1.9219469 128.0 +12.972135 -1.8420739 -1.9219469 128.0 +12.933196 -1.9175709 -1.9178034 128.0 +12.873295 -1.9894857 -1.9105523 128.0 +12.293541 -1.9771446 -1.8245747 128.0 +11.941723 -1.9957738 -1.7730769 128.0 +11.75483 -2.0387402 -1.7465881 128.0 +11.495836 -2.0665338 -1.7091488 128.0 +11.303069 -2.1035385 -1.681772 128.0 +11.137479 -2.1434929 -1.6585388 128.0 +11.005779 -2.1882493 -1.640485 128.0 +10.277185 -2.1089416 -1.5312743 128.0 +8.9027205 -1.8837343 -1.3230636 128.0 +9.0629892 -1.9758447 -1.3494045 128.0 +9.0873642 -2.0396519 -1.3550277 128.0 +8.9185734 -2.0593071 -1.3310547 128.0 +8.4342804 -2.0020094 -1.2585435 128.0 +8.3142281 -2.0274668 -1.2419695 128.0 +8.292037 -2.0760405 -1.2404896 128.0 +7.941021 -2.039969 -1.188252 128.0 +7.576427 -1.9958901 -1.1337945 128.0 +7.5392141 -2.0356343 -1.1299471 128.0 +7.3073549 -2.0211823 -1.0959111 128.0 +7.2453365 -2.05196 -1.0882162 128.0 +7.1927156 -2.0848081 -1.0820009 128.0 +6.7104578 -1.9896605 -1.0087498 128.0 +6.7426038 -2.0442917 -1.015705 128.0 +6.761106 -2.0952911 -1.0205884 128.0 +6.6783547 -2.1146331 -1.0096377 128.0 +6.685955 -2.1622696 -1.0128933 128.0 +6.6396942 -2.1923945 -1.0077139 128.0 +6.5577054 -2.2100251 -0.99691123 128.0 +6.5449567 -2.2505426 -0.99705923 128.0 +6.5515547 -2.297864 -1.0003148 128.0 +6.5326762 -2.3363543 -0.9995749 128.0 +6.4866276 -2.3648713 -0.99454349 128.0 +6.453455 -2.3977358 -0.99158388 128.0 +6.4145741 -2.4281809 -0.98773634 128.0 +6.4918256 -2.5030897 -1.0025345 128.0 +6.4597754 -2.5363667 -0.99987084 128.0 +6.4000139 -2.5583274 -0.99276775 128.0 +6.3063354 -2.5658545 -0.98018926 128.0 +6.2155495 -2.5734649 -0.96805471 128.0 +6.2506785 -2.6330633 -0.97634172 128.0 +6.3080325 -2.7029309 -0.98832828 128.0 +6.158062 -2.6834843 -0.96657491 128.0 +6.119781 -2.7115998 -0.96302336 128.0 +6.1210608 -2.757226 -0.96598297 128.0 +6.1031284 -2.7943203 -0.96583498 128.0 +6.2167726 -2.8926523 -0.98744035 128.0 +6.0138426 -2.8432097 -0.95680809 128.0 +5.9882612 -2.8762014 -0.95547628 128.0 +5.4239063 -2.6460996 -0.86446732 128.0 +5.4022517 -2.6766946 -0.86357939 128.0 +5.9316549 -2.9846044 -0.95503229 128.0 +5.9396491 -3.034447 -0.95947176 128.0 +5.9332085 -3.0772116 -0.9615435 128.0 +5.9098401 -3.1112547 -0.96080363 128.0 +5.9080825 -3.1567829 -0.96376324 128.0 +5.8912096 -3.1943893 -0.96420717 128.0 +5.8359756 -3.2109244 -0.95813996 128.0 +5.8187542 -3.2481194 -0.95858389 128.0 +5.8228083 -3.2974112 -0.96272737 128.0 +5.8033237 -3.33357 -0.96287537 128.0 +5.7989945 -3.3785779 -0.96568704 128.0 +5.796885 -3.4251678 -0.96894264 128.0 +5.8690696 -3.516603 -0.98522067 128.0 +5.7130051 -3.4708774 -0.9616915 128.0 +5.7336988 -3.5318081 -0.96909058 128.0 +5.7052102 -3.562731 -0.96790677 128.0 +5.3264666 -3.3717339 -0.9047184 128.0 +5.6910224 -3.6517072 -0.97323412 128.0 +5.6179409 -3.6536582 -0.96420717 128.0 +5.6251402 -3.7076595 -0.96953458 128.0 +5.5619917 -3.7151806 -0.96228343 128.0 +5.5046968 -3.7259493 -0.95606816 128.0 +5.5004873 -3.7725244 -0.95947176 128.0 +5.5292072 -3.8423326 -0.96894264 128.0 +5.5378699 -3.8989663 -0.97486192 128.0 +5.4856648 -3.9127672 -0.96968251 128.0 +5.4014392 -3.9029005 -0.95858389 128.0 +5.3470678 -3.9137673 -0.95296055 128.0 +5.3674364 -3.9794955 -0.96124756 128.0 +5.3642669 -4.0283933 -0.96524304 128.0 +5.3378744 -4.0600343 -0.9649471 128.0 +5.3825817 -4.1464376 -0.97811753 128.0 +5.2673783 -4.1094117 -0.96109957 128.0 +5.3134475 -4.1980734 -0.97471392 128.0 +5.2821836 -4.2262712 -0.97367805 128.0 +5.2699823 -4.2698116 -0.97634172 128.0 +5.3094296 -4.3560257 -0.98906815 128.0 +5.2787986 -4.3853612 -0.98832828 128.0 +5.2003336 -4.3743691 -0.97826546 128.0 +5.1613503 -4.3959332 -0.97589779 128.0 +5.1125631 -4.4087858 -0.97160631 128.0 +5.1271286 -4.4765053 -0.97989327 128.0 +5.1758747 -4.5753598 -0.99513543 128.0 +5.1852822 -4.6406755 -1.0026826 128.0 +5.0445948 -4.570785 -0.98004127 128.0 +5.0375862 -4.6210432 -0.98433274 128.0 +3.5440502 -3.2908106 -0.68511307 128.0 +3.5237916 -3.3124945 -0.68511307 128.0 +3.5112789 -3.3415554 -0.68674088 128.0 +3.4964058 -3.3685281 -0.68792474 128.0 +3.4544361 -3.3691971 -0.68348527 128.0 +4.7796545 -4.7199273 -0.96657491 128.0 +7.7275505 -7.726243 -1.5965344 128.0 +7.6737428 -7.7671804 -1.5952026 128.0 +7.6390624 -7.8275685 -1.5980142 128.0 +2.6665773 -2.7650459 -0.5362432 128.0 +2.6625178 -2.7949653 -0.53905481 128.0 +2.641253 -2.8069267 -0.53816694 128.0 +2.6226339 -2.8216312 -0.537871 128.0 +7.2462535 -7.8957076 -1.5650142 128.0 +2.6137125 -2.8821819 -0.54364228 128.0 +2.6071925 -2.910692 -0.54615796 128.0 +7.0636611 -7.987 -1.5568752 128.0 +7.0522523 -8.0733967 -1.5654582 128.0 +7.0303588 -8.1487179 -1.5718213 128.0 +6.998826 -8.2135344 -1.5761129 128.0 +6.9330158 -8.238162 -1.5725613 128.0 +6.8728557 -8.2691374 -1.5703416 128.0 +6.8257523 -8.3157396 -1.5712295 128.0 +6.7689948 -8.3505497 -1.5698977 128.0 +6.7058883 -8.3772554 -1.567086 128.0 +6.6463885 -8.4081573 -1.5651622 128.0 +6.586762 -8.4386444 -1.5632384 128.0 +6.5270123 -8.4687176 -1.5613147 128.0 +6.4845076 -8.5212002 -1.5636824 128.0 +6.4303184 -8.5584555 -1.5632384 128.0 +6.3829856 -8.6048994 -1.5645703 128.0 +6.3265615 -8.6391153 -1.5636824 128.0 +6.2734337 -8.6777716 -1.5636824 128.0 +6.2166233 -8.7112703 -1.5627944 128.0 +6.153944 -8.7363138 -1.5604268 128.0 +6.1041741 -8.7795935 -1.5614626 128.0 +6.0300474 -8.7875242 -1.5561353 128.0 +5.9760146 -8.824358 -1.5561353 128.0 +5.9201083 -8.8583937 -1.5556914 128.0 +5.8612881 -8.8879461 -1.5545075 128.0 +5.783452 -8.8880959 -1.5481442 128.0 +5.7410936 -8.9425583 -1.5515479 128.0 +5.6993423 -8.9985056 -1.5552474 128.0 +5.6335421 -9.016531 -1.5522878 128.0 +5.5843372 -9.0610313 -1.5540636 128.0 +5.50809 -9.0613194 -1.5481442 128.0 +5.4554377 -9.1000357 -1.5490322 128.0 +5.4020143 -9.1375952 -1.549772 128.0 +5.3368816 -9.1551886 -1.5471084 128.0 +5.2751861 -9.1783304 -1.5454806 128.0 +5.2212071 -9.2148285 -1.5462205 128.0 +5.1549244 -9.2294216 -1.5432608 128.0 +5.0824604 -9.2322855 -1.5383774 128.0 +5.024302 -9.2606888 -1.5379335 128.0 +4.9701819 -9.2965765 -1.5388213 128.0 +4.9268703 -9.3531504 -1.5432608 128.0 +4.8771305 -9.3981285 -1.5457766 128.0 +4.8162222 -9.4217129 -1.5447407 128.0 +4.7569871 -9.4484367 -1.5442967 128.0 +1.3538766 -2.7288237 -0.41726562 128.0 +1.3388424 -2.7406347 -0.41785756 128.0 +4.5775552 -9.5245905 -1.5426689 128.0 +4.5093021 -9.5319357 -1.5392654 128.0 +4.4494781 -9.556735 -1.5388213 128.0 +4.3915792 -9.5856552 -1.5391173 128.0 +4.3367429 -9.621438 -1.5405972 128.0 +4.2756214 -9.6433458 -1.5398573 128.0 +4.2136045 -9.6630526 -1.5388213 128.0 +4.1503372 -9.679635 -1.5373416 128.0 +4.0885615 -9.6994505 -1.5364537 128.0 +4.024807 -9.714304 -1.5348259 128.0 +3.9621427 -9.7314882 -1.5336421 128.0 +3.9019897 -9.7546988 -1.533494 128.0 +3.8431473 -9.7812185 -1.5339381 128.0 +3.7809229 -9.7990789 -1.5330501 128.0 +3.7165227 -9.8109951 -1.5312743 128.0 +3.6531527 -9.8252716 -1.5299425 128.0 +3.5958469 -9.8558636 -1.5312743 128.0 +1.1435463 -3.192765 -0.46891135 128.0 +1.1301557 -3.2174525 -0.47172302 128.0 +3.4118934 -9.9147711 -1.5303864 128.0 +1.1367183 -3.3679044 -0.49332839 128.0 +1.1185135 -3.3823283 -0.49451226 128.0 +1.0843434 -3.3477252 -0.48800105 128.0 +1.0566139 -3.3316879 -0.48444948 128.0 +1.0059856 -3.2408116 -0.46920732 128.0 +0.9817754 -3.2327271 -0.46698758 128.0 +0.95910877 -3.2292087 -0.46550778 128.0 +0.9447853 -3.25403 -0.46846741 128.0 +0.94852585 -3.3435009 -0.48148984 128.0 +0.93405908 -3.371181 -0.48489341 128.0 +0.92315656 -3.41313 -0.49051672 128.0 +2.6672239 -10.115949 -1.5268348 128.0 +2.6014109 -10.117756 -1.5246152 128.0 +2.5414431 -10.142161 -1.525947 128.0 +0.79411268 -3.2502816 -0.46210417 128.0 +2.1288905 -8.9601717 -1.3394896 128.0 +2.3498769 -10.167951 -1.5229874 128.0 +1.9880081 -8.8485966 -1.3184762 128.0 +1.9427388 -8.9021788 -1.3248394 128.0 +2.1596575 -10.196903 -1.5210636 128.0 +1.7325222 -8.4341726 -1.2498125 128.0 +1.674951 -8.4155445 -1.245373 128.0 +1.620852 -8.4130383 -1.2434493 128.0 +1.5720961 -8.4383821 -1.2458169 128.0 +1.8453281 -10.255432 -1.5206196 128.0 +1.7793242 -10.249022 -1.5179559 128.0 +1.7162408 -10.258771 -1.517808 128.0 +1.3032701 -8.0936117 -1.188104 128.0 +1.2529798 -8.0975466 -1.187512 128.0 +1.5201551 -10.241666 -1.5107048 128.0 +1.2378035 -8.7056847 -1.2771891 128.0 +1.3972872 -10.281109 -1.5139604 128.0 +1.3357021 -10.301258 -1.5157362 128.0 +1.2716223 -10.302389 -1.5147003 128.0 +1.207464 -10.302139 -1.5135164 128.0 +1.1440104 -10.307388 -1.5132205 128.0 +1.080538 -10.312247 -1.5129246 128.0 +1.0166615 -10.312778 -1.5120367 128.0 +0.95327348 -10.317837 -1.5118886 128.0 +0.88858914 -10.307726 -1.509521 128.0 +0.82406485 -10.297211 -1.5071533 128.0 +0.76188511 -10.315882 -1.509225 128.0 +0.70150763 -10.363779 -1.5157362 128.0 +0.63753974 -10.361965 -1.5148484 128.0 +0.57378423 -10.36272 -1.5144044 128.0 +0.51183814 -10.399631 -1.5194358 128.0 +0.44827226 -10.408504 -1.5203236 128.0 +0.3833434 -10.382397 -1.5160322 128.0 +0.31954005 -10.381588 -1.5155882 128.0 +0.25585806 -10.384342 -1.5157362 128.0 +0.19220884 -10.389672 -1.5163281 128.0 +0.1284554 -10.390656 -1.5163281 128.0 +0.064672932 -10.387293 -1.5157362 128.0 +0.00093652861 -10.385516 -1.5154402 128.0 +-0.062848717 -10.395216 -1.5169201 128.0 +-0.12678944 -10.40749 -1.5188438 128.0 +-0.19050039 -10.398605 -1.51766 128.0 +-0.25376701 -10.37549 -1.5144044 128.0 +-0.31660536 -10.347048 -1.5104089 128.0 +-0.38128966 -10.377524 -1.5152923 128.0 +-0.44585001 -10.39574 -1.5183998 128.0 +-0.50958014 -10.39182 -1.5182519 128.0 +-0.57202291 -10.364799 -1.5147003 128.0 +-0.63512403 -10.353196 -1.5135164 128.0 +-0.69863808 -10.349104 -1.5135164 128.0 +-0.76248974 -10.349554 -1.5142564 128.0 +-0.82597905 -10.344681 -1.5142564 128.0 +-0.89113474 -10.359125 -1.517216 128.0 +-0.95486218 -10.355432 -1.517512 128.0 +-1.0158631 -10.323788 -1.5136645 128.0 +-1.0786744 -10.312442 -1.5129246 128.0 +-1.1428024 -10.313493 -1.5141084 128.0 +-1.2066386 -10.311198 -1.5148484 128.0 +-1.2697631 -10.302619 -1.5147003 128.0 +-1.3320651 -10.287768 -1.5136645 128.0 +-1.3954308 -10.281361 -1.5139604 128.0 +-1.4590464 -10.276522 -1.5145524 128.0 +-1.5230904 -10.274224 -1.5155882 128.0 +-1.5873122 -10.272504 -1.516772 128.0 +-1.6539273 -10.285028 -1.5201757 128.0 +-1.7194507 -10.289319 -1.5223954 128.0 +-1.7820451 -10.275651 -1.5219514 128.0 +-1.845587 -10.267444 -1.5223954 128.0 +-1.9100004 -10.263704 -1.5235792 128.0 +-1.9714453 -10.244022 -1.5223954 128.0 +-2.0340714 -10.230762 -1.5222474 128.0 +-2.0991948 -10.229714 -1.5240232 128.0 +-2.1637673 -10.225349 -1.525355 128.0 +-2.2260466 -10.209948 -1.5250591 128.0 +-2.289952 -10.201887 -1.525947 128.0 +-2.3525064 -10.187644 -1.525947 128.0 +-2.415658 -10.175904 -1.5263909 128.0 +-2.4780507 -10.160891 -1.5263909 128.0 +-2.5391486 -10.140697 -1.525651 128.0 +-2.6028001 -10.130673 -1.5265388 128.0 +-2.6679368 -10.125988 -1.5283147 128.0 +-2.7336297 -10.122794 -1.5303864 128.0 +-2.794899 -10.102971 -1.5299425 128.0 +-2.8579156 -10.089437 -1.5305344 128.0 +-2.9194939 -10.070762 -1.5303864 128.0 +-2.9792631 -10.046021 -1.5293505 128.0 +-3.0408483 -10.027553 -1.5293505 128.0 +-3.1081769 -10.027597 -1.5323102 128.0 +-3.1705427 -10.011166 -1.5327542 128.0 +-3.2319105 -9.9915228 -1.5327542 128.0 +-3.2999818 -9.9921637 -1.5360098 128.0 +-3.3552265 -9.9539213 -1.5331981 128.0 +-3.4207439 -9.9462395 -1.5352699 128.0 +-3.4876032 -9.9418612 -1.5379335 128.0 +-3.5468736 -9.9156179 -1.5371935 128.0 +-3.6069701 -9.8918104 -1.5368977 128.0 +-3.6682866 -9.8713465 -1.5371935 128.0 +-3.7298377 -9.8514271 -1.5376376 128.0 +-3.7866552 -9.819128 -1.5361577 128.0 +-3.8471944 -9.796629 -1.5363057 128.0 +-3.9178834 -9.799469 -1.5405972 128.0 +-1.500919 -3.6902266 -0.55755258 128.0 +-1.5205055 -3.6736379 -0.55636871 128.0 +-4.0926027 -9.7138453 -1.5386734 128.0 +-4.1478419 -9.6785526 -1.5370456 128.0 +-4.2067552 -9.6520128 -1.5368977 128.0 +-4.269908 -9.6350603 -1.5383774 128.0 +-3.9977803 -8.873827 -1.4177721 128.0 +-4.0356793 -8.8131638 -1.4118528 128.0 +-4.0909319 -8.790925 -1.4122968 128.0 +-1.5255554 -3.228054 -0.4956961 128.0 +-1.5457619 -3.2195241 -0.4958441 128.0 +-1.6570207 -3.3975093 -0.52706832 128.0 +-1.6734437 -3.3784173 -0.52558845 128.0 +-1.6972545 -3.3742692 -0.52662432 128.0 +-1.7201772 -3.3681948 -0.52736425 128.0 +-1.7430891 -3.3619659 -0.52810419 128.0 +-1.76645 -3.3564575 -0.52899206 128.0 +-4.5703793 -8.552597 -1.4124447 128.0 +-4.623714 -8.5261307 -1.4127407 128.0 +-4.690249 -8.523592 -1.4171802 128.0 +-4.7487292 -8.5058784 -1.419104 128.0 +-4.813993 -8.499814 -1.4230994 128.0 +-4.8389544 -8.4229536 -1.4149604 128.0 +-5.4069853 -9.2791681 -1.5684178 128.0 +-4.8226833 -8.1611614 -1.3798887 128.0 +-4.8686008 -8.12463 -1.3787049 128.0 +-1.949941 -3.2105508 -0.52351671 128.0 +-1.9794617 -3.2145233 -0.52632838 128.0 +-5.6896014 -9.1097822 -1.5685657 128.0 +-5.7406287 -9.0671797 -1.5672339 128.0 +-5.8089776 -9.0517607 -1.5707855 128.0 +-5.864409 -9.0159464 -1.5707855 128.0 +-5.9130864 -8.9698858 -1.5690098 128.0 +-5.974607 -8.9433022 -1.5707855 128.0 +-6.0343599 -8.9138451 -1.5721173 128.0 +-6.1006908 -8.8937759 -1.575225 128.0 +-6.1528893 -8.8529272 -1.574633 128.0 +-6.2162056 -8.8279448 -1.5770007 128.0 +-6.2748513 -8.7960768 -1.5781846 128.0 +-6.3269668 -8.7550049 -1.5777407 128.0 +-6.3846574 -8.7216043 -1.5787766 128.0 +-6.4409976 -8.6862364 -1.5795164 128.0 +-6.5007086 -8.6552496 -1.5811442 128.0 +-6.5638742 -8.6285791 -1.58366 128.0 +-6.622128 -8.595192 -1.5849918 128.0 +-6.6735253 -8.5528383 -1.5846958 128.0 +-6.7344642 -8.5225916 -1.5867676 128.0 +-6.7952833 -8.4919195 -1.5888393 128.0 +-6.862206 -8.468504 -1.5923909 128.0 +-6.9240775 -8.4384708 -1.5947586 128.0 +-6.9788852 -8.3996296 -1.5954986 128.0 +-7.0156474 -8.3392448 -1.5920949 128.0 +-7.080153 -8.3118496 -1.5952026 128.0 +-7.1465244 -8.2862234 -1.5987542 128.0 +-7.2069921 -8.2533903 -1.6009738 128.0 +-7.2653599 -8.2179041 -1.6027496 128.0 +-7.3004746 -8.1562223 -1.599346 128.0 +-7.3596816 -8.1215334 -1.6014178 128.0 +-7.4187369 -8.0864239 -1.6034895 128.0 +-7.474946 -8.0479965 -1.6049694 128.0 +-7.5499339 -8.029356 -1.6105927 128.0 +-7.5963311 -7.9800143 -1.6100007 128.0 +-7.6430936 -7.9311175 -1.6095568 128.0 +-7.7095723 -7.9024749 -1.6134044 128.0 +-7.7891922 -7.8866825 -1.6200635 128.0 +-7.8668098 -7.8681111 -1.6262788 128.0 +-7.9050889 -7.8099632 -1.624207 128.0 +-7.9401193 -7.7488794 -1.6215434 128.0 +-7.9989095 -7.7109947 -1.623911 128.0 +-8.0510864 -7.666543 -1.624947 128.0 +-8.1066217 -7.6251283 -1.6267227 128.0 +-8.1634007 -7.5846667 -1.6287944 128.0 +-8.2199879 -7.5437951 -1.6308662 128.0 +-8.2631893 -7.4905596 -1.6302743 128.0 +-8.3119431 -7.4423552 -1.6308662 128.0 +-8.3633785 -7.3964548 -1.63205 128.0 +-8.4197788 -7.3547573 -1.6342698 128.0 +-8.4707394 -7.3081236 -1.6354537 128.0 +-8.5274668 -7.2662725 -1.6378213 128.0 +-8.5749187 -7.2163591 -1.6384133 128.0 +-8.6205568 -7.1648726 -1.6387093 128.0 +-8.6612997 -7.1093335 -1.6381173 128.0 +-8.7162838 -7.0653949 -1.6403371 128.0 +-8.7749157 -7.0241394 -1.6432967 128.0 +-8.8217287 -6.9732313 -1.6440367 128.0 +-8.8705873 -6.9238381 -1.6452205 128.0 +-8.9340563 -6.8855777 -1.6492159 128.0 +-8.980072 -6.8336239 -1.6499559 128.0 +-9.0242062 -6.7801762 -1.6503998 128.0 +-9.0791426 -6.7346921 -1.6529156 128.0 +-9.1258812 -6.6829467 -1.6539514 128.0 +-9.170723 -6.6297221 -1.6546913 128.0 +-9.2176704 -6.5779219 -1.6558752 128.0 +-9.2659435 -6.5269341 -1.657355 128.0 +-9.3318043 -6.4880199 -1.6620904 128.0 +-9.3910112 -6.4440665 -1.665642 128.0 +-9.441021 -6.3935313 -1.6675657 128.0 +-9.4932299 -6.3442726 -1.6699334 128.0 +-9.521245 -6.2788272 -1.6680098 128.0 +-9.5662241 -6.2246017 -1.6691935 128.0 +-9.6075668 -6.1679244 -1.6697855 128.0 +-9.6477385 -6.1104445 -1.6702294 128.0 +-9.6858883 -6.0516562 -1.6703774 128.0 +-9.7405205 -6.0030055 -1.673485 128.0 +-9.7839317 -5.9472346 -1.6746689 128.0 +-6.6060452 -3.9606712 -1.113965 128.0 +-9.8459597 -5.8206844 -1.6728932 128.0 +-9.9045601 -5.7736068 -1.6768886 128.0 +-9.9475174 -5.7171593 -1.6782205 128.0 +-9.9867125 -5.658452 -1.6789603 128.0 +-10.030743 -5.6023717 -1.6805881 128.0 +-10.096121 -5.5578856 -1.6859156 128.0 +-10.144813 -5.5038486 -1.6884313 128.0 +-10.180137 -5.44243 -1.6887271 128.0 +-10.222965 -5.3849325 -1.6903549 128.0 +-7.5414195 -3.9138556 -1.2327945 128.0 +-10.326145 -5.2784276 -1.6967182 128.0 +-6.9378152 -3.493315 -1.1237319 128.0 +-6.9298773 -3.4361856 -1.1188484 128.0 +-6.9454985 -3.3909974 -1.1179606 128.0 +-6.9670658 -3.3487451 -1.1181085 128.0 +-7.0071511 -3.3152351 -1.1213641 128.0 +-7.0470867 -3.281359 -1.1246197 128.0 +-6.587832 -3.0185544 -1.0457453 128.0 +-6.6269679 -2.9874203 -1.0491489 128.0 +-10.604461 -4.7016292 -1.6971622 128.0 +-10.669374 -4.6522813 -1.7030815 128.0 +-10.71408 -4.5937409 -1.7057451 128.0 +-10.730217 -4.5229216 -1.7038213 128.0 +-10.723046 -4.442616 -1.6981981 128.0 +-10.702471 -4.3573494 -1.690503 128.0 +-10.648195 -4.259284 -1.6774806 128.0 +-7.5194831 -2.9547758 -1.1703461 128.0 +-7.5347037 -2.9075136 -1.1699022 128.0 +-10.671147 -4.0422497 -1.6688976 128.0 +-10.683698 -3.9722173 -1.6669738 128.0 +-10.687429 -3.8991337 -1.6637182 128.0 +-10.704635 -3.8311512 -1.6626823 128.0 +-10.716742 -3.7614675 -1.6609066 128.0 +-10.725592 -3.6908143 -1.6586869 128.0 +-10.735853 -3.6208262 -1.6567631 128.0 +-10.732513 -3.5465086 -1.6527675 128.0 +-10.738075 -3.4754128 -1.6502519 128.0 +-10.77334 -3.4139397 -1.6524715 128.0 +-10.801642 -3.3501146 -1.6536554 128.0 +-10.808745 -3.2797549 -1.6515837 128.0 +-10.85711 -3.2218096 -1.6560231 128.0 +-10.896622 -3.1609151 -1.6591308 128.0 +-10.967195 -3.1085534 -1.6671218 128.0 +-11.010844 -3.0480592 -1.6709694 128.0 +-11.053208 -2.9868879 -1.6746689 128.0 +-11.097149 -2.9258156 -1.6786644 128.0 +-11.143628 -2.8650546 -1.6831039 128.0 +-11.258853 -2.8211339 -1.6981981 128.0 +-11.309579 -2.7602015 -1.7033774 128.0 +-11.355169 -2.6976099 -1.7078168 128.0 +-11.398489 -2.6341176 -1.7119603 128.0 +-11.483914 -2.5797281 -1.7226151 128.0 +-11.547841 -2.5197527 -1.7300142 128.0 +-11.598885 -2.4564271 -1.7354895 128.0 +-11.686398 -2.4001267 -1.7465881 128.0 +-11.750374 -2.3382142 -1.7541353 128.0 +-11.798491 -2.272615 -1.7593147 128.0 +-11.836519 -2.2047031 -1.7630142 128.0 +-11.797262 -2.1225822 -1.7550231 128.0 +-11.684362 -2.028347 -1.7359334 128.0 +-11.913138 -1.9928179 -1.7687855 128.0 +-12.162416 -1.9578551 -1.8047451 128.0 +-12.511395 -1.9353184 -1.8557988 128.0 +-13.039572 -1.9351228 -1.9339334 128.0 +-13.118762 -1.8646742 -1.9441441 128.0 +-13.127017 -1.7837447 -1.9437002 128.0 +-13.168118 -1.7071041 -1.9482876 128.0 +-13.235276 -1.6332943 -1.9568707 128.0 +-13.245049 -1.5520535 -1.9568707 128.0 +-13.252357 -1.4705362 -1.9565747 128.0 +-13.257195 -1.3887818 -1.9559827 128.0 +-13.24972 -1.3058603 -1.9536151 128.0 +-13.240741 -1.2229921 -1.9510993 128.0 +-13.24307 -1.1413013 -1.9503595 128.0 +-13.251795 -1.0601795 -1.9506553 128.0 +-13.261995 -0.97913891 -1.9512473 128.0 +-13.26282 -0.89741302 -1.9505074 128.0 +-13.266103 -0.81589574 -1.9502114 128.0 +-13.271847 -0.73453563 -1.9503595 128.0 +-13.284006 -0.65347534 -1.9515432 128.0 +-13.279861 -0.57161438 -1.9503595 128.0 +-13.28213 -0.49008355 -1.9502114 128.0 +-13.287852 -0.40866765 -1.9506553 128.0 +-13.277257 -0.32681197 -1.9487317 128.0 +-13.352185 -0.24668361 -1.9596822 128.0 +-13.27829 -0.16383077 -1.9484357 128.0 +-13.305747 -0.082516901 -1.9524312 128.0 +-13.351497 -0.0008718209 -1.9592383 128.0 +-13.254332 0.080454633 -1.9447361 128.0 +-13.287211 0.16219354 -1.9497675 128.0 +-13.295855 0.24390154 -1.9512473 128.0 +-13.259503 0.32462853 -1.9460679 128.0 +-13.154455 0.40282393 -1.9306778 128.0 +-13.238708 0.48673582 -1.9437002 128.0 +-13.312543 0.57127184 -1.9552429 128.0 +-13.287055 0.65187722 -1.9519873 128.0 +-13.233431 0.73066235 -1.9445881 128.0 +-13.222775 0.81148338 -1.9437002 128.0 +-13.246163 0.8945365 -1.9479917 128.0 +-12.254591 -0.30979642 -1.9401276 128.0 +-12.269093 -0.23484385 -1.9421993 128.0 +-12.267341 -0.15951909 -1.9417213 128.0 +-12.275987 -0.084299594 -1.9429961 128.0 +-12.24172 -0.0089475885 -1.9374185 128.0 +-12.31361 0.066553526 -1.949052 128.0 +-12.257689 0.14147095 -1.9401276 128.0 +-12.267448 0.21687165 -1.9418806 128.0 +-12.265886 0.29213923 -1.9418806 128.0 +-12.252022 0.36704144 -1.9399682 128.0 +-12.253486 0.44235384 -1.9406058 128.0 +-12.247581 0.51740658 -1.9401276 128.0 +-12.207692 0.59078217 -1.9342312 128.0 +-12.179193 0.66433257 -1.9302471 128.0 +-12.258647 0.74413192 -1.9437931 128.0 +-12.160274 0.81308168 -1.9286534 128.0 +-12.227916 0.89299899 -1.9404464 128.0 +-12.158237 0.96294695 -1.9300877 128.0 +-12.174724 1.0394613 -1.933753 128.0 +-12.172049 1.1145043 -1.9343905 128.0 +-12.164981 1.1891696 -1.9343905 128.0 +-12.153528 1.263382 -1.933753 128.0 +-12.143584 1.3377147 -1.9334344 128.0 +-12.092982 1.4072956 -1.9265816 128.0 +-12.063541 1.4789481 -1.9232351 128.0 +-12.086552 1.5571024 -1.9284941 128.0 +-12.112968 1.6361229 -1.9343905 128.0 +-12.079241 1.7071012 -1.9305657 128.0 +-12.065609 1.7807536 -1.9300877 128.0 +-12.068115 1.8568546 -1.9323188 128.0 +-12.045773 1.9291513 -1.9305657 128.0 +-12.001572 1.9976784 -1.9253068 128.0 +-12.002708 2.0736334 -1.9275378 128.0 +-12.005306 2.1500258 -1.9300877 128.0 +-11.997712 2.2247281 -1.9310439 128.0 +-11.914997 2.2851031 -1.919729 128.0 +-11.967571 2.3714073 -1.9307251 128.0 +-11.963434 2.4469702 -1.9324782 128.0 +-11.887339 2.5074954 -1.9224381 128.0 +-11.863048 2.5785007 -1.9210039 128.0 +-11.855673 2.6531827 -1.9224381 128.0 +-11.814157 2.7201195 -1.9182947 128.0 +-11.839514 2.802563 -1.9253068 128.0 +-11.806746 2.8714237 -1.9227569 128.0 +-11.811893 2.949554 -1.9265816 128.0 +-11.76584 3.0148695 -1.9219601 128.0 +-11.721339 3.0802329 -1.9176573 128.0 +-11.669807 3.1433666 -1.9122388 128.0 +-11.662672 3.2183256 -1.9143106 128.0 +-11.611355 3.2809682 -1.9090515 128.0 +-11.58816 3.3513298 -1.9085735 128.0 +-11.615658 3.4366527 -1.9167011 128.0 +-11.606636 3.5115764 -1.9187728 128.0 +-11.573553 3.5792277 -1.9168605 128.0 +-11.522192 3.640954 -1.9119202 128.0 +-11.490239 3.7085524 -1.9103265 128.0 +-11.536653 3.8018482 -1.9221195 128.0 +-11.439186 3.8477025 -1.9095297 128.0 +-11.466719 3.9354436 -1.9182947 128.0 +-11.486149 4.0210576 -1.9257848 128.0 +-11.38223 4.0632505 -1.9122388 128.0 +-11.385843 4.1434789 -1.9171792 128.0 +-11.272271 4.1806536 -1.9020395 128.0 +-11.290734 4.2664886 -1.9096891 128.0 +-11.252366 4.3310776 -1.9076173 128.0 +-11.210873 4.3942752 -1.9050674 128.0 +-11.176364 4.4600544 -1.9037926 128.0 +-11.192691 4.5463786 -1.911442 128.0 +-11.13995 4.6047888 -1.9071392 128.0 +-11.119676 4.6764994 -1.9085735 128.0 +-11.096218 4.7469702 -1.9095297 128.0 +-11.055114 4.8098459 -1.9074579 128.0 +-10.994697 4.8640099 -1.9020395 128.0 +-10.963745 4.9309754 -1.9018801 128.0 +-10.949444 5.0055428 -1.9047488 128.0 +-10.913153 5.0701375 -1.9037926 128.0 +-10.87291 5.1327896 -1.9021989 128.0 +-10.857233 5.2070918 -1.9050674 128.0 +-10.796679 5.259778 -1.8999678 128.0 +-10.800481 5.3438745 -1.9065018 128.0 +-10.775427 5.4140334 -1.9079361 128.0 +-10.74816 5.4831882 -1.9090515 128.0 +-10.714314 5.5490346 -1.9090515 128.0 +-10.66783 5.6082411 -1.9068205 128.0 +-10.64367 5.6791682 -1.9087329 128.0 +-10.618173 5.7495403 -1.9104859 128.0 +-10.609516 5.82932 -1.9154261 128.0 +-10.576998 5.8962317 -1.9160637 128.0 +-10.536324 5.9585905 -1.9152668 128.0 +-10.51669 6.0329518 -1.9184541 128.0 +-10.460702 6.0864458 -1.9149481 128.0 +-10.421459 6.1495132 -1.9146293 128.0 +-10.418263 6.2341247 -1.9211633 128.0 +-10.400916 6.3107347 -1.9251474 128.0 +-10.360317 6.3734002 -1.9248286 128.0 +-10.331067 6.4431186 -1.926741 128.0 +-10.300518 6.5121903 -1.9284941 128.0 +-10.313563 6.6093588 -1.9386934 128.0 +-10.277782 6.6757436 -1.9396496 128.0 +-10.230855 6.7348819 -1.938534 128.0 +-10.182768 6.7931476 -1.9372591 128.0 +-10.184242 6.8848023 -1.9457054 128.0 +-10.152394 6.9544144 -1.9477772 128.0 +-10.051137 6.9760509 -1.9363029 128.0 +-10.094553 7.0983505 -1.9533548 128.0 +-10.0492 7.1590104 -1.9530362 128.0 +-10.015491 7.2280464 -1.9551079 128.0 +-9.987689 7.3015985 -1.9584545 128.0 +-9.9403191 7.3609819 -1.9579765 128.0 +-9.8799601 7.4105816 -1.9549485 128.0 +-9.8437366 7.4782305 -1.9568609 128.0 +-9.7968836 7.5378881 -1.9567015 128.0 +-9.7473326 7.5954313 -1.9560641 128.0 +-9.6834946 7.641643 -1.952558 128.0 +-9.6811552 7.7366605 -1.9618012 128.0 +-9.6419439 7.8027487 -1.9635541 128.0 +-9.6259575 7.8880429 -1.9702475 128.0 +-9.5887718 7.9564137 -1.9726379 128.0 +-9.5813446 8.0500259 -1.981403 128.0 +-9.522747 8.1009884 -1.9794906 128.0 +-9.478097 8.1637764 -1.9806062 128.0 +-9.4211302 8.2159395 -1.9791719 128.0 +-9.3801613 8.2820864 -1.9812436 128.0 +-9.3402081 8.3493547 -1.9836341 128.0 +-9.3019772 8.4184313 -1.9865026 128.0 +-9.2829037 8.5053587 -1.993674 128.0 +-9.2218552 8.5541019 -1.9917617 128.0 +-9.1432867 8.5861969 -1.9860245 128.0 +-9.1283522 8.6781874 -1.9944708 128.0 +-9.0813341 8.7401953 -1.9959052 128.0 +-9.0225849 8.7909298 -1.9947896 128.0 +-8.980423 8.8579111 -1.9974988 128.0 +-8.9189167 8.9058723 -1.9959052 128.0 +-8.8738241 8.9702549 -1.9981363 128.0 +-8.8469067 9.053483 -2.0046701 128.0 +-8.8035297 9.1203814 -2.0075388 128.0 +-8.7474031 9.1742277 -2.0075388 128.0 +-8.6814699 9.2176666 -2.0053077 128.0 +-8.6334896 9.280158 -2.0073793 128.0 +-8.6271544 9.3882008 -2.019491 128.0 +-8.5229387 9.3897915 -2.0083356 128.0 +-8.4724131 9.449996 -2.0100884 128.0 +-8.4371777 9.5276709 -2.0156662 128.0 +-8.3954573 9.5985804 -2.0198097 128.0 +-8.3441486 9.6588774 -2.0217221 128.0 +-8.2763948 9.7001324 -2.0196505 128.0 +-8.219265 9.7537518 -2.020288 128.0 +-8.177577 9.8260059 -2.0249095 128.0 +-8.1190128 9.8782854 -2.0253875 128.0 +-8.0756683 9.949378 -2.0298498 128.0 +-8.0113811 9.9948912 -2.029053 128.0 +-7.9480648 10.041537 -2.0285747 128.0 +-7.8832617 10.086227 -2.0277779 128.0 +-7.8338919 10.150821 -2.0311246 128.0 +-7.7876163 10.219898 -2.0354276 128.0 +-7.7271357 10.270645 -2.0360649 128.0 +-7.6645594 10.318657 -2.0362244 128.0 +-7.5923438 10.35355 -2.0338337 128.0 +-7.5402513 10.415935 -2.0370212 128.0 +-7.4871044 10.477265 -2.0400491 128.0 +-7.432919 10.537529 -2.0429175 128.0 +-7.3726349 10.589419 -2.0441926 128.0 +-7.3097572 10.637712 -2.0448301 128.0 +-7.2526598 10.694619 -2.0472205 128.0 +-7.1836076 10.733996 -2.0462642 128.0 +-7.1214185 10.783639 -2.0473797 128.0 +-7.0745206 10.856908 -2.053117 128.0 +-7.0152454 10.911737 -2.0553479 128.0 +-6.9534483 10.962914 -2.0569417 128.0 +-6.8918104 11.014578 -2.0586946 128.0 +-6.8147631 11.041536 -2.0558262 128.0 +-6.760746 11.105911 -2.0601289 128.0 +-6.6939983 11.149724 -2.060607 128.0 +-6.6098671 11.164254 -2.0556667 128.0 +-6.5636387 11.242966 -2.0628381 128.0 +-6.4891119 11.273617 -2.0610852 128.0 +-6.432972 11.336403 -2.065388 128.0 +-6.3719678 11.39117 -2.0682566 128.0 +-6.2924194 11.412763 -2.0650692 128.0 +-6.2142601 11.436411 -2.06236 128.0 +-6.1542234 11.493472 -2.065866 128.0 +-6.0817423 11.527525 -2.0652287 128.0 +-6.0200028 11.582144 -2.0684159 128.0 +-5.9515224 11.624136 -2.0693722 128.0 +-5.8907547 11.681591 -2.0731969 128.0 +-5.8233581 11.726357 -2.0747905 128.0 +-5.7525983 11.764529 -2.0752685 128.0 +-5.6897254 11.819174 -2.0787747 128.0 +-5.6310487 11.883303 -2.0840335 128.0 +-5.5655394 11.933735 -2.0869021 128.0 +-5.4864454 11.955098 -2.084671 128.0 +-5.4109554 11.984038 -2.0838742 128.0 +-5.340126 12.02333 -2.0849898 128.0 +-5.2686234 12.061297 -2.0859461 128.0 +-5.2077656 12.124239 -2.0913644 128.0 +-5.1317382 12.152327 -2.0907269 128.0 +-5.0449648 12.154408 -2.0856273 128.0 +-4.9844613 12.219871 -2.0916831 128.0 +-4.912693 12.258472 -2.0931175 128.0 +-4.8417239 12.299408 -2.0950298 128.0 +-4.764029 12.32336 -2.0940735 128.0 +-4.6879745 12.351437 -2.0939143 128.0 +-4.6186476 12.397546 -2.0969422 128.0 +-4.5496097 12.445123 -2.1002889 128.0 +-4.4781618 12.486744 -2.1026793 128.0 +-4.404736 12.523298 -2.1042728 128.0 +-4.3265243 12.546357 -2.1036353 128.0 +-4.243453 12.554898 -2.1006074 128.0 +-4.1682 12.586322 -2.1015637 128.0 +-4.0930257 12.618234 -2.1026793 128.0 +-4.0134325 12.636525 -2.1015637 128.0 +-3.9331832 12.652429 -2.1001294 128.0 +-3.862083 12.698047 -2.1037948 128.0 +-3.7686143 12.669462 -2.0950298 128.0 +-3.675091 12.638314 -2.0859461 128.0 +-3.6444306 12.825861 -2.1136754 128.0 +-3.5767534 12.887934 -2.1203687 128.0 +-3.4996727 12.91726 -2.1216435 128.0 +-3.4231236 12.94899 -2.1233966 128.0 +-3.3335001 12.930555 -2.1168625 128.0 +-3.2553 12.955553 -2.1176596 128.0 +-3.1729283 12.963777 -2.115747 128.0 +-3.085315 12.949389 -2.1101694 128.0 +-3.0100369 12.98635 -2.1131973 128.0 +-2.9190116 12.954495 -2.1049104 128.0 +-2.8487587 13.014595 -2.1119223 128.0 +-2.767823 13.027001 -2.1111255 128.0 +-2.6856468 13.033103 -2.1093726 128.0 +-2.6027265 13.034815 -2.106982 128.0 +-2.5120161 12.995291 -2.0978982 128.0 +-2.4311426 13.004638 -2.0969422 128.0 +-2.3458619 12.989193 -2.0920019 128.0 +-2.2671347 13.009178 -2.092958 128.0 +-2.1805634 12.982927 -2.0864241 128.0 +-2.1022789 13.004834 -2.0878584 128.0 +-2.0203209 13.003831 -2.0856273 128.0 +-1.9400561 13.013054 -2.085149 128.0 +-1.8564036 12.998325 -2.0808463 128.0 +-1.7758107 13.003603 -2.07989 128.0 +-1.6956059 13.011317 -2.079412 128.0 +-1.6141573 13.00874 -2.0773404 128.0 +-1.5339601 13.015458 -2.0768621 128.0 +-1.4522073 13.007946 -2.0741529 128.0 +-1.3711222 13.00483 -2.0722406 128.0 +-1.2873021 12.972721 -2.0657067 128.0 +-1.2088681 12.993155 -2.0677783 128.0 +-1.1310008 13.021964 -2.0712845 128.0 +-1.0505223 13.02177 -2.070169 128.0 +-0.96928167 13.010251 -2.0673003 128.0 +-0.88835669 13.000195 -2.0647504 128.0 +-0.80863357 13.006386 -2.0649099 128.0 +-0.72881263 13.011103 -2.0649099 128.0 +-0.64911187 13.018288 -2.065388 128.0 +-0.56926411 13.023012 -2.0655472 128.0 +-0.48953113 13.031192 -2.0663443 128.0 +-0.40919161 13.02211 -2.0644319 128.0 +-0.32898197 13.012532 -2.0625193 128.0 +-0.24890527 13.002461 -2.060607 128.0 +-0.16892594 12.988937 -2.0582166 128.0 +-0.089183278 12.983806 -2.0572603 128.0 +-0.0095272791 13.000892 -2.0599697 128.0 +0.070361555 13.022424 -2.0634756 128.0 +0.15023023 13.018785 -2.0629976 128.0 +0.23000467 13.011696 -2.0620413 128.0 +0.30974472 13.006092 -2.0614038 128.0 +0.38951322 13.00296 -2.0612445 128.0 +0.46953964 13.007232 -2.06236 128.0 +0.54950821 13.008051 -2.0629976 128.0 +0.62945682 13.007392 -2.0634756 128.0 +0.70904189 12.999342 -2.0628381 128.0 +0.78908992 12.999674 -2.0636349 128.0 +0.86818129 12.984737 -2.0620413 128.0 +0.94977838 13.00575 -2.0663443 128.0 +1.0301076 13.006566 -2.0674598 128.0 +1.1098111 12.999018 -2.0673003 128.0 +1.1852314 12.944774 -2.0596509 128.0 +1.2693415 12.985402 -2.0674598 128.0 +1.3498108 12.985225 -2.0687346 128.0 +1.4321629 13.00123 -2.0727186 128.0 +1.5128226 13.000042 -2.0739937 128.0 +1.5911198 12.978757 -2.0720813 128.0 +1.6707259 12.968749 -2.0720813 128.0 +1.7541006 12.986626 -2.0767028 128.0 +1.8365142 12.995169 -2.07989 128.0 +1.9186664 13.000258 -2.0825994 128.0 +1.9992989 12.994095 -2.0835555 128.0 +2.0808647 12.99328 -2.0854678 128.0 +2.1633058 12.996823 -2.088177 128.0 +2.2470448 13.006652 -2.0920019 128.0 +2.3269839 12.993591 -2.0921612 128.0 +2.4034281 12.961596 -2.0892925 128.0 +2.4940684 13.004779 -2.0988545 128.0 +2.5718987 12.979547 -2.097261 128.0 +2.6584141 12.997374 -2.1028385 128.0 +2.7403555 12.991443 -2.1045916 128.0 +2.8168731 12.959913 -2.1022012 128.0 +2.8980651 12.950092 -2.103476 128.0 +2.98035 12.944573 -2.1055477 128.0 +3.0554001 12.907789 -2.1025198 128.0 +3.1478393 12.943478 -2.1116037 128.0 +3.2114162 12.860703 -2.1010857 128.0 +3.2853673 12.82163 -2.0978982 128.0 +3.3609669 12.789771 -2.0959859 128.0 +3.4293675 12.731731 -2.0897708 128.0 +3.5239658 12.770404 -2.0998106 128.0 +3.5781002 12.663038 -2.0854678 128.0 +3.6784933 12.71956 -2.098695 128.0 +3.7497487 12.674029 -2.0948703 128.0 +3.8254435 12.644168 -2.0937548 128.0 +3.8860393 12.565755 -2.0845118 128.0 +3.9514685 12.504961 -2.0782964 128.0 +4.0211496 12.458871 -2.0746312 128.0 +4.1154394 12.488346 -2.0838742 128.0 +4.187583 12.449759 -2.0816431 128.0 +4.276392 12.460247 -2.0878584 128.0 +4.3498306 12.425386 -2.0864241 128.0 +4.4332905 12.418918 -2.0899301 128.0 +4.5036693 12.37571 -2.0872209 128.0 +4.5788341 12.345992 -2.0869021 128.0 +4.6496162 12.304736 -2.084671 128.0 +4.7221923 12.268604 -2.0833962 128.0 +4.7966619 12.23756 -2.0830774 128.0 +4.8617811 12.183141 -2.0787747 128.0 +4.8985519 12.059785 -2.0625193 128.0 +4.9758511 12.037712 -2.0639536 128.0 +5.0637789 12.040626 -2.0698502 128.0 +5.118927 11.96576 -2.0622008 128.0 +5.2174559 11.992064 -2.0724001 128.0 +5.2949333 11.968852 -2.0739937 128.0 +5.36058 11.91903 -2.0709658 128.0 +5.4327917 11.884119 -2.070647 128.0 +5.4993706 11.83713 -2.0682566 128.0 +5.5668411 11.792451 -2.0663443 128.0 +5.6254334 11.729586 -2.0612445 128.0 +5.696002 11.692185 -2.0607665 128.0 +5.761508 11.644628 -2.0585353 128.0 +5.8186674 11.580828 -2.0534356 128.0 +5.8855791 11.536992 -2.0520015 128.0 +5.9853129 11.556767 -2.0622008 128.0 +6.1199613 11.641288 -2.0843523 128.0 +6.1675758 11.559096 -2.0762248 128.0 +6.2256937 11.497596 -2.0719218 128.0 +6.2842402 11.437548 -2.0679379 128.0 +6.3413239 11.375491 -2.0636349 128.0 +6.3517179 11.231528 -2.0441926 128.0 +6.4632487 11.266845 -2.0580573 128.0 +6.482614 11.141644 -2.0421207 128.0 +6.5904884 11.168827 -2.0547106 128.0 +6.6198649 11.062947 -2.0424395 128.0 +6.6860847 11.019588 -2.0419614 128.0 +6.7349534 10.948085 -2.0362244 128.0 +6.8249879 10.943412 -2.0432363 128.0 +6.876709 10.87713 -2.0386147 128.0 +6.9369287 10.824756 -2.0367024 128.0 +6.9843969 10.75301 -2.0311246 128.0 +7.0377607 10.690986 -2.0274594 128.0 +7.0900784 10.627892 -2.0236344 128.0 +7.1496277 10.576009 -2.0220408 128.0 +7.2088075 10.523796 -2.0204473 128.0 +7.2625504 10.463956 -2.0174193 128.0 +7.3198051 10.409506 -2.015507 128.0 +7.3978581 10.384498 -2.019491 128.0 +7.4568157 10.332505 -2.0182161 128.0 +7.5148306 10.279384 -2.0167818 128.0 +7.5853996 10.243395 -2.0188537 128.0 +7.6463323 10.194289 -2.0183754 128.0 +7.691421 10.124383 -2.0137539 128.0 +7.7425628 10.062915 -2.0108855 128.0 +7.7974873 10.006652 -2.0091324 128.0 +7.8489556 9.9462185 -2.0065825 128.0 +7.8956623 9.8801327 -2.0029171 128.0 +7.9573789 9.8330345 -2.0032358 128.0 +8.0063009 9.7702789 -2.0003674 128.0 +8.0629473 9.7171707 -1.9995705 128.0 +8.116704 9.6607113 -1.9981363 128.0 +8.1745491 9.6092224 -1.9978175 128.0 +8.2243366 9.5484114 -1.9955864 128.0 +8.2691441 9.4821434 -1.9922397 128.0 +8.3173695 9.420125 -1.9898493 128.0 +8.369092 9.3622885 -1.988415 128.0 +8.4323425 9.3173485 -1.9898493 128.0 +8.4840183 9.2596102 -1.9885744 128.0 +8.5353041 9.2015886 -1.9872994 128.0 +8.5861969 9.1432867 -1.9860245 128.0 +8.6468983 9.095439 -1.9871401 128.0 +8.6915913 9.0308304 -1.9845903 128.0 +8.7303057 8.9603586 -1.9807656 128.0 +8.780962 8.9024048 -1.9798093 128.0 +8.8172846 8.8301945 -1.9756659 128.0 +8.8516493 8.7564859 -1.9712037 128.0 +8.8734388 8.6709585 -1.9640323 128.0 +8.915822 8.6060648 -1.9616418 128.0 +8.9548845 8.5382519 -1.9586139 128.0 +9.0142927 8.4899139 -1.9602076 128.0 +9.062602 8.4310808 -1.9594107 128.0 +9.0988989 8.3612871 -1.9560641 128.0 +9.1273708 8.28473 -1.9511237 128.0 +9.1655378 8.2173662 -1.9484146 128.0 +9.2187424 8.1635904 -1.949052 128.0 +9.2619724 8.1010227 -1.9476178 128.0 +9.2965641 8.0311317 -1.9444305 128.0 +9.3366556 7.966248 -1.9425181 128.0 +9.3815851 7.9056287 -1.9417213 128.0 +9.4177752 7.837811 -1.9391714 128.0 +9.4664526 7.7805037 -1.9393308 128.0 +9.4971523 7.7085843 -1.9358248 128.0 +9.5419617 7.6483135 -1.9353467 128.0 +9.5569744 7.5644994 -1.9288127 128.0 +9.5993204 7.5026765 -1.9280159 128.0 +9.6334524 7.4345875 -1.9256254 128.0 +9.6616144 7.3621736 -1.9221195 128.0 +9.6900396 7.290288 -1.9187728 128.0 +9.7337971 7.2301049 -1.9186134 128.0 +9.7811613 7.1725788 -1.919251 128.0 +9.8121929 7.1031651 -1.9167011 128.0 +9.8676405 7.051435 -1.9190916 128.0 +9.909915 6.9901862 -1.9189322 128.0 +9.9437075 6.9230437 -1.9171792 128.0 +9.9713535 6.8518357 -1.9143106 128.0 +10.022196 6.7966189 -1.9160637 128.0 +10.022689 6.707541 -1.9080954 128.0 +10.062833 6.6453724 -1.9079361 128.0 +10.087704 6.5732622 -1.9049081 128.0 +10.13283 6.5144448 -1.9058644 128.0 +10.177612 6.4553213 -1.9068205 128.0 +10.215356 6.3917036 -1.9065018 128.0 +10.23254 6.3154216 -1.9023583 128.0 +10.271942 6.2530303 -1.9025177 128.0 +10.321119 6.1964912 -1.9045894 128.0 +10.337708 6.120471 -1.9006053 128.0 +10.358871 6.0474677 -1.8975774 128.0 +10.353858 5.9596601 -1.8897685 128.0 +10.362756 5.8804255 -1.8846688 128.0 +10.40295 5.81914 -1.8854656 128.0 +10.416847 5.7432818 -1.8814815 128.0 +10.456228 5.6816144 -1.8822784 128.0 +10.494374 5.6192131 -1.8829159 128.0 +10.522544 5.5514903 -1.8818003 128.0 +10.577432 5.4977484 -1.885625 128.0 +10.583726 5.4187951 -1.8806847 128.0 +10.60708 5.3488626 -1.8789318 128.0 +10.617595 5.2726998 -1.8749477 128.0 +10.620481 5.1931405 -1.8696886 128.0 +10.630798 5.117599 -1.8658639 128.0 +10.720879 5.0801764 -1.8763819 128.0 +10.755426 5.0159678 -1.8770194 128.0 +10.798563 4.9556446 -1.8792505 128.0 +10.797276 4.8750725 -1.8736727 128.0 +10.825181 4.8079286 -1.873354 128.0 +10.82372 4.7279787 -1.8679357 128.0 +10.925092 4.6926489 -1.8806847 128.0 +10.960046 4.6282139 -1.8818003 128.0 +11.008297 4.5692039 -1.8853064 128.0 +11.048923 4.5067925 -1.8875374 128.0 +11.028718 4.4198146 -1.8792505 128.0 +11.108908 4.3730359 -1.8884935 128.0 +11.121719 4.2994504 -1.8861032 128.0 +11.118356 4.2199173 -1.8810035 128.0 +11.155141 4.1557527 -1.8829159 128.0 +11.151687 4.0767193 -1.8779756 128.0 +11.223884 4.0252151 -1.8861032 128.0 +11.299591 3.974288 -1.8948681 128.0 +11.326564 3.9058459 -1.8953463 128.0 +11.283915 3.8138285 -1.8840314 128.0 +11.323973 3.7501068 -1.8868999 128.0 +11.312025 3.6692822 -1.8810035 128.0 +11.352203 3.6054823 -1.8840314 128.0 +11.389195 3.540448 -1.8865812 128.0 +11.357814 3.4544098 -1.8776568 128.0 +11.445032 3.4043593 -1.8888123 128.0 +11.481821 3.3387566 -1.8915216 128.0 +11.457458 3.255559 -1.8840314 128.0 +11.505756 3.1931169 -1.8888123 128.0 +11.492735 3.1136804 -1.8833939 128.0 +11.524986 3.0466366 -1.885625 128.0 +11.603688 2.9913912 -1.895665 128.0 +11.595973 2.9136395 -1.8913622 128.0 +11.613633 2.8424332 -1.8913622 128.0 +11.683673 2.7837059 -1.9001272 128.0 +11.673606 2.7057214 -1.895665 128.0 +11.689988 2.6340425 -1.895665 128.0 +11.722324 2.5658536 -1.8983742 128.0 +11.76199 2.4990087 -1.9023583 128.0 +11.757764 2.4228058 -1.899171 128.0 +11.771441 2.3504226 -1.8990116 128.0 +11.763347 2.2738402 -1.8953463 128.0 +11.770285 2.2003489 -1.8942307 128.0 +11.795222 2.130192 -1.8961431 128.0 +11.864479 2.06761 -1.9053862 128.0 +11.829237 1.986758 -1.8975774 128.0 +11.809045 1.9089379 -1.8923184 128.0 +11.857605 1.8422035 -1.8983742 128.0 +11.893095 1.7730519 -1.9023583 128.0 +11.884205 1.6972517 -1.899171 128.0 +11.911024 1.6265709 -1.9018801 128.0 +11.943295 1.5563906 -1.9055456 128.0 +11.9536 1.4832002 -1.905705 128.0 +11.941887 1.4073992 -1.9023583 128.0 +11.971882 1.336509 -1.9058644 128.0 +11.972985 1.262301 -1.9047488 128.0 +11.955945 1.1863745 -1.9007647 128.0 +11.971847 1.1138152 -1.9021989 128.0 +11.96862 1.0394819 -1.9006053 128.0 +11.960997 0.96491241 -1.8983742 128.0 +12.028715 0.89612567 -1.9084141 128.0 +12.008379 0.82055128 -1.9042706 128.0 +12.066395 0.75016344 -1.9128764 128.0 +11.991917 0.67169189 -1.9001272 128.0 +12.040182 0.60031193 -1.9072986 128.0 +12.021941 0.52547437 -1.9037926 128.0 +12.039737 0.45225558 -1.906183 128.0 +12.054126 0.37874505 -1.9080954 128.0 +12.061157 0.30490011 -1.9088923 128.0 +12.052931 0.23069924 -1.9072986 128.0 +12.061029 0.15682958 -1.9084141 128.0 +12.056828 0.082787491 -1.9076173 128.0 +12.041314 0.0087945629 -1.9050674 128.0 +12.053975 -0.065158665 -1.9071392 128.0 +12.064207 -0.13924421 -1.9088923 128.0 +12.033514 -0.21274364 -1.9041113 128.0 +12.030994 -0.2865524 -1.9039519 128.0 +12.048745 -0.3609584 -1.9071392 128.0 +12.046304 -0.43488133 -1.9071392 128.0 +12.061163 -0.50953734 -1.9100078 128.0 +12.066684 -0.5839628 -1.911442 128.0 +12.049073 -0.65723926 -1.9092109 128.0 +12.055654 -0.73181629 -1.910964 128.0 +12.050936 -0.80577457 -1.910964 128.0 +12.030996 -0.8786245 -1.9085735 128.0 +12.048998 -0.95429868 -1.9123982 128.0 +12.042915 -1.028212 -1.9123982 128.0 +12.062923 -1.1045161 -1.9167011 128.0 +12.00188 -1.1732312 -1.9079361 128.0 +12.025877 -1.2501166 -1.9130358 128.0 +11.996391 -1.3215051 -1.9095297 128.0 +12.003747 -1.396914 -1.9120796 128.0 +12.008668 -1.4722227 -1.9143106 128.0 +11.992555 -1.544996 -1.913195 128.0 +11.989697 -1.6194767 -1.9143106 128.0 +11.987354 -1.6941185 -1.9155855 128.0 +11.978687 -1.7679278 -1.9159043 128.0 +11.922729 -1.8344898 -1.9085735 128.0 +11.883955 -1.9032414 -1.9041113 128.0 +11.815571 -1.9667246 -1.8948681 128.0 +11.522138 -1.9906247 -1.8488119 128.0 +11.04909 -1.9788096 -1.7732732 128.0 +10.903757 -2.0219138 -1.7514403 128.0 +10.634213 -2.0395133 -1.7092087 128.0 +10.467524 -2.0742199 -1.6838698 128.0 +10.441059 -2.1356392 -1.6816387 128.0 +10.234564 -2.1589189 -1.6497658 128.0 +9.7599974 -2.1214635 -1.5735897 128.0 +9.5155811 -2.1295741 -1.5353423 128.0 +8.7894506 -2.0238092 -1.4172534 128.0 +8.5530291 -2.0247245 -1.3801215 128.0 +8.3888807 -2.0403113 -1.354942 128.0 +8.0476723 -2.0097198 -1.30028 128.0 +7.9978929 -2.0495059 -1.2940648 128.0 +7.6509829 -2.0107338 -1.2382872 128.0 +7.640408 -2.0581551 -1.238606 128.0 +7.3392825 -2.0254359 -1.1903186 128.0 +7.1253099 -2.0135274 -1.1565334 128.0 +7.0559192 -2.0407555 -1.1469715 128.0 +6.7990251 -2.0117583 -1.1058555 128.0 +6.6514282 -2.0125616 -1.0830665 128.0 +6.6097164 -2.0442951 -1.0781261 128.0 +6.2901683 -1.9878516 -1.0261734 128.0 +6.2412119 -2.0145853 -1.0199581 128.0 +6.2240448 -2.0512979 -1.0191613 128.0 +6.1879482 -2.0815816 -1.0151772 128.0 +6.2647009 -2.1502733 -1.0304762 128.0 +5.9923534 -2.0979989 -0.98617291 128.0 +6.0054011 -2.1440203 -0.9906351 128.0 +6.0088315 -2.1869047 -0.99350369 128.0 +6.0258451 -2.2350605 -0.99876267 128.0 +5.9917006 -2.2643158 -0.99525666 128.0 +6.1287942 -2.3591907 -1.0213925 128.0 +6.1151223 -2.3971121 -1.0215518 128.0 +5.9939361 -2.3921475 -1.0030656 128.0 +5.8831062 -2.389874 -0.9863323 128.0 +5.8856664 -2.4330919 -0.98936021 128.0 +5.8678961 -2.4680119 -0.98888212 128.0 +5.8517346 -2.503582 -0.98872274 128.0 +5.7765155 -2.5134478 -0.97820473 128.0 +5.7023005 -2.5228853 -0.96784604 128.0 +5.7038198 -2.5655196 -0.97087395 128.0 +5.6789923 -2.5963652 -0.9692803 128.0 +5.7032437 -2.6498785 -0.97645169 128.0 +5.6672363 -2.6755519 -0.97294569 128.0 +5.6863194 -2.7273502 -0.97932023 128.0 +5.4511476 -2.6558356 -0.94011664 128.0 +5.4188218 -2.6813533 -0.93724805 128.0 +5.6245685 -2.8262365 -0.97740787 128.0 +5.5877738 -2.8508258 -0.97390187 128.0 +5.5167012 -2.8573651 -0.96418065 128.0 +5.591692 -2.9398527 -0.98107326 128.0 +5.556128 -2.9648132 -0.97788596 128.0 +5.6072826 -3.0364525 -0.9906351 128.0 +5.4881783 -3.0156593 -0.97214884 128.0 +5.4609485 -3.0444708 -0.97055519 128.0 +5.4765387 -3.0973589 -0.97692978 128.0 +5.4540052 -3.1289392 -0.97629231 128.0 +5.3374262 -3.1057498 -0.95812482 128.0 +5.3174191 -3.1379395 -0.95796543 128.0 +5.2828159 -3.1613836 -0.9550969 128.0 +5.2835755 -3.2060287 -0.95892161 128.0 +5.2982798 -3.2595947 -0.96545553 128.0 +5.2949328 -3.3024907 -0.96864283 128.0 +5.2895899 -3.344413 -0.97151142 128.0 +5.2398772 -3.3581643 -0.96593362 128.0 +5.2175174 -3.3891768 -0.96561491 128.0 +5.2065191 -3.4276407 -0.96752727 128.0 +5.2059207 -3.4732189 -0.97151142 128.0 +5.1526141 -3.4835343 -0.96529621 128.0 +5.1620927 -3.5362842 -0.97135204 128.0 +5.1240764 -3.5566342 -0.96816474 128.0 +5.136075 -3.6118569 -0.97485805 128.0 +5.0712004 -3.6129463 -0.96641177 128.0 +5.0257206 -3.6272411 -0.9617902 128.0 +5.069519 -3.7063661 -0.97501743 128.0 +5.0482688 -3.7385771 -0.97533613 128.0 +5.0426092 -3.7825139 -0.97884214 128.0 +4.9249706 -3.7417228 -0.95971847 128.0 +4.8940945 -3.7658515 -0.95812482 128.0 +4.8919215 -3.8121932 -0.96242762 128.0 +4.9381881 -3.8971765 -0.9767704 128.0 +4.972796 -3.9742408 -0.98888212 128.0 +4.9682698 -4.0208249 -0.9930256 128.0 +4.9435053 -4.0512338 -0.9930256 128.0 +4.8327017 -4.0102577 -0.97501743 128.0 +4.868474 -4.0906372 -0.98776656 128.0 +4.8914084 -4.1613703 -0.99796587 128.0 +4.84409 -4.1726217 -0.99334431 128.0 +4.7945862 -4.1815033 -0.98824465 128.0 +4.8265638 -4.2618079 -1.0006751 128.0 +4.7730894 -4.2669997 -0.99477857 128.0 +4.683135 -4.2385764 -0.98091388 128.0 +4.6606789 -4.2705665 -0.98171073 128.0 +3.5957291 -3.3356955 -0.75302297 128.0 +3.5449677 -3.329313 -0.74632967 128.0 +3.5244727 -3.351002 -0.74632967 128.0 +3.5273187 -3.395155 -0.75158864 128.0 +4.5522356 -4.4356341 -0.98728848 128.0 +4.5326648 -4.471108 -0.98904145 128.0 +4.5435686 -4.5372005 -0.99780649 128.0 +4.5343895 -4.5839424 -1.0021093 128.0 +4.4606385 -4.5650792 -0.99159127 128.0 +4.4250016 -4.5845499 -0.9898383 128.0 +4.4131384 -4.6287622 -0.99366301 128.0 +4.367732 -4.6377878 -0.98967892 128.0 +4.342555 -4.6681142 -0.99047577 128.0 +2.5870314 -2.815661 -0.57851905 128.0 +2.5756779 -2.8380604 -0.57995331 128.0 +2.5496478 -2.8442557 -0.57788157 128.0 +2.5301843 -2.8576293 -0.57740349 128.0 +4.0731745 -4.6571989 -0.96003717 128.0 +6.6177149 -7.6605487 -1.5954226 128.0 +4.0291734 -4.7226033 -0.96338379 128.0 +6.5015798 -7.7155147 -1.5900042 128.0 +6.4427481 -7.7416039 -1.5871357 128.0 +6.3813338 -7.7642117 -1.5836297 128.0 +6.3254852 -7.7932563 -1.581558 128.0 +6.2726078 -7.8257599 -1.580283 128.0 +6.2275357 -7.8679709 -1.5810798 128.0 +6.1900849 -7.9200349 -1.5839484 128.0 +6.1268954 -7.9391108 -1.5801237 128.0 +6.0619106 -7.9553547 -1.5758208 128.0 +6.0094223 -7.9876666 -1.5748646 128.0 +5.9679503 -8.0346918 -1.5769364 128.0 +5.9296308 -8.0862846 -1.5799643 128.0 +5.8799028 -8.1225166 -1.5799643 128.0 +5.8087149 -8.1287241 -1.5740678 128.0 +5.7388115 -8.1359777 -1.56849 128.0 +5.6859617 -8.1669865 -1.5676932 128.0 +5.6592259 -8.2358932 -1.5743866 128.0 +5.5770001 -8.2238913 -1.5653028 128.0 +5.5341215 -8.2694426 -1.5675339 128.0 +5.4941583 -8.3197193 -1.5707211 128.0 +5.4440837 -8.354928 -1.5710399 128.0 +5.3927164 -8.388175 -1.5710399 128.0 +5.3511934 -8.4369459 -1.5740678 128.0 +5.2841377 -8.4453516 -1.5694462 128.0 +5.2197742 -8.4574537 -1.5656215 128.0 +5.1451941 -8.452219 -1.5586095 128.0 +5.1272831 -8.5403376 -1.5692869 128.0 +5.0561738 -8.5402069 -1.5633904 128.0 +5.0086546 -8.5795956 -1.5649841 128.0 +4.9283361 -8.562254 -1.5560597 128.0 +4.8961711 -8.6283932 -1.562753 128.0 +4.8383164 -8.6496572 -1.5611594 128.0 +4.7775249 -8.66535 -1.5586095 128.0 +4.7200232 -8.6866941 -1.5571752 128.0 +4.6582451 -8.6998272 -1.5543066 128.0 +4.5997086 -8.7186413 -1.5525537 128.0 +4.5392957 -8.7335615 -1.5501631 128.0 +4.4869719 -8.7638855 -1.5506413 128.0 +4.4353361 -8.7956591 -1.5514381 128.0 +4.3755746 -8.8112144 -1.5493664 128.0 +4.3222952 -8.8396702 -1.5496851 128.0 +4.2581253 -8.8455658 -1.5460197 128.0 +1.3356831 -2.8194282 -0.4648923 128.0 +1.3204447 -2.8320441 -0.46568909 128.0 +1.3092196 -2.8535516 -0.46807957 128.0 +4.0499187 -8.9698954 -1.5500038 128.0 +3.9803772 -8.9620962 -1.5442667 128.0 +3.9197788 -8.9736853 -1.5420356 128.0 +3.8607471 -8.9884968 -1.540442 128.0 +3.8009131 -9.0011034 -1.5385296 128.0 +3.7475042 -9.0288153 -1.5393264 128.0 +3.6976273 -9.0653505 -1.5417169 128.0 +3.6389956 -9.0805378 -1.540442 128.0 +3.5777853 -9.0889158 -1.5380515 128.0 +3.5230174 -9.1134605 -1.5385296 128.0 +3.4726374 -9.1496725 -1.5410794 128.0 +3.4009204 -9.129179 -1.533908 128.0 +3.3455188 -9.1517296 -1.5342268 128.0 +3.2933013 -9.1832361 -1.5361391 128.0 +1.1282215 -3.2085929 -0.51031113 128.0 +1.0927414 -3.1697247 -0.50250226 128.0 +3.1243424 -9.2441692 -1.5364579 128.0 +1.0754888 -3.2484965 -0.51365775 128.0 +1.0424371 -3.2146556 -0.50680512 128.0 +1.0200028 -3.2125232 -0.5053708 128.0 +0.99499643 -3.2017527 -0.50250226 128.0 +0.97590673 -3.2096865 -0.50282097 128.0 +0.95506811 -3.2118292 -0.50218356 128.0 +0.94113207 -3.2375357 -0.50553018 128.0 +0.93636149 -3.2964282 -0.5144546 128.0 +0.93169516 -3.3582358 -0.52385706 128.0 +0.92346495 -3.4096267 -0.53150654 128.0 +0.90681624 -3.4314539 -0.53421575 128.0 +2.4397771 -9.4642582 -1.5390077 128.0 +0.83817208 -3.3370039 -0.51668566 128.0 +0.80735284 -3.2998922 -0.50967366 128.0 +2.0484478 -8.5981293 -1.3880897 128.0 +1.9746956 -8.5201349 -1.3731095 128.0 +1.893731 -8.4049664 -1.3520733 128.0 +1.836423 -8.3903894 -1.3477706 128.0 +1.7754668 -8.3570795 -1.3404398 128.0 +1.7209669 -8.3523455 -1.3378899 128.0 +1.6776123 -8.4024401 -1.3444239 128.0 +1.6260242 -8.4125757 -1.3444239 128.0 +1.5745565 -8.4233646 -1.3445833 128.0 +1.5542537 -8.6067657 -1.3731095 128.0 +1.5180273 -8.7114515 -1.3887272 128.0 +1.4548968 -8.6631603 -1.3793247 128.0 +1.4009254 -8.6670513 -1.3785279 128.0 +1.2555526 -8.0823727 -1.2816343 128.0 +1.2673801 -8.501976 -1.348886 128.0 +1.2419937 -8.6972332 -1.3794841 128.0 +1.1875362 -8.6968651 -1.3782091 128.0 +1.1615856 -8.9144602 -1.4124724 128.0 +1.1355619 -9.1526299 -1.4500824 128.0 +1.1357845 -9.6378746 -1.5278522 128.0 +1.075421 -9.6338701 -1.5260992 128.0 +1.014114 -9.6196699 -1.5227525 128.0 +0.9544847 -9.6198177 -1.5217963 128.0 +0.89516622 -9.6225443 -1.5213182 128.0 +0.83585018 -9.6249046 -1.5208402 128.0 +0.77645946 -9.6259165 -1.5202026 128.0 +0.71804172 -9.6393595 -1.521637 128.0 +0.6594882 -9.6524487 -1.5230713 128.0 +0.60043335 -9.6592693 -1.5235493 128.0 +0.54065669 -9.6539001 -1.5221151 128.0 +0.48150969 -9.659008 -1.5224338 128.0 +0.42266551 -9.6716433 -1.5240275 128.0 +0.3630909 -9.6681356 -1.5230713 128.0 +0.30357531 -9.6642609 -1.5221151 128.0 +0.24444565 -9.6728506 -1.5232307 128.0 +0.18505171 -9.6721945 -1.5229119 128.0 +0.12571363 -9.6741343 -1.5230713 128.0 +0.066447243 -9.6885443 -1.5253024 128.0 +0.0069959415 -9.6858082 -1.5248243 128.0 +-0.052106366 -9.6244621 -1.5149437 128.0 +-0.11165985 -9.6673956 -1.5219557 128.0 +-0.17069709 -9.6507359 -1.5194058 128.0 +-0.22946368 -9.6307554 -1.5163779 128.0 +-0.28914315 -9.648901 -1.5195652 128.0 +-0.34848458 -9.6508923 -1.5202026 128.0 +-0.40798622 -9.6554766 -1.5213182 128.0 +-0.46641275 -9.6360283 -1.518609 128.0 +-0.52536833 -9.6300278 -1.518131 128.0 +-0.58480585 -9.632535 -1.5190872 128.0 +-0.64475477 -9.641571 -1.5211589 128.0 +-0.70469278 -9.6482639 -1.5229119 128.0 +-0.76325685 -9.6358852 -1.521637 128.0 +-0.82119191 -9.6172495 -1.5194058 128.0 +-0.88099658 -9.6208773 -1.5208402 128.0 +-0.94135684 -9.6290464 -1.5230713 128.0 +-0.99929935 -9.6122875 -1.5213182 128.0 +-1.0603137 -9.6246195 -1.5243461 128.0 +-1.1179802 -9.6061649 -1.5224338 128.0 +-1.1776221 -9.6050043 -1.5233899 128.0 +-1.2379223 -9.6083679 -1.525143 128.0 +-1.2996292 -9.6211367 -1.5284896 128.0 +-1.3578103 -9.6071157 -1.5275334 128.0 +-1.4137065 -9.5780935 -1.5241868 128.0 +-1.4719998 -9.5663118 -1.5237087 128.0 +-1.5336354 -9.5756216 -1.5267366 128.0 +-1.5981957 -9.6010885 -1.5324738 128.0 +-1.6595973 -9.6056938 -1.5348642 128.0 +-1.7172874 -9.5885277 -1.5337486 128.0 +-1.7737498 -9.5651913 -1.5316769 128.0 +-1.8337086 -9.560914 -1.5327924 128.0 +-1.8942574 -9.5591669 -1.5343862 128.0 +-1.9556448 -9.5609045 -1.5366172 128.0 +-2.0112166 -9.534236 -1.5342268 128.0 +-2.0652771 -9.5014572 -1.5308801 128.0 +-2.1256938 -9.4982395 -1.5324738 128.0 +-2.1837125 -9.4840555 -1.5323144 128.0 +-2.2461843 -9.4887314 -1.5353423 128.0 +-2.3097289 -9.4968338 -1.5390077 128.0 +-2.3689134 -9.4863138 -1.5396452 128.0 +-2.3996341 -9.3644905 -1.5217963 128.0 +-2.4766169 -9.4240656 -1.5342268 128.0 +-2.5390165 -9.4258509 -1.5370953 128.0 +-2.6023188 -9.4300785 -1.540442 128.0 +-2.664963 -9.4310341 -1.5433105 128.0 +-2.7219579 -9.4116602 -1.5428324 128.0 +-2.7704139 -9.3635406 -1.5375735 128.0 +-2.8192396 -9.318018 -1.5327924 128.0 +-2.8947346 -9.3599625 -1.5428324 128.0 +-2.9476504 -9.3279047 -1.540442 128.0 +-2.9951274 -9.2795782 -1.5353423 128.0 +-3.0714738 -9.320097 -1.5453823 128.0 +-3.1273441 -9.2973318 -1.5447448 128.0 +-3.1884985 -9.2901068 -1.5468166 128.0 +-3.230438 -9.2275057 -1.5394858 128.0 +-3.2952929 -9.2307549 -1.5434699 128.0 +-3.369086 -9.2576742 -1.5515975 128.0 +-3.4076338 -9.1877699 -1.5431511 128.0 +-3.4642937 -9.1676121 -1.5433105 128.0 +-3.5403371 -9.1977777 -1.5522349 128.0 +-3.6024706 -9.190588 -1.5547848 128.0 +-1.472712 -3.6897178 -0.60258305 128.0 +-1.4715486 -3.6220739 -0.59238374 128.0 +-3.7450094 -9.0597677 -1.5437886 128.0 +-3.7970843 -9.0284281 -1.5423543 128.0 +-3.8163018 -8.9205475 -1.5275334 128.0 +-3.8311889 -8.8055315 -1.5114377 128.0 +-3.8571904 -8.7186594 -1.5002822 128.0 +-3.883486 -8.6345034 -1.4896047 128.0 +-3.9257221 -8.5871677 -1.4854612 128.0 +-1.5002658 -3.2285597 -0.53596878 128.0 +-1.5213119 -3.2219718 -0.53644687 128.0 +-1.5939859 -3.3229558 -0.55620801 128.0 +-1.6567138 -3.4000897 -0.57182574 128.0 +-1.676232 -3.3872056 -0.57134765 128.0 +-1.694768 -3.3724461 -0.5705508 128.0 +-1.7163261 -3.3637424 -0.57086957 128.0 +-1.7423812 -3.3636677 -0.57278192 128.0 +-1.7657436 -3.3581564 -0.5737381 128.0 +-4.3714819 -8.1926613 -1.4602817 128.0 +-4.3939366 -8.1144638 -1.4508792 128.0 +-4.4426923 -8.0856199 -1.4505605 128.0 +-4.4979892 -8.0685558 -1.4524729 128.0 +-4.5721955 -8.084631 -1.4606005 128.0 +-4.6467671 -8.1000977 -1.4687281 128.0 +-4.7217002 -8.1149521 -1.4768556 128.0 +-4.7964873 -8.1283398 -1.4848238 128.0 +-4.8477921 -8.1012974 -1.485302 128.0 +-4.9358153 -8.1347017 -1.4972543 128.0 +-1.9773482 -3.213763 -0.57039148 128.0 +-1.98606 -3.1839786 -0.56704479 128.0 +-5.4001713 -8.5414772 -1.5925541 128.0 +-5.4274454 -8.4691153 -1.5850639 128.0 +-5.4744692 -8.4282026 -1.5836297 128.0 +-5.5201097 -8.3853827 -1.5818766 128.0 +-5.5763884 -8.3587456 -1.583311 128.0 +-5.6192784 -8.3121033 -1.5809205 128.0 +-5.6774273 -8.2880564 -1.5829922 128.0 +-5.7529411 -8.2887497 -1.5900042 128.0 +-5.8212943 -8.2783289 -1.5949446 128.0 +-5.8427682 -8.2014465 -1.586817 128.0 +-5.9033799 -8.1798515 -1.5896856 128.0 +-5.9552069 -8.1458654 -1.5901636 128.0 +-6.0174141 -8.1258335 -1.5935103 128.0 +-6.0618291 -8.0816498 -1.5920759 128.0 +-6.1328011 -8.0726042 -1.5978131 128.0 +-6.1930542 -8.0489054 -1.6006817 128.0 +-6.2550669 -8.0271072 -1.6040283 128.0 +-6.3078718 -7.9932261 -1.6049845 128.0 +-6.360496 -7.9589987 -1.6059407 128.0 +-6.424737 -7.9390073 -1.6099248 128.0 +-6.482089 -7.9101272 -1.6121559 128.0 +-6.539958 -7.8816013 -1.6145464 128.0 +-6.5888305 -7.8420801 -1.6147057 128.0 +-6.6317077 -7.7954888 -1.6134309 128.0 +-6.6871457 -7.7636266 -1.6153432 128.0 +-6.7411451 -7.7298899 -1.6169368 128.0 +-6.7956352 -7.6965218 -1.6186898 128.0 +-6.8486533 -7.661304 -1.6201241 128.0 +-6.890234 -7.6132812 -1.6188492 128.0 +-6.9368186 -7.5708604 -1.6188492 128.0 +-6.9851561 -7.5303259 -1.6193273 128.0 +-7.033257 -7.4894829 -1.6198053 128.0 +-7.0872412 -7.4547729 -1.6217178 128.0 +-7.1444869 -7.4232388 -1.624427 128.0 +-7.1919675 -7.3813825 -1.624905 128.0 +-7.2454424 -7.3455486 -1.6268175 128.0 +-7.3078156 -7.3184185 -1.6308016 128.0 +-7.3624086 -7.2831612 -1.6330327 128.0 +-7.40131 -7.2323289 -1.6317577 128.0 +-7.4498091 -7.1908932 -1.6327139 128.0 +-7.5095096 -7.1600347 -1.6362199 128.0 +-7.558332 -7.1185608 -1.6373354 128.0 +-7.6083732 -7.0781016 -1.6387697 128.0 +-7.6582026 -7.0372963 -1.6402041 128.0 +-7.6975837 -6.9868565 -1.6394072 128.0 +-7.7447195 -6.9434476 -1.6403633 128.0 +-7.7923512 -6.9003778 -1.6414789 128.0 +-7.8323154 -6.8504848 -1.6410009 128.0 +-7.8756957 -6.8035889 -1.6413195 128.0 +-7.932313 -6.7679524 -1.6445068 128.0 +-7.9963384 -6.7382383 -1.6492878 128.0 +-8.0337391 -6.6858892 -1.6484909 128.0 +-8.0929155 -6.6515141 -1.6523157 128.0 +-8.125144 -6.5948877 -1.6505626 128.0 +-8.1731596 -6.5510836 -1.6521564 128.0 +-8.2070103 -6.4959087 -1.6508814 128.0 +-8.2607145 -6.4563723 -1.6537499 128.0 +-8.2954855 -6.4019451 -1.6527938 128.0 +-8.3573818 -6.3682771 -1.6574154 128.0 +-8.4065542 -6.3245935 -1.6594871 128.0 +-8.4103336 -6.2469902 -1.6524751 128.0 +-8.457263 -6.2016897 -1.6542281 128.0 +-8.5191469 -6.167048 -1.659009 128.0 +-8.5592365 -6.1163816 -1.6594871 128.0 +-8.6208057 -6.0808196 -1.664268 128.0 +-8.6393204 -6.0148344 -1.6606027 128.0 +-8.6825733 -5.9661846 -1.6618775 128.0 +-8.7329073 -5.9222169 -1.6645868 128.0 +-8.7715416 -5.8701687 -1.6650648 128.0 +-8.855175 -5.8477921 -1.6743079 128.0 +-8.9504404 -5.8321548 -1.6857822 128.0 +-8.9246082 -5.7376175 -1.6739893 128.0 +-8.9671488 -5.6875081 -1.6754235 128.0 +-9.0211258 -5.644424 -1.679089 128.0 +-9.0513897 -5.5863724 -1.678292 128.0 +-6.5852752 -4.0086093 -1.2057769 128.0 +-9.065093 -5.4423542 -1.6680927 128.0 +-9.1790171 -5.434412 -1.6832324 128.0 +-9.2181568 -5.3814726 -1.6843479 128.0 +-9.2629814 -5.3317051 -1.686579 128.0 +-9.2877941 -5.2703824 -1.6851448 128.0 +-9.338913 -5.2238979 -1.6886507 128.0 +-9.3543644 -5.1574402 -1.6856228 128.0 +-9.3684855 -5.0905185 -1.6824355 128.0 +-9.4247828 -5.046454 -1.6870571 128.0 +-7.5966592 -4.0077248 -1.3477706 128.0 +-7.5913248 -3.9455559 -1.3423522 128.0 +-9.3658123 -4.7951798 -1.6598058 128.0 +-6.9339957 -3.4964709 -1.2148607 128.0 +-6.9128785 -3.432781 -1.2072113 128.0 +-6.9267163 -3.3868303 -1.2059363 128.0 +-6.9544835 -3.3476908 -1.2072113 128.0 +-6.9882751 -3.3112974 -1.2096016 128.0 +-9.6710615 -4.5102119 -1.6838698 128.0 +-9.7039366 -4.4532571 -1.684826 128.0 +-6.5864725 -2.9736838 -1.1278478 128.0 +-9.7199612 -4.317008 -1.6781328 128.0 +-9.6983194 -4.2363405 -1.6696864 128.0 +-9.7123394 -4.1716876 -1.6676147 128.0 +-9.72684 -4.1074061 -1.6657023 128.0 +-9.7272415 -4.0374269 -1.6613995 128.0 +-9.7308073 -3.9690893 -1.657734 128.0 +-9.7393999 -3.9030638 -1.6550249 128.0 +-9.7695951 -3.845762 -1.6561404 128.0 +-9.7570972 -3.7718606 -1.6499252 128.0 +-7.5621738 -2.870049 -1.2669728 128.0 +-9.7693462 -3.6394336 -1.6441882 128.0 +-9.8044739 -3.5841675 -1.6464192 128.0 +-9.8411493 -3.5292735 -1.6489691 128.0 +-9.8626194 -3.468823 -1.6489691 128.0 +-9.8818512 -3.407598 -1.6486503 128.0 +-9.9044447 -3.3475323 -1.6489691 128.0 +-9.9257355 -3.2870071 -1.6491284 128.0 +-9.9626198 -3.2315254 -1.651997 128.0 +-9.9982557 -3.1754158 -1.6547061 128.0 +-10.017551 -3.1140079 -1.6547061 128.0 +-10.059138 -3.0593779 -1.658531 128.0 +-10.128818 -3.0127993 -1.6671365 128.0 +-10.184083 -2.961345 -1.6733518 128.0 +-10.247643 -2.9117544 -1.6810013 128.0 +-10.296708 -2.8575342 -1.6862603 128.0 +-10.349303 -2.803854 -1.6921568 128.0 +-10.3959 -2.7481215 -1.6970971 128.0 +-10.469924 -2.6990702 -1.706659 128.0 +-10.515969 -2.642236 -1.7115992 128.0 +-10.561709 -2.584938 -1.7165395 128.0 +-10.642674 -2.535645 -1.7273763 128.0 +-10.689769 -2.4776521 -1.7326353 128.0 +-10.72981 -2.4176571 -1.7367787 128.0 +-10.771445 -2.3576863 -1.741241 128.0 +-10.846545 -2.3044772 -1.7512809 128.0 +-10.901091 -2.2462502 -1.7579743 128.0 +-10.916605 -2.1797066 -1.7582929 128.0 +-10.754335 -2.0787647 -1.7294481 128.0 +-10.851314 -2.0285234 -1.7433127 128.0 +-11.087 -2.0022643 -1.7799665 128.0 +-11.278028 -1.9653896 -1.8092896 128.0 +-11.534243 -1.9372027 -1.84929 128.0 +-11.950356 -1.9317859 -1.9154261 128.0 +-12.163916 -1.8898025 -1.9484146 128.0 +-12.195786 -1.8181882 -1.9517612 128.0 +-12.242873 -1.7484875 -1.9576577 128.0 +-12.264132 -1.6748034 -1.9594107 128.0 +-12.214461 -1.5917367 -1.9496895 128.0 +-12.21714 -1.5159091 -1.9485739 128.0 +-12.224251 -1.4406865 -1.9482552 128.0 +-12.247578 -1.3672961 -1.9506457 128.0 +-12.242973 -1.2907747 -1.9485739 128.0 +-12.25754 -1.2163115 -1.9496895 128.0 +-12.252976 -1.13998 -1.9477772 128.0 +-12.244987 -1.0634938 -1.9453866 128.0 +-12.198146 -0.98405153 -1.9367809 128.0 +-12.257116 -0.91314894 -1.9453866 128.0 +-12.253625 -0.83731747 -1.9439523 128.0 +-12.244737 -0.76125681 -1.9417213 128.0 +-12.273819 -0.6874913 -1.9457054 128.0 +-12.299499 -0.61324984 -1.9492114 128.0 +-12.3267 -0.53880543 -1.9530362 128.0 +-12.282421 -0.46137974 -1.9453866 128.0 +-12.246538 -0.38479713 -1.9391714 128.0 +-11.348278 0.83419335 -1.9429172 128.0 +-11.357677 0.90498459 -1.945491 128.0 +-11.323445 0.97221011 -1.940515 128.0 +-11.353564 1.0450158 -1.9468637 128.0 +-11.394979 1.1193845 -1.9552714 128.0 +-11.358502 1.186209 -1.9501238 128.0 +-11.363739 1.2572907 -1.9523544 128.0 +-11.36266 1.3277948 -1.9535555 128.0 +-11.290744 1.3896608 -1.9424025 128.0 +-11.227291 1.4518325 -1.9327937 128.0 +-11.27284 1.528111 -1.9424025 128.0 +-11.260325 1.5968357 -1.9418877 128.0 +-11.252264 1.6661866 -1.9422309 128.0 +-11.236961 1.7344459 -1.941373 128.0 +-11.217353 1.8019547 -1.9398288 128.0 +-11.213859 1.8720478 -1.9412013 128.0 +-11.20022 1.9404829 -1.9408582 128.0 +-11.189072 2.0093439 -1.9410298 128.0 +-11.176532 2.077961 -1.9410298 128.0 +-11.151962 2.1442664 -1.9389708 128.0 +-11.13763 2.212461 -1.9387991 128.0 +-11.074626 2.2706618 -1.9300483 128.0 +-11.080725 2.3428535 -1.9336517 128.0 +-11.066141 2.4107995 -1.9336517 128.0 +-11.049218 2.4782233 -1.9333085 128.0 +-11.029964 2.5450869 -1.9326221 128.0 +-10.997845 2.6088502 -1.9297051 128.0 +-10.98163 2.6762826 -1.9297051 128.0 +-10.949711 2.7397866 -1.9269598 128.0 +-10.960365 2.814029 -1.9319358 128.0 +-10.929555 2.8777142 -1.9295336 128.0 +-10.922154 2.9475472 -1.931421 128.0 +-10.876327 3.0068929 -1.926445 128.0 +-10.864307 3.0754514 -1.9276462 128.0 +-10.864157 3.1475406 -1.9310778 128.0 +-10.841806 3.2133024 -1.9305631 128.0 +-10.80303 3.274049 -1.9271314 128.0 +-10.796852 3.3446479 -1.9297051 128.0 +-10.766734 3.4078593 -1.9279894 128.0 +-10.726874 3.4677958 -1.9245576 128.0 +-10.713814 3.5363293 -1.9261019 128.0 +-10.667641 3.5938213 -1.9216406 128.0 +-10.665884 3.6662567 -1.9254155 128.0 +-10.623665 3.7247851 -1.9218123 128.0 +-10.668327 3.8141186 -1.934338 128.0 +-10.58271 3.8568981 -1.9228418 128.0 +-10.540376 3.9148974 -1.9194101 128.0 +-10.507863 3.9763594 -1.9178658 128.0 +-10.513601 4.0524554 -1.9235281 128.0 +-10.490372 4.1176095 -1.9238713 128.0 +-10.456676 4.1786084 -1.922327 128.0 +-10.381563 4.2226419 -1.9130614 128.0 +-10.396419 4.3032217 -1.9207827 128.0 +-10.339858 4.354311 -1.9151205 128.0 +-10.329246 4.4246573 -1.918209 128.0 +-10.304611 4.4891338 -1.9187237 128.0 +-10.268765 4.5486856 -1.9171795 128.0 +-10.26222 4.6213183 -1.9212976 128.0 +-10.205903 4.6714859 -1.9159783 128.0 +-10.199378 4.74441 -1.9202679 128.0 +-10.156714 4.8005867 -1.9176942 128.0 +-10.10309 4.8513007 -1.9130614 128.0 +-10.071362 4.9123368 -1.9127183 128.0 +-10.022493 4.9648557 -1.909115 128.0 +-9.9944811 5.0275874 -1.9096297 128.0 +-9.9853773 5.1000228 -1.9139193 128.0 +-9.9600182 5.1643705 -1.9151205 128.0 +-9.8880424 5.2042761 -1.9072275 128.0 +-9.8593988 5.2667074 -1.9079138 128.0 +-9.8398886 5.3341479 -1.9104877 128.0 +-9.8233728 5.4034472 -1.9137478 128.0 +-9.8080978 5.4737043 -1.917351 128.0 +-9.8249054 5.5624247 -1.9274746 128.0 +-9.7931528 5.6240768 -1.9279894 128.0 +-9.6971703 5.6483526 -1.9156352 128.0 +-9.6699638 5.7122574 -1.9171795 128.0 +-9.6507893 5.7811046 -1.9204396 128.0 +-9.6294489 5.8489075 -1.9233565 128.0 +-9.5950565 5.908916 -1.9236997 128.0 +-9.5828524 5.9828119 -1.9286757 128.0 +-9.5376387 6.0362291 -1.9269598 128.0 +-9.4954462 6.091445 -1.9259303 128.0 +-9.4455032 6.1415367 -1.9233565 128.0 +-9.4224472 6.2091365 -1.926445 128.0 +-9.4079294 6.2827039 -1.931421 128.0 +-9.3928614 6.3563261 -1.936397 128.0 +-9.3764315 6.4294419 -1.9412013 128.0 +-9.3448944 6.4924755 -1.9429172 128.0 +-9.2952156 6.5428867 -1.9408582 128.0 +-9.2524881 6.5980816 -1.9403435 128.0 +-9.1990519 6.6454978 -1.9375981 128.0 +-9.178772 6.7169456 -1.9420593 128.0 +-9.1405506 6.7754865 -1.9427457 128.0 +-9.1232262 6.8497834 -1.9480648 128.0 +-9.1116056 6.9288936 -1.9547566 128.0 +-9.0689192 6.9846706 -1.9547566 128.0 +-8.9909372 7.0129156 -1.9470353 128.0 +-8.9724741 7.0874949 -1.952526 128.0 +-8.9042015 7.1227202 -1.9470353 128.0 +-8.9162083 7.2224946 -1.959561 128.0 +-8.8618221 7.2689443 -1.9573303 128.0 +-8.8147812 7.3212938 -1.9568156 128.0 +-8.7998486 7.4006095 -1.9636791 128.0 +-8.7287741 7.4327464 -1.9578451 128.0 +-8.6837492 7.4868083 -1.9580168 128.0 +-8.6591682 7.5587401 -1.9629927 128.0 +-8.6451035 7.6404386 -1.9705424 128.0 +-8.6156788 7.7091084 -1.9746605 128.0 +-8.5791655 7.77175 -1.9772342 128.0 +-8.5342207 7.8269086 -1.9779207 128.0 +-8.5040827 7.8958859 -1.9822103 128.0 +-8.4655228 7.957365 -1.9846125 128.0 +-8.3908482 7.9847074 -1.9784354 128.0 +-8.3409872 8.0353584 -1.9782637 128.0 +-8.3070412 8.1015205 -1.9820386 128.0 +-8.2697926 8.1647997 -1.9851272 128.0 +-8.2327766 8.2286215 -1.9883873 128.0 +-8.1890564 8.2859898 -1.9901031 128.0 +-8.1415005 8.3396063 -1.9909611 128.0 +-8.0710306 8.3695459 -1.9861567 128.0 +-8.0460215 8.4467344 -1.9928485 128.0 +-7.9859414 8.4873343 -1.9907895 128.0 +-7.9719391 8.5773115 -2.0005698 128.0 +-7.9151626 8.6217098 -1.9995403 128.0 +-7.8746843 8.6839819 -2.0028005 128.0 +-7.8192806 8.7299347 -2.0022857 128.0 +-7.772747 8.7858658 -2.0041733 128.0 +-7.7212844 8.8363609 -2.0048594 128.0 +-7.6649895 8.8813334 -2.0043447 128.0 +-7.604599 8.9214497 -2.0028005 128.0 +-7.5535216 8.9724646 -2.00383 128.0 +-7.4945469 9.0140982 -2.0028005 128.0 +-7.4722266 9.1002703 -2.0118945 128.0 +-7.4249334 9.156662 -2.0142968 128.0 +-7.3636837 9.1958952 -2.012924 128.0 +-7.3089533 9.2432232 -2.0134387 128.0 +-7.2690744 9.3096399 -2.0182431 128.0 +-7.2106118 9.3525066 -2.0179 128.0 +-7.1578636 9.4028454 -2.0192726 128.0 +-7.1095033 9.4591904 -2.022018 128.0 +-7.0583725 9.5121298 -2.0240769 128.0 +-6.9998746 9.5552597 -2.0240769 128.0 +-6.941113 9.5980301 -2.0240769 128.0 +-6.8832345 9.6420431 -2.0244203 128.0 +-6.8267794 9.6881237 -2.0252781 128.0 +-6.7773294 9.7443886 -2.0283666 128.0 +-6.7274456 9.8004112 -2.0314553 128.0 +-6.6605554 9.8317165 -2.0293963 128.0 +-6.6121478 9.890419 -2.0331712 128.0 +-6.554049 9.9349165 -2.034029 128.0 +-6.4978023 9.9823761 -2.0355732 128.0 +-6.4481397 10.040296 -2.0393481 128.0 +-6.3763952 10.063859 -2.036088 128.0 +-6.3140025 10.101959 -2.0359163 128.0 +-6.2539673 10.143866 -2.0366027 128.0 +-6.1992846 10.194675 -2.0391765 128.0 +-6.131042 10.223228 -2.0372891 128.0 +-6.0697021 10.263198 -2.0378039 128.0 +-6.0110798 10.307908 -2.0393481 128.0 +-5.9545922 10.356554 -2.0417504 128.0 +-5.8977332 10.404896 -2.0441525 128.0 +-5.835701 10.444328 -2.0448389 128.0 +-5.7810092 10.497199 -2.0482705 128.0 +-5.7113223 10.522947 -2.0463831 128.0 +-5.663835 10.589938 -2.0527318 128.0 +-5.605638 10.637566 -2.0553055 128.0 +-5.5466151 10.684003 -2.0577078 128.0 +-5.4809551 10.717834 -2.0577078 128.0 +-5.4124298 10.745984 -2.0566783 128.0 +-5.3472672 10.780757 -2.0570214 128.0 +-5.2753978 10.801856 -2.0547907 128.0 +-5.2137146 10.843788 -2.0566783 128.0 +-5.1517153 10.885371 -2.0585656 128.0 +-5.0810838 10.908738 -2.0570214 128.0 +-5.0230818 10.959414 -2.0607963 128.0 +-4.9606004 11.000806 -2.0628552 128.0 +-4.8981991 11.042745 -2.0650859 128.0 +-4.8299561 11.071688 -2.0649142 128.0 +-4.7603774 11.097494 -2.0642281 128.0 +-4.6941085 11.131033 -2.0650859 128.0 +-4.626853 11.162356 -2.0656006 128.0 +-4.5612473 11.197836 -2.0669734 128.0 +-4.5019674 11.249393 -2.0714345 128.0 +-4.429975 11.26947 -2.0700619 128.0 +-4.3642902 11.305631 -2.0717778 128.0 +-4.2930932 11.327591 -2.0709198 128.0 +-4.2197299 11.343562 -2.0690324 128.0 +-4.156127 11.385899 -2.0721209 128.0 +-4.0901704 11.422317 -2.0741799 128.0 +-4.0183759 11.442551 -2.0733221 128.0 +-3.9448836 11.457676 -2.0716062 128.0 +-3.8779705 11.491934 -2.0734935 128.0 +-3.8141859 11.536091 -2.0772684 128.0 +-3.7463644 11.56865 -2.0789843 128.0 +-3.6770959 11.597054 -2.0800138 128.0 +-3.6090794 11.629748 -2.0819013 128.0 +-3.5410862 11.662987 -2.0839603 128.0 +-3.4728208 11.695828 -2.0860193 128.0 +-3.4004421 11.715025 -2.0856762 128.0 +-3.3319895 11.747991 -2.0879068 128.0 +-3.2606311 11.771063 -2.0884216 128.0 +-3.1916857 11.803211 -2.0906522 128.0 +-3.1229711 11.836862 -2.093226 128.0 +-3.0475833 11.845305 -2.0913384 128.0 +-2.9702938 11.845626 -2.0880783 128.0 +-2.9043303 11.891383 -2.0930543 128.0 +-2.8333616 11.917606 -2.0945985 128.0 +-2.7610707 11.938606 -2.0952849 128.0 +-2.6927328 11.97743 -2.0992315 128.0 +-2.6200304 11.997578 -2.0999177 128.0 +-2.5445275 12.004754 -2.0983734 128.0 +-2.4622943 11.978645 -2.0909953 128.0 +-2.3889408 11.994494 -2.091167 128.0 +-2.3197727 12.032144 -2.0952849 128.0 +-2.2525787 12.081985 -2.1016335 128.0 +-2.1777046 12.091702 -2.1009471 128.0 +-2.1044817 12.11066 -2.1019766 128.0 +-2.0301325 12.123344 -2.1019766 128.0 +-1.9497541 12.098613 -2.0954566 128.0 +-1.8809062 12.145397 -2.1016335 128.0 +-1.8060586 12.154761 -2.1012905 128.0 +-1.7333865 12.179269 -2.1036925 128.0 +-1.6596853 12.197485 -2.1050653 128.0 +-1.5822768 12.1879 -2.1016335 128.0 +-1.5079464 12.201289 -2.10232 128.0 +-1.4341998 12.220098 -2.1040359 128.0 +-1.353646 12.17873 -2.0952849 128.0 +-1.2859814 12.254414 -2.1071243 128.0 +-1.2112491 12.266975 -2.1079822 128.0 +-1.1363204 12.2781 -2.1086686 128.0 +-1.0628248 12.306435 -2.1124434 128.0 +-0.98721534 12.311743 -2.1122718 128.0 +-0.90961981 12.290059 -2.1074674 128.0 +-0.83332664 12.282631 -2.1052368 128.0 +-0.75697714 12.27178 -2.1024914 128.0 +-0.68171918 12.277177 -2.102663 128.0 +-0.60487181 12.250626 -2.0973439 128.0 +-0.52956462 12.251154 -2.0968292 128.0 +-0.45401889 12.244328 -2.0951133 128.0 +-0.37909317 12.253776 -2.0963144 128.0 +-0.30416587 12.266705 -2.0982018 128.0 +-0.22887477 12.267355 -2.0980303 128.0 +-0.15362386 12.270498 -2.0983734 128.0 +-0.078274854 12.262344 -2.0968292 128.0 +-0.0030336541 12.266534 -2.0975156 128.0 +0.072197072 12.260411 -2.0964861 128.0 +0.14741224 12.258752 -2.0963144 128.0 +0.22262776 12.257617 -2.0963144 128.0 +0.2981953 12.270793 -2.0988882 128.0 +0.37390283 12.282518 -2.1012905 128.0 +0.44940436 12.283931 -2.1019766 128.0 +0.52451575 12.275037 -2.1009471 128.0 +0.59939039 12.262732 -2.0994029 128.0 +0.6742422 12.251937 -2.0982018 128.0 +0.74934572 12.246586 -2.0980303 128.0 +0.82460785 12.243723 -2.0983734 128.0 +0.89979076 12.239416 -2.0985451 128.0 +0.97471672 12.2317 -2.0982018 128.0 +1.0485694 12.211747 -2.0957997 128.0 +1.122666 12.196255 -2.0942554 128.0 +1.1968048 12.182273 -2.0930543 128.0 +1.2732725 12.191358 -2.0959713 128.0 +1.3478365 12.181357 -2.095628 128.0 +1.4223256 12.1709 -2.0952849 128.0 +1.4975803 12.166833 -2.0961428 128.0 +1.569804 12.138852 -2.0928826 128.0 +1.64333 12.122158 -2.0916817 128.0 +1.7192019 12.122576 -2.093569 128.0 +1.7941298 12.115697 -2.0942554 128.0 +1.8687373 12.106407 -2.0945985 128.0 +1.9390769 12.070395 -2.0903089 128.0 +2.0139146 12.063129 -2.091167 128.0 +2.0818365 12.0156 -2.0849898 128.0 +2.1529102 11.988055 -2.0824161 128.0 +2.2217424 11.949437 -2.0779548 128.0 +2.3108408 12.017812 -2.0925395 128.0 +2.4047024 12.104864 -2.1105559 128.0 +2.4785354 12.087952 -2.1102128 128.0 +2.529619 11.963602 -2.0908237 128.0 +2.6132591 11.995021 -2.0992315 128.0 +2.6730049 11.91724 -2.0882499 128.0 +2.7276845 11.820941 -2.0740082 128.0 +2.811312 11.85095 -2.0824161 128.0 +2.883975 11.833477 -2.0824161 128.0 +2.9565296 11.815558 -2.0824161 128.0 +3.0238259 11.777157 -2.0788128 128.0 +3.1063209 11.797441 -2.0858476 128.0 +3.1683788 11.740114 -2.0789843 128.0 +3.2356284 11.703362 -2.0758958 128.0 +3.3041565 11.671913 -2.0738368 128.0 +3.3696785 11.630602 -2.0700619 128.0 +3.4378986 11.599318 -2.0681744 128.0 +3.5098636 11.580832 -2.0686891 128.0 +3.5858135 11.575076 -2.0716062 128.0 +3.6549852 11.547221 -2.0705767 128.0 +3.7288001 11.533951 -2.0722926 128.0 +3.7923965 11.489338 -2.068346 128.0 +3.8609347 11.46025 -2.0673165 128.0 +3.9366267 11.452182 -2.0702336 128.0 +4.0006266 11.410149 -2.0669734 128.0 +4.0825057 11.418781 -2.0731504 128.0 +4.1376462 11.352791 -2.0656006 128.0 +4.2058549 11.323495 -2.0649142 128.0 +4.2738605 11.29379 -2.0642281 128.0 +4.3381157 11.254484 -2.0618258 128.0 +4.4052901 11.223069 -2.0609679 128.0 +4.469317 11.183935 -2.0587373 128.0 +4.523376 11.120712 -2.0520453 128.0 +4.6005712 11.114594 -2.0561635 128.0 +4.6660056 11.079801 -2.0549624 128.0 +4.7276936 11.036473 -2.052217 128.0 +4.786665 10.987388 -2.0484421 128.0 +4.8547902 10.959612 -2.0487852 128.0 +4.9223504 10.930515 -2.0489569 128.0 +4.9885058 10.898315 -2.0486138 128.0 +5.0598545 10.877327 -2.0505011 128.0 +5.1265016 10.846075 -2.0505011 128.0 +5.1874104 10.802871 -2.0482705 128.0 +5.2419343 10.746932 -2.0436378 128.0 +5.3042784 10.707504 -2.0422652 128.0 +5.3729782 10.680916 -2.0434661 128.0 +5.4397583 10.650379 -2.0439808 128.0 +5.5072737 10.621174 -2.0448389 128.0 +5.5682096 10.579336 -2.0432947 128.0 +5.6269832 10.533675 -2.041064 128.0 +5.6797705 10.477299 -2.0367744 128.0 +5.7463255 10.446568 -2.0376322 128.0 +5.8021531 10.396488 -2.0347154 128.0 +5.8658357 10.360691 -2.0347154 128.0 +5.9238992 10.315107 -2.0328279 128.0 +5.9831128 10.271754 -2.0314553 128.0 +6.042017 10.228065 -2.0300825 128.0 +6.0950408 10.174742 -2.0268223 128.0 +6.14815 10.121997 -2.0237339 128.0 +6.2127247 10.088276 -2.0245917 128.0 +6.2703338 10.043281 -2.0232191 128.0 +6.3286786 9.9996223 -2.0221896 128.0 +6.386724 9.9556274 -2.0211601 128.0 +6.4433932 9.9096451 -2.0197873 128.0 +6.4970284 9.8592291 -2.0175569 128.0 +6.5584955 9.820817 -2.0179 128.0 +6.6186314 9.7803898 -2.0179 128.0 +6.6712742 9.7290325 -2.0156693 128.0 +6.7173524 9.668499 -2.0115514 128.0 +6.7595363 9.6029339 -2.0064037 128.0 +6.8171873 9.5596733 -2.0060606 128.0 +6.8734083 9.5144701 -2.0053742 128.0 +6.9258399 9.4641666 -2.0036583 128.0 +6.9814334 9.4183264 -2.0029721 128.0 +7.0432329 9.380826 -2.0041733 128.0 +7.1018529 9.3390017 -2.0045164 128.0 +7.1572185 9.2929087 -2.0040016 128.0 +7.1995602 9.230176 -1.9998835 128.0 +7.2383485 9.1634092 -1.9949075 128.0 +7.2827439 9.104207 -1.9916475 128.0 +7.3266854 9.0448055 -1.9883873 128.0 +7.3720474 8.9874935 -1.985642 128.0 +7.4182415 8.9314814 -1.9832398 128.0 +7.475441 8.8888111 -1.9839261 128.0 +7.5285635 8.8412752 -1.983583 128.0 +7.5826712 8.7949142 -1.983583 128.0 +7.6313095 8.7422857 -1.9822103 128.0 +7.6717577 8.6805334 -1.9787786 128.0 +7.7235622 8.6318293 -1.9784354 128.0 +7.7843184 8.5930367 -1.9804944 128.0 +7.8195829 8.5262356 -1.9760332 128.0 +7.8502989 8.4549942 -1.9705424 128.0 +7.8986559 8.4030771 -1.9696845 128.0 +7.947351 8.3515997 -1.9689982 128.0 +7.995028 8.2991314 -1.9681402 128.0 +8.0120926 8.2153625 -1.9597325 128.0 +8.0630417 8.166748 -1.9599042 128.0 +8.1088219 8.1129398 -1.9588747 128.0 +8.1556454 8.0602627 -1.9581883 128.0 +8.1950788 8.0004349 -1.9557861 128.0 +8.2489786 7.9547868 -1.9569873 128.0 +8.3040543 7.9101372 -1.9585315 128.0 +8.3474102 7.85431 -1.9573303 128.0 +8.3687439 7.7781305 -1.9509817 128.0 +8.4076023 7.7186403 -1.9489228 128.0 +8.4562645 7.6682305 -1.9492658 128.0 +8.503891 7.6168566 -1.9494375 128.0 +8.5423498 7.5573549 -1.9475501 128.0 +8.5566578 7.4769263 -1.9401718 128.0 +8.5889482 7.4126983 -1.9370834 128.0 +8.6245222 7.3515511 -1.9348527 128.0 +8.6574087 7.288343 -1.9321073 128.0 +8.7034817 7.2363443 -1.9324505 128.0 +8.7347746 7.1721778 -1.9295336 128.0 +8.7832088 7.12217 -1.9305631 128.0 +8.8221302 7.0644488 -1.9295336 128.0 +8.8421259 6.9918547 -1.924386 128.0 +8.8732128 6.9283757 -1.9218123 128.0 +8.9249201 6.8810177 -1.9238713 128.0 +8.9685411 6.8273191 -1.9242145 128.0 +9.0039635 6.767426 -1.9228418 128.0 +9.0326586 6.7026596 -1.9200964 128.0 +9.0680523 6.6430349 -1.9188954 128.0 +9.1086416 6.5872698 -1.9188954 128.0 +9.1416721 6.5261049 -1.917351 128.0 +9.1589937 6.4540029 -1.9125466 128.0 +9.1879072 6.3903713 -1.910316 128.0 +9.2301941 6.3361049 -1.9110024 128.0 +9.2640038 6.2760353 -1.9099729 128.0 +9.2925091 6.2125049 -1.9079138 128.0 +9.3353882 6.1586246 -1.9089434 128.0 +9.3407984 6.0802708 -1.9022515 128.0 +9.3630085 6.0132613 -1.899163 128.0 +9.4097157 5.9620237 -1.901222 128.0 +9.4285765 5.8932114 -1.8976188 128.0 +9.4645586 5.8352475 -1.8976188 128.0 +9.4833488 5.7668285 -1.894187 128.0 +9.511796 5.7044783 -1.8928144 128.0 +9.5305061 5.6364808 -1.8895543 128.0 +9.5640602 5.5774007 -1.8893826 128.0 +9.5801659 5.5083013 -1.8857794 128.0 +9.6206408 5.4533005 -1.8871521 128.0 +9.6547813 5.3946471 -1.8873236 128.0 +9.6540432 5.3167734 -1.8806318 128.0 +9.6648369 5.2456908 -1.8763422 128.0 +9.6673031 5.1704955 -1.8705083 128.0 +9.7206373 5.1225605 -1.8747979 128.0 +9.7711229 5.072804 -1.8785728 128.0 +9.8353977 5.0297956 -1.885093 128.0 +9.8352776 4.9538445 -1.8790876 128.0 +9.8637238 4.8925281 -1.8787444 128.0 +9.9431334 4.8561192 -1.8883531 128.0 +9.9869499 4.8018465 -1.8910985 128.0 +10.013554 4.7392135 -1.8905838 128.0 +10.026369 4.6701961 -1.8874952 128.0 +10.091557 4.6254139 -1.8945302 128.0 +10.073943 4.5427566 -1.8857794 128.0 +10.125043 4.4912424 -1.8902406 128.0 +10.123513 4.416429 -1.8847499 128.0 +10.118731 4.3406391 -1.8787444 128.0 +10.1715 4.2895689 -1.8837203 128.0 +10.173056 4.2168941 -1.8790876 128.0 +10.264433 4.1811461 -1.8914417 128.0 +10.299042 4.1217456 -1.8931575 128.0 +10.339725 4.0645995 -1.8960744 128.0 +10.393882 4.0124302 -1.9015652 128.0 +10.372243 3.9311264 -1.8929859 128.0 +10.417407 3.8753076 -1.8969324 128.0 +10.409523 3.7998321 -1.8910985 128.0 +10.415019 3.7295802 -1.8878384 128.0 +10.479537 3.6802897 -1.8955597 128.0 +10.506579 3.6175225 -1.8964176 128.0 +10.546314 3.5589705 -1.8996778 128.0 +10.525861 3.4802797 -1.8919564 128.0 +10.594818 3.4311035 -1.9007072 128.0 +10.612854 3.3651373 -1.9001925 128.0 +10.634243 3.3002467 -1.900364 128.0 +10.644866 3.2320728 -1.8986483 128.0 +10.65222 3.1630518 -1.8964176 128.0 +10.694135 3.1042204 -1.9005357 128.0 +10.693076 3.0329008 -1.8969324 128.0 +10.706738 2.9659178 -1.8960744 128.0 +10.750413 2.9071076 -1.9007072 128.0 +10.762332 2.8395822 -1.8996778 128.0 +10.772874 2.7717745 -1.8984767 128.0 +10.783945 2.7041841 -1.8974471 128.0 +10.801291 2.6381979 -1.8976188 128.0 +10.809608 2.5700505 -1.8962461 128.0 +10.831893 2.5052288 -1.8974471 128.0 +10.873975 2.4447663 -1.9022515 128.0 +10.888771 2.3779988 -1.9022515 128.0 +10.900266 2.3105292 -1.9017367 128.0 +10.921958 2.2451892 -1.9031094 128.0 +10.965481 2.1840937 -1.9084285 128.0 +10.961263 2.1134143 -1.9053401 128.0 +10.947875 2.0412447 -1.9007072 128.0 +10.973768 1.9764748 -1.9031094 128.0 +10.983747 1.9087666 -1.9027663 128.0 +11.038006 1.8484908 -1.910316 128.0 +11.034551 1.7783782 -1.9077423 128.0 +11.03844 1.7095833 -1.9065411 128.0 +11.067237 1.6445699 -1.9098012 128.0 +11.111257 1.5814869 -1.9158068 128.0 +11.119775 1.513147 -1.9156352 128.0 +11.154252 1.4481841 -1.9200964 128.0 +11.125773 1.3751274 -1.9135761 128.0 +11.136937 1.3071793 -1.9140909 128.0 +11.135936 1.2378411 -1.9125466 128.0 +11.155079 1.1707217 -1.9146056 128.0 +11.151268 1.1011895 -1.9127183 128.0 +11.157815 1.032746 -1.9127183 128.0 +11.140385 0.96223122 -1.9086002 128.0 +11.181432 0.8966884 -1.9147773 128.0 +11.177881 0.82740992 -1.913233 128.0 +11.164072 0.75754291 -1.9099729 128.0 +11.172443 0.68926942 -1.9106592 128.0 +11.195152 0.62173963 -1.9139193 128.0 +11.19974 0.55308425 -1.9140909 128.0 +11.207845 0.48456576 -1.9149488 128.0 +11.183041 0.41476709 -1.9101444 128.0 +11.221809 0.34726512 -1.9164931 128.0 +11.218804 0.27828124 -1.9156352 128.0 +11.240986 0.20982267 -1.9192384 128.0 +11.259793 0.14106564 -1.922327 128.0 +11.260447 0.071974203 -1.922327 128.0 +11.245899 0.0028777863 -1.9197532 128.0 +11.263437 -0.066231906 -1.9228418 128.0 +11.27464 -0.13548508 -1.9249008 128.0 +11.270641 -0.20460847 -1.924386 128.0 +11.251447 -0.2733275 -1.9212976 128.0 +11.23971 -0.34205922 -1.9195817 128.0 +11.232477 -0.4108378 -1.9187237 128.0 +11.226792 -0.47962481 -1.918209 128.0 +11.196086 -0.54715276 -1.9134046 128.0 +11.199404 -0.61621994 -1.9146056 128.0 +11.234745 -0.68733704 -1.9214691 128.0 +11.225402 -0.75592774 -1.9206111 128.0 +11.27459 -0.82876909 -1.9300483 128.0 +11.272239 -0.89816809 -1.9305631 128.0 +11.281239 -0.96858197 -1.9331368 128.0 +11.270178 -1.0373322 -1.932279 128.0 +11.181244 -1.0983664 -1.9178658 128.0 +11.25366 -1.1752491 -1.9317642 128.0 +11.228612 -1.2423263 -1.9286757 128.0 +11.202187 -1.309026 -1.9254155 128.0 +11.14701 -1.3719553 -1.9171795 128.0 +11.144244 -1.4410849 -1.918209 128.0 +11.132263 -1.5090402 -1.9176942 128.0 +11.142303 -1.5800866 -1.9211259 128.0 +11.205487 -1.659255 -1.9339948 128.0 +11.17757 -1.7252725 -1.9309063 128.0 +11.127866 -1.7875702 -1.9240428 128.0 +11.090452 -1.8514333 -1.9194101 128.0 +11.075972 -1.9189433 -1.9188954 128.0 +10.984478 -1.9725811 -1.9048253 128.0 +10.733904 -1.9956198 -1.8626153 128.0 +10.35867 -1.9916505 -1.7982709 128.0 +10.082463 -2.002743 -1.7514281 128.0 +9.9406652 -2.0380416 -1.7284358 128.0 +9.7727947 -2.0661712 -1.7008104 128.0 +9.6915913 -2.111201 -1.688628 128.0 +9.5515671 -2.1421547 -1.6659787 128.0 +9.4316921 -2.1761243 -1.6469327 128.0 +9.2964268 -2.2050645 -1.6251414 128.0 +8.5486021 -2.083076 -1.4935355 128.0 +8.4706736 -2.1192224 -1.4818678 128.0 +7.9708705 -2.0461617 -1.3943592 128.0 +8.4545088 -2.2257712 -1.4837552 128.0 +7.5200119 -2.0290411 -1.3176607 128.0 +7.4903293 -2.0704179 -1.3145721 128.0 +7.4518909 -2.109091 -1.3099394 128.0 +7.1341243 -2.0664685 -1.2546889 128.0 +6.8955679 -2.043273 -1.21368 128.0 +6.7575097 -2.0475287 -1.1908592 128.0 +6.4672179 -2.0029271 -1.1402416 128.0 +6.3035932 -1.9946927 -1.1126163 128.0 +6.1618781 -1.9914998 -1.0889376 128.0 +6.1037035 -2.0141354 -1.0805299 128.0 +5.9605289 -2.0075023 -1.0565079 128.0 +5.8586621 -2.0132847 -1.0400358 128.0 +5.8452687 -2.0488687 -1.0398642 128.0 +5.8168173 -2.0790563 -1.0369473 128.0 +5.7484164 -2.0944622 -1.0266521 128.0 +5.7493091 -2.134841 -1.0292259 128.0 +5.8982625 -2.2314615 -1.0594249 128.0 +5.7925386 -2.2321689 -1.0422664 128.0 +5.9318752 -2.3277977 -1.0709212 128.0 +5.7610512 -2.3016214 -1.0415801 128.0 +5.7824087 -2.3514071 -1.0482719 128.0 +5.7314625 -2.3717682 -1.0414085 128.0 +5.7149858 -2.4061263 -1.0410653 128.0 +5.6032214 -2.3996303 -1.0227057 128.0 +5.5034966 -2.3969712 -1.0065767 128.0 +5.4562597 -2.4163277 -1.0003996 128.0 +5.4494152 -2.4534025 -1.0019438 128.0 +5.4459033 -2.492125 -1.0041745 128.0 +5.3706641 -2.497648 -0.99267828 128.0 +5.3089242 -2.5086586 -0.98375583 128.0 +5.3769078 -2.5812807 -0.99988484 128.0 +5.3813329 -2.6241596 -1.0038313 128.0 +5.3774881 -2.6632531 -1.0062335 128.0 +5.3548851 -2.6930988 -1.0050324 128.0 +5.2829895 -2.6976686 -0.99422252 128.0 +5.2943225 -2.7445478 -0.99971324 128.0 +5.3139963 -2.7962568 -1.0069199 128.0 +5.2524242 -2.8051324 -0.998169 128.0 +5.2073998 -2.8222806 -0.99267828 128.0 +5.1994791 -2.8594036 -0.99456573 128.0 +5.1766748 -2.8883719 -0.99353617 128.0 +5.1597118 -2.9205666 -0.99370778 128.0 +5.2040558 -2.9879925 -1.0062335 128.0 +5.1439133 -2.9955668 -0.99782586 128.0 +5.0847235 -3.0030174 -0.98958975 128.0 +4.9766226 -2.9804871 -0.97140169 128.0 +5.0786414 -3.084115 -0.99593842 128.0 +5.0193596 -3.0904183 -0.98770231 128.0 +4.9743981 -3.1049819 -0.98238319 128.0 +4.9044762 -3.1033027 -0.97191644 128.0 +4.8762217 -3.1274853 -0.97002906 128.0 +4.9519157 -3.2191141 -0.98976135 128.0 +4.9041033 -3.2310042 -0.98392743 128.0 +4.8596091 -3.2446182 -0.97877985 128.0 +4.8738747 -3.2975683 -0.98598647 128.0 +4.8909221 -3.3530438 -0.99387938 128.0 +4.8354683 -3.3588166 -0.98650122 128.0 +4.7680464 -3.3555288 -0.97654927 128.0 +4.7842617 -3.4110374 -0.98444217 128.0 +4.7560554 -3.4351361 -0.98289794 128.0 +4.7817912 -3.4985847 -0.99302143 128.0 +4.7776451 -3.5407677 -0.99679631 128.0 +4.7566171 -3.5706077 -0.99696791 128.0 +4.7220726 -3.590184 -0.99422252 128.0 +4.7381968 -3.6485498 -1.0026302 128.0 +4.6939716 -3.6605866 -0.99782586 128.0 +4.6312256 -3.6575606 -0.9889034 128.0 +4.6210041 -3.695756 -0.99164879 128.0 +4.5737457 -3.7041945 -0.98615801 128.0 +4.6095777 -3.7803037 -0.9993701 128.0 +4.5953889 -3.8160708 -1.0014291 128.0 +4.5914888 -3.8606839 -1.0058904 128.0 +4.4867129 -3.8197956 -0.98735911 128.0 +4.4169335 -3.8073647 -0.97672087 128.0 +4.5196486 -3.9445443 -1.0058904 128.0 +4.3684025 -3.8599756 -0.97637767 128.0 +4.4672322 -3.9964252 -1.0050324 128.0 +4.4710989 -4.0495586 -1.0117242 128.0 +4.4962606 -4.1228671 -1.0235636 128.0 +3.6009998 -3.3425498 -0.8168034 128.0 +3.561043 -3.3463624 -0.81217062 128.0 +3.5325933 -3.3606782 -0.81028318 128.0 +3.5076497 -3.3781891 -0.80925369 128.0 +4.2682405 -4.1618538 -0.9993701 128.0 +4.2215939 -4.1671977 -0.99422252 128.0 +4.1910677 -4.1881471 -0.99302143 128.0 +4.1784472 -4.2270989 -0.99628156 128.0 +4.1331639 -4.2329173 -0.99147719 128.0 +4.0852323 -4.2355032 -0.98598647 128.0 +4.0231576 -4.2226796 -0.97689241 128.0 +4.0788507 -4.3341103 -0.99765426 128.0 +2.5754807 -2.7699034 -0.61982358 128.0 +2.5484438 -2.7747674 -0.61724979 128.0 +2.5280616 -2.7867029 -0.6163919 128.0 +2.4944847 -2.7838144 -0.61210227 128.0 +2.5080338 -2.8337505 -0.62016678 128.0 +3.966469 -4.5384326 -1.0108663 128.0 +3.980381 -4.611167 -1.0220194 128.0 +3.9085598 -4.584516 -1.0103515 128.0 +3.8625929 -4.5873079 -1.0055472 128.0 +3.8362622 -4.6131945 -1.0060619 128.0 +3.807884 -4.6366467 -1.0060619 128.0 +3.7923913 -4.6759949 -1.0096653 128.0 +3.7396157 -4.6691833 -1.0029734 128.0 +3.6876786 -4.6626735 -0.99645317 128.0 +3.6432376 -4.6650224 -0.99199194 128.0 +3.6157479 -4.6888494 -0.99233508 128.0 +3.5767665 -4.6976199 -0.98941815 128.0 +5.7370515 -7.6327705 -1.6241119 128.0 +5.6865878 -7.6630816 -1.6230824 128.0 +5.6173401 -7.6676273 -1.6165621 128.0 +5.5678778 -7.6987572 -1.6158758 128.0 +5.5399933 -7.7600398 -1.6217097 128.0 +5.4650397 -7.7552285 -1.6134737 128.0 +5.3847299 -7.7417026 -1.6035217 128.0 +5.3159428 -7.7437305 -1.5970014 128.0 +5.2898746 -7.8080144 -1.6036932 128.0 +5.2057338 -7.7862678 -1.5923686 128.0 +5.1312814 -7.7777658 -1.583961 128.0 +5.0651913 -7.7810297 -1.578127 128.0 +5.0684519 -7.8915462 -1.5945992 128.0 +5.0114999 -7.9091811 -1.5918539 128.0 +4.9675741 -7.9473014 -1.5933981 128.0 +4.925437 -7.9885349 -1.5956287 128.0 +4.8870749 -8.0362844 -1.5992321 128.0 +4.8326073 -8.0576706 -1.5975162 128.0 +4.7895937 -8.0981951 -1.5997468 128.0 +4.7408066 -8.1291332 -1.6000899 128.0 +4.6545062 -8.0948648 -1.5873927 128.0 +4.6042638 -8.1224146 -1.587221 128.0 +4.5447297 -8.1333122 -1.5837893 128.0 +4.4947391 -8.1610451 -1.5837893 128.0 +4.4511571 -8.200593 -1.5861915 128.0 +4.3882132 -8.2042933 -1.5815587 128.0 +4.3309021 -8.2179909 -1.578985 128.0 +4.2763109 -8.2365398 -1.5774407 128.0 +4.2283831 -8.2678871 -1.5784702 128.0 +4.1735849 -8.2857571 -1.576926 128.0 +4.1209149 -8.3076792 -1.5762396 128.0 +4.0594888 -8.3115616 -1.5721216 128.0 +4.0114012 -8.3425293 -1.5733227 128.0 +3.9672997 -8.3821239 -1.5762396 128.0 +3.9120505 -8.3982716 -1.5746953 128.0 +3.860446 -8.4221172 -1.5746953 128.0 +3.8010032 -8.4285822 -1.5714352 128.0 +3.7464194 -8.4454412 -1.5702342 128.0 +3.6945286 -8.4682703 -1.5702342 128.0 +3.6774445 -8.5722685 -1.5856768 128.0 +1.2572447 -2.979089 -0.52425063 128.0 +1.2491246 -3.0113206 -0.5288834 128.0 +1.2328534 -3.0244029 -0.52991295 128.0 +1.2186642 -3.0428867 -0.53197193 128.0 +3.3605134 -8.5480871 -1.560797 128.0 +3.3072908 -8.5667076 -1.5604538 128.0 +1.1774573 -3.1044171 -0.53935009 128.0 +1.1662848 -3.1328211 -0.54329658 128.0 +1.1490666 -3.1454713 -0.54432607 128.0 +3.1053541 -8.6712637 -1.5652581 128.0 +3.0478473 -8.6780701 -1.5630275 128.0 +1.0993104 -3.1903088 -0.5487873 128.0 +1.0781398 -3.1923265 -0.54792941 128.0 +1.0647153 -3.2175899 -0.55136108 128.0 +1.0476832 -3.2324977 -0.55290538 128.0 +1.0436058 -3.2886388 -0.56199938 128.0 +2.6863759 -8.6554651 -1.5395204 128.0 +0.99201179 -3.2644322 -0.55530757 128.0 +0.96102989 -3.2336245 -0.54861569 128.0 +0.93650359 -3.2233758 -0.54569876 128.0 +0.92315704 -3.2518089 -0.54981685 128.0 +0.92842555 -3.3485587 -0.56628901 128.0 +2.2204692 -8.2101908 -1.4424032 128.0 +2.1617601 -8.1922255 -1.4367409 128.0 +0.87472981 -3.3965666 -0.57195133 128.0 +0.84213585 -3.3550451 -0.56354362 128.0 +0.82176745 -3.3611062 -0.56371522 128.0 +1.9281728 -8.1086235 -1.4127189 128.0 +1.8763859 -8.1116629 -1.4111747 128.0 +1.8270104 -8.1249456 -1.4115179 128.0 +1.7720799 -8.1129036 -1.4073998 128.0 +1.718183 -8.1043482 -1.4039681 128.0 +1.6664406 -8.1050882 -1.4022522 128.0 +1.6141769 -8.1026001 -1.4000216 128.0 +1.5616337 -8.0978413 -1.3974478 128.0 +1.5088488 -8.090806 -1.3945309 128.0 +1.4567327 -8.086338 -1.3921287 128.0 +1.4054028 -8.0854177 -1.3904128 128.0 +1.34861 -8.051136 -1.382863 128.0 +1.3027867 -8.0816298 -1.3868096 128.0 +1.2543797 -8.0972605 -1.3881822 128.0 +1.2014887 -8.0833654 -1.3844073 128.0 +1.1714272 -8.2281113 -1.4086008 128.0 +1.128617 -8.2917624 -1.4185528 128.0 +1.0832951 -8.3415184 -1.4261025 128.0 +1.0665044 -8.6266651 -1.4750043 128.0 +1.0273212 -8.7504625 -1.4955946 128.0 +0.99927199 -8.9876804 -1.5360887 128.0 +0.94677669 -9.0191174 -1.5405499 128.0 +0.89209557 -9.03162 -1.541751 128.0 +0.83566415 -9.0261326 -1.5398636 128.0 +0.78221262 -9.0536652 -1.54381 128.0 +0.72648835 -9.0563307 -1.5434668 128.0 +0.67126924 -9.0655298 -1.5443248 128.0 +0.61656386 -9.0832396 -1.5467269 128.0 +0.56063682 -9.0839014 -1.5462122 128.0 +0.50450683 -9.0802851 -1.5450112 128.0 +0.44878176 -9.08321 -1.5450112 128.0 +0.39295486 -9.0838242 -1.544668 128.0 +0.3381933 -9.1126451 -1.5493008 128.0 +0.28196907 -9.104702 -1.5475849 128.0 +0.22675522 -9.1328516 -1.5522177 128.0 +0.17042027 -9.1183119 -1.5494723 128.0 +0.11389288 -9.0728865 -1.5414078 128.0 +0.058282513 -9.0832653 -1.5431237 128.0 +0.002543333 -9.0558672 -1.5383192 128.0 +-0.053087313 -9.0665493 -1.5402067 128.0 +-0.10884894 -9.076889 -1.5420941 128.0 +-0.16463156 -9.0809755 -1.5429521 128.0 +-0.22020411 -9.073885 -1.5419226 128.0 +-0.2762371 -9.0841799 -1.5439816 128.0 +-0.33215195 -9.0872364 -1.5448395 128.0 +-0.38794607 -9.0860109 -1.5450112 128.0 +-0.44479784 -9.1060915 -1.5489576 128.0 +-0.50093454 -9.1081095 -1.5498155 128.0 +-0.55614853 -9.0940475 -1.5479281 128.0 +-0.61187178 -9.0894814 -1.5477564 128.0 +-0.66567957 -9.0590277 -1.5431237 128.0 +-0.72062534 -9.046916 -1.541751 128.0 +-0.77671325 -9.0491953 -1.5429521 128.0 +-0.83231384 -9.0452394 -1.5431237 128.0 +-0.88799155 -9.0419235 -1.5434668 128.0 +-0.9437623 -9.0392447 -1.5439816 128.0 +-0.99942517 -9.0352411 -1.5443248 128.0 +-1.0551889 -9.0318747 -1.5448395 128.0 +-1.11396 -9.0526075 -1.5496439 128.0 +-1.1640478 -9.0035906 -1.5422658 128.0 +-1.2207277 -9.0070171 -1.5441532 128.0 +-1.2798465 -9.0266685 -1.5489576 128.0 +-1.3350646 -9.0176706 -1.5487859 128.0 +-1.3872129 -8.988863 -1.5451827 128.0 +-1.4456248 -9.0006084 -1.5487859 128.0 +-1.5034214 -9.0071163 -1.5515313 128.0 +-1.5615205 -9.0142231 -1.5544482 128.0 +-1.615059 -8.9947758 -1.5527325 128.0 +-1.6691384 -8.9788857 -1.551703 128.0 +-1.7297839 -8.9974976 -1.5568504 128.0 +-1.7863033 -8.9934788 -1.5580516 128.0 +-1.8365033 -8.9582224 -1.553762 128.0 +-1.888377 -8.9323273 -1.5511882 128.0 +-1.9439883 -8.9244223 -1.5518745 128.0 +-1.9984952 -8.9113655 -1.551703 128.0 +-2.0571256 -8.916213 -1.5547915 128.0 +-2.1072459 -8.8842525 -1.5513598 128.0 +-2.1719871 -8.913269 -1.5589095 128.0 +-2.2307038 -8.9160204 -1.5618265 128.0 +-2.2902713 -8.9212494 -1.5652581 128.0 +-2.3464737 -8.9127445 -1.5662876 128.0 +-2.399833 -8.893424 -1.5654298 128.0 +-2.4438524 -8.8405504 -1.5585663 128.0 +-2.5066409 -8.8557215 -1.5640571 128.0 +-2.5617542 -8.8430128 -1.5645719 128.0 +-2.6224067 -8.8488522 -1.5685183 128.0 +-2.6715078 -8.8156242 -1.5654298 128.0 +-2.7240911 -8.7943611 -1.5645719 128.0 +-2.7797852 -8.7831163 -1.5656013 128.0 +-2.833322 -8.7649574 -1.5654298 128.0 +-2.8916826 -8.7614393 -1.5680035 128.0 +-2.9570284 -8.7780743 -1.5743521 128.0 +-3.0057085 -8.7448587 -1.5716069 128.0 +-3.0544186 -8.712307 -1.569033 128.0 +-3.1021791 -8.6776314 -1.5661161 128.0 +-3.1685257 -8.6945305 -1.5728079 128.0 +-3.2146094 -8.6555319 -1.5692046 128.0 +-3.2645192 -8.6273527 -1.5676603 128.0 +-3.3237736 -8.6237049 -1.5707489 128.0 +-1.4539547 -3.7062724 -0.6544838 128.0 +-1.4788626 -3.70277 -0.65551335 128.0 +-3.4941969 -8.5911779 -1.5764112 128.0 +-3.543077 -8.5604734 -1.5746953 128.0 +-3.5901821 -8.5258617 -1.5722932 128.0 +-3.6412642 -8.5009556 -1.5717784 128.0 +-3.703589 -8.501935 -1.5762396 128.0 +-3.7656636 -8.5015688 -1.5805292 128.0 +-3.8064282 -8.4531517 -1.5757248 128.0 +-3.8438699 -8.3982859 -1.5697194 128.0 +-1.4777526 -3.1787179 -0.57160813 128.0 +-1.502703 -3.181169 -0.57383877 128.0 +-1.637785 -3.4125493 -0.62033832 128.0 +-1.6586932 -3.4024358 -0.62033832 128.0 +-1.6769145 -3.3868978 -0.61930883 128.0 +-1.6936792 -3.3686242 -0.61776459 128.0 +-1.7187989 -3.3669417 -0.61948043 128.0 +-1.7462293 -3.3694501 -0.62205422 128.0 +-1.7714603 -3.3673894 -0.62377006 128.0 +-4.2448425 -7.9469223 -1.5302547 128.0 +-4.3155951 -7.961431 -1.5383192 128.0 +-4.3672137 -7.93998 -1.5393488 128.0 +-4.4240136 -7.9276576 -1.5422658 128.0 +-4.4788842 -7.9115076 -1.5444963 128.0 +-4.5577679 -7.936841 -1.5551347 128.0 +-4.6177883 -7.9283037 -1.5590811 128.0 +-4.6788774 -7.9210248 -1.5633707 128.0 +-4.7441015 -7.9200544 -1.569033 128.0 +-4.8028393 -7.9076352 -1.5724647 128.0 +-4.8600526 -7.8922768 -1.5753816 128.0 +-1.99977 -3.2045512 -0.61896569 128.0 +-2.019922 -3.193053 -0.61913723 128.0 +-2.050117 -3.1971819 -0.62256896 128.0 +-5.1602345 -7.9366288 -1.6098703 128.0 +-5.2093778 -7.9056392 -1.6100419 128.0 +-5.2714677 -7.8940067 -1.6143315 128.0 +-5.3551474 -7.9137278 -1.625313 128.0 +-5.35847 -7.8149118 -1.6114146 128.0 +-5.4265594 -7.8110104 -1.6175916 128.0 +-5.4868617 -7.7952886 -1.6213665 128.0 +-5.5305848 -7.7558608 -1.6201655 128.0 +-5.582109 -7.7273693 -1.6213665 128.0 +-5.6299996 -7.6937675 -1.6215382 128.0 +-5.6847296 -7.6693659 -1.6237687 128.0 +-5.7281313 -7.6296139 -1.6227392 128.0 +-5.774838 -7.5943232 -1.6227392 128.0 +-5.814714 -7.5501614 -1.6208518 128.0 +-5.8494177 -7.4995828 -1.6175916 128.0 +-5.9014316 -7.4712806 -1.6193075 128.0 +-5.9502406 -7.4387755 -1.6201655 128.0 +-6.0069351 -7.4159036 -1.6232539 128.0 +-6.0585742 -7.3865228 -1.6249698 128.0 +-6.0993762 -7.3439045 -1.6237687 128.0 +-6.1633477 -7.3289585 -1.6289163 128.0 +-6.2235322 -7.3090034 -1.6330343 128.0 +-6.2624717 -7.2639642 -1.6314901 128.0 +-6.3082209 -7.2268858 -1.6318332 128.0 +-6.3615799 -7.1983771 -1.6342354 128.0 +-6.4207397 -7.1760921 -1.6381819 128.0 +-6.4692807 -7.1416707 -1.639383 128.0 +-6.5069857 -7.0953074 -1.6378387 128.0 +-6.5510697 -7.0559697 -1.6380103 128.0 +-6.6030135 -7.024971 -1.6402409 128.0 +-6.6480312 -6.9864645 -1.6407557 128.0 +-6.6955595 -6.9505072 -1.6419568 128.0 +-6.7483993 -6.9198718 -1.6445305 128.0 +-6.7941933 -6.8818388 -1.6453885 128.0 +-6.841167 -6.8448982 -1.6465895 128.0 +-6.8858409 -6.8055625 -1.6472759 128.0 +-6.9373393 -6.7728171 -1.6496781 128.0 +-6.9915318 -6.7424312 -1.6527666 128.0 +-7.037765 -6.7041612 -1.6539677 128.0 +-7.0837913 -6.6655769 -1.6551688 128.0 +-7.1195054 -6.6172919 -1.6539677 128.0 +-7.1599746 -6.573483 -1.6539677 128.0 +-7.2074723 -6.5360436 -1.6556835 128.0 +-7.2555141 -6.4989257 -1.657571 128.0 +-7.3033714 -6.4614639 -1.6594584 128.0 +-7.3510418 -6.4236598 -1.6613458 128.0 +-7.3903184 -6.3784337 -1.6613458 128.0 +-7.4225678 -6.3272161 -1.6598016 128.0 +-7.459744 -6.2802844 -1.6594584 128.0 +-7.5185938 -6.2513976 -1.6640912 128.0 +-7.5583329 -6.2063971 -1.6644344 128.0 +-7.6016293 -6.1642461 -1.6656355 128.0 +-7.6531525 -6.1285701 -1.6687241 128.0 +-7.6998868 -6.0888276 -1.670783 128.0 +-7.7316661 -6.0372238 -1.669582 128.0 +-7.7552996 -5.9794445 -1.6666651 128.0 +-7.8020344 -5.9395032 -1.6688956 128.0 +-7.8462071 -5.8974371 -1.6706115 128.0 +-7.8798718 -5.8474216 -1.6700968 128.0 +-7.9012966 -5.7884836 -1.6670082 128.0 +-7.9478421 -5.7479744 -1.6694103 128.0 +-8.0102253 -5.7185578 -1.6752443 128.0 +-8.0548277 -5.6761093 -1.6773033 128.0 +-8.1089153 -5.6400776 -1.6814214 128.0 +-8.1547422 -5.5980206 -1.6838236 128.0 +-8.1767015 -5.5395913 -1.6812497 128.0 +-8.2007093 -5.4827461 -1.6791908 128.0 +-8.2415981 -5.4372063 -1.680735 128.0 +-8.3103104 -5.4096413 -1.6881132 128.0 +-8.3458347 -5.3601451 -1.688628 128.0 +-8.3902178 -5.3162155 -1.6910301 128.0 +-6.5562568 -4.0983214 -1.3077087 128.0 +-6.5636683 -4.0471601 -1.3041054 128.0 +-8.4403515 -5.1327305 -1.6815929 128.0 +-8.4556322 -5.0712194 -1.6783328 128.0 +-8.5264463 -5.0428076 -1.6863973 128.0 +-8.5504198 -4.9864259 -1.6850246 128.0 +-8.5962286 -4.9427047 -1.6881132 128.0 +-8.5981102 -4.8738375 -1.6824509 128.0 +-8.5900106 -4.799849 -1.6749011 128.0 +-8.6184368 -4.7465763 -1.6747296 128.0 +-8.6984873 -4.7213268 -1.6848531 128.0 +-8.7698631 -4.6906276 -1.6932608 128.0 +-7.6270423 -4.0195651 -1.4626502 128.0 +-8.8739824 -4.607162 -1.7025263 128.0 +-8.896821 -4.5499349 -1.7014968 128.0 +-6.9192576 -3.4854853 -1.3104541 128.0 +-6.9060922 -3.4258947 -1.3037623 128.0 +-6.9207859 -3.3804295 -1.3025612 128.0 +-6.9413977 -3.3379009 -1.3025612 128.0 +-6.9813395 -3.3045161 -1.306336 128.0 +-7.0354214 -3.2774205 -1.3128563 128.0 +-8.8905277 -4.0750804 -1.6644344 128.0 +-8.9126701 -4.0192375 -1.6639197 128.0 +-6.5632076 -2.9117386 -1.211621 128.0 +-8.9559031 -3.9071996 -1.6628902 128.0 +-8.9597893 -3.8436315 -1.6591153 128.0 +-8.972311 -3.7839901 -1.6570562 128.0 +-9.0172033 -3.7379174 -1.6611743 128.0 +-9.0189838 -3.6739728 -1.6572279 128.0 +-9.0340395 -3.6156366 -1.6558552 128.0 +-9.0542202 -3.5594161 -1.655512 128.0 +-9.0777283 -3.5045028 -1.6558552 128.0 +-9.1128798 -3.4539726 -1.6584289 128.0 +-7.5844612 -2.8217795 -1.3705089 128.0 +-9.1693869 -3.3472869 -1.6611743 128.0 +-9.182332 -3.2883055 -1.6598016 128.0 +-9.1995478 -3.2309227 -1.6592869 128.0 +-9.2331724 -3.179224 -1.6618606 128.0 +-9.2646408 -3.1266043 -1.6640912 128.0 +-9.2976818 -3.0743363 -1.6666651 128.0 +-9.3201199 -3.0184426 -1.6673514 128.0 +-9.3872995 -2.9766774 -1.6762738 128.0 +-9.4195013 -2.9234006 -1.6788476 128.0 +-9.5013657 -2.885005 -1.6905154 128.0 +-9.5132217 -2.8249693 -1.6894859 128.0 +-9.5511923 -2.772584 -1.6932608 128.0 +-9.5879288 -2.7195699 -1.696864 128.0 +-9.6310196 -2.6680496 -1.7016684 128.0 +-9.6862011 -2.6194444 -1.7087034 128.0 +-9.7821102 -2.5810652 -1.7231165 128.0 +-9.8282948 -2.5288467 -1.7286073 128.0 +-9.8789835 -2.4773562 -1.7349559 128.0 +-9.9179249 -2.4225347 -1.7392455 128.0 +-9.9556065 -2.3671005 -1.7433636 128.0 +-9.9900999 -2.3106291 -1.746967 128.0 +-10.026197 -2.2542555 -1.7509134 128.0 +-10.044653 -2.1937442 -1.7517713 128.0 +-10.029975 -2.1261485 -1.7467953 128.0 +-9.9289608 -2.0411699 -1.7265483 128.0 +-10.052412 -2.0023282 -1.7462806 128.0 +-10.316993 -1.9892637 -1.7910643 128.0 +-10.472342 -1.9526323 -1.8164589 128.0 +-10.772094 -1.9401731 -1.8674197 128.0 +-11.132256 -1.9345585 -1.9290189 128.0 +-11.29938 -1.8922344 -1.9564725 128.0 +-11.335094 -1.8267834 -1.9607621 128.0 +-11.385034 -1.7632253 -1.9676255 128.0 +-11.35471 -1.6872574 -1.9604189 128.0 +-11.344366 -1.6146413 -1.9568156 128.0 +-11.351131 -1.5446049 -1.9563009 128.0 +-11.367234 -1.4758139 -1.957502 128.0 +-11.34381 -1.4020535 -1.9518397 128.0 +-11.342415 -1.3312753 -1.9501238 128.0 +-11.364078 -1.2631768 -1.952526 128.0 +-11.356917 -1.1918834 -1.9499522 128.0 +-11.359115 -1.1216928 -1.9490943 128.0 +-11.385404 -1.0537874 -1.952526 128.0 +-11.398525 -0.98450065 -1.9537271 128.0 +-11.366053 -0.9114747 -1.9470353 128.0 +-11.403853 -0.84411335 -1.9526976 128.0 +-11.420613 -0.77492386 -1.9547566 128.0 +-11.42712 -0.7049548 -1.9550998 128.0 +-11.38008 -0.63199067 -1.9461774 128.0 +-11.433927 -0.56462491 -1.9549282 128.0 +-11.468672 -0.49581549 -1.9604189 128.0 +-11.465591 -0.42521724 -1.9593894 128.0 +-11.45026 -0.35431102 -1.9563009 128.0 +-11.457143 -0.28416851 -1.9571588 128.0 +-11.4567 -0.21382689 -1.9568156 128.0 +-11.429229 -0.14317092 -1.9518397 128.0 +-11.420041 -0.072977841 -1.9501238 128.0 +-11.466577 -0.0029114876 -1.9581883 128.0 +-11.450616 0.067351848 -1.9554429 128.0 +-11.392852 0.13691777 -1.945491 128.0 +-11.379977 0.20660461 -1.943432 128.0 +-11.38736 0.27664319 -1.9449762 128.0 +-11.349998 0.34542701 -1.9387991 128.0 +-11.402797 0.41708499 -1.948408 128.0 +-11.428567 0.48826578 -1.9533839 128.0 +-11.399772 0.55712801 -1.9489228 128.0 +-11.433518 0.62912583 -1.9554429 128.0 +-11.41371 0.69830453 -1.9526976 128.0 +-11.491777 0.7738933 -1.9671108 128.0 +-10.59524 -0.26964146 -1.9367043 128.0 +-10.644856 -0.20555705 -1.9456842 128.0 +-10.616427 -0.13984799 -1.9401863 128.0 +-10.634781 -0.074829362 -1.943485 128.0 +-10.638971 -0.0095778545 -1.944218 128.0 +-10.659474 0.055809133 -1.9480667 128.0 +-10.71398 0.12183732 -1.9583296 128.0 +-10.671747 0.1868535 -1.9506323 128.0 +-10.682194 0.25260904 -1.9528315 128.0 +-10.665703 0.31771049 -1.9500825 128.0 +-10.63408 0.38209018 -1.9445846 128.0 +-10.629571 0.44724989 -1.944218 128.0 +-10.610916 0.51170623 -1.9412858 128.0 +-10.62819 0.57792407 -1.9451344 128.0 +-10.59795 0.64152378 -1.9401863 128.0 +-10.61147 0.70771641 -1.943485 128.0 +-10.556924 0.76917249 -1.9341385 128.0 +-10.601007 0.83780473 -1.9433018 128.0 +-10.612318 0.90425378 -1.9464172 128.0 +-10.555662 0.96470213 -1.9368875 128.0 +-10.550523 1.0295477 -1.9370707 128.0 +-10.550852 1.0949752 -1.9383537 128.0 +-10.534163 1.158619 -1.9365209 128.0 +-10.550291 1.225956 -1.9409193 128.0 +-10.465484 1.2812339 -1.9264414 128.0 +-10.524702 1.3540779 -1.9390867 128.0 +-10.530809 1.4206016 -1.9418356 128.0 +-10.47225 1.4781852 -1.9324892 128.0 +-10.474653 1.5441339 -1.9346883 128.0 +-10.413484 1.6004633 -1.9249753 128.0 +-10.436472 1.6696079 -1.9312062 128.0 +-10.462882 1.7397394 -1.9381703 128.0 +-10.442323 1.8022341 -1.9363377 128.0 +-10.420423 1.8643689 -1.9343218 128.0 +-10.404921 1.9275563 -1.9335887 128.0 +-10.356208 1.9843348 -1.9266247 128.0 +-10.33998 2.0470784 -1.9258916 128.0 +-10.344562 2.1140273 -1.9291904 128.0 +-10.334282 2.1780684 -1.9297402 128.0 +-10.309195 2.2389343 -1.927541 128.0 +-10.2684 2.2961423 -1.9224095 128.0 +-10.29723 2.3690217 -1.9306564 128.0 +-10.297807 2.4357796 -1.9335887 128.0 +-10.261651 2.4938135 -1.9295568 128.0 +-10.238525 2.554827 -1.9280908 128.0 +-10.196943 2.6110184 -1.9231426 128.0 +-10.241584 2.6895144 -1.9348716 128.0 +-10.201157 2.7459178 -1.93029 128.0 +-10.1699 2.8045397 -1.927541 128.0 +-10.161962 2.8695593 -1.9293736 128.0 +-10.147941 2.9329498 -1.9301066 128.0 +-10.085445 2.9820619 -1.9214932 128.0 +-10.049079 3.0384836 -1.9180112 128.0 +-10.025549 3.0986352 -1.9170948 128.0 +-10.056032 3.175781 -1.9268079 128.0 +-10.00174 3.2262588 -1.9200271 128.0 +-9.9789534 3.2866452 -1.9194773 128.0 +-9.9828272 3.3559566 -1.9242421 128.0 +-9.9676266 3.4190605 -1.9253418 128.0 +-9.9362526 3.4765854 -1.9233259 128.0 +-9.9462147 3.5487185 -1.9295568 128.0 +-9.9261007 3.6103525 -1.9299234 128.0 +-9.8733425 3.6599152 -1.9238757 128.0 +-9.7881622 3.6968114 -1.9114137 128.0 +-9.8386965 3.7850361 -1.9260749 128.0 +-9.8436623 3.8564494 -1.931756 128.0 +-9.7741575 3.8985677 -1.9225928 128.0 +-9.7518749 3.9592071 -1.9229593 128.0 +-9.7074089 4.0107112 -1.9189276 128.0 +-9.7034607 4.0789604 -1.9231426 128.0 +-9.685482 4.1415148 -1.9246087 128.0 +-9.6256294 4.1859694 -1.9176446 128.0 +-9.5709925 4.2322311 -1.9117801 128.0 +-9.571743 4.3029695 -1.9172782 128.0 +-9.4476976 4.3170886 -1.8973023 128.0 +-9.5458593 4.43294 -1.9229593 128.0 +-9.4980307 4.4817805 -1.9187442 128.0 +-9.4526224 4.5314765 -1.915079 128.0 +-9.4113817 4.5829358 -1.9123299 128.0 +-9.3927774 4.6453905 -1.9143459 128.0 +-9.3825464 4.7122006 -1.9181944 128.0 +-9.3613377 4.7737012 -1.9198438 128.0 +-9.3056803 4.8174939 -1.9143459 128.0 +-9.2550592 4.8635273 -1.9099475 128.0 +-9.2068272 4.9105091 -1.906099 128.0 +-9.1817112 4.9697161 -1.9071985 128.0 +-9.1303644 5.0146036 -1.9028002 128.0 +-9.1054344 5.0738811 -1.904083 128.0 +-9.0689955 5.1267533 -1.9029834 128.0 +-9.0416317 5.1847482 -1.9038998 128.0 +-8.9858541 5.2262907 -1.8987683 128.0 +-8.9951086 5.3058 -1.9077483 128.0 +-8.9615393 5.3603883 -1.9075651 128.0 +-8.9310017 5.4168038 -1.9081149 128.0 +-8.8984337 5.4720163 -1.9082981 128.0 +-8.8713646 5.5306735 -1.9097643 128.0 +-8.8339386 5.5829024 -1.9090312 128.0 +-8.8111048 5.6444249 -1.9115969 128.0 +-8.7688847 5.6935649 -1.9099475 128.0 +-8.736248 5.7488837 -1.9104973 128.0 +-8.68118 5.7892904 -1.906099 128.0 +-8.669116 5.8584099 -1.9114137 128.0 +-8.7084427 5.9631433 -1.9284573 128.0 +-8.6256495 5.9845247 -1.9180112 128.0 +-8.649087 6.0797358 -1.931756 128.0 +-8.6052132 6.1281295 -1.93029 128.0 +-8.5586796 6.1744881 -1.928274 128.0 +-8.5230131 6.2286272 -1.9288238 128.0 +-8.5146608 6.303031 -1.9357879 128.0 +-8.4703197 6.3510294 -1.934505 128.0 +-8.443718 6.412395 -1.9374373 128.0 +-8.4065514 6.4658823 -1.9379871 128.0 +-8.365943 6.5167379 -1.9378039 128.0 +-8.3173094 6.5612507 -1.9357879 128.0 +-8.3314285 6.6557236 -1.9487997 128.0 +-8.2613888 6.6832252 -1.9418356 128.0 +-8.2270708 6.7393966 -1.943485 128.0 +-8.2128038 6.8123436 -1.9500825 128.0 +-8.1557932 6.8499637 -1.9464172 128.0 +-8.096384 6.8852305 -1.9422022 128.0 +-8.0808039 6.9578705 -1.9487997 128.0 +-8.0379591 7.0073223 -1.9487997 128.0 +-7.9933376 7.0552092 -1.9484332 128.0 +-7.9528298 7.1067429 -1.9491663 128.0 +-7.9061575 7.1527686 -1.9484332 128.0 +-7.8526959 7.1925139 -1.9460508 128.0 +-7.805532 7.2378879 -1.9453176 128.0 +-7.8175983 7.3387976 -1.9597956 128.0 +-7.7617316 7.3764691 -1.9570466 128.0 +-7.680902 7.3898778 -1.9478834 128.0 +-7.6720352 7.4725342 -1.9574132 128.0 +-7.6162395 7.5098052 -1.9548475 128.0 +-7.6089811 7.5952873 -1.9651103 128.0 +-7.5560102 7.6355433 -1.9634609 128.0 +-7.5207 7.6937127 -1.9665765 128.0 +-7.4856424 7.7524433 -1.9698752 128.0 +-7.4379334 7.7982283 -1.9698752 128.0 +-7.4000564 7.8544521 -1.9726242 128.0 +-7.365118 7.9141026 -1.9762895 128.0 +-7.3217421 7.9649348 -1.9777555 128.0 +-7.2568717 7.9922433 -1.9733572 128.0 +-7.2168851 8.0468655 -1.9759229 128.0 +-7.1712856 8.0954113 -1.9770225 128.0 +-7.1195359 8.137042 -1.9764727 128.0 +-7.0913296 8.205862 -1.9827038 128.0 +-7.0516958 8.2619295 -1.9858192 128.0 +-7.0065718 8.3118076 -1.9874686 128.0 +-6.9529233 8.3516207 -1.9867356 128.0 +-6.9002991 8.3926067 -1.986369 128.0 +-6.8542504 8.4416571 -1.9880184 128.0 +-6.8023243 8.4835548 -1.9880184 128.0 +-6.7568555 8.5336113 -1.9900343 128.0 +-6.6928616 8.560195 -1.9865524 128.0 +-6.6450176 8.6073256 -1.9880184 128.0 +-6.5908866 8.6463737 -1.9876519 128.0 +-6.5489421 8.7015753 -1.9911339 128.0 +-6.5083265 8.758954 -1.9951658 128.0 +-6.4631824 8.8106127 -1.9979148 128.0 +-6.3951612 8.8309956 -1.9935164 128.0 +-6.3597217 8.8964605 -1.9995642 128.0 +-6.2931113 8.9184475 -1.9957156 128.0 +-6.2556882 8.9819002 -2.0013969 128.0 +-6.216609 9.0436087 -2.0067115 128.0 +-6.1709361 9.0962257 -2.0100102 128.0 +-6.1111784 9.1282005 -2.0087273 128.0 +-6.0425897 9.1466608 -2.0045123 128.0 +-5.982058 9.1769772 -2.0030463 128.0 +-5.9309549 9.2217779 -2.0048788 128.0 +-5.8842669 9.2737665 -2.0083609 128.0 +-5.8178644 9.2946987 -2.0050621 128.0 +-5.787581 9.3737173 -2.0145919 128.0 +-5.730979 9.4107313 -2.0149584 128.0 +-5.6761651 9.4507751 -2.016058 128.0 +-5.6240811 9.4955759 -2.0182571 128.0 +-5.5617452 9.5231152 -2.0167911 128.0 +-5.5017362 9.5545063 -2.0162413 128.0 +-5.4653335 9.627409 -2.0246716 128.0 +-5.4037571 9.6564732 -2.0237551 128.0 +-5.3543758 9.7075253 -2.0276036 128.0 +-5.2759295 9.7056484 -2.0202732 128.0 +-5.2376318 9.7776995 -2.0287032 128.0 +-5.1711135 9.7974815 -2.0261376 128.0 +-5.1145287 9.8360043 -2.0276036 128.0 +-5.0648365 9.8881998 -2.032002 128.0 +-4.9828129 9.8769627 -2.0232053 128.0 +-4.9295516 9.9223166 -2.0263209 128.0 +-4.8741927 9.9638567 -2.0287032 128.0 +-4.8163767 10.000663 -2.0301695 128.0 +-4.7641883 10.049569 -2.0342011 128.0 +-4.700357 10.074158 -2.0332849 128.0 +-4.6462488 10.119783 -2.036767 128.0 +-4.5739493 10.125705 -2.0321853 128.0 +-4.518919 10.16975 -2.0354841 128.0 +-4.4615517 10.208996 -2.0378666 128.0 +-4.3980503 10.234373 -2.0374999 128.0 +-4.338614 10.269317 -2.0391495 128.0 +-4.2709966 10.28485 -2.0369501 128.0 +-4.2100382 10.316323 -2.0380497 128.0 +-4.1539769 10.36021 -2.0417151 128.0 +-4.0964541 10.401053 -2.0448306 128.0 +-4.0389414 10.442496 -2.0481293 128.0 +-3.9702542 10.455134 -2.045747 128.0 +-3.9029374 10.471008 -2.0440977 128.0 +-3.8274701 10.464293 -2.0380497 128.0 +-3.7694993 10.505161 -2.0415318 128.0 +-3.707581 10.535511 -2.0429981 128.0 +-3.6463938 10.568284 -2.0450139 128.0 +-3.5843141 10.598841 -2.0466633 128.0 +-3.521378 10.627166 -2.0479462 128.0 +-3.4603539 10.661663 -2.0505118 128.0 +-3.3933811 10.67801 -2.0495956 128.0 +-3.3222499 10.680796 -2.0461135 128.0 +-3.2638075 10.724491 -2.0506952 128.0 +-3.2046733 10.766929 -2.0550935 128.0 +-3.1366255 10.779782 -2.0538106 128.0 +-3.0685408 10.792206 -2.0525277 128.0 +-3.0035787 10.815567 -2.0534441 128.0 +-2.9351008 10.826202 -2.0519779 128.0 +-2.8688688 10.844958 -2.0521612 128.0 +-2.8025169 10.86331 -2.0523446 128.0 +-2.7465973 10.923203 -2.0605915 128.0 +-2.6818612 10.949398 -2.0624242 128.0 +-2.6143985 10.964691 -2.0622408 128.0 +-2.5504036 10.994891 -2.0649898 128.0 +-2.4785664 10.991154 -2.0613246 128.0 +-2.4037154 10.972545 -2.0549102 128.0 +-2.3383889 10.996703 -2.0567429 128.0 +-2.2760339 11.035877 -2.0615077 128.0 +-2.2036517 11.026499 -2.0571094 128.0 +-2.1314704 11.016648 -2.052711 128.0 +-2.0687163 11.05561 -2.0576591 128.0 +-2.0036399 11.083572 -2.0605915 128.0 +-1.9416778 11.130522 -2.067189 128.0 +-1.8715523 11.131562 -2.0651731 128.0 +-1.8025868 11.138954 -2.06444 128.0 +-1.7296718 11.120664 -2.0589421 128.0 +-1.6634364 11.14468 -2.0615077 128.0 +-1.600451 11.19263 -2.068655 128.0 +-1.534142 11.219771 -2.0719538 128.0 +-1.4657789 11.232873 -2.0726869 128.0 +-1.3991315 11.26019 -2.076169 128.0 +-1.3212538 11.194366 -2.0622408 128.0 +-1.2592072 11.261858 -2.07342 128.0 +-1.1880165 11.24982 -2.0697546 128.0 +-1.1186748 11.253963 -2.0692048 128.0 +-1.0483229 11.246911 -2.0666392 128.0 +-0.978185 11.2404 -2.0642567 128.0 +-0.90848351 11.237371 -2.0626073 128.0 +-0.84061378 11.25744 -2.0653563 128.0 +-0.77219582 11.272193 -2.067189 128.0 +-0.70313877 11.278682 -2.0675554 128.0 +-0.63463825 11.295544 -2.0699379 128.0 +-0.56300771 11.253078 -2.0613246 128.0 +-0.49558854 11.293642 -2.0682886 128.0 +-0.42672801 11.308258 -2.0704877 128.0 +-0.35742703 11.313611 -2.0710375 128.0 +-0.28785101 11.309695 -2.0699379 128.0 +-0.21858373 11.318129 -2.0712209 128.0 +-0.14905496 11.313359 -2.0701213 128.0 +-0.079613827 11.311111 -2.0695715 128.0 +-0.010212346 11.315319 -2.0703044 128.0 +0.059145804 11.301406 -2.0677388 128.0 +0.12815458 11.27134 -2.0622408 128.0 +0.19734615 11.272307 -2.0626073 128.0 +0.26699528 11.291523 -2.0664558 128.0 +0.3359814 11.279846 -2.0646234 128.0 +0.40518692 11.277573 -2.0646234 128.0 +0.47404686 11.267016 -2.0631571 128.0 +0.54194087 11.238365 -2.0583923 128.0 +0.61328822 11.279001 -2.0666392 128.0 +0.68129611 11.255401 -2.062974 128.0 +0.74799138 11.215696 -2.0563762 128.0 +0.81565315 11.195209 -2.0534441 128.0 +0.88433027 11.189993 -2.0534441 128.0 +0.95505977 11.208844 -2.0580256 128.0 +1.0243546 11.208647 -2.0591252 128.0 +1.0944464 11.215848 -2.061691 128.0 +1.1583759 11.161986 -2.0528944 128.0 +1.2338262 11.218185 -2.0648065 128.0 +1.2929946 11.127401 -2.0492289 128.0 +1.3659042 11.157313 -2.0563762 128.0 +1.4330845 11.138972 -2.0545437 128.0 +1.5021932 11.135815 -2.0556433 128.0 +1.5630754 11.073823 -2.045747 128.0 +1.6456137 11.163224 -2.06444 128.0 +1.7042253 11.088787 -2.0523446 128.0 +1.7737854 11.08783 -2.054177 128.0 +1.8435589 11.087404 -2.0561931 128.0 +1.9095494 11.064259 -2.0539939 128.0 +1.969613 11.008787 -2.045747 128.0 +2.0346181 10.982962 -2.0431812 128.0 +2.0940166 10.928754 -2.0353007 128.0 +2.1789777 11.006349 -2.0525277 128.0 +2.2340722 10.932092 -2.040982 128.0 +2.3007028 10.916254 -2.0406156 128.0 +2.3665974 10.897129 -2.0396993 128.0 +2.4372771 10.899672 -2.0429981 128.0 +2.5005844 10.869183 -2.0400658 128.0 +2.560442 10.824934 -2.0345678 128.0 +2.644455 10.88162 -2.048496 128.0 +2.6876144 10.770761 -2.0303526 128.0 +2.7712069 10.822636 -2.0435479 128.0 +2.8572841 10.880545 -2.0580256 128.0 +2.9176049 10.839075 -2.0534441 128.0 +2.9762182 10.792539 -2.0479462 128.0 +3.0576096 10.828 -2.0583923 128.0 +3.1136205 10.773147 -2.0514281 128.0 +3.1651719 10.704818 -2.0418985 128.0 +3.239615 10.714366 -2.0475795 128.0 +3.3009422 10.680198 -2.0448306 128.0 +3.3625646 10.647555 -2.0424483 128.0 +3.4245141 10.616431 -2.0404322 128.0 +3.4788284 10.562538 -2.034018 128.0 +3.5382488 10.525152 -2.0309024 128.0 +3.5992551 10.493015 -2.0288866 128.0 +3.6700637 10.489291 -2.0325518 128.0 +3.7406318 10.484167 -2.0360339 128.0 +3.7958193 10.436073 -2.0310857 128.0 +3.8707154 10.442083 -2.0369501 128.0 +3.933672 10.415378 -2.0364003 128.0 +3.9982114 10.39288 -2.036767 128.0 +4.064774 10.375475 -2.038233 128.0 +4.1127009 10.311074 -2.0303526 128.0 +4.1755214 10.284734 -2.0301695 128.0 +4.2310414 10.240748 -2.026504 128.0 +4.2903695 10.206438 -2.0248547 128.0 +4.3471174 10.166362 -2.0221057 128.0 +4.4145112 10.151217 -2.0244882 128.0 +4.4810877 10.133829 -2.026504 128.0 +4.5435867 10.107039 -2.0266874 128.0 +4.6014314 10.070028 -2.0248547 128.0 +4.6552668 10.024664 -2.0213728 128.0 +4.7204647 10.003913 -2.0230222 128.0 +4.7770844 9.9650087 -2.0210061 128.0 +4.8407207 9.9408131 -2.0221057 128.0 +4.9055471 9.9188547 -2.0237551 128.0 +4.9544044 9.8648481 -2.0188069 128.0 +5.0268974 9.8579092 -2.0237551 128.0 +5.070569 9.7945766 -2.0169742 128.0 +5.1214266 9.7458754 -2.013309 128.0 +5.1811295 9.7142677 -2.013309 128.0 +5.2326832 9.6675959 -2.0101936 128.0 +5.2672973 9.5904999 -2.0006638 128.0 +5.3447051 9.5914917 -2.0078111 128.0 +5.4029732 9.5576601 -2.0076277 128.0 +5.4536924 9.5106831 -2.0046957 128.0 +5.5154057 9.4829893 -2.0059783 128.0 +5.5610027 9.4278002 -2.0013969 128.0 +5.6182413 9.3926573 -2.0012136 128.0 +5.6742387 9.3554859 -2.0006638 128.0 +5.7191777 9.300396 -1.9962654 128.0 +5.7574148 9.235095 -1.9896678 128.0 +5.8328772 9.2295122 -1.9962654 128.0 +5.8920498 9.1976871 -1.9971817 128.0 +5.9376688 9.1448708 -1.9935164 128.0 +5.992588 9.1066236 -1.9931499 128.0 +6.0309 9.0435095 -1.9872854 128.0 +6.0884781 9.0095921 -1.9880184 128.0 +6.1486435 8.9793644 -1.9896678 128.0 +6.1946583 8.928545 -1.9867356 128.0 +6.2561102 8.9000187 -1.9889348 128.0 +6.3043294 8.8526554 -1.9869188 128.0 +6.3453016 8.7954693 -1.9827038 128.0 +6.3846498 8.7365265 -1.9781221 128.0 +6.4381361 8.6971865 -1.9781221 128.0 +6.4807649 8.6433611 -1.9748234 128.0 +6.5515132 8.6269207 -1.9803213 128.0 +6.5983305 8.5787659 -1.9784887 128.0 +6.6478243 8.5342398 -1.9775723 128.0 +6.693367 8.4847994 -1.9755564 128.0 +6.7410078 8.4381933 -1.9742736 128.0 +6.7784367 8.3790932 -1.9700584 128.0 +6.8290997 8.3365831 -1.9698752 128.0 +6.8631783 8.2740936 -1.9649271 128.0 +6.9157147 8.2340841 -1.9654769 128.0 +6.9680185 8.1937418 -1.9660267 128.0 +6.9739056 8.0994291 -1.9533813 128.0 +7.0215335 8.0542622 -1.9528315 128.0 +7.0896859 8.032402 -1.9581462 128.0 +7.1525941 8.0041437 -1.9619948 128.0 +7.1765108 7.9324026 -1.9550307 128.0 +7.2057929 7.8671951 -1.9497161 128.0 +7.261282 7.8307629 -1.9517319 128.0 +7.3051572 7.7817602 -1.9506323 128.0 +7.3297429 7.7125611 -1.9444014 128.0 +7.3755651 7.6660247 -1.9440348 128.0 +7.3888555 7.5861163 -1.9350548 128.0 +7.4504485 7.5560369 -1.9390867 128.0 +7.4966712 7.51018 -1.9390867 128.0 +7.5593815 7.4806356 -1.943485 128.0 +7.594595 7.4238033 -1.9407361 128.0 +7.596159 7.3347254 -1.9293736 128.0 +7.6623616 7.3083344 -1.9348716 128.0 +7.6762938 7.2321925 -1.9269912 128.0 +7.7226844 7.186965 -1.927541 128.0 +7.7557817 7.1294641 -1.9247919 128.0 +7.8008366 7.0830631 -1.9251585 128.0 +7.8419552 7.0330958 -1.9246087 128.0 +7.880547 6.9809346 -1.9235091 128.0 +7.9269319 6.9356861 -1.9244255 128.0 +7.9447942 6.8657041 -1.9183778 128.0 +7.984529 6.8149118 -1.917828 128.0 +8.0119133 6.7537522 -1.9143459 128.0 +8.0396042 6.6931429 -1.9110471 128.0 +8.0706501 6.63557 -1.9086647 128.0 +8.1249495 6.5970788 -1.9119635 128.0 +8.1606741 6.5434108 -1.9108639 128.0 +8.2006702 6.4932146 -1.9108639 128.0 +8.2372599 6.440352 -1.9101307 128.0 +8.2711744 6.3854823 -1.9088479 128.0 +8.3023815 6.3286514 -1.9070153 128.0 +8.3229923 6.2639928 -1.9028002 128.0 +8.3636379 6.2145648 -1.90335 128.0 +8.4095383 6.1689444 -1.9051826 128.0 +8.3843327 6.0716753 -1.8907046 128.0 +8.4558182 6.0446997 -1.8985851 128.0 +8.4911423 5.9915686 -1.8982185 128.0 +8.4987059 5.9191279 -1.891621 128.0 +8.5486364 5.8763366 -1.8947365 128.0 +8.5707026 5.8143897 -1.891621 128.0 +8.6070347 5.7622385 -1.8918042 128.0 +8.6405888 5.7082343 -1.8914378 128.0 +8.6812153 5.6588674 -1.8927206 128.0 +8.6810484 5.5831585 -1.8850235 128.0 +8.7134829 5.5287337 -1.8846569 128.0 +8.7164116 5.4558654 -1.8778762 128.0 +8.7764902 5.4188075 -1.8837407 128.0 +8.8095741 5.3648539 -1.8837407 128.0 +8.8490686 5.3147478 -1.8852067 128.0 +8.7783232 5.1992283 -1.8628484 128.0 +8.8711786 5.1809654 -1.8760434 128.0 +8.8789482 5.112699 -1.8709121 128.0 +8.9366531 5.0731683 -1.8765932 128.0 +9.0353842 5.0561666 -1.8910712 128.0 +9.0722637 5.0039549 -1.892354 128.0 +9.0777502 4.9345779 -1.8870394 128.0 +9.0913925 4.8699646 -1.8835573 128.0 +9.1480541 4.8283153 -1.8892386 128.0 +9.1862297 4.7766285 -1.8910712 128.0 +9.2311144 4.7282405 -1.89437 128.0 +9.2459097 4.6644254 -1.8914378 128.0 +9.2444229 4.5927329 -1.8852067 128.0 +9.2521191 4.5259876 -1.8809916 128.0 +9.2859163 4.4721184 -1.8822745 128.0 +9.3273945 4.4217954 -1.8852067 128.0 +9.3641491 4.3690529 -1.8872226 128.0 +9.4247293 4.3271017 -1.8941867 128.0 +9.4663334 4.2760715 -1.8973023 128.0 +9.4986811 4.2207012 -1.8985851 128.0 +9.3676634 4.0938349 -1.866697 128.0 +9.4603453 4.0653915 -1.8804418 128.0 +9.5086555 4.0172153 -1.8852067 128.0 +9.5331259 3.9587955 -1.8852067 128.0 +9.6127577 3.9228871 -1.8963859 128.0 +9.5946751 3.8469996 -1.8879557 128.0 +9.6089525 3.7844527 -1.8861231 128.0 +9.7236786 3.7608881 -1.9044496 128.0 +9.688674 3.6791651 -1.8929039 128.0 +9.7258043 3.6251414 -1.8958361 128.0 +9.7284775 3.5583045 -1.8919876 128.0 +9.7630816 3.5031934 -1.8945533 128.0 +9.7593555 3.4344103 -1.889605 128.0 +9.8081236 3.3840837 -1.8951031 128.0 +9.8398781 3.3276181 -1.8973023 128.0 +9.8498459 3.2637773 -1.8952863 128.0 +9.8659468 3.2020643 -1.8945533 128.0 +9.9219475 3.1530807 -1.9017006 128.0 +9.9007435 3.0795848 -1.8938202 128.0 +9.9514284 3.0285096 -1.9000512 128.0 +9.9783039 2.9699159 -1.9017006 128.0 +9.9736853 2.9020419 -1.8973023 128.0 +9.9903584 2.8405209 -1.8971189 128.0 +10.028439 2.7849555 -1.9011508 128.0 +10.056724 2.7264571 -1.90335 128.0 +10.081817 2.6669619 -1.9049994 128.0 +10.072289 2.5984194 -1.9000512 128.0 +10.058489 2.5291355 -1.89437 128.0 +10.109147 2.4760246 -1.9011508 128.0 +10.128931 2.4150896 -1.9020671 128.0 +10.141644 2.3524499 -1.9017006 128.0 +10.147256 2.2882311 -1.9000512 128.0 +10.14094 2.2215073 -1.8962027 128.0 +10.174572 2.1635363 -1.9000512 128.0 +10.214614 2.1066265 -1.9051826 128.0 +10.243735 2.0471869 -1.9082981 128.0 +10.26093 1.9852278 -1.9092145 128.0 +10.271952 1.9220498 -1.9090312 128.0 +10.282584 1.8588111 -1.9088479 128.0 +10.287986 1.7946695 -1.9077483 128.0 +10.282323 1.7287383 -1.9046328 128.0 +10.312145 1.6687562 -1.9082981 128.0 +10.325105 1.6059041 -1.9088479 128.0 +10.338654 1.5431008 -1.9095809 128.0 +10.332356 1.4774079 -1.9066488 128.0 +10.371421 1.4181117 -1.9123299 128.0 +10.383826 1.354956 -1.913063 128.0 +10.33146 1.2836989 -1.9017006 128.0 +10.392838 1.2266216 -1.9117801 128.0 +10.410915 1.1640313 -1.9137961 128.0 +10.439369 1.1024013 -1.917828 128.0 +10.384308 1.0321975 -1.9062822 128.0 +10.457984 0.97475874 -1.9189276 128.0 +10.389338 0.90409142 -1.9049994 128.0 +10.479938 0.84722161 -1.9209434 128.0 +10.420237 0.77806824 -1.9088479 128.0 +10.436584 0.71492285 -1.9110471 128.0 +10.43783 0.65068811 -1.9104973 128.0 +10.432793 0.5861339 -1.9088479 128.0 +10.494121 0.5250088 -1.9196606 128.0 +10.512858 0.46129832 -1.9225928 128.0 +10.496826 0.39607891 -1.9191108 128.0 +10.497094 0.33160201 -1.9187442 128.0 +10.461587 0.26623499 -1.9117801 128.0 +10.544602 0.2036173 -1.9269912 128.0 +10.490606 0.1381858 -1.9167284 128.0 +10.529595 0.074085265 -1.9238757 128.0 +10.490529 0.0094385985 -1.916545 128.0 +10.505136 -0.055006903 -1.919294 128.0 +10.518362 -0.11962015 -1.9218597 128.0 +10.524311 -0.18427756 -1.9231426 128.0 +10.523965 -0.24887325 -1.9233259 128.0 +10.485882 -0.31236076 -1.916545 128.0 +10.510294 -0.37764713 -1.9214932 128.0 +10.484206 -0.44113901 -1.9170948 128.0 +10.499958 -0.50635958 -1.9205769 128.0 +10.510396 -0.57152337 -1.9231426 128.0 +10.533186 -0.63760591 -1.9280908 128.0 +10.534961 -0.70261663 -1.9291904 128.0 +10.504959 -0.76538831 -1.9244255 128.0 +10.512805 -0.83083755 -1.9268079 128.0 +10.513387 -0.89582777 -1.9279075 128.0 +10.517482 -0.96121418 -1.9297402 128.0 +10.531933 -1.0277344 -1.9335887 128.0 +10.510761 -1.0908161 -1.9308398 128.0 +10.432536 -1.1474454 -1.9174614 128.0 +10.462406 -1.2157471 -1.9244255 128.0 +10.465484 -1.2812339 -1.9264414 128.0 +10.451574 -1.3446724 -1.9253418 128.0 +10.472354 -1.4127183 -1.9308398 128.0 +10.436234 -1.4731028 -1.9257083 128.0 +10.4163 -1.5355339 -1.9236923 128.0 +10.40571 -1.5992689 -1.9235091 128.0 +10.442296 -1.6705394 -1.9323058 128.0 +10.403727 -1.7299056 -1.9269912 128.0 +10.380322 -1.791536 -1.9246087 128.0 +10.351716 -1.8520789 -1.9213099 128.0 +10.295692 -1.9073255 -1.9128797 128.0 +10.289588 -1.9715725 -1.9139793 128.0 +9.9793119 -1.9756887 -1.8573505 128.0 +9.6703472 -1.9762706 -1.8009048 128.0 +9.4733467 -1.9966508 -1.7657179 128.0 +9.3369894 -2.0278313 -1.7420768 128.0 +9.1843014 -2.0537682 -1.71532 128.0 +9.0450649 -2.0809941 -1.691129 128.0 +8.968029 -2.1212957 -1.6788503 128.0 +8.8851099 -2.1593382 -1.6654719 128.0 +8.6732969 -2.1643178 -1.6273527 128.0 +8.6712818 -2.2204213 -1.6295519 128.0 +7.8026948 -2.0491436 -1.4647967 128.0 +7.6010671 -2.0461397 -1.4283268 128.0 +7.4774885 -2.0621674 -1.4068849 128.0 +7.4467192 -2.1029344 -1.4034028 128.0 +7.0294633 -2.0317788 -1.3249654 128.0 +6.9273052 -2.0483954 -1.3075552 128.0 +6.6755919 -2.0186026 -1.2610059 128.0 +6.5851235 -2.0354342 -1.2457949 128.0 +6.9774837 -2.2036784 -1.3249654 128.0 +6.2078624 -2.0026295 -1.1768872 128.0 +6.1188917 -2.0154681 -1.1618594 128.0 +5.9852715 -2.0122566 -1.1380349 128.0 +5.8844724 -2.0186455 -1.1206248 128.0 +5.7903185 -2.0261467 -1.1044974 128.0 +5.7000012 -2.0338907 -1.0891032 128.0 +5.5331287 -2.0127165 -1.0584979 128.0 +5.503161 -2.040138 -1.0550159 128.0 +5.3801789 -2.0321901 -1.0330241 128.0 +5.3419175 -2.0552816 -1.0278927 128.0 +5.2367568 -2.0518055 -1.0093828 128.0 +5.191196 -2.0707889 -1.0027853 128.0 +5.2057185 -2.1136954 -1.0082833 128.0 +5.2389889 -2.1647401 -1.0176299 128.0 +5.3307343 -2.2410316 -1.0388886 128.0 +5.1523714 -2.2033606 -1.0055343 128.0 +5.0576181 -2.1996524 -0.98904043 128.0 +5.0557141 -2.2358119 -0.99142289 128.0 +5.141428 -2.3115292 -1.0117654 128.0 +5.145925 -2.3516121 -1.0156139 128.0 +5.1313992 -2.3831425 -1.0156139 128.0 +5.0988984 -2.4061937 -1.0119486 128.0 +5.1008811 -2.4455082 -1.0154306 128.0 +5.0504255 -2.4595463 -1.0081 128.0 +4.9312572 -2.4390676 -0.98647475 128.0 +5.0593958 -2.5411904 -1.0163469 128.0 +4.957881 -2.528424 -0.99838698 128.0 +4.8619547 -2.517221 -0.98152661 128.0 +4.8359752 -2.5415187 -0.97932738 128.0 +4.916573 -2.6224923 -0.99966985 128.0 +4.9021182 -2.6535463 -1.0000364 128.0 +4.8624787 -2.6707985 -0.99508822 128.0 +4.9215703 -2.7426908 -1.0112156 128.0 +4.8396077 -2.7360725 -0.99728739 128.0 +4.8491654 -2.780875 -1.0029685 128.0 +4.7555289 -2.7660973 -0.98647475 128.0 +4.7452412 -2.7992201 -0.98794085 128.0 +4.7726908 -2.8550277 -0.9976539 128.0 +4.7710533 -2.8939443 -1.0011359 128.0 +4.6954246 -2.887635 -0.98849064 128.0 +4.7276731 -2.9475939 -0.99948657 128.0 +4.6804113 -2.9581664 -0.99307227 128.0 +4.6572056 -2.9836478 -0.99197268 128.0 +4.6734409 -3.034651 -0.99966985 128.0 +4.7056489 -3.0967722 -1.0110322 128.0 +4.5695992 -3.0475957 -0.98482537 128.0 +4.5214901 -3.0557625 -0.97822779 128.0 +4.5213118 -3.0962224 -0.98244292 128.0 +4.5385761 -3.1491222 -0.99068981 128.0 +4.5111251 -3.1712582 -0.98885721 128.0 +4.4443355 -3.1652348 -0.97804457 128.0 +4.4750586 -3.2286785 -0.98959023 128.0 +4.4861188 -3.2786963 -0.9967376 128.0 +4.4493232 -3.2938788 -0.99288905 128.0 +4.4274554 -3.3199379 -0.99252248 128.0 +4.4414496 -3.3732007 -1.0005862 128.0 +4.4604106 -3.4309545 -1.0099326 128.0 +4.4392748 -3.4582584 -1.0099326 128.0 +4.3955884 -3.4677761 -1.0046179 128.0 +4.327374 -3.4572546 -0.99343884 128.0 +4.3450594 -3.5152731 -1.0027853 128.0 +4.3370972 -3.5530806 -1.0060841 128.0 +4.3106742 -3.57586 -1.0049845 128.0 +4.3165054 -3.6256347 -1.0117654 128.0 +4.3503461 -3.6998141 -1.0255102 128.0 +4.2821183 -3.6873116 -1.014331 128.0 +4.2482972 -3.7038271 -1.011582 128.0 +4.2218056 -3.726572 -1.0106658 128.0 +4.2193861 -3.7707467 -1.0157971 128.0 +4.1859632 -3.7873325 -1.0132314 128.0 +4.1901946 -3.8381763 -1.0201955 128.0 +3.5963542 -3.3351116 -0.87523282 128.0 +3.5564704 -3.3389499 -0.87028468 128.0 +3.5295024 -3.3546145 -0.8686353 128.0 +3.5109777 -3.3782525 -0.86918509 128.0 +3.5183532 -3.4271674 -0.87651569 128.0 +4.0131812 -3.9573658 -1.011582 128.0 +4.0055223 -3.9985831 -1.0159804 128.0 +3.9816036 -4.0237842 -1.0161637 128.0 +4.0131903 -4.105782 -1.0311915 128.0 +3.9797275 -4.1218433 -1.0289923 128.0 +3.9224706 -4.1127515 -1.0203788 128.0 +3.9153633 -4.1560602 -1.025327 128.0 +3.9205971 -4.2131085 -1.0337571 128.0 +3.8494303 -4.1878734 -1.0212951 128.0 +2.4695427 -2.7201879 -0.64578491 128.0 +2.455431 -2.7382169 -0.64651799 128.0 +2.4281533 -2.7414582 -0.64358574 128.0 +2.400281 -2.7437284 -0.64047027 128.0 +2.4142554 -2.794106 -0.64926696 128.0 +3.7884128 -4.438879 -1.0487849 128.0 +3.6704955 -4.3545599 -1.022578 128.0 +3.621063 -4.349802 -1.0159804 128.0 +3.6411321 -4.4288888 -1.0297253 128.0 +3.6213248 -4.4603047 -1.0319245 128.0 +3.5877385 -4.4747715 -1.0300919 128.0 +3.5687582 -4.5074906 -1.0326575 128.0 +3.585238 -4.5858364 -1.0460359 128.0 +3.5480206 -4.596077 -1.0432869 128.0 +3.4845896 -4.5716343 -1.0324743 128.0 +3.4458315 -4.5787916 -1.0291755 128.0 +3.403013 -4.580122 -1.0245938 128.0 +3.3818238 -4.6104283 -1.026793 128.0 +3.329253 -4.597652 -1.0190959 128.0 +3.2901168 -4.6027985 -1.0156139 128.0 +3.2595453 -4.6196871 -1.0148808 128.0 +5.122395 -7.3548489 -1.6317511 128.0 +3.136337 -4.5629368 -0.99307227 128.0 +3.0994494 -4.5690789 -0.99014002 128.0 +3.0866697 -4.6108832 -0.99527144 128.0 +3.0745769 -4.6543422 -1.0007694 128.0 +4.8084779 -7.3767519 -1.6024287 128.0 +4.7572751 -7.3970227 -1.6004127 128.0 +4.709691 -7.4227533 -1.5996797 128.0 +4.6635356 -7.4506783 -1.5994965 128.0 +4.6259952 -7.4925365 -1.6024287 128.0 +4.6535692 -7.6416831 -1.6288189 128.0 +2.8172238 -4.691052 -0.98097676 128.0 +4.4968176 -7.5924869 -1.6059108 128.0 +4.4521294 -7.6233315 -1.6066438 128.0 +4.4106665 -7.6598768 -1.6086597 128.0 +4.3611565 -7.6825213 -1.6077434 128.0 +4.3134551 -7.7082782 -1.6075602 128.0 +4.2618036 -7.7268529 -1.6059108 128.0 +4.2049212 -7.7355838 -1.6022455 128.0 +4.1485572 -7.7447748 -1.5987633 128.0 +4.115643 -7.797904 -1.6046278 128.0 +4.0327945 -7.7558527 -1.5905164 128.0 +3.9891634 -7.7883258 -1.5921658 128.0 +3.9426286 -7.8152895 -1.5927156 128.0 +3.8959129 -7.8419747 -1.5932654 128.0 +3.8593864 -7.8895745 -1.5982136 128.0 +3.8104777 -7.912221 -1.5980303 128.0 +3.7563827 -7.9239049 -1.5956479 128.0 +3.6935585 -7.9165154 -1.5894169 128.0 +3.6424527 -7.9336696 -1.5883173 128.0 +3.6034174 -7.9773712 -1.5927156 128.0 +3.5544014 -7.999331 -1.5927156 128.0 +3.5131257 -8.0390053 -1.5963809 128.0 +3.4575224 -8.0459595 -1.5934488 128.0 +3.3981402 -8.043479 -1.5886838 128.0 +3.3434436 -8.0514679 -1.5861181 128.0 +3.2898915 -8.0618191 -1.5841022 128.0 +3.2410948 -8.0836782 -1.5844687 128.0 +3.1925142 -8.1061573 -1.5850185 128.0 +3.1423609 -8.1246767 -1.5848353 128.0 +3.0907047 -8.1392097 -1.5839189 128.0 +3.0228493 -8.1101217 -1.5743891 128.0 +2.9875517 -8.1682158 -1.5822695 128.0 +2.961616 -8.2539387 -1.5956479 128.0 +1.1178461 -3.1773336 -0.58878952 128.0 +1.0983293 -3.1841328 -0.58878952 128.0 +1.0841255 -3.2066431 -0.591905 128.0 +1.0767994 -3.2505612 -0.59923559 128.0 +1.0777764 -3.3216245 -0.6118809 128.0 +1.071668 -3.3731456 -0.62067765 128.0 +2.5927944 -8.3359461 -1.5883173 128.0 +2.5358722 -8.3328886 -1.5846519 128.0 +0.96452188 -3.2415473 -0.5913552 128.0 +0.91302484 -3.1388552 -0.57027972 128.0 +0.89563024 -3.1510174 -0.57156259 128.0 +0.89022255 -3.2066555 -0.58127564 128.0 +2.1635561 -7.980742 -1.5023659 128.0 +2.1110263 -7.9805622 -1.4998002 128.0 +2.0617731 -7.992413 -1.499617 128.0 +0.84458572 -3.3600564 -0.60674948 128.0 +0.85436058 -3.4893034 -0.63057393 128.0 +1.9047318 -7.9888468 -1.4919199 128.0 +1.8545665 -7.9955955 -1.4910035 128.0 +1.8069855 -8.0135374 -1.4922863 128.0 +1.7588334 -8.0292749 -1.4932027 128.0 +1.7074885 -8.0303011 -1.4913701 128.0 +1.6510336 -8.0059662 -1.4847726 128.0 +1.6030351 -8.0217295 -1.4858721 128.0 +1.5466871 -7.9947386 -1.4789081 128.0 +1.4914545 -7.9712248 -1.472677 128.0 +1.444265 -7.9898996 -1.4745097 128.0 +1.3962265 -8.0044222 -1.4756093 128.0 +1.3480642 -8.0186548 -1.4767089 128.0 +1.3011935 -8.0413322 -1.4794579 128.0 +1.247748 -8.0229378 -1.4745097 128.0 +1.1980612 -8.0275259 -1.4739599 128.0 +1.1561598 -8.0863028 -1.483673 128.0 +1.1117167 -8.1312313 -1.4908203 128.0 +1.0721097 -8.2168579 -1.5056647 128.0 +1.0316145 -8.303277 -1.5206925 128.0 +0.9996658 -8.4705372 -1.5509312 128.0 +0.95269924 -8.521452 -1.5593615 128.0 +0.89967173 -8.5202942 -1.5580785 128.0 +0.8457216 -8.5090237 -1.554963 128.0 +0.79258257 -8.5042648 -1.5531304 128.0 +0.74192125 -8.5265961 -1.5564291 128.0 +0.69149107 -8.5545044 -1.5608275 128.0 +0.64030689 -8.5762329 -1.5641263 128.0 +0.58679819 -8.5672503 -1.5617439 128.0 +0.53464794 -8.5775576 -1.5630267 128.0 +0.48189658 -8.5787134 -1.5626602 128.0 +0.42880711 -8.5726728 -1.5610108 128.0 +0.37723327 -8.5987129 -1.5654092 128.0 +0.3239831 -8.5880947 -1.5630267 128.0 +0.27128142 -8.589921 -1.5630267 128.0 +0.21859461 -8.5924072 -1.56321 128.0 +0.16567831 -8.5837574 -1.5613773 128.0 +0.11300623 -8.5846128 -1.5613773 128.0 +0.060281236 -8.5782633 -1.5600945 128.0 +0.007638413 -8.5715904 -1.5588117 128.0 +-0.045073543 -8.5940857 -1.5630267 128.0 +-0.097771592 -8.5906982 -1.5624769 128.0 +-0.15079039 -8.6076288 -1.5657756 128.0 +-0.20253561 -8.5613337 -1.5573455 128.0 +-0.25643712 -8.6061134 -1.565959 128.0 +-0.30867422 -8.5886593 -1.5630267 128.0 +-0.3599636 -8.5532084 -1.5567957 128.0 +-0.41177589 -8.5370922 -1.55423 128.0 +-0.4636707 -8.5255699 -1.5525806 128.0 +-0.51716113 -8.5421896 -1.5562459 128.0 +-0.57178825 -8.5722065 -1.5624769 128.0 +-0.62587494 -8.5891256 -1.5663254 128.0 +-0.67995846 -8.6027641 -1.5696243 128.0 +-0.72705829 -8.5318232 -1.5571622 128.0 +-0.78189909 -8.5546131 -1.5622936 128.0 +-0.8354243 -8.5604172 -1.5643096 128.0 +-0.8884415 -8.5600185 -1.5652258 128.0 +-0.94470841 -8.5886078 -1.5716401 128.0 +-0.99444008 -8.5572605 -1.5668752 128.0 +-1.041912 -8.5100145 -1.5591781 128.0 +-1.0958645 -8.5171118 -1.5617439 128.0 +-1.1478412 -8.5082788 -1.5613773 128.0 +-1.2009869 -8.5078897 -1.5626602 128.0 +-1.2530245 -8.4993877 -1.5624769 128.0 +-1.311124 -8.530406 -1.5698075 128.0 +-1.362354 -8.5154047 -1.5685247 128.0 +-1.4121598 -8.4923391 -1.5657756 128.0 +-1.4700918 -8.5174208 -1.5721899 128.0 +-1.5150559 -8.4675961 -1.5644928 128.0 +-1.5705643 -8.4774733 -1.5681581 128.0 +-1.6231064 -8.4705734 -1.5687079 128.0 +-1.6792496 -8.4816704 -1.5727397 128.0 +-1.7273247 -8.4519434 -1.5690745 128.0 +-1.7791523 -8.441186 -1.5690745 128.0 +-1.8357108 -8.4522057 -1.5732895 128.0 +-1.8941872 -8.4705238 -1.5789708 128.0 +-1.9417182 -8.4395809 -1.5753055 128.0 +-1.9986696 -8.4495115 -1.5795206 128.0 +-2.0497808 -8.4342232 -1.5789708 128.0 +-2.1012557 -8.4205332 -1.5787874 128.0 +-2.1543465 -8.4131956 -1.5798872 128.0 +-2.213418 -8.4283438 -1.5853851 128.0 +-2.2643254 -8.4117556 -1.5848353 128.0 +-2.3161576 -8.3986511 -1.5850185 128.0 +-2.3684485 -8.3871202 -1.5855683 128.0 +-2.4185016 -8.3677073 -1.5846519 128.0 +-2.4678485 -8.3461113 -1.5833691 128.0 +-2.5215733 -8.3392811 -1.5850185 128.0 +-2.5770483 -8.3377399 -1.5877675 128.0 +-2.6246071 -8.3105211 -1.5855683 128.0 +-2.6725326 -8.2849045 -1.5837357 128.0 +-2.7199352 -8.2580795 -1.5817198 128.0 +-2.7749395 -8.2542801 -1.5842855 128.0 +-2.8386106 -8.2752237 -1.5917994 128.0 +-2.8734262 -8.212183 -1.5828193 128.0 +-2.9207883 -8.1860638 -1.58117 128.0 +-2.9800339 -8.1929321 -1.5861181 128.0 +-3.0415232 -8.2049122 -1.5921658 128.0 +-3.08799 -8.1759787 -1.59015 128.0 +-1.438697 -3.7390056 -0.70772856 128.0 +-1.4712932 -3.7548215 -0.7126767 128.0 +-3.2463357 -8.1387558 -1.594365 128.0 +-3.2984319 -8.1241484 -1.5954646 128.0 +-3.3459663 -8.0983047 -1.594365 128.0 +-3.4024503 -8.093935 -1.5976638 128.0 +-3.4369771 -8.037653 -1.5905164 128.0 +-3.4925029 -8.0308371 -1.5934488 128.0 +-3.542906 -8.0119534 -1.5939986 128.0 +-3.5940149 -7.9945474 -1.5949148 128.0 +-1.4748893 -3.2270715 -0.62232703 128.0 +-1.4996307 -3.2286606 -0.6245262 128.0 +-1.5508741 -3.2860787 -0.63827109 128.0 +-1.6338972 -3.4077003 -0.66539431 128.0 +-1.6534846 -3.3949592 -0.66484451 128.0 +-1.6703626 -3.3768189 -0.66319513 128.0 +-1.688404 -3.3612351 -0.66209555 128.0 +-1.7148014 -3.3621972 -0.664478 128.0 +-1.7394665 -3.3594694 -0.66612738 128.0 +-1.7682779 -3.3643973 -0.66942614 128.0 +-4.1444445 -7.7703815 -1.602612 128.0 +-4.1929803 -7.7465343 -1.6029785 128.0 +-4.2579422 -7.752543 -1.6097593 128.0 +-4.2925115 -7.7030845 -1.6048112 128.0 +-4.356627 -7.7065544 -1.6112254 128.0 +-4.4155674 -7.7001452 -1.6156238 128.0 +-4.4800286 -7.7026501 -1.622038 128.0 +-4.5297041 -7.6792498 -1.6229544 128.0 +-4.571692 -7.6428747 -1.6211218 128.0 +-4.6047378 -7.5919843 -1.6161736 128.0 +-4.655869 -7.5711241 -1.617823 128.0 +-4.7079573 -7.5515904 -1.6198388 128.0 +-2.0039556 -3.1704159 -0.6600796 128.0 +-2.0233712 -3.1580601 -0.6600796 128.0 +-2.0512757 -3.158778 -0.66301185 128.0 +-4.8799767 -7.4157095 -1.6158071 128.0 +-4.928659 -7.3905344 -1.6169066 128.0 +-4.9827204 -7.3731861 -1.6198388 128.0 +-5.0356426 -7.3538303 -1.6224046 128.0 +-5.0840325 -7.3276401 -1.6235042 128.0 +-5.1503797 -7.326869 -1.6304682 128.0 +-5.1940989 -7.2935276 -1.6301017 128.0 +-5.2261009 -7.2439799 -1.6260699 128.0 +-5.2646503 -7.2038393 -1.6242373 128.0 +-5.3099232 -7.1729808 -1.6246037 128.0 +-5.3732963 -7.1662207 -1.6306515 128.0 +-5.418355 -7.1346817 -1.631018 128.0 +-5.4686232 -7.1098728 -1.633034 128.0 +-5.5145617 -7.0792866 -1.633767 128.0 +-5.5621576 -7.0507193 -1.6350499 128.0 +-5.5924306 -7.0003281 -1.6312013 128.0 +-5.648262 -6.9819322 -1.6350499 128.0 +-5.7028317 -6.9615932 -1.6385319 128.0 +-5.7523432 -6.9347939 -1.6405479 128.0 +-5.7815094 -6.8835588 -1.6366993 128.0 +-5.843379 -6.8711705 -1.6423805 128.0 +-5.8770914 -6.8255019 -1.6399981 128.0 +-5.9363027 -6.8093204 -1.6449462 128.0 +-5.9636607 -6.7565522 -1.6409143 128.0 +-6.0187612 -6.7352271 -1.644763 128.0 +-6.0481038 -6.6850476 -1.6414641 128.0 +-6.0876803 -6.6463614 -1.6410977 128.0 +-6.1363678 -6.6175332 -1.6432968 128.0 +-6.2051148 -6.6098604 -1.6509939 128.0 +-6.2516503 -6.5780759 -1.6526433 128.0 +-6.2755375 -6.5225897 -1.648245 128.0 +-6.3257294 -6.494525 -1.6509939 128.0 +-6.3840952 -6.4744892 -1.6559421 128.0 +-6.4320354 -6.4435449 -1.6581413 128.0 +-6.4700541 -6.4025745 -1.6577748 128.0 +-6.5148416 -6.3682518 -1.6592408 128.0 +-6.5431862 -6.3179145 -1.6564919 128.0 +-6.5839629 -6.2796831 -1.6570417 128.0 +-6.6388268 -6.2546721 -1.6612568 128.0 +-6.6526127 -6.1910477 -1.6550258 128.0 +-6.7121863 -6.1700711 -1.6605238 128.0 +-6.7622914 -6.1400042 -1.6636392 128.0 +-6.80862 -6.1062727 -1.6658385 128.0 +-6.8437519 -6.0624251 -1.6652886 128.0 +-6.8993168 -6.0365028 -1.6698703 128.0 +-6.9406891 -5.9979124 -1.6709698 128.0 +-6.9878287 -5.9641476 -1.6735356 128.0 +-7.0182796 -5.9160895 -1.6720694 128.0 +-7.0514259 -5.870399 -1.6713364 128.0 +-7.0880728 -5.8276463 -1.6715196 128.0 +-7.1191182 -5.7803268 -1.6704201 128.0 +-7.176693 -5.7543707 -1.6757348 128.0 +-7.2118659 -5.710227 -1.6757348 128.0 +-7.2351508 -5.656785 -1.6729858 128.0 +-7.2588305 -5.6038737 -1.6704201 128.0 +-7.3087144 -5.5711489 -1.6740854 128.0 +-7.3576841 -5.5374308 -1.6775674 128.0 +-7.4191399 -5.5127029 -1.6839817 128.0 +-7.4092302 -5.4350939 -1.673902 128.0 +-7.4734912 -5.4120178 -1.6810495 128.0 +-7.5049586 -5.3649158 -1.6806829 128.0 +-7.5425553 -5.3221664 -1.6817825 128.0 +-7.5992694 -5.2926421 -1.6872804 128.0 +-7.6316013 -5.245914 -1.6872804 128.0 +-7.5953116 -5.1526265 -1.6718862 128.0 +-7.6357703 -5.1119418 -1.673902 128.0 +-7.7014418 -5.0877533 -1.6815993 128.0 +-7.7366323 -5.043087 -1.6825155 128.0 +-7.7839665 -5.0061569 -1.6861808 128.0 +-6.526298 -4.1408386 -1.4017534 128.0 +-6.5099196 -4.074635 -1.3925902 128.0 +-7.8296266 -4.8341408 -1.6762846 128.0 +-7.8297548 -4.7681108 -1.6698703 128.0 +-7.8605494 -4.7209911 -1.6702368 128.0 +-7.9392719 -4.70223 -1.6810495 128.0 +-8.0095701 -4.6777215 -1.6900294 128.0 +-8.0270462 -4.6221104 -1.687647 128.0 +-8.0706444 -4.5815063 -1.6909457 128.0 +-8.0943146 -4.5294991 -1.6900294 128.0 +-8.1322842 -4.485446 -1.6922286 128.0 +-8.1587896 -4.4349933 -1.6920453 128.0 +-8.1676512 -4.3750997 -1.6881968 128.0 +-7.671844 -4.0491023 -1.5780544 128.0 +-8.1683941 -4.2473273 -1.6772009 128.0 +-8.1908016 -4.195334 -1.6764678 128.0 +-6.926198 -3.4940519 -1.4070681 128.0 +-6.8929234 -3.4243672 -1.3957057 128.0 +-6.9102731 -3.3802805 -1.3949726 128.0 +-6.9264555 -3.3356833 -1.3940563 128.0 +-6.9698877 -3.3040705 -1.3988212 128.0 +-7.0212097 -3.2757909 -1.4052354 128.0 +-8.2928104 -3.8073592 -1.6619898 128.0 +-8.3079529 -3.7527611 -1.6603404 128.0 +-6.5431023 -2.9072642 -1.295643 128.0 +-8.3209515 -3.636354 -1.6537429 128.0 +-8.3223333 -3.5763013 -1.6495278 128.0 +-8.3540821 -3.5293779 -1.6515437 128.0 +-8.382843 -3.4810681 -1.6530099 128.0 +-8.3967638 -3.4265947 -1.6515437 128.0 +-8.4185429 -3.3753746 -1.651727 128.0 +-8.4573889 -3.3308613 -1.6553923 128.0 +-8.474 -3.2774866 -1.6546593 128.0 +-8.4939508 -3.2254293 -1.6546593 128.0 +-8.5356894 -3.1814919 -1.6590576 128.0 +-7.6188927 -2.7866063 -1.4732268 128.0 +-7.6423244 -2.7421296 -1.4745097 128.0 +-8.633605 -3.0381989 -1.6671213 128.0 +-8.6604481 -2.9880531 -1.6687707 128.0 +-8.668376 -2.9313927 -1.6667547 128.0 +-8.6712694 -2.8732014 -1.6638225 128.0 +-8.7186565 -2.8296537 -1.669687 128.0 +-8.7686462 -2.7865257 -1.6761012 128.0 +-8.8015366 -2.7376342 -1.6792167 128.0 +-8.8360376 -2.6890163 -1.6826988 128.0 +-8.8834629 -2.6440043 -1.6887466 128.0 +-8.9221735 -2.5960393 -1.6931449 128.0 +-9.008852 -2.5614119 -1.7068897 128.0 +-9.0679703 -2.5181882 -1.71532 128.0 +-9.1117153 -2.4702187 -1.7208179 128.0 +-9.1362047 -2.4167781 -1.7226506 128.0 +-9.1879854 -2.3702526 -1.729798 128.0 +-9.2633724 -2.3291762 -1.741527 128.0 +-9.3070889 -2.2795444 -1.7472081 128.0 +-9.3467197 -2.2285514 -1.7521563 128.0 +-9.365963 -2.172492 -1.7532558 128.0 +-9.3915844 -2.1177945 -1.7556384 128.0 +-9.2517166 -2.026675 -1.7264992 128.0 +-9.425519 -2.0042264 -1.7572877 128.0 +-9.6215334 -1.9842877 -1.7922913 128.0 +-9.7038994 -1.9392802 -1.8056697 128.0 +-10.126773 -1.9592665 -1.8837407 128.0 +-10.328962 -1.9327197 -1.9198438 128.0 +-10.544744 -1.9062128 -1.9585128 128.0 +-10.502977 -1.8321819 -1.9484332 128.0 +-10.527595 -1.7699848 -1.9509989 128.0 +-10.551843 -1.7075546 -1.9535646 128.0 +-10.575721 -1.6448932 -1.9561303 128.0 +-10.539917 -1.5731484 -1.9475169 128.0 +-10.571754 -1.5116484 -1.9517319 128.0 +-10.574986 -1.4459536 -1.9506323 128.0 +-10.558314 -1.3777313 -1.9458674 128.0 +-10.621201 -1.319711 -1.9561303 128.0 +-10.592976 -1.2502509 -1.9493495 128.0 +-10.605332 -1.1857765 -1.9502659 128.0 +-10.626096 -1.1221268 -1.9528315 128.0 +-10.632781 -1.0569053 -1.9528315 128.0 +-10.639066 -0.99164385 -1.9528315 128.0 +-10.649847 -0.9267714 -1.9537479 128.0 +-10.702366 -0.86521184 -1.9625446 128.0 +-10.642772 -0.79469335 -1.9504491 128.0 +-10.682755 -0.73179555 -1.9570466 128.0 +-10.671346 -0.66525435 -1.9541144 128.0 +-10.695838 -0.60092247 -1.957963 128.0 +-10.685578 -0.53459454 -1.9553972 128.0 +-10.674908 -0.46841514 -1.9528315 128.0 +-10.712946 -0.40424213 -1.9594291 128.0 +-10.703434 -0.33812818 -1.9572299 128.0 +-9.9108477 0.72838283 -1.9373915 128.0 +-9.9668083 0.79401702 -1.9494871 128.0 +-9.9656572 0.85549325 -1.9502676 128.0 +-9.9270144 0.91356552 -1.9436344 128.0 +-9.9212217 0.97445935 -1.9436344 128.0 +-9.9082279 1.0346026 -1.9422688 128.0 +-9.9143658 1.0967823 -1.944805 128.0 +-9.8782253 1.1541771 -1.9389523 128.0 +-9.8475952 1.2118891 -1.9342701 128.0 +-9.8672085 1.2758147 -1.9397327 128.0 +-9.8553066 1.3358073 -1.9389523 128.0 +-9.8362436 1.3947374 -1.9368063 128.0 +-9.8459339 1.4577966 -1.940513 128.0 +-9.8561897 1.5211769 -1.9444149 128.0 +-9.8205252 1.577422 -1.9391474 128.0 +-9.8184004 1.6389427 -1.940708 128.0 +-9.8081589 1.6991564 -1.940708 128.0 +-9.8004446 1.7598265 -1.9412934 128.0 +-9.7952471 1.821004 -1.9424639 128.0 +-9.7838898 1.8810723 -1.9424639 128.0 +-9.7721634 1.9410697 -1.9424639 128.0 +-9.73701 1.9962637 -1.9377817 128.0 +-9.7121038 2.0533326 -1.9352455 128.0 +-9.6974058 2.1124685 -1.9348553 128.0 +-9.6785192 2.1706424 -1.9336848 128.0 +-9.6822195 2.233959 -1.9371965 128.0 +-9.6587877 2.2910612 -1.9352455 128.0 +-9.6483593 2.3512125 -1.9360259 128.0 +-9.6242371 2.4079878 -1.934075 128.0 +-9.5912313 2.4623597 -1.9303683 128.0 +-9.5579224 2.5164173 -1.9266616 128.0 +-9.5555582 2.5785952 -1.9293928 128.0 +-9.5433369 2.6382241 -1.9301732 128.0 +-9.5458431 2.7020762 -1.934075 128.0 +-9.4932871 2.7502227 -1.9266616 128.0 +-9.4988012 2.8151116 -1.9313438 128.0 +-9.481349 2.8733423 -1.9313438 128.0 +-9.4391823 2.9239163 -1.9262714 128.0 +-9.4378948 2.9871082 -1.929783 128.0 +-9.4352531 3.0500922 -1.9330995 128.0 +-9.3995962 3.1023932 -1.929588 128.0 +-9.3339119 3.1443486 -1.9198334 128.0 +-9.3441229 3.2117665 -1.9260763 128.0 +-9.3075809 3.2631977 -1.9225646 128.0 +-9.3150883 3.3301549 -1.9284174 128.0 +-9.3110657 3.3932953 -1.931929 128.0 +-9.302021 3.4548037 -1.9344652 128.0 +-9.2806482 3.5118146 -1.9344652 128.0 +-9.2790575 3.5764561 -1.9387572 128.0 +-9.2231598 3.6200614 -1.9315388 128.0 +-9.1643448 3.6620238 -1.9237353 128.0 +-9.2171059 3.7488649 -1.9399277 128.0 +-9.1649313 3.7933433 -1.9336848 128.0 +-9.1685991 3.8609293 -1.9395375 128.0 +-9.1357212 3.9132512 -1.9375867 128.0 +-9.0782709 3.9547365 -1.9303683 128.0 +-9.045764 4.0067892 -1.9286125 128.0 +-9.0201139 4.0618148 -1.9284174 128.0 +-8.946866 4.095037 -1.9178826 128.0 +-8.9028969 4.1411681 -1.9137856 128.0 +-8.918107 4.2150006 -1.9227598 128.0 +-8.8461037 4.2475605 -1.9126151 128.0 +-8.835741 4.3095002 -1.9161267 128.0 +-8.8390121 4.3784394 -1.9227598 128.0 +-8.8216171 4.4374418 -1.9249058 128.0 +-8.7330847 4.4602523 -1.9112494 128.0 +-8.7725935 4.5485234 -1.9262714 128.0 +-8.6915789 4.5743947 -1.9143709 128.0 +-8.6841087 4.6387324 -1.9190531 128.0 +-8.6744509 4.7022147 -1.9233451 128.0 +-8.6694956 4.7685895 -1.9288076 128.0 +-8.5604286 4.777236 -1.9106642 128.0 +-8.5514374 4.8412714 -1.9153464 128.0 +-8.4943562 4.8780179 -1.9091034 128.0 +-8.4761295 4.9369588 -1.9118347 128.0 +-8.4304781 4.9798937 -1.908323 128.0 +-8.4132252 5.0395942 -1.9114445 128.0 +-8.3989086 5.1013064 -1.9153464 128.0 +-8.3599339 5.1481161 -1.9135906 128.0 +-8.3190374 5.1936002 -1.9114445 128.0 +-8.2803831 5.2403502 -1.9098839 128.0 +-8.2406445 5.2862921 -1.908128 128.0 +-8.2170973 5.342638 -1.910274 128.0 +-8.1751528 5.3870196 -1.908128 128.0 +-8.1313419 5.4299979 -1.9055918 128.0 +-8.0865002 5.4720917 -1.9028605 128.0 +-8.146596 5.5859561 -1.9254911 128.0 +-8.0364599 5.5832267 -1.9071525 128.0 +-8.012476 5.6397724 -1.9096887 128.0 +-7.9976821 5.7030683 -1.9145659 128.0 +-7.9720778 5.7589269 -1.9169071 128.0 +-7.9334259 5.8054171 -1.9161267 128.0 +-7.9205031 5.8709264 -1.9217843 128.0 +-7.890605 5.9241266 -1.9233451 128.0 +-7.893919 6.0027127 -1.9332947 128.0 +-7.8142047 6.0181165 -1.9225646 128.0 +-7.8080626 6.0900817 -1.9303683 128.0 +-7.7705474 6.1378765 -1.9303683 128.0 +-7.722784 6.1774745 -1.9278321 128.0 +-7.7030239 6.2395625 -1.9325143 128.0 +-7.6532197 6.2773786 -1.929588 128.0 +-7.6364369 6.3423948 -1.9352455 128.0 +-7.6048822 6.3954453 -1.9371965 128.0 +-7.525177 6.4076467 -1.9266616 128.0 +-7.5280561 6.4902086 -1.9377817 128.0 +-7.4947405 6.5420833 -1.9395375 128.0 +-7.4243293 6.5613146 -1.9315388 128.0 +-7.3846612 6.6073999 -1.931734 128.0 +-7.4035788 6.7065878 -1.9477314 128.0 +-7.3319325 6.7240434 -1.9395375 128.0 +-7.3005981 6.7782483 -1.9422688 128.0 +-7.2624431 6.8262753 -1.9432442 128.0 +-7.210475 6.8612418 -1.940513 128.0 +-7.1710644 6.9080772 -1.9412934 128.0 +-7.1222234 6.9457846 -1.9395375 128.0 +-7.0857515 6.9955573 -1.9412934 128.0 +-7.0572605 7.0534644 -1.9453902 128.0 +-7.0179844 7.1008201 -1.9465607 128.0 +-6.9831886 7.1528726 -1.9490969 128.0 +-6.9446139 7.2012343 -1.9506577 128.0 +-6.9104433 7.2543635 -1.9535841 128.0 +-6.8826017 7.3144879 -1.9584613 128.0 +-6.8369236 7.3558626 -1.9582663 128.0 +-6.7896705 7.3955069 -1.9576809 128.0 +-6.7533875 7.4472008 -1.9604121 128.0 +-6.6944795 7.473886 -1.9565104 128.0 +-6.6484947 7.514822 -1.9565104 128.0 +-6.6112933 7.5658154 -1.9592416 128.0 +-6.5826864 7.6270308 -1.9647042 128.0 +-6.5433979 7.6762357 -1.9670453 128.0 +-6.4980688 7.7184916 -1.9676305 128.0 +-6.446825 7.7536926 -1.96646 128.0 +-6.4041066 7.7991681 -1.9680207 128.0 +-6.3592196 7.8421254 -1.9689962 128.0 +-6.318337 7.8901849 -1.9713373 128.0 +-6.2910938 7.9557333 -1.9781654 128.0 +-6.2512131 8.0057821 -1.9810917 128.0 +-6.187602 8.0253448 -1.9764096 128.0 +-6.1400251 8.0655012 -1.9769949 128.0 +-6.0939555 8.107729 -1.9781654 128.0 +-6.0546117 8.1591463 -1.9816771 128.0 +-6.0108089 8.2048464 -1.9838231 128.0 +-5.9609265 8.2423687 -1.9840181 128.0 +-5.9176469 8.2891674 -1.9865543 128.0 +-5.8711934 8.3317356 -1.9881151 128.0 +-5.813241 8.3579407 -1.9857739 128.0 +-5.7707276 8.4063911 -1.9888954 128.0 +-5.7267389 8.4530106 -1.9916266 128.0 +-5.6605935 8.4667892 -1.9865543 128.0 +-5.6339164 8.5398426 -1.9957236 128.0 +-5.5814104 8.5742512 -1.9957236 128.0 +-5.5255156 8.603385 -1.994553 128.0 +-5.4852185 8.657012 -1.9992352 128.0 +-5.4325166 8.6913376 -1.9994303 128.0 +-5.3883486 8.7395353 -2.0029418 128.0 +-5.3274894 8.7607002 -2.0002105 128.0 +-5.2781734 8.8007946 -2.0019665 128.0 +-5.2085986 8.8068438 -1.9959186 128.0 +-5.1717529 8.8682928 -2.0027468 128.0 +-5.1275048 8.917716 -2.0068438 128.0 +-5.072207 8.9481564 -2.0066485 128.0 +-5.0224681 8.9885292 -2.0087945 128.0 +-4.9525561 8.9925432 -2.0027468 128.0 +-4.9057059 9.0382786 -2.0062585 128.0 +-4.872354 9.109725 -2.0156229 128.0 +-4.8177376 9.1420527 -2.0162079 128.0 +-4.7597451 9.1679602 -2.0154276 128.0 +-4.7092061 9.2083454 -2.0179639 128.0 +-4.6565862 9.2449512 -2.0197196 128.0 +-4.6089225 9.2918015 -2.0238166 128.0 +-4.5436463 9.3031607 -2.0201099 128.0 +-4.4915767 9.3414726 -2.0224509 128.0 +-4.4211702 9.3413734 -2.0164032 128.0 +-4.3679094 9.3772163 -2.0183539 128.0 +-4.3258152 9.4377232 -2.0257676 128.0 +-4.2770958 9.4846525 -2.0302546 128.0 +-4.2200117 9.5134077 -2.0308399 128.0 +-4.1576381 9.5301323 -2.0288889 128.0 +-4.0928988 9.5410414 -2.0257676 128.0 +-4.0430427 9.5867615 -2.0302546 128.0 +-3.9743812 9.5878305 -2.0251822 128.0 +-3.9162164 9.6138535 -2.0255723 128.0 +-3.8604321 9.6458979 -2.0273283 128.0 +-3.8033257 9.67488 -2.0284986 128.0 +-3.7481275 9.7090149 -2.0308399 128.0 +-3.6919584 9.7410021 -2.0327907 128.0 +-3.6266496 9.7487631 -2.0296693 128.0 +-3.5613844 9.7560911 -2.0265479 128.0 +-3.509058 9.7989979 -2.0310349 128.0 +-3.4407444 9.7972088 -2.0261576 128.0 +-3.3786497 9.8125725 -2.024987 128.0 +-3.3343661 9.8805141 -2.0349367 128.0 +-3.2773712 9.9119625 -2.0372777 128.0 +-3.216491 9.9318857 -2.0372777 128.0 +-3.1581566 9.9598494 -2.0390337 128.0 +-3.1022155 9.9959011 -2.0425453 128.0 +-3.0388293 10.008178 -2.0411797 128.0 +-2.9734559 10.013473 -2.0384483 128.0 +-2.9179714 10.052251 -2.0427403 128.0 +-2.8551669 10.066192 -2.04196 128.0 +-2.7946568 10.088247 -2.0429354 128.0 +-2.7337275 10.108993 -2.0437157 128.0 +-2.6761506 10.142647 -2.0472274 128.0 +-2.6111789 10.148427 -2.0450814 128.0 +-2.5436141 10.143329 -2.0407894 128.0 +-2.4766755 10.139688 -2.0368876 128.0 +-2.4166806 10.164237 -2.0388386 128.0 +-2.3578031 10.194163 -2.04196 128.0 +-2.2960687 10.212266 -2.0427403 128.0 +-2.2381749 10.248201 -2.0472274 128.0 +-2.1770804 10.270377 -2.0489831 128.0 +-2.1080999 10.254721 -2.0431304 128.0 +-2.0516491 10.300167 -2.0497637 128.0 +-1.9774605 10.255741 -2.0382533 128.0 +-1.9153936 10.272503 -2.0392287 128.0 +-1.8535428 10.290819 -2.0405943 128.0 +-1.793889 10.322291 -2.0446913 128.0 +-1.7316521 10.339875 -2.0460567 128.0 +-1.6700467 10.361925 -2.048398 128.0 +-1.6059856 10.36907 -2.0478127 128.0 +-1.5463656 10.405892 -2.0532751 128.0 +-1.4884256 10.456939 -2.0616641 128.0 +-1.4167029 10.41048 -2.050544 128.0 +-1.3476254 10.379099 -2.0425453 128.0 +-1.2906467 10.441682 -2.0534704 128.0 +-1.2297519 10.47668 -2.0589328 128.0 +-1.1668524 10.4967 -2.0614691 128.0 +-1.0980263 10.461719 -2.0530801 128.0 +-1.0382427 10.513157 -2.0620542 128.0 +-0.97317392 10.51347 -2.0608838 128.0 +-0.90653867 10.494815 -2.0560064 128.0 +-0.84353608 10.517777 -2.0595181 128.0 +-0.77601999 10.482653 -2.0515194 128.0 +-0.71188396 10.490152 -2.0521047 128.0 +-0.64696157 10.485513 -2.0503488 128.0 +-0.57935441 10.430528 -2.0386434 128.0 +-0.51611537 10.44956 -2.041765 128.0 +-0.45241103 10.462329 -2.0437157 128.0 +-0.38885936 10.48255 -2.0472274 128.0 +-0.32465327 10.48866 -2.0480077 128.0 +-0.26053214 10.500259 -2.0499587 128.0 +-0.19575299 10.483028 -2.046252 128.0 +-0.13170692 10.506588 -2.050739 128.0 +-0.067237236 10.507198 -2.050739 128.0 +-0.0027644085 10.50349 -2.0499587 128.0 +0.061578222 10.485656 -2.046447 128.0 +0.1261179 10.501753 -2.0497637 128.0 +0.19085743 10.517451 -2.0530801 128.0 +0.25455049 10.481766 -2.046252 128.0 +0.31829184 10.46138 -2.0425453 128.0 +0.38402152 10.501375 -2.0509341 128.0 +0.45000216 10.535077 -2.0581524 128.0 +0.51089364 10.455709 -2.0429354 128.0 +0.57568687 10.464128 -2.0452764 128.0 +0.63958275 10.455504 -2.044301 128.0 +0.70478046 10.46704 -2.0474224 128.0 +0.76726371 10.439043 -2.0427403 128.0 +0.83247203 10.448804 -2.0456667 128.0 +0.89278907 10.399526 -2.0368876 128.0 +0.95577258 10.385062 -2.0351317 128.0 +1.0234115 10.419022 -2.0431304 128.0 +1.0853847 10.394011 -2.0394237 128.0 +1.1524874 10.417376 -2.0454717 128.0 +1.2187781 10.430566 -2.0495684 128.0 +1.2809572 10.408289 -2.0466421 128.0 +1.3461819 10.410933 -2.0487881 128.0 +1.4044993 10.361658 -2.0405943 128.0 +1.4617116 10.308176 -2.0316203 128.0 +1.5246464 10.297073 -2.03123 128.0 +1.5897456 10.300125 -2.0337663 128.0 +1.6521378 10.285335 -2.0327907 128.0 +1.7126307 10.259526 -2.0296693 128.0 +1.790795 10.336764 -2.0474224 128.0 +1.844126 10.269592 -2.0361073 128.0 +1.9036962 10.239763 -2.0324006 128.0 +1.9789047 10.292418 -2.0454717 128.0 +2.0469916 10.305094 -2.050544 128.0 +2.1007235 10.246222 -2.0411797 128.0 +2.1617267 10.224504 -2.0394237 128.0 +2.2258844 10.217755 -2.0407894 128.0 +2.2732906 10.135959 -2.026938 128.0 +2.3356614 10.122775 -2.027133 128.0 +2.4054298 10.140698 -2.0337663 128.0 +2.475738 10.159099 -2.0405943 128.0 +2.5451715 10.17226 -2.046447 128.0 +2.5999753 10.127003 -2.0403993 128.0 +2.6538203 10.079561 -2.0339613 128.0 +2.7347903 10.134104 -2.048593 128.0 +2.7692075 10.016932 -2.0279136 128.0 +2.8370318 10.022399 -2.0325956 128.0 +2.880455 9.9426298 -2.0197196 128.0 +2.9402926 9.9210072 -2.0189393 128.0 +3.0050952 9.9159193 -2.0216706 128.0 +3.0684943 9.9057255 -2.0234263 128.0 +3.1369147 9.9110222 -2.0284986 128.0 +3.1919343 9.8738565 -2.024792 128.0 +3.2552269 9.8624678 -2.0265479 128.0 +3.3106689 9.8274374 -2.0234263 128.0 +3.3833444 9.8431101 -2.0310349 128.0 +3.4264729 9.7731133 -2.0206952 128.0 +3.4903386 9.7629871 -2.0230362 128.0 +3.5538726 9.751523 -2.0251822 128.0 +3.611932 9.7249365 -2.0242066 128.0 +3.6680629 9.6934185 -2.0222559 128.0 +3.7271187 9.6698141 -2.0220606 128.0 +3.7892489 9.6540661 -2.0236216 128.0 +3.8425891 9.6160622 -2.0204999 128.0 +3.9066947 9.6050224 -2.0232313 128.0 +3.9614294 9.5709019 -2.0210853 128.0 +4.012085 9.5274343 -2.0169883 128.0 +4.074718 9.5125532 -2.0191343 128.0 +4.1251731 9.4693899 -2.0152326 128.0 +4.1847878 9.4474869 -2.0160129 128.0 +4.2551646 9.4493532 -2.0220606 128.0 +4.2967334 9.3873959 -2.0142572 128.0 +4.3335643 9.3163929 -2.0045025 128.0 +4.3914857 9.2914009 -2.0048928 128.0 +4.4403458 9.2474823 -2.0011861 128.0 +4.4888325 9.2033148 -1.9974793 128.0 +4.546525 9.1782351 -1.9980646 128.0 +4.6031966 9.151042 -1.9982598 128.0 +4.6534591 9.11127 -1.9957236 128.0 +4.7124381 9.0886402 -1.9970891 128.0 +4.7726855 9.0682325 -1.9990401 128.0 +4.8273125 9.0370474 -1.99865 128.0 +4.8906198 9.0219145 -2.0019665 128.0 +4.9260278 8.9556456 -1.9937726 128.0 +4.9923592 8.9458046 -1.9984548 128.0 +5.0403895 8.9030561 -1.9957236 128.0 +5.0880833 8.860055 -1.9929923 128.0 +5.1423521 8.8286676 -1.9929923 128.0 +5.1994205 8.8020153 -1.9941628 128.0 +5.2432489 8.7531204 -1.9902611 128.0 +5.2856545 8.702343 -1.9859691 128.0 +5.3204341 8.6396837 -1.9789457 128.0 +5.3790603 8.6160269 -1.9810917 128.0 +5.4208097 8.5654564 -1.9769949 128.0 +5.4684973 8.5246048 -1.975239 128.0 +5.5244431 8.496645 -1.9766047 128.0 +5.586729 8.4781475 -1.9803114 128.0 +5.6413689 8.4477863 -1.9812869 128.0 +5.6958461 8.4170732 -1.9822624 128.0 +5.7318525 8.3593187 -1.9767998 128.0 +5.7819171 8.3223801 -1.9764096 128.0 +5.82271 8.2723112 -1.972898 128.0 +5.8648152 8.2244511 -1.9699717 128.0 +5.9134459 8.1859255 -1.9693863 128.0 +5.9635625 8.1494865 -1.9693863 128.0 +6.0076132 8.1048632 -1.9674355 128.0 +6.0531082 8.0623589 -1.9660698 128.0 +6.1006827 8.0227242 -1.9654845 128.0 +6.1372252 7.968823 -1.9613876 128.0 +6.1775589 7.9201899 -1.9586564 128.0 +6.2284722 7.8852143 -1.9594368 128.0 +6.2687721 7.8368926 -1.9569006 128.0 +6.3229146 7.8059015 -1.9588515 128.0 +6.3221688 7.7078142 -1.9436344 128.0 +6.400054 7.7058434 -1.9531939 128.0 +6.4314318 7.6476645 -1.9483166 128.0 +6.4725127 7.6013379 -1.9465607 128.0 +6.5203128 7.5629659 -1.9469509 128.0 +6.5459538 7.4991732 -1.940708 128.0 +6.5957422 7.4632759 -1.9418787 128.0 +6.6459904 7.4277806 -1.9432442 128.0 +6.6749773 7.3686914 -1.938367 128.0 +6.6928825 7.2979627 -1.9303683 128.0 +6.7669024 7.2883806 -1.9389523 128.0 +6.8114953 7.2467222 -1.9389523 128.0 +6.8565087 7.205502 -1.9391474 128.0 +6.8937864 7.1562328 -1.9371965 128.0 +6.9272938 7.1032672 -1.9342701 128.0 +6.9624782 7.0522542 -1.931929 128.0 +7.0014586 7.0052385 -1.9307585 128.0 +7.0394263 6.9573212 -1.9293928 128.0 +7.0833869 6.9153671 -1.929783 128.0 +7.1136823 6.8602014 -1.9264665 128.0 +7.152091 6.8130417 -1.9254911 128.0 +7.1873312 6.7629805 -1.9237353 128.0 +7.2301297 6.720088 -1.9241254 128.0 +7.2647243 6.6696291 -1.9223696 128.0 +7.3105979 6.6295395 -1.9237353 128.0 +7.3445625 6.5786691 -1.9219794 128.0 +7.370832 6.5211339 -1.9182727 128.0 +7.4136605 6.4783654 -1.9190531 128.0 +7.4755483 6.4519763 -1.9249058 128.0 +7.5015597 6.3945346 -1.9213941 128.0 +7.5263972 6.3363857 -1.9176874 128.0 +7.5394912 6.2687688 -1.9110544 128.0 +7.5808458 6.2248783 -1.9118347 128.0 +7.5899477 6.1547751 -1.9044213 128.0 +7.6344604 6.113605 -1.906177 128.0 +7.6787534 6.0721202 -1.9079329 128.0 +7.7135477 6.0230794 -1.9073477 128.0 +7.7309394 5.9606671 -1.9024704 128.0 +7.7595634 5.9071789 -1.9005195 128.0 +7.7690039 5.8394232 -1.8938864 128.0 +7.8212295 5.8039155 -1.8979833 128.0 +7.8416605 5.7448049 -1.8942766 128.0 +7.8775568 5.697156 -1.8944716 128.0 +7.9059792 5.6441545 -1.892911 128.0 +7.9661198 5.6136141 -1.8991538 128.0 +7.9601521 5.5366325 -1.8893993 128.0 +8.0424938 5.5209846 -1.9011047 128.0 +8.0413008 5.4478822 -1.8927158 128.0 +8.0574532 5.3869939 -1.8886189 128.0 +8.0788927 5.3298926 -1.8858877 128.0 +8.1007586 5.2732668 -1.8833516 128.0 +8.1346121 5.2245216 -1.8837417 128.0 +8.1731443 5.178709 -1.8853024 128.0 +8.1698332 5.1066327 -1.8771087 128.0 +8.2394199 5.080081 -1.8860828 128.0 +8.2628927 5.0248437 -1.8843269 128.0 +8.271699 4.9609356 -1.8792546 128.0 +8.3121138 4.9160781 -1.8815957 128.0 +8.3395796 4.8635015 -1.8810104 128.0 +8.3828697 4.8200598 -1.8841319 128.0 +8.4063139 4.7651477 -1.8827662 128.0 +8.4405317 4.7163477 -1.8839368 128.0 +8.5028191 4.6829181 -1.8915453 128.0 +8.5003595 4.6138177 -1.8845221 128.0 +8.5259142 4.5601864 -1.8839368 128.0 +8.575428 4.5192151 -1.8888141 128.0 +8.5899382 4.4597349 -1.8858877 128.0 +8.6215067 4.4091763 -1.8868631 128.0 +8.6510267 4.3575163 -1.8874484 128.0 +8.6960535 4.3135028 -1.8915453 128.0 +8.7038488 4.2510266 -1.8874484 128.0 +8.747448 4.206039 -1.8913503 128.0 +8.7996883 4.1648707 -1.897203 128.0 +8.8126297 4.1050019 -1.8944716 128.0 +8.8483515 4.0557542 -1.8968128 128.0 +8.856082 3.993727 -1.893106 128.0 +8.8741446 3.9365287 -1.8917404 128.0 +8.8810501 3.8745542 -1.8880337 128.0 +8.9037552 3.8196015 -1.8878386 128.0 +8.93787 3.7694695 -1.8901796 128.0 +8.9807644 3.7228172 -1.8944716 128.0 +9.0088882 3.6698616 -1.8956422 128.0 +9.0667496 3.6287236 -1.9032507 128.0 +9.0532446 3.5590324 -1.8956422 128.0 +9.0804014 3.5055344 -1.8968128 128.0 +9.1329241 3.4615672 -1.9034458 128.0 +9.128252 3.3958912 -1.8979833 128.0 +9.1645803 3.3455329 -1.9012998 128.0 +9.1969395 3.2935345 -1.903836 128.0 +9.1892128 3.2272944 -1.8979833 128.0 +9.2477922 3.1842563 -1.906177 128.0 +9.2141848 3.1095831 -1.895057 128.0 +9.2479916 3.0579121 -1.8981783 128.0 +9.3384295 3.02437 -1.9132004 128.0 +9.317543 2.954567 -1.9050065 128.0 +9.3570414 2.9040239 -1.9094937 128.0 +9.3962698 2.853107 -1.9139807 128.0 +9.3600054 2.7794909 -1.9028605 128.0 +9.4070263 2.7307527 -1.9091034 128.0 +9.3726501 2.6585345 -1.8985686 128.0 +9.385951 2.6001897 -1.8979833 128.0 +9.4074097 2.5440853 -1.8991538 128.0 +9.43612 2.4898162 -1.9018852 128.0 +9.474966 2.4379776 -1.9067624 128.0 +9.4669142 2.3740714 -1.9020802 128.0 +9.5060759 2.3219867 -1.9071525 128.0 +9.5449543 2.2695107 -1.9122249 128.0 +9.5481882 2.2084713 -1.9100789 128.0 +9.5338087 2.1436071 -1.9044213 128.0 +9.5592394 2.0877874 -1.9069575 128.0 +9.5737886 2.0295002 -1.9073477 128.0 +9.5774145 1.968942 -1.9055918 128.0 +9.5864296 1.9095646 -1.9050065 128.0 +9.610486 1.85312 -1.9075427 128.0 +9.6409597 1.7977096 -1.9114445 128.0 +9.6431208 1.7369562 -1.9096887 128.0 +9.7115765 1.6878239 -1.9213941 128.0 +9.7478676 1.6325741 -1.9266616 128.0 +9.7315578 1.5685209 -1.9213941 128.0 +9.7458448 1.5095297 -1.9223696 128.0 +9.715148 1.4437954 -1.9143709 128.0 +9.7238235 1.3841572 -1.9143709 128.0 +9.7933598 1.3327919 -1.9266616 128.0 +9.7750921 1.2692691 -1.9213941 128.0 +9.8479137 1.2173203 -1.9344652 128.0 +9.8094139 1.1515027 -1.9252959 128.0 +9.831892 1.0930238 -1.9284174 128.0 +9.8315849 1.0319599 -1.9270518 128.0 +9.7967377 0.96757114 -1.9188579 128.0 +9.774169 0.90482277 -1.9132004 128.0 +9.7658558 0.84365243 -1.9104691 128.0 +9.8197317 0.78762937 -1.9202236 128.0 +9.816555 0.72678339 -1.9186629 128.0 +9.8609495 0.66925466 -1.9266616 128.0 +9.8090715 0.60529977 -1.9155414 128.0 +9.8693991 0.54824954 -1.9268566 128.0 +9.8138018 0.48478529 -1.9151512 128.0 +9.8332491 0.42527828 -1.9184678 128.0 +9.8552761 0.36565956 -1.9223696 128.0 +9.8789015 0.30584702 -1.9266616 128.0 +9.9198112 0.24619424 -1.9344652 128.0 +9.8809299 0.18457647 -1.9264665 128.0 +9.8995295 0.12416409 -1.9299781 128.0 +9.8422394 0.063055485 -1.9184678 128.0 +9.873826 0.0026682485 -1.9247106 128.0 +9.8658104 -0.057869516 -1.9231499 128.0 +9.9005756 -0.1188318 -1.9301732 128.0 +9.8957376 -0.17950673 -1.9293928 128.0 +9.9120989 -0.24065302 -1.9329045 128.0 +9.8996515 -0.3011387 -1.9307585 128.0 +9.891737 -0.36166045 -1.929588 128.0 +9.8863916 -0.42222229 -1.9290026 128.0 +9.8826351 -0.48282814 -1.9288076 128.0 +9.8892803 -0.54399759 -1.9307585 128.0 +9.8563871 -0.60286707 -1.9249058 128.0 +9.8945808 -0.66617131 -1.9332947 128.0 +9.8482466 -0.72377467 -1.9249058 128.0 +9.8856611 -0.78754288 -1.9332947 128.0 +9.9128895 -0.85095727 -1.9397327 128.0 +9.8840418 -0.9096058 -1.9350505 128.0 +9.9075565 -0.97311556 -1.9409032 128.0 +9.8945713 -1.033175 -1.9395375 128.0 +9.8588009 -1.0906289 -1.9336848 128.0 +9.8402338 -1.1497335 -1.9313438 128.0 +9.8213129 -1.2086515 -1.9290026 128.0 +9.838028 -1.2720382 -1.93388 128.0 +9.8465595 -1.3346207 -1.9371965 128.0 +9.8090534 -1.3908787 -1.9313438 128.0 +9.7916031 -1.4497459 -1.929588 128.0 +9.7767076 -1.5089005 -1.9284174 128.0 +9.7846956 -1.5716627 -1.931929 128.0 +9.7980852 -1.6355492 -1.9366112 128.0 +9.7376137 -1.6869267 -1.9264665 128.0 +9.7251492 -1.746297 -1.9260763 128.0 +9.7026796 -1.803784 -1.9237353 128.0 +9.6798716 -1.8610611 -1.9213941 128.0 +9.6653843 -1.919847 -1.9208089 128.0 +9.593854 -1.9668968 -1.9087132 128.0 +9.3321218 -1.9729503 -1.8579898 128.0 +9.0649366 -1.9746149 -1.8060957 128.0 +8.9311123 -2.0029266 -1.7813193 128.0 +8.7581053 -2.0206261 -1.7485441 128.0 +8.6644278 -2.0550766 -1.7319615 128.0 +8.5115833 -2.0740502 -1.7032832 128.0 +8.4777651 -2.1209977 -1.6989912 128.0 +8.4037943 -2.1573603 -1.6865054 128.0 +8.377121 -2.2053869 -1.6837741 128.0 +7.7384882 -2.0880251 -1.5550145 128.0 +7.53269 -2.0821338 -1.5152161 128.0 +7.381052 -2.08903 -1.4865378 128.0 +7.0515771 -2.0425439 -1.4209875 128.0 +7.0163436 -2.079082 -1.4163053 128.0 +6.7049809 -2.0316031 -1.3542665 128.0 +6.507833 -2.0155134 -1.3158338 128.0 +6.4635525 -2.0453408 -1.3092008 128.0 +6.3099675 -2.0393913 -1.2797421 128.0 +6.0617089 -2.0002694 -1.2303842 128.0 +6.0074973 -2.0233307 -1.2216052 128.0 +5.7983422 -1.9925435 -1.180246 128.0 +5.7860069 -2.0280838 -1.180246 128.0 +5.7743773 -2.0638783 -1.1804411 128.0 +5.5671773 -2.0283878 -1.139277 128.0 +5.3863797 -1.9999994 -1.1035755 128.0 +5.3116322 -2.0094011 -1.0903094 128.0 +5.3019481 -2.0430133 -1.0908946 128.0 +5.0975962 -2.0002329 -1.0499257 128.0 +5.0287623 -2.0089028 -1.0378301 128.0 +5.0272427 -2.0441563 -1.0401711 128.0 +4.9874196 -2.0637088 -1.0343184 128.0 +4.9493551 -2.0836112 -1.0288559 128.0 +4.9914694 -2.1375041 -1.0407565 128.0 +4.965672 -2.1626055 -1.0380251 128.0 +4.9541025 -2.1938283 -1.0384153 128.0 +4.9503851 -2.2286158 -1.0405613 128.0 +4.8759775 -2.231185 -1.0272952 128.0 +4.894208 -2.2759566 -1.0343184 128.0 +4.8633037 -2.2979791 -1.0306118 128.0 +4.8747511 -2.340091 -1.0362693 128.0 +4.7739162 -2.3278127 -1.0171505 128.0 +4.7120872 -2.3335464 -1.0066156 128.0 +4.6713963 -2.3491902 -1.0007629 128.0 +4.7136655 -2.4068124 -1.0134438 128.0 +4.6631122 -2.417176 -1.0054451 128.0 +4.6308355 -2.436605 -1.0015433 128.0 +4.6261778 -2.4705198 -1.0038843 128.0 +4.5945506 -2.4899764 -1.0001776 128.0 +4.5766077 -2.5167027 -0.99959236 128.0 +4.5884838 -2.5600345 -1.0058353 128.0 +4.5931721 -2.5997398 -1.0105175 128.0 +4.6017971 -2.6420414 -1.016175 128.0 +4.5439744 -2.6460347 -1.0066156 128.0 +4.6213818 -2.7292469 -1.0282706 128.0 +4.5650063 -2.7338593 -1.0191014 128.0 +4.529705 -2.7506146 -1.0148094 128.0 +4.5528259 -2.8030469 -1.0241737 128.0 +4.5030966 -2.8106694 -1.0165652 128.0 +4.4459882 -2.8130667 -1.0072008 128.0 +4.4707427 -2.8673067 -1.0171505 128.0 +4.4292212 -2.8791778 -1.0114928 128.0 +4.4253931 -2.9154766 -1.0148094 128.0 +4.3307567 -2.891367 -0.99647093 128.0 +4.350296 -2.9431748 -1.0054451 128.0 +4.3305373 -2.9687028 -1.005055 128.0 +4.3235159 -3.0030544 -1.0077862 128.0 +4.3555317 -3.0650976 -1.0200769 128.0 +4.2935247 -3.0610101 -1.009542 128.0 +4.2221937 -3.0493853 -0.99666601 128.0 +4.3039155 -3.1488044 -1.0214425 128.0 +4.1994247 -3.112067 -1.0003728 128.0 +4.1747603 -3.1336529 -0.99900711 128.0 +4.1905828 -3.1859288 -1.0077862 128.0 +4.2284517 -3.2558734 -1.0222229 128.0 +4.1534905 -3.2389238 -1.0083715 128.0 +4.1774044 -3.2990055 -1.0194916 128.0 +4.1907802 -3.351536 -1.0280756 128.0 +4.1838536 -3.3883007 -1.0315871 128.0 +3.9658389 -3.2521656 -0.98086369 128.0 +3.955617 -3.2845857 -0.98339987 128.0 +4.0922561 -3.4407465 -1.0241737 128.0 +3.8597584 -3.2858205 -0.96896321 128.0 +4.0920615 -3.5272148 -1.0352939 128.0 +4.0503941 -3.5348403 -1.0300264 128.0 +3.9742503 -3.5115578 -1.0155897 128.0 +4.017674 -3.5940897 -1.0329528 128.0 +3.9584777 -3.5850883 -1.0230032 128.0 +3.877862 -3.5556073 -1.0072008 128.0 +3.5986853 -3.3404005 -0.93735856 128.0 +3.5588279 -3.3442798 -0.93209112 128.0 +3.5339782 -3.3619962 -0.9309206 128.0 +3.5111639 -3.3815753 -0.93033528 128.0 +3.7220361 -3.6290562 -0.99471509 128.0 +3.7318006 -3.6835268 -1.0036893 128.0 +3.6966434 -3.6938736 -1.0001776 128.0 +3.7600784 -3.8036935 -1.0245639 128.0 +3.7537951 -3.8442402 -1.0294412 128.0 +3.7301366 -3.8672006 -1.0294412 128.0 +3.640727 -3.8211234 -1.0105175 128.0 +3.6588783 -3.8876812 -1.022613 128.0 +3.7164063 -3.9977124 -1.046414 128.0 +3.6957862 -4.024776 -1.0475845 128.0 +3.6835375 -4.0611825 -1.0512913 128.0 +3.6467719 -4.0705566 -1.0477797 128.0 +3.6308241 -4.1031408 -1.0505109 128.0 +3.6088057 -4.129035 -1.0514864 128.0 +3.4994662 -4.0538249 -1.0259296 128.0 +3.480252 -4.0819392 -1.0276854 128.0 +3.4172456 -4.0581951 -1.01598 128.0 +3.4242556 -4.1175523 -1.0259296 128.0 +3.4617805 -4.2150497 -1.0456337 128.0 +3.3963223 -4.1874518 -1.0331479 128.0 +3.4116337 -4.2595105 -1.046219 128.0 +3.3769178 -4.2695923 -1.0434877 128.0 +3.339793 -4.2763166 -1.0399761 128.0 +3.2643919 -4.2330313 -1.0239787 128.0 +3.3351784 -4.3801956 -1.0557784 128.0 +3.3318069 -4.431941 -1.0635819 128.0 +3.3191597 -4.471993 -1.0684593 128.0 +3.2441361 -4.427392 -1.0524619 128.0 +3.2013931 -4.4257545 -1.0471944 128.0 +3.1718979 -4.4421215 -1.046414 128.0 +3.1468413 -4.4647074 -1.0471944 128.0 +3.1081884 -4.4678273 -1.0432926 128.0 +3.1106851 -4.5304823 -1.0538275 128.0 +3.0520272 -4.5040092 -1.0429025 128.0 +3.0172484 -4.5120506 -1.0403663 128.0 +2.9862661 -4.5255671 -1.0391957 128.0 +2.9466722 -4.5257201 -1.0349038 128.0 +2.8785737 -4.4809923 -1.0200769 128.0 +2.8405278 -4.4819999 -1.016175 128.0 +2.8218091 -4.5134845 -1.0194916 128.0 +2.8043544 -4.5474119 -1.0233934 128.0 +2.7631521 -4.5427442 -1.018321 128.0 +2.7639744 -4.6075597 -1.0294412 128.0 +2.719178 -4.5965719 -1.0230032 128.0 +2.6849949 -4.6030025 -1.0206621 128.0 +2.6361718 -4.5836778 -1.0124683 128.0 +4.0905848 -7.2159681 -1.6106153 128.0 +2.5998137 -4.6516447 -1.0206621 128.0 +2.5584505 -4.6443119 -1.0153947 128.0 +2.5359864 -4.6711297 -1.0179309 128.0 +2.4818411 -4.6390324 -1.0072008 128.0 +3.8855977 -7.3727593 -1.6184188 128.0 +3.8276353 -7.3720875 -1.6129563 128.0 +3.7769711 -7.3849554 -1.6106153 128.0 +3.7245293 -7.3939757 -1.6074938 128.0 +2.3187644 -4.6734385 -0.99842185 128.0 +3.6365256 -7.4452939 -1.6088594 128.0 +3.5776014 -7.4400644 -1.6028117 128.0 +3.5352385 -7.4689684 -1.6043724 128.0 +2.1897111 -4.6995955 -0.99198383 128.0 +2.1779935 -4.7503915 -1.0001776 128.0 +3.442709 -7.6338115 -1.6264175 128.0 +3.3799005 -7.6189284 -1.618614 128.0 +3.3170125 -7.6026645 -1.6106153 128.0 +3.2818978 -7.6499162 -1.616468 128.0 +3.2322297 -7.6635833 -1.6151023 128.0 +3.1765103 -7.6624317 -1.6106153 128.0 +3.1423812 -7.7135711 -1.6174434 128.0 +3.099 -7.7427235 -1.6195894 128.0 +3.0446174 -7.7442493 -1.6158826 128.0 +2.992805 -7.7518048 -1.6135416 128.0 +2.9420569 -7.7617679 -1.6117858 128.0 +2.8957436 -7.7833509 -1.6125661 128.0 +2.8489401 -7.8037367 -1.6131514 128.0 +2.8218286 -7.8792448 -1.6254421 128.0 +1.1044925 -3.1425643 -0.62326312 128.0 +1.0976381 -3.1854506 -0.63087165 128.0 +1.0718019 -3.1735389 -0.62696987 128.0 +1.0618509 -3.2089238 -0.63301766 128.0 +2.5422552 -7.8491898 -1.6018362 128.0 +1.0686225 -3.367564 -0.66345173 128.0 +1.0447427 -3.3637533 -0.66130573 128.0 +2.4204195 -7.970674 -1.6176385 128.0 +0.98105872 -3.3011014 -0.64569855 128.0 +0.94247317 -3.2439494 -0.63262749 128.0 +0.89660084 -3.1581426 -0.61370373 128.0 +0.87720597 -3.1635847 -0.61370373 128.0 +2.1371603 -7.9019885 -1.5889602 128.0 +2.0891345 -7.9168501 -1.5893505 128.0 +0.8466751 -3.2874808 -0.63594401 128.0 +1.9746565 -7.8733931 -1.5753039 128.0 +1.9267743 -7.8872666 -1.5756941 128.0 +0.84225738 -3.5391526 -0.68432641 128.0 +1.8282939 -7.9036283 -1.5743284 128.0 +1.7765383 -7.9003439 -1.5714021 128.0 +1.7271925 -7.9072628 -1.5706217 128.0 +1.675796 -7.9042792 -1.5678905 128.0 +1.6250936 -7.9038448 -1.5657445 128.0 +1.5754169 -7.907896 -1.5645739 128.0 +1.5224113 -7.8943 -1.5598918 128.0 +1.4732255 -7.8996363 -1.5591114 128.0 +1.4245528 -7.9075618 -1.5589163 128.0 +1.3729852 -7.8987598 -1.5554047 128.0 +1.3241696 -7.9051008 -1.5550145 128.0 +1.2761078 -7.9159822 -1.5555998 128.0 +1.2267622 -7.918817 -1.5546243 128.0 +1.1762774 -7.9135833 -1.5520881 128.0 +1.1265936 -7.9128838 -1.5505275 128.0 +1.0769627 -7.9118724 -1.5489668 128.0 +1.0296578 -7.9280581 -1.5509176 128.0 +0.99794203 -8.071475 -1.5784254 128.0 +0.95091075 -8.098877 -1.5827173 128.0 +0.90065783 -8.0996847 -1.5817419 128.0 +0.85022622 -8.0982304 -1.5803763 128.0 +0.80003899 -8.0984144 -1.5794008 128.0 +0.75105536 -8.1109838 -1.5809616 128.0 +0.70177895 -8.1213026 -1.5821321 128.0 +0.6506815 -8.1098137 -1.5790106 128.0 +0.59975159 -8.0980034 -1.5758892 128.0 +0.55078113 -8.1122952 -1.5780351 128.0 +0.50111526 -8.1174793 -1.5784254 128.0 +0.45048365 -8.1057129 -1.5754989 128.0 +0.40131873 -8.120079 -1.5778401 128.0 +0.35199448 -8.1341476 -1.5801811 128.0 +0.30211392 -8.1371336 -1.5803763 128.0 +0.25251228 -8.1496181 -1.5825223 128.0 +0.20281728 -8.1637602 -1.5850585 128.0 +0.15284899 -8.1717157 -1.5864241 128.0 +0.10291255 -8.1891718 -1.5897406 128.0 +0.052527115 -8.1680717 -1.5854486 128.0 +0.0024077778 -8.1682405 -1.5854486 128.0 +-0.047611888 -8.1514282 -1.5821321 128.0 +-0.097793624 -8.1647129 -1.5848633 128.0 +-0.14808646 -8.1747465 -1.5870093 128.0 +-0.19769281 -8.1511326 -1.5825223 128.0 +-0.24785317 -8.1546669 -1.5834976 128.0 +-0.29788461 -8.1529932 -1.5834976 128.0 +-0.34765303 -8.1451321 -1.5823271 128.0 +-0.39867955 -8.1643972 -1.5866191 128.0 +-0.44919971 -8.169632 -1.5881798 128.0 +-0.49871925 -8.1569319 -1.586229 128.0 +-0.54730791 -8.1321907 -1.581937 128.0 +-0.59913981 -8.1550884 -1.5872045 128.0 +-0.65010327 -8.1629915 -1.5895455 128.0 +-0.70160615 -8.1754608 -1.592862 128.0 +-0.74860686 -8.1368189 -1.5860338 128.0 +-0.80111092 -8.1584263 -1.5913013 128.0 +-0.84993136 -8.1416521 -1.5889602 128.0 +-0.90051931 -8.1421328 -1.5901308 128.0 +-0.94635993 -8.1013842 -1.5831075 128.0 +-1.0015671 -8.1402025 -1.5920817 128.0 +-1.048978 -8.1144505 -1.5881798 128.0 +-1.1004616 -8.1204958 -1.590716 128.0 +-1.1534369 -8.1359253 -1.5952032 128.0 +-1.1993109 -8.1015291 -1.5897406 128.0 +-1.2492977 -8.0959568 -1.5901308 128.0 +-1.2975492 -8.079423 -1.588375 128.0 +-1.3527551 -8.1051683 -1.5952032 128.0 +-1.4016243 -8.0918837 -1.5942277 128.0 +-1.452463 -8.0898876 -1.5955933 128.0 +-1.496693 -8.0518961 -1.5897406 128.0 +-1.5558907 -8.0936069 -1.6000804 128.0 +-1.6018901 -8.06563 -1.5963737 128.0 +-1.6517439 -8.0575705 -1.5967638 128.0 +-1.7031829 -8.05688 -1.5987147 128.0 +-1.7575998 -8.0692768 -1.6033969 128.0 +-1.8053609 -8.050684 -1.6018362 128.0 +-1.8545045 -8.0384998 -1.6016411 128.0 +-1.9049252 -8.0317402 -1.6026165 128.0 +-1.9555651 -8.0256186 -1.6037871 128.0 +-2.0045345 -8.012517 -1.603592 128.0 +-2.0551245 -8.0057659 -1.6047626 128.0 +-2.1072061 -8.0043859 -1.6071036 128.0 +-2.1573031 -7.9950938 -1.607884 128.0 +-2.2068424 -7.9835968 -1.6082742 128.0 +-2.2549856 -7.9670744 -1.6076889 128.0 +-2.3079236 -7.9672184 -1.6106153 128.0 +-2.3523052 -7.9378619 -1.6074938 128.0 +-2.3986902 -7.9157705 -1.6059331 128.0 +-2.4506991 -7.9121451 -1.6082742 128.0 +-2.5006812 -7.9016342 -1.6092496 128.0 +-2.5491178 -7.8861418 -1.6092496 128.0 +-2.6026859 -7.8861847 -1.6125661 128.0 +-2.6607354 -7.8988786 -1.618614 128.0 +-2.720314 -7.914866 -1.6254421 128.0 +-2.763634 -7.8832173 -1.6223207 128.0 +-2.7891634 -7.8023901 -1.6088594 128.0 +-2.8376575 -7.786972 -1.6092496 128.0 +-2.8847008 -7.7675753 -1.6088594 128.0 +-1.4180884 -3.7495263 -0.75807053 128.0 +-1.4258963 -3.7014043 -0.74968165 128.0 +-3.0379412 -7.7405496 -1.6147121 128.0 +-3.0963004 -7.7490849 -1.6205648 128.0 +-3.1522908 -7.7508354 -1.625052 128.0 +-3.1915355 -7.711411 -1.62076 128.0 +-3.2555447 -7.7314534 -1.6293439 128.0 +-3.2940381 -7.6905971 -1.6248568 128.0 +-3.3337204 -7.6531572 -1.6211501 128.0 +-3.3770406 -7.6244874 -1.6193943 128.0 +-3.4181206 -7.5911036 -1.6166631 128.0 +-1.4456315 -3.1602294 -0.65194142 128.0 +-1.4774078 -3.1779768 -0.65779412 128.0 +-1.6134185 -3.4153497 -0.71202922 128.0 +-1.6351936 -3.4071541 -0.71241939 128.0 +-1.6534884 -3.3917677 -0.71124887 128.0 +-1.672527 -3.3780429 -0.71046853 128.0 +-1.6919001 -3.3650885 -0.70988321 128.0 +-1.7138548 -3.357264 -0.71046853 128.0 +-1.7380347 -3.3536501 -0.71202922 128.0 +-1.7622347 -3.3498654 -0.71358997 128.0 +-3.9426486 -7.3813496 -1.625247 128.0 +-3.9939432 -7.3682275 -1.6277832 128.0 +-4.0452247 -7.3547535 -1.6303194 128.0 +-4.0926666 -7.3340759 -1.6312948 128.0 +-4.1240587 -7.2849293 -1.6258323 128.0 +-4.1940837 -7.3037114 -1.635977 128.0 +-4.2279572 -7.2591958 -1.631685 128.0 +-4.2664323 -7.2229838 -1.6293439 128.0 +-4.298573 -7.1764779 -1.6246618 128.0 +-4.3547482 -7.1700845 -1.6293439 128.0 +-4.3930025 -7.1340432 -1.627198 128.0 +-4.4460444 -7.1219282 -1.6307095 128.0 +-4.4891357 -7.0936852 -1.6305145 128.0 +-2.0193112 -3.1491723 -0.70481092 128.0 +-2.0428739 -3.1433003 -0.70637161 128.0 +-2.0642815 -3.1339819 -0.70715195 128.0 +-4.7196169 -7.0678306 -1.6511941 128.0 +-4.7365069 -6.999752 -1.6418297 128.0 +-4.7843599 -6.9778371 -1.6435856 128.0 +-4.8147721 -6.9306307 -1.6392936 128.0 +-4.8622885 -6.908175 -1.6410494 128.0 +-4.9114189 -6.8877921 -1.6433904 128.0 +-4.9581847 -6.8638864 -1.6449511 128.0 +-4.9990487 -6.8317513 -1.6445609 128.0 +-5.0344481 -6.7922826 -1.6424149 128.0 +-5.0689626 -6.751853 -1.6400739 128.0 +-5.1150455 -6.7268682 -1.6416346 128.0 +-5.1723852 -6.7163348 -1.6469021 128.0 +-5.203846 -6.6720986 -1.6437806 128.0 +-5.2544155 -6.6523561 -1.6469021 128.0 +-5.2914581 -6.6153951 -1.6457316 128.0 +-5.3449159 -6.5988059 -1.6498284 128.0 +-5.372241 -6.549963 -1.6457316 128.0 +-5.4254909 -6.5327187 -1.6498284 128.0 +-5.467998 -6.5023079 -1.6506088 128.0 +-5.5262346 -6.4902883 -1.6562663 128.0 +-5.5851698 -6.4785404 -1.6621192 128.0 +-5.6170754 -6.4352827 -1.659778 128.0 +-5.6486611 -6.3918777 -1.657437 128.0 +-5.70151 -6.3724456 -1.6615338 128.0 +-5.7326007 -6.32862 -1.6591928 128.0 +-5.7653575 -6.2868214 -1.657437 128.0 +-5.8044915 -6.2520461 -1.657632 128.0 +-5.8454313 -6.219171 -1.6584123 128.0 +-5.8848338 -6.184608 -1.6588025 128.0 +-5.9226713 -6.1483827 -1.6588025 128.0 +-5.9856248 -6.1379032 -1.6660209 128.0 +-6.0231738 -6.1010609 -1.6660209 128.0 +-6.0383067 -6.0417924 -1.659778 128.0 +-6.0780554 -6.0073857 -1.6605583 128.0 +-6.1477895 -6.0021763 -1.6697276 128.0 +-6.189445 -5.9691067 -1.6710932 128.0 +-6.2209826 -5.9262815 -1.6697276 128.0 +-6.2486558 -5.8799343 -1.6673865 128.0 +-6.2939572 -5.850162 -1.6699227 128.0 +-6.3333473 -5.8147488 -1.6708982 128.0 +-6.3718133 -5.7784138 -1.6716785 128.0 +-6.4173779 -5.7483683 -1.6744097 128.0 +-6.4613442 -5.7166815 -1.6767509 128.0 +-6.5073786 -5.6866069 -1.6796772 128.0 +-6.5503168 -5.6536198 -1.6818233 128.0 +-6.5863762 -5.6145935 -1.6822134 128.0 +-6.6282067 -5.5803905 -1.6841643 128.0 +-6.6638308 -5.5408692 -1.6845545 128.0 +-6.6999779 -5.5017433 -1.6851398 128.0 +-6.7282767 -5.4562058 -1.6837741 128.0 +-6.7677536 -5.419723 -1.6853348 128.0 +-6.8131914 -5.3878269 -1.6884563 128.0 +-6.8538532 -5.3519559 -1.6904072 128.0 +-6.8811255 -5.3056092 -1.6890416 128.0 +-6.9393058 -5.2828894 -1.6954795 128.0 +-6.9637494 -5.2343192 -1.6935287 128.0 +-6.9500499 -5.1575985 -1.6822134 128.0 +-6.9973903 -5.1264472 -1.6861153 128.0 +-7.0525579 -5.1006556 -1.691968 128.0 +-7.0956969 -5.0658321 -1.6948943 128.0 +-7.1146197 -5.0137258 -1.691968 128.0 +-7.1355867 -4.9632573 -1.6896268 128.0 +-7.1537762 -4.911056 -1.6867005 128.0 +-7.1374884 -4.8357182 -1.6755804 128.0 +-7.1711025 -4.7945576 -1.6765558 128.0 +-7.1962929 -4.747766 -1.6755804 128.0 +-7.2532382 -4.7217102 -1.6822134 128.0 +-6.4889565 -4.1678648 -1.4947315 128.0 +-7.3636613 -4.6659365 -1.6946992 128.0 +-7.4079556 -4.6305413 -1.6984059 128.0 +-7.4637809 -4.6019826 -1.7048439 128.0 +-7.4935536 -4.5571179 -1.7052341 128.0 +-7.5095983 -4.5039921 -1.7025028 128.0 +-7.5235848 -4.449842 -1.6993814 128.0 +-7.5414267 -4.3981605 -1.6972353 128.0 +-7.5733733 -4.3547373 -1.6984059 128.0 +-7.5999508 -4.3081861 -1.6984059 128.0 +-7.6236734 -4.2600374 -1.6978207 128.0 +-7.6574016 -4.2174368 -1.6995765 128.0 +-7.669342 -4.1628881 -1.696455 128.0 +-7.6610098 -4.0977149 -1.6888465 128.0 +-7.668654 -4.0414877 -1.6849446 128.0 +-7.6793795 -3.9871285 -1.6818233 128.0 +-7.6670222 -3.9211819 -1.6736294 128.0 +-6.903419 -3.4775097 -1.4982432 128.0 +-6.8929944 -3.4193997 -1.49122 128.0 +-6.9015069 -3.3710163 -1.4884887 128.0 +-6.9202929 -3.3277562 -1.4880985 128.0 +-6.9441276 -3.2869093 -1.4888788 128.0 +-7.005064 -3.2632842 -1.497853 128.0 +-7.7801714 -3.5662944 -1.6630945 128.0 +-7.814425 -3.5241323 -1.6658258 128.0 +-6.4802685 -2.874959 -1.3708493 128.0 +-6.49509 -2.8339665 -1.3702639 128.0 +-7.8635464 -3.3735123 -1.6627043 128.0 +-7.8813868 -3.3240559 -1.6621192 128.0 +-7.9161315 -3.2816415 -1.6652405 128.0 +-7.9533772 -3.2400355 -1.6689472 128.0 +-7.9585381 -3.1853442 -1.6658258 128.0 +-7.9852357 -3.1393216 -1.6673865 128.0 +-8.0034332 -3.0899127 -1.6671915 128.0 +-8.0194902 -3.0397038 -1.6666062 128.0 +-8.0462637 -2.9935169 -1.668362 128.0 +-8.0736942 -2.9474518 -1.6703129 128.0 +-7.9752784 -2.8562067 -1.6457316 128.0 +-7.7039251 -2.7058532 -1.5848633 128.0 +-8.1831503 -2.8178134 -1.6822134 128.0 +-8.2021446 -2.7681763 -1.6826036 128.0 +-8.2329435 -2.7224138 -1.6855299 128.0 +-8.2821522 -2.6824188 -1.6923581 128.0 +-8.3190241 -2.6380696 -1.69665 128.0 +-8.3500414 -2.5916252 -1.6997715 128.0 +-8.3958187 -2.5494566 -1.7060144 128.0 +-8.4338694 -2.504591 -1.7106966 128.0 +-8.4792204 -2.4615405 -1.7169394 128.0 +-8.5290775 -2.4193652 -1.7241578 128.0 +-8.5910234 -2.3800728 -1.7339123 128.0 +-8.6376562 -2.3360159 -1.7405454 128.0 +-8.6575174 -2.2844732 -1.7417159 128.0 +-8.7321644 -2.246943 -1.7542018 128.0 +-8.7362728 -2.1909366 -1.7522508 128.0 +-8.7466936 -2.1365929 -1.7516656 128.0 +-8.628912 -2.0518172 -1.7249382 128.0 +-8.7254305 -2.0182722 -1.7421061 128.0 +-8.8792744 -1.9965215 -1.7709795 128.0 +-9.0207176 -1.9702386 -1.7973167 128.0 +-9.1640873 -1.9427005 -1.8240441 128.0 +-9.3583708 -1.9239377 -1.8611113 128.0 +-9.7249451 -1.9371389 -1.9330995 128.0 +-9.8599205 -1.9011859 -1.9580711 128.0 +-9.8627224 -1.8390337 -1.9563153 128.0 +-9.863203 -1.7765714 -1.9541693 128.0 +-9.9376955 -1.7270949 -1.9670453 128.0 +-9.9906683 -1.6732091 -1.9756292 128.0 +-9.9988098 -1.611564 -1.975239 128.0 +-9.9280634 -1.5377314 -1.9590466 128.0 +-9.9179087 -1.4739038 -1.9551448 128.0 +-9.9646349 -1.418407 -1.9627533 128.0 +-9.9537134 -1.3545955 -1.9588515 128.0 +-9.9657288 -1.2939999 -1.9596318 128.0 +-9.9725075 -1.2327068 -1.9594368 128.0 +-10.011055 -1.1751488 -1.9656796 128.0 +-10.02685 -1.1146743 -1.9674355 128.0 +-10.005213 -1.050164 -1.9617778 128.0 +-10.001708 -0.98779052 -1.9598269 128.0 +-9.9851189 -0.92432588 -1.9553399 128.0 +-9.9974422 -0.86363101 -1.9567055 128.0 +-10.037748 -0.80509043 -1.9637288 128.0 +-10.00631 -0.74080968 -1.9565104 128.0 +-9.9891386 -0.67793965 -1.9522184 128.0 +-10.002899 -0.61723763 -1.9541693 128.0 +-10.008457 -0.55595791 -1.9545594 128.0 +-9.979353 -0.49294364 -1.9481215 128.0 +-9.9851294 -0.43182901 -1.9487067 128.0 +-9.9944525 -0.37080702 -1.9500724 128.0 +-9.9710512 -0.30868912 -1.9450001 128.0 +-10.021782 -0.24871306 -1.9547546 128.0 +-9.9731073 -0.18628754 -1.944805 128.0 +-9.9838705 -0.12521204 -1.9467559 128.0 +-9.9844503 -0.063949816 -1.9467559 128.0 +-10.008194 -0.0026887686 -1.9514381 128.0 +-9.9560413 0.058409389 -1.9410982 128.0 +-10.2095 0.12257588 -1.9916266 128.0 +-10.170312 0.18451966 -1.9840181 128.0 +-10.222915 0.24823564 -1.9947481 128.0 +-10.080032 0.30664685 -1.9666551 128.0 +-10.006412 0.36586663 -1.9524136 128.0 +-10.07747 0.4304052 -1.9670453 128.0 +-9.9894133 0.48805743 -1.9500724 128.0 +-9.991127 0.54961205 -1.9510479 128.0 +-9.9836502 0.61066616 -1.9502676 128.0 +-9.9904795 0.67263919 -1.9524136 128.0 +-9.4656487 -0.23920082 -1.9592985 128.0 +-9.468894 -0.1811537 -1.9597116 128.0 +-9.4659138 -0.12299924 -1.9588853 128.0 +-9.4557285 -0.064840905 -1.9566133 128.0 +-9.4539909 -0.0068189302 -1.9562002 128.0 +-9.471467 0.051284414 -1.959918 128.0 +-9.4308605 0.10893762 -1.9514498 128.0 +-9.4466448 0.16709571 -1.9549609 128.0 +-9.4112062 0.22424181 -1.9477319 128.0 +-9.3979177 0.28163245 -1.9452534 128.0 +-9.4370804 0.3407729 -1.9539282 128.0 +-9.3839779 0.3965255 -1.9431878 128.0 +-9.3852777 0.4542861 -1.9440141 128.0 +-9.3862209 0.51207757 -1.9448402 128.0 +-9.3877859 0.56995696 -1.9458729 128.0 +-9.3714209 0.6267004 -1.9431878 128.0 +-9.4005775 0.68661249 -1.9502105 128.0 +-9.3669262 0.74196386 -1.9440141 128.0 +-9.3738956 0.80042273 -1.9464926 128.0 +-9.3746538 0.85845989 -1.9477319 128.0 +-9.3721313 0.916251 -1.9483515 128.0 +-9.3488159 0.97191966 -1.9446337 128.0 +-9.3426762 1.0292646 -1.9446337 128.0 +-9.3118877 1.0837442 -1.9394701 128.0 +-9.3371115 1.1447884 -1.9462861 128.0 +-9.3337927 1.2025582 -1.9471122 128.0 +-9.3155727 1.2583663 -1.9448402 128.0 +-9.2979879 1.314133 -1.9427748 128.0 +-9.3226595 1.3760158 -1.9497973 128.0 +-9.2840624 1.428581 -1.9433944 128.0 +-9.2702913 1.4847466 -1.9423617 128.0 +-9.2600412 1.5414394 -1.9421551 128.0 +-9.23209 1.5950648 -1.9382308 128.0 +-9.2240553 1.6520267 -1.9386438 128.0 +-9.2195177 1.7096634 -1.9398831 128.0 +-9.156002 1.7560669 -1.9285231 128.0 +-9.1968832 1.8224822 -1.9396766 128.0 +-9.1807346 1.8778987 -1.9386438 128.0 +-9.1613798 1.93258 -1.9369915 128.0 +-9.1216221 1.982731 -1.9310017 128.0 +-9.1541615 2.0487044 -1.9407094 128.0 +-9.1576281 2.1085663 -1.9442205 128.0 +-9.1150017 2.1577308 -1.9378177 128.0 +-9.0949354 2.2120006 -1.9363718 128.0 +-9.1381493 2.2819853 -1.9487646 128.0 +-9.0860624 2.3282995 -1.9405028 128.0 +-9.0621414 2.3815203 -1.9384373 128.0 +-9.0105124 2.4271562 -1.930382 128.0 +-9.0180864 2.4886436 -1.9353391 128.0 +-8.9856987 2.5391424 -1.9316213 128.0 +-8.9718294 2.5947733 -1.9320344 128.0 +-8.9810715 2.6572688 -1.9376111 128.0 +-8.9505501 2.7080758 -1.934513 128.0 +-8.9328299 2.7626555 -1.9343064 128.0 +-8.9119787 2.8162351 -1.9334803 128.0 +-8.8945312 2.8708649 -1.9334803 128.0 +-8.8878994 2.9290612 -1.9359587 128.0 +-8.8753242 2.9854126 -1.937198 128.0 +-8.8170443 3.0261581 -1.9283166 128.0 +-8.823245 3.0889294 -1.9338933 128.0 +-8.7875385 3.1370893 -1.9301755 128.0 +-8.7947884 3.2006519 -1.9361653 128.0 +-8.7502146 3.2453699 -1.9305886 128.0 +-8.6843729 3.2817078 -1.9202613 128.0 +-8.7133827 3.35391 -1.9314147 128.0 +-8.6543789 3.3923156 -1.9227399 128.0 +-8.6752043 3.4620345 -1.932241 128.0 +-8.6293221 3.5052583 -1.9266642 128.0 +-8.6157894 3.5615046 -1.9285231 128.0 +-8.6000881 3.6169579 -1.929969 128.0 +-8.5741348 3.6681199 -1.9291427 128.0 +-8.5362139 3.7140253 -1.9256315 128.0 +-8.4533119 3.7398126 -1.9117929 128.0 +-8.5471048 3.8441813 -1.9388504 128.0 +-8.5002193 3.885977 -1.9334803 128.0 +-8.4389467 3.9207468 -1.9248053 128.0 +-8.3908405 3.9611766 -1.9192286 128.0 +-8.3893147 4.0235872 -1.9245987 128.0 +-8.3978949 4.09127 -1.9324474 128.0 +-8.3086138 4.1110487 -1.9173696 128.0 +-8.3042154 4.1724939 -1.9223268 128.0 +-8.2557955 4.2118092 -1.9169565 128.0 +-8.2350101 4.2650862 -1.9181958 128.0 +-8.2580509 4.3414855 -1.929969 128.0 +-8.1958628 4.3731904 -1.9215006 128.0 +-8.1740379 4.4261923 -1.9227399 128.0 +-8.1861725 4.4979358 -1.932241 128.0 +-8.1396179 4.5376 -1.9276969 128.0 +-8.1116219 4.5874586 -1.9276969 128.0 +-8.0485239 4.6171837 -1.9192286 128.0 +-8.0284986 4.671402 -1.921294 128.0 +-7.9356403 4.6827879 -1.9055965 128.0 +-7.9302673 4.7454581 -1.9113798 128.0 +-7.9076924 4.7980886 -1.9130322 128.0 +-7.8631024 4.8372912 -1.9093144 128.0 +-7.8349338 4.8864827 -1.9097275 128.0 +-7.7833004 4.9208713 -1.9043573 128.0 +-7.7529597 4.9685364 -1.9043573 128.0 +-7.7050958 5.0048223 -1.9000198 128.0 +-7.6824145 5.057385 -1.9020853 128.0 +-7.5958896 5.0675063 -1.8880402 128.0 +-7.5978875 5.1364846 -1.8965086 128.0 +-7.5751076 5.1890898 -1.8987806 128.0 +-7.511776 5.2137156 -1.8907253 128.0 +-7.5156612 5.2850342 -1.9000198 128.0 +-7.5452509 5.375329 -1.9161304 128.0 +-7.48277 5.4003396 -1.9084882 128.0 +-7.4502831 5.4467292 -1.9086947 128.0 +-7.3577476 5.4486713 -1.8932039 128.0 +-7.3547034 5.5166106 -1.9012591 128.0 +-7.3098078 5.5533485 -1.8983674 128.0 +-7.3027377 5.618978 -1.9055965 128.0 +-7.2758408 5.6696949 -1.907662 128.0 +-7.2516685 5.7227173 -1.9105537 128.0 +-7.1835504 5.7408404 -1.9016721 128.0 +-7.1649232 5.7983503 -1.9062161 128.0 +-7.1791601 5.8831334 -1.9198482 128.0 +-7.1805768 5.9583116 -1.9301755 128.0 +-7.1131668 5.9764543 -1.9217072 128.0 +-7.0592208 6.0054059 -1.9169565 128.0 +-7.0326185 6.0575471 -1.9198482 128.0 +-6.9886808 6.0947967 -1.9179893 128.0 +-6.9819584 6.1647615 -1.9266642 128.0 +-6.9396238 6.2035737 -1.9254249 128.0 +-6.9057817 6.2499771 -1.9266642 128.0 +-6.849988 6.2763691 -1.9217072 128.0 +-6.8185215 6.3249354 -1.9237726 128.0 +-6.7724514 6.3599563 -1.9217072 128.0 +-6.7538652 6.4209414 -1.9276969 128.0 +-6.713635 6.4615831 -1.9274904 128.0 +-6.6703572 6.4992418 -1.9264576 128.0 +-6.6428919 6.5524154 -1.9301755 128.0 +-6.6157174 6.6061869 -1.9340999 128.0 +-6.5915732 6.6633496 -1.939057 128.0 +-6.5567183 6.7099671 -1.9409158 128.0 +-6.4936781 6.7275457 -1.9343064 128.0 +-6.4779344 6.7941718 -1.9421551 128.0 +-6.4139857 6.8102875 -1.9353391 128.0 +-6.3894062 6.8681397 -1.9407094 128.0 +-6.3199992 6.8776779 -1.932241 128.0 +-6.2796526 6.9185009 -1.9328606 128.0 +-6.2566786 6.9787564 -1.939057 128.0 +-6.2215242 7.025805 -1.9415355 128.0 +-6.1995554 7.0881505 -1.9483515 128.0 +-6.1482711 7.1171722 -1.9458729 128.0 +-6.1159167 7.1681604 -1.9495908 128.0 +-6.0674052 7.200315 -1.9481449 128.0 +-6.0293698 7.2449288 -1.9502105 128.0 +-5.9848022 7.2817879 -1.9502105 128.0 +-5.9412427 7.3198924 -1.9506235 128.0 +-5.905396 7.3676605 -1.9537216 128.0 +-5.8594708 7.4029899 -1.9535152 128.0 +-5.8175516 7.4434285 -1.9547545 128.0 +-5.7765527 7.4851809 -1.9564068 128.0 +-5.7435627 7.5376053 -1.9609509 128.0 +-5.6824985 7.5531588 -1.9557872 128.0 +-5.6424642 7.5965238 -1.9580592 128.0 +-5.6003752 7.6373143 -1.9597116 128.0 +-5.5585723 7.6786666 -1.9615704 128.0 +-5.5022497 7.699892 -1.9582657 128.0 +-5.4498243 7.7263126 -1.9564068 128.0 +-5.4341822 7.8053761 -1.9681799 128.0 +-5.3839703 7.8353472 -1.9673537 128.0 +-5.3495221 7.8884792 -1.9725174 128.0 +-5.2830596 7.8943214 -1.9657013 128.0 +-5.2523155 7.9535322 -1.9725174 128.0 +-5.2034144 7.98561 -1.9725174 128.0 +-5.1606674 8.0272636 -1.9749959 128.0 +-5.1097441 8.0562992 -1.9743763 128.0 +-5.0659242 8.0966234 -1.9766483 128.0 +-4.9765778 8.0634441 -1.9607443 128.0 +-4.9702554 8.1648664 -1.9783007 128.0 +-4.927114 8.206954 -1.9811922 128.0 +-4.8721781 8.229454 -1.9793334 128.0 +-4.8289909 8.2718687 -1.9824315 128.0 +-4.7908363 8.323391 -1.9878018 128.0 +-4.738709 8.3509283 -1.9873886 128.0 +-4.6878572 8.3807011 -1.9875952 128.0 +-4.6495743 8.4332981 -1.9933785 128.0 +-4.5954051 8.4573698 -1.9923458 128.0 +-4.5300303 8.4603939 -1.9863559 128.0 +-4.4926438 8.5157223 -1.9929653 128.0 +-4.4357953 8.5344467 -1.9908999 128.0 +-4.3878045 8.5702124 -1.9929653 128.0 +-4.3377795 8.6022158 -1.9942046 128.0 +-4.2984076 8.6558361 -2.0006075 128.0 +-4.2387681 8.6688633 -1.9975094 128.0 +-4.1787062 8.680603 -1.9942046 128.0 +-4.1211743 8.697238 -1.9921392 128.0 +-4.0594597 8.704627 -1.9880083 128.0 +-4.0243387 8.7693872 -1.9973029 128.0 +-3.9603882 8.7716217 -1.9921392 128.0 +-3.9180105 8.8216887 -1.998129 128.0 +-3.8598909 8.8365974 -1.9960636 128.0 +-3.8167973 8.8861856 -2.0020535 128.0 +-3.7580135 8.8995228 -1.9997814 128.0 +-3.7127144 8.9450064 -2.004945 128.0 +-3.6529546 8.9558411 -2.00226 128.0 +-3.6132219 9.0162315 -2.0109348 128.0 +-3.5635662 9.0527983 -2.0142395 128.0 +-3.4959559 9.0434647 -2.0072169 128.0 +-3.4393587 9.0620012 -2.0065975 128.0 +-3.3908644 9.1021881 -2.0109348 128.0 +-3.3369663 9.1283369 -2.0121741 128.0 +-3.2818842 9.1514034 -2.0127938 128.0 +-3.223073 9.1639843 -2.0111413 128.0 +-3.1728442 9.2011623 -2.0150657 128.0 +-3.1207137 9.2334347 -2.0179574 128.0 +-3.064615 9.2542667 -2.0183706 128.0 +-2.9969049 9.2393913 -2.0109348 128.0 +-2.9457846 9.2753239 -2.0148592 128.0 +-2.8914311 9.3016338 -2.0167181 128.0 +-2.8394282 9.3360491 -2.020436 128.0 +-2.7832057 9.3570471 -2.0212622 128.0 +-2.7298381 9.3880415 -2.0243604 128.0 +-2.6753924 9.4159088 -2.0268388 128.0 +-2.6212306 9.4453468 -2.0297306 128.0 +-2.5619462 9.4565306 -2.0286977 128.0 +-2.5003726 9.4588289 -2.0258062 128.0 +-2.4337373 9.4408321 -2.0185771 128.0 +-2.3755252 9.4546385 -2.0183706 128.0 +-2.3107214 9.4414759 -2.0123806 128.0 +-2.2600038 9.4859333 -2.01899 128.0 +-2.2094901 9.5329828 -2.0262194 128.0 +-2.1561177 9.5692682 -2.0311763 128.0 +-2.1011276 9.5995226 -2.0348942 128.0 +-2.0405595 9.6045771 -2.0332417 128.0 +-1.971516 9.5680437 -2.0227079 128.0 +-1.9248424 9.6404085 -2.0357203 128.0 +-1.8600819 9.6232185 -2.0295241 128.0 +-1.7952454 9.6036739 -2.0229144 128.0 +-1.7470678 9.6742058 -2.0357203 128.0 +-1.6801146 9.6413679 -2.0264258 128.0 +-1.6207626 9.6505299 -2.0262194 128.0 +-1.5640162 9.6757479 -2.0295241 128.0 +-1.5046176 9.6851625 -2.0295241 128.0 +-1.446028 9.7000179 -2.0307631 128.0 +-1.3776273 9.646718 -2.0175443 128.0 +-1.3283416 9.7276964 -2.0330353 128.0 +-1.2669845 9.7230511 -2.0303502 128.0 +-1.2087473 9.7422943 -2.0328288 128.0 +-1.1496342 9.7553577 -2.0340681 128.0 +-1.0889947 9.7554216 -2.0326221 128.0 +-1.029424 9.7648392 -2.0332417 128.0 +-0.96968192 9.7729187 -2.0336549 128.0 +-0.9115116 9.7981691 -2.0377858 128.0 +-0.84883326 9.7743349 -2.0315895 128.0 +-0.79002368 9.7939882 -2.0346875 128.0 +-0.72984135 9.7976751 -2.034481 128.0 +-0.66790837 9.7756128 -2.0289044 128.0 +-0.60609144 9.7502308 -2.0227079 128.0 +-0.54789627 9.7830734 -2.0289044 128.0 +-0.48888201 9.8067722 -2.0332417 128.0 +-0.42818648 9.7978573 -2.0307631 128.0 +-0.3673982 9.7827005 -2.0270455 128.0 +-0.30767336 9.7945509 -2.0291109 128.0 +-0.24794072 9.8109255 -2.0322092 128.0 +-0.18753101 9.8015013 -2.029937 128.0 +-0.12700398 9.7731171 -2.0237408 128.0 +-0.067136131 9.7883892 -2.0268388 128.0 +-0.0070826625 9.7993793 -2.0291109 128.0 +0.052945457 9.7806482 -2.0251865 128.0 +0.11317133 9.798728 -2.0291109 128.0 +0.17324127 9.7949142 -2.0284913 128.0 +0.23303603 9.7809515 -2.0258062 128.0 +0.29275376 9.769557 -2.0237408 128.0 +0.35096505 9.7196646 -2.0136199 128.0 +0.41369215 9.7906456 -2.0291109 128.0 +0.47352231 9.7830362 -2.0280781 128.0 +0.5279488 9.6773634 -2.0063908 128.0 +0.58826607 9.6895676 -2.0096955 128.0 +0.64829624 9.694562 -2.0115545 128.0 +0.7100482 9.7216291 -2.0181639 128.0 +0.76621079 9.6731968 -2.0088694 128.0 +0.82663161 9.6809874 -2.0115545 128.0 +0.88789034 9.6961946 -2.015892 128.0 +0.94080228 9.6233711 -2.0016403 128.0 +1.0048891 9.6660776 -2.0119677 128.0 +1.0654655 9.6714001 -2.0144463 128.0 +1.1321374 9.7278528 -2.0278716 128.0 +1.1951379 9.7479162 -2.0336549 128.0 +1.2565523 9.7530146 -2.03634 128.0 +1.3060279 9.66852 -2.0200229 128.0 +1.3697085 9.6913261 -2.0266323 128.0 +1.4272909 9.6701565 -2.0239472 128.0 +1.4784169 9.6080284 -2.0125873 128.0 +1.5455416 9.6499805 -2.0235341 128.0 +1.6007082 9.6161871 -2.0183706 128.0 +1.6631793 9.6264315 -2.0227079 128.0 +1.7113502 9.5553684 -2.0096955 128.0 +1.7628143 9.5062065 -2.0014338 128.0 +1.8192675 9.4856014 -1.9993683 128.0 +1.8819994 9.4972944 -2.0043254 128.0 +1.9531766 9.5488358 -2.0179574 128.0 +2.007894 9.5184813 -2.0140331 128.0 +2.0602348 9.4782543 -2.0080433 128.0 +2.1204901 9.4749832 -2.0101087 128.0 +2.178807 9.4627466 -2.0103152 128.0 +2.2429128 9.4749079 -2.015892 128.0 +2.295459 9.4381495 -2.0109348 128.0 +2.3519051 9.418191 -2.0096955 128.0 +2.4213059 9.4490786 -2.0196097 128.0 +2.4628279 9.3715868 -2.0059779 128.0 +2.5164678 9.3421268 -2.0028796 128.0 +2.5724416 9.3217945 -2.0018468 128.0 +2.6269302 9.2964191 -1.9997814 128.0 +2.6985996 9.3308821 -2.0109348 128.0 +2.752749 9.3038273 -2.0086629 128.0 +2.8038347 9.2670946 -2.0043254 128.0 +2.8591986 9.2450418 -2.0032926 128.0 +2.9123337 9.2161283 -2.0008142 128.0 +2.9742372 9.2148466 -2.0045319 128.0 +3.0301099 9.1945648 -2.0041189 128.0 +3.0867815 9.1767263 -2.0043254 128.0 +3.1443012 9.1613159 -2.0051515 128.0 +3.1991618 9.1381559 -2.0043254 128.0 +3.2485938 9.0999241 -2.0001945 128.0 +3.308718 9.091773 -2.0028796 128.0 +3.3644419 9.0712996 -2.0028796 128.0 +3.4089725 9.0211964 -1.9962702 128.0 +3.4614499 8.9928045 -1.9946177 128.0 +3.5337012 9.0151224 -2.0045319 128.0 +3.579885 8.9705515 -1.9993683 128.0 +3.5987775 8.8595781 -1.9791268 128.0 +3.6646571 8.8653612 -1.9855298 128.0 +3.7186058 8.8418064 -1.9853232 128.0 +3.7604742 8.7900362 -1.9787138 128.0 +3.8080928 8.7524414 -1.975409 128.0 +3.8704331 8.7485962 -1.9799531 128.0 +3.923238 8.7228985 -1.9795399 128.0 +3.9713988 8.6870928 -1.9768548 128.0 +4.0431771 8.7024927 -1.9861494 128.0 +4.1002574 8.6854839 -1.9880083 128.0 +4.1555886 8.6645727 -1.989041 128.0 +4.2116747 8.6450691 -1.9904869 128.0 +4.2446823 8.578723 -1.9809858 128.0 +4.2972407 8.552516 -1.9809858 128.0 +4.3349648 8.4972258 -1.9741697 128.0 +4.3928704 8.4817619 -1.9768548 128.0 +4.4015808 8.3723717 -1.957233 128.0 +4.4648447 8.367651 -1.9626032 128.0 +4.5454526 8.3943043 -1.9756155 128.0 +4.5700192 8.3173761 -1.9638424 128.0 +4.6252551 8.2968702 -1.9657013 128.0 +4.7083449 8.3253975 -1.9795399 128.0 +4.7637215 8.3039894 -1.9813988 128.0 +4.7978549 8.2458487 -1.9743763 128.0 +4.8543267 8.226366 -1.9768548 128.0 +4.8810997 8.1569643 -1.9671472 128.0 +4.9153252 8.1009283 -1.9607443 128.0 +4.9623756 8.0664492 -1.9597116 128.0 +4.9946914 8.0084515 -1.9528955 128.0 +5.0646496 8.0107355 -1.9611573 128.0 +5.1031494 7.9630318 -1.9570265 128.0 +5.1439195 7.9192615 -1.9539282 128.0 +5.2026358 7.9030781 -1.9578526 128.0 +5.255374 7.8775182 -1.959505 128.0 +5.2811441 7.8118882 -1.9510366 128.0 +5.3262134 7.7753005 -1.9500039 128.0 +5.3503914 7.7087126 -1.941329 128.0 +5.4065948 7.6885443 -1.9446337 128.0 +5.4775114 7.6886959 -1.9533086 128.0 +5.5165696 7.6438341 -1.9504169 128.0 +5.543735 7.5829849 -1.9433944 128.0 +5.597146 7.5582623 -1.9458729 128.0 +5.6299148 7.5057735 -1.9411224 128.0 +5.6681695 7.460959 -1.9384373 128.0 +5.7120523 7.4237127 -1.9378177 128.0 +5.7761383 7.4124503 -1.9442205 128.0 +5.8354521 7.3945355 -1.9489712 128.0 +5.8684983 7.3433032 -1.9448402 128.0 +5.9035978 7.2949872 -1.9415355 128.0 +5.9445267 7.2540851 -1.9402962 128.0 +5.9758053 7.2016606 -1.9359587 128.0 +6.0104403 7.1536207 -1.9328606 128.0 +6.0618286 7.1255503 -1.9353391 128.0 +6.1041589 7.0867386 -1.934926 128.0 +6.1256638 7.0240779 -1.9279035 128.0 +6.1828938 7.0024958 -1.9324474 128.0 +6.2048779 6.941083 -1.925838 128.0 +6.2637639 6.9210167 -1.9310017 128.0 +6.2803349 6.8543167 -1.9229463 128.0 +6.3003168 6.7919793 -1.9161304 128.0 +6.3412032 6.75248 -1.9159238 128.0 +6.4007177 6.7325912 -1.9215006 128.0 +6.4405508 6.6917801 -1.9210875 128.0 +6.4896827 6.6605458 -1.923566 128.0 +6.489892 6.5794997 -1.9113798 128.0 +6.5329061 6.5423245 -1.9122061 128.0 +6.572926 6.5021162 -1.9122061 128.0 +6.6168971 6.465766 -1.9134452 128.0 +6.6451826 6.4141712 -1.9101405 128.0 +6.7176952 6.4050112 -1.9198482 128.0 +6.7404876 6.3482423 -1.9150976 128.0 +6.7556734 6.28477 -1.9082817 128.0 +6.7566466 6.2087722 -1.8975413 128.0 +6.8170748 6.1875839 -1.9039441 128.0 +6.8505416 6.1417198 -1.902705 128.0 +6.9144669 6.1229229 -1.9101405 128.0 +6.9276037 6.059123 -1.9033245 128.0 +6.9120831 5.971087 -1.8886598 128.0 +6.9493356 5.9291978 -1.8888663 128.0 +6.9998012 5.8984256 -1.8927907 128.0 +7.0456376 5.8635015 -1.8954757 128.0 +7.0799713 5.8189173 -1.8950627 128.0 +7.1185808 5.7778325 -1.8958889 128.0 +7.1485548 5.7297611 -1.894443 128.0 +7.186646 5.6882195 -1.8952693 128.0 +7.2252674 5.6470289 -1.896302 128.0 +7.187746 5.5469928 -1.8770932 128.0 +7.226316 5.5063434 -1.8783325 128.0 +7.2552748 5.4583702 -1.8770932 128.0 +7.2831321 5.4096661 -1.8756474 128.0 +7.3422256 5.3839703 -1.8824635 128.0 +7.3648195 5.3313589 -1.8797783 128.0 +7.4164987 5.2997222 -1.8847355 128.0 +7.3905125 5.2129436 -1.8696576 128.0 +7.4520693 5.1881843 -1.8772998 128.0 +7.4902139 5.1467948 -1.8789521 128.0 +7.5435171 5.1155667 -1.8845289 128.0 +7.5918388 5.0806127 -1.8888663 128.0 +7.6261358 5.0360913 -1.8896925 128.0 +7.6470566 4.9827933 -1.8872139 128.0 +7.6857162 4.9410696 -1.8892795 128.0 +7.7043223 4.8864803 -1.8863878 128.0 +7.7499194 4.8489771 -1.8903122 128.0 +7.7637067 4.7915688 -1.8863878 128.0 +7.7820964 4.737227 -1.8837026 128.0 +7.8361826 4.7044973 -1.889899 128.0 +7.8430114 4.6433659 -1.8845289 128.0 +7.9034634 4.6139011 -1.8923776 128.0 +7.8968577 4.5453062 -1.8839092 128.0 +7.9773579 4.5267072 -1.896715 128.0 +8.0118141 4.4814954 -1.8983674 128.0 +7.9320593 4.3731966 -1.8725492 128.0 +8.0679255 4.3837752 -1.8987806 128.0 +8.1283112 4.3522024 -1.9068358 128.0 +8.0804415 4.2629795 -1.8890729 128.0 +8.0856104 4.2024879 -1.8841158 128.0 +8.0973101 4.1456614 -1.8808111 128.0 +8.1531715 4.1113195 -1.8880402 128.0 +8.1826267 4.0633917 -1.8890729 128.0 +8.2408056 4.0294409 -1.8969216 128.0 +8.2909403 3.9911089 -1.9029114 128.0 +8.310853 3.9380665 -1.9018787 128.0 +8.3002777 3.8708682 -1.8938234 128.0 +8.3585529 3.835783 -1.9018787 128.0 +8.3418036 3.7663038 -1.8925842 128.0 +8.3710155 3.7178288 -1.89403 128.0 +8.4062223 3.6718788 -1.8969216 128.0 +8.3854427 3.6016934 -1.8870075 128.0 +8.416398 3.5539801 -1.8890729 128.0 +8.468771 3.5150251 -1.8960954 128.0 +8.4104548 3.4304736 -1.8779194 128.0 +8.5321569 3.4192078 -1.900846 128.0 +8.5802889 3.3775439 -1.9070424 128.0 +8.5853367 3.3188345 -1.9035311 128.0 +8.5982218 3.2633154 -1.9018787 128.0 +8.6043301 3.2053723 -1.8987806 128.0 +8.5788078 3.136054 -1.8886598 128.0 +8.6273603 3.0939269 -1.8952693 128.0 +8.6729488 3.0503478 -1.9012591 128.0 +8.7303505 3.0104723 -1.909934 128.0 +8.7069473 2.9427476 -1.9006394 128.0 +8.6960459 2.8797309 -1.8942366 128.0 +8.7191362 2.8281305 -1.8954757 128.0 +8.7307301 2.7728002 -1.8942366 128.0 +8.7737408 2.7273107 -1.9000198 128.0 +8.8052874 2.6779807 -1.9033245 128.0 +8.8009214 2.6177642 -1.8987806 128.0 +8.8656721 2.5779214 -1.9095209 128.0 +8.9048529 2.5301607 -1.9146845 128.0 +8.8589287 2.4584646 -1.9012591 128.0 +8.8540144 2.3986874 -1.8969216 128.0 +8.8997812 2.3525679 -1.9037377 128.0 +8.9263659 2.3010914 -1.9064227 128.0 +8.9763765 2.2553384 -1.9142715 128.0 +8.9444284 2.1890514 -1.9043573 128.0 +9.0090876 2.1463757 -1.9155108 128.0 +8.9572735 2.0760312 -1.9014657 128.0 +8.9832058 2.0240428 -1.9043573 128.0 +9.0155277 1.973279 -1.9086947 128.0 +9.0178957 1.9158899 -1.9066293 128.0 +9.0649385 1.8678285 -1.9142715 128.0 +9.0867825 1.8142798 -1.9165435 128.0 +9.0631609 1.751804 -1.9091078 128.0 +9.1064386 1.7022747 -1.9161304 128.0 +9.1051588 1.6442795 -1.9136518 128.0 +9.125679 1.5902284 -1.9159238 128.0 +9.1449137 1.5358254 -1.9179893 128.0 +9.12712 1.4753115 -1.9122061 128.0 +9.1824093 1.4264923 -1.9221202 128.0 +9.1513119 1.3642068 -1.9136518 128.0 +9.2060032 1.3146713 -1.923566 128.0 +9.1848135 1.254187 -1.9173696 128.0 +9.20786 1.1998298 -1.9206743 128.0 +9.2344675 1.1457192 -1.9248053 128.0 +9.2209187 1.0866303 -1.9204679 128.0 +9.1807375 1.0248193 -1.9105537 128.0 +9.2170172 0.97164917 -1.9169565 128.0 +9.2529888 0.9180724 -1.9233595 128.0 +9.2360401 0.8591944 -1.9186089 128.0 +9.2411385 0.80250692 -1.9186089 128.0 +9.2761221 0.74822927 -1.9250119 128.0 +9.2766352 0.69100708 -1.9241856 128.0 +9.2914381 0.63480777 -1.9264576 128.0 +9.2287531 0.57365406 -1.9124125 128.0 +9.2672682 0.51898772 -1.9198482 128.0 +9.284936 0.4628464 -1.9229463 128.0 +9.2739162 0.40526775 -1.9200548 128.0 +9.2654734 0.34795207 -1.9177828 128.0 +9.2527647 0.29063225 -1.9146845 128.0 +9.2758923 0.23439759 -1.9192286 128.0 +9.3016119 0.17794628 -1.9243922 128.0 +9.2271957 0.11988726 -1.9084882 128.0 +9.3050528 0.063801296 -1.9248053 128.0 +9.2808075 0.0066866907 -1.9196416 128.0 +9.2885017 -0.050301451 -1.921294 128.0 +9.2704077 -0.107091 -1.9175762 128.0 +9.3096857 -0.16467892 -1.9260446 128.0 +9.2439413 -0.22026347 -1.9124125 128.0 +9.3235893 -0.27940822 -1.9295559 128.0 +9.3578777 -0.33791628 -1.937198 128.0 +9.2559166 -0.39111966 -1.9161304 128.0 +9.2621384 -0.44833091 -1.9179893 128.0 +9.236742 -0.5039289 -1.9132388 128.0 +9.2559395 -0.56195784 -1.9179893 128.0 +9.2366972 -0.6176967 -1.9146845 128.0 +9.2015057 -0.67208093 -1.9080751 128.0 +9.2313471 -0.73123038 -1.9153042 128.0 +9.2325363 -0.78835827 -1.9165435 128.0 +9.2518845 -0.84722281 -1.9217072 128.0 +9.2728043 -0.90654469 -1.9272839 128.0 +9.2991829 -0.96676189 -1.9340999 128.0 +9.255146 -1.0196253 -1.9260446 128.0 +9.2458 -1.0760555 -1.9254249 128.0 +9.2584467 -1.135147 -1.9295559 128.0 +9.2600412 -1.1930592 -1.9314147 128.0 +9.226366 -1.24632 -1.925838 128.0 +9.2137012 -1.302224 -1.9248053 128.0 +9.2268324 -1.3618759 -1.9293493 128.0 +9.2057304 -1.4165311 -1.9266642 128.0 +9.2132893 -1.4756196 -1.9301755 128.0 +9.1760721 -1.5274655 -1.9241856 128.0 +9.1771326 -1.585572 -1.9264576 128.0 +9.2288704 -1.6528889 -1.9396766 128.0 +9.177187 -1.7018156 -1.9307951 128.0 +9.131979 -1.7514604 -1.9233595 128.0 +9.1201 -1.8072702 -1.9231529 128.0 +9.1213017 -1.8657445 -1.925838 128.0 +9.0704288 -1.9133981 -1.9173696 128.0 +9.0183611 -1.9602902 -1.9086947 128.0 +8.8228369 -1.9745686 -1.869038 128.0 +8.66467 -1.9950835 -1.8374364 128.0 +8.4094706 -1.9907473 -1.7847673 128.0 +8.2050495 -1.9956098 -1.7430451 128.0 +8.1679688 -2.0397549 -1.7376748 128.0 +8.0121784 -2.0531659 -1.7064865 128.0 +7.932241 -2.0846353 -1.6918217 128.0 +7.9797659 -2.1495521 -1.7050406 128.0 +7.9937787 -2.2060215 -1.7110305 128.0 +7.4914131 -2.1169624 -1.6038332 128.0 +7.1765656 -2.0756423 -1.5375321 128.0 +7.0820675 -2.0954902 -1.5195626 128.0 +6.7618971 -2.04598 -1.4518156 128.0 +6.5875015 -2.0374258 -1.4160831 128.0 +6.4853106 -2.0495086 -1.3962548 128.0 +6.3105927 -2.0369759 -1.3603158 128.0 +6.2477937 -2.0591235 -1.3491623 128.0 +6.0300884 -2.0284896 -1.3035157 128.0 +5.9823608 -2.0533829 -1.2956669 128.0 +5.7544746 -2.0147314 -1.2475418 128.0 +5.6682849 -2.0236883 -1.2310182 128.0 +5.5720901 -2.0279844 -1.2122225 128.0 +5.5182595 -2.0468266 -1.2029279 128.0 +5.4726462 -2.0681977 -1.1954923 128.0 +5.3283606 -2.0511312 -1.1657497 128.0 +5.0651579 -1.9856026 -1.1089497 128.0 +5.0083499 -1.9988763 -1.0988289 128.0 +4.9796734 -2.0229421 -1.095111 128.0 +4.8261051 -1.995155 -1.0628899 128.0 +4.7948318 -2.0167649 -1.0585525 128.0 +4.7553792 -2.0346031 -1.0523561 128.0 +4.6387291 -2.018466 -1.0283968 128.0 +4.6253619 -2.046495 -1.0281903 128.0 +4.6448426 -2.0892839 -1.0356259 128.0 +4.7146935 -2.1555746 -1.0548346 128.0 +4.6046562 -2.1395304 -1.0323212 128.0 +4.6179862 -2.1802735 -1.0385176 128.0 +4.5886412 -2.2009525 -1.0347997 128.0 +4.5266705 -2.2054996 -1.0234396 128.0 +4.5183144 -2.2358365 -1.0246789 128.0 +4.5080075 -2.2652752 -1.0255052 128.0 +4.5759525 -2.334686 -1.0449204 128.0 +4.4989843 -2.3303237 -1.0300492 128.0 +4.5131812 -2.3729088 -1.0368651 128.0 +4.4605532 -2.3802915 -1.0277772 128.0 +4.4363995 -2.4024916 -1.0255052 128.0 +4.4275775 -2.4329655 -1.026951 128.0 +4.4587159 -2.4858115 -1.0381044 128.0 +4.4289002 -2.5049353 -1.0345932 128.0 +4.3480954 -2.4945769 -1.0186892 128.0 +4.3623071 -2.5384307 -1.0259182 128.0 +4.3887839 -2.5900104 -1.0362456 128.0 +4.300602 -2.5736864 -1.0184826 128.0 +4.3424492 -2.6350446 -1.0327343 128.0 +4.3553677 -2.6795821 -1.0399634 128.0 +4.3139372 -2.6907234 -1.033767 128.0 +4.2576485 -2.6920466 -1.0238528 128.0 +4.2871838 -2.7476826 -1.0354193 128.0 +4.2554736 -2.7643437 -1.0317016 128.0 +4.254777 -2.801162 -1.0358324 128.0 +4.2904162 -2.862509 -1.0492579 128.0 +4.1106501 -2.7791901 -1.0079488 128.0 +4.1605201 -2.8502524 -1.0250921 128.0 +4.2530766 -2.9521539 -1.0533888 128.0 +4.0940146 -2.8791451 -1.0170368 128.0 +4.0483794 -2.8843424 -1.0098077 128.0 +4.0131502 -2.8965323 -1.0052637 128.0 +3.9984612 -2.9234116 -1.0060898 128.0 +4.0968256 -3.0340643 -1.0366586 128.0 +4.0577803 -3.0438812 -1.0312884 128.0 +4.0608425 -3.085294 -1.0370717 128.0 +4.038733 -3.1077662 -1.0362456 128.0 +4.0381117 -3.1469219 -1.0412027 128.0 +4.0002918 -3.1570938 -1.0362456 128.0 +3.9281037 -3.1394341 -1.0219939 128.0 +3.9285424 -3.1794801 -1.027364 128.0 +3.8499279 -3.1551547 -1.0112535 128.0 +3.7664909 -3.1256127 -0.99369711 128.0 +3.7839501 -3.1795039 -1.0038178 128.0 +3.9149148 -3.3307223 -1.0455401 128.0 +3.847698 -3.3144541 -1.0325277 128.0 +3.7550197 -3.274981 -1.0122862 128.0 +3.8558779 -3.404809 -1.0463663 128.0 +3.8130291 -3.4088423 -1.04017 128.0 +3.7194934 -3.3665221 -1.0195153 128.0 +3.6598094 -3.3535891 -1.0083618 128.0 +3.5997081 -3.3393862 -0.99700183 128.0 +3.5527594 -3.3366294 -0.98935968 128.0 +3.5336375 -3.3597143 -0.98977274 128.0 +3.5129564 -3.3813331 -0.98977274 128.0 +3.7121999 -3.617218 -1.0546281 128.0 +3.6801825 -3.6303086 -1.0517365 128.0 +3.612833 -3.6078849 -1.038311 128.0 +3.5899391 -3.6292894 -1.0381044 128.0 +3.6264141 -3.7114291 -1.0558674 128.0 +3.5138729 -3.6406882 -1.0286033 128.0 +3.5022712 -3.6735101 -1.031908 128.0 +3.5118661 -3.7291183 -1.0418223 128.0 +3.4762557 -3.7369859 -1.0378979 128.0 +3.4459777 -3.7503207 -1.0356259 128.0 +3.4367115 -3.7866082 -1.0399634 128.0 +3.4225571 -3.8178232 -1.042855 128.0 +3.3893366 -3.8277643 -1.0397568 128.0 +3.3496816 -3.8300774 -1.0345932 128.0 +3.3158832 -3.8387125 -1.0312884 128.0 +3.2751191 -3.8388898 -1.0257117 128.0 +3.3177071 -3.9374728 -1.047399 128.0 +3.2803404 -3.941963 -1.0430615 128.0 +3.2560914 -3.9620166 -1.0430615 128.0 +3.2693346 -4.0282607 -1.0556608 128.0 +3.2439442 -4.0474815 -1.0554543 128.0 +3.1898992 -4.0304852 -1.0455401 128.0 +3.2410302 -4.1471143 -1.0715649 128.0 +3.1515572 -4.0840435 -1.0494645 128.0 +3.058238 -4.0138087 -1.0257117 128.0 +3.0953197 -4.1145921 -1.047399 128.0 +3.0886853 -4.1586413 -1.0540085 128.0 +3.0411224 -4.1475325 -1.0461597 128.0 +2.9863541 -4.1256948 -1.0356259 128.0 +2.9899969 -4.1845393 -1.0461597 128.0 +2.9676487 -4.2076044 -1.047399 128.0 +2.918853 -4.1928124 -1.0389307 128.0 +2.9135749 -4.2404795 -1.0465728 128.0 +2.8567464 -4.2129297 -1.0350063 128.0 +2.8591416 -4.2726617 -1.0457467 128.0 +2.8296359 -4.2852259 -1.0445074 128.0 +2.817178 -4.3238211 -1.0498775 128.0 +2.7509081 -4.2793002 -1.0343866 128.0 +2.6968222 -4.2523084 -1.0234396 128.0 +2.6846929 -4.2911701 -1.0290164 128.0 +2.6300471 -4.2617693 -1.0176564 128.0 +2.655745 -4.3630724 -1.0387241 128.0 +2.6062591 -4.3415375 -1.0294296 128.0 +2.5975168 -4.3877568 -1.0368651 128.0 +2.5601854 -4.3858681 -1.0325277 128.0 +2.5185821 -4.3760548 -1.0263313 128.0 +2.4738157 -4.359941 -1.0186892 128.0 +2.4494054 -4.3793073 -1.0197219 128.0 +2.4442205 -4.4336677 -1.029223 128.0 +2.4188387 -4.4520206 -1.0300492 128.0 +2.3780813 -4.4417644 -1.0240593 128.0 +2.3407376 -4.4372344 -1.0195153 128.0 +2.3261027 -4.475822 -1.0252986 128.0 +2.3191087 -4.5300717 -1.0347997 128.0 +2.300962 -4.5634365 -1.0393437 128.0 +2.2576854 -4.5467978 -1.0321146 128.0 +2.2314637 -4.5640812 -1.0329407 128.0 +2.2360978 -4.6455693 -1.0488448 128.0 +2.1354811 -4.5071239 -1.013319 128.0 +2.1019957 -4.5077281 -1.0104274 128.0 +2.067359 -4.5054235 -1.006916 128.0 +2.0316222 -4.5001888 -1.0027851 128.0 +2.0039713 -4.5125699 -1.0027851 128.0 +1.9797701 -4.5328507 -1.004644 128.0 +1.9658223 -4.5772772 -1.0120797 128.0 +1.9335124 -4.5793381 -1.0098077 128.0 +1.9027519 -4.5847898 -1.0083618 128.0 +1.8841932 -4.6199336 -1.0137321 128.0 +1.8274181 -4.5605679 -0.99762148 128.0 +2.8793337 -7.3148003 -1.6199437 128.0 +1.792838 -4.6383185 -1.0102208 128.0 +1.750455 -4.6126418 -1.001959 128.0 +2.7442043 -7.36656 -1.6199437 128.0 +1.14373 -3.1294615 -0.66384357 128.0 +1.1225245 -3.1308944 -0.66260427 128.0 +1.1403052 -3.2429452 -0.68615049 128.0 +1.1749347 -3.4080515 -0.72146982 128.0 +1.5763571 -4.6646762 -0.99989349 128.0 +1.0708835 -3.2345917 -0.67974758 128.0 +1.0676221 -3.2922895 -0.69110763 128.0 +1.066358 -3.3584597 -0.70432651 128.0 +1.0492165 -3.3761516 -0.70680511 128.0 +1.0199389 -3.3544431 -0.70060873 128.0 +0.98678261 -3.3184364 -0.69131416 128.0 +0.96530956 -3.3206706 -0.69048798 128.0 +0.90452945 -3.1844144 -0.65929955 128.0 +0.88785172 -3.2002752 -0.66157156 128.0 +0.87178099 -3.2188842 -0.66446322 128.0 +0.85501498 -3.2355239 -0.66694176 128.0 +1.944926 -7.5449815 -1.6052791 128.0 +1.8962096 -7.5472841 -1.6032135 128.0 +1.8533542 -7.5730329 -1.6063118 128.0 +1.8068521 -7.5842619 -1.6063118 128.0 +0.83137321 -3.5881162 -0.73799348 128.0 +0.8102017 -3.5969679 -0.73881966 128.0 +1.677616 -7.6649814 -1.6168456 128.0 +1.6216044 -7.6330194 -1.6077576 128.0 +1.5751336 -7.6447425 -1.6081706 128.0 +1.5274302 -7.6504254 -1.6073445 128.0 +1.4832451 -7.6740632 -1.6104426 128.0 +1.4357704 -7.6810966 -1.6100296 128.0 +1.386526 -7.6782074 -1.6075511 128.0 +1.3365312 -7.6701837 -1.6040398 128.0 +1.2917119 -7.6917491 -1.6069314 128.0 +1.2413685 -7.6802125 -1.6028005 128.0 +1.195272 -7.6944523 -1.6042463 128.0 +1.1494802 -7.711319 -1.6063118 128.0 +1.0970232 -7.6823888 -1.5986695 128.0 +1.0464215 -7.6637697 -1.5932994 128.0 +1.0000101 -7.6748977 -1.5943321 128.0 +0.95229644 -7.676034 -1.5932994 128.0 +0.90357554 -7.668129 -1.5904077 128.0 +0.86215436 -7.724093 -1.6011481 128.0 +0.81351256 -7.7175612 -1.5986695 128.0 +0.76353371 -7.6961188 -1.5930928 128.0 +0.71638751 -7.7016335 -1.5932994 128.0 +0.67013395 -7.7175813 -1.595778 128.0 +0.62253106 -7.7186217 -1.5951583 128.0 +0.57414061 -7.7086363 -1.5922667 128.0 +0.52716422 -7.7168946 -1.5932994 128.0 +0.47889313 -7.7053356 -1.5902013 128.0 +0.43176931 -7.71106 -1.5908208 128.0 +0.38415447 -7.7077007 -1.5895816 128.0 +0.3380937 -7.7382603 -1.5955714 128.0 +0.29034892 -7.733345 -1.5941256 128.0 +0.24313864 -7.7428045 -1.595778 128.0 +0.19555083 -7.7412162 -1.5951583 128.0 +0.14765404 -7.7217269 -1.5908208 128.0 +0.10042468 -7.7342277 -1.5932994 128.0 +0.053128477 -7.7581806 -1.5982565 128.0 +0.0054950402 -7.7202015 -1.5902013 128.0 +-0.042127639 -7.7670541 -1.6001154 128.0 +-0.089604437 -7.7509952 -1.5968107 128.0 +-0.13752449 -7.7708435 -1.6011481 128.0 +-0.18457474 -7.743443 -1.5955714 128.0 +-0.232289 -7.749011 -1.5970172 128.0 +-0.28004327 -7.7533064 -1.5982565 128.0 +-0.32761139 -7.7514424 -1.5982565 128.0 +-0.37474179 -7.7404904 -1.5963975 128.0 +-0.42159039 -7.7263217 -1.593919 128.0 +-0.47112337 -7.7587485 -1.6013547 128.0 +-0.52067864 -7.7849994 -1.6075511 128.0 +-0.56793803 -7.774827 -1.6061052 128.0 +-0.61679107 -7.7858267 -1.6092035 128.0 +-0.66139072 -7.7448497 -1.6013547 128.0 +-0.70889974 -7.7406454 -1.6013547 128.0 +-0.7573337 -7.7458882 -1.6034201 128.0 +-0.80838698 -7.7751575 -1.6106492 128.0 +-0.85640055 -7.7729683 -1.6112689 128.0 +-0.89966881 -7.7296638 -1.6032135 128.0 +-0.9455328 -7.7113729 -1.6005285 128.0 +-0.9910813 -7.6918402 -1.5976368 128.0 +-1.0364257 -7.6720395 -1.5947452 128.0 +-1.0827966 -7.6606913 -1.5937124 128.0 +-1.1312096 -7.6635828 -1.595778 128.0 +-1.1783599 -7.6574645 -1.5959845 128.0 +-1.228881 -7.6723113 -1.6007351 128.0 +-1.2759343 -7.6646266 -1.6007351 128.0 +-1.3284353 -7.6884708 -1.6075511 128.0 +-1.3716195 -7.6580229 -1.6028005 128.0 +-1.4264302 -7.6917925 -1.6118885 128.0 +-1.4794955 -7.713645 -1.618498 128.0 +-1.5252765 -7.696744 -1.6168456 128.0 +-1.5685534 -7.6680679 -1.6127146 128.0 +-1.6159781 -7.6602139 -1.6131278 128.0 +-1.6712613 -7.6883988 -1.6213896 128.0 +-1.7239598 -7.7028251 -1.6267598 128.0 +-1.773386 -7.7016373 -1.6288253 128.0 +-1.8181301 -7.6801372 -1.6265533 128.0 +-1.8642956 -7.6650338 -1.6257271 128.0 +-1.9112923 -7.6534505 -1.6257271 128.0 +-1.9587027 -7.6434746 -1.6261401 128.0 +-2.0063112 -7.6341515 -1.6267598 128.0 +-2.0571868 -7.6368136 -1.6300645 128.0 +-2.0948985 -7.5910354 -1.6228354 128.0 +-2.1345201 -7.5535574 -1.6174653 128.0 +-2.1868072 -7.5609965 -1.6220093 128.0 +-2.2303839 -7.5380535 -1.6199437 128.0 +-2.2825439 -7.5438933 -1.6242813 128.0 +-2.314626 -7.4839425 -1.6141605 128.0 +-2.3631558 -7.4779959 -1.6160194 128.0 +-2.4065917 -7.4559059 -1.614367 128.0 +-2.4575005 -7.4567971 -1.6178783 128.0 +-2.5053916 -7.4480696 -1.6193242 128.0 +-2.553268 -7.4390345 -1.62077 128.0 +-2.5982184 -7.421381 -1.6203569 128.0 +-2.6450219 -7.4089851 -1.621183 128.0 +-2.6971242 -7.411005 -1.625314 128.0 +-1.3936325 -3.7568762 -0.80636013 128.0 +-2.7615826 -7.3077879 -1.6096165 128.0 +-2.8288624 -7.3491464 -1.6228354 128.0 +-2.8749738 -7.3343835 -1.623455 128.0 +-2.9199226 -7.3166051 -1.623455 128.0 +-2.9761753 -7.326653 -1.629858 128.0 +-3.0173373 -7.299211 -1.6277925 128.0 +-3.0563784 -7.2670307 -1.6246943 128.0 +-3.1066825 -7.2616343 -1.6277925 128.0 +-3.1527419 -7.2460241 -1.6286187 128.0 +-3.2034764 -7.2408595 -1.6319234 128.0 +-1.4179043 -3.1519349 -0.69007486 128.0 +-1.4359971 -3.1405058 -0.68945527 128.0 +-1.4733777 -3.1706796 -0.69854325 128.0 +-1.615597 -3.4217153 -0.75926769 128.0 +-1.6302156 -3.3985043 -0.7561695 128.0 +-1.6488953 -3.3840392 -0.75513679 128.0 +-1.6678928 -3.3703501 -0.75431061 128.0 +-1.6885415 -3.3600528 -0.75431061 128.0 +-1.7104604 -3.3522437 -0.75493026 128.0 +-1.732347 -3.3442917 -0.75554991 128.0 +-1.7582978 -3.3439922 -0.75802845 128.0 +-3.7670765 -7.0598178 -1.6496863 128.0 +-3.786099 -6.9918289 -1.6389459 128.0 +-3.8223331 -6.956461 -1.6360544 128.0 +-3.8744729 -6.9499693 -1.6401852 128.0 +-3.9151175 -6.9226584 -1.6393591 128.0 +-3.9643362 -6.9103875 -1.6422508 128.0 +-3.9973142 -6.869864 -1.6383264 128.0 +-4.0379 -6.8426795 -1.6377068 128.0 +-4.0813169 -6.8202934 -1.6383264 128.0 +-4.1378069 -6.8193817 -1.6443162 128.0 +-4.1693192 -6.7771964 -1.6401852 128.0 +-4.2320523 -6.7855258 -1.6486536 128.0 +-4.2558317 -6.7313113 -1.6416311 128.0 +-4.2859683 -6.6877713 -1.6372936 128.0 +-2.0342162 -3.13131 -0.74873388 128.0 +-2.0496256 -3.1130486 -0.74728805 128.0 +-2.074661 -3.1093671 -0.74956006 128.0 +-4.4625025 -6.6008391 -1.6424572 128.0 +-4.5200605 -6.5983577 -1.6488602 128.0 +-4.5504208 -6.5560303 -1.6451423 128.0 +-4.6040692 -6.547195 -1.6500995 128.0 +-4.6549411 -6.5339632 -1.6540239 128.0 +-4.6760507 -6.4790955 -1.6472079 128.0 +-4.7214918 -6.4581804 -1.6492733 128.0 +-4.7808261 -6.4558239 -1.6562959 128.0 +-4.7968655 -6.3950577 -1.648034 128.0 +-4.8496275 -6.3834243 -1.6527846 128.0 +-4.9071994 -6.3775873 -1.6591874 128.0 +-4.9528546 -6.3558474 -1.6614594 128.0 +-4.9875174 -6.3199606 -1.6600137 128.0 +-5.0365858 -6.3022332 -1.663525 128.0 +-5.0640821 -6.2575197 -1.6598071 128.0 +-5.0955606 -6.2180042 -1.6575351 128.0 +-5.1461129 -6.2016816 -1.661666 128.0 +-5.1891041 -6.175982 -1.6633184 128.0 +-5.2218294 -6.1380639 -1.661666 128.0 +-5.2581167 -6.104425 -1.661253 128.0 +-5.2903295 -6.0661473 -1.6596006 128.0 +-5.3365169 -6.0438409 -1.6624922 128.0 +-5.3839335 -6.0226545 -1.665797 128.0 +-5.4332604 -6.0032902 -1.6697214 128.0 +-5.4719768 -5.9720035 -1.6703409 128.0 +-5.5178328 -5.948359 -1.6732326 128.0 +-5.5662827 -5.9272289 -1.6769505 128.0 +-5.566144 -5.8546696 -1.665797 128.0 +-5.616889 -5.835916 -1.6703409 128.0 +-5.6539574 -5.802743 -1.6707541 128.0 +-5.6942654 -5.7728181 -1.6721998 128.0 +-5.7427149 -5.7509255 -1.6761242 128.0 +-5.7771983 -5.7148924 -1.6759176 128.0 +-5.8408461 -5.7073746 -1.684386 128.0 +-5.8419662 -5.6388102 -1.6744719 128.0 +-5.8743305 -5.6008329 -1.6738522 128.0 +-5.9320903 -5.5868216 -1.6806682 128.0 +-5.9676914 -5.5516505 -1.6810813 128.0 +-6.0189333 -5.5308185 -1.6860384 128.0 +-6.0505834 -5.4918098 -1.6854188 128.0 +-6.0593977 -5.432373 -1.6783962 128.0 +-6.1116605 -5.4119568 -1.6837664 128.0 +-6.1337061 -5.3646917 -1.6806682 128.0 +-6.1687288 -5.3288741 -1.6812879 128.0 +-6.2422466 -5.3258538 -1.6926479 128.0 +-6.2673264 -5.2811465 -1.6905824 128.0 +-6.288332 -5.2332029 -1.6874843 128.0 +-6.3354416 -5.2069454 -1.6916151 128.0 +-6.3194122 -5.1291256 -1.6786028 128.0 +-6.334733 -5.0774026 -1.6742653 128.0 +-6.364234 -5.0372233 -1.6738522 128.0 +-6.4435878 -5.0360389 -1.6868646 128.0 +-6.4914074 -5.0095592 -1.6914086 128.0 +-6.5220232 -4.9696341 -1.6914086 128.0 +-6.5023556 -4.8918734 -1.6781896 128.0 +-6.5063295 -4.8326297 -1.6713737 128.0 +-6.5169234 -4.7787294 -1.6664165 128.0 +-6.5746536 -4.7593083 -1.6738522 128.0 +-6.5973644 -4.7143264 -1.6721998 128.0 +-6.6829329 -4.7138009 -1.6868646 128.0 +-6.7591057 -4.7056928 -1.6990508 128.0 +-6.7862391 -4.6630225 -1.6986377 128.0 +-6.8260598 -4.628984 -1.7015294 128.0 +-6.8600264 -4.5908227 -1.7029752 128.0 +-6.4700441 -4.2725673 -1.5972238 128.0 +-6.5158119 -4.2456079 -1.6021808 128.0 +-6.903039 -4.4378457 -1.6928544 128.0 +-6.9350963 -4.3985505 -1.6940937 128.0 +-6.9602962 -4.3548765 -1.6936806 128.0 +-6.9852209 -4.311059 -1.6932676 128.0 +-7.0015125 -4.262012 -1.690789 128.0 +-6.999011 -4.2018471 -1.6837664 128.0 +-6.999404 -4.1438675 -1.6775701 128.0 +-7.0238533 -4.1003489 -1.6773635 128.0 +-6.9589949 -4.0054321 -1.6554697 128.0 +-6.9477005 -3.9423745 -1.6467947 128.0 +-6.9469962 -3.8858171 -1.6408049 128.0 +-6.9707084 -3.843118 -1.6408049 128.0 +-7.0285463 -3.8189609 -1.6490667 128.0 +-7.0846238 -3.7933147 -1.6569154 128.0 +-7.0073829 -3.6968083 -1.6329561 128.0 +-6.8762708 -3.5738673 -1.5963975 128.0 +-6.8797808 -3.5222435 -1.5920601 128.0 +-6.8951483 -3.4768794 -1.5906143 128.0 +-6.8856812 -3.4192736 -1.5833852 128.0 +-6.8915892 -3.3696525 -1.5798739 128.0 +-6.9033194 -3.3230588 -1.5778085 128.0 +-6.9421468 -3.2894375 -1.5821459 128.0 +-6.9737272 -3.2521558 -1.584831 128.0 +-7.0735836 -3.2460363 -1.6034201 128.0 +-7.3011432 -3.2963934 -1.6515453 128.0 +-7.3060308 -3.2447803 -1.648034 128.0 +-6.4516044 -2.8179905 -1.4466519 128.0 +-7.325521 -3.1463835 -1.64349 128.0 +-7.3582091 -3.1070857 -1.6465882 128.0 +-7.3798466 -3.0630035 -1.6472079 128.0 +-7.437458 -3.0335555 -1.6560893 128.0 +-7.5276799 -3.0166192 -1.6724064 128.0 +-7.5688086 -2.9793341 -1.6775701 128.0 +-7.5896845 -2.9338951 -1.6781896 128.0 +-7.6084585 -2.8876178 -1.6783962 128.0 +-7.6773777 -2.8600087 -1.6899627 128.0 +-7.7048903 -2.8165431 -1.6922348 128.0 +-7.734921 -2.7738383 -1.6951264 128.0 +-7.7564106 -2.7279489 -1.6961591 128.0 +-7.7591281 -2.6755202 -1.693061 128.0 +-7.8319407 -2.6469731 -1.7056602 128.0 +-7.866611 -2.60502 -1.7097912 128.0 +-7.8991995 -2.5621369 -1.713509 128.0 +-7.9380851 -2.5210252 -1.7186726 128.0 +-7.9720907 -2.4780803 -1.7228036 128.0 +-8.0358229 -2.4439242 -1.733544 128.0 +-8.0759878 -2.4021041 -1.7391207 128.0 +-8.1337929 -2.3650742 -1.7486218 128.0 +-8.1406221 -2.3129818 -1.7469695 128.0 +-8.1999149 -2.2755492 -1.7568836 128.0 +-8.2420549 -2.2328694 -1.76308 128.0 +-8.2697887 -2.1860065 -1.7661781 128.0 +-8.2839937 -2.1354671 -1.7663847 128.0 +-8.1536522 -2.048589 -1.7351964 128.0 +-8.2649078 -2.0227149 -1.756677 128.0 +-8.3894739 -1.9987271 -1.7810495 128.0 +-8.4816456 -1.9657731 -1.7983993 128.0 +-8.5966339 -1.9369251 -1.8207062 128.0 +-8.9103899 -1.9502621 -1.8859746 128.0 +-9.1107311 -1.9356173 -1.9266642 128.0 +-9.189517 -1.8935035 -1.9411224 128.0 +-9.2681265 -1.8504952 -1.9555806 128.0 +-9.2629757 -1.790435 -1.9520693 128.0 +-9.2785959 -1.7344638 -1.9531021 128.0 +-9.3728323 -1.6926301 -1.9710715 128.0 +-9.3232794 -1.6246709 -1.9582657 128.0 +-9.3263178 -1.566299 -1.9568199 128.0 +-9.3193331 -1.5063894 -1.9533086 128.0 +-9.3458033 -1.4518831 -1.9570265 128.0 +-9.356472 -1.3947996 -1.9574395 128.0 +-9.2951145 -1.3274008 -1.9425682 128.0 +-9.338953 -1.2752416 -1.9502105 128.0 +-9.3815308 -1.2224677 -1.957646 128.0 +-9.400507 -1.1663269 -1.9601246 128.0 +-9.3899956 -1.1065625 -1.9564068 128.0 +-9.3868847 -1.0478399 -1.9543413 128.0 +-9.403841 -0.99135208 -1.9566133 128.0 +-9.3961153 -0.93227953 -1.9537216 128.0 +-9.3997107 -0.87442714 -1.9533086 128.0 +-9.3961258 -0.81597292 -1.9514498 128.0 +-9.4263124 -0.76035041 -1.9568199 128.0 +-9.3937225 -0.69973385 -1.9489712 128.0 +-9.3890543 -0.64148128 -1.9471122 128.0 +-9.3918371 -0.58379829 -1.9469057 128.0 +-9.4216185 -0.52763838 -1.9524825 128.0 +-9.4002485 -0.46859956 -1.9473188 128.0 +-9.4332495 -0.41223744 -1.9537216 128.0 +-9.4228907 -0.35387045 -1.9510366 128.0 +-9.4180384 -0.29583073 -1.9495908 128.0 +-8.8513432 0.64729095 -1.9457129 128.0 +-8.8656883 0.70305771 -1.9498609 128.0 +-8.8563461 0.75702715 -1.9487693 128.0 +-8.8748579 0.81349534 -1.9540088 128.0 +-8.8813534 0.86907709 -1.9566286 128.0 +-8.8525591 0.92112875 -1.9513891 128.0 +-8.8428602 0.97500134 -1.9505159 128.0 +-8.8367109 1.0292418 -1.9505159 128.0 +-8.8118267 1.081183 -1.9463679 128.0 +-8.8166409 1.13673 -1.9489876 128.0 +-8.8027306 1.1898905 -1.9474595 128.0 +-8.7865677 1.2426496 -1.9454947 128.0 +-8.7932577 1.2986802 -1.9487693 128.0 +-8.7851238 1.3526101 -1.9487693 128.0 +-8.7458248 1.4015439 -1.9417833 128.0 +-8.7351351 1.4548599 -1.9413466 128.0 +-8.7500839 1.5125892 -1.9468045 128.0 +-8.7175846 1.5621161 -1.9415649 128.0 +-8.7279854 1.6193179 -1.9461496 128.0 +-8.7140512 1.6721052 -1.9452763 128.0 +-8.6557665 1.7160469 -1.9343606 128.0 +-8.6450739 1.7691253 -1.9343606 128.0 +-8.6245079 1.8201209 -1.9321774 128.0 +-8.6579952 1.8827577 -1.9424382 128.0 +-8.6319952 1.9326466 -1.9391636 128.0 +-8.6237783 1.9864519 -1.9400368 128.0 +-8.6370659 2.0454042 -1.9459312 128.0 +-8.6736584 2.1103649 -1.9572835 128.0 +-8.6037416 2.1493471 -1.9441848 128.0 +-8.6102419 2.2071896 -1.9487693 128.0 +-8.5757742 2.2545183 -1.9439664 128.0 +-8.5570679 2.3058255 -1.9428748 128.0 +-8.5418177 2.3580275 -1.9426565 128.0 +-8.5140419 2.4066768 -1.9396001 128.0 +-8.4850531 2.4548025 -1.9363254 128.0 +-8.4838667 2.5109758 -1.9396001 128.0 +-8.4626961 2.5612879 -1.9382902 128.0 +-8.4412279 2.6114345 -1.9369804 128.0 +-8.4017839 2.6558232 -1.9315225 128.0 +-8.4252615 2.7202239 -1.94091 128.0 +-8.3982172 2.768507 -1.9385086 128.0 +-8.3634987 2.81407 -1.9343606 128.0 +-8.3516121 2.8672366 -1.9356705 128.0 +-8.3182058 2.9129419 -1.9319592 128.0 +-8.3194742 2.9708209 -1.9365437 128.0 +-8.3295155 3.0321643 -1.9433115 128.0 +-8.273242 3.0692945 -1.9343606 128.0 +-8.2652073 3.1241424 -1.9369804 128.0 +-8.2513466 3.1769025 -1.9382902 128.0 +-8.1999006 3.2150002 -1.9306493 128.0 +-8.2126455 3.2782819 -1.9385086 128.0 +-8.1779108 3.3227327 -1.9350156 128.0 +-8.1483517 3.3691187 -1.9328324 128.0 +-8.1419172 3.4251091 -1.9363254 128.0 +-8.1010113 3.4665537 -1.9315225 128.0 +-8.0751143 3.5142477 -1.930431 128.0 +-8.0480452 3.5613594 -1.9291211 128.0 +-7.9993439 3.5986595 -1.9225717 128.0 +-7.9513764 3.6359026 -1.9162406 128.0 +-7.9112186 3.6763954 -1.9118743 128.0 +-7.8796878 3.7207005 -1.9096912 128.0 +-8.0168371 3.8458207 -1.9494243 128.0 +-7.9825621 3.8898075 -1.9468045 128.0 +-7.8824568 3.901046 -1.9278113 128.0 +-7.8845286 3.9624882 -1.9343606 128.0 +-7.8235607 3.9921579 -1.9251914 128.0 +-7.7902536 4.0355973 -1.9230083 128.0 +-7.7558446 4.0783243 -1.9206069 128.0 +-7.7401443 4.1308918 -1.9230083 128.0 +-7.6897683 4.1648254 -1.9166772 128.0 +-7.6435447 4.2006478 -1.9114376 128.0 +-7.6696148 4.2764659 -1.9247549 128.0 +-7.6423812 4.3229647 -1.9245365 128.0 +-7.60217 4.3620033 -1.9210435 128.0 +-7.5533342 4.395802 -1.9153674 128.0 +-7.5094128 4.4321432 -1.9110011 128.0 +-7.5155683 4.4981875 -1.9197336 128.0 +-7.4586291 4.5264935 -1.9120927 128.0 +-7.4465051 4.5818925 -1.9162406 128.0 +-7.4314981 4.6357627 -1.9197336 128.0 +-7.3592024 4.653625 -1.908163 128.0 +-7.3329744 4.700273 -1.9088179 128.0 +-7.2917218 4.7372026 -1.9055432 128.0 +-7.2739277 4.7893691 -1.9085996 128.0 +-7.2541437 4.8404121 -1.9112194 128.0 +-7.2129903 4.8771772 -1.908163 128.0 +-7.14429 4.8948631 -1.897684 128.0 +-7.1253433 4.9463997 -1.9007403 128.0 +-7.1004453 4.9939575 -1.9022685 128.0 +-7.0895367 5.0515914 -1.9077264 128.0 +-7.0433745 5.0841427 -1.9035784 128.0 +-7.0057449 5.1226554 -1.9018319 128.0 +-6.9781013 5.1684499 -1.9029235 128.0 +-6.9376712 5.2047267 -1.900522 128.0 +-6.9320207 5.2672749 -1.9079447 128.0 +-6.8841047 5.2978044 -1.9035784 128.0 +-6.8422332 5.3327446 -1.9009587 128.0 +-6.8262339 5.3879309 -1.9057615 128.0 +-6.7922831 5.4291053 -1.9055432 128.0 +-6.7474661 5.4614687 -1.9022685 128.0 +-6.7228842 5.5101919 -1.9048883 128.0 +-6.7047162 5.5644293 -1.9094728 128.0 +-6.6906166 5.6224179 -1.9153674 128.0 +-6.6500468 5.6583047 -1.9136208 128.0 +-6.6078105 5.6926317 -1.9114376 128.0 +-6.5529027 5.7157469 -1.9055432 128.0 +-6.5155139 5.7539091 -1.9048883 128.0 +-6.5200934 5.8295593 -1.9168955 128.0 +-6.5399036 5.9198909 -1.9337057 128.0 +-6.4667687 5.9262767 -1.9225717 128.0 +-6.4717722 6.0043464 -1.9352338 128.0 +-6.3999581 6.0112014 -1.9245365 128.0 +-6.3502259 6.0382519 -1.9206069 128.0 +-6.2968879 6.0615344 -1.9155856 128.0 +-6.2449012 6.0857525 -1.9110011 128.0 +-6.2421732 6.1582284 -1.9219167 128.0 +-6.2180772 6.2102079 -1.926283 128.0 +-6.2045565 6.2732258 -1.9341424 128.0 +-6.1707211 6.3160648 -1.9356705 128.0 +-6.1054249 6.3264194 -1.9271562 128.0 +-6.0759172 6.3736525 -1.9302126 128.0 +-6.0373635 6.4115243 -1.930431 128.0 +-6.0012326 6.4520216 -1.9315225 128.0 +-5.9714327 6.4995036 -1.9347973 128.0 +-5.9288173 6.5331302 -1.933924 128.0 +-5.8951321 6.5766535 -1.9361072 128.0 +-5.8313823 6.5863948 -1.9282478 128.0 +-5.794713 6.6264596 -1.9295577 128.0 +-5.7718029 6.6825719 -1.9356705 128.0 +-5.7382898 6.7267718 -1.9382902 128.0 +-5.7157674 6.7842464 -1.9448397 128.0 +-5.6796489 6.825942 -1.9468045 128.0 +-5.6128802 6.8305011 -1.938072 128.0 +-5.5880785 6.8860321 -1.9441848 128.0 +-5.5383997 6.9110508 -1.9415649 128.0 +-5.5176873 6.9724555 -1.9494243 128.0 +-5.469995 7.0000281 -1.9476777 128.0 +-5.4388614 7.0489135 -1.952044 128.0 +-5.3990555 7.0868111 -1.9533539 128.0 +-5.346086 7.1073265 -1.9498609 128.0 +-5.3064475 7.1454806 -1.9513891 128.0 +-5.2700038 7.188138 -1.9542271 128.0 +-5.2338076 7.2314076 -1.9572835 128.0 +-5.1853676 7.2578263 -1.9557554 128.0 +-5.1334267 7.2791381 -1.9529172 128.0 +-5.0970273 7.3225145 -1.956192 128.0 +-5.0531063 7.3552604 -1.9566286 128.0 +-5.0106177 7.3901663 -1.9577202 128.0 +-4.9722319 7.4313164 -1.9605583 128.0 +-4.9217024 7.4543552 -1.9585934 128.0 +-4.879066 7.4893208 -1.9599034 128.0 +-4.8346033 7.5215797 -1.9605583 128.0 +-4.8087382 7.5832472 -1.9690725 128.0 +-4.7512517 7.5952349 -1.9644879 128.0 +-4.70046 7.6176004 -1.9627414 128.0 +-4.656167 7.6504669 -1.963833 128.0 +-4.6000986 7.6638308 -1.9599034 128.0 +-4.5455332 7.6793141 -1.9566286 128.0 +-4.5229187 7.7492046 -1.9675443 128.0 +-4.4791784 7.7835779 -1.9692907 128.0 +-4.431335 7.8109155 -1.9692907 128.0 +-4.3914204 7.8524389 -1.9730021 128.0 +-4.3304396 7.8561592 -1.9671077 128.0 +-4.3017144 7.9186006 -1.9762769 128.0 +-4.2571898 7.9525905 -1.9782417 128.0 +-4.2201481 8.0010061 -1.9839178 128.0 +-4.1655769 8.0163574 -1.9812981 128.0 +-4.1296473 8.0678291 -1.9878474 128.0 +-4.0660119 8.0651293 -1.9808614 128.0 +-4.0194855 8.0960445 -1.9823896 128.0 +-3.957736 8.0960054 -1.9762769 128.0 +-3.9287167 8.163228 -1.9869742 128.0 +-3.8844018 8.1995277 -1.9900305 128.0 +-3.8241229 8.2019796 -1.984791 128.0 +-3.7826748 8.2448044 -1.989594 128.0 +-3.7416475 8.2892075 -1.9948335 128.0 +-3.6903195 8.3111181 -1.9946152 128.0 +-3.6556523 8.3711681 -2.0037844 128.0 +-3.5988297 8.380887 -2.0007279 128.0 +-3.5609972 8.4351788 -2.0085871 128.0 +-3.5043123 8.4451513 -2.0057492 128.0 +-3.4439552 8.4457092 -2.0007279 128.0 +-3.4018645 8.4911423 -2.0066223 128.0 +-3.3471992 8.5054989 -2.0050943 128.0 +-3.2896724 8.5122223 -2.0018196 128.0 +-3.2456863 8.5541458 -2.0070591 128.0 +-3.1781571 8.533659 -1.9974532 128.0 +-3.1294191 8.5630827 -1.9998547 128.0 +-3.0827441 8.5986595 -2.0037844 128.0 +-3.0328379 8.625699 -2.0057492 128.0 +-2.9817622 8.6496811 -2.0070591 128.0 +-2.9264467 8.6613426 -2.0055308 128.0 +-2.8772321 8.6911793 -2.008369 128.0 +-2.8175313 8.6891756 -2.0037844 128.0 +-2.7703614 8.7258329 -2.008369 128.0 +-2.7185054 8.7482595 -2.0096788 128.0 +-2.6613708 8.7535706 -2.0070591 128.0 +-2.6073318 8.7687998 -2.0068407 128.0 +-2.5529339 8.7827587 -2.0064042 128.0 +-2.4981964 8.7954416 -2.0057492 128.0 +-2.4460068 8.8171873 -2.0072773 128.0 +-2.3918593 8.8320303 -2.0072773 128.0 +-2.3498325 8.8927727 -2.0179746 128.0 +-2.2991176 8.9221449 -2.0214677 128.0 +-2.2393396 8.9162064 -2.0168831 128.0 +-2.1753173 8.891861 -2.0081506 128.0 +-2.1209428 8.9059906 -2.008369 128.0 +-2.0669172 8.921689 -2.0090239 128.0 +-2.0078499 8.9151621 -2.0046575 128.0 +-1.9524844 8.9244547 -2.0040026 128.0 +-1.8999168 8.9467669 -2.0064042 128.0 +-1.8489194 8.9773731 -2.0107703 128.0 +-1.7876928 8.9579239 -2.0037844 128.0 +-1.7360241 8.9859715 -2.007714 128.0 +-1.6803172 8.993577 -2.0070591 128.0 +-1.6266609 9.0123615 -2.0090239 128.0 +-1.5718335 9.0250568 -2.0096788 128.0 +-1.5154587 9.0287571 -2.008369 128.0 +-1.463141 9.0571537 -2.0127351 128.0 +-1.4114293 9.0910339 -2.0184114 128.0 +-1.3528913 9.0811834 -2.0142634 128.0 +-1.3025169 9.1269922 -2.0227776 128.0 +-1.2488631 9.1522169 -2.0267072 128.0 +-1.1914238 9.1500301 -2.0245242 128.0 +-1.1299802 9.1145554 -2.0149183 128.0 +-1.0738051 9.119379 -2.0144818 128.0 +-1.0154524 9.1044588 -2.0096788 128.0 +-0.96314275 9.1444864 -2.0173197 128.0 +-0.9068228 9.1482821 -2.0168831 128.0 +-0.85103363 9.1575603 -2.0177565 128.0 +-0.79819649 9.201499 -2.026489 128.0 +-0.73968768 9.180933 -2.0208127 128.0 +-0.68312377 9.1823788 -2.0201578 128.0 +-0.62656999 9.1834764 -2.0195029 128.0 +-0.56984746 9.181304 -2.018193 128.0 +-0.51219684 9.1612434 -2.0129535 128.0 +-0.45491067 9.1427708 -2.0081506 128.0 +-0.39846396 9.1375904 -2.0064042 128.0 +-0.34337232 9.166194 -2.0122986 128.0 +-0.28648424 9.147644 -2.007714 128.0 +-0.23091204 9.1716681 -2.0127351 128.0 +-0.17487128 9.1855965 -2.0155733 128.0 +-0.11854362 9.1894236 -2.0162282 128.0 +-0.061968293 9.1616783 -2.009897 128.0 +-0.0057579996 9.1735964 -2.012517 128.0 +0.050453264 9.1597977 -2.0094604 128.0 +0.10650646 9.1466303 -2.0066223 128.0 +0.16295911 9.1643429 -2.0107703 128.0 +0.21921085 9.1641464 -2.0109887 128.0 +0.27511296 9.1518984 -2.0085871 128.0 +0.33172336 9.1627169 -2.0114253 128.0 +0.38764861 9.1536837 -2.009897 128.0 +0.44418642 9.1589308 -2.0116436 128.0 +0.50149709 9.1764956 -2.0162282 128.0 +0.55684388 9.1576605 -2.0127351 128.0 +0.61295843 9.1530972 -2.012517 128.0 +0.66839623 9.139431 -2.0103338 128.0 +0.72631669 9.1585054 -2.0155733 128.0 +0.77925217 9.1159563 -2.0070591 128.0 +0.83668846 9.1275234 -2.0107703 128.0 +0.89210713 9.1163902 -2.0094604 128.0 +0.9459039 9.0903616 -2.0048759 128.0 +1.0059465 9.1231861 -2.0136085 128.0 +1.0587417 9.0897017 -2.0074956 128.0 +1.114971 9.0869083 -2.008369 128.0 +1.1704564 9.07796 -2.0079322 128.0 +1.2249581 9.061904 -2.0059674 128.0 +1.2795804 9.0474539 -2.0044394 128.0 +1.3349277 9.0384665 -2.004221 128.0 +1.3905102 9.0310698 -2.0044394 128.0 +1.4460522 9.0233316 -2.0046575 128.0 +1.5034769 9.026803 -2.0074956 128.0 +1.5580043 9.0125999 -2.0064042 128.0 +1.6244717 9.0653067 -2.0205944 128.0 +1.6706231 9.0043154 -2.0090239 128.0 +1.7258412 8.9938955 -2.0090239 128.0 +1.7741575 8.9486761 -2.0011647 128.0 +1.8341223 8.9624786 -2.0068407 128.0 +1.8880724 8.9462824 -2.0057492 128.0 +1.9485325 8.9602747 -2.0116436 128.0 +1.9855546 8.8681593 -1.9933053 128.0 +2.0504518 8.9014549 -2.0037844 128.0 +2.0915308 8.8317308 -1.9906855 128.0 +2.1629944 8.8898449 -2.0070591 128.0 +2.2075615 8.8366423 -1.9978899 128.0 +2.2704687 8.8569613 -2.0057492 128.0 +2.3183169 8.8183241 -2.000073 128.0 +2.3695872 8.7935686 -1.9976716 128.0 +2.4198618 8.7656946 -1.9946152 128.0 +2.4738669 8.7516212 -1.9948335 128.0 +2.5315893 8.7503376 -1.9981081 128.0 +2.5821848 8.7243462 -1.9957067 128.0 +2.6421726 8.7298203 -2.0007279 128.0 +2.6769331 8.6528482 -1.9865376 128.0 +2.7396858 8.6669645 -1.9937419 128.0 +2.7958133 8.6592779 -1.9959251 128.0 +2.8504212 8.646594 -1.9970165 128.0 +2.8968842 8.6095181 -1.992432 128.0 +2.9521925 8.5989647 -1.9941785 128.0 +2.9887664 8.5346394 -1.9832629 128.0 +3.0798175 8.6245813 -2.0090239 128.0 +3.1093035 8.5413342 -1.9937419 128.0 +3.1487505 8.4873285 -1.985446 128.0 +3.2090523 8.4897556 -1.9906855 128.0 +3.2354789 8.4034271 -1.9747486 128.0 +3.3097861 8.4415598 -1.9887207 128.0 +3.3437867 8.3766842 -1.9780233 128.0 +3.3899777 8.3433533 -1.9749669 128.0 +3.4601307 8.3683863 -1.9861009 128.0 +3.5015714 8.3236113 -1.9804248 128.0 +3.5452814 8.2849236 -1.9762769 128.0 +3.5968292 8.2648039 -1.9767134 128.0 +3.6439183 8.2345476 -1.9747486 128.0 +3.7003832 8.2253828 -1.9780233 128.0 +3.7467241 8.1936483 -1.9758402 128.0 +3.7808852 8.1359921 -1.9673259 128.0 +3.8465738 8.1461706 -1.9756218 128.0 +3.899863 8.1294537 -1.9773684 128.0 +3.9424019 8.0904589 -1.973657 128.0 +4.0084229 8.09935 -1.981953 128.0 +4.0519071 8.062396 -1.9788966 128.0 +4.090209 8.0156527 -1.9734387 128.0 +4.1280904 7.9687433 -1.9679809 128.0 +4.1814508 7.9519005 -1.9701641 128.0 +4.2025886 7.8744411 -1.9570652 128.0 +4.261518 7.8682413 -1.9620864 128.0 +4.3031349 7.8299727 -1.95903 128.0 +4.3615556 7.8221717 -1.963833 128.0 +4.4056249 7.7884679 -1.9620864 128.0 +4.4470158 7.7502856 -1.9592483 128.0 +4.4827037 7.7026124 -1.9540088 128.0 +4.5278969 7.6716008 -1.9531356 128.0 +4.5829043 7.6570702 -1.9566286 128.0 +4.623724 7.6187954 -1.9540088 128.0 +4.6765232 7.6002545 -1.9566286 128.0 +4.7225528 7.5705886 -1.9564103 128.0 +4.7631779 7.5323973 -1.9540088 128.0 +4.7971911 7.4841342 -1.9489876 128.0 +4.8446178 7.4570131 -1.9496425 128.0 +4.8833041 7.4165516 -1.9468045 128.0 +4.918426 7.3710265 -1.9426565 128.0 +4.9652014 7.3431339 -1.9433115 128.0 +5.0178881 7.3237996 -1.9463679 128.0 +5.0638447 7.2944756 -1.9468045 128.0 +5.1202993 7.2800283 -1.9513891 128.0 +5.1444817 7.2198648 -1.9435297 128.0 +5.1915417 7.1921191 -1.9446213 128.0 +5.2517052 7.1821837 -1.9507341 128.0 +5.2765045 7.1239486 -1.9435297 128.0 +5.3072305 7.0742664 -1.9387269 128.0 +5.3422704 7.0306916 -1.9356705 128.0 +5.3817377 6.9931402 -1.9343606 128.0 +5.4275455 6.9638348 -1.9354522 128.0 +5.4592876 6.9166141 -1.9315225 128.0 +5.5004058 6.8814621 -1.9310859 128.0 +5.5609479 6.8703361 -1.9376353 128.0 +5.5794878 6.8074079 -1.9293394 128.0 +5.6230221 6.7752972 -1.9299943 128.0 +5.6205339 6.6883755 -1.9147124 128.0 +5.6760149 6.6708555 -1.9197336 128.0 +5.7002764 6.6166816 -1.9140575 128.0 +5.7465425 6.5881991 -1.9160223 128.0 +5.8043027 6.5725622 -1.9219167 128.0 +5.8464732 6.5390062 -1.9225717 128.0 +5.884521 6.5008397 -1.9219167 128.0 +5.9368277 6.4782786 -1.9260647 128.0 +5.9558873 6.4195542 -1.919297 128.0 +5.9831371 6.3700867 -1.9153674 128.0 +6.0120225 6.322648 -1.9120927 128.0 +6.0486736 6.2835312 -1.9114376 128.0 +6.0768971 6.235817 -1.908163 128.0 +6.1088758 6.1921606 -1.9061981 128.0 +6.1495137 6.1573224 -1.9070715 128.0 +6.1920362 6.1242771 -1.9085996 128.0 +6.2155352 6.0725303 -1.9042333 128.0 +6.2695336 6.0505404 -1.9094728 128.0 +6.2938251 5.9998384 -1.9055432 128.0 +6.3362055 5.9664588 -1.9072897 128.0 +6.3712664 5.9261389 -1.9068531 128.0 +6.4125395 5.8915553 -1.9083813 128.0 +6.4557962 5.858655 -1.9105644 128.0 +6.4821749 5.8104658 -1.9077264 128.0 +6.4767833 5.7343616 -1.8955008 128.0 +6.5111122 5.6938705 -1.8952825 128.0 +6.5459266 5.6538119 -1.8952825 128.0 +6.5782671 5.6116409 -1.8946276 128.0 +6.615561 5.5736866 -1.8955008 128.0 +6.6631403 5.5442228 -1.8994304 128.0 +6.6955256 5.5019951 -1.8989938 128.0 +6.7041502 5.4405193 -1.8917894 128.0 +6.7351217 5.3974504 -1.8911345 128.0 +6.7642865 5.3529954 -1.8900429 128.0 +6.7885451 5.3047814 -1.8876415 128.0 +6.815558 5.2588553 -1.8861133 128.0 +6.8562369 5.2234411 -1.8885148 128.0 +6.9123373 5.1994557 -1.8952825 128.0 +6.9386253 5.1528726 -1.8937542 128.0 +6.9669638 5.1078935 -1.892881 128.0 +6.9831524 5.0541797 -1.888733 128.0 +7.0370622 5.0276852 -1.8950641 128.0 +7.0821357 4.994534 -1.8989938 128.0 +7.0950255 4.9387217 -1.8941909 128.0 +7.0841699 4.8669171 -1.8830569 128.0 +7.1607518 4.8551154 -1.8957192 128.0 +7.1928411 4.8127146 -1.8963741 128.0 +7.2222357 4.7684894 -1.8963741 128.0 +7.2309151 4.7107701 -1.8909162 128.0 +7.2654309 4.6700063 -1.8924444 128.0 +7.3013663 4.6300411 -1.8944092 128.0 +7.3428769 4.5934329 -1.8979023 128.0 +7.3700929 4.5477786 -1.897684 128.0 +7.3878546 4.4963841 -1.8950641 128.0 +7.4211621 4.4544835 -1.8965924 128.0 +7.4651518 4.4188037 -1.9009587 128.0 +7.5157251 4.3866858 -1.9070715 128.0 +7.5399623 4.3390279 -1.9064165 128.0 +7.5503159 4.2835345 -1.9022685 128.0 +7.5662355 4.2314115 -1.8996488 128.0 +7.558723 4.1665382 -1.8911345 128.0 +7.6561828 4.1592011 -1.9094728 128.0 +7.6290736 4.0840578 -1.8961557 128.0 +7.6462202 4.0330729 -1.8941909 128.0 +7.6864109 3.9941785 -1.8981205 128.0 +7.7498674 3.9669447 -1.9079447 128.0 +7.6790733 3.8714447 -1.8841485 128.0 +7.7035575 3.8246877 -1.8843668 128.0 +7.7435393 3.7854886 -1.8885148 128.0 +7.7771735 3.742981 -1.8911345 128.0 +7.8238068 3.7064681 -1.897029 128.0 +7.8959355 3.6814792 -1.9092546 128.0 +7.9361167 3.641098 -1.9136208 128.0 +7.9387393 3.583504 -1.9088179 128.0 +7.9338188 3.5228479 -1.9022685 128.0 +7.9678063 3.4795666 -1.9053249 128.0 +7.9916968 3.4317665 -1.9059799 128.0 +7.9919243 3.3739388 -1.9009587 128.0 +7.9908423 3.3158641 -1.8957192 128.0 +8.0444736 3.2804003 -1.9037967 128.0 +8.0590153 3.2288017 -1.9024868 128.0 +8.105011 3.189652 -1.9088179 128.0 +8.1408148 3.1461906 -1.9127476 128.0 +8.1490173 3.0920274 -1.9101278 128.0 +8.159605 3.0389035 -1.908163 128.0 +8.1808481 2.9897845 -1.9088179 128.0 +8.1595364 2.9253747 -1.8994304 128.0 +8.1865387 2.8784895 -1.9016136 128.0 +8.2049694 2.8285215 -1.9018319 128.0 +8.2582283 2.7903018 -1.9103462 128.0 +8.2538853 2.7325263 -1.9053249 128.0 +8.2909203 2.6884496 -1.9101278 128.0 +8.3156309 2.6401834 -1.9120927 128.0 +8.3288784 2.5882416 -1.9114376 128.0 +8.3474045 2.5379391 -1.9120927 128.0 +8.3590775 2.4855607 -1.9112194 128.0 +8.3779202 2.4353125 -1.9120927 128.0 +8.3823786 2.380929 -1.9096912 128.0 +8.3742599 2.3231928 -1.9044516 128.0 +8.3930674 2.2730405 -1.9055432 128.0 +8.398365 2.2192562 -1.9035784 128.0 +8.4165487 2.1689 -1.90467 128.0 +8.4391642 2.1195922 -1.9068531 128.0 +8.4776058 2.0740285 -1.9127476 128.0 +8.4844761 2.0206161 -1.9114376 128.0 +8.5043201 1.9702793 -1.9131842 128.0 +8.5010166 1.9146321 -1.9096912 128.0 +8.5230913 1.8647277 -1.9120927 128.0 +8.5544195 1.8166504 -1.9166772 128.0 +8.5558472 1.7621599 -1.914494 128.0 +8.5330019 1.7029488 -1.9068531 128.0 +8.5749102 1.6566639 -1.9140575 128.0 +8.5647688 1.6002568 -1.9094728 128.0 +8.6205254 1.5559886 -1.9199519 128.0 +8.6164503 1.5007223 -1.9168955 128.0 +8.6341581 1.4492773 -1.9188603 128.0 +8.6014614 1.3895849 -1.9094728 128.0 +8.6580429 1.3442609 -1.9203886 128.0 +8.6757812 1.2925476 -1.9225717 128.0 +8.6661587 1.2368102 -1.918642 128.0 +8.6726179 1.1834805 -1.9184238 128.0 +8.6622972 1.1279781 -1.914494 128.0 +8.6738977 1.0754057 -1.9155856 128.0 +8.6948709 1.0238734 -1.9188603 128.0 +8.7514229 0.97612208 -1.9302126 128.0 +8.7426901 0.92087454 -1.9269379 128.0 +8.7161283 0.86404043 -1.9197336 128.0 +8.7329264 0.81162518 -1.9223534 128.0 +8.7377415 0.75802565 -1.9223534 128.0 +8.7334738 0.70369339 -1.9203886 128.0 +8.7561178 0.65146583 -1.9245365 128.0 +8.7648182 0.59805858 -1.9256281 128.0 +8.7537127 0.54336244 -1.9223534 128.0 +8.7900105 0.49148843 -1.9297761 128.0 +8.7606964 0.43594837 -1.9225717 128.0 +8.718358 0.38023552 -1.9125292 128.0 +8.753684 0.32797143 -1.9199519 128.0 +8.7691879 0.2746796 -1.9230083 128.0 +8.7804632 0.22111209 -1.9251914 128.0 +8.7582378 0.16678916 -1.9199519 128.0 +8.7522659 0.11295922 -1.9184238 128.0 +8.7635288 0.059325453 -1.9208251 128.0 +8.7812939 0.0055611487 -1.9247549 128.0 +8.7801867 -0.048314463 -1.9245365 128.0 +8.8470554 -0.10298029 -1.9396001 128.0 +8.7935686 -0.15631932 -1.9278113 128.0 +8.8343945 -0.21128146 -1.9371986 128.0 +8.8241529 -0.2652193 -1.9352338 128.0 +8.8135824 -0.31903943 -1.933269 128.0 +8.8056087 -0.37286407 -1.9319592 128.0 +8.8236246 -0.42788252 -1.9365437 128.0 +8.8130379 -0.48158821 -1.9347973 128.0 +8.8050461 -0.53535819 -1.9337057 128.0 +8.738306 -0.58512849 -1.9195153 128.0 +8.7549896 -0.64023203 -1.9240999 128.0 +8.7645159 -0.69502139 -1.9271562 128.0 +8.781477 -0.75061768 -1.9319592 128.0 +8.7980862 -0.80644816 -1.9367621 128.0 +8.8055983 -0.86165416 -1.9396001 128.0 +8.8302345 -0.91880292 -1.9463679 128.0 +8.8079405 -0.97114658 -1.9426565 128.0 +8.8066626 -1.025738 -1.9437481 128.0 +8.7914858 -1.0786846 -1.9417833 128.0 +8.7876053 -1.1329825 -1.9424382 128.0 +8.7766199 -1.1863575 -1.9415649 128.0 +8.7807703 -1.2418289 -1.9441848 128.0 +8.7449884 -1.2915448 -1.9378536 128.0 +8.7205029 -1.3426521 -1.9341424 128.0 +8.7043915 -1.3948984 -1.9323958 128.0 +8.7418737 -1.455983 -1.9428748 128.0 +8.697196 -1.5034397 -1.9347973 128.0 +8.6887684 -1.5569485 -1.9350156 128.0 +8.673295 -1.6091636 -1.9337057 128.0 +8.6622992 -1.6621677 -1.9334874 128.0 +8.6500225 -1.7149075 -1.9330508 128.0 +8.6680183 -1.773824 -1.9396001 128.0 +8.6541071 -1.8263717 -1.9389452 128.0 +8.6045952 -1.8711382 -1.9302126 128.0 +8.5520048 -1.9147263 -1.9208251 128.0 +8.4887438 -1.9553287 -1.9090363 128.0 +8.3227539 -1.9709265 -1.8736694 128.0 +8.1436224 -1.9813306 -1.8352462 128.0 +7.8823166 -1.9690243 -1.7778298 128.0 +7.8020263 -1.9998959 -1.7621112 128.0 +7.7329817 -2.032836 -1.7490124 128.0 +7.5677209 -2.0390935 -1.7136456 128.0 +7.4986272 -2.0699012 -1.7005467 128.0 +7.3702826 -2.0832074 -1.6736943 128.0 +7.3189278 -2.1172667 -1.6647433 128.0 +7.2505918 -2.1457875 -1.6518629 128.0 +6.9832411 -2.1133103 -1.5924816 128.0 +6.9589553 -2.1526566 -1.5898618 128.0 +6.6729918 -2.1090989 -1.525896 128.0 +6.2875419 -2.0297208 -1.4383522 128.0 +6.2731156 -2.0676508 -1.4379156 128.0 +6.0614605 -2.0391667 -1.3909781 128.0 +5.9897652 -2.0560329 -1.3770061 128.0 +5.8250728 -2.0395081 -1.3409843 128.0 +5.6580572 -2.020057 -1.3043077 128.0 +5.6693969 -2.0634184 -1.3099838 128.0 +5.6429057 -2.0930729 -1.3067091 128.0 +5.4044952 -2.0424025 -1.2527857 128.0 +5.366363 -2.0657043 -1.2466729 128.0 +5.3072538 -2.0804195 -1.2355388 128.0 +5.1348815 -2.0492496 -1.1971157 128.0 +5.0652556 -2.0575681 -1.1833619 128.0 +4.8893127 -2.0210962 -1.1438472 128.0 +4.7769775 -2.009042 -1.1196144 128.0 +4.693687 -2.0079761 -1.1023676 128.0 +4.5604849 -1.9841509 -1.0728953 128.0 +4.5821338 -2.027107 -1.0811912 128.0 +4.6247845 -2.0800145 -1.0947267 128.0 +4.510766 -2.0620751 -1.0698389 128.0 +4.4228091 -2.0547469 -1.0512823 128.0 +4.4224715 -2.0876813 -1.0543386 128.0 +4.3638282 -2.092823 -1.0429863 128.0 +4.3684487 -2.1281116 -1.0473526 128.0 +4.277472 -2.1163414 -1.0279226 128.0 +4.3446202 -2.182874 -1.0480075 128.0 +4.3424444 -2.2152586 -1.0508456 128.0 +4.3019099 -2.2279427 -1.0440779 128.0 +4.2259736 -2.2215869 -1.0283593 128.0 +4.25875 -2.2722933 -1.0401483 128.0 +4.2198439 -2.2849007 -1.0338172 128.0 +4.2279792 -2.3229733 -1.0394933 128.0 +4.2562599 -2.3726401 -1.050409 128.0 +4.2229357 -2.3881385 -1.0456061 128.0 +4.203125 -2.4110904 -1.0442961 128.0 +4.1604199 -2.4206328 -1.0370919 128.0 +4.0875049 -2.4118817 -1.0220282 128.0 +4.0918865 -2.4484463 -1.0270494 128.0 +4.115159 -2.4968023 -1.0370919 128.0 +4.0474038 -2.4897799 -1.0233381 128.0 +4.0419855 -2.5207667 -1.0259578 128.0 +4.053659 -2.5627358 -1.0331622 128.0 +4.0501804 -2.5954614 -1.0364369 128.0 +4.0374522 -2.622391 -1.0373101 128.0 +4.0652952 -2.6761005 -1.0490991 128.0 +4.0114608 -2.6760733 -1.0390567 128.0 +4.0232573 -2.7197723 -1.0466976 128.0 +3.9871738 -2.7311671 -1.0414581 128.0 +4.0024037 -2.7778449 -1.0501907 128.0 +3.9685228 -2.7905591 -1.0456061 128.0 +3.9266903 -2.7972984 -1.0388384 128.0 +3.9387267 -2.8424764 -1.046916 128.0 +3.8747387 -2.8325996 -1.0340354 128.0 +3.9325612 -2.9120913 -1.0549935 128.0 +3.8435893 -2.8828642 -1.035127 128.0 +3.7931967 -2.881592 -1.0259578 128.0 +3.8960786 -2.9976747 -1.0600147 128.0 +3.8791511 -3.0227242 -1.0604514 128.0 +3.8053837 -3.0029297 -1.0447328 128.0 +3.7678313 -3.0109875 -1.0392749 128.0 +3.8516769 -3.1169493 -1.0687473 128.0 +3.7653131 -3.0854588 -1.0493174 128.0 +3.8349123 -3.1820571 -1.0750784 128.0 +3.7338896 -3.1370838 -1.0512823 128.0 +3.7376084 -3.179543 -1.0580499 128.0 +3.690676 -3.1788459 -1.0499723 128.0 +3.6321282 -3.1674285 -1.0384017 128.0 +3.6828384 -3.251678 -1.0593598 128.0 +3.6882768 -3.2969832 -1.0670009 128.0 +3.6838923 -3.333962 -1.0718037 128.0 +3.6238005 -3.3202348 -1.0597965 128.0 +3.565448 -3.3072248 -1.0482259 128.0 +3.5450881 -3.3290398 -1.0482259 128.0 +3.4736826 -3.3023055 -1.0325073 128.0 +3.4449189 -3.3154349 -1.0298876 128.0 +3.434993 -3.3467278 -1.0331622 128.0 +3.5019147 -3.454109 -1.0606697 128.0 +3.3418851 -3.3369007 -1.0167887 128.0 +3.4311316 -3.4683716 -1.0517188 128.0 +3.3681908 -3.4467738 -1.0384017 128.0 +3.3686612 -3.4898491 -1.0453877 128.0 +3.2455218 -3.4037809 -1.0124224 128.0 +3.2178862 -3.4165254 -1.0102392 128.0 +3.2327476 -3.4747965 -1.0220282 128.0 +3.2377715 -3.5233154 -1.0307608 128.0 +3.2311738 -3.5597389 -1.035782 128.0 +3.2587676 -3.6347318 -1.0523738 128.0 +3.1995361 -3.6130066 -1.03993 128.0 +3.1573954 -3.6097949 -1.0331622 128.0 +3.1645248 -3.6630771 -1.0432047 128.0 +3.1584535 -3.7017307 -1.0488808 128.0 +3.1312799 -3.7158163 -1.0473526 128.0 +3.1202788 -3.7492139 -1.0515006 128.0 +3.0272152 -3.6830812 -1.0268312 128.0 +2.9725881 -3.6621788 -1.0154788 128.0 +3.0074172 -3.7519395 -1.0360003 128.0 +3.0236957 -3.8200684 -1.0501907 128.0 +2.9971955 -3.8347044 -1.0490991 128.0 +2.9873188 -3.8707948 -1.0541203 128.0 +2.9753377 -3.9045787 -1.0584866 128.0 +2.921411 -3.8829837 -1.0473526 128.0 +2.8893864 -3.8898664 -1.0442961 128.0 +2.8620028 -3.9027996 -1.0429863 128.0 +2.8277047 -3.9060557 -1.0390567 128.0 +2.8127596 -3.9360385 -1.0425497 128.0 +2.7812455 -3.9428546 -1.0397116 128.0 +2.7547705 -3.9566417 -1.0388384 128.0 +2.7508833 -4.0032339 -1.046916 128.0 +2.7295532 -4.0248842 -1.0482259 128.0 +2.6885285 -4.0172224 -1.0416764 128.0 +2.6428626 -4.0018797 -1.0331622 128.0 +2.6187904 -4.0188384 -1.0333805 128.0 +2.580893 -4.0143065 -1.0279226 128.0 +2.5687535 -4.0498481 -1.0331622 128.0 +2.5485125 -4.0729804 -1.035127 128.0 +2.5198867 -4.082727 -1.0335988 128.0 +2.535368 -4.1648068 -1.0510639 128.0 +2.4957061 -4.1568551 -1.0449511 128.0 +2.4592195 -4.1536136 -1.0401483 128.0 +2.4828687 -4.2529135 -1.0619797 128.0 +2.427042 -4.2164688 -1.0486624 128.0 +2.3621283 -4.1625242 -1.030979 128.0 +2.3270187 -4.1599035 -1.0266128 128.0 +2.3278251 -4.2219667 -1.0388384 128.0 +2.3037388 -4.2396011 -1.0397116 128.0 +2.3002441 -4.2958174 -1.050409 128.0 +2.2260494 -4.2192116 -1.0274861 128.0 +2.2163138 -4.263967 -1.0353453 128.0 +2.1741054 -4.2462111 -1.0274861 128.0 +2.1330774 -4.2298412 -1.0200634 128.0 +2.1370189 -4.3031654 -1.035127 128.0 +2.0998631 -4.2942777 -1.0296692 128.0 +2.0459735 -4.2499204 -1.0154788 128.0 +2.0298824 -4.2835617 -1.0207183 128.0 +2.008508 -4.3065505 -1.0233381 128.0 +1.9747227 -4.3028269 -1.0194085 128.0 +1.9486853 -4.315752 -1.0196267 128.0 +1.9285023 -4.3418989 -1.0231198 128.0 +1.9092429 -4.3706436 -1.0272677 128.0 +1.8939373 -4.4091787 -1.0338172 128.0 +1.8520497 -4.3856516 -1.0253029 128.0 +1.8262267 -4.3996372 -1.0259578 128.0 +1.817615 -4.4559441 -1.0368736 128.0 +1.6886514 -4.2133536 -0.97574574 128.0 +1.6852736 -4.280848 -0.98949951 128.0 +1.6325998 -4.2228346 -0.97312599 128.0 +1.6779505 -4.4207377 -1.0180986 128.0 +1.155405 -3.1002679 -0.70045233 128.0 +1.1383696 -3.1127987 -0.7017622 128.0 +1.2934083 -3.6057003 -0.81725007 128.0 +1.264788 -3.5951552 -0.81288379 128.0 +1.5510933 -4.4978075 -1.024648 128.0 +1.5375178 -4.5488458 -1.0344721 128.0 +1.4951684 -4.5146503 -1.0242114 128.0 +1.0507066 -3.2379963 -0.72184706 128.0 +1.0302285 -3.2425222 -0.72141045 128.0 +1.0407082 -3.346638 -0.74433339 128.0 +1.0207216 -3.3548281 -0.74476999 128.0 +0.99122095 -3.3310938 -0.73778397 128.0 +0.96885717 -3.3305533 -0.73625576 128.0 +0.94627094 -3.3289251 -0.73450923 128.0 +0.87054795 -3.1353045 -0.68822676 128.0 +0.85180366 -3.1424708 -0.68866342 128.0 +1.2170081 -4.6034999 -1.0255213 128.0 +1.2089407 -4.6893191 -1.0436412 128.0 +1.1639884 -4.6322856 -1.028796 128.0 +1.1304442 -4.6184855 -1.023993 128.0 +1.1066036 -4.6443224 -1.0283593 128.0 +1.070381 -4.6177492 -1.0207183 128.0 +0 -0 -0 128.0 +0.79413766 -3.6266525 -0.79083413 128.0 +1.5490229 -7.2933698 -1.6282851 128.0 +1.5125053 -7.3428826 -1.6374542 128.0 +0.93032837 -4.6589375 -1.0231198 128.0 +0.90560889 -4.68468 -1.0277044 128.0 +0.87684721 -4.6901484 -1.0277044 128.0 +0.84718639 -4.6906385 -1.0266128 128.0 +1.2696526 -7.2887187 -1.6154045 128.0 +1.2394336 -7.3829913 -1.6350527 128.0 +1.1959753 -7.4020181 -1.6376724 128.0 +0.72463661 -4.6637282 -1.0161338 128.0 +1.1001661 -7.3833189 -1.6302499 128.0 +0.66197872 -4.6345911 -1.0076195 128.0 +0.63998806 -4.6859455 -1.0183169 128.0 +0.60908359 -4.6733332 -1.0146055 128.0 +0.57643896 -4.6450224 -1.0074012 128.0 +0.86986053 -7.3854852 -1.6239188 128.0 +0.81836879 -7.3354001 -1.6114749 128.0 +0.7779386 -7.3839574 -1.6212989 128.0 +0.73732775 -7.4361768 -1.6319963 128.0 +0.68564427 -7.3754568 -1.6173693 128.0 +0.64416611 -7.4232759 -1.6271935 128.0 +0.59860563 -7.4270887 -1.6271935 128.0 +0.55063742 -7.3985062 -1.619989 128.0 +0.50761765 -7.4367962 -1.6278484 128.0 +0.45944291 -7.3988624 -1.6186792 128.0 +0.41430748 -7.406414 -1.6197708 128.0 +0.36919338 -7.4156394 -1.6212989 128.0 +0.32669476 -7.4869871 -1.6367992 128.0 +0.27696279 -7.3874302 -1.6140946 128.0 +0.23153789 -7.3860641 -1.6134397 128.0 +0.18782645 -7.4517336 -1.6278484 128.0 +0.14136185 -7.4137177 -1.6191158 128.0 +0.060281403 -4.6285391 -0.9958306 128.0 +0.050373483 -7.4148941 -1.6191158 128.0 +0.0034819739 -4.6377134 -0.9977954 128.0 +-0.040677451 -7.4247127 -1.6212989 128.0 +-0.086233862 -7.4243231 -1.6212989 128.0 +-0.083036982 -4.7013893 -1.0122041 128.0 +-0.11183568 -4.6988401 -1.0117675 128.0 +-0.14090069 -4.7058692 -1.013514 128.0 +-0.26840991 -7.419971 -1.6212989 128.0 +-0.31293902 -7.3947845 -1.6160594 128.0 +-0.35844886 -7.395649 -1.6167144 128.0 +-0.40387434 -7.3942847 -1.6169326 128.0 +-0.44935593 -7.3936157 -1.6173693 128.0 +-0.49451783 -7.3877983 -1.6167144 128.0 +-0.34625503 -4.7421956 -1.023993 128.0 +-0.5886175 -7.4249501 -1.6265385 128.0 +-0.63141817 -7.389112 -1.6193341 128.0 +-0.67701262 -7.3880138 -1.619989 128.0 +-0.72280771 -7.388577 -1.6210806 128.0 +-0.76853406 -7.3878856 -1.6219538 128.0 +-0.81449324 -7.3888507 -1.6232638 128.0 +-0.85913688 -7.3778982 -1.6219538 128.0 +-0.90415269 -7.3705502 -1.6215173 128.0 +-0.94898582 -7.3619604 -1.6208624 128.0 +-0.99453264 -7.3589001 -1.6215173 128.0 +-1.0392569 -7.3497605 -1.6208624 128.0 +-1.0854763 -7.3509684 -1.6226088 128.0 +-1.1341276 -7.3673177 -1.6278484 128.0 +-1.1805476 -7.3679285 -1.6295949 128.0 +-1.2255737 -7.3595834 -1.6293765 128.0 +-1.2707082 -7.3519249 -1.6293765 128.0 +-1.3164839 -7.3478317 -1.6302499 128.0 +-1.3629696 -7.3472915 -1.6319963 128.0 +-1.4089463 -7.3435822 -1.6330879 128.0 +-1.4554983 -7.3424563 -1.6348344 128.0 +-1.5030684 -7.3458161 -1.6376724 128.0 +-1.5481132 -7.3364553 -1.6376724 128.0 +-1.5789903 -7.2619758 -1.6228272 128.0 +-1.6230925 -7.2502456 -1.6223905 128.0 +-1.6682062 -7.2430029 -1.6230454 128.0 +-1.712167 -7.2307315 -1.6226088 128.0 +-1.7528085 -7.2049189 -1.6191158 128.0 +-1.8014803 -7.2120166 -1.6232638 128.0 +-1.8469107 -7.2055535 -1.6243553 128.0 +-1.8928261 -7.2006917 -1.6258836 128.0 +-1.9357029 -7.1842308 -1.624792 128.0 +-1.9802676 -7.1740999 -1.6252286 128.0 +-2.0277023 -7.1740217 -1.6280667 128.0 +-2.0667992 -7.1445718 -1.624137 128.0 +-2.1144776 -7.1448555 -1.6271935 128.0 +-2.1650653 -7.1541629 -1.6324329 128.0 +-2.2034395 -7.1230307 -1.6282851 128.0 +-2.2535777 -7.1298466 -1.6330879 128.0 +-2.2954834 -7.1103129 -1.631778 128.0 +-2.3445699 -7.1127763 -1.6357076 128.0 +-2.396575 -7.1232285 -1.6416022 128.0 +-2.4342141 -7.0908532 -1.6374542 128.0 +-2.4815488 -7.0868354 -1.6400739 128.0 +-1.3509763 -3.78514 -0.8593846 128.0 +-1.37451 -3.7776964 -0.85960293 128.0 +-2.6159883 -7.0518513 -1.642912 128.0 +-2.6633501 -7.0466208 -1.6455318 128.0 +-2.6928577 -6.9946303 -1.6370175 128.0 +-2.7467718 -7.0061388 -1.6437852 128.0 +-2.7770422 -6.9574327 -1.6361443 128.0 +-2.820415 -6.9420705 -1.6365809 128.0 +-2.8603466 -6.9183216 -1.6350527 128.0 +-2.9133415 -6.9258256 -1.6411655 128.0 +-2.9515584 -6.8979511 -1.638764 128.0 +-2.996944 -6.886869 -1.6405106 128.0 +-3.0727212 -6.9442005 -1.6590672 128.0 +-1.4087988 -3.1332858 -0.72883308 128.0 +-1.4292156 -3.1272449 -0.72948802 128.0 +-3.1699901 -6.8218651 -1.6431303 128.0 +-1.6154478 -3.4227204 -0.80698937 128.0 +-1.6296635 -3.3986666 -0.80349636 128.0 +-1.6436452 -3.3745677 -0.80000329 128.0 +-1.6617223 -3.3591716 -0.79869342 128.0 +-1.6849325 -3.3541436 -0.80000329 128.0 +-1.7116928 -3.3559105 -0.8030597 128.0 +-1.737191 -3.3548758 -0.80546117 128.0 +-1.7704639 -3.3683364 -0.81157392 128.0 +-3.5573184 -6.6657672 -1.650553 128.0 +-3.6004763 -6.6481047 -1.6516446 128.0 +-3.6426108 -6.6284528 -1.6522995 128.0 +-3.6713297 -6.5846705 -1.6468416 128.0 +-3.7188721 -6.57476 -1.6501163 128.0 +-3.7499142 -6.5357366 -1.6459684 128.0 +-3.7884731 -6.5100741 -1.6453135 128.0 +-3.8288429 -6.4875464 -1.6455318 128.0 +-3.8730893 -6.4714665 -1.6474966 128.0 +-3.9339938 -6.4826164 -1.6566658 128.0 +-3.965512 -6.4450583 -1.6531727 128.0 +-3.9993007 -6.4114981 -1.6507713 128.0 +-4.0583897 -6.4181781 -1.6590672 128.0 +-4.0824189 -6.3693314 -1.6527361 128.0 +-4.1187649 -6.3400707 -1.6516446 128.0 +-4.1973104 -6.374989 -1.6677997 128.0 +-2.0741758 -3.1096783 -0.79651028 128.0 +-2.0954044 -3.1001263 -0.79738355 128.0 +-4.3117352 -6.2934303 -1.6669265 128.0 +-4.3241091 -6.2291813 -1.6566658 128.0 +-4.3712335 -6.215302 -1.6601588 128.0 +-4.3990927 -6.1740594 -1.6562291 128.0 +-4.449461 -6.1643572 -1.6610321 128.0 +-4.4860487 -6.1353645 -1.6605954 128.0 +-4.5189629 -6.10145 -1.6588489 128.0 +-4.5516295 -6.0673628 -1.6571023 128.0 +-4.6118026 -6.0696211 -1.6656166 128.0 +-4.665626 -6.0628614 -1.6717294 128.0 +-4.675139 -5.9987168 -1.661687 128.0 +-4.720324 -5.9806409 -1.6647433 128.0 +-4.7599788 -5.9553761 -1.6658349 128.0 +-4.8093262 -5.9419847 -1.6704195 128.0 +-4.8327022 -5.8965154 -1.6658349 128.0 +-4.8669214 -5.8644986 -1.66518 128.0 +-4.9379778 -5.876359 -1.6774056 128.0 +-4.9688816 -5.840004 -1.6756591 128.0 +-5.0129032 -5.819016 -1.6784971 128.0 +-5.0369654 -5.7749119 -1.6745675 128.0 +-5.0800576 -5.7526736 -1.6771872 128.0 +-5.1113563 -5.71703 -1.6758773 128.0 +-5.135859 -5.6739855 -1.6723844 128.0 +-5.2035484 -5.6783342 -1.6833 128.0 +-5.2409477 -5.6491604 -1.6841732 128.0 +-5.2781844 -5.619741 -1.6850466 128.0 +-5.2997885 -5.5738134 -1.6808985 128.0 +-5.3616409 -5.5700116 -1.6898494 128.0 +-5.3998041 -5.5412016 -1.6911592 128.0 +-5.42205 -5.4961562 -1.687448 128.0 +-5.4370494 -5.4441428 -1.6815535 128.0 +-5.4877 -5.4278331 -1.6870114 128.0 +-5.5257883 -5.3988323 -1.6885395 128.0 +-5.5665359 -5.3722782 -1.690941 128.0 +-5.6029272 -5.3413877 -1.6920326 128.0 +-5.6341748 -5.3055706 -1.6915959 128.0 +-5.6902065 -5.29283 -1.6988003 128.0 +-5.7024517 -5.2393317 -1.6926875 128.0 +-5.7409968 -5.210145 -1.6946523 128.0 +-5.7459674 -5.1507239 -1.6865747 128.0 +-5.792809 -5.128953 -1.6911592 128.0 +-5.8197627 -5.0894585 -1.6898494 128.0 +-5.8523588 -5.0549288 -1.690286 128.0 +-5.8788099 -5.0151248 -1.6889762 128.0 +-5.8885722 -4.9613562 -1.6828634 128.0 +-5.9234052 -4.9288754 -1.6841732 128.0 +-5.9082932 -4.855269 -1.6710745 128.0 +-5.9523726 -4.8306069 -1.6752224 128.0 +-5.949152 -4.7677555 -1.6658349 128.0 +-5.9737024 -4.7275295 -1.664525 128.0 +-6.0525842 -4.7298374 -1.6787155 128.0 +-6.1000371 -4.7069154 -1.683955 128.0 +-6.1878052 -4.7143359 -1.7005467 128.0 +-6.2212954 -4.6797986 -1.7018566 128.0 +-6.2498927 -4.6415377 -1.7018566 128.0 +-6.2640872 -4.5927172 -1.697927 128.0 +-6.3032184 -4.5622039 -1.7009834 128.0 +-6.3437986 -4.5325174 -1.7044765 128.0 +-6.3826566 -4.50138 -1.7075328 128.0 +-6.4149623 -4.4654765 -1.7088428 128.0 +-6.4333925 -4.4199533 -1.7064413 128.0 +-6.4337344 -4.3623266 -1.6992369 128.0 +-6.4449687 -4.312459 -1.695089 128.0 +-6.4941125 -4.2878847 -1.7012017 128.0 +-6.5366554 -4.2586088 -1.705568 128.0 +-6.534749 -4.2004833 -1.6981454 128.0 +-6.5496845 -4.1535153 -1.6953073 128.0 +-6.57091 -4.110662 -1.6942157 128.0 +-6.5827198 -4.0620685 -1.6907227 128.0 +-6.5883455 -4.0099344 -1.6857015 128.0 +-6.6178465 -3.9724464 -1.6870114 128.0 +-6.611022 -3.913377 -1.6789337 128.0 +-6.5902367 -3.8466728 -1.6673632 128.0 +-6.5807257 -3.7871847 -1.6588489 128.0 +-6.5622454 -3.7231445 -1.6481515 128.0 +-6.5713377 -3.6751897 -1.6446586 128.0 +-6.5510297 -3.6112504 -1.6337428 128.0 +-6.5361886 -3.5509598 -1.6243553 128.0 +-6.5793643 -3.5222991 -1.6298132 128.0 +-6.5930839 -3.477766 -1.6278484 128.0 +-6.6298871 -3.4453437 -1.631778 128.0 +-6.6248403 -3.3912625 -1.6252286 128.0 +-6.6795106 -3.3676782 -1.6337428 128.0 +-6.6056418 -3.2797747 -1.610165 128.0 +-6.633533 -3.2430377 -1.6121298 128.0 +-6.6453924 -3.1984663 -1.610165 128.0 +-6.68606 -3.167655 -1.6154045 128.0 +-6.7151003 -3.1311054 -1.617806 128.0 +-6.7723284 -3.1073372 -1.6271935 128.0 +-6.7983832 -3.0689354 -1.62894 128.0 +-6.8153019 -3.0263717 -1.6285033 128.0 +-6.4813609 -2.8306661 -1.5424877 128.0 +-6.8366823 -2.9359658 -1.624792 128.0 +-6.9543681 -2.9360778 -1.6490247 128.0 +-6.9902806 -2.9008296 -1.653391 128.0 +-7.0296364 -2.8667243 -1.6586306 128.0 +-7.0661187 -2.8311563 -1.6632152 128.0 +-7.182344 -2.8266864 -1.6870114 128.0 +-7.2122974 -2.7874866 -1.6900678 128.0 +-7.256639 -2.7535625 -1.6966171 128.0 +-7.2770562 -2.7103467 -1.6974903 128.0 +-7.3329649 -2.6800432 -1.7068778 128.0 +-7.3713193 -2.6429 -1.7121174 128.0 +-7.3800316 -2.595032 -1.7103709 128.0 +-7.4004288 -2.5512898 -1.7114625 128.0 +-7.4797392 -2.5273795 -1.7265261 128.0 +-7.5821943 -2.5102556 -1.7470475 128.0 +-7.5974541 -2.4636848 -1.7470475 128.0 +-7.6356821 -2.424401 -1.7525054 128.0 +-7.6578698 -2.3798196 -1.754252 128.0 +-7.6863337 -2.3370433 -1.7575266 128.0 +-7.7154961 -2.2942851 -1.7610196 128.0 +-7.7603536 -2.2558854 -1.768224 128.0 +-7.7928247 -2.2135568 -1.7725903 128.0 +-7.801558 -2.1643953 -1.7714987 128.0 +-7.6432514 -2.0700796 -1.7317656 128.0 +-7.6869459 -2.0313659 -1.7389699 128.0 +-7.8344054 -2.0189672 -1.7701888 128.0 +-7.919528 -1.9891529 -1.786999 128.0 +-8.0140562 -1.9606872 -1.8059922 128.0 +-8.1484032 -1.9406259 -1.8341547 128.0 +-8.4073458 -1.9478259 -1.8909162 128.0 +-8.5714684 -1.9304898 -1.9258463 128.0 +-8.6603746 -1.8947443 -1.9435297 128.0 +-8.7377062 -1.8555485 -1.9585934 128.0 +-8.7718668 -1.8066217 -1.963833 128.0 +-8.8019276 -1.7565818 -1.9681993 128.0 +-8.79146 -1.6984713 -1.9633963 128.0 +-8.8516006 -1.6538095 -1.9747486 128.0 +-8.8452549 -1.5965213 -1.9710373 128.0 +-8.8164272 -1.535525 -1.9623047 128.0 +-8.8179836 -1.4801081 -1.9605583 128.0 +-8.8355703 -1.4273738 -1.9625231 128.0 +-8.8152313 -1.368645 -1.9559736 128.0 +-8.8495245 -1.3184092 -1.9618682 128.0 +-8.836194 -1.2610542 -1.9570652 128.0 +-8.8157234 -1.2029898 -1.9507341 128.0 +-8.810359 -1.1472384 -1.947896 128.0 +-8.8520975 -1.0974754 -1.9557554 128.0 +-8.8480034 -1.0418854 -1.9533539 128.0 +-8.8910856 -0.99168134 -1.9616498 128.0 +-8.9086494 -0.93833315 -1.9642695 128.0 +-8.8841343 -0.88067269 -1.9575019 128.0 +-8.9029741 -0.82740659 -1.9605583 128.0 +-8.9244118 -0.77419508 -1.9642695 128.0 +-8.9017572 -0.71723038 -1.9581568 128.0 +-8.8884726 -0.66129571 -1.9542271 128.0 +-8.920598 -0.60866749 -1.9605583 128.0 +-8.8871527 -0.5516277 -1.9522623 128.0 +-8.8893957 -0.4970324 -1.952044 128.0 +-8.8601141 -0.44088244 -1.9448397 128.0 +-8.9094505 -0.38854432 -1.9553187 128.0 +-8.9272699 -0.33445218 -1.9588118 128.0 +-8.9135475 -0.2791824 -1.9553187 128.0 +-8.9180193 -0.22455795 -1.9559736 128.0 +-8.9719172 -0.17083022 -1.9677626 128.0 +-8.9152241 -0.11504091 -1.9548821 128.0 +-8.9264965 -0.060407203 -1.9572835 128.0 +-8.9179163 -0.0056297039 -1.9553187 128.0 +-8.9168072 0.049084213 -1.9551004 128.0 +-8.916338 0.10379579 -1.9551004 128.0 +-8.9067526 0.15834621 -1.9531356 128.0 +-8.9085398 0.2130644 -1.9537905 128.0 +-8.9099913 0.26781049 -1.9544455 128.0 +-8.8847742 0.32162583 -1.949206 128.0 +-8.8611832 0.37522462 -1.9444031 128.0 +-8.8460426 0.42897263 -1.9415649 128.0 +-8.8705282 0.48473734 -1.9476777 128.0 +-8.8732309 0.53951287 -1.9489876 128.0 +-8.856122 0.59303325 -1.9459312 128.0 +-8.4116583 -0.21105523 -1.9414054 128.0 +-8.4020901 -0.1592349 -1.9388843 128.0 +-8.3902559 -0.10751491 -1.9359046 128.0 +-8.3868647 -0.056005061 -1.9349878 128.0 +-8.3821831 -0.0045403079 -1.9338418 128.0 +-8.3986006 0.046983674 -1.9377382 128.0 +-8.5266314 0.10001668 -1.9679927 128.0 +-8.5063925 0.15198635 -1.9634087 128.0 +-8.4897308 0.2038047 -1.9597415 128.0 +-8.478591 0.25560001 -1.9574494 128.0 +-8.457408 0.30691376 -1.9528655 128.0 +-8.4505033 0.35859558 -1.9517194 128.0 +-8.4374495 0.40992105 -1.9491982 128.0 +-8.4279718 0.46131247 -1.9475938 128.0 +-8.4172096 0.51254392 -1.9457603 128.0 +-8.4119644 0.56405115 -1.9453019 128.0 +-8.4112568 0.61586845 -1.9459895 128.0 +-8.3937349 0.66638952 -1.9427806 128.0 +-8.3982172 0.71862644 -1.9448434 128.0 +-8.3936491 0.77014339 -1.9448434 128.0 +-8.3306408 0.81594115 -1.9310914 128.0 +-8.3535538 0.86996424 -1.9377382 128.0 +-8.3712788 0.92376554 -1.9432391 128.0 +-8.3635197 0.97488809 -1.9427806 128.0 +-8.3467531 1.0248829 -1.9402595 128.0 +-8.3557529 1.0780704 -1.9439267 128.0 +-8.3374062 1.1277549 -1.9411763 128.0 +-8.3216553 1.1776639 -1.9391134 128.0 +-8.3335314 1.2315476 -1.9436975 128.0 +-8.3142729 1.2808801 -1.9409471 128.0 +-8.3129845 1.3329499 -1.9425515 128.0 +-8.2950478 1.3823327 -1.9402595 128.0 +-8.290247 1.4338675 -1.9411763 128.0 +-8.2726698 1.483163 -1.9391134 128.0 +-8.2576714 1.5328295 -1.9377382 128.0 +-8.2414188 1.5821846 -1.9361339 128.0 +-8.251606 1.6366992 -1.9409471 128.0 +-8.1918211 1.6771494 -1.9290286 128.0 +-8.201376 1.7316036 -1.9338418 128.0 +-8.1867924 1.7810663 -1.932925 128.0 +-8.1909075 1.8346692 -1.9365922 128.0 +-8.1415548 1.8761519 -1.9274242 128.0 +-8.1298895 1.9260722 -1.9274242 128.0 +-8.1207552 1.9766104 -1.9281118 128.0 +-8.1793003 2.0440979 -1.9453019 128.0 +-8.1496325 2.0898952 -1.9411763 128.0 +-8.1253586 2.1368909 -1.9384258 128.0 +-8.117733 2.1882267 -1.939801 128.0 +-8.0760059 2.2302232 -1.932925 128.0 +-8.0631056 2.2799995 -1.9331542 128.0 +-8.0321341 2.3245609 -1.9290286 128.0 +-8.0139856 2.3726962 -1.9281118 128.0 +-7.9946184 2.4204144 -1.9269658 128.0 +-8.0019341 2.4763281 -1.9324666 128.0 +-7.953177 2.5148172 -1.9242154 128.0 +-7.9329653 2.5620742 -1.9230694 128.0 +-7.9466772 2.620455 -1.9304038 128.0 +-7.9461317 2.6744432 -1.9343002 128.0 +-7.9406195 2.7269428 -1.9370506 128.0 +-7.90169 2.7678921 -1.9315498 128.0 +-7.8368907 2.7993 -1.9196314 128.0 +-7.8451772 2.8566575 -1.926049 128.0 +-7.8320646 2.9064338 -1.9271951 128.0 +-7.8341141 2.9620082 -1.9322374 128.0 +-7.8157921 3.0100217 -1.9322374 128.0 +-7.7881141 3.0543683 -1.9299455 128.0 +-7.7764583 3.104985 -1.931779 128.0 +-7.704957 3.1313884 -1.9184854 128.0 +-7.7197795 3.1927409 -1.9271951 128.0 +-7.6973524 3.2389162 -1.9265074 128.0 +-7.682703 3.288383 -1.9278827 128.0 +-7.6454234 3.3280807 -1.9235278 128.0 +-7.6391006 3.3812323 -1.9271951 128.0 +-7.6288619 3.4328339 -1.9299455 128.0 +-7.6041141 3.4779596 -1.9290286 128.0 +-7.5790997 3.5229113 -1.9281118 128.0 +-7.5203738 3.5518918 -1.9184854 128.0 +-7.5247664 3.6106007 -1.9253614 128.0 +-7.5190954 3.6648059 -1.9297162 128.0 +-7.4798923 3.7026691 -1.9253614 128.0 +-7.4509444 3.7454355 -1.923757 128.0 +-7.4226203 3.7884283 -1.9223818 128.0 +-7.3957782 3.8321102 -1.921465 128.0 +-7.3514495 3.8665442 -1.9159642 128.0 +-7.3112707 3.9028704 -1.9116094 128.0 +-7.3051591 3.9573939 -1.9164226 128.0 +-7.262826 3.9922972 -1.9116094 128.0 +-7.2602963 4.0491118 -1.9175686 128.0 +-7.223454 4.086874 -1.9143598 128.0 +-7.1568732 4.1073804 -1.903129 128.0 +-7.1163931 4.1424031 -1.8990034 128.0 +-7.0891657 4.1850009 -1.8985449 128.0 +-7.0408034 4.2149229 -1.8923565 128.0 +-7.0048232 4.2519846 -1.8896061 128.0 +-7.0266833 4.3244729 -1.9028997 128.0 +-6.9785442 4.3541112 -1.8969406 128.0 +-6.9648595 4.4051728 -1.9006078 128.0 +-6.9647408 4.4651608 -1.9081714 128.0 +-6.8800764 4.4706888 -1.8921274 128.0 +-6.8801556 4.5310211 -1.8999202 128.0 +-6.9040422 4.6077309 -1.914589 128.0 +-6.853869 4.6352844 -1.9084005 128.0 +-6.8148599 4.6700993 -1.905421 128.0 +-6.7844772 4.7107162 -1.9049625 128.0 +-6.7355413 4.738256 -1.8992325 128.0 +-6.6999998 4.7749763 -1.8973989 128.0 +-6.6950407 4.8336587 -1.9045042 128.0 +-6.6283274 4.8476429 -1.8937317 128.0 +-6.5804682 4.8748965 -1.8884602 128.0 +-6.571455 4.9309545 -1.8946486 128.0 +-6.5627751 4.9876733 -1.9010662 128.0 +-6.525877 5.0230985 -1.8992325 128.0 +-6.4903269 5.0594554 -1.8978573 128.0 +-6.45152 5.0931535 -1.8955654 128.0 +-6.4133048 5.1271729 -1.8935026 128.0 +-6.3915596 5.1743894 -1.8964821 128.0 +-6.3280725 5.1875935 -1.8868557 128.0 +-6.2983699 5.228189 -1.8875433 128.0 +-6.2549944 5.2573428 -1.8841053 128.0 +-6.2737684 5.33915 -1.8999202 128.0 +-6.228354 5.3667436 -1.8960238 128.0 +-6.1901722 5.4003801 -1.8944193 128.0 +-6.1591082 5.4401937 -1.8951069 128.0 +-6.1510081 5.5005913 -1.903129 128.0 +-6.1236358 5.5441089 -1.9051918 128.0 +-6.0643868 5.5585599 -1.8971697 128.0 +-6.0208902 5.587059 -1.8941902 128.0 +-5.9886236 5.6258965 -1.8948778 128.0 +-5.9638662 5.671927 -1.8980865 128.0 +-5.9464822 5.7252908 -1.9038166 128.0 +-5.9244852 5.7745781 -1.9081714 128.0 +-5.8868628 5.8087707 -1.9074838 128.0 +-5.8717709 5.8654184 -1.9143598 128.0 +-5.856204 5.9220996 -1.9212358 128.0 +-5.7728233 5.9098778 -1.905421 128.0 +-5.7364521 5.945188 -1.905421 128.0 +-5.7441907 6.0267758 -1.9205482 128.0 +-5.7137756 6.068995 -1.9228402 128.0 +-5.6777554 6.1053653 -1.9232986 128.0 +-5.6480889 6.1486902 -1.926049 128.0 +-5.5827823 6.1529551 -1.9164226 128.0 +-5.5351782 6.1762218 -1.9129846 128.0 +-5.5300832 6.2472386 -1.9246738 128.0 +-5.4986949 6.289113 -1.9271951 128.0 +-5.4231014 6.2800069 -1.9139014 128.0 +-5.3970995 6.3279757 -1.9184854 128.0 +-5.3794928 6.3862829 -1.9262782 128.0 +-5.329 6.4057021 -1.9221526 128.0 +-5.3143129 6.4683623 -1.9313207 128.0 +-5.2788172 6.5061393 -1.932925 128.0 +-5.2083631 6.5004272 -1.921465 128.0 +-5.1913314 6.5612688 -1.9301746 128.0 +-5.1539712 6.5968337 -1.9313207 128.0 +-5.1246939 6.6429768 -1.9356754 128.0 +-5.0767584 6.6650043 -1.932925 128.0 +-5.0515647 6.7170329 -1.9391134 128.0 +-4.9928455 6.7244577 -1.9322374 128.0 +-4.9497647 6.7526116 -1.9315498 128.0 +-4.9225049 6.8025694 -1.9372798 128.0 +-4.8902912 6.8461099 -1.9411763 128.0 +-4.8263154 6.8449631 -1.9322374 128.0 +-4.7747717 6.8608661 -1.928341 128.0 +-4.7513232 6.9173131 -1.9361339 128.0 +-4.7289996 6.9761467 -1.9446143 128.0 +-4.663373 6.9710536 -1.9349878 128.0 +-4.6253381 7.0068469 -1.9370506 128.0 +-4.5870395 7.0424361 -1.9391134 128.0 +-4.5516357 7.0827317 -1.9425515 128.0 +-4.5206008 7.1302557 -1.9480523 128.0 +-4.4679904 7.1438303 -1.9441558 128.0 +-4.4210057 7.1661406 -1.9427806 128.0 +-4.3946624 7.2222357 -1.9508027 128.0 +-4.344254 7.2390494 -1.9480523 128.0 +-4.3071909 7.2781339 -1.9514903 128.0 +-4.2403741 7.2665944 -1.9411763 128.0 +-4.2170672 7.3295979 -1.951261 128.0 +-4.1801791 7.3697286 -1.9551575 128.0 +-4.1334553 7.3926902 -1.9544699 128.0 +-4.0875468 7.4170609 -1.9542407 128.0 +-4.0428891 7.4437127 -1.954699 128.0 +-3.9833586 7.4426341 -1.947823 128.0 +-3.9476063 7.485877 -1.9528655 128.0 +-3.9011507 7.5090942 -1.9526362 128.0 +-3.8700805 7.5623503 -1.9604291 128.0 +-3.8306165 7.5998611 -1.9640963 128.0 +-3.7886734 7.632813 -1.9666175 128.0 +-3.737066 7.6462965 -1.9640963 128.0 +-3.7027414 7.6953959 -1.9709723 128.0 +-3.6517034 7.7100534 -1.9689095 128.0 +-3.5878751 7.6970263 -1.9597415 128.0 +-3.5446382 7.7277431 -1.9620335 128.0 +-3.5091679 7.7759633 -1.9689095 128.0 +-3.4681039 7.8124728 -1.9728059 128.0 +-3.4239974 7.842526 -1.9750979 128.0 +-3.3819566 7.8776984 -1.9787651 128.0 +-3.3161438 7.8570504 -1.9682219 128.0 +-3.279808 7.9060202 -1.9755563 128.0 +-3.2224159 7.9043636 -1.9700555 128.0 +-3.1691494 7.912241 -1.9670758 128.0 +-3.1208975 7.9324431 -1.9673051 128.0 +-3.0721662 7.9514432 -1.9673051 128.0 +-3.022974 7.969234 -1.9670758 128.0 +-2.988625 8.0268564 -1.9769315 128.0 +-2.9443281 8.0587568 -1.9803694 128.0 +-2.8921974 8.0693417 -1.9785359 128.0 +-2.8461816 8.0970364 -1.981057 128.0 +-2.7881985 8.0904217 -1.9750979 128.0 +-2.7469156 8.1322765 -1.9812863 128.0 +-2.6997182 8.1572943 -1.9833491 128.0 +-2.6514163 8.1792612 -1.9847243 128.0 +-2.5970562 8.1823883 -1.9815155 128.0 +-2.5450683 8.1925917 -1.9801403 128.0 +-2.5069251 8.2480993 -1.989996 128.0 +-2.4562685 8.2633266 -1.989996 128.0 +-2.4030745 8.2698298 -1.9879332 128.0 +-2.3488297 8.2722473 -1.9849535 128.0 +-2.2962067 8.2799377 -1.9833491 128.0 +-2.2524822 8.320178 -1.9897667 128.0 +-2.1934319 8.3037281 -1.9824324 128.0 +-2.1540968 8.3622742 -1.993434 128.0 +-2.091367 8.330019 -1.9824324 128.0 +-2.0524731 8.392807 -1.9945799 128.0 +-1.9849291 8.3380117 -1.9783067 128.0 +-1.9302162 8.3348618 -1.9746395 128.0 +-1.8839562 8.3683891 -1.9799111 128.0 +-1.8388132 8.4083185 -1.9867871 128.0 +-1.7853667 8.4108734 -1.9847243 128.0 +-1.7411848 8.4578981 -1.993434 128.0 +-1.6823988 8.4340582 -1.9851828 128.0 +-1.6324626 8.4537802 -1.9874747 128.0 +-1.583599 8.4799032 -1.9913712 128.0 +-1.5272161 8.4655132 -1.9856411 128.0 +-1.4804201 8.5044518 -1.9927464 128.0 +-1.4270823 8.5066557 -1.9911419 128.0 +-1.3747044 8.5142908 -1.9909127 128.0 +-1.3164639 8.4840918 -1.9817446 128.0 +-1.2695439 8.5266685 -1.989996 128.0 +-1.215139 8.5198441 -1.986558 128.0 +-1.1640235 8.5358191 -1.9886208 128.0 +-1.1138884 8.5601749 -1.9927464 128.0 +-1.0613432 8.5668488 -1.9927464 128.0 +-1.0100098 8.5838337 -1.9952675 128.0 +-0.95872343 8.6024456 -1.9982471 128.0 +-0.90439302 8.5936451 -1.9948092 128.0 +-0.8522222 8.604845 -1.9961843 128.0 +-0.79751712 8.5895586 -1.9913712 128.0 +-0.7443772 8.5894413 -1.9902251 128.0 +-0.69439399 8.6278057 -1.9982471 128.0 +-0.63970941 8.6086073 -1.9927464 128.0 +-0.58707464 8.615284 -1.993434 128.0 +-0.53281516 8.5963793 -1.9881623 128.0 +-0.48157912 8.6266985 -1.9945799 128.0 +-0.42868596 8.6304636 -1.9948092 128.0 +-0.37508684 8.6183443 -1.9913712 128.0 +-0.32314503 8.6457739 -1.9973303 128.0 +-0.26975474 8.6368923 -1.9948092 128.0 +-0.21660791 8.6325464 -1.993434 128.0 +-0.16304384 8.6025705 -1.9860995 128.0 +-0.11051928 8.623848 -1.9909127 128.0 +-0.057693902 8.637991 -1.9941216 128.0 +-0.004695117 8.6449957 -1.995726 128.0 +0.048171494 8.6127405 -1.9881623 128.0 +0.10117657 8.6259098 -1.9913712 128.0 +0.154241 8.6329117 -1.9932047 128.0 +0.20709208 8.6269379 -1.9920588 128.0 +0.26054922 8.6430178 -1.9961843 128.0 +0.31209618 8.6004009 -1.986558 128.0 +0.36613926 8.6284714 -1.9936631 128.0 +0.41850939 8.6143961 -1.9909127 128.0 +0.47215578 8.6262445 -1.9943507 128.0 +0.52596325 8.6377592 -1.9977888 128.0 +0.57556969 8.5838671 -1.9858704 128.0 +0.62851262 8.5840569 -1.9867871 128.0 +0.67878485 8.5499582 -1.9796818 128.0 +0.73546368 8.5950937 -1.9913712 128.0 +0.7856105 8.5623093 -1.9847243 128.0 +0.83832276 8.5592651 -1.9851828 128.0 +0.89213574 8.5665464 -1.9881623 128.0 +0.94105387 8.5280161 -1.9803694 128.0 +0.99448961 8.5317497 -1.9826615 128.0 +1.0499039 8.5506058 -1.9886208 128.0 +1.1024742 8.5449686 -1.9888499 128.0 +1.1524062 8.5197153 -1.9844952 128.0 +1.2054785 8.5182667 -1.9858704 128.0 +1.2615639 8.5367088 -1.9920588 128.0 +1.3105127 8.5066805 -1.9867871 128.0 +1.3611434 8.4888678 -1.9844952 128.0 +1.4141642 8.4861174 -1.9858704 128.0 +1.4642173 8.4657707 -1.98312 128.0 +1.5123566 8.4355488 -1.9780775 128.0 +1.5706592 8.4615202 -1.986558 128.0 +1.6196129 8.436429 -1.9828907 128.0 +1.6743767 8.4416094 -1.986558 128.0 +1.7243853 8.4225941 -1.9844952 128.0 +1.777038 8.4166164 -1.9856411 128.0 +1.8180972 8.3570461 -1.9739519 128.0 +1.8797636 8.3922758 -1.9851828 128.0 +1.9196401 8.3303118 -1.9730351 128.0 +1.9767752 8.3439503 -1.9792235 128.0 +2.0274751 8.329772 -1.9787651 128.0 +2.0750082 8.30301 -1.9753271 128.0 +2.1280911 8.2986078 -1.9773899 128.0 +2.1740198 8.2665663 -1.9728059 128.0 +2.2262213 8.2587099 -1.9741811 128.0 +2.2745223 8.2364502 -1.9721183 128.0 +2.330049 8.2401352 -1.9764731 128.0 +2.380295 8.2247486 -1.9762439 128.0 +2.4174545 8.1651878 -1.9652423 128.0 +2.4754059 8.1762867 -1.9716599 128.0 +2.5332966 8.1860504 -1.9778483 128.0 +2.5773158 8.1508627 -1.9730351 128.0 +2.6281772 8.1376734 -1.9737227 128.0 +2.667697 8.0899639 -1.9659299 128.0 +2.725668 8.0983515 -1.9721183 128.0 +2.7579212 8.0308409 -1.9595122 128.0 +2.8171198 8.0422459 -1.9666175 128.0 +2.8687048 8.0312252 -1.9682219 128.0 +2.9255886 8.0345087 -1.9734935 128.0 +2.9683988 7.9990678 -1.9691387 128.0 +3.0260293 8.0034657 -1.9748687 128.0 +3.0544436 7.9311543 -1.9613459 128.0 +3.0998526 7.9041076 -1.9592831 128.0 +3.1522629 7.8948822 -1.9618043 128.0 +3.1951489 7.861865 -1.9583663 128.0 +3.2277057 7.8043327 -1.9487399 128.0 +3.2811937 7.7978392 -1.9521779 128.0 +3.3339572 7.7891927 -1.9551575 128.0 +3.3708112 7.7435994 -1.9487399 128.0 +3.4198372 7.7263308 -1.9496566 128.0 +3.4400227 7.6448402 -1.9340711 128.0 +3.5479941 7.7572546 -1.9686803 128.0 +3.5778842 7.697382 -1.9588246 128.0 +3.6150715 7.6541595 -1.9533238 128.0 +3.6623895 7.6327114 -1.9535531 128.0 +3.704037 7.5995955 -1.9508027 128.0 +3.7406664 7.5566607 -1.945531 128.0 +3.7970166 7.5535693 -1.9508027 128.0 +3.8468328 7.537065 -1.9526362 128.0 +3.9015145 7.5297408 -1.9569911 128.0 +3.9567039 7.5228901 -1.961575 128.0 +3.9468713 7.3937073 -1.9336126 128.0 +3.9907732 7.3667831 -1.932925 128.0 +4.0443392 7.357512 -1.9370506 128.0 +4.0751858 7.3070536 -1.9301746 128.0 +4.1338429 7.3064804 -1.9368215 128.0 +4.1689076 7.2640929 -1.9322374 128.0 +4.2295589 7.2661381 -1.939801 128.0 +4.2557564 7.209034 -1.9313207 128.0 +4.3189073 7.2145228 -1.9400302 128.0 +4.3630934 7.1878867 -1.9400302 128.0 +4.3729362 7.1054373 -1.9246738 128.0 +4.4473648 7.1280227 -1.9384258 128.0 +4.487896 7.095664 -1.9370506 128.0 +4.5302992 7.0663543 -1.9365922 128.0 +4.5550108 7.0098557 -1.9285703 128.0 +4.6065021 6.9947824 -1.9322374 128.0 +4.6304235 6.9380479 -1.9242154 128.0 +4.680541 6.920794 -1.9274242 128.0 +4.7179666 6.8847179 -1.9253614 128.0 +4.7257042 6.8060656 -1.9111509 128.0 +4.7718568 6.7833104 -1.9129846 128.0 +4.8099995 6.7491469 -1.9116094 128.0 +4.843914 6.7092466 -1.9086298 128.0 +4.8947577 6.6927557 -1.9125261 128.0 +4.9484777 6.6798034 -1.9175686 128.0 +4.9794402 6.6360784 -1.9136722 128.0 +5.0147643 6.5984254 -1.9116094 128.0 +5.0498142 6.5605888 -1.9095466 128.0 +5.1091228 6.5540471 -1.916881 128.0 +5.128736 6.4965978 -1.9090881 128.0 +5.1946363 6.4976993 -1.9189438 128.0 +5.2276711 6.4573812 -1.9164226 128.0 +5.2770672 6.4372277 -1.9200898 128.0 +5.284761 6.3665285 -1.9084005 128.0 +5.3387561 6.3518658 -1.9139014 128.0 +5.3549204 6.2923012 -1.9056501 128.0 +5.3985114 6.2652249 -1.9074838 128.0 +5.4253349 6.2187791 -1.9033582 128.0 +5.4517922 6.1722407 -1.8992325 128.0 +5.4778829 6.1256118 -1.8951069 128.0 +5.5120993 6.0882769 -1.893961 128.0 +5.5598755 6.0658221 -1.8976282 128.0 +5.6108932 6.0465775 -1.9024414 128.0 +5.6512208 6.015583 -1.9035873 128.0 +5.6786346 5.9709196 -1.9003786 128.0 +5.7050385 5.9254456 -1.8969406 128.0 +5.7460446 5.8952079 -1.8985449 128.0 +5.8080869 5.8861699 -1.9072546 128.0 +5.8103886 5.8166757 -1.8960238 128.0 +5.8169017 5.7521672 -1.8863974 128.0 +5.8660126 5.7299709 -1.8909813 128.0 +5.8961573 5.6891384 -1.889377 128.0 +5.9126353 5.6353917 -1.8834177 128.0 +5.9548974 5.6063461 -1.885939 128.0 +5.9792066 5.5604215 -1.8827301 128.0 +6.0031772 5.51441 -1.8795214 128.0 +6.0484333 5.487937 -1.8831885 128.0 +6.084167 5.4526701 -1.8838761 128.0 +6.1247978 5.4216881 -1.8861681 128.0 +6.1542854 5.3808012 -1.8850222 128.0 +6.1923423 5.3473916 -1.8866266 128.0 +6.1702347 5.2625504 -1.8696657 128.0 +6.2001758 5.2227101 -1.8689781 128.0 +6.2343497 5.1864357 -1.8696657 128.0 +6.290122 5.1678596 -1.8770001 128.0 +6.3338065 5.1389799 -1.8806673 128.0 +6.3781328 5.1103668 -1.8845637 128.0 +6.394866 5.059659 -1.880209 128.0 +6.4342284 5.0269184 -1.8827301 128.0 +6.4695759 4.9909115 -1.8841053 128.0 +6.4946575 4.9469919 -1.8825009 128.0 +6.5326686 4.912899 -1.8847929 128.0 +6.5962944 4.897676 -1.8946486 128.0 +6.6089511 4.8444486 -1.8896061 128.0 +6.6393404 4.8043766 -1.8898354 128.0 +6.6750307 4.7680745 -1.8916689 128.0 +6.6922288 4.7186131 -1.8882309 128.0 +6.7242517 4.6796861 -1.8891478 128.0 +6.7528391 4.6383386 -1.8891478 128.0 +6.8005085 4.6099257 -1.8946486 128.0 +6.8092499 4.5551214 -1.8891478 128.0 +6.8460073 4.5191541 -1.8916689 128.0 +6.8662667 4.472281 -1.8896061 128.0 +6.8960357 4.4316454 -1.8902937 128.0 +6.9329624 4.3955035 -1.8930441 128.0 +6.9771323 4.3637204 -1.8978573 128.0 +6.9930072 4.3141832 -1.8948778 128.0 +7.017684 4.2701817 -1.8944193 128.0 +6.9911733 4.1954842 -1.8799797 128.0 +7.0327001 4.1619282 -1.8843346 128.0 +7.0690336 4.1250758 -1.8873142 128.0 +7.1110854 4.0913329 -1.8918982 128.0 +7.1284356 4.0433006 -1.8898354 128.0 +7.1607566 4.0037608 -1.8918982 128.0 +7.182631 3.9583383 -1.8912106 128.0 +7.2341547 3.9290595 -1.8985449 128.0 +7.2512612 3.8809228 -1.8967113 128.0 +7.2689109 3.8331783 -1.8951069 128.0 +7.2845201 3.7844658 -1.8930441 128.0 +7.2894082 3.7303846 -1.8882309 128.0 +7.3199825 3.6895308 -1.8902937 128.0 +7.3607926 3.6536357 -1.8951069 128.0 +7.3804488 3.6071198 -1.8944193 128.0 +7.4077053 3.5642986 -1.8957945 128.0 +7.443511 3.5254459 -1.8994617 128.0 +7.4632382 3.4788845 -1.8990034 128.0 +7.479135 3.4305902 -1.8976282 128.0 +7.5089164 3.3886387 -1.8999202 128.0 +7.5144434 3.3357866 -1.8960238 128.0 +7.5320935 3.2884474 -1.8953362 128.0 +7.5574961 3.2444737 -1.8967113 128.0 +7.5826421 3.2003119 -1.8980865 128.0 +7.6021361 3.1537254 -1.8980865 128.0 +7.6078238 3.1015077 -1.8946486 128.0 +7.6420717 3.0609219 -1.8985449 128.0 +7.6679554 3.0168247 -1.9003786 128.0 +7.6845059 2.9690166 -1.8999202 128.0 +7.702579 2.9218094 -1.8999202 128.0 +7.7240105 2.8758509 -1.9008369 128.0 +7.7460823 2.8300736 -1.901983 128.0 +7.7706318 2.7851191 -1.9038166 128.0 +7.7793102 2.7344813 -1.9017538 128.0 +7.7913408 2.685111 -1.9006078 128.0 +7.7864599 2.6300883 -1.8953362 128.0 +7.8006029 2.5816503 -1.8948778 128.0 +7.8283339 2.5376406 -1.8978573 128.0 +7.8419018 2.48897 -1.8973989 128.0 +7.8588853 2.4413838 -1.8978573 128.0 +7.910038 2.4041576 -1.9067962 128.0 +7.9591627 2.3658407 -1.9152766 128.0 +7.9445534 2.3085382 -1.9081714 128.0 +7.9801049 2.2658641 -1.913443 128.0 +7.9807262 2.2132142 -1.9102342 128.0 +7.9622116 2.1555538 -1.9024414 128.0 +7.9846988 2.1091444 -1.9047334 128.0 +8.002203 2.0613258 -1.9058794 128.0 +8.0411339 2.0188243 -1.912297 128.0 +8.0316238 1.9641275 -1.9070253 128.0 +8.0605679 1.9188678 -1.9111509 128.0 +8.0541735 1.8651997 -1.9067962 128.0 +8.07971 1.8189524 -1.9102342 128.0 +8.0707502 1.7649741 -1.905421 128.0 +8.0728588 1.7136003 -1.9033582 128.0 +8.1118221 1.6699233 -1.9102342 128.0 +8.1448259 1.6246897 -1.915735 128.0 +8.1775789 1.5791137 -1.9212358 128.0 +8.1622362 1.5242603 -1.9152766 128.0 +8.1580248 1.471729 -1.9120678 128.0 +8.1784086 1.4236484 -1.9148182 128.0 +8.1889105 1.373762 -1.9152766 128.0 +8.2039118 1.3245763 -1.916881 128.0 +8.1695623 1.267644 -1.9067962 128.0 +8.1868143 1.2189267 -1.9090881 128.0 +8.2124481 1.1712825 -1.913443 128.0 +8.2638454 1.1269218 -1.9239862 128.0 +8.278326 1.0771998 -1.9258198 128.0 +8.2828484 1.0261452 -1.9253614 128.0 +8.2367868 0.96915853 -1.9129846 128.0 +8.2832079 0.92313033 -1.922611 128.0 +8.2848444 0.87188047 -1.9216942 128.0 +8.2755089 0.81958956 -1.9182562 128.0 +8.2261057 0.76375473 -1.905421 128.0 +8.2674875 0.71646112 -1.9141306 128.0 +8.297925 0.66782886 -1.920319 128.0 +8.2921591 0.61617941 -1.918027 128.0 +8.3210335 0.56700981 -1.9239862 128.0 +8.3117256 0.51515883 -1.9210066 128.0 +8.30404 0.46355206 -1.9184854 128.0 +8.282423 0.41138235 -1.9127554 128.0 +8.3207722 0.36212221 -1.9212358 128.0 +8.2926846 0.3099317 -1.9141306 128.0 +8.3537769 0.26089922 -1.9281118 128.0 +8.3211632 0.20878035 -1.9200898 128.0 +8.3602428 0.15843983 -1.9290286 128.0 +8.3493776 0.10698915 -1.9262782 128.0 +8.3557167 0.055795591 -1.9276534 128.0 +8.2760849 0.0044778106 -1.908859 128.0 +8.3450651 -0.04668672 -1.9251322 128.0 +8.3037424 -0.097412594 -1.9155058 128.0 +8.3068819 -0.14843094 -1.9164226 128.0 +8.3359804 -0.20012097 -1.9235278 128.0 +8.3092995 -0.2505044 -1.9175686 128.0 +8.3562431 -0.30324733 -1.9290286 128.0 +8.3444996 -0.35410234 -1.9267366 128.0 +8.353837 -0.40586281 -1.929487 128.0 +8.3191156 -0.45535928 -1.9219234 128.0 +8.3249092 -0.50692791 -1.9239862 128.0 +8.3129015 -0.55741334 -1.9219234 128.0 +8.3442726 -0.6109671 -1.9301746 128.0 +8.3034945 -0.65922952 -1.921465 128.0 +8.3177204 -0.71174228 -1.9258198 128.0 +8.3093195 -0.76240987 -1.924903 128.0 +8.2918911 -0.81214768 -1.9219234 128.0 +8.3032103 -0.86472368 -1.9258198 128.0 +8.2958126 -0.91544151 -1.9253614 128.0 +8.3229122 -0.97015667 -1.9331542 128.0 +8.2820225 -1.0169379 -1.924903 128.0 +8.3055534 -1.071596 -1.9320083 128.0 +8.2939987 -1.1218855 -1.9308622 128.0 +8.2869587 -1.1727555 -1.9308622 128.0 +8.2468672 -1.2187445 -1.9230694 128.0 +8.2373104 -1.269027 -1.922611 128.0 +8.2332125 -1.3201625 -1.9235278 128.0 +8.207675 -1.3677765 -1.9194022 128.0 +8.226943 -1.4229217 -1.926049 128.0 +8.2496748 -1.4790415 -1.9336126 128.0 +8.2088623 -1.5237718 -1.926049 128.0 +8.199358 -1.5741117 -1.926049 128.0 +8.2325106 -1.6329125 -1.936363 128.0 +8.2080317 -1.6804676 -1.932925 128.0 +8.1804237 -1.7271808 -1.9287994 128.0 +8.1972542 -1.7833419 -1.9354463 128.0 +8.1187181 -1.8185034 -1.919173 128.0 +8.077054 -1.8612916 -1.9118385 128.0 +8.084425 -1.9153035 -1.9164226 128.0 +8.068738 -1.9639518 -1.9155058 128.0 +7.8837194 -1.9702438 -1.8735621 128.0 +7.7705936 -1.9927136 -1.8490376 128.0 +7.5040474 -1.9735234 -1.7871536 128.0 +7.3931131 -1.9929339 -1.7630875 128.0 +7.3084989 -2.018312 -1.7454391 128.0 +7.2219806 -2.0421979 -1.7273322 128.0 +7.0877609 -2.0513008 -1.6975362 128.0 +6.977973 -2.0660179 -1.6736994 128.0 +7.0033617 -2.1203575 -1.6830966 128.0 +6.8935118 -2.1333666 -1.6592598 128.0 +6.6129985 -2.0911193 -1.59325 128.0 +6.550024 -2.1155047 -1.5808733 128.0 +6.4777565 -2.1361487 -1.5662044 128.0 +6.2615681 -2.1075554 -1.5157803 128.0 +5.9382691 -2.0394077 -1.4385397 128.0 +5.8760362 -2.0584311 -1.426163 128.0 +5.8403783 -2.0862627 -1.4204329 128.0 +6.3524742 -2.3132014 -1.551994 128.0 +5.7258158 -2.1249311 -1.3982005 128.0 +5.3949084 -2.0398986 -1.3182095 128.0 +5.2705617 -2.0299399 -1.290018 128.0 +5.189136 -2.0352349 -1.2725987 128.0 +5.1349664 -2.0504351 -1.2620555 128.0 +5.0230937 -2.0415957 -1.2368435 128.0 +4.8692498 -2.0139797 -1.200859 128.0 +4.7939963 -2.0173955 -1.1848149 128.0 +4.8343253 -2.0693684 -1.1983378 128.0 +4.552 -1.9816774 -1.1291193 128.0 +4.5023708 -1.9930257 -1.1194929 128.0 +4.4367967 -1.9966511 -1.1057408 128.0 +4.3837423 -2.0052154 -1.0951976 128.0 +4.3263383 -2.0111532 -1.0835084 128.0 +4.2883916 -2.0256073 -1.0768616 128.0 +4.2372675 -2.0333562 -1.0667768 128.0 +4.1617112 -2.0286145 -1.0502744 128.0 +4.1326103 -2.0459082 -1.0459195 128.0 +4.1399827 -2.0812809 -1.0511911 128.0 +4.1141291 -2.1000073 -1.0477531 128.0 +4.0899305 -2.1193907 -1.0447735 128.0 +4.0802951 -2.1462584 -1.0456903 128.0 +4.07306 -2.1744626 -1.0472947 128.0 +4.0682001 -2.2040496 -1.0495868 128.0 +4.0435104 -2.2228751 -1.0466071 128.0 +4.0365963 -2.2514362 -1.0484407 128.0 +3.9803452 -2.252198 -1.0369807 128.0 +4.064384 -2.3327768 -1.063568 128.0 +4.0575652 -2.3620782 -1.0656308 128.0 +3.9826422 -2.3513055 -1.0491283 128.0 +3.9798324 -2.3826973 -1.0523372 128.0 +3.944335 -2.3944461 -1.0466071 128.0 +3.9312265 -2.4196234 -1.0470655 128.0 +3.9518175 -2.4658537 -1.0569211 128.0 +3.951421 -2.4994199 -1.0610467 128.0 +3.9319131 -2.5209918 -1.0599008 128.0 +3.9024947 -2.5360546 -1.0560043 128.0 +3.9023066 -2.5701232 -1.0603591 128.0 +3.9204686 -2.6167119 -1.0699855 128.0 +3.9067578 -2.6423538 -1.0706731 128.0 +3.894486 -2.6690264 -1.0718192 128.0 +3.8676412 -2.6856558 -1.0688396 128.0 +3.9052279 -2.7474174 -1.0844252 128.0 +3.8550031 -2.7476025 -1.0747987 128.0 +3.778091 -2.7279046 -1.0573795 128.0 +3.7966387 -2.7768908 -1.0676936 128.0 +3.8217654 -2.8314209 -1.0800704 128.0 +3.7404754 -2.8069155 -1.061276 128.0 +3.6084824 -2.7426515 -1.0273542 128.0 +3.6656373 -2.8217342 -1.0493575 128.0 +3.6229198 -2.8244257 -1.0417939 128.0 +3.6169817 -2.855649 -1.0452319 128.0 +3.5841854 -2.865633 -1.0406479 128.0 +3.6119289 -2.9243171 -1.0544 128.0 +3.611232 -2.9606168 -1.0596715 128.0 +3.586257 -2.9771242 -1.0576087 128.0 +3.5790997 -3.008467 -1.0610467 128.0 +3.5679858 -3.0366793 -1.0633388 128.0 +3.6104922 -3.111249 -1.0823624 128.0 +3.5972021 -3.1384628 -1.084196 128.0 +3.5705814 -3.1540322 -1.0819039 128.0 +3.5272164 -3.1544707 -1.0743403 128.0 +3.5222268 -3.1891191 -1.0789244 128.0 +3.5198145 -3.226455 -1.0844252 128.0 +3.5898573 -3.3314114 -1.1133044 128.0 +3.4168136 -3.2100935 -1.0640264 128.0 +3.3737755 -3.2088628 -1.0564628 128.0 +3.2299047 -3.1100137 -1.0158943 128.0 +3.2790747 -3.196352 -1.0383559 128.0 +3.17556 -3.1336915 -1.0106226 128.0 +3.1604044 -3.1572449 -1.0119978 128.0 +3.1259146 -3.1613512 -1.0069554 128.0 +3.1567924 -3.2319965 -1.0239162 128.0 +3.165966 -3.2814243 -1.0337719 128.0 +3.1498015 -3.3050158 -1.0351471 128.0 +3.1194541 -3.3136504 -1.0317091 128.0 +3.072547 -3.3042181 -1.022541 128.0 +3.0528734 -3.3237255 -1.0227703 128.0 +3.0337303 -3.3438368 -1.0232286 128.0 +3.0488875 -3.4022546 -1.0358347 128.0 +2.9711757 -3.3567626 -1.0156651 128.0 +3.0312548 -3.4672577 -1.0445443 128.0 +3.0309181 -3.5101023 -1.0521079 128.0 +3.0200622 -3.5412233 -1.0560043 128.0 +2.9926326 -3.5529876 -1.0539415 128.0 +2.9601922 -3.5585625 -1.0500451 128.0 +2.9438632 -3.5834277 -1.0521079 128.0 +2.9224336 -3.6021793 -1.0523372 128.0 +2.9002759 -3.620043 -1.0523372 128.0 +2.8743851 -3.6331909 -1.050962 128.0 +2.8616271 -3.6630313 -1.0546291 128.0 +2.8272057 -3.6651077 -1.0500451 128.0 +2.8005347 -3.676966 -1.0484407 128.0 +2.7551022 -3.6637421 -1.0395019 128.0 +2.7105186 -3.6508818 -1.0307922 128.0 +2.6897926 -3.6697996 -1.0314798 128.0 +2.6826327 -3.7075255 -1.0376683 128.0 +2.6575699 -3.7207479 -1.0367515 128.0 +2.6386163 -3.7425528 -1.0383559 128.0 +2.676769 -3.8465533 -1.063568 128.0 +2.6244571 -3.8211851 -1.0516496 128.0 +2.6151628 -3.8581641 -1.0576087 128.0 +2.6185033 -3.9145887 -1.0690688 128.0 +2.5703018 -3.8940272 -1.0587547 128.0 +2.5293589 -3.883626 -1.0514203 128.0 +2.4607484 -3.8294711 -1.0319383 128.0 +2.426259 -3.8272347 -1.0271251 128.0 +2.3758881 -3.7991376 -1.0152067 128.0 +2.3857546 -3.8674896 -1.0301046 128.0 +2.4414244 -4.0126028 -1.0660892 128.0 +2.3386159 -3.8973098 -1.0303339 128.0 +2.3508503 -3.9727349 -1.0470655 128.0 +2.2817824 -3.9105825 -1.0262083 128.0 +2.2679393 -3.9422269 -1.0310215 128.0 +2.2446682 -3.9577618 -1.0314798 128.0 +2.2193913 -3.9697611 -1.0310215 128.0 +2.1926425 -3.9790421 -1.0298755 128.0 +2.1830537 -4.0197916 -1.0372099 128.0 +2.1661565 -4.0476999 -1.0411063 128.0 +2.1321981 -4.0436954 -1.0365223 128.0 +2.1136293 -4.0687947 -1.0397311 128.0 +2.0881803 -4.0808206 -1.0395019 128.0 +2.0595963 -4.0866032 -1.0376683 128.0 +2.0357811 -4.1017795 -1.0383559 128.0 +2.0028806 -4.0984526 -1.0342302 128.0 +1.9532145 -4.0597925 -1.0209366 128.0 +1.9132664 -4.0400324 -1.0126854 128.0 +1.9151748 -4.1090403 -1.0275835 128.0 +1.8968259 -4.1357546 -1.0314798 128.0 +1.8590003 -4.119812 -1.0243747 128.0 +1.8048533 -4.0661974 -1.0076431 128.0 +1.7970082 -4.1164451 -1.0177279 128.0 +1.7882296 -4.165854 -1.0275835 128.0 +1.7425723 -4.12922 -1.0154358 128.0 +1.7283939 -4.1668062 -1.0223119 128.0 +1.7351345 -4.2566509 -1.0424815 128.0 +1.672425 -4.1759562 -1.0193323 128.0 +1.6603141 -4.2205586 -1.0280418 128.0 +1.1863515 -3.0712156 -0.73535299 128.0 +1.1671393 -3.077527 -0.73512375 128.0 +0 -0 -0 128.0 +1.4920936 -4.084497 -0.98403543 128.0 +1.3175535 -3.6766655 -0.87974924 128.0 +1.2846384 -3.6552954 -0.87241483 128.0 +1.4918331 -4.3293686 -1.0383559 128.0 +1.4677328 -4.345818 -1.0401895 128.0 +1.447769 -4.3750715 -1.0452319 128.0 +1.4235986 -4.3922062 -1.0472947 128.0 +1.0361381 -3.2652864 -0.76675344 128.0 +1.0345672 -3.3310733 -0.78142226 128.0 +1.0220356 -3.363435 -0.78783989 128.0 +0.99333453 -3.3425853 -0.78119308 128.0 +0.96791631 -3.3317926 -0.77706742 128.0 +0.94506139 -3.3292418 -0.77500463 128.0 +0.86217606 -3.1098659 -0.71999657 128.0 +0.84053403 -3.1057022 -0.71770453 128.0 +0.81798106 -3.0976257 -0.71449572 128.0 +1.1438149 -4.4410734 -1.0399603 128.0 +1.1198623 -4.461225 -1.0431691 128.0 +1.0843732 -4.4349198 -1.0351471 128.0 +1.0562388 -4.4377022 -1.0342302 128.0 +1.025036 -4.427031 -1.0301046 128.0 +1.0017018 -4.4503298 -1.0342302 128.0 +0.97125632 -4.4421291 -1.0307922 128.0 +0.76870996 -3.6224866 -0.83207554 128.0 +0.74529046 -3.6214149 -0.83070034 128.0 +0.91389596 -4.5823927 -1.0603591 128.0 +0.87616259 -4.5382171 -1.0484407 128.0 +0.85223222 -4.5645576 -1.0534831 128.0 +0.82576424 -4.5783224 -1.0555459 128.0 +0.79364926 -4.560288 -1.0500451 128.0 +0.76500857 -4.5612321 -1.0491283 128.0 +0.73064393 -4.5264421 -1.0397311 128.0 +0.69628745 -4.4885182 -1.0296463 128.0 +0.67762357 -4.5523973 -1.0438567 128.0 +0.64816552 -4.5458694 -1.0413355 128.0 +0.61841846 -4.5362587 -1.0381267 128.0 +0.59094983 -4.5428634 -1.0388143 128.0 +0.56713474 -4.5792475 -1.0466071 128.0 +0.53914011 -4.5836082 -1.0468363 128.0 +0.51165259 -4.5926342 -1.0482115 128.0 +0.48193431 -4.5811667 -1.0447735 128.0 +0.4512243 -4.5578842 -1.0385851 128.0 +0.42414948 -4.5702591 -1.0408771 128.0 +0.39685568 -4.5815034 -1.0429399 128.0 +0.36561131 -4.5450425 -1.0337719 128.0 +0.33670607 -4.5336108 -1.0305631 128.0 +0.30914691 -4.5394759 -1.0314798 128.0 +0.28176948 -4.5490594 -1.0333135 128.0 +0.25341728 -4.5429277 -1.0314798 128.0 +0.22481261 -4.5298147 -1.0280418 128.0 +0.19714107 -4.5340261 -1.0287294 128.0 +0.16957191 -4.5419593 -1.0303339 128.0 +0.14103028 -4.5215101 -1.0252914 128.0 +0.11345539 -4.5291018 -1.0268959 128.0 +0.085478306 -4.5199809 -1.0246038 128.0 +0.058143198 -4.5515656 -1.0319383 128.0 +0.030004753 -4.5206895 -1.0246038 128.0 +0.0022628913 -4.5159216 -1.0234579 128.0 +-0.025505716 -4.5265574 -1.025979 128.0 +-0.05335927 -4.5331287 -1.0275835 128.0 +-0.081415832 -4.5463414 -1.0307922 128.0 +-0.10956658 -4.5564604 -1.0333135 128.0 +-0.13725887 -4.546946 -1.0312507 128.0 +-0.16557887 -4.5576911 -1.0340011 128.0 +-0.19448934 -4.5789566 -1.0392727 128.0 +-0.22248726 -4.5757327 -1.0388143 128.0 +-0.25289798 -4.6170464 -1.0488992 128.0 +-0.28453338 -4.669816 -1.0617343 128.0 +-0.31324655 -4.6689534 -1.0619636 128.0 +-0.3418178 -4.6659727 -1.0617343 128.0 +-0.37036422 -4.6628175 -1.0615051 128.0 +-0.39647952 -4.631362 -1.0546291 128.0 +-0.42497844 -4.6298113 -1.0548583 128.0 +-0.45119718 -4.6048355 -1.0495868 128.0 +-0.47873795 -4.5952029 -1.0479823 128.0 +-0.50212228 -4.5486412 -1.0376683 128.0 +-0.5346415 -4.585115 -1.0470655 128.0 +-0.87001359 -7.0849881 -1.6409237 128.0 +-0.90848953 -7.0409012 -1.6317557 128.0 +-0.94332707 -6.9734597 -1.6170869 128.0 +-0.99196053 -7.0089831 -1.6269425 128.0 +-1.0353749 -7.0056534 -1.6276301 128.0 +-1.0767115 -6.9885864 -1.625109 128.0 +-1.1226537 -7.0010705 -1.6296929 128.0 +-1.1647905 -6.9892492 -1.628547 128.0 +-1.2114683 -7.0040312 -1.6338185 128.0 +-1.257169 -7.0117955 -1.6374857 128.0 +-1.2962617 -6.9828949 -1.6324433 128.0 +-1.3359644 -6.958559 -1.628547 128.0 +-1.3765535 -6.9397278 -1.6260257 128.0 +-1.4228176 -6.9492693 -1.6303805 128.0 +-1.4634204 -6.9308844 -1.6280885 128.0 +-1.5057131 -6.9208236 -1.6278594 128.0 +-1.5496391 -6.9181032 -1.6294637 128.0 +-1.5857211 -6.8809571 -1.6228169 128.0 +-1.6339694 -6.8966718 -1.6290053 128.0 +-1.6730337 -6.8732748 -1.6257966 128.0 +-1.7177713 -6.8732677 -1.6283177 128.0 +-1.7475835 -6.8145113 -1.6166285 128.0 +-1.8017401 -6.8507295 -1.6280885 128.0 +-1.8498205 -6.8621011 -1.6335893 128.0 +-1.8981082 -6.8731403 -1.6390902 128.0 +-1.942099 -6.8679209 -1.6406945 128.0 +-1.9777099 -6.8334346 -1.6351937 128.0 +-2.0223646 -6.8305044 -1.6374857 128.0 +-2.0662119 -6.8244882 -1.6390902 128.0 +-2.114377 -6.8321395 -1.6441325 128.0 +-2.1542046 -6.8125405 -1.6425282 128.0 +-2.1917775 -6.7862263 -1.6393193 128.0 +-2.2345948 -6.7763476 -1.6402361 128.0 +-2.2727165 -6.7523608 -1.6377149 128.0 +-2.3201115 -6.7557807 -1.6420697 128.0 +-1.3319176 -3.8016927 -0.90862846 128.0 +-1.3555467 -3.7943654 -0.9088577 128.0 +-2.4280863 -6.6680274 -1.6310681 128.0 +-2.486901 -6.7013702 -1.6432158 128.0 +-2.5241868 -6.6759696 -1.6406945 128.0 +-2.5686002 -6.6694393 -1.6429865 128.0 +-2.6052105 -6.6426787 -1.6402361 128.0 +-2.6502509 -6.6374164 -1.6429865 128.0 +-2.6942255 -6.6291456 -1.6450493 128.0 +-2.727783 -6.5953989 -1.6406945 128.0 +-2.7693326 -6.5812292 -1.6413821 128.0 +-2.8131092 -6.5721669 -1.6434449 128.0 +-2.8689206 -6.5904822 -1.6526129 128.0 +-1.3781021 -3.1129167 -0.761711 128.0 +-1.3987741 -3.1079528 -0.76262784 128.0 +-2.9832666 -6.5223951 -1.6489457 128.0 +-3.0207696 -6.4986711 -1.6475705 128.0 +-1.6207594 -3.4311068 -0.85362041 128.0 +-1.6337819 -3.404423 -0.84926558 128.0 +-1.6444061 -3.3733342 -0.84376478 128.0 +-1.6607556 -3.3544569 -0.84147274 128.0 +-1.6839297 -3.349422 -0.84284794 128.0 +-1.7088742 -3.3476965 -0.84513998 128.0 +-1.7360997 -3.3501122 -0.84857798 128.0 +-1.7656842 -3.3566267 -0.85316199 128.0 +-3.3954859 -6.3606744 -1.6578846 128.0 +-3.4117339 -6.2977819 -1.6466538 128.0 +-3.4690659 -6.3108501 -1.6558218 128.0 +-3.5048788 -6.2843451 -1.6544466 128.0 +-3.5433729 -6.2627211 -1.6544466 128.0 +-3.5783422 -6.234952 -1.6528422 128.0 +-3.621428 -6.2212906 -1.6551342 128.0 +-3.6441946 -6.1729674 -1.648029 128.0 +-3.7064989 -6.1914153 -1.6592598 128.0 +-3.7368433 -6.1560745 -1.6558218 128.0 +-3.7776067 -6.1380038 -1.657197 128.0 +-3.8167434 -6.1171865 -1.6578846 128.0 +-3.8630505 -6.1076379 -1.661781 128.0 +-3.90308 -6.0879169 -1.6629269 128.0 +-3.9371793 -6.0589561 -1.6615517 128.0 +-3.9673231 -6.0241156 -1.6585722 128.0 +-3.9928653 -5.9826565 -1.653759 128.0 +-2.0965471 -3.0996282 -0.84124357 128.0 +-2.1177273 -3.0899177 -0.84216034 128.0 +-2.1410878 -3.083262 -0.84399396 128.0 +-4.1827254 -5.9457607 -1.6718658 128.0 +-4.2050071 -5.9001665 -1.6661358 128.0 +-4.2360029 -5.8671508 -1.664073 128.0 +-4.2552609 -5.8182635 -1.6574261 128.0 +-4.3285408 -5.842885 -1.6723242 128.0 +-4.3526268 -5.8006434 -1.6677402 128.0 +-4.3881373 -5.7738271 -1.6677402 128.0 +-4.4234819 -5.7467933 -1.6677402 128.0 +-4.4706283 -5.7348976 -1.6723242 128.0 +-4.5039239 -5.7050662 -1.6716366 128.0 +-4.5388446 -5.6773233 -1.6716366 128.0 +-4.5791063 -5.6561756 -1.6736994 128.0 +-4.6174283 -5.6324892 -1.6750746 128.0 +-4.6574965 -5.6107922 -1.6771374 128.0 +-4.7143812 -5.6089344 -1.6853886 128.0 +-4.7436619 -5.5739717 -1.683555 128.0 +-4.7752323 -5.5418105 -1.6826382 128.0 +-4.8181043 -5.522675 -1.685847 128.0 +-4.8332138 -5.4718499 -1.6792002 128.0 +-4.8628049 -5.4377375 -1.677825 128.0 +-4.9058776 -5.4186215 -1.681263 128.0 +-4.944952 -5.394876 -1.6833258 128.0 +-4.9859061 -5.3729954 -1.6860762 128.0 +-5.0247784 -5.3486862 -1.688139 128.0 +-5.0608563 -5.321281 -1.689285 128.0 +-5.0913868 -5.2880244 -1.6885974 128.0 +-5.1210198 -5.2538962 -1.6876806 128.0 +-5.1627316 -5.2320757 -1.6908894 128.0 +-5.1844196 -5.1899691 -1.6874514 128.0 +-5.189868 -5.132051 -1.6787418 128.0 +-5.2108159 -5.0899072 -1.6753038 128.0 +-5.2538562 -5.0693288 -1.6792002 128.0 +-5.2524519 -5.006103 -1.6686569 128.0 +-5.366694 -5.0525174 -1.6957027 128.0 +-5.3797755 -5.0029202 -1.6899726 128.0 +-5.3745308 -4.9368906 -1.6785126 128.0 +-5.3967929 -4.896625 -1.6759914 128.0 +-5.4028163 -4.8419795 -1.6684278 128.0 +-5.4331532 -4.8093824 -1.6686569 128.0 +-5.4889402 -4.7990208 -1.6769081 128.0 +-5.4910259 -4.7417111 -1.6684278 128.0 +-5.5096493 -4.6990857 -1.6652189 128.0 +-5.5741115 -4.6952929 -1.6762205 128.0 +-5.636488 -4.6890173 -1.6865346 128.0 +-5.6734257 -4.6611419 -1.6890558 128.0 +-5.7170362 -4.6385088 -1.6936399 128.0 +-5.7089295 -4.5741262 -1.6826382 128.0 +-5.7689476 -4.5643787 -1.6922646 128.0 +-5.8022146 -4.5330906 -1.693869 128.0 +-5.819901 -4.4896736 -1.6908894 128.0 +-5.8419194 -4.4497499 -1.689285 128.0 +-5.8667789 -4.4120655 -1.6885974 128.0 +-5.8718591 -4.3597364 -1.6821798 128.0 +-5.9283304 -4.3454938 -1.6908894 128.0 +-5.9525166 -4.3073244 -1.6902018 128.0 +-5.9550729 -4.2537451 -1.6833258 128.0 +-5.9739017 -4.2120767 -1.681263 128.0 +-6.0020308 -4.1770105 -1.6819506 128.0 +-5.9962573 -4.1186094 -1.6730118 128.0 +-6.0141644 -4.0768237 -1.670949 128.0 +-6.031785 -4.0349731 -1.6688862 128.0 +-6.0564299 -3.9978871 -1.6688862 128.0 +-6.083293 -3.962244 -1.6695738 128.0 +-6.1173167 -3.9311585 -1.6723242 128.0 +-6.1503649 -3.8992829 -1.6748453 128.0 +-6.1485925 -3.84547 -1.6677402 128.0 +-6.161303 -3.8010259 -1.6647606 128.0 +-6.1720371 -3.755559 -1.6613226 128.0 +-6.1866183 -3.7126083 -1.6590306 128.0 +-6.1866655 -3.6611919 -1.6528422 128.0 +-6.170342 -3.6005936 -1.6422989 128.0 +-6.1720705 -3.5510142 -1.6367981 128.0 +-6.2149091 -3.5250831 -1.6425282 128.0 +-6.2610593 -3.5006599 -1.6491749 128.0 +-6.262814 -3.4513702 -1.6439034 128.0 +-6.3052568 -3.4244926 -1.6496333 128.0 +-6.3407393 -3.393549 -1.6535298 128.0 +-6.3726349 -3.360482 -1.6565094 128.0 +-6.4302759 -3.3406148 -1.666365 128.0 +-6.4185925 -3.2846878 -1.6578846 128.0 +-6.4351492 -3.2434895 -1.6569678 128.0 +-6.4313898 -3.1922572 -1.6507794 128.0 +-6.4561028 -3.1552997 -1.6521546 128.0 +-6.4630623 -3.1097171 -1.6489457 128.0 +-6.4925776 -3.0750024 -1.6516961 128.0 +-6.517499 -3.0379858 -1.6533005 128.0 +-6.5298238 -2.9950969 -1.6516961 128.0 +-6.5436425 -2.9529722 -1.6505501 128.0 +-6.5660868 -2.9147403 -1.6516961 128.0 +-6.5651145 -2.8662169 -1.6468829 128.0 +-6.4582534 -2.7725 -1.6150241 128.0 +-6.6921592 -2.8244262 -1.6704906 128.0 +-6.7336388 -2.7933824 -1.676679 128.0 +-6.7776918 -2.7630382 -1.683555 128.0 +-6.8098788 -2.7275524 -1.6874514 128.0 +-6.8346386 -2.6889241 -1.6895142 128.0 +-6.8891425 -2.6616726 -1.6991407 128.0 +-6.9608598 -2.640413 -1.7131219 128.0 +-6.9696326 -2.5949349 -1.7112882 128.0 +-7.0037088 -2.5588028 -1.7158723 128.0 +-7.0431008 -2.5243206 -1.7218314 128.0 +-7.0850873 -2.4904196 -1.7284783 128.0 +-7.1039157 -2.4481683 -1.729395 128.0 +-7.1603017 -2.4185526 -1.7397091 128.0 +-7.163918 -2.3709018 -1.7369587 128.0 +-7.203331 -2.3350055 -1.7431471 128.0 +-7.2564883 -2.3031323 -1.7527735 128.0 +-7.2844267 -2.2628963 -1.7562115 128.0 +-7.3289075 -2.2274997 -1.7637751 128.0 +-7.3321738 -2.1794372 -1.761254 128.0 +-7.3080206 -2.1235406 -1.7520859 128.0 +-7.2647314 -2.0627046 -1.7383339 128.0 +-7.3447847 -2.0368221 -1.7548363 128.0 +-7.4022427 -2.0039284 -1.7658379 128.0 +-7.5273294 -1.9883076 -1.793342 128.0 +-7.6430736 -1.9687976 -1.818554 128.0 +-7.7579136 -1.9477038 -1.8435369 128.0 +-7.9644923 -1.9477073 -1.8907522 128.0 +-8.127799 -1.9348758 -1.9274242 128.0 +-8.2248621 -1.9047368 -1.9480523 128.0 +-8.2496891 -1.8572277 -1.951261 128.0 +-8.2866039 -1.8121895 -1.9574494 128.0 +-8.3023281 -1.7623205 -1.9585955 128.0 +-8.3244257 -1.713701 -1.9613459 128.0 +-8.3596029 -1.6675429 -1.9673051 128.0 +-8.375411 -1.6173255 -1.9686803 128.0 +-8.3220263 -1.5541084 -1.9535531 128.0 +-8.3017111 -1.4976575 -1.9464478 128.0 +-8.3203335 -1.4483608 -1.9487399 128.0 +-8.3549824 -1.4016303 -1.9549283 128.0 +-8.3663082 -1.3508043 -1.9556159 128.0 +-8.3802109 -1.3003399 -1.9569911 128.0 +-8.3851433 -1.2484653 -1.9563035 128.0 +-8.3830099 -1.1956167 -1.9540114 128.0 +-8.3892231 -1.1440254 -1.9537822 128.0 +-8.3960848 -1.0925286 -1.9537822 128.0 +-8.3968344 -1.0402722 -1.952407 128.0 +-8.3982258 -0.98816174 -1.951261 128.0 +-8.4031639 -0.93650472 -1.9510318 128.0 +-8.4223042 -0.88635314 -1.9542407 128.0 +-8.4624557 -0.83811337 -1.9624919 128.0 +-8.4247932 -0.78221148 -1.952407 128.0 +-8.4313736 -0.73067141 -1.9528655 128.0 +-8.4492817 -0.68001753 -1.9560742 128.0 +-8.4329109 -0.62664521 -1.951261 128.0 +-8.4657307 -0.57687664 -1.958137 128.0 +-8.4555101 -0.52407742 -1.9549283 128.0 +-8.4556503 -0.47202259 -1.9542407 128.0 +-8.4476938 -0.41959915 -1.9517194 128.0 +-8.4491367 -0.36771479 -1.9514903 128.0 +-8.4376163 -0.31535533 -1.9482814 128.0 +-8.4559317 -0.2640945 -1.9521779 128.0 +-8.0873137 0.59273446 -1.9741917 128.0 +-8.0806217 0.64211506 -1.9734684 128.0 +-8.0707283 0.69118702 -1.9720221 128.0 +-8.0344429 0.73776197 -1.9640665 128.0 +-8.0432863 0.78837383 -1.9674416 128.0 +-8.0189924 0.835697 -1.9626201 128.0 +-7.9760938 0.88072526 -1.9532182 128.0 +-7.9821067 0.93099993 -1.9561111 128.0 +-7.9675746 0.97889334 -1.9539413 128.0 +-7.9489059 1.0261459 -1.9508075 128.0 +-7.9414983 1.0747699 -1.9505663 128.0 +-7.9193797 1.1212987 -1.9467092 128.0 +-7.8989096 1.1678807 -1.9433341 128.0 +-7.9155741 1.2200249 -1.949361 128.0 +-7.9002733 1.2673402 -1.9474324 128.0 +-7.9114938 1.3189862 -1.9522538 128.0 +-7.8745632 1.3625371 -1.9450216 128.0 +-7.866055 1.4108289 -1.9450216 128.0 +-7.8582044 1.4592448 -1.9452627 128.0 +-7.8443375 1.5065186 -1.9440573 128.0 +-7.8511286 1.5578356 -1.9481556 128.0 +-7.8414221 1.6059799 -1.9481556 128.0 +-7.7991362 1.6472402 -1.939959 128.0 +-7.778451 1.6927921 -1.9373072 128.0 +-7.7641296 1.7396386 -1.936343 128.0 +-7.7372332 1.7835374 -1.9322447 128.0 +-7.7431417 1.8350093 -1.936584 128.0 +-7.726079 1.8811074 -1.9351375 128.0 +-7.7285137 1.932011 -1.9387537 128.0 +-7.7108731 1.9779482 -1.9373072 128.0 +-7.675128 2.019048 -1.9312804 128.0 +-7.7197523 2.0815241 -1.9459859 128.0 +-7.7030931 2.1278183 -1.9450216 128.0 +-7.6656127 2.1681724 -1.9387537 128.0 +-7.6456394 2.2132769 -1.9370662 128.0 +-7.6412201 2.2629051 -1.9394768 128.0 +-7.6206899 2.3077784 -1.9377893 128.0 +-7.6036048 2.3536332 -1.9370662 128.0 +-7.5621867 2.3917527 -1.9300749 128.0 +-7.5492158 2.4387052 -1.9305571 128.0 +-7.5295019 2.4834597 -1.9293517 128.0 +-7.5196404 2.531472 -1.9307982 128.0 +-7.5177336 2.5822952 -1.9344143 128.0 +-7.4989996 2.6274114 -1.9336911 128.0 +-7.490962 2.6763148 -1.9358608 128.0 +-7.4743991 2.7222281 -1.9358608 128.0 +-7.4520965 2.7660117 -1.9344143 128.0 +-7.4540462 2.8188968 -1.9394768 128.0 +-7.411253 2.8548093 -1.9327267 128.0 +-7.388176 2.898103 -1.9312804 128.0 +-7.3594398 2.9390604 -1.9283874 128.0 +-7.3385706 2.9830651 -1.9276642 128.0 +-7.319232 3.0276666 -1.9274231 128.0 +-7.2915721 3.0687535 -1.9250124 128.0 +-7.2913399 3.1214597 -1.9300749 128.0 +-7.3076406 3.1816416 -1.939718 128.0 +-7.2480488 3.2087355 -1.9288696 128.0 +-7.2326488 3.2551405 -1.9300749 128.0 +-7.2169518 3.3014772 -1.9312804 128.0 +-7.1895185 3.3424234 -1.9293517 128.0 +-7.1583452 3.3814986 -1.9264588 128.0 +-7.1383367 3.4257777 -1.9266999 128.0 +-7.1136928 3.4678116 -1.9257356 128.0 +-7.0801053 3.5053649 -1.9223605 128.0 +-7.0706019 3.5548465 -1.9257356 128.0 +-7.0512495 3.599488 -1.9264588 128.0 +-6.9859505 3.6203523 -1.9144051 128.0 +-6.9773464 3.6703804 -1.9182622 128.0 +-6.911891 3.6902628 -1.9062085 128.0 +-6.9514046 3.7663634 -1.923807 128.0 +-6.9961944 3.8463602 -1.9430931 128.0 +-6.9538169 3.8788121 -1.9377893 128.0 +-6.9155283 3.9132793 -1.9336911 128.0 +-6.8821287 3.9503226 -1.9310392 128.0 +-6.8493738 3.9875922 -1.9286286 128.0 +-6.8114071 4.0216475 -1.9247713 128.0 +-6.7766113 4.0573816 -1.9218785 128.0 +-6.7441225 4.0943518 -1.9197087 128.0 +-6.7073035 4.1285319 -1.9163337 128.0 +-6.6703191 4.162415 -1.9129586 128.0 +-6.6413732 4.201189 -1.9119943 128.0 +-6.6122026 4.2397647 -1.9110301 128.0 +-6.5925727 4.2844882 -1.9129586 128.0 +-6.5629177 4.3227234 -1.9119943 128.0 +-6.5403061 4.3656058 -1.9131997 128.0 +-6.518219 4.4089174 -1.9146461 128.0 +-6.4926443 4.4499269 -1.9151284 128.0 +-6.4492769 4.4786077 -1.9103068 128.0 +-6.4296117 4.5236807 -1.9127176 128.0 +-6.4072652 4.5669909 -1.9144051 128.0 +-6.3980041 4.6198578 -1.9201909 128.0 +-6.3648372 4.6555896 -1.9187444 128.0 +-6.3166585 4.680109 -1.9127176 128.0 +-6.2854943 4.7170315 -1.9119943 128.0 +-6.2363467 4.7402372 -1.9057264 128.0 +-6.2202158 4.7884798 -1.9098246 128.0 +-6.1539831 4.7979078 -1.8982531 128.0 +-6.1244278 4.8355775 -1.8982531 128.0 +-6.1090422 4.884583 -1.9028335 128.0 +-6.082727 4.9250293 -1.9040389 128.0 +-6.0546441 4.9641061 -1.904762 128.0 +-6.0285506 5.0048833 -1.9062085 128.0 +-5.9999561 5.0436535 -1.9069318 128.0 +-5.9666791 5.078486 -1.9062085 128.0 +-5.9155583 5.0978923 -1.8996994 128.0 +-5.8731995 5.1245208 -1.8960834 128.0 +-5.8205552 5.1418252 -1.8890922 128.0 +-5.7823863 5.1716189 -1.8869225 128.0 +-5.7411938 5.1985316 -1.8837886 128.0 +-5.7027507 5.2277579 -1.8816189 128.0 +-5.6819463 5.2732158 -1.8854761 128.0 +-5.7060595 5.3611517 -1.904762 128.0 +-5.6843061 5.4067664 -1.9086193 128.0 +-5.6636057 5.4536619 -1.9129586 128.0 +-5.603632 5.4625635 -1.9037977 128.0 +-5.5644836 5.4913893 -1.9018692 128.0 +-5.5739322 5.5686488 -1.9170569 128.0 +-5.5246491 5.5875597 -1.9117533 128.0 +-5.4950066 5.626214 -1.9134408 128.0 +-5.451623 5.650744 -1.9103068 128.0 +-5.4208646 5.6883039 -1.9117533 128.0 +-5.3845291 5.7200451 -1.9112711 128.0 +-5.3433838 5.7465787 -1.9091015 128.0 +-5.3145866 5.7864056 -1.9115121 128.0 +-5.2959332 5.8375974 -1.9177802 128.0 +-5.2794418 5.8916688 -1.9250124 128.0 +-5.227757 5.9065084 -1.9192266 128.0 +-5.2035513 5.9523582 -1.923807 128.0 +-5.1770768 5.9959297 -1.9276642 128.0 +-5.1200409 6.0039492 -1.9199498 128.0 +-5.08248 6.0345097 -1.9197087 128.0 +-5.0484595 6.0693126 -1.9209141 128.0 +-5.0185151 6.1091752 -1.923807 128.0 +-4.9833808 6.1428685 -1.9247713 128.0 +-4.9644022 6.1968131 -1.9322447 128.0 +-4.9118371 6.2088881 -1.9264588 128.0 +-4.8861918 6.2549725 -1.9315214 128.0 +-4.8566093 6.2963643 -1.9351375 128.0 +-4.8008351 6.3036523 -1.9281464 128.0 +-4.7620664 6.3329911 -1.9281464 128.0 +-4.7433615 6.3893676 -1.936584 128.0 +-4.7086563 6.4246154 -1.9385126 128.0 +-4.6782475 6.4659677 -1.9423698 128.0 +-4.6266422 6.4779649 -1.9373072 128.0 +-4.5795393 6.4959183 -1.9341732 128.0 +-4.5384865 6.5223022 -1.9336911 128.0 +-4.5000286 6.5524273 -1.9344143 128.0 +-4.4749818 6.6024122 -1.9411644 128.0 +-4.4354649 6.6313596 -1.9416466 128.0 +-4.3946919 6.6584501 -1.9416466 128.0 +-4.3569312 6.6901703 -1.9430931 128.0 +-4.3299603 6.7388248 -1.949602 128.0 +-4.2677507 6.7324758 -1.939959 128.0 +-4.234592 6.7717023 -1.9438162 128.0 +-4.2087531 6.8231664 -1.9512895 128.0 +-4.1718507 6.8571539 -1.9537003 128.0 +-4.1217098 6.8693066 -1.9498432 128.0 +-4.0908475 6.9136801 -1.9553878 128.0 +-4.0434594 6.9302673 -1.9529771 128.0 +-3.9897323 6.9355969 -1.9474324 128.0 +-3.9466224 6.9591026 -1.9471912 128.0 +-3.9014807 6.9789519 -1.9459859 128.0 +-3.869823 7.0231614 -1.9517717 128.0 +-3.8312869 7.0553031 -1.9541825 128.0 +-3.7696133 7.0444484 -1.9445394 128.0 +-3.7493966 7.1112318 -1.9568343 128.0 +-3.7271597 7.175447 -1.9684058 128.0 +-3.6649423 7.1627555 -1.9585218 128.0 +-3.6060779 7.1556392 -1.9503253 128.0 +-3.5621037 7.1776309 -1.9503253 128.0 +-3.524385 7.2124329 -1.9539413 128.0 +-3.4994121 7.2741556 -1.9650308 128.0 +-3.4422557 7.2691746 -1.9577986 128.0 +-3.4020963 7.2998362 -1.9604504 128.0 +-3.363308 7.333807 -1.9640665 128.0 +-3.3158512 7.3489976 -1.9626201 128.0 +-3.2714832 7.3709793 -1.9631022 128.0 +-3.2157147 7.3668971 -1.9565933 128.0 +-3.1876717 7.4266243 -1.9674416 128.0 +-3.1477005 7.4594564 -1.9710578 128.0 +-3.097039 7.4669757 -1.9679238 128.0 +-3.0526288 7.4894333 -1.968888 128.0 +-3.0026498 7.4981117 -1.9662362 128.0 +-2.9501934 7.5001369 -1.9618969 128.0 +-2.9177516 7.5534067 -1.9712988 128.0 +-2.8655014 7.5557404 -1.9672005 128.0 +-2.8238244 7.5859146 -1.9705756 128.0 +-2.7732308 7.5921588 -1.9676827 128.0 +-2.7285576 7.6145139 -1.9691291 128.0 +-2.684679 7.6393538 -1.9712988 128.0 +-2.6387024 7.6584358 -1.9720221 128.0 +-2.5975587 7.6919537 -1.9766024 128.0 +-2.5436087 7.6874757 -1.9712988 128.0 +-2.502373 7.7214036 -1.9761204 128.0 +-2.447613 7.7134852 -1.9700934 128.0 +-2.3996625 7.7265048 -1.9696113 128.0 +-2.3609512 7.7698708 -1.9770846 128.0 +-2.3124027 7.7814198 -1.9763614 128.0 +-2.2678607 7.8066463 -1.9792542 128.0 +-2.2246852 7.8372207 -1.9835936 128.0 +-2.1718903 7.8338885 -1.9792542 128.0 +-2.1235282 7.8461308 -1.9790132 128.0 +-2.0743546 7.8552594 -1.9780489 128.0 +-2.0309546 7.8866367 -1.9828705 128.0 +-1.9752051 7.8697686 -1.9753971 128.0 +-1.9284922 7.8883395 -1.9770846 128.0 +-1.8784821 7.8934145 -1.9753971 128.0 +-1.8343887 7.9237027 -1.9802185 128.0 +-1.7842447 7.9281812 -1.978531 128.0 +-1.7374289 7.9475131 -1.9807007 128.0 +-1.6874233 7.9523277 -1.9792542 128.0 +-1.638597 7.962532 -1.9792542 128.0 +-1.5868642 7.9581594 -1.9756382 128.0 +-1.5376364 7.9658408 -1.9751559 128.0 +-1.4970938 8.0199661 -1.9864866 128.0 +-1.444242 8.0089436 -1.981424 128.0 +-1.3977326 8.0329533 -1.9852811 128.0 +-1.3549919 8.0806217 -1.9951652 128.0 +-1.2951884 8.025547 -1.9792542 128.0 +-1.2506756 8.0640326 -1.9869686 128.0 +-1.2070235 8.1109133 -1.9968528 128.0 +-1.1514865 8.0778131 -1.9867276 128.0 +-1.1045189 8.1039591 -1.9915491 128.0 +-1.0555233 8.1163578 -1.9929955 128.0 +-1.0035583 8.1053448 -1.9886562 128.0 +-0.9534663 8.1084585 -1.9879329 128.0 +-0.90294474 8.1074038 -1.9862455 128.0 +-0.85145843 8.0963831 -1.9821472 128.0 +-0.80567706 8.1410532 -1.9920312 128.0 +-0.75356102 8.1226511 -1.9862455 128.0 +-0.70303851 8.1193867 -1.9843168 128.0 +-0.65289503 8.1196775 -1.9833525 128.0 +-0.60420877 8.1390162 -1.9872098 128.0 +-0.55504656 8.1541901 -1.9901026 128.0 +-0.50500298 8.1574421 -1.9901026 128.0 +-0.45445535 8.1516657 -1.9879329 128.0 +-0.40371007 8.139761 -1.9843168 128.0 +-0.3549335 8.1692343 -1.9910669 128.0 +-0.30361205 8.1392536 -1.9831115 128.0 +-0.25282237 8.113802 -1.9763614 128.0 +-0.20440796 8.1705027 -1.9901026 128.0 +-0.15399814 8.1570473 -1.9864866 128.0 +-0.10401789 8.163662 -1.9879329 128.0 +-0.053962283 8.1699696 -1.9893794 128.0 +-0.0038246077 8.149766 -1.9843168 128.0 +0.046034917 8.124403 -1.9780489 128.0 +0.096232213 8.1530809 -1.9852811 128.0 +0.14625676 8.1523371 -1.9852811 128.0 +0.19674581 8.1706905 -1.9901026 128.0 +0.2461991 8.1470184 -1.984558 128.0 +0.29703334 8.1686306 -1.9903437 128.0 +0.34719089 8.1676235 -1.9905849 128.0 +0.39791489 8.1779413 -1.9937187 128.0 +0.44542378 8.126894 -1.981665 128.0 +0.49255809 8.0794477 -1.9705756 128.0 +0.54596651 8.1334038 -1.984799 128.0 +0.59458244 8.1124783 -1.9804597 128.0 +0.64380938 8.1019058 -1.9787722 128.0 +0.69268012 8.0881329 -1.9763614 128.0 +0.74113947 8.071167 -1.9732274 128.0 +0.79282993 8.0886822 -1.9787722 128.0 +0.84113663 8.0711174 -1.9756382 128.0 +0.89256406 8.0831671 -1.9799775 128.0 +0.94349551 8.0891056 -1.9828705 128.0 +0.98813522 8.0427084 -1.9727453 128.0 +1.0360974 8.0259056 -1.9700934 128.0 +1.0833695 8.0049715 -1.9664773 128.0 +1.1353267 8.0183525 -1.9715399 128.0 +1.1911832 8.0563574 -1.9828705 128.0 +1.2423694 8.0604067 -1.9857633 128.0 +1.2918037 8.0526323 -1.9857633 128.0 +1.3365571 8.0167933 -1.9787722 128.0 +1.383238 7.9940977 -1.9751559 128.0 +1.4272902 7.9577579 -1.9681648 128.0 +1.4872628 8.0089626 -1.9833525 128.0 +1.5372928 8.0044518 -1.984558 128.0 +1.584488 7.9853492 -1.9821472 128.0 +1.6348195 7.982132 -1.9838347 128.0 +1.6735308 7.9235244 -1.9715399 128.0 +1.7231498 7.9178481 -1.9727453 128.0 +1.7770085 7.9308009 -1.9787722 128.0 +1.8129857 7.8648992 -1.9647897 128.0 +1.863673 7.8640141 -1.9674416 128.0 +1.9203904 7.8873191 -1.9763614 128.0 +1.9609782 7.8443179 -1.9684058 128.0 +2.0119684 7.8434181 -1.9712988 128.0 +2.0489399 7.788691 -1.9604504 128.0 +2.1068037 7.8134527 -1.9700934 128.0 +2.1580675 7.8125391 -1.9732274 128.0 +2.1998854 7.7776723 -1.9676827 128.0 +2.2470269 7.7621632 -1.9672005 128.0 +2.2904766 7.734272 -1.9635844 128.0 +2.3511169 7.7637262 -1.9749149 128.0 +2.3832059 7.6990924 -1.9618969 128.0 +2.4374287 7.7065315 -1.9676827 128.0 +2.4676566 7.6387925 -1.9539413 128.0 +2.519043 7.637332 -1.9575576 128.0 +2.5807266 7.6658788 -1.9691291 128.0 +2.6198297 7.6269541 -1.9631022 128.0 +2.6659362 7.6089039 -1.9626201 128.0 +2.7145333 7.5978861 -1.9640665 128.0 +2.7534602 7.5601139 -1.9585218 128.0 +2.7923636 7.5230613 -1.9532182 128.0 +2.8446534 7.5221248 -1.9575576 128.0 +2.8931975 7.5108681 -1.9592451 128.0 +2.9342654 7.4803262 -1.95587 128.0 +2.9743476 7.4477611 -1.9520128 128.0 +3.0240116 7.43926 -1.9546646 128.0 +3.0629213 7.4044232 -1.9503253 128.0 +3.116205 7.404274 -1.9553878 128.0 +3.1432381 7.3421917 -1.9438162 128.0 +3.1944306 7.3370032 -1.9476734 128.0 +3.2401755 7.3190389 -1.9481556 128.0 +3.2937889 7.3184886 -1.9534593 128.0 +3.3394399 7.2999058 -1.9539413 128.0 +3.368207 7.2449579 -1.9445394 128.0 +3.4080367 7.2145028 -1.9418876 128.0 +3.4556003 7.2004547 -1.9438162 128.0 +3.5201352 7.2209868 -1.9553878 128.0 +3.5484388 7.1670737 -1.9464681 128.0 +3.5914762 7.1434317 -1.9459859 128.0 +3.636564 7.1238537 -1.9467092 128.0 +3.6685932 7.0790038 -1.9404413 128.0 +3.7151237 7.0623727 -1.9421287 128.0 +3.7597592 7.0420122 -1.9428519 128.0 +3.8047473 7.0222235 -1.9438162 128.0 +3.8463602 6.9961944 -1.9430931 128.0 +3.8764474 6.9495792 -1.936584 128.0 +3.9151917 6.9189067 -1.9346554 128.0 +3.9483898 6.8787622 -1.9300749 128.0 +3.9963837 6.8644695 -1.9329679 128.0 +4.0438571 6.8490109 -1.9356197 128.0 +4.1017628 6.8507123 -1.9433341 128.0 +4.1386833 6.8171206 -1.9409233 128.0 +4.1773815 6.7866392 -1.9394768 128.0 +4.2096944 6.7460604 -1.9351375 128.0 +4.2499704 6.7184629 -1.9346554 128.0 +4.2827306 6.6791887 -1.9307982 128.0 +4.3257484 6.6560392 -1.9317625 128.0 +4.3611679 6.6212678 -1.9293517 128.0 +4.3963242 6.5863123 -1.926941 128.0 +4.4317594 6.5519786 -1.9247713 128.0 +4.4866953 6.5462747 -1.9312804 128.0 +4.5090604 6.4931154 -1.923566 128.0 +4.5722761 6.4986596 -1.9336911 128.0 +4.5878377 6.4365034 -1.9233248 128.0 +4.6278133 6.4090185 -1.923566 128.0 +4.6796589 6.3977332 -1.9288696 128.0 +4.6939778 6.3353715 -1.9185034 128.0 +4.7613125 6.3444815 -1.9303161 128.0 +4.7713695 6.2772923 -1.9185034 128.0 +4.8003221 6.2355943 -1.9146461 128.0 +4.8367023 6.2037268 -1.9139229 128.0 +4.8668566 6.1640315 -1.910789 128.0 +4.9209538 6.1545167 -1.917298 128.0 +4.9512949 6.1151562 -1.9144051 128.0 +4.9757991 6.068902 -1.9093425 128.0 +5.0067434 6.0307903 -1.9069318 128.0 +5.0517731 6.0096126 -1.9100658 128.0 +5.1269302 6.0235791 -1.9247713 128.0 +5.1625261 5.9905372 -1.9242891 128.0 +5.1723833 5.9280381 -1.9141641 128.0 +5.1887379 5.8736444 -1.9066907 128.0 +5.2207975 5.8373566 -1.9052442 128.0 +5.2330623 5.7793174 -1.8965656 128.0 +5.2526827 5.7299318 -1.8907797 128.0 +5.3095317 5.721066 -1.8987352 128.0 +5.3345661 5.6777716 -1.8951191 128.0 +5.3672967 5.6428227 -1.8943958 128.0 +5.425384 5.6342483 -1.9028335 128.0 +5.438849 5.5793123 -1.8953601 128.0 +5.4770713 5.5499792 -1.8968066 128.0 +5.5096502 5.5148954 -1.8963245 128.0 +5.5378637 5.4755268 -1.8943958 128.0 +5.572051 5.442122 -1.894637 128.0 +5.5941615 5.3970504 -1.8907797 128.0 +5.6229558 5.3586073 -1.8893332 128.0 +5.6408877 5.3100371 -1.8842707 128.0 +5.6705203 5.2726822 -1.8833064 128.0 +5.6934724 5.2292562 -1.8801724 128.0 +5.7297649 5.1981354 -1.8816189 128.0 +5.7478175 5.1505766 -1.8770385 128.0 +5.7916689 5.1261444 -1.8811368 128.0 +5.8215518 5.0892339 -1.8806546 128.0 +5.8938107 5.0889301 -1.8941548 128.0 +5.9131079 5.0425963 -1.8902975 128.0 +5.9320593 4.9962177 -1.8864404 128.0 +5.9931984 4.9851665 -1.8963245 128.0 +6.0094237 4.9365969 -1.891744 128.0 +6.0245256 4.8874044 -1.8869225 128.0 +6.0581884 4.8533797 -1.8881279 128.0 +6.09166 4.8191261 -1.8893332 128.0 +6.0943437 4.7607512 -1.8808956 128.0 +6.1618681 4.7528987 -1.8929495 128.0 +6.1716108 4.7003031 -1.8869225 128.0 +6.1855955 4.6512666 -1.8823421 128.0 +6.2522058 4.6415658 -1.8941548 128.0 +6.2876143 4.6082778 -1.8963245 128.0 +6.2890353 4.5502725 -1.8881279 128.0 +6.3405318 4.5285163 -1.8953601 128.0 +6.3681989 4.4895263 -1.8953601 128.0 +6.402 4.4548011 -1.8972888 128.0 +6.4420152 4.4242239 -1.9011459 128.0 +6.4561853 4.3759031 -1.8972888 128.0 +6.4821072 4.3356671 -1.8970476 128.0 +6.5191188 4.3027601 -1.9001817 128.0 +6.5616641 4.2732687 -1.9050032 128.0 +6.5518322 4.2098484 -1.8943958 128.0 +6.5726213 4.166451 -1.8929495 128.0 +6.6038227 4.1296449 -1.894637 128.0 +6.6257334 4.0870094 -1.8936726 128.0 +6.6490278 4.045269 -1.8931905 128.0 +6.6795497 4.0078897 -1.894878 128.0 +6.7157102 3.9737465 -1.8982531 128.0 +6.7592478 3.943711 -1.9037977 128.0 +6.7690163 3.8939381 -1.8996994 128.0 +6.7514129 3.8288777 -1.8878869 128.0 +6.7612243 3.7798045 -1.8840296 128.0 +6.7766385 3.7340331 -1.8818599 128.0 +6.8326869 3.7104397 -1.8912619 128.0 +6.8835654 3.6835518 -1.8992174 128.0 +6.8965936 3.6362681 -1.8965656 128.0 +6.9110236 3.5898578 -1.8943958 128.0 +6.9588418 3.5606434 -1.9016281 128.0 +6.9987597 3.5270469 -1.9066907 128.0 +7.0289636 3.4883502 -1.9091015 128.0 +7.0170984 3.4289689 -1.8999406 128.0 +7.0327582 3.3833246 -1.8984941 128.0 +7.051631 3.3392782 -1.8980119 128.0 +7.091342 3.3049638 -1.9033157 128.0 +7.1026649 3.2573457 -1.9009049 128.0 +7.1127863 3.2093141 -1.8982531 128.0 +7.1376672 3.1679718 -1.8996994 128.0 +7.1889935 3.1380889 -1.9083782 128.0 +7.2428966 3.1088428 -1.9177802 128.0 +7.2484226 3.0586851 -1.9141641 128.0 +7.2258143 2.9970543 -1.9030745 128.0 +7.2611446 2.9596186 -1.907655 128.0 +7.3052969 2.9254684 -1.9146461 128.0 +7.3240132 2.880944 -1.9148872 128.0 +7.330688 2.8317556 -1.9119943 128.0 +7.3560925 2.789818 -1.9141641 128.0 +7.3921733 2.7517366 -1.9192266 128.0 +7.4061837 2.7053289 -1.9185034 128.0 +7.397975 2.6509986 -1.9119943 128.0 +7.4250898 2.6094153 -1.9148872 128.0 +7.4281144 2.5593824 -1.9115121 128.0 +7.4455175 2.5143769 -1.9119943 128.0 +7.4838409 2.476263 -1.9180212 128.0 +7.4988942 2.4302964 -1.9180212 128.0 +7.4840622 2.3748496 -1.9103068 128.0 +7.5216651 2.3360765 -1.9163337 128.0 +7.5302854 2.2881882 -1.9148872 128.0 +7.5274377 2.2369664 -1.9105479 128.0 +7.5410218 2.1907368 -1.9105479 128.0 +7.5879335 2.1539607 -1.9192266 128.0 +7.5757551 2.1003642 -1.9127176 128.0 +7.6081738 2.0591624 -1.9177802 128.0 +7.6281724 2.0144219 -1.9197087 128.0 +7.6187716 1.9620149 -1.9141641 128.0 +7.6278429 1.9145217 -1.9134408 128.0 +7.6573596 1.8720586 -1.9180212 128.0 +7.6696463 1.8252633 -1.9182622 128.0 +7.7015033 1.7829814 -1.923566 128.0 +7.6782112 1.7280262 -1.9148872 128.0 +7.6905661 1.6812953 -1.9153694 128.0 +7.7320676 1.6407186 -1.9233248 128.0 +7.7629027 1.5975453 -1.9286286 128.0 +7.718307 1.539073 -1.9148872 128.0 +7.7685814 1.499589 -1.9252535 128.0 +7.7671423 1.449936 -1.9226016 128.0 +7.7892642 1.4046599 -1.9259766 128.0 +7.7872186 1.3550109 -1.9233248 128.0 +7.8193154 1.3112129 -1.9293517 128.0 +7.7936792 1.2578027 -1.9209141 128.0 +7.8089228 1.2111468 -1.9228427 128.0 +7.8315663 1.1654929 -1.9266999 128.0 +7.8491392 1.1189224 -1.9293517 128.0 +7.8414326 1.068776 -1.9257356 128.0 +7.8391809 1.0195166 -1.923566 128.0 +7.8520312 0.97223085 -1.9252535 128.0 +7.8636322 0.9247126 -1.9266999 128.0 +7.8527608 0.87462097 -1.9226016 128.0 +7.881144 0.82885373 -1.9283874 128.0 +7.8870473 0.78057575 -1.9286286 128.0 +7.88589 0.73162997 -1.9271821 128.0 +7.886363 0.68289495 -1.9262178 128.0 +7.9087853 0.63596761 -1.9307982 128.0 +7.8951173 0.58613741 -1.9264588 128.0 +7.8898506 0.5370909 -1.9242891 128.0 +7.8813739 0.48795164 -1.9213963 128.0 +7.927825 0.44200805 -1.9322447 128.0 +7.91294 0.39249262 -1.9279053 128.0 +7.9248953 0.34435225 -1.9303161 128.0 +7.9161911 0.2953231 -1.9276642 128.0 +7.9197941 0.24680488 -1.9281464 128.0 +7.9328017 0.1984949 -1.9310392 128.0 +7.918345 0.14952551 -1.9271821 128.0 +7.913291 0.10086328 -1.9257356 128.0 +7.9157019 0.052318886 -1.9262178 128.0 +7.8935523 0.0037407619 -1.920673 128.0 +7.9312754 -0.044913091 -1.9300749 128.0 +7.913383 -0.093368977 -1.9257356 128.0 +7.9340086 -0.14230885 -1.9310392 128.0 +7.9145517 -0.19054183 -1.9264588 128.0 +7.9287548 -0.23957226 -1.9303161 128.0 +7.9465327 -0.28892577 -1.9351375 128.0 +7.94558 -0.33772069 -1.9353787 128.0 +7.9443274 -0.38651478 -1.9356197 128.0 +7.9253325 -0.43434775 -1.9315214 128.0 +7.9186435 -0.4827317 -1.9305571 128.0 +7.9116592 -0.53104997 -1.9295928 128.0 +7.9179306 -0.58029574 -1.9320036 128.0 +7.9287329 -0.6300236 -1.9356197 128.0 +7.9343872 -0.67949104 -1.9380305 128.0 +7.9223371 -0.72745162 -1.9361018 128.0 +7.9109635 -0.77538484 -1.9344143 128.0 +7.9060569 -0.82391101 -1.9344143 128.0 +7.9240036 -0.87496585 -1.9402001 128.0 +7.9011345 -0.9215439 -1.9358608 128.0 +7.8779931 -0.96787423 -1.9315214 128.0 +7.8699808 -1.0159457 -1.9310392 128.0 +7.8828335 -1.0668218 -1.9358608 128.0 +7.8819046 -1.1159871 -1.9373072 128.0 +7.8998699 -1.1680228 -1.9435751 128.0 +7.8704934 -1.21307 -1.9380305 128.0 +7.8705678 -1.2625705 -1.939959 128.0 +7.8387413 -1.3068463 -1.9339322 128.0 +7.841094 -1.356741 -1.936584 128.0 +7.8383527 -1.4058563 -1.9380305 128.0 +7.8209915 -1.452329 -1.9358608 128.0 +7.7919188 -1.4964436 -1.9307982 128.0 +7.7778306 -1.5432806 -1.9295928 128.0 +7.7596579 -1.5892217 -1.9274231 128.0 +7.7981868 -1.6470394 -1.939718 128.0 +7.778451 -1.6927921 -1.9373072 128.0 +7.7821226 -1.7436728 -1.9409233 128.0 +7.7504725 -1.7865912 -1.9356197 128.0 +7.7185893 -1.829187 -1.9303161 128.0 +7.6893048 -1.8721483 -1.9257356 128.0 +7.6635499 -1.9157611 -1.9221195 128.0 +7.6394305 -1.9596111 -1.9189855 128.0 +7.4846048 -1.9688985 -1.8823421 128.0 +7.3074703 -1.9702941 -1.8399129 128.0 +7.1698952 -1.9804504 -1.8076088 128.0 +7.0212688 -1.9858226 -1.7724118 128.0 +6.96141 -2.0150969 -1.7601171 128.0 +6.8549323 -2.0299261 -1.7357684 128.0 +6.7764025 -2.0519683 -1.7186521 128.0 +6.6793213 -2.0673816 -1.6967143 128.0 +6.6276484 -2.0960288 -1.6865891 128.0 +6.4706011 -2.0900948 -1.6489815 128.0 +6.2963705 -2.0765357 -1.6067933 128.0 +6.281671 -2.114511 -1.6063112 128.0 +6.2153449 -2.1347206 -1.5923288 128.0 +5.8879867 -2.0627 -1.5096401 128.0 +5.7034097 -2.0373781 -1.4643179 128.0 +5.6670928 -2.0636966 -1.45805 128.0 +5.6534138 -2.0980926 -1.457809 128.0 +5.4398289 -2.0568457 -1.4045314 128.0 +5.347414 -2.0594745 -1.3833168 128.0 +5.2443333 -2.0567935 -1.3592092 128.0 +5.131577 -2.0489655 -1.3324499 128.0 +5.0254107 -2.0423918 -1.3073781 128.0 +4.9311795 -2.0394185 -1.2854402 128.0 +4.8801117 -2.0534434 -1.275074 128.0 +4.7969418 -2.0531642 -1.2560291 128.0 +4.8296318 -2.102324 -1.2683239 128.0 +4.7421017 -2.0989065 -1.2480736 128.0 +4.4919677 -2.021183 -1.1834655 128.0 +4.3700533 -1.9986287 -1.1535722 128.0 +4.3277879 -2.0114901 -1.1453756 128.0 +4.2767558 -2.0197623 -1.1347684 128.0 +4.2135382 -2.0216038 -1.120786 128.0 +4.1399927 -2.017642 -1.1039107 128.0 +4.0753541 -2.0171621 -1.0894462 128.0 +4.0394907 -2.0303564 -1.0829372 128.0 +4.0330067 -2.0581937 -1.0846248 128.0 +4.0297794 -2.0878143 -1.0872766 128.0 +3.9765272 -2.0912595 -1.075946 128.0 +3.8977041 -2.0804143 -1.0573833 128.0 +3.9915204 -2.1620982 -1.0875176 128.0 +3.8863373 -2.136039 -1.0614815 128.0 +3.88587 -2.1669383 -1.0650977 128.0 +3.8665888 -2.1873941 -1.0634102 128.0 +3.853936 -2.2115612 -1.0636512 128.0 +3.8352616 -2.2322364 -1.0622047 128.0 +3.8148077 -2.2517788 -1.0602762 128.0 +3.7992539 -2.2741463 -1.0597939 128.0 +3.7910352 -2.3009415 -1.0614815 128.0 +3.7793248 -2.3256862 -1.0622047 128.0 +3.7542808 -2.3421512 -1.0590708 128.0 +3.7365587 -2.3630669 -1.0581064 128.0 +3.7219887 -2.3859496 -1.0581064 128.0 +3.7658634 -2.4468286 -1.0754639 128.0 +3.7645562 -2.4789667 -1.0795622 128.0 +3.7500818 -2.5025578 -1.0798032 128.0 +3.6639214 -2.4776609 -1.0585886 128.0 +3.6526518 -2.5028396 -1.0597939 128.0 +3.6188934 -2.51247 -1.0542493 128.0 +3.6938858 -2.5983043 -1.0817318 128.0 +3.6660202 -2.6124692 -1.0781157 128.0 +3.5728207 -2.5792246 -1.0544903 128.0 +3.50915 -2.5661407 -1.0397848 128.0 +3.5471382 -2.6274974 -1.0564189 128.0 +3.5907128 -2.6940765 -1.0749817 128.0 +3.5169454 -2.6725905 -1.0571421 128.0 +3.4689541 -2.6698425 -1.0472581 128.0 +3.4532721 -2.6916742 -1.0474992 128.0 +3.4397378 -2.7152185 -1.0484635 128.0 +3.4230127 -2.7362733 -1.0484635 128.0 +3.4544261 -2.7963176 -1.0638922 128.0 +3.4882314 -2.8593106 -1.0802854 128.0 +3.4579287 -2.8701196 -1.0761871 128.0 +3.4350533 -2.8869107 -1.0744996 128.0 +3.4202306 -2.9104502 -1.0754639 128.0 +3.3493822 -2.8857574 -1.0581064 128.0 +3.4756551 -3.0319734 -1.1055982 128.0 +3.2649913 -2.8835852 -1.0419544 128.0 +3.4526525 -3.0873384 -1.1104198 128.0 +3.1984291 -2.8954194 -1.0315882 128.0 +3.1770263 -2.9117105 -1.0303829 128.0 +3.1932411 -2.9628437 -1.0419544 128.0 +3.2124829 -3.0176075 -1.0547314 128.0 +3.1601577 -3.0051515 -1.0431598 128.0 +3.1584346 -3.0406437 -1.0489457 128.0 +3.1015017 -3.022701 -1.0356865 128.0 +3.0822058 -3.0409927 -1.0354455 128.0 +3.0710397 -3.0673938 -1.0380973 128.0 +3.0610301 -3.0951526 -1.0412313 128.0 +3.0948653 -3.1680396 -1.0600351 128.0 +3.0342708 -3.1443584 -1.0453295 128.0 +3.0336645 -3.1825919 -1.0520796 128.0 +3.0014422 -3.1877177 -1.0474992 128.0 +2.9930592 -3.2181582 -1.0515975 128.0 +2.9660363 -3.2285991 -1.0489457 128.0 +2.9083548 -3.2050424 -1.0349633 128.0 +2.8912246 -3.2257187 -1.0359275 128.0 +2.87395 -3.2463057 -1.0368918 128.0 +2.8399267 -3.247802 -1.0315882 128.0 +2.8174086 -3.2622275 -1.0306239 128.0 +2.7828574 -3.2624669 -1.0250791 128.0 +2.764662 -3.281708 -1.0258024 128.0 +2.8195567 -3.3889022 -1.0549725 128.0 +2.8313539 -3.4458892 -1.0677495 128.0 +2.7997646 -3.4503832 -1.0636512 128.0 +2.800988 -3.4955251 -1.0725709 128.0 +2.7560084 -3.4829583 -1.063169 128.0 +2.7321961 -3.4967437 -1.0622047 128.0 +2.699429 -3.4988399 -1.0576243 128.0 +2.7037776 -3.5493131 -1.0682316 128.0 +2.6370454 -3.5061023 -1.0496688 128.0 +2.6467156 -3.5643005 -1.0626869 128.0 +2.5909536 -3.5342846 -1.0484635 128.0 +2.5692189 -3.5501158 -1.0484635 128.0 +2.5141149 -3.5192127 -1.03424 128.0 +2.4678743 -3.4996681 -1.0236328 128.0 +2.4663057 -3.543426 -1.0323114 128.0 +2.4285872 -3.5352898 -1.0253203 128.0 +2.4073939 -3.5509281 -1.0255613 128.0 +2.3828633 -3.561599 -1.024356 128.0 +2.3582923 -3.5721025 -1.0231506 128.0 +2.3405659 -3.5930121 -1.0250791 128.0 +2.320049 -3.6097558 -1.0258024 128.0 +2.2921422 -3.6149058 -1.0231506 128.0 +2.259115 -3.6116204 -1.018088 128.0 +2.2292709 -3.613023 -1.0144719 128.0 +2.2211807 -3.6498508 -1.021222 128.0 +2.2142193 -3.6892114 -1.0286953 128.0 +2.2019172 -3.7202697 -1.0337579 128.0 +2.2206104 -3.8049686 -1.0542493 128.0 +2.1870615 -3.8008547 -1.0491867 128.0 +2.1823657 -3.8471291 -1.0585886 128.0 +2.1639271 -3.8697665 -1.0612404 128.0 +2.14061 -3.8838212 -1.0614815 128.0 +2.0898843 -3.8474126 -1.0474992 128.0 +2.0488422 -3.8276446 -1.0383383 128.0 +2.0497534 -3.8865058 -1.0513563 128.0 +2.0339179 -3.9145133 -1.0556958 128.0 +1.9930668 -3.8940859 -1.0465349 128.0 +1.9442474 -3.8568377 -1.0327936 128.0 +1.9114882 -3.8504374 -1.0277311 128.0 +1.9001794 -3.8873825 -1.0347222 128.0 +1.8737675 -3.8937209 -1.0332757 128.0 +1.8369685 -3.8779519 -1.0258024 128.0 +1.8045326 -3.870676 -1.0207398 128.0 +1.7872196 -3.8957913 -1.024597 128.0 +1.7908139 -3.9677274 -1.0412313 128.0 +1.769977 -3.986625 -1.0434009 128.0 +1.7384958 -3.9813991 -1.0390615 128.0 +1.711355 -3.9857481 -1.037374 128.0 +1.6819633 -3.984549 -1.03424 128.0 +1.6571113 -3.9938979 -1.033999 128.0 +1.6340387 -4.0075855 -1.0349633 128.0 +1.6155491 -4.0328536 -1.0390615 128.0 +1.2051073 -3.061816 -0.77725405 128.0 +1.191891 -3.0836387 -0.78111124 128.0 +1.5523962 -4.0918541 -1.047017 128.0 +1.4802166 -3.9748707 -1.0135076 128.0 +1.3662621 -3.7386465 -0.94865841 128.0 +1.3521322 -3.7716284 -0.95516741 128.0 +1.4084097 -4.0060215 -1.0147129 128.0 +1.4138242 -4.1017613 -1.0376151 128.0 +1.4128393 -4.1820831 -1.0564189 128.0 +1.3731343 -4.1482878 -1.0453295 128.0 +1.3533374 -4.1741772 -1.0499099 128.0 +1.0419266 -3.2813613 -0.81510282 128.0 +1.0214852 -3.2867658 -0.81486171 128.0 +1.0072213 -3.3124728 -0.81992429 128.0 +0.98770636 -3.3213816 -0.82064754 128.0 +0.96379024 -3.3152633 -0.81751359 128.0 +0.94051629 -3.3108444 -0.81486171 128.0 +0.91914701 -3.3128119 -0.81389743 128.0 +0.82835495 -3.0579481 -0.74687856 128.0 +0.8056137 -3.0479593 -0.74302137 128.0 +1.1120013 -4.316041 -1.0670263 128.0 +1.0821919 -4.3096042 -1.0636512 128.0 +1.0573407 -4.3227625 -1.0653387 128.0 +1.0177729 -4.2744069 -1.0513563 128.0 +0.98758882 -4.2635517 -1.047017 128.0 +0.95864123 -4.2572222 -1.0438831 128.0 +0.92628735 -4.2345796 -1.0366508 128.0 +0.89968306 -4.2373357 -1.0359275 128.0 +0.84160686 -4.0868754 -0.99639124 128.0 +0.75203413 -3.7683516 -0.91442573 128.0 +0.73110348 -3.7843304 -0.91731864 128.0 +0.79613447 -4.2619548 -1.0368918 128.0 +0.77134538 -4.2744007 -1.0388205 128.0 +0.74443871 -4.2752285 -1.0378562 128.0 +0.72524834 -4.3218307 -1.0484635 128.0 +0.70242411 -4.349195 -1.0542493 128.0 +0.68256056 -4.3975396 -1.0653387 128.0 +0.64899993 -4.3574872 -1.0542493 128.0 +0.62485033 -4.379643 -1.0588297 128.0 +0.6029408 -4.4199367 -1.0679905 128.0 +0.56093144 -4.3090248 -1.0393026 128.0 +0.5461545 -4.406776 -1.062928 128.0 +0.5094825 -4.3281145 -1.0424366 128.0 +0.4793756 -4.2993288 -1.0344812 128.0 +0.45045224 -4.278059 -1.0284542 128.0 +0.43316567 -4.3715277 -1.0511153 128.0 +0.40624478 -4.373137 -1.0508742 128.0 +0.38007274 -4.3832827 -1.0528028 128.0 +0.34983137 -4.3439341 -1.0424366 128.0 +0.31743398 -4.2685704 -1.0231506 128.0 +0.29294661 -4.2956133 -1.0294186 128.0 +0.26754099 -4.3128285 -1.0332757 128.0 +0.24295889 -4.3483043 -1.0417134 128.0 +0.21699268 -4.364253 -1.0453295 128.0 +0.19050397 -4.3722892 -1.047017 128.0 +0.16313194 -4.3588285 -1.0434009 128.0 +0.13728622 -4.3888483 -1.0506332 128.0 +0.10963012 -4.3605022 -1.0434009 128.0 +0.082890704 -4.3620629 -1.0436419 128.0 +0.056013979 -4.3537555 -1.0414723 128.0 +0.029148243 -4.3307257 -1.0356865 128.0 +0.0025745439 -4.3298526 -1.0354455 128.0 +-0.024043716 -4.338521 -1.0376151 128.0 +-0.050466865 -4.3217945 -1.0335168 128.0 +-0.07744015 -4.3466325 -1.0397848 128.0 +-0.10349813 -4.3208499 -1.0335168 128.0 +-0.13260025 -4.4054985 -1.0547314 128.0 +-0.15987721 -4.4113913 -1.0564189 128.0 +-0.1879345 -4.433598 -1.0622047 128.0 +-0.21541883 -4.4381776 -1.0636512 128.0 +-0.24152867 -4.4164224 -1.0585886 128.0 +-0.27022105 -4.4410119 -1.0650977 128.0 +-0.2966187 -4.4266825 -1.0619637 128.0 +-0.32135808 -4.3918705 -1.0537671 128.0 +-0.34799197 -4.3859463 -1.0528028 128.0 +-0.37439939 -4.3779263 -1.0513563 128.0 +-0.40258801 -4.3900433 -1.0549725 128.0 +-0.4272418 -4.3643098 -1.0491867 128.0 +-0.45683321 -4.3886333 -1.0559368 128.0 +-0.48140636 -4.3645258 -1.0506332 128.0 +-0.50862783 -4.365346 -1.0515975 128.0 +-0.54286808 -4.4228272 -1.0667852 128.0 +-0.57621545 -4.4675379 -1.0788389 128.0 +-0.91163838 -6.7374249 -1.6487404 128.0 +-0.9517355 -6.7230558 -1.6465707 128.0 +-0.99353784 -6.7209301 -1.647535 128.0 +-1.0301707 -6.6849732 -1.6400616 128.0 +-1.0724005 -6.686192 -1.6419903 128.0 +-1.1126072 -6.6746998 -1.6407849 128.0 +-1.1585097 -6.6964355 -1.6480172 128.0 +-1.2021486 -6.7035298 -1.6516333 128.0 +-1.2390021 -6.6731272 -1.6458474 128.0 +-1.2802906 -6.6673055 -1.6463296 128.0 +-1.325146 -6.6793146 -1.6513922 128.0 +-1.3686377 -6.6834173 -1.6545261 128.0 +-1.405406 -6.6549535 -1.6494635 128.0 +-1.4441484 -6.6367221 -1.6470529 128.0 +-1.4837818 -6.6230011 -1.6458474 128.0 +-1.5182841 -6.5872931 -1.6390973 128.0 +-1.5609137 -6.5872965 -1.6415081 128.0 +-1.6026815 -6.5832524 -1.6429546 128.0 +-1.6517591 -6.60813 -1.6518743 128.0 +-1.6862428 -6.5743699 -1.6458474 128.0 +-1.722598 -6.548883 -1.6419903 128.0 +-1.7675519 -6.5559931 -1.6465707 128.0 +-1.8033502 -6.5291214 -1.6424724 128.0 +-1.8436425 -6.5188675 -1.6427135 128.0 +-1.8830668 -6.505568 -1.6422313 128.0 +-1.9301174 -6.5180845 -1.6484993 128.0 +-1.9785178 -6.5339832 -1.6557316 128.0 +-2.01283 -6.5031791 -1.65091 128.0 +-2.0570869 -6.5045853 -1.6545261 128.0 +-2.0996459 -6.5001521 -1.6566958 128.0 +-2.1376657 -6.481617 -1.6552494 128.0 +-2.182972 -6.4849339 -1.6595887 128.0 +-1.3212644 -3.8482838 -0.97059619 128.0 +-1.3419627 -3.8318615 -0.96842653 128.0 +-2.2921689 -6.4162374 -1.6523565 128.0 +-2.3374755 -6.4184651 -1.6566958 128.0 +-2.3761389 -6.4021826 -1.6562136 128.0 +-2.4105692 -6.3747745 -1.6528386 128.0 +-2.4440551 -6.3453736 -1.6489815 128.0 +-2.4964159 -6.3645883 -1.6581423 128.0 +-2.5278597 -6.330225 -1.6530797 128.0 +-2.5659225 -6.3127971 -1.6525975 128.0 +-2.6068354 -6.3023143 -1.654044 128.0 +-2.6450799 -6.285306 -1.653803 128.0 +-2.6965868 -6.2992902 -1.6619995 128.0 +-2.7685168 -6.3591461 -1.682732 128.0 +-1.3793254 -3.1173177 -0.80666518 128.0 +-1.3988254 -3.1096807 -0.80690628 128.0 +-2.8515785 -6.2338629 -1.6627227 128.0 +-2.8844547 -6.2048087 -1.6595887 128.0 +-1.6071776 -3.4036801 -0.89489865 128.0 +-1.6246717 -3.3867552 -0.89297003 128.0 +-1.6394663 -3.3645103 -0.88959503 128.0 +-1.6570646 -3.3482997 -0.88790751 128.0 +-1.6784502 -3.3398032 -0.88838965 128.0 +-1.7037665 -3.3389492 -0.89104146 128.0 +-1.7353886 -3.3499722 -0.89706832 128.0 +-1.7852879 -3.3950863 -0.9127382 128.0 +-2.0891013 -3.9139693 -1.0619637 128.0 +-3.2715337 -6.0384393 -1.6658567 128.0 +-3.3066525 -6.0148506 -1.6648924 128.0 +-3.3316743 -5.9732604 -1.6588656 128.0 +-3.3883426 -5.9881778 -1.6689907 128.0 +-3.446768 -6.0051479 -1.679839 128.0 +-3.4742703 -5.9679513 -1.6752586 128.0 +-3.5019395 -5.9314799 -1.6709193 128.0 +-3.5462472 -5.9232025 -1.6747764 128.0 +-3.5845397 -5.9046497 -1.6757407 128.0 +-3.6023839 -5.8527932 -1.667062 128.0 +-3.6449089 -5.8412819 -1.6701961 128.0 +-3.6822386 -5.8212676 -1.6709193 128.0 +-3.7409427 -5.8345079 -1.6815265 128.0 +-3.7793171 -5.8155127 -1.682732 128.0 +-3.7978425 -5.7662802 -1.6750176 128.0 +-3.834769 -5.7452898 -1.6757407 128.0 +-3.8514581 -5.6943231 -1.6675442 128.0 +-2.1066172 -3.0747278 -0.88573778 128.0 +-2.1304269 -3.0689175 -0.88790751 128.0 +-2.1525688 -3.0605497 -0.88935393 128.0 +-4.0559645 -5.6905432 -1.69575 128.0 +-4.0731883 -5.64116 -1.6882766 128.0 +-4.1037135 -5.6105785 -1.6865891 128.0 +-4.1392179 -5.5868526 -1.6870713 128.0 +-4.1769161 -5.5660067 -1.6885178 128.0 +-4.2162766 -5.5472255 -1.6906874 128.0 +-4.2502346 -5.5212507 -1.6906874 128.0 +-4.2744827 -5.4828229 -1.6868303 128.0 +-4.2797728 -5.4206963 -1.6754997 128.0 +-4.3184085 -5.401155 -1.6776694 128.0 +-4.366128 -5.3926563 -1.6834552 128.0 +-4.4003654 -5.3672657 -1.6839373 128.0 +-4.4350758 -5.3424044 -1.6846606 128.0 +-4.477766 -5.3269758 -1.6885178 128.0 +-4.5229502 -5.3141794 -1.6933392 128.0 +-4.5453339 -5.2745657 -1.6894821 128.0 +-4.5520859 -5.2173295 -1.679839 128.0 +-4.5975084 -5.2045727 -1.6849016 128.0 +-4.625474 -5.1719251 -1.6834552 128.0 +-4.6532121 -5.1391306 -1.6820087 128.0 +-4.6885929 -5.1147738 -1.6834552 128.0 +-4.7377167 -5.105113 -1.6899642 128.0 +-4.7556586 -5.0618029 -1.6851428 128.0 +-4.8066969 -5.0536208 -1.6923749 128.0 +-4.8450212 -5.0317211 -1.6950268 128.0 +-4.8595428 -4.9852214 -1.6892409 128.0 +-4.9057212 -4.9711957 -1.6947857 128.0 +-4.9080048 -4.9128556 -1.6849016 128.0 +-4.9339156 -4.8785548 -1.6834552 128.0 +-4.9540353 -4.838697 -1.6800802 128.0 +-4.9920144 -4.8162932 -1.682973 128.0 +-5.018662 -4.7828941 -1.6820087 128.0 +-5.0373135 -4.7420335 -1.6783926 128.0 +-5.0663152 -4.7110362 -1.6783926 128.0 +-5.1315846 -4.7133365 -1.6906874 128.0 +-5.1834126 -4.7026248 -1.6984018 128.0 +-5.2280731 -4.684978 -1.7037054 128.0 +-5.2632627 -4.6585989 -1.7058752 128.0 +-5.282979 -4.6185527 -1.7029823 128.0 +-5.3126879 -4.5873184 -1.7034644 128.0 +-5.3459048 -4.559041 -1.7051519 128.0 +-5.3715506 -4.5242782 -1.7044287 128.0 +-5.3798084 -4.4751005 -1.6981608 128.0 +-5.3906655 -4.4284558 -1.6928571 128.0 +-5.4222593 -4.3989639 -1.6943035 128.0 +-5.4446034 -4.3619704 -1.6928571 128.0 +-5.4682207 -4.3260732 -1.6918929 128.0 +-5.5091953 -4.3037887 -1.6964732 128.0 +-5.5247393 -4.2616072 -1.6930982 128.0 +-5.5662274 -4.2393856 -1.6979197 128.0 +-5.5696378 -4.1882405 -1.6909285 128.0 +-5.5765276 -4.1401057 -1.6851428 128.0 +-5.6026087 -4.1063848 -1.6853838 128.0 +-5.587595 -4.0429225 -1.6730889 128.0 +-5.6225648 -4.015893 -1.6762229 128.0 +-5.658999 -3.9897041 -1.679839 128.0 +-5.6961203 -3.9637735 -1.6836963 128.0 +-5.717134 -3.9265509 -1.682732 128.0 +-5.7379055 -3.8892198 -1.6817677 128.0 +-5.751173 -3.8469265 -1.6786337 128.0 +-5.7754793 -3.8121002 -1.6788747 128.0 +-5.8239746 -3.7930055 -1.6863481 128.0 +-5.7989612 -3.7262528 -1.6721246 128.0 +-5.8184366 -3.6885231 -1.6711603 128.0 +-5.821209 -3.6404057 -1.6653745 128.0 +-5.8153496 -3.5872996 -1.657178 128.0 +-5.8380809 -3.5520539 -1.6574191 128.0 +-5.8397913 -3.5041842 -1.6516333 128.0 +-5.8611827 -3.468286 -1.6516333 128.0 +-5.9100184 -3.4483929 -1.6595887 128.0 +-5.9293833 -3.4110973 -1.6591066 128.0 +-5.9392262 -3.3684287 -1.6559726 128.0 +-5.9851985 -3.3461263 -1.6632049 128.0 +-5.9869156 -3.2990375 -1.6579012 128.0 +-6.0121632 -3.2650185 -1.6593477 128.0 +-6.0457759 -3.2353914 -1.6632049 128.0 +-6.0449085 -3.1873741 -1.6574191 128.0 +-6.0540166 -3.1448565 -1.6545261 128.0 +-6.093936 -3.118257 -1.6603119 128.0 +-6.0921531 -3.0703275 -1.6545261 128.0 +-6.1213102 -3.0380645 -1.6574191 128.0 +-6.1503005 -3.0055594 -1.6603119 128.0 +-6.183495 -2.9749155 -1.6644102 128.0 +-6.2077727 -2.9398251 -1.6660978 128.0 +-6.243289 -2.9098763 -1.6709193 128.0 +-6.2874928 -2.8836465 -1.6781515 128.0 +-6.3360319 -2.8589785 -1.6865891 128.0 +-6.3605518 -2.8231962 -1.6885178 128.0 +-6.3777552 -2.7841153 -1.6885178 128.0 +-6.3866911 -2.7414858 -1.6863481 128.0 +-6.4159112 -2.7075267 -1.6897231 128.0 +-6.4557128 -2.6777723 -1.695991 128.0 +-6.4953899 -2.6476312 -1.7022591 128.0 +-6.5502563 -2.6232347 -1.7126253 128.0 +-6.5978408 -2.5954232 -1.7210629 128.0 +-6.6118312 -2.5541916 -1.7205807 128.0 +-6.6428061 -2.5194223 -1.724679 128.0 +-6.6999807 -2.4941838 -1.7357684 128.0 +-6.7379498 -2.4613478 -1.7417953 128.0 +-6.753839 -2.4202855 -1.7420365 128.0 +-6.8015265 -2.390378 -1.7507151 128.0 +-6.8252416 -2.3517599 -1.7531259 128.0 +-6.835865 -2.3085952 -1.7521616 128.0 +-6.8545089 -2.2681313 -1.7533669 128.0 +-6.8969183 -2.2353013 -1.7608403 128.0 +-6.9299312 -2.1991019 -1.7659029 128.0 +-7.0100288 -2.1772552 -1.7832602 128.0 +-6.8728194 -2.0885131 -1.7442061 128.0 +-6.8836441 -2.0457504 -1.743724 128.0 +-6.9957929 -2.0324299 -1.769519 128.0 +-7.0557485 -2.0029755 -1.7818139 128.0 +-7.1595616 -1.9850414 -1.8054391 128.0 +-7.228754 -1.9565318 -1.8201448 128.0 +-7.4799089 -1.9752923 -1.8816189 128.0 +-7.5698981 -1.9494364 -1.9016281 128.0 +-7.6899714 -1.9301058 -1.9293517 128.0 +-7.7912335 -1.904767 -1.9522538 128.0 +-7.8462062 -1.8672545 -1.9633434 128.0 +-7.8433328 -1.8157946 -1.9597272 128.0 +-7.8713698 -1.7714678 -1.9640665 128.0 +-7.8868322 -1.7241722 -1.9652719 128.0 +-7.9361882 -1.684001 -1.9751559 128.0 +-7.9340138 -1.6327324 -1.9720221 128.0 +-7.9448342 -1.5842092 -1.9722631 128.0 +-7.9277229 -1.5302842 -1.965513 128.0 +-7.9112039 -1.4768071 -1.9590039 128.0 +-7.8991036 -1.4244509 -1.9537003 128.0 +-7.9402051 -1.381608 -1.9618969 128.0 +-7.9695907 -1.3363898 -1.9672005 128.0 +-7.9565616 -1.2840655 -1.9618969 128.0 +-7.9863491 -1.2386386 -1.9674416 128.0 +-7.9899588 -1.1890411 -1.9664773 128.0 +-7.9788489 -1.1373936 -1.9618969 128.0 +-7.9818311 -1.0878912 -1.9609326 128.0 +-7.9777694 -1.0375199 -1.9582808 128.0 +-8.0042114 -0.99105114 -1.9633434 128.0 +-8.0159254 -0.94259876 -1.9647897 128.0 +-8.0389204 -0.89532739 -1.9691291 128.0 +-8.045228 -0.84608603 -1.9693702 128.0 +-8.0183964 -0.79355592 -1.9614147 128.0 +-8.0134506 -0.74344587 -1.9590039 128.0 +-8.0110931 -0.69367719 -1.9573164 128.0 +-8.0055246 -0.64373249 -1.9549057 128.0 +-8.0519094 -0.59775472 -1.965513 128.0 +-8.0622034 -0.54879826 -1.9672005 128.0 +-8.0731688 -0.49979782 -1.9691291 128.0 +-8.0557346 -0.44912079 -1.9640665 128.0 +-8.0118113 -0.39738229 -1.952495 128.0 +-8.0305815 -0.34892908 -1.9565933 128.0 +-8.0509987 -0.30033252 -1.9611737 128.0 +-8.0478392 -0.25077644 -1.9599683 128.0 +-8.032733 -0.2009808 -1.95587 128.0 +-8.0027647 -0.15110728 -1.9481556 128.0 +-8.0297422 -0.10233054 -1.9546646 128.0 +-8.0535107 -0.05320958 -1.9604504 128.0 +-8.0303936 -0.0037855431 -1.9546646 128.0 +-8.0302658 0.045488097 -1.9546646 128.0 +-8.0589485 0.095107786 -1.9618969 128.0 +-8.0378361 0.1441863 -1.9568343 128.0 +-8.0358295 0.19347931 -1.9565933 128.0 +-7.9947186 0.24157505 -1.9467092 128.0 +-8.0018148 0.2909438 -1.9488788 128.0 +-7.9824257 0.33929217 -1.9445394 128.0 +-7.9549904 0.38703513 -1.9382715 128.0 +-7.9447136 0.43541273 -1.936343 128.0 +-7.9748278 0.48616502 -1.9445394 128.0 +-8.0646534 0.54134172 -1.9676827 128.0 +-7.6650147 -0.19095019 -1.9540584 128.0 +-7.6641068 -0.14387852 -1.953555 128.0 +-7.6648455 -0.09684974 -1.953555 128.0 +-7.6652951 -0.049817309 -1.953555 128.0 +-7.6596498 -0.0027805967 -1.9520446 128.0 +-7.6517806 0.044173885 -1.9500308 128.0 +-7.6542687 0.091157921 -1.950786 128.0 +-7.6651769 0.13833088 -1.9538068 128.0 +-7.6661186 0.18540761 -1.9543102 128.0 +-7.62711 0.23130038 -1.9444927 128.0 +-7.6487589 0.27894041 -1.9505342 128.0 +-7.6353002 0.3253732 -1.9475135 128.0 +-7.6476598 0.37292269 -1.9512894 128.0 +-7.6432953 0.41973481 -1.950786 128.0 +-7.6454058 0.46692002 -1.9520446 128.0 +-7.6201878 0.51233047 -1.9462547 128.0 +-7.6159353 0.55900663 -1.9460031 128.0 +-7.6152563 0.60595679 -1.9467583 128.0 +-7.6027164 0.65192801 -1.9444927 128.0 +-7.6053195 0.69918495 -1.9462547 128.0 +-7.5893278 0.74470359 -1.943234 128.0 +-7.5923162 0.79205978 -1.9452479 128.0 +-7.5776939 0.83756775 -1.9427305 128.0 +-7.5762572 0.88449651 -1.9437375 128.0 +-7.57549 0.93155724 -1.9449961 128.0 +-7.5456362 0.97492301 -1.9387028 128.0 +-7.5519795 1.0228919 -1.9419754 128.0 +-7.5714335 1.0728754 -1.9487721 128.0 +-7.5407734 1.1157725 -1.9424788 128.0 +-7.5529151 1.1649704 -1.9475135 128.0 +-7.5236464 1.2077652 -1.9417236 128.0 +-7.5180035 1.2542251 -1.9422271 128.0 +-7.512073 1.3006613 -1.9427305 128.0 +-7.497283 1.3455336 -1.9409684 128.0 +-7.5079165 1.3950458 -1.9460031 128.0 +-7.4849586 1.4383484 -1.9422271 128.0 +-7.4664998 1.4823641 -1.9397098 128.0 +-7.4525228 1.5271785 -1.9384511 128.0 +-7.4458528 1.5734777 -1.9392062 128.0 +-7.4388947 1.6197526 -1.9399614 128.0 +-7.4165392 1.6626148 -1.936689 128.0 +-7.3929954 1.7050463 -1.9331647 128.0 +-7.3786273 1.7494839 -1.9321579 128.0 +-7.3837395 1.7986184 -1.9364372 128.0 +-7.3519087 1.8387254 -1.9308991 128.0 +-7.377985 1.8934222 -1.9409684 128.0 +-7.3381505 1.9312689 -1.9334165 128.0 +-7.2971954 1.9684464 -1.9256128 128.0 +-7.315764 2.0216894 -1.9339199 128.0 +-7.2845964 2.061271 -1.9288853 128.0 +-7.2178941 2.090318 -1.9142848 128.0 +-7.2671041 2.1529827 -1.9311509 128.0 +-7.2222648 2.1879935 -1.922592 128.0 +-7.2087035 2.2322671 -1.922592 128.0 +-7.2114801 2.2817111 -1.9271232 128.0 +-7.1605072 2.3140149 -1.9170539 128.0 +-7.1645555 2.3639712 -1.9220885 128.0 +-7.1957755 2.4233294 -1.9346751 128.0 +-7.1670413 2.4627194 -1.9308991 128.0 +-7.1326156 2.4999278 -1.9256128 128.0 +-7.114408 2.5426686 -1.9248576 128.0 +-7.1014004 2.5872676 -1.9256128 128.0 +-7.0844841 2.6304555 -1.925361 128.0 +-7.033813 2.6608651 -1.9157952 128.0 +-7.0218692 2.7057133 -1.9170539 128.0 +-7.0384698 2.761826 -1.926368 128.0 +-7.0213909 2.8049612 -1.926368 128.0 +-6.9771519 2.8370559 -1.9188161 128.0 +-6.9953837 2.894613 -1.9288853 128.0 +-6.9346757 2.9194589 -1.9168022 128.0 +-6.9397631 2.9718587 -1.9233472 128.0 +-6.9347072 3.0201802 -1.9271232 128.0 +-6.8974614 3.0544455 -1.9218369 128.0 +-6.8882976 3.1010797 -1.9246058 128.0 +-6.8506589 3.1348314 -1.9193195 128.0 +-6.8391929 3.1804798 -1.9215851 128.0 +-6.8037982 3.2149427 -1.9170539 128.0 +-6.7821989 3.2557919 -1.9165505 128.0 +-6.733387 3.2833493 -1.9082433 128.0 +-6.7599478 3.3477936 -1.9218369 128.0 +-6.7012343 3.3700788 -1.9107606 128.0 +-6.7071505 3.4247754 -1.9185643 128.0 +-6.6997581 3.472991 -1.922592 128.0 +-6.6757526 3.5126827 -1.9218369 128.0 +-6.6412678 3.5467403 -1.9180609 128.0 +-6.6108718 3.5828125 -1.9155436 128.0 +-6.5904593 3.6242414 -1.916047 128.0 +-6.5520391 3.655653 -1.9112641 128.0 +-6.5193782 3.6900666 -1.9082433 128.0 +-6.4907384 3.7266264 -1.9064811 128.0 +-6.4869862 3.7775831 -1.912271 128.0 +-6.4811854 3.8276494 -1.9175574 128.0 +-6.4509349 3.8633676 -1.9155436 128.0 +-6.4254537 3.9018724 -1.91504 128.0 +-6.4055123 3.9437616 -1.9162987 128.0 +-6.3902245 3.9886272 -1.9190677 128.0 +-6.350091 4.0179305 -1.9142848 128.0 +-6.3016925 4.0416679 -1.9069847 128.0 +-6.2832661 4.0844774 -1.9089985 128.0 +-6.2435384 4.1133709 -1.9044673 128.0 +-6.2423291 4.1677237 -1.9120193 128.0 +-6.2022099 4.1961865 -1.9074881 128.0 +-6.1308451 4.2029738 -1.8931395 128.0 +-6.1287875 4.2570753 -1.9006914 128.0 +-6.1096745 4.299613 -1.902957 128.0 +-6.0808134 4.3353348 -1.9022018 128.0 +-6.0454674 4.3663316 -1.8994327 128.0 +-6.0013781 4.3907728 -1.8938947 128.0 +-5.9968734 4.4442234 -1.9011948 128.0 +-5.9834237 4.4913931 -1.905726 128.0 +-5.9611459 4.5321221 -1.9074881 128.0 +-5.9278569 4.5644808 -1.905726 128.0 +-5.8951592 4.5971971 -1.9042156 128.0 +-5.8698783 4.6356816 -1.9052225 128.0 +-5.8345213 4.6661711 -1.902957 128.0 +-5.8012676 4.6982293 -1.9014466 128.0 +-5.7738276 4.7349639 -1.90195 128.0 +-5.7722154 4.7931771 -1.9112641 128.0 +-5.7182503 4.8079524 -1.902957 128.0 +-5.6982222 4.8511033 -1.9062295 128.0 +-5.6639504 4.882185 -1.9047191 128.0 +-5.6287832 4.9123921 -1.902957 128.0 +-5.587656 4.9372253 -1.899181 128.0 +-5.5673552 4.9804506 -1.9027052 128.0 +-5.5158877 4.9956779 -1.8954051 128.0 +-5.4865575 5.0307369 -1.8959085 128.0 +-5.4527488 5.0616736 -1.8949015 128.0 +-5.4441576 5.1162434 -1.902957 128.0 +-5.4105587 5.1475506 -1.9022018 128.0 +-5.3558679 5.1584978 -1.8938947 128.0 +-5.3012471 5.1689692 -1.8855875 128.0 +-5.2721868 5.2041192 -1.8865944 128.0 +-5.2292013 5.2254257 -1.8825667 128.0 +-5.2018032 5.2622309 -1.8843288 128.0 +-5.2126923 5.3383632 -1.9004396 128.0 +-5.1825261 5.3730335 -1.9014466 128.0 +-5.1434517 5.3984256 -1.899181 128.0 +-5.1002808 5.419313 -1.8954051 128.0 +-5.0629787 5.4462528 -1.8938947 128.0 +-5.0851083 5.5378056 -1.9152918 128.0 +-5.0230732 5.5380797 -1.9044673 128.0 +-4.9747896 5.5529389 -1.8989292 128.0 +-4.9406238 5.5833592 -1.8989292 128.0 +-4.9190106 5.6281424 -1.9039639 128.0 +-4.8913412 5.6662769 -1.9067329 128.0 +-4.8432946 5.6807184 -1.9014466 128.0 +-4.8108411 5.7132902 -1.9024535 128.0 +-4.7794075 5.7471657 -1.9039639 128.0 +-4.7624817 5.7988195 -1.9115158 128.0 +-4.7383952 5.8422132 -1.9162987 128.0 +-4.7351313 5.9119658 -1.9298922 128.0 +-4.6759515 5.9120655 -1.9203265 128.0 +-4.6431623 5.9452214 -1.9218369 128.0 +-4.5971389 5.9613376 -1.9178091 128.0 +-4.5510931 5.9771137 -1.9137814 128.0 +-4.52073 6.0134349 -1.9165505 128.0 +-4.4722104 6.0255184 -1.9115158 128.0 +-4.4174204 6.0286465 -1.9037122 128.0 +-4.4109783 6.0979805 -1.9173057 128.0 +-4.3852901 6.1414704 -1.922592 128.0 +-4.3263354 6.1382036 -1.9130262 128.0 +-4.3046198 6.1876721 -1.9203265 128.0 +-4.2484932 6.1876407 -1.9120193 128.0 +-4.2283635 6.2400308 -1.9203265 128.0 +-4.194838 6.273098 -1.922592 128.0 +-4.1530695 6.2938724 -1.9210817 128.0 +-4.1138449 6.3184257 -1.9208299 128.0 +-4.0880761 6.363905 -1.9271232 128.0 +-4.0396252 6.3741555 -1.922592 128.0 +-4.018909 6.4283633 -1.9316543 128.0 +-3.9722769 6.44137 -1.9281301 128.0 +-3.9432411 6.4829855 -1.9334165 128.0 +-3.8939281 6.4912906 -1.9286336 128.0 +-3.835299 6.4834094 -1.9190677 128.0 +-3.8154397 6.5410938 -1.9293888 128.0 +-3.7771628 6.5677376 -1.9303957 128.0 +-3.7425213 6.6008925 -1.9334165 128.0 +-3.7071426 6.6330247 -1.9361855 128.0 +-3.6738455 6.669209 -1.9402132 128.0 +-3.6365492 6.6984301 -1.9422271 128.0 +-3.5935538 6.7172041 -1.9412202 128.0 +-3.5306065 6.6980338 -1.929137 128.0 +-3.5112987 6.7616553 -1.9414719 128.0 +-3.4547572 6.7537789 -1.9329131 128.0 +-3.4280584 6.8042355 -1.9414719 128.0 +-3.3862438 6.8251414 -1.9414719 128.0 +-3.3430274 6.8431821 -1.9407167 128.0 +-3.3143997 6.8914742 -1.9487721 128.0 +-3.2662539 6.8994355 -1.9452479 128.0 +-3.2234495 6.9184699 -1.9449961 128.0 +-3.1591551 6.8906131 -1.9314026 128.0 +-3.1347246 6.9495659 -1.9427305 128.0 +-3.0986974 6.9837074 -1.9470099 128.0 +-3.0503681 6.9901714 -1.9434857 128.0 +-3.0181067 7.0336585 -1.9505342 128.0 +-2.980159 7.0645285 -1.9540584 128.0 +-2.9271169 7.0594382 -1.9475135 128.0 +-2.8932421 7.1005678 -1.9540584 128.0 +-2.8575335 7.1379528 -1.9595965 128.0 +-2.8094316 7.1445441 -1.9565758 128.0 +-2.7624023 7.1535225 -1.9543102 128.0 +-2.7174277 7.167623 -1.953555 128.0 +-2.676435 7.1923251 -1.9558206 128.0 +-2.6325855 7.2095208 -1.9560723 128.0 +-2.5847085 7.2155166 -1.9533032 128.0 +-2.5394237 7.2285008 -1.952548 128.0 +-2.494077 7.2412014 -1.9517928 128.0 +-2.4561005 7.2756243 -1.9570793 128.0 +-2.4074602 7.2786131 -1.9538068 128.0 +-2.3657374 7.3024545 -1.9563241 128.0 +-2.3217638 7.3196006 -1.9570793 128.0 +-2.277956 7.3374057 -1.9580861 128.0 +-2.2222013 7.3160567 -1.9485204 128.0 +-2.1844356 7.3536749 -1.9550654 128.0 +-2.1462915 7.3911037 -1.9616104 128.0 +-2.1040709 7.4153066 -1.9646312 128.0 +-2.0523274 7.405694 -1.9585897 128.0 +-2.0131679 7.4415026 -1.964883 128.0 +-1.9482002 7.3807278 -1.9452479 128.0 +-1.9154239 7.4412789 -1.9583379 128.0 +-1.8711423 7.4585238 -1.9598483 128.0 +-1.8104067 7.4087563 -1.9434857 128.0 +-1.7763377 7.4677424 -1.9563241 128.0 +-1.7267731 7.4624724 -1.9520446 128.0 +-1.6869 7.4993649 -1.9590931 128.0 +-1.6462257 7.5341568 -1.9656382 128.0 +-1.5985601 7.5374889 -1.963876 128.0 +-1.5511107 7.5414681 -1.9623656 128.0 +-1.5061324 7.557487 -1.9641278 128.0 +-1.4593654 7.5646858 -1.9636242 128.0 +-1.4129219 7.5734978 -1.9636242 128.0 +-1.3679705 7.5905972 -1.9658898 128.0 +-1.3217014 7.6007547 -1.9663934 128.0 +-1.2753592 7.6106305 -1.9668968 128.0 +-1.2292538 7.6221342 -1.9679037 128.0 +-1.1824621 7.6295333 -1.9679037 128.0 +-1.1369075 7.6452608 -1.9701693 128.0 +-1.0925697 7.6702971 -1.9749522 128.0 +-1.047706 7.6931581 -1.9792316 128.0 +-0.99561638 7.6620131 -1.9694141 128.0 +-0.94751459 7.6593337 -1.9671485 128.0 +-0.89733678 7.6380901 -1.9601001 128.0 +-0.85109586 7.6492233 -1.9616104 128.0 +-0.80546027 7.6668139 -1.964883 128.0 +-0.75668776 7.6542764 -1.9603517 128.0 +-0.70997578 7.6616659 -1.9611069 128.0 +-0.6637857 7.6755199 -1.9636242 128.0 +-0.61706465 7.6842718 -1.964883 128.0 +-0.57119197 7.705286 -1.9694141 128.0 +-0.52337706 7.7009215 -1.9674002 128.0 +-0.47623476 7.7059197 -1.9679037 128.0 +-0.42818969 7.6951685 -1.9643794 128.0 +-0.38039032 7.6860518 -1.9613587 128.0 +-0.3333483 7.6911416 -1.9621139 128.0 +-0.28575382 7.682404 -1.9593449 128.0 +-0.23854992 7.6820779 -1.9588413 128.0 +-0.19152984 7.6882343 -1.9601001 128.0 +-0.14480749 7.7134557 -1.9663934 128.0 +-0.09800382 7.7558107 -1.9772178 128.0 +-0.050121602 7.7117486 -1.9656382 128.0 +-0.0028034633 7.7148142 -1.9663934 128.0 +0.044544876 7.7166219 -1.9668968 128.0 +0.091720209 7.7016873 -1.9631208 128.0 +0.13874878 7.6884003 -1.9598483 128.0 +0.18603805 7.6922417 -1.9611069 128.0 +0.23247182 7.6658044 -1.9545619 128.0 +0.27936307 7.6603646 -1.953555 128.0 +0.32693708 7.6720433 -1.9570793 128.0 +0.37475908 7.6853595 -1.9611069 128.0 +0.42121929 7.6703529 -1.9578345 128.0 +0.46851152 7.6714878 -1.9588413 128.0 +0.51499021 7.6597781 -1.9565758 128.0 +0.56346679 7.676743 -1.9618621 128.0 +0.61017621 7.6683178 -1.9606035 128.0 +0.65647292 7.6557508 -1.9583379 128.0 +0.70308113 7.6477237 -1.9573309 128.0 +0.75131589 7.6567502 -1.9608552 128.0 +0.7976805 7.6462207 -1.9593449 128.0 +0.84468806 7.6421442 -1.9595965 128.0 +0.8919 7.6397014 -1.9603517 128.0 +0.93840533 7.6312032 -1.9595965 128.0 +0.98657542 7.6358595 -1.9623656 128.0 +1.0261381 7.5759559 -1.9482687 128.0 +1.0738255 7.5781407 -1.9505342 128.0 +1.1224281 7.5857701 -1.9543102 128.0 +1.1671826 7.5672622 -1.9512894 128.0 +1.2135924 7.559958 -1.9512894 128.0 +1.261867 7.5638247 -1.9543102 128.0 +1.3070986 7.5492644 -1.952548 128.0 +1.3501482 7.5230031 -1.9477651 128.0 +1.3994646 7.5317044 -1.9522964 128.0 +1.4432783 7.5106201 -1.9490238 128.0 +1.4927269 7.5187101 -1.953555 128.0 +1.5409693 7.5198383 -1.9563241 128.0 +1.5850806 7.5007725 -1.9538068 128.0 +1.6318982 7.494688 -1.9548136 128.0 +1.6820871 7.5034213 -1.9598483 128.0 +1.7091779 7.4109135 -1.9379476 128.0 +1.768235 7.4577303 -1.9533032 128.0 +1.8130455 7.4429789 -1.9522964 128.0 +1.8640802 7.4533086 -1.9580861 128.0 +1.9032837 7.41642 -1.9512894 128.0 +1.9551572 7.4289365 -1.9578345 128.0 +1.9946553 7.3943739 -1.9517928 128.0 +2.0410197 7.3857274 -1.9527998 128.0 +2.0881433 7.3795834 -1.9545619 128.0 +2.1309619 7.3582654 -1.9522964 128.0 +2.1757963 7.3441238 -1.9520446 128.0 +2.2194154 7.326004 -1.950786 128.0 +2.2643251 7.3122478 -1.950786 128.0 +2.3088577 7.2972937 -1.9505342 128.0 +2.3541846 7.2848315 -1.9510376 128.0 +2.3988392 7.2702494 -1.9510376 128.0 +2.4344473 7.2287946 -1.9437375 128.0 +2.4796999 7.2164669 -1.9444927 128.0 +2.5239327 7.2011161 -1.9444927 128.0 +2.5680704 7.1854939 -1.9444927 128.0 +2.6150925 7.1777854 -1.9467583 128.0 +2.6540332 7.147995 -1.9429823 128.0 +2.6992121 7.1351962 -1.9439892 128.0 +2.7467692 7.1284337 -1.9467583 128.0 +2.7876289 7.1042385 -1.9447443 128.0 +2.8125 7.0402646 -1.9316543 128.0 +2.868767 7.0551505 -1.9407167 128.0 +2.903863 7.0177407 -1.9351786 128.0 +2.9427381 6.9899793 -1.9324095 128.0 +2.9996669 7.0047092 -1.9417236 128.0 +3.0263624 6.9489045 -1.9311509 128.0 +3.0791304 6.9532123 -1.9376959 128.0 +3.111011 6.9103603 -1.9308991 128.0 +3.16342 6.9131432 -1.9371924 128.0 +3.207819 6.8979902 -1.9384511 128.0 +3.2422287 6.8615518 -1.9336683 128.0 +3.2909698 6.8554883 -1.9376959 128.0 +3.3270347 6.8229876 -1.9341717 128.0 +3.3671193 6.7989759 -1.9331647 128.0 +3.3887739 6.7384143 -1.9215851 128.0 +3.4370975 6.7312856 -1.9256128 128.0 +3.4698734 6.6937437 -1.9208299 128.0 +3.5275528 6.7040172 -1.930144 128.0 +3.5617838 6.6694403 -1.926368 128.0 +3.5966454 6.6363983 -1.9230955 128.0 +3.6363652 6.6125088 -1.922592 128.0 +3.6778133 6.5917625 -1.9230955 128.0 +3.6986468 6.5345387 -1.9127744 128.0 +3.7357812 6.5066853 -1.9112641 128.0 +3.7736874 6.4802952 -1.9102572 128.0 +3.8232205 6.4736853 -1.9152918 128.0 +3.8817642 6.4816566 -1.9248576 128.0 +3.9068954 6.4337263 -1.9175574 128.0 +3.9305704 6.3840842 -1.9097537 128.0 +3.9896522 6.3918662 -1.9195713 128.0 +4.0189657 6.3517265 -1.9147884 128.0 +4.0599532 6.3302059 -1.9157952 128.0 +4.0786757 6.2743402 -1.9062295 128.0 +4.1325374 6.2726336 -1.9135296 128.0 +4.1387067 6.1988635 -1.8984258 128.0 +4.1940174 6.1990037 -1.9064811 128.0 +4.2418242 6.1875215 -1.9110124 128.0 +4.2625957 6.1367364 -1.9032087 128.0 +4.299613 6.1096745 -1.902957 128.0 +4.3325262 6.0768733 -1.9009432 128.0 +4.3793635 6.0635128 -1.9052225 128.0 +4.4062009 6.0224676 -1.9006914 128.0 +4.4447999 5.9976511 -1.9014466 128.0 +4.4733834 5.9594288 -1.8979223 128.0 +4.5151372 5.9388027 -1.9001878 128.0 +4.5544438 5.9148207 -1.9014466 128.0 +4.5971971 5.8951592 -1.9042156 128.0 +4.6410794 5.8767142 -1.9074881 128.0 +4.6963925 5.8723135 -1.9155436 128.0 +4.7067556 5.8117976 -1.9049708 128.0 +4.692008 5.7214413 -1.8843288 128.0 +4.7418637 5.7104144 -1.8903704 128.0 +4.7836633 5.6893597 -1.8931395 128.0 +4.8172278 5.6584268 -1.8926359 128.0 +4.8455381 5.6214314 -1.8901186 128.0 +4.8678493 5.5777392 -1.8853358 128.0 +4.9045453 5.5506668 -1.8863426 128.0 +4.9307685 5.5118127 -1.8833219 128.0 +4.9800868 5.4986711 -1.8893634 128.0 +5.0032678 5.4565964 -1.8853358 128.0 +5.0340214 5.4229569 -1.8843288 128.0 +5.074491 5.3997245 -1.8870978 128.0 +5.1215358 5.3832116 -1.8923842 128.0 +5.15447 5.3516855 -1.8923842 128.0 +5.1162724 5.2471962 -1.8659524 128.0 +5.1626487 5.2301693 -1.8712388 128.0 +5.2028522 5.2066092 -1.8742596 128.0 +5.2291951 5.1691437 -1.8722457 128.0 +5.2580447 5.1342559 -1.8712388 128.0 +5.3089519 5.1207099 -1.8782873 128.0 +5.3563867 5.103394 -1.8840771 128.0 +5.3854856 5.0684419 -1.8833219 128.0 +5.412231 5.0313478 -1.8818115 128.0 +5.438724 4.9941168 -1.8803011 128.0 +5.4706984 4.9619517 -1.8808045 128.0 +5.4794178 4.908916 -1.8732526 128.0 +5.5239301 4.8880301 -1.8782873 128.0 +5.5749497 4.8725147 -1.8855875 128.0 +5.5659161 4.8046966 -1.8722457 128.0 +5.6416874 4.8100142 -1.8881048 128.0 +5.6629519 4.7684493 -1.8853358 128.0 +5.6906157 4.7323747 -1.8848323 128.0 +5.7195458 4.6973686 -1.8848323 128.0 +5.7700577 4.6798663 -1.8921325 128.0 +5.7948875 4.6413484 -1.8908738 128.0 +5.8065581 4.5924954 -1.8853358 128.0 +5.8147974 4.5412917 -1.8787907 128.0 +5.8954315 4.546309 -1.8961602 128.0 +5.9224458 4.5094638 -1.8959085 128.0 +5.9020438 4.4369802 -1.8803011 128.0 +5.9563565 4.4208717 -1.8891118 128.0 +5.975564 4.3785205 -1.8865944 128.0 +5.9678159 4.3168135 -1.8755182 128.0 +6.0414467 4.3138604 -1.8906221 128.0 +6.0195498 4.2426963 -1.8752664 128.0 +6.0812182 4.2305541 -1.8865944 128.0 +6.1254115 4.2057614 -1.8923842 128.0 +6.1366816 4.1583242 -1.887853 128.0 +6.1846066 4.1356564 -1.8949015 128.0 +6.2235975 4.1066928 -1.899181 128.0 +6.2413797 4.0636754 -1.8969154 128.0 +6.2710819 4.028441 -1.8984258 128.0 +6.2940469 3.9888504 -1.8979223 128.0 +6.305274 3.9419465 -1.8938947 128.0 +6.3342853 3.9062321 -1.8954051 128.0 +6.3523464 3.8637712 -1.8936429 128.0 +6.3726149 3.8227296 -1.8926359 128.0 +6.400948 3.7865129 -1.8941463 128.0 +6.4056706 3.7364373 -1.8886082 128.0 +6.4402213 3.7038181 -1.8921325 128.0 +6.4661937 3.6661413 -1.8931395 128.0 +6.5054626 3.6358404 -1.898174 128.0 +6.5259538 3.5949214 -1.8976706 128.0 +6.5453377 3.5534256 -1.8969154 128.0 +6.5661645 3.5127409 -1.8966637 128.0 +6.6021485 3.480058 -1.9009432 128.0 +6.6139297 3.4345758 -1.898174 128.0 +6.625402 3.38908 -1.8954051 128.0 +6.6547151 3.3527186 -1.8979223 128.0 +6.6768956 3.3126831 -1.8984258 128.0 +6.6997046 3.2729268 -1.899181 128.0 +6.7170444 3.2304981 -1.8984258 128.0 +6.7446122 3.1929495 -1.9006914 128.0 +6.7614455 3.1502788 -1.8999362 128.0 +6.783287 3.1099422 -1.9006914 128.0 +6.7969484 3.0658743 -1.899181 128.0 +6.8218246 3.0268593 -1.9009432 128.0 +6.8411555 2.9853315 -1.9011948 128.0 +6.8584552 2.9429171 -1.9009432 128.0 +6.8674664 2.897017 -1.8984258 128.0 +6.882431 2.8537123 -1.8976706 128.0 +6.905189 2.8136201 -1.899181 128.0 +6.9286122 2.773716 -1.9009432 128.0 +6.9418983 2.7297337 -1.8999362 128.0 +6.9774761 2.6944098 -1.9052225 128.0 +6.9911623 2.6505167 -1.9044673 128.0 +6.994596 2.6028438 -1.9009432 128.0 +7.0049806 2.5578847 -1.8994327 128.0 +7.0223656 2.5155077 -1.8999362 128.0 +7.0340161 2.4710886 -1.8989292 128.0 +7.0655165 2.4335561 -1.9034604 128.0 +7.0812325 2.3904667 -1.9037122 128.0 +7.1040363 2.3497076 -1.9059777 128.0 +7.1358128 2.3117418 -1.9107606 128.0 +7.1258783 2.2603047 -1.9042156 128.0 +7.1137338 2.2085025 -1.8971671 128.0 +7.1549311 2.1732516 -1.9047191 128.0 +7.1839027 2.1339946 -1.9089985 128.0 +7.1884966 2.0874455 -1.9067329 128.0 +7.213273 2.0467334 -1.9100055 128.0 +7.2154369 1.9995914 -1.9072363 128.0 +7.2322416 1.9565445 -1.9084951 128.0 +7.2506604 1.9138608 -1.9102572 128.0 +7.2528949 1.8669226 -1.9077399 128.0 +7.2754779 1.825211 -1.9107606 128.0 +7.2856002 1.7803054 -1.9105089 128.0 +7.3076849 1.7382563 -1.9135296 128.0 +7.2984128 1.6888018 -1.9082433 128.0 +7.3143029 1.6452624 -1.9097537 128.0 +7.3138599 1.5980787 -1.9069847 128.0 +7.3225813 1.5529708 -1.9067329 128.0 +7.3442955 1.5105463 -1.9100055 128.0 +7.3695607 1.4686705 -1.9142848 128.0 +7.3993397 1.4274583 -1.9198229 128.0 +7.3965425 1.3798995 -1.9168022 128.0 +7.3886786 1.3315703 -1.9125228 128.0 +7.3805008 1.2833897 -1.9082433 128.0 +7.4178257 1.2430396 -1.916047 128.0 +7.4320011 1.1985801 -1.9178091 128.0 +7.4210443 1.1501385 -1.9130262 128.0 +7.4327483 1.1052942 -1.9142848 128.0 +7.4690919 1.0638993 -1.9220885 128.0 +7.4668489 1.016874 -1.9198229 128.0 +7.4758267 0.97141331 -1.9205781 128.0 +7.4701209 0.92409784 -1.9175574 128.0 +7.4554658 0.87587225 -1.912271 128.0 +7.478013 0.83203715 -1.9168022 128.0 +7.4550653 0.78320342 -1.909502 128.0 +7.5040331 0.74182719 -1.9210817 128.0 +7.5055523 0.69550133 -1.9203265 128.0 +7.5067863 0.6491847 -1.9195713 128.0 +7.526063 0.604352 -1.9235989 128.0 +7.5141873 0.55701602 -1.9195713 128.0 +7.4856 0.50873214 -1.9112641 128.0 +7.5223889 0.46488294 -1.9200747 128.0 +7.5328302 0.41914821 -1.9220885 128.0 +7.5400934 0.3731592 -1.9233472 128.0 +7.5538435 0.32739049 -1.926368 128.0 +7.5470061 0.28071061 -1.9241024 128.0 +7.55826 0.23469865 -1.9266198 128.0 +7.5585899 0.18829347 -1.926368 128.0 +7.5402508 0.14154699 -1.9213333 128.0 +7.5254936 0.095081776 -1.9173057 128.0 +7.5520654 0.049075592 -1.9241024 128.0 +7.5377073 0.0027300497 -1.9203265 128.0 +7.5617766 -0.043658935 -1.9266198 128.0 +7.4994321 -0.089321889 -1.9105089 128.0 +7.5461569 -0.13618909 -1.9228437 128.0 +7.5355043 -0.18225537 -1.9203265 128.0 +7.5342441 -0.22848892 -1.9203265 128.0 +7.5452733 -0.27517176 -1.9235989 128.0 +7.5386081 -0.32125771 -1.9223403 128.0 +7.5577612 -0.36854362 -1.9278784 128.0 +7.5292664 -0.41347876 -1.9210817 128.0 +7.5546017 -0.46137911 -1.9283818 128.0 +7.5439034 -0.50720561 -1.926368 128.0 +7.5589881 -0.55482972 -1.9311509 128.0 +7.5564065 -0.60127705 -1.9314026 128.0 +7.5467892 -0.6471352 -1.9298922 128.0 +7.5378575 -0.69298649 -1.9286336 128.0 +7.5190163 -0.73780793 -1.9248576 128.0 +7.5355239 -0.786138 -1.9303957 128.0 +7.5161295 -0.8307662 -1.9266198 128.0 +7.4897423 -0.87440079 -1.9210817 128.0 +7.4871178 -0.92069477 -1.9218369 128.0 +7.5062833 -0.96984053 -1.9283818 128.0 +7.4896417 -1.0144516 -1.9256128 128.0 +7.4765682 -1.059438 -1.9238507 128.0 +7.4996057 -1.1096833 -1.9316543 128.0 +7.5117855 -1.1586287 -1.936689 128.0 +7.5226908 -1.2076119 -1.9414719 128.0 +7.4893651 -1.249449 -1.9346751 128.0 +7.4872794 -1.2963697 -1.9361855 128.0 +7.4229813 -1.3322027 -1.9213333 128.0 +7.4127641 -1.3773707 -1.9208299 128.0 +7.3813634 -1.4184465 -1.9147884 128.0 +7.4019485 -1.4695519 -1.922592 128.0 +7.4022732 -1.5168841 -1.9251094 128.0 +7.380517 -1.5596744 -1.9218369 128.0 +7.3708081 -1.604931 -1.9218369 128.0 +7.4146504 -1.6621915 -1.9361855 128.0 +7.4080844 -1.7085254 -1.9371924 128.0 +7.3484931 -1.7423407 -1.9241024 128.0 +7.3404846 -1.7880844 -1.9248576 128.0 +7.3162308 -1.8298043 -1.9213333 128.0 +7.2870541 -1.8700916 -1.9165505 128.0 +7.2716985 -1.9137838 -1.9155436 128.0 +7.2523437 -1.95635 -1.9135296 128.0 +7.1478515 -1.9752967 -1.8886082 128.0 +6.9735599 -1.9732765 -1.8448069 128.0 +6.7893419 -1.9662328 -1.7982366 128.0 +6.7001305 -1.9850407 -1.7773429 128.0 +6.6359549 -2.0104036 -1.7632459 128.0 +6.5606279 -2.0316195 -1.7461282 128.0 +6.4677615 -2.0464413 -1.7242275 128.0 +6.3933816 -2.0661521 -1.7073616 128.0 +6.3594446 -2.0983686 -1.7015717 128.0 +6.3455324 -2.1370411 -1.7013199 128.0 +6.2993498 -2.1646161 -1.6922576 128.0 +6.2128825 -2.1776221 -1.6721191 128.0 +6.1064453 -2.1824851 -1.6464425 128.0 +6.0847545 -2.2169311 -1.644177 128.0 +5.5720258 -2.0689723 -1.5057245 128.0 +5.4496956 -2.0616944 -1.475265 128.0 +5.3764353 -2.0717828 -1.4583991 128.0 +5.3753343 -2.109328 -1.4616716 128.0 +5.3326316 -2.1304243 -1.4533644 128.0 +5.0137405 -2.0388117 -1.3675239 128.0 +4.9278054 -2.0391979 -1.346882 128.0 +4.8732767 -2.051749 -1.3350506 128.0 +4.7698488 -2.0427568 -1.309374 128.0 +4.6826901 -2.0395291 -1.2882285 128.0 +4.585134 -2.0306079 -1.2640623 128.0 +4.4746294 -2.0146091 -1.2361201 128.0 +4.4384222 -2.0311553 -1.2293234 128.0 +4.3653235 -2.0301955 -1.2119539 128.0 +4.3370333 -2.0495007 -1.2074227 128.0 +4.2432342 -2.0371268 -1.1840117 128.0 +4.1375742 -2.0177424 -1.1570764 128.0 +4.0930257 -2.0272019 -1.1477623 128.0 +4.0614882 -2.0427132 -1.1422242 128.0 +3.9618201 -2.0231483 -1.1167994 128.0 +3.9192584 -2.0318322 -1.1079887 128.0 +3.9032917 -2.0540395 -1.1069818 128.0 +3.8726869 -2.068378 -1.1016954 128.0 +3.8224831 -2.0718133 -1.0906192 128.0 +3.8190274 -2.100358 -1.0933883 128.0 +3.7916999 -2.115736 -1.0891088 128.0 +3.7727509 -2.1356249 -1.0873468 128.0 +3.75454 -2.1558428 -1.0858363 128.0 +3.702769 -2.1564388 -1.0742567 128.0 +3.6628006 -2.1633708 -1.0662013 128.0 +3.6494575 -2.1858046 -1.0662013 128.0 +3.6467309 -2.2146859 -1.0694737 128.0 +3.6569736 -2.2517333 -1.076774 128.0 +3.6619718 -2.2859149 -1.0825639 128.0 +3.6576912 -2.3145506 -1.0855846 128.0 +3.5269225 -2.2622414 -1.049587 128.0 +5.2778792 -3.4309947 -1.5971031 128.0 +3.5223336 -2.3207915 -1.0568873 128.0 +3.4822698 -2.3251653 -1.0488318 128.0 +3.4615245 -2.34215 -1.0468179 128.0 +3.4734309 -2.3814025 -1.0551251 128.0 +3.5318832 -2.4534607 -1.0782844 128.0 +3.5064733 -2.4678457 -1.0750118 128.0 +3.4258564 -2.4426866 -1.0541182 128.0 +3.3966811 -2.4534621 -1.049587 128.0 +3.3792198 -2.4725435 -1.0488318 128.0 +3.3243282 -2.4638455 -1.0359935 128.0 +3.2913451 -2.4708347 -1.0302037 128.0 +3.3169563 -2.5220253 -1.0435455 128.0 +3.296818 -2.5387878 -1.0420351 128.0 +3.336129 -2.6018164 -1.0601597 128.0 +3.3406093 -2.6384315 -1.0669565 128.0 +3.3175547 -2.6534395 -1.0646909 128.0 +3.2598443 -2.6402481 -1.0508456 128.0 +3.3027041 -2.708679 -1.0707325 128.0 +3.2845325 -2.7276566 -1.0702289 128.0 +3.2951431 -2.770802 -1.0795431 128.0 +3.2567084 -2.7727759 -1.0722429 128.0 +3.2345018 -2.7882838 -1.0704807 128.0 +3.2012901 -2.7940786 -1.0649426 128.0 +3.1811845 -2.8111057 -1.0639358 128.0 +3.1530561 -2.8208938 -1.0601597 128.0 +3.109863 -2.8168006 -1.0510974 128.0 +3.1096418 -2.851526 -1.0571389 128.0 +3.0197344 -2.8033969 -1.0314623 128.0 +3.0469091 -2.8636248 -1.0473214 128.0 +3.0587311 -2.9102824 -1.0578941 128.0 +3.03036 -2.9189255 -1.0541182 128.0 +2.9971476 -2.9226015 -1.0485801 128.0 +2.9646935 -2.9266598 -1.0432937 128.0 +2.92888 -2.9270105 -1.0367486 128.0 +2.9244733 -2.9586914 -1.0417833 128.0 +2.925873 -2.9966598 -1.0490836 128.0 +2.9188533 -3.0263972 -1.053363 128.0 +2.9028993 -3.0470526 -1.0543699 128.0 +2.8596056 -3.0387321 -1.0450559 128.0 +2.8389297 -3.0540946 -1.0443007 128.0 +2.7991889 -3.0486465 -1.0362452 128.0 +2.75247 -3.0349412 -1.0254208 128.0 +2.6944013 -3.0078042 -1.0100652 128.0 +2.7156608 -3.0692143 -1.0256726 128.0 +2.7076051 -3.098207 -1.0299519 128.0 +2.6910737 -3.1176925 -1.0309589 128.0 +2.6863358 -3.1510837 -1.0367486 128.0 +2.6644568 -3.1645465 -1.0357418 128.0 +2.634469 -3.1681862 -1.0314623 128.0 +2.6149797 -3.1842914 -1.0314623 128.0 +2.5539343 -3.1491668 -1.0143446 128.0 +2.6011188 -3.2478659 -1.0420351 128.0 +2.5577254 -3.2341623 -1.0322175 128.0 +2.5568964 -3.2742021 -1.040273 128.0 +2.5544896 -3.31282 -1.0478249 128.0 +2.4924848 -3.2737641 -1.0299519 128.0 +2.4781663 -3.2967315 -1.0324693 128.0 +2.4578915 -3.3118751 -1.0324693 128.0 +2.4043443 -3.2816179 -1.0178689 128.0 +2.3824618 -3.2939565 -1.0171137 128.0 +2.3655803 -3.3132384 -1.0186241 128.0 +2.3474364 -3.3308551 -1.0196309 128.0 +2.3324819 -3.3531404 -1.0221483 128.0 +2.3189852 -3.3777606 -1.0254208 128.0 +2.3041885 -3.4007387 -1.0281898 128.0 +2.3096411 -3.454232 -1.0405247 128.0 +2.2692125 -3.4392595 -1.0314623 128.0 +2.2274711 -3.4214888 -1.0216448 128.0 +2.2017272 -3.4277637 -1.0193793 128.0 +2.2039683 -3.4779932 -1.0307071 128.0 +2.1579583 -3.4520624 -1.0186241 128.0 +2.1418166 -3.4734757 -1.0211413 128.0 +2.1179485 -3.4824181 -1.0198827 128.0 +2.0925577 -3.488709 -1.0178689 128.0 +2.0814607 -3.5189745 -1.0231552 128.0 +2.0622678 -3.5358598 -1.0244138 128.0 +2.0525966 -3.5694201 -1.0307071 128.0 +2.0363848 -3.5920498 -1.0337279 128.0 +2.0204449 -3.6154594 -1.0370004 128.0 +1.9982227 -3.6277885 -1.0370004 128.0 +1.9463704 -3.5855484 -1.0208896 128.0 +1.9316384 -3.6110768 -1.0249174 128.0 +1.9103475 -3.6245735 -1.0254208 128.0 +1.8925322 -3.6448154 -1.0279381 128.0 +1.874981 -3.6658368 -1.0307071 128.0 +1.856372 -3.685051 -1.0329727 128.0 +1.84319 -3.7154446 -1.0385108 128.0 +1.8156843 -3.7171192 -1.0357418 128.0 +1.7848717 -3.7116191 -1.0309589 128.0 +1.7695187 -3.7382457 -1.03549 128.0 +1.7547234 -3.7665775 -1.0405247 128.0 +1.7473111 -3.8115826 -1.0503422 128.0 +1.7246867 -3.8239965 -1.0508456 128.0 +1.6823479 -3.7920458 -1.0387626 128.0 +1.6640812 -3.8138282 -1.0420351 128.0 +1.6280535 -3.7946184 -1.0337279 128.0 +1.6250548 -3.8526871 -1.0473214 128.0 +1.6058333 -3.8733137 -1.0503422 128.0 +1.2496701 -3.0675225 -0.82126647 128.0 +1.2265078 -3.0643511 -0.81824571 128.0 +1.2299976 -3.1285598 -0.83410478 128.0 +1.4485775 -3.75176 -1.0057857 128.0 +1.4217554 -3.7506235 -1.0030167 128.0 +1.3993903 -3.7610905 -1.0035201 128.0 +1.3865786 -3.7977874 -1.0113238 128.0 +1.3789177 -3.849956 -1.023407 128.0 +1.3616854 -3.876606 -1.0284415 128.0 +1.3514274 -3.9242342 -1.039266 128.0 +1.334444 -3.9535422 -1.0450559 128.0 +1.3071208 -3.9524674 -1.0425385 128.0 +1.284336 -3.9650168 -1.0437971 128.0 +1.2585195 -3.9682102 -1.0425385 128.0 +1.0140206 -3.2669473 -0.84946042 128.0 +0.9964878 -3.2814417 -0.851726 128.0 +0.98102021 -3.3032656 -0.85600543 128.0 +0.96100324 -3.3101521 -0.8562572 128.0 +0.93908906 -3.3104002 -0.85474676 128.0 +0.89781982 -3.2405567 -0.83435655 128.0 +0.82407647 -3.04702 -0.7807377 128.0 +0.81030571 -3.0707335 -0.78577232 128.0 +0 -0 -0 128.0 +1.0304835 -4.1083179 -1.0614184 128.0 +1.0031879 -4.1061025 -1.0591528 128.0 +0.97215021 -4.0877013 -1.0526078 128.0 +0.96188962 -4.1577048 -1.0697255 128.0 +0.93721008 -4.167305 -1.0707325 128.0 +0.91554844 -4.1909413 -1.0755154 128.0 +0.88479525 -4.172812 -1.0692221 128.0 +0.85780954 -4.1715269 -1.0674599 128.0 +0.83068377 -4.1691189 -1.0654461 128.0 +0.72880334 -3.7788267 -0.96072578 128.0 +0.69903415 -3.7480266 -0.95141172 128.0 +0.74092579 -4.1122694 -1.0465662 128.0 +0.71717209 -4.1253195 -1.0488318 128.0 +0.69712603 -4.16114 -1.0571389 128.0 +0.67974997 -4.2159777 -1.0704807 128.0 +0.64526856 -4.1645999 -1.0558803 128.0 +0.62126935 -4.1790104 -1.0586493 128.0 +0.59438699 -4.1741209 -1.0563837 128.0 +0.56366879 -4.1402907 -1.0465662 128.0 +0.54074895 -4.1628656 -1.0516008 128.0 +0.51448274 -4.1603427 -1.0500904 128.0 +0.48668623 -4.1441975 -1.0450559 128.0 +0.45782247 -4.1163263 -1.0370004 128.0 +0.43235421 -4.1171331 -1.036497 128.0 +0.40603596 -4.1091142 -1.0337279 128.0 +0.38001111 -4.1028552 -1.0314623 128.0 +0.35507962 -4.1080027 -1.0322175 128.0 +0.3318046 -4.1342211 -1.0385108 128.0 +0.30757681 -4.1516213 -1.0425385 128.0 +0.28190011 -4.1505337 -1.0417833 128.0 +0.25606912 -4.14639 -1.040273 128.0 +0.23062254 -4.1478829 -1.040273 128.0 +0.20478417 -4.1414871 -1.038259 128.0 +0.1785295 -4.1233277 -1.0332245 128.0 +0.15311781 -4.1214442 -1.0324693 128.0 +0.12839788 -4.1406856 -1.0372522 128.0 +0.10279549 -4.1336555 -1.0352383 128.0 +0.077083834 -4.1158233 -1.0304554 128.0 +0.051803607 -4.1142836 -1.0299519 128.0 +0.026710013 -4.1377506 -1.0359935 128.0 +0.0013291743 -4.1581602 -1.0412799 128.0 +-0.024445087 -4.2035756 -1.0531112 128.0 +-0.050030731 -4.1859274 -1.0485801 128.0 +-0.075348489 -4.1652212 -1.0432937 128.0 +-0.10148814 -4.1888685 -1.049587 128.0 +-0.12689577 -4.1784935 -1.0470697 128.0 +-0.15394098 -4.2163224 -1.0571389 128.0 +-0.18054974 -4.2327032 -1.0616701 128.0 +-0.20807157 -4.2634149 -1.0699773 128.0 +-0.23364429 -4.2514281 -1.0672082 128.0 +-0.25901884 -4.2383227 -1.0641874 128.0 +-0.2857334 -4.2472754 -1.0669565 128.0 +-0.31143484 -4.2406163 -1.0656978 128.0 +-0.33629814 -4.224154 -1.0619218 128.0 +-0.35907063 -4.185369 -1.052356 128.0 +-0.38412496 -4.1763411 -1.050594 128.0 +-0.41937834 -4.2721491 -1.0762706 128.0 +-0.44267315 -4.241581 -1.0689703 128.0 +-0.46465224 -4.2022309 -1.0594045 128.0 +-0.49760708 -4.2608223 -1.0755154 128.0 +-0.51831037 -4.2135029 -1.0639358 128.0 +-0.5470053 -4.2323189 -1.0697255 128.0 +-0.86603391 -6.3934512 -1.6378837 128.0 +-0.90551853 -6.3899336 -1.6383871 128.0 +-0.94513422 -6.3871293 -1.6391423 128.0 +-0.99123865 -6.4261651 -1.6509737 128.0 +-1.0277367 -6.4018059 -1.6461908 128.0 +-1.070819 -6.4182901 -1.6522323 128.0 +-1.1086951 -6.4030161 -1.6499667 128.0 +-1.1486461 -6.3999033 -1.6509737 128.0 +-1.1878935 -6.392735 -1.6509737 128.0 +-1.2238097 -6.3682184 -1.6464425 128.0 +-1.2675717 -6.3843212 -1.6527358 128.0 +-1.3022538 -6.3546166 -1.646946 128.0 +-1.343021 -6.3550286 -1.6492115 128.0 +-1.3801367 -6.3381577 -1.646946 128.0 +-1.4228108 -6.3465686 -1.6514771 128.0 +-1.4623781 -6.340548 -1.6522323 128.0 +-1.493889 -6.3003798 -1.6439252 128.0 +-1.5345802 -6.2995577 -1.6461908 128.0 +-1.573909 -6.2928395 -1.646946 128.0 +-1.6146562 -6.2915006 -1.6492115 128.0 +-1.644364 -6.2477813 -1.6401492 128.0 +-1.6947651 -6.2824259 -1.6522323 128.0 +-1.7317351 -6.2663116 -1.6507219 128.0 +-1.7664634 -6.2425303 -1.6471977 128.0 +-1.8068869 -6.2390108 -1.6492115 128.0 +-1.8476086 -6.2361579 -1.6514771 128.0 +-1.8892047 -6.2358189 -1.6544979 128.0 +-1.9311525 -6.2361279 -1.6577704 128.0 +-1.9682127 -6.2204704 -1.6567636 128.0 +-2.0102119 -6.2202487 -1.660036 128.0 +-2.0534952 -6.2234211 -1.6643155 128.0 +-1.3025745 -3.8672614 -1.0211413 128.0 +-1.3291092 -3.8674338 -1.023407 128.0 +-2.1558578 -6.1507754 -1.6550014 128.0 +-2.1896496 -6.1264949 -1.6519806 128.0 +-2.233825 -6.1311312 -1.6570152 128.0 +-2.274771 -6.1263824 -1.6595325 128.0 +-2.3116341 -6.1104989 -1.6590291 128.0 +-2.3431692 -6.0808473 -1.6547496 128.0 +-2.3878591 -6.0852752 -1.660036 128.0 +-2.4258707 -6.0723062 -1.6605395 128.0 +-2.4645419 -6.0608935 -1.6615463 128.0 +-2.5046444 -6.0528111 -1.6635603 128.0 +-2.5451159 -6.0453572 -1.6658258 128.0 +-2.5810187 -6.026958 -1.6650707 128.0 +-1.3428726 -3.0828528 -0.83435655 128.0 +-1.3641143 -3.0798647 -0.83586693 128.0 +-2.662519 -5.9140053 -1.6466942 128.0 +-2.7217078 -5.9477201 -1.6610429 128.0 +-2.7365248 -5.884397 -1.6477011 128.0 +-1.6054835 -3.3972301 -0.93706298 128.0 +-1.6212729 -3.3768451 -0.93404222 128.0 +-1.6394175 -3.3616142 -0.93253183 128.0 +-1.6570069 -3.3454206 -0.93076974 128.0 +-1.6796767 -3.3395135 -0.93202835 128.0 +-1.7049768 -3.3386259 -0.93479741 128.0 +-1.7258754 -3.3289607 -0.93504918 128.0 +-1.7971886 -3.4150918 -0.96349484 128.0 +-2.0857008 -3.9051278 -1.1112612 128.0 +-3.1277146 -5.7710366 -1.6670845 128.0 +-3.1649313 -5.7551289 -1.6680914 128.0 +-3.1883969 -5.7144713 -1.6617981 128.0 +-3.2353172 -5.715857 -1.6680914 128.0 +-3.2698464 -5.6950583 -1.6678396 128.0 +-3.3091118 -5.682415 -1.6701052 128.0 +-3.342932 -5.660337 -1.6696018 128.0 +-3.3741198 -5.6339064 -1.6678396 128.0 +-3.4181688 -5.6288147 -1.6726226 128.0 +-3.4516275 -5.6060872 -1.6721191 128.0 +-3.4869857 -5.5864449 -1.6726226 128.0 +-3.5341334 -5.5853906 -1.6789159 128.0 +-3.5557997 -5.5440483 -1.6728743 128.0 +-3.6061008 -5.5472808 -1.680678 128.0 +-3.6528478 -5.5444465 -1.6867195 128.0 +-3.686799 -5.5219288 -1.6867195 128.0 +-3.695667 -5.4623294 -1.6751399 128.0 +-3.7367742 -5.450726 -1.6786641 128.0 +-2.1354682 -3.0740268 -0.93328702 128.0 +-2.1520622 -3.0577002 -0.93228012 128.0 +-2.1719069 -3.0460138 -0.93278354 128.0 +-3.8881145 -5.3832707 -1.6869713 128.0 +-3.9199295 -5.3577499 -1.6864678 128.0 +-3.9590683 -5.3421507 -1.6892369 128.0 +-3.9865441 -5.310791 -1.6869713 128.0 +-3.9997275 -5.2608056 -1.6786641 128.0 +-4.0396075 -5.2461333 -1.6819366 128.0 +-4.0794573 -5.2311697 -1.6852092 128.0 +-4.1138773 -5.2090783 -1.6862161 128.0 +-4.1572461 -5.1980991 -1.690999 128.0 +-4.189672 -5.173245 -1.6912507 128.0 +-4.2293129 -5.1571693 -1.6945232 128.0 +-4.2478943 -5.1154852 -1.6892369 128.0 +-4.2723517 -5.0811753 -1.6864678 128.0 +-4.3272872 -5.0828691 -1.6960336 128.0 +-4.3407021 -5.0356956 -1.6889851 128.0 +-4.3689737 -5.0060496 -1.6879783 128.0 +-4.3989673 -4.9784226 -1.6877265 128.0 +-4.3913631 -4.9087787 -1.6728743 128.0 +-4.4207506 -4.8810244 -1.6726226 128.0 +-4.4506168 -4.853807 -1.6726226 128.0 +-4.43752 -4.7803006 -1.65626 128.0 +-4.4999046 -4.7882466 -1.6688466 128.0 +-4.5352035 -4.7668562 -1.6711122 128.0 +-4.5636954 -4.7382421 -1.6708604 128.0 +-4.60079 -4.7184658 -1.6738813 128.0 +-4.6575289 -4.7183881 -1.6842022 128.0 +-4.6898131 -4.6931443 -1.6854609 128.0 +-4.7309093 -4.6765275 -1.6899921 128.0 +-4.7574377 -4.6453824 -1.6892369 128.0 +-4.7921209 -4.6221514 -1.6915025 128.0 +-4.8161874 -4.5886545 -1.6899921 128.0 +-4.8597565 -4.5736094 -1.6955302 128.0 +-4.8593764 -4.5173454 -1.6854609 128.0 +-4.9076748 -4.5064278 -1.6927611 128.0 +-4.9316492 -4.4729786 -1.6915025 128.0 +-4.9690933 -4.4516759 -1.6950268 128.0 +-4.9774714 -4.4044261 -1.6884817 128.0 +-4.9869146 -4.3585162 -1.6824402 128.0 +-5.0120988 -4.32657 -1.6819366 128.0 +-5.040761 -4.2976189 -1.6826918 128.0 +-5.0655556 -4.2653613 -1.6821884 128.0 +-5.0521955 -4.2014003 -1.6688466 128.0 +-5.086854 -4.1776929 -1.6718674 128.0 +-5.1116405 -4.145792 -1.6716157 128.0 +-5.105258 -4.0889378 -1.6610429 128.0 +-5.124938 -4.0533323 -1.6592808 128.0 +-5.1573396 -4.0277677 -1.6617981 128.0 +-5.1781244 -3.9930916 -1.6605395 128.0 +-5.2210073 -3.975316 -1.666581 128.0 +-5.2429805 -3.9414608 -1.6658258 128.0 +-5.2717285 -3.9126775 -1.6673362 128.0 +-5.2769022 -3.8665276 -1.6612947 128.0 +-5.3240509 -3.8510942 -1.6688466 128.0 +-5.36412 -3.8301651 -1.6741329 128.0 +-5.3716998 -3.7860274 -1.6690984 128.0 +-5.4099236 -3.7634978 -1.6738813 128.0 +-5.4193516 -3.7209191 -1.6696018 128.0 +-5.4380751 -3.6848817 -1.6683432 128.0 +-5.4790854 -3.6638193 -1.6741329 128.0 +-5.4901543 -3.6226685 -1.6706088 128.0 +-5.5236335 -3.5963066 -1.6741329 128.0 +-5.5203547 -3.5461299 -1.6663293 128.0 +-5.5550885 -3.5204806 -1.670357 128.0 +-5.54212 -3.4647796 -1.6597843 128.0 +-5.5624514 -3.4302006 -1.6595325 128.0 +-5.5850477 -3.3970113 -1.660036 128.0 +-5.6082759 -3.364172 -1.6607912 128.0 +-5.6371417 -3.3346248 -1.6633085 128.0 +-5.6574965 -3.299973 -1.6633085 128.0 +-5.6700883 -3.2608545 -1.6610429 128.0 +-5.6925154 -3.2274342 -1.6617981 128.0 +-5.7020736 -3.1867783 -1.6587774 128.0 +-5.7461023 -3.1652744 -1.6660776 128.0 +-5.7654161 -3.1299574 -1.6660776 128.0 +-5.7990193 -3.1022842 -1.670357 128.0 +-5.8342113 -3.0752189 -1.6751399 128.0 +-5.857265 -3.0415933 -1.6763985 128.0 +-5.8904648 -3.0130899 -1.680678 128.0 +-5.9287205 -2.9869063 -1.6864678 128.0 +-5.9564724 -2.955204 -1.6892369 128.0 +-5.9588408 -2.9109528 -1.6847057 128.0 +-5.9992661 -2.8852425 -1.6912507 128.0 +-6.0247288 -2.8521047 -1.6935163 128.0 +-6.0693097 -2.8277559 -1.7013199 128.0 +-6.0707111 -2.7832012 -1.6967888 128.0 +-6.0903211 -2.7470937 -1.697544 128.0 +-6.1106005 -2.7112427 -1.6985509 128.0 +-6.1351047 -2.6771817 -1.7008165 128.0 +-6.1878796 -2.6551356 -1.7111375 128.0 +-6.1897879 -2.6110983 -1.7071098 128.0 +-6.2289357 -2.5827081 -1.7136549 128.0 +-6.2625904 -2.5517442 -1.7186894 128.0 +-6.2978959 -2.521184 -1.7242275 128.0 +-6.3402662 -2.4931197 -1.7317795 128.0 +-6.3608613 -2.4562616 -1.7332898 128.0 +-6.4102001 -2.4302249 -1.7428557 128.0 +-6.4222698 -2.3898342 -1.7421005 128.0 +-6.4631758 -2.3600111 -1.7494007 128.0 +-6.4893789 -2.3245528 -1.7526733 128.0 +-6.490737 -2.2801993 -1.749149 128.0 +-6.5210762 -2.2460039 -1.7536801 128.0 +-6.5558248 -2.2130697 -1.75947 128.0 +-6.5959263 -2.181617 -1.7667702 128.0 +-6.5079141 -2.1082892 -1.7390797 128.0 +-6.5142703 -2.0662692 -1.7373176 128.0 +-6.5443873 -2.0317123 -1.7421005 128.0 +-6.6326632 -2.0145867 -1.7627425 128.0 +-6.7219 -1.9967291 -1.7836362 128.0 +-6.7916474 -1.9721829 -1.7992436 128.0 +-6.9153438 -1.9621803 -1.8294513 128.0 +-7.0671482 -1.9584882 -1.8672111 128.0 +-7.2462544 -1.9603363 -1.912271 128.0 +-7.3535914 -1.9410359 -1.9379476 128.0 +-7.4103498 -1.9074609 -1.9500308 128.0 +-7.4435043 -1.8673736 -1.9558206 128.0 +-7.466104 -1.8244233 -1.9588413 128.0 +-7.4884558 -1.7812659 -1.9618621 128.0 +-7.4671869 -1.7278643 -1.9533032 128.0 +-7.5059743 -1.6883872 -1.9608552 128.0 +-7.5218654 -1.6435393 -1.9623656 128.0 +-7.5053 -1.5917318 -1.9553171 128.0 +-7.5225091 -1.5472103 -1.9573309 128.0 +-7.5290136 -1.5004563 -1.9565758 128.0 +-7.5513821 -1.4567982 -1.9601001 128.0 +-7.5744495 -1.4130994 -1.963876 128.0 +-7.5582137 -1.3621327 -1.9573309 128.0 +-7.571197 -1.31656 -1.9585897 128.0 +-7.5915408 -1.2721592 -1.9618621 128.0 +-7.6030254 -1.226171 -1.962869 128.0 +-7.5845838 -1.1754932 -1.9560723 128.0 +-7.6213288 -1.1333475 -1.963876 128.0 +-7.6166425 -1.0849242 -1.9608552 128.0 +-7.6001415 -1.0350335 -1.9548136 128.0 +-7.6159463 -0.98962802 -1.9573309 128.0 +-7.6093893 -0.94133353 -1.9540584 128.0 +-7.583303 -0.89089739 -1.9457513 128.0 +-7.637681 -0.84981102 -1.9585897 128.0 +-7.6437144 -0.80303228 -1.9588413 128.0 +-7.6571655 -0.75697356 -1.9611069 128.0 +-7.6337199 -0.70738471 -1.9538068 128.0 +-7.6543078 -0.66195011 -1.9580861 128.0 +-7.6524372 -0.6145066 -1.9565758 128.0 +-7.6560636 -0.56754059 -1.9565758 128.0 +-7.6680923 -0.52114421 -1.9588413 128.0 +-7.6556902 -0.47312793 -1.9548136 128.0 +-7.6613479 -0.42630607 -1.9555688 128.0 +-7.6589866 -0.37904945 -1.9543102 128.0 +-7.6495657 -0.33154419 -1.9512894 128.0 +-7.6620941 -0.28499734 -1.9540584 128.0 +-7.6733718 -0.23827912 -1.9565758 128.0 +-7.278903 0.53464299 -1.9479595 128.0 +-7.2889504 0.58036971 -1.9516397 128.0 +-7.2496843 0.62202555 -1.9419137 128.0 +-7.2457314 0.66649705 -1.9419137 128.0 +-7.2616696 0.71292639 -1.9474338 128.0 +-7.2773104 0.75957632 -1.9529539 128.0 +-7.2456613 0.80124116 -1.9455938 128.0 +-7.2597747 0.84792626 -1.9508511 128.0 +-7.2707143 0.89446074 -1.9553198 128.0 +-7.2784853 0.94078982 -1.9589999 128.0 +-7.2544103 0.98296773 -1.9540055 128.0 +-7.2520633 1.0280037 -1.9550569 128.0 +-7.2446647 1.0723407 -1.954794 128.0 +-7.198854 1.1107346 -1.9440167 128.0 +-7.1709456 1.1515162 -1.9382336 128.0 +-7.1551805 1.1940639 -1.9358679 128.0 +-7.1676826 1.2414057 -1.941388 128.0 +-7.1580315 1.2850212 -1.9408623 128.0 +-7.1604462 1.3308588 -1.9437538 128.0 +-7.1246691 1.3694835 -1.9361308 128.0 +-7.1511459 1.420133 -1.9458567 128.0 +-7.1422973 1.4639848 -1.9458567 128.0 +-7.1294045 1.5069829 -1.9448053 128.0 +-7.1068258 1.5478231 -1.9411252 128.0 +-7.1075501 1.5937245 -1.9440167 128.0 +-7.0769553 1.632531 -1.9382336 128.0 +-7.0724373 1.6772604 -1.9398109 128.0 +-7.0460773 1.7167392 -1.9353422 128.0 +-7.0223079 1.7566607 -1.9316621 128.0 +-7.0160694 1.8009158 -1.9329764 128.0 +-7.009552 1.8451606 -1.9342908 128.0 +-6.9897151 1.8858722 -1.9319249 128.0 +-6.9659233 1.9253814 -1.9285077 128.0 +-6.9484081 1.9665099 -1.9269305 128.0 +-6.9158235 2.0031986 -1.9211476 128.0 +-6.9709291 2.0656171 -1.9403366 128.0 +-6.941504 2.103312 -1.935605 128.0 +-6.9422913 2.1501486 -1.939548 128.0 +-6.9032125 2.1845505 -1.9321878 128.0 +-6.8905964 2.2271636 -1.9324507 128.0 +-6.9189453 2.2833171 -1.9445424 128.0 +-6.9093766 2.3272686 -1.9458567 128.0 +-6.861208 2.3580117 -1.9361308 128.0 +-6.8429685 2.3987896 -1.9350793 128.0 +-6.8281207 2.4407322 -1.9350793 128.0 +-6.8275199 2.4878705 -1.9392852 128.0 +-6.7949419 2.5233319 -1.9342908 128.0 +-6.7730145 2.5625863 -1.9324507 128.0 +-6.7445602 2.5992372 -1.9287705 128.0 +-6.7159114 2.6356354 -1.9250906 128.0 +-6.7148433 2.6828818 -1.9295592 128.0 +-6.6982551 2.7240329 -1.9295592 128.0 +-6.6858721 2.7669268 -1.9308735 128.0 +-6.6732144 2.8097713 -1.9321878 128.0 +-6.6487536 2.8476243 -1.9300849 128.0 +-6.6081586 2.8783455 -1.9232504 128.0 +-6.5930195 2.9200108 -1.9240391 128.0 +-6.5925727 2.9683349 -1.9292964 128.0 +-6.5768666 3.0099354 -1.9300849 128.0 +-6.5486517 3.0457563 -1.9271934 128.0 +-6.5350738 3.0883551 -1.9287705 128.0 +-6.527307 3.1338258 -1.9321878 128.0 +-6.4897456 3.1649334 -1.9266677 128.0 +-6.4494553 3.1944132 -1.920359 128.0 +-6.4366283 3.2373955 -1.9224619 128.0 +-6.3994589 3.26805 -1.9172046 128.0 +-6.4092631 3.3228023 -1.9264048 128.0 +-6.3597269 3.3467846 -1.9174675 128.0 +-6.3399224 3.3861988 -1.9177303 128.0 +-6.319026 3.4250362 -1.9177303 128.0 +-6.3097258 3.4702559 -1.9214104 128.0 +-6.2967386 3.5136089 -1.9240391 128.0 +-6.2800984 3.5550315 -1.9256163 128.0 +-6.2364144 3.5810037 -1.9187818 128.0 +-6.2068214 3.6148307 -1.916416 128.0 +-6.1936617 3.658246 -1.9193076 128.0 +-6.16365 3.6917176 -1.9169418 128.0 +-6.102951 3.706423 -1.9048501 128.0 +-6.0858445 3.7473423 -1.9066901 128.0 +-6.1052923 3.8111885 -1.920359 128.0 +-6.0067916 3.8011005 -1.8961756 128.0 +-6.0523791 3.8821754 -1.9185189 128.0 +-6.0171208 3.9118748 -1.9148389 128.0 +-5.9744763 3.9365089 -1.908793 128.0 +-5.9582329 3.9784527 -1.9114217 128.0 +-5.9448957 4.0225081 -1.9151018 128.0 +-0 0 -0 128.0 +-5.8887472 4.0907536 -1.9129988 128.0 +-5.8564358 4.1218104 -1.9106331 128.0 +-5.8365331 4.1615891 -1.9124731 128.0 +-5.8171444 4.2018437 -1.9145761 128.0 +-5.7717886 4.2232113 -1.9080044 128.0 +-5.7139902 4.2349868 -1.897227 128.0 +-5.7311015 4.3024125 -1.9119474 128.0 +-5.6976833 4.3322401 -1.9095817 128.0 +-5.7214403 4.4059796 -1.9269305 128.0 +-5.6433301 4.4012399 -1.9093188 128.0 +-5.6063766 4.4280081 -1.9059016 128.0 +-5.6084828 4.4858327 -1.9161532 128.0 +-5.5823522 4.5213761 -1.9166789 128.0 +-5.5597258 4.5598273 -1.9185189 128.0 +-5.5160575 4.5809083 -1.9129988 128.0 +-5.4856305 4.6128044 -1.9122102 128.0 +-5.4535508 4.643249 -1.9108959 128.0 +-5.3913469 4.6476398 -1.8988042 128.0 +-5.3867121 4.7015734 -1.9074787 128.0 +-5.3476419 4.7255912 -1.9037986 128.0 +-5.2933822 4.7357945 -1.8945985 128.0 +-5.2670841 4.7707763 -1.8956499 128.0 +-5.2654414 4.8284407 -1.9059016 128.0 +-5.2145057 4.8409615 -1.8980156 128.0 +-5.2079015 4.8946748 -1.9066901 128.0 +-5.1735768 4.9225469 -1.905113 128.0 +-5.1099257 4.9220643 -1.8924955 128.0 +-5.100348 4.973537 -1.9003814 128.0 +-5.0663028 5.001349 -1.899067 128.0 +-5.0191431 5.0159698 -1.8927584 128.0 +-5.0215006 5.0803013 -1.9056387 128.0 +-4.9895601 5.1103268 -1.9053758 128.0 +-4.955431 5.1380672 -1.9043244 128.0 +-4.9364538 5.1816516 -1.9093188 128.0 +-4.8939891 5.2005997 -1.905113 128.0 +-4.8619866 5.2305307 -1.905113 128.0 +-4.7913079 5.218327 -1.8896041 128.0 +-4.7591987 5.2476277 -1.8896041 128.0 +-4.7339907 5.2846375 -1.8924955 128.0 +-4.7577281 5.377182 -1.9156275 128.0 +-4.7062359 5.3852024 -1.9080044 128.0 +-4.6642799 5.4037509 -1.9043244 128.0 +-4.6285319 5.4293313 -1.9032729 128.0 +-4.5994802 5.4627967 -1.905113 128.0 +-4.5819101 5.5102067 -1.9119474 128.0 +-4.5455651 5.535234 -1.9108959 128.0 +-4.515162 5.5675178 -1.9124731 128.0 +-4.4857392 5.6011429 -1.9145761 128.0 +-4.4530821 5.6308322 -1.9153646 128.0 +-4.4297285 5.6724997 -1.920359 128.0 +-4.3889489 5.6919317 -1.9177303 128.0 +-4.3434234 5.7049351 -1.9129988 128.0 +-4.3141327 5.7391915 -1.9156275 128.0 +-4.2719383 5.7562561 -1.9124731 128.0 +-4.2291265 5.7722411 -1.9090558 128.0 +-4.2213297 5.8363934 -1.9219362 128.0 +-4.1815152 5.8566875 -1.9200962 128.0 +-4.134387 5.8664598 -1.9148389 128.0 +-4.0966606 5.8893414 -1.9140503 128.0 +-4.0560799 5.9080029 -1.9119474 128.0 +-4.0267863 5.9431643 -1.9153646 128.0 +-3.9982862 5.9797926 -1.9193076 128.0 +-3.9519577 5.9897151 -1.9145761 128.0 +-3.9388132 6.0502415 -1.9264048 128.0 +-3.8995304 6.0710478 -1.9253534 128.0 +-3.859108 6.0899706 -1.9237761 128.0 +-3.8068402 6.0898066 -1.9161532 128.0 +-3.7850966 6.1385117 -1.924302 128.0 +-3.7498662 6.1657434 -1.9256163 128.0 +-3.7179172 6.198566 -1.9287705 128.0 +-3.6734295 6.210465 -1.9253534 128.0 +-3.6469166 6.252892 -1.9316621 128.0 +-3.6080003 6.2743149 -1.9313992 128.0 +-3.5851316 6.3240361 -1.9400737 128.0 +-3.5406144 6.3358068 -1.9369193 128.0 +-3.507256 6.3675547 -1.9400737 128.0 +-3.4561553 6.3669062 -1.9332392 128.0 +-3.4174786 6.388844 -1.9335021 128.0 +-3.381361 6.415668 -1.9353422 128.0 +-3.3463764 6.4448586 -1.9379708 128.0 +-3.299741 6.4515252 -1.9337649 128.0 +-3.2635646 6.4785447 -1.9358679 128.0 +-3.2340388 6.5191927 -1.9421766 128.0 +-3.1812773 6.5129037 -1.9342908 128.0 +-3.1454349 6.540997 -1.9369193 128.0 +-3.1056535 6.5610461 -1.9371822 128.0 +-3.06493 6.5791035 -1.9369193 128.0 +-3.0160632 6.5793662 -1.9313992 128.0 +-2.9859462 6.6206174 -1.9382336 128.0 +-2.9448755 6.6379323 -1.9379708 128.0 +-2.9118044 6.6735644 -1.943228 128.0 +-2.864717 6.6771178 -1.9390223 128.0 +-2.8296902 6.7087941 -1.943228 128.0 +-2.7881033 6.7251391 -1.9429651 128.0 +-2.7424195 6.7313972 -1.9398109 128.0 +-2.705724 6.7597432 -1.943228 128.0 +-2.6716068 6.7950754 -1.9487482 128.0 +-2.634726 6.8239422 -1.9524282 128.0 +-2.5856266 6.821033 -1.9469081 128.0 +-2.5528052 6.8611865 -1.9540055 128.0 +-2.4947817 6.8332152 -1.941388 128.0 +-2.4508557 6.8429437 -1.9398109 128.0 +-2.4155338 6.8769708 -1.945331 128.0 +-2.3798862 6.910821 -1.9508511 128.0 +-2.3318861 6.9088378 -1.9461195 128.0 +-2.2840002 6.9065266 -1.941388 128.0 +-2.2493057 6.9442768 -1.9482224 128.0 +-2.2084033 6.9634662 -1.9497997 128.0 +-2.1659205 6.977807 -1.9500625 128.0 +-2.1157792 6.9669609 -1.943228 128.0 +-2.0743635 6.984437 -1.9445424 128.0 +-2.0341575 7.0062995 -1.947171 128.0 +-1.9916557 7.0205054 -1.9476967 128.0 +-1.9544631 7.0539804 -1.9537426 128.0 +-1.9129063 7.07236 -1.9555826 128.0 +-1.8591411 7.0447807 -1.9445424 128.0 +-1.8146787 7.0513835 -1.943228 128.0 +-1.7734892 7.0708084 -1.9455938 128.0 +-1.7238917 7.0562501 -1.9384965 128.0 +-1.6957321 7.1305256 -1.9563712 128.0 +-1.6460806 7.1154151 -1.9492739 128.0 +-1.6083134 7.1517396 -1.956634 128.0 +-1.557405 7.1294236 -1.9476967 128.0 +-1.5204295 7.1709375 -1.956634 128.0 +-1.4750415 7.1735158 -1.954794 128.0 +-1.4247816 7.1512051 -1.9461195 128.0 +-1.3803281 7.1569705 -1.945331 128.0 +-1.3482299 7.2288551 -1.9629427 128.0 +-1.3047037 7.2417393 -1.9642571 128.0 +-1.260905 7.2534108 -1.9653085 128.0 +-1.2109604 7.2286568 -1.9563712 128.0 +-1.1698052 7.2559547 -1.9618913 128.0 +-1.1218673 7.241066 -1.9558455 128.0 +-1.0730226 7.2182279 -1.9476967 128.0 +-1.0348258 7.2676606 -1.9595256 128.0 +-0.98735297 7.252841 -1.9537426 128.0 +-0.94494194 7.2750282 -1.9582112 128.0 +-0.90111315 7.2873926 -1.9600513 128.0 +-0.85447121 7.276494 -1.9555826 128.0 +-0.80533475 7.2413244 -1.9445424 128.0 +-0.76461005 7.2816339 -1.9542683 128.0 +-0.72029531 7.290029 -1.9553198 128.0 +-0.67404097 7.2779789 -1.9508511 128.0 +-0.63044947 7.2944741 -1.9542683 128.0 +-0.58452415 7.2837787 -1.9503254 128.0 +-0.54088759 7.3016615 -1.9542683 128.0 +-0.49946666 7.3548994 -1.9679371 128.0 +-0.45326084 7.3404913 -1.9632056 128.0 +-0.40709046 7.3229041 -1.9576855 128.0 +-0.36139047 7.3098454 -1.9534796 128.0 +-0.31736282 7.3312039 -1.958737 128.0 +-0.27162457 7.3127656 -1.9532168 128.0 +-0.22722505 7.3297243 -1.9574226 128.0 +-0.18210347 7.3251934 -1.9558455 128.0 +-0.13695653 7.3155618 -1.9529539 128.0 +-0.092246316 7.3307357 -1.9568969 128.0 +-0.047136612 7.3109026 -1.9513768 128.0 +-0.0022773135 7.3139486 -1.9521654 128.0 +0.042831186 7.3524175 -1.9626799 128.0 +0.087791964 7.3394747 -1.9592627 128.0 +0.13215522 7.3021402 -1.9492739 128.0 +0.17787552 7.338809 -1.9595256 128.0 +0.22296116 7.3395081 -1.9600513 128.0 +0.26781452 7.3331809 -1.958737 128.0 +0.31189683 7.3101931 -1.9529539 128.0 +0.35712302 7.3158507 -1.9550569 128.0 +0.40258971 7.3241191 -1.9579483 128.0 +0.44893849 7.3446236 -1.9642571 128.0 +0.49074954 7.2935982 -1.9511139 128.0 +0.53655541 7.3048835 -1.9550569 128.0 +0.57967913 7.2802944 -1.9492739 128.0 +0.62508297 7.2852521 -1.9516397 128.0 +0.66844469 7.2668681 -1.9476967 128.0 +0.71368176 7.2693515 -1.9495368 128.0 +0.75937569 7.2753911 -1.9524282 128.0 +0.79986054 7.2331948 -1.9421766 128.0 +0.84927124 7.2712741 -1.9540055 128.0 +0.89434278 7.2697568 -1.9550569 128.0 +0.94066596 7.2775283 -1.958737 128.0 +0.98802608 7.291697 -1.9642571 128.0 +1.0270548 7.2453761 -1.9532168 128.0 +1.0676737 7.2131691 -1.9461195 128.0 +1.1138275 7.2188778 -1.9495368 128.0 +1.1579475 7.2109551 -1.9492739 128.0 +1.2058276 7.2256021 -1.9553198 128.0 +1.2473387 7.2019062 -1.9508511 128.0 +1.2935529 7.2055125 -1.9540055 128.0 +1.3361526 7.1889029 -1.9516397 128.0 +1.3835187 7.1976233 -1.9563712 128.0 +1.4282206 7.1918378 -1.9571598 128.0 +1.4694138 7.1687617 -1.9532168 128.0 +1.5103775 7.1454515 -1.9492739 128.0 +1.5539873 7.1351066 -1.9490111 128.0 +1.596682 7.1207299 -1.9476967 128.0 +1.6355693 7.0901165 -1.9419137 128.0 +1.6772604 7.0724373 -1.9398109 128.0 +1.7192532 7.0563884 -1.9382336 128.0 +1.7615808 7.0419626 -1.9371822 128.0 +1.8114772 7.0571876 -1.9445424 128.0 +1.854008 7.0431404 -1.9437538 128.0 +1.8946741 7.0223169 -1.9411252 128.0 +1.9341259 6.9975405 -1.937445 128.0 +1.9830722 7.0068927 -1.9434909 128.0 +2.0246854 6.9899592 -1.9421766 128.0 +2.0721993 6.9931302 -1.9466453 128.0 +2.1117101 6.9692035 -1.9434909 128.0 +2.1598589 6.9736257 -1.9484853 128.0 +2.2034814 6.9630013 -1.9492739 128.0 +2.2440858 6.9429235 -1.9474338 128.0 +2.2772667 6.9006219 -1.9392852 128.0 +2.3229547 6.8965764 -1.9421766 128.0 +2.3611491 6.8703318 -1.9387594 128.0 +2.403899 6.8575358 -1.9392852 128.0 +2.4443061 6.8381143 -1.9379708 128.0 +2.4815915 6.810297 -1.9342908 128.0 +2.5270281 6.8048906 -1.9371822 128.0 +2.5622447 6.7721124 -1.9321878 128.0 +2.608609 6.7688665 -1.9358679 128.0 +2.6416299 6.7311788 -1.9295592 128.0 +2.6853888 6.7211146 -1.9313992 128.0 +2.7243965 6.6991487 -1.9298221 128.0 +2.763974 6.6787405 -1.9287705 128.0 +2.8071494 6.6669903 -1.9303478 128.0 +2.8533244 6.662056 -1.9340279 128.0 +2.8856688 6.6249642 -1.9282448 128.0 +2.9411168 6.6406536 -1.9382336 128.0 +2.9687312 6.593452 -1.9295592 128.0 +3.0035088 6.5628304 -1.9258791 128.0 +3.0473843 6.5521507 -1.9282448 128.0 +3.0920665 6.5429239 -1.9311364 128.0 +3.1363323 6.5325255 -1.9337649 128.0 +3.1678948 6.4958158 -1.9285077 128.0 +3.2016954 6.4641523 -1.9248277 128.0 +3.2439005 6.4495564 -1.9264048 128.0 +3.276829 6.4166427 -1.9224619 128.0 +3.3205812 6.4049807 -1.9250906 128.0 +3.3607178 6.3861928 -1.9256163 128.0 +3.3893816 6.3458796 -1.9195704 128.0 +3.4167578 6.3037586 -1.9129988 128.0 +3.456768 6.2852111 -1.9137874 128.0 +3.4995008 6.2714648 -1.9161532 128.0 +3.5369649 6.2481952 -1.9156275 128.0 +3.5795617 6.2339048 -1.9179932 128.0 +3.6109452 6.2001524 -1.9143132 128.0 +3.64254 6.1670804 -1.9108959 128.0 +3.6902299 6.1611671 -1.9161532 128.0 +3.7249589 6.1334605 -1.9145761 128.0 +3.765559 6.1154184 -1.9161532 128.0 +3.8244755 6.1265697 -1.9271934 128.0 +3.8341284 6.0589662 -1.9129988 128.0 +3.867065 6.0288301 -1.9108959 128.0 +3.9039843 6.0049887 -1.9108959 128.0 +3.9200487 5.9495034 -1.9006443 128.0 +3.9763091 5.9550238 -1.9103702 128.0 +4.0295391 5.9552827 -1.9185189 128.0 +4.0660043 5.9304457 -1.9185189 128.0 +4.1072712 5.9125166 -1.9208847 128.0 +4.1273646 5.864325 -1.9132617 128.0 +4.1475825 5.8168955 -1.9059016 128.0 +4.1628532 5.7631836 -1.8964385 128.0 +4.1969976 5.7359753 -1.8959128 128.0 +4.2401586 5.7209654 -1.8995929 128.0 +4.2803965 5.7017841 -1.9019586 128.0 +4.3094602 5.6677337 -1.89933 128.0 +4.3447447 5.6419487 -1.8995929 128.0 +4.3656311 5.5976872 -1.8935469 128.0 +4.3933163 5.5624671 -1.8906555 128.0 +4.4189253 5.5248585 -1.8869754 128.0 +4.4545641 5.4998894 -1.887764 128.0 +4.4845552 5.4679775 -1.8861868 128.0 +4.5093899 5.4299679 -1.8825067 128.0 +4.5680871 5.4324689 -1.8932841 128.0 +4.5969548 5.3991957 -1.8914441 128.0 +4.622436 5.3621197 -1.8882897 128.0 +4.6558852 5.334383 -1.8885525 128.0 +4.6904454 5.3078833 -1.8893412 128.0 +4.7242126 5.2804413 -1.8898669 128.0 +4.7506933 5.2449198 -1.8875011 128.0 +4.7716985 5.2035842 -1.8830324 128.0 +4.8153553 5.1869335 -1.887764 128.0 +4.8497348 5.1601009 -1.8888154 128.0 +4.8819704 5.1309452 -1.8890783 128.0 +4.9213948 5.109231 -1.8922327 128.0 +4.9492836 5.0754843 -1.8909184 128.0 +4.9884682 5.0532589 -1.8940727 128.0 +5.027566 5.0307431 -1.897227 128.0 +5.0343184 4.9760647 -1.8880268 128.0 +5.0668278 4.947103 -1.8888154 128.0 +5.1123681 4.9306531 -1.8945985 128.0 +5.1418271 4.8985257 -1.8943356 128.0 +5.1331358 4.8305235 -1.8798782 128.0 +5.1796417 4.8146987 -1.8861868 128.0 +5.2062435 4.7802167 -1.8851354 128.0 +5.2497721 4.7611432 -1.8903927 128.0 +5.2817621 4.7314162 -1.8914441 128.0 +5.3099718 4.6982794 -1.8911812 128.0 +5.3437858 4.670053 -1.8930212 128.0 +5.3686881 4.6340246 -1.8917069 128.0 +5.3977551 4.6016216 -1.8919698 128.0 +5.4295793 4.5715218 -1.8932841 128.0 +5.4575272 4.5381203 -1.8932841 128.0 +5.4912357 4.5094457 -1.8953871 128.0 +5.4985662 4.4592619 -1.8882897 128.0 +5.5664964 4.4580011 -1.9024843 128.0 +5.5876904 4.4189749 -1.9003814 128.0 +5.6017704 4.3745131 -1.8959128 128.0 +5.6376762 4.3471274 -1.899067 128.0 +5.6680827 4.3153753 -1.9003814 128.0 +5.6851983 4.27356 -1.897227 128.0 +5.7058892 4.2345715 -1.8953871 128.0 +5.7255378 4.1949205 -1.8932841 128.0 +5.741787 4.1529264 -1.8901298 128.0 +5.771873 4.1209803 -1.8917069 128.0 +5.8167686 4.0993791 -1.8982785 128.0 +5.8204246 4.0487385 -1.8911812 128.0 +5.8539085 4.0189543 -1.8940727 128.0 +5.8984289 3.9964867 -1.9006443 128.0 +5.9244442 3.9612916 -1.90117 128.0 +5.9945478 3.9551451 -1.9161532 128.0 +5.961288 3.8809235 -1.8974899 128.0 +5.976058 3.8385384 -1.8945985 128.0 +5.9693408 3.7826943 -1.8848726 128.0 +6.0578961 3.7868998 -1.9059016 128.0 +6.0276308 3.7167504 -1.8888154 128.0 +6.0569186 3.6837053 -1.8909184 128.0 +6.0868545 3.6509368 -1.8932841 128.0 +6.1307354 3.6262875 -1.9001186 128.0 +6.1437016 3.5832562 -1.897227 128.0 +6.1722646 3.5493383 -1.89933 128.0 +6.1972842 3.5133021 -1.9003814 128.0 +6.2103014 3.4705048 -1.8977528 128.0 +6.2272534 3.430007 -1.8964385 128.0 +6.2549663 3.3954141 -1.8985413 128.0 +6.2858925 3.3624296 -1.9016957 128.0 +6.3098202 3.3255959 -1.9027472 128.0 +6.3164053 3.2797053 -1.8985413 128.0 +6.3389874 3.2422044 -1.89933 128.0 +6.3303242 3.1889284 -1.8906555 128.0 +6.3843474 3.1671717 -1.90117 128.0 +6.398459 3.1253984 -1.8995929 128.0 +6.4305592 3.0923493 -1.9035357 128.0 +6.4415631 3.0491202 -1.90117 128.0 +6.4793935 3.0184984 -1.906953 128.0 +6.5021782 2.9806945 -1.9082673 128.0 +6.5185857 2.9399486 -1.9077415 128.0 +6.5338564 2.8987226 -1.906953 128.0 +6.5541725 2.8597343 -1.9077415 128.0 +6.5875578 2.8263097 -1.9124731 128.0 +6.594996 2.7817128 -1.9095817 128.0 +6.6021352 2.7371314 -1.9066901 128.0 +6.6125507 2.6940227 -1.9048501 128.0 +6.6343312 2.6555486 -1.9064273 128.0 +6.637929 2.6098506 -1.9027472 128.0 +6.6556177 2.5697665 -1.9032729 128.0 +6.6784782 2.5316148 -1.9053758 128.0 +6.7065468 2.4952972 -1.9090558 128.0 +6.7235441 2.454761 -1.9095817 128.0 +6.7348461 2.4121592 -1.9085301 128.0 +6.7513409 2.3714287 -1.9090558 128.0 +6.7767124 2.3337269 -1.9122102 128.0 +6.7744484 2.2865505 -1.9074787 128.0 +6.8149176 2.253721 -1.9151018 128.0 +6.8231101 2.2100801 -1.9135245 128.0 +6.8282647 2.165549 -1.9111588 128.0 +6.8423452 2.1238966 -1.9114217 128.0 +6.882946 2.0902793 -1.9193076 128.0 +6.8817677 2.0438888 -1.9153646 128.0 +6.8904729 2.0005491 -1.9143132 128.0 +6.9165421 1.96218 -1.918256 128.0 +6.942399 1.9235661 -1.922199 128.0 +6.9438257 1.8781626 -1.9193076 128.0 +6.9356275 1.8303539 -1.9137874 128.0 +6.9635477 1.7920889 -1.9185189 128.0 +6.988451 1.7528462 -1.9224619 128.0 +6.9775167 1.7046698 -1.916416 128.0 +6.9728255 1.6582553 -1.9122102 128.0 +7.0120106 1.6221763 -1.920359 128.0 +7.0274801 1.5803901 -1.9219362 128.0 +7.0285611 1.5353887 -1.9195704 128.0 +7.0369062 1.4920334 -1.9193076 128.0 +7.0402579 1.4476626 -1.9177303 128.0 +7.0632024 1.4072628 -1.9216733 128.0 +7.0574927 1.3611588 -1.9177303 128.0 +7.0723515 1.3190664 -1.9195704 128.0 +7.0755644 1.2747918 -1.918256 128.0 +7.088006 1.2321784 -1.9195704 128.0 +7.085917 1.1870716 -1.9169418 128.0 +7.0997353 1.1446447 -1.9187818 128.0 +7.1199737 1.103126 -1.9224619 128.0 +7.1371064 1.0609767 -1.9253534 128.0 +7.1272435 1.0148548 -1.9208847 128.0 +7.1295123 0.97058374 -1.9198333 128.0 +7.1468153 0.92830908 -1.9229876 128.0 +7.1389709 0.88278407 -1.9193076 128.0 +7.1442533 0.83896357 -1.9193076 128.0 +7.1598148 0.79628289 -1.922199 128.0 +7.1597681 0.75183302 -1.9208847 128.0 +7.1584854 0.70731908 -1.9193076 128.0 +7.1655726 0.66364861 -1.9200962 128.0 +7.1647034 0.61925435 -1.9187818 128.0 +7.180871 0.57628226 -1.922199 128.0 +7.1948562 0.53299278 -1.9250906 128.0 +7.2008791 0.48903158 -1.9258791 128.0 +7.1873732 0.44383031 -1.9214104 128.0 +7.214045 0.40105611 -1.927982 128.0 +7.2192607 0.35692647 -1.9287705 128.0 +7.2126398 0.31224903 -1.9264048 128.0 +7.2086349 0.26777327 -1.9248277 128.0 +7.2101421 0.22353686 -1.9248277 128.0 +7.2219877 0.17955415 -1.9277191 128.0 +7.2268124 0.1353091 -1.9287705 128.0 +7.2275066 0.090963669 -1.9287705 128.0 +7.2211747 0.046572343 -1.9269305 128.0 +7.2058873 0.0022608107 -1.9227247 128.0 +7.2395344 -0.042155772 -1.9319249 128.0 +7.2401042 -0.086587615 -1.9321878 128.0 +7.2259312 -0.13076386 -1.9285077 128.0 +7.2307801 -0.17524007 -1.9300849 128.0 +7.2218533 -0.21936841 -1.927982 128.0 +7.2377267 -0.26431331 -1.9327135 128.0 +7.2407885 -0.30892462 -1.9340279 128.0 +7.2329745 -0.35306427 -1.9324507 128.0 +7.2287455 -0.3973321 -1.9319249 128.0 +7.2040215 -0.44032198 -1.9258791 128.0 +7.2233253 -0.48601002 -1.9319249 128.0 +7.2076979 -0.52940154 -1.9285077 128.0 +7.2273965 -0.57545877 -1.9348165 128.0 +7.2025814 -0.61797649 -1.9290335 128.0 +7.1967325 -0.661982 -1.9285077 128.0 +7.1877341 -0.70565575 -1.9271934 128.0 +7.1938248 -0.75084901 -1.9300849 128.0 +7.191 -0.79518777 -1.9306107 128.0 +7.1821523 -0.83884764 -1.9295592 128.0 +7.1854882 -0.88396233 -1.9319249 128.0 +7.193325 -0.92976868 -1.935605 128.0 +7.2113867 -0.97713113 -1.9421766 128.0 +7.1651344 -1.0156672 -1.9311364 128.0 +7.1587672 -1.0596125 -1.9311364 128.0 +7.1378284 -1.1013088 -1.9271934 128.0 +7.1442728 -1.1472287 -1.9308735 128.0 +7.1171145 -1.1877052 -1.9253534 128.0 +7.1163473 -1.2325063 -1.9271934 128.0 +7.0887089 -1.2725649 -1.9216733 128.0 +7.0902524 -1.317801 -1.924302 128.0 +7.0782433 -1.3605521 -1.9232504 128.0 +7.0943666 -1.4088479 -1.9300849 128.0 +7.0562887 -1.446341 -1.9219362 128.0 +7.1152453 -1.5039877 -1.9408623 128.0 +7.0983415 -1.5459739 -1.9387594 128.0 +7.0868387 -1.5890769 -1.9382336 128.0 +7.0666142 -1.6301438 -1.9353422 128.0 +7.0536623 -1.6728046 -1.9345536 128.0 +7.0620127 -1.7206244 -1.9398109 128.0 +7.0363469 -1.7601751 -1.935605 128.0 +7.0226107 -1.8025961 -1.9348165 128.0 +7.012351 -1.8458978 -1.9350793 128.0 +6.9664283 -1.8795853 -1.9253534 128.0 +6.9380255 -1.9176656 -1.9206219 128.0 +6.8889952 -1.9496847 -1.9101074 128.0 +6.8092537 -1.9723116 -1.8909184 128.0 +6.6527185 -1.97127 -1.8499118 128.0 +6.5435481 -1.9826599 -1.8223112 128.0 +6.440022 -1.9944991 -1.7962878 128.0 +6.3246422 -2.0013573 -1.7668471 128.0 +6.2810302 -2.0300329 -1.7579098 128.0 +6.2034068 -2.0470562 -1.7392465 128.0 +6.1514144 -2.0718315 -1.7279434 128.0 +6.0665064 -2.0847523 -1.7071773 128.0 +6.0035253 -2.1043735 -1.6927198 128.0 +5.9432588 -2.1242759 -1.6790509 128.0 +5.8829761 -2.1435184 -1.665382 128.0 +5.8805661 -2.1836078 -1.6685364 128.0 +5.4637074 -2.066967 -1.5510367 128.0 +5.414012 -2.0862215 -1.5402594 128.0 +5.3786573 -2.1105866 -1.5336878 128.0 +5.2554088 -2.0995007 -1.5013556 128.0 +5.0368781 -2.0480766 -1.4408972 128.0 +5.0046048 -2.0708239 -1.4351143 128.0 +4.8113036 -2.0254583 -1.3817531 128.0 +4.7686324 -2.042022 -1.3728157 128.0 +4.70825 -2.0504296 -1.3586211 128.0 +4.6541204 -2.0609102 -1.3462666 128.0 +4.5454993 -2.046236 -1.3176146 128.0 +4.3837247 -2.0058076 -1.2729279 128.0 +4.3538394 -2.0245273 -1.2676706 128.0 +4.3038278 -2.0334711 -1.2563674 128.0 +4.2225623 -2.02684 -1.2356013 128.0 +4.1875005 -2.0417116 -1.2287669 128.0 +4.1714358 -2.0656536 -1.2277155 128.0 +4.0552573 -2.03917 -1.1961719 128.0 +3.9859617 -2.0350435 -1.178823 128.0 +3.95627 -2.0505784 -1.1735657 128.0 +3.9094634 -2.0568366 -1.1630512 128.0 +3.8278403 -2.043956 -1.1417593 128.0 +3.7745144 -2.0453296 -1.1291419 128.0 +3.7001843 -2.0344989 -1.1099529 128.0 +3.6648846 -2.044467 -1.1028556 128.0 +3.6489129 -2.0650141 -1.1018041 128.0 +3.5968518 -2.0647774 -1.0894496 128.0 +3.6066239 -2.0999224 -1.0965469 128.0 +3.5695817 -2.107779 -1.0889239 128.0 +3.5491326 -2.1251788 -1.0865581 128.0 +3.5112886 -2.131887 -1.0786722 128.0 +3.487462 -2.1468136 -1.075255 128.0 +3.4578564 -2.1579509 -1.0699978 128.0 +3.4184632 -2.1626134 -1.0615861 128.0 +3.4108136 -2.1871953 -1.0634261 128.0 +3.4312997 -2.2301755 -1.0744665 128.0 +3.3941891 -2.2357893 -1.0668434 128.0 +3.3964529 -2.2672918 -1.0721006 128.0 +3.3808792 -2.2870076 -1.0715749 128.0 +3.3787177 -2.3158948 -1.0755179 128.0 +3.3676133 -2.3387852 -1.0765693 128.0 +3.328743 -2.3421857 -1.0684205 128.0 +3.2946715 -2.3485599 -1.061849 128.0 +3.2551737 -2.3506489 -1.0534374 128.0 +3.2220037 -2.3569012 -1.0471287 128.0 +3.1927555 -2.3657086 -1.0421343 128.0 +3.2236986 -2.4194376 -1.0576432 128.0 +3.2517972 -2.4718819 -1.0723635 128.0 +3.2090526 -2.4705913 -1.0629004 128.0 +3.2394755 -2.5258439 -1.0786722 128.0 +3.1966622 -2.5241406 -1.0692092 128.0 +3.182621 -2.5449128 -1.0697349 128.0 +3.1317117 -2.5358462 -1.0573803 128.0 +3.1384706 -2.5733733 -1.0652663 128.0 +3.1300433 -2.5987477 -1.0678948 128.0 +3.0977948 -2.6042407 -1.0621119 128.0 +3.0707393 -2.6138153 -1.0581689 128.0 +3.0487981 -2.6275671 -1.056066 128.0 +3.0449736 -2.6570122 -1.0605347 128.0 +3.0249989 -2.6724508 -1.0592204 128.0 +2.9517467 -2.6401303 -1.0384542 128.0 +2.8818669 -2.6096046 -1.0187395 128.0 +2.9937813 -2.7446358 -1.0660548 128.0 +2.9196181 -2.7097723 -1.044763 128.0 +2.8902833 -2.71574 -1.0400314 128.0 +2.8910375 -2.7500529 -1.046603 128.0 +2.8692455 -2.7630539 -1.044763 128.0 +2.8625977 -2.7907131 -1.0487058 128.0 +2.8406146 -2.8034794 -1.0468658 128.0 +2.8404179 -2.8379097 -1.0534374 128.0 +2.8338017 -2.8662658 -1.0576432 128.0 +2.8316615 -2.8994801 -1.063689 128.0 +2.8077903 -2.9105492 -1.0613233 128.0 +2.8497643 -2.9906034 -1.084981 128.0 +2.81285 -2.9883561 -1.0776207 128.0 +2.7432325 -2.9504297 -1.0571175 128.0 +2.7041998 -2.9444606 -1.0487058 128.0 +2.674417 -2.9481313 -1.0439743 128.0 +2.653059 -2.960892 -1.04266 128.0 +2.6316452 -2.9735017 -1.0413457 128.0 +2.6089072 -2.9845071 -1.0395057 128.0 +2.5987394 -3.0099552 -1.0429229 128.0 +2.5677054 -3.0111573 -1.0376656 128.0 +2.5659561 -3.0467861 -1.044763 128.0 +2.5324109 -3.0446661 -1.0384542 128.0 +2.4861326 -3.0265894 -1.0266254 128.0 +2.4620464 -3.0350418 -1.0242596 128.0 +2.4500105 -3.0583766 -1.0271511 128.0 +2.4246163 -3.0650263 -1.0242596 128.0 +2.4289188 -3.1095066 -1.0345113 128.0 +2.3797529 -3.0853794 -1.0211053 128.0 +2.3455839 -3.0799613 -1.0142708 128.0 +2.442564 -3.2485619 -1.0668434 128.0 +2.4041893 -3.238692 -1.0584317 128.0 +2.3563368 -3.2152421 -1.0455515 128.0 +2.3009491 -3.180382 -1.0289911 128.0 +2.265697 -3.1724513 -1.021631 128.0 +2.2600806 -3.2060125 -1.0282025 128.0 +2.2365105 -3.2142746 -1.0263625 128.0 +2.2200217 -3.2327101 -1.0279397 128.0 +2.1985214 -3.2438745 -1.0271511 128.0 +2.1828651 -3.2637205 -1.029254 128.0 +2.162267 -3.2762475 -1.0289911 128.0 +2.1500177 -3.3015833 -1.0329341 128.0 +2.1427515 -3.3350103 -1.0395057 128.0 +2.1387699 -3.3741772 -1.0479172 128.0 +2.1210938 -3.3921463 -1.0494945 128.0 +2.0966961 -3.399348 -1.0476544 128.0 +2.0908351 -3.4368818 -1.0555403 128.0 +2.0930266 -3.4885383 -1.0678948 128.0 +2.0833673 -3.5212476 -1.0742036 128.0 +1.9936881 -3.4172726 -1.0374027 128.0 +1.9471984 -3.3851078 -1.023471 128.0 +1.9263911 -3.3969917 -1.023471 128.0 +1.8942184 -3.3885322 -1.0171623 128.0 +1.8938669 -3.4372795 -1.0287282 128.0 +1.8870054 -3.4751244 -1.036877 128.0 +1.865647 -3.4866374 -1.036877 128.0 +1.8536624 -3.515945 -1.0423971 128.0 +1.8467216 -3.5555124 -1.0510716 128.0 +1.7954435 -3.5092192 -1.0334598 128.0 +1.7717079 -3.515861 -1.0321455 128.0 +1.7389572 -3.5041916 -1.0253111 128.0 +1.7275828 -3.535604 -1.0316198 128.0 +1.7020943 -3.5383112 -1.029254 128.0 +1.6729238 -3.5329902 -1.0245225 128.0 +1.650807 -3.5423138 -1.0242596 128.0 +1.6290407 -3.5523763 -1.0242596 128.0 +1.6143507 -3.5781376 -1.0289911 128.0 +1.6005788 -3.6064978 -1.0345113 128.0 +1.5896051 -3.6418979 -1.0421343 128.0 +1.5676092 -3.6524696 -1.0423971 128.0 +1.5624105 -3.7029159 -1.0544889 128.0 +1.2630084 -3.0448244 -0.85760462 128.0 +1.2479408 -3.0614524 -0.86023325 128.0 +1.4645987 -3.6575918 -1.0329341 128.0 +1.4403641 -3.6620197 -1.0316198 128.0 +1.4202989 -3.6770897 -1.0334598 128.0 +1.4004447 -3.6929531 -1.0355628 128.0 +1.3784314 -3.7032852 -1.0360885 128.0 +1.3589901 -3.7207372 -1.038717 128.0 +1.3397114 -3.7389979 -1.0416086 128.0 +1.3295282 -3.7835624 -1.0521231 128.0 +1.3342346 -3.872844 -1.0755179 128.0 +1.314147 -3.8919284 -1.0786722 128.0 +1.2866083 -3.8889256 -1.0755179 128.0 +1.2511327 -3.8609476 -1.0652663 128.0 +1.2268358 -3.8667123 -1.0647405 128.0 +1.1945107 -3.8465219 -1.0568546 128.0 +0.99070668 -3.2601323 -0.88783383 128.0 +0.97480243 -3.2800241 -0.89177674 128.0 +0.95788461 -3.2970629 -0.89493114 128.0 +0.93737304 -3.30195 -0.89466828 128.0 +0.91838235 -3.3122888 -0.89598256 128.0 +0.87336826 -3.2265837 -0.87022203 128.0 +0.81024992 -3.0676856 -0.82395816 128.0 +0.79165202 -3.0735338 -0.82422101 128.0 +0.94706994 -3.7736943 -1.0195282 128.0 +0.92984676 -3.8038042 -1.0263625 128.0 +0.91808951 -3.8582499 -1.0400314 128.0 +0.91417384 -3.9493544 -1.063952 128.0 +0.86898136 -3.8616948 -1.0379285 128.0 +0.85308897 -3.9027743 -1.0479172 128.0 +0.83632493 -3.9419153 -1.0573803 128.0 +0.8165881 -3.9687097 -1.0634261 128.0 +0.78562814 -3.9405262 -1.054226 128.0 +0.76216495 -3.9490621 -1.0552775 128.0 +0.72961247 -3.9090846 -1.0429229 128.0 +0.69911796 -3.877404 -1.0329341 128.0 +0.67646915 -3.8882749 -1.0347742 128.0 +0.67330205 -4.0160604 -1.0689464 128.0 +0.63483977 -3.9343858 -1.0452887 128.0 +0.61393338 -3.9591837 -1.0510716 128.0 +0.59841514 -4.022047 -1.0673691 128.0 +0.5745402 -4.0313745 -1.0689464 128.0 +0.53848386 -3.9516487 -1.0460773 128.0 +0.52490169 -4.0371647 -1.0686834 128.0 +0.50059319 -4.0441394 -1.0697349 128.0 +0.46902695 -3.989639 -1.0539631 128.0 +0.44496414 -3.9962776 -1.0550146 128.0 +0.41872475 -3.9826198 -1.0505459 128.0 +0.39551127 -3.9975963 -1.0539631 128.0 +0.36937621 -3.9826546 -1.0492316 128.0 +0.34227851 -3.9540856 -1.04082 128.0 +0.31893456 -3.9676526 -1.0439743 128.0 +0.29266316 -3.9435551 -1.036877 128.0 +0.26885176 -3.9510524 -1.0384542 128.0 +0.24685733 -3.989222 -1.048443 128.0 +0.22381711 -4.0166721 -1.0555403 128.0 +0.19869216 -4.0083332 -1.0529116 128.0 +0.17480053 -4.0258636 -1.0573803 128.0 +0.14913219 -4.0008278 -1.0502831 128.0 +0.12434281 -3.9939525 -1.0481801 128.0 +0.10007229 -4.0042858 -1.0508088 128.0 +0.075178258 -3.9874604 -1.0460773 128.0 +0.050638318 -3.982058 -1.0445001 128.0 +0.026185716 -3.9793994 -1.0437114 128.0 +0.001770002 -3.992028 -1.0471287 128.0 +-0.022724655 -3.9919636 -1.0471287 128.0 +-0.048317567 -4.0824366 -1.0718378 128.0 +-0.071886599 -4.0010309 -1.0497574 128.0 +-0.096058615 -3.9850819 -1.0455515 128.0 +-0.12121558 -4.0075626 -1.0518602 128.0 +-0.14654592 -4.0269914 -1.0573803 128.0 +-0.17211922 -4.0462594 -1.0629004 128.0 +-0.19708495 -4.048018 -1.063689 128.0 +-0.22160076 -4.0409522 -1.0621119 128.0 +-0.24816193 -4.0684071 -1.0699978 128.0 +-0.27071831 -4.0311899 -1.0602719 128.0 +-0.29431483 -4.0140576 -1.056066 128.0 +-0.31901583 -4.0131378 -1.0563289 128.0 +-0.34603032 -4.0389819 -1.063952 128.0 +-0.37231156 -4.0531158 -1.0684205 128.0 +-0.3984015 -4.0632377 -1.0718378 128.0 +-0.42563277 -4.0827875 -1.0778836 128.0 +-0.45099488 -4.0829759 -1.0786722 128.0 +-0.47514239 -4.0724654 -1.0765693 128.0 +-0.49611101 -4.0369153 -1.067632 128.0 +-0.5152992 -3.9907367 -1.0558032 128.0 +-0.53899801 -3.9817634 -1.054226 128.0 +-0.87427199 -6.1687965 -1.6569704 128.0 +-0.58258706 -3.9395359 -1.0445001 128.0 +-0.95241052 -6.1738133 -1.6614391 128.0 +-0.98659939 -6.1449904 -1.6551304 128.0 +-1.0263524 -6.1511927 -1.6585476 128.0 +-1.0653945 -6.1523843 -1.6606505 128.0 +-1.1026129 -6.1428828 -1.6598619 128.0 +-1.1390489 -6.1293616 -1.6580219 128.0 +-1.1777302 -6.1279421 -1.6595991 128.0 +-1.2119228 -6.1035662 -1.6548675 128.0 +-1.248963 -6.0941248 -1.6543418 128.0 +-1.2915241 -6.110889 -1.6611762 128.0 +-1.3285846 -6.1009641 -1.6606505 128.0 +-1.3672619 -6.0983458 -1.6622277 128.0 +-1.4013995 -6.0757399 -1.6582848 128.0 +-1.4370936 -6.0604553 -1.6564447 128.0 +-1.4765383 -6.0608974 -1.6590734 128.0 +-1.5148709 -6.0564032 -1.6603876 128.0 +-1.5546441 -6.0572734 -1.6632792 128.0 +-1.5925189 -6.0504193 -1.6640677 128.0 +-1.6278533 -6.0340137 -1.6622277 128.0 +-1.6653609 -6.0257716 -1.6627535 128.0 +-1.7015144 -6.0126548 -1.6619649 128.0 +-1.7386439 -6.0030279 -1.6622277 128.0 +-1.7740737 -5.9876218 -1.6609133 128.0 +-1.8146988 -5.9895501 -1.6645935 128.0 +-1.8497022 -5.9727731 -1.6630163 128.0 +-1.8886456 -5.9686694 -1.6651192 128.0 +-1.9246393 -5.9551325 -1.6645935 128.0 +-1.2783766 -3.8753872 -1.0713121 128.0 +-1.3076777 -3.8839278 -1.0760436 128.0 +-2.0285945 -5.9031863 -1.6601248 128.0 +-2.067332 -5.897912 -1.6622277 128.0 +-2.1044567 -5.8878412 -1.6630163 128.0 +-2.1355872 -5.8612208 -1.6590734 128.0 +-2.1772232 -5.8633819 -1.663542 128.0 +-2.2138424 -5.851717 -1.6640677 128.0 +-2.2517889 -5.8434243 -1.6656449 128.0 +-2.2844274 -5.8214149 -1.6632792 128.0 +-2.3315639 -5.8359575 -1.6716907 128.0 +-2.3618746 -5.808136 -1.6677479 128.0 +-2.3908246 -5.7774882 -1.6630163 128.0 +-2.4340951 -5.7813821 -1.6685364 128.0 +-1.3135597 -3.0685415 -0.86890769 128.0 +-1.3331339 -3.0621929 -0.8694334 128.0 +-1.3491621 -3.0477805 -0.86759341 128.0 +-2.5716779 -5.711988 -1.6661706 128.0 +-2.606276 -5.6952238 -1.6659077 128.0 +-2.6448352 -5.6869974 -1.6682736 128.0 +-1.6058267 -3.3992922 -0.98377877 128.0 +-1.6224769 -3.3806779 -0.98115015 128.0 +-1.6393822 -3.3628547 -0.97878438 128.0 +-1.656987 -3.3466806 -0.97694433 128.0 +-1.6787915 -3.3390362 -0.9777329 128.0 +-1.7023206 -3.334687 -0.97957295 128.0 +-1.7298572 -3.3378828 -0.98377877 128.0 +-1.7655871 -3.3562334 -0.99271607 128.0 +-2.1121595 -3.9554868 -1.1811887 128.0 +-3.0203221 -5.5726357 -1.686411 128.0 +-3.0428309 -5.5328655 -1.6798395 128.0 +-3.0786037 -5.5174603 -1.6808909 128.0 +-3.1043179 -5.4841943 -1.6764222 128.0 +-3.1220508 -5.4374347 -1.6677479 128.0 +-3.1752694 -5.4523559 -1.6785252 128.0 +-3.2096462 -5.4344316 -1.6790509 128.0 +-3.2414432 -5.4121523 -1.6782624 128.0 +-3.2755923 -5.3938103 -1.6787881 128.0 +-3.3141928 -5.3826466 -1.6816795 128.0 +-3.3446023 -5.3581181 -1.6803652 128.0 +-3.3799965 -5.3415709 -1.6816795 128.0 +-3.431987 -5.3507767 -1.6914054 128.0 +-3.4773786 -5.3490295 -1.6977142 128.0 +-3.4766827 -5.2768402 -1.6811538 128.0 +-3.5143545 -5.2634315 -1.6837825 128.0 +-3.5346861 -5.2241907 -1.6779995 128.0 +-3.5928688 -5.2405963 -1.6906168 128.0 +-3.6293616 -5.2247906 -1.6927198 128.0 +-2.1505597 -3.0565662 -0.9777329 128.0 +-2.1687136 -3.0425277 -0.97747004 128.0 +-2.1862111 -3.0275993 -0.97694433 128.0 +-3.7861242 -5.174633 -1.7063886 128.0 +-3.802289 -5.1303782 -1.6992913 128.0 +-3.8203712 -5.0892062 -1.6932455 128.0 +-3.852694 -5.067205 -1.6937712 128.0 +-3.890779 -5.0526423 -1.6969256 128.0 +-3.9270494 -5.0355201 -1.6992913 128.0 +-3.9578729 -5.0113292 -1.6992913 128.0 +-3.9746838 -4.9696226 -1.6932455 128.0 +-3.9801993 -4.9144044 -1.6824682 128.0 +-4.004159 -4.8824306 -1.6798395 128.0 +-4.0297256 -4.8525748 -1.6779995 128.0 +-4.0470033 -4.8129902 -1.6727422 128.0 +-4.113369 -4.8314052 -1.6882511 128.0 +-4.1429367 -4.8060751 -1.6882511 128.0 +-4.1590223 -4.7653012 -1.682731 128.0 +-4.1664572 -4.7151141 -1.6737937 128.0 +-4.2152567 -4.7117481 -1.6819425 128.0 +-4.2447357 -4.6865101 -1.6822053 128.0 +-4.277977 -4.6653533 -1.6840453 128.0 +-4.3242497 -4.6581054 -1.6911426 128.0 +-4.3527498 -4.6314845 -1.6911426 128.0 +-4.35847 -4.5809274 -1.6822053 128.0 +-4.3777928 -4.5450659 -1.6787881 128.0 +-4.4136829 -4.5264068 -1.6819425 128.0 +-4.4610338 -4.5191483 -1.6895654 128.0 +-4.4900432 -4.4930558 -1.6900911 128.0 +-4.5058599 -4.4538922 -1.6856225 128.0 +-4.5386276 -4.4315524 -1.6877254 128.0 +-4.5622606 -4.4002724 -1.686411 128.0 +-4.5821877 -4.3655419 -1.6837825 128.0 +-4.5976439 -4.3267665 -1.6795766 128.0 +-4.6241059 -4.2984743 -1.6795766 128.0 +-4.63831 -4.2589293 -1.675108 128.0 +-4.6607809 -4.2271485 -1.6737937 128.0 +-4.6916618 -4.2029767 -1.6756337 128.0 +-4.7021861 -4.160686 -1.6701136 128.0 +-4.7210875 -4.1260424 -1.6677479 128.0 +-4.7499681 -4.1001487 -1.6690621 128.0 +-4.7713647 -4.0677967 -1.6677479 128.0 +-4.7925439 -4.0353374 -1.6664335 128.0 +-4.817956 -4.0064716 -1.6666963 128.0 +-4.8372283 -3.9725482 -1.6648563 128.0 +-4.8660092 -3.9464386 -1.6664335 128.0 +-4.9006772 -3.9249489 -1.6701136 128.0 +-4.8966637 -3.8726656 -1.6603876 128.0 +-4.9203334 -3.8425472 -1.6603876 128.0 +-4.9415259 -3.8105173 -1.6595991 128.0 +-4.9655814 -3.7807093 -1.6598619 128.0 +-5.0048842 -3.7623417 -1.665382 128.0 +-5.041048 -3.7413342 -1.6698507 128.0 +-5.0670228 -3.7126129 -1.6709021 128.0 +-5.0990901 -3.6882362 -1.6740565 128.0 +-5.1310487 -3.6636055 -1.6772109 128.0 +-5.1258254 -3.6126041 -1.6680107 128.0 +-5.1779966 -3.6020162 -1.6779995 128.0 +-5.1888638 -3.5625334 -1.6743194 128.0 +-5.2130218 -3.5322511 -1.675108 128.0 +-5.2281799 -3.495909 -1.6730051 128.0 +-5.2463107 -3.4616387 -1.6719537 128.0 +-5.2585568 -3.4235938 -1.6690621 128.0 +-5.2680979 -3.3839653 -1.665382 128.0 +-5.3238101 -3.3737783 -1.6766851 128.0 +-5.3378654 -3.3369582 -1.6745822 128.0 +-5.3598828 -3.3051555 -1.675108 128.0 +-5.399024 -3.2837336 -1.6811538 128.0 +-5.4066586 -3.2431018 -1.6772109 128.0 +-5.4156594 -3.2034822 -1.6737937 128.0 +-5.427712 -3.1658185 -1.6714278 128.0 +-5.4328146 -3.1242809 -1.6669593 128.0 +-5.4904957 -3.1127689 -1.6790509 128.0 +-5.5052805 -3.0766685 -1.6777366 128.0 +-5.5156031 -3.0381773 -1.675108 128.0 +-5.5180283 -2.9955339 -1.6701136 128.0 +-5.5507689 -2.9693537 -1.6745822 128.0 +-5.5979071 -2.9505293 -1.6835196 128.0 +-5.6287513 -2.9227929 -1.6874626 128.0 +-5.644002 -2.8868828 -1.686674 128.0 +-5.6667795 -2.8548012 -1.6882511 128.0 +-5.7179008 -2.8366935 -1.6985028 128.0 +-5.7603421 -2.813832 -1.7061257 128.0 +-5.7905431 -2.7847042 -1.7100687 128.0 +-5.8136253 -2.7520103 -1.7119088 128.0 +-5.8583908 -2.72932 -1.7203203 128.0 +-5.860116 -2.6864896 -1.7158517 128.0 +-5.8773694 -2.6508787 -1.7161145 128.0 +-5.9243941 -2.6284552 -1.7253147 128.0 +-5.9589825 -2.6001542 -1.7308348 128.0 +-5.9774847 -2.5646825 -1.7316235 128.0 +-5.9904418 -2.5268326 -1.7308348 128.0 +-6.0174208 -2.4948301 -1.7342521 128.0 +-6.0478063 -2.464047 -1.7387208 128.0 +-6.1004353 -2.4419446 -1.749761 128.0 +-6.1188955 -2.4058785 -1.7508124 128.0 +-6.1569462 -2.3773203 -1.7576469 128.0 +-6.1795373 -2.3425736 -1.7600126 128.0 +-6.2308722 -2.3184011 -1.7707901 128.0 +-6.239542 -2.2781413 -1.7692128 128.0 +-6.2452273 -2.2368865 -1.7668471 128.0 +-6.2843256 -2.2074733 -1.7742072 128.0 +-6.3086996 -2.1726398 -1.7773616 128.0 +-6.1792941 -2.0857782 -1.7363551 128.0 +-6.2167106 -2.0559988 -1.7434523 128.0 +-6.2677622 -2.0302961 -1.7544925 128.0 +-6.3352857 -2.0092912 -1.7702643 128.0 +-6.4092364 -1.9895345 -1.7878761 128.0 +-6.492413 -1.9717474 -1.8081166 128.0 +-6.566361 -1.9502683 -1.8257284 128.0 +-6.712563 -1.9489268 -1.8638434 128.0 +-6.8636317 -1.947179 -1.9032729 128.0 +-6.9702945 -1.9312903 -1.9300849 128.0 +-7.0490746 -1.9066122 -1.9490111 128.0 +-7.0681043 -1.8652923 -1.9511139 128.0 +-7.1167932 -1.8315008 -1.9616284 128.0 +-7.1400638 -1.790848 -1.9650457 128.0 +-7.1499805 -1.7467748 -1.9647828 128.0 +-7.1849699 -1.7086705 -1.9716172 128.0 +-7.1887383 -1.663031 -1.9697772 128.0 +-7.2025728 -1.6197366 -1.9708287 128.0 +-7.198236 -1.5724255 -1.9668857 128.0 +-7.2068048 -1.5280284 -1.9666228 128.0 +-7.21699 -1.4839736 -1.9668857 128.0 +-7.244885 -1.4434305 -1.9721429 128.0 +-7.2194991 -1.3923774 -1.9626799 128.0 +-7.236443 -1.3496438 -1.9650457 128.0 +-7.2616806 -1.3082931 -1.9697772 128.0 +-7.239152 -1.2584286 -1.9613656 128.0 +-7.2629142 -1.2166938 -1.9658343 128.0 +-7.2502394 -1.1688846 -1.9603142 128.0 +-7.2572751 -1.1243761 -1.9603142 128.0 +-7.2793074 -1.0820925 -1.96452 128.0 +-7.2676606 -1.0348258 -1.9595256 128.0 +-7.2633572 -0.98878288 -1.956634 128.0 +-7.2616329 -0.94320416 -1.9545312 128.0 +-7.2845197 -0.90075839 -1.9592627 128.0 +-7.3033252 -0.85761774 -1.9629427 128.0 +-7.3046145 -0.81236321 -1.9618913 128.0 +-7.3046637 -0.76702464 -1.960577 128.0 +-7.314033 -0.72266322 -1.9618913 128.0 +-7.3068008 -0.67670566 -1.958737 128.0 +-7.2896676 -0.63003486 -1.9529539 128.0 +-7.3097463 -0.58660388 -1.9574226 128.0 +-7.3093591 -0.54145658 -1.9563712 128.0 +-7.3183193 -0.49698833 -1.9579483 128.0 +-7.3270092 -0.45243046 -1.9595256 128.0 +-7.3383174 -0.40794489 -1.9618913 128.0 +-7.3493557 -0.36333752 -1.9642571 128.0 +-7.334096 -0.31748754 -1.9595256 128.0 +-7.3503685 -0.27301529 -1.9634686 128.0 +-7.3085084 -0.2265707 -1.9516397 128.0 +-7.3174772 -0.18191287 -1.9537426 128.0 +-7.3117032 -0.1368849 -1.9519025 128.0 +-7.3345947 -0.092294268 -1.9579483 128.0 +-7.3330932 -0.047276165 -1.9574226 128.0 +-7.3023705 -0.0022755454 -1.9490111 128.0 +-7.3543472 0.042842731 -1.9632056 128.0 +-7.3394747 0.087791964 -1.9592627 128.0 +-7.2915287 0.13196148 -1.9463824 128.0 +-7.3281989 0.17761669 -1.956634 128.0 +-7.3192563 0.22234273 -1.9545312 128.0 +-7.307148 0.26685965 -1.9516397 128.0 +-7.3169403 0.31218579 -1.954794 128.0 +-7.3187418 0.35726461 -1.9558455 128.0 +-7.2855844 0.40046543 -1.9474338 128.0 +-7.2695074 0.44433513 -1.9437538 128.0 +-7.3041873 0.49146372 -1.9540055 128.0 +-7.0090799 -0.17823984 -1.9578735 128.0 +-7.0100417 -0.13522957 -1.9578735 128.0 +-7.021317 -0.092353962 -1.9608889 128.0 +-7.005403 -0.04915458 -1.9562287 128.0 +-7.0199986 -0.006182842 -1.9603406 128.0 +-7.0141339 0.036861181 -1.9586959 128.0 +-7.0214691 0.079985604 -1.9608889 128.0 +-7.0006533 0.12271423 -1.9551322 128.0 +-6.9988074 0.16564442 -1.9548581 128.0 +-7.0043879 0.20878536 -1.956777 128.0 +-6.9952865 0.25148359 -1.954584 128.0 +-6.9849639 0.29403758 -1.9521168 128.0 +-6.9945555 0.33744642 -1.9554063 128.0 +-6.9894724 0.38020134 -1.954584 128.0 +-6.9850879 0.42296463 -1.9540358 128.0 +-6.9574127 0.46415338 -1.9469084 128.0 +-6.9755349 0.50837117 -1.9529392 128.0 +-6.9646149 0.55055684 -1.9507462 128.0 +-6.9764371 0.59458631 -1.9551322 128.0 +-6.9736152 0.63746923 -1.9554063 128.0 +-6.9705296 0.68033987 -1.9556805 128.0 +-6.903091 0.71654791 -1.9375881 128.0 +-6.9339337 0.76277977 -1.9477308 128.0 +-6.9329443 0.80575514 -1.9488273 128.0 +-6.9125962 0.84641045 -1.9444413 128.0 +-6.922534 0.89077234 -1.9488273 128.0 +-6.917891 0.93335998 -1.9491014 128.0 +-6.8996549 0.97404289 -1.9455378 128.0 +-6.8973536 1.0169209 -1.9466343 128.0 +-6.8871822 1.0586389 -1.9455378 128.0 +-6.8805566 1.100878 -1.9455378 128.0 +-6.8679805 1.1421293 -1.943893 128.0 +-6.8655815 1.1850666 -1.9452636 128.0 +-6.8619676 1.2278479 -1.9463601 128.0 +-6.864706 1.2718557 -1.9493755 128.0 +-6.8416605 1.3110577 -1.9449896 128.0 +-6.8127327 1.3489046 -1.9389588 128.0 +-6.8071547 1.3912588 -1.9397811 128.0 +-6.8041358 1.4341904 -1.9414259 128.0 +-6.7801709 1.4726478 -1.9370399 128.0 +-6.7775769 1.5156912 -1.9389588 128.0 +-6.7606516 1.5555243 -1.9367657 128.0 +-6.7463007 1.5958711 -1.9353951 128.0 +-6.7373161 1.6374626 -1.9356692 128.0 +-6.7103462 1.6745808 -1.9307349 128.0 +-6.7101932 1.718347 -1.9337503 128.0 +-6.6930118 1.7577779 -1.9318314 128.0 +-6.680243 1.7983125 -1.9312831 128.0 +-6.6700101 1.8395234 -1.9315573 128.0 +-6.6604486 1.8809379 -1.9321055 128.0 +-6.6663361 1.9268429 -1.9373139 128.0 +-6.6211872 1.9578952 -1.9274454 128.0 +-6.6044464 1.9970937 -1.9260747 128.0 +-6.6150384 2.0446787 -1.932928 128.0 +-6.5941143 2.0826232 -1.9304608 128.0 +-6.5821271 2.1233399 -1.9307349 128.0 +-6.5680609 2.1633863 -1.9304608 128.0 +-6.5391665 2.1984375 -1.9258006 128.0 +-6.5601215 2.2503755 -1.9362174 128.0 +-6.5371127 2.2874095 -1.9334762 128.0 +-6.5003099 2.3193991 -1.926623 128.0 +-6.493186 2.3618701 -1.928816 128.0 +-6.4722595 2.3993275 -1.9268972 128.0 +-6.4682117 2.4430726 -1.9301866 128.0 +-6.4405336 2.477881 -1.9263489 128.0 +-6.4234176 2.5166512 -1.9258006 128.0 +-6.4096413 2.5567296 -1.9263489 128.0 +-6.386704 2.5931165 -1.9241558 128.0 +-6.3840051 2.6377635 -1.9282677 128.0 +-6.3721328 2.6787486 -1.9296384 128.0 +-6.3555765 2.7177968 -1.9296384 128.0 +-6.3273158 2.7517574 -1.9260747 128.0 +-6.3015165 2.7866404 -1.9233335 128.0 +-6.2930708 2.8291962 -1.9260747 128.0 +-6.2790918 2.869355 -1.9271712 128.0 +-6.2596231 2.9070189 -1.926623 128.0 +-6.2407985 2.944962 -1.9263489 128.0 +-6.2156734 2.9798739 -1.9241558 128.0 +-6.1981368 3.0183775 -1.92443 128.0 +-6.1657071 3.049531 -1.9200439 128.0 +-6.1657863 3.0968003 -1.9260747 128.0 +-6.1483822 3.1354482 -1.926623 128.0 +-6.1213412 3.1691363 -1.9241558 128.0 +-6.1009293 3.2061889 -1.9238818 128.0 +-6.0735044 3.2394903 -1.9214146 128.0 +-6.0501299 3.2748647 -1.9203181 128.0 +-6.0307646 3.3123889 -1.9205922 128.0 +-6.0086465 3.3483944 -1.9200439 128.0 +-5.9712443 3.3757353 -1.9145614 128.0 +-5.9495845 3.4118321 -1.9142873 128.0 +-5.9318628 3.4502077 -1.9153838 128.0 +-5.9246631 3.4948456 -1.9200439 128.0 +-5.8948545 3.5261965 -1.9173027 128.0 +-5.8722849 3.5618017 -1.9170285 128.0 +-5.8593307 3.6033072 -1.9200439 128.0 +-5.8411918 3.6417353 -1.9214146 128.0 +-5.8138585 3.6744251 -1.9197699 128.0 +-5.7968717 3.7136602 -1.9216887 128.0 +-5.7505846 3.7339725 -1.9137391 128.0 +-5.7436328 3.7797594 -1.9192215 128.0 +-5.7419357 3.8293362 -1.926623 128.0 +-5.7087693 3.8580346 -1.9233335 128.0 +-5.6714997 3.883754 -1.9186733 128.0 +-5.6538839 3.9228659 -1.9208664 128.0 +-5.634428 3.9608018 -1.9225111 128.0 +-5.6108022 3.9958572 -1.9227853 128.0 +-5.5799389 4.0257082 -1.9205922 128.0 +-5.5559092 4.0604377 -1.9208664 128.0 +-5.5270252 4.0915909 -1.9194957 128.0 +-5.4971991 4.1219659 -1.917851 128.0 +-5.4564857 4.1439862 -1.9123684 128.0 +-5.429431 4.1762161 -1.9118202 128.0 +-5.3976345 4.2047243 -1.9096271 128.0 +-5.3694682 4.2359776 -1.9088048 128.0 +-5.3441267 4.2694445 -1.9090788 128.0 +-5.3275495 4.3100176 -1.9126425 128.0 +-5.3069553 4.3475008 -1.9148356 128.0 +-5.2772188 4.3775263 -1.9137391 128.0 +-5.2561507 4.414772 -1.9159321 128.0 +-5.2311611 4.4488091 -1.9167545 128.0 +-5.1964774 4.4745483 -1.9140131 128.0 +-5.1602254 4.4987659 -1.9107237 128.0 +-5.1267557 4.5252528 -1.9085306 128.0 +-5.1017613 4.5591879 -1.9096271 128.0 +-5.0694118 4.586535 -1.9079823 128.0 +-5.0340819 4.6110587 -1.9052411 128.0 +-5.0078096 4.6438222 -1.9060634 128.0 +-4.9715085 4.667222 -1.903048 128.0 +-4.9448686 4.699626 -1.9038705 128.0 +-4.9020786 4.7165442 -1.8983879 128.0 +-4.884069 4.7572694 -1.902774 128.0 +-4.8513632 4.783772 -1.9014033 128.0 +-4.8205576 4.8120909 -1.9008551 128.0 +-4.799058 4.849781 -1.9041445 128.0 +-4.7725716 4.8825746 -1.9055152 128.0 +-4.7391825 4.9083076 -1.9041445 128.0 +-4.7036662 4.9317274 -1.9019516 128.0 +-4.6654034 4.9520965 -1.8986621 128.0 +-4.6421371 4.9883733 -1.9016775 128.0 +-4.6166487 5.0224266 -1.9038705 128.0 +-4.5825119 5.0470996 -1.9024998 128.0 +-4.5508151 5.0744066 -1.9022257 128.0 +-4.5170426 5.0993547 -1.9011291 128.0 +-4.4837689 5.1248035 -1.9003068 128.0 +-4.4503527 5.1500363 -1.8994844 128.0 +-4.4167957 5.1750517 -1.8986621 128.0 +-4.3911576 5.2094083 -1.9014033 128.0 +-4.3449578 5.219255 -1.8950984 128.0 +-4.3061328 5.2376461 -1.892083 128.0 +-4.2630019 5.2505312 -1.8871487 128.0 +-4.2908678 5.3516164 -1.9145614 128.0 +-4.2573533 5.37709 -1.9142873 128.0 +-4.203547 5.3765955 -1.9046929 128.0 +-4.1769423 5.4106603 -1.9077083 128.0 +-4.1576571 5.4545426 -1.9142873 128.0 +-4.1015558 5.4499846 -1.9035963 128.0 +-4.055419 5.4580669 -1.8975655 128.0 +-4.0252657 5.4875002 -1.8992103 128.0 +-3.9920831 5.5128741 -1.8994844 128.0 +-3.9609783 5.5411773 -1.9008551 128.0 +-3.9285669 5.5677342 -1.9016775 128.0 +-3.9031246 5.6043606 -1.9060634 128.0 +-3.886642 5.6543565 -1.9151096 128.0 +-3.862133 5.6932187 -1.9203181 128.0 +-3.8121464 5.6944337 -1.9126425 128.0 +-3.7739534 5.7129035 -1.9109977 128.0 +-3.7456563 5.7464252 -1.9145614 128.0 +-3.709806 5.7684913 -1.9142873 128.0 +-3.6846466 5.8073859 -1.9197699 128.0 +-3.6555774 5.8404822 -1.9233335 128.0 +-3.6338193 5.8857136 -1.9310091 128.0 +-3.5821297 5.8824377 -1.9225111 128.0 +-3.5479491 5.9076042 -1.9236076 128.0 +-3.5033021 5.9151964 -1.9189475 128.0 +-3.4679112 5.938242 -1.9194957 128.0 +-3.4275701 5.9527416 -1.9173027 128.0 +-3.3957283 5.9820237 -1.9200439 128.0 +-3.3505054 5.9876413 -1.9151096 128.0 +-3.3197415 6.0190339 -1.9186733 128.0 +-3.2933114 6.058723 -1.9249783 128.0 +-3.2569821 6.0805116 -1.9255265 128.0 +-3.2200603 6.1012321 -1.9258006 128.0 +-3.1870003 6.1294074 -1.9285419 128.0 +-3.1423156 6.1351523 -1.9241558 128.0 +-3.1093769 6.1637626 -1.9271712 128.0 +-3.0821962 6.2042561 -1.9340245 128.0 +-3.0347719 6.2040467 -1.9279937 128.0 +-3.0100017 6.2502766 -1.9367657 128.0 +-2.9695339 6.2642832 -1.9353951 128.0 +-2.9310412 6.2823858 -1.9353951 128.0 +-2.8924379 6.3002524 -1.9353951 128.0 +-2.8481829 6.3056116 -1.9315573 128.0 +-2.8141253 6.3335147 -1.9348468 128.0 +-2.7759809 6.3524251 -1.9353951 128.0 +-2.7335334 6.3613868 -1.932928 128.0 +-2.7000637 6.3913274 -1.9370399 128.0 +-2.6593208 6.404222 -1.9359434 128.0 +-2.6228826 6.4275417 -1.9381363 128.0 +-2.5780256 6.4301252 -1.9340245 128.0 +-2.5490959 6.4726663 -1.9422482 128.0 +-2.4996178 6.4630713 -1.9345727 128.0 +-2.4681087 6.4998641 -1.9411517 128.0 +-2.4295235 6.5184903 -1.9422482 128.0 +-2.3855164 6.5224371 -1.9389588 128.0 +-2.3564949 6.5677271 -1.948279 128.0 +-2.3040195 6.5475912 -1.9378622 128.0 +-2.2622323 6.5570598 -1.9364916 128.0 +-2.223805 6.576283 -1.9381363 128.0 +-2.1949077 6.6244931 -1.9485532 128.0 +-2.1527345 6.6332626 -1.9471825 128.0 +-2.1233537 6.6820908 -1.9578735 128.0 +-2.0723147 6.6628537 -1.948279 128.0 +-2.0277529 6.6634836 -1.9447154 128.0 +-1.9851822 6.67027 -1.9430707 128.0 +-1.9423357 6.6758614 -1.9411517 128.0 +-1.9047564 6.6996789 -1.9447154 128.0 +-1.8625827 6.7075338 -1.9436189 128.0 +-1.8178675 6.7058415 -1.9397811 128.0 +-1.7813606 6.7345338 -1.9449896 128.0 +-1.736641 6.7323008 -1.9411517 128.0 +-1.6948305 6.7409644 -1.9406035 128.0 +-1.6534369 6.7512369 -1.9406035 128.0 +-1.6115348 6.7593842 -1.9400553 128.0 +-1.5689429 6.764461 -1.9386846 128.0 +-1.5231757 6.755198 -1.933202 128.0 +-1.4810804 6.7615986 -1.9323797 128.0 +-1.4459661 6.8006601 -1.9411517 128.0 +-1.4032394 6.8046951 -1.9397811 128.0 +-1.3631567 6.8216643 -1.9422482 128.0 +-1.325111 6.8497276 -1.948005 128.0 +-1.2821723 6.853003 -1.9466343 128.0 +-1.2378745 6.8484387 -1.9430707 128.0 +-1.1954994 6.8540106 -1.9425224 128.0 +-1.1566112 6.8801847 -1.948005 128.0 +-1.114527 6.8881011 -1.948279 128.0 +-1.075346 6.9147658 -1.9540358 128.0 +-1.0358796 6.9412079 -1.9597924 128.0 +-0.98877627 6.9160171 -1.9507462 128.0 +-0.94371539 6.9028974 -1.9452636 128.0 +-0.9055742 6.9409804 -1.954584 128.0 +-0.86261225 6.9435434 -1.9537616 128.0 +-0.81965297 6.9458404 -1.9529392 128.0 +-0.77659106 6.9469161 -1.9518427 128.0 +-0.73415303 6.9534631 -1.9523909 128.0 +-0.689951 6.9425254 -1.948005 128.0 +-0.64671451 6.9399252 -1.946086 128.0 +-0.60395294 6.9418468 -1.9455378 128.0 +-0.56157976 6.9482975 -1.9463601 128.0 +-0.52051145 6.9727111 -1.9523909 128.0 +-0.47725758 6.9690576 -1.9504721 128.0 +-0.43430766 6.9689751 -1.9496497 128.0 +-0.3917006 6.9743891 -1.9504721 128.0 +-0.34803358 6.9593725 -1.9455378 128.0 +-0.3063378 6.9844356 -1.9521168 128.0 +-0.26318595 6.9784956 -1.9499238 128.0 +-0.22072656 6.9915137 -1.9532133 128.0 +-0.17772527 6.9888906 -1.9521168 128.0 +-0.13491331 6.9936957 -1.9532133 128.0 +-0.091731489 6.9741983 -1.9474567 128.0 +-0.048896067 6.9688597 -1.9458119 128.0 +-0.00613232 6.9661436 -1.9449896 128.0 +0.036656238 6.9747052 -1.9474567 128.0 +0.079440631 6.9733872 -1.9471825 128.0 +0.12232783 6.978538 -1.9488273 128.0 +0.16507694 6.9747715 -1.948005 128.0 +0.20801322 6.9784336 -1.9493755 128.0 +0.25082818 6.977026 -1.9493755 128.0 +0.29403758 6.9849639 -1.9521168 128.0 +0.33693728 6.9839892 -1.9523909 128.0 +0.38009697 6.9875517 -1.9540358 128.0 +0.42162898 6.9630094 -1.9477308 128.0 +0.46319398 6.9430194 -1.9427965 128.0 +0.50711393 6.9582701 -1.948005 128.0 +0.54926938 6.9483166 -1.946086 128.0 +0.59197474 6.9457741 -1.9463601 128.0 +0.63204485 6.9142375 -1.9384105 128.0 +0.67520487 6.9178863 -1.9406035 128.0 +0.71883029 6.9250917 -1.943893 128.0 +0.76193899 6.9262862 -1.9455378 128.0 +0.8047564 6.9243464 -1.9463601 128.0 +0.84746194 6.9211874 -1.9469084 128.0 +0.88745993 6.8967805 -1.9414259 128.0 +0.92500544 6.8559418 -1.9312831 128.0 +0.96813029 6.8577552 -1.9334762 128.0 +1.0117328 6.8621516 -1.9364916 128.0 +1.0538192 6.8558145 -1.9364916 128.0 +1.0961696 6.8511186 -1.9370399 128.0 +1.1394483 6.8518529 -1.9392328 128.0 +1.1817961 6.8466277 -1.9397811 128.0 +1.2256466 6.8496609 -1.9427965 128.0 +1.26485 6.8268819 -1.9384105 128.0 +1.3054485 6.8123808 -1.9364916 128.0 +1.346477 6.8004689 -1.9353951 128.0 +1.3877935 6.7901945 -1.9348468 128.0 +1.431216 6.7900205 -1.9373139 128.0 +1.4704031 6.7698336 -1.9340245 128.0 +1.5152715 6.7757001 -1.9384105 128.0 +1.5555243 6.7606516 -1.9367657 128.0 +1.5969777 6.7509799 -1.9367657 128.0 +1.6429123 6.7597442 -1.9422482 128.0 +1.6878502 6.7635326 -1.9463601 128.0 +1.7243098 6.7334843 -1.9406035 128.0 +1.7655933 6.7227774 -1.9406035 128.0 +1.8070601 6.7127457 -1.9408776 128.0 +1.8443804 6.6876249 -1.9367657 128.0 +1.8895611 6.6909904 -1.9411517 128.0 +1.9273769 6.6681838 -1.9378622 128.0 +1.9679831 6.6553097 -1.9375881 128.0 +2.0065558 6.6357446 -1.9353951 128.0 +2.044111 6.6132007 -1.9323797 128.0 +2.088994 6.6142898 -1.9364916 128.0 +2.1271775 6.5940251 -1.9342985 128.0 +2.1724107 6.5954642 -1.9386846 128.0 +2.213758 6.5847449 -1.939507 128.0 +2.2485037 6.5546637 -1.9345727 128.0 +2.2880447 6.538928 -1.9340245 128.0 +2.3268313 6.5211425 -1.932928 128.0 +2.3654857 6.5031276 -1.9318314 128.0 +2.4030039 6.4821787 -1.9299126 128.0 +2.4444315 6.4718103 -1.9312831 128.0 +2.4865127 6.4629731 -1.933202 128.0 +2.5264726 6.4484897 -1.9334762 128.0 +2.5674171 6.4364395 -1.9345727 128.0 +2.6046917 6.4152184 -1.932928 128.0 +2.6418025 6.3937826 -1.9312831 128.0 +2.6746497 6.3623805 -1.926623 128.0 +2.7136381 6.3458495 -1.926623 128.0 +2.7525244 6.3290796 -1.926623 128.0 +2.7913072 6.3120713 -1.926623 128.0 +2.8252532 6.2842994 -1.9233335 128.0 +2.8609622 6.2607226 -1.9214146 128.0 +2.9066138 6.2587509 -1.9263489 128.0 +2.9457827 6.242538 -1.9268972 128.0 +2.9794581 6.2148061 -1.9238818 128.0 +3.0179565 6.1972718 -1.9241558 128.0 +3.0537939 6.1743274 -1.9227853 128.0 +3.0808318 6.1339879 -1.9159321 128.0 +3.1210322 6.1201096 -1.9175768 128.0 +3.1510103 6.0863252 -1.9129167 128.0 +3.1963477 6.0822001 -1.917851 128.0 +3.2331548 6.0616245 -1.9175768 128.0 +3.2611325 6.0247569 -1.9120942 128.0 +3.3022046 6.0122199 -1.9145614 128.0 +3.3437135 6.0002456 -1.9173027 128.0 +3.3695831 5.9603605 -1.9109977 128.0 +3.4065702 5.9404073 -1.9112719 128.0 +3.4482739 5.9285378 -1.9142873 128.0 +3.4855628 5.9089246 -1.9148356 128.0 +3.5252092 5.8932037 -1.9167545 128.0 +3.5667884 5.8805075 -1.9197699 128.0 +3.5851731 5.8298392 -1.9101753 128.0 +3.600527 5.7750869 -1.8992103 128.0 +3.6287022 5.7415042 -1.8953725 128.0 +3.6809807 5.7458539 -1.9044187 128.0 +3.7151201 5.7215466 -1.9038705 128.0 +3.741699 5.6857896 -1.8994844 128.0 +3.7887871 5.6811266 -1.9057894 128.0 +3.8434968 5.6872549 -1.9159321 128.0 +3.8201859 5.5786586 -1.8866005 128.0 +3.8521514 5.5519528 -1.8855039 128.0 +3.9010763 5.5494552 -1.8929054 128.0 +3.9333801 5.5230637 -1.892083 128.0 +3.9913881 5.5323625 -1.9038705 128.0 +3.9997258 5.4728265 -1.8915347 128.0 +4.0349474 5.4505005 -1.8923571 128.0 +4.0469704 5.3971701 -1.8822144 128.0 +4.0794291 5.3714709 -1.8819402 128.0 +4.1205192 5.3570113 -1.8857781 128.0 +4.1846318 5.3718386 -1.9003068 128.0 +4.1907125 5.3120832 -1.887971 128.0 +4.2016196 5.2592196 -1.8781025 128.0 +4.2428827 5.2445555 -1.8822144 128.0 +4.2652326 5.2065191 -1.8778284 128.0 +4.3099918 5.1957946 -1.8835851 128.0 +4.3541613 5.18398 -1.8890676 128.0 +4.4095612 5.1850057 -1.8994844 128.0 +4.4199586 5.1330729 -1.8901641 128.0 +4.4494758 5.1036811 -1.8893417 128.0 +4.487071 5.0834937 -1.892083 128.0 +4.5098481 5.0465431 -1.8885193 128.0 +4.5568576 5.0366058 -1.8953725 128.0 +4.5753345 4.9950757 -1.8901641 128.0 +4.6065516 4.9676132 -1.8904382 128.0 +4.6349711 4.937151 -1.8896159 128.0 +4.6896892 4.934412 -1.8997586 128.0 +4.7138772 4.8993063 -1.8972914 128.0 +4.7431788 4.8696012 -1.8970172 128.0 +4.7709436 4.8383517 -1.8961949 128.0 +4.7923884 4.8008184 -1.8929054 128.0 +4.8190217 4.7686167 -1.8918089 128.0 +4.8626318 4.7530756 -1.8975655 128.0 +4.8923965 4.7238178 -1.8978397 128.0 +4.9025002 4.6757874 -1.8904382 128.0 +4.9289985 4.64364 -1.8896159 128.0 +4.9595103 4.6152744 -1.8904382 128.0 +4.9856119 4.5828037 -1.8896159 128.0 +5.0207572 4.5585914 -1.8923571 128.0 +5.0550766 4.5334778 -1.8948243 128.0 +5.1087127 4.5253329 -1.9046929 128.0 +5.1219087 4.4812355 -1.8992103 128.0 +5.150764 4.4509816 -1.8997586 128.0 +5.180172 4.4211664 -1.9005809 128.0 +5.1910262 4.3756614 -1.8945501 128.0 +5.2236896 4.34865 -1.8967432 128.0 +5.2473025 4.3140731 -1.8956467 128.0 +5.2684488 4.2775512 -1.8937278 128.0 +5.3013482 4.2505589 -1.8961949 128.0 +5.3303452 4.2203383 -1.8972914 128.0 +5.3667469 4.1958461 -1.9011291 128.0 +5.3908687 4.1616616 -1.9005809 128.0 +5.4201264 4.1314211 -1.9019516 128.0 +5.4476795 4.0998206 -1.902774 128.0 +5.4704175 4.0645967 -1.9019516 128.0 +5.4859495 4.024128 -1.8986621 128.0 +5.5097589 3.9898269 -1.8983879 128.0 +5.5317893 3.9542665 -1.8975655 128.0 +5.5575194 3.9213586 -1.8981137 128.0 +5.5783195 3.8849859 -1.8970172 128.0 +5.5925422 3.8441472 -1.8937278 128.0 +5.6398988 3.8259575 -1.9019516 128.0 +5.6440897 3.7784388 -1.8953725 128.0 +5.6679697 3.7442665 -1.8956467 128.0 +5.7045331 3.7183461 -1.9003068 128.0 +5.7361379 3.6889966 -1.9033222 128.0 +5.7570415 3.6527002 -1.902774 128.0 +5.783421 3.6198583 -1.9041445 128.0 +5.7940679 3.57723 -1.9003068 128.0 +5.8150868 3.5411108 -1.9000326 128.0 +5.830934 3.5018971 -1.8981137 128.0 +5.8605862 3.4709544 -1.9008551 128.0 +5.8875861 3.4383245 -1.902774 128.0 +5.9110723 3.403574 -1.9035963 128.0 +5.9318452 3.3672402 -1.9035963 128.0 +5.9523945 3.3307796 -1.9035963 128.0 +5.9744039 3.2951226 -1.9041445 128.0 +5.9784565 3.2496753 -1.8989362 128.0 +6.0067606 3.2174723 -1.9016775 128.0 +6.0365953 3.1859419 -1.904967 128.0 +6.0654159 3.1537228 -1.9079823 128.0 +6.0743814 3.1111853 -1.9046929 128.0 +6.0847712 3.0695231 -1.9019516 128.0 +6.1112418 3.0359812 -1.9044187 128.0 +6.130619 2.9988487 -1.9046929 128.0 +6.1463051 2.9599235 -1.9038705 128.0 +6.1686959 2.9242148 -1.9052411 128.0 +6.183908 2.8850894 -1.9044187 128.0 +6.2172256 2.8543148 -1.909353 128.0 +6.197813 2.7994838 -1.8978397 128.0 +6.2491479 2.7766333 -1.9085306 128.0 +6.2678294 2.7390072 -1.9090788 128.0 +6.276566 2.6970794 -1.9066117 128.0 +6.2965403 2.6600134 -1.9077083 128.0 +6.3207364 2.6246483 -1.9101753 128.0 +6.3287086 2.582545 -1.9077083 128.0 +6.3435431 2.5433064 -1.9074341 128.0 +6.362608 2.5057449 -1.9085306 128.0 +6.369791 2.4635348 -1.9060634 128.0 +6.3928785 2.4274771 -1.9085306 128.0 +6.4193673 2.3925724 -1.9120942 128.0 +6.4303145 2.3518174 -1.9109977 128.0 +6.4382877 2.3100436 -1.9090788 128.0 +6.4505262 2.2698569 -1.9085306 128.0 +6.4616051 2.2292936 -1.9077083 128.0 +6.4660521 2.1865227 -1.904967 128.0 +6.4884753 2.1498318 -1.9077083 128.0 +6.4997149 2.109385 -1.9071599 128.0 +6.5143685 2.0700464 -1.9077083 128.0 +6.5379672 2.033464 -1.9109977 128.0 +6.5356007 1.988829 -1.9066117 128.0 +6.5587416 1.9519825 -1.9099013 128.0 +6.5825992 1.9151953 -1.9134649 128.0 +6.5979266 1.8758215 -1.9145614 128.0 +6.6139455 1.8365889 -1.9159321 128.0 +6.6297312 1.7972302 -1.9173027 128.0 +6.6350555 1.7550412 -1.9156579 128.0 +6.6391811 1.7126144 -1.9137391 128.0 +6.6486316 1.6716104 -1.9134649 128.0 +6.6681042 1.6330719 -1.9162061 128.0 +6.6798701 1.5925726 -1.9167545 128.0 +6.6923265 1.5522077 -1.9175768 128.0 +6.7045388 1.51175 -1.9183992 128.0 +6.7042947 1.4685249 -1.9156579 128.0 +6.7178826 1.4283608 -1.9170285 128.0 +6.7255783 1.3869195 -1.9167545 128.0 +6.7283034 1.3444949 -1.9151096 128.0 +6.7420917 1.3042818 -1.9167545 128.0 +6.7603655 1.2648346 -1.9197699 128.0 +6.762321 1.2223034 -1.918125 128.0 +6.7706413 1.1809528 -1.9183992 128.0 +6.7938824 1.1420979 -1.9230593 128.0 +6.7998128 1.1002363 -1.9227853 128.0 +6.8054857 1.058345 -1.9225111 128.0 +6.8004375 1.0148633 -1.9192215 128.0 +6.7941604 0.97134739 -1.9156579 128.0 +6.8123794 0.93133503 -1.9192215 128.0 +6.8208265 0.88989097 -1.9200439 128.0 +6.8442912 0.85027611 -1.9252523 128.0 +6.8560648 0.80905366 -1.9271712 128.0 +6.8322282 0.76376349 -1.9189475 128.0 +6.8597388 0.7242521 -1.9255265 128.0 +6.8774509 0.68348014 -1.9293643 128.0 +6.8728976 0.64046443 -1.9268972 128.0 +6.866159 0.59736359 -1.9238818 128.0 +6.8744879 0.55561 -1.9252523 128.0 +6.8710546 0.51291698 -1.9233335 128.0 +6.8731132 0.47068155 -1.9230593 128.0 +6.8797112 0.42873955 -1.9241558 128.0 +6.8898935 0.38695022 -1.9263489 128.0 +6.8930988 0.34471542 -1.926623 128.0 +6.8970056 0.30249807 -1.9271712 128.0 +6.9016151 0.26028204 -1.9279937 128.0 +6.9059658 0.21802083 -1.928816 128.0 +6.8994823 0.1754465 -1.926623 128.0 +6.9090829 0.13327619 -1.9290901 128.0 +6.9184251 0.090994678 -1.9315573 128.0 +6.9150062 0.0485151 -1.9304608 128.0 +6.9219055 0.0060908198 -1.9323797 128.0 +6.9189277 -0.036366314 -1.9315573 128.0 +6.9099197 -0.078721277 -1.9290901 128.0 +6.9093065 -0.12111826 -1.9290901 128.0 +6.8997803 -0.1633064 -1.926623 128.0 +6.9034548 -0.20578258 -1.9279937 128.0 +6.8866849 -0.24758556 -1.9236076 128.0 +6.9071355 -0.29076582 -1.9299126 128.0 +6.8927341 -0.33254001 -1.9263489 128.0 +6.9068885 -0.37571383 -1.9310091 128.0 +6.9092531 -0.41837698 -1.9323797 128.0 +6.912313 -0.46114725 -1.9340245 128.0 +6.8920889 -0.50229448 -1.9290901 128.0 +6.894629 -0.54502851 -1.9307349 128.0 +6.895946 -0.58773094 -1.9321055 128.0 +6.8902946 -0.6298576 -1.9315573 128.0 +6.8815145 -0.67165697 -1.9301866 128.0 +6.8868294 -0.71486086 -1.932928 128.0 +6.8670187 -0.75542259 -1.9285419 128.0 +6.8737173 -0.79887515 -1.9318314 128.0 +6.8734589 -0.84162062 -1.933202 128.0 +6.87675 -0.88488364 -1.9356692 128.0 +6.8692851 -0.9268049 -1.9351209 128.0 +6.8539462 -0.96759278 -1.9323797 128.0 +6.845026 -1.0092089 -1.9315573 128.0 +6.8453584 -1.0522126 -1.9334762 128.0 +6.8482695 -1.095714 -1.9362174 128.0 +6.8594422 -1.1407099 -1.9414259 128.0 +6.852314 -1.1827772 -1.9414259 128.0 +6.8591275 -1.22734 -1.9455378 128.0 +6.8249903 -1.2644998 -1.9378622 128.0 +6.8180475 -1.3065343 -1.9381363 128.0 +6.7976384 -1.3459169 -1.9345727 128.0 +6.7760611 -1.3849058 -1.9307349 128.0 +6.7552023 -1.423879 -1.9271712 128.0 +6.7801709 -1.4726478 -1.9370399 128.0 +6.7578683 -1.5112848 -1.933202 128.0 +6.7587771 -1.5550932 -1.9362174 128.0 +6.7500439 -1.5967563 -1.9364916 128.0 +6.7457266 -1.6395062 -1.9381363 128.0 +6.7224765 -1.6776072 -1.9342985 128.0 +6.7073979 -1.7176313 -1.932928 128.0 +6.6883612 -1.7565567 -1.9304608 128.0 +6.688601 -1.8005619 -1.9337503 128.0 +6.6644478 -1.8379897 -1.9299126 128.0 +6.6511936 -1.8783247 -1.9293643 128.0 +6.6275325 -1.9156296 -1.9258006 128.0 +6.5713863 -1.9431722 -1.9126425 128.0 +6.4995041 -1.9653673 -1.8948243 128.0 +6.3761454 -1.9708532 -1.8616549 128.0 +6.2593875 -1.9769276 -1.8304044 128.0 +6.1345615 -1.9789879 -1.7966868 128.0 +6.0665836 -1.9982423 -1.779965 128.0 +5.988575 -2.0133672 -1.7602279 128.0 +5.913341 -2.0285468 -1.7413131 128.0 +5.849041 -2.0466905 -1.7256879 128.0 +5.7693448 -2.058629 -1.7054025 128.0 +5.7303953 -2.0844584 -1.6974528 128.0 +5.6814275 -2.1062112 -1.6864877 128.0 +5.6171155 -2.1216662 -1.6708624 128.0 +5.5465465 -2.1339951 -1.6533183 128.0 +5.4840989 -2.1486957 -1.6382413 128.0 +5.2215881 -2.0829098 -1.5617598 128.0 +5.1757398 -2.1015255 -1.5516171 128.0 +5.0187564 -2.0737591 -1.5072086 128.0 +4.8924575 -2.0568168 -1.4721203 128.0 +4.8240366 -2.0629792 -1.4548503 128.0 +4.7081027 -2.047672 -1.4227774 128.0 +4.6365194 -2.0504661 -1.404411 128.0 +4.5256095 -2.0347168 -1.3737087 128.0 +4.5716457 -2.0892243 -1.3920752 128.0 +4.3703351 -2.0297523 -1.3328638 128.0 +4.3186598 -2.0380638 -1.320528 128.0 +4.2514386 -2.0383358 -1.3032581 128.0 +4.2103186 -2.0504906 -1.2942119 128.0 +4.1830029 -2.0690389 -1.2895517 128.0 +4.1624942 -2.0907822 -1.2870846 128.0 +4.1187439 -2.1005569 -1.277216 128.0 +4.0348911 -2.0890954 -1.2544634 128.0 +3.8772719 -2.0377679 -1.2078618 128.0 +3.7730505 -2.0126455 -1.1782562 128.0 +3.7124214 -2.0096674 -1.1626309 128.0 +3.6713603 -2.016669 -1.1533105 128.0 +3.6488359 -2.0335412 -1.150021 128.0 +3.6195457 -2.046427 -1.1445385 128.0 +3.598578 -2.0638142 -1.1417972 128.0 +3.5767024 -2.0805376 -1.1387818 128.0 +3.5265934 -2.0804594 -1.1264461 128.0 +3.4939535 -2.0902116 -1.1198671 128.0 +3.4588606 -2.0981462 -1.1124656 128.0 +3.4295371 -2.1092553 -1.1069831 128.0 +3.3936794 -2.116014 -1.0993075 128.0 +3.316407 -2.0962119 -1.0776515 128.0 +3.3051021 -2.117559 -1.0781997 128.0 +3.3565755 -2.1796932 -1.1001298 128.0 +3.309396 -2.1780457 -1.0886165 128.0 +3.2743661 -2.1839051 -1.0812151 128.0 +3.2441709 -2.1926482 -1.0754584 128.0 +3.1703491 -2.1712205 -1.0546248 128.0 +3.2130687 -2.229553 -1.0740879 128.0 +3.1843789 -2.2387187 -1.0688794 128.0 +3.1658821 -2.2548687 -1.0672346 128.0 +3.1473074 -2.2708759 -1.0655899 128.0 +3.1271026 -2.2856054 -1.0633968 128.0 +3.0998788 -2.2950234 -1.0587367 128.0 +3.0788133 -2.3088088 -1.0562695 128.0 +3.0814385 -2.3404517 -1.0623003 128.0 +3.0693069 -2.3610737 -1.0631227 128.0 +3.0585554 -2.382817 -1.0644934 128.0 +3.0310409 -2.3914139 -1.0598332 128.0 +3.0072937 -2.4027646 -1.0565437 128.0 +3.0111864 -2.4362922 -1.0633968 128.0 +3.0423071 -2.4925048 -1.0803927 128.0 +2.9980876 -2.4871814 -1.0697018 128.0 +2.9820337 -2.5049119 -1.0694276 128.0 +2.956351 -2.5144403 -1.0655899 128.0 +2.9474261 -2.5381801 -1.0680571 128.0 +2.8991749 -2.5277805 -1.0557213 128.0 +2.898752 -2.5588856 -1.061478 128.0 +2.8521602 -2.5490706 -1.0496905 128.0 +2.845737 -2.5749102 -1.0532541 128.0 +2.8270473 -2.5897248 -1.0521576 128.0 +2.8287339 -2.6233692 -1.0590109 128.0 +2.828711 -2.6558146 -1.0653157 128.0 +2.7761114 -2.6386728 -1.0510612 128.0 +2.7806599 -2.6756592 -1.0592849 128.0 +2.7958815 -2.7235355 -1.0718948 128.0 +2.7866504 -2.7480667 -1.0749102 128.0 +2.7588458 -2.7542434 -1.0705242 128.0 +2.726335 -2.755398 -1.0642192 128.0 +2.7241669 -2.7872036 -1.07025 128.0 +2.7043417 -2.8010991 -1.0691535 128.0 +2.6632073 -2.7925882 -1.0592849 128.0 +2.6512983 -2.8144763 -1.061478 128.0 +2.613668 -2.8088682 -1.0529801 128.0 +2.5944314 -2.8227284 -1.0521576 128.0 +2.5835276 -2.8457141 -1.054899 128.0 +2.5602388 -2.8550694 -1.0524318 128.0 +2.5535135 -2.8829625 -1.057092 128.0 +2.5307097 -2.8927863 -1.054899 128.0 +2.5047374 -2.8988011 -1.0513352 128.0 +2.4819086 -2.9082634 -1.0491422 128.0 +2.4621575 -2.9212317 -1.0483198 128.0 +2.4349568 -2.9251983 -1.0442079 128.0 +2.4108543 -2.9326556 -1.0414667 128.0 +2.3831151 -2.9354479 -1.0370806 128.0 +2.3494163 -2.9305084 -1.0299534 128.0 +2.3385551 -2.9539163 -1.0332428 128.0 +2.3120928 -2.9576035 -1.0294051 128.0 +2.2915509 -2.9686897 -1.0283086 128.0 +2.2756245 -2.9857538 -1.0294051 128.0 +2.2659364 -3.0111861 -1.033517 128.0 +2.250859 -3.0296643 -1.0351617 128.0 +2.240191 -3.0542738 -1.0389996 128.0 +2.2287412 -3.0780876 -1.0425632 128.0 +2.2193205 -3.1050043 -1.0472233 128.0 +2.1941276 -3.1099203 -1.0442079 128.0 +2.1865468 -3.1398964 -1.0499647 128.0 +2.1677845 -3.1540463 -1.0502387 128.0 +2.1559498 -3.1784296 -1.0540766 128.0 +2.1299863 -3.182009 -1.050787 128.0 +2.0923975 -3.1677372 -1.0414667 128.0 +2.0466616 -3.1402352 -1.0277604 128.0 +2.0330777 -3.1616313 -1.0307758 128.0 +2.0342507 -3.206527 -1.0417408 128.0 +2.0048423 -3.2034605 -1.0365324 128.0 +1.9967694 -3.2345219 -1.0428374 128.0 +2.0184045 -3.3148854 -1.0655899 128.0 +1.9772291 -3.2925825 -1.0540766 128.0 +1.9408151 -3.2773473 -1.0450304 128.0 +1.9221243 -3.2916856 -1.0458528 128.0 +1.8846134 -3.2734158 -1.0359842 128.0 +1.861169 -3.2790637 -1.0340652 128.0 +1.8386657 -3.2862258 -1.0326946 128.0 +1.8128932 -3.2873409 -1.0294051 128.0 +1.8064681 -3.32375 -1.0376289 128.0 +1.7942144 -3.3500307 -1.0425632 128.0 +1.7754209 -3.3643785 -1.0436597 128.0 +1.7582936 -3.3820348 -1.0458528 128.0 +1.7283012 -3.3747852 -1.040096 128.0 +1.6984643 -3.3672957 -1.0343394 128.0 +1.683334 -3.3888502 -1.0379031 128.0 +1.6646218 -3.4034343 -1.0392736 128.0 +1.6395342 -3.4049199 -1.0365324 128.0 +1.6087233 -3.3940604 -1.0299534 128.0 +1.5964072 -3.4221687 -1.03571 128.0 +1.5866154 -3.4563706 -1.0433856 128.0 +1.5697329 -3.4756813 -1.046401 128.0 +1.5452526 -3.4782171 -1.0442079 128.0 +1.527733 -3.4964452 -1.0469493 128.0 +1.4849857 -3.4562745 -1.0315981 128.0 +1.2829634 -3.0374491 -0.89919472 128.0 +1.3535653 -3.2601948 -0.96553349 128.0 +1.4629065 -3.5854175 -1.0631227 128.0 +1.4501854 -3.6175339 -1.07025 128.0 +1.4254942 -3.6201005 -1.0683311 128.0 +1.4129695 -3.653893 -1.0760067 128.0 +1.3826699 -3.6418161 -1.0697018 128.0 +1.3693678 -3.6745617 -1.0771033 128.0 +1.3517511 -3.6964421 -1.0812151 128.0 +1.3313186 -3.7110031 -1.0831341 128.0 +1.3136317 -3.7336164 -1.08752 128.0 +1.310461 -3.7988789 -1.1047901 128.0 +1.2772671 -3.7776964 -1.096018 128.0 +1.2440803 -3.7553377 -1.0869718 128.0 +1.1978552 -3.6915531 -1.0655899 128.0 +1.1472173 -3.6108479 -1.0392736 128.0 +1.1198978 -3.6012902 -1.0343394 128.0 +1.0188117 -3.3486481 -0.95703554 128.0 +0.98946559 -3.3253412 -0.94826347 128.0 +0.96259385 -3.3091884 -0.94168442 128.0 +0.93964046 -3.3057823 -0.93894315 128.0 +0.92191249 -3.3207519 -0.94168442 128.0 +0.90655291 -3.3449097 -0.94716698 128.0 +0.80680794 -3.0510442 -0.85889804 128.0 +0.78759134 -3.054075 -0.8583498 128.0 +0.94685864 -3.7667336 -1.0664122 128.0 +0.90107536 -3.6799991 -1.0392736 128.0 +0.88026303 -3.6929426 -1.0414667 128.0 +0.85693496 -3.6954637 -1.0406443 128.0 +0.83805245 -3.7175386 -1.0455786 128.0 +0.81666708 -3.7291865 -1.0474975 128.0 +0.79897141 -3.7585845 -1.0546248 128.0 +0.77511704 -3.7596486 -1.0535283 128.0 +0.75863123 -3.7973402 -1.0631227 128.0 +0.73714399 -3.8113654 -1.065864 128.0 +0.71781307 -3.837558 -1.0721689 128.0 +0.67269272 -3.7226503 -1.0376289 128.0 +0.64289558 -3.6869178 -1.0261155 128.0 +0.62153691 -3.6983802 -1.0283086 128.0 +0.61066443 -3.7752233 -1.0494164 128.0 +0.59177583 -3.8064568 -1.057366 128.0 +0.56400663 -3.7805305 -1.0488682 128.0 +0.54488403 -3.8124802 -1.057092 128.0 +0.53138512 -3.8881662 -1.0779256 128.0 +0.50166768 -3.8465343 -1.0650417 128.0 +0.4758026 -3.8314073 -1.0598332 128.0 +0.44856352 -3.8027377 -1.050787 128.0 +0.43056676 -3.8532052 -1.0644934 128.0 +0.40418801 -3.8299525 -1.057092 128.0 +0.37963349 -3.8218336 -1.0540766 128.0 +0.35751531 -3.8384542 -1.0581884 128.0 +0.33445671 -3.846324 -1.0598332 128.0 +0.30852395 -3.8195469 -1.0516094 128.0 +0.28680134 -3.8443847 -1.0581884 128.0 +0.26373333 -3.8537476 -1.0603814 128.0 +0.24139941 -3.8764095 -1.0664122 128.0 +0.2180955 -3.8864594 -1.0688794 128.0 +0.19443688 -3.8915663 -1.0699759 128.0 +0.17004868 -3.8811569 -1.0666864 128.0 +0.14652154 -3.8898153 -1.0688794 128.0 +0.12231691 -3.8800678 -1.065864 128.0 +0.0980414 -3.862479 -1.0606556 128.0 +0.074284017 -3.8601234 -1.0598332 128.0 +0.050622754 -3.8624296 -1.0603814 128.0 +0.026895167 -3.8588209 -1.0592849 128.0 +0.0031975335 -3.8377559 -1.0532541 128.0 +-0.020400541 -3.8473201 -1.0559955 128.0 +-0.043995973 -3.8461609 -1.0557213 128.0 +-0.067829937 -3.8592803 -1.0595591 128.0 +-0.091463357 -3.8568685 -1.0590109 128.0 +-0.11558451 -3.8716149 -1.0633968 128.0 +-0.13913114 -3.8650665 -1.0617521 128.0 +-0.16304608 -3.8689442 -1.0631227 128.0 +-0.18622696 -3.856344 -1.0598332 128.0 +-0.209729 -3.852248 -1.0590109 128.0 +-0.23243287 -3.8355296 -1.0546248 128.0 +-0.25896898 -3.8791306 -1.0675088 128.0 +-0.28374386 -3.8908968 -1.0713465 128.0 +-0.30943015 -3.9120915 -1.0779256 128.0 +-0.33293879 -3.9043698 -1.0762808 128.0 +-0.36056387 -3.9424772 -1.0877942 128.0 +-0.38381404 -3.930619 -1.0850528 128.0 +-0.40752769 -3.9243639 -1.0839564 128.0 +-0.43265048 -3.9313488 -1.0866977 128.0 +-0.4542124 -3.9066489 -1.0803927 128.0 +-0.47572124 -3.8837423 -1.0746361 128.0 +-0.50027859 -3.8864732 -1.0762808 128.0 +-0.52501583 -3.8900018 -1.0781997 128.0 +-0.8348285 -5.9131145 -1.6615422 128.0 +-0.87516123 -5.9354715 -1.6694918 128.0 +-0.90995759 -5.9195342 -1.6664764 128.0 +-0.94413567 -5.9005446 -1.6626387 128.0 +-0.97984982 -5.8917942 -1.6618162 128.0 +-1.016964 -5.8913574 -1.663461 128.0 +-1.0515695 -5.8764863 -1.6609938 128.0 +-1.0877823 -5.8708692 -1.661268 128.0 +-1.1252322 -5.8716402 -1.663461 128.0 +-1.1603051 -5.8599086 -1.6620904 128.0 +-1.1989342 -5.86587 -1.6659281 128.0 +-1.2301449 -5.8358183 -1.6593491 128.0 +-1.2724597 -5.8582339 -1.6681212 128.0 +-1.3117385 -5.8653321 -1.6725072 128.0 +-1.3420976 -5.8328056 -1.6653799 128.0 +-1.3749845 -5.8122945 -1.6618162 128.0 +-1.4094869 -5.7990756 -1.6604456 128.0 +-1.4510955 -5.8145785 -1.667573 128.0 +-1.4826909 -5.7897272 -1.6629127 128.0 +-1.5213631 -5.7926126 -1.6664764 128.0 +-1.5536282 -5.7710962 -1.6629127 128.0 +-1.5895209 -5.763309 -1.663461 128.0 +-1.6277285 -5.763628 -1.6664764 128.0 +-1.6622618 -5.7507601 -1.6656541 128.0 +-1.6969712 -5.7386079 -1.6651058 128.0 +-1.7254715 -5.7059946 -1.6585268 128.0 +-1.7664131 -5.7145948 -1.6642834 128.0 +-1.8040502 -5.7119026 -1.6667506 128.0 +-1.2666739 -3.9260244 -1.1352181 128.0 +-1.2856259 -3.9026499 -1.130558 128.0 +-1.9116397 -5.6859322 -1.6692177 128.0 +-1.9455559 -5.6713667 -1.6683953 128.0 +-1.9749194 -5.6438904 -1.6637352 128.0 +-2.0159752 -5.6497822 -1.6692177 128.0 +-2.052247 -5.6418247 -1.6705884 128.0 +-2.0881629 -5.6327333 -1.6716849 128.0 +-2.1220059 -5.6180153 -1.6711366 128.0 +-2.1567829 -5.6057863 -1.6714107 128.0 +-2.1928926 -5.5969243 -1.6727813 128.0 +-2.231112 -5.5931897 -1.6757967 128.0 +-2.2664745 -5.582068 -1.6766192 128.0 +-2.3043547 -5.5769444 -1.6793604 128.0 +-2.3359222 -5.5564942 -1.6774415 128.0 +-1.3004117 -3.0404825 -0.90193599 128.0 +-1.3190433 -3.0324461 -0.90193599 128.0 +-2.4424701 -5.5231109 -1.6807311 128.0 +-2.4798617 -5.5159144 -1.6831982 128.0 +-2.5064664 -5.4848495 -1.6782639 128.0 +-2.5445287 -5.4789615 -1.6812793 128.0 +-1.6039016 -3.3984685 -1.0305016 128.0 +-1.618073 -3.3746879 -1.0261155 128.0 +-1.6353812 -3.3577788 -1.0239226 128.0 +-1.6529692 -3.3416469 -1.0220037 128.0 +-1.6747369 -3.3340197 -1.0228261 128.0 +-1.696473 -3.3262513 -1.0236484 128.0 +-1.7252504 -3.3320062 -1.0288569 128.0 +-1.7586353 -3.346046 -1.0368066 128.0 +-2.1198983 -3.97416 -1.2432243 128.0 +-2.8940239 -5.3464494 -1.6922444 128.0 +-2.9239969 -5.3235335 -1.6905996 128.0 +-2.9308619 -5.2592869 -1.6755226 128.0 +-2.9626038 -5.2403674 -1.6752485 128.0 +-2.9884837 -5.2112451 -1.6716849 128.0 +-3.0189526 -5.1903157 -1.6708624 128.0 +-3.0531857 -5.1758361 -1.6722331 128.0 +-3.0972276 -5.1776381 -1.6790862 128.0 +-3.1294372 -5.1593585 -1.6793604 128.0 +-3.1575096 -5.134325 -1.6774415 128.0 +-3.2016723 -5.1352568 -1.6842947 128.0 +-3.2146266 -5.0862479 -1.6744261 128.0 +-3.2545929 -5.0801945 -1.6790862 128.0 +-3.2919874 -5.0698085 -1.6823758 128.0 +-3.3246191 -5.0519238 -1.6831982 128.0 +-3.3582222 -5.03543 -1.6845688 128.0 +-3.3659029 -4.9804654 -1.6727813 128.0 +-3.4300847 -5.0089169 -1.6897773 128.0 +-3.4278638 -4.9403663 -1.6733296 128.0 +-3.466408 -4.9310417 -1.6774415 128.0 +-3.4397004 -4.8297753 -1.6494806 128.0 +-2.201673 -3.0513749 -1.0318723 128.0 +-2.2197869 -3.0370317 -1.0315981 128.0 +-3.5400333 -4.7818756 -1.6552372 128.0 +-3.6148818 -4.8208513 -1.6768932 128.0 +-3.6193852 -4.7656465 -1.6651058 128.0 +-3.680218 -4.7845135 -1.6799086 128.0 +-3.7142334 -4.7679114 -1.6821016 128.0 +-3.7517574 -4.7556028 -1.6859394 128.0 +-3.7616596 -4.7084479 -1.6771674 128.0 +-3.7965274 -4.6927552 -1.6799086 128.0 +-3.8252501 -4.6693721 -1.6799086 128.0 +-3.8581264 -4.6509943 -1.6818275 128.0 +-3.9045277 -4.6485906 -1.6897773 128.0 +-3.9392073 -4.6318717 -1.6925185 128.0 +-3.9669263 -4.606885 -1.6922444 128.0 +-3.9951189 -4.5824575 -1.6922444 128.0 +-4.0212522 -4.5556946 -1.691422 128.0 +-4.0561781 -4.5388231 -1.6944374 128.0 +-4.0684676 -4.4967337 -1.6878583 128.0 +-4.0972815 -4.4731035 -1.6884066 128.0 +-4.1200738 -4.4429426 -1.6864877 128.0 +-4.1492319 -4.419682 -1.6873101 128.0 +-4.1610355 -4.3781056 -1.6810051 128.0 +-4.1871543 -4.3517985 -1.6807311 128.0 +-4.2157903 -4.3280916 -1.6815534 128.0 +-4.2483444 -4.3083057 -1.6840205 128.0 +-4.2604327 -4.2678638 -1.6782639 128.0 +-4.2865396 -4.241642 -1.6782639 128.0 +-4.3124852 -4.21526 -1.6782639 128.0 +-4.3251243 -4.1760273 -1.6730554 128.0 +-4.3388362 -4.1381259 -1.6683953 128.0 +-4.3746448 -4.1213179 -1.6725072 128.0 +-4.4061861 -4.1002946 -1.6749743 128.0 +-4.4213505 -4.0640697 -1.6711366 128.0 +-4.447628 -4.0381575 -1.6716849 128.0 +-4.4465489 -3.9876747 -1.6618162 128.0 +-4.4666142 -3.9564898 -1.6601715 128.0 +-4.5016627 -3.938508 -1.6642834 128.0 +-4.5388412 -3.9221313 -1.6692177 128.0 +-4.5233226 -3.8604922 -1.6544148 128.0 +-4.5616307 -3.8450623 -1.6598973 128.0 +-4.5747905 -3.8083854 -1.6560596 128.0 +-4.5936155 -3.7765787 -1.6544148 128.0 +-4.6301398 -3.7592337 -1.6593491 128.0 +-4.665123 -3.7403789 -1.6637352 128.0 +-4.6894937 -3.7128778 -1.6642834 128.0 +-4.7083993 -3.681072 -1.6629127 128.0 +-4.7461214 -3.6638668 -1.6683953 128.0 +-4.7654538 -3.632344 -1.6672988 128.0 +-4.7907252 -3.6053486 -1.6683953 128.0 +-4.80581 -3.5707231 -1.6659281 128.0 +-4.8369341 -3.5479941 -1.6692177 128.0 +-4.8648438 -3.5227611 -1.6714107 128.0 +-4.8777623 -3.4866924 -1.6683953 128.0 +-4.9108505 -3.4650147 -1.6725072 128.0 +-4.9391212 -3.439764 -1.6749743 128.0 +-4.9696441 -3.415931 -1.6782639 128.0 +-4.9857354 -3.382134 -1.6766192 128.0 +-4.9944072 -3.3434529 -1.6725072 128.0 +-5.024457 -3.3191063 -1.6757967 128.0 +-5.0423107 -3.2866387 -1.6749743 128.0 +-5.0769415 -3.2650023 -1.6799086 128.0 +-5.060339 -3.2106023 -1.667573 128.0 +-5.0750527 -3.1764305 -1.6659281 128.0 +-5.1189957 -3.1603887 -1.674152 128.0 +-5.1440406 -3.1324213 -1.6760708 128.0 +-5.1598663 -3.0988183 -1.6749743 128.0 +-5.180438 -3.0680797 -1.6755226 128.0 +-5.1966743 -3.0347805 -1.6747003 128.0 +-5.235199 -3.0143552 -1.6812793 128.0 +-5.2519236 -2.9812262 -1.6807311 128.0 +-5.2877407 -2.9588079 -1.6864877 128.0 +-5.3209534 -2.9346683 -1.691422 128.0 +-5.33886 -2.9019642 -1.691422 128.0 +-5.3811493 -2.8823209 -1.6993717 128.0 +-5.3953314 -2.8474529 -1.6982752 128.0 +-5.4220872 -2.8191748 -1.7012906 128.0 +-5.4521222 -2.7924292 -1.7054025 128.0 +-5.4837499 -2.7662873 -1.7100626 128.0 +-5.4937301 -2.7291644 -1.7078696 128.0 +-5.5103726 -2.6954041 -1.7078696 128.0 +-5.5424032 -2.669054 -1.7128038 128.0 +-5.5838761 -2.646944 -1.7207536 128.0 +-5.613956 -2.6191385 -1.7251396 128.0 +-5.6640058 -2.6002934 -1.7358305 128.0 +-5.6605735 -2.5567803 -1.7297997 128.0 +-5.6875796 -2.5270765 -1.7333634 128.0 +-5.7338204 -2.5056107 -1.7429578 128.0 +-5.7517371 -2.4715207 -1.7437803 128.0 +-5.772995 -2.4388022 -1.7456992 128.0 +-5.7878504 -2.4033339 -1.7456992 128.0 +-5.8265285 -2.3775868 -1.7531005 128.0 +-5.8383298 -2.3407173 -1.7522782 128.0 +-5.853477 -2.3052025 -1.7525523 128.0 +-5.8872437 -2.2768757 -1.7585831 128.0 +-5.8867188 -2.2352464 -1.7541971 128.0 +-5.9030266 -2.2000918 -1.7550194 128.0 +-5.9426069 -2.1734111 -1.7629691 128.0 +-5.9341063 -2.1291111 -1.7563901 128.0 +-5.8908157 -2.072865 -1.7393942 128.0 +-5.9470601 -2.0517383 -1.7525523 128.0 +-5.9886889 -2.025069 -1.7613244 128.0 +-6.0621643 -2.008554 -1.7796909 128.0 +-6.1283426 -1.9888374 -1.7958643 128.0 +-6.2018371 -1.9707141 -1.8142309 128.0 +-6.3102322 -1.9626184 -1.8430142 128.0 +-6.4472785 -1.9619464 -1.8802955 128.0 +-6.6039057 -1.9654269 -1.9233335 128.0 +-6.70541 -1.9509346 -1.9499238 128.0 +-6.7459297 -1.9179088 -1.9584217 128.0 +-6.7557178 -1.8759657 -1.9578735 128.0 +-6.7745266 -1.8364915 -1.9600666 128.0 +-6.7949648 -1.797349 -1.9628078 128.0 +-6.8095899 -1.7565831 -1.9639043 128.0 +-6.8277011 -1.7166435 -1.9660974 128.0 +-6.8446445 -1.676319 -1.9680161 128.0 +-6.8594785 -1.6354048 -1.9693868 128.0 +-6.8778152 -1.5952412 -1.971854 128.0 +-6.8649588 -1.5479316 -1.9652749 128.0 +-6.8348727 -1.497135 -1.9537616 128.0 +-6.8862596 -1.4641715 -1.9660974 128.0 +-6.9252534 -1.4281079 -1.9748694 128.0 +-6.886734 -1.3761632 -1.961163 128.0 +-6.8997693 -1.3347948 -1.9625336 128.0 +-6.9116106 -1.2931411 -1.9636302 128.0 +-6.9260392 -1.2519057 -1.965549 128.0 +-6.9222221 -1.2074012 -1.9622595 128.0 +-6.9437261 -1.1672966 -1.9663714 128.0 +-6.9526563 -1.1249762 -1.9669197 128.0 +-6.9594278 -1.0822942 -1.9669197 128.0 +-6.9764004 -1.0411336 -1.9699351 128.0 +-6.9759936 -0.99735457 -1.9680161 128.0 +-6.9953213 -0.95635635 -1.971854 128.0 +-7.002965 -0.91366482 -1.9724022 128.0 +-6.9779 -0.8668825 -1.9636302 128.0 +-7.0060091 -0.82675678 -1.9702092 128.0 +-7.0071273 -0.78332555 -1.9691128 128.0 +-6.9974561 -0.73880047 -1.9650007 128.0 +-7.0075994 -0.69642192 -1.9666456 128.0 +-6.99259 -0.65162528 -1.961163 128.0 +-7.000289 -0.60904092 -1.9622595 128.0 +-6.9981427 -0.5656113 -1.9606148 128.0 +-6.9947686 -0.52215934 -1.9586959 128.0 +-6.9911246 -0.47877008 -1.956777 128.0 +-6.9977698 -0.43610382 -1.9578735 128.0 +-6.9859114 -0.39234838 -1.9537616 128.0 +-7.0035553 -0.35024568 -1.9581476 128.0 +-7.010376 -0.30747706 -1.9595182 128.0 +-7.0207801 -0.26478308 -1.9619853 128.0 +-7.0107379 -0.22133459 -1.9586959 128.0 +-6.6750374 0.49019194 -1.9493195 128.0 +-6.6833696 0.53205472 -1.9527397 128.0 +-6.6790242 0.57297099 -1.9524547 128.0 +-6.6839733 0.61473352 -1.9550198 128.0 +-6.6943841 0.65714109 -1.9592952 128.0 +-6.687366 0.69790572 -1.9584401 128.0 +-6.6772418 0.73829246 -1.95673 128.0 +-6.6697297 0.77891535 -1.9558749 128.0 +-6.6724358 0.82076287 -1.958155 128.0 +-6.6777306 0.86304194 -1.9612902 128.0 +-6.6485639 0.90077817 -1.9541649 128.0 +-6.6277275 0.93940115 -1.9496045 128.0 +-6.6360612 0.98215795 -1.9538798 128.0 +-6.6223311 1.021687 -1.9515996 128.0 +-6.6178303 1.0626059 -1.9521697 128.0 +-6.5970044 1.1008232 -1.9478943 128.0 +-6.4900155 1.1239259 -1.9176823 128.0 +-6.4999785 1.1667781 -1.9228127 128.0 +-0 0 -0 128.0 +-6.5341167 1.2558713 -1.9376336 128.0 +-6.534749 1.297622 -1.9401989 128.0 +-6.528542 1.3380792 -1.940769 128.0 +-6.5258355 1.3793026 -1.942479 128.0 +-6.5256782 1.4211556 -1.9450442 128.0 +-6.5187058 1.4615895 -1.9456142 128.0 +-6.5040112 1.5002663 -1.9439042 128.0 +-6.4946833 1.5401459 -1.9439042 128.0 +-6.4683485 1.5758806 -1.9387738 128.0 +-6.4529781 1.6141435 -1.9370637 128.0 +-6.4262414 1.6494155 -1.9319333 128.0 +-6.4289765 1.6922333 -1.9359236 128.0 +-6.422174 1.7326483 -1.9370637 128.0 +-6.3947926 1.7674222 -1.9319333 128.0 +-6.3912053 1.8087159 -1.9342134 128.0 +-6.3809075 1.8481644 -1.9344984 128.0 +-6.4135585 1.9003608 -1.9481794 128.0 +-6.3742585 1.9313347 -1.9396288 128.0 +-6.3503857 1.9667217 -1.9359236 128.0 +-6.3071294 1.9958123 -1.9262329 128.0 +-6.3257728 2.0445025 -1.9359236 128.0 +-6.3249416 2.0871851 -1.9396288 128.0 +-6.2847657 2.1167717 -1.9310782 128.0 +-6.267127 2.1537361 -1.9296532 128.0 +-6.250176 2.190881 -1.9285131 128.0 +-6.2492509 2.2337089 -1.9325033 128.0 +-6.2759519 2.2867856 -1.9453292 128.0 +-6.2366443 2.3159037 -1.9373487 128.0 +-6.1945267 2.3436081 -1.9285131 128.0 +-6.1862903 2.3839867 -1.9305083 128.0 +-6.191175 2.4296069 -1.9367787 128.0 +-6.1832709 2.4703958 -1.9390588 128.0 +-6.17066 2.5093729 -1.9399139 128.0 +-6.1516042 2.5457213 -1.9387738 128.0 +-6.140285 2.5852795 -1.9401989 128.0 +-6.1199012 2.6210194 -1.9387738 128.0 +-6.1001887 2.6569893 -1.9376336 128.0 +-6.0793891 2.6924279 -1.9362086 128.0 +-6.0277963 2.713933 -1.9248078 128.0 +-6.0197453 2.754858 -1.927658 128.0 +-6.0122881 2.7961905 -1.9307932 128.0 +-5.9872189 2.8293414 -1.928228 128.0 +-5.980114 2.8710051 -1.9316483 128.0 +-5.9684157 2.9105864 -1.9336435 128.0 +-5.9470086 2.9454508 -1.9325033 128.0 +-5.9219742 2.9784389 -1.9302232 128.0 +-5.895905 3.0107946 -1.927658 128.0 +-5.8679605 3.0420601 -1.9245228 128.0 +-5.8568177 3.0820267 -1.927088 128.0 +-5.833569 3.1156468 -1.9256629 128.0 +-5.8202405 3.1545806 -1.927658 128.0 +-5.8007751 3.1902335 -1.927658 128.0 +-5.7861123 3.2285695 -1.9293681 128.0 +-5.7545166 3.2573991 -1.9253778 128.0 +-5.7302651 3.2902596 -1.9239528 128.0 +-5.7165947 3.3292181 -1.9262329 128.0 +-5.6869817 3.3588684 -1.9230977 128.0 +-5.6687317 3.3951776 -1.9239528 128.0 +-5.6535268 3.4333801 -1.9259479 128.0 +-5.6315374 3.4675024 -1.9256629 128.0 +-5.6142201 3.50453 -1.927088 128.0 +-5.5950408 3.5404503 -1.927943 128.0 +-5.5651445 3.5695376 -1.9250928 128.0 +-5.5431376 3.6036177 -1.9250928 128.0 +-5.5129185 3.6322868 -1.9222426 128.0 +-5.4801655 3.6591239 -1.9185374 128.0 +-5.4425287 3.6824722 -1.9131221 128.0 +-5.409555 3.7087498 -1.9094168 128.0 +-5.3866968 3.7418723 -1.9094168 128.0 +-5.3628516 3.7743022 -1.9091318 128.0 +-5.365344 3.8255048 -1.9185374 128.0 +-5.3223467 3.8443193 -1.9114119 128.0 +-5.2986584 3.8769045 -1.9114119 128.0 +-5.2747703 3.9093435 -1.9114119 128.0 +-5.2644801 3.9519956 -1.9165423 128.0 +-5.2256365 3.9731982 -1.9111269 128.0 +-5.2133088 4.0145464 -1.9156872 128.0 +-5.205204 4.0594306 -1.9219576 128.0 +-5.1832061 4.0936694 -1.9230977 128.0 +-5.1594872 4.1265936 -1.9236678 128.0 +-5.1340699 4.158174 -1.9236678 128.0 +-5.1092 4.1902056 -1.9239528 128.0 +-5.0738087 4.2135139 -1.9202476 128.0 +-5.0478592 4.2445669 -1.9202476 128.0 +-5.0012879 4.2580576 -1.912267 128.0 +-4.9663558 4.2811532 -1.9088467 128.0 +-4.929163 4.3020897 -1.9045714 128.0 +-4.9285269 4.3551073 -1.9148321 128.0 +-4.8859982 4.3712029 -1.9085617 128.0 +-4.8882079 4.4274883 -1.9202476 128.0 +-4.8517671 4.4489751 -1.9165423 128.0 +-4.7822351 4.4395256 -1.8994411 128.0 +-4.7912192 4.5029263 -1.9142621 128.0 +-4.7475305 4.5170407 -1.9077066 128.0 +-4.7390518 4.5647082 -1.9156872 128.0 +-4.6951723 4.5783067 -1.9091318 128.0 +-4.6717663 4.6117439 -1.9111269 128.0 +-4.6298237 4.6267691 -1.9054265 128.0 +-4.6101055 4.6639538 -1.9091318 128.0 +-4.5747061 4.6852937 -1.9062816 128.0 +-4.5571814 4.7250056 -1.9111269 128.0 +-4.5307479 4.7556558 -1.912267 128.0 +-4.4922876 4.773592 -1.9082767 128.0 +-4.4570403 4.7947469 -1.9057115 128.0 +-4.4430923 4.8389525 -1.912552 128.0 +-4.397222 4.8483706 -1.9054265 128.0 +-4.3673902 4.8752604 -1.9054265 128.0 +-4.3431096 4.9084277 -1.9079916 128.0 +-4.301559 4.9219909 -1.9028614 128.0 +-4.2900629 4.9700632 -1.9114119 128.0 +-4.2464299 4.9809728 -1.9054265 128.0 +-4.2065287 4.995935 -1.9011512 128.0 +-4.178246 5.0246 -1.9022913 128.0 +-4.1734891 5.0819993 -1.9145471 128.0 +-4.1132536 5.0717721 -1.9008662 128.0 +-4.0988297 5.1178665 -1.9088467 128.0 +-4.0649724 5.1399126 -1.9077066 128.0 +-4.0251002 5.15418 -1.9037164 128.0 +-3.9852066 5.1681523 -1.8997262 128.0 +-3.9603865 5.2016606 -1.9031464 128.0 +-3.9266677 5.2235641 -1.9022913 128.0 +-3.9059649 5.2629557 -1.9079916 128.0 +-3.888324 5.3069286 -1.9154022 128.0 +-3.8714135 5.3524365 -1.9233828 128.0 +-3.8329303 5.3682885 -1.9205326 128.0 +-3.7894301 5.3768177 -1.9151171 128.0 +-3.7476115 5.3873763 -1.9105569 128.0 +-3.7096033 5.4031572 -1.9079916 128.0 +-3.6758428 5.4250236 -1.9077066 128.0 +-3.6478126 5.4554448 -1.9105569 128.0 +-3.583133 5.4305158 -1.8937408 128.0 +-3.5638609 5.4740906 -1.9014362 128.0 +-3.5447063 5.5184388 -1.9094168 128.0 +-3.5292444 5.5692353 -1.9196775 128.0 +-3.5011013 5.6005397 -1.9230977 128.0 +-3.4656653 5.6202846 -1.9225277 128.0 +-3.4296207 5.6389866 -1.9216726 128.0 +-3.390027 5.6517034 -1.9188224 128.0 +-3.3513823 5.6657972 -1.9165423 128.0 +-3.3160715 5.6854262 -1.9162573 128.0 +-3.2792132 5.702342 -1.9151171 128.0 +-3.2474706 5.7281933 -1.9171124 128.0 +-3.2141318 5.7513585 -1.9182523 128.0 +-3.1801686 5.7734909 -1.9191074 128.0 +-3.1391976 5.7827859 -1.9156872 128.0 +-3.1081755 5.8103914 -1.9185374 128.0 +-3.0961444 5.874299 -1.9336435 128.0 +-3.0679903 5.9084992 -1.9387738 128.0 +-3.0290606 5.9220924 -1.9370637 128.0 +-2.9930975 5.9414229 -1.9373487 128.0 +-2.9553077 5.9571004 -1.9364936 128.0 +-2.9132328 5.9639239 -1.9327884 128.0 +-2.8662026 5.9600897 -1.9256629 128.0 +-2.8361373 5.9914269 -1.9302232 128.0 +-2.7798991 5.9670076 -1.9165423 128.0 +-2.7663927 6.0344934 -1.9330734 128.0 +-2.7230108 6.0373731 -1.9285131 128.0 +-2.6793091 6.0390716 -1.9236678 128.0 +-2.6452692 6.0624266 -1.9259479 128.0 +-2.608021 6.0785437 -1.9259479 128.0 +-2.5740261 6.1023808 -1.9285131 128.0 +-2.5416713 6.1304569 -1.9325033 128.0 +-2.5101533 6.1610284 -1.9373487 128.0 +-2.4662497 6.1611853 -1.9325033 128.0 +-2.4343591 6.1913676 -1.9373487 128.0 +-2.3890765 6.1874094 -1.9313632 128.0 +-2.3592169 6.223464 -1.9382037 128.0 +-2.3149722 6.2216516 -1.9330734 128.0 +-2.285625 6.2600508 -1.940769 128.0 +-2.2468481 6.2730546 -1.9404839 128.0 +-2.2051399 6.277679 -1.9376336 128.0 +-2.1659553 6.2892785 -1.9370637 128.0 +-2.1282434 6.3051748 -1.9379187 128.0 +-2.0952308 6.3354068 -1.9433341 128.0 +-2.0551374 6.3444958 -1.942194 128.0 +-2.017328 6.3606415 -1.9433341 128.0 +-1.9782618 6.3728995 -1.9433341 128.0 +-1.9352238 6.3720775 -1.9393438 128.0 +-1.8999076 6.3966961 -1.9433341 128.0 +-1.8595541 6.404551 -1.942194 128.0 +-1.8207443 6.417685 -1.942764 128.0 +-1.7731465 6.3991756 -1.9336435 128.0 +-1.738851 6.428441 -1.9393438 128.0 +-1.7093959 6.4769897 -1.9510295 128.0 +-1.663653 6.4641485 -1.9439042 128.0 +-1.6123062 6.4277468 -1.9296532 128.0 +-1.576928 6.4542799 -1.9347835 128.0 +-1.5410631 6.4796877 -1.9396288 128.0 +-1.4999801 6.483418 -1.9379187 128.0 +-1.4584892 6.4850183 -1.9356385 128.0 +-1.4203057 6.5013371 -1.9379187 128.0 +-1.3819768 6.5174313 -1.9401989 128.0 +-1.3444684 6.5379939 -1.9439042 128.0 +-1.3018938 6.5338993 -1.9401989 128.0 +-1.2625035 6.5455294 -1.9413389 128.0 +-1.221966 6.5512681 -1.940769 128.0 +-1.1820848 6.5605292 -1.9413389 128.0 +-1.1416439 6.5667148 -1.9410539 128.0 +-1.1022791 6.5792685 -1.942764 128.0 +-1.0621935 6.5878005 -1.9433341 128.0 +-1.0227778 6.6008248 -1.9453292 128.0 +-0.9828198 6.6107688 -1.9464693 128.0 +-0.94439787 6.6318583 -1.9510295 128.0 +-0.90239632 6.6280303 -1.9481794 128.0 +-0.86084729 6.6267886 -1.9461843 128.0 +-0.82146215 6.6424103 -1.9493195 128.0 +-0.78102458 6.6501813 -1.9501746 128.0 +-0.73925292 6.6462746 -1.9476093 128.0 +-0.69466025 6.61446 -1.9367787 128.0 +-0.65829593 6.6615233 -1.9496045 128.0 +-0.61652678 6.6558924 -1.9467543 128.0 +-0.57658166 6.6700549 -1.9498895 128.0 +-0.53556758 6.6725116 -1.9496045 128.0 +-0.49405044 6.668025 -1.9473244 128.0 +-0.45273817 6.6651926 -1.9456142 128.0 +-0.41195065 6.6697588 -1.9461843 128.0 +-0.37059361 6.6645045 -1.9439042 128.0 +-0.32945809 6.6618662 -1.942479 128.0 +-0.28799722 6.6503553 -1.9384887 128.0 +-0.24750482 6.6606183 -1.9410539 128.0 +-0.20704505 6.6754241 -1.9450442 128.0 +-0.16612886 6.6784854 -1.9456142 128.0 +-0.12473815 6.6573367 -1.9390588 128.0 +-0.083791882 6.6503096 -1.9367787 128.0 +-0.043008883 6.6545324 -1.9379187 128.0 +-0.0021770701 6.6575465 -1.9387738 128.0 +0.03871879 6.6651025 -1.9410539 128.0 +0.079730518 6.674324 -1.9439042 128.0 +0.12052443 6.6650839 -1.9413389 128.0 +0.16141835 6.6642189 -1.9413389 128.0 +0.20251098 6.6698098 -1.9433341 128.0 +0.2427648 6.6502419 -1.9379187 128.0 +0.28438556 6.6677799 -1.9436191 128.0 +0.32519916 6.6639948 -1.9430491 128.0 +0.36529115 6.6475177 -1.9387738 128.0 +0.40695214 6.659502 -1.9430491 128.0 +0.44554892 6.6234074 -1.9330734 128.0 +0.48674393 6.6281967 -1.9353535 128.0 +0.52702343 6.6203079 -1.9339285 128.0 +0.56903058 6.6331844 -1.9387738 128.0 +0.6109516 6.6429305 -1.942764 128.0 +0.6473853 6.5951767 -1.9296532 128.0 +0.69043142 6.6158667 -1.9370637 128.0 +0.73175114 6.6181746 -1.9390588 128.0 +0.77034146 6.5964236 -1.9339285 128.0 +0.80798936 6.5687404 -1.927088 128.0 +0.85320008 6.6016831 -1.9384887 128.0 +0.89459318 6.6029725 -1.9404839 128.0 +0.93468738 6.594512 -1.9396288 128.0 +0.97358745 6.5782228 -1.9364936 128.0 +1.0143713 6.5749669 -1.9373487 128.0 +1.0546955 6.5686193 -1.9373487 128.0 +1.0964012 6.5705328 -1.9399139 128.0 +1.1355505 6.5570707 -1.9379187 128.0 +1.175932 6.5509229 -1.9382037 128.0 +1.2154045 6.5398149 -1.9370637 128.0 +1.2538794 6.5237627 -1.9344984 128.0 +1.2981825 6.5375695 -1.9410539 128.0 +1.336153 6.5191522 -1.9379187 128.0 +1.3791043 6.5248976 -1.942194 128.0 +1.4203391 6.5219316 -1.9439042 128.0 +1.4630585 6.5252523 -1.9476093 128.0 +1.4953073 6.4825301 -1.9373487 128.0 +1.5341699 6.4695024 -1.9362086 128.0 +1.5738372 6.4599671 -1.9362086 128.0 +1.6099538 6.4362411 -1.9319333 128.0 +1.6484617 6.4225283 -1.9307932 128.0 +1.6897918 6.4197078 -1.9330734 128.0 +1.7274017 6.4027405 -1.9310782 128.0 +1.7712548 6.4086499 -1.9362086 128.0 +1.8087159 6.3912053 -1.9342134 128.0 +1.8481644 6.3809075 -1.9344984 128.0 +1.8864648 6.3666906 -1.9336435 128.0 +1.924104 6.350409 -1.9322183 128.0 +1.9627495 6.3375678 -1.9319333 128.0 +2.0033352 6.3308883 -1.9336435 128.0 +2.0421431 6.3184767 -1.9336435 128.0 +2.0826771 6.3112888 -1.9353535 128.0 +2.1201389 6.2947574 -1.9342134 128.0 +2.1543593 6.26894 -1.9302232 128.0 +2.190881 6.250176 -1.9285131 128.0 +2.2324178 6.2456408 -1.9313632 128.0 +2.2621622 6.2084112 -1.9239528 128.0 +2.301883 6.1989064 -1.9253778 128.0 +2.3371606 6.177494 -1.9230977 128.0 +2.369159 6.1478333 -1.9182523 128.0 +2.4145436 6.1528096 -1.9245228 128.0 +2.4536743 6.1414385 -1.9256629 128.0 +2.4938397 6.1324825 -1.927658 128.0 +2.5288544 6.1108656 -1.9256629 128.0 +2.565186 6.0925841 -1.9248078 128.0 +2.6062963 6.0855403 -1.927658 128.0 +2.6343975 6.0483446 -1.9208175 128.0 +2.6668003 6.0215502 -1.9173973 128.0 +2.706847 6.0120649 -1.9196775 128.0 +2.738498 5.9840131 -1.9159722 128.0 +2.7703114 5.9566689 -1.912552 128.0 +2.8076279 5.9412913 -1.9131221 128.0 +2.8481801 5.9325929 -1.9159722 128.0 +2.8828471 5.9115591 -1.9148321 128.0 +2.9267256 5.9092188 -1.9199625 128.0 +2.9668064 5.8988557 -1.9225277 128.0 +3.0116668 5.8976121 -1.928228 128.0 +3.0495622 5.8824253 -1.9293681 128.0 +3.0677381 5.8296762 -1.9179673 128.0 +3.0849302 5.7760816 -1.9062816 128.0 +3.1175721 5.7519879 -1.9045714 128.0 +3.161124 5.7478671 -1.9097018 128.0 +3.1832511 5.7049279 -1.9017212 128.0 +3.2092218 5.6694412 -1.8963059 128.0 +3.2563617 5.6712532 -1.9037164 128.0 +3.2954414 5.6586199 -1.9062816 128.0 +3.3315628 5.6407685 -1.9071367 128.0 +3.3276842 5.5560865 -1.8849051 128.0 +3.3706715 5.5503092 -1.8900355 128.0 +3.415221 5.5466609 -1.8960209 128.0 +3.4527442 5.5312924 -1.898016 128.0 +3.4963596 5.5253906 -1.9034314 128.0 +3.527091 5.4989929 -1.9017212 128.0 +3.5571077 5.4716225 -1.8997262 128.0 +3.5827014 5.4376888 -1.8954508 128.0 +3.6090777 5.405242 -1.8917456 128.0 +3.6453996 5.3877578 -1.8934557 128.0 +3.680016 5.36766 -1.8943107 128.0 +3.7281976 5.3670182 -1.9022913 128.0 +3.7770612 5.3667707 -1.9105569 128.0 +3.7854295 5.3091583 -1.898016 128.0 +3.7780764 5.2306695 -1.8777796 128.0 +3.8372748 5.2445159 -1.8914605 128.0 +3.8836541 5.2401214 -1.898586 128.0 +3.9019196 5.1977978 -1.8917456 128.0 +3.9447646 5.1882539 -1.897161 128.0 +4.0005078 5.1950846 -1.9088467 128.0 +4.0099044 5.1417222 -1.898016 128.0 +4.0336528 5.1072435 -1.8943107 128.0 +4.0673099 5.085391 -1.8954508 128.0 +4.0960226 5.0573597 -1.8943107 128.0 +4.1251531 5.0299087 -1.8934557 128.0 +4.1577759 5.0067143 -1.8943107 128.0 +4.1865673 4.9789081 -1.8934557 128.0 +4.2133093 4.9487476 -1.8917456 128.0 +4.2511067 4.9315128 -1.8951658 128.0 +4.2831774 4.9075017 -1.8960209 128.0 +4.3132086 4.8811283 -1.8960209 128.0 +4.3219829 4.8310008 -1.8866153 128.0 +4.3599105 4.8136249 -1.8903205 128.0 +4.384829 4.7818379 -1.8883253 128.0 +4.4219141 4.7632713 -1.8917456 128.0 +4.4569669 4.7423344 -1.8943107 128.0 +4.4866424 4.7155924 -1.8945957 128.0 +4.538105 4.711442 -1.9042864 128.0 +4.5675979 4.6841941 -1.9045714 128.0 +4.594233 4.6540337 -1.9037164 128.0 +4.6172814 4.6203332 -1.9014362 128.0 +4.6332717 4.5797887 -1.8963059 128.0 +4.657856 4.5479255 -1.8948808 128.0 +4.7029247 4.535892 -1.9020063 128.0 +4.7285857 4.5049667 -1.9011512 128.0 +4.749157 4.4693003 -1.898301 128.0 +4.794045 4.456388 -1.9054265 128.0 +4.8057632 4.4126287 -1.8991561 128.0 +4.8355885 4.3856335 -1.9002962 128.0 +4.8688335 4.3616352 -1.9028614 128.0 +4.8904786 4.3272333 -1.9008662 128.0 +4.9068322 4.2883153 -1.896876 128.0 +4.9374065 4.2618842 -1.898586 128.0 +4.9634643 4.2315087 -1.898586 128.0 +4.9937348 4.2046771 -1.9002962 128.0 +5.0083838 4.1647658 -1.8960209 128.0 +5.0301394 4.1309156 -1.8945957 128.0 +5.0501795 4.0957484 -1.8926007 128.0 +5.0707259 4.0610895 -1.8908905 128.0 +5.0978045 4.031683 -1.8917456 128.0 +5.1247134 4.0020971 -1.8926007 128.0 +5.1499324 3.9711623 -1.8928857 128.0 +5.1963215 3.9563229 -1.9011512 128.0 +5.1975107 3.9070897 -1.8926007 128.0 +5.2375522 3.8871181 -1.898586 128.0 +5.247385 3.8447132 -1.8934557 128.0 +5.2584491 3.8034577 -1.8888954 128.0 +5.3011923 3.7850418 -1.8960209 128.0 +5.3219662 3.750787 -1.8951658 128.0 +5.3661284 3.7328365 -1.9028614 128.0 +5.3604808 3.6803143 -1.8926007 128.0 +5.394866 3.6554167 -1.896876 128.0 +5.4315381 3.6318333 -1.9020063 128.0 +5.4905272 3.622714 -1.9151171 128.0 +5.4861412 3.5717032 -1.9057115 128.0 +5.4837561 3.5224371 -1.897161 128.0 +5.5028372 3.4871843 -1.8963059 128.0 +5.5233178 3.4528458 -1.8960209 128.0 +5.5550075 3.4254289 -1.8997262 128.0 +5.5824733 3.395263 -1.9020063 128.0 +5.6204648 3.3712966 -1.9079916 128.0 +5.6237178 3.3265018 -1.9020063 128.0 +5.653132 3.2972431 -1.9051415 128.0 +5.6840601 3.2687042 -1.9088467 128.0 +5.6764898 3.2181706 -1.8994411 128.0 +5.6961293 3.1832798 -1.8994411 128.0 +5.7281494 3.1552038 -1.9037164 128.0 +5.7625661 3.1282258 -1.9088467 128.0 +5.787569 3.0959723 -1.9108418 128.0 +5.8123927 3.0635297 -1.912837 128.0 +5.8098121 3.0167687 -1.9057115 128.0 +5.8367476 2.9854269 -1.9085617 128.0 +5.841258 2.9426596 -1.9040014 128.0 +5.8583455 2.906337 -1.9037164 128.0 +5.8855429 2.8749623 -1.9068516 128.0 +5.8996167 2.8371341 -1.9057115 128.0 +5.9047837 2.7951422 -1.9017212 128.0 +5.9270372 2.7612863 -1.9034314 128.0 +5.9569392 2.7308559 -1.9077066 128.0 +5.9762049 2.6954353 -1.9085617 128.0 +5.9891262 2.657161 -1.9074216 128.0 +6.0176182 2.6257269 -1.9114119 128.0 +6.05652 2.5985763 -1.9188224 128.0 +6.0697012 2.5602481 -1.9179673 128.0 +6.0888381 2.5244248 -1.9191074 128.0 +6.0997744 2.4852095 -1.9176823 128.0 +6.1122389 2.446667 -1.9168273 128.0 +6.1101861 2.4024558 -1.9114119 128.0 +6.1149755 2.3611231 -1.9082767 128.0 +6.136519 2.3262746 -1.9105569 128.0 +6.1273184 2.2798913 -1.9031464 128.0 +6.1546988 2.2471805 -1.9074216 128.0 +6.1855178 2.2155118 -1.912837 128.0 +6.1818118 2.1714838 -1.9074216 128.0 +6.2158651 2.140687 -1.9139771 128.0 +6.2415986 2.1067963 -1.9179673 128.0 +6.2407565 2.0639467 -1.9136921 128.0 +6.2414484 2.0217774 -1.9099869 128.0 +6.2546496 1.9837322 -1.9102719 128.0 +6.2731123 1.9473051 -1.912267 128.0 +6.2858601 1.9090557 -1.912552 128.0 +6.3002119 1.8712687 -1.9134071 128.0 +6.3069725 1.8312405 -1.9119819 128.0 +6.3328447 1.7966906 -1.9165423 128.0 +6.32897 1.7537065 -1.9119819 128.0 +6.3414617 1.7153398 -1.912552 128.0 +6.3546481 1.6771303 -1.9134071 128.0 +6.3685322 1.6390624 -1.9145471 128.0 +6.4063625 1.6069462 -1.9230977 128.0 +6.4142394 1.5671526 -1.9225277 128.0 +6.4237347 1.5277661 -1.9225277 128.0 +6.4217811 1.4857314 -1.9191074 128.0 +6.4307766 1.4463001 -1.9191074 128.0 +6.4488945 1.4088585 -1.9219576 128.0 +6.4452276 1.3666797 -1.9182523 128.0 +6.4675756 1.3300004 -1.9225277 128.0 +6.5028768 1.2957182 -1.9307932 128.0 +6.4871745 1.2512586 -1.9236678 128.0 +6.4984994 1.2121328 -1.9248078 128.0 +6.5095878 1.1729152 -1.9259479 128.0 +6.5147734 1.1326231 -1.9253778 128.0 +6.5064745 1.0900964 -1.9208175 128.0 +6.5357528 1.0538108 -1.927658 128.0 +6.5402012 1.0133951 -1.927088 128.0 +6.522593 0.96972638 -1.9199625 128.0 +6.542655 0.93171078 -1.9242377 128.0 +6.5397005 0.89038599 -1.9216726 128.0 +6.5507441 0.85098225 -1.9233828 128.0 +6.5701118 0.8125338 -1.927658 128.0 +6.5806856 0.77287489 -1.9293681 128.0 +6.5881619 0.73279941 -1.9302232 128.0 +6.5896745 0.69206154 -1.9293681 128.0 +6.5880733 0.65105045 -1.927658 128.0 +6.5862174 0.61008507 -1.9259479 128.0 +6.5812421 0.5689199 -1.9233828 128.0 +6.5941639 0.52929264 -1.9262329 128.0 +6.6068463 0.48952827 -1.9290831 128.0 +6.6202455 0.4496929 -1.9322183 128.0 +6.6276636 0.40935799 -1.9336435 128.0 +6.6290936 0.36863068 -1.9333584 128.0 +6.6408043 0.32842016 -1.9362086 128.0 +6.6388636 0.28750157 -1.9350685 128.0 +6.6443343 0.24690256 -1.9362086 128.0 +6.6438079 0.20606993 -1.9356385 128.0 +6.6459055 0.16532409 -1.9359236 128.0 +6.6429615 0.12447131 -1.9347835 128.0 +6.6483927 0.083768062 -1.9362086 128.0 +6.6363206 0.042894356 -1.9325033 128.0 +6.6613808 0.0021776557 -1.9399139 128.0 +6.6459327 -0.038604088 -1.9353535 128.0 +6.6350274 -0.079254262 -1.9322183 128.0 +6.6324997 -0.11992954 -1.9316483 128.0 +6.6345139 -0.16069366 -1.9325033 128.0 +6.6372352 -0.20151627 -1.9336435 128.0 +6.6435366 -0.24251886 -1.9359236 128.0 +6.640008 -0.28319624 -1.9353535 128.0 +6.6362309 -0.32383946 -1.9347835 128.0 +6.6168914 -0.36360285 -1.9296532 128.0 +6.6164494 -0.40431374 -1.9302232 128.0 +6.6100187 -0.44464591 -1.9290831 128.0 +6.6129017 -0.48561805 -1.9307932 128.0 +6.6021533 -0.52557504 -1.9285131 128.0 +6.6226792 -0.56812751 -1.9356385 128.0 +6.607615 -0.60769743 -1.9322183 128.0 +6.6047158 -0.64832336 -1.9325033 128.0 +6.6120534 -0.69003284 -1.9359236 128.0 +6.6153164 -0.73143464 -1.9382037 128.0 +6.6097517 -0.77190036 -1.9379187 128.0 +6.5963292 -0.81138784 -1.9353535 128.0 +6.5988312 -0.85283107 -1.9376336 128.0 +6.5887251 -0.89266038 -1.9362086 128.0 +6.5688887 -0.93105108 -1.9319333 128.0 +6.5763264 -0.97330648 -1.9359236 128.0 +6.5787563 -1.0149566 -1.9384887 128.0 +6.5506382 -1.051805 -1.9319333 128.0 +6.5639148 -1.0952957 -1.9379187 128.0 +6.5627375 -1.1365329 -1.9396288 128.0 +6.5556402 -1.1767797 -1.9396288 128.0 +6.5454688 -1.2164563 -1.9387738 128.0 +6.5322342 -1.2555091 -1.9370637 128.0 +6.5497913 -1.3006116 -1.9447591 128.0 +6.5276031 -1.3378866 -1.9404839 128.0 +6.5155196 -1.3771205 -1.9393438 128.0 +6.4947724 -1.4144194 -1.9356385 128.0 +6.4990649 -1.4571822 -1.9396288 128.0 +6.4881339 -1.496601 -1.9390588 128.0 +6.4611087 -1.5321779 -1.9336435 128.0 +6.4404111 -1.5690691 -1.9302232 128.0 +6.4697151 -1.6183331 -1.942194 128.0 +6.4624486 -1.6587155 -1.9430491 128.0 +6.4679065 -1.7024877 -1.9478943 128.0 +6.4119945 -1.7299 -1.9339285 128.0 +6.4234314 -1.7753429 -1.940769 128.0 +6.4004278 -1.8113277 -1.9370637 128.0 +6.3910346 -1.8510996 -1.9376336 128.0 +6.3676095 -1.8867372 -1.9339285 128.0 +6.350409 -1.924104 -1.9322183 128.0 +6.2991142 -1.950833 -1.9199625 128.0 +6.213007 -1.9660103 -1.896876 128.0 +6.1360736 -1.9831548 -1.8766396 128.0 +5.9836206 -1.9744858 -1.8327466 128.0 +5.8687515 -1.9765729 -1.8005394 128.0 +5.7957821 -1.9916632 -1.7814431 128.0 +5.7364182 -2.0106916 -1.7666222 128.0 +5.6743331 -2.0280991 -1.750946 128.0 +5.6257606 -2.0497456 -1.7395453 128.0 +5.5654564 -2.0665331 -1.7244393 128.0 +5.4881277 -2.076211 -1.7039179 128.0 +5.4511375 -2.1005359 -1.6962224 128.0 +5.4131641 -2.1241353 -1.6882418 128.0 +5.3217049 -2.1260011 -1.6631601 128.0 +5.2819242 -2.1477773 -1.6546096 128.0 +5.1827416 -2.1445787 -1.6269627 128.0 +4.9645486 -2.0900114 -1.5608382 128.0 +4.8846712 -2.0917428 -1.5391767 128.0 +4.786509 -2.0845325 -1.5115299 128.0 +4.6351657 -2.0525115 -1.4664968 128.0 +4.6294761 -2.0840631 -1.4687769 128.0 +4.5059185 -2.0617537 -1.4325795 128.0 +4.414968 -2.0529699 -1.4069278 128.0 +4.3225651 -2.0423298 -1.3807061 128.0 +4.2520623 -2.0410092 -1.3616097 128.0 +4.208446 -2.0519304 -1.3513491 128.0 +4.160563 -2.060266 -1.3396633 128.0 +4.0605063 -2.0418112 -1.3105913 128.0 +3.9949799 -2.0396507 -1.2929201 128.0 +3.9679244 -2.0566227 -1.2880747 128.0 +3.9611676 -2.0840564 -1.2900699 128.0 +3.8916631 -2.0780575 -1.2709737 128.0 +3.9344521 -2.1320522 -1.2897849 128.0 +3.7373793 -2.0549634 -1.2273657 128.0 +3.7447867 -2.0890696 -1.2342062 128.0 +3.6343119 -2.0567458 -1.200859 128.0 +3.5808969 -2.0556123 -1.186893 128.0 +3.5317752 -2.0563145 -1.174352 128.0 +3.4943342 -2.0633183 -1.1658015 128.0 +3.4618747 -2.0728967 -1.1589611 128.0 +3.4253342 -2.0796664 -1.1506954 128.0 +3.3798642 -2.0805364 -1.1392947 128.0 +3.3418312 -2.0854969 -1.1304592 128.0 +3.2803786 -2.0752017 -1.113358 128.0 +3.1183388 -1.9995267 -1.0606294 128.0 +3.1285105 -2.0332551 -1.06861 128.0 +3.1031706 -2.043973 -1.0640496 128.0 +3.1120913 -2.0773501 -1.0717452 128.0 +3.2183535 -2.1769993 -1.114498 128.0 +3.1322119 -2.1468284 -1.0882763 128.0 +3.0819852 -2.1402984 -1.0748804 128.0 +3.0437143 -2.1415112 -1.0657598 128.0 +3.012569 -2.1473448 -1.0592043 128.0 +2.981467 -2.1528773 -1.0526489 128.0 +2.9712949 -2.1733954 -1.0537889 128.0 +2.9586732 -2.1921568 -1.0540739 128.0 +2.9712265 -2.2298396 -1.0637646 128.0 +2.9727468 -2.2596343 -1.069465 128.0 +3.0150173 -2.3211184 -1.0905564 128.0 +3.0143216 -2.3501873 -1.0956868 128.0 +3.0021007 -2.3704212 -1.0965419 128.0 +2.9695368 -2.3744254 -1.0897014 128.0 +2.9243767 -2.3678617 -1.0780156 128.0 +2.8890436 -2.3687377 -1.0700351 128.0 +2.8700311 -2.3827448 -1.0683249 128.0 +2.8450875 -2.3916719 -1.0643346 128.0 +2.8442237 -2.4208927 -1.0697501 128.0 +2.8140719 -2.4251535 -1.0637646 128.0 +2.8171897 -2.4581351 -1.0708901 128.0 +2.7848179 -2.4601388 -1.0640496 128.0 +2.7660992 -2.4739838 -1.0626246 128.0 +2.73524 -2.4767504 -1.0563542 128.0 +2.7242296 -2.4973745 -1.0580642 128.0 +2.7453775 -2.5479608 -1.0728853 128.0 +2.7164233 -2.5522835 -1.0674698 128.0 +2.7111263 -2.5788157 -1.0717452 128.0 +2.7380469 -2.6366372 -1.0894164 128.0 +2.6772177 -2.6098833 -1.0708901 128.0 +2.6420567 -2.6074033 -1.0629096 128.0 +2.6307533 -2.6283092 -1.0649047 128.0 +2.6165979 -2.6464472 -1.0657598 128.0 +2.5942848 -2.6562791 -1.0631946 128.0 +2.5679579 -2.6617968 -1.0589193 128.0 +2.5456276 -2.6712563 -1.0563542 128.0 +2.5370705 -2.6952035 -1.0597744 128.0 +2.5452795 -2.7374022 -1.070605 128.0 +2.5076942 -2.7303712 -1.0614845 128.0 +2.4915376 -2.7464168 -1.0617695 128.0 +2.4778361 -2.7652233 -1.0631946 128.0 +2.4620924 -2.7818108 -1.0637646 128.0 +2.4405627 -2.7918127 -1.0617695 128.0 +2.4183772 -2.8009295 -1.0594894 128.0 +2.3930631 -2.8062317 -1.0557841 128.0 +2.3696268 -2.813529 -1.0529339 128.0 +2.3480296 -2.8228562 -1.0509387 128.0 +2.32884 -2.8349876 -1.0500838 128.0 +2.3126085 -2.850713 -1.0506537 128.0 +2.2998657 -2.8708353 -1.0529339 128.0 +2.2822073 -2.8848929 -1.0529339 128.0 +2.2650528 -2.8995974 -1.053219 128.0 +2.2407815 -2.9050903 -1.0500838 128.0 +2.2234945 -2.9195476 -1.0503687 128.0 +2.2032354 -2.9300704 -1.0492287 128.0 +2.1874998 -2.9466133 -1.0503687 128.0 +2.1756086 -2.9684863 -1.053504 128.0 +2.1629696 -2.9895473 -1.0563542 128.0 +2.1301074 -2.9824779 -1.0489436 128.0 +2.1156316 -3.000977 -1.0509387 128.0 +2.0895169 -3.0028844 -1.0469484 128.0 +2.0650859 -3.0069554 -1.0438132 128.0 +2.0498219 -3.0243318 -1.0455234 128.0 +2.034955 -3.0424306 -1.0475185 128.0 +2.0326087 -3.0796642 -1.0563542 128.0 +2.0058317 -3.0800276 -1.0520788 128.0 +1.9894847 -3.0963099 -1.053504 128.0 +1.9694227 -3.1068394 -1.0529339 128.0 +1.95591 -3.1278067 -1.0560691 128.0 +1.9452314 -3.1536205 -1.0609144 128.0 +1.9293302 -3.1712301 -1.0629096 128.0 +1.9201865 -3.2002721 -1.068895 128.0 +1.9019774 -3.2144692 -1.0697501 128.0 +1.9029776 -3.2616856 -1.0820059 128.0 +1.8265611 -3.1752415 -1.0483736 128.0 +1.7772712 -3.133852 -1.0304173 128.0 +1.7598786 -3.1480453 -1.0315574 128.0 +1.7400671 -3.1579449 -1.0312724 128.0 +1.7288862 -3.183727 -1.0364028 128.0 +1.7025392 -3.1815963 -1.0321275 128.0 +1.7039838 -3.2318404 -1.0455234 128.0 +1.6841215 -3.2422349 -1.0455234 128.0 +1.6589597 -3.2422659 -1.0421032 128.0 +1.6407588 -3.2558086 -1.0432433 128.0 +1.6181957 -3.2606623 -1.0415331 128.0 +1.5943731 -3.262778 -1.038968 128.0 +1.5813825 -3.2871859 -1.0438132 128.0 +1.5501142 -3.2734334 -1.0361178 128.0 +1.5461848 -3.3176403 -1.0475185 128.0 +1.5261983 -3.3279366 -1.0478035 128.0 +1.4986589 -3.3215096 -1.0426732 128.0 +1.4638734 -3.2982221 -1.0321275 128.0 +1.3761681 -3.1525087 -0.98196411 128.0 +1.331865 -3.102752 -0.96315283 128.0 +1.3604654 -3.2239196 -0.99963528 128.0 +1.396067 -3.3659174 -1.0426732 128.0 +1.3934631 -3.4188073 -1.0569242 128.0 +1.3521645 -3.3765664 -1.040678 128.0 +1.332122 -3.3865838 -1.0412481 128.0 +1.3099369 -3.3911169 -1.0401081 128.0 +1.2826521 -3.3820601 -1.0346926 128.0 +1.290609 -3.4671297 -1.0592043 128.0 +1.2854115 -3.5191052 -1.0731703 128.0 +1.2608869 -3.5188041 -1.070605 128.0 +1.2453049 -3.5436583 -1.0760205 128.0 +1.2207304 -3.5430756 -1.0734553 128.0 +1.200193 -3.554132 -1.0745953 128.0 +1.1690376 -3.5332165 -1.0657598 128.0 +1.1461554 -3.5366752 -1.0646197 128.0 +1.122985 -3.5390728 -1.0631946 128.0 +1.0981245 -3.5358264 -1.0600594 128.0 +1.0441158 -3.4361019 -1.0269971 128.0 +0.99000973 -3.3312573 -0.99250978 128.0 +0.96287322 -3.3142555 -0.98538435 128.0 +0.94251919 -3.320101 -0.98538435 128.0 +0.92366445 -3.3313644 -0.98709446 128.0 +0.9122104 -3.3702805 -0.99735516 128.0 +0.92109036 -3.4879608 -1.0318425 128.0 +0.77815044 -3.0210354 -0.88676769 128.0 +0.78080606 -3.1103613 -0.91270441 128.0 +0.8724184 -3.5685749 -1.0515088 128.0 +0.85693252 -3.6009047 -1.0597744 128.0 +0.83503753 -3.607029 -1.0600594 128.0 +0.81288952 -3.6120849 -1.0600594 128.0 +0.79929626 -3.6563363 -1.0720302 128.0 +0.777641 -3.6649227 -1.0731703 128.0 +0.75205231 -3.6546028 -1.06861 128.0 +0.72998822 -3.6610286 -1.06918 128.0 +0.70479029 -3.6513207 -1.0649047 128.0 +0.68114376 -3.6489804 -1.0629096 128.0 +0.65874124 -3.6530912 -1.0629096 128.0 +0.63467377 -3.6476204 -1.0600594 128.0 +0.6211406 -3.7043869 -1.0760205 128.0 +0.59702748 -3.6996117 -1.0734553 128.0 +0.57299644 -3.69468 -1.0708901 128.0 +0.54778129 -3.6810601 -1.0657598 128.0 +0.52666909 -3.6947906 -1.068895 128.0 +0.50011402 -3.6694591 -1.0603443 128.0 +0.47845244 -3.6791127 -1.0623395 128.0 +0.45586884 -3.6819789 -1.0623395 128.0 +0.43349132 -3.6866109 -1.0629096 128.0 +0.41424802 -3.7196867 -1.0720302 128.0 +0.40271083 -3.829881 -1.1042373 128.0 +0.38240284 -3.864712 -1.113928 128.0 +0.35647616 -3.8431244 -1.1068026 128.0 +0.3243205 -3.7459221 -1.0771605 128.0 +0.29689148 -3.6924248 -1.0606294 128.0 +0.27097929 -3.6502049 -1.0475185 128.0 +0.2490305 -3.658493 -1.0495137 128.0 +0.22952388 -3.7077878 -1.0637646 128.0 +0.20857278 -3.7416661 -1.0734553 128.0 +0.18674271 -3.765852 -1.0802958 128.0 +0.16412801 -3.7784185 -1.083716 128.0 +0.14094096 -3.7793546 -1.083716 128.0 +0.11739405 -3.7686512 -1.0802958 128.0 +0.094149485 -3.7645097 -1.0788707 128.0 +0.071227007 -3.7746 -1.0817208 128.0 +0.04804134 -3.7730491 -1.0811508 128.0 +0.024895471 -3.7742312 -1.0814358 128.0 +0.0017338258 -3.7551427 -1.0757354 128.0 +-0.021244243 -3.744539 -1.0726002 128.0 +-0.044115357 -3.7357121 -1.0700351 128.0 +-0.067193896 -3.7439964 -1.0726002 128.0 +-0.090399131 -3.7530959 -1.0754504 128.0 +-0.11409888 -3.7745063 -1.0820059 128.0 +-0.13627291 -3.7469146 -1.0740253 128.0 +-0.159302 -3.7469656 -1.0743103 128.0 +-0.18200862 -3.7401733 -1.0726002 128.0 +-0.20516551 -3.7428143 -1.0737402 128.0 +-0.22818576 -3.7424419 -1.0740253 128.0 +-0.25275716 -3.7648799 -1.0811508 128.0 +-0.27817538 -3.7948041 -1.0905564 128.0 +-0.29924393 -3.7653167 -1.0822909 128.0 +-0.32734951 -3.8216646 -1.0996771 128.0 +-0.35000107 -3.8109939 -1.0971119 128.0 +-0.3699075 -3.7734795 -1.0865662 128.0 +-0.39474833 -3.7873452 -1.0914115 128.0 +-0.41513097 -3.759129 -1.083716 128.0 +-0.43974763 -3.7698395 -1.0877062 128.0 +-0.46580034 -3.7908535 -1.0948317 128.0 +-0.48757553 -3.7765169 -1.0914115 128.0 +-0.51048094 -3.7715545 -1.0908414 128.0 +-0.54196322 -3.8271902 -1.1085126 128.0 +-0.84713787 -5.7248707 -1.6799762 128.0 +-0.88254166 -5.7214599 -1.6805463 128.0 +-0.91595793 -5.7055268 -1.6774111 128.0 +-0.95000154 -5.6941266 -1.675701 128.0 +-0.98426729 -5.6844125 -1.6745609 128.0 +-1.0196362 -5.6810966 -1.675416 128.0 +-1.0523719 -5.663425 -1.6719958 128.0 +-1.0880077 -5.6615672 -1.6734208 128.0 +-1.1240338 -5.661366 -1.675416 128.0 +-1.1585575 -5.6534233 -1.675131 128.0 +-1.1920342 -5.6405816 -1.6734208 128.0 +-1.2251929 -5.6266055 -1.6714257 128.0 +-1.2609532 -5.6245933 -1.6731358 128.0 +-1.2995379 -5.6344957 -1.6785512 128.0 +-1.3320941 -5.6180224 -1.6759861 128.0 +-1.3758495 -5.6479239 -1.6876718 128.0 +-1.4074528 -5.6272879 -1.6839665 128.0 +-1.4402854 -5.6120472 -1.6819714 128.0 +-1.4771347 -5.6123729 -1.6848216 128.0 +-1.5070467 -5.5865469 -1.6796912 128.0 +-1.5402747 -5.5734992 -1.6785512 128.0 +-1.5739218 -5.562099 -1.6779811 128.0 +-1.6133571 -5.5707493 -1.6836815 128.0 +-1.6496879 -5.5680971 -1.6859617 128.0 +-1.686047 -5.5652084 -1.6882418 128.0 +-1.2233562 -3.9516003 -1.1891731 128.0 +-1.2472904 -3.9431059 -1.1888881 128.0 +-1.7787604 -5.5040464 -1.6791213 128.0 +-1.8239193 -5.5276155 -1.6899519 128.0 +-1.8274969 -5.4263959 -1.6617351 128.0 +-1.8626282 -5.4205189 -1.6634451 128.0 +-1.9072733 -5.4415503 -1.6737058 128.0 +-1.9409488 -5.4306474 -1.6739908 128.0 +-1.971936 -5.4123321 -1.6719958 128.0 +-2.0111172 -5.4163036 -1.677126 128.0 +-2.0453312 -5.4065509 -1.6779811 128.0 +-2.0784667 -5.3938994 -1.6779811 128.0 +-2.1146767 -5.3890743 -1.6805463 128.0 +-2.1477036 -5.3759975 -1.6805463 128.0 +-2.1806498 -5.3627186 -1.6805463 128.0 +-2.2175472 -5.3589787 -1.6836815 128.0 +-1.2844099 -3.0520997 -0.94377154 128.0 +-1.3031131 -3.0441613 -0.94377154 128.0 +-1.3210013 -3.0343509 -0.94320148 128.0 +-2.3437357 -5.2924275 -1.6802613 128.0 +-2.3651426 -5.2534761 -1.6722808 128.0 +-2.4013228 -5.2475805 -1.675131 128.0 +-1.6114048 -3.4659615 -1.0956868 128.0 +-1.6056018 -3.3988161 -1.0768756 128.0 +-1.6189563 -3.373348 -1.0717452 128.0 +-1.6358416 -3.3555975 -1.06918 128.0 +-1.6529958 -3.3386261 -1.0668999 128.0 +-1.6730193 -3.3275645 -1.0666149 128.0 +-1.6934054 -3.3172364 -1.0666149 128.0 +-1.7375582 -3.3527315 -1.0820059 128.0 +-1.7670279 -3.3589702 -1.0877062 128.0 +-2.1571076 -4.0396099 -1.320852 128.0 +-2.1909916 -4.0431504 -1.3265524 128.0 +-2.8081136 -5.1062579 -1.6919471 128.0 +-2.8277123 -5.0680079 -1.6848216 128.0 +-2.857811 -5.0488935 -1.6842515 128.0 +-2.8882592 -5.0304322 -1.6839665 128.0 +-2.919071 -5.0126157 -1.6839665 128.0 +-2.9497728 -4.9946103 -1.6839665 128.0 +-2.9838123 -4.982172 -1.6859617 128.0 +-2.9929256 -4.928545 -1.6737058 128.0 +-3.0231102 -4.9100881 -1.6737058 128.0 +-3.0536888 -4.8922591 -1.6739908 128.0 +-3.0903144 -4.8839583 -1.6776961 128.0 +-3.1238472 -4.8705516 -1.6796912 128.0 +-3.1521058 -4.8488817 -1.6788362 128.0 +-3.1833811 -4.8318505 -1.6796912 128.0 +-3.2108393 -4.8090386 -1.6785512 128.0 +-3.2343764 -4.7805152 -1.675416 128.0 +-3.259311 -4.7542558 -1.6731358 128.0 +-3.2922502 -4.7396774 -1.675131 128.0 +-3.3251328 -4.7248735 -1.677126 128.0 +-3.3601842 -4.712966 -1.6802613 128.0 +-3.3721976 -4.6689515 -1.6717107 128.0 +-2.2067976 -3.0169294 -1.070605 128.0 +-2.2246966 -3.002562 -1.0703201 128.0 +-3.5116718 -4.6781368 -1.6985025 128.0 +-3.531606 -4.6450577 -1.6942272 128.0 +-3.5612109 -4.6248198 -1.6947973 128.0 +-3.5960069 -4.6111946 -1.6979325 128.0 +-3.629581 -4.5958118 -1.7004976 128.0 +-3.6660955 -4.5839329 -1.7044879 128.0 +-3.6826882 -4.5472016 -1.6990726 128.0 +-3.6965368 -4.5074754 -1.6925172 128.0 +-3.7314746 -4.4935565 -1.6959374 128.0 +-3.7602103 -4.472043 -1.6965073 128.0 +-3.784472 -4.4452381 -1.6950823 128.0 +-3.8179357 -4.4291925 -1.6979325 128.0 +-3.8500843 -4.411459 -1.7002126 128.0 +-3.8580351 -4.3662071 -1.6916621 128.0 +-3.8758039 -4.3324533 -1.6876718 128.0 +-3.9209785 -4.3291893 -1.6959374 128.0 +-3.9209025 -4.2760887 -1.6842515 128.0 +-3.9398913 -4.2442241 -1.6811163 128.0 +-3.9599502 -4.2136841 -1.6785512 128.0 +-3.9943213 -4.1983333 -1.6822565 128.0 +-4.0180111 -4.1716747 -1.6814014 128.0 +-4.0234537 -4.1263576 -1.6728508 128.0 +-4.0385942 -4.091362 -1.6685755 128.0 +-4.0744648 -4.0773506 -1.6731358 128.0 +-4.1103153 -4.0630531 -1.6776961 128.0 +-4.1193919 -4.0223575 -1.6711407 128.0 +-4.1446853 -3.9976707 -1.6714257 128.0 +-4.1705246 -3.9734862 -1.6719958 128.0 +-4.1801658 -3.9340293 -1.6660104 128.0 +-4.2168651 -3.9200509 -1.6711407 128.0 +-4.2316585 -3.8856769 -1.6674354 128.0 +-4.2497396 -3.8544881 -1.6651553 128.0 +-4.26617 -3.8219454 -1.6623051 128.0 +-4.2873869 -3.7937915 -1.66145 128.0 +-4.3033657 -3.761107 -1.6585999 128.0 +-4.3256369 -3.734005 -1.6583148 128.0 +-4.3440895 -3.7036626 -1.6566046 128.0 +-4.3755331 -3.684345 -1.6600249 128.0 +-4.3928976 -3.6531386 -1.6580298 128.0 +-4.4226389 -3.6321976 -1.66088 128.0 +-4.4575 -3.6152542 -1.6657254 128.0 +-4.4878297 -3.594425 -1.6688606 128.0 +-4.5113039 -3.5680096 -1.6694306 128.0 +-4.5678678 -3.5673935 -1.6825415 128.0 +-4.5820794 -3.5334468 -1.6796912 128.0 +-4.6135893 -3.5128117 -1.6833965 128.0 +-4.6342907 -3.4838614 -1.6831114 128.0 +-4.6409535 -3.4445093 -1.6776961 128.0 +-4.6666412 -3.4193664 -1.6794063 128.0 +-4.6805434 -3.3856134 -1.676841 128.0 +-4.723074 -3.372422 -1.6848216 128.0 +-4.7397599 -3.3406179 -1.6833965 128.0 +-4.7593813 -3.3109252 -1.6831114 128.0 +-4.784349 -3.2849143 -1.6848216 128.0 +-4.7964787 -3.2501209 -1.6819714 128.0 +-4.8227062 -3.2248902 -1.6842515 128.0 +-4.8328009 -3.188905 -1.6808313 128.0 +-4.8490634 -3.1571002 -1.6796912 128.0 +-4.8973799 -3.1459315 -1.6899519 128.0 +-4.9117327 -3.1127448 -1.6882418 128.0 +-4.9144821 -3.0723894 -1.6825415 128.0 +-4.9707761 -3.0653129 -1.6956524 128.0 +-4.9575486 -3.0153353 -1.6845366 128.0 +-4.9882879 -2.9922533 -1.6888119 128.0 +-5.0065541 -2.9615893 -1.6888119 128.0 +-5.0130391 -2.9240551 -1.6848216 128.0 +-5.0391965 -2.8980174 -1.6876718 128.0 +-5.0768976 -2.8783851 -1.6945122 128.0 +-5.1011581 -2.8509192 -1.6967924 128.0 +-5.1387067 -2.8306608 -1.7036328 128.0 +-5.1829381 -2.8137059 -1.7127535 128.0 +-5.1882715 -2.7755234 -1.7087632 128.0 +-5.2331891 -2.7583802 -1.7181689 128.0 +-5.2432094 -2.7226856 -1.7158887 128.0 +-5.267498 -2.6943896 -1.7184539 128.0 +-5.2899241 -2.6650357 -1.720449 128.0 +-5.3233514 -2.6410439 -1.7261494 128.0 +-5.3463469 -2.6116951 -1.7284296 128.0 +-5.3752298 -2.5850704 -1.7327049 128.0 +-5.4074526 -2.559829 -1.7381202 128.0 +-5.4221888 -2.5261967 -1.7378352 128.0 +-5.4637289 -2.5048578 -1.7463858 128.0 +-5.4746265 -2.4693162 -1.7449607 128.0 +-5.504571 -2.4422836 -1.749806 128.0 +-5.5431747 -2.4188082 -1.7575015 128.0 +-5.5649595 -2.3877726 -1.7597817 128.0 +-5.5848055 -2.3558159 -1.7614918 128.0 +-5.6053538 -2.3240726 -1.7634869 128.0 +-5.6079679 -2.2849355 -1.7597817 128.0 +-5.625442 -2.2519069 -1.7609217 128.0 +-5.6159587 -2.2082322 -1.7535112 128.0 +-5.6472874 -2.1806338 -1.7592117 128.0 +-5.6928296 -2.1581676 -1.7694724 128.0 +-5.6296 -2.0947976 -1.7452457 128.0 +-5.6450486 -2.0612013 -1.7461008 128.0 +-5.682858 -2.0355706 -1.7540812 128.0 +-5.7476969 -2.0190785 -1.7706124 128.0 +-5.7953243 -1.9959396 -1.7817281 128.0 +-5.8537822 -1.9759684 -1.7962642 128.0 +-5.9249525 -1.9595658 -1.8147904 128.0 +-6.0162024 -1.9488581 -1.8395871 128.0 +-6.1651053 -1.9553496 -1.88234 128.0 +-6.2731123 -1.9473051 -1.912267 128.0 +-6.3757463 -1.9363374 -1.9404839 128.0 +-6.48491 -1.9260917 -1.970696 128.0 +-6.5177794 -1.8924083 -1.9772514 128.0 +-6.539412 -1.8552563 -1.9803866 128.0 +-6.5349684 -1.8107479 -1.9755412 128.0 +-6.5376282 -1.7683649 -1.9729761 128.0 +-6.5594778 -1.7311507 -1.9763963 128.0 +-6.5170627 -1.6772615 -1.9601502 128.0 +-6.5523348 -1.6435342 -1.9678457 128.0 +-6.5706763 -1.6053449 -1.9704109 128.0 +-6.5897284 -1.5672139 -1.9732611 128.0 +-6.6001549 -1.5269665 -1.9735461 128.0 +-6.605659 -1.4855993 -1.972406 128.0 +-6.6240149 -1.447084 -1.9752562 128.0 +-6.5755692 -1.394294 -1.95787 128.0 +-6.619679 -1.3612512 -1.9687008 128.0 +-6.6175661 -1.3185495 -1.9655656 128.0 +-6.6377678 -1.2802778 -1.9692708 128.0 +-6.6662288 -1.2433882 -1.9755412 128.0 +-6.6558089 -1.1992352 -1.9701259 128.0 +-6.6639862 -1.1585374 -1.9704109 128.0 +-6.6596251 -1.1157275 -1.9669907 128.0 +-6.6635065 -1.0743866 -1.9661356 128.0 +-6.6661844 -1.0328934 -1.9649955 128.0 +-6.6572266 -0.98971844 -1.9604353 128.0 +-6.6736131 -0.95033652 -1.9635705 128.0 +-6.6907158 -0.91091979 -1.9669907 128.0 +-6.6847725 -0.86836946 -1.9635705 128.0 +-6.7099519 -0.82980317 -1.9695559 128.0 +-6.7139654 -0.78850442 -1.9692708 128.0 +-6.7110558 -0.74644709 -1.9669907 128.0 +-6.7298088 -0.70675397 -1.9712659 128.0 +-6.7244802 -0.66450638 -1.9684157 128.0 +-6.7465653 -0.62490982 -1.9738312 128.0 +-6.7321281 -0.5819366 -1.9684157 128.0 +-6.7307949 -0.54023546 -1.9669907 128.0 +-6.7454538 -0.49977386 -1.9704109 128.0 +-6.7388301 -0.45772719 -1.9675608 128.0 +-6.7338581 -0.4158985 -1.9652805 128.0 +-6.7334123 -0.37441334 -1.9644254 128.0 +-6.7279239 -0.33271343 -1.9621453 128.0 +-6.7260084 -0.29126018 -1.9610052 128.0 +-6.7247953 -0.24987841 -1.9601502 128.0 +-6.7003341 -0.20781332 -1.9524547 128.0 +-6.7033997 -0.16674426 -1.9530247 128.0 +-0 -0 -0 128.0 +-6.734653 -0.084839866 -1.9618603 128.0 +-6.741756 -0.043557409 -1.9638555 128.0 +-6.7380624 -0.0021893661 -1.9627154 128.0 +-6.7293224 0.039103035 -1.9601502 128.0 +-6.7270389 0.080369413 -1.9595802 128.0 +-6.7225857 0.12157425 -1.9584401 128.0 +-6.7293792 0.16300799 -1.9607203 128.0 +-6.714839 0.20388602 -1.95673 128.0 +-6.724956 0.24550527 -1.9601502 128.0 +-6.7089586 0.28614905 -1.9558749 128.0 +-6.7003751 0.32698086 -1.9538798 128.0 +-6.6963282 0.36798191 -1.9533098 128.0 +-6.7111654 0.41011822 -1.9584401 128.0 +-6.6731377 0.44890293 -1.9478943 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-6.4821138 -0.044324111 -1.9655252 128.0 +-6.4832191 -0.0045505031 -1.9658209 128.0 +-6.4745278 0.035183679 -1.9631594 128.0 +-6.4713244 0.074876994 -1.9622724 128.0 +-6.4678779 0.11453232 -1.9613853 128.0 +-6.4641881 0.15414818 -1.9604981 128.0 +-6.4631205 0.19380878 -1.9604981 128.0 +-6.460855 0.23342766 -1.9602025 128.0 +-6.4583468 0.27302605 -1.9599067 128.0 +-6.4575043 0.31269473 -1.9602025 128.0 +-6.4382944 0.35137537 -1.9548796 128.0 +-6.4140859 0.38954282 -1.9480784 128.0 +-6.4268255 0.42991078 -1.9528097 128.0 +-6.4221611 0.46919784 -1.9522183 128.0 +-6.4305887 0.50949937 -1.9557668 128.0 +-6.4568481 0.55146533 -1.9649338 128.0 +-6.4685636 0.59246659 -1.9696651 128.0 +-6.4828706 0.63391107 -1.9752835 128.0 +-6.5130649 0.67723191 -1.985929 128.0 +-6.4973927 0.71592778 -1.9823805 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-6.4153848 0.86672872 -1.9628638 128.0 +-6.4023786 0.9050073 -1.9604981 128.0 +-6.3711886 0.94050944 -1.9525141 128.0 +-6.3634095 0.97929418 -1.9519225 128.0 +-6.3346429 1.0146961 -1.9448256 128.0 +-6.3179317 1.0518206 -1.9415728 128.0 +-6.3151245 1.0912173 -1.9427556 128.0 +-6.3327584 1.1343232 -1.9504441 128.0 +-6.3341327 1.1747262 -1.9531054 128.0 +-6.3277435 1.2137495 -1.9534011 128.0 +-6.3164287 1.2518103 -1.9522183 128.0 +-6.3142443 1.291692 -1.9539925 128.0 +-6.3108735 1.3313968 -1.955471 128.0 +-6.2689795 1.3627914 -1.9448256 128.0 +-6.2903309 1.4079064 -1.9542882 128.0 +-6.2787809 1.4458337 -1.9534011 128.0 +-6.2595658 1.4819123 -1.9501483 128.0 +-6.2466421 1.5193894 -1.9489655 128.0 +-6.2381287 1.5579209 -1.9492612 128.0 +-6.2136459 1.5923746 -1.9445299 128.0 +-6.2203884 1.6348405 -1.9498526 128.0 +-6.2120852 1.6734742 -1.9504441 128.0 +-6.2109089 1.7141001 -1.9534011 128.0 +-6.1965971 1.7511384 -1.9522183 128.0 +-0 0 -0 128.0 +-6.1709771 1.8259643 -1.9510355 128.0 +-0 0 -0 128.0 +-6.1344156 1.8973211 -1.9465998 128.0 +-6.0953317 1.9262913 -1.9377286 128.0 +-6.0688515 1.9589611 -1.9329972 128.0 +-6.0485516 1.9934714 -1.9303359 128.0 +-6.0579367 2.0378556 -1.9374329 128.0 +-6.0453186 2.0749881 -1.9374329 128.0 +-6.0135384 2.1054146 -1.931223 128.0 +-6.0059047 2.1442001 -1.9329972 128.0 +-5.9872489 2.1790514 -1.931223 128.0 +-5.9710789 2.214751 -1.9303359 128.0 +-5.9600577 2.2523601 -1.931223 128.0 +-5.9541492 2.291976 -1.9338844 128.0 +-5.9426422 2.3295126 -1.9347715 128.0 +-5.9353347 2.3687644 -1.9371371 128.0 +-5.9100676 2.4008245 -1.9335887 128.0 +-5.8978739 2.4381375 -1.9344758 128.0 +-5.8836832 2.4746506 -1.9347715 128.0 +-5.8683882 2.5107057 -1.9347715 128.0 +-5.8502445 2.5455229 -1.9338844 128.0 +-5.8275266 2.5782797 -1.9315187 128.0 +-5.8176951 2.6167309 -1.9335887 128.0 +-5.7989235 2.6511869 -1.9327016 128.0 +-5.7747498 2.6830964 -1.9300402 128.0 +-5.7495389 2.7144012 -1.9270831 128.0 +-5.7293301 2.7479765 -1.9259002 128.0 +-5.6977611 2.7759674 -1.9208733 128.0 +-5.7037392 2.8223133 -1.9288573 128.0 +-5.6829 2.8555422 -1.9276745 128.0 +-5.6703773 2.8929627 -1.9294487 128.0 +-5.6550646 2.9290187 -1.9303359 128.0 +-5.62853 2.9592175 -1.9273788 128.0 +-5.5832963 2.9793084 -1.9179162 128.0 +-5.5875921 3.0257914 -1.9259002 128.0 +-5.5513387 3.0503595 -1.9196904 128.0 +-5.5358553 3.086225 -1.9208733 128.0 +-5.5126567 3.1177831 -1.9193947 128.0 +-5.490108 3.1496482 -1.9182118 128.0 +-5.480587 3.1890402 -1.9217603 128.0 +-5.4304752 3.2046471 -1.9108192 128.0 +-5.4246454 3.2462456 -1.9158462 128.0 +-5.3956404 3.274019 -1.9125934 128.0 +-5.4014874 3.3230805 -1.9220561 128.0 +-5.3769426 3.3536334 -1.9205775 128.0 +-5.3562641 3.3865626 -1.9205775 128.0 +-5.3434267 3.4245183 -1.9235346 128.0 +-5.3046885 3.4457934 -1.917029 128.0 +-5.2930207 3.4845803 -1.9205775 128.0 +-5.2755136 3.5196426 -1.9220561 128.0 +-5.2451129 3.5460615 -1.9188033 128.0 +-5.2398062 3.5895145 -1.9250132 128.0 +-5.2066956 3.6139727 -1.9208733 128.0 +-5.1797342 3.6425555 -1.919099 128.0 +-5.164289 3.6792574 -1.9217603 128.0 +-5.1431656 3.7119937 -1.9223518 128.0 +-5.1233768 3.7457366 -1.9235346 128.0 +-5.1018324 3.7782395 -1.924126 128.0 +-5.073204 3.8054605 -1.9220561 128.0 +-5.0528016 3.8388288 -1.9232389 128.0 +-5.0230947 3.8650999 -1.9208733 128.0 +-4.9940095 3.8917382 -1.9188033 128.0 +-4.9850349 3.9341428 -1.9247174 128.0 +-4.9570704 3.9616747 -1.9232389 128.0 +-4.9267278 3.9872086 -1.9208733 128.0 +-4.9043865 4.0191798 -1.9217603 128.0 +-0 0 -0 128.0 +-4.8649354 4.0876641 -1.9259002 128.0 +-4.8281202 4.1075349 -1.9211689 128.0 +-4.8049974 4.1389523 -1.9220561 128.0 +-4.7759113 4.1652184 -1.9205775 128.0 +-4.7402382 4.1855927 -1.9164376 128.0 +-4.7116179 4.2120533 -1.9152548 128.0 +-4.6835594 4.2389607 -1.9143677 128.0 +-4.6595745 4.2695546 -1.9152548 128.0 +-4.6297874 4.294817 -1.9137763 128.0 +-4.6068296 4.3264136 -1.9152548 128.0 +-4.5698113 4.3447261 -1.9108192 128.0 +-4.53756 4.3673849 -1.9084535 128.0 +-4.5407829 4.4244761 -1.9214647 128.0 +-4.5135493 4.4522548 -1.9214647 128.0 +-4.4705982 4.4643412 -1.9146633 128.0 +-4.4484959 4.4971209 -1.917029 128.0 +-4.4128065 4.5161333 -1.9134805 128.0 +-4.3850131 4.5431247 -1.9134805 128.0 +-4.3537579 4.5664883 -1.912002 128.0 +-4.3132119 4.5799041 -1.9063835 128.0 +-4.2908854 4.6125779 -1.9090449 128.0 +-4.2612095 4.6374125 -1.9084535 128.0 +-4.2320328 4.6627645 -1.9081578 128.0 +-4.205256 4.6907778 -1.9090449 128.0 +-4.1744947 4.7143469 -1.9081578 128.0 +-4.1511497 4.7463436 -1.9108192 128.0 +-4.1200752 4.7695565 -1.909932 128.0 +-4.0907321 4.7947469 -1.909932 128.0 +-4.0630822 4.8219485 -1.9108192 128.0 +-4.0346408 4.8482566 -1.9114106 128.0 +-3.9987507 4.8655419 -1.9084535 128.0 +-3.9790556 4.9025946 -1.9134805 128.0 +-3.9441192 4.9209547 -1.9111149 128.0 +-3.90555 4.9345765 -1.9069749 128.0 +-3.8628442 4.9426422 -1.9007651 128.0 +-3.8371134 4.972301 -1.9031308 128.0 +-3.8123219 5.0033493 -1.9060879 128.0 +-3.7781041 5.0220671 -1.9043136 128.0 +-3.74437 5.0413203 -1.902835 128.0 +-3.7077172 5.0564971 -1.899878 128.0 +-3.6956677 5.1054606 -1.909932 128.0 +-3.6603837 5.1226001 -1.9078621 128.0 +-3.6294336 5.1457443 -1.9081578 128.0 +-3.5917873 5.1592937 -1.904905 128.0 +-3.5562756 5.175724 -1.902835 128.0 +-3.5276682 5.2021914 -1.9046093 128.0 +-3.4908998 5.2165937 -1.901948 128.0 +-3.455667 5.2331324 -1.9001737 128.0 +-3.4141042 5.2398314 -1.894851 128.0 +-3.3777559 5.2542529 -1.8924853 128.0 +-3.3495462 5.281333 -1.894851 128.0 +-3.3500149 5.3544235 -1.9140719 128.0 +-3.316596 5.3740649 -1.9137763 128.0 +-3.2850492 5.3967619 -1.9146633 128.0 +-3.2425303 5.4012561 -1.9090449 128.0 +-3.2078679 5.4185843 -1.9081578 128.0 +-3.1634817 5.4191914 -1.9013565 128.0 +-3.1430383 5.4608536 -1.9093406 128.0 +-3.1391757 5.5323772 -1.9279703 128.0 +-3.0921118 5.5281916 -1.9196904 128.0 +-3.0535207 5.5386949 -1.9167334 128.0 +-3.0035143 5.5279493 -1.9063835 128.0 +-2.9668331 5.5412216 -1.9046093 128.0 +-2.9403553 5.5736847 -1.9096364 128.0 +-2.8906798 5.561955 -1.8992865 128.0 +-2.8556271 5.5778866 -1.8986951 128.0 +-2.8290908 5.6106563 -1.9040179 128.0 +-2.8171318 5.6732554 -1.9196904 128.0 +-2.7810094 5.6878595 -1.9188033 128.0 +-2.7381837 5.6884627 -1.9131849 128.0 +-2.7044556 5.7077465 -1.9140719 128.0 +-2.6718054 5.7294278 -1.9158462 128.0 +-2.6250443 5.7205358 -1.9072707 128.0 +-2.5957913 5.7495947 -1.9117063 128.0 +-2.5647295 5.7750173 -1.9149591 128.0 +-2.5315409 5.795898 -1.9167334 128.0 +-2.5162904 5.8587189 -1.9327016 128.0 +-2.4717467 5.8538079 -1.9259002 128.0 +-2.4471354 5.8962145 -1.9350672 128.0 +-2.3899832 5.8598175 -1.9179162 128.0 +-2.3568261 5.8814654 -1.9202818 128.0 +-2.3266428 5.9109268 -1.9253088 128.0 +-2.2830961 5.9063802 -1.919099 128.0 +-2.2566435 5.946178 -1.9276745 128.0 +-2.2214501 5.9634933 -1.9288573 128.0 +-2.1851449 5.9779086 -1.9291531 128.0 +-2.1584218 6.0190787 -1.93832 128.0 +-2.1128902 6.0078783 -1.9303359 128.0 +-2.0738065 6.0144081 -1.9282659 128.0 +-2.0402288 6.036974 -1.9315187 128.0 +-1.9980423 6.0339627 -1.9264917 128.0 +-1.9527273 6.0206666 -1.9182118 128.0 +-1.9250026 6.0616693 -1.9276745 128.0 +-1.8903251 6.0815768 -1.9303359 128.0 +-1.8424096 6.0583315 -1.919099 128.0 +-1.8131009 6.0960755 -1.9276745 128.0 +-1.7767291 6.110755 -1.9288573 128.0 +-1.7394619 6.1224604 -1.9291531 128.0 +-1.7028844 6.1367002 -1.9303359 128.0 +-1.6482095 6.0843353 -1.9102278 128.0 +-1.625496 6.1497469 -1.9279703 128.0 +-1.5839152 6.1448045 -1.9232389 128.0 +-1.5438534 6.145143 -1.9202818 128.0 +-1.5072541 6.1591396 -1.9217603 128.0 +-1.4692125 6.1673427 -1.9214647 128.0 +-1.4380304 6.20509 -1.9306316 128.0 +-1.3997196 6.2128649 -1.9303359 128.0 +-1.3548301 6.1905417 -1.9205775 128.0 +-1.3245641 6.2351804 -1.9321102 128.0 +-1.2855096 6.2394476 -1.9309273 128.0 +-1.2515037 6.268764 -1.9377286 128.0 +-1.2113838 6.2678838 -1.9350672 128.0 +-1.1716729 6.2686257 -1.9329972 128.0 +-1.1347156 6.2841578 -1.9356587 128.0 +-1.0958073 6.2891197 -1.9350672 128.0 +-1.0567225 6.2928987 -1.9341801 128.0 +-1.0191575 6.3058653 -1.9362501 128.0 +-0.97971284 6.3072805 -1.9347715 128.0 +-0.94183898 6.3188419 -1.9365457 128.0 +-0.90291446 6.3235564 -1.9362501 128.0 +-0.86422616 6.3299241 -1.9365457 128.0 +-0.82549369 6.3360548 -1.9368415 128.0 +-0.78671849 6.341949 -1.9371371 128.0 +-0.7464481 6.3352723 -1.9335887 128.0 +-0.70830369 6.3463788 -1.9356587 128.0 +-0.66804725 6.3382554 -1.9318144 128.0 +-0.62848336 6.3355808 -1.9297445 128.0 +-0.59057087 6.3497806 -1.9329972 128.0 +-0.55093676 6.3456712 -1.9306316 128.0 +-0.51306593 6.3622627 -1.9347715 128.0 +-0.47423115 6.3681488 -1.9356587 128.0 +-0.43534347 6.3737979 -1.9365457 128.0 +-0.3964043 6.3792095 -1.9374329 128.0 +-0.35693401 6.3757992 -1.9356587 128.0 +-0.31756812 6.3730989 -1.9341801 128.0 +-0.27891675 6.3854256 -1.9374329 128.0 +-0.23991072 6.3917894 -1.9389114 128.0 +-0.2002064 6.3778644 -1.9341801 128.0 +-0.16118966 6.3837476 -1.9356587 128.0 +-0.12219981 6.3941674 -1.9386157 128.0 +-0.082851574 6.3862004 -1.9359543 128.0 +-0.043665022 6.3865886 -1.9359543 128.0 +-0.0044761011 6.3857808 -1.9356587 128.0 +0.034711529 6.3866434 -1.9359543 128.0 +0.07373368 6.3719821 -1.9315187 128.0 +0.11286375 6.3733196 -1.9321102 128.0 +0.15210387 6.3782372 -1.9338844 128.0 +0.1914943 6.3857775 -1.9365457 128.0 +0.2304665 6.3787546 -1.9347715 128.0 +0.26911798 6.365767 -1.931223 128.0 +0.3076188 6.3525462 -1.9276745 128.0 +0.34690347 6.3562622 -1.9294487 128.0 +0.38520405 6.3425717 -1.9259002 128.0 +0.42455998 6.3467607 -1.9279703 128.0 +0.46279952 6.3345089 -1.9250132 128.0 +0.50241256 6.341073 -1.9279703 128.0 +0.54074252 6.3312082 -1.9259002 128.0 +0.57766432 6.3068423 -1.9193947 128.0 +0.62062526 6.3469133 -1.9329972 128.0 +0.65353441 6.2850261 -1.9149591 128.0 +0.69679183 6.323627 -1.9282659 128.0 +0.73690444 6.3306189 -1.9318144 128.0 +0.77375895 6.3098593 -1.9267874 128.0 +0.81002039 6.2860436 -1.9208733 128.0 +0.85304993 6.3140893 -1.931223 128.0 +0.88896984 6.2888727 -1.9250132 128.0 +0.92712259 6.2804642 -1.924126 128.0 +0.96476984 6.2689924 -1.9223518 128.0 +1.0056341 6.2780471 -1.9270831 128.0 +1.0413138 6.2547965 -1.9217603 128.0 +1.0796728 6.2482896 -1.9217603 128.0 +1.1173178 6.2377858 -1.9205775 128.0 +1.1597505 6.253355 -1.9276745 128.0 +1.1961195 6.2358012 -1.9244218 128.0 +1.237144 6.2424006 -1.9288573 128.0 +1.2744664 6.2300124 -1.9273788 128.0 +1.3152318 6.2342267 -1.931223 128.0 +1.3518366 6.2185712 -1.9288573 128.0 +1.3922621 6.2204142 -1.9321102 128.0 +1.427189 6.1977901 -1.9276745 128.0 +1.4656311 6.1907754 -1.9282659 128.0 +1.5002036 6.1677427 -1.9238303 128.0 +1.5444994 6.1843724 -1.9321102 128.0 +1.5781493 6.1581225 -1.9267874 128.0 +1.6156623 6.1473989 -1.9264917 128.0 +1.6483831 6.1189218 -1.9205775 128.0 +1.688946 6.1197429 -1.924126 128.0 +1.7241267 6.1009908 -1.9214647 128.0 +1.7615293 6.0902967 -1.9214647 128.0 +1.7975105 6.0747933 -1.9199861 128.0 +1.8339211 6.0609069 -1.919099 128.0 +1.8716401 6.0513649 -1.9196904 128.0 +1.909023 6.040678 -1.9199861 128.0 +1.9457587 6.0279417 -1.9196904 128.0 +1.9830078 6.0167966 -1.9199861 128.0 +2.0186708 6.0008941 -1.9188033 128.0 +2.0548334 5.9865875 -1.9182118 128.0 +2.091212 5.9729648 -1.9179162 128.0 +2.1307123 5.9681182 -1.9205775 128.0 +2.1604323 5.9360805 -1.9143677 128.0 +2.1954861 5.9191298 -1.9131849 128.0 +2.229738 5.9001856 -1.9114106 128.0 +2.266242 5.8872843 -1.9117063 128.0 +2.3047631 5.8794942 -1.9137763 128.0 +2.3468142 5.8803248 -1.9188033 128.0 +2.3839295 5.8684697 -1.9196904 128.0 +2.422812 5.8607945 -1.9220561 128.0 +2.4720585 5.8775191 -1.9327016 128.0 +2.4975562 5.8376479 -1.9244218 128.0 +2.50932 5.7670269 -1.9057921 128.0 +2.5407941 5.742785 -1.902835 128.0 +2.5622702 5.6965938 -1.8924853 128.0 +2.6142526 5.7181239 -1.9052007 128.0 +2.6508992 5.705441 -1.9063835 128.0 +2.689527 5.6968427 -1.9090449 128.0 +2.7318668 5.6957374 -1.9143677 128.0 +2.7667637 5.6788673 -1.9143677 128.0 +2.7846124 5.6275353 -1.9025394 128.0 +2.8135147 5.5992465 -1.8986951 128.0 +2.8443453 5.5750699 -1.8963295 128.0 +2.8754249 5.5515747 -1.8942596 128.0 +2.9054341 5.5262165 -1.8915981 128.0 +2.9329922 5.4964857 -1.8874582 128.0 +2.9816723 5.5061073 -1.8972166 128.0 +3.0154011 5.4877086 -1.8972166 128.0 +3.0485511 5.4682684 -1.8969209 128.0 +3.0829868 5.4511232 -1.8975123 128.0 +3.1178021 5.4345894 -1.8983995 128.0 +3.1443641 5.4037971 -1.8942596 128.0 +3.1847436 5.3967428 -1.8986951 128.0 +3.2207403 5.3820186 -1.9004694 128.0 +3.2487481 5.3539877 -1.8975123 128.0 +3.2845416 5.3388352 -1.8992865 128.0 +3.2965131 5.2853475 -1.8871626 128.0 +3.3156095 5.2440271 -1.8794742 128.0 +3.3678243 5.2549524 -1.8910067 128.0 +3.37659 5.1981378 -1.8776999 128.0 +3.4289057 5.2084408 -1.8892325 128.0 +3.4528477 5.1753826 -1.8847969 128.0 +3.4898882 5.1620135 -1.887754 128.0 +3.5301332 5.1531124 -1.8924853 128.0 +3.5600517 5.1290007 -1.8915981 128.0 +3.5947526 5.1117487 -1.8933724 128.0 +3.6288211 5.0934858 -1.894851 128.0 +3.6577699 5.0680251 -1.8936681 128.0 +3.6876702 5.0439439 -1.8930767 128.0 +3.7253716 5.0304346 -1.8966252 128.0 +3.7527285 5.0028958 -1.894851 128.0 +3.7879779 4.9858608 -1.8972166 128.0 +3.8184993 4.9625244 -1.8972166 128.0 +3.8529868 4.9442759 -1.8992865 128.0 +3.8779261 4.9137921 -1.8966252 128.0 +3.9133706 4.8966217 -1.8992865 128.0 +3.9391358 4.8673191 -1.8972166 128.0 +3.9701378 4.8445354 -1.897808 128.0 +4.0010085 4.8215542 -1.8983995 128.0 +4.0268307 4.7925253 -1.8966252 128.0 +4.0567803 4.7684546 -1.8969209 128.0 +4.0803518 4.7369585 -1.8942596 128.0 +4.1212697 4.7255125 -1.899878 128.0 +4.1451292 4.694407 -1.8975123 128.0 +4.1700358 4.6646109 -1.895738 128.0 +4.1966558 4.6368113 -1.894851 128.0 +4.203732 4.5877304 -1.8850926 128.0 +4.2376494 4.5681539 -1.887754 128.0 +4.2897944 4.567832 -1.8986951 128.0 +4.3144503 4.5379629 -1.8972166 128.0 +4.3547993 4.5244823 -1.902835 128.0 +4.3764796 4.4915185 -1.9001737 128.0 +4.4113355 4.4720616 -1.9034264 128.0 +4.4427423 4.448966 -1.9052007 128.0 +4.4523001 4.4041543 -1.8975123 128.0 +4.4819727 4.3794231 -1.8986951 128.0 +4.4874535 4.3312726 -1.8895282 128.0 +4.5429821 4.3313441 -1.901948 128.0 +4.5444393 4.2798085 -1.8913025 128.0 +4.5657187 4.2472887 -1.8892325 128.0 +4.5923967 4.2198405 -1.8895282 128.0 +4.6252761 4.1980033 -1.8924853 128.0 +4.6473913 4.1663556 -1.8910067 128.0 +4.6692924 4.1345944 -1.8895282 128.0 +4.6952929 4.1064954 -1.8898239 128.0 +4.7131729 4.071363 -1.8868668 128.0 +4.7402453 4.0442271 -1.887754 128.0 +4.7649713 4.0150657 -1.887754 128.0 +4.8012652 3.9955301 -1.8924853 128.0 +4.8234773 3.9641752 -1.8915981 128.0 +4.8536434 3.9393208 -1.8939638 128.0 +4.873251 3.9058802 -1.8921895 128.0 +4.9195962 3.893692 -1.9010608 128.0 +4.9561896 3.8734336 -1.9060879 128.0 +4.9685197 3.8341951 -1.9016522 128.0 +4.9744768 3.7903194 -1.894851 128.0 +4.9961133 3.7585766 -1.8942596 128.0 +5.0229158 3.7306983 -1.895738 128.0 +5.0534158 3.7054574 -1.8986951 128.0 +5.0791521 3.6766212 -1.899878 128.0 +5.1039472 3.6470532 -1.9007651 128.0 +5.1246681 3.6145661 -1.9001737 128.0 +5.1585097 3.5912416 -1.9046093 128.0 +5.1733623 3.5546525 -1.901948 128.0 +5.1974473 3.524451 -1.902835 128.0 +5.2189751 3.4924939 -1.902835 128.0 +5.2426982 3.4619844 -1.9037222 128.0 +5.2662425 3.4313152 -1.9046093 128.0 +5.2871976 3.3989377 -1.9046093 128.0 +5.3127937 3.3695021 -1.9063835 128.0 +5.3398471 3.3408937 -1.9087492 128.0 +5.3537426 3.3040524 -1.9063835 128.0 +5.3714671 3.2696497 -1.9054965 128.0 +5.4061704 3.2454808 -1.9108192 128.0 +5.4226942 3.2103014 -1.9096364 128.0 +5.4464149 3.1793761 -1.9111149 128.0 +5.4633369 3.1444678 -1.9102278 128.0 +5.4792051 3.1090004 -1.9090449 128.0 +5.4906754 3.0711246 -1.9063835 128.0 +5.5069065 3.0359929 -1.9054965 128.0 +5.5212345 2.9998653 -1.9040179 128.0 +5.5361686 2.9641275 -1.902835 128.0 +5.5601664 2.9332228 -1.904905 128.0 +5.5772119 2.8986106 -1.9046093 128.0 +5.5940423 2.8638995 -1.9043136 128.0 +5.6166272 2.8321021 -1.9060879 128.0 +5.6347547 2.7980106 -1.9063835 128.0 +5.6415186 2.758348 -1.902835 128.0 +5.6505909 2.7199509 -1.9001737 128.0 +5.6723533 2.6876829 -1.901948 128.0 +5.6930666 2.6548462 -1.9034264 128.0 +5.7153268 2.6226535 -1.9054965 128.0 +5.7374058 2.5902874 -1.9075664 128.0 +5.7496996 2.5534835 -1.9063835 128.0 +5.7652588 2.5181561 -1.9063835 128.0 +5.7779684 2.4816024 -1.9054965 128.0 +5.7842865 2.4423864 -1.9025394 128.0 +5.8026929 2.4083138 -1.9037222 128.0 +5.820014 2.3737462 -1.9046093 128.0 +5.8362432 2.3387012 -1.9052007 128.0 +5.8540387 2.3042464 -1.9063835 128.0 +5.8787594 2.2724173 -1.909932 128.0 +5.892592 2.2363031 -1.909932 128.0 +5.9169445 2.2041068 -1.9134805 128.0 +5.9303575 2.1677597 -1.9134805 128.0 +5.949841 2.1335886 -1.9155505 128.0 +5.9619193 2.0967238 -1.9152548 128.0 +5.969254 2.058234 -1.9134805 128.0 +5.9826756 2.0218744 -1.9137763 128.0 +5.9995031 1.9866291 -1.9152548 128.0 +6.0061278 1.9480108 -1.9134805 128.0 +6.0179677 1.9111212 -1.9134805 128.0 +6.0314054 1.8747269 -1.9140719 128.0 +6.0363975 1.8357376 -1.912002 128.0 +6.0466318 1.7983921 -1.9117063 128.0 +6.0291171 1.752987 -1.9025394 128.0 +6.0765157 1.7264054 -1.9143677 128.0 +6.0952787 1.6913874 -1.917029 128.0 +6.1000099 1.6524566 -1.9152548 128.0 +6.1100345 1.6149966 -1.9152548 128.0 +6.1392541 1.5824842 -1.9214647 128.0 +6.1303191 1.5401282 -1.9155505 128.0 +6.1582117 1.507027 -1.9214647 128.0 +6.161767 1.4678839 -1.9196904 128.0 +6.1753106 1.4311271 -1.9211689 128.0 +6.18118 1.3925791 -1.9202818 128.0 +6.1830764 1.3531958 -1.9182118 128.0 +6.1968694 1.3164231 -1.9199861 128.0 +6.2113795 1.2797248 -1.9220561 128.0 +6.2181778 1.2414013 -1.9217603 128.0 +6.22474 1.2030426 -1.9214647 128.0 +6.2263703 1.1637722 -1.9196904 128.0 +6.2277536 1.1245272 -1.9179162 128.0 +6.242065 1.0876056 -1.9202818 128.0 +6.2570996 1.0507088 -1.9229432 128.0 +6.2643719 1.0124487 -1.9232389 128.0 +6.278018 0.97516561 -1.9256046 128.0 +6.2848282 0.93676692 -1.9259002 128.0 +6.2847838 0.89737576 -1.924126 128.0 +6.2977433 0.85983044 -1.9264917 128.0 +6.3029008 0.82117206 -1.9264917 128.0 +6.3125606 0.78307104 -1.9279703 128.0 +6.3020673 0.74253368 -1.9232389 128.0 +6.312201 0.70448703 -1.9250132 128.0 +6.302155 0.66424 -1.9205775 128.0 +6.3004084 0.62499201 -1.9188033 128.0 +6.2946129 0.58543646 -1.9158462 128.0 +6.2581153 0.54332954 -1.9034264 128.0 +6.3165579 0.5093773 -1.9205775 128.0 +6.3424277 0.47231409 -1.9276745 128.0 +6.3290048 0.43228117 -1.9226475 128.0 +6.3458395 0.39432856 -1.9270831 128.0 +6.3557696 0.35581145 -1.9294487 128.0 +6.3425679 0.31604487 -1.9247174 128.0 +6.3462963 0.27720514 -1.9253088 128.0 +6.3555145 0.23854689 -1.9276745 128.0 +6.3625875 0.1997259 -1.9294487 128.0 +6.3780179 0.16104463 -1.9338844 128.0 +6.358829 0.12152224 -1.9276745 128.0 +6.3489475 0.082365938 -1.9244218 128.0 +6.3426466 0.043361843 -1.9223518 128.0 +6.3427935 0.0044432767 -1.9223518 128.0 +6.3455667 -0.03449085 -1.9232389 128.0 +6.3481016 -0.07345885 -1.924126 128.0 +6.3542171 -0.11252666 -1.926196 128.0 +6.3667774 -0.1518313 -1.9303359 128.0 +6.3628612 -0.19080852 -1.9294487 128.0 +6.3692079 -0.23012218 -1.9318144 128.0 +6.3686304 -0.26923886 -1.9321102 128.0 +6.3764 -0.30877241 -1.9350672 128.0 +6.3677087 -0.34752747 -1.9329972 128.0 +6.3692703 -0.38682386 -1.9341801 128.0 +6.3543859 -0.42506957 -1.9303359 128.0 +6.3564219 -0.4643991 -1.9318144 128.0 +6.3515482 -0.50324184 -1.931223 128.0 +6.3454852 -0.54196101 -1.9303359 128.0 +6.3448944 -0.58114719 -1.931223 128.0 +6.3516674 -0.62108982 -1.9344758 128.0 +6.3420358 -0.65945876 -1.9327016 128.0 +6.3416681 -0.69877863 -1.9338844 128.0 +6.3258748 -0.7363525 -1.9303359 128.0 +6.3278747 -0.77596694 -1.9324058 128.0 +6.3391008 -0.81685394 -1.9374329 128.0 +6.3178759 -0.85356128 -1.9324058 128.0 +6.2803597 -0.88776702 -1.9223518 128.0 +6.3031454 -0.93046927 -1.931223 128.0 +6.3039269 -0.97014385 -1.933293 128.0 +6.2808766 -1.0060872 -1.9279703 128.0 +6.2821236 -1.0458615 -1.9303359 128.0 +6.2718229 -1.0837379 -1.9291531 128.0 +6.2631745 -1.1218638 -1.9285617 128.0 +6.2758975 -1.1639297 -1.9347715 128.0 +6.2564411 -1.2000773 -1.9309273 128.0 +6.2536454 -1.2393718 -1.9324058 128.0 +6.2665129 -1.2819308 -1.9389114 128.0 +6.2510514 -1.3187802 -1.9365457 128.0 +6.2475095 -1.3581254 -1.9380243 128.0 +6.245584 -1.397894 -1.9400942 128.0 +6.2322345 -1.4351183 -1.9386157 128.0 +6.2205229 -1.4726715 -1.9377286 128.0 +6.1890922 -1.5053951 -1.9306316 128.0 +6.1760311 -1.5424167 -1.9294487 128.0 +6.1942124 -1.5873957 -1.93832 128.0 +6.1584864 -1.6185755 -1.9300402 128.0 +6.1641197 -1.6605561 -1.9350672 128.0 +6.1556563 -1.6988553 -1.9356587 128.0 +6.1460361 -1.7368534 -1.9359543 128.0 +6.1380162 -1.7753282 -1.9368415 128.0 +6.120595 -1.81106 -1.9347715 128.0 +6.1011381 -1.8460917 -1.9321102 128.0 +6.0760064 -1.8792597 -1.9276745 128.0 +6.0598068 -1.915067 -1.926196 128.0 +6.0043049 -1.9381306 -1.912002 128.0 +5.9532862 -1.9620805 -1.8992865 128.0 +5.865078 -1.9729924 -1.8744471 128.0 +5.7064853 -1.958711 -1.8265424 128.0 +5.6213269 -1.968124 -1.80259 128.0 +5.5614619 -1.9855585 -1.7869174 128.0 +5.4890285 -1.9977601 -1.7671051 128.0 +5.4256139 -2.0124698 -1.7502497 128.0 +5.3756313 -2.0315418 -1.7378299 128.0 +5.3309698 -2.0521355 -1.7271844 128.0 +5.2746968 -2.0677266 -1.7126948 128.0 +5.2388415 -2.0908477 -1.7050064 128.0 +5.157764 -2.095274 -1.6822368 128.0 +5.1006684 -2.1086371 -1.6674515 128.0 +5.0673804 -2.1313777 -1.6606501 128.0 +5.0199537 -2.147778 -1.6491176 128.0 +4.9751453 -2.1648204 -1.6384721 128.0 +4.925077 -2.1790757 -1.6260523 128.0 +4.7600188 -2.1410804 -1.5745991 128.0 +4.4913611 -2.0534871 -1.487661 128.0 +4.7195244 -2.1928923 -1.5698677 128.0 +4.5375252 -2.1422935 -1.5122048 128.0 +4.3304901 -2.0771546 -1.4456704 128.0 +4.300487 -2.0953202 -1.4397563 128.0 +4.2233329 -2.0898974 -1.4175781 128.0 +4.1472635 -2.0840368 -1.3956957 128.0 +4.1029124 -2.0933838 -1.3847545 128.0 +4.0382457 -2.0917225 -1.3667164 128.0 +4.0414004 -2.1249065 -1.3723348 128.0 +3.9558036 -2.1109924 -1.3469039 128.0 +4.4031229 -2.3844745 -1.5089519 128.0 +3.9572296 -2.1745565 -1.3566623 128.0 +3.9154425 -2.1829829 -1.3466082 128.0 +4.5455818 -2.5709171 -1.5754862 128.0 +3.5892222 -2.059279 -1.2398576 128.0 +3.5583539 -2.0706947 -1.2333521 128.0 +3.5118489 -2.0725861 -1.221228 128.0 +3.5171001 -2.1048861 -1.2277336 128.0 +3.4306138 -2.0818315 -1.2011199 128.0 +3.3779058 -2.0783172 -1.1866301 128.0 +3.3302352 -2.0772684 -1.1739147 128.0 +3.2657492 -2.0649941 -1.1549894 128.0 +3.2264748 -2.0679853 -1.145231 128.0 +3.1584468 -2.051841 -1.1248271 128.0 +3.1043053 -2.0438704 -1.1094503 128.0 +3.0766068 -2.0528073 -1.1038319 128.0 +3.0465417 -2.0598767 -1.0973263 128.0 +3.014142 -2.0650353 -1.0899336 128.0 +2.9778705 -2.0671513 -1.0810624 128.0 +2.9541905 -2.0776918 -1.0769224 128.0 +2.9094863 -2.0730553 -1.0647985 128.0 +2.9036832 -2.0958996 -1.0674598 128.0 +2.8977091 -2.1187506 -1.0701212 128.0 +2.9023116 -2.1495655 -1.0769224 128.0 +2.8959455 -2.1724918 -1.0795839 128.0 +2.8939712 -2.1988878 -1.0840194 128.0 +2.8910244 -2.2247586 -1.0881593 128.0 +2.8908827 -2.2530243 -1.0934821 128.0 +2.8522565 -2.2511921 -1.0837238 128.0 +2.8145089 -2.2495677 -1.0742611 128.0 +2.7828305 -2.2523732 -1.0671641 128.0 +2.7504852 -2.2542694 -1.0597714 128.0 +2.7564511 -2.2875731 -1.0677555 128.0 +2.7182262 -2.2841654 -1.0579971 128.0 +2.7034321 -2.3001821 -1.0577015 128.0 +2.6979532 -2.3242078 -1.06125 128.0 +2.6829214 -2.3400905 -1.0609542 128.0 +2.7014539 -2.3855917 -1.0745568 128.0 +2.6689596 -2.3862071 -1.0671641 128.0 +2.6769338 -2.4230502 -1.0766268 128.0 +2.613415 -2.3949027 -1.0562229 128.0 +2.620383 -2.4310319 -1.0653899 128.0 +2.6242194 -2.46472 -1.0733739 128.0 +2.5951996 -2.467612 -1.0674598 128.0 +2.5910227 -2.4940882 -1.0721911 128.0 +2.5681441 -2.5026066 -1.0689384 128.0 +2.5282552 -2.4941683 -1.0582929 128.0 +2.5074959 -2.5042346 -1.0559272 128.0 +2.4934266 -2.5209312 -1.0565186 128.0 +2.4939356 -2.5525804 -1.0636156 128.0 +2.472255 -2.5616491 -1.0609542 128.0 +2.4584682 -2.5788445 -1.0618414 128.0 +2.450458 -2.6022253 -1.0653899 128.0 +2.4363971 -2.6193104 -1.066277 128.0 +2.4280362 -2.6426508 -1.0698255 128.0 +2.4111335 -2.6567919 -1.0695298 128.0 +2.3941486 -2.6708252 -1.069234 128.0 +2.3827825 -2.6911864 -1.0715997 128.0 +2.3693695 -2.7093513 -1.0730783 128.0 +2.3414593 -2.7108269 -1.0677555 128.0 +2.3210614 -2.7207825 -1.0659813 128.0 +2.3030922 -2.7335122 -1.0653899 128.0 +2.2826097 -2.7431867 -1.0636156 128.0 +2.2566361 -2.7460713 -1.05918 128.0 +2.2373359 -2.7568994 -1.0579971 128.0 +2.2102203 -2.7579043 -1.0529702 128.0 +2.186142 -2.7624259 -1.0494217 128.0 +2.1632679 -2.7682612 -1.0464646 128.0 +2.1450741 -2.7799702 -1.0458732 128.0 +2.1245019 -2.7885211 -1.0440989 128.0 +2.114244 -2.8106644 -1.0476474 128.0 +2.1055031 -2.8350871 -1.052083 128.0 +2.0897624 -2.8502638 -1.0529702 128.0 +2.0800769 -2.8738656 -1.0571101 128.0 +2.0651813 -2.8904607 -1.0585886 128.0 +2.0468562 -2.9022973 -1.0582929 128.0 +2.0339222 -2.9218576 -1.0609542 128.0 +2.0202839 -2.9405811 -1.0633199 128.0 +1.9914789 -2.9371097 -1.0574057 128.0 +1.973951 -2.9500678 -1.0577015 128.0 +1.9689739 -2.9820523 -1.0650941 128.0 +1.9402083 -2.9780707 -1.05918 128.0 +1.8976171 -2.9521539 -1.0452816 128.0 +1.9081218 -3.0089161 -1.0618414 128.0 +1.8941841 -3.0278556 -1.0645027 128.0 +1.8795838 -3.0459244 -1.0668684 128.0 +1.8037325 -2.9635644 -1.0328619 128.0 +1.7835475 -2.9713001 -1.0316792 128.0 +1.7652824 -2.9821877 -1.0316792 128.0 +1.7464691 -2.9921381 -1.0313834 128.0 +1.7442806 -3.0309467 -1.0414375 128.0 +1.732251 -3.0532238 -1.0455774 128.0 +1.7139505 -3.0646291 -1.0458732 128.0 +1.6978816 -3.0801072 -1.0476474 128.0 +1.6798627 -3.0921459 -1.0482388 128.0 +1.6626619 -3.1057637 -1.0494217 128.0 +1.6453571 -3.1192868 -1.0506045 128.0 +1.6266271 -3.1301713 -1.0509001 128.0 +1.6030363 -3.1315901 -1.0479431 128.0 +1.5794895 -3.1328378 -1.044986 128.0 +1.5602371 -3.1424704 -1.044986 128.0 +1.534631 -3.1391122 -1.0405504 128.0 +1.5290155 -3.1768732 -1.0503087 128.0 +1.4988574 -3.1637509 -1.0426203 128.0 +1.4705334 -3.1538417 -1.0361148 128.0 +1.4352154 -3.1280773 -1.0242864 128.0 +1.3762882 -3.0488908 -0.99441993 128.0 +1.3311852 -2.9979122 -0.97431177 128.0 +1.3548317 -3.1023169 -1.0068396 128.0 +1.3776224 -3.2079985 -1.0396632 128.0 +1.3541961 -3.2075911 -1.0367062 128.0 +1.3513364 -3.2564249 -1.0503087 128.0 +1.3360206 -3.2761538 -1.054153 128.0 +1.3244226 -3.3055708 -1.06125 128.0 +1.3016655 -3.3074131 -1.05918 128.0 +1.2772133 -3.3046455 -1.0556315 128.0 +1.2558954 -3.3097408 -1.0547444 128.0 +1.2415669 -3.3334975 -1.0600671 128.0 +1.2374907 -3.3859127 -1.0748525 128.0 +1.2218519 -3.407829 -1.0795839 128.0 +1.1952131 -3.3990414 -1.0742611 128.0 +1.1780719 -3.4171481 -1.0778096 128.0 +1.1549412 -3.4179773 -1.0757396 128.0 +1.1636814 -3.5147762 -1.1050147 128.0 +1.1535895 -3.5572882 -1.1165473 128.0 +1.1375245 -3.5825083 -1.1224616 128.0 +1.0494417 -3.3768759 -1.0535616 128.0 +1.0167478 -3.3439524 -1.0408461 128.0 +0.98940086 -3.3272376 -1.0334533 128.0 +0.96416497 -3.316735 -1.0281307 128.0 +0.93987876 -3.308805 -1.023695 128.0 +0.92058057 -3.3181918 -1.0248779 128.0 +0.89845437 -3.3173237 -1.0228078 128.0 +0.88052446 -3.3320093 -1.0257649 128.0 +0.79113609 -3.0700169 -0.94030535 128.0 +0.74993306 -2.985872 -0.91191739 128.0 +0.79769343 -3.2604315 -0.99796844 128.0 +0.82860273 -3.4789944 -1.0659813 128.0 +0.81651676 -3.524029 -1.0786967 128.0 +0.79571837 -3.5327003 -1.0798795 128.0 +0.78097314 -3.5692441 -1.0899336 128.0 +0.76124215 -3.5842476 -1.0931864 128.0 +0.73962092 -3.5907223 -1.0937778 128.0 +0.71757472 -3.5951929 -1.0937778 128.0 +0.69550157 -3.5995281 -1.0937778 128.0 +0.67147088 -3.5933988 -1.090525 128.0 +0.64771152 -3.5880506 -1.0875679 128.0 +0.6151852 -3.5317276 -1.0686426 128.0 +0.60030842 -3.5759451 -1.0813581 128.0 +0.58094758 -3.5955927 -1.0863851 128.0 +0.56034136 -3.6085293 -1.0893422 128.0 +0.53903461 -3.6175685 -1.0911164 128.0 +0.51588184 -3.6141882 -1.0890465 128.0 +0.49046379 -3.5936232 -1.0816538 128.0 +0.46507069 -3.5709889 -1.0736697 128.0 +0.44703352 -3.6050594 -1.083428 128.0 +0.42367464 -3.5972986 -1.0801753 128.0 +0.39968574 -3.5827417 -1.0748525 128.0 +0.37749454 -3.5832267 -1.0742611 128.0 +0.35540679 -3.5845251 -1.0739654 128.0 +0.33331737 -3.5856872 -1.0736697 128.0 +0.31172314 -3.5924232 -1.0751482 128.0 +0.29028937 -3.6018858 -1.0775139 128.0 +0.26903516 -3.6150308 -1.0810624 128.0 +0.24789117 -3.6318624 -1.0857937 128.0 +0.22637281 -3.6457098 -1.0896379 128.0 +0.20464034 -3.6584754 -1.0931864 128.0 +0.18304534 -3.6768358 -1.0985092 128.0 +0.16018903 -3.6712093 -1.0964392 128.0 +0.13755223 -3.6692593 -1.0955521 128.0 +0.11512559 -3.6728985 -1.0964392 128.0 +0.092175998 -3.6573012 -1.0914122 128.0 +0.069843359 -3.6635287 -1.0931864 128.0 +0.047512483 -3.6753507 -1.0967349 128.0 +0.024900744 -3.6669757 -1.0940735 128.0 +0.0024008646 -3.6680148 -1.0943693 128.0 +-0.020157017 -3.6775131 -1.0973263 128.0 +-0.042622492 -3.6687231 -1.0946649 128.0 +-0.065031424 -3.6626618 -1.0928907 128.0 +-0.087367587 -3.6564639 -1.0911164 128.0 +-0.11051593 -3.6797302 -1.0985092 128.0 +-0.13326441 -3.6837561 -1.0999877 128.0 +-0.15606645 -3.6876411 -1.1014662 128.0 +-0.17813671 -3.6751642 -1.0979178 128.0 +-0.20005976 -3.6625557 -1.0943693 128.0 +-0.22212406 -3.6545844 -1.0922993 128.0 +-0.24467139 -3.6550591 -1.0928907 128.0 +-0.26778927 -3.6630163 -1.0958477 128.0 +-0.29071242 -3.6670182 -1.097622 128.0 +-0.31353229 -3.6689725 -1.0988048 128.0 +-0.33647415 -3.6717362 -1.1002834 128.0 +-0.36020496 -3.6819623 -1.1041276 128.0 +-0.38111171 -3.6635301 -1.0991006 128.0 +-0.40389723 -3.6639712 -1.0999877 128.0 +-0.42725447 -3.6690149 -1.1023533 128.0 +-0.45034015 -3.6710653 -1.1038319 128.0 +-0.4737111 -3.674865 -1.1059018 128.0 +-0.73467082 -5.437458 -1.6573974 128.0 +-0.51917261 -3.6716127 -1.106789 128.0 +-0.80845326 -5.4762306 -1.6724784 128.0 +-0.84596115 -5.4966593 -1.6804626 128.0 +-0.88163555 -5.5036278 -1.6843069 128.0 +-0.90754765 -5.4509988 -1.6695215 128.0 +-0.93805051 -5.4283834 -1.6641986 128.0 +-0.97033054 -5.4168835 -1.6624244 128.0 +-1.0030272 -5.4080095 -1.6615373 128.0 +-1.0369109 -5.4055061 -1.6627201 128.0 +-1.0709871 -5.4037275 -1.6641986 128.0 +-1.1046978 -5.3998618 -1.6650858 128.0 +-1.1368243 -5.3883085 -1.6636072 128.0 +-1.1745309 -5.4027019 -1.6704085 128.0 +-1.2076591 -5.3953934 -1.6704085 128.0 +-1.2394561 -5.3822961 -1.6686343 128.0 +-1.2722379 -5.3736601 -1.6683385 128.0 +-1.3081204 -5.3778195 -1.6721828 128.0 +-1.3466471 -5.3919358 -1.6792798 128.0 +-1.3825512 -5.3946762 -1.6828283 128.0 +-1.4090717 -5.3611455 -1.6748441 128.0 +-1.4382141 -5.3385625 -1.6704085 128.0 +-1.4833939 -5.3747597 -1.6848983 128.0 +-1.5184226 -5.372911 -1.6872638 128.0 +-1.5463197 -5.3460569 -1.6816454 128.0 +-1.5801774 -5.3401327 -1.6828283 128.0 +-1.1971774 -3.9560595 -1.2383791 128.0 +-1.223122 -3.9541152 -1.2401533 128.0 +-1.6678431 -5.2773499 -1.6721828 128.0 +-1.7019532 -5.2724714 -1.673957 128.0 +-1.7318808 -5.2546711 -1.6715914 128.0 +-1.761654 -5.236702 -1.6692257 128.0 +-1.7937527 -5.2257938 -1.6692257 128.0 +-1.8257838 -5.2146893 -1.6692257 128.0 +-1.8615998 -5.2141848 -1.6727742 128.0 +-1.894865 -5.2062545 -1.673957 128.0 +-1.9347459 -5.2160263 -1.681054 128.0 +-1.9673898 -5.2058439 -1.6816454 128.0 +-2.0030694 -5.2034807 -1.6848983 128.0 +-2.0339141 -5.1884241 -1.6840111 128.0 +-2.0653572 -5.1749592 -1.6837153 128.0 +-2.0967119 -5.161304 -1.6834197 128.0 +-1.256242 -3.0383518 -0.97667742 128.0 +-1.2744911 -3.0297058 -0.97638172 128.0 +-1.2934327 -3.022707 -0.97667742 128.0 +-2.2189343 -5.099534 -1.6804626 128.0 +-2.252115 -5.0901909 -1.6819412 128.0 +-2.2864397 -5.0832462 -1.6843069 128.0 +-2.3163955 -5.066515 -1.6834197 128.0 +-1.5871806 -3.4156544 -1.1248271 128.0 +-1.6019921 -3.3928933 -1.1203916 128.0 +-1.6141059 -3.3649113 -1.1141816 128.0 +-1.6305388 -3.3463559 -1.1112247 128.0 +-1.648923 -3.3320072 -1.1097461 128.0 +-1.6701945 -3.323534 -1.1103375 128.0 +-1.6922922 -3.3166273 -1.1115203 128.0 +-1.7253503 -3.330781 -1.1200958 128.0 +-1.7582009 -3.3438077 -1.1283756 128.0 +-2.1712484 -4.0687418 -1.3865288 128.0 +-2.1979921 -4.0587029 -1.3877116 128.0 +-2.638217 -4.8011699 -1.654736 128.0 +-2.6611152 -4.77321 -1.6505961 128.0 +-2.7006979 -4.7750854 -1.6571016 128.0 +-2.7318475 -4.7617388 -1.6582845 128.0 +-2.7744646 -4.7680068 -1.6665643 128.0 +-2.809979 -4.7615886 -1.6704085 128.0 +-2.8450286 -4.7540941 -1.673957 128.0 +-2.8786051 -4.7438984 -1.6766183 128.0 +-2.9161675 -4.7399788 -1.6816454 128.0 +-2.9426692 -4.7179432 -1.6801668 128.0 +-2.9736044 -4.7030287 -1.6813498 128.0 +-3.0106521 -4.6975632 -1.6860811 128.0 +-3.048785 -4.6934223 -1.6914037 128.0 +-3.0896063 -4.6929793 -1.6982051 128.0 +-3.1141026 -4.6675758 -1.6958394 128.0 +-3.1400089 -4.644423 -1.6943609 128.0 +-3.1571109 -4.6085186 -1.688151 128.0 +-3.1864181 -4.5906296 -1.6887424 128.0 +-3.2084818 -4.562396 -1.6854897 128.0 +-3.2430665 -4.5519595 -1.6890382 128.0 +-3.2536066 -4.5079613 -1.6798712 128.0 +-3.2823331 -4.4894547 -1.6804626 128.0 +-2.2246039 -3.0036509 -1.1159559 128.0 +-2.2464311 -2.9945297 -1.1177301 128.0 +-3.3707695 -4.436645 -1.6837153 128.0 +-3.4305494 -4.4582777 -1.7002751 128.0 +-3.4384644 -4.4122777 -1.6905167 128.0 +-3.4625142 -4.3873467 -1.6890382 128.0 +-3.4673045 -4.3384066 -1.6780969 128.0 +-3.5166938 -4.3452687 -1.6893338 128.0 +-3.5463171 -4.3273034 -1.6908123 128.0 +-3.5569427 -4.2863479 -1.6831239 128.0 +-3.5592115 -4.2359166 -1.6715914 128.0 +-3.5987527 -4.2300062 -1.6780969 128.0 +-3.591599 -4.1694822 -1.6624244 128.0 +-3.6152313 -4.1452065 -1.6615373 128.0 +-3.6361721 -4.1179328 -1.6594673 128.0 +-3.6651905 -4.0998173 -1.6612415 128.0 +-3.6973283 -4.0850425 -1.6644944 128.0 +-3.7145803 -4.0538268 -1.6609459 128.0 +-3.7517271 -4.0442657 -1.6665643 128.0 +-3.7627394 -4.0065451 -1.6603545 128.0 +-3.7931759 -3.9896133 -1.6630158 128.0 +-3.8195715 -3.9683287 -1.663903 128.0 +-3.8305163 -3.9311328 -1.6579888 128.0 +-3.8404784 -3.8932726 -1.6517789 128.0 +-3.8649697 -3.8703105 -1.6520746 128.0 +-3.890003 -3.8478663 -1.6526661 128.0 +-3.9101236 -3.8205869 -1.6511875 128.0 +-3.9286816 -3.7918789 -1.6491176 128.0 +-3.9663928 -3.7815454 -1.6553274 128.0 +-3.9811766 -3.7492771 -1.6517789 128.0 +-4.0013094 -3.7221756 -1.6505961 128.0 +-4.0170388 -3.6910901 -1.647639 128.0 +-4.0544653 -3.6798561 -1.6538489 128.0 +-4.0719895 -3.650445 -1.6517789 128.0 +-4.1014628 -3.6317244 -1.654736 128.0 +-4.1351738 -3.6165528 -1.6594673 128.0 +-4.1493354 -3.5842421 -1.6562146 128.0 +-4.151629 -3.5419731 -1.6482304 128.0 +-4.1776671 -3.5201261 -1.6500046 128.0 +-4.2035928 -3.4980927 -1.6517789 128.0 +-4.2013621 -3.4528234 -1.6423162 128.0 +-4.2528787 -3.4516633 -1.6544403 128.0 +-4.2456536 -3.4027987 -1.6432034 128.0 +-4.2716961 -3.3808341 -1.6452733 128.0 +-4.3111758 -3.369267 -1.6526661 128.0 +-4.3476491 -3.3550076 -1.6588759 128.0 +-4.3772712 -3.335216 -1.6624244 128.0 +-4.4029965 -3.3123152 -1.6644944 128.0 +-4.4408751 -3.2983384 -1.6712956 128.0 +-4.4764366 -3.2823262 -1.6772099 128.0 +-4.50423 -3.2603993 -1.6801668 128.0 +-4.5233736 -3.2321451 -1.6798712 128.0 +-4.5384369 -3.2010255 -1.6780969 128.0 +-4.5540724 -3.1703887 -1.6766183 128.0 +-4.5939097 -3.1564524 -1.6843069 128.0 +-4.6187253 -3.1319587 -1.6863768 128.0 +-4.6283288 -3.0971839 -1.6828283 128.0 +-4.6448545 -3.0671473 -1.6819412 128.0 +-4.6675882 -3.0411971 -1.6834197 128.0 +-4.6829467 -3.0104334 -1.6822368 128.0 +-4.699717 -2.9806194 -1.6816454 128.0 +-4.7179174 -2.9517264 -1.6816454 128.0 +-4.7465076 -2.929245 -1.6854897 128.0 +-4.7619438 -2.8985755 -1.6846025 128.0 +-4.7780018 -2.8683188 -1.6840111 128.0 +-4.8020873 -2.8428411 -1.6863768 128.0 +-4.8153152 -2.8109143 -1.6848983 128.0 +-4.8515139 -2.7922764 -1.6916995 128.0 +-4.8560934 -2.7553833 -1.6872638 128.0 +-4.9170947 -2.7502532 -1.7029364 128.0 +-4.9263482 -2.7158794 -1.7002751 128.0 +-4.9563498 -2.6928988 -1.7050064 128.0 +-5.0030966 -2.6786709 -1.7156519 128.0 +-5.0287323 -2.6528256 -1.7189046 128.0 +-5.0423722 -2.6205981 -1.7180176 128.0 +-5.0813146 -2.6013646 -1.7260016 128.0 +-5.1057105 -2.574439 -1.7289587 128.0 +-5.1496444 -2.5570846 -1.7387171 128.0 +-5.1746774 -2.530055 -1.7419698 128.0 +-5.1918254 -2.4990849 -1.7425613 128.0 +-5.2234635 -2.4749541 -1.7481798 128.0 +-5.2498059 -2.4481063 -1.7520239 128.0 +-5.2768836 -2.4214265 -1.7561638 128.0 +-5.3029599 -2.3941135 -1.7600081 128.0 +-5.3236613 -2.3642445 -1.762078 128.0 +-5.338943 -2.331917 -1.7623737 128.0 +-5.3461294 -2.2960978 -1.7600081 128.0 +-5.3574772 -2.2621362 -1.7591209 128.0 +-5.3791971 -2.232517 -1.7617823 128.0 +-5.4034085 -2.2037988 -1.7653308 128.0 +-5.3769269 -2.1546102 -1.7520239 128.0 +-5.3464913 -2.1044302 -1.7375343 128.0 +-5.3842511 -2.0812306 -1.7458141 128.0 +-5.4103169 -2.0532393 -1.7502497 128.0 +-5.4630957 -2.035012 -1.7635566 128.0 +-5.5176477 -2.0168698 -1.7774549 128.0 +-5.5514998 -1.9907165 -1.7845519 128.0 +-5.6266909 -1.9788047 -1.8052514 128.0 +-5.7037482 -1.9666673 -1.8265424 128.0 +-5.7989659 -1.9597759 -1.8537475 128.0 +-5.8915896 -1.950888 -1.8800656 128.0 +-5.995224 -1.9444735 -1.909932 128.0 +-6.0507441 -1.9215323 -1.924126 128.0 +-6.1417828 -1.909043 -1.9498526 128.0 +-6.1698313 -1.8763257 -1.9551754 128.0 +-6.1931314 -1.841974 -1.9590195 128.0 +-6.2281661 -1.8108749 -1.9667079 128.0 +-6.2520247 -1.7762814 -1.9708478 128.0 +-6.2388735 -1.7312435 -1.9631594 128.0 +-6.2558331 -1.6946788 -1.9652294 128.0 +-6.2661138 -1.6562618 -1.9652294 128.0 +-6.2752333 -1.6175439 -1.9649338 128.0 +-6.2822609 -1.578311 -1.9640466 128.0 +-6.3011055 -1.5420053 -1.9670037 128.0 +-6.2937217 -1.4993277 -1.961681 128.0 +-6.3130398 -1.4630549 -1.9649338 128.0 +-6.3312173 -1.4263914 -1.9678909 128.0 +-6.3323846 -1.3858826 -1.9655252 128.0 +-6.3360972 -1.3460089 -1.9640466 128.0 +-6.3423653 -1.3067204 -1.9634552 128.0 +-6.3540111 -1.2685281 -1.964638 128.0 +-6.3607373 -1.2293354 -1.9643424 128.0 +-6.3700385 -1.1906346 -1.9649338 128.0 +-6.3800445 -1.1520358 -1.9658209 128.0 +-6.3926396 -1.1138511 -1.9675951 128.0 +-6.3965273 -1.0741309 -1.9667079 128.0 +-6.4029975 -1.0348623 -1.9667079 128.0 +-6.4205542 -0.99731499 -1.9702564 128.0 +-6.4189944 -0.95677328 -1.9678909 128.0 +-6.4313636 -0.9183147 -1.9699608 128.0 +-6.4491816 -0.88051605 -1.973805 128.0 +-6.4487796 -0.84018719 -1.9720308 128.0 +-6.4595013 -0.80130833 -1.973805 128.0 +-6.4766297 -0.76311243 -1.9776492 128.0 +-6.483089 -0.72357023 -1.9782406 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-6.2061787 0.49072126 -1.9647394 128.0 +-6.2087407 0.52927852 -1.9665796 128.0 +-6.1731501 0.56441218 -1.9561521 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-6.1670794 0.98684627 -1.97118 128.0 +-6.0735917 1.0101295 -1.9426576 128.0 +-6.0841618 1.0502949 -1.9481781 128.0 +-6.0738554 1.0869354 -1.9469513 128.0 +-6.0680075 1.124357 -1.947258 128.0 +-6.0441685 1.1583406 -1.9417375 128.0 +-6.0565538 1.1992913 -1.9481781 128.0 +-6.0854483 1.2438716 -1.960139 128.0 +-6.0749078 1.2805983 -1.959219 128.0 +-6.0557747 1.3154225 -1.9555386 128.0 +-6.0578065 1.3548424 -1.9589123 128.0 +-6.055872 1.3934822 -1.9610591 128.0 +-6.0296097 1.4264474 -1.955232 128.0 +-6.0050216 1.4595929 -1.9500182 128.0 +-5.9968762 1.4966422 -1.9503249 128.0 +-5.9811258 1.531756 -1.9481781 128.0 +-5.9697738 1.5679429 -1.9475647 128.0 +-5.9434977 1.6000862 -1.9420443 128.0 +-5.9363203 1.6372845 -1.9429643 128.0 +-5.9334898 1.6757492 -1.9454179 128.0 +-5.9194388 1.7110668 -1.9441911 128.0 +-5.8905749 1.741954 -1.9380572 128.0 +-5.8934407 1.7822002 -1.9426576 128.0 +-5.8905778 1.8208596 -1.9454179 128.0 +-5.878387 1.8566823 -1.9451112 128.0 +-5.8831878 1.8979797 -1.9506316 128.0 +-5.8397923 1.9236141 -1.9398974 128.0 +-5.8125434 1.9542508 -1.9346836 128.0 +-5.7725353 1.9802994 -1.9251761 128.0 +-5.7764459 2.0213435 -1.9306966 128.0 +-5.7791729 2.0621898 -1.9359103 128.0 +-5.7619386 2.0959837 -1.934377 128.0 +-5.7454 2.1299746 -1.9331502 128.0 +-5.7331128 2.1655242 -1.9334568 128.0 +-5.7170525 2.1996353 -1.9325367 128.0 +-5.7016759 2.2339783 -1.9319234 128.0 +-5.6940494 2.2713909 -1.9340702 128.0 +-5.6844139 2.3080773 -1.9356037 128.0 +-5.65871 2.3381853 -1.9316167 128.0 +-5.6591721 2.3791361 -1.9368304 128.0 +-5.6470923 2.4149387 -1.9377506 128.0 +-5.6286774 2.448024 -1.9365238 128.0 +-5.6239953 2.4871364 -1.940204 128.0 +-5.6103649 2.5223787 -1.9408175 128.0 +-5.5965137 2.5575473 -1.9414308 128.0 +-5.578989 2.5910366 -1.9408175 128.0 +-5.5595431 2.6235943 -1.9395907 128.0 +-5.5364747 2.6543646 -1.9371371 128.0 +-5.5200834 2.6882856 -1.9371371 128.0 +-5.4301205 2.6858015 -1.9107616 128.0 +-5.4722204 2.7485578 -1.9319234 128.0 +-5.4620352 2.7855437 -1.934377 128.0 +-5.4499116 2.8216324 -1.9362171 128.0 +-5.4375505 2.857677 -1.9380572 128.0 +-5.4098372 2.8856101 -1.934377 128.0 +-5.4020729 2.9241889 -1.9380572 128.0 +-5.3840289 2.9572804 -1.9380572 128.0 +-5.3607941 2.9874794 -1.9362171 128.0 +-5.3373914 3.0175049 -1.934377 128.0 +-5.3146482 3.0478294 -1.9328434 128.0 +-5.2835069 3.0732014 -1.928243 128.0 +-5.2596326 3.1026599 -1.9264029 128.0 +-5.2470298 3.1387844 -1.9288565 128.0 +-5.23174 3.1733892 -1.9303899 128.0 +-5.2073064 3.2024384 -1.9285498 128.0 +-5.1915965 3.2368481 -1.9300833 128.0 +-5.172442 3.269151 -1.9303899 128.0 +-5.1482787 3.2982588 -1.9288565 128.0 +-5.1255498 3.3282306 -1.9279364 128.0 +-5.1058264 3.360141 -1.928243 128.0 +-5.0724449 3.3829544 -1.923336 128.0 +-5.04213 3.4076173 -1.9196557 128.0 +-5.0384011 3.4503257 -1.9264029 128.0 +-5.0147896 3.4795475 -1.9254829 128.0 +-4.9949021 3.5113473 -1.9260962 128.0 +-4.9794645 3.5463479 -1.9285498 128.0 +-4.9545236 3.5746062 -1.927323 128.0 +-4.9378753 3.6088717 -1.9294698 128.0 +-4.9064603 3.6323044 -1.9257895 128.0 +-4.887126 3.6646261 -1.9270163 128.0 +-4.8668218 3.6962714 -1.9279364 128.0 +-4.8395243 3.7225814 -1.9260962 128.0 +-4.8098354 3.7469404 -1.923336 128.0 +-4.7867541 3.7763824 -1.923336 128.0 +-4.764236 3.8062766 -1.9236426 128.0 +-4.74893 3.8420243 -1.9270163 128.0 +-4.725266 3.8710909 -1.9270163 128.0 +-4.7702751 3.9571476 -1.9558454 128.0 +-4.7203999 3.9649122 -1.9451112 128.0 +-4.6793094 3.9796157 -1.9380572 128.0 +-4.6483126 4.0026617 -1.935297 128.0 +-4.6150575 4.0236001 -1.9316167 128.0 +-4.5867147 4.0486917 -1.9300833 128.0 +-0 0 -0 128.0 +-4.5416255 4.1091442 -1.9322301 128.0 +-4.5008883 4.122787 -1.9254829 128.0 +-4.4741111 4.1490316 -1.9248694 128.0 +-4.4575882 4.1848769 -1.9288565 128.0 +-4.4235492 4.2042789 -1.9251761 128.0 +-4.4196129 4.2524643 -1.9349903 128.0 +-4.3736682 4.2602391 -1.9260962 128.0 +-4.3488007 4.288332 -1.9267097 128.0 +-4.3190384 4.3115721 -1.9251761 128.0 +-4.290494 4.3359623 -1.9242561 128.0 +-4.2551608 4.3533564 -1.9202691 128.0 +-4.2131662 4.3636317 -1.9132152 128.0 +-4.2060156 4.410068 -1.922416 128.0 +-4.1736565 4.4302492 -1.9199624 128.0 +-4.1509323 4.4606533 -1.9221092 128.0 +-4.121552 4.4839363 -1.9211892 128.0 +-4.1041961 4.5204182 -1.9260962 128.0 +-4.0789237 4.5483508 -1.927323 128.0 +-4.0559864 4.5789943 -1.9297765 128.0 +-4.018415 4.5930481 -1.9251761 128.0 +-3.9777133 4.6032119 -1.9190423 128.0 +-3.9438338 4.6210151 -1.9162821 128.0 +-3.9074328 4.6356649 -1.9122951 128.0 +-3.8843946 4.6661377 -1.9150553 128.0 +-3.858108 4.6928253 -1.9162821 128.0 +-3.8286409 4.7156711 -1.9159753 128.0 +-3.7978482 4.736846 -1.9150553 128.0 +-3.768712 4.7600603 -1.9150553 128.0 +-3.7476392 4.7935944 -1.919349 128.0 +-3.7059445 4.8006749 -1.9129084 128.0 +-3.6868017 4.8369513 -1.9184289 128.0 +-3.6541924 4.855679 -1.9168955 128.0 +-3.6192222 4.8711324 -1.9141352 128.0 +-3.596019 4.9024587 -1.9178156 128.0 +-3.5374079 4.8851089 -1.9021742 128.0 +-3.5140069 4.9160156 -1.9058546 128.0 +-3.4722564 4.9211502 -1.8994139 128.0 +-3.4615724 4.9704852 -1.9104549 128.0 +-3.4067538 4.9563293 -1.8966538 128.0 +-3.3880301 4.9944706 -1.903401 128.0 +-3.3488514 5.0025086 -1.8984939 128.0 +-3.3369746 5.0515566 -1.9095348 128.0 +-3.3111117 5.0799112 -1.9126017 128.0 +-3.2582631 5.066505 -1.8997207 128.0 +-3.2281337 5.0880094 -1.9003341 128.0 +-3.2205801 5.1456456 -1.9147487 128.0 +-3.1769497 5.1458702 -1.907388 128.0 +-3.1562028 5.1831536 -1.9141352 128.0 +-3.1204212 5.1958938 -1.9116817 128.0 +-3.0870264 5.2124853 -1.9107616 128.0 +-3.0631421 5.2453032 -1.9159753 128.0 +-3.0123837 5.2318268 -1.9040143 128.0 +-2.991498 5.2700801 -1.911375 128.0 +-2.9539943 5.2791986 -1.9080014 128.0 +-2.9174104 5.2897224 -1.9052411 128.0 +-2.8898966 5.3167238 -1.9086148 128.0 +-2.8572195 5.3343558 -1.9086148 128.0 +-2.8342047 5.3703079 -1.915362 128.0 +-2.7941771 5.374084 -1.9104549 128.0 +-2.7650533 5.3987527 -1.9132152 128.0 +-2.7220192 5.3960695 -1.9061612 128.0 +-2.687165 5.4092603 -1.9049344 128.0 +-2.6472349 5.4119649 -1.9000274 128.0 +-2.636682 5.475276 -1.9168955 128.0 +-2.6026292 5.4904914 -1.9165888 128.0 +-2.5910149 5.553802 -1.9334568 128.0 +-2.5485528 5.5514293 -1.9270163 128.0 +-2.5160084 5.5704322 -1.928243 128.0 +-2.4694197 5.5579286 -1.9184289 128.0 +-2.422318 5.5433197 -1.9080014 128.0 +-2.3807473 5.5405874 -1.9018675 128.0 +-2.348187 5.5585985 -1.9030943 128.0 +-2.3144007 5.573781 -1.903401 128.0 +-2.2873456 5.6055036 -1.9095348 128.0 +-2.2603424 5.6379871 -1.9159753 128.0 +-2.2323291 5.6685777 -1.9218025 128.0 +-2.1909854 5.6653004 -1.9159753 128.0 +-2.156858 5.6804171 -1.9165888 128.0 +-2.1206341 5.6899767 -1.915362 128.0 +-2.0879683 5.7091393 -1.9175088 128.0 +-2.0535409 5.7236352 -1.9181222 128.0 +-2.0155408 5.7280464 -1.915362 128.0 +-1.9791154 5.7367063 -1.9141352 128.0 +-1.9447925 5.7514472 -1.9150553 128.0 +-1.9103632 5.7659826 -1.9159753 128.0 +-1.8749478 5.777596 -1.9159753 128.0 +-1.8460873 5.8098564 -1.9230293 128.0 +-1.8262236 5.871974 -1.940204 128.0 +-1.7904364 5.8839798 -1.9405107 128.0 +-1.7545706 5.8957672 -1.9408175 128.0 +-1.707999 5.8707771 -1.9288565 128.0 +-1.6880708 5.9379129 -1.9478713 128.0 +-1.6414254 5.9114723 -1.9356037 128.0 +-1.6133344 5.9517503 -1.9457245 128.0 +-1.5558691 5.8823991 -1.919349 128.0 +-1.5171329 5.8816962 -1.9159753 128.0 +-1.4837977 5.9019723 -1.9196557 128.0 +-1.4459723 5.9044938 -1.9175088 128.0 +-1.4108186 5.9178843 -1.9190423 128.0 +-1.3731914 5.920866 -1.9172021 128.0 +-1.3374633 5.9319658 -1.9181222 128.0 +-1.3032784 5.9502888 -1.9214958 128.0 +-1.2710943 5.9786563 -1.928243 128.0 +-1.2353463 5.9910045 -1.9297765 128.0 +-1.197445 5.9928713 -1.9279364 128.0 +-1.1622761 6.0085163 -1.9306966 128.0 +-1.1259114 6.0183415 -1.9316167 128.0 +-1.0882858 6.02139 -1.9303899 128.0 +-1.0490317 6.0148268 -1.9260962 128.0 +-1.0097418 6.0070701 -1.9214958 128.0 +-0.97498977 6.0263076 -1.9257895 128.0 +-0.9398936 6.0444036 -1.9297765 128.0 +-0.90292847 6.0509982 -1.9300833 128.0 +-0.86659032 6.062078 -1.9319234 128.0 +-0.83040768 6.0748258 -1.934377 128.0 +-0.79287171 6.077919 -1.9337635 128.0 +-0.75521195 6.0798359 -1.9328434 128.0 +-0.7191174 6.0947533 -1.9362171 128.0 +-0.68149608 6.0971589 -1.9356037 128.0 +-0.64606667 6.1201572 -1.9417375 128.0 +-0.6065293 6.104116 -1.935297 128.0 +-0.56879938 6.1048794 -1.934377 128.0 +-0.53363436 6.1348052 -1.9429643 128.0 +-0.49322841 6.1038098 -1.9319234 128.0 +-0.45626149 6.1133657 -1.9340702 128.0 +-0.41880682 6.1169996 -1.934377 128.0 +-0.38097072 6.1147041 -1.9328434 128.0 +-0.3437103 6.1216784 -1.934377 128.0 +-0.3065207 6.1312771 -1.9368304 128.0 +-0.26843747 6.1225824 -1.9334568 128.0 +-0.23125741 6.1345773 -1.9368304 128.0 +-0.1932539 6.1244645 -1.9331502 128.0 +-0.15547925 6.1179228 -1.9306966 128.0 +-0.11797378 6.1206651 -1.9313099 128.0 +-0.080551431 6.1317425 -1.9346836 128.0 +-0.042919762 6.1311698 -1.934377 128.0 +-0.0053007351 6.1341729 -1.935297 128.0 +0.032337941 6.1340899 -1.935297 128.0 +0.069853999 6.1233072 -1.9319234 128.0 +0.10739084 6.1208596 -1.9313099 128.0 +0.14537729 6.138165 -1.9371371 128.0 +0.18303762 6.1371574 -1.9371371 128.0 +0.22051913 6.1311626 -1.9356037 128.0 +0.25841665 6.1363511 -1.9377506 128.0 +0.2959716 6.1327486 -1.9371371 128.0 +0.33219478 6.1051564 -1.9288565 128.0 +0.36878321 6.0887523 -1.9242561 128.0 +0.40308568 6.0407901 -1.9095348 128.0 +0.44368193 6.086616 -1.9251761 128.0 +0.48214838 6.0980115 -1.9297765 128.0 +0.52012312 6.1015768 -1.9319234 128.0 +0.55798614 6.1030097 -1.9334568 128.0 +0.5944038 6.0890508 -1.9300833 128.0 +0.62880039 6.0568881 -1.9208825 128.0 +0.6672042 6.0642686 -1.9245628 128.0 +0.70264012 6.0449338 -1.9196557 128.0 +0.74122423 6.0527902 -1.9236426 128.0 +0.77871448 6.0509605 -1.9245628 128.0 +0.8168475 6.0536141 -1.9270163 128.0 +0.85504234 6.0560279 -1.9294698 128.0 +0.8931585 6.0572586 -1.9316167 128.0 +0.92987394 6.048842 -1.9306966 128.0 +0.96576691 6.0355039 -1.928243 128.0 +1.0026255 6.0285254 -1.9279364 128.0 +1.039597 6.0222602 -1.9279364 128.0 +1.0748509 6.0063987 -1.9248694 128.0 +1.111338 5.9978189 -1.9242561 128.0 +1.1477604 5.9890175 -1.9236426 128.0 +1.1861522 5.9902649 -1.9264029 128.0 +1.2221223 5.9791441 -1.9251761 128.0 +1.2574112 5.9650135 -1.9230293 128.0 +1.2915616 5.9460254 -1.919349 128.0 +1.3263581 5.9305577 -1.9168955 128.0 +1.3648585 5.9315829 -1.9199624 128.0 +1.4021055 5.9268017 -1.9211892 128.0 +1.4388952 5.9199367 -1.9218025 128.0 +1.4735776 5.904532 -1.9196557 128.0 +1.5175776 5.9258056 -1.9297765 128.0 +1.5558448 5.9237466 -1.9322301 128.0 +1.5926582 5.9159265 -1.9328434 128.0 +1.6263952 5.8968678 -1.9297765 128.0 +1.6672066 5.9032645 -1.935297 128.0 +1.7041904 5.8956661 -1.9362171 128.0 +1.7438445 5.8969636 -1.940204 128.0 +1.7827517 5.8952627 -1.943271 128.0 +1.819172 5.8851223 -1.9435776 128.0 +1.8242697 5.7758327 -1.9104549 128.0 +1.8628916 5.7744942 -1.9138285 128.0 +1.8851782 5.7231803 -1.9003341 128.0 +1.9257224 5.7277436 -1.9058546 128.0 +1.9657753 5.7302237 -1.9107616 128.0 +1.9939783 5.6982908 -1.9040143 128.0 +2.0337055 5.6993942 -1.9086148 128.0 +2.0731957 5.6993303 -1.9129084 128.0 +2.1107752 5.6936412 -1.915362 128.0 +2.1473536 5.6850343 -1.9168955 128.0 +2.1794603 5.6646452 -1.9144419 128.0 +2.2166085 5.6573687 -1.9165888 128.0 +2.2519855 5.6454291 -1.9172021 128.0 +2.2869411 5.6323867 -1.9175088 128.0 +2.3196394 5.6138506 -1.9159753 128.0 +2.346292 5.5810871 -1.9095348 128.0 +2.3759997 5.5560846 -1.9058546 128.0 +2.4111857 5.5440197 -1.9067746 128.0 +2.4501646 5.5404358 -1.9107616 128.0 +2.5001225 5.5608869 -1.923336 128.0 +2.5195527 5.5134139 -1.9119884 128.0 +2.5549393 5.5013032 -1.9132152 128.0 +2.5902719 5.4889655 -1.9144419 128.0 +2.6173167 5.4592376 -1.9095348 128.0 +2.6553504 5.4524875 -1.9129084 128.0 +2.684535 5.4275608 -1.9098415 128.0 +2.71736 5.4101362 -1.9095348 128.0 +2.7474768 5.3874264 -1.907388 128.0 +2.7822328 5.3738475 -1.9086148 128.0 +2.8045228 5.3364558 -1.9012542 128.0 +2.8399026 5.3241854 -1.9030943 128.0 +2.8738775 5.3091707 -1.9040143 128.0 +2.898149 5.276422 -1.8984939 128.0 +2.922127 5.243576 -1.8929734 128.0 +2.9533088 5.2238908 -1.8923601 128.0 +2.9914641 5.2164035 -1.896347 128.0 +3.0258086 5.2020636 -1.8978806 128.0 +3.0600896 5.1874981 -1.8994139 128.0 +3.0962608 5.1759748 -1.9021742 128.0 +3.1264803 5.1544375 -1.9012542 128.0 +3.1640337 5.1448851 -1.9049344 128.0 +3.1925204 5.1205282 -1.9030943 128.0 +3.2223532 5.0984297 -1.9021742 128.0 +3.2520351 5.0761576 -1.9012542 128.0 +3.2784541 5.0489244 -1.8984939 128.0 +3.3093719 5.0287132 -1.8984939 128.0 +3.3401651 5.0083127 -1.8984939 128.0 +3.3697665 4.9861465 -1.8978806 128.0 +3.3997595 4.964591 -1.8975738 128.0 +3.4323287 4.9467645 -1.8988006 128.0 +3.4604268 4.9224968 -1.8975738 128.0 +3.4905655 4.9011712 -1.8975738 128.0 +3.5205729 4.8796611 -1.8975738 128.0 +3.5521328 4.8602724 -1.8984939 128.0 +3.5926511 4.8529186 -1.9043211 128.0 +3.6183624 4.8254533 -1.9021742 128.0 +3.6473267 4.8024025 -1.9018675 128.0 +3.6744032 4.7769156 -1.9006407 128.0 +3.7077403 4.7595348 -1.9027876 128.0 +3.7356951 4.7352009 -1.9021742 128.0 +3.7664621 4.7144203 -1.9030943 128.0 +3.8150785 4.7156363 -1.9132152 128.0 +3.8439415 4.6921387 -1.9132152 128.0 +3.859895 4.6530828 -1.9067746 128.0 +3.8859239 4.6263967 -1.9055479 128.0 +3.9167049 4.6053658 -1.9067746 128.0 +3.935571 4.5704293 -1.9021742 128.0 +3.9654174 4.548347 -1.9030943 128.0 +3.9913609 4.52179 -1.9021742 128.0 +4.0095153 4.4865704 -1.8975738 128.0 +4.0439949 4.4696465 -1.9009475 128.0 +4.0681286 4.4412403 -1.8994139 128.0 +4.0953031 4.4161949 -1.8994139 128.0 +4.1203685 4.3889022 -1.8984939 128.0 +4.1518116 4.3683658 -1.9006407 128.0 +4.1897583 4.3544664 -1.9058546 128.0 +4.2157335 4.3279948 -1.9055479 128.0 +4.244884 4.3047566 -1.9067746 128.0 +4.2779436 4.2853642 -1.9098415 128.0 +4.3007741 4.2556877 -1.908308 128.0 +4.3234015 4.225893 -1.9067746 128.0 +4.3396616 4.1900315 -1.902481 128.0 +4.3804455 4.177774 -1.9092282 128.0 +4.3859024 4.1318941 -1.9003341 128.0 +4.4035068 4.0977736 -1.8969605 128.0 +4.4299693 4.0719652 -1.8975738 128.0 +4.4534612 4.0434275 -1.8969605 128.0 +4.4781876 4.0160255 -1.8969605 128.0 +4.5013199 3.98721 -1.896347 128.0 +4.5278497 3.9613953 -1.8972671 128.0 +4.5571132 3.9378936 -1.8994139 128.0 +4.5819139 3.9104753 -1.8997207 128.0 +4.6094613 3.885354 -1.9012542 128.0 +4.6397991 3.8624773 -1.9040143 128.0 +4.6442924 3.818223 -1.8960404 128.0 +4.6883264 3.8064485 -1.9046278 128.0 +4.7019386 3.7698715 -1.9006407 128.0 +4.7190108 3.7362247 -1.8981873 128.0 +4.7560964 3.7183347 -1.9040143 128.0 +4.7765617 3.6873374 -1.9030943 128.0 +4.7990966 3.6579595 -1.9030943 128.0 +4.8153663 3.6238666 -1.9006407 128.0 +4.8252854 3.5851717 -1.8957337 128.0 +4.8640795 3.5678785 -1.902481 128.0 +4.8928194 3.5429888 -1.9052411 128.0 +4.8858128 3.4924264 -1.8938936 128.0 +4.9001493 3.4574447 -1.8911333 128.0 +4.9353328 3.4371011 -1.8966538 128.0 +4.9728036 3.4180729 -1.9030943 128.0 +4.9976215 3.3901668 -1.9046278 128.0 +5.0199113 3.3604968 -1.9052411 128.0 +5.0340824 3.3254364 -1.9027876 128.0 +5.0599742 3.2981222 -1.9049344 128.0 +5.0857205 3.2706153 -1.9070814 128.0 +5.1113195 3.2429168 -1.9092282 128.0 +5.1222453 3.2059402 -1.9058546 128.0 +5.1466804 3.1774495 -1.9076947 128.0 +5.1612015 3.1428411 -1.9058546 128.0 +5.1852851 3.1140525 -1.9076947 128.0 +5.2018375 3.080723 -1.9067746 128.0 +5.2189989 3.0477877 -1.9061612 128.0 +5.2442007 3.0195053 -1.9086148 128.0 +5.2775307 2.9957254 -1.9141352 128.0 +5.2858443 2.9577112 -1.9104549 128.0 +5.3047266 2.9256816 -1.9107616 128.0 +5.312542 2.8876247 -1.9070814 128.0 +5.3402295 2.8603642 -1.9107616 128.0 +5.3484197 2.8226583 -1.907388 128.0 +5.3690166 2.7915435 -1.9086148 128.0 +5.3979053 2.7646196 -1.9129084 128.0 +5.4037185 2.7258759 -1.9089215 128.0 +5.4169326 2.6909747 -1.9076947 128.0 +5.4076896 2.6451447 -1.8984939 128.0 +5.4444013 2.6218212 -1.9058546 128.0 +5.4483438 2.5826602 -1.9015609 128.0 +5.4787531 2.5560193 -1.9067746 128.0 +5.5081749 2.5287054 -1.9116817 128.0 +5.5123096 2.489769 -1.9076947 128.0 +5.5335717 2.4586034 -1.9098415 128.0 +5.5494256 2.4249847 -1.9101483 128.0 +5.571197 2.3938932 -1.9126017 128.0 +5.5875344 2.3604043 -1.9132152 128.0 +5.6071873 2.3282645 -1.9150553 128.0 +5.6160798 2.2916589 -1.9132152 128.0 +5.6424046 2.2621124 -1.9175088 128.0 +5.657064 2.2277973 -1.9178156 128.0 +5.6706271 2.1930444 -1.9178156 128.0 +5.6919856 2.161248 -1.9205757 128.0 +5.7051396 2.126282 -1.9205757 128.0 +5.7261243 2.0941765 -1.923336 128.0 +5.7316985 2.0564322 -1.9208825 128.0 +5.73523 2.0180669 -1.9178156 128.0 +5.7502041 1.9837689 -1.9187356 128.0 +5.7703834 1.9511914 -1.9214958 128.0 +5.7822471 1.9157484 -1.9214958 128.0 +5.7920823 1.8796458 -1.9208825 128.0 +5.802599 1.8437828 -1.9205757 128.0 +5.8219833 1.8106865 -1.923336 128.0 +5.832984 1.7749294 -1.923336 128.0 +5.8419404 1.7385628 -1.9227226 128.0 +5.8570681 1.7040132 -1.9242561 128.0 +5.8701601 1.6688231 -1.9251761 128.0 +5.8784547 1.6322641 -1.9245628 128.0 +5.8791723 1.5936754 -1.9214958 128.0 +5.8888407 1.5575715 -1.9214958 128.0 +5.8872266 1.5185583 -1.9178156 128.0 +5.9019723 1.4837977 -1.9196557 128.0 +5.8998709 1.4448413 -1.9159753 128.0 +5.9308472 1.4139063 -1.923336 128.0 +5.931993 1.3757697 -1.9208825 128.0 +5.9449658 1.3403918 -1.922416 128.0 +5.9558678 1.3044993 -1.923336 128.0 +5.9637599 1.2679302 -1.923336 128.0 +5.9658341 1.2301611 -1.9214958 128.0 +5.9816704 1.1952091 -1.9242561 128.0 +5.9954329 1.159748 -1.9264029 128.0 +6.0117922 1.1246873 -1.9294698 128.0 +6.01296 1.0867639 -1.9276297 128.0 +6.0251412 1.0508287 -1.9294698 128.0 +6.0295982 1.0135242 -1.9288565 128.0 +6.0357037 0.97650814 -1.9288565 128.0 +6.0444036 0.9398936 -1.9297765 128.0 +6.0368772 0.90082401 -1.9254829 128.0 +6.0592513 0.8661868 -1.9310033 128.0 +6.0550213 0.82770425 -1.9279364 128.0 +6.065649 0.79127347 -1.9297765 128.0 +6.0826693 0.75556338 -1.9337635 128.0 +6.0890818 0.71844929 -1.934377 128.0 +6.0962129 0.68139052 -1.935297 128.0 +6.0917602 0.64307433 -1.9325367 128.0 +6.0899081 0.6051203 -1.9306966 128.0 +6.0783429 0.56633198 -1.9257895 128.0 +6.098772 0.53050679 -1.9313099 128.0 +6.1009636 0.49299896 -1.9310033 128.0 +6.105772 0.4556962 -1.9316167 128.0 +6.1084533 0.41822332 -1.9316167 128.0 +6.1166043 0.38108873 -1.9334568 128.0 +6.1226287 0.34376347 -1.9346836 128.0 +6.1360302 0.30675742 -1.9383639 128.0 +6.1387482 0.26914316 -1.9386706 128.0 +6.1374307 0.23136443 -1.9377506 128.0 +6.129221 0.19340311 -1.9346836 128.0 +6.1312442 0.15581527 -1.9349903 128.0 +6.1197133 0.11795562 -1.9310033 128.0 +6.1250806 0.08046516 -1.9325367 128.0 +6.1368804 0.042958666 -1.9362171 128.0 +6.1284623 0.0052968725 -1.9334568 128.0 +6.125524 -0.032291174 -1.9325367 128.0 +6.1147413 -0.069754675 -1.9291631 128.0 +6.1084881 -0.10717145 -1.927323 128.0 +6.1124735 -0.14476399 -1.9288565 128.0 +6.1143241 -0.18235235 -1.9297765 128.0 +6.117846 -0.22003765 -1.9313099 128.0 +6.1230373 -0.25785351 -1.9334568 128.0 +6.1213403 -0.29541889 -1.9334568 128.0 +6.1165609 -0.33281749 -1.9325367 128.0 +6.1277046 -0.37114987 -1.9368304 128.0 +6.124362 -0.4086782 -1.9365238 128.0 +6.1255364 -0.44652641 -1.9377506 128.0 +6.1302719 -0.48470521 -1.940204 128.0 +6.120544 -0.52174354 -1.9380572 128.0 +6.119123 -0.55946237 -1.9386706 128.0 +6.1212587 -0.59755397 -1.9405107 128.0 +6.1184239 -0.63520056 -1.9408175 128.0 +6.1106267 -0.67231345 -1.9395907 128.0 +6.110168 -0.71023518 -1.9408175 128.0 +6.1056952 -0.74771309 -1.9408175 128.0 +6.0811682 -0.78260785 -1.934377 128.0 +6.0866275 -0.82130849 -1.9377506 128.0 +6.090898 -0.8599723 -1.9408175 128.0 +6.0694995 -0.89496577 -1.9356037 128.0 +6.0742416 -0.93378347 -1.9389772 128.0 +6.0571198 -0.96922994 -1.935297 128.0 +6.0595088 -1.0077845 -1.9380572 128.0 +6.0400801 -1.0426767 -1.9337635 128.0 +6.0494962 -1.0825716 -1.9389772 128.0 +6.0427394 -1.1196702 -1.9389772 128.0 +6.0310817 -1.15583 -1.9374439 128.0 +6.0313454 -1.1942948 -1.9398974 128.0 +6.0211062 -1.2307075 -1.9389772 128.0 +6.011579 -1.2672362 -1.9383639 128.0 +6.0083404 -1.3051097 -1.9398974 128.0 +5.9955754 -1.3409121 -1.9383639 128.0 +5.9918723 -1.3787431 -1.9398974 128.0 +5.9907093 -1.4172369 -1.9423509 128.0 +5.9717274 -1.4514939 -1.9389772 128.0 +5.9737902 -1.4908761 -1.9426576 128.0 +5.9553099 -1.5251395 -1.9395907 128.0 +5.9357138 -1.5589902 -1.9362171 128.0 +5.9453359 -1.6005814 -1.9426576 128.0 +5.9555879 -1.6426024 -1.9494048 128.0 +5.9389858 -1.6773024 -1.947258 128.0 +5.9240103 -1.7123892 -1.9457245 128.0 +5.8960509 -1.7435745 -1.9398974 128.0 +5.8916187 -1.7816489 -1.9420443 128.0 +5.8860316 -1.8194532 -1.9438844 128.0 +5.8520679 -1.848364 -1.9362171 128.0 +5.8297467 -1.880728 -1.9325367 128.0 +5.7882662 -1.9066309 -1.922416 128.0 +5.7710457 -1.9402901 -1.9205757 128.0 +5.6852112 -1.9503241 -1.895427 128.0 +5.6084571 -1.9625241 -1.8733451 128.0 +5.5183244 -1.9690558 -1.846663 128.0 +5.4202757 -1.9716264 -1.8172204 128.0 +5.3527474 -1.984324 -1.7982056 128.0 +5.2843795 -1.9959313 -1.7788839 128.0 +5.2080784 -2.0036976 -1.7568021 128.0 +5.1761909 -2.0279734 -1.750055 128.0 +5.125638 -2.0445242 -1.7368672 128.0 +5.080369 -2.0626812 -1.7255195 128.0 +5.0412292 -2.0829055 -1.7163187 128.0 +4.9985237 -2.1012514 -1.7058913 128.0 +4.9811611 -2.1300101 -1.7043577 128.0 +4.9357057 -2.1464822 -1.6930101 128.0 +4.8789215 -2.1574705 -1.6776755 128.0 +4.82653 -2.1697958 -1.6638744 128.0 +4.7482042 -2.1696868 -1.6408725 128.0 +4.5379972 -2.1073341 -1.5709467 128.0 +4.3623095 -2.0583355 -1.5129818 128.0 +4.3229938 -2.0723023 -1.5034744 128.0 +4.2982178 -2.0929523 -1.4991807 128.0 +4.2332573 -2.0935354 -1.4804724 128.0 +4.1744065 -2.0963929 -1.4639111 128.0 +4.0181813 -2.0488613 -1.41208 128.0 +3.9100313 -2.0240095 -1.3774239 128.0 +4.0028458 -2.1033316 -1.4157604 128.0 +3.9520769 -2.107688 -1.4019593 128.0 +3.9541354 -2.1400564 -1.4074798 128.0 +4.1119328 -2.2582467 -1.4703516 128.0 +4.0057211 -2.231987 -1.4363087 128.0 +4.0772834 -2.3047879 -1.467898 128.0 +3.9466574 -2.2629762 -1.4246545 128.0 +3.5353525 -2.0559299 -1.2765222 128.0 +3.4538157 -2.0369484 -1.25076 128.0 +3.4110334 -2.0400176 -1.2394124 128.0 +3.3821776 -2.0510333 -1.2332785 128.0 +3.3516943 -2.0607746 -1.2265313 128.0 +3.3058755 -2.0606487 -1.213957 128.0 +3.2569675 -2.0580041 -1.2001557 128.0 +3.3909252 -2.1719382 -1.2562804 128.0 +3.1540439 -2.0475223 -1.1704066 128.0 +3.1239316 -2.0553219 -1.1636595 128.0 +3.0985935 -2.065999 -1.1587523 128.0 +3.1000514 -2.0945687 -1.1642728 128.0 +3.0643697 -2.0979507 -1.1553787 128.0 +3.0209451 -2.0955467 -1.1434177 128.0 +2.9768882 -2.0921421 -1.13115 128.0 +2.9539175 -2.1031888 -1.1271631 128.0 +2.9154885 -2.1028914 -1.1170422 128.0 +2.8433678 -2.0774846 -1.0934269 128.0 +2.8037963 -2.0750656 -1.0826926 128.0 +2.8199439 -2.1139343 -1.094347 128.0 +2.7841837 -2.1139228 -1.0851462 128.0 +2.7666347 -2.1274836 -1.0833061 128.0 +2.746021 -2.1385686 -1.0802392 128.0 +2.7642276 -2.1801438 -1.0931202 128.0 +2.7448504 -2.1923099 -1.0906667 128.0 +2.7180295 -2.1983323 -1.0851462 128.0 +2.7044897 -2.2149684 -1.0851462 128.0 +2.6835234 -2.2254429 -1.0820793 128.0 +2.6625307 -2.2357435 -1.0790124 128.0 +2.6458626 -2.2495713 -1.0777856 128.0 +2.6406634 -2.2732184 -1.0814658 128.0 +2.6173403 -2.2812452 -1.0774789 128.0 +2.5911648 -2.2865517 -1.0722651 128.0 +2.5565081 -2.2840109 -1.0633711 128.0 +2.5572648 -2.3130674 -1.0698116 128.0 +2.5065334 -2.2952771 -1.0538636 128.0 +2.4951937 -2.3132031 -1.0550903 128.0 +2.4865036 -2.3336825 -1.0575439 128.0 +2.4748967 -2.3515189 -1.0587707 128.0 +2.467279 -2.373261 -1.0618376 128.0 +2.4601691 -2.3956621 -1.0652112 128.0 +2.4400024 -2.4053648 -1.0627576 128.0 +2.4204831 -2.4155831 -1.0606108 128.0 +2.4089625 -2.4337728 -1.0621443 128.0 +2.3999705 -2.4546351 -1.0649046 128.0 +2.3881688 -2.4727392 -1.066438 128.0 +2.4011929 -2.516969 -1.0796257 128.0 +2.3889666 -2.5351195 -1.0811592 128.0 +2.362994 -2.5385797 -1.0762521 128.0 +2.3435092 -2.5488257 -1.074412 128.0 +2.323348 -2.5582237 -1.0722651 128.0 +2.3037953 -2.5681789 -1.0704249 128.0 +2.2861009 -2.5801287 -1.0695049 128.0 +2.2677202 -2.5912414 -1.0682781 128.0 +2.2480447 -2.6007853 -1.066438 128.0 +2.230809 -2.6130819 -1.0658246 128.0 +2.2110536 -2.6223536 -1.0639844 128.0 +2.1949215 -2.6358709 -1.0639844 128.0 +2.1805196 -2.651495 -1.0649046 128.0 +2.1630099 -2.6633465 -1.0642911 128.0 +2.1662703 -2.7010777 -1.074412 128.0 +2.123666 -2.6814795 -1.0609175 128.0 +2.1007259 -2.6862102 -1.0575439 128.0 +2.0871115 -2.702817 -1.0590774 128.0 +2.0722184 -2.7178438 -1.0599974 128.0 +2.0595083 -2.7358317 -1.0621443 128.0 +2.0506279 -2.7591147 -1.066438 128.0 +2.0359111 -2.7747157 -1.0676647 128.0 +2.0283349 -2.8002629 -1.0728785 128.0 +2.0221815 -2.8281446 -1.0790124 128.0 +2.0091791 -2.8467216 -1.0814658 128.0 +2.0014625 -2.8730571 -1.0869863 128.0 +1.9676261 -2.8617492 -1.0777856 128.0 +1.9340044 -2.8501351 -1.0685848 128.0 +1.9021879 -2.84059 -1.0603042 128.0 +1.8752822 -2.8379111 -1.0547837 128.0 +1.8531575 -2.8421869 -1.0520234 128.0 +1.8372273 -2.8559062 -1.0529435 128.0 +1.81814 -2.8647141 -1.0520234 128.0 +1.7985089 -2.8725884 -1.0507966 128.0 +1.7848481 -2.8900497 -1.0532502 128.0 +1.7646071 -2.8968818 -1.0517168 128.0 +1.7414103 -2.8986781 -1.0483432 128.0 +1.7138942 -2.8929274 -1.0422093 128.0 +1.677398 -2.8713307 -1.0302483 128.0 +1.6654456 -2.8914683 -1.0339286 128.0 +1.6575363 -2.9190176 -1.0403692 128.0 +1.6433113 -2.9357786 -1.0428227 128.0 +1.636295 -2.9658115 -1.0501833 128.0 +1.6180663 -2.9757957 -1.0501833 128.0 +1.60382 -2.9932201 -1.0529435 128.0 +1.5872 -3.006372 -1.0541703 128.0 +1.570918 -3.020277 -1.0557038 128.0 +1.5532238 -3.0315537 -1.0563171 128.0 +1.5354503 -3.0427268 -1.0569305 128.0 +1.5175983 -3.0537958 -1.0575439 128.0 +1.4950694 -3.0553544 -1.0547837 128.0 +1.4680378 -3.047318 -1.0486498 128.0 +1.446052 -3.049387 -1.0461963 128.0 +1.4253029 -3.0538893 -1.0446628 128.0 +1.3997897 -3.0478709 -1.0394491 128.0 +1.3853699 -3.0659449 -1.0428227 128.0 +1.3951178 -3.1387596 -1.0655179 128.0 +1.3632609 -3.1184769 -1.055397 128.0 +1.3534905 -3.1486471 -1.0630643 128.0 +1.3382177 -3.166538 -1.066438 128.0 +1.3169389 -3.170294 -1.0649046 128.0 +1.2985398 -3.180959 -1.0658246 128.0 +1.2800595 -3.1915174 -1.0667447 128.0 +1.2642871 -3.209054 -1.0701183 128.0 +1.2401119 -3.2052097 -1.0661312 128.0 +1.2140055 -3.1958506 -1.0603042 128.0 +1.1950377 -3.2050233 -1.0609175 128.0 +1.1943012 -3.2641456 -1.0787057 128.0 +1.1954535 -3.3305452 -1.0989474 128.0 +1.166154 -3.3126762 -1.0903599 128.0 +1.139601 -3.3017726 -1.0842261 128.0 +1.1168826 -3.3014894 -1.0817726 128.0 +1.0936122 -3.2992446 -1.0787057 128.0 +1.0751096 -3.3113251 -1.0805458 128.0 +1.0608208 -3.33691 -1.0869863 128.0 +1.0437158 -3.3542633 -1.0906667 128.0 +1.0145305 -3.3323746 -1.0811592 128.0 +0.99026597 -3.3257644 -1.0768656 128.0 +0.96426076 -3.3125846 -1.0704249 128.0 +0.94313669 -3.3156922 -1.0695049 128.0 +0.92811829 -3.340677 -1.0759454 128.0 +0.90760285 -3.3463089 -1.0759454 128.0 +0.9145354 -3.4557989 -1.1106017 128.0 +0.89640206 -3.4733274 -1.1145886 128.0 +0.76445931 -3.0384302 -0.96829647 128.0 +0.73901463 -3.0153277 -0.95909572 128.0 +0.81114483 -3.400352 -1.0851462 128.0 +0.80831397 -3.4831531 -1.1109084 128.0 +0.77584052 -3.4388347 -1.0946536 128.0 +0.75167358 -3.4295833 -1.0900533 128.0 +0.72745174 -3.4192343 -1.0851462 128.0 +0.71125907 -3.4469392 -1.0928135 128.0 +0.68879145 -3.4447048 -1.0906667 128.0 +0.66258568 -3.4226997 -1.0820793 128.0 +0.64227128 -3.4304433 -1.0833061 128.0 +0.62408525 -3.450243 -1.0885198 128.0 +0.60290319 -3.4540074 -1.0885198 128.0 +0.57901925 -3.4416842 -1.0833061 128.0 +0.56441963 -3.4855759 -1.0964938 128.0 +0.53980833 -3.4682817 -1.0897466 128.0 +0.51655304 -3.458349 -1.0854529 128.0 +0.49855173 -3.4840674 -1.0928135 128.0 +0.47870931 -3.4983778 -1.0964938 128.0 +0.45440692 -3.4795411 -1.0894399 128.0 +0.43492272 -3.4973767 -1.094347 128.0 +0.41378909 -3.5028155 -1.0952671 128.0 +0.38817197 -3.4683969 -1.0833061 128.0 +0.36738169 -3.4754462 -1.0848395 128.0 +0.34576803 -3.4747934 -1.0839194 128.0 +0.32461685 -3.478745 -1.0845329 128.0 +0.30359477 -3.4844644 -1.0857596 128.0 +0.2816734 -3.4796205 -1.0836127 128.0 +0.26052952 -3.4841309 -1.0845329 128.0 +0.24031346 -3.5027566 -1.0900533 128.0 +0.22011459 -3.5250647 -1.0968004 128.0 +0.20060818 -3.5643618 -1.1090682 128.0 +0.17916 -3.5740814 -1.1118284 128.0 +0.15830579 -3.5998368 -1.1198025 128.0 +0.13674979 -3.6150074 -1.1244028 128.0 +0.11280538 -3.5596495 -1.106308 128.0 +0.090745643 -3.5517111 -1.1035477 128.0 +0.068678595 -3.5379264 -1.0989474 128.0 +0.047203146 -3.5563641 -1.1047745 128.0 +0.025354883 -3.5527797 -1.1035477 128.0 +0.0035633277 -3.5652418 -1.1075348 128.0 +-0.018385403 -3.5785217 -1.1118284 128.0 +-0.040243123 -3.5697758 -1.1090682 128.0 +-0.061808579 -3.5504286 -1.1029344 128.0 +-0.083433427 -3.5433216 -1.1007875 128.0 +-0.10548735 -3.5532081 -1.1041611 128.0 +-0.12862866 -3.5895903 -1.1161221 128.0 +-0.15057111 -3.5868316 -1.1155087 128.0 +-0.17317544 -3.5981991 -1.1194957 128.0 +-0.19426435 -3.5790114 -1.1136686 128.0 +-0.21610565 -3.5758519 -1.1130552 128.0 +-0.23727998 -3.5630624 -1.1093749 128.0 +-0.25636294 -3.5235684 -1.0971072 128.0 +-0.28053516 -3.5541894 -1.1075348 128.0 +-0.30006939 -3.5258472 -1.0989474 128.0 +-0.32560566 -3.5665925 -1.1127485 128.0 +-0.35054129 -3.595788 -1.1228694 128.0 +-0.37446883 -3.6115568 -1.1286964 128.0 +-0.39672616 -3.610137 -1.1290032 128.0 +-0.42250249 -3.6388338 -1.139124 128.0 +-0.4452855 -3.6399517 -1.1403508 128.0 +-0.47138312 -3.666415 -1.1498582 128.0 +-0.49565536 -3.6766589 -1.1541519 128.0 +-0.52380174 -3.7131307 -1.1670331 128.0 +-0.77707464 -5.2710214 -1.6755286 128.0 +-0.80911279 -5.2642727 -1.6749153 128.0 +-0.83944118 -5.2469912 -1.6709284 128.0 +-0.87021333 -5.2332921 -1.6681681 128.0 +-0.90328038 -5.2334814 -1.6700082 128.0 +-0.93604678 -5.2315879 -1.671235 128.0 +-0.97333711 -5.2538214 -1.6804358 128.0 +-1.0028658 -5.2337289 -1.6758354 128.0 +-1.0338501 -5.2218747 -1.6739953 128.0 +-1.0691148 -5.2312856 -1.679209 128.0 +-1.0990317 -5.2143826 -1.6758354 128.0 +-1.1348479 -5.2252126 -1.6816626 128.0 +-1.1693828 -5.2292967 -1.6853428 128.0 +-1.2008063 -5.2192402 -1.6844227 128.0 +-1.2352207 -5.2219625 -1.6877964 128.0 +-1.2685885 -5.2198339 -1.6896366 128.0 +-1.2985172 -5.2036409 -1.6868763 128.0 +-1.3282949 -5.1872773 -1.6841161 128.0 +-1.3586466 -5.1735063 -1.6822759 128.0 +-1.3918507 -5.1705866 -1.6841161 128.0 +-1.4225377 -5.1582789 -1.6828893 128.0 +-1.4577856 -5.1622763 -1.687183 128.0 +-1.4899623 -5.1550627 -1.6877964 128.0 +-1.1804485 -3.9931021 -1.3004441 128.0 +-1.1983112 -3.9639196 -1.2930835 128.0 +-1.5803788 -5.1131248 -1.6831959 128.0 +-1.6111488 -5.1015162 -1.6825826 128.0 +-1.6430056 -5.0933461 -1.6831959 128.0 +-1.6745249 -5.0840726 -1.6835027 128.0 +-1.7072061 -5.0782132 -1.6850362 128.0 +-1.7398784 -5.0721436 -1.6865696 128.0 +-1.7665641 -5.0487957 -1.6822759 128.0 +-1.79879 -5.0414467 -1.6835027 128.0 +-1.8235044 -5.0133209 -1.6776755 128.0 +-1.8512521 -4.9940062 -1.6749153 128.0 +-1.8875803 -4.9976888 -1.6801291 128.0 +-1.9103452 -4.9655828 -1.6730752 128.0 +-1.938693 -4.948451 -1.671235 128.0 +-1.9834855 -4.9727058 -1.6838094 128.0 +-2.0075119 -4.9445691 -1.6782889 128.0 +-1.2508819 -3.028698 -1.014607 128.0 +-1.2690731 -3.0200882 -1.0143003 128.0 +-1.2741013 -2.980742 -1.0032594 128.0 +-2.1217968 -4.8789763 -1.6730752 128.0 +-2.1613216 -4.8876257 -1.6807425 128.0 +-2.1865854 -4.8638558 -1.6770622 128.0 +-2.2219293 -4.8624663 -1.6813558 128.0 +-1.5827217 -3.4089615 -1.1697932 128.0 +-1.5897924 -3.3699222 -1.1593657 128.0 +-1.604677 -3.3480895 -1.155072 128.0 +-1.6197705 -3.3270569 -1.151085 128.0 +-1.6380438 -3.3127902 -1.1495515 128.0 +-1.6617588 -3.3094807 -1.1520051 128.0 +-1.6893879 -3.3136351 -1.1572188 128.0 +-1.7171303 -3.3175745 -1.1624327 128.0 +-1.7627025 -3.354996 -1.1799141 128.0 +-2.1986547 -4.122541 -1.4642178 128.0 +-2.2307076 -4.1215272 -1.4688182 128.0 +-2.5823233 -4.701685 -1.687183 128.0 +-2.6083426 -4.6807637 -1.6853428 128.0 +-2.6445117 -4.6779265 -1.6902499 128.0 +-2.6779017 -4.669868 -1.6933168 128.0 +-2.7108135 -4.6607528 -1.6960771 128.0 +-2.7495191 -4.6612453 -1.7025176 128.0 +-2.7868662 -4.658988 -1.7080381 128.0 +-2.8119442 -4.6361046 -1.7058913 128.0 +-2.840338 -4.6187634 -1.7058913 128.0 +-2.8676171 -4.5996332 -1.7052778 128.0 +-2.90189 -4.5916052 -1.7089581 128.0 +-2.9402809 -4.5897403 -1.7150919 128.0 +-2.9580176 -4.5556488 -1.7089581 128.0 +-2.9921956 -4.5469527 -1.7126385 128.0 +-3.012115 -4.5166311 -1.7080381 128.0 +-3.030709 -4.4846597 -1.7028244 128.0 +-3.0613968 -4.4706903 -1.7046645 128.0 +-3.0589199 -4.4088173 -1.6877964 128.0 +-3.0990551 -4.4086504 -1.6951571 128.0 +-3.1177633 -4.3779244 -1.6905566 128.0 +-3.1501374 -4.3664293 -1.6936235 128.0 +-3.160017 -4.3239679 -1.6844227 128.0 +-3.1740263 -4.2876697 -1.6776755 128.0 +-2.2384465 -2.9859276 -1.1612059 128.0 +-2.255574 -2.9706209 -1.1605924 128.0 +-3.2663414 -4.2466235 -1.6850362 128.0 +-3.2829757 -4.2144899 -1.6801291 128.0 +-3.3046458 -4.1890364 -1.6779822 128.0 +-3.3112712 -4.1448884 -1.6681681 128.0 +-3.3354437 -4.123013 -1.6675547 128.0 +-3.3630927 -4.1054139 -1.6687815 128.0 +-3.3857884 -4.0817714 -1.6675547 128.0 +-3.3936253 -4.0405159 -1.6589673 128.0 +-3.4097188 -4.0094681 -1.6546736 128.0 +-3.4417107 -3.9971244 -1.6583539 128.0 +-3.4718022 -3.9823871 -1.6611142 128.0 +-3.5018425 -3.9674308 -1.6638744 128.0 +-3.520411 -3.9394829 -1.6611142 128.0 +-3.5355747 -3.9079285 -1.6568204 128.0 +-3.5607729 -3.8875644 -1.6574339 128.0 +-3.5890908 -3.8705273 -1.6595807 128.0 +-3.6179852 -3.8539827 -1.6620343 128.0 +-3.6441879 -3.8344698 -1.6632611 128.0 +-3.6696274 -3.8140945 -1.6641811 128.0 +-3.6829975 -3.781281 -1.6595807 128.0 +-3.6987767 -3.7511578 -1.6562071 128.0 +-3.708945 -3.7155955 -1.6503799 128.0 +-3.7404706 -3.7014694 -1.654367 128.0 +-3.7767277 -3.6917522 -1.6605008 128.0 +-3.7965693 -3.6658652 -1.659274 128.0 +-3.8217468 -3.645128 -1.6605008 128.0 +-3.8391905 -3.6170418 -1.6583539 128.0 +-3.8543429 -3.5869343 -1.655287 128.0 +-3.8790829 -3.5657928 -1.6565138 128.0 +-3.8994796 -3.5406449 -1.6559004 128.0 +-3.9190049 -3.5147455 -1.6549803 128.0 +-3.9333713 -3.4843228 -1.6519134 128.0 +-3.9518106 -3.4576163 -1.6506866 128.0 +-3.9823158 -3.4413917 -1.6546736 128.0 +-4.0011845 -3.4150386 -1.6537535 128.0 +-4.0213356 -3.3898101 -1.6534469 128.0 +-4.0464492 -3.3687248 -1.655287 128.0 +-4.0743966 -3.3498762 -1.6583539 128.0 +-4.0993085 -3.3284118 -1.660194 128.0 +-4.1255956 -3.3079581 -1.6626476 128.0 +-4.1376057 -3.2760842 -1.659274 128.0 +-4.1591291 -3.251807 -1.6598874 128.0 +-4.1887999 -3.2337849 -1.6638744 128.0 +-4.225976 -3.2212894 -1.6709284 128.0 +-4.2395773 -3.1907213 -1.6684748 128.0 +-4.2544904 -3.1612425 -1.6666346 128.0 +-4.2692018 -3.1317012 -1.6647944 128.0 +-4.2806273 -3.0998659 -1.6617275 128.0 +-4.3289952 -3.0945694 -1.6733818 128.0 +-4.3642359 -3.0794692 -1.6798223 128.0 +-4.3892984 -3.0569832 -1.6822759 128.0 +-4.4118953 -3.0326884 -1.6838094 128.0 +-4.4233303 -3.0007529 -1.6810491 128.0 +-4.447197 -2.9772606 -1.6831959 128.0 +-4.4606156 -2.9467704 -1.6813558 128.0 +-4.4754229 -2.9172666 -1.6801291 128.0 +-4.5140553 -2.9031329 -1.6881031 128.0 +-4.5269608 -2.8723218 -1.686263 128.0 +-4.5469208 -2.8460054 -1.687183 128.0 +-4.574018 -2.8240507 -1.6908633 128.0 +-4.595325 -2.7984064 -1.6923968 128.0 +-4.6148572 -2.7716269 -1.6933168 128.0 +-4.6448817 -2.7510161 -1.6982239 128.0 +-4.6657844 -2.7248631 -1.6997573 128.0 +-4.6576676 -2.6819398 -1.6905566 128.0 +-4.6939039 -2.6645834 -1.6979172 128.0 +-4.7193031 -2.6408427 -1.7012908 128.0 +-4.7879314 -2.6407852 -1.7206124 128.0 +-4.8149171 -2.6172643 -1.7245995 128.0 +-4.8350811 -2.5899174 -1.7261329 128.0 +-4.8643513 -2.5673065 -1.73104 128.0 +-4.8926811 -2.5439949 -1.7356404 128.0 +-4.9183655 -2.5191307 -1.7393206 128.0 +-4.9464784 -2.4953327 -1.743921 128.0 +-4.9685163 -2.4683211 -1.7463746 128.0 +-4.9810028 -2.4365342 -1.7454545 128.0 +-5.0061512 -2.4108791 -1.7491348 128.0 +-5.0285912 -2.3837843 -1.7518951 128.0 +-5.0551996 -2.358516 -1.7561888 128.0 +-5.0834174 -2.3338046 -1.7610958 128.0 +-5.0776892 -2.2935619 -1.7540419 128.0 +-5.1021056 -2.2669983 -1.7577223 128.0 +-5.1298752 -2.241745 -1.7626293 128.0 +-5.1557779 -2.2154849 -1.766923 128.0 +-5.185935 -2.1908422 -1.7727501 128.0 +-5.232686 -2.1728442 -1.7844044 128.0 +-5.1295843 -2.0932508 -1.743921 128.0 +-5.1582351 -2.0681093 -1.7494415 128.0 +-5.2027121 -2.0489693 -1.7604824 128.0 +-5.2391567 -2.0262725 -1.7687631 128.0 +-5.2835269 -2.0062447 -1.779804 128.0 +-5.3323073 -1.9874094 -1.7923784 128.0 +-5.3962517 -1.973605 -1.8101666 128.0 +-5.4181151 -1.9439911 -1.8135402 128.0 +-5.5251193 -1.9441798 -1.8460495 128.0 +-5.6449242 -1.9474707 -1.8828527 128.0 +-5.7703834 -1.9511914 -1.9214958 128.0 +-5.8373647 -1.9339981 -1.940204 128.0 +-5.890769 -1.9116511 -1.9543118 128.0 +-5.9060168 -1.8766223 -1.9555386 128.0 +-5.9346895 -1.8457158 -1.9613658 128.0 +-5.9568305 -1.8125893 -1.9650462 128.0 +-5.9751391 -1.7781754 -1.9674996 128.0 +-5.9831953 -1.740682 -1.9665796 128.0 +-5.9928474 -1.7036769 -1.966273 128.0 +-6.0178628 -1.670945 -1.97118 128.0 +-6.0243278 -1.6329933 -1.9699532 128.0 +-6.0185905 -1.5918635 -1.9647394 128.0 +-6.03654 -1.5570421 -1.9674996 128.0 +-6.0367489 -1.5176544 -1.9644327 128.0 +-6.0635133 -1.4848833 -1.9702599 128.0 +-6.0863991 -1.4509586 -1.9748603 128.0 +-6.0645881 -1.4064953 -1.9647394 128.0 +-6.0861039 -1.3721856 -1.9690331 128.0 +-6.08883 -1.3335954 -1.967193 128.0 +-6.0968981 -1.2962099 -1.967193 128.0 +-6.1196523 -1.2618483 -1.9721 128.0 +-6.1104789 -1.2209213 -1.9665796 128.0 +-6.1178551 -1.1834052 -1.9665796 128.0 +-6.1268725 -1.1461941 -1.967193 128.0 +-6.1300435 -1.1079023 -1.9659662 128.0 +-6.1386013 -1.0705949 -1.9665796 128.0 +-6.1647668 -1.0362186 -1.9730201 128.0 +-6.1512771 -0.99518424 -1.9665796 128.0 +-6.1657324 -0.9587366 -1.9693398 128.0 +-6.1630263 -0.91962367 -1.9665796 128.0 +-6.1619573 -0.88084912 -1.9644327 128.0 +-6.1747904 -0.84405339 -1.9668863 128.0 +-6.1902351 -0.80750203 -1.9702599 128.0 +-0 -0 -0 128.0 +-6.2252007 -0.73448408 -1.9785405 128.0 +-6.2466173 -0.69817305 -1.984061 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-6.2395983 0.22443959 -1.9705666 128.0 +-0 0 -0 128.0 +-6.2696481 0.30260426 -1.9813008 128.0 +-6.25912 0.34060138 -1.9785405 128.0 +-6.2873139 0.38084733 -1.9883547 128.0 +-6.257318 0.41757542 -1.9794607 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-5.8809462 0.97804648 -1.950989 128.0 +-5.8542728 1.0105649 -1.9440156 128.0 +-5.8460946 1.046133 -1.9433817 128.0 +-5.8423634 1.0825025 -1.9443326 128.0 +-5.8318853 1.1176164 -1.9430647 128.0 +-5.8305001 1.154484 -1.9449666 128.0 +-5.8270235 1.1909971 -1.9462345 128.0 +-5.8196058 1.2267286 -1.9462345 128.0 +-5.8166037 1.2634202 -1.9478194 128.0 +-5.8031883 1.2978448 -1.9459175 128.0 +-5.7932673 1.3330028 -1.9452835 128.0 +-5.7849789 1.3685246 -1.9452835 128.0 +-5.7690997 1.4022033 -1.9427477 128.0 +-5.7567067 1.4366571 -1.9414798 128.0 +-5.7459455 1.471482 -1.9408458 128.0 +-5.7322216 1.5055065 -1.9392611 128.0 +-5.7283716 1.5421294 -1.9411628 128.0 +-5.7306871 1.5805262 -1.9452835 128.0 +-5.7263579 1.6172056 -1.9471854 128.0 +-5.7117715 1.6509949 -1.9456005 128.0 +-5.7069907 1.687624 -1.9475024 128.0 +-0 0 -0 128.0 +-5.6541362 1.7477294 -1.9364083 128.0 +-5.6505408 1.7846743 -1.9389441 128.0 +-5.6277494 1.8155271 -1.9348234 128.0 +-5.6074953 1.8470575 -1.9316536 128.0 +-5.6041474 1.8841493 -1.9345064 128.0 +-5.5906868 1.9178848 -1.9338725 128.0 +-5.5779185 1.9518393 -1.9335555 128.0 +-5.5569043 1.9828413 -1.9303857 128.0 +-5.5785036 2.0292184 -1.9424307 128.0 +-5.5650582 2.0630796 -1.9421138 128.0 +-5.5496325 2.0961821 -1.9411628 128.0 +-5.5348959 2.1295135 -1.9405289 128.0 +-5.5181928 2.1620512 -1.9392611 128.0 +-5.5048227 2.1958694 -1.9392611 128.0 +-5.4921246 2.2299619 -1.9395781 128.0 +-5.4783382 2.2636189 -1.9395781 128.0 +-5.4634714 2.2968233 -1.9392611 128.0 +-5.4475312 2.3295577 -1.9386271 128.0 +-5.4357443 2.3640738 -1.9395781 128.0 +-5.420269 2.3969989 -1.9392611 128.0 +-5.4002686 2.4278789 -1.9373592 128.0 +-5.3913083 2.4637275 -1.9395781 128.0 +-5.3545842 2.4867759 -1.9316536 128.0 +-5.3323627 2.5163465 -1.9291179 128.0 +-5.3399143 2.5600867 -1.9376762 128.0 +-5.315578 2.5886517 -1.9345064 128.0 +-5.2944937 2.6186962 -1.9326046 128.0 +-5.2740879 2.6490052 -1.9310197 128.0 +-5.2509751 2.6778698 -1.928484 128.0 +-5.2268648 2.7061148 -1.9256312 128.0 +-5.2135205 2.7398999 -1.9268991 128.0 +-5.1874051 2.7669287 -1.9234123 128.0 +-5.1895142 2.8090887 -1.9307027 128.0 +-5.1696863 2.8395085 -1.9297519 128.0 +-5.1513376 2.8707139 -1.9294349 128.0 +-5.1402316 2.9060016 -1.9319706 128.0 +-5.1206584 2.9365432 -1.9313366 128.0 +-5.0927052 2.9621861 -1.927533 128.0 +-5.0638137 2.9871149 -1.9234123 128.0 +-5.059227 3.0264056 -1.9288009 128.0 +-5.0356965 3.0544407 -1.9268991 128.0 +-5.015244 3.0842881 -1.9262651 128.0 +-5.0010538 3.1180134 -1.928167 128.0 +-4.9802246 3.1476271 -1.927533 128.0 +-4.9600186 3.1776145 -1.9272161 128.0 +-4.9404278 3.2079887 -1.9272161 128.0 +-4.920651 3.2382421 -1.9272161 128.0 +-4.9030561 3.2699523 -1.928167 128.0 +-4.8852572 3.3015685 -1.9291179 128.0 +-4.8672552 3.3330891 -1.9300689 128.0 +-4.8467121 3.3628914 -1.9300689 128.0 +-4.8120193 3.3827498 -1.9243633 128.0 +-4.8027616 3.4204643 -1.9291179 128.0 +-4.7786069 3.4476497 -1.92785 128.0 +-4.751236 3.472429 -1.9253142 128.0 +-4.7077332 3.485153 -1.916122 128.0 +-4.7128196 3.5338862 -1.9272161 128.0 +-4.6902919 3.5621634 -1.9268991 128.0 +-4.6736093 3.5949228 -1.9291179 128.0 +-4.653708 3.6252804 -1.9300689 128.0 +-4.6135044 3.6396694 -1.9224614 128.0 +-4.6044235 3.6785638 -1.928167 128.0 +-4.5699673 3.6972032 -1.9230953 128.0 +-4.5523319 3.7293813 -1.9253142 128.0 +-4.5249829 3.7536108 -1.9234123 128.0 +-4.504045 3.7831347 -1.9243633 128.0 +-4.4742446 3.8051703 -1.9215105 128.0 +-4.4630308 3.8430719 -1.9268991 128.0 +-4.4250674 3.8579199 -1.9205596 128.0 +-4.4041567 3.8875093 -1.9218274 128.0 +-4.3795133 3.9138277 -1.9215105 128.0 +-4.3476791 3.9336271 -1.9180238 128.0 +-4.321363 3.9583082 -1.9170729 128.0 +-4.2872572 3.9757211 -1.9126352 128.0 +-4.2517176 3.9915667 -1.9075637 128.0 +-4.2463965 4.0358729 -1.9164389 128.0 +-4.2324886 4.0723734 -1.9215105 128.0 +-4.2094598 4.1002517 -1.9224614 128.0 +-4.1862478 4.1280012 -1.9234123 128.0 +-4.1615114 4.1542797 -1.9237293 128.0 +-4.1292715 4.1729951 -1.9205596 128.0 +-4.0969586 4.1914711 -1.9173899 128.0 +-4.0639162 4.2090259 -1.9139031 128.0 +-4.0242662 4.21947 -1.9072467 128.0 +-4.0197635 4.2668629 -1.9177068 128.0 +-3.9941533 4.2921414 -1.9180238 128.0 +-3.9715931 4.3207579 -1.9199257 128.0 +-3.9386308 4.3380241 -1.9167559 128.0 +-3.9119391 4.3621097 -1.9167559 128.0 +-3.8888736 4.3902903 -1.9186578 128.0 +-3.8587394 4.4105005 -1.9170729 128.0 +-3.830364 4.4326591 -1.9164389 128.0 +-3.7993991 4.4517498 -1.9145371 128.0 +-3.7555068 4.4554 -1.9059788 128.0 +-3.7426627 4.4958525 -1.9135861 128.0 +-3.7156086 4.519465 -1.9139031 128.0 +-3.6830249 4.5362883 -1.9113673 128.0 +-3.658088 4.5625014 -1.9129522 128.0 +-3.6253138 4.5789127 -1.9104165 128.0 +-3.600071 4.6048064 -1.9120013 128.0 +-3.5787041 4.635818 -1.915805 128.0 +-3.5599668 4.6705117 -1.9211935 128.0 +-3.526679 4.6862054 -1.9186578 128.0 +-3.4961617 4.7054725 -1.9177068 128.0 +-3.4672236 4.7268362 -1.9177068 128.0 +-3.4270287 4.7326589 -1.9113673 128.0 +-3.3935125 4.7474251 -1.9088316 128.0 +-3.3517416 4.7503347 -1.9015411 128.0 +-3.3268676 4.7770376 -1.9040769 128.0 +-3.3050158 4.8083029 -1.9085146 128.0 +-3.2690604 4.8190732 -1.9047109 128.0 +-3.240485 4.8406172 -1.9053448 128.0 +-3.2101996 4.8596182 -1.9050279 128.0 +-3.1891263 4.8927307 -1.9104165 128.0 +-3.1569929 4.9090161 -1.9091486 128.0 +-3.1176653 4.9138799 -1.903443 128.0 +-3.0889654 4.935329 -1.9043939 128.0 +-3.0436757 4.9299798 -1.8948847 128.0 +-3.0340886 4.982584 -1.9081976 128.0 +-2.9990637 4.9937897 -1.9053448 128.0 +-2.9625657 5.002305 -1.9015411 128.0 +-2.9389915 5.0326734 -1.9062958 128.0 +-2.9028499 5.0415711 -1.902809 128.0 +-2.8812258 5.0757837 -1.9091486 128.0 +-2.8486376 5.0908842 -1.9081976 128.0 +-2.8187213 5.1107583 -1.9091486 128.0 +-2.7873092 5.1279578 -1.9091486 128.0 +-2.7544487 5.1424556 -1.9081976 128.0 +-2.7241714 5.1617761 -1.9091486 128.0 +-2.6959486 5.1851258 -1.9116843 128.0 +-2.6649475 5.2032585 -1.9123182 128.0 +-2.6274168 5.2085042 -1.9081976 128.0 +-2.5970967 5.2279253 -1.9094656 128.0 +-2.5670538 5.2480221 -1.9110503 128.0 +-2.5298655 5.2534208 -1.9072467 128.0 +-2.4886446 5.2499909 -1.9002733 128.0 +-2.4603949 5.273757 -1.903443 128.0 +-2.4279892 5.288754 -1.903443 128.0 +-2.3990066 5.3113313 -1.9062958 128.0 +-2.3733046 5.3415523 -1.9120013 128.0 +-2.3416243 5.3586211 -1.9129522 128.0 +-2.3109474 5.3781166 -1.914854 128.0 +-2.2767968 5.3895741 -1.9139031 128.0 +-2.2378638 5.3894281 -1.9088316 128.0 +-2.2065449 5.4074488 -1.9104165 128.0 +-2.1683819 5.4085617 -1.9059788 128.0 +-2.1452348 5.4473557 -1.915171 128.0 +-2.1138229 5.4657235 -1.9170729 128.0 +-2.0711544 5.4546514 -1.9085146 128.0 +-2.0373149 5.4663687 -1.9081976 128.0 +-2.0073197 5.488564 -1.9116843 128.0 +-1.9739251 5.5016704 -1.9120013 128.0 +-1.9401304 5.5136786 -1.9120013 128.0 +-1.9056438 5.5236859 -1.9113673 128.0 +-1.8692843 5.5280871 -1.9088316 128.0 +-1.8293623 5.5214472 -1.902492 128.0 +-1.7942777 5.5289598 -1.9012241 128.0 +-1.7588824 5.5353456 -1.8996394 128.0 +-1.7240398 5.5433168 -1.8986884 128.0 +-1.6924797 5.5619569 -1.9015411 128.0 +-1.6594027 5.5758734 -1.902809 128.0 +-1.6262187 5.5895929 -1.9040769 128.0 +-1.5965605 5.6158867 -1.9097825 128.0 +-1.568925 5.6502509 -1.9183408 128.0 +-1.5381975 5.6744175 -1.9234123 128.0 +-1.5069897 5.6975021 -1.928167 128.0 +-1.4717652 5.7057233 -1.92785 128.0 +-1.4374218 5.7174058 -1.9288009 128.0 +-1.3923841 5.6855855 -1.914854 128.0 +-1.362312 5.7143183 -1.9218274 128.0 +-1.3297961 5.7336564 -1.9256312 128.0 +-1.2885385 5.7148771 -1.9164389 128.0 +-1.2530425 5.7208233 -1.915805 128.0 +-1.2173246 5.7256207 -1.914854 128.0 +-1.1746974 5.6967564 -1.902492 128.0 +-1.1475285 5.7429185 -1.915805 128.0 +-1.1111878 5.7442641 -1.9139031 128.0 +-1.0771421 5.7575002 -1.916122 128.0 +-1.040782 5.7584009 -1.9142201 128.0 +-1.0057555 5.7665477 -1.914854 128.0 +-0.97460049 5.797863 -1.9234123 128.0 +-0.94264418 5.8262043 -1.9310197 128.0 +-0.90702337 5.8328156 -1.9313366 128.0 +-0.86813581 5.8176341 -1.9243633 128.0 +-0.83604884 5.8482013 -1.9329215 128.0 +-0.80130595 5.8616781 -1.9357743 128.0 +-0.76606077 5.8721275 -1.9376762 128.0 +-0.72966474 5.8738937 -1.9367253 128.0 +-0.69327587 5.8754344 -1.9357743 128.0 +-0.65742266 5.8814631 -1.9364083 128.0 +-0.62092376 5.8816133 -1.9351404 128.0 +-0.58247697 5.8617182 -1.9272161 128.0 +-0.5476439 5.8774581 -1.9313366 128.0 +-0.50869107 5.8476377 -1.9202427 128.0 +-0.47188357 5.8393049 -1.9164389 128.0 +-0.43703458 5.8553314 -1.9208765 128.0 +-0.40025562 5.845602 -1.9167559 128.0 +-0.36573821 5.8697195 -1.9240463 128.0 +-0.3299816 5.8765879 -1.9256312 128.0 +-0.2940596 5.8813438 -1.9265821 128.0 +-0.25796682 5.8830371 -1.9265821 128.0 +-0.22075458 5.8551288 -1.9167559 128.0 +-0.18575348 5.8857598 -1.9265821 128.0 +-0.1498048 5.8934259 -1.9288009 128.0 +-0.11387911 5.9065614 -1.9329215 128.0 +-0.077033624 5.8616281 -1.9177068 128.0 +-0.041327558 5.8989782 -1.9300689 128.0 +-0.0051153149 5.8820491 -1.9243633 128.0 +0.03071015 5.8307552 -1.9072467 128.0 +0.066722892 5.8513212 -1.9142201 128.0 +0.1026081 5.849853 -1.9139031 128.0 +0.13876882 5.8604918 -1.9177068 128.0 +0.17489474 5.8652177 -1.9196087 128.0 +0.2111519 5.8716168 -1.9221444 128.0 +0.24689665 5.8635774 -1.9199257 128.0 +0.28296155 5.8638468 -1.9205596 128.0 +0.31862733 5.856318 -1.9186578 128.0 +0.35409686 5.8466792 -1.916122 128.0 +0.38983858 5.8425035 -1.915488 128.0 +0.42650679 5.8513527 -1.9192917 128.0 +0.46202856 5.8438983 -1.9177068 128.0 +0.49852124 5.8485136 -1.9202427 128.0 +0.53396624 5.8406219 -1.9186578 128.0 +0.57154304 5.8551707 -1.9246802 128.0 +0.60755682 5.8524971 -1.9249972 128.0 +0.64469945 5.859972 -1.9288009 128.0 +0.678783 5.83989 -1.9234123 128.0 +0.71794438 5.8629165 -1.9326046 128.0 +0.74979138 5.8264174 -1.9218274 128.0 +0.78425992 5.8123078 -1.9186578 128.0 +0.82388449 5.8355603 -1.928167 128.0 +0.85206968 5.7787886 -1.9107335 128.0 +0.8859272 5.7631397 -1.9072467 128.0 +0.92247081 5.7650876 -1.9097825 128.0 +0.95751631 5.7574477 -1.9091486 128.0 +0.99363166 5.7561374 -1.9107335 128.0 +1.0301009 5.7564673 -1.9129522 128.0 +1.0648844 5.7472405 -1.9120013 128.0 +1.1006641 5.7433929 -1.9129522 128.0 +1.1355158 5.7346706 -1.9123182 128.0 +1.1704919 5.726666 -1.9120013 128.0 +1.2050214 5.7165918 -1.9110503 128.0 +1.2394712 5.7063103 -1.9100995 128.0 +1.2790138 5.7189603 -1.9170729 128.0 +1.3142931 5.7119288 -1.9173899 128.0 +1.3471334 5.6945271 -1.9142201 128.0 +1.3798096 5.6769381 -1.9110503 128.0 +1.4134687 5.663764 -1.9094656 128.0 +1.4481943 5.6549845 -1.9094656 128.0 +1.4821428 5.64324 -1.9085146 128.0 +1.5123044 5.6175542 -1.902809 128.0 +1.5495178 5.6182265 -1.9062958 128.0 +1.5790648 5.5912709 -1.9002733 128.0 +1.6064967 5.5577865 -1.8920319 128.0 +1.6424506 5.5541916 -1.8942508 128.0 +1.6723826 5.5303912 -1.8894962 128.0 +1.7085252 5.5272746 -1.8920319 128.0 +1.7449781 5.524827 -1.8948847 128.0 +1.7823384 5.524848 -1.8986884 128.0 +1.822138 5.5318246 -1.9050279 128.0 +1.8545353 5.5160451 -1.903443 128.0 +1.8905001 5.5108418 -1.9056618 128.0 +1.9355533 5.5313663 -1.9170729 128.0 +1.958303 5.488121 -1.9059788 128.0 +1.9925889 5.4777842 -1.9066128 128.0 +2.0225365 5.4556723 -1.903126 128.0 +2.0546336 5.4396105 -1.9018581 128.0 +2.0906959 5.4339828 -1.9043939 128.0 +2.1271122 5.4289999 -1.9072467 128.0 +2.1631947 5.422894 -1.9097825 128.0 +2.1925039 5.3998518 -1.9062958 128.0 +2.2266819 5.388927 -1.9072467 128.0 +2.2534583 5.3602991 -1.9018581 128.0 +2.2922719 5.3603244 -1.9069297 128.0 +2.3254972 5.3470283 -1.9072467 128.0 +2.3375516 5.2858176 -1.8901302 128.0 +2.3816061 5.2973266 -1.8996394 128.0 +2.3975108 5.2463822 -1.8863264 128.0 +2.4428382 5.2599597 -1.8967866 128.0 +2.4718292 5.2380099 -1.8942508 128.0 +2.4973631 5.2090602 -1.8891792 128.0 +2.5292783 5.1936388 -1.8891792 128.0 +2.5636206 5.1831226 -1.8910811 128.0 +2.5966523 5.1698375 -1.8920319 128.0 +2.6339257 5.1647916 -1.8961526 128.0 +2.6642587 5.1460061 -1.8952017 128.0 +2.6971073 5.1320806 -1.8961526 128.0 +2.7285464 5.1154346 -1.8961526 128.0 +2.7594314 5.0977621 -1.8958356 128.0 +2.7933979 5.0857229 -1.8977375 128.0 +2.8259356 5.0709724 -1.8986884 128.0 +2.8611977 5.0609684 -1.9015411 128.0 +2.8936126 5.0457854 -1.902492 128.0 +2.921181 5.0221963 -1.9002733 128.0 +2.9485688 4.9984593 -1.8980545 128.0 +2.9791832 4.9802732 -1.8980545 128.0 +3.0091937 4.9610887 -1.8977375 128.0 +3.0410681 4.9449549 -1.8986884 128.0 +3.0728576 4.928617 -1.8996394 128.0 +3.105068 4.9128761 -1.9009073 128.0 +3.1505013 4.9176908 -1.9104165 128.0 +3.1635733 4.872016 -1.8999563 128.0 +3.1928866 4.8517208 -1.8996394 128.0 +3.2210174 4.8296709 -1.8986884 128.0 +3.2537773 4.8145313 -1.9005903 128.0 +3.2811141 4.7913456 -1.8993224 128.0 +3.3077483 4.7672262 -1.8977375 128.0 +3.3374827 4.7476168 -1.8980545 128.0 +3.3560979 4.7123699 -1.8920319 128.0 +3.3932724 4.7032266 -1.8967866 128.0 +3.4215074 4.6815515 -1.8964696 128.0 +3.4552469 4.6673303 -1.8993224 128.0 +3.476424 4.6361761 -1.8952017 128.0 +3.5025113 4.6117368 -1.8939338 128.0 +3.5272732 4.5856481 -1.8920319 128.0 +3.5594234 4.5691566 -1.8942508 128.0 +3.5962029 4.5584002 -1.8990054 128.0 +3.6270647 4.5399537 -1.9005903 128.0 +3.6602213 4.5242496 -1.903443 128.0 +3.6867108 4.5002379 -1.902809 128.0 +3.7154653 4.478992 -1.903443 128.0 +3.7508073 4.4655519 -1.9075637 128.0 +3.7793655 4.4438982 -1.9081976 128.0 +3.7917101 4.4033751 -1.9005903 128.0 +3.8230197 4.3850312 -1.902809 128.0 +3.8354194 4.3451357 -1.8955187 128.0 +3.864536 4.3243494 -1.8967866 128.0 +3.8986323 4.3089957 -1.9005903 128.0 +3.9243579 4.2842937 -1.9002733 128.0 +3.9628241 4.2733474 -1.9062958 128.0 +3.9766371 4.2358131 -1.9002733 128.0 +3.9973261 4.205833 -1.8977375 128.0 +4.034893 4.1935296 -1.903443 128.0 +4.0605483 4.1686931 -1.903443 128.0 +4.0873823 4.14505 -1.9040769 128.0 +4.1268091 4.1339893 -1.9107335 128.0 +4.1527715 4.1092567 -1.9110503 128.0 +4.171803 4.0777316 -1.9081976 128.0 +4.1926517 4.0481043 -1.9062958 128.0 +4.2187839 4.0236115 -1.9069297 128.0 +4.2364902 3.9911458 -1.90376 128.0 +4.2588167 3.9631376 -1.902809 128.0 +4.283752 3.9375732 -1.903126 128.0 +4.3148532 3.9175904 -1.9062958 128.0 +4.3303375 3.8834419 -1.902492 128.0 +4.355504 3.8580563 -1.903126 128.0 +4.3705297 3.8237641 -1.8993224 128.0 +4.4053907 3.8067977 -1.9043939 128.0 +4.4286661 3.779695 -1.9043939 128.0 +4.4546747 3.7548954 -1.9056618 128.0 +4.4798174 3.7293119 -1.9066128 128.0 +4.501883 3.7011516 -1.9062958 128.0 +4.5230355 3.6722634 -1.9056618 128.0 +4.544003 3.6432548 -1.9050279 128.0 +4.5670156 3.6158934 -1.9053448 128.0 +4.5921049 3.5901394 -1.9066128 128.0 +4.6087923 3.557838 -1.9043939 128.0 +4.6214848 3.5225921 -1.9005903 128.0 +4.6377077 3.4901762 -1.8983715 128.0 +4.6597972 3.46222 -1.8986884 128.0 +4.6847768 3.4363678 -1.9002733 128.0 +4.7019329 3.4047763 -1.8986884 128.0 +4.7373948 3.3863418 -1.9047109 128.0 +4.7503347 3.3517416 -1.9015411 128.0 +4.7708116 3.322531 -1.9015411 128.0 +4.7887635 3.2915833 -1.9005903 128.0 +4.8182883 3.268528 -1.9043939 128.0 +4.8414054 3.2410126 -1.9056618 128.0 +4.8659487 3.2143822 -1.9075637 128.0 +4.8879638 3.1860187 -1.9085146 128.0 +4.9034324 3.1534014 -1.9069297 128.0 +4.9210873 3.1222389 -1.9062958 128.0 +4.942564 3.0934944 -1.9072467 128.0 +4.9606452 3.0626109 -1.9069297 128.0 +4.982584 3.0340886 -1.9081976 128.0 +4.9913507 2.9975986 -1.9043939 128.0 +5.0104656 2.9673994 -1.9047109 128.0 +5.0293975 2.9370782 -1.9050279 128.0 +5.051434 2.9085295 -1.9066128 128.0 +5.0609374 2.8727973 -1.903443 128.0 +5.0768142 2.8407636 -1.902809 128.0 +5.0958099 2.8104756 -1.903443 128.0 +5.1204581 2.7832322 -1.9062958 128.0 +5.1315875 2.7486262 -1.9040769 128.0 +5.1592598 2.7228432 -1.9081976 128.0 +5.1834431 2.6950736 -1.9110503 128.0 +5.2049465 2.6658123 -1.9129522 128.0 +5.2237463 2.6351068 -1.9139031 128.0 +5.2381177 2.6021609 -1.9132692 128.0 +5.2522817 2.5691378 -1.9126352 128.0 +5.2611108 2.5335696 -1.9100995 128.0 +5.2705588 2.4983959 -1.9078807 128.0 +5.2866488 2.4664104 -1.9081976 128.0 +5.3008208 2.4335301 -1.9078807 128.0 +5.3199749 2.4029114 -1.9094656 128.0 +5.3380852 2.3717639 -1.9107335 128.0 +5.3507996 2.3382058 -1.9100995 128.0 +5.362432 2.3042064 -1.9091486 128.0 +5.3799639 2.2727363 -1.9104165 128.0 +5.3929319 2.2393188 -1.9100995 128.0 +5.4144735 2.2094119 -1.9129522 128.0 +5.4367313 2.1796777 -1.916122 128.0 +5.4464736 2.1448872 -1.914854 128.0 +5.464839 2.1134808 -1.9167559 128.0 +5.4883442 2.0839503 -1.9205596 128.0 +5.4903631 2.0462596 -1.9167559 128.0 +5.5063782 2.0138364 -1.9180238 128.0 +5.5230947 1.9816136 -1.9196087 128.0 +5.5324659 1.9467427 -1.9186578 128.0 +5.5460997 1.9133782 -1.9192917 128.0 +5.5469546 1.8756655 -1.915488 128.0 +5.5610595 1.8424897 -1.9164389 128.0 +5.5695539 1.8074546 -1.915488 128.0 +5.5841551 1.7743956 -1.9167559 128.0 +5.6021824 1.7423522 -1.9192917 128.0 +5.6127677 1.7079451 -1.9192917 128.0 +5.627687 1.6748266 -1.9208765 128.0 +5.6424108 1.6415893 -1.9224614 128.0 +5.6551142 1.6077155 -1.9234123 128.0 +5.6648722 1.5729861 -1.9234123 128.0 +5.6707559 1.5372047 -1.9221444 128.0 +5.6791644 1.502138 -1.9218274 128.0 +5.6901112 1.467737 -1.9224614 128.0 +5.6898117 1.4304824 -1.9192917 128.0 +5.6920338 1.3939637 -1.9170729 128.0 +5.7032475 1.3596718 -1.9180238 128.0 +5.7087111 1.3240088 -1.9170729 128.0 +5.7213535 1.2899992 -1.9186578 128.0 +5.7291613 1.2548693 -1.9186578 128.0 +5.7506685 1.2226518 -1.9234123 128.0 +5.7664223 1.1890678 -1.9262651 128.0 +5.7736096 1.1536633 -1.9262651 128.0 +5.7833729 1.1187559 -1.9272161 128.0 +5.7854676 1.0823764 -1.9256312 128.0 +5.792933 1.0470258 -1.9259481 128.0 +5.7927084 1.0103202 -1.9237293 128.0 +5.8006692 0.97507238 -1.9243633 128.0 +5.8149691 0.94082564 -1.9272161 128.0 +5.8196955 0.90498221 -1.9268991 128.0 +5.8373332 0.87107676 -1.9310197 128.0 +5.8106461 0.83067745 -1.9202427 128.0 +5.8475828 0.7993781 -1.9310197 128.0 +5.8504968 0.76323742 -1.9303857 128.0 +5.8080101 0.72147602 -1.9145371 128.0 +5.8500037 0.69027334 -1.9272161 128.0 +5.8513012 0.6540491 -1.9262651 128.0 +5.8618064 0.61883134 -1.928484 128.0 +5.8683248 0.58313388 -1.9294349 128.0 +5.8746252 0.54737973 -1.9303857 128.0 +5.874094 0.51099437 -1.9291179 128.0 +5.8856268 0.4756301 -1.9319706 128.0 +5.8884344 0.43950763 -1.9319706 128.0 +5.8938589 0.40356317 -1.9329215 128.0 +5.8820252 0.36650583 -1.928167 128.0 +5.8983674 0.33120605 -1.9329215 128.0 +5.8974471 0.29486585 -1.9319706 128.0 +5.8953552 0.25850779 -1.9307027 128.0 +5.8892484 0.22204332 -1.928167 128.0 +5.8886037 0.18584344 -1.927533 128.0 +5.8943739 0.14982897 -1.9291179 128.0 +5.8913894 0.11358555 -1.92785 128.0 +5.8986139 0.077522233 -1.9300689 128.0 +5.9027719 0.041354395 -1.9313366 128.0 +5.9057598 0.0051375586 -1.9322876 128.0 +5.9066286 -0.031104529 -1.9326046 128.0 +5.9034815 -0.067314088 -1.9316536 128.0 +5.9029574 -0.10353591 -1.9316536 128.0 +5.89747 -0.1396419 -1.9300689 128.0 +5.8993464 -0.17591007 -1.9310197 128.0 +5.8848863 -0.21162818 -1.9265821 128.0 +5.8796868 -0.24757385 -1.9253142 128.0 +5.8856359 -0.28401145 -1.92785 128.0 +5.8837824 -0.32011968 -1.92785 128.0 +5.8854942 -0.35644495 -1.9291179 128.0 +5.887928 -0.39286634 -1.9307027 128.0 +5.8891902 -0.42926213 -1.9319706 128.0 +5.8892817 -0.46561351 -1.9329215 128.0 +5.8938742 -0.5023846 -1.9354573 128.0 +5.8954029 -0.53897071 -1.9370422 128.0 +5.8882093 -0.57476574 -1.9357743 128.0 +5.8845716 -0.61088431 -1.9357743 128.0 +5.8797698 -0.64687622 -1.9354573 128.0 +5.8643847 -0.68162835 -1.9316536 128.0 +5.8610334 -0.71771395 -1.9319706 128.0 +5.8452311 -0.75221115 -1.928167 128.0 +5.8433251 -0.78844297 -1.9291179 128.0 +5.8411951 -0.82467967 -1.9300689 128.0 +5.8519759 -0.86285585 -1.9354573 128.0 +5.83251 -0.89658606 -1.9307027 128.0 +5.8334546 -0.93340534 -1.9329215 128.0 +5.8360376 -0.97058094 -1.9357743 128.0 +5.8168879 -1.0041142 -1.9313366 128.0 +5.8236876 -1.042125 -1.9357743 128.0 +5.803195 -1.075248 -1.9310197 128.0 +5.8011456 -1.1117277 -1.9326046 128.0 +5.8007278 -1.148591 -1.9348234 128.0 +5.7972879 -1.1849215 -1.9360913 128.0 +5.7676349 -1.2157772 -1.928484 128.0 +5.781384 -1.2557726 -1.9357743 128.0 +5.7994862 -1.2970171 -1.9446496 128.0 +5.7692356 -1.327475 -1.9370422 128.0 +5.7388301 -1.3576107 -1.9294349 128.0 +5.7313137 -1.3930218 -1.9297519 128.0 +5.720818 -1.4277031 -1.9291179 128.0 +5.7321634 -1.4679536 -1.9360913 128.0 +5.733139 -1.5057473 -1.9395781 128.0 +5.7173815 -1.5391715 -1.9373592 128.0 +5.697772 -1.5714506 -1.9338725 128.0 +5.704452 -1.6110206 -1.9395781 128.0 +5.6935482 -1.6457288 -1.9392611 128.0 +5.6733384 -1.677675 -1.9357743 128.0 +5.6711082 -1.7149246 -1.9386271 128.0 +5.6523237 -1.7471693 -1.9357743 128.0 +5.6315484 -1.778677 -1.9322876 128.0 +5.619626 -1.8129069 -1.9319706 128.0 +5.593082 -1.8423109 -1.9265821 128.0 +5.5942583 -1.8808253 -1.9310197 128.0 +5.5431385 -1.9015771 -1.9170729 128.0 +5.5259953 -1.9336742 -1.915171 128.0 +5.4613218 -1.9487425 -1.8964696 128.0 +5.3913264 -1.9611458 -1.8758663 128.0 +5.2973742 -1.9638646 -1.8467047 128.0 +5.2027082 -1.9651703 -1.8172262 128.0 +5.1533737 -1.9827553 -1.8039134 128.0 +5.0872416 -1.9932367 -1.784578 128.0 +5.0167727 -2.0012252 -1.7636577 128.0 +4.9701262 -2.0180569 -1.7512957 128.0 +4.9208336 -2.0333056 -1.7379827 128.0 +4.8829093 -2.0528035 -1.7287905 128.0 +4.8396993 -2.0696757 -1.7176964 128.0 +4.7921181 -2.0842047 -1.7050176 128.0 +4.7896485 -2.1181717 -1.7088212 128.0 +4.767911 -2.1436319 -1.7056515 128.0 +4.7262006 -2.1598401 -1.6951914 128.0 +4.705977 -2.1856034 -1.6926556 128.0 +4.559526 -2.1517086 -1.6435246 128.0 +4.3709102 -2.0956032 -1.5785451 128.0 +4.4099855 -2.1477103 -1.5978805 128.0 +4.2564483 -2.1053593 -1.5455798 128.0 +4.2646389 -2.1420774 -1.5535041 128.0 +4.1238298 -2.1031499 -1.5056411 128.0 +4.0493612 -2.0965858 -1.4825021 128.0 +4.0960312 -2.152715 -1.5050071 128.0 +4.1229148 -2.19923 -1.5202219 128.0 +4.1493802 -2.2461548 -1.5354366 128.0 +4.2352786 -2.3263576 -1.5734735 128.0 +4.0461097 -2.2548964 -1.506592 128.0 +4.0751319 -2.3039494 -1.5230746 128.0 +4.0633869 -2.3303258 -1.5240256 128.0 +3.7251635 -2.1668768 -1.398821 128.0 +3.5467782 -2.0923643 -1.3347924 128.0 +3.4801517 -2.0819569 -1.3138721 128.0 +3.4283857 -2.0796642 -1.2986574 128.0 +3.3614299 -2.0673771 -1.2774202 128.0 +3.3124628 -2.0653856 -1.2631563 128.0 +3.2644501 -2.0633786 -1.2492095 128.0 +3.1606829 -2.0250514 -1.2130744 128.0 +3.1195605 -2.0258143 -1.2016635 128.0 +3.0880563 -2.0324054 -1.194056 128.0 +3.0786839 -2.0534198 -1.1953239 128.0 +3.0463803 -2.0589964 -1.1873996 128.0 +3.9782534 -2.7243912 -1.5699868 128.0 +2.9803619 -2.0681131 -1.170917 128.0 +2.9288192 -2.0590918 -1.1550683 128.0 +2.8775008 -2.0495169 -1.1392196 128.0 +2.8441031 -2.0521529 -1.1306614 128.0 +2.8153768 -2.0578141 -1.124005 128.0 +2.7744913 -2.0541725 -1.1122769 128.0 +2.7413461 -2.0557964 -1.1037186 128.0 +2.7082863 -2.0570917 -1.0951604 128.0 +2.6865916 -2.0667324 -1.0913566 128.0 +2.674608 -2.0837607 -1.0916736 128.0 +2.6558149 -2.0954337 -1.0891378 128.0 +2.6636565 -2.1282644 -1.098013 128.0 +2.66677 -2.1576908 -1.1049864 128.0 +2.6556816 -2.1758161 -1.1059374 128.0 +2.645931 -2.1950974 -1.1075222 128.0 +2.6287811 -2.2082415 -1.1059374 128.0 +2.6130145 -2.2224867 -1.1049864 128.0 +2.5835159 -2.224864 -1.098013 128.0 +2.5262048 -2.2026582 -1.0786777 128.0 +2.4920204 -2.1999171 -1.0694854 128.0 +2.4685738 -2.2063191 -1.0650479 128.0 +2.4275591 -2.19661 -1.0526859 128.0 +2.4112377 -2.2089014 -1.0514179 128.0 +2.3969433 -2.2230101 -1.051101 128.0 +2.391556 -2.245465 -1.0549047 128.0 +2.3859835 -2.2679372 -1.0587083 128.0 +2.3733897 -2.2838497 -1.0593423 128.0 +2.3538959 -2.2930756 -1.0568064 128.0 +2.3559904 -2.323457 -1.0644139 128.0 +2.3557863 -2.3519397 -1.0710703 128.0 +2.332638 -2.3575866 -1.0669496 128.0 +2.316802 -2.3704987 -1.0663157 128.0 +2.3008957 -2.3833051 -1.0656818 128.0 +2.2855742 -2.396692 -1.0653648 128.0 +2.2805812 -2.4210253 -1.0701194 128.0 +2.2792525 -2.4495528 -1.0767758 128.0 +2.255193 -2.4537168 -1.0723382 128.0 +2.2413702 -2.4689124 -1.0729722 128.0 +2.2173133 -2.472734 -1.0685345 128.0 +2.1775711 -2.458606 -1.0561726 128.0 +2.1649425 -2.474776 -1.0574404 128.0 +2.150337 -2.4887309 -1.0577574 128.0 +2.1301 -2.4961073 -1.0552217 128.0 +2.1233025 -2.5192823 -1.0596592 128.0 +2.1078043 -2.5322633 -1.0596592 128.0 +2.1012626 -2.5561376 -1.0644139 128.0 +2.0771687 -2.5586748 -1.0599762 128.0 +2.06499 -2.5758114 -1.0618781 128.0 +2.0473797 -2.5862029 -1.0609272 128.0 +2.0384831 -2.6076825 -1.0647309 128.0 +2.0154891 -2.6111326 -1.0609272 128.0 +2.0120792 -2.640044 -1.0679005 128.0 +2.0072496 -2.6674955 -1.0742401 128.0 +2.0032897 -2.6965094 -1.0812135 128.0 +0 -0 -0 128.0 +1.9628165 -2.7109039 -1.0770928 128.0 +1.9395267 -2.7136378 -1.0732892 128.0 +1.9080749 -2.7045648 -1.0647309 128.0 +1.8800603 -2.6998785 -1.0580744 128.0 +1.8747419 -2.7277763 -1.0647309 128.0 +1.8483846 -2.725101 -1.0590253 128.0 +1.8252969 -2.726934 -1.0552217 128.0 +1.7991197 -2.7238386 -1.0495161 128.0 +1.7870343 -2.7419772 -1.0523689 128.0 +1.7747937 -2.7600696 -1.0552217 128.0 +1.7563004 -2.7685051 -1.0542707 128.0 +1.7468287 -2.7912881 -1.0590253 128.0 +1.7236892 -2.7922702 -1.0552217 128.0 +1.7124437 -2.8125143 -1.0590253 128.0 +1.7010145 -2.8327253 -1.062829 128.0 +1.6749008 -2.8284206 -1.0571234 128.0 +1.6575143 -2.8386445 -1.0571234 128.0 +1.6500051 -2.8660212 -1.06378 128.0 +1.6328567 -2.8769162 -1.0640969 128.0 +1.6147103 -2.8860533 -1.06378 128.0 +1.6001781 -2.90172 -1.0659988 128.0 +1.5895913 -2.9248161 -1.0710703 128.0 +1.5751981 -2.9412026 -1.0736061 128.0 +1.5602206 -2.9566839 -1.0758249 128.0 +1.5468627 -2.9754577 -1.0793116 128.0 +1.5307386 -2.9891136 -1.0808965 128.0 +1.5110873 -2.9959095 -1.0799456 128.0 +1.4888781 -2.9974806 -1.0770928 128.0 +1.4654564 -2.9963365 -1.0732892 128.0 +1.4458089 -3.0027084 -1.0723382 128.0 +1.4176059 -2.9909554 -1.0647309 128.0 +1.3827841 -2.964359 -1.0517349 128.0 +1.3859404 -3.0193312 -1.0688515 128.0 +1.3755879 -3.0459294 -1.075508 128.0 +1.3599539 -3.0612462 -1.0780437 128.0 +1.3403852 -3.0677948 -1.0774097 128.0 +1.3211617 -3.0750902 -1.0770928 128.0 +1.2989463 -3.0752759 -1.0742401 128.0 +1.2735044 -3.0674222 -1.0685345 128.0 +1.2550174 -3.0760565 -1.0688515 128.0 +1.2474154 -3.1118689 -1.0789946 128.0 +1.2178702 -3.0929909 -1.0694854 128.0 +1.200922 -3.1057127 -1.0713873 128.0 +1.1835268 -3.1174562 -1.0729722 128.0 +1.1686828 -3.1362123 -1.0770928 128.0 +1.14844 -3.1406522 -1.0761418 128.0 +1.1253034 -3.1369274 -1.0723382 128.0 +1.1123319 -3.1616659 -1.0786777 128.0 +1.0891987 -3.1576729 -1.074874 128.0 +1.0773998 -3.1867576 -1.0827984 128.0 +1.0625997 -3.2077129 -1.0878699 128.0 +1.0431902 -3.2150748 -1.0881869 128.0 +1.0277525 -3.2349732 -1.0929415 128.0 +1.0233788 -3.2910278 -1.110375 128.0 +0.98935789 -3.2518785 -1.0945264 128.0 +0.96830374 -3.2542517 -1.0932585 128.0 +0.94354755 -3.2437401 -1.0875529 128.0 +0.93218744 -3.2795732 -1.098013 128.0 +0.91204679 -3.2852314 -1.098013 128.0 +0.89038259 -3.2852736 -1.0961112 128.0 +0.85419726 -3.2301605 -1.075191 128.0 +0.82251364 -3.1894228 -1.0593423 128.0 +0.77586454 -3.0867939 -1.0222564 128.0 +0.74765742 -3.0537271 -1.0092604 128.0 +0.74364662 -3.120069 -1.0304977 128.0 +0.72727472 -3.136584 -1.0346184 128.0 +0.71657079 -3.1789203 -1.0476142 128.0 +0.71126115 -3.2481093 -1.0698024 128.0 +0.69289619 -3.2598338 -1.0723382 128.0 +0.67633009 -3.2807438 -1.0780437 128.0 +0.6556294 -3.2820418 -1.0770928 128.0 +0.63674015 -3.292521 -1.0793116 128.0 +0.61408299 -3.2833145 -1.074874 128.0 +0.59780669 -3.3084865 -1.0821644 128.0 +0.57667983 -3.3074207 -1.0805795 128.0 +0.55448759 -3.2996733 -1.0767758 128.0 +0.53513998 -3.3086309 -1.0786777 128.0 +0.52022302 -3.3465271 -1.0904057 128.0 +0.50079972 -3.3571606 -1.0929415 128.0 +0.47898254 -3.3517203 -1.0900887 128.0 +0.45622286 -3.3386216 -1.0847002 128.0 +0.43671092 -3.3488817 -1.0872359 128.0 +0.41755813 -3.3627925 -1.0910397 128.0 +0.39713895 -3.3671751 -1.0916736 128.0 +0.37868476 -3.3893423 -1.09833 128.0 +0.36186653 -3.4293294 -1.111009 128.0 +0.34288239 -3.4522483 -1.1179824 128.0 +0.32098889 -3.4467325 -1.1154466 128.0 +0.3002454 -3.4533615 -1.1170315 128.0 +0.27759758 -3.4371772 -1.111009 128.0 +0.255725 -3.428412 -1.1075222 128.0 +0.23487839 -3.4327552 -1.1084732 128.0 +0.21363385 -3.4312921 -1.1075222 128.0 +0.19278876 -3.436326 -1.1087902 128.0 +0.17151053 -3.4336553 -1.1075222 128.0 +0.15043879 -3.434643 -1.1075222 128.0 +0.12875281 -3.4193895 -1.1021338 128.0 +0.10689992 -3.3926244 -1.0929415 128.0 +0.085767001 -3.3808906 -1.0888208 128.0 +0.064653687 -3.3623881 -1.0824814 128.0 +0.04392102 -3.3551347 -1.0799456 128.0 +0.023367019 -3.3600831 -1.0815305 128.0 +0.0027592839 -3.3705962 -1.0850172 128.0 +-0.017991373 -3.3838274 -1.0894548 128.0 +-0.038936544 -3.3997757 -1.0948434 128.0 +-0.060028393 -3.4127488 -1.099281 128.0 +-0.08121375 -3.4227462 -1.1027677 128.0 +-0.10362398 -3.4695842 -1.1186163 128.0 +-0.1237203 -3.4357092 -1.1075222 128.0 +-0.14603397 -3.4642608 -1.1173484 128.0 +-0.16765271 -3.4708784 -1.1198843 128.0 +-0.19064467 -3.5010364 -1.1303444 128.0 +-0.20874408 -3.4439454 -1.111643 128.0 +-0.22961949 -3.4388144 -1.110375 128.0 +-0.24933764 -3.418422 -1.1040356 128.0 +-0.27015862 -3.4149368 -1.1034017 128.0 +-0.29110721 -3.4132149 -1.1034017 128.0 +-0.31601387 -3.4548116 -1.1179824 128.0 +-0.33720624 -3.4528074 -1.1179824 128.0 +-0.36073473 -3.4733143 -1.1255897 128.0 +-0.38774079 -3.522887 -1.1430234 128.0 +-0.40967783 -3.5232677 -1.1439742 128.0 +-0.43232542 -3.5291605 -1.146827 128.0 +-0.45215696 -3.512331 -1.1420724 128.0 +-0.47686869 -3.5329885 -1.1499968 128.0 +-0.72594917 -5.1415429 -1.6939235 128.0 +-0.75568569 -5.124794 -1.6898028 128.0 +-0.78942126 -5.1350598 -1.6948744 128.0 +-0.8176192 -5.1095157 -1.6879009 128.0 +-0.84786648 -5.0978532 -1.6856822 128.0 +-0.87767893 -5.0841436 -1.6828294 128.0 +-0.90935916 -5.0814633 -1.6837803 128.0 +-0.94034857 -5.0748553 -1.6834633 128.0 +-0.97057736 -5.0643325 -1.6818784 128.0 +-1.0018173 -5.0592122 -1.6821954 128.0 +-1.0336007 -5.0566869 -1.6834633 128.0 +-1.0648041 -5.0511775 -1.6837803 128.0 +-1.0953749 -5.0426955 -1.6831464 128.0 +-1.1300206 -5.0525398 -1.6888518 128.0 +-1.1544102 -5.0168576 -1.6790257 128.0 +-1.1838616 -5.0041423 -1.6771239 128.0 +-1.2136484 -4.9930973 -1.675856 128.0 +-1.2465585 -4.9947591 -1.6790257 128.0 +-1.2715368 -4.9649649 -1.6714183 128.0 +-1.3084806 -4.9818377 -1.6799766 128.0 +-1.3360661 -4.9627252 -1.676173 128.0 +-1.3662397 -4.9535193 -1.675856 128.0 +-1.3899077 -4.9213114 -1.6676147 128.0 +-1.1633577 -4.0243168 -1.3585653 128.0 +-1.1880286 -4.0171027 -1.3585653 128.0 +-1.4497919 -4.7941222 -1.6324306 128.0 +-1.4920622 -4.8268194 -1.6470114 128.0 +-1.5342166 -4.8573675 -1.6609582 128.0 +-1.5674856 -4.8586941 -1.6647619 128.0 +-1.5856986 -4.8138518 -1.6523999 128.0 +-1.6197388 -4.8175168 -1.6571546 128.0 +-1.6504987 -4.8110762 -1.6584224 128.0 +-1.6809275 -4.803544 -1.6593733 128.0 +-1.7119633 -4.797606 -1.6609582 128.0 +-1.7416928 -4.7879028 -1.6612751 128.0 +-1.7726861 -4.7815723 -1.66286 128.0 +-1.8060127 -4.7812524 -1.6666638 128.0 +-1.837359 -4.7753921 -1.6685655 128.0 +-1.8707768 -4.7746258 -1.6723692 128.0 +-1.8951193 -4.7507234 -1.6679317 128.0 +-1.2121755 -2.9849517 -1.0352523 128.0 +-1.2308301 -2.9783344 -1.0355693 128.0 +-1.2505516 -2.9742234 -1.0368372 128.0 +-2.02195 -4.7280741 -1.6771239 128.0 +-2.0520575 -4.7181878 -1.6780747 128.0 +-2.103981 -4.7575536 -1.6970932 128.0 +-2.1339109 -4.7462845 -1.6977271 128.0 +-2.1598401 -4.7262006 -1.6951914 128.0 +-1.5752703 -3.3915586 -1.2083199 128.0 +-1.5915991 -3.3723938 -1.2048331 128.0 +-1.6065223 -3.3505907 -1.2003956 128.0 +-1.6266357 -3.3398175 -1.2000786 128.0 +-1.6458366 -3.3272233 -1.1991277 128.0 +-1.6645185 -3.3136718 -1.1978598 128.0 +-1.683527 -3.3008614 -1.1969088 128.0 +-1.7168291 -3.3157375 -1.206418 128.0 +-1.749053 -3.3278098 -1.2149763 128.0 +-1.7779189 -3.3329155 -1.2209989 128.0 +-2.2443492 -4.1460438 -1.5341687 128.0 +-2.5098865 -4.5694709 -1.7008969 128.0 +-2.525413 -4.5316148 -1.6923386 128.0 +-2.5396364 -4.4920897 -1.6831464 128.0 +-2.5728128 -4.4862957 -1.6869501 128.0 +-2.6107814 -4.4884615 -1.6939235 128.0 +-2.6320093 -4.4617376 -1.6898028 128.0 +-2.6588495 -4.4446902 -1.6894858 128.0 +-2.6895142 -4.4339685 -1.6917046 128.0 +-2.7295864 -4.4383883 -1.6999459 128.0 +-2.7467337 -4.4054594 -1.6936065 128.0 +-2.7691536 -4.3813071 -1.6907537 128.0 +-2.7929151 -4.3594413 -1.6888518 128.0 +-2.8046343 -4.3191533 -1.6796596 128.0 +-2.8284767 -4.2979016 -1.6780747 128.0 +-2.8584781 -4.2859893 -1.6802936 128.0 +-2.8985291 -4.2888012 -1.6885349 128.0 +-2.9194317 -4.2631097 -1.6853652 128.0 +-2.9217477 -4.2108283 -1.6714183 128.0 +-2.9606192 -4.2114439 -1.6790257 128.0 +-2.9748514 -4.1769743 -1.6723692 128.0 +-2.9937663 -4.1494122 -1.6685655 128.0 +-3.0197299 -4.1317306 -1.6688825 128.0 +-3.0427678 -4.1100745 -1.6676147 128.0 +-3.0576887 -4.0776682 -1.6619091 128.0 +-2.2561238 -2.9703884 -1.2051501 128.0 +-2.2748854 -2.9572411 -1.2054671 128.0 +-2.298816 -2.9507093 -1.2086369 128.0 +-3.14979 -3.9924648 -1.6581055 128.0 +-3.1724522 -3.9708397 -1.6571546 128.0 +-3.2086868 -3.966047 -1.663494 128.0 +-3.2329617 -3.9462841 -1.663494 128.0 +-3.261353 -3.9314828 -1.6657128 128.0 +-3.2835848 -3.9092188 -1.6647619 128.0 +-3.2903066 -3.8687668 -1.6558867 128.0 +-3.3152206 -3.8499424 -1.6565206 128.0 +-3.336288 -3.8266683 -1.6552527 128.0 +-3.372257 -3.8203471 -1.6615921 128.0 +-3.381732 -3.7840245 -1.6546187 128.0 +-3.4067955 -3.7653131 -1.6555697 128.0 +-3.4215076 -3.7352462 -1.651449 128.0 +-3.4462967 -3.7162683 -1.6523999 128.0 +-3.4709818 -3.6971269 -1.6533508 128.0 +-3.4981749 -3.6805723 -1.6555697 128.0 +-3.5318708 -3.6706579 -1.6609582 128.0 +-3.5324903 -3.6264961 -1.650498 128.0 +-3.5553412 -3.6054282 -1.650815 128.0 +-3.5539463 -3.5600505 -1.6397209 128.0 +-3.5844872 -3.54685 -1.6438416 128.0 +-3.6082172 -3.5267782 -1.6447926 128.0 +-3.6366119 -3.5111604 -1.6479623 128.0 +-3.6601462 -3.4907444 -1.6489131 128.0 +-3.6828768 -3.4695213 -1.6495471 128.0 +-3.6992362 -3.4423351 -1.6473284 128.0 +-3.7195902 -3.4189303 -1.6470114 128.0 +-3.7426047 -3.3979557 -1.6479623 128.0 +-3.7633836 -3.3749275 -1.6479623 128.0 +-3.7847309 -3.3524013 -1.6482793 128.0 +-3.792382 -3.3178735 -1.6425737 128.0 +-3.8169742 -3.2982624 -1.6444756 128.0 +-3.87393 -3.3061831 -1.6606412 128.0 +-3.8752899 -3.2664568 -1.6523999 128.0 +-3.8777666 -3.2280524 -1.6447926 128.0 +-3.9150825 -3.2186551 -1.6523999 128.0 +-3.9251866 -3.1867998 -1.6482793 128.0 +-3.9520657 -3.1685886 -1.651449 128.0 +-3.973664 -3.1460459 -1.6523999 128.0 +-3.9928932 -3.1216047 -1.6523999 128.0 +-4.0172267 -3.1011033 -1.6546187 128.0 +-4.0437217 -3.0821457 -1.6577885 128.0 +-4.0663462 -3.0601275 -1.6593733 128.0 +-4.0896139 -3.0385134 -1.6612751 128.0 +-4.1051221 -3.0111189 -1.6600072 128.0 +-4.1373472 -2.9958873 -1.6657128 128.0 +-4.1564231 -2.9709961 -1.6660298 128.0 +-4.1830988 -2.9514523 -1.6695164 128.0 +-4.2081342 -2.9306083 -1.6723692 128.0 +-4.2260365 -2.9047325 -1.6723692 128.0 +-4.2563376 -2.8872671 -1.6774409 128.0 +-4.2913117 -2.872705 -1.6844143 128.0 +-4.3049011 -2.8437059 -1.6828294 128.0 +-4.3246522 -2.8187916 -1.6837803 128.0 +-4.3370805 -2.7891247 -1.6818784 128.0 +-4.369328 -2.7721155 -1.6879009 128.0 +-4.398314 -2.7528021 -1.6926556 128.0 +-4.4264197 -2.732739 -1.6970932 128.0 +-4.4479642 -2.7084875 -1.698995 128.0 +-4.4783211 -2.6894464 -1.7043836 128.0 +-4.4931068 -2.6609504 -1.7037497 128.0 +-4.5199962 -2.6395497 -1.7078702 128.0 +-4.546792 -2.6179187 -1.711991 128.0 +-4.5602951 -2.5885663 -1.71104 128.0 +-4.5909901 -2.5688734 -1.7167455 128.0 +-4.6124792 -2.5438619 -1.7189643 128.0 +-4.6413331 -2.5227604 -1.724036 128.0 +-4.6692657 -2.5009522 -1.7287905 128.0 +-4.6971049 -2.4788961 -1.7335452 128.0 +-4.729897 -2.4592178 -1.7402016 128.0 +-4.7474298 -2.4314466 -1.7411525 128.0 +-4.7791948 -2.4108155 -1.747492 128.0 +-4.8100352 -2.3894639 -1.7535145 128.0 +-4.8152351 -2.3553202 -1.7500278 128.0 +-4.8424134 -2.3319037 -1.7547824 128.0 +-4.8677716 -2.3074293 -1.758903 128.0 +-4.8921518 -2.2823303 -1.7627068 128.0 +-4.9207163 -2.2589977 -1.7680953 128.0 +-4.9223843 -2.2232957 -1.7636577 128.0 +-4.9515343 -2.1999836 -1.7693632 128.0 +-4.9293084 -2.1539869 -1.7563672 128.0 +-4.9415607 -2.1233263 -1.7560502 128.0 +-4.9256659 -2.0807838 -1.7455902 128.0 +-4.9567347 -2.0581605 -1.7522466 128.0 +-4.9964914 -2.0388179 -1.7620728 128.0 +-5.0326753 -2.0176525 -1.7706311 128.0 +-5.090848 -2.0048091 -1.7871137 128.0 +-5.1499352 -1.9916694 -1.8039134 128.0 +-5.198411 -1.9738386 -1.8169092 128.0 +-5.3010712 -1.9756957 -1.8492405 128.0 +-5.3879137 -1.9705013 -1.8758663 128.0 +-5.4579282 -1.9582276 -1.8964696 128.0 +-5.5288873 -1.9454832 -1.9173899 128.0 +-5.5882378 -1.9279189 -1.9341894 128.0 +-5.6493764 -1.9103067 -1.951623 128.0 +-5.6870999 -1.884259 -1.9608152 128.0 +-5.7075753 -1.8522563 -1.963985 128.0 +-5.733295 -1.8217969 -1.9690566 128.0 +-5.7416487 -1.7857386 -1.9681057 128.0 +-5.7661076 -1.7546173 -1.9728602 128.0 +-5.7685843 -1.7167689 -1.9700074 128.0 +-5.7753668 -1.680281 -1.9687396 128.0 +-5.7873926 -1.6453313 -1.9693735 128.0 +-5.797379 -1.6097896 -1.9693735 128.0 +-5.7961631 -1.5712087 -1.9655699 128.0 +-5.8038607 -1.5351294 -1.9649359 128.0 +-5.8122525 -1.4992517 -1.9646189 128.0 +-5.8231821 -1.4640229 -1.9652529 128.0 +-5.8320556 -1.4282649 -1.9652529 128.0 +-5.8305612 -1.3900331 -1.9617661 128.0 +-5.8435998 -1.355303 -1.963351 128.0 +-5.8712349 -1.3238039 -1.9700074 128.0 +-5.8699827 -1.2857239 -1.9668378 128.0 +-5.8851829 -1.2512605 -1.9693735 128.0 +-5.8918204 -1.2149346 -1.9690566 128.0 +-5.8880038 -1.1765294 -1.9652529 128.0 +-5.8904562 -1.1394781 -1.963668 128.0 +-5.9066596 -1.1050583 -1.9668378 128.0 +-5.9114623 -1.0684574 -1.9662038 128.0 +-5.9263158 -1.0336324 -1.9690566 128.0 +-5.9428349 -0.99897993 -1.9725432 128.0 +-5.9441714 -0.96173888 -1.9709584 128.0 +-5.9658923 -0.92772657 -1.976347 128.0 +-5.9771008 -0.89194334 -1.9782488 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-5.6692877 1.0514209 -1.9550045 128.0 +-5.6553059 1.0847617 -1.9523866 128.0 +-5.6457624 1.1188899 -1.951405 128.0 +-5.6369395 1.1531315 -1.9507506 128.0 +-5.6269841 1.1871116 -1.9497689 128.0 +-5.6149774 1.2206112 -1.9481329 128.0 +-5.6000056 1.2533885 -1.945515 128.0 +-5.5949721 1.2883626 -1.9464967 128.0 +-5.5933976 1.3241936 -1.9487872 128.0 +-5.5870037 1.3589361 -1.9494417 128.0 +-5.5739765 1.392046 -1.9478056 128.0 +-5.5616689 1.425282 -1.9464967 128.0 +-5.5336275 1.4543331 -1.9396251 128.0 +-5.5136514 1.4853076 -1.9356985 128.0 +-5.52174 1.5238907 -1.9419156 128.0 +-5.5013742 1.5546569 -1.9379891 128.0 +-5.5071621 1.5928499 -1.9435518 128.0 +-5.4827881 1.6223184 -1.9383162 128.0 +-5.4899139 1.6611328 -1.9445335 128.0 +-5.482326 1.6956252 -1.945515 128.0 +-5.4556012 1.7241035 -1.9396251 128.0 +-5.4458189 1.7578365 -1.9399524 128.0 +-5.4259567 1.7882587 -1.9366802 128.0 +-5.4193597 1.8230253 -1.9383162 128.0 +-5.4375639 1.8663731 -1.9491144 128.0 +-5.4215508 1.89814 -1.9474784 128.0 +-5.3911147 1.9246944 -1.9406068 128.0 +-5.3667731 1.9532106 -1.9360257 128.0 +-5.3422847 1.9815006 -1.9314448 128.0 +-5.334445 2.015914 -1.9330808 128.0 +-5.3281479 2.0509851 -1.9353713 128.0 +-5.3110647 2.0819142 -1.9337353 128.0 +-5.2955575 2.1134117 -1.9327536 128.0 +-5.2693591 2.1405277 -1.9278454 128.0 +-5.2526331 2.1713748 -1.9265364 128.0 +-5.2557592 2.2105277 -1.9327536 128.0 +-5.2551274 2.2483127 -1.9376619 128.0 +-5.2507634 2.2846644 -1.9412613 128.0 +-5.2426949 2.3195169 -1.9435518 128.0 +-5.2145762 2.345437 -1.9383162 128.0 +-5.2009463 2.3777821 -1.9386435 128.0 +-5.1734052 2.4036746 -1.9337353 128.0 +-5.1602678 2.4361799 -1.9343897 128.0 +-5.1409631 2.4657528 -1.9327536 128.0 +-5.1384778 2.5034614 -1.9376619 128.0 +-5.117939 2.5324278 -1.9356985 128.0 +-5.102304 2.5637834 -1.9356985 128.0 +-5.0789022 2.5911758 -1.9327536 128.0 +-5.0620685 2.6218557 -1.9324263 128.0 +-5.0425406 2.6511071 -1.9311175 128.0 +-5.0261784 2.6819975 -1.9311175 128.0 +-5.007966 2.7118869 -1.9304631 128.0 +-4.9895754 2.7416537 -1.9298086 128.0 +-4.9701834 2.7708366 -1.9288269 128.0 +-4.9530883 2.801281 -1.9288269 128.0 +-4.9317088 2.8292677 -1.9271909 128.0 +-4.9183393 2.8618519 -1.9288269 128.0 +-4.8966184 2.8895745 -1.9271909 128.0 +-4.8804173 2.9205358 -1.9278454 128.0 +-4.8615975 2.9499362 -1.9275181 128.0 +-4.8482342 2.9826827 -1.9294814 128.0 +-4.8290396 3.0118747 -1.9291542 128.0 +-4.8128643 3.0429637 -1.9301358 128.0 +-4.7917156 3.0709076 -1.9291542 128.0 +-4.7791214 3.1043704 -1.9317719 128.0 +-4.7607727 3.134156 -1.9320991 128.0 +-4.7406664 3.1627839 -1.9317719 128.0 +-4.7188225 3.1902242 -1.9307903 128.0 +-4.6944818 3.2159133 -1.9288269 128.0 +-4.6777658 3.2468133 -1.9301358 128.0 +-4.655437 3.2738233 -1.9291542 128.0 +-4.6337228 3.30123 -1.9284997 128.0 +-4.609549 3.326834 -1.9268637 128.0 +-4.5859981 3.3528235 -1.9255548 128.0 +-4.56458 3.380337 -1.9252275 128.0 +-4.5384622 3.4043109 -1.922937 128.0 +-4.5137267 3.4292355 -1.921301 128.0 +-4.4993396 3.4620543 -1.924246 128.0 +-4.4802475 3.4913394 -1.9252275 128.0 +-4.4572577 3.5175929 -1.9245732 128.0 +-4.4311619 3.5413353 -1.9226098 128.0 +-4.4174275 3.5749984 -1.9262092 128.0 +-4.3881011 3.596045 -1.922937 128.0 +-4.3637724 3.6210914 -1.9219553 128.0 +-4.3429184 3.6490149 -1.9226098 128.0 +-4.3240447 3.6786561 -1.924246 128.0 +-4.2978125 3.7020345 -1.9226098 128.0 +-4.2821364 3.7345481 -1.925882 128.0 +-4.2591414 3.7607524 -1.925882 128.0 +-4.2416205 3.7918546 -1.9284997 128.0 +-4.2161727 3.8159065 -1.9275181 128.0 +-4.1947694 3.8436203 -1.9284997 128.0 +-4.1717987 3.8699293 -1.9288269 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-4.1093888 3.9552388 -1.933408 128.0 +-4.0775995 3.9731236 -1.9298086 128.0 +-0 0 -0 128.0 +-4.0298734 4.0241985 -1.9304631 128.0 +-3.9984612 4.0421305 -1.9271909 128.0 +-3.9768853 4.0699682 -1.9288269 128.0 +-3.9439642 4.086133 -1.9249003 128.0 +-3.918818 4.1102557 -1.9249003 128.0 +-3.8876946 4.1280313 -1.9219553 128.0 +-3.8571446 4.1462722 -1.9193376 128.0 +-3.8277955 4.1656857 -1.9173744 128.0 +-3.7977188 4.184195 -1.9150838 128.0 +-3.7738655 4.2095299 -1.9160655 128.0 +-3.753602 4.238975 -1.9190104 128.0 +-3.7293873 4.264061 -1.9199921 128.0 +-3.6994479 4.2825727 -1.9180288 128.0 +-3.6712613 4.3030343 -1.9170471 128.0 +-3.6514854 4.3334298 -1.9206465 128.0 +-3.619993 4.3499417 -1.9180288 128.0 +-3.6064305 4.388135 -1.9252275 128.0 +-3.569912 4.3984399 -1.9199921 128.0 +-3.5487647 4.4276366 -1.9232643 128.0 +-3.51684 4.4433994 -1.9206465 128.0 +-3.4866011 4.4611712 -1.9190104 128.0 +-3.4591622 4.4824805 -1.9190104 128.0 +-3.4344559 4.50738 -1.9206465 128.0 +-3.4050307 4.526103 -1.9196649 128.0 +-3.3805745 4.5514627 -1.9216281 128.0 +-3.3531423 4.5728822 -1.9219553 128.0 +-3.3200352 4.5864806 -1.9190104 128.0 +-3.285789 4.5983071 -1.915411 128.0 +-3.2547901 4.6145201 -1.913775 128.0 +-3.2258749 4.6336288 -1.9134477 128.0 +-3.1984527 4.6548929 -1.9141022 128.0 +-3.1687701 4.6728663 -1.9134477 128.0 +-3.1437161 4.6977196 -1.9157382 128.0 +-3.1158733 4.7184978 -1.9163927 128.0 +-3.0868626 4.7375278 -1.9163927 128.0 +-3.0572245 4.7555842 -1.9160655 128.0 +-3.0239398 4.7678685 -1.9134477 128.0 +-2.9956298 4.7879357 -1.9141022 128.0 +-2.9642107 4.8030095 -1.9127933 128.0 +-2.9351754 4.8219147 -1.9131205 128.0 +-2.906992 4.8422642 -1.9141022 128.0 +-2.8767445 4.8591971 -1.913775 128.0 +-2.8473511 4.877573 -1.9141022 128.0 +-2.8216102 4.9023237 -1.9170471 128.0 +-2.7905447 4.917901 -1.9163927 128.0 +-2.758472 4.9316316 -1.9150838 128.0 +-2.7308965 4.9534302 -1.9170471 128.0 +-2.7004514 4.9700933 -1.9170471 128.0 +-2.6725798 4.9915681 -1.9190104 128.0 +-2.6392572 5.0028577 -1.9170471 128.0 +-2.6080751 5.0181193 -1.9167199 128.0 +-2.5759439 5.0315037 -1.9157382 128.0 +-2.5441723 5.045527 -1.9150838 128.0 +-2.5131655 5.0610428 -1.9150838 128.0 +-2.4783301 5.068727 -1.9121388 128.0 +-2.4459534 5.081284 -1.9111573 128.0 +-2.4123025 5.0910721 -1.9091939 128.0 +-2.3810189 5.1057782 -1.9091939 128.0 +-2.3476758 5.1159968 -1.9075578 128.0 +-2.317795 5.1337509 -1.9088666 128.0 +-2.2870181 5.1496034 -1.9095211 128.0 +-2.2587802 5.1713338 -1.912466 128.0 +-2.2229068 5.1755443 -1.9088666 128.0 +-2.1925781 5.1925688 -1.9101756 128.0 +-2.161762 5.2085428 -1.9111573 128.0 +-2.1265521 5.2138338 -1.9082122 128.0 +-2.0962772 5.2311702 -1.9098483 128.0 +-2.058259 5.2289853 -1.9042857 128.0 +-2.0230711 5.233583 -1.9013406 128.0 +-1.9832128 5.2255764 -1.8938147 128.0 +-1.9537494 5.2447314 -1.8964324 128.0 +-1.9302862 5.2805853 -1.9052672 128.0 +-1.8988051 5.2949986 -1.9062489 128.0 +-1.8681599 5.3118987 -1.9082122 128.0 +-1.8379943 5.3304086 -1.91083 128.0 +-1.8076718 5.3487482 -1.9134477 128.0 +-1.7700686 5.3453856 -1.9082122 128.0 +-1.7372366 5.3561459 -1.9082122 128.0 +-1.7006235 5.3549953 -1.9039584 128.0 +-1.674461 5.3869877 -1.9118116 128.0 +-1.6400018 5.3926396 -1.9101756 128.0 +-1.6068823 5.4026012 -1.9101756 128.0 +-1.5800297 5.4341373 -1.9180288 128.0 +-1.5409791 5.4237313 -1.91083 128.0 +-1.5071658 5.4312634 -1.9101756 128.0 +-1.4720836 5.4340239 -1.9078851 128.0 +-1.436783 5.4356451 -1.9052672 128.0 +-1.3986897 5.4260573 -1.8987229 128.0 +-1.3794037 5.4904447 -1.9186832 128.0 +-1.3459134 5.499723 -1.9190104 128.0 +-1.31805 5.5326982 -1.9278454 128.0 +-1.2744852 5.4992547 -1.9131205 128.0 +-1.246321 5.5318623 -1.9219553 128.0 +-1.2117492 5.5366359 -1.9209738 128.0 +-1.1775579 5.5430422 -1.9206465 128.0 +-1.1418099 5.5418334 -1.9177016 128.0 +-1.1063058 5.5413218 -1.9150838 128.0 +-1.0706719 5.5396552 -1.9121388 128.0 +-1.0335394 5.5294003 -1.9062489 128.0 +-1.0017726 5.5477271 -1.9105028 128.0 +-0.96965772 5.5649409 -1.9144294 128.0 +-0.93408692 5.5623984 -1.9114844 128.0 +-0.9002403 5.569891 -1.9121388 128.0 +-0.86213607 5.5500975 -1.903304 128.0 +-0.82778686 5.5534139 -1.9026495 128.0 +-0.79796445 5.5883241 -1.9131205 128.0 +-0.75753331 5.5481734 -1.8974141 128.0 +-0.72567022 5.5695839 -1.903304 128.0 +-0.68811411 5.5467362 -1.8938147 128.0 +-0.65428776 5.5527306 -1.8944691 128.0 +-0.618949 5.5453711 -1.8905425 128.0 +-0.58550477 5.5547032 -1.8925058 128.0 +-0.55271405 5.5713563 -1.8970869 128.0 +-0.51974094 5.5878153 -1.9016678 128.0 +-0.48821756 5.6229076 -1.9127933 128.0 +-0.45438877 5.6342745 -1.9157382 128.0 +-0.41896909 5.6256485 -1.9118116 128.0 +-0.38431448 5.6262279 -1.9111573 128.0 +-0.35031113 5.6369681 -1.9141022 128.0 +-0.3159799 5.6437287 -1.9157382 128.0 +-0.28111047 5.6408424 -1.9141022 128.0 +-0.24760193 5.6679506 -1.922937 128.0 +-0.21257259 5.6627531 -1.9206465 128.0 +-0.17752798 5.6545062 -1.9173744 128.0 +-0.14294757 5.660212 -1.9190104 128.0 +-0.10807152 5.6534243 -1.9163927 128.0 +-0.073392801 5.6549258 -1.9167199 128.0 +-0.038724806 5.6599946 -1.9183559 128.0 +-0.0039859931 5.6421714 -1.9121388 128.0 +0.0306125 5.63831 -1.91083 128.0 +0.065052241 5.6247878 -1.9062489 128.0 +0.099716336 5.6327858 -1.9091939 128.0 +0.13439016 5.6367912 -1.91083 128.0 +0.16943054 5.6509728 -1.9160655 128.0 +0.2037923 5.6413279 -1.9131205 128.0 +0.2386436 5.6456361 -1.9150838 128.0 +0.27318829 5.6421776 -1.9144294 128.0 +0.30847478 5.6526613 -1.9186832 128.0 +0.34223351 5.635571 -1.9134477 128.0 +0.37674302 5.632422 -1.9131205 128.0 +0.41157198 5.6337743 -1.9144294 128.0 +0.44620726 5.6320848 -1.9147565 128.0 +0.48003125 5.6207671 -1.9118116 128.0 +0.51675642 5.6421819 -1.9203193 128.0 +0.55044496 5.6295004 -1.9170471 128.0 +0.58448696 5.6213179 -1.915411 128.0 +0.61948615 5.6223216 -1.9170471 128.0 +0.65331572 5.6127834 -1.9150838 128.0 +0.68751246 5.6067929 -1.9144294 128.0 +0.72153926 5.5996575 -1.9134477 128.0 +0.75487089 5.5876336 -1.91083 128.0 +0.78609556 5.561377 -1.903304 128.0 +0.81965196 5.5527101 -1.9019951 128.0 +0.8532756 5.5447745 -1.9010135 128.0 +0.88967592 5.5543628 -1.9062489 128.0 +0.92498302 5.5562558 -1.9088666 128.0 +0.96260202 5.5709605 -1.9160655 128.0 +0.99926853 5.5789008 -1.9209738 128.0 +1.0371037 5.592175 -1.9278454 128.0 +1.0665858 5.5606503 -1.9190104 128.0 +1.1019725 5.5604892 -1.921301 128.0 +1.1400512 5.5730634 -1.9281725 128.0 +1.1693443 5.5428495 -1.9199921 128.0 +1.2013234 5.5263367 -1.9167199 128.0 +1.2327309 5.5077963 -1.9127933 128.0 +1.2705352 5.5176244 -1.9190104 128.0 +1.2965232 5.4766231 -1.9072306 128.0 +1.3285382 5.4621377 -1.90494 128.0 +1.3597367 5.4447155 -1.9016678 128.0 +1.3942931 5.4408464 -1.903304 128.0 +1.4298147 5.4404135 -1.9062489 128.0 +1.4616936 5.4260635 -1.9042857 128.0 +1.4967208 5.4233689 -1.9065762 128.0 +1.5271411 5.4040809 -1.9029768 128.0 +1.562373 5.4018703 -1.9055945 128.0 +1.5946839 5.3894639 -1.9046128 128.0 +1.6279969 5.3804817 -1.90494 128.0 +1.6604215 5.3685861 -1.9042857 128.0 +1.6916217 5.352891 -1.9023223 128.0 +1.7235632 5.3397131 -1.9013406 128.0 +1.7598462 5.3398056 -1.9052672 128.0 +1.7865483 5.3109956 -1.8987229 128.0 +1.8187953 5.2990398 -1.8983957 128.0 +1.8519002 5.2895637 -1.8990501 128.0 +1.8798709 5.2656431 -1.8944691 128.0 +1.9166719 5.2664399 -1.8990501 128.0 +1.9463197 5.2474933 -1.8964324 128.0 +1.9808207 5.2416391 -1.8987229 128.0 +2.0115869 5.2258592 -1.8974141 128.0 +2.0425792 5.2107787 -1.8964324 128.0 +2.076616 5.203413 -1.8983957 128.0 +2.103523 5.1783175 -1.8938147 128.0 +2.1399524 5.1766648 -1.8980684 128.0 +2.1720421 5.1643076 -1.8983957 128.0 +2.2033169 5.1500144 -1.8980684 128.0 +2.2363842 5.1398635 -1.8993773 128.0 +2.269027 5.1286368 -1.900359 128.0 +2.3016164 5.1172032 -1.9013406 128.0 +2.3333647 5.1038437 -1.9016678 128.0 +2.369019 5.098856 -1.9052672 128.0 +2.4014714 5.0867872 -1.9062489 128.0 +2.4326379 5.0719562 -1.9062489 128.0 +2.4612288 5.0518379 -1.9042857 128.0 +2.4925992 5.037488 -1.9046128 128.0 +2.5234618 5.022099 -1.9046128 128.0 +2.5512221 5.0006289 -1.9023223 128.0 +2.5805531 4.9823642 -1.9013406 128.0 +2.6084363 4.9614186 -1.8993773 128.0 +2.6388299 4.9453201 -1.8993773 128.0 +2.6673236 4.9257121 -1.8980684 128.0 +2.6979523 4.9100809 -1.8983957 128.0 +2.7303305 4.8975606 -1.9000318 128.0 +2.7626567 4.8848271 -1.9016678 128.0 +2.7921071 4.8669643 -1.9013406 128.0 +2.8228686 4.8513741 -1.9019951 128.0 +2.8530633 4.8347759 -1.9023223 128.0 +2.878792 4.8106928 -1.8997046 128.0 +2.9121785 4.7994003 -1.9023223 128.0 +2.9420676 4.7822456 -1.9026495 128.0 +2.9638519 4.7520785 -1.8977413 128.0 +3.0060883 4.7545667 -1.9062489 128.0 +3.0408154 4.7447824 -1.9098483 128.0 +3.067812 4.7228656 -1.9085394 128.0 +3.0894566 4.6929045 -1.9039584 128.0 +3.1234396 4.6817193 -1.9072306 128.0 +3.1499896 4.6593351 -1.9059217 128.0 +3.1843956 4.6484938 -1.9095211 128.0 +3.2026179 4.61412 -1.903304 128.0 +3.227607 4.589745 -1.9013406 128.0 +3.2502239 4.5621595 -1.8980684 128.0 +3.2787087 4.5428967 -1.8983957 128.0 +3.301501 4.5158291 -1.8954507 128.0 +3.3347726 4.5030789 -1.8987229 128.0 +3.368012 4.4900904 -1.9019951 128.0 +3.3972147 4.4715972 -1.9029768 128.0 +3.4291992 4.4566584 -1.9055945 128.0 +3.4570611 4.4362788 -1.9059217 128.0 +3.4865587 4.4179497 -1.9072306 128.0 +3.5165515 4.4001637 -1.9088666 128.0 +3.542295 4.3770347 -1.9082122 128.0 +3.5618961 4.3464479 -1.9042857 128.0 +3.5945342 4.3317819 -1.9075578 128.0 +3.6167896 4.3045812 -1.9052672 128.0 +3.6406841 4.2794294 -1.9039584 128.0 +3.6705747 4.2613049 -1.9059217 128.0 +3.69541 4.2372785 -1.9052672 128.0 +3.7238424 4.2173567 -1.9065762 128.0 +3.7395706 4.1831589 -1.9013406 128.0 +3.7677045 4.1629362 -1.9026495 128.0 +0 0 -0 128.0 +3.8024368 4.099071 -1.8944691 128.0 +3.8326929 4.0811725 -1.8970869 128.0 +3.8544061 4.0541549 -1.8954507 128.0 +3.877243 4.0283866 -1.8944691 128.0 +3.9045262 4.0072269 -1.8957779 128.0 +3.9363415 3.9905922 -1.8993773 128.0 +3.9627569 3.9683697 -1.900359 128.0 +4.0031581 3.9599259 -1.9082122 128.0 +4.0233245 3.9313266 -1.9062489 128.0 +4.0392103 3.8986928 -1.9023223 128.0 +4.0685287 3.8790505 -1.90494 128.0 +4.0674844 3.8306959 -1.8931602 128.0 +4.0839925 3.7992313 -1.889888 128.0 +4.139936 3.8041444 -1.9052672 128.0 +4.1485033 3.7653368 -1.8983957 128.0 +4.1623802 3.7316129 -1.8941419 128.0 +4.1816607 3.7028713 -1.8925058 128.0 +4.2277789 3.6976678 -1.903304 128.0 +4.261116 3.6809206 -1.9082122 128.0 +4.2879357 3.6583846 -1.9101756 128.0 +4.3117476 3.6332231 -1.91083 128.0 +4.3310537 3.6042809 -1.9095211 128.0 +4.3479767 3.5734394 -1.9072306 128.0 +4.3720226 3.5484796 -1.9082122 128.0 +4.3922381 3.5204048 -1.9075578 128.0 +4.4137564 3.4933884 -1.9075578 128.0 +4.4321299 3.4639132 -1.9062489 128.0 +4.4533005 3.4366531 -1.9062489 128.0 +4.4690413 3.4052556 -1.9039584 128.0 +4.4921174 3.3794737 -1.90494 128.0 +4.5120101 3.3512838 -1.9046128 128.0 +4.527153 3.3196251 -1.9023223 128.0 +4.5566235 3.2984316 -1.9062489 128.0 +4.5813904 3.273706 -1.9082122 128.0 +4.5975294 3.242811 -1.9065762 128.0 +4.6235456 3.218858 -1.9091939 128.0 +4.6471038 3.1931028 -1.91083 128.0 +4.6697373 3.1666493 -1.9121388 128.0 +4.6843672 3.1347845 -1.9101756 128.0 +4.6972046 3.1018183 -1.9075578 128.0 +4.7082305 3.0677814 -1.9042857 128.0 +4.7341199 3.043432 -1.9072306 128.0 +4.7503109 3.012809 -1.9062489 128.0 +4.7639003 2.9805987 -1.9042857 128.0 +4.773253 2.9458544 -1.9006863 128.0 +4.8041544 2.9243696 -1.9059217 128.0 +4.8228178 2.895323 -1.9062489 128.0 +4.8372397 2.8637514 -1.90494 128.0 +4.8628821 2.838779 -1.9082122 128.0 +4.8818469 2.80983 -1.9088666 128.0 +4.8998179 2.7802887 -1.9091939 128.0 +4.9143109 2.7487884 -1.9082122 128.0 +4.9360499 2.7213192 -1.9101756 128.0 +4.9534855 2.691432 -1.9105028 128.0 +4.9682403 2.6600955 -1.9098483 128.0 +4.9869761 2.6308832 -1.91083 128.0 +5.0063791 2.6019766 -1.9121388 128.0 +5.0239329 2.5720699 -1.9127933 128.0 +5.0429955 2.5428963 -1.9141022 128.0 +5.0635824 2.5144258 -1.9160655 128.0 +5.0763683 2.4820642 -1.9150838 128.0 +5.0966115 2.4533277 -1.9170471 128.0 +5.1081529 2.4203913 -1.9157382 128.0 +5.119482 2.3874061 -1.9144294 128.0 +5.1254454 2.3520091 -1.9111573 128.0 +5.1363349 2.3189611 -1.9098483 128.0 +5.1556492 2.2897017 -1.9118116 128.0 +5.1609416 2.2542436 -1.9085394 128.0 +5.1824908 2.2258887 -1.9114844 128.0 +5.2047572 2.1977217 -1.9147565 128.0 +5.2198896 2.1664686 -1.915411 128.0 +5.2269597 2.1319025 -1.9131205 128.0 +5.2531004 2.1050601 -1.9180288 128.0 +5.2667975 2.0731339 -1.9183559 128.0 +5.2776556 2.0400975 -1.9177016 128.0 +5.2883072 2.0070057 -1.9170471 128.0 +5.3076067 1.9771569 -1.9196649 128.0 +5.3311772 1.948768 -1.9239187 128.0 +5.337697 1.9141071 -1.9219553 128.0 +5.3546901 1.8831995 -1.9239187 128.0 +5.3715048 1.8521553 -1.925882 128.0 +5.3773966 1.8173474 -1.9239187 128.0 +5.3911376 1.7852087 -1.9249003 128.0 +5.3956976 1.7500563 -1.9226098 128.0 +5.4099369 1.7180592 -1.9239187 128.0 +5.4122553 1.6823094 -1.9209738 128.0 +5.4279003 1.6507174 -1.922937 128.0 +5.4343038 1.6163045 -1.9216281 128.0 +5.4504709 1.5847753 -1.9239187 128.0 +5.4682736 1.5536246 -1.9268637 128.0 +5.4695082 1.5177703 -1.9239187 128.0 +5.4714212 1.4822062 -1.921301 128.0 +5.4749308 1.4471586 -1.9193376 128.0 +5.4690661 1.4097669 -1.9141022 128.0 +5.4757805 1.3757226 -1.9134477 128.0 +5.4804468 1.3412002 -1.9121388 128.0 +5.4968467 1.3095168 -1.9150838 128.0 +5.5103016 1.2770431 -1.9170471 128.0 +5.5171118 1.243001 -1.9167199 128.0 +5.543098 1.2131621 -1.9232643 128.0 +5.5467396 1.1783427 -1.9219553 128.0 +5.5594187 1.1454294 -1.9239187 128.0 +5.5663424 1.1112958 -1.9239187 128.0 +5.5739841 1.0772996 -1.924246 128.0 +5.5823474 1.0434248 -1.9249003 128.0 +5.5988741 1.0109975 -1.9284997 128.0 +5.6059027 0.97678649 -1.9288269 128.0 +5.607131 0.94158942 -1.9271909 128.0 +5.612803 0.90716702 -1.9271909 128.0 +5.620131 0.87300014 -1.9278454 128.0 +5.6253819 0.83849919 -1.9278454 128.0 +5.636034 0.80476701 -1.9298086 128.0 +5.6446109 0.77068043 -1.9311175 128.0 +5.6454854 0.73554361 -1.9298086 128.0 +5.6527057 0.70123816 -1.9307903 128.0 +5.6522098 0.66598868 -1.9291542 128.0 +5.6496158 0.63056248 -1.9268637 128.0 +5.6486793 0.59539092 -1.9252275 128.0 +5.6550474 0.56099933 -1.9262092 128.0 +5.660265 0.5264647 -1.9268637 128.0 +5.6624475 0.4916425 -1.9265364 128.0 +5.6681833 0.45711643 -1.9275181 128.0 +5.6850166 0.42337832 -1.9324263 128.0 +5.6856217 0.38835934 -1.9317719 128.0 +5.6916704 0.35369939 -1.9330808 128.0 +5.6946769 0.31882191 -1.933408 128.0 +5.6918068 0.28363982 -1.9317719 128.0 +5.6915522 0.24862812 -1.9311175 128.0 +5.694859 0.21377125 -1.9317719 128.0 +5.6932302 0.17873584 -1.9307903 128.0 +5.6942196 0.14379947 -1.9307903 128.0 +5.6940498 0.10883982 -1.9304631 128.0 +5.69839 0.073948026 -1.9317719 128.0 +5.6959019 0.03896315 -1.9307903 128.0 +5.6988688 0.0040144427 -1.9317719 128.0 +5.6978412 -0.030947909 -1.9314448 128.0 +5.6984887 -0.065919742 -1.9317719 128.0 +5.6941977 -0.10081609 -1.9304631 128.0 +5.6981955 -0.13586672 -1.9320991 128.0 +5.700088 -0.17091316 -1.9330808 128.0 +5.7017651 -0.20598795 -1.9340625 128.0 +5.7051144 -0.24116994 -1.9356985 128.0 +5.7054148 -0.27626312 -1.936353 128.0 +5.6979508 -0.31095558 -1.9343897 128.0 +5.7006516 -0.34619907 -1.9360257 128.0 +5.6993628 -0.38123435 -1.936353 128.0 +5.6922045 -0.41585258 -1.9347169 128.0 +5.6820097 -0.45017287 -1.9320991 128.0 +5.6810236 -0.48518977 -1.9327536 128.0 +5.6779394 -0.52003872 -1.9327536 128.0 +5.6746416 -0.55486816 -1.9327536 128.0 +5.6711302 -0.58967662 -1.9327536 128.0 +5.6786761 -0.62570715 -1.9366802 128.0 +5.6813002 -0.66130519 -1.9389707 128.0 +5.6677566 -0.69500053 -1.9356985 128.0 +5.6558881 -0.72879648 -1.9330808 128.0 +5.6531825 -0.76374006 -1.9337353 128.0 +5.6483898 -0.79841298 -1.9337353 128.0 +5.6377759 -0.83222669 -1.9317719 128.0 +5.635365 -0.86723554 -1.9327536 128.0 +5.6299376 -0.90179712 -1.9327536 128.0 +5.6326871 -0.9377231 -1.9356985 128.0 +5.6240339 -0.97178376 -1.9347169 128.0 +5.6347075 -1.0092762 -1.9406068 128.0 +5.6256213 -1.0433136 -1.9396251 128.0 +5.6218977 -1.0783467 -1.9406068 128.0 +5.6114678 -1.1120862 -1.9392979 128.0 +5.5980582 -1.1451695 -1.9370074 128.0 +5.5900021 -1.1793017 -1.9366802 128.0 +5.5780439 -1.2125746 -1.9350441 128.0 +5.5658884 -1.2457452 -1.933408 128.0 +5.5562983 -1.2794489 -1.9327536 128.0 +5.5566182 -1.3154784 -1.9356985 128.0 +5.5456877 -1.3488779 -1.9347169 128.0 +5.5455575 -1.3849425 -1.9376619 128.0 +5.5314631 -1.4175348 -1.9356985 128.0 +5.5317998 -1.4538523 -1.9389707 128.0 +5.5273371 -1.4889973 -1.9406068 128.0 +5.5126314 -1.5213749 -1.9386435 128.0 +5.4759145 -1.5474565 -1.9288269 128.0 +5.4654083 -1.5807642 -1.9284997 128.0 +5.5072517 -1.6295624 -1.9471512 128.0 +5.4881053 -1.660585 -1.943879 128.0 +5.4696884 -1.6917137 -1.9409341 128.0 +5.4583044 -1.7249583 -1.9406068 128.0 +5.4512143 -1.7595792 -1.9419156 128.0 +5.4367256 -1.7918102 -1.9406068 128.0 +5.4157777 -1.8218194 -1.9370074 128.0 +5.4009223 -1.8537879 -1.9356985 128.0 +5.3769608 -1.8825184 -1.9311175 128.0 +5.3484011 -1.9094354 -1.9249003 128.0 +5.3250413 -1.9380131 -1.9206465 128.0 +5.2572379 -1.9499364 -1.9000318 128.0 +5.1956778 -1.963441 -1.8817075 128.0 +5.1262155 -1.9732076 -1.8604385 128.0 +5.0841017 -1.9928927 -1.849313 128.0 +4.9770007 -1.9862037 -1.8139734 128.0 +4.8964386 -1.9889511 -1.7884505 128.0 +4.8413558 -2.00126 -1.7724168 128.0 +4.7967591 -2.0173666 -1.7603097 128.0 +4.7382493 -2.0270522 -1.7429672 128.0 +4.6979976 -2.0440173 -1.7324963 128.0 +4.6421638 -2.0536802 -1.7161354 128.0 +4.6053472 -2.0712671 -1.7069732 128.0 +4.5788026 -2.0931969 -1.7017378 128.0 +4.5607314 -2.1188624 -1.6997744 128.0 +4.5416632 -2.1439815 -1.6974839 128.0 +4.4423771 -2.130517 -1.6644349 128.0 +4.361268 -2.1246114 -1.6382575 128.0 +4.2922573 -2.1236613 -1.6166611 128.0 +4.2512856 -2.1359518 -1.6058629 128.0 +4.1421518 -2.1130214 -1.56856 128.0 +4.1333036 -2.1405714 -1.5701962 128.0 +4.04566 -2.1267409 -1.5410738 128.0 +3.9916885 -2.1297183 -1.52504 128.0 +4.0391974 -2.1870306 -1.5489269 128.0 +4.0886354 -2.2463703 -1.5737956 128.0 +4.0764256 -2.272336 -1.57445 128.0 +3.9711173 -2.2456517 -1.5381287 128.0 +3.9203837 -2.2488084 -1.523404 128.0 +3.8893619 -2.2628374 -1.5165324 128.0 +3.8721492 -2.2847381 -1.5152235 128.0 +3.6310465 -2.1725438 -1.4236026 128.0 +3.40763 -2.0672889 -1.3385259 128.0 +3.4431653 -2.1178772 -1.3581589 128.0 +3.3355072 -2.0799365 -1.3195472 128.0 +3.3099046 -2.0922813 -1.3143117 128.0 +3.1967735 -2.0482867 -1.2730823 128.0 +3.1556211 -2.0493264 -1.2613025 128.0 +3.1240473 -2.0561762 -1.2534492 128.0 +3.0807195 -2.0548472 -1.2406877 128.0 +3.0390923 -2.0541236 -1.2285807 128.0 +3.0038269 -2.0572407 -1.2190913 128.0 +2.9810572 -2.0686266 -1.2148376 128.0 +2.9304385 -2.0602367 -1.1988038 128.0 +2.9061997 -2.069952 -1.1938956 128.0 +2.8758233 -2.0750222 -1.1863695 128.0 +2.8424437 -2.0775669 -1.1775347 128.0 +2.7924383 -2.067405 -1.161501 128.0 +2.737375 -2.0527384 -1.1431768 128.0 +2.7074251 -2.0563445 -1.1356508 128.0 +2.6707952 -2.0544734 -1.1251798 128.0 +2.655158 -2.0684984 -1.123871 128.0 +2.6379662 -2.081238 -1.1219076 128.0 +2.6303124 -2.1015158 -1.1241982 128.0 +2.6232438 -2.1223722 -1.1268159 128.0 +2.6211331 -2.1474147 -1.1317241 128.0 +2.615905 -2.1700966 -1.1353235 128.0 +2.6170075 -2.1982672 -1.1418679 128.0 +2.5984325 -2.2099962 -1.1395774 128.0 +2.56478 -2.2086265 -1.1304153 128.0 +2.5262587 -2.2025788 -1.1189626 128.0 +2.474453 -2.1842561 -1.1012928 128.0 +2.4469171 -2.1867993 -1.0947485 128.0 +2.3802166 -2.1535702 -1.06988 128.0 +2.3697441 -2.1706884 -1.0711888 128.0 +2.3376789 -2.1678329 -1.062354 128.0 +2.3236446 -2.1814888 -1.0620267 128.0 +2.3102155 -2.1957052 -1.0620267 128.0 +2.2953379 -2.2085283 -1.0613723 128.0 +2.2810669 -2.221911 -1.0610451 128.0 +2.2667179 -2.2352018 -1.0607178 128.0 +2.2442696 -2.240386 -1.0564641 128.0 +2.2218435 -2.2453794 -1.0522102 128.0 +2.2020817 -2.2528861 -1.0492653 128.0 +2.1803436 -2.2581949 -1.0453386 128.0 +2.1912196 -2.2975247 -1.0577729 128.0 +2.1718993 -2.3054223 -1.0551552 128.0 +2.1750865 -2.3373892 -1.0639901 128.0 +2.1619821 -2.3520832 -1.0646445 128.0 +2.1538587 -2.372303 -1.0679166 128.0 +2.1449378 -2.3918078 -1.0708616 128.0 +2.1183217 -2.3914797 -1.0646445 128.0 +2.0824616 -2.3802445 -1.0535191 128.0 +2.075846 -2.4022753 -1.0577729 128.0 +2.0733304 -2.429347 -1.0643172 128.0 +2.053515 -2.4362411 -1.0616995 128.0 +2.0445709 -2.4560599 -1.0649717 128.0 +2.0282626 -2.4670987 -1.0643172 128.0 +2.0142775 -2.4809651 -1.0649717 128.0 +1.9931083 -2.485903 -1.0616995 128.0 +1.9766449 -2.4966037 -1.0610451 128.0 +1.9577984 -2.5042171 -1.0590818 128.0 +1.9447047 -2.5191758 -1.0603907 128.0 +1.9280655 -2.5295572 -1.0597363 128.0 +1.913644 -2.5428505 -1.0603907 128.0 +1.8974421 -2.5537858 -1.0600635 128.0 +1.8772676 -2.559283 -1.0574456 128.0 +1.8582052 -2.5661602 -1.0554824 128.0 +1.8391292 -2.5729001 -1.0535191 128.0 +1.8227631 -2.583364 -1.0531919 128.0 +1.8095763 -2.5983777 -1.0548279 128.0 +1.7941339 -2.6102111 -1.0551552 128.0 +1.7807351 -2.6250815 -1.0567913 128.0 +1.7630183 -2.6336021 -1.0558096 128.0 +1.7504694 -2.6498907 -1.0581001 128.0 +1.7383027 -2.6669161 -1.0607178 128.0 +1.7418286 -2.7085357 -1.0734794 128.0 +1.7155635 -2.7040088 -1.0672623 128.0 +1.7024471 -2.7200925 -1.0695528 128.0 +1.6807636 -2.722445 -1.0662806 128.0 +1.6797448 -2.7585392 -1.0767516 128.0 +1.6598699 -2.7639325 -1.0747882 128.0 +1.6284426 -2.7496681 -1.0649717 128.0 +1.5986823 -2.7375717 -1.0561368 128.0 +1.5908077 -2.762892 -1.062354 128.0 +1.5621706 -2.7520523 -1.0541735 128.0 +1.5540162 -2.777257 -1.0603907 128.0 +1.5351218 -2.7834294 -1.0590818 128.0 +1.521171 -2.798609 -1.0613723 128.0 +1.5155628 -2.8295519 -1.06988 128.0 +1.5012577 -2.8446491 -1.0721705 128.0 +1.4789833 -2.844583 -1.0685711 128.0 +1.4593492 -2.8493981 -1.0669351 128.0 +1.4380106 -2.8507044 -1.0639901 128.0 +1.4171312 -2.8527029 -1.0613723 128.0 +1.4008453 -2.8638914 -1.062354 128.0 +1.3840657 -2.874136 -1.0630084 128.0 +1.3712577 -2.8928225 -1.0669351 128.0 +1.3578731 -2.9106033 -1.0705345 128.0 +1.3533822 -2.9480836 -1.0816598 128.0 +1.3383769 -2.963223 -1.0842775 128.0 +1.3182528 -2.9670608 -1.0826415 128.0 +1.2985102 -2.9716294 -1.0813326 128.0 +1.2795068 -2.9778044 -1.0806782 128.0 +1.2601089 -2.9829874 -1.0796965 128.0 +1.2464887 -3.0020101 -1.0839504 128.0 +1.224835 -3.0017264 -1.0810053 128.0 +1.20007 -2.9933956 -1.0751154 128.0 +1.1920581 -3.0270834 -1.084932 128.0 +1.1731213 -3.0334592 -1.0846047 128.0 +1.1518054 -3.0335319 -1.081987 128.0 +1.1308626 -3.0343432 -1.0796965 128.0 +1.1118987 -3.0403373 -1.0793693 128.0 +1.0980043 -3.0604458 -1.0842775 128.0 +1.0770119 -3.060885 -1.081987 128.0 +1.0569789 -3.0638623 -1.0806782 128.0 +1.0408808 -3.0783474 -1.0836232 128.0 +1.026129 -3.0972357 -1.0882041 128.0 +0.99603391 -3.069315 -1.0757699 128.0 +0.98232722 -3.0915811 -1.0816598 128.0 +0.96165735 -3.0921359 -1.0796965 128.0 +0.94926041 -3.1196771 -1.0875497 128.0 +0.92606252 -3.1118562 -1.0826415 128.0 +0.91169661 -3.1338134 -1.0885314 128.0 +0.89477336 -3.1475296 -1.0914763 128.0 +0.87897849 -3.165709 -1.0960574 128.0 +0.8610189 -3.1765153 -1.0980207 128.0 +0.83475572 -3.1561573 -1.0888586 128.0 +0.80311865 -3.1136355 -1.0718433 128.0 +0.77709675 -3.0910091 -1.0620267 128.0 +0.73993671 -3.0213685 -1.0355221 128.0 +0.71963364 -3.0184977 -1.0329044 128.0 +0.70834619 -3.0541568 -1.0440297 128.0 +0.69478047 -3.0814927 -1.0522102 128.0 +0.68050206 -3.10693 -1.0597363 128.0 +0.66515279 -3.1286099 -1.0659534 128.0 +0.65032488 -3.1539199 -1.0734794 128.0 +0.63558096 -3.1810184 -1.0816598 128.0 +0.62411129 -3.2266099 -1.0963846 128.0 +0.60777003 -3.2489567 -1.102929 128.0 +0.58748794 -3.2507648 -1.1022745 128.0 +0.56801659 -3.2571013 -1.1032562 128.0 +0.55364758 -3.2940748 -1.115036 128.0 +0.53131694 -3.2843497 -1.110455 128.0 +0.51187885 -3.2922168 -1.1120911 128.0 +0.49319887 -3.3055768 -1.1156905 128.0 +0.47183987 -3.3010569 -1.1130728 128.0 +0.45068261 -3.2973359 -1.1107823 128.0 +0.42507869 -3.2588089 -1.0963846 128.0 +0.3976419 -3.2013376 -1.0754427 128.0 +0.37876409 -3.2102864 -1.0777332 128.0 +0.36272091 -3.24542 -1.0891858 128.0 +0.34408575 -3.2598014 -1.0934397 128.0 +0.32891834 -3.3107495 -1.110455 128.0 +0.31008223 -3.3287008 -1.1160177 128.0 +0.28639001 -3.2928839 -1.102929 128.0 +0.26792255 -3.3162429 -1.110455 128.0 +0.24581973 -3.2942657 -1.1022745 128.0 +0.22573027 -3.2975974 -1.102929 128.0 +0.20514184 -3.2932618 -1.1009657 128.0 +0.18429933 -3.2831366 -1.0970391 128.0 +0.16424461 -3.2860932 -1.0976934 128.0 +0.14444786 -3.2955356 -1.1006385 128.0 +0.12337799 -3.2736969 -1.0927852 128.0 +0.10302351 -3.265892 -1.0898403 128.0 +0.082627468 -3.2522929 -1.084932 128.0 +0.062741689 -3.2565176 -1.0862409 128.0 +0.04269854 -3.2521169 -1.0846047 128.0 +0.022881111 -3.2731061 -1.0918036 128.0 +0.0027925363 -3.2637355 -1.0885314 128.0 +-0.017174857 -3.2532969 -1.084932 128.0 +-0.037392192 -3.2748625 -1.092458 128.0 +-0.057756376 -3.2896883 -1.0976934 128.0 +-0.078258462 -3.3024974 -1.1022745 128.0 +-0.099205025 -3.3246236 -1.1101278 128.0 +-0.11953405 -3.3220637 -1.1094733 128.0 +-0.14095822 -3.3458142 -1.117981 128.0 +-0.1620817 -3.357156 -1.1222348 128.0 +-0.18365976 -3.3740256 -1.1284519 128.0 +-0.20464629 -3.3775511 -1.1300881 128.0 +-0.22454435 -3.363975 -1.1258342 128.0 +-0.24414545 -3.3483975 -1.120926 128.0 +-0.26640716 -3.3685021 -1.1284519 128.0 +-0.2873933 -3.3705702 -1.1297609 128.0 +-0.30280033 -3.3113427 -1.1098006 128.0 +-0.32449487 -3.323529 -1.1147088 128.0 +-0.34693784 -3.3412125 -1.1215804 128.0 +-0.37064677 -3.3681374 -1.1317241 128.0 +-0.3942613 -3.3911417 -1.1405591 128.0 +-0.41586792 -3.3952241 -1.1428496 128.0 +-0.43911189 -3.4113519 -1.1493939 128.0 +-0.45940179 -3.4039111 -1.1477579 128.0 +-0.68517214 -4.848434 -1.6539639 128.0 +-0.71656686 -4.8553562 -1.6578906 128.0 +-0.74807233 -4.8620749 -1.6618172 128.0 +-0.77579635 -4.8443313 -1.6572361 128.0 +-0.80954552 -4.8637142 -1.6657438 128.0 +-0.83744049 -4.8474817 -1.6618172 128.0 +-0.86616755 -4.8366714 -1.6598538 128.0 +-0.89893341 -4.8479891 -1.6657438 128.0 +-0.92884141 -4.8433099 -1.6660709 128.0 +-0.95725471 -4.8310313 -1.6637805 128.0 +-0.99086028 -4.8445072 -1.670652 128.0 +-1.0211527 -4.8411098 -1.6716337 128.0 +-1.0500343 -4.8310599 -1.6703248 128.0 +-1.0773851 -4.814383 -1.6667254 128.0 +-1.1060563 -4.8039985 -1.6654166 128.0 +-1.1394341 -4.8136721 -1.6713065 128.0 +-1.1624669 -4.779964 -1.6618172 128.0 +-1.1910869 -4.7699909 -1.6608355 128.0 +-1.2252626 -4.7818146 -1.6677071 128.0 +-1.2495322 -4.7550154 -1.6608355 128.0 +-1.2845885 -4.769156 -1.6686888 128.0 +-1.309299 -4.7447886 -1.6627988 128.0 +-1.1367767 -4.0237865 -1.40626 128.0 +-1.1619703 -4.0185509 -1.4069145 128.0 +-1.3961449 -4.7189789 -1.6624717 128.0 +-1.42836 -4.7211761 -1.6663982 128.0 +-1.4497581 -4.6879501 -1.6575633 128.0 +-1.4910322 -4.7186093 -1.6719609 128.0 +-1.5211189 -4.7129683 -1.6732697 128.0 +-1.5497124 -4.7026486 -1.6729425 128.0 +-1.5818543 -4.7029028 -1.6765419 128.0 +-1.6106811 -4.6931081 -1.6765419 128.0 +-1.6472578 -4.7054319 -1.6847224 128.0 +-1.6773704 -4.6987953 -1.6860313 128.0 +-1.7116671 -4.7035093 -1.691594 128.0 +-1.7381935 -4.6867166 -1.6893035 128.0 +-1.769926 -4.683918 -1.6922485 128.0 +-1.7959155 -4.6659155 -1.6896306 128.0 +-1.8269265 -4.6609659 -1.6919212 128.0 +-1.8600469 -4.6610765 -1.696175 128.0 +-1.2118543 -2.984565 -1.0738066 128.0 +-1.2286998 -2.9735804 -1.0724977 128.0 +-1.2472887 -2.966856 -1.072825 128.0 +-1.9783376 -4.6244493 -1.7001016 128.0 +-2.0025263 -4.6026931 -1.6965022 128.0 +-2.0311127 -4.5911832 -1.6968294 128.0 +-2.05847 -4.5769105 -1.696175 128.0 +-2.0900521 -4.571928 -1.69912 128.0 +-1.5647732 -3.3688018 -1.2446144 128.0 +-1.5870286 -3.362555 -1.2459232 128.0 +-1.6059958 -3.3493462 -1.2446144 128.0 +-1.620306 -3.3266878 -1.239706 128.0 +-1.6423647 -3.3200705 -1.241015 128.0 +-1.6635542 -3.311619 -1.2416694 128.0 +-1.6898571 -3.3131325 -1.2462504 128.0 +-1.7131977 -3.3085742 -1.248541 128.0 +-1.7427044 -3.3155625 -1.2554126 128.0 +-2.286813 -4.2859473 -1.640548 128.0 +-2.3027151 -4.2527251 -1.633022 128.0 +-2.3975046 -4.3635545 -1.6824319 128.0 +-2.4265351 -4.3528881 -1.684068 128.0 +-2.4550598 -4.341207 -1.6853769 128.0 +-2.4872954 -4.3358955 -1.6893035 128.0 +-2.5062466 -4.3074861 -1.684068 128.0 +-2.5292668 -4.2863307 -1.6817775 128.0 +-2.5521219 -4.2650557 -1.6794869 128.0 +-2.5821664 -4.2557778 -1.6821047 128.0 +-2.6126885 -4.2470965 -1.6850497 128.0 +-2.6381989 -4.2301836 -1.6847224 128.0 +-2.6585486 -4.205132 -1.681123 128.0 +-2.6837907 -4.1879444 -1.6807958 128.0 +-2.7073774 -4.1682291 -1.6794869 128.0 +-2.7313428 -4.1491709 -1.6785053 128.0 +-2.7572749 -4.1331196 -1.6788325 128.0 +-2.7778187 -4.1090789 -1.6758876 128.0 +-2.7976372 -4.0841627 -1.6726153 128.0 +-2.8258784 -4.0715766 -1.6745787 128.0 +-2.8540702 -4.0587978 -1.6765419 128.0 +-2.8772755 -4.0389009 -1.6755604 128.0 +-2.9003439 -4.0188718 -1.6745787 128.0 +-2.9110024 -3.9819322 -1.6663982 128.0 +-2.9353802 -3.9639957 -1.6663982 128.0 +-2.9488714 -3.9315495 -1.660181 128.0 +-2.9717958 -3.9118769 -1.6595266 128.0 +-2.2902231 -2.9770503 -1.259012 128.0 +-2.3107708 -2.9659226 -1.2603208 128.0 +-2.324827 -2.9464965 -1.2580303 128.0 +-3.0745742 -3.8473618 -1.6637805 128.0 +-3.0856364 -3.8130014 -1.6569089 128.0 +-3.1089745 -3.7939966 -1.6569089 128.0 +-3.1418526 -3.7864819 -1.6621444 128.0 +-3.1650269 -3.7671325 -1.6621444 128.0 +-3.189307 -3.7490807 -1.6627988 128.0 +-3.2196531 -3.7380309 -1.6667254 128.0 +-3.2288616 -3.7025402 -1.6595266 128.0 +-3.2446375 -3.6748683 -1.6559272 128.0 +-3.2652352 -3.6527774 -1.6549456 128.0 +-3.2799759 -3.6242678 -1.651019 128.0 +-3.3098145 -3.612433 -1.6549456 128.0 +-3.3332033 -3.5934415 -1.6556001 128.0 +-3.3519545 -3.5694783 -1.6539639 128.0 +-3.3672807 -3.541997 -1.6506917 128.0 +-3.3928833 -3.5253532 -1.652655 128.0 +-3.4052162 -3.4949951 -1.648074 128.0 +-3.416641 -3.4639463 -1.6431657 128.0 +-3.4358277 -3.4409115 -1.6421841 128.0 +-3.4730024 -3.4357107 -1.6500373 128.0 +-3.4818501 -3.402451 -1.6441474 128.0 +-3.4938211 -3.3724935 -1.6398935 128.0 +-3.517185 -3.3536 -1.6412024 128.0 +-3.5445764 -3.3384328 -1.6444746 128.0 +-3.5739899 -3.3249862 -1.6487285 128.0 +-3.5936284 -3.3023548 -1.6484013 128.0 +-3.6278205 -3.2929413 -1.6549456 128.0 +-3.6564019 -3.278187 -1.6588722 128.0 +-3.6601734 -3.2412851 -1.6513462 128.0 +-3.6814153 -3.2200096 -1.6520007 128.0 +-3.7025342 -3.1985953 -1.652655 128.0 +-3.7407844 -3.1917593 -1.6611627 128.0 +-3.7581301 -3.1669199 -1.660181 128.0 +-3.7702265 -3.1377578 -1.6569089 128.0 +-3.7908688 -3.1157649 -1.6575633 128.0 +-3.8209226 -3.1013761 -1.6624717 128.0 +-3.8428302 -3.0802362 -1.6637805 128.0 +-3.8631401 -3.0577717 -1.6644349 128.0 +-3.8855526 -3.0369189 -1.6660709 128.0 +-3.9123442 -3.0193691 -1.6696703 128.0 +-3.9300451 -2.994734 -1.6693431 128.0 +-3.9574094 -2.9773786 -1.6732697 128.0 +-3.9793973 -2.9558568 -1.6749059 128.0 +-3.995935 -2.9302669 -1.6742514 128.0 +-4.0176673 -2.9084628 -1.6758876 128.0 +-4.0400515 -2.8870513 -1.6778508 128.0 +-4.063096 -2.8660192 -1.6801413 128.0 +-4.0860343 -2.8448129 -1.6824319 128.0 +-4.1034131 -2.8196878 -1.6824319 128.0 +-4.127677 -2.7992284 -1.6853769 128.0 +-4.1565561 -2.7817295 -1.6902851 128.0 +-4.1822214 -2.761899 -1.6938845 128.0 +-4.2085915 -2.7423737 -1.6978111 128.0 +-4.2269287 -2.7175205 -1.6984656 128.0 +-4.2475142 -2.6940629 -1.7001016 128.0 +-4.2767835 -2.6759667 -1.7053372 128.0 +-4.3043818 -2.65662 -1.7099181 128.0 +-4.3319035 -2.6370351 -1.7144992 128.0 +-4.3512435 -2.6123502 -1.7158082 128.0 +-4.3728833 -2.5889709 -1.7180986 128.0 +-4.4099069 -2.5744727 -1.7266062 128.0 +-4.421525 -2.5450094 -1.7249702 128.0 +-4.4337702 -2.5159669 -1.7236613 128.0 +-4.4565473 -2.4928646 -1.7266062 128.0 +-4.5081744 -2.4855392 -1.7410039 128.0 +-4.4909549 -2.440243 -1.7282424 128.0 +-4.5616646 -2.4425139 -1.7501659 128.0 +-4.5857601 -2.4193263 -1.7537653 128.0 +-4.603034 -2.3924499 -1.754747 128.0 +-4.6235156 -2.3671744 -1.7570375 128.0 +-4.6328902 -2.3362088 -1.7550743 128.0 +-4.6564488 -2.3123589 -1.7586737 128.0 +-4.6739454 -2.2854035 -1.7599826 128.0 +-4.7108712 -2.2677431 -1.7688174 128.0 +-4.7272596 -2.2400084 -1.7697991 128.0 +-4.7426276 -2.2117586 -1.7704535 128.0 +-4.7595453 -2.1841927 -1.7717624 128.0 +-4.7969747 -2.1658299 -1.7809244 128.0 +-4.7289867 -2.1003189 -1.7501659 128.0 +-4.7391872 -2.0701287 -1.7491844 128.0 +-4.7613516 -2.0451109 -1.7527838 128.0 +-4.8025403 -2.0279815 -1.7635819 128.0 +-4.8463154 -2.0115094 -1.7753618 128.0 +-4.8961935 -1.9970729 -1.7894322 128.0 +-4.9583564 -1.9870179 -1.8080835 128.0 +-5.022337 -1.9769663 -1.8273894 128.0 +-5.0872602 -1.966544 -1.8470225 128.0 +-5.1822834 -1.9667925 -1.8777809 128.0 +-5.267756 -1.9623212 -1.90494 128.0 +-5.3267393 -1.9471468 -1.9222826 128.0 +-5.3884015 -1.932278 -1.9406068 128.0 +-5.4313583 -1.9101455 -1.9520594 128.0 +-5.4635243 -1.8838639 -1.9595854 128.0 +-5.4875145 -1.854538 -1.9641665 128.0 +-5.5230126 -1.8288476 -1.9730014 128.0 +-5.5359278 -1.7955073 -1.9736558 128.0 +-5.5423374 -1.7600765 -1.9720197 128.0 +-5.5611544 -1.728559 -1.9749647 128.0 +-5.5589981 -1.6905572 -1.9703836 128.0 +-5.5765128 -1.6585697 -1.9730014 128.0 +-5.5865846 -1.6243216 -1.9730014 128.0 +-5.590992 -1.588464 -1.9710381 128.0 +-5.6097393 -1.5566533 -1.9743103 128.0 +-5.6045914 -1.518253 -1.9690747 128.0 +-5.6092334 -1.4826287 -1.9674387 128.0 +-5.626461 -1.4503044 -1.9703836 128.0 +-5.6370869 -1.4162139 -1.9710381 128.0 +-5.6429167 -1.3809254 -1.9700564 128.0 +-5.6457682 -1.3449624 -1.9680932 128.0 +-5.6585174 -1.311361 -1.9697292 128.0 +-5.6673789 -1.2768238 -1.9700564 128.0 +-5.6658754 -1.2400069 -1.9667842 128.0 +-5.6761503 -1.205807 -1.9677659 128.0 +-5.6936231 -1.1730516 -1.9713653 128.0 +-5.6997871 -1.1379093 -1.9710381 128.0 +-5.7029505 -1.1021981 -1.9697292 128.0 +-5.7133217 -1.0678784 -1.9710381 128.0 +-5.7113972 -1.0312924 -1.9680932 128.0 +-5.7120318 -0.99525648 -1.9661298 128.0 +-5.7189631 -0.96034569 -1.966457 128.0 +-5.7294121 -0.92598963 -1.9680932 128.0 +-5.7237806 -0.88907892 -1.9641665 128.0 +-5.7309976 -0.85421997 -1.964821 128.0 +-5.7389379 -0.81943929 -1.9658026 128.0 +-5.7382398 -0.78344458 -1.9638393 128.0 +-5.7279463 -0.74627036 -1.9586037 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-5.4623103 0.97650236 -1.9482287 128.0 +-5.4543648 1.0096576 -1.9475535 128.0 +-5.4397464 1.0415134 -1.9445152 128.0 +-5.4360232 1.0754193 -1.945528 128.0 +-5.4173331 1.1063063 -1.9411393 128.0 +-5.4058371 1.138556 -1.9394515 128.0 +-5.4015093 1.172303 -1.9404641 128.0 +-5.3932958 1.2052187 -1.9401267 128.0 +-5.3876338 1.2387103 -1.9408017 128.0 +-5.3808479 1.2719613 -1.9411393 128.0 +-5.3793449 1.3065083 -1.9435025 128.0 +-5.3785338 1.3413124 -1.9462032 128.0 +-5.3665547 1.373356 -1.9448528 128.0 +-5.3653107 1.4081699 -1.9475535 128.0 +-5.3592963 1.4417976 -1.9485663 128.0 +-5.3476262 1.4739044 -1.9475535 128.0 +-5.3384819 1.5066891 -1.9475535 128.0 +-5.3273282 1.5388947 -1.9468783 128.0 +-5.3087583 1.5688865 -1.9435025 128.0 +-5.2936254 1.5997975 -1.9414769 128.0 +-5.2801118 1.6311374 -1.9401267 128.0 +-5.2628226 1.6612386 -1.9374259 128.0 +-5.2426758 1.6903229 -1.9337125 128.0 +-0 0 -0 128.0 +-5.2277842 1.7566295 -1.9360756 128.0 +-5.2177978 1.7889787 -1.9364132 128.0 +-5.1853971 1.8135046 -1.928311 128.0 +-5.2220497 1.8623582 -1.9465408 128.0 +-5.1972542 1.8895416 -1.9414769 128.0 +-5.1793838 1.919107 -1.9391139 128.0 +-5.1631074 1.9491889 -1.9374259 128.0 +-5.1501718 1.9804947 -1.9370884 128.0 +-5.1545763 2.0185785 -1.9435025 128.0 +-5.1324754 2.0463345 -1.9397891 128.0 +-5.106739 2.0724797 -1.9347252 128.0 +-5.0878363 2.1012602 -1.9323621 128.0 +-5.0783186 2.1338973 -1.9337125 128.0 +-5.0564742 2.1613183 -1.9303366 128.0 +-5.042254 2.1919284 -1.929999 128.0 +-5.0304317 2.2235868 -1.9306742 128.0 +-5.023562 2.2574971 -1.9333749 128.0 +-5.0070472 2.2871056 -1.9323621 128.0 +-4.994627 2.3185778 -1.9330373 128.0 +-4.9769011 2.3475745 -1.9316869 128.0 +-4.9649496 2.3792882 -1.9326997 128.0 +-4.9443326 2.4068244 -1.9303366 128.0 +-4.930315 2.4375339 -1.9306742 128.0 +-4.9169483 2.4685845 -1.9313493 128.0 +-4.9067407 2.5012724 -1.9333749 128.0 +-4.8913012 2.5313325 -1.9333749 128.0 +-4.8673434 2.5569203 -1.929999 128.0 +-4.83495 2.5778818 -1.9232472 128.0 +-4.8364277 2.6169055 -1.9303366 128.0 +-4.8178039 2.6451731 -1.9293238 128.0 +-4.8014827 2.6746848 -1.9293238 128.0 +-4.7849808 2.7040958 -1.9293238 128.0 +-4.7731991 2.7362134 -1.9313493 128.0 +-4.7612028 2.7682881 -1.9333749 128.0 +-4.7449379 2.7979283 -1.9337125 128.0 +-4.7317204 2.8294051 -1.9354004 128.0 +-4.7166853 2.859849 -1.9364132 128.0 +-4.7014546 2.8902149 -1.9374259 128.0 +-4.6788387 2.9160213 -1.9354004 128.0 +-4.6568789 2.9421618 -1.9337125 128.0 +-4.6379461 2.9701729 -1.9333749 128.0 +-4.6148963 2.9955001 -1.9313493 128.0 +-4.595643 3.023243 -1.9310117 128.0 +-4.5707407 3.0472078 -1.928311 128.0 +-4.547277 3.0720346 -1.9262855 128.0 +-4.5267882 3.098815 -1.9256103 128.0 +-4.5138769 3.1308239 -1.928311 128.0 +-4.4868798 3.1530502 -1.9249351 128.0 +-4.4705157 3.1827052 -1.9262855 128.0 +-4.4516664 3.2106264 -1.9266231 128.0 +-4.4372034 3.2417674 -1.9289862 128.0 +-4.4179854 3.2694926 -1.9293238 128.0 +-4.4031138 3.3004909 -1.9316869 128.0 +-4.3872781 3.3308606 -1.9337125 128.0 +-4.3660111 3.3571439 -1.9333749 128.0 +-4.3364177 3.3769307 -1.9293238 128.0 +-4.3133979 3.4017262 -1.928311 128.0 +-4.2850885 3.4222553 -1.9249351 128.0 +-4.2186289 3.4117882 -1.9040047 128.0 +-4.2252903 3.4602699 -1.916833 128.0 +-4.2047038 3.4867315 -1.9171706 128.0 +-4.1882768 3.5167022 -1.9195337 128.0 +-4.1694889 3.5447733 -1.9208841 128.0 +-4.1433792 3.5666058 -1.9188585 128.0 +-4.134191 3.6030931 -1.9249351 128.0 +-4.1176519 3.6333742 -1.9276358 128.0 +-4.0903659 3.6541817 -1.9252727 128.0 +-4.0727544 3.6836305 -1.9276358 128.0 +-4.0493813 3.7079155 -1.9272983 128.0 +-4.0224118 3.728853 -1.9252727 128.0 +-3.9953375 3.7495992 -1.9232472 128.0 +-3.9715729 3.7733953 -1.9229096 128.0 +-3.9463096 3.7957358 -1.9218968 128.0 +-3.9215961 3.8185654 -1.9212216 128.0 +-3.8994329 3.8438773 -1.9218968 128.0 +-3.8831036 3.8750448 -1.9256103 128.0 +-3.859916 3.8994672 -1.9259479 128.0 +-3.8207796 3.9075992 -1.9181833 128.0 +-3.7947693 3.9289384 -1.9171706 128.0 +-3.7699404 3.9514678 -1.916833 128.0 +-3.7494974 3.9786353 -1.9188585 128.0 +-3.7243731 4.0008779 -1.9185209 128.0 +-3.7010283 4.0250406 -1.9191961 128.0 +-3.6813247 4.0532479 -1.9218968 128.0 +-3.6626713 4.0827661 -1.9252727 128.0 +-3.6338053 4.1009359 -1.9232472 128.0 +-3.6110539 4.1259885 -1.9245975 128.0 +-3.5869005 4.1494923 -1.9252727 128.0 +-3.5625947 4.1728544 -1.9259479 128.0 +-3.5332825 4.1903181 -1.9239224 128.0 +-3.5062997 4.2104726 -1.9232472 128.0 +-3.4642539 4.2122793 -1.9141324 128.0 +-3.448432 4.2458768 -1.9198713 128.0 +-3.4211369 4.2654877 -1.9191961 128.0 +-3.3761966 4.2627878 -1.9083933 128.0 +-3.3638957 4.3012176 -1.9164954 128.0 +-3.3368652 4.321032 -1.9161578 128.0 +-3.3120012 4.3436708 -1.9171706 128.0 +-3.2858529 4.3646631 -1.9175082 128.0 +-3.2533944 4.3771882 -1.9141324 128.0 +-3.2270319 4.3978271 -1.91447 128.0 +-3.2044048 4.4236431 -1.9171706 128.0 +-3.1772015 4.443222 -1.9171706 128.0 +-3.1498785 4.4626331 -1.9171706 128.0 +-3.1111364 4.4656582 -1.9100813 128.0 +-3.0932779 4.4986243 -1.9161578 128.0 +-3.0656166 4.5175195 -1.9161578 128.0 +-3.0388875 4.5378089 -1.916833 128.0 +-3.009949 4.5547991 -1.9161578 128.0 +-2.9819446 4.5731821 -1.9161578 128.0 +-2.9477158 4.5818939 -1.9121068 128.0 +-2.9190419 4.5991001 -1.9117692 128.0 +-2.8882694 4.6129355 -1.9100813 128.0 +-2.8579319 4.6273675 -1.9087309 128.0 +-2.8294849 4.6448159 -1.9087309 128.0 +-2.8014166 4.6628971 -1.9090685 128.0 +-2.7741923 4.6824279 -1.9100813 128.0 +-2.7477837 4.7034254 -1.9117692 128.0 +-2.7249808 4.7308002 -1.9161578 128.0 +-2.6945074 4.7449756 -1.915145 128.0 +-2.6708601 4.7712755 -1.9191961 128.0 +-2.6374407 4.7801566 -1.9161578 128.0 +-2.6031134 4.7871537 -1.9124444 128.0 +-2.5754697 4.8063545 -1.9137948 128.0 +-2.5454903 4.8212342 -1.9134572 128.0 +-2.5158598 4.8367624 -1.9134572 128.0 +-2.4869933 4.8537836 -1.9141324 128.0 +-2.4605575 4.8756747 -1.916833 128.0 +-2.4268236 4.8830948 -1.9137948 128.0 +-2.3972297 4.8987389 -1.9141324 128.0 +-2.3646748 4.908268 -1.9121068 128.0 +-2.3341103 4.9218345 -1.9117692 128.0 +-2.3018758 4.9317989 -1.9100813 128.0 +-2.2731431 4.9492517 -1.9114317 128.0 +-2.2411816 4.9596753 -1.9100813 128.0 +-2.2076483 4.9664526 -1.9073806 128.0 +-2.1778872 4.9816298 -1.9080558 128.0 +-2.1495106 5.0000877 -1.9100813 128.0 +-2.1176906 5.0105815 -1.9090685 128.0 +-2.0869064 5.0234814 -1.9090685 128.0 +-2.0563993 5.0370631 -1.9094061 128.0 +-2.0254538 5.0495863 -1.9094061 128.0 +-1.9906356 5.0522861 -1.9056926 128.0 +-1.9599377 5.0652828 -1.9060302 128.0 +-1.9241399 5.0648947 -1.901304 128.0 +-1.8956577 5.0836616 -1.9040047 128.0 +-1.8657234 5.0987329 -1.905355 128.0 +-1.8363116 5.1154003 -1.9073806 128.0 +-1.8058275 5.1292348 -1.9083933 128.0 +-1.7715563 5.1322112 -1.905355 128.0 +-1.7406358 5.1447678 -1.9060302 128.0 +-1.7102202 5.1589251 -1.9073806 128.0 +-1.6773704 5.1657405 -1.9060302 128.0 +-1.63794 5.1517158 -1.8969153 128.0 +-1.6088167 5.1697578 -1.8999536 128.0 +-1.5770655 5.1795321 -1.8999536 128.0 +-1.5479419 5.1981325 -1.9033295 128.0 +-1.5141754 5.2012062 -1.9009664 128.0 +-1.48146 5.2076831 -1.8999536 128.0 +-1.4469577 5.2076058 -1.8965777 128.0 +-1.4159632 5.2200203 -1.8979281 128.0 +-1.3831843 5.2258801 -1.8969153 128.0 +-1.3496809 5.2288008 -1.8948898 128.0 +-1.3168831 5.2342453 -1.893877 128.0 +-1.285638 5.2458839 -1.8952274 128.0 +-1.2532072 5.252758 -1.8948898 128.0 +-1.2267013 5.2851048 -1.9040047 128.0 +-1.1917623 5.2815142 -1.8999536 128.0 +-1.1607444 5.2951632 -1.9023167 128.0 +-1.129016 5.3058686 -1.9036671 128.0 +-1.0989127 5.3246803 -1.9080558 128.0 +-1.0669591 5.3350148 -1.9094061 128.0 +-1.033846 5.339613 -1.9087309 128.0 +-1.0024499 5.3532577 -1.9114317 128.0 +-0.96773994 5.3491187 -1.9077182 128.0 +-0.93214691 5.3391929 -1.9019791 128.0 +-0.90249395 5.3633766 -1.9087309 128.0 +-0.8710736 5.3781047 -1.9121068 128.0 +-0.83892691 5.3889289 -1.9141324 128.0 +-0.80389714 5.3809419 -1.9094061 128.0 +-0.7704649 5.3829775 -1.9083933 128.0 +-0.73691016 5.3838735 -1.907043 128.0 +-0.70312953 5.3826938 -1.9050175 128.0 +-0.66880977 5.3766317 -1.901304 128.0 +-0.63669103 5.3881125 -1.9040047 128.0 +-0.60173196 5.3750796 -1.8979281 128.0 +-0.56864071 5.3777347 -1.8975905 128.0 +-0.53768557 5.4017291 -1.9050175 128.0 +-0.50409329 5.4002404 -1.9033295 128.0 +-0.47143936 5.4088583 -1.905355 128.0 +-0.43862259 5.4163399 -1.907043 128.0 +-0.40573177 5.4236226 -1.9087309 128.0 +-0.37257445 5.4278884 -1.9094061 128.0 +-0.33920377 5.4291329 -1.9090685 128.0 +-0.30567285 5.4273529 -1.9077182 128.0 +-0.2717987 5.4178448 -1.9036671 128.0 +-0.23884055 5.4259934 -1.9060302 128.0 +-0.20557848 5.428297 -1.9063678 128.0 +-0.17241681 5.4341607 -1.9080558 128.0 +-0.13882871 5.4257064 -1.9046799 128.0 +-0.10560808 5.4302206 -1.9060302 128.0 +-0.072412863 5.4401784 -1.9094061 128.0 +-0.038922027 5.4254599 -1.9040047 128.0 +-0.005648056 5.4406571 -1.9094061 128.0 +0.02778258 5.4500022 -1.912782 128.0 +0.060970549 5.4271398 -1.9046799 128.0 +0.094058082 5.4144282 -1.9002912 128.0 +0.12732272 5.4156313 -1.9009664 128.0 +0.16107874 5.4326248 -1.9073806 128.0 +0.19461125 5.4371786 -1.9094061 128.0 +0.22824509 5.4424653 -1.9117692 128.0 +0.26127401 5.4334407 -1.9090685 128.0 +0.29450622 5.4298553 -1.9083933 128.0 +0.32810104 5.4326439 -1.9100813 128.0 +0.36124161 5.427711 -1.9090685 128.0 +0.39460683 5.426331 -1.9094061 128.0 +0.42759889 5.420054 -1.9080558 128.0 +0.46036938 5.4117012 -1.9060302 128.0 +0.49330989 5.405962 -1.9050175 128.0 +0.5263797 5.4018965 -1.9046799 128.0 +0.55941826 5.3976288 -1.9043423 128.0 +0.59304053 5.3987732 -1.9060302 128.0 +0.62648094 5.3978376 -1.907043 128.0 +0.66061735 5.4023013 -1.9100813 128.0 +0.69351298 5.3962789 -1.9094061 128.0 +0.72497749 5.3797946 -1.9050175 128.0 +0.75823635 5.3771091 -1.9056926 128.0 +0.79011875 5.3649054 -1.9029919 128.0 +0.82402188 5.3664689 -1.905355 128.0 +0.85574645 5.3538756 -1.9026543 128.0 +0.88565129 5.3308811 -1.8962401 128.0 +0.92090261 5.3401885 -1.9016416 128.0 +0.95398319 5.3362908 -1.9023167 128.0 +0.98705065 5.3321877 -1.9029919 128.0 +1.0202806 5.3288045 -1.9040047 128.0 +1.0529583 5.322444 -1.9040047 128.0 +1.0850315 5.3131161 -1.9029919 128.0 +1.1137333 5.2879362 -1.8962401 128.0 +1.1471564 5.2856026 -1.8979281 128.0 +1.1851075 5.303268 -1.907043 128.0 +1.219523 5.3041525 -1.9100813 128.0 +1.2477162 5.2782488 -1.9033295 128.0 +1.2785249 5.2640905 -1.9009664 128.0 +1.3108006 5.2561464 -1.9009664 128.0 +1.3395276 5.2343259 -1.8959025 128.0 +1.3752029 5.239665 -1.9009664 128.0 +1.4065936 5.2284017 -1.8999536 128.0 +1.4376478 5.2160425 -1.8986033 128.0 +1.4686034 5.2034993 -1.8972529 128.0 +1.500765 5.1952944 -1.8975905 128.0 +1.5315475 5.1823773 -1.8962401 128.0 +1.5638617 5.1746845 -1.8969153 128.0 +1.5955836 5.1649914 -1.8969153 128.0 +1.6255456 5.1497178 -1.8948898 128.0 +1.6568244 5.138751 -1.8945522 128.0 +1.6859697 5.121335 -1.8918515 128.0 +1.7227575 5.126955 -1.8979281 128.0 +1.7526573 5.111836 -1.8962401 128.0 +1.7811939 5.0929885 -1.8932018 128.0 +1.8117781 5.0801902 -1.8925266 128.0 +1.8432369 5.0698624 -1.8928642 128.0 +1.8694056 5.045217 -1.8878005 128.0 +1.900992 5.0354128 -1.8884757 128.0 +1.9311774 5.0218968 -1.8878005 128.0 +1.9598958 5.0046935 -1.885775 128.0 +1.9937041 5.000443 -1.8888133 128.0 +2.02718 4.9950938 -1.8915139 128.0 +2.0603058 4.9886513 -1.893877 128.0 +2.0930643 4.9811225 -1.8959025 128.0 +2.1239583 4.9690518 -1.8962401 128.0 +2.1547832 4.956789 -1.8965777 128.0 +2.1878202 4.949501 -1.8989408 128.0 +2.2158341 4.9308319 -1.8969153 128.0 +2.2480025 4.9214239 -1.8986033 128.0 +2.2793462 4.9100995 -1.899616 128.0 +2.3102343 4.8977237 -1.9002912 128.0 +2.3434963 4.8902473 -1.9029919 128.0 +2.3755178 4.8800077 -1.9046799 128.0 +2.4058335 4.8661838 -1.9050175 128.0 +2.4381802 4.8563781 -1.907043 128.0 +2.4683599 4.842165 -1.9073806 128.0 +2.5001874 4.8311081 -1.9090685 128.0 +2.5271573 4.8106761 -1.907043 128.0 +2.5566273 4.7950792 -1.907043 128.0 +2.5833139 4.7743344 -1.9050175 128.0 +2.6080306 4.7501421 -1.9016416 128.0 +2.6334636 4.7274714 -1.8989408 128.0 +2.6596429 4.7063069 -1.8969153 128.0 +2.6875341 4.6882653 -1.8962401 128.0 +2.7171962 4.6733146 -1.8969153 128.0 +2.7472544 4.6589866 -1.8979281 128.0 +2.7786877 4.6468897 -1.8999536 128.0 +2.810076 4.634582 -1.9019791 128.0 +2.8424037 4.6236677 -1.9046799 128.0 +2.8712182 4.6069388 -1.9050175 128.0 +2.9014425 4.5924182 -1.9063678 128.0 +2.9275362 4.5713577 -1.9050175 128.0 +2.9555304 4.553309 -1.9050175 128.0 +2.984448 4.5366611 -1.9056926 128.0 +3.0064852 4.5096478 -1.9019791 128.0 +3.0251424 4.4778552 -1.8962401 128.0 +3.0557508 4.4638696 -1.8982657 128.0 +3.0873744 4.4512239 -1.9009664 128.0 +3.1146286 4.4321961 -1.9009664 128.0 +3.1461322 4.4191365 -1.9036671 128.0 +3.1638288 4.3867698 -1.8979281 128.0 +3.1840231 4.3581533 -1.893877 128.0 +3.2258213 4.3589644 -1.9029919 128.0 +3.2587163 4.3473749 -1.9067054 128.0 +3.2824845 4.3235493 -1.9050175 128.0 +3.314115 4.3100429 -1.9080558 128.0 +3.3364506 4.2844276 -1.9056926 128.0 +3.3685048 4.2712665 -1.9090685 128.0 +3.38114 4.2335997 -1.901304 128.0 +3.4147475 4.2222886 -1.9056926 128.0 +3.4358201 4.1954303 -1.9029919 128.0 +3.4633005 4.1764436 -1.9040047 128.0 +3.4785724 4.142859 -1.8982657 128.0 +3.4947824 4.1106787 -1.8932018 128.0 +0 0 -0 128.0 +3.5536211 4.0774183 -1.8979281 128.0 +3.5785728 4.0555367 -1.8979281 128.0 +3.6027627 4.0328007 -1.8975905 128.0 +3.6299651 4.0134115 -1.8989408 128.0 +3.6532514 3.9896741 -1.8982657 128.0 +3.682142 3.9720156 -1.9006288 128.0 +3.7032239 3.9459157 -1.8989408 128.0 +3.7286625 3.9244838 -1.899616 128.0 +3.7591972 3.9083157 -1.9029919 128.0 +3.7863905 3.8885484 -1.9046799 128.0 +3.8108397 3.8659127 -1.9050175 128.0 +3.8451264 3.8531184 -1.9104189 128.0 +3.8693652 3.8301148 -1.9107565 128.0 +3.8927937 3.8063009 -1.9107565 128.0 +3.9038892 3.7705717 -1.9046799 128.0 +3.9303565 3.7497959 -1.9063678 128.0 +3.9498661 3.7223811 -1.9046799 128.0 +3.969187 3.6948681 -1.9029919 128.0 +3.985548 3.6647093 -1.8999536 128.0 +4.0072622 3.6395526 -1.899616 128.0 +4.0260158 3.611753 -1.8979281 128.0 +4.0544415 3.5926006 -1.9009664 128.0 +4.0820751 3.5726151 -1.9036671 128.0 +4.1067677 3.5499632 -1.9050175 128.0 +4.1349154 3.5301991 -1.9080558 128.0 +4.157218 3.505368 -1.9083933 128.0 +4.1793714 3.4803963 -1.9087309 128.0 +4.2028289 3.4564805 -1.9097437 128.0 +4.2232275 3.4300337 -1.9094061 128.0 +4.246397 3.405823 -1.9104189 128.0 +4.2642636 3.3773656 -1.9090685 128.0 +4.2871308 3.3528767 -1.9100813 128.0 +4.3046432 3.3242068 -1.9087309 128.0 +4.3212166 3.2948775 -1.907043 128.0 +4.339848 3.2671685 -1.9063678 128.0 +4.3462157 3.23037 -1.9002912 128.0 +4.3697495 3.2064259 -1.9019791 128.0 +4.38553 3.1767919 -1.9002912 128.0 +4.3758459 3.1290154 -1.8874629 128.0 +4.4049592 3.109164 -1.8918515 128.0 +4.44944 3.0998356 -1.9029919 128.0 +4.4683762 3.0724759 -1.9029919 128.0 +4.489481 3.0465865 -1.9040047 128.0 +4.506526 3.0179346 -1.9033295 128.0 +4.5249591 2.9902263 -1.9033295 128.0 +4.5416446 2.9613769 -1.9026543 128.0 +4.5605211 2.9339635 -1.9029919 128.0 +4.5800271 2.9069345 -1.9036671 128.0 +4.5993733 2.8797765 -1.9043423 128.0 +4.6385789 2.8648574 -1.9134572 128.0 +4.6335621 2.8226283 -1.9040047 128.0 +4.6524081 2.7951138 -1.9046799 128.0 +4.6759491 2.7703536 -1.9073806 128.0 +4.6920471 2.7411354 -1.907043 128.0 +4.7161188 2.7165229 -1.9100813 128.0 +4.7277875 2.6847451 -1.9080558 128.0 +4.7466354 2.6570647 -1.9090685 128.0 +4.7603774 2.6265256 -1.9080558 128.0 +4.7739229 2.5959179 -1.907043 128.0 +4.7889318 2.5661321 -1.9067054 128.0 +4.8045869 2.5366995 -1.9067054 128.0 +4.8250718 2.5097778 -1.9087309 128.0 +4.8420558 2.4809833 -1.9094061 128.0 +4.8613896 2.453347 -1.9110941 128.0 +4.8771944 2.4238908 -1.9114317 128.0 +4.8936663 2.3947468 -1.9121068 128.0 +4.908268 2.3646748 -1.9121068 128.0 +4.9192829 2.3329 -1.9107565 128.0 +4.945446 2.3082466 -1.9154826 128.0 +4.9620819 2.2790372 -1.9164954 128.0 +4.97683 2.2489352 -1.916833 128.0 +4.9922562 2.2191205 -1.9175082 128.0 +5.0057783 2.1884468 -1.9175082 128.0 +5.0121942 2.154716 -1.9148074 128.0 +5.0322571 2.1268535 -1.9175082 128.0 +5.0469508 2.0966582 -1.9181833 128.0 +5.0562348 2.0642281 -1.916833 128.0 +5.0723 2.0345666 -1.9181833 128.0 +5.0838127 2.0030601 -1.9178458 128.0 +5.0942516 1.9711493 -1.9171706 128.0 +5.1027308 1.938517 -1.9158202 128.0 +5.1198211 1.9091444 -1.9178458 128.0 +5.1305552 1.8773704 -1.9175082 128.0 +5.1455216 1.8471268 -1.9188585 128.0 +5.1683006 1.8195844 -1.9232472 128.0 +5.1722498 1.7853804 -1.9205465 128.0 +5.1857824 1.7545156 -1.9215592 128.0 +5.1910896 1.7208856 -1.9195337 128.0 +5.2167702 1.6939445 -1.9252727 128.0 +5.227066 1.6619031 -1.9252727 128.0 +5.2317719 1.6281205 -1.9232472 128.0 +5.2362609 1.5943429 -1.9212216 128.0 +5.2504559 1.5635273 -1.9229096 128.0 +5.2554317 1.5299659 -1.9212216 128.0 +5.268342 1.4987209 -1.922572 128.0 +5.2819734 1.467627 -1.92426 128.0 +5.2917876 1.4354362 -1.9245975 128.0 +5.2995853 1.4026985 -1.92426 128.0 +5.3053584 1.3694485 -1.9232472 128.0 +5.3054457 1.3348022 -1.9202089 128.0 +5.3107934 1.301551 -1.9191961 128.0 +5.3214264 1.2695956 -1.9202089 128.0 +5.3291163 1.23692 -1.9202089 128.0 +5.3347692 1.2037834 -1.9195337 128.0 +5.3540077 1.1736484 -1.9239224 128.0 +5.368474 1.1423424 -1.9266231 128.0 +5.3689289 1.1080483 -1.92426 128.0 +5.381165 1.0761924 -1.9262855 128.0 +5.3848944 1.0426168 -1.9252727 128.0 +5.3884149 1.0090362 -1.92426 128.0 +5.394505 0.97595447 -1.92426 128.0 +5.3966827 0.94218826 -1.9229096 128.0 +5.4014339 0.9089008 -1.922572 128.0 +5.4059801 0.87559056 -1.9222344 128.0 +5.4159012 0.84312791 -1.9239224 128.0 +5.4172487 0.80932409 -1.922572 128.0 +5.4528618 0.7804727 -1.9337125 128.0 +5.4547501 0.74661672 -1.9326997 128.0 +5.464829 0.71386492 -1.9347252 128.0 +5.4775128 0.68136626 -1.9377635 128.0 +5.478786 0.64741248 -1.9367508 128.0 +5.4714303 0.61252558 -1.9326997 128.0 +5.4807019 0.57953626 -1.9347252 128.0 +5.4879012 0.54626966 -1.9360756 128.0 +5.486464 0.51214844 -1.9343876 128.0 +5.4810634 0.47773826 -1.9313493 128.0 +5.4829535 0.44402203 -1.9310117 128.0 +5.4808812 0.41001946 -1.9293238 128.0 +5.4823551 0.37631714 -1.9289862 128.0 +5.4883184 0.34290603 -1.9303366 128.0 +5.4921989 0.3093299 -1.9310117 128.0 +5.4977541 0.27581352 -1.9323621 128.0 +5.5049853 0.24232352 -1.9343876 128.0 +5.5063686 0.20854099 -1.9343876 128.0 +5.5188341 0.17510968 -1.9384387 128.0 +5.5245094 0.14136419 -1.9401267 128.0 +5.5290375 0.10753727 -1.9414769 128.0 +5.5211225 0.073496327 -1.9384387 128.0 +5.5242934 0.039638441 -1.9394515 128.0 +5.5187845 0.0057349838 -1.9374259 128.0 +5.5130682 -0.02809938 -1.9354004 128.0 +5.509027 -0.061884385 -1.93405 128.0 +5.5076027 -0.095669694 -1.9337125 128.0 +5.5134993 -0.12961629 -1.9360756 128.0 +5.5097775 -0.16336055 -1.9350628 128.0 +5.5105529 -0.19723204 -1.935738 128.0 +5.5111198 -0.23111919 -1.9364132 128.0 +5.5142989 -0.26515612 -1.9381011 128.0 +5.5078683 -0.29873168 -1.9364132 128.0 +5.5049925 -0.33246505 -1.9360756 128.0 +5.5019093 -0.36617434 -1.935738 128.0 +5.4995589 -0.39992654 -1.935738 128.0 +5.4913712 -0.43321991 -1.9337125 128.0 +5.484858 -0.46658731 -1.9323621 128.0 +5.484704 -0.50048941 -1.9333749 128.0 +5.4796562 -0.53395104 -1.9326997 128.0 +5.4762769 -0.56756353 -1.9326997 128.0 +5.4736271 -0.60125732 -1.9330373 128.0 +5.4763799 -0.63559073 -1.9354004 128.0 +5.4686394 -0.66872448 -1.93405 128.0 +5.4625659 -0.70202696 -1.9333749 128.0 +5.4572229 -0.7354058 -1.9330373 128.0 +5.456336 -0.76940227 -1.9343876 128.0 +5.4496498 -0.80259311 -1.9337125 128.0 +5.4455528 -0.83615923 -1.93405 128.0 +5.4468265 -0.87059623 -1.9364132 128.0 +5.4404535 -0.90384674 -1.9360756 128.0 +5.4338775 -0.93705183 -1.935738 128.0 +5.4289522 -0.97054142 -1.9360756 128.0 +5.4173412 -1.002807 -1.93405 128.0 +5.4166336 -1.0370899 -1.9360756 128.0 +5.4147849 -1.0712193 -1.9377635 128.0 +5.4053435 -1.1038588 -1.9367508 128.0 +5.4012318 -1.1375864 -1.9377635 128.0 +5.3959899 -1.1711055 -1.9384387 128.0 +5.3914585 -1.2048082 -1.9394515 128.0 +5.3857989 -1.2382886 -1.9401267 128.0 +5.3790159 -1.2715284 -1.9404641 128.0 +5.3656244 -1.303177 -1.9384387 128.0 +5.3529606 -1.3349367 -1.9367508 128.0 +5.3401089 -1.3665903 -1.9350628 128.0 +5.3370862 -1.4007642 -1.9370884 128.0 +5.3074837 -1.4278628 -1.9293238 128.0 +5.3167725 -1.4654028 -1.9360756 128.0 +5.2986212 -1.4954423 -1.9326997 128.0 +5.2902503 -1.528187 -1.9330373 128.0 +5.2699413 -1.5574181 -1.9289862 128.0 +5.278307 -1.5951694 -1.935738 128.0 +5.2756152 -1.6297486 -1.9384387 128.0 +5.2744923 -1.6649212 -1.9418145 128.0 +5.257906 -1.695232 -1.9394515 128.0 +5.2509818 -1.7286391 -1.9408017 128.0 +5.2393837 -1.7605263 -1.9404641 128.0 +5.2267017 -1.7920309 -1.9397891 128.0 +5.2120538 -1.822825 -1.9384387 128.0 +5.1972246 -1.8535067 -1.9370884 128.0 +5.1786761 -1.8827889 -1.9343876 128.0 +5.1537862 -1.9096245 -1.9293238 128.0 +5.1181941 -1.9322369 -1.9202089 128.0 +5.075491 -1.9517826 -1.9083933 128.0 +5.0292358 -1.9695047 -1.8952274 128.0 +4.9409847 -1.9700029 -1.8658572 128.0 +4.8869371 -1.9832957 -1.849653 128.0 +4.7972422 -1.9812709 -1.8196076 128.0 +4.7285867 -1.9869711 -1.7976644 128.0 +4.6747584 -1.9981925 -1.7814602 128.0 +4.6183825 -2.0077033 -1.7642431 128.0 +4.5663719 -2.0185008 -1.7487141 128.0 +4.5229907 -2.0325937 -1.7365609 128.0 +4.4856029 -2.0489681 -1.7267709 128.0 +4.4447703 -2.0633757 -1.7156305 128.0 +4.4005256 -2.0757537 -1.7031397 128.0 +4.3707285 -2.0945811 -1.696388 128.0 +4.3450985 -2.1151812 -1.6913241 128.0 +4.2712822 -2.1117704 -1.6670178 128.0 +4.2742281 -2.145962 -1.673432 128.0 +4.1754379 -2.1285496 -1.6389979 128.0 +4.1405625 -2.1428826 -1.6302207 128.0 +4.1206694 -2.1647468 -1.62752 128.0 +4.1122932 -2.1926467 -1.6295455 128.0 +4.0904827 -2.2133591 -1.6261696 128.0 +4.0627975 -2.2307158 -1.6204306 128.0 +4.0144949 -2.236366 -1.606252 128.0 +3.9531648 -2.2340996 -1.5866718 128.0 +3.8666987 -2.2166555 -1.5566264 128.0 +3.8554664 -2.2417586 -1.5576392 128.0 +3.7637959 -2.2194796 -1.5252308 128.0 +3.569134 -2.1343348 -1.4496109 128.0 +3.588973 -2.1762013 -1.4634521 128.0 +3.4913507 -2.1464272 -1.4280053 128.0 +3.4397681 -2.1439142 -1.4118011 128.0 +3.407449 -2.152915 -1.403699 128.0 +3.8959639 -2.4950793 -1.6173923 128.0 +3.5939612 -2.3329244 -1.4948478 128.0 +3.3129802 -2.1795788 -1.3804054 128.0 +3.758522 -2.5058069 -1.578232 128.0 +3.0761583 -2.0783393 -1.2895942 128.0 +3.0711157 -2.1024919 -1.2929701 128.0 +3.0473282 -2.1137865 -1.2882439 128.0 +2.9950213 -2.1048462 -1.2710268 128.0 +2.9406397 -2.0937071 -1.2527971 128.0 +2.9117043 -2.1001494 -1.2457078 128.0 +2.9132051 -2.128525 -1.2521219 128.0 +2.8176119 -2.0853324 -1.2153249 128.0 +2.8025038 -2.1008883 -1.2143121 128.0 +2.7805634 -2.1112149 -1.210261 128.0 +2.7444232 -2.110451 -1.1997957 128.0 +2.6772044 -2.0850358 -1.1751518 128.0 +2.6517949 -2.0915153 -1.1694129 128.0 +2.6308205 -2.1012862 -1.1656994 128.0 +2.6068985 -2.1085112 -1.1606356 128.0 +2.5829875 -2.1155219 -1.1555717 128.0 +2.5540166 -2.1181135 -1.1481447 128.0 +2.540972 -2.1337447 -1.1481447 128.0 +2.517791 -2.1407607 -1.1434186 128.0 +2.4468195 -2.1064324 -1.1160738 128.0 +2.3870113 -2.0805919 -1.093793 128.0 +2.3784351 -2.0989356 -1.0958186 128.0 +2.3444512 -2.0946779 -1.085691 128.0 +2.3315542 -2.1090238 -1.085691 128.0 +2.3164868 -2.1213834 -1.0846782 128.0 +2.304117 -2.1361971 -1.0850158 128.0 +2.2957711 -2.1548033 -1.0873789 128.0 +2.2818239 -2.168201 -1.0870413 128.0 +2.269834 -2.1834662 -1.0877165 128.0 +2.240207 -2.1815934 -1.0796144 128.0 +2.2207453 -2.1893513 -1.0765761 128.0 +2.2132668 -2.20892 -1.0796144 128.0 +2.1943736 -2.2171073 -1.0769137 128.0 +2.1754634 -2.2251461 -1.0742129 128.0 +2.1630771 -2.2398067 -1.0748881 128.0 +2.1473439 -2.250994 -1.0738754 128.0 +2.130909 -2.2613873 -1.072525 128.0 +2.1169932 -2.2744198 -1.072525 128.0 +2.1055465 -2.290138 -1.0738754 128.0 +2.097784 -2.3099818 -1.0772513 128.0 +2.077913 -2.3165045 -1.0742129 128.0 +2.0561683 -2.3207572 -1.0701619 128.0 +2.0400298 -2.3312051 -1.0691491 128.0 +2.0226095 -2.3401182 -1.0674613 128.0 +2.0051565 -2.3489056 -1.0657732 128.0 +1.9900992 -2.360445 -1.0654356 128.0 +1.9719639 -2.3682721 -1.0634102 128.0 +1.9699525 -2.3955934 -1.0704995 128.0 +1.9534358 -2.4054439 -1.0694867 128.0 +1.9392285 -2.418119 -1.0698243 128.0 +1.9196789 -2.4240694 -1.0671237 128.0 +1.9018693 -2.4320958 -1.0654356 128.0 +1.8880612 -2.4452095 -1.0661108 128.0 +1.8735929 -2.4574969 -1.0664485 128.0 +1.8567802 -2.4666908 -1.0654356 128.0 +1.8438561 -2.4810591 -1.0667861 128.0 +1.8347241 -2.5006735 -1.0704995 128.0 +1.8127186 -2.502737 -1.0664485 128.0 +1.7923999 -2.5069218 -1.0634102 128.0 +1.7764411 -2.5171034 -1.0630726 128.0 +1.7512766 -2.5140548 -1.056996 128.0 +1.7331507 -2.5208752 -1.055308 128.0 +1.7239937 -2.5408082 -1.0593591 128.0 +1.7130855 -2.5583773 -1.0623974 128.0 +1.7056596 -2.5814049 -1.0677987 128.0 +1.6918452 -2.5949757 -1.0691491 128.0 +1.6723254 -2.5997667 -1.0667861 128.0 +1.6694584 -2.6306412 -1.0755633 128.0 +1.655284 -2.6440263 -1.0769137 128.0 +1.6494178 -2.6709504 -1.084003 128.0 +1.6212438 -2.6617286 -1.0759009 128.0 +1.6073054 -2.6756604 -1.0775888 128.0 +1.5846194 -2.6749449 -1.0732002 128.0 +1.5672266 -2.6829922 -1.072525 128.0 +1.5450959 -2.6827705 -1.0684739 128.0 +1.5272111 -2.6897449 -1.0674613 128.0 +1.5106784 -2.6990652 -1.0674613 128.0 +1.493634 -2.7074597 -1.0671237 128.0 +1.4823899 -2.7264962 -1.0711746 128.0 +1.4669665 -2.7380297 -1.0721874 128.0 +1.4492595 -2.7453146 -1.0715122 128.0 +1.4297807 -2.749145 -1.0694867 128.0 +1.4128854 -2.7578664 -1.0694867 128.0 +1.3938161 -2.7622821 -1.0677987 128.0 +1.3789358 -2.774997 -1.0694867 128.0 +1.3693312 -2.7986238 -1.0755633 128.0 +1.3554024 -2.8137572 -1.078264 128.0 +1.34618 -2.8390303 -1.0850158 128.0 +1.3351055 -2.8608837 -1.0904171 128.0 +1.3202769 -2.8750093 -1.0927804 128.0 +1.3049374 -2.8882029 -1.0948058 128.0 +1.2868087 -2.8952951 -1.0944682 128.0 +1.2644938 -2.8927872 -1.0904171 128.0 +1.2515539 -2.9117332 -1.0948058 128.0 +1.2270671 -2.9037516 -1.0887293 128.0 +1.2012808 -2.8921027 -1.0813023 128.0 +1.1892061 -2.9133623 -1.0867038 128.0 +1.1727096 -2.9240987 -1.0880541 128.0 +1.1533651 -2.9277363 -1.0867038 128.0 +1.1370779 -2.9391472 -1.0883917 128.0 +1.1186879 -2.945189 -1.0880541 128.0 +1.1012534 -2.9537616 -1.0887293 128.0 +1.0895792 -2.978142 -1.095481 128.0 +1.0652413 -2.9679391 -1.0890669 128.0 +1.0445091 -2.9673166 -1.0863662 128.0 +1.0238247 -2.9665518 -1.0836655 128.0 +1.0049995 -2.9709947 -1.0829903 128.0 +0.9855659 -2.9735315 -1.0816399 128.0 +0.96468514 -2.9714656 -1.0786016 128.0 +0.94186997 -2.9629765 -1.0732002 128.0 +0.92730874 -2.9803839 -1.0775888 128.0 +0.91558588 -3.0076284 -1.085691 128.0 +0.89845777 -3.0177004 -1.0873789 128.0 +0.88545126 -3.0421352 -1.0944682 128.0 +0.88248348 -3.1027377 -1.1150612 128.0 +0.85889167 -3.0917695 -1.1089846 128.0 +0.84212321 -3.1051574 -1.1120229 128.0 +0.81992257 -3.0984368 -1.1076342 128.0 +0.78418714 -3.0386999 -1.0836655 128.0 +0.75794613 -3.0133309 -1.072525 128.0 +0.73518401 -3.0005548 -1.0661108 128.0 +0.7130444 -2.9894445 -1.0603719 128.0 +0.69575256 -2.9983478 -1.0620598 128.0 +0.67920727 -3.0108242 -1.065098 128.0 +0.66394639 -3.0296462 -1.0704995 128.0 +0.64299262 -3.022615 -1.0664485 128.0 +0.62557602 -3.0320346 -1.0684739 128.0 +0.6054827 -3.0284319 -1.0657732 128.0 +0.5870682 -3.0330143 -1.0661108 128.0 +0.57849973 -3.0902209 -1.085691 128.0 +0.55835408 -3.0872285 -1.0833279 128.0 +0.55057573 -3.154577 -1.1066214 128.0 +0.53386575 -3.173676 -1.1123605 128.0 +0.51182276 -3.1610961 -1.1066214 128.0 +0.49125811 -3.1567364 -1.1039207 128.0 +0.46520019 -3.1150055 -1.0877165 128.0 +0.44714561 -3.1252556 -1.0904171 128.0 +0.42770556 -3.1260753 -1.0897421 128.0 +0.40888226 -3.1314409 -1.0907547 128.0 +0.38896281 -3.1282861 -1.0887293 128.0 +0.37042385 -3.1362226 -1.0907547 128.0 +0.35337403 -3.1580808 -1.0978441 128.0 +0.33329642 -3.1536372 -1.095481 128.0 +0.31291342 -3.1453195 -1.0917675 128.0 +0.29553446 -3.167799 -1.0991945 128.0 +0.27641886 -3.1733036 -1.1005448 128.0 +0.2551935 -3.1533611 -1.0927804 128.0 +0.2354183 -3.1492355 -1.0907547 128.0 +0.21512258 -3.1365345 -1.085691 128.0 +0.19563805 -3.1340377 -1.0843406 128.0 +0.17635128 -3.1342392 -1.084003 128.0 +0.15678599 -3.1286817 -1.0816399 128.0 +0.13733703 -3.1239424 -1.0796144 128.0 +0.11870169 -3.1388357 -1.0846782 128.0 +0.099439919 -3.1395049 -1.0846782 128.0 +0.080415882 -3.1494658 -1.0880541 128.0 +0.06140196 -3.1658988 -1.093793 128.0 +0.041899621 -3.1605687 -1.0917675 128.0 +0.022546886 -3.1664138 -1.093793 128.0 +0.0031187588 -3.167434 -1.0941306 128.0 +-0.016335223 -3.1711586 -1.095481 128.0 +-0.035834793 -3.1747637 -1.0968313 128.0 +-0.055314101 -3.174484 -1.0968313 128.0 +-0.075033918 -3.1844361 -1.1005448 128.0 +-0.094571836 -3.1839159 -1.1005448 128.0 +-0.11447579 -3.1936233 -1.1042583 128.0 +-0.13469929 -3.2079082 -1.1096597 128.0 +-0.15559891 -3.2324071 -1.1187747 128.0 +-0.1806733 -3.3282027 -1.1535462 128.0 +-0.19990118 -3.3073003 -1.1464568 128.0 +-0.219816 -3.3003762 -1.1444314 128.0 +-0.240881 -3.310231 -1.1484823 128.0 +-0.26052201 -3.3002453 -1.145444 128.0 +-0.27957129 -3.2845159 -1.1403803 128.0 +-0.29877925 -3.2724273 -1.1366668 128.0 +-0.31930897 -3.2752166 -1.1383547 128.0 +-0.33969021 -3.2760046 -1.1393675 128.0 +-0.35834706 -3.2607591 -1.1346413 128.0 +-0.37823951 -3.2575641 -1.1343037 128.0 +-0.39890555 -3.260788 -1.1363292 128.0 +-0.4208245 -3.273217 -1.1417305 128.0 +-0.44127759 -3.2733717 -1.1427433 128.0 +-0.46279931 -3.2808554 -1.1464568 128.0 +-0.48072827 -3.2630539 -1.1410555 128.0 +-0.72763735 -4.7384486 -1.677483 128.0 +-0.7552132 -4.7245998 -1.6741072 128.0 +-0.78372604 -4.7170911 -1.6730944 128.0 +-0.81297457 -4.7140489 -1.6737696 128.0 +-0.8422153 -4.710825 -1.6744447 128.0 +-0.87247461 -4.7129731 -1.6771455 128.0 +-0.90084565 -4.7047577 -1.6761327 128.0 +-0.92969656 -4.6991415 -1.6761327 128.0 +-0.95926553 -4.6970377 -1.677483 128.0 +-0.98884368 -4.6947474 -1.6788334 128.0 +-1.0208247 -4.70331 -1.6842347 128.0 +-1.0459706 -4.6804223 -1.6781582 128.0 +-1.0727718 -4.6656599 -1.6751199 128.0 +-1.1013795 -4.6589894 -1.6751199 128.0 +-1.1319445 -4.6603765 -1.6781582 128.0 +-1.1605188 -4.6533432 -1.6781582 128.0 +-1.1913823 -4.6552539 -1.6815341 128.0 +-1.2208796 -4.6514983 -1.6828845 128.0 +-1.23204 -4.579381 -1.6589156 128.0 +-1.1403437 -4.1370544 -1.497211 128.0 +-1.2656498 -4.4841957 -1.629208 128.0 +-1.334143 -4.6183267 -1.6822093 128.0 +-1.3600551 -4.6019292 -1.679171 128.0 +-1.3890831 -4.5962005 -1.6801838 128.0 +-1.418092 -4.5902886 -1.6811965 128.0 +-1.4476472 -4.5859895 -1.6828845 128.0 +-1.4769142 -4.5806041 -1.6842347 128.0 +-1.5052867 -4.57235 -1.6845723 128.0 +-1.5324144 -4.5603504 -1.6835597 128.0 +-1.5563996 -4.5392866 -1.679171 128.0 +-1.5848441 -4.5314283 -1.6798462 128.0 +-1.6151476 -4.5287113 -1.6825469 128.0 +-1.6454774 -4.5257931 -1.6852475 128.0 +-1.6784478 -4.5297341 -1.6906489 128.0 +-1.7075398 -4.5228729 -1.6919993 128.0 +-1.7389752 -4.521975 -1.6957128 128.0 +-1.7704636 -4.5208611 -1.6994263 128.0 +-1.8009582 -4.5169082 -1.702127 128.0 +-1.2025824 -2.9627969 -1.1049335 128.0 +-1.2203798 -2.9544921 -1.1045959 128.0 +-1.8655654 -4.4396019 -1.6852475 128.0 +-1.89721 -4.4384584 -1.6892986 128.0 +-1.927785 -4.4345031 -1.6923369 128.0 +-1.9576218 -4.428618 -1.6947 128.0 +-1.9940169 -4.4371295 -1.7028022 128.0 +-2.008692 -4.3974113 -1.6919993 128.0 +-1.5700114 -3.3817716 -1.2953333 128.0 +-1.5835048 -3.3567498 -1.2892566 128.0 +-1.5959371 -3.3299928 -1.2825049 128.0 +-1.6159276 -3.3192911 -1.2821673 128.0 +-1.6379324 -3.3126888 -1.2835176 128.0 +-1.6603392 -3.3067827 -1.2852056 128.0 +-1.6840175 -3.303242 -1.2879063 128.0 +-1.7180965 -3.3195992 -1.2987092 128.0 +-1.7471867 -3.3256614 -1.3054608 128.0 +-2.2546384 -4.2285829 -1.6768079 128.0 +-2.2783027 -4.2105293 -1.6751199 128.0 +-2.3004715 -4.1898694 -1.6724192 128.0 +-2.3352969 -4.192122 -1.679171 128.0 +-2.3605123 -4.1768947 -1.6788334 128.0 +-2.3879693 -4.1655989 -1.6801838 128.0 +-2.4167953 -4.1565647 -1.6825469 128.0 +-2.44082 -4.1392245 -1.6815341 128.0 +-2.4656887 -4.1233621 -1.6811965 128.0 +-2.4899669 -4.1065454 -1.6805214 128.0 +-2.5175817 -4.0951996 -1.6822093 128.0 +-2.5396752 -4.0748816 -1.6801838 128.0 +-2.5646303 -4.0592217 -1.6801838 128.0 +-2.5889814 -4.0426164 -1.6798462 128.0 +-2.6137376 -4.0266547 -1.6798462 128.0 +-2.6383955 -4.0105414 -1.6798462 128.0 +-2.6634762 -3.99506 -1.6801838 128.0 +-2.6705523 -3.9529014 -1.6690433 128.0 +-2.7021997 -3.9473157 -1.6737696 128.0 +-2.7220778 -3.924473 -1.6710688 128.0 +-2.7461066 -3.9076967 -1.6710688 128.0 +-2.7596607 -3.8762031 -1.6646546 128.0 +-2.79055 -3.8691225 -1.6690433 128.0 +-2.8075752 -3.8428061 -1.6649922 128.0 +-2.8277421 -3.8209667 -1.6629667 128.0 +-2.8449242 -3.7952585 -1.6592532 128.0 +-2.8624666 -3.7702334 -1.6558774 128.0 +-2.8769405 -3.741405 -1.6508136 128.0 +-2.3030503 -2.9572058 -1.3024225 128.0 +-2.321152 -2.9430189 -1.3024225 128.0 +-2.3362296 -2.9250433 -1.3007346 128.0 +-2.9809136 -3.6857772 -1.6582404 128.0 +-3.001684 -3.6652324 -1.6572278 128.0 +-3.0211129 -3.6431224 -1.6555398 128.0 +-3.0440152 -3.6252375 -1.6558774 128.0 +-3.0625441 -3.6021883 -1.6538519 128.0 +-3.0815189 -3.579762 -1.6521639 128.0 +-3.1077547 -3.5657544 -1.6545271 128.0 +-3.130198 -3.5473242 -1.6548647 128.0 +-3.1531591 -3.5294549 -1.6555398 128.0 +-3.1690738 -3.5037577 -1.6525015 128.0 +-3.1917841 -3.4856353 -1.6531767 128.0 +-3.210552 -3.4632237 -1.6518263 128.0 +-3.2323856 -3.4441454 -1.6521639 128.0 +-3.2528093 -3.4235644 -1.6518263 128.0 +-3.2776694 -3.4076121 -1.6538519 128.0 +-3.3123057 -3.4015999 -1.6609412 128.0 +-3.3093281 -3.3570774 -1.648788 128.0 +-3.3285346 -3.3353758 -1.6481129 128.0 +-3.3422482 -3.3082671 -1.644737 128.0 +-3.373925 -3.2988853 -1.650476 128.0 +-3.386656 -3.2709274 -1.6467625 128.0 +-3.4107485 -3.2539845 -1.648788 128.0 +-3.438185 -3.2400973 -1.6525015 128.0 +-3.459379 -3.2202227 -1.6531767 128.0 +-3.47838 -3.1982987 -1.6528391 128.0 +-3.4979389 -3.1768954 -1.6528391 128.0 +-3.5299773 -3.166688 -1.6589156 128.0 +-3.5514545 -3.1468418 -1.6599284 128.0 +-3.5714047 -3.1256111 -1.660266 128.0 +-3.5983486 -3.1104105 -1.6639795 128.0 +-3.6187978 -3.0894952 -1.6646546 128.0 +-3.6427233 -3.0714805 -1.6670178 128.0 +-3.671627 -3.0575051 -1.671744 128.0 +-3.6954072 -3.0391045 -1.6741072 128.0 +-3.718369 -3.0199337 -1.6761327 128.0 +-3.7346261 -2.9952943 -1.6751199 128.0 +-3.7521968 -2.9717383 -1.6747823 128.0 +-3.7711017 -2.9492393 -1.6751199 128.0 +-3.7868922 -2.9243186 -1.6741072 128.0 +-3.8040156 -2.9004567 -1.6737696 128.0 +-3.8255007 -2.8798921 -1.6754575 128.0 +-3.8544309 -2.8647885 -1.6805214 128.0 +-3.8787661 -2.8460965 -1.6835597 128.0 +-3.8984432 -2.8239002 -1.6845723 128.0 +-3.9218221 -2.8043072 -1.687273 128.0 +-3.9481828 -2.7867048 -1.6913241 128.0 +-3.9737027 -2.7683463 -1.6950376 128.0 +-3.9921653 -2.7449787 -1.6957128 128.0 +-4.0011449 -2.7151453 -1.6923369 128.0 +-4.0232038 -2.6942105 -1.6947 128.0 +-4.0459414 -2.6736259 -1.6974007 128.0 +-4.0819817 -2.6616049 -1.7058405 128.0 +-4.1045685 -2.640583 -1.7085412 128.0 +-4.133409 -2.6234198 -1.7139425 128.0 +-4.1693726 -2.610498 -1.7223822 128.0 +-4.1877141 -2.58635 -1.723395 128.0 +-4.2002892 -2.5586469 -1.7220447 128.0 +-4.2352738 -2.544462 -1.7301468 128.0 +-4.2621441 -2.5251451 -1.7348731 128.0 +-4.2799959 -2.50037 -1.7358857 128.0 +-4.3074918 -2.4811099 -1.7409496 128.0 +-4.3300009 -2.4588168 -1.7439879 128.0 +-4.3499341 -2.4349611 -1.7460134 128.0 +-4.3672652 -2.4095888 -1.7470262 128.0 +-4.384449 -2.3840957 -1.7480389 128.0 +-4.4114394 -2.3638179 -1.7531028 128.0 +-4.4375138 -2.342859 -1.757829 128.0 +-4.459321 -2.3194969 -1.7608672 128.0 +-4.4810085 -2.2959549 -1.7639056 128.0 +-4.5008941 -2.2713859 -1.7662687 128.0 +-4.5164323 -2.2445641 -1.7669439 128.0 +-4.5377288 -2.2205338 -1.7699822 128.0 +-4.5690761 -2.2012298 -1.7770715 128.0 +-4.591001 -2.1771872 -1.7804474 128.0 +-4.5181274 -2.1087606 -1.746351 128.0 +-4.5172958 -2.0747113 -1.7409496 128.0 +-4.5496693 -2.0558712 -1.7487141 128.0 +-4.5897222 -2.0401533 -1.759517 128.0 +-4.6219902 -2.0206268 -1.7672814 128.0 +-4.662838 -2.004499 -1.7784219 128.0 +-4.7114639 -1.9912441 -1.7926006 128.0 +-4.759232 -1.9771061 -1.8064417 128.0 +-4.8078742 -1.9628123 -1.8206204 128.0 +-4.8757381 -1.9557062 -1.842226 128.0 +-4.9533272 -1.9516367 -1.8675451 128.0 +-5.0310469 -1.9466877 -1.8928642 128.0 +-5.1044908 -1.9391857 -1.9164954 128.0 +-5.1648002 -1.9259207 -1.9350628 128.0 +-5.2118783 -1.9071349 -1.9485663 128.0 +-5.2447443 -1.8827538 -1.9566684 128.0 +-5.2624125 -1.8527259 -1.9590316 128.0 +-5.2888074 -1.8256239 -1.9647706 128.0 +-5.3079343 -1.7958537 -1.9678088 128.0 +-5.3242145 -1.7650286 -1.9698343 128.0 +-5.3430014 -1.7349435 -1.9728726 128.0 +-5.3517523 -1.7015563 -1.9721975 128.0 +-5.3674846 -1.6703651 -1.974223 128.0 +-5.3722301 -1.6357539 -1.9721975 128.0 +-5.3830676 -1.6030284 -1.9725351 128.0 +-5.3855724 -1.567863 -1.9698343 128.0 +-5.3969021 -1.5353035 -1.9705095 128.0 +-5.4007792 -1.5006474 -1.968484 128.0 +-5.4135194 -1.4684666 -1.9698343 128.0 +-5.4105983 -1.4320903 -1.9654458 128.0 +-5.4147267 -1.3976879 -1.9637578 128.0 +-5.416811 -1.3628293 -1.9613947 128.0 +-5.4387846 -1.3329287 -1.9664584 128.0 +-5.4422832 -1.2984393 -1.9647706 128.0 +-5.4483137 -1.2645957 -1.9640954 128.0 +-5.4550524 -1.2309345 -1.9637578 128.0 +-5.4625025 -1.1974398 -1.9637578 128.0 +-5.4706678 -1.1640959 -1.9640954 128.0 +-5.4841604 -1.1318389 -1.9664584 128.0 +-5.4983859 -1.0996447 -1.9691592 128.0 +-5.5096507 -1.0667815 -1.9708471 128.0 +-5.5244193 -1.0345148 -1.9738854 128.0 +-5.5334415 -1.001101 -1.9748982 128.0 +-5.543189 -0.96777749 -1.9762485 128.0 +-5.5499511 -0.93390316 -1.9765861 128.0 +-5.561152 -0.90073514 -1.9786117 128.0 +-5.561924 -0.86587125 -1.9769237 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-5.2559419 1.0406026 -1.9463221 128.0 +-5.267828 1.0765911 -1.9532804 128.0 +-5.2574534 1.1081195 -1.9518888 128.0 +-5.2450585 1.1391627 -1.9498012 128.0 +-5.2333956 1.1703004 -1.9480617 128.0 +-5.2252026 1.2021794 -1.9477137 128.0 +-5.2186403 1.234434 -1.9480617 128.0 +-5.2155223 1.2675397 -1.9498012 128.0 +-5.2076468 1.2995178 -1.9498012 128.0 +-5.2041159 1.3326106 -1.9515408 128.0 +-5.1958413 1.3645173 -1.9515408 128.0 +-5.1828446 1.3951533 -1.9498012 128.0 +-5.1696677 1.4256812 -1.9480617 128.0 +-5.156312 1.4561 -1.9463221 128.0 +-5.1373734 1.4848455 -1.942495 128.0 +-5.1227722 1.5147437 -1.9404075 128.0 +-5.1268415 1.5502211 -1.9456263 128.0 +-5.1235027 1.5835888 -1.9480617 128.0 +-5.108326 1.613301 -1.9459741 128.0 +-5.1090369 1.6480709 -1.9501492 128.0 +-5.0792394 1.6729318 -1.942495 128.0 +-5.0626588 1.7019733 -1.9400595 128.0 +-5.0397062 1.7287438 -1.9351887 128.0 +-5.0077672 1.7521986 -1.9268386 128.0 +-4.9889755 1.7800554 -1.9237075 128.0 +-0 0 -0 128.0 +-4.9887309 1.8492953 -1.9324054 128.0 +-5.0290318 1.8994259 -1.9529325 128.0 +-5.019032 1.9309213 -1.9536283 128.0 +-5.0088353 1.9623655 -1.9543241 128.0 +-4.9984417 1.9937574 -1.9550201 128.0 +-4.914022 1.9951017 -1.9261428 128.0 +-4.9094853 2.0284398 -1.9292741 128.0 +-4.9081812 2.063251 -1.933797 128.0 +-4.904048 2.0970161 -1.9372762 128.0 +-4.8936677 2.1281896 -1.9383199 128.0 +-4.8873763 2.1612113 -1.9411033 128.0 +-4.8842831 2.1957741 -1.9452783 128.0 +-4.8519602 2.2171259 -1.9376241 128.0 +-4.8297629 2.2429047 -1.934145 128.0 +-4.8235397 2.2760997 -1.9372762 128.0 +-4.790041 2.2963278 -1.9292741 128.0 +-4.7826033 2.3289609 -1.9320575 128.0 +-4.7606606 2.3545203 -1.9289262 128.0 +-4.7519879 2.3866334 -1.9313616 128.0 +-4.751451 2.4229896 -1.9372762 128.0 +-4.7314997 2.4495113 -1.9351887 128.0 +-4.713891 2.4771881 -1.934145 128.0 +-4.6986027 2.5060654 -1.934145 128.0 +-4.6889081 2.5379734 -1.9365804 128.0 +-4.6650305 2.5621812 -1.9331012 128.0 +-4.6451273 2.5884745 -1.9313616 128.0 +-4.6275253 2.6160045 -1.9306657 128.0 +-4.6105733 2.6438828 -1.9303179 128.0 +-4.5829196 2.6655214 -1.925447 128.0 +-4.5737448 2.69788 -1.9285783 128.0 +-4.5619316 2.7287817 -1.9306657 128.0 +-4.5459037 2.7572083 -1.9310137 128.0 +-4.5360866 2.7894709 -1.934145 128.0 +-4.5212717 2.8187399 -1.9351887 128.0 +-4.5023065 2.8454268 -1.9344928 128.0 +-4.4879198 2.8750224 -1.9358846 128.0 +-4.4670496 2.9004626 -1.9344928 128.0 +-4.443687 2.9242086 -1.9320575 128.0 +-4.4233212 2.9498587 -1.9310137 128.0 +-4.4012547 2.9743185 -1.9292741 128.0 +-4.3829217 3.0012681 -1.9292741 128.0 +-4.3628836 3.0270355 -1.9285783 128.0 +-4.3442278 3.0537486 -1.9285783 128.0 +-4.3254085 3.0803468 -1.9285783 128.0 +-4.3071866 3.1073778 -1.9289262 128.0 +-4.2850118 3.1315343 -1.9275346 128.0 +-4.2732506 3.1633475 -1.9310137 128.0 +-4.2515101 3.1878202 -1.9299699 128.0 +-4.2385883 3.2189517 -1.9331012 128.0 +-4.2053838 3.234607 -1.9268386 128.0 +-4.1898942 3.2638078 -1.9289262 128.0 +-4.1719966 3.2911975 -1.9299699 128.0 +-4.1553855 3.3196609 -1.9317095 128.0 +-4.1378531 3.3474548 -1.9331012 128.0 +-4.1223116 3.376941 -1.9355366 128.0 +-4.1051207 3.405165 -1.9372762 128.0 +-4.0870209 3.4327018 -1.9386679 128.0 +-4.0665956 3.4583223 -1.9390157 128.0 +-4.0460091 3.4838212 -1.9393637 128.0 +-4.0245566 3.5085814 -1.9393637 128.0 +-4.0022502 3.5325892 -1.9390157 128.0 +-3.9798002 3.5564551 -1.9386679 128.0 +-3.9446967 3.5688543 -1.9320575 128.0 +-3.9289451 3.5986917 -1.9351887 128.0 +-3.9074774 3.6233692 -1.9355366 128.0 +-3.8838046 3.6459932 -1.9348408 128.0 +-3.8538861 3.6626492 -1.9310137 128.0 +-3.8347173 3.6894779 -1.9327533 128.0 +-3.8187215 3.7194808 -1.9362324 128.0 +-3.7831461 3.7303324 -1.9296221 128.0 +-3.7588592 3.7521501 -1.9289262 128.0 +-3.7331285 3.7724771 -1.9275346 128.0 +-3.7040141 3.7892771 -1.9244033 128.0 +-3.6735318 3.8045127 -1.9205762 128.0 +-3.646884 3.8235888 -1.9188366 128.0 +-3.6207833 3.8431635 -1.9174449 128.0 +-3.6022422 3.8707995 -1.9202282 128.0 +-3.5733492 3.8873067 -1.9174449 128.0 +-3.55006 3.9098535 -1.9177928 128.0 +-3.5385187 3.9455245 -1.9247512 128.0 +-3.5142429 3.9671621 -1.9247512 128.0 +-3.4818113 3.979476 -1.9202282 128.0 +-3.4561024 3.9993463 -1.9195324 128.0 +-3.4296722 4.0183372 -1.9184886 128.0 +-3.4061599 4.0407395 -1.9191844 128.0 +-3.3837011 4.064446 -1.9205762 128.0 +-3.3533411 4.0786128 -1.9174449 128.0 +-3.3371139 4.1100311 -1.9226637 128.0 +-3.3153503 4.134819 -1.9247512 128.0 +-3.2835171 4.1469975 -1.9209241 128.0 +-3.2551234 4.163373 -1.9191844 128.0 +-3.2283707 4.1817832 -1.9184886 128.0 +-3.1992419 4.1970391 -1.9164011 128.0 +-3.1723018 4.2150917 -1.9157053 128.0 +-3.1480558 4.2367353 -1.9167491 128.0 +-3.1364138 4.2756295 -1.925795 128.0 +-3.1002252 4.2811232 -1.9195324 128.0 +-3.0640876 4.286335 -1.9132699 128.0 +-3.0496173 4.3219099 -1.9209241 128.0 +-3.0251837 4.3436184 -1.9223157 128.0 +-2.9990056 4.3628716 -1.9226637 128.0 +-2.9642868 4.3695517 -1.9174449 128.0 +-2.9389839 4.3899956 -1.9184886 128.0 +-2.9068263 4.4001226 -1.9150095 128.0 +-2.8782375 4.4155192 -1.9139657 128.0 +-2.8485553 4.4291534 -1.9122262 128.0 +-2.8233335 4.4497156 -1.9136178 128.0 +-2.7984636 4.4709291 -1.9153574 128.0 +-2.7704854 4.4872184 -1.9150095 128.0 +-2.7453375 4.5081372 -1.9167491 128.0 +-2.7132816 4.5176635 -1.9136178 128.0 +-2.6864657 4.53584 -1.9143137 128.0 +-2.657166 4.5498095 -1.9132699 128.0 +-2.6277959 4.5635905 -1.9122262 128.0 +-2.6025207 4.5845208 -1.9143137 128.0 +-2.5743415 4.6004033 -1.9143137 128.0 +-2.5487814 4.6210384 -1.9164011 128.0 +-2.5176938 4.6316481 -1.9143137 128.0 +-2.4892271 4.6470089 -1.9143137 128.0 +-2.4619789 4.6646829 -1.9153574 128.0 +-2.4341755 4.681365 -1.9160533 128.0 +-2.4054053 4.6962128 -1.9160533 128.0 +-2.3773887 4.7125583 -1.9167491 128.0 +-2.3463435 4.7228584 -1.9150095 128.0 +-2.3164968 4.7354817 -1.9143137 128.0 +-2.2853639 4.7453823 -1.9125741 128.0 +-2.2554009 4.7576213 -1.9118782 128.0 +-2.2249775 4.7688217 -1.9108344 128.0 +-2.1960657 4.783236 -1.9111824 128.0 +-2.1674466 4.7983298 -1.9118782 128.0 +-2.1368222 4.8089681 -1.9108344 128.0 +-2.1087756 4.8254256 -1.9122262 128.0 +-2.0776479 4.8348284 -1.9108344 128.0 +-2.0483074 4.8483491 -1.9111824 128.0 +-2.019598 4.8634238 -1.9122262 128.0 +-1.9914889 4.880065 -1.9139657 128.0 +-1.9608104 4.8904519 -1.9132699 128.0 +-1.9297363 4.8997741 -1.9122262 128.0 +-1.8979454 4.9071503 -1.9104866 128.0 +-1.8681326 4.91958 -1.9108344 128.0 +-1.8382387 4.9318285 -1.9111824 128.0 +-1.8089086 4.9456563 -1.9122262 128.0 +-1.7794778 4.9593101 -1.9132699 128.0 +-1.7502587 4.9736733 -1.9146615 128.0 +-1.7175688 4.9781146 -1.9122262 128.0 +-1.6827893 4.9761252 -1.9073553 128.0 +-1.6539928 4.9916968 -1.9094428 128.0 +-1.6169703 4.982132 -1.9017886 128.0 +-1.5928962 5.0125117 -1.9097908 128.0 +-1.5587709 5.0114479 -1.9056157 128.0 +-1.5285374 5.0227118 -1.9063115 128.0 +-1.4982244 5.0337934 -1.9070073 128.0 +-1.468618 5.0473928 -1.908747 128.0 +-1.4391574 5.0617204 -1.9108344 128.0 +-1.4078215 5.0695519 -1.9104866 128.0 +-1.3786497 5.0853343 -1.9132699 128.0 +-1.3478998 5.0955105 -1.9139657 128.0 +-1.3173109 5.1064086 -1.9150095 128.0 +-1.2854971 5.112577 -1.9143137 128.0 +-1.2538798 5.1194577 -1.9139657 128.0 +-1.222661 5.1279669 -1.9143137 128.0 +-1.1899036 5.1298923 -1.9122262 128.0 +-1.1586108 5.1380115 -1.9125741 128.0 +-1.127664 5.1477718 -1.9136178 128.0 +-1.0981994 5.1646814 -1.9174449 128.0 +-1.0668671 5.1731591 -1.9181408 128.0 +-1.0349215 5.1786885 -1.9177928 128.0 +-1.0024147 5.1812596 -1.9164011 128.0 +-0.97215432 5.1956067 -1.9195324 128.0 +-0.93992323 5.1996288 -1.9188366 128.0 +-0.90719664 5.2006803 -1.917097 128.0 +-0.87433738 5.2006011 -1.9150095 128.0 +-0.84151328 5.200315 -1.912922 128.0 +-0.8093012 5.2035275 -1.9122262 128.0 +-0.77749586 5.2093229 -1.9125741 128.0 +-0.74485493 5.2093549 -1.9108344 128.0 +-0.7122429 5.2091823 -1.9090949 128.0 +-0.68014544 5.2125249 -1.908747 128.0 +-0.64549518 5.1952009 -1.9007449 128.0 +-0.61360592 5.1990638 -1.9007449 128.0 +-0.58179742 5.2036629 -1.9010928 128.0 +-0.5494644 5.2034054 -1.8997011 128.0 +-0.51928455 5.2244048 -1.9063115 128.0 +-0.48426729 5.1957536 -1.8944824 128.0 +-0.45408008 5.2182417 -1.9017886 128.0 +-0.42235434 5.2246675 -1.9031802 128.0 +-0.39021885 5.2262259 -1.9028324 128.0 +-0.35948509 5.2481642 -1.9101386 128.0 +-0.32628813 5.2343636 -1.904224 128.0 +-0.29489785 5.249372 -1.9090949 128.0 +-0.26272938 5.2520189 -1.9094428 128.0 +-0.23008977 5.2441659 -1.9059637 128.0 +-0.19780241 5.2426686 -1.9049199 128.0 +-0.16507183 5.2259793 -1.8983095 128.0 +-0.13331006 5.2390776 -1.9028324 128.0 +-0.10121485 5.242609 -1.9038761 128.0 +-0.06905704 5.2440686 -1.904224 128.0 +-0.036955379 5.2556438 -1.9083991 128.0 +-0.0047034887 5.2510839 -1.9066595 128.0 +0.027357973 5.221951 -1.895874 128.0 +0.059714004 5.2488713 -1.9059637 128.0 +0.091370799 5.217473 -1.8944824 128.0 +0.12338289 5.216814 -1.8944824 128.0 +0.15539034 5.2159586 -1.8944824 128.0 +0.18857752 5.2476988 -1.9066595 128.0 +0.22029778 5.2352028 -1.9024844 128.0 +0.25241622 5.2337527 -1.9024844 128.0 +0.28432074 5.2283607 -1.9010928 128.0 +0.31724885 5.2405548 -1.9063115 128.0 +0.34939831 5.2385097 -1.9063115 128.0 +0.38167131 5.2381372 -1.9070073 128.0 +0.41447136 5.2441077 -1.9101386 128.0 +0.44664082 5.241466 -1.9101386 128.0 +0.47896451 5.2404943 -1.9108344 128.0 +0.51101929 5.2365236 -1.9104866 128.0 +0.54314035 5.2332892 -1.9104866 128.0 +0.57421398 5.2205396 -1.9070073 128.0 +0.60634416 5.2178493 -1.9073553 128.0 +0.63823473 5.2131 -1.9070073 128.0 +0.67056924 5.211875 -1.9080511 128.0 +0.70203394 5.2039461 -1.9066595 128.0 +0.73382026 5.1986122 -1.9063115 128.0 +0.76433516 5.1847372 -1.9028324 128.0 +0.79584849 5.1780963 -1.9021366 128.0 +0.82671589 5.1675611 -1.900049 128.0 +0.85840786 5.1623912 -1.900049 128.0 +0.8899079 5.1561031 -1.8997011 128.0 +0.92285097 5.1579285 -1.9024844 128.0 +0.95499498 5.1549344 -1.9035282 128.0 +0.98678374 5.1498981 -1.9038761 128.0 +1.0183643 5.1437464 -1.9038761 128.0 +1.0484033 5.130053 -1.9010928 128.0 +1.0783125 5.1161852 -1.8983095 128.0 +1.1092862 5.1076403 -1.8976136 128.0 +1.1399908 5.0979929 -1.8965698 128.0 +1.1706188 5.088161 -1.8955261 128.0 +1.2031132 5.0863566 -1.8976136 128.0 +1.2349646 5.0816112 -1.8986573 128.0 +1.26544 5.0712094 -1.8976136 128.0 +1.2979292 5.0687985 -1.8997011 128.0 +1.3304362 5.0661793 -1.9017886 128.0 +1.3605211 5.0542994 -1.9003969 128.0 +1.3940024 5.054894 -1.9038761 128.0 +1.4265224 5.0516582 -1.9059637 128.0 +1.4582734 5.0455122 -1.9070073 128.0 +1.4886726 5.0346713 -1.9063115 128.0 +1.5195367 5.0254421 -1.9063115 128.0 +1.5492355 5.0124412 -1.9049199 128.0 +1.5785494 4.9983711 -1.9031802 128.0 +1.6089011 4.987699 -1.9028324 128.0 +1.6403552 4.9804044 -1.9038761 128.0 +1.6690899 4.9649143 -1.9017886 128.0 +1.703784 4.9669938 -1.9066595 128.0 +1.735778 4.9608703 -1.9083991 128.0 +1.7630322 4.9412971 -1.9049199 128.0 +1.7923563 4.927743 -1.9038761 128.0 +1.8215804 4.9140158 -1.9028324 128.0 +1.8507036 4.9001155 -1.9017886 128.0 +1.879388 4.8851676 -1.9003969 128.0 +1.910354 4.8761625 -1.9014407 128.0 +1.9378049 4.858254 -1.8990053 128.0 +1.9675782 4.8462725 -1.8990053 128.0 +1.996919 4.8332419 -1.8986573 128.0 +2.0269012 4.8217621 -1.8990053 128.0 +2.0549736 4.8057866 -1.8976136 128.0 +2.0877893 4.8008242 -1.9007449 128.0 +2.1160693 4.7853513 -1.8997011 128.0 +2.144238 4.7697124 -1.8986573 128.0 +2.1746337 4.7590237 -1.8997011 128.0 +2.2033985 4.7447405 -1.8993531 128.0 +2.2360725 4.7387614 -1.9024844 128.0 +2.2679453 4.7308693 -1.9049199 128.0 +2.3018584 4.7269778 -1.9090949 128.0 +2.3299875 4.7110844 -1.9083991 128.0 +2.3647437 4.708427 -1.9132699 128.0 +2.3948679 4.6963339 -1.9143137 128.0 +2.4249325 4.6840482 -1.9153574 128.0 +2.4514463 4.6649318 -1.9136178 128.0 +2.4751682 4.6407042 -1.9097908 128.0 +2.5013642 4.6213074 -1.9080511 128.0 +2.52877 4.604229 -1.9073553 128.0 +2.554234 4.5837131 -1.9052678 128.0 +2.5804651 4.5646901 -1.9038761 128.0 +2.6140234 4.5585289 -1.9080511 128.0 +2.6329858 4.5270076 -1.9014407 128.0 +2.6640489 4.5164185 -1.9038761 128.0 +2.690748 4.4983783 -1.9031802 128.0 +2.715867 4.4777761 -1.9014407 128.0 +2.7526252 4.4761992 -1.9080511 128.0 +2.7790465 4.457634 -1.9073553 128.0 +2.8163667 4.4563465 -1.9143137 128.0 +2.8451748 4.4413495 -1.9153574 128.0 +2.866755 4.4151602 -1.9115303 128.0 +2.8927608 4.3959208 -1.9108344 128.0 +2.9191589 4.3773084 -1.9104866 128.0 +2.9391363 4.3492179 -1.9059637 128.0 +2.9620581 4.3256879 -1.9035282 128.0 +2.9858713 4.3035808 -1.9017886 128.0 +3.0111427 4.2836452 -1.9010928 128.0 +3.0362818 4.2635612 -1.9003969 128.0 +3.0612881 4.2433305 -1.8997011 128.0 +3.0911405 4.2297645 -1.9021366 128.0 +3.1203835 4.2152381 -1.904224 128.0 +3.1495645 4.2005124 -1.9063115 128.0 +3.1752789 4.181108 -1.9063115 128.0 +3.2020175 4.1630321 -1.9070073 128.0 +3.2303827 4.1470041 -1.908747 128.0 +3.2476358 4.1168017 -1.9038761 128.0 +3.2757616 4.1004586 -1.9056157 128.0 +3.2926025 4.0700793 -1.9007449 128.0 +0 0 -0 128.0 +3.3440969 4.0315318 -1.9017886 128.0 +3.3772147 4.0209861 -1.9066595 128.0 +3.4115436 4.0116129 -1.9122262 128.0 +3.4434369 3.9991283 -1.9164011 128.0 +3.4697587 3.9800441 -1.9174449 128.0 +3.499079 3.9643013 -1.9202282 128.0 +3.5183389 3.9371653 -1.9174449 128.0 +3.5298479 3.9016013 -1.9104866 128.0 +3.5423203 3.8674273 -1.904224 128.0 +3.5634332 3.84287 -1.9028324 128.0 +3.5940056 3.82845 -1.9066595 128.0 +3.6219509 3.8110816 -1.9090949 128.0 +3.6621711 3.8063481 -1.9181408 128.0 +3.6710632 3.7690337 -1.9104866 128.0 +3.6947789 3.7471049 -1.9108344 128.0 +3.7143886 3.7210467 -1.9090949 128.0 +3.7411499 3.7021413 -1.9111824 128.0 +3.7591014 3.67453 -1.908747 128.0 +3.7822516 3.6520464 -1.9090949 128.0 +3.8025534 3.6268296 -1.9080511 128.0 +3.8165452 3.5957162 -1.9038761 128.0 +3.8309853 3.5652068 -1.900049 128.0 +3.8500276 3.5390959 -1.8986573 128.0 +3.8758359 3.5191863 -1.9007449 128.0 +3.8966582 3.4947126 -1.9003969 128.0 +3.91873 3.4713588 -1.9007449 128.0 +3.9484246 3.4546549 -1.9049199 128.0 +3.9603243 3.4223957 -1.9003969 128.0 +3.9983668 3.4126348 -1.908747 128.0 +4.0249667 3.3928697 -1.9115303 128.0 +4.0449886 3.3675096 -1.9111824 128.0 +4.0612292 3.3390551 -1.9090949 128.0 +4.0750895 3.3087559 -1.9059637 128.0 +4.0887308 3.2784123 -1.9028324 128.0 +4.1087694 3.2532628 -1.9028324 128.0 +4.1345634 3.2326088 -1.9056157 128.0 +4.1572895 3.2094698 -1.9070073 128.0 +4.1880903 3.1924236 -1.9122262 128.0 +4.2068505 3.1661022 -1.9118782 128.0 +4.2231874 3.1379938 -1.9104866 128.0 +4.2325335 3.1048152 -1.9059637 128.0 +4.2628965 3.0870321 -1.9111824 128.0 +4.2779436 3.0580921 -1.9094428 128.0 +4.3019905 3.035568 -1.9118782 128.0 +4.3236132 3.0112569 -1.9132699 128.0 +4.3420086 2.9846711 -1.9132699 128.0 +4.3625684 2.9595513 -1.9143137 128.0 +4.3759704 2.929599 -1.9122262 128.0 +4.3954287 2.9037266 -1.912922 128.0 +4.4210176 2.88182 -1.9164011 128.0 +4.4307308 2.8495693 -1.912922 128.0 +4.4425898 2.8188145 -1.9104866 128.0 +4.468545 2.7969718 -1.9143137 128.0 +4.4800377 2.7660542 -1.9118782 128.0 +4.4913197 2.735101 -1.9094428 128.0 +4.5039983 2.7050786 -1.9077032 128.0 +4.518898 2.6764364 -1.9070073 128.0 +4.5319967 2.6467681 -1.9056157 128.0 +4.5497766 2.6198459 -1.9063115 128.0 +4.5747356 2.5969689 -1.9101386 128.0 +4.58322 2.5647311 -1.9070073 128.0 +4.6021547 2.5383711 -1.9083991 128.0 +4.6168199 2.5096376 -1.9080511 128.0 +4.6321316 2.481262 -1.9080511 128.0 +4.6489277 2.4536679 -1.908747 128.0 +4.6630635 2.424664 -1.9083991 128.0 +4.6820259 2.3981426 -1.9101386 128.0 +4.6991639 2.3706353 -1.9111824 128.0 +4.7136216 2.3417571 -1.9111824 128.0 +4.7405353 2.3189676 -1.9164011 128.0 +4.7529855 2.2890234 -1.9157053 128.0 +4.77033 2.2614222 -1.917097 128.0 +4.7764688 2.2285435 -1.9139657 128.0 +4.7960176 2.2019305 -1.9164011 128.0 +4.7957664 2.1662893 -1.9108344 128.0 +4.8063979 2.1356807 -1.9097908 128.0 +4.8194118 2.106149 -1.9097908 128.0 +4.838274 2.0791278 -1.9122262 128.0 +4.8552589 2.0512249 -1.9139657 128.0 +4.8712173 2.0228324 -1.9153574 128.0 +4.8948226 1.9975076 -1.9198804 128.0 +4.904376 1.9663898 -1.9188366 128.0 +4.9364142 1.9441574 -1.9268386 128.0 +4.9220161 1.9036915 -1.9164011 128.0 +4.9336042 1.8734547 -1.9164011 128.0 +4.9511566 1.8454381 -1.9188366 128.0 +4.957984 1.8134145 -1.917097 128.0 +4.9672527 1.7823257 -1.9164011 128.0 +4.9834018 1.7536799 -1.9184886 128.0 +4.9967275 1.723986 -1.9195324 128.0 +5.0063233 1.6929941 -1.9191844 128.0 +5.015727 1.6619493 -1.9188366 128.0 +5.0302892 1.6325881 -1.9205762 128.0 +5.048254 1.6042459 -1.9237075 128.0 +5.0553164 1.5724055 -1.9226637 128.0 +5.0657663 1.5416297 -1.9230115 128.0 +5.0715361 1.5094488 -1.9216199 128.0 +5.0789018 1.4777786 -1.9209241 128.0 +5.0923829 1.4478681 -1.9226637 128.0 +5.1020741 1.4168453 -1.9230115 128.0 +5.1133866 1.3862482 -1.9240553 128.0 +5.1190767 1.3541284 -1.9230115 128.0 +5.1281972 1.3229268 -1.9233595 128.0 +5.1280346 1.2893801 -1.9202282 128.0 +5.1413136 1.2592278 -1.9223157 128.0 +5.1434712 1.2263541 -1.9202282 128.0 +5.1673388 1.1985807 -1.9264908 128.0 +5.1736813 1.166646 -1.9261428 128.0 +5.1816583 1.1350794 -1.9264908 128.0 +5.1949449 1.1046275 -1.9289262 128.0 +5.1988702 1.0721636 -1.9278824 128.0 +5.2025928 1.0396932 -1.9268386 128.0 +5.2005897 1.0061502 -1.9237075 128.0 +5.2066655 0.97422105 -1.9237075 128.0 +5.2097774 0.94175547 -1.9226637 128.0 +5.2200761 0.91057569 -1.9244033 128.0 +5.2264895 0.87868398 -1.9247512 128.0 +5.2410378 0.84809393 -1.9282304 128.0 +5.2396579 0.81491238 -1.925795 128.0 +5.2436323 0.78260893 -1.925447 128.0 +5.2566886 0.75161237 -1.9285783 128.0 +5.2760639 0.7213726 -1.934145 128.0 +5.2831798 0.689349 -1.9351887 128.0 +5.2984748 0.65830374 -1.9393637 128.0 +5.3014836 0.62567085 -1.9390157 128.0 +5.3052225 0.59312975 -1.9390157 128.0 +5.3050327 0.56017339 -1.9376241 128.0 +5.2962418 0.52640897 -1.9331012 128.0 +5.2937708 0.49338111 -1.9310137 128.0 +5.2957644 0.46080878 -1.9306657 128.0 +5.3078375 0.4290593 -1.934145 128.0 +5.3178496 0.39703974 -1.9369283 128.0 +5.318315 0.36427483 -1.9362324 128.0 +5.3120284 0.3311123 -1.9331012 128.0 +5.313024 0.29845968 -1.9327533 128.0 +5.3147554 0.26585397 -1.9327533 128.0 +5.3172231 0.23327912 -1.9331012 128.0 +5.3063755 0.20019202 -1.9285783 128.0 +5.3224969 0.16809922 -1.934145 128.0 +5.3487329 0.13607617 -1.9435388 128.0 +5.3400941 0.10307549 -1.9400595 128.0 +5.3368759 0.070258789 -1.9386679 128.0 +5.3447065 0.037562106 -1.9414512 128.0 +5.3392115 0.0047630905 -1.9393637 128.0 +5.3428903 -0.028018259 -1.9407554 128.0 +5.3154311 -0.060485832 -1.9306657 128.0 +5.3187094 -0.093166061 -1.9320575 128.0 +5.3302221 -0.12609015 -1.9365804 128.0 +5.3237257 -0.15862466 -1.9344928 128.0 +5.3329582 -0.19166006 -1.9383199 128.0 +5.3391752 -0.22469585 -1.9411033 128.0 +5.3470602 -0.25790587 -1.9445825 128.0 +5.3481855 -0.29086331 -1.9456263 128.0 +5.3406854 -0.32333252 -1.9435388 128.0 +5.3386006 -0.35609627 -1.9435388 128.0 +5.3363152 -0.38884661 -1.9435388 128.0 +5.3254175 -0.42091566 -1.9404075 128.0 +5.3189983 -0.45326465 -1.9390157 128.0 +5.3254533 -0.48674825 -1.942495 128.0 +5.3158345 -0.5187766 -1.9400595 128.0 +5.3125515 -0.55138421 -1.9400595 128.0 +5.3062725 -0.58366287 -1.9390157 128.0 +5.297935 -0.61566848 -1.9372762 128.0 +5.2875438 -0.64736545 -1.9348408 128.0 +5.3011389 -0.68207401 -1.9414512 128.0 +5.293138 -0.71408617 -1.9400595 128.0 +5.2867999 -0.74628836 -1.9393637 128.0 +5.2895412 -0.779809 -1.942147 128.0 +5.2883635 -0.81282079 -1.9435388 128.0 +5.2823505 -0.84510601 -1.9431908 128.0 +5.2816896 -0.87827188 -1.9449304 128.0 +5.2808204 -0.91146147 -1.9466699 128.0 +5.2566719 -0.94054037 -1.9397117 128.0 +5.244349 -0.97158015 -1.9372762 128.0 +5.243813 -1.0048004 -1.9393637 128.0 +5.2366295 -1.0367746 -1.9390157 128.0 +5.2310882 -1.0690744 -1.9393637 128.0 +5.2280989 -1.1019258 -1.9407554 128.0 +5.2249041 -1.1347808 -1.942147 128.0 +5.224247 -1.1682523 -1.9445825 128.0 +5.2078443 -1.1981817 -1.9411033 128.0 +5.2086048 -1.2320579 -1.9442346 128.0 +5.20368 -1.2646589 -1.9452783 128.0 +5.1985507 -1.2972459 -1.9463221 128.0 +5.1859527 -1.3279554 -1.9445825 128.0 +5.1767998 -1.3595124 -1.9442346 128.0 +5.1710763 -1.3919828 -1.9452783 128.0 +5.1479783 -1.4196947 -1.9397117 128.0 +5.138268 -1.4510003 -1.9393637 128.0 +5.1454792 -1.4871901 -1.9456263 128.0 +5.1236711 -1.5150098 -1.9407554 128.0 +5.1160736 -1.5469625 -1.9414512 128.0 +5.0993199 -1.5761087 -1.9386679 128.0 +5.1011744 -1.6110408 -1.9431908 128.0 +5.1018996 -1.6457669 -1.9473659 128.0 +5.0872531 -1.6755731 -1.9456263 128.0 +5.0795422 -1.7076532 -1.9466699 128.0 +5.0698552 -1.7390929 -1.9470179 128.0 +5.0582042 -1.7698584 -1.9466699 128.0 +5.0446005 -1.7999159 -1.9456263 128.0 +5.0325804 -1.8305144 -1.9452783 128.0 +5.0168586 -1.8597291 -1.9435388 128.0 +4.9930754 -1.8858367 -1.9386679 128.0 +4.971786 -1.9127331 -1.9348408 128.0 +4.9337707 -1.932938 -1.9244033 128.0 +4.8939538 -1.9520537 -1.9132699 128.0 +4.8532209 -1.970401 -1.9017886 128.0 +4.7717271 -1.9714876 -1.8739552 128.0 +4.6904054 -1.9716494 -1.8461218 128.0 +4.6342602 -1.9815835 -1.828378 128.0 +4.5695748 -1.9871628 -1.807155 128.0 +4.5410061 -2.0079563 -1.8005446 128.0 +4.4542146 -2.0023215 -1.7702757 128.0 +4.4213815 -2.0202584 -1.7619257 128.0 +4.3612895 -2.0252259 -1.7424424 128.0 +4.3191085 -2.0379388 -1.7302653 128.0 +4.2718649 -2.0477779 -1.7160006 128.0 +4.2381492 -2.0636849 -1.7073027 128.0 +4.2035599 -2.0788398 -1.6982569 128.0 +4.1597304 -2.0890179 -1.6853839 128.0 +4.1134295 -2.0974588 -1.6714672 128.0 +4.0721784 -2.1079979 -1.6596379 128.0 +4.0458903 -2.1259637 -1.6540713 128.0 +4.0435219 -2.156487 -1.6585943 128.0 +4.0236187 -2.1776853 -1.6558108 128.0 +4.0192189 -2.2072992 -1.6596379 128.0 +4.0285277 -2.2447021 -1.6693796 128.0 +4.0154943 -2.26984 -1.6697276 128.0 +3.8998423 -2.2361171 -1.6262379 128.0 +3.8512049 -2.239728 -1.6112775 128.0 +3.8252785 -2.2561691 -1.6060586 128.0 +3.8387148 -2.2959671 -1.6178879 128.0 +3.8381803 -2.3277459 -1.6238024 128.0 +3.3215692 -2.0422401 -1.4049623 128.0 +3.4911382 -2.1762044 -1.4846354 128.0 +3.2716928 -2.0673149 -1.3941768 128.0 +3.3102524 -2.1202335 -1.4167914 128.0 +3.2515807 -2.110883 -1.3966123 128.0 +3.2362182 -2.1292479 -1.3955685 128.0 +0 -0 -0 128.0 +3.2152822 -2.1724768 -1.3980039 128.0 +3.0750487 -2.1052666 -1.3409454 128.0 +3.0043106 -2.0840001 -1.3148516 128.0 +2.9592583 -2.0797436 -1.3002391 128.0 +2.9105549 -2.0722938 -1.2838869 128.0 +2.8726983 -2.0720069 -1.2724056 128.0 +2.8319285 -2.0691209 -1.2595327 128.0 +2.79055 -2.0652552 -1.2463118 128.0 +2.760576 -2.0693994 -1.2383097 128.0 +2.7261779 -2.0698509 -1.2282201 128.0 +2.6993091 -2.0756762 -1.2216097 128.0 +2.6665561 -2.0766399 -1.2122159 128.0 +2.629478 -2.0737953 -1.2007346 128.0 +2.5983951 -2.0752573 -1.1920366 128.0 +2.5987301 -2.1017783 -1.1982992 128.0 +2.5814342 -2.1141186 -1.1962117 128.0 +2.559756 -2.1227336 -1.1920366 128.0 +2.5079234 -2.1058314 -1.1732491 128.0 +2.4499695 -2.0829067 -1.1513304 128.0 +2.4222262 -2.0850506 -1.144024 128.0 +2.386071 -2.0795381 -1.1325427 128.0 +2.3606164 -2.0829697 -1.1262803 128.0 +2.3498881 -2.0992894 -1.127324 128.0 +2.3327923 -2.1098938 -1.1252365 128.0 +2.3253319 -2.129235 -1.1280198 128.0 +2.3087869 -2.1402748 -1.1262803 128.0 +2.3010781 -2.1595354 -1.1290636 128.0 +2.2592478 -2.1464818 -1.1144511 128.0 +2.2115862 -2.1271458 -1.0967072 128.0 +2.1864064 -2.1288986 -1.0904447 128.0 +2.167963 -2.1370068 -1.0876614 128.0 +2.1342452 -2.1297321 -1.0768759 128.0 +2.1138849 -2.1354556 -1.0730488 128.0 +2.1000869 -2.1477153 -1.072701 128.0 +2.0875204 -2.1612353 -1.0730488 128.0 +2.0819831 -2.1821461 -1.0772239 128.0 +2.0524859 -2.1778169 -1.0685259 128.0 +2.0512166 -2.2034123 -1.0751363 128.0 +2.0376582 -2.2159569 -1.0751363 128.0 +2.0076411 -2.2103679 -1.0660905 128.0 +1.9927891 -2.2212486 -1.0653946 128.0 +1.9872019 -2.2425594 -1.0699176 128.0 +1.9826622 -2.265296 -1.0751363 128.0 +1.965661 -2.2738714 -1.0733968 128.0 +1.9534973 -2.2880294 -1.0744405 128.0 +1.9345887 -2.2942371 -1.0716572 128.0 +1.9234735 -2.3096676 -1.0733968 128.0 +1.9098607 -2.3221505 -1.0737447 128.0 +1.8949854 -2.3330977 -1.0733968 128.0 +1.8818069 -2.3461442 -1.0740926 128.0 +1.8673757 -2.3576467 -1.0740926 128.0 +1.8505652 -2.3661053 -1.072701 128.0 +1.834294 -2.3751891 -1.0716572 128.0 +1.8219583 -2.3893824 -1.0730488 128.0 +1.8004998 -2.3915262 -1.0688739 128.0 +1.7869097 -2.4040341 -1.0695697 128.0 +1.7710165 -2.4134409 -1.0688739 128.0 +1.7561746 -2.4242623 -1.0688739 128.0 +1.7401764 -2.4334667 -1.0681781 128.0 +1.7338579 -2.4563568 -1.0737447 128.0 +1.7058979 -2.4484825 -1.0653946 128.0 +1.6897804 -2.4573584 -1.0646988 128.0 +1.6725658 -2.4645765 -1.0633072 128.0 +1.6563692 -2.4732344 -1.0626113 128.0 +1.6437455 -2.487263 -1.064351 128.0 +1.6320355 -2.5028005 -1.0667863 128.0 +1.6191827 -2.5167105 -1.0685259 128.0 +1.6122458 -2.5400577 -1.0744405 128.0 +1.6135362 -2.5769255 -1.0862697 128.0 +1.5829234 -2.5628426 -1.0758322 128.0 +1.5842291 -2.6005363 -1.0880094 128.0 +1.5667951 -2.6077967 -1.0869656 128.0 +1.5636593 -2.6391437 -1.0963594 128.0 +1.5446006 -2.6438303 -1.0942718 128.0 +1.5213346 -2.6410697 -1.089053 128.0 +1.50325 -2.6470931 -1.0876614 128.0 +1.4814878 -2.6464481 -1.0834864 128.0 +1.4625058 -2.6505623 -1.0813988 128.0 +1.4475574 -2.6619575 -1.0824426 128.0 +1.4272143 -2.6633508 -1.0793114 128.0 +1.4082208 -2.6670825 -1.0772239 128.0 +1.3922617 -2.6765049 -1.0775717 128.0 +1.3694046 -2.6724794 -1.072353 128.0 +1.3576237 -2.6900401 -1.0761801 128.0 +1.3473465 -2.7109153 -1.0813988 128.0 +1.3459233 -2.7502947 -1.0942718 128.0 +1.3200771 -2.7399166 -1.0866176 128.0 +1.3156843 -2.7742293 -1.097403 128.0 +1.2934865 -2.771204 -1.0928801 128.0 +1.2643377 -2.7526734 -1.0820947 128.0 +1.2578391 -2.7834506 -1.0914885 128.0 +1.2430196 -2.796257 -1.093576 128.0 +1.2138309 -2.7763386 -1.0824426 128.0 +1.2063918 -2.8061316 -1.0914885 128.0 +1.1949856 -2.8273003 -1.0970552 128.0 +1.1750996 -2.8285179 -1.0946198 128.0 +1.1517034 -2.8209171 -1.0887052 128.0 +1.1427419 -2.8488171 -1.0970552 128.0 +1.1221501 -2.8479238 -1.0939239 128.0 +1.1026264 -2.8495085 -1.0918365 128.0 +1.080132 -2.8430724 -1.0866176 128.0 +1.072157 -2.8751247 -1.0967072 128.0 +1.0396904 -2.8411441 -1.080703 128.0 +1.0193899 -2.8395274 -1.0775717 128.0 +1.0035027 -2.8501508 -1.0793114 128.0 +0.98507893 -2.8535957 -1.0782676 128.0 +0.97115272 -2.8702445 -1.0824426 128.0 +0.95882732 -2.8921695 -1.0887052 128.0 +0.9326759 -2.8721361 -1.0786155 128.0 +0.91304904 -2.8715498 -1.0761801 128.0 +0.89624709 -2.8797841 -1.0772239 128.0 +0.88674289 -2.9121382 -1.0876614 128.0 +0.86404717 -2.9013491 -1.0813988 128.0 +0.84910762 -2.9164989 -1.0852259 128.0 +0.82914674 -2.9144394 -1.0824426 128.0 +0.81952024 -2.9492841 -1.0939239 128.0 +0.79135871 -2.9171555 -1.0796593 128.0 +0.77128851 -2.9137986 -1.0765281 128.0 +0.75152332 -2.9112134 -1.0737447 128.0 +0.73798621 -2.9330461 -1.0803552 128.0 +0.72175813 -2.9448044 -1.0831385 128.0 +0.70041698 -2.9354975 -1.0779197 128.0 +0.68366176 -2.9452198 -1.0800072 128.0 +0.66866779 -2.9630783 -1.0852259 128.0 +0.6554845 -2.9900217 -1.0939239 128.0 +0.63673615 -2.9921534 -1.0932281 128.0 +0.61533809 -2.981312 -1.0876614 128.0 +0.59813464 -2.9905479 -1.0897489 128.0 +0.580841 -2.9996846 -1.0918365 128.0 +0.56190765 -3.0004275 -1.0907927 128.0 +0.54365337 -3.0047414 -1.0911406 128.0 +0.53469986 -3.0625138 -1.1116678 128.0 +0.5182271 -3.0796058 -1.1168865 128.0 +0.49947077 -3.0836532 -1.1172343 128.0 +0.4793894 -3.0792484 -1.1144511 128.0 +0.45951915 -3.0756409 -1.1120156 128.0 +0.43374881 -3.0301406 -1.0939239 128.0 +0.41476762 -3.0299582 -1.0928801 128.0 +0.39628947 -3.0333757 -1.0932281 128.0 +0.38228524 -3.0729661 -1.1071448 128.0 +0.36375174 -3.0780473 -1.1081885 128.0 +0.34371471 -3.069972 -1.1043614 128.0 +0.31848517 -3.0114198 -1.0817468 128.0 +0.29944631 -3.0077195 -1.0796593 128.0 +0.2841104 -3.0431063 -1.0921843 128.0 +0.26810816 -3.0756147 -1.1036656 128.0 +0.25051221 -3.0930882 -1.1095802 128.0 +0.23194627 -3.1001768 -1.1116678 128.0 +0.21157846 -3.0818992 -1.1043614 128.0 +0.19254805 -3.0812681 -1.1036656 128.0 +0.17327146 -3.075839 -1.1012301 128.0 +0.15434857 -3.0759079 -1.1008823 128.0 +0.13539048 -3.0749238 -1.1001865 128.0 +0.11676653 -3.0822549 -1.1026219 128.0 +0.097969539 -3.0866616 -1.1040136 128.0 +0.079217434 -3.0947022 -1.1067969 128.0 +0.060370333 -3.1026289 -1.1095802 128.0 +0.041380379 -3.1066906 -1.1109719 128.0 +0.022291757 -3.1031361 -1.1095802 128.0 +0.0032635329 -3.1219649 -1.1165385 128.0 +-0.015913019 -3.1256764 -1.1179302 128.0 +-0.034928448 -3.1114578 -1.1127114 128.0 +-0.053869732 -3.1027486 -1.1095802 128.0 +-0.073018692 -3.1070459 -1.1113198 128.0 +-0.092138045 -3.1084137 -1.1120156 128.0 +-0.11107368 -3.1040421 -1.110624 128.0 +-0.13055348 -3.1136057 -1.1144511 128.0 +-0.15033628 -3.1267924 -1.1196698 128.0 +-0.17227924 -3.1763623 -1.1384574 128.0 +-0.19836117 -3.283798 -1.1788158 128.0 +-0.29712921 -4.4574227 -1.6158004 128.0 +-0.23734511 -3.263351 -1.1722053 128.0 +-0.26136407 -3.3123014 -1.190993 128.0 +-0.27426118 -3.223762 -1.1586366 128.0 +-0.29275361 -3.2080142 -1.1534178 128.0 +-0.31060684 -3.1874959 -1.1464595 128.0 +-0.32977116 -3.1818001 -1.1450678 128.0 +-0.50067657 -4.5533113 -1.6578984 128.0 +-0.36857507 -3.1756513 -1.144372 128.0 +-0.38691223 -3.1640246 -1.1408927 128.0 +-0.41003412 -3.1904159 -1.1516782 128.0 +-0.62520069 -4.6353483 -1.6937339 128.0 +-0.46700358 -3.3113916 -1.198995 128.0 +-0.68518603 -4.6486588 -1.701736 128.0 +-0.71098685 -4.6267614 -1.6951256 128.0 +-0.73847294 -4.6167574 -1.6930381 128.0 +-0.76570904 -4.6056662 -1.6906027 128.0 +-0.79219824 -4.5907187 -1.6867756 128.0 +-0.82035142 -4.5857716 -1.6867756 128.0 +-0.84847379 -4.5806518 -1.6867756 128.0 +-0.8739146 -4.5615482 -1.6815568 128.0 +-0.90279871 -4.5606985 -1.6832963 128.0 +-0.9305777 -4.5541544 -1.6829485 128.0 +-0.95792329 -4.5456071 -1.6819047 128.0 +-0.98798752 -4.5497208 -1.6857318 128.0 +-1.013428 -4.5325947 -1.6815568 128.0 +-1.0485845 -4.5582671 -1.6937339 128.0 +-1.0683255 -4.5170798 -1.680513 128.0 +-1.0962434 -4.5113506 -1.6808609 128.0 +-1.1154979 -4.4708848 -1.6679879 128.0 +-1.141746 -4.4594154 -1.6662484 128.0 +-1.1145095 -4.2446856 -1.5865753 128.0 +-1.1078522 -4.1164641 -1.5399543 128.0 +-1.1792357 -4.2767797 -1.6043191 128.0 +-1.2561963 -4.4489985 -1.6735547 128.0 +-1.2915469 -4.4691253 -1.6843401 128.0 +-1.3152202 -4.4485307 -1.6794692 128.0 +-1.3449351 -4.4484529 -1.6826005 128.0 +-1.3735901 -4.4445949 -1.6843401 128.0 +-1.3968803 -4.4235682 -1.6794692 128.0 +-1.4242846 -4.4158058 -1.6798172 128.0 +-1.4492983 -4.4007506 -1.6773818 128.0 +-1.478067 -4.3971066 -1.6794692 128.0 +-1.5104983 -4.4039159 -1.6857318 128.0 +-1.5415195 -4.4060678 -1.6902547 128.0 +-1.571678 -4.4053555 -1.6937339 128.0 +-1.598038 -4.393867 -1.6930381 128.0 +-1.6239899 -4.3813419 -1.6919943 128.0 +-1.6501799 -4.3695412 -1.6912985 128.0 +-1.6786439 -4.363708 -1.6930381 128.0 +-1.6971751 -4.3323774 -1.684688 128.0 +-1.1815788 -2.9635389 -1.1419365 128.0 +-1.1944475 -2.9432042 -1.1367178 128.0 +-1.2167825 -2.9462166 -1.1408927 128.0 +-1.8186164 -4.326582 -1.6996485 128.0 +-1.8436544 -4.3118939 -1.6982569 128.0 +-1.8584806 -4.2738509 -1.6874714 128.0 +-1.8945323 -4.284658 -1.6965172 128.0 +-1.9134796 -4.2567077 -1.6899068 128.0 +-1.5583019 -3.4110129 -1.3496433 128.0 +-1.5764368 -3.3954356 -1.3472079 128.0 +-1.5856333 -3.3611131 -1.3371183 128.0 +-1.5981175 -3.3344142 -1.33016 128.0 +-1.6123873 -3.3119035 -1.3249412 128.0 +-1.627273 -3.2910242 -1.3204182 128.0 +-1.6558548 -3.2977316 -1.3273766 128.0 +-1.6828755 -3.3008711 -1.3329433 128.0 +-1.7117217 -3.3071325 -1.3399017 128.0 +-1.7393988 -3.3106742 -1.3458163 128.0 +-1.7817494 -3.3412952 -1.3632121 128.0 +-2.1919718 -4.0499992 -1.6669443 128.0 +-2.2127173 -4.0290785 -1.663813 128.0 +-2.246985 -4.0326219 -1.6711192 128.0 +-2.2730708 -4.0212069 -1.672163 128.0 +-2.2879043 -3.9901068 -1.6648567 128.0 +-2.3161163 -3.9824758 -1.6676401 128.0 +-2.3338377 -3.9568858 -1.6627692 128.0 +-2.3696272 -3.9617984 -1.6711192 128.0 +-2.400701 -3.958405 -1.6759901 128.0 +-2.4254355 -3.9443986 -1.676338 128.0 +-2.4381802 -3.9111464 -1.6683359 128.0 +-2.4676442 -3.9048288 -1.672163 128.0 +-2.492569 -3.8911927 -1.6728588 128.0 +-2.5148659 -3.8734667 -1.671815 128.0 +-2.5380702 -3.8571799 -1.6714672 128.0 +-2.5471203 -3.8196974 -1.6617255 128.0 +-2.5841625 -3.8241901 -1.6707714 128.0 +-2.6155264 -3.8198636 -1.6759901 128.0 +-2.6244812 -3.7829485 -1.6665963 128.0 +-2.6320035 -3.7445345 -1.6565067 128.0 +-2.6679862 -3.7466395 -1.6648567 128.0 +-2.6909249 -3.7301984 -1.6648567 128.0 +-2.711549 -3.7105899 -1.663465 128.0 +-2.7298019 -3.687855 -1.6606817 128.0 +-2.7456276 -3.6620362 -1.6565067 128.0 +-2.7652099 -3.6413879 -1.6547672 128.0 +-2.7840705 -3.6198943 -1.6526796 128.0 +-2.8021953 -3.5975671 -1.6502442 128.0 +-2.3299377 -2.954025 -1.3541663 128.0 +-2.3433368 -2.9338145 -1.351383 128.0 +-2.365423 -2.9244821 -1.3538184 128.0 +-2.9068739 -3.5487425 -1.6603338 128.0 +-2.9226067 -3.5236249 -1.6568546 128.0 +-2.9477911 -3.5099325 -1.6589421 128.0 +-2.9577293 -3.4782121 -1.6523317 128.0 +-2.9796274 -3.4607086 -1.6526796 128.0 +-3.0075843 -3.4501328 -1.6565067 128.0 +-3.0342824 -3.4379385 -1.6596379 128.0 +-3.0534456 -3.4171591 -1.6585943 128.0 +-3.0579979 -3.3802869 -1.6495483 128.0 +-3.0742476 -3.3566213 -1.647113 128.0 +-3.1005242 -3.3438807 -1.6502442 128.0 +-3.122267 -3.32616 -1.6509401 128.0 +-3.1464932 -3.3110161 -1.6530275 128.0 +-3.1641495 -3.2889454 -1.6516359 128.0 +-3.1698761 -3.2546966 -1.6439817 128.0 +-3.2003212 -3.2458642 -1.6495483 128.0 +-3.2135525 -3.2195325 -1.6460692 128.0 +-3.2352462 -3.2017317 -1.647113 128.0 +-3.2595248 -3.1864069 -1.6495483 128.0 +-3.280364 -3.1676488 -1.6502442 128.0 +-3.2977028 -3.1455207 -1.6492004 128.0 +-3.3271792 -3.1348681 -1.6544192 128.0 +-3.3484111 -3.1163096 -1.655463 128.0 +-3.3716114 -3.0995114 -1.6575505 128.0 +-3.3891778 -3.0775051 -1.6568546 128.0 +-3.4191666 -3.0666645 -1.6624213 128.0 +-3.4337075 -3.041898 -1.6603338 128.0 +-3.4699504 -3.0362017 -1.6690317 128.0 +-3.4956098 -3.0209818 -1.6725109 128.0 +-3.5147936 -3.0000846 -1.6728588 128.0 +-3.5446069 -2.9881272 -1.6784256 128.0 +-3.5693607 -2.971719 -1.6815568 128.0 +-3.5831819 -2.9461904 -1.6794692 128.0 +-3.612839 -2.9336016 -1.6850359 128.0 +-3.6293082 -2.9102058 -1.6843401 128.0 +-3.6500371 -2.8902092 -1.6857318 128.0 +-3.671396 -2.870645 -1.6874714 128.0 +-3.689683 -2.8486366 -1.6878192 128.0 +-3.705601 -2.8248069 -1.6871234 128.0 +-3.7266099 -2.8048348 -1.688863 128.0 +-3.7460079 -2.7835929 -1.6899068 128.0 +-3.772846 -2.7677622 -1.6944298 128.0 +-3.7927954 -2.7467592 -1.6958214 128.0 +-3.8217828 -2.732156 -1.7013881 128.0 +-3.8400073 -2.7097352 -1.7020839 128.0 +-3.8504062 -2.6818373 -1.6993005 128.0 +-3.8737435 -2.6629393 -1.7024318 128.0 +-3.8962178 -2.6433296 -1.7052152 128.0 +-3.9193761 -2.6240656 -1.7083464 128.0 +-3.9487033 -2.6087494 -1.7142611 128.0 +-3.9717057 -2.5890777 -1.7173923 128.0 +-3.9914603 -2.5671937 -1.7191318 128.0 +-4.0095124 -2.5441606 -1.7201756 128.0 +-4.0322008 -2.5239861 -1.7233069 128.0 +-4.0635686 -2.5090444 -1.7302653 128.0 +-4.0860949 -2.4884508 -1.7333965 128.0 +-4.1117363 -2.469605 -1.7379194 128.0 +-4.1397204 -2.4519708 -1.743486 128.0 +-4.1644034 -2.4321952 -1.7476611 128.0 +-4.1833115 -2.4089355 -1.7494007 128.0 +-4.2151375 -2.3929377 -1.756707 128.0 +-4.2526517 -2.379843 -1.7664486 128.0 +-4.2679949 -2.354157 -1.7667966 128.0 +-4.2716503 -2.3221064 -1.7622737 128.0 +-4.2874708 -2.2967372 -1.7629695 128.0 +-4.3288474 -2.2848217 -1.7744508 128.0 +-4.3602548 -2.2672963 -1.781757 128.0 +-4.3757539 -2.241354 -1.7824528 128.0 +-4.4028182 -2.2212162 -1.7880195 128.0 +-4.4138451 -2.1929083 -1.7869759 128.0 +-4.3952122 -2.1501365 -1.773755 128.0 +-4.3745317 -2.106863 -1.7598382 128.0 +-4.3780575 -2.0755663 -1.7560111 128.0 +-4.3847623 -2.0458903 -1.7535757 128.0 +-4.4262047 -2.0322411 -1.7654049 128.0 +-4.4590988 -2.0143023 -1.773755 128.0 +-4.509932 -2.0040264 -1.7894112 128.0 +-4.5522141 -1.9894497 -1.8015883 128.0 +-4.6160221 -1.983678 -1.8224634 128.0 +-4.6721554 -1.9739153 -1.8402072 128.0 +-4.7049608 -1.953835 -1.8485572 128.0 +-4.8132205 -1.9642277 -1.887176 128.0 +-4.8852305 -1.9587182 -1.9111824 128.0 +-4.9503722 -1.9496512 -1.9324054 128.0 +-4.9910998 -1.9303937 -1.9438866 128.0 +-5.0282698 -1.9093788 -1.9539763 128.0 +-5.0583405 -1.8853621 -1.9612825 128.0 +-5.0777388 -1.8571858 -1.9644138 128.0 +-5.0908036 -1.8266274 -1.9651096 128.0 +-5.1107602 -1.7984666 -1.9685888 128.0 +-5.1172676 -1.7655457 -1.9668492 128.0 +-5.140439 -1.7383156 -1.9717201 128.0 +-5.1581283 -1.7090992 -1.9745034 128.0 +-5.1640592 -1.6759712 -1.9727638 128.0 +-5.2010522 -1.6527659 -1.9832014 128.0 +-5.1860275 -1.6130306 -1.9734596 128.0 +-5.1814756 -1.5768152 -1.967893 128.0 +-5.1937494 -1.5457944 -1.9689367 128.0 +-5.2058372 -1.5146822 -1.9699805 128.0 +-5.2285604 -1.4865543 -1.9751992 128.0 +-5.2312598 -1.4526898 -1.9727638 128.0 +-5.2445993 -1.4217896 -1.9745034 128.0 +-5.2432542 -1.3869475 -1.9706763 128.0 +-5.2552972 -1.3556854 -1.972068 128.0 +-5.2616978 -1.322957 -1.9713721 128.0 +-5.2678952 -1.2902013 -1.9706763 128.0 +-5.2748003 -1.2576367 -1.9703283 128.0 +-5.2796779 -1.2246125 -1.9692847 128.0 +-5.290751 -1.1930181 -1.9706763 128.0 +-5.2961397 -1.1601313 -1.9699805 128.0 +-5.3068266 -1.1283921 -1.9713721 128.0 +-5.3099775 -1.0950521 -1.9699805 128.0 +-5.3156772 -1.0622666 -1.9696325 128.0 +-5.3220954 -1.0296302 -1.9696325 128.0 +-5.32094 -0.99557728 -1.9668492 128.0 +-5.3241811 -0.96241015 -1.9658054 128.0 +-5.3364511 -0.93084979 -1.9682409 128.0 +-5.3522329 -0.89979601 -1.972068 128.0 +-5.3687592 -0.86873311 -1.976243 128.0 +-0 -0 -0 128.0 +-5.408689 -0.80720687 -1.9873763 128.0 +-5.4385991 -0.77758205 -1.9967701 128.0 +-5.464633 -0.74711323 -2.0047722 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-5.3409567 -0.037536558 -1.9400595 128.0 +-0 -0 -0 128.0 +-5.3428903 0.028018259 -1.9407554 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-5.2527013 -0.13438906 -1.9715911 128.0 +-5.2328877 -0.10175557 -1.9637177 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-0 0 -0 128.0 +-5.1187916 1.0126848 -1.9576337 128.0 +-5.1005878 1.0416461 -1.9529814 128.0 +-5.0886178 1.0717689 -1.950834 128.0 +-5.0782957 1.1021799 -1.9494026 128.0 +-5.0668807 1.1323011 -1.9476131 128.0 +-5.0571074 1.1627421 -1.9465395 128.0 +-5.0526042 1.1943942 -1.9476131 128.0 +-5.0442729 1.2251537 -1.9472553 128.0 +-5.0430026 1.2576629 -1.9497604 128.0 +-5.0460467 1.2913597 -1.954055 128.0 +-5.0298991 1.3201644 -1.950834 128.0 +-5.0189991 1.3502749 -1.9497604 128.0 +-5.01332 1.3817897 -1.950834 128.0 +-5.0020509 1.4117641 -1.9497604 128.0 +-4.9771466 1.4377662 -1.9433186 128.0 +-4.9736037 1.4698658 -1.9454659 128.0 +-4.9591284 1.4987352 -1.9433186 128.0 +-4.9471622 1.528309 -1.942245 128.0 +-4.93502 1.5577924 -1.9411713 128.0 +-4.921814 1.586898 -1.9397398 128.0 +-4.9102101 1.6164839 -1.9390241 128.0 +-4.9010844 1.6468793 -1.939382 128.0 +-4.8917704 1.6772236 -1.9397398 128.0 +-4.887557 1.7093647 -1.942245 128.0 +-4.8831334 1.7415172 -1.9447501 128.0 +-4.8749886 1.7724037 -1.9458238 128.0 +-4.8657727 1.8029314 -1.9465395 128.0 +-4.8581128 1.8340722 -1.947971 128.0 +-4.8345656 1.8591553 -1.9429607 128.0 +-0 0 -0 128.0 +-4.7975087 1.9128108 -1.9372346 128.0 +-4.7804904 1.9401052 -1.9350874 128.0 +-4.7650437 1.9679757 -1.9336559 128.0 +-4.7554612 1.9982615 -1.9347295 128.0 +-4.7491212 2.0299714 -1.9372346 128.0 +-4.7331505 2.0575845 -1.9358032 128.0 +-4.7289772 2.0903623 -1.939382 128.0 +-4.7058411 2.1147473 -1.9350874 128.0 +-4.6953249 2.1447456 -1.936161 128.0 +-4.6812296 2.1731222 -1.9358032 128.0 +-4.6441598 2.1906524 -1.9257826 128.0 +-4.6390514 2.2231419 -1.9293613 128.0 +-4.6127291 2.2454352 -1.9239931 128.0 +-4.6072354 2.2778339 -1.9275719 128.0 +-4.5798197 2.2993579 -1.9218459 128.0 +-0 0 -0 128.0 +-4.5603809 2.3601065 -1.9257826 128.0 +-4.5466404 2.3884783 -1.9261404 128.0 +-4.5368433 2.4189665 -1.9282877 128.0 +-0 0 -0 128.0 +-4.515821 2.4794011 -1.9322244 128.0 +-4.5062332 2.5102434 -1.9347295 128.0 +-4.488307 2.5364678 -1.9336559 128.0 +-4.4734693 2.5644243 -1.9340137 128.0 +-4.4592643 2.5927632 -1.9347295 128.0 +-4.4408584 2.6186533 -1.9336559 128.0 +-4.4239058 2.6453733 -1.933298 128.0 +-4.4051952 2.671016 -1.9322244 128.0 +-4.3887234 2.6979954 -1.9322244 128.0 +-4.3736711 2.7258611 -1.9329401 128.0 +-4.3584418 2.7536433 -1.9336559 128.0 +-4.3430367 2.7813416 -1.9343716 128.0 +-0 0 -0 128.0 +-4.3070183 2.8334014 -1.9336559 128.0 +-4.2918825 2.8613293 -1.9347295 128.0 +-4.2726974 2.8865645 -1.9340137 128.0 +-4.2495112 2.9090352 -1.9315087 128.0 +-4.2308145 2.9345229 -1.9311507 128.0 +-4.2066169 2.9561329 -1.9282877 128.0 +-4.191442 2.9840543 -1.9297192 128.0 +-4.1677513 3.0058935 -1.927214 128.0 +-4.1560154 3.0363667 -1.9304349 128.0 +-4.1365557 3.061255 -1.9300771 128.0 +-4.1049919 3.0770588 -1.9239931 128.0 +-4.105372 3.1168675 -1.933298 128.0 +-4.0824685 3.1391535 -1.9315087 128.0 +-4.0609198 3.1624229 -1.9304349 128.0 +-4.0443721 3.1895933 -1.9318665 128.0 +-4.0218062 3.2120185 -1.9304349 128.0 +-4.0005698 3.235461 -1.9297192 128.0 +-3.9690824 3.2504821 -1.9239931 128.0 +-3.9648774 3.2878866 -1.9318665 128.0 +-3.946774 3.3139539 -1.9329401 128.0 +-3.9277887 3.339318 -1.9336559 128.0 +-3.9114716 3.3670104 -1.9358032 128.0 +-3.8907382 3.3909473 -1.9358032 128.0 +-3.8656573 3.4110501 -1.9336559 128.0 +-3.8446548 3.434705 -1.9336559 128.0 +-3.8221223 3.4569781 -1.9329401 128.0 +-3.8008387 3.480365 -1.9329401 128.0 +-3.7746181 3.4991777 -1.9304349 128.0 +-3.7476292 3.5171609 -1.9275719 128.0 +-3.7219157 3.536231 -1.9254247 128.0 +-3.6974556 3.5564127 -1.9239931 128.0 +-3.673557 3.5770788 -1.9229195 128.0 +-3.6541996 3.6021738 -1.924351 128.0 +-3.6320283 3.6245277 -1.924351 128.0 +-3.6149759 3.6520538 -1.927214 128.0 +-3.588582 3.6701605 -1.9250668 128.0 +-3.5640485 3.6900959 -1.9239931 128.0 +-3.5419841 3.7125704 -1.924351 128.0 +-3.5152946 3.7301569 -1.9222038 128.0 +-3.4936132 3.7530229 -1.9229195 128.0 +-3.4660947 3.7695775 -1.9204143 128.0 +-3.446667 3.7949212 -1.9225616 128.0 +-3.4245641 3.8173881 -1.9232774 128.0 +-3.4072697 3.8453174 -1.9268562 128.0 +-3.3823812 3.8647463 -1.9261404 128.0 +-3.360436 3.8875465 -1.927214 128.0 +-3.3359127 3.9073825 -1.9268562 128.0 +-3.3088648 3.9242086 -1.9250668 128.0 +-3.2811384 3.9401326 -1.9229195 128.0 +-3.255121 3.9580276 -1.9218459 128.0 +-3.2307737 3.9779263 -1.9218459 128.0 +-3.2103949 4.0027738 -1.924351 128.0 +-3.1875131 4.0245929 -1.9254247 128.0 +-3.166786 4.0492234 -1.9279298 128.0 +-3.1424515 4.0693173 -1.9282877 128.0 +-3.1196885 4.0914927 -1.9297192 128.0 +-3.0950863 4.1113033 -1.9300771 128.0 +-3.0597742 4.1167283 -1.9236352 128.0 +-3.0333519 4.1339197 -1.9229195 128.0 +-3.0008078 4.1426239 -1.9182671 128.0 +-2.9693575 4.1526036 -1.9143304 128.0 +-2.9427445 4.1692195 -1.9136146 128.0 +-0 0 -0 128.0 +-2.8887146 4.2011704 -1.9118253 128.0 +-2.8681262 4.2265425 -1.9154041 128.0 +-2.8452566 4.2487164 -1.9175513 128.0 +-2.820678 4.2684317 -1.918625 128.0 +-2.7939241 4.2848763 -1.9182671 128.0 +-2.7685907 4.3035097 -1.9189829 128.0 +-2.7371283 4.3125329 -1.9154041 128.0 +-2.7071464 4.3237066 -1.9128989 128.0 +-2.679584 4.3386469 -1.9121832 128.0 +-2.6470821 4.345438 -1.9078885 128.0 +-2.6290262 4.3760052 -1.9143304 128.0 +-2.6021259 4.3920546 -1.9143304 128.0 +-2.5770123 4.4111629 -1.9157619 128.0 +-2.5540924 4.4341741 -1.9189829 128.0 +-2.5296037 4.4546337 -1.9211301 128.0 +-2.5031354 4.4717007 -1.9218459 128.0 +-2.4742968 4.4845228 -1.9207722 128.0 +-2.4467337 4.4996204 -1.9207722 128.0 +-2.41555 4.5079646 -1.9179091 128.0 +-2.3847919 4.5169215 -1.9154041 128.0 +-2.3540149 4.5256705 -1.9128989 128.0 +-2.3274791 4.5425224 -1.9139725 128.0 +-2.2966177 4.5508828 -1.9114674 128.0 +-2.2657413 4.5590358 -1.9089622 128.0 +-2.2438824 4.5854325 -1.9143304 128.0 +-2.2148938 4.5974321 -1.9136146 128.0 +-2.1910448 4.6202164 -1.9175513 128.0 +-2.1618643 4.6318812 -1.9168355 128.0 +-2.1341827 4.6467557 -1.9175513 128.0 +-2.1029384 4.6538072 -1.9150462 128.0 +-2.0766196 4.6717424 -1.9171934 128.0 +-2.0490377 4.6869631 -1.9182671 128.0 +-2.0250354 4.7105994 -1.9229195 128.0 +-2.0004566 4.7332568 -1.927214 128.0 +-1.9670767 4.735095 -1.9229195 128.0 +-1.9390447 4.7496691 -1.9239931 128.0 +-1.9088217 4.7588773 -1.9229195 128.0 +-1.8789011 4.7687626 -1.9222038 128.0 +-1.8475829 4.7749767 -1.9200565 128.0 +-1.8185812 4.787096 -1.9204143 128.0 +-1.7846055 4.7859163 -1.9154041 128.0 +-1.755206 4.7967763 -1.9154041 128.0 +-1.7247939 4.8048191 -1.9143304 128.0 +-1.6955898 4.8161926 -1.9146882 128.0 +-1.6675299 4.8309193 -1.9164777 128.0 +-1.6315708 4.8224854 -1.9089622 128.0 +-1.6054765 4.8430414 -1.9132568 128.0 +-1.5716918 4.8403683 -1.9082465 128.0 +-1.548471 4.8703876 -1.9164777 128.0 +-1.516615 4.8735557 -1.9139725 128.0 +-1.4845065 4.8756237 -1.9111094 128.0 +-1.4564283 4.8909054 -1.9136146 128.0 +-1.4258686 4.8979564 -1.9128989 128.0 +-1.3950218 4.9039187 -1.9118253 128.0 +-1.366156 4.9168849 -1.9136146 128.0 +-1.3300922 4.9035463 -1.9050256 128.0 +-1.3059543 4.9341822 -1.9139725 128.0 +-1.2772883 4.948431 -1.9164777 128.0 +-1.2434828 4.9425921 -1.9111094 128.0 +-1.2135769 4.9519429 -1.9118253 128.0 +-1.1781839 4.938406 -1.903594 128.0 +-1.1516616 4.9619145 -1.9100358 128.0 +-1.1193438 4.96069 -1.9068149 128.0 +-1.0888845 4.9674649 -1.9068149 128.0 +-1.0583842 4.9740524 -1.9068149 128.0 +-1.0289769 4.98594 -1.9089622 128.0 +-0.99579972 4.979341 -1.9039519 128.0 +-0.96913481 5.0055256 -1.9118253 128.0 +-0.93926293 5.0159669 -1.9136146 128.0 +-0 0 -0 128.0 +-0.87908453 5.0353937 -1.9168355 128.0 +-0.84786135 5.0388513 -1.9161198 128.0 +-0.81812245 5.051333 -1.9189829 128.0 +-0.78653783 5.052567 -1.9175513 128.0 +-0.75538301 5.0563745 -1.9171934 128.0 +-0.72540247 5.0683088 -1.9200565 128.0 +-0.69314998 5.0643382 -1.9168355 128.0 +-0.6606105 5.0573854 -1.912541 128.0 +-0.63118124 5.0743165 -1.9175513 128.0 +-0.59816992 5.0623293 -1.9114674 128.0 +-0.56626517 5.0584807 -1.9086044 128.0 +-0.53521627 5.0618601 -1.9086044 128.0 +-0.50386953 5.0622611 -1.9075307 128.0 +-0.47210371 5.0578198 -1.9046676 128.0 +-0.44138524 5.0643425 -1.9060992 128.0 +-0.41052902 5.0697474 -1.9071728 128.0 +-0.37913498 5.0684462 -1.9057413 128.0 +-0.34758037 5.0641561 -1.9032362 128.0 +-0.31533483 5.047555 -1.8960786 128.0 +-0.2856195 5.0717692 -1.9046676 128.0 +-0.25463492 5.0762243 -1.9057413 128.0 +-0.22340073 5.0758252 -1.9050256 128.0 +-0.19239347 5.080833 -1.9064571 128.0 +-0.16118476 5.0809846 -1.9060992 128.0 +-0.13019703 5.0893455 -1.9089622 128.0 +-0.099003389 5.0919161 -1.909678 128.0 +-0.067820609 5.097096 -1.9114674 128.0 +-0.036517065 5.0936813 -1.9100358 128.0 +-0.0052569415 5.0891404 -1.9082465 128.0 +0.025941392 5.0834742 -1.9060992 128.0 +0.057090838 5.0794845 -1.9046676 128.0 +0.088289194 5.0809059 -1.9053835 128.0 +0.11941963 5.0784016 -1.9046676 128.0 +0.15055026 5.0766401 -1.9043097 128.0 +0.18173043 5.0765538 -1.9046676 128.0 +0.21318862 5.0828066 -1.9075307 128.0 +0.24428256 5.0795374 -1.9068149 128.0 +0.27529392 5.0751457 -1.9057413 128.0 +0.30592322 5.0649724 -1.9025204 128.0 +0.33711943 5.0648632 -1.9032362 128.0 +0.36852878 5.0673561 -1.9050256 128.0 +0.39976132 5.0668612 -1.9057413 128.0 +0.43084347 5.0643129 -1.9057413 128.0 +0.46216375 5.064364 -1.9068149 128.0 +0.49259597 5.0549269 -1.9043097 128.0 +0.52456504 5.0610971 -1.9078885 128.0 +0.55540574 5.0559268 -1.9071728 128.0 +0.58598751 5.0487137 -1.9057413 128.0 +0.6169548 5.045023 -1.9057413 128.0 +0.64813679 5.042995 -1.9064571 128.0 +0.67919248 5.0398483 -1.9068149 128.0 +0.70932174 5.0300384 -1.9046676 128.0 +0.74017209 5.0255914 -1.9046676 128.0 +0 0 -0 128.0 +0.80164081 5.0152078 -1.9043097 128.0 +0.83071584 5.000062 -1.9003731 128.0 +0.86233169 5.000392 -1.9025204 128.0 +0.89234024 4.9913297 -1.9010888 128.0 +0.92413896 4.992188 -1.903594 128.0 +0.9540509 4.9827547 -1.9021626 128.0 +0.98641807 4.9859676 -1.9057413 128.0 +1.0169928 4.9798212 -1.9057413 128.0 +1.0469521 4.970746 -1.9046676 128.0 +1.0774324 4.9642282 -1.9046676 128.0 +1.1070577 4.9538789 -1.9032362 128.0 +1.137015 4.9451728 -1.9025204 128.0 +1.1675513 4.9390116 -1.9028783 128.0 +1.1969533 4.9281249 -1.9014468 128.0 +1.2260398 4.9161577 -1.8996574 128.0 +1.2575703 4.91397 -1.9018047 128.0 +1.2869872 4.9034519 -1.900731 128.0 +1.317535 4.8972659 -1.9014468 128.0 +1.3468151 4.8863893 -1.9003731 128.0 +1.3795613 4.8879185 -1.9043097 128.0 +1.4100453 4.881156 -1.9050256 128.0 +1.4378523 4.8652482 -1.9021626 128.0 +1.4687581 4.8599095 -1.903594 128.0 +1.5010302 4.8588357 -1.9068149 128.0 +1.5302532 4.847753 -1.9060992 128.0 +1.5593966 4.8364949 -1.9053835 128.0 +1.5893354 4.8277225 -1.9057413 128.0 +1.6180358 4.8152242 -1.9046676 128.0 +1.6466426 4.8025556 -1.903594 128.0 +1.6776205 4.7967687 -1.9053835 128.0 +1.7076485 4.7881436 -1.9060992 128.0 +1.7379528 4.7802086 -1.9071728 128.0 +1.767251 4.7694545 -1.9071728 128.0 +1.7964826 4.7585211 -1.9071728 128.0 +1.8283272 4.7543812 -1.9100358 128.0 +1.8537203 4.7335086 -1.9060992 128.0 +1.8799636 4.7151065 -1.9032362 128.0 +1.9071043 4.6991563 -1.9014468 128.0 +1.9391092 4.6951337 -1.9046676 128.0 +1.9657115 4.6779819 -1.9025204 128.0 +1.9965796 4.6709843 -1.9046676 128.0 +2.0233417 4.6543636 -1.9028783 128.0 +2.0522397 4.642715 -1.9032362 128.0 +2.0810709 4.630887 -1.903594 128.0 +2.11061 4.6205788 -1.9046676 128.0 +2.1365631 4.6024594 -1.9025204 128.0 +2.1611784 4.5816622 -1.8992995 128.0 +2.1916709 4.5733676 -1.9014468 128.0 +2.2184656 4.5573149 -1.9003731 128.0 +2.2505245 4.5519876 -1.9039519 128.0 +2.2767372 4.5347552 -1.9025204 128.0 +2.305367 4.5223637 -1.9032362 128.0 +2.3322141 4.5064745 -1.9025204 128.0 +2.3585188 4.4895992 -1.9014468 128.0 +2.3811903 4.4659791 -1.8975101 128.0 +2.4098811 4.4537482 -1.8985838 128.0 +2.4344673 4.4339666 -1.8964365 128.0 +2.462991 4.4213929 -1.8975101 128.0 +2.4960451 4.4167657 -1.9021626 128.0 +2.5282066 4.4102783 -1.9060992 128.0 +2.5566278 4.3971043 -1.9071728 128.0 +2.5883021 4.3893785 -1.9107516 128.0 +2.6161444 4.3750172 -1.9114674 128.0 +2.6453602 4.362875 -1.9132568 128.0 +2.665235 4.3354239 -1.9082465 128.0 +2.6912928 4.3181963 -1.9078885 128.0 +2.7167406 4.3000226 -1.9071728 128.0 +2.7385423 4.2761946 -1.9039519 128.0 +2.7657456 4.2608771 -1.9046676 128.0 +2.7949166 4.2485075 -1.9068149 128.0 +2.8271472 4.240602 -1.9111094 128.0 +2.8473644 4.2146635 -1.9071728 128.0 +0 0 -0 128.0 +2.909513 4.1947508 -1.9143304 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +3.0082762 4.1175604 -1.9121832 128.0 +0 0 -0 128.0 +3.0540986 4.0743566 -1.9093201 128.0 +0 0 -0 128.0 +0 0 -0 128.0 +3.1171033 4.0027146 -1.9021626 128.0 +3.1352451 3.9754477 -1.8982259 128.0 +3.1525869 3.9473791 -1.8939313 128.0 +0 0 -0 128.0 +3.1966488 3.9033377 -1.8914262 128.0 +3.2223272 3.8858063 -1.8924998 128.0 +3.251513 3.8723977 -1.8957207 128.0 +3.2830744 3.861623 -1.9003731 128.0 +3.3121891 3.8477752 -1.903594 128.0 +3.3412573 3.8337154 -1.9068149 128.0 +3.3628645 3.8110411 -1.9057413 128.0 +3.3812089 3.7847641 -1.9028783 128.0 +3.4062469 3.7660239 -1.9039519 128.0 +3.4286602 3.7443638 -1.903594 128.0 +3.4553792 3.7273645 -1.9057413 128.0 +3.4826574 3.7108591 -1.9082465 128.0 +3.5105064 3.6948359 -1.9111094 128.0 +3.5357003 3.6759186 -1.912541 128.0 +3.5614457 3.6574998 -1.9143304 128.0 +3.5818543 3.6335833 -1.9132568 128.0 +3.5961676 3.603605 -1.9089622 128.0 +3.6182113 3.5814714 -1.9089622 128.0 +3.6414537 3.5605087 -1.909678 128.0 +3.6545014 3.5296645 -1.9050256 128.0 +3.6929793 3.5232899 -1.9139725 128.0 +3.7165668 3.5024853 -1.9150462 128.0 +3.7366209 3.4783425 -1.9143304 128.0 +3.7578931 3.4553494 -1.9143304 128.0 +3.7797153 3.4328542 -1.9146882 128.0 +3.7944524 3.4039855 -1.9114674 128.0 +3.8194606 3.3843548 -1.9136146 128.0 +3.8415599 3.3620856 -1.9143304 128.0 +3.8578787 3.3347867 -1.9121832 128.0 +3.878978 3.3116586 -1.912541 128.0 +3.899225 3.2877953 -1.912541 128.0 +3.9214776 3.2656012 -1.9136146 128.0 +3.9414411 3.241478 -1.9136146 128.0 +3.9605315 3.2166438 -1.9132568 128.0 +3.9801939 3.192282 -1.9132568 128.0 +4.0040979 3.1712787 -1.9154041 128.0 +4.0249524 3.1478009 -1.9161198 128.0 +4.0404959 3.1201911 -1.9143304 128.0 +4.0573378 3.0936418 -1.9132568 128.0 +4.0792274 3.0709348 -1.9146882 128.0 +4.0934973 3.0425048 -1.912541 128.0 +4.1128411 3.0178828 -1.9128989 128.0 +4.1395993 2.9986162 -1.9168355 128.0 +4.1594396 2.974246 -1.9175513 128.0 +4.176085 2.9475913 -1.9168355 128.0 +4.1925602 2.9208441 -1.9161198 128.0 +4.2119422 2.8961222 -1.9168355 128.0 +4.2242246 2.8665531 -1.9143304 128.0 +4.2401824 2.8395405 -1.9136146 128.0 +4.2520728 2.8098657 -1.9111094 128.0 +4.2747087 2.7872932 -1.9136146 128.0 +4.2933011 2.762022 -1.9143304 128.0 +4.3125329 2.7371283 -1.9154041 128.0 +4.3292465 2.7106154 -1.9154041 128.0 +4.3370581 2.6786027 -1.9114674 128.0 +4.3398561 2.6436813 -1.9053835 128.0 +4.3591971 2.6189263 -1.9068149 128.0 +4.3727746 2.5907013 -1.9057413 128.0 +4.3877826 2.5633507 -1.9053835 128.0 +4.4058557 2.5377779 -1.9064571 128.0 +4.4229679 2.5116186 -1.9071728 128.0 +4.4423695 2.4867134 -1.9089622 128.0 +4.460814 2.4612134 -1.9103937 128.0 +4.4741912 2.4329038 -1.909678 128.0 +4.4947963 2.4084923 -1.9121832 128.0 +4.5136185 2.3830476 -1.9139725 128.0 +4.524014 2.353153 -1.9121832 128.0 +4.5358744 2.3240724 -1.9111094 128.0 +4.5608859 2.3016667 -1.9157619 128.0 +4.571578 2.2719758 -1.9143304 128.0 +4.5980129 2.2500398 -1.9196986 128.0 +4.6117325 2.2217846 -1.9196986 128.0 +4.6219039 2.1918452 -1.9182671 128.0 +4.6217279 2.1571245 -1.912541 128.0 +4.643362 2.1326234 -1.9161198 128.0 +4.6521053 2.1021693 -1.9143304 128.0 +4.6299338 2.0580316 -1.8996574 128.0 +4.6630077 2.0385625 -1.9082465 128.0 +4.6891537 2.0158143 -1.9139725 128.0 +4.6971335 1.9851862 -1.9121832 128.0 +4.7014656 1.9531031 -1.9089622 128.0 +4.7211413 1.9273957 -1.9121832 128.0 +4.7285457 1.8966526 -1.9103937 128.0 +4.7496505 1.8713691 -1.9143304 128.0 +4.7619143 1.8425276 -1.9146882 128.0 +4.7774944 1.8149327 -1.9164777 128.0 +4.7876658 1.7852581 -1.9161198 128.0 +4.8081756 1.7593783 -1.9200565 128.0 +4.821517 1.7307894 -1.9211301 128.0 +4.8373308 1.7030334 -1.9232774 128.0 +4.8512197 1.6745391 -1.9247088 128.0 +4.8658257 1.6462377 -1.9264983 128.0 +4.8758354 1.6163505 -1.9264983 128.0 +4.8865495 1.586691 -1.9268562 128.0 +4.8917437 1.5552629 -1.9250668 128.0 +4.89852 1.5243858 -1.9239931 128.0 +4.9024215 1.492668 -1.9218459 128.0 +4.9088035 1.4617596 -1.9207722 128.0 +4.9158874 1.4310901 -1.9200565 128.0 +4.9263721 1.4014109 -1.9207722 128.0 +4.9375768 1.3719071 -1.9218459 128.0 +4.940495 1.3401177 -1.9196986 128.0 +4.9540405 1.3112121 -1.9218459 128.0 +4.9638009 1.2812569 -1.9225616 128.0 +4.9751911 1.251687 -1.9239931 128.0 +4.9854984 1.2218033 -1.9250668 128.0 +4.9910851 1.1907563 -1.924351 128.0 +5.0001168 1.1605315 -1.9250668 128.0 +5.0025892 1.1288016 -1.9232774 128.0 +5.007597 1.097685 -1.9225616 128.0 +5.0096712 1.0659662 -1.9207722 128.0 +5.0142889 1.0348297 -1.9200565 128.0 +5.0196285 1.00386 -1.9196986 128.0 +5.0247769 0.97286367 -1.9193407 128.0 +5.0297337 0.94184196 -1.9189829 128.0 +5.042769 0.91229278 -1.9218459 128.0 +5.0593095 0.88326174 -1.9261404 128.0 +5.0655551 0.85235679 -1.9264983 128.0 +5.0780635 0.82245398 -1.9293613 128.0 +5.0857821 0.79171121 -1.9304349 128.0 +5.0970087 0.76145679 -1.9329401 128.0 +5.0969634 0.72950596 -1.9311507 128.0 +5.0985684 0.69783771 -1.9300771 128.0 +5.1101613 0.66750854 -1.9329401 128.0 +5.1058211 0.63510257 -1.9297192 128.0 +5.0901484 0.60145932 -1.9222038 128.0 +5.0965271 0.57052732 -1.9232774 128.0 +5.0980749 0.53904831 -1.9225616 128.0 +5.1012864 0.50775701 -1.9225616 128.0 +5.0987277 0.47592539 -1.9204143 128.0 +5.1136451 0.44568616 -1.9250668 128.0 +5.1088376 0.41369751 -1.9222038 128.0 +5.1140733 0.38255167 -1.9232774 128.0 +5.1237769 0.35167724 -1.9261404 128.0 +5.1081314 0.31912407 -1.9193407 128.0 +5.1249099 0.28861639 -1.9250668 128.0 +5.1228538 0.25697768 -1.9236352 128.0 +5.1196699 0.22533394 -1.9218459 128.0 +5.1274877 0.19416384 -1.924351 128.0 +5.1369824 0.16296566 -1.9275719 128.0 +5.1388192 0.13146661 -1.9279298 128.0 +5.141396 0.099969387 -1.9286456 128.0 +5.1456475 0.068470486 -1.9300771 128.0 +5.1431694 0.036875788 -1.9290035 128.0 +5.1479678 0.0053223954 -1.9307928 128.0 +5.1479034 -0.026265042 -1.9307928 128.0 +5.1457782 -0.05783065 -1.9300771 128.0 +5.144393 -0.089387313 -1.9297192 128.0 +5.1428137 -0.12092915 -1.9293613 128.0 +5.1373081 -0.15234457 -1.9275719 128.0 +5.1288114 -0.18359698 -1.9247088 128.0 +5.1369181 -0.21545388 -1.9282877 128.0 +5.1336336 -0.2468798 -1.9275719 128.0 +5.1254954 -0.27802104 -1.9250668 128.0 +5.1339459 -0.31008369 -1.9290035 128.0 +5.141264 -0.34219855 -1.9325823 128.0 +5.1362734 -0.37353534 -1.9315087 128.0 +5.1357465 -0.40519062 -1.9322244 128.0 +5.1313028 -0.43653721 -1.9315087 128.0 +5.1396866 -0.46903151 -1.9358032 128.0 +5.1367121 -0.50055921 -1.9358032 128.0 +5.137259 -0.53245282 -1.9372346 128.0 +5.1357517 -0.56416821 -1.9379504 128.0 +5.1349759 -0.59599268 -1.9390241 128.0 +5.1330762 -0.62771565 -1.9397398 128.0 +5.130054 -0.65931875 -1.9400977 128.0 +5.1240611 -0.69053447 -1.939382 128.0 +5.1243505 -0.72261369 -1.9411713 128.0 +5.1244392 -0.75472242 -1.9429607 128.0 +5.1114054 -0.78487635 -1.9397398 128.0 +5.1046491 -0.81592995 -1.9390241 128.0 +5.1013889 -0.84754205 -1.9397398 128.0 +5.0914917 -0.87803459 -1.9379504 128.0 +5.0795736 -0.90810901 -1.9354453 128.0 +5.0876789 -0.94180804 -1.9408134 128.0 +5.0882239 -0.97423643 -1.9433186 128.0 +5.0821505 -1.0054388 -1.9433186 128.0 +5.0813746 -1.037724 -1.9454659 128.0 +5.0785666 -1.0696527 -1.9468974 128.0 +5.0792084 -1.1023779 -1.9497604 128.0 +5.0750823 -1.1341333 -1.950834 128.0 +5.0707583 -1.1658796 -1.9519078 128.0 +5.0616913 -1.1965417 -1.9511919 128.0 +5.0506248 -1.2266959 -1.9497604 128.0 +5.0348487 -1.2556299 -1.9465395 128.0 +5.0198121 -1.2846481 -1.9436765 128.0 +5.0037065 -1.313292 -1.9404556 128.0 +4.9946523 -1.343727 -1.9400977 128.0 +4.9836125 -1.3736042 -1.9390241 128.0 +4.9705973 -1.4028894 -1.9372346 128.0 +4.9601016 -1.4328438 -1.9365189 128.0 +4.9610667 -1.4661617 -1.9404556 128.0 +4.9564466 -1.497925 -1.942245 128.0 +4.94627 -1.5280335 -1.9418871 128.0 +4.936801 -1.5583544 -1.9418871 128.0 +4.9307013 -1.5897626 -1.9433186 128.0 +4.9288363 -1.6226141 -1.9465395 128.0 +4.9117064 -1.6504476 -1.9436765 128.0 +4.90767 -1.6826736 -1.9461817 128.0 +4.8963714 -1.7124467 -1.9458238 128.0 +4.8892903 -1.7437124 -1.9472553 128.0 +4.8714781 -1.7711278 -1.9443922 128.0 +4.8622704 -1.801634 -1.9451081 128.0 +4.846756 -1.8297857 -1.9433186 128.0 +4.7805285 -1.8383799 -1.9207722 128.0 +4.8108945 -1.8840187 -1.9379504 128.0 +4.7844977 -1.9076244 -1.9318665 128.0 +4.7311707 -1.920094 -1.9146882 128.0 +4.7029014 -1.9423165 -1.9078885 128.0 +4.6392422 -1.9494365 -1.8864158 128.0 +4.5816851 -1.9584178 -1.8674482 128.0 +4.5430341 -1.9749552 -1.856354 128.0 +4.4522552 -1.9680681 -1.8234291 128.0 +4.3855834 -1.9708577 -1.8005248 128.0 +4.3504748 -1.9872566 -1.7908621 128.0 +4.2950029 -1.9938648 -1.7726103 128.0 +4.2573509 -2.0082319 -1.761874 128.0 +4.2104225 -2.0177743 -1.7472008 128.0 +4.1685762 -2.029269 -1.7346752 128.0 +4.1183777 -2.0361886 -1.7185706 128.0 +4.0857773 -2.0513666 -1.7099814 128.0 +4.0489874 -2.0641012 -1.699603 128.0 +4.0221472 -2.0816116 -1.693519 128.0 +4.0159125 -2.1097255 -1.696382 128.0 +3.9831159 -2.1237848 -1.6877929 128.0 +3.9823289 -2.1548493 -1.6931611 128.0 +3.9428387 -2.164865 -1.6817091 128.0 +3.9147971 -2.1808388 -1.6752672 128.0 +3.8997161 -2.2038996 -1.6745514 128.0 +3.8828793 -2.225929 -1.6731199 128.0 +3.8295918 -2.226717 -1.6555839 128.0 +3.8053999 -2.2440078 -1.6509314 128.0 +3.8236172 -2.2864816 -1.6652466 128.0 +3.7448375 -2.2706902 -1.6362584 128.0 +3.66242 -2.2515748 -1.6054808 128.0 +3.5035088 -2.1836333 -1.5399889 128.0 +3.5626738 -2.2509682 -1.5729138 128.0 +3.2562625 -2.0854766 -1.4397827 128.0 +3.2011082 -2.0779672 -1.4204572 128.0 +3.1906383 -2.0991092 -1.421531 128.0 +3.1831372 -2.1222725 -1.424036 128.0 +3.1924949 -2.1569211 -1.4344145 128.0 +3.0767155 -2.1063244 -1.3868166 128.0 +3.0767777 -2.1342094 -1.3929006 128.0 +3.0124342 -2.1170809 -1.3689227 128.0 +2.9400511 -2.0932879 -1.3410081 128.0 +2.893069 -2.0867114 -1.3249036 128.0 +2.8508039 -2.0829427 -1.3109462 128.0 +2.8424733 -2.1037281 -1.3130935 128.0 +2.8070955 -2.1043293 -1.3023572 128.0 +2.7933869 -2.1209493 -1.3019993 128.0 +2.7751384 -2.1340652 -1.2994941 128.0 +2.7877789 -2.1711314 -1.3120199 128.0 +2.7707384 -2.1853051 -1.3102305 128.0 +2.6996331 -2.1562345 -1.2819581 128.0 +2.6304431 -2.1275496 -1.2544014 128.0 +3.3072989 -2.7086015 -1.5961759 128.0 +3.2913358 -2.7294397 -1.5965338 128.0 +3.2888296 -2.7615914 -1.6036913 128.0 +2.4522212 -2.0850234 -1.1914147 128.0 +2.4061182 -2.0714018 -1.1745944 128.0 +2.3891389 -2.0824459 -1.1724471 128.0 +2.3665135 -2.0884175 -1.1674367 128.0 +2.3473871 -2.0973003 -1.1642158 128.0 +2.3317037 -2.109159 -1.1627843 128.0 +2.3228505 -2.1272097 -1.1649317 128.0 +2.3001668 -2.1325357 -1.1599213 128.0 +2.2686534 -2.1293573 -1.1502585 128.0 +2.2244036 -2.1136541 -1.1337961 128.0 +2.1689913 -2.0864856 -1.1112498 128.0 +2.1588242 -2.1023605 -1.1126813 128.0 +2.1412284 -2.1109788 -1.1101761 128.0 +2.1183202 -2.1141844 -1.104808 128.0 +2.0993955 -2.12117 -1.1015871 128.0 +2.0785062 -2.1260006 -1.0972924 128.0 +2.0595834 -2.1326697 -1.0940715 128.0 +2.036145 -2.1344581 -1.0883455 128.0 +2.020448 -2.1441934 -1.0869139 128.0 +2.0002542 -2.1490326 -1.0829773 128.0 +1.9800775 -2.1537049 -1.0790406 128.0 +1.9567797 -2.1547551 -1.0733145 128.0 +1.946016 -2.1695013 -1.0747461 128.0 +1.9233778 -2.1709185 -1.0693779 128.0 +1.9137112 -2.1868949 -1.0715252 128.0 +1.9039208 -2.2028344 -1.0736724 128.0 +1.8885496 -2.2123446 -1.0725988 128.0 +1.8785512 -2.228174 -1.0747461 128.0 +1.8809791 -2.2590311 -1.0844089 128.0 +1.868862 -2.2726934 -1.0854825 128.0 +1.8595917 -2.289916 -1.0883455 128.0 +1.8466747 -2.3027399 -1.0890613 128.0 +1.83425 -2.3162234 -1.0901349 128.0 +1.8177022 -2.3244927 -1.0887034 128.0 +1.8016928 -2.333385 -1.0876298 128.0 +1.7833779 -2.3391986 -1.0851246 128.0 +1.7616895 -2.3403997 -1.0804721 128.0 +1.7428393 -2.34517 -1.0776092 128.0 +1.7223396 -2.3475389 -1.0736724 128.0 +1.697494 -2.3436956 -1.0668727 128.0 +1.6771064 -2.3457124 -1.0629361 128.0 +1.670221 -2.3666387 -1.0679464 128.0 +1.6551343 -2.3760762 -1.0675884 128.0 +1.6415821 -2.3877258 -1.0683043 128.0 +1.6295223 -2.4016166 -1.0700936 128.0 +1.6261876 -2.428638 -1.077967 128.0 +1.6189781 -2.4502554 -1.0833352 128.0 +1.6049334 -2.4617074 -1.0840509 128.0 +1.590809 -2.4730792 -1.0847667 128.0 +1.5741031 -2.4804287 -1.083693 128.0 +1.5643054 -2.4987459 -1.0876298 128.0 +1.5459995 -2.5035307 -1.0854825 128.0 +1.5325525 -2.5161593 -1.0869139 128.0 +1.5190085 -2.528717 -1.0883455 128.0 +1.5058441 -2.5420065 -1.0901349 128.0 +1.4911605 -2.5528109 -1.0908506 128.0 +1.4777993 -2.5659578 -1.09264 128.0 +1.4597213 -2.5709174 -1.0908506 128.0 +1.4398135 -2.5724928 -1.0876298 128.0 +1.4185879 -2.5714684 -1.0833352 128.0 +1.402783 -2.5801244 -1.0833352 128.0 +1.3820733 -2.5796299 -1.0793985 128.0 +1.3605505 -2.5773273 -1.0747461 128.0 +1.352899 -2.601366 -1.0815458 128.0 +1.3381894 -2.6121113 -1.0826194 128.0 +1.3280272 -2.6319435 -1.0876298 128.0 +1.3147624 -2.6458957 -1.0901349 128.0 +1.3120492 -2.6815901 -1.1019449 128.0 +1.2939492 -2.6862254 -1.1005133 128.0 +1.2746413 -2.6882086 -1.0980083 128.0 +1.2514079 -2.6815951 -1.0919243 128.0 +1.2345406 -2.6883748 -1.0915664 128.0 +1.2057152 -2.6686704 -1.0801142 128.0 +1.1893178 -2.6760182 -1.0801142 128.0 +1.1672641 -2.6704323 -1.0747461 128.0 +1.1519632 -2.6801176 -1.0758197 128.0 +1.1322244 -2.6793947 -1.0725988 128.0 +1.1236452 -2.7052619 -1.0804721 128.0 +1.1102018 -2.7198858 -1.083693 128.0 +1.0927967 -2.7249136 -1.0829773 128.0 +1.0750293 -2.7289612 -1.0819037 128.0 +1.0586014 -2.736377 -1.0822616 128.0 +1.0407964 -2.7402022 -1.081188 128.0 +1.0229843 -2.7439122 -1.0801142 128.0 +1.0009936 -2.7361073 -1.0743883 128.0 +0.98765743 -2.7518649 -1.0783249 128.0 +0.96424043 -2.7393775 -1.0708094 128.0 +0.94253784 -2.7311203 -1.0650834 128.0 +0.92935413 -2.7474661 -1.0693779 128.0 +0.91512358 -2.7610936 -1.0725988 128.0 +0.90191442 -2.7782021 -1.0772512 128.0 +0.88824666 -2.7943618 -1.0815458 128.0 +0.86914134 -2.7935185 -1.0790406 128.0 +0.85960174 -2.8238101 -1.0890613 128.0 +0.84199244 -2.8281364 -1.0887034 128.0 +0.82566774 -2.8368356 -1.0901349 128.0 +0.81003463 -2.8481352 -1.09264 128.0 +0.79979497 -2.8791423 -1.1030185 128.0 +0.77600074 -2.8614659 -1.0940715 128.0 +0.75866747 -2.8670762 -1.0944295 128.0 +0.73896015 -2.8635402 -1.0912086 128.0 +0.71795744 -2.8544376 -1.0858403 128.0 +0.69976246 -2.8560684 -1.0847667 128.0 +0.68092418 -2.8548586 -1.0826194 128.0 +0.66212714 -2.8535256 -1.0804721 128.0 +0.64604497 -2.8639107 -1.0829773 128.0 +0.6340605 -2.8933594 -1.0929979 128.0 +0.61124057 -2.8734496 -1.083693 128.0 +0.59624118 -2.8899486 -1.0887034 128.0 +0.57831436 -2.892637 -1.0883455 128.0 +0.55966675 -2.8915474 -1.0865561 128.0 +0.54999512 -2.9380639 -1.1033764 128.0 +0.5397734 -2.9845686 -1.1201967 128.0 +0.51679105 -2.961149 -1.1098182 128.0 +0.50000721 -2.9725516 -1.1130391 128.0 +0.48101172 -2.9709549 -1.1112498 128.0 +0.46205473 -2.9692371 -1.1094604 128.0 +0.44451731 -2.9766338 -1.1112498 128.0 +0.42240593 -2.9524996 -1.1008712 128.0 +0.40833607 -2.9846401 -1.1123234 128.0 +0.38638443 -2.9593127 -1.1015871 128.0 +0.36718115 -2.9532881 -1.0983661 128.0 +0.34444806 -2.9165385 -1.0833352 128.0 +0.32571438 -2.9111736 -1.0804721 128.0 +0.30863172 -2.9205458 -1.0833352 128.0 +0.29070577 -2.9223847 -1.0833352 128.0 +0.27190033 -2.9148161 -1.0797564 128.0 +0.25514632 -2.9294529 -1.0847667 128.0 +0.23927906 -2.9570234 -1.0947874 128.0 +0.22127007 -2.9602983 -1.0955031 128.0 +0.2066866 -3.0137682 -1.1155443 128.0 +0.18696636 -2.9954088 -1.1080289 128.0 +0.16868851 -2.9983642 -1.1087446 128.0 +0.15047514 -3.0030732 -1.1101761 128.0 +0.132416 -3.0123355 -1.113397 128.0 +0.11382393 -3.0102921 -1.1123234 128.0 +0.095440023 -3.0137339 -1.113397 128.0 +0.077257715 -3.0263977 -1.1180495 128.0 +0.058868896 -3.0361507 -1.1216283 128.0 +0.040350799 -3.0448577 -1.1248492 128.0 +0.021694215 -3.0487831 -1.1262807 128.0 +0.0029774758 -3.0404549 -1.1230597 128.0 +-0.015711294 -3.0469522 -1.1255649 128.0 +-0.034354646 -3.04213 -1.1237755 128.0 +-0.052890968 -3.0343928 -1.1209124 128.0 +-0.071464904 -3.0321441 -1.1201967 128.0 +-0.089433536 -3.0101812 -1.1119655 128.0 +-0.10733535 -2.9937119 -1.1058816 128.0 +-0.12476505 -2.9706061 -1.0972924 128.0 +-0.14540812 -3.0201502 -1.1166179 128.0 +-0.16383567 -3.0173364 -1.1159022 128.0 +-0.18701306 -3.0936363 -1.1456062 128.0 +-0.20487681 -3.0756598 -1.1391643 128.0 +-0.22516562 -3.0939023 -1.1466798 128.0 +-0.24165067 -3.0608125 -1.1345119 128.0 +-0.26216665 -3.0797412 -1.1423852 128.0 +-0.28156739 -3.0836542 -1.1445326 128.0 +-0.30274531 -3.1051028 -1.1534795 128.0 +-0.32054168 -3.0911124 -1.1488271 128.0 +-0.34092879 -3.102082 -1.1538373 128.0 +-0.36017156 -3.1017869 -1.1545532 128.0 +-0.37942353 -3.1013722 -1.1552689 128.0 +-0.39832708 -3.0980597 -1.154911 128.0 +-0.47964773 -3.5582633 -1.3338505 128.0 +-0.62722427 -4.4475212 -1.6792039 128.0 +-0.52640462 -3.5733571 -1.3420818 128.0 +-0.68288815 -4.4468732 -1.6820669 128.0 +-0.71060276 -4.4453654 -1.6831405 128.0 +-0.73985416 -4.4528966 -1.6877929 128.0 +-0.76541793 -4.4381509 -1.6838562 128.0 +-0.79214275 -4.4306135 -1.6827826 128.0 +-0.81914365 -4.4247513 -1.6824248 128.0 +-0.8457514 -4.4168906 -1.6813512 128.0 +-0.87338048 -4.4143658 -1.6824248 128.0 +-0.89970303 -4.4052644 -1.6809932 128.0 +-0.92498487 -4.3914375 -1.6777723 128.0 +-0.95151687 -4.3838539 -1.6770566 128.0 +-0.9765656 -4.3697314 -1.6738356 128.0 +-1.0033593 -4.363657 -1.6738356 128.0 +-1.0223846 -4.3247037 -1.660952 128.0 +-1.0475793 -4.3129044 -1.6588048 128.0 +-1.0679244 -4.2819328 -1.649142 128.0 +-1.0784402 -4.2137842 -1.6248063 128.0 +-1.1016684 -4.1971526 -1.6208695 128.0 +-1.1518952 -4.2813883 -1.6570153 128.0 +-1.1875694 -4.3084478 -1.6706147 128.0 +-1.2132225 -4.2983842 -1.6695411 128.0 +-1.2419057 -4.298933 -1.672762 128.0 +-1.2690538 -4.2939181 -1.6738356 128.0 +-1.295917 -4.2878385 -1.6745514 128.0 +-1.3233045 -4.2833748 -1.675983 128.0 +-1.3456277 -4.2627077 -1.6709726 128.0 +-1.3783467 -4.2748117 -1.6792039 128.0 +-1.406302 -4.271596 -1.6813512 128.0 +-1.4289173 -4.2522645 -1.6770566 128.0 +-1.4580096 -4.2522502 -1.6806353 128.0 +-1.4837652 -4.2423425 -1.6802775 128.0 +-1.5119631 -4.239315 -1.6827826 128.0 +-1.5360327 -4.2246923 -1.6806353 128.0 +-1.5583578 -4.2055564 -1.6766987 128.0 +-1.5831442 -4.1932945 -1.6756251 128.0 +-1.6121948 -4.1922174 -1.6792039 128.0 +-1.6195042 -4.135293 -1.6598784 128.0 +-1.1735775 -2.9430194 -1.1720892 128.0 +-1.1919646 -2.9366283 -1.1724471 128.0 +-1.2110301 -2.9318485 -1.1735207 128.0 +-1.7306283 -4.1184077 -1.669899 128.0 +-1.7621038 -4.1223083 -1.675983 128.0 +-1.7925755 -4.1234078 -1.6809932 128.0 +-1.8087837 -4.0918331 -1.6724042 128.0 +-1.8323258 -4.077251 -1.6709726 128.0 +-1.5725875 -3.4424832 -1.4082894 128.0 +-1.584246 -3.4124415 -1.3997003 128.0 +-1.5876294 -3.3654959 -1.3839536 128.0 +-1.5933213 -3.3245332 -1.370712 128.0 +-1.6112386 -3.3096566 -1.3685648 128.0 +-1.6344123 -3.3055675 -1.3710699 128.0 +-1.6588532 -3.303822 -1.3746488 128.0 +-1.683758 -3.3027327 -1.3785855 128.0 +-1.7095699 -3.3031204 -1.3832378 128.0 +-1.7350157 -3.3024888 -1.3875324 128.0 +-1.7675459 -3.3148527 -1.397553 128.0 +-2.1161945 -3.9108768 -1.6620257 128.0 +-2.1280193 -3.8757176 -1.6523629 128.0 +-2.15903 -3.8756399 -1.658089 128.0 +-2.183229 -3.8631322 -1.6584469 128.0 +-2.2110705 -3.8569548 -1.6616678 128.0 +-2.2281249 -3.8320136 -1.6566575 128.0 +-2.258235 -3.8295312 -1.6616678 128.0 +-2.2802525 -3.8131983 -1.6605941 128.0 +-2.304091 -3.7999337 -1.660952 128.0 +-2.3263857 -3.7841337 -1.6602362 128.0 +-2.3505485 -3.7713728 -1.660952 128.0 +-2.3701541 -3.751353 -1.6584469 128.0 +-2.3941345 -3.7383122 -1.6591626 128.0 +-2.4160106 -3.7219851 -1.6584469 128.0 +-2.4346976 -3.7008495 -1.6555839 128.0 +-2.4558063 -3.6835101 -1.6545101 128.0 +-2.4799294 -3.6706934 -1.6555839 128.0 +-2.5034606 -3.6569488 -1.6562996 128.0 +-2.5125489 -3.6223364 -1.6473526 128.0 +-2.5331175 -3.6045594 -1.646279 128.0 +-2.5519381 -3.5843842 -1.6441317 128.0 +-2.5804372 -3.5777471 -1.6484263 128.0 +-2.6050951 -3.5656166 -1.6502156 128.0 +-2.638588 -3.5653279 -1.6577311 128.0 +-2.6559348 -3.5430932 -1.6548681 128.0 +-2.6764956 -3.5252423 -1.6541523 128.0 +-2.6940918 -3.5035715 -1.6516472 128.0 +-2.7126701 -3.4832909 -1.6498578 128.0 +-2.7241633 -3.4541159 -1.6437738 128.0 +-2.3485131 -2.9404261 -1.4000582 128.0 +-2.3512456 -2.9070823 -1.3907533 128.0 +-2.3737714 -2.8983803 -1.3936163 128.0 +-2.805727 -3.3833458 -1.6423423 128.0 +-2.8342392 -3.3753636 -1.6469947 128.0 +-2.8609443 -3.3650241 -1.6505735 128.0 +-2.8858018 -3.3523605 -1.6530787 128.0 +-2.894048 -3.3205106 -1.6459211 128.0 +-2.9217811 -3.3110931 -1.6502156 128.0 +-2.9395542 -3.2903175 -1.6487842 128.0 +-2.9584353 -3.2708337 -1.6480684 128.0 +-2.9784491 -3.2526195 -1.6480684 128.0 +-2.995177 -3.2308586 -1.646279 128.0 +-3.0206952 -3.2185481 -1.6494999 128.0 +-3.0558219 -3.2162008 -1.658089 128.0 +-3.0774403 -3.199409 -1.6591626 128.0 +-3.094408 -3.1777899 -1.6577311 128.0 +-3.1053274 -3.1500976 -1.6530787 128.0 +-3.1391075 -3.1455264 -1.660952 128.0 +-3.1643212 -3.1321187 -1.6641729 128.0 +-3.1841474 -3.1132965 -1.6645308 128.0 +-3.1877437 -3.078779 -1.6562996 128.0 +-3.2133303 -3.0656078 -1.6598784 128.0 +-3.233439 -3.0471144 -1.6605941 128.0 +-3.2643764 -3.0386701 -1.6670359 128.0 +-3.2829599 -3.0185831 -1.6670359 128.0 +-3.3104053 -3.0065444 -1.6716884 128.0 +-3.3253155 -2.9830575 -1.669899 128.0 +-3.3512437 -2.9694102 -1.6738356 128.0 +-3.3694007 -2.9487915 -1.6738356 128.0 +-3.3831925 -2.9243975 -1.6716884 128.0 +-3.4081736 -2.909647 -1.6752672 128.0 +-3.4273903 -2.889884 -1.675983 128.0 +-3.4515154 -2.8741779 -1.6792039 128.0 +-3.4755764 -2.8582842 -1.6824248 128.0 +-3.4988472 -2.8416147 -1.6852878 128.0 +-3.53297 -2.8335314 -1.693519 128.0 +-3.558341 -2.8181779 -1.6974556 128.0 +-3.5821855 -2.8014691 -1.7006766 128.0 +-3.6044807 -2.7834318 -1.7031817 128.0 +-3.6274316 -2.7657926 -1.7060448 128.0 +-3.6383662 -2.7389896 -1.7031817 128.0 +-3.6566026 -2.7177277 -1.7038975 128.0 +-3.6799846 -2.7002122 -1.7071184 128.0 +-3.703289 -2.682512 -1.7103393 128.0 +-3.7265146 -2.6646273 -1.7135602 128.0 +-3.7435572 -2.6422503 -1.7139181 128.0 +-3.7482073 -2.611223 -1.70855 128.0 +-3.7672365 -2.5902917 -1.7099814 128.0 +-3.7961938 -2.5760422 -1.7160654 128.0 +-3.8158078 -2.555299 -1.7178547 128.0 +-3.8337519 -2.5333822 -1.7189285 128.0 +-3.8492243 -2.5098109 -1.7189285 128.0 +-3.8779011 -2.4947348 -1.7250124 128.0 +-3.9010189 -2.475898 -1.7285912 128.0 +-3.9303825 -2.4608359 -1.735033 128.0 +-3.9636796 -2.4479599 -1.7432642 128.0 +-3.9818151 -2.4255366 -1.7446958 128.0 +-4.0006247 -2.4034636 -1.7464851 128.0 +-4.0257401 -2.3850594 -1.7511375 128.0 +-4.052392 -2.3673792 -1.7565057 128.0 +-4.0700784 -2.3443341 -1.7579372 128.0 +-4.0933175 -2.3243892 -1.761874 128.0 +-4.1262422 -2.3097212 -1.7701051 128.0 +-4.1411543 -2.2848108 -1.770463 128.0 +-4.1583767 -2.2611425 -1.7718946 128.0 +-4.1721725 -2.2355847 -1.7718946 128.0 +-4.1924171 -2.2134309 -1.7747576 128.0 +-4.2075763 -2.1885269 -1.7754734 128.0 +-4.1935024 -2.1486149 -1.7636633 128.0 +-4.1649275 -2.1018057 -1.7457694 128.0 +-4.1835985 -2.0791199 -1.7482746 128.0 +-4.2155671 -2.0628521 -1.7565057 128.0 +-4.2424455 -2.043838 -1.7625897 128.0 +-4.2751546 -2.0273726 -1.7711787 128.0 +-4.3078208 -2.0105824 -1.7797679 128.0 +-4.3531685 -1.9993142 -1.7937251 128.0 +-4.4036441 -1.9898721 -1.8098297 128.0 +-4.4533134 -1.9795059 -1.8255764 128.0 +-4.508153 -1.970849 -1.8434703 128.0 +-4.566484 -1.9630684 -1.8627958 128.0 +-4.6369286 -1.9597355 -1.8871316 128.0 +-4.6962919 -1.9509534 -1.9068149 128.0 +-4.7712808 -1.9478697 -1.9329401 128.0 +-4.8186746 -1.9328122 -1.9476131 128.0 +-4.8591118 -1.914507 -1.9594232 128.0 +-4.8855715 -1.8903855 -1.9655071 128.0 +-4.9092989 -1.8650161 -1.9705174 128.0 +-4.9250245 -1.8364897 -1.9723068 128.0 +-4.9388309 -1.8071985 -1.9733804 128.0 +-4.9498267 -1.7768605 -1.9733804 128.0 +-4.964159 -1.747696 -1.974812 128.0 +-4.9686108 -1.7150704 -1.9723068 128.0 +-4.976387 -1.6836534 -1.9712331 128.0 +-4.9821925 -1.6516176 -1.9694438 128.0 +-5.0020022 -1.6241893 -1.9733804 128.0 +-5.0074244 -1.5920521 -1.9715911 128.0 +-5.0144243 -1.5604645 -1.9705174 128.0 +-5.017652 -1.5277629 -1.9680122 128.0 +-5.0269318 -1.4969463 -1.9680122 128.0 +-5.0198846 -1.4613743 -1.9615705 128.0 +-5.0521078 -1.4371899 -1.9708753 128.0 +-5.0374398 -1.3996625 -1.9615705 128.0 +-5.0360203 -1.3660372 -1.9576337 128.0 +-5.0542364 -1.3377399 -1.9615705 128.0 +-5.0677743 -1.3081032 -1.9637177 128.0 +-5.0838552 -1.2790344 -1.9669386 128.0 +-5.0888867 -1.2471493 -1.965865 128.0 +-5.1064339 -1.2182854 -1.9698017 128.0 +-5.1165419 -1.1875637 -1.9708753 128.0 +-5.1246433 -1.1563524 -1.9712331 128.0 +-5.1243453 -1.1232862 -1.9683702 128.0 +-5.1357079 -1.0927948 -1.9701595 128.0 +-5.1368294 -1.0601293 -1.9680122 128.0 +-5.1459842 -1.02914 -1.9690859 128.0 +-0 -0 -0 128.0 +-5.1224318 -0.95920771 -1.9551287 128.0 +-5.155786 -0.93274808 -1.965865 128.0 +-5.1641717 -0.90157723 -1.9669386 128.0 +-5.19631 -0.87436891 -1.9773171 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 +-0 -0 -0 128.0 diff --git a/perception/ground_segmentation/test/test_ransac_ground_filter.cpp b/perception/ground_segmentation/test/test_ransac_ground_filter.cpp new file mode 100644 index 0000000000000..79e28b6b1ccd8 --- /dev/null +++ b/perception/ground_segmentation/test/test_ransac_ground_filter.cpp @@ -0,0 +1,228 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "ament_index_cpp/get_package_share_directory.hpp" +#include "tf2_ros/transform_broadcaster.h" + +#include +#include + +#include "geometry_msgs/msg/transform_stamped.hpp" +#include +#include + +#include + +#ifdef ROS_DISTRO_GALACTIC +#include +#include +#else +#include +#include +#endif +#include + +void setPointCloud2Fields(sensor_msgs::msg::PointCloud2 & pointcloud) +{ + pointcloud.fields.resize(4); + pointcloud.fields[0].name = "x"; + pointcloud.fields[1].name = "y"; + pointcloud.fields[2].name = "z"; + pointcloud.fields[3].name = "intensity"; + pointcloud.fields[0].offset = 0; + pointcloud.fields[1].offset = 4; + pointcloud.fields[2].offset = 8; + pointcloud.fields[3].offset = 12; + pointcloud.fields[0].datatype = sensor_msgs::msg::PointField::FLOAT32; + pointcloud.fields[1].datatype = sensor_msgs::msg::PointField::FLOAT32; + pointcloud.fields[2].datatype = sensor_msgs::msg::PointField::FLOAT32; + pointcloud.fields[3].datatype = sensor_msgs::msg::PointField::FLOAT32; + pointcloud.fields[0].count = 1; + pointcloud.fields[1].count = 1; + pointcloud.fields[2].count = 1; + pointcloud.fields[3].count = 1; + pointcloud.height = 1; + pointcloud.point_step = 16; + pointcloud.is_bigendian = false; + pointcloud.is_dense = true; + pointcloud.header.frame_id = "base_link"; + pointcloud.header.stamp.sec = 0; + pointcloud.header.stamp.nanosec = 0; +} + +class RansacGroundFilterTestSuite : public ::testing::Test +{ +protected: + void SetUp() { rclcpp::init(0, nullptr); } + void TearDown() { (void)rclcpp::shutdown(); } +}; + +class RansacGroundFilterTest : public ground_segmentation::RANSACGroundFilterComponent +{ +public: + explicit RansacGroundFilterTest(const rclcpp::NodeOptions & options) + : RANSACGroundFilterComponent(options) + { + input_pointcloud_pub_ = this->create_publisher( + "/test_ransac_ground_filter/input_cloud", 1); + + output_pointcloud_pub_ = this->create_publisher( + "/test_ransac_ground_filter/output_cloud", 1); + } + + ~RansacGroundFilterTest() {} + + void filter(const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output) + { + return RANSACGroundFilterComponent::filter(input, indices, output); + } + + rclcpp::Publisher::SharedPtr input_pointcloud_pub_; + rclcpp::Publisher::SharedPtr output_pointcloud_pub_; +}; + +void convertPCL2PointCloud2( + const pcl::PointCloud & pcl_cloud, sensor_msgs::msg::PointCloud2 & cloud) +{ + cloud.height = 1; + cloud.width = pcl_cloud.size(); + cloud.is_dense = true; + cloud.is_bigendian = false; + cloud.point_step = 16; + cloud.row_step = cloud.point_step * cloud.width; + cloud.fields.resize(4); + cloud.fields[0].name = "x"; + cloud.fields[0].offset = 0; + cloud.fields[0].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[0].count = 1; + cloud.fields[1].name = "y"; + cloud.fields[1].offset = 4; + cloud.fields[1].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[1].count = 1; + cloud.fields[2].name = "z"; + cloud.fields[2].offset = 8; + cloud.fields[2].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[2].count = 1; + cloud.fields[3].name = "intensity"; + cloud.fields[3].offset = 12; + cloud.fields[3].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[3].count = 1; + cloud.data.resize(cloud.row_step * cloud.height); + for (size_t i = 0; i < pcl_cloud.size(); ++i) { + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[0].offset], &pcl_cloud[i].x, sizeof(float)); + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[1].offset], &pcl_cloud[i].y, sizeof(float)); + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[2].offset], &pcl_cloud[i].z, sizeof(float)); + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[3].offset], &pcl_cloud[i].intensity, + sizeof(float)); + } +} + +TEST_F(RansacGroundFilterTestSuite, TestCase1) +{ + const auto share_dir = ament_index_cpp::get_package_share_directory("ground_segmentation"); + const auto config_path = share_dir + "/config/ransac_ground_filter.param.yaml"; + YAML::Node config = YAML::LoadFile(config_path); + auto params = config["/**"]["ros__parameters"]; + + std::string base_frame = params["base_frame"].as(); + std::string unit_axis = params["unit_axis"].as(); + int max_iterations = params["max_iterations"].as(); + int min_trial = params["min_trial"].as(); + int min_points = params["min_points"].as(); + double outlier_threshold = params["outlier_threshold"].as(); + double plane_slope_threshold = params["plane_slope_threshold"].as(); + double voxel_size_x = params["voxel_size_x"].as(); + double voxel_size_y = params["voxel_size_y"].as(); + double voxel_size_z = params["voxel_size_z"].as(); + double height_threshold = params["height_threshold"].as(); + bool debug = params["debug"].as(); + + const auto pcd_path = share_dir + "/data/test.pcd"; + pcl::PointCloud cloud; + pcl::io::loadPCDFile(pcd_path, cloud); + + sensor_msgs::msg::PointCloud2::SharedPtr origin_input_msg_ptr(new sensor_msgs::msg::PointCloud2); + convertPCL2PointCloud2(cloud, *origin_input_msg_ptr); + origin_input_msg_ptr->header.frame_id = "velodyne_top"; + + // input cloud frame MUST be base_link + sensor_msgs::msg::PointCloud2::SharedPtr input_msg_ptr(new sensor_msgs::msg::PointCloud2); + + geometry_msgs::msg::TransformStamped t; + t.header.frame_id = "base_link"; + t.child_frame_id = "velodyne_top"; + t.transform.translation.x = 0.6; + t.transform.translation.y = 0; + t.transform.translation.z = 2; + tf2::Quaternion q; + q.setRPY(0.0, 0.0, 0.0); + t.transform.rotation.x = q.x(); + t.transform.rotation.y = q.y(); + t.transform.rotation.z = q.z(); + t.transform.rotation.w = q.w(); + + tf2::doTransform(*origin_input_msg_ptr, *input_msg_ptr, t); + std::vector parameters; + parameters.emplace_back("base_frame", base_frame); + parameters.emplace_back("unit_axis", unit_axis); + parameters.emplace_back("max_iterations", max_iterations); + parameters.emplace_back("min_trial", min_trial); + parameters.emplace_back("min_points", min_points); + parameters.emplace_back("outlier_threshold", outlier_threshold); + parameters.emplace_back("plane_slope_threshold", plane_slope_threshold); + parameters.emplace_back("voxel_size_x", voxel_size_x); + parameters.emplace_back("voxel_size_y", voxel_size_y); + parameters.emplace_back("voxel_size_z", voxel_size_z); + parameters.emplace_back("height_threshold", height_threshold); + parameters.emplace_back("debug", debug); + + rclcpp::NodeOptions node_options; + node_options.parameter_overrides(parameters); + auto ransac_ground_filter_test = std::make_shared(node_options); + ransac_ground_filter_test->input_pointcloud_pub_->publish(*input_msg_ptr); + + sensor_msgs::msg::PointCloud2 out_cloud; + ransac_ground_filter_test->filter(input_msg_ptr, nullptr, out_cloud); + ransac_ground_filter_test->output_pointcloud_pub_->publish(out_cloud); + std::cout << "out_cloud.width: " << out_cloud.width << std::endl; + std::cout << "out_cloud.height: " << out_cloud.height << std::endl; + std::cout << "out_cloud.row_step: " << out_cloud.row_step << std::endl; + std::cout << "out_cloud.point_step: " << out_cloud.point_step << std::endl; + std::cout << "out_cloud.is_dense: " << out_cloud.is_dense << std::endl; + std::cout << "out_cloud.is_bigendian: " << out_cloud.is_bigendian << std::endl; + std::cout << "out_cloud.data.size(): " << out_cloud.data.size() << std::endl; + + // check out_cloud + int effect_num = 0; + int total_num = 0; + const float min_no_ground_point_z = 0.1; // z in base_frame + for (sensor_msgs::PointCloud2ConstIterator iter_x(out_cloud, "x"), iter_y(out_cloud, "y"), + iter_z(out_cloud, "z"), iter_intensity(out_cloud, "intensity"); + iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++iter_intensity) { + const float z = *iter_z; + total_num += 1; + if (z > min_no_ground_point_z) { + effect_num += 1; + } + } + + const float percent = 1.0 * effect_num / total_num; + std::cout << "effect_num=" << effect_num << ",total_num=" << total_num + << ",percentage:" << percent << std::endl; + EXPECT_GE(percent, 0.8); +} diff --git a/perception/ground_segmentation/test/test_ray_ground_filter.cpp b/perception/ground_segmentation/test/test_ray_ground_filter.cpp index 0c1db47a5ae09..68dddf0c68bc7 100644 --- a/perception/ground_segmentation/test/test_ray_ground_filter.cpp +++ b/perception/ground_segmentation/test/test_ray_ground_filter.cpp @@ -61,6 +61,46 @@ class RayGroundFilterComponentTest : public ground_segmentation::RayGroundFilter rclcpp::Publisher::SharedPtr output_pointcloud_pub_; }; +void convertPCL2PointCloud2( + const pcl::PointCloud & pcl_cloud, sensor_msgs::msg::PointCloud2 & cloud) +{ + cloud.height = 1; + cloud.width = pcl_cloud.size(); + cloud.is_dense = true; + cloud.is_bigendian = false; + cloud.point_step = 16; + cloud.row_step = cloud.point_step * cloud.width; + cloud.fields.resize(4); + cloud.fields[0].name = "x"; + cloud.fields[0].offset = 0; + cloud.fields[0].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[0].count = 1; + cloud.fields[1].name = "y"; + cloud.fields[1].offset = 4; + cloud.fields[1].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[1].count = 1; + cloud.fields[2].name = "z"; + cloud.fields[2].offset = 8; + cloud.fields[2].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[2].count = 1; + cloud.fields[3].name = "intensity"; + cloud.fields[3].offset = 12; + cloud.fields[3].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[3].count = 1; + cloud.data.resize(cloud.row_step * cloud.height); + for (size_t i = 0; i < pcl_cloud.size(); ++i) { + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[0].offset], &pcl_cloud[i].x, sizeof(float)); + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[1].offset], &pcl_cloud[i].y, sizeof(float)); + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[2].offset], &pcl_cloud[i].z, sizeof(float)); + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[3].offset], &pcl_cloud[i].intensity, + sizeof(float)); + } +} + TEST_F(RayGroundFilterComponentTestSuite, TestCase1) { const auto share_dir = ament_index_cpp::get_package_share_directory("ground_segmentation"); @@ -83,11 +123,11 @@ TEST_F(RayGroundFilterComponentTestSuite, TestCase1) double reclass_distance_threshold_ = params["reclass_distance_threshold"].as(); const auto pcd_path = share_dir + "/data/test.pcd"; - pcl::PointCloud cloud; - pcl::io::loadPCDFile(pcd_path, cloud); + pcl::PointCloud cloud; + pcl::io::loadPCDFile(pcd_path, cloud); sensor_msgs::msg::PointCloud2::SharedPtr origin_input_msg_ptr(new sensor_msgs::msg::PointCloud2); - pcl::toROSMsg(cloud, *origin_input_msg_ptr); + convertPCL2PointCloud2(cloud, *origin_input_msg_ptr); origin_input_msg_ptr->header.frame_id = "velodyne_top"; // input cloud frame MUST be base_link @@ -141,8 +181,8 @@ TEST_F(RayGroundFilterComponentTestSuite, TestCase1) int total_num = 0; const float min_no_ground_point_z = 0.1; // z in base_frame for (sensor_msgs::PointCloud2ConstIterator iter_x(out_cloud, "x"), iter_y(out_cloud, "y"), - iter_z(out_cloud, "z"); - iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z) { + iter_z(out_cloud, "z"), iter_intensity(out_cloud, "intensity"); + iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++iter_intensity) { const float z = *iter_z; total_num += 1; if (z > min_no_ground_point_z) { diff --git a/perception/ground_segmentation/test/test_scan_ground_filter.cpp b/perception/ground_segmentation/test/test_scan_ground_filter.cpp index e48bd36d8c54e..af97f7e0112fd 100644 --- a/perception/ground_segmentation/test/test_scan_ground_filter.cpp +++ b/perception/ground_segmentation/test/test_scan_ground_filter.cpp @@ -31,6 +31,45 @@ #include +void convertPCL2PointCloud2( + const pcl::PointCloud & pcl_cloud, sensor_msgs::msg::PointCloud2 & cloud) +{ + cloud.height = 1; + cloud.width = pcl_cloud.size(); + cloud.is_dense = true; + cloud.is_bigendian = false; + cloud.point_step = 16; + cloud.row_step = cloud.point_step * cloud.width; + cloud.fields.resize(4); + cloud.fields[0].name = "x"; + cloud.fields[0].offset = 0; + cloud.fields[0].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[0].count = 1; + cloud.fields[1].name = "y"; + cloud.fields[1].offset = 4; + cloud.fields[1].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[1].count = 1; + cloud.fields[2].name = "z"; + cloud.fields[2].offset = 8; + cloud.fields[2].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[2].count = 1; + cloud.fields[3].name = "intensity"; + cloud.fields[3].offset = 12; + cloud.fields[3].datatype = sensor_msgs::msg::PointField::FLOAT32; + cloud.fields[3].count = 1; + cloud.data.resize(cloud.row_step * cloud.height); + for (size_t i = 0; i < pcl_cloud.size(); ++i) { + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[0].offset], &pcl_cloud[i].x, sizeof(float)); + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[1].offset], &pcl_cloud[i].y, sizeof(float)); + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[2].offset], &pcl_cloud[i].z, sizeof(float)); + memcpy( + &cloud.data[i * cloud.point_step + cloud.fields[3].offset], &pcl_cloud[i].intensity, + sizeof(float)); + } +} class ScanGroundFilterTest : public ::testing::Test { protected: @@ -94,9 +133,9 @@ class ScanGroundFilterTest : public ::testing::Test std::make_shared(); const auto share_dir = ament_index_cpp::get_package_share_directory("ground_segmentation"); const auto pcd_path = share_dir + "/data/test.pcd"; - pcl::PointCloud cloud; - pcl::io::loadPCDFile(pcd_path, cloud); - pcl::toROSMsg(cloud, *origin_input_msg_ptr); + pcl::PointCloud cloud; + pcl::io::loadPCDFile(pcd_path, cloud); + convertPCL2PointCloud2(cloud, *origin_input_msg_ptr); origin_input_msg_ptr->header.frame_id = "velodyne_top"; // input cloud frame MUST be base_link From c32680a51ad6c4fe1c7791608afdc38b1ec108d0 Mon Sep 17 00:00:00 2001 From: Kenzo Lobos Tsunekawa Date: Wed, 3 Jul 2024 13:58:07 +0900 Subject: [PATCH 029/306] chore: add maintainers to the apollo related packages (#7799) Signed-off-by: Kenzo Lobos-Tsunekawa --- perception/lidar_apollo_instance_segmentation/package.xml | 1 + perception/lidar_apollo_segmentation_tvm/package.xml | 2 +- perception/lidar_apollo_segmentation_tvm_nodes/package.xml | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/perception/lidar_apollo_instance_segmentation/package.xml b/perception/lidar_apollo_instance_segmentation/package.xml index 1157b7575933c..cf6f5a514aa0d 100755 --- a/perception/lidar_apollo_instance_segmentation/package.xml +++ b/perception/lidar_apollo_instance_segmentation/package.xml @@ -4,6 +4,7 @@ lidar_apollo_instance_segmentation 0.1.0 lidar_apollo_instance_segmentation + Yoshi Ri Yukihiro Saito Apache License 2.0 diff --git a/perception/lidar_apollo_segmentation_tvm/package.xml b/perception/lidar_apollo_segmentation_tvm/package.xml index 643a331e54a5a..ca4f3d2645cb9 100755 --- a/perception/lidar_apollo_segmentation_tvm/package.xml +++ b/perception/lidar_apollo_segmentation_tvm/package.xml @@ -5,7 +5,7 @@ 0.1.0 lidar_apollo_segmentation_tvm Ambroise Vincent - Xinyu Wang + Yoshi Ri Apache 2.0 ament_cmake_auto diff --git a/perception/lidar_apollo_segmentation_tvm_nodes/package.xml b/perception/lidar_apollo_segmentation_tvm_nodes/package.xml index b6c6cb261eb29..7d3ac6fbe5ac7 100755 --- a/perception/lidar_apollo_segmentation_tvm_nodes/package.xml +++ b/perception/lidar_apollo_segmentation_tvm_nodes/package.xml @@ -5,7 +5,7 @@ 0.1.0 lidar_apollo_segmentation_tvm_nodes Ambroise Vincent - Xinyu Wang + Yoshi Ri Apache 2.0 ament_cmake From 813e66faaa0215764c1c8d6e8daaad5e8ffa2c4a Mon Sep 17 00:00:00 2001 From: ralwing <58466562+ralwing@users.noreply.github.com> Date: Wed, 3 Jul 2024 08:46:48 +0200 Subject: [PATCH 030/306] feat(pointcloud_preprocessor): runtime configurable output topic qos (#6658) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(pointcloud_preprocessor): runtime configurable output topic qos Signed-off-by: Grzegorz GÅ‚owacki * configurable qos in livox_tag_filter_node Signed-off-by: Grzegorz GÅ‚owacki * configurable qos in radar_scan_to_pointcloud2 Signed-off-by: Grzegorz GÅ‚owacki --------- Signed-off-by: Grzegorz GÅ‚owacki --- .../src/livox_tag_filter_node.cpp | 10 +++++++--- .../concatenate_and_time_sync_nodelet.cpp | 9 +++++++-- .../src/concatenate_data/concatenate_pointclouds.cpp | 4 +++- .../src/crop_box_filter/crop_box_filter_nodelet.cpp | 6 ++++-- .../distortion_corrector/distortion_corrector.cpp | 11 +++++++---- sensing/pointcloud_preprocessor/src/filter.cpp | 4 +++- .../dual_return_outlier_filter_nodelet.cpp | 9 ++++++--- .../outlier_filter/ring_outlier_filter_nodelet.cpp | 8 ++++++-- .../time_synchronizer/time_synchronizer_nodelet.cpp | 4 +++- .../lanelet2_map_filter_nodelet.cpp | 4 +++- .../radar_scan_to_pointcloud2_node.cpp | 12 +++++++++--- 11 files changed, 58 insertions(+), 23 deletions(-) diff --git a/sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.cpp b/sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.cpp index 10da7b931f4ae..c6d5f63e62322 100644 --- a/sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.cpp +++ b/sensing/livox/autoware_livox_tag_filter/src/livox_tag_filter_node.cpp @@ -47,9 +47,13 @@ LivoxTagFilterNode::LivoxTagFilterNode(const rclcpp::NodeOptions & node_options) sub_pointcloud_ = this->create_subscription( "input", rclcpp::SensorDataQoS(), std::bind(&LivoxTagFilterNode::onPointCloud, this, _1)); - // Publisher - pub_pointcloud_ = - this->create_publisher("output", rclcpp::SensorDataQoS()); + { + // Publisher + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); + pub_pointcloud_ = this->create_publisher( + "output", rclcpp::SensorDataQoS(), pub_options); + } } void LivoxTagFilterNode::onPointCloud(const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg) diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index a45de33d0d4c7..9a13f57a87b72 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -140,8 +140,10 @@ PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchro // Output Publishers { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); pub_output_ = this->create_publisher( - "output", rclcpp::SensorDataQoS().keep_last(maximum_queue_size_)); + "output", rclcpp::SensorDataQoS().keep_last(maximum_queue_size_), pub_options); } // Subscribers @@ -191,10 +193,13 @@ PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchro // Transformed Raw PointCloud2 Publisher to publish the transformed pointcloud if (publish_synchronized_pointcloud_) { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); + for (auto & topic : input_topics_) { std::string new_topic = replaceSyncTopicNamePostfix(topic, synchronized_pointcloud_postfix_); auto publisher = this->create_publisher( - new_topic, rclcpp::SensorDataQoS().keep_last(maximum_queue_size_)); + new_topic, rclcpp::SensorDataQoS().keep_last(maximum_queue_size_), pub_options); transformed_raw_pc_publisher_map_.insert({topic, publisher}); } } diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp index b395acc1456f5..c2d185d1ed2c2 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp @@ -97,8 +97,10 @@ PointCloudConcatenationComponent::PointCloudConcatenationComponent( // Output Publishers { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); pub_output_ = this->create_publisher( - "output", rclcpp::SensorDataQoS().keep_last(maximum_queue_size_)); + "output", rclcpp::SensorDataQoS().keep_last(maximum_queue_size_), pub_options); } // Subscribers diff --git a/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp index e95caa8e28572..0e73d91f78133 100644 --- a/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp @@ -87,8 +87,10 @@ CropBoxFilterComponent::CropBoxFilterComponent(const rclcpp::NodeOptions & optio // set additional publishers { - crop_box_polygon_pub_ = - this->create_publisher("~/crop_box_polygon", 10); + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); + crop_box_polygon_pub_ = this->create_publisher( + "~/crop_box_polygon", 10, pub_options); } // set parameter service callback diff --git a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp index 6ac11f0ff9fa6..fb444c2e55018 100644 --- a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp +++ b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp @@ -40,10 +40,13 @@ DistortionCorrectorComponent::DistortionCorrectorComponent(const rclcpp::NodeOpt time_stamp_field_name_ = declare_parameter("time_stamp_field_name"); use_imu_ = declare_parameter("use_imu"); - // Publisher - undistorted_points_pub_ = - this->create_publisher("~/output/pointcloud", rclcpp::SensorDataQoS()); - + { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); + // Publisher + undistorted_points_pub_ = this->create_publisher( + "~/output/pointcloud", rclcpp::SensorDataQoS(), pub_options); + } // Subscriber twist_sub_ = this->create_subscription( "~/input/twist", 10, diff --git a/sensing/pointcloud_preprocessor/src/filter.cpp b/sensing/pointcloud_preprocessor/src/filter.cpp index b535da896ce77..b306e23af5e8e 100644 --- a/sensing/pointcloud_preprocessor/src/filter.cpp +++ b/sensing/pointcloud_preprocessor/src/filter.cpp @@ -89,8 +89,10 @@ pointcloud_preprocessor::Filter::Filter( // Set publisher { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); pub_output_ = this->create_publisher( - "output", rclcpp::SensorDataQoS().keep_last(max_queue_size_)); + "output", rclcpp::SensorDataQoS().keep_last(max_queue_size_), pub_options); } subscribe(filter_name); diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp index d17abafcde4ed..7da38e47a16df 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp @@ -67,9 +67,12 @@ DualReturnOutlierFilterComponent::DualReturnOutlierFilterComponent( image_transport::create_publisher(this, "dual_return_outlier_filter/debug/frequency_image"); visibility_pub_ = create_publisher( "dual_return_outlier_filter/debug/visibility", rclcpp::SensorDataQoS()); - noise_cloud_pub_ = create_publisher( - "dual_return_outlier_filter/debug/pointcloud_noise", rclcpp::SensorDataQoS()); - + { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); + noise_cloud_pub_ = create_publisher( + "dual_return_outlier_filter/debug/pointcloud_noise", rclcpp::SensorDataQoS(), pub_options); + } using std::placeholders::_1; set_param_res_ = this->add_on_set_parameters_callback( std::bind(&DualReturnOutlierFilterComponent::paramCallback, this, _1)); diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp index 3bc43df2e4557..28fbc11b77180 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp @@ -33,8 +33,12 @@ RingOutlierFilterComponent::RingOutlierFilterComponent(const rclcpp::NodeOptions using autoware::universe_utils::StopWatch; stop_watch_ptr_ = std::make_unique>(); debug_publisher_ = std::make_unique(this, "ring_outlier_filter"); - outlier_pointcloud_publisher_ = - this->create_publisher("debug/ring_outlier_filter", 1); + { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); + outlier_pointcloud_publisher_ = + this->create_publisher("debug/ring_outlier_filter", 1, pub_options); + } visibility_pub_ = create_publisher( "ring_outlier_filter/debug/visibility", rclcpp::SensorDataQoS()); stop_watch_ptr_->tic("cyclic_time"); diff --git a/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp b/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp index 31d080da64f33..a2e70d0f7ead9 100644 --- a/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp @@ -160,10 +160,12 @@ PointCloudDataSynchronizerComponent::PointCloudDataSynchronizerComponent( // Transformed Raw PointCloud2 Publisher { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); for (auto & topic : input_topics_) { std::string new_topic = replaceSyncTopicNamePostfix(topic, synchronized_pointcloud_postfix); auto publisher = this->create_publisher( - new_topic, rclcpp::SensorDataQoS().keep_last(maximum_queue_size_)); + new_topic, rclcpp::SensorDataQoS().keep_last(maximum_queue_size_), pub_options); transformed_raw_pc_publisher_map_.insert({topic, publisher}); } } diff --git a/sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp index a44eeea3879fc..b249aa683d81a 100644 --- a/sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp @@ -45,8 +45,10 @@ Lanelet2MapFilterComponent::Lanelet2MapFilterComponent(const rclcpp::NodeOptions // Set publisher { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); filtered_pointcloud_pub_ = - this->create_publisher("output", rclcpp::SensorDataQoS()); + this->create_publisher("output", rclcpp::SensorDataQoS(), pub_options); } // Set subscriber diff --git a/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node/radar_scan_to_pointcloud2_node.cpp b/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node/radar_scan_to_pointcloud2_node.cpp index b182147468262..8874b744bced6 100644 --- a/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node/radar_scan_to_pointcloud2_node.cpp +++ b/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node/radar_scan_to_pointcloud2_node.cpp @@ -111,9 +111,15 @@ RadarScanToPointcloud2Node::RadarScanToPointcloud2Node(const rclcpp::NodeOptions sub_radar_ = create_subscription( "~/input/radar", rclcpp::QoS{1}, std::bind(&RadarScanToPointcloud2Node::onData, this, _1)); - // Publisher - pub_amplitude_pointcloud_ = create_publisher("~/output/amplitude_pointcloud", 1); - pub_doppler_pointcloud_ = create_publisher("~/output/doppler_pointcloud", 1); + { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); + // Publisher + pub_amplitude_pointcloud_ = + create_publisher("~/output/amplitude_pointcloud", 1, pub_options); + pub_doppler_pointcloud_ = + create_publisher("~/output/doppler_pointcloud", 1, pub_options); + } } rcl_interfaces::msg::SetParametersResult RadarScanToPointcloud2Node::onSetParam( From 3ae6a1a05d207dcfac024805c78fe0cc9738cca5 Mon Sep 17 00:00:00 2001 From: Ariiees Date: Mon, 22 Jul 2024 11:10:00 -0400 Subject: [PATCH 031/306] merger suggestion RP Signed-off-by: Ariiees --- .../pointcloud_preprocessor/CMakeLists.txt | 4 + .../distortion_corrector_node.param.yaml | 5 + .../docs/distortion-corrector.md | 41 +- .../distortion_corrector.hpp | 142 +++-- .../distortion_corrector_node.hpp | 65 +++ .../distortion_corrector_node.launch.xml | 16 + sensing/pointcloud_preprocessor/package.xml | 1 + .../distortion_corrector_node.schema.json | 40 ++ .../distortion_corrector.cpp | 515 ++++++++++-------- .../distortion_corrector_node.cpp | 124 +++++ .../test/test_distortion_corrector.py | 2 +- ...test_distortion_corrector_use_imu_false.py | 6 +- 12 files changed, 692 insertions(+), 269 deletions(-) create mode 100644 sensing/pointcloud_preprocessor/config/distortion_corrector_node.param.yaml create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp create mode 100644 sensing/pointcloud_preprocessor/launch/distortion_corrector_node.launch.xml create mode 100644 sensing/pointcloud_preprocessor/schema/distortion_corrector_node.schema.json create mode 100644 sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp diff --git a/sensing/pointcloud_preprocessor/CMakeLists.txt b/sensing/pointcloud_preprocessor/CMakeLists.txt index df62f538e9964..dd73f28a41f3c 100644 --- a/sensing/pointcloud_preprocessor/CMakeLists.txt +++ b/sensing/pointcloud_preprocessor/CMakeLists.txt @@ -9,6 +9,7 @@ set(CGAL_DATA_DIR ".") find_package(OpenCV REQUIRED) find_package(Eigen3 REQUIRED) +find_package(Sophus REQUIRED) find_package(Boost REQUIRED) find_package(PCL REQUIRED) find_package(CGAL REQUIRED COMPONENTS Core) @@ -19,6 +20,7 @@ include_directories( ${Boost_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS} ${EIGEN3_INCLUDE_DIRS} + ${Sophus_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS} ) @@ -76,6 +78,7 @@ ament_auto_add_library(pointcloud_preprocessor_filter SHARED src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp src/vector_map_filter/lanelet2_map_filter_nodelet.cpp src/distortion_corrector/distortion_corrector.cpp + src/distortion_corrector/distortion_corrector_node.cpp src/blockage_diag/blockage_diag_nodelet.cpp src/polygon_remover/polygon_remover.cpp src/vector_map_filter/vector_map_inside_area_filter.cpp @@ -86,6 +89,7 @@ target_link_libraries(pointcloud_preprocessor_filter faster_voxel_grid_downsample_filter ${Boost_LIBRARIES} ${OpenCV_LIBRARIES} + ${Sophus_LIBRARIES} ${PCL_LIBRARIES} ) diff --git a/sensing/pointcloud_preprocessor/config/distortion_corrector_node.param.yaml b/sensing/pointcloud_preprocessor/config/distortion_corrector_node.param.yaml new file mode 100644 index 0000000000000..3afa4816271cb --- /dev/null +++ b/sensing/pointcloud_preprocessor/config/distortion_corrector_node.param.yaml @@ -0,0 +1,5 @@ +/**: + ros__parameters: + base_frame: base_link + use_imu: true + use_3d_distortion_correction: false diff --git a/sensing/pointcloud_preprocessor/docs/distortion-corrector.md b/sensing/pointcloud_preprocessor/docs/distortion-corrector.md index 02f977dcc2cb8..96124f473f825 100644 --- a/sensing/pointcloud_preprocessor/docs/distortion-corrector.md +++ b/sensing/pointcloud_preprocessor/docs/distortion-corrector.md @@ -2,20 +2,17 @@ ## Purpose -The `distortion_corrector` is a node that compensates pointcloud distortion caused by ego vehicle's movement during 1 scan. +The `distortion_corrector` is a node that compensates for pointcloud distortion caused by the ego-vehicle's movement during one scan. -Since the LiDAR sensor scans by rotating an internal laser, the resulting point cloud will be distorted if the ego-vehicle moves during a single scan (as shown by the figure below). The node corrects this by interpolating sensor data using odometry of ego-vehicle. +Since the LiDAR sensor scans by rotating an internal laser, the resulting point cloud will be distorted if the ego-vehicle moves during a single scan (as shown by the figure below). The node corrects this by interpolating sensor data using the odometry of the ego-vehicle. ## Inner-workings / Algorithms -- Use the equations below (specific to the Velodyne 32C sensor) to obtain an accurate timestamp for each scan data point. -- Use twist information to determine the distance the ego-vehicle has traveled between the time that the scan started and the corrected timestamp of each point, and then correct the position of the point. +The node uses twist information (linear and angular velocity) from the `~/input/twist` topic to correct each point in the point cloud. If the user sets `use_imu` to true, the node will replace the twist's angular velocity with the angular velocity from IMU. -The offset equation is given by -$ TimeOffset = (55.296 \mu s _SequenceIndex) + (2.304 \mu s_ DataPointIndex) $ +The node supports two different modes of distortion correction: 2D distortion correction and 3D distortion correction. The main difference is that the 2D distortion corrector only utilizes the x-axis of linear velocity and the z-axis of angular velocity to correct the point positions. On the other hand, the 3D distortion corrector utilizes all linear and angular velocity components to correct the point positions. -To calculate the exact point time, add the TimeOffset to the timestamp. -$ ExactPointTime = TimeStamp + TimeOffset $ +Please note that the processing time difference between the two distortion methods is significant; the 3D corrector takes 50% more time than the 2D corrector. Therefore, it is recommended that in general cases, users should set `use_3d_distortion_correction` to `false`. However, in scenarios such as a vehicle going over speed bumps, using the 3D corrector can be beneficial. ![distortion corrector figure](./image/distortion_corrector.jpg) @@ -23,17 +20,17 @@ $ ExactPointTime = TimeStamp + TimeOffset $ ### Input -| Name | Type | Description | -| ---------------- | ------------------------------------------------ | ---------------- | -| `~/input/points` | `sensor_msgs::msg::PointCloud2` | reference points | -| `~/input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | twist | -| `~/input/imu` | `sensor_msgs::msg::Imu` | imu data | +| Name | Type | Description | +| -------------------- | ------------------------------------------------ | ---------------------------------- | +| `~/input/pointcloud` | `sensor_msgs::msg::PointCloud2` | Topic of the distorted pointcloud. | +| `~/input/twist` | `geometry_msgs::msg::TwistWithCovarianceStamped` | Topic of the twist information. | +| `~/input/imu` | `sensor_msgs::msg::Imu` | Topic of the IMU data. | ### Output -| Name | Type | Description | -| ----------------- | ------------------------------- | --------------- | -| `~/output/points` | `sensor_msgs::msg::PointCloud2` | filtered points | +| Name | Type | Description | +| --------------------- | ------------------------------- | ----------------------------------- | +| `~/output/pointcloud` | `sensor_msgs::msg::PointCloud2` | Topic of the undistorted pointcloud | ## Parameters @@ -41,9 +38,13 @@ $ ExactPointTime = TimeStamp + TimeOffset $ {{ json_to_markdown("sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json") }} -| Name | Type | Default Value | Description | -| ---------------------- | ------ | ------------- | ----------------------------------------------------------- | -| `timestamp_field_name` | string | "time_stamp" | time stamp field name | -| `use_imu` | bool | true | use gyroscope for yaw rate if true, else use vehicle status | +## Launch + +```bash +ros2 launch pointcloud_preprocessor distortion_corrector.launch.xml +``` ## Assumptions / Known limits + +- The node requires time synchronization between the topics from lidars, twist, and IMU. +- If you want to use a 3D distortion corrector without IMU, please check that the linear and angular velocity fields of your twist message are not empty. diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp index 80abba9b5d1a5..6f372f0e74646 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp @@ -1,4 +1,4 @@ -// Copyright 2020 Tier IV, Inc. +// Copyright 2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,7 +15,9 @@ #ifndef POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_HPP_ #define POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_HPP_ +#include #include +#include #include #include @@ -33,54 +35,132 @@ #endif #include +#include #include -// Include tier4 autoware utils -#include -#include - #include #include #include namespace pointcloud_preprocessor { -using rcl_interfaces::msg::SetParametersResult; -using sensor_msgs::msg::PointCloud2; -class DistortionCorrectorComponent : public rclcpp::Node +class DistortionCorrectorBase { public: - explicit DistortionCorrectorComponent(const rclcpp::NodeOptions & options); + virtual void processTwistMessage( + const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) = 0; + virtual void processIMUMessage( + const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) = 0; + virtual void setPointCloudTransform( + const std::string & base_frame, const std::string & lidar_frame) = 0; + virtual void initialize() = 0; + virtual void undistortPointCloud(bool use_imu, sensor_msgs::msg::PointCloud2 & pointcloud) = 0; +}; -private: - void onPointCloud(PointCloud2::UniquePtr points_msg); - void onTwistWithCovarianceStamped( - const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg); - void onImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg); - bool getTransform( - const std::string & target_frame, const std::string & source_frame, - tf2::Transform * tf2_transform_ptr); +template +class DistortionCorrector : public DistortionCorrectorBase +{ +public: + bool pointcloud_transform_needed_{false}; + bool pointcloud_transform_exists_{false}; + bool imu_transform_exists_{false}; + rclcpp::Node * node_; + tf2_ros::Buffer tf_buffer_; + tf2_ros::TransformListener tf_listener_; - bool undistortPointCloud(const tf2::Transform & tf2_base_link_to_sensor, PointCloud2 & points); + std::deque twist_queue_; + std::deque angular_velocity_queue_; + + explicit DistortionCorrector(rclcpp::Node * node) + : node_(node), tf_buffer_(node_->get_clock()), tf_listener_(tf_buffer_) + { + } + void processTwistMessage( + const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) override; + + void processIMUMessage( + const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) override; + void getIMUTransformation( + const std::string & base_frame, const std::string & imu_frame, + geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr); + void enqueueIMU( + const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg, + geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr); + + bool isInputValid(sensor_msgs::msg::PointCloud2 & pointcloud); + void getTwistAndIMUIterator( + bool use_imu, double first_point_time_stamp_sec, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu); + void undistortPointCloud(bool use_imu, sensor_msgs::msg::PointCloud2 & pointcloud) override; + void warnIfTimestampIsTooLate(bool is_twist_time_stamp_too_late, bool is_imu_time_stamp_too_late); + void undistortPoint( + sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, + sensor_msgs::PointCloud2Iterator & it_z, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu, float const & time_offset, + const bool & is_twist_valid, const bool & is_imu_valid) + { + static_cast(this)->undistortPointImplementation( + it_x, it_y, it_z, it_twist, it_imu, time_offset, is_twist_valid, is_imu_valid); + }; +}; - rclcpp::Subscription::SharedPtr input_points_sub_; - rclcpp::Subscription::SharedPtr imu_sub_; - rclcpp::Subscription::SharedPtr twist_sub_; - rclcpp::Publisher::SharedPtr undistorted_points_pub_; +class DistortionCorrector2D : public DistortionCorrector +{ +private: + // defined outside of for loop for performance reasons. + tf2::Quaternion baselink_quat_; + tf2::Transform baselink_tf_odom_; + tf2::Vector3 point_tf_; + tf2::Vector3 undistorted_point_tf_; + float theta_; + float x_; + float y_; + + // TF + tf2::Transform tf2_lidar_to_base_link_; + tf2::Transform tf2_base_link_to_lidar_; - std::unique_ptr> stop_watch_ptr_; - std::unique_ptr debug_publisher_; +public: + explicit DistortionCorrector2D(rclcpp::Node * node) : DistortionCorrector(node) {} + void initialize() override; + void undistortPointImplementation( + sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, + sensor_msgs::PointCloud2Iterator & it_z, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu, const float & time_offset, + const bool & is_twist_valid, const bool & is_imu_valid); + + void setPointCloudTransform( + const std::string & base_frame, const std::string & lidar_frame) override; +}; - tf2_ros::Buffer tf2_buffer_{get_clock()}; - tf2_ros::TransformListener tf2_listener_{tf2_buffer_}; +class DistortionCorrector3D : public DistortionCorrector +{ +private: + // defined outside of for loop for performance reasons. + Eigen::Vector4f point_eigen_; + Eigen::Vector4f undistorted_point_eigen_; + Eigen::Matrix4f transformation_matrix_; + Eigen::Matrix4f prev_transformation_matrix_; - std::deque twist_queue_; - std::deque angular_velocity_queue_; + // TF + Eigen::Matrix4f eigen_lidar_to_base_link_; + Eigen::Matrix4f eigen_base_link_to_lidar_; - std::string base_link_frame_ = "base_link"; - std::string time_stamp_field_name_; - bool use_imu_; +public: + explicit DistortionCorrector3D(rclcpp::Node * node) : DistortionCorrector(node) {} + void initialize() override; + void undistortPointImplementation( + sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, + sensor_msgs::PointCloud2Iterator & it_z, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu, const float & time_offset, + const bool & is_twist_valid, const bool & is_imu_valid); + void setPointCloudTransform( + const std::string & base_frame, const std::string & lidar_frame) override; }; } // namespace pointcloud_preprocessor diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp new file mode 100644 index 0000000000000..162170b193827 --- /dev/null +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp @@ -0,0 +1,65 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ +#define POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ + +#include "pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +namespace pointcloud_preprocessor +{ +using rcl_interfaces::msg::SetParametersResult; +using sensor_msgs::msg::PointCloud2; + +class DistortionCorrectorComponent : public rclcpp::Node +{ +public: + explicit DistortionCorrectorComponent(const rclcpp::NodeOptions & options); + +private: + rclcpp::Subscription::SharedPtr twist_sub_; + rclcpp::Subscription::SharedPtr imu_sub_; + rclcpp::Subscription::SharedPtr pointcloud_sub_; + + rclcpp::Publisher::SharedPtr undistorted_pointcloud_pub_; + + std::unique_ptr> stop_watch_ptr_; + std::unique_ptr debug_publisher_; + + std::string base_frame_; + bool use_imu_; + bool use_3d_distortion_correction_; + + std::unique_ptr distortion_corrector_; + + void onPointCloud(PointCloud2::UniquePtr points_msg); + void onTwist(const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg); + void onImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg); +}; + +} // namespace pointcloud_preprocessor + +#endif // POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ diff --git a/sensing/pointcloud_preprocessor/launch/distortion_corrector_node.launch.xml b/sensing/pointcloud_preprocessor/launch/distortion_corrector_node.launch.xml new file mode 100644 index 0000000000000..d970aae102264 --- /dev/null +++ b/sensing/pointcloud_preprocessor/launch/distortion_corrector_node.launch.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/sensing/pointcloud_preprocessor/package.xml b/sensing/pointcloud_preprocessor/package.xml index c4398ab8d01ac..3eea0f3e2eb9a 100644 --- a/sensing/pointcloud_preprocessor/package.xml +++ b/sensing/pointcloud_preprocessor/package.xml @@ -42,6 +42,7 @@ rclcpp rclcpp_components sensor_msgs + sophus std_msgs tf2 tf2_eigen diff --git a/sensing/pointcloud_preprocessor/schema/distortion_corrector_node.schema.json b/sensing/pointcloud_preprocessor/schema/distortion_corrector_node.schema.json new file mode 100644 index 0000000000000..acf67fd2746c4 --- /dev/null +++ b/sensing/pointcloud_preprocessor/schema/distortion_corrector_node.schema.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Distortion Corrector Node", + "type": "object", + "definitions": { + "distortion_corrector": { + "type": "object", + "properties": { + "base_frame": { + "type": "string", + "description": "The undistortion algorithm is based on a base frame, which must be the same as the twist frame.", + "default": "base_link" + }, + "use_imu": { + "type": "boolean", + "description": "Use IMU angular velocity, otherwise, use twist angular velocity.", + "default": "true" + }, + "use_3d_distortion_correction": { + "type": "boolean", + "description": "Use 3d distortion correction algorithm, otherwise, use 2d distortion correction algorithm.", + "default": "false" + } + }, + "required": ["base_frame", "use_imu", "use_3d_distortion_correction"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/distortion_corrector" + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp index fb444c2e55018..81c29a9f6202a 100644 --- a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp +++ b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp @@ -1,4 +1,4 @@ -// Copyright 2020 Tier IV, Inc. +// Copyright 2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,51 +16,12 @@ #include "autoware/universe_utils/math/trigonometry.hpp" -#include -#include -#include +#include namespace pointcloud_preprocessor { -/** @brief Constructor. */ -DistortionCorrectorComponent::DistortionCorrectorComponent(const rclcpp::NodeOptions & options) -: Node("distortion_corrector_node", options) -{ - // initialize debug tool - { - using autoware::universe_utils::DebugPublisher; - using autoware::universe_utils::StopWatch; - stop_watch_ptr_ = std::make_unique>(); - debug_publisher_ = std::make_unique(this, "distortion_corrector"); - stop_watch_ptr_->tic("cyclic_time"); - stop_watch_ptr_->tic("processing_time"); - } - - // Parameter - time_stamp_field_name_ = declare_parameter("time_stamp_field_name"); - use_imu_ = declare_parameter("use_imu"); - - { - rclcpp::PublisherOptions pub_options; - pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); - // Publisher - undistorted_points_pub_ = this->create_publisher( - "~/output/pointcloud", rclcpp::SensorDataQoS(), pub_options); - } - // Subscriber - twist_sub_ = this->create_subscription( - "~/input/twist", 10, - std::bind( - &DistortionCorrectorComponent::onTwistWithCovarianceStamped, this, std::placeholders::_1)); - imu_sub_ = this->create_subscription( - "~/input/imu", 10, - std::bind(&DistortionCorrectorComponent::onImu, this, std::placeholders::_1)); - input_points_sub_ = this->create_subscription( - "~/input/pointcloud", rclcpp::SensorDataQoS(), - std::bind(&DistortionCorrectorComponent::onPointCloud, this, std::placeholders::_1)); -} - -void DistortionCorrectorComponent::onTwistWithCovarianceStamped( +template +void DistortionCorrector::processTwistMessage( const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) { geometry_msgs::msg::TwistStamped msg; @@ -76,28 +37,66 @@ void DistortionCorrectorComponent::onTwistWithCovarianceStamped( rclcpp::Time(twist_queue_.front().header.stamp) < rclcpp::Time(twist_msg->header.stamp) - rclcpp::Duration::from_seconds(1.0)) { twist_queue_.pop_front(); + } else { + break; } - break; } } -void DistortionCorrectorComponent::onImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) +template +void DistortionCorrector::processIMUMessage( + const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) +{ + geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr = + std::make_shared(); + getIMUTransformation(base_frame, imu_msg->header.frame_id, geometry_imu_to_base_link_ptr); + enqueueIMU(imu_msg, geometry_imu_to_base_link_ptr); +} + +template +void DistortionCorrector::getIMUTransformation( + const std::string & base_frame, const std::string & imu_frame, + geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr) { - if (!use_imu_) { + if (imu_transform_exists_) { return; } - tf2::Transform tf2_imu_link_to_base_link{}; - getTransform(base_link_frame_, imu_msg->header.frame_id, &tf2_imu_link_to_base_link); - geometry_msgs::msg::TransformStamped::SharedPtr tf_base2imu_ptr = - std::make_shared(); - tf_base2imu_ptr->transform.rotation = tf2::toMsg(tf2_imu_link_to_base_link.getRotation()); + tf2::Transform tf2_imu_to_base_link; + if (base_frame == imu_frame) { + tf2_imu_to_base_link.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); + tf2_imu_to_base_link.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); + imu_transform_exists_ = true; + } else { + try { + const auto transform_msg = + tf_buffer_.lookupTransform(base_frame, imu_frame, tf2::TimePointZero); + tf2::convert(transform_msg.transform, tf2_imu_to_base_link); + imu_transform_exists_ = true; + } catch (const tf2::TransformException & ex) { + RCLCPP_WARN(node_->get_logger(), "%s", ex.what()); + RCLCPP_ERROR( + node_->get_logger(), "Please publish TF %s to %s", base_frame.c_str(), imu_frame.c_str()); + + tf2_imu_to_base_link.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); + tf2_imu_to_base_link.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); + } + } + + geometry_imu_to_base_link_ptr->transform.rotation = + tf2::toMsg(tf2_imu_to_base_link.getRotation()); +} +template +void DistortionCorrector::enqueueIMU( + const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg, + geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr) +{ geometry_msgs::msg::Vector3Stamped angular_velocity; angular_velocity.vector = imu_msg->angular_velocity; geometry_msgs::msg::Vector3Stamped transformed_angular_velocity; - tf2::doTransform(angular_velocity, transformed_angular_velocity, *tf_base2imu_ptr); + tf2::doTransform(angular_velocity, transformed_angular_velocity, *geometry_imu_to_base_link_ptr); transformed_angular_velocity.header = imu_msg->header; angular_velocity_queue_.push_back(transformed_angular_velocity); @@ -111,226 +110,310 @@ void DistortionCorrectorComponent::onImu(const sensor_msgs::msg::Imu::ConstShare rclcpp::Time(angular_velocity_queue_.front().header.stamp) < rclcpp::Time(imu_msg->header.stamp) - rclcpp::Duration::from_seconds(1.0)) { angular_velocity_queue_.pop_front(); + } else { + break; } - break; - } -} - -void DistortionCorrectorComponent::onPointCloud(PointCloud2::UniquePtr points_msg) -{ - stop_watch_ptr_->toc("processing_time", true); - const auto points_sub_count = undistorted_points_pub_->get_subscription_count() + - undistorted_points_pub_->get_intra_process_subscription_count(); - - if (points_sub_count < 1) { - return; - } - - tf2::Transform tf2_base_link_to_sensor{}; - getTransform(points_msg->header.frame_id, base_link_frame_, &tf2_base_link_to_sensor); - - undistortPointCloud(tf2_base_link_to_sensor, *points_msg); - - if (debug_publisher_) { - auto pipeline_latency_ms = - std::chrono::duration( - std::chrono::nanoseconds( - (this->get_clock()->now() - points_msg->header.stamp).nanoseconds())) - .count(); - debug_publisher_->publish( - "debug/pipeline_latency_ms", pipeline_latency_ms); - } - - undistorted_points_pub_->publish(std::move(points_msg)); - - // add processing time for debug - if (debug_publisher_) { - const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true); - const double processing_time_ms = stop_watch_ptr_->toc("processing_time", true); - debug_publisher_->publish( - "debug/cyclic_time_ms", cyclic_time_ms); - debug_publisher_->publish( - "debug/processing_time_ms", processing_time_ms); } } -bool DistortionCorrectorComponent::getTransform( - const std::string & target_frame, const std::string & source_frame, - tf2::Transform * tf2_transform_ptr) +template +void DistortionCorrector::getTwistAndIMUIterator( + bool use_imu, double first_point_time_stamp_sec, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu) { - if (target_frame == source_frame) { - tf2_transform_ptr->setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); - tf2_transform_ptr->setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); - return true; - } - - try { - const auto transform_msg = - tf2_buffer_.lookupTransform(target_frame, source_frame, tf2::TimePointZero); - tf2::convert(transform_msg.transform, *tf2_transform_ptr); - } catch (const tf2::TransformException & ex) { - RCLCPP_WARN(get_logger(), "%s", ex.what()); - RCLCPP_ERROR( - get_logger(), "Please publish TF %s to %s", target_frame.c_str(), source_frame.c_str()); + it_twist = std::lower_bound( + std::begin(twist_queue_), std::end(twist_queue_), first_point_time_stamp_sec, + [](const geometry_msgs::msg::TwistStamped & x, const double t) { + return rclcpp::Time(x.header.stamp).seconds() < t; + }); + it_twist = it_twist == std::end(twist_queue_) ? std::end(twist_queue_) - 1 : it_twist; - tf2_transform_ptr->setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); - tf2_transform_ptr->setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); - return false; + if (use_imu && !angular_velocity_queue_.empty()) { + it_imu = std::lower_bound( + std::begin(angular_velocity_queue_), std::end(angular_velocity_queue_), + first_point_time_stamp_sec, [](const geometry_msgs::msg::Vector3Stamped & x, const double t) { + return rclcpp::Time(x.header.stamp).seconds() < t; + }); + it_imu = + it_imu == std::end(angular_velocity_queue_) ? std::end(angular_velocity_queue_) - 1 : it_imu; } - return true; } -bool DistortionCorrectorComponent::undistortPointCloud( - const tf2::Transform & tf2_base_link_to_sensor, PointCloud2 & points) +template +bool DistortionCorrector::isInputValid(sensor_msgs::msg::PointCloud2 & pointcloud) { - if (points.data.empty() || twist_queue_.empty()) { + if (pointcloud.data.empty() || twist_queue_.empty()) { RCLCPP_WARN_STREAM_THROTTLE( - get_logger(), *get_clock(), 10000 /* ms */, - "input_pointcloud->points or twist_queue_ is empty."); + node_->get_logger(), *node_->get_clock(), 10000 /* ms */, + "input pointcloud or twist_queue_ is empty."); return false; } auto time_stamp_field_it = std::find_if( - std::cbegin(points.fields), std::cend(points.fields), - [this](const sensor_msgs::msg::PointField & field) { - return field.name == time_stamp_field_name_; - }); - if (time_stamp_field_it == points.fields.cend()) { + std::cbegin(pointcloud.fields), std::cend(pointcloud.fields), + [](const sensor_msgs::msg::PointField & field) { return field.name == "time_stamp"; }); + if (time_stamp_field_it == pointcloud.fields.cend()) { RCLCPP_WARN_STREAM_THROTTLE( - get_logger(), *get_clock(), 10000 /* ms */, + node_->get_logger(), *node_->get_clock(), 10000 /* ms */, "Required field time stamp doesn't exist in the point cloud."); return false; } + return true; +} + +template +void DistortionCorrector::undistortPointCloud( + bool use_imu, sensor_msgs::msg::PointCloud2 & pointcloud) +{ + if (!isInputValid(pointcloud)) return; - sensor_msgs::PointCloud2Iterator it_x(points, "x"); - sensor_msgs::PointCloud2Iterator it_y(points, "y"); - sensor_msgs::PointCloud2Iterator it_z(points, "z"); - sensor_msgs::PointCloud2ConstIterator it_time_stamp(points, time_stamp_field_name_); + sensor_msgs::PointCloud2Iterator it_x(pointcloud, "x"); + sensor_msgs::PointCloud2Iterator it_y(pointcloud, "y"); + sensor_msgs::PointCloud2Iterator it_z(pointcloud, "z"); + sensor_msgs::PointCloud2ConstIterator it_time_stamp(pointcloud, "time_stamp"); - float theta{0.0f}; - float x{0.0f}; - float y{0.0f}; double prev_time_stamp_sec{*it_time_stamp}; const double first_point_time_stamp_sec{*it_time_stamp}; - auto twist_it = std::lower_bound( - std::begin(twist_queue_), std::end(twist_queue_), first_point_time_stamp_sec, - [](const geometry_msgs::msg::TwistStamped & x, const double t) { - return rclcpp::Time(x.header.stamp).seconds() < t; - }); - twist_it = twist_it == std::end(twist_queue_) ? std::end(twist_queue_) - 1 : twist_it; - - decltype(angular_velocity_queue_)::iterator imu_it; - if (use_imu_ && !angular_velocity_queue_.empty()) { - imu_it = std::lower_bound( - std::begin(angular_velocity_queue_), std::end(angular_velocity_queue_), - first_point_time_stamp_sec, [](const geometry_msgs::msg::Vector3Stamped & x, const double t) { - return rclcpp::Time(x.header.stamp).seconds() < t; - }); - imu_it = - imu_it == std::end(angular_velocity_queue_) ? std::end(angular_velocity_queue_) - 1 : imu_it; - } - - const tf2::Transform tf2_base_link_to_sensor_inv{tf2_base_link_to_sensor.inverse()}; - - // For performance, do not instantiate `rclcpp::Time` inside of the for-loop - double twist_stamp = rclcpp::Time(twist_it->header.stamp).seconds(); - - // For performance, instantiate outside of the for-loop - tf2::Quaternion baselink_quat{}; - tf2::Transform baselink_tf_odom{}; - tf2::Vector3 point{}; - tf2::Vector3 undistorted_point{}; - - // For performance, avoid transform computation if unnecessary - bool need_transform = points.header.frame_id != base_link_frame_; + std::deque::iterator it_twist; + std::deque::iterator it_imu; + getTwistAndIMUIterator(use_imu, first_point_time_stamp_sec, it_twist, it_imu); // For performance, do not instantiate `rclcpp::Time` inside of the for-loop + double twist_stamp = rclcpp::Time(it_twist->header.stamp).seconds(); double imu_stamp{0.0}; - if (use_imu_ && !angular_velocity_queue_.empty()) { - imu_stamp = rclcpp::Time(imu_it->header.stamp).seconds(); + if (use_imu && !angular_velocity_queue_.empty()) { + imu_stamp = rclcpp::Time(it_imu->header.stamp).seconds(); } - // If there is a point that cannot be associated, record it to issue a warning - bool twist_time_stamp_is_too_late = false; - bool imu_time_stamp_is_too_late = false; + // If there is a point in a pointcloud that cannot be associated, record it to issue a warning + bool is_twist_time_stamp_too_late = false; + bool is_imu_time_stamp_too_late = false; + bool is_twist_valid = true; + bool is_imu_valid = true; for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_time_stamp) { - while (twist_it != std::end(twist_queue_) - 1 && *it_time_stamp > twist_stamp) { - ++twist_it; - twist_stamp = rclcpp::Time(twist_it->header.stamp).seconds(); - } - - float v{static_cast(twist_it->twist.linear.x)}; - float w{static_cast(twist_it->twist.angular.z)}; + is_twist_valid = true; + is_imu_valid = true; + // Get closest twist information + while (it_twist != std::end(twist_queue_) - 1 && *it_time_stamp > twist_stamp) { + ++it_twist; + twist_stamp = rclcpp::Time(it_twist->header.stamp).seconds(); + } if (std::abs(*it_time_stamp - twist_stamp) > 0.1) { - twist_time_stamp_is_too_late = true; - v = 0.0f; - w = 0.0f; + is_twist_time_stamp_too_late = true; + is_twist_valid = false; } - if (use_imu_ && !angular_velocity_queue_.empty()) { - while (imu_it != std::end(angular_velocity_queue_) - 1 && *it_time_stamp > imu_stamp) { - ++imu_it; - imu_stamp = rclcpp::Time(imu_it->header.stamp).seconds(); + // Get closest IMU information + if (use_imu && !angular_velocity_queue_.empty()) { + while (it_imu != std::end(angular_velocity_queue_) - 1 && *it_time_stamp > imu_stamp) { + ++it_imu; + imu_stamp = rclcpp::Time(it_imu->header.stamp).seconds(); } if (std::abs(*it_time_stamp - imu_stamp) > 0.1) { - imu_time_stamp_is_too_late = true; - } else { - w = static_cast(imu_it->vector.z); + is_imu_time_stamp_too_late = true; + is_imu_valid = false; } + } else { + is_imu_valid = false; } - const auto time_offset = static_cast(*it_time_stamp - prev_time_stamp_sec); + float time_offset = static_cast(*it_time_stamp - prev_time_stamp_sec); - point.setValue(*it_x, *it_y, *it_z); + // Undistort a single point based on the strategy + undistortPoint(it_x, it_y, it_z, it_twist, it_imu, time_offset, is_twist_valid, is_imu_valid); - if (need_transform) { - point = tf2_base_link_to_sensor_inv * point; - } + prev_time_stamp_sec = *it_time_stamp; + } - theta += w * time_offset; - baselink_quat.setValue( - 0, 0, autoware::universe_utils::sin(theta * 0.5f), - autoware::universe_utils::cos(theta * 0.5f)); // baselink_quat.setRPY(0.0, 0.0, theta); - const float dis = v * time_offset; - x += dis * autoware::universe_utils::cos(theta); - y += dis * autoware::universe_utils::sin(theta); + warnIfTimestampIsTooLate(is_twist_time_stamp_too_late, is_imu_time_stamp_too_late); +} - baselink_tf_odom.setOrigin(tf2::Vector3(x, y, 0.0)); - baselink_tf_odom.setRotation(baselink_quat); +template +void DistortionCorrector::warnIfTimestampIsTooLate( + bool is_twist_time_stamp_too_late, bool is_imu_time_stamp_too_late) +{ + if (is_twist_time_stamp_too_late) { + RCLCPP_WARN_STREAM_THROTTLE( + node_->get_logger(), *node_->get_clock(), 10000 /* ms */, + "Twist time_stamp is too late. Could not interpolate."); + } - undistorted_point = baselink_tf_odom * point; + if (is_imu_time_stamp_too_late) { + RCLCPP_WARN_STREAM_THROTTLE( + node_->get_logger(), *node_->get_clock(), 10000 /* ms */, + "IMU time_stamp is too late. Could not interpolate."); + } +} - if (need_transform) { - undistorted_point = tf2_base_link_to_sensor * undistorted_point; +///////////////////////// Functions for different undistortion strategies ///////////////////////// + +void DistortionCorrector2D::initialize() +{ + x_ = 0.0f; + y_ = 0.0f; + theta_ = 0.0f; +} + +void DistortionCorrector3D::initialize() +{ + prev_transformation_matrix_ = Eigen::Matrix4f::Identity(); +} + +void DistortionCorrector2D::setPointCloudTransform( + const std::string & base_frame, const std::string & lidar_frame) +{ + if (pointcloud_transform_exists_) { + return; + } + + if (base_frame == lidar_frame) { + tf2_lidar_to_base_link_.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); + tf2_lidar_to_base_link_.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); + tf2_base_link_to_lidar_ = tf2_lidar_to_base_link_; + pointcloud_transform_exists_ = true; + } else { + try { + const auto transform_msg = + tf_buffer_.lookupTransform(base_frame, lidar_frame, tf2::TimePointZero); + tf2::convert(transform_msg.transform, tf2_lidar_to_base_link_); + tf2_base_link_to_lidar_ = tf2_lidar_to_base_link_.inverse(); + pointcloud_transform_exists_ = true; + pointcloud_transform_needed_ = true; + } catch (const tf2::TransformException & ex) { + RCLCPP_WARN(node_->get_logger(), "%s", ex.what()); + RCLCPP_ERROR( + node_->get_logger(), "Please publish TF %s to %s", base_frame.c_str(), lidar_frame.c_str()); + + tf2_lidar_to_base_link_.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); + tf2_lidar_to_base_link_.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); + tf2_base_link_to_lidar_ = tf2_lidar_to_base_link_; } + } +} + +void DistortionCorrector3D::setPointCloudTransform( + const std::string & base_frame, const std::string & lidar_frame) +{ + if (pointcloud_transform_exists_) { + return; + } - *it_x = static_cast(undistorted_point.getX()); - *it_y = static_cast(undistorted_point.getY()); - *it_z = static_cast(undistorted_point.getZ()); + if (base_frame == lidar_frame) { + eigen_lidar_to_base_link_ = Eigen::Matrix4f::Identity(); + eigen_base_link_to_lidar_ = Eigen::Matrix4f::Identity(); + pointcloud_transform_exists_ = true; + } - prev_time_stamp_sec = *it_time_stamp; + try { + const auto transform_msg = + tf_buffer_.lookupTransform(base_frame, lidar_frame, tf2::TimePointZero); + eigen_lidar_to_base_link_ = + tf2::transformToEigen(transform_msg.transform).matrix().cast(); + eigen_base_link_to_lidar_ = eigen_lidar_to_base_link_.inverse(); + pointcloud_transform_exists_ = true; + pointcloud_transform_needed_ = true; + } catch (const tf2::TransformException & ex) { + RCLCPP_WARN(node_->get_logger(), "%s", ex.what()); + RCLCPP_ERROR( + node_->get_logger(), "Please publish TF %s to %s", base_frame.c_str(), lidar_frame.c_str()); + eigen_lidar_to_base_link_ = Eigen::Matrix4f::Identity(); + eigen_base_link_to_lidar_ = Eigen::Matrix4f::Identity(); } +} - if (twist_time_stamp_is_too_late) { - RCLCPP_WARN_STREAM_THROTTLE( - get_logger(), *get_clock(), 10000 /* ms */, - "twist time_stamp is too late. Could not interpolate."); +inline void DistortionCorrector2D::undistortPointImplementation( + sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, + sensor_msgs::PointCloud2Iterator & it_z, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu, const float & time_offset, + const bool & is_twist_valid, const bool & is_imu_valid) +{ + // Initialize linear velocity and angular velocity + float v{0.0f}, w{0.0f}; + if (is_twist_valid) { + v = static_cast(it_twist->twist.linear.x); + w = static_cast(it_twist->twist.angular.z); + } + if (is_imu_valid) { + w = static_cast(it_imu->vector.z); } - if (imu_time_stamp_is_too_late) { - RCLCPP_WARN_STREAM_THROTTLE( - get_logger(), *get_clock(), 10000 /* ms */, - "imu time_stamp is too late. Could not interpolate."); + // Undistort point + point_tf_.setValue(*it_x, *it_y, *it_z); + + if (pointcloud_transform_needed_) { + point_tf_ = tf2_lidar_to_base_link_ * point_tf_; } + theta_ += w * time_offset; + baselink_quat_.setValue( + 0, 0, autoware::universe_utils::sin(theta_ * 0.5f), + autoware::universe_utils::cos(theta_ * 0.5f)); // baselink_quat.setRPY(0.0, 0.0, theta); + const float dis = v * time_offset; + x_ += dis * autoware::universe_utils::cos(theta_); + y_ += dis * autoware::universe_utils::sin(theta_); - return true; + baselink_tf_odom_.setOrigin(tf2::Vector3(x_, y_, 0.0)); + baselink_tf_odom_.setRotation(baselink_quat_); + + undistorted_point_tf_ = baselink_tf_odom_ * point_tf_; + + if (pointcloud_transform_needed_) { + undistorted_point_tf_ = tf2_base_link_to_lidar_ * undistorted_point_tf_; + } + + *it_x = static_cast(undistorted_point_tf_.getX()); + *it_y = static_cast(undistorted_point_tf_.getY()); + *it_z = static_cast(undistorted_point_tf_.getZ()); } -} // namespace pointcloud_preprocessor +inline void DistortionCorrector3D::undistortPointImplementation( + sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, + sensor_msgs::PointCloud2Iterator & it_z, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu, const float & time_offset, + const bool & is_twist_valid, const bool & is_imu_valid) +{ + // Initialize linear velocity and angular velocity + float v_x_{0.0f}, v_y_{0.0f}, v_z_{0.0f}, w_x_{0.0f}, w_y_{0.0f}, w_z_{0.0f}; + if (is_twist_valid) { + v_x_ = static_cast(it_twist->twist.linear.x); + v_y_ = static_cast(it_twist->twist.linear.y); + v_z_ = static_cast(it_twist->twist.linear.z); + w_x_ = static_cast(it_twist->twist.angular.x); + w_y_ = static_cast(it_twist->twist.angular.y); + w_z_ = static_cast(it_twist->twist.angular.z); + } + if (is_imu_valid) { + w_x_ = static_cast(it_imu->vector.x); + w_y_ = static_cast(it_imu->vector.y); + w_z_ = static_cast(it_imu->vector.z); + } -#include -RCLCPP_COMPONENTS_REGISTER_NODE(pointcloud_preprocessor::DistortionCorrectorComponent) + // Undistort point + point_eigen_ << *it_x, *it_y, *it_z, 1.0; + if (pointcloud_transform_needed_) { + point_eigen_ = eigen_lidar_to_base_link_ * point_eigen_; + } + + Sophus::SE3f::Tangent twist(v_x_, v_y_, v_z_, w_x_, w_y_, w_z_); + twist = twist * time_offset; + transformation_matrix_ = Sophus::SE3f::exp(twist).matrix(); + transformation_matrix_ = transformation_matrix_ * prev_transformation_matrix_; + undistorted_point_eigen_ = transformation_matrix_ * point_eigen_; + + if (pointcloud_transform_needed_) { + undistorted_point_eigen_ = eigen_base_link_to_lidar_ * undistorted_point_eigen_; + } + *it_x = undistorted_point_eigen_[0]; + *it_y = undistorted_point_eigen_[1]; + *it_z = undistorted_point_eigen_[2]; + + prev_transformation_matrix_ = transformation_matrix_; +} + +} // namespace pointcloud_preprocessor diff --git a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp new file mode 100644 index 0000000000000..b5cf581301a23 --- /dev/null +++ b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp @@ -0,0 +1,124 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp" + +#include "pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" + +namespace pointcloud_preprocessor +{ +/** @brief Constructor. */ +DistortionCorrectorComponent::DistortionCorrectorComponent(const rclcpp::NodeOptions & options) +: Node("distortion_corrector_node", options) +{ + // initialize debug tool + + using autoware::universe_utils::DebugPublisher; + using autoware::universe_utils::StopWatch; + stop_watch_ptr_ = std::make_unique>(); + debug_publisher_ = std::make_unique(this, "distortion_corrector"); + stop_watch_ptr_->tic("cyclic_time"); + stop_watch_ptr_->tic("processing_time"); + + // Parameter + base_frame_ = declare_parameter("base_frame"); + use_imu_ = declare_parameter("use_imu"); + use_3d_distortion_correction_ = declare_parameter("use_3d_distortion_correction"); + + // Publisher + { + rclcpp::PublisherOptions pub_options; + pub_options.qos_overriding_options = rclcpp::QosOverridingOptions::with_default_policies(); + // Publisher + undistorted_pointcloud_pub_ = this->create_publisher( + "~/output/pointcloud", rclcpp::SensorDataQoS(), pub_options); + } + + // Subscriber + twist_sub_ = this->create_subscription( + "~/input/twist", 10, + std::bind(&DistortionCorrectorComponent::onTwist, this, std::placeholders::_1)); + imu_sub_ = this->create_subscription( + "~/input/imu", 10, + std::bind(&DistortionCorrectorComponent::onImu, this, std::placeholders::_1)); + pointcloud_sub_ = this->create_subscription( + "~/input/pointcloud", rclcpp::SensorDataQoS(), + std::bind(&DistortionCorrectorComponent::onPointCloud, this, std::placeholders::_1)); + + // Setup the distortion corrector + + if (use_3d_distortion_correction_) { + distortion_corrector_ = std::make_unique(this); + } else { + distortion_corrector_ = std::make_unique(this); + } +} + +void DistortionCorrectorComponent::onTwist( + const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) +{ + distortion_corrector_->processTwistMessage(twist_msg); +} + +void DistortionCorrectorComponent::onImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) +{ + if (!use_imu_) { + return; + } + + distortion_corrector_->processIMUMessage(base_frame_, imu_msg); +} + +void DistortionCorrectorComponent::onPointCloud(PointCloud2::UniquePtr pointcloud_msg) +{ + stop_watch_ptr_->toc("processing_time", true); + const auto points_sub_count = undistorted_pointcloud_pub_->get_subscription_count() + + undistorted_pointcloud_pub_->get_intra_process_subscription_count(); + + if (points_sub_count < 1) { + return; + } + + distortion_corrector_->setPointCloudTransform(base_frame_, pointcloud_msg->header.frame_id); + + distortion_corrector_->initialize(); + distortion_corrector_->undistortPointCloud(use_imu_, *pointcloud_msg); + + if (debug_publisher_) { + auto pipeline_latency_ms = + std::chrono::duration( + std::chrono::nanoseconds( + (this->get_clock()->now() - pointcloud_msg->header.stamp).nanoseconds())) + .count(); + debug_publisher_->publish( + "debug/pipeline_latency_ms", pipeline_latency_ms); + } + + undistorted_pointcloud_pub_->publish(std::move(pointcloud_msg)); + + // add processing time for debug + if (debug_publisher_) { + const double cyclic_time_ms = stop_watch_ptr_->toc("cyclic_time", true); + const double processing_time_ms = stop_watch_ptr_->toc("processing_time", true); + debug_publisher_->publish( + "debug/cyclic_time_ms", cyclic_time_ms); + debug_publisher_->publish( + "debug/processing_time_ms", processing_time_ms); + } +} + +} // namespace pointcloud_preprocessor + +#include +RCLCPP_COMPONENTS_REGISTER_NODE(pointcloud_preprocessor::DistortionCorrectorComponent) diff --git a/sensing/pointcloud_preprocessor/test/test_distortion_corrector.py b/sensing/pointcloud_preprocessor/test/test_distortion_corrector.py index 5fdf434123c36..cc80da29e3c13 100644 --- a/sensing/pointcloud_preprocessor/test/test_distortion_corrector.py +++ b/sensing/pointcloud_preprocessor/test/test_distortion_corrector.py @@ -47,7 +47,7 @@ def generate_test_description(): plugin="pointcloud_preprocessor::DistortionCorrectorComponent", name="distortion_corrector_node", parameters=[ - {"use_imu": True}, + {"base_frame": "base_link", "use_imu": True, "use_3d_distortion_correction": False}, ], remappings=[ ("~/input/twist", "/test/sensing/vehicle_velocity_converter/twist_with_covariance"), diff --git a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_use_imu_false.py b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_use_imu_false.py index 5943aec13bca6..35eb41f9dbc17 100644 --- a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_use_imu_false.py +++ b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_use_imu_false.py @@ -46,7 +46,11 @@ def generate_test_description(): plugin="pointcloud_preprocessor::DistortionCorrectorComponent", name="distortion_corrector_node", parameters=[ - {"use_imu": False}, + { + "base_frame": "base_link", + "use_imu": False, + "use_3d_distortion_correction": False, + }, ], remappings=[ ("~/input/twist", "/test/sensing/vehicle_velocity_converter/twist_with_covariance"), From 11101dce1dd8bb8a99d17a3d7156282eb68f6a53 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 3 Jul 2024 18:07:27 +0900 Subject: [PATCH 032/306] refactor(ground_segmentation)!: fix namespace and directory structure (#7744) * refactor: update namespace in ground_segmentation files Signed-off-by: Taekjin LEE * refactor: update namespace in ground_segmentation files Signed-off-by: Taekjin LEE * refactor: update ground_segmentation namespace and file structure Signed-off-by: Taekjin LEE * style(pre-commit): autofix * refactor: update ground_segmentation plugin names scheme Signed-off-by: Taekjin LEE * refactor: update ransac tester Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../ground_segmentation.launch.py | 18 ++++++++++-- perception/ground_segmentation/CMakeLists.txt | 28 +++++++++---------- .../config/ground_segmentation.param.yaml | 2 +- .../launch/scan_ground_filter.launch.py | 2 +- .../node.cpp} | 28 +++++++++---------- .../ransac_ground_filter/node.hpp} | 10 +++---- .../ray_ground_filter}/gencolors.hpp | 13 ++++----- .../node.cpp} | 13 +++++---- .../ray_ground_filter/node.hpp} | 25 ++++++++--------- .../node.cpp} | 18 ++++++------ .../scan_ground_filter/node.hpp} | 13 ++++----- .../test/test_ransac_ground_filter.cpp | 4 +-- .../test/test_ray_ground_filter.cpp | 5 ++-- .../test/test_scan_ground_filter.cpp | 8 +++--- 14 files changed, 98 insertions(+), 89 deletions(-) rename perception/ground_segmentation/src/{ransac_ground_filter_nodelet.cpp => ransac_ground_filter/node.cpp} (97%) rename perception/ground_segmentation/{include/ground_segmentation/ransac_ground_filter_nodelet.hpp => src/ransac_ground_filter/node.hpp} (94%) rename perception/ground_segmentation/{include/ground_segmentation => src/ray_ground_filter}/gencolors.hpp (96%) rename perception/ground_segmentation/src/{ray_ground_filter_nodelet.cpp => ray_ground_filter/node.cpp} (97%) rename perception/ground_segmentation/{include/ground_segmentation/ray_ground_filter_nodelet.hpp => src/ray_ground_filter/node.hpp} (95%) rename perception/ground_segmentation/src/{scan_ground_filter_nodelet.cpp => scan_ground_filter/node.cpp} (98%) rename perception/ground_segmentation/{include/ground_segmentation/scan_ground_filter_nodelet.hpp => src/scan_ground_filter/node.hpp} (97%) diff --git a/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py b/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py index 25fb1e6ac6c4d..684ecee757aad 100644 --- a/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py +++ b/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py @@ -82,6 +82,12 @@ def create_additional_pipeline(self, lidar_name): "margin_min_z" ] ) + # Get the plugin name from the full plugin path + ground_segmentation_plugin_name = self.ground_segmentation_param[ + f"{lidar_name}_ground_filter" + ]["plugin"] + ground_segmentation_plugin_name = ground_segmentation_plugin_name.split("::")[-1] + components = [] components.append( ComposableNode( @@ -110,7 +116,7 @@ def create_additional_pipeline(self, lidar_name): components.append( ComposableNode( package="ground_segmentation", - plugin=self.ground_segmentation_param[f"{lidar_name}_ground_filter"]["plugin"], + plugin="autoware::ground_segmentation::" + ground_segmentation_plugin_name, name=f"{lidar_name}_ground_filter", remappings=[ ("input", f"{lidar_name}/range_cropped/pointcloud"), @@ -203,7 +209,7 @@ def create_ransac_pipeline(self): components.append( ComposableNode( package="ground_segmentation", - plugin="ground_segmentation::RANSACGroundFilterComponent", + plugin="autoware::ground_segmentation::" + "RANSACGroundFilterComponent", name="ransac_ground_filter", namespace="plane_fitting", remappings=[ @@ -228,6 +234,12 @@ def create_common_pipeline(self, input_topic, output_topic): self.vehicle_info["min_height_offset"] + self.ground_segmentation_param["common_crop_box_filter"]["parameters"]["margin_min_z"] ) + # Get the plugin name from the full plugin path + ground_segmentation_plugin_name = self.ground_segmentation_param["common_ground_filter"][ + "plugin" + ] + ground_segmentation_plugin_name = ground_segmentation_plugin_name.split("::")[-1] + components = [] components.append( ComposableNode( @@ -256,7 +268,7 @@ def create_common_pipeline(self, input_topic, output_topic): components.append( ComposableNode( package="ground_segmentation", - plugin=self.ground_segmentation_param["common_ground_filter"]["plugin"], + plugin="autoware::ground_segmentation::" + ground_segmentation_plugin_name, name="common_ground_filter", remappings=[ ("input", "range_cropped/pointcloud"), diff --git a/perception/ground_segmentation/CMakeLists.txt b/perception/ground_segmentation/CMakeLists.txt index 9531437e80752..f8e4f50a553a2 100644 --- a/perception/ground_segmentation/CMakeLists.txt +++ b/perception/ground_segmentation/CMakeLists.txt @@ -21,20 +21,20 @@ include_directories( ${GRID_MAP_INCLUDE_DIR} ) -ament_auto_add_library(ground_segmentation SHARED - src/ray_ground_filter_nodelet.cpp - src/ransac_ground_filter_nodelet.cpp - src/scan_ground_filter_nodelet.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/ray_ground_filter/node.cpp + src/ransac_ground_filter/node.cpp + src/scan_ground_filter/node.cpp ) -target_link_libraries(ground_segmentation +target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES} ${OpenCV_LIBRARIES} ${PCL_LIBRARIES} ) if(OPENMP_FOUND) - set_target_properties(ground_segmentation PROPERTIES + set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} LINK_FLAGS ${OpenMP_CXX_FLAGS} ) @@ -42,18 +42,18 @@ endif() # ========== Ground Filter ========== # -- Ray Ground Filter -- -rclcpp_components_register_node(ground_segmentation - PLUGIN "ground_segmentation::RayGroundFilterComponent" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::ground_segmentation::RayGroundFilterComponent" EXECUTABLE ray_ground_filter_node) # -- RANSAC Ground Filter -- -rclcpp_components_register_node(ground_segmentation - PLUGIN "ground_segmentation::RANSACGroundFilterComponent" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::ground_segmentation::RANSACGroundFilterComponent" EXECUTABLE ransac_ground_filter_node) # -- Scan Ground Filter -- -rclcpp_components_register_node(ground_segmentation - PLUGIN "ground_segmentation::ScanGroundFilterComponent" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::ground_segmentation::ScanGroundFilterComponent" EXECUTABLE scan_ground_filter_node) @@ -88,7 +88,7 @@ if(BUILD_TESTING) ) target_link_libraries(test_ray_ground_filter - ground_segmentation + ${PROJECT_NAME} ${YAML_CPP_LIBRARIES} ) @@ -97,7 +97,7 @@ if(BUILD_TESTING) ) target_link_libraries(test_scan_ground_filter - ground_segmentation + ${PROJECT_NAME} ${YAML_CPP_LIBRARIES} ) ament_add_ros_isolated_gtest(test_ransac_ground_filter diff --git a/perception/ground_segmentation/config/ground_segmentation.param.yaml b/perception/ground_segmentation/config/ground_segmentation.param.yaml index 594ef1fe974b2..ca077941f0185 100644 --- a/perception/ground_segmentation/config/ground_segmentation.param.yaml +++ b/perception/ground_segmentation/config/ground_segmentation.param.yaml @@ -16,7 +16,7 @@ negative: False common_ground_filter: - plugin: "ground_segmentation::ScanGroundFilterComponent" + plugin: "autoware::ground_segmentation::ScanGroundFilterComponent" parameters: global_slope_max_angle_deg: 10.0 local_slope_max_angle_deg: 13.0 # recommended 30.0 for non elevation_grid_mode diff --git a/perception/ground_segmentation/launch/scan_ground_filter.launch.py b/perception/ground_segmentation/launch/scan_ground_filter.launch.py index df8290997315e..990fcace3449a 100644 --- a/perception/ground_segmentation/launch/scan_ground_filter.launch.py +++ b/perception/ground_segmentation/launch/scan_ground_filter.launch.py @@ -36,7 +36,7 @@ def launch_setup(context, *args, **kwargs): nodes = [ ComposableNode( package="ground_segmentation", - plugin="ground_segmentation::ScanGroundFilterComponent", + plugin="autoware::ground_segmentation::ScanGroundFilterComponent", name="scan_ground_filter", remappings=[ ("input", LaunchConfiguration("input/pointcloud")), diff --git a/perception/ground_segmentation/src/ransac_ground_filter_nodelet.cpp b/perception/ground_segmentation/src/ransac_ground_filter/node.cpp similarity index 97% rename from perception/ground_segmentation/src/ransac_ground_filter_nodelet.cpp rename to perception/ground_segmentation/src/ransac_ground_filter/node.cpp index aa224e7adc5bf..25e29c5b9f21a 100644 --- a/perception/ground_segmentation/src/ransac_ground_filter_nodelet.cpp +++ b/perception/ground_segmentation/src/ransac_ground_filter/node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "ground_segmentation/ransac_ground_filter_nodelet.hpp" +#include "node.hpp" #include @@ -54,15 +54,6 @@ Eigen::Vector3d getArbitraryOrthogonalVector(const Eigen::Vector3d & input) return unit_vec; } -ground_segmentation::PlaneBasis getPlaneBasis(const Eigen::Vector3d & plane_normal) -{ - ground_segmentation::PlaneBasis basis; - basis.e_z = plane_normal; - basis.e_x = getArbitraryOrthogonalVector(plane_normal); - basis.e_y = basis.e_x.cross(basis.e_z); - return basis; -} - geometry_msgs::msg::Pose getDebugPose(const Eigen::Affine3d & plane_affine) { geometry_msgs::msg::Pose debug_pose; @@ -78,8 +69,17 @@ geometry_msgs::msg::Pose getDebugPose(const Eigen::Affine3d & plane_affine) } } // namespace -namespace ground_segmentation +namespace autoware::ground_segmentation { +PlaneBasis getPlaneBasis(const Eigen::Vector3d & plane_normal) +{ + PlaneBasis basis; + basis.e_z = plane_normal; + basis.e_x = getArbitraryOrthogonalVector(plane_normal); + basis.e_y = basis.e_x.cross(basis.e_z); + return basis; +} + using pointcloud_preprocessor::get_param; RANSACGroundFilterComponent::RANSACGroundFilterComponent(const rclcpp::NodeOptions & options) @@ -203,7 +203,7 @@ Eigen::Affine3d RANSACGroundFilterComponent::getPlaneAffine( pcl::PointXYZ centroid_point; centroid.get(centroid_point); Eigen::Translation trans(centroid_point.x, centroid_point.y, centroid_point.z); - const ground_segmentation::PlaneBasis basis = getPlaneBasis(plane_normal); + const PlaneBasis basis = getPlaneBasis(plane_normal); Eigen::Matrix3d rot; rot << basis.e_x.x(), basis.e_y.x(), basis.e_z.x(), basis.e_x.y(), basis.e_y.y(), basis.e_z.y(), basis.e_x.z(), basis.e_y.z(), basis.e_z.z(); @@ -396,7 +396,7 @@ rcl_interfaces::msg::SetParametersResult RANSACGroundFilterComponent::paramCallb return result; } -} // namespace ground_segmentation +} // namespace autoware::ground_segmentation #include -RCLCPP_COMPONENTS_REGISTER_NODE(ground_segmentation::RANSACGroundFilterComponent) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::ground_segmentation::RANSACGroundFilterComponent) diff --git a/perception/ground_segmentation/include/ground_segmentation/ransac_ground_filter_nodelet.hpp b/perception/ground_segmentation/src/ransac_ground_filter/node.hpp similarity index 94% rename from perception/ground_segmentation/include/ground_segmentation/ransac_ground_filter_nodelet.hpp rename to perception/ground_segmentation/src/ransac_ground_filter/node.hpp index f2fc47a50ff62..ebdd28f26ebe8 100644 --- a/perception/ground_segmentation/include/ground_segmentation/ransac_ground_filter_nodelet.hpp +++ b/perception/ground_segmentation/src/ransac_ground_filter/node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef GROUND_SEGMENTATION__RANSAC_GROUND_FILTER_NODELET_HPP_ -#define GROUND_SEGMENTATION__RANSAC_GROUND_FILTER_NODELET_HPP_ +#ifndef RANSAC_GROUND_FILTER__NODE_HPP_ +#define RANSAC_GROUND_FILTER__NODE_HPP_ #include "pointcloud_preprocessor/filter.hpp" @@ -38,7 +38,7 @@ #include #include -namespace ground_segmentation +namespace autoware::ground_segmentation { struct PlaneBasis { @@ -129,6 +129,6 @@ class RANSACGroundFilterComponent : public pointcloud_preprocessor::Filter EIGEN_MAKE_ALIGNED_OPERATOR_NEW explicit RANSACGroundFilterComponent(const rclcpp::NodeOptions & options); }; -} // namespace ground_segmentation +} // namespace autoware::ground_segmentation -#endif // GROUND_SEGMENTATION__RANSAC_GROUND_FILTER_NODELET_HPP_ +#endif // RANSAC_GROUND_FILTER__NODE_HPP_ diff --git a/perception/ground_segmentation/include/ground_segmentation/gencolors.hpp b/perception/ground_segmentation/src/ray_ground_filter/gencolors.hpp similarity index 96% rename from perception/ground_segmentation/include/ground_segmentation/gencolors.hpp rename to perception/ground_segmentation/src/ray_ground_filter/gencolors.hpp index 07637b1514b09..658e5718a01cc 100644 --- a/perception/ground_segmentation/include/ground_segmentation/gencolors.hpp +++ b/perception/ground_segmentation/src/ray_ground_filter/gencolors.hpp @@ -53,19 +53,18 @@ // //M*/ -#ifndef GROUND_SEGMENTATION__GENCOLORS_HPP_ -#define GROUND_SEGMENTATION__GENCOLORS_HPP_ +#ifndef RAY_GROUND_FILTER__GENCOLORS_HPP_ +#define RAY_GROUND_FILTER__GENCOLORS_HPP_ #include +#include #include #include #include -// #include -#include -namespace ray_ground_filter +namespace autoware::ray_ground_filter { using namespace cv; // NOLINT @@ -159,5 +158,5 @@ inline void generateColors(std::vector & colors, size_t count, size_t fa colors[i] = Scalar(c.x, c.y, c.z); } } -} // namespace ray_ground_filter -#endif // GROUND_SEGMENTATION__GENCOLORS_HPP_ +} // namespace autoware::ray_ground_filter +#endif // RAY_GROUND_FILTER__GENCOLORS_HPP_ diff --git a/perception/ground_segmentation/src/ray_ground_filter_nodelet.cpp b/perception/ground_segmentation/src/ray_ground_filter/node.cpp similarity index 97% rename from perception/ground_segmentation/src/ray_ground_filter_nodelet.cpp rename to perception/ground_segmentation/src/ray_ground_filter/node.cpp index c58f1c0e507e5..c75972d3c4f14 100644 --- a/perception/ground_segmentation/src/ray_ground_filter_nodelet.cpp +++ b/perception/ground_segmentation/src/ray_ground_filter/node.cpp @@ -29,12 +29,12 @@ * v1.0: amc-nu (abrahammonrroy@yahoo.com) */ -#include "ground_segmentation/ray_ground_filter_nodelet.hpp" +#include "node.hpp" #include #include -namespace ground_segmentation +namespace autoware::ground_segmentation { using pointcloud_preprocessor::get_param; @@ -250,8 +250,9 @@ void RayGroundFilterComponent::ClassifyPointCloud( // // Enable the dynamic reconfigure service // has_service = true; // srv_ = boost::make_shared< -// dynamic_reconfigure::Server >(nh); -// dynamic_reconfigure::Server::CallbackType f = +// dynamic_reconfigure::Server >(nh); +// dynamic_reconfigure::Server::CallbackType +// f = // boost::bind(&RayGroundFilterComponent::config_callback, this, _1, _2); // srv_->setCallback(f); // return (true); @@ -394,7 +395,7 @@ rcl_interfaces::msg::SetParametersResult RayGroundFilterComponent::paramCallback return result; } -} // namespace ground_segmentation +} // namespace autoware::ground_segmentation #include -RCLCPP_COMPONENTS_REGISTER_NODE(ground_segmentation::RayGroundFilterComponent) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::ground_segmentation::RayGroundFilterComponent) diff --git a/perception/ground_segmentation/include/ground_segmentation/ray_ground_filter_nodelet.hpp b/perception/ground_segmentation/src/ray_ground_filter/node.hpp similarity index 95% rename from perception/ground_segmentation/include/ground_segmentation/ray_ground_filter_nodelet.hpp rename to perception/ground_segmentation/src/ray_ground_filter/node.hpp index 6e2638e8566d8..8bb17cdaf8a09 100644 --- a/perception/ground_segmentation/include/ground_segmentation/ray_ground_filter_nodelet.hpp +++ b/perception/ground_segmentation/src/ray_ground_filter/node.hpp @@ -42,8 +42,8 @@ * v1.0: amc-nu (abrahammonrroy@yahoo.com) */ -#ifndef GROUND_SEGMENTATION__RAY_GROUND_FILTER_NODELET_HPP_ -#define GROUND_SEGMENTATION__RAY_GROUND_FILTER_NODELET_HPP_ +#ifndef RAY_GROUND_FILTER__NODE_HPP_ +#define RAY_GROUND_FILTER__NODE_HPP_ #include @@ -58,14 +58,7 @@ #include #endif -#include - -#include -#include -#include -// #include - -#include "ground_segmentation/gencolors.hpp" +#include "gencolors.hpp" #include "pointcloud_preprocessor/filter.hpp" #include @@ -76,11 +69,17 @@ #include #include +#include + +#include +#include +#include + namespace bg = boost::geometry; using Point = bg::model::d2::point_xy; using Polygon = bg::model::polygon; -namespace ground_segmentation +namespace autoware::ground_segmentation { class RayGroundFilterComponent : public pointcloud_preprocessor::Filter { @@ -206,6 +205,6 @@ class RayGroundFilterComponent : public pointcloud_preprocessor::Filter EIGEN_MAKE_ALIGNED_OPERATOR_NEW explicit RayGroundFilterComponent(const rclcpp::NodeOptions & options); }; -} // namespace ground_segmentation +} // namespace autoware::ground_segmentation -#endif // GROUND_SEGMENTATION__RAY_GROUND_FILTER_NODELET_HPP_ +#endif // RAY_GROUND_FILTER__NODE_HPP_ diff --git a/perception/ground_segmentation/src/scan_ground_filter_nodelet.cpp b/perception/ground_segmentation/src/scan_ground_filter/node.cpp similarity index 98% rename from perception/ground_segmentation/src/scan_ground_filter_nodelet.cpp rename to perception/ground_segmentation/src/scan_ground_filter/node.cpp index 7853aa400b6a5..26db036f79bbe 100644 --- a/perception/ground_segmentation/src/scan_ground_filter_nodelet.cpp +++ b/perception/ground_segmentation/src/scan_ground_filter/node.cpp @@ -12,18 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "ground_segmentation/scan_ground_filter_nodelet.hpp" +#include "node.hpp" -#include -#include -#include -#include +#include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/math/normalization.hpp" +#include "autoware/universe_utils/math/unit_conversion.hpp" +#include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include #include #include -namespace ground_segmentation +namespace autoware::ground_segmentation { using autoware::universe_utils::calcDistance3d; using autoware::universe_utils::deg2rad; @@ -33,7 +33,7 @@ using autoware::vehicle_info_utils::VehicleInfoUtils; using pointcloud_preprocessor::get_param; ScanGroundFilterComponent::ScanGroundFilterComponent(const rclcpp::NodeOptions & options) -: Filter("ScanGroundFilter", options) +: pointcloud_preprocessor::Filter("ScanGroundFilter", options) { // set initial parameters { @@ -715,7 +715,7 @@ rcl_interfaces::msg::SetParametersResult ScanGroundFilterComponent::onParameter( return result; } -} // namespace ground_segmentation +} // namespace autoware::ground_segmentation #include -RCLCPP_COMPONENTS_REGISTER_NODE(ground_segmentation::ScanGroundFilterComponent) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::ground_segmentation::ScanGroundFilterComponent) diff --git a/perception/ground_segmentation/include/ground_segmentation/scan_ground_filter_nodelet.hpp b/perception/ground_segmentation/src/scan_ground_filter/node.hpp similarity index 97% rename from perception/ground_segmentation/include/ground_segmentation/scan_ground_filter_nodelet.hpp rename to perception/ground_segmentation/src/scan_ground_filter/node.hpp index 3ae41173a7a7d..0e6ed598053ba 100644 --- a/perception/ground_segmentation/include/ground_segmentation/scan_ground_filter_nodelet.hpp +++ b/perception/ground_segmentation/src/scan_ground_filter/node.hpp @@ -12,14 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef GROUND_SEGMENTATION__SCAN_GROUND_FILTER_NODELET_HPP_ -#define GROUND_SEGMENTATION__SCAN_GROUND_FILTER_NODELET_HPP_ +#ifndef SCAN_GROUND_FILTER__NODE_HPP_ +#define SCAN_GROUND_FILTER__NODE_HPP_ +#include "autoware_vehicle_info_utils/vehicle_info.hpp" #include "pointcloud_preprocessor/filter.hpp" #include "pointcloud_preprocessor/transform_info.hpp" -#include - #include #include @@ -41,7 +40,7 @@ class ScanGroundFilterTest; -namespace ground_segmentation +namespace autoware::ground_segmentation { using autoware::vehicle_info_utils::VehicleInfo; @@ -291,6 +290,6 @@ class ScanGroundFilterComponent : public pointcloud_preprocessor::Filter // for test friend ScanGroundFilterTest; }; -} // namespace ground_segmentation +} // namespace autoware::ground_segmentation -#endif // GROUND_SEGMENTATION__SCAN_GROUND_FILTER_NODELET_HPP_ +#endif // SCAN_GROUND_FILTER__NODE_HPP_ diff --git a/perception/ground_segmentation/test/test_ransac_ground_filter.cpp b/perception/ground_segmentation/test/test_ransac_ground_filter.cpp index 79e28b6b1ccd8..fb66ba9e05b6d 100644 --- a/perception/ground_segmentation/test/test_ransac_ground_filter.cpp +++ b/perception/ground_segmentation/test/test_ransac_ground_filter.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "../src/ransac_ground_filter/node.hpp" #include "ament_index_cpp/get_package_share_directory.hpp" #include "tf2_ros/transform_broadcaster.h" #include -#include #include "geometry_msgs/msg/transform_stamped.hpp" #include @@ -68,7 +68,7 @@ class RansacGroundFilterTestSuite : public ::testing::Test void TearDown() { (void)rclcpp::shutdown(); } }; -class RansacGroundFilterTest : public ground_segmentation::RANSACGroundFilterComponent +class RansacGroundFilterTest : public autoware::ground_segmentation::RANSACGroundFilterComponent { public: explicit RansacGroundFilterTest(const rclcpp::NodeOptions & options) diff --git a/perception/ground_segmentation/test/test_ray_ground_filter.cpp b/perception/ground_segmentation/test/test_ray_ground_filter.cpp index 68dddf0c68bc7..4233b8bb18ebe 100644 --- a/perception/ground_segmentation/test/test_ray_ground_filter.cpp +++ b/perception/ground_segmentation/test/test_ray_ground_filter.cpp @@ -12,11 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "../src/ray_ground_filter/node.hpp" #include "ament_index_cpp/get_package_share_directory.hpp" #include "tf2_ros/transform_broadcaster.h" -#include - #include "geometry_msgs/msg/transform_stamped.hpp" #include @@ -37,7 +36,7 @@ class RayGroundFilterComponentTestSuite : public ::testing::Test void TearDown() { (void)rclcpp::shutdown(); } }; // sanity_check -class RayGroundFilterComponentTest : public ground_segmentation::RayGroundFilterComponent +class RayGroundFilterComponentTest : public autoware::ground_segmentation::RayGroundFilterComponent { public: explicit RayGroundFilterComponentTest(const rclcpp::NodeOptions & options) diff --git a/perception/ground_segmentation/test/test_scan_ground_filter.cpp b/perception/ground_segmentation/test/test_scan_ground_filter.cpp index af97f7e0112fd..f5faecd59d6d3 100644 --- a/perception/ground_segmentation/test/test_scan_ground_filter.cpp +++ b/perception/ground_segmentation/test/test_scan_ground_filter.cpp @@ -12,11 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "../src/scan_ground_filter/node.hpp" #include "ament_index_cpp/get_package_share_directory.hpp" #include "tf2_ros/transform_broadcaster.h" -#include - #include #include @@ -126,7 +125,8 @@ class ScanGroundFilterTest : public ::testing::Test options.parameter_overrides(parameters); - scan_ground_filter_ = std::make_shared(options); + scan_ground_filter_ = + std::make_shared(options); // read pcd to pointcloud sensor_msgs::msg::PointCloud2::SharedPtr origin_input_msg_ptr = @@ -161,7 +161,7 @@ class ScanGroundFilterTest : public ::testing::Test ~ScanGroundFilterTest() override { rclcpp::shutdown(); } public: - std::shared_ptr scan_ground_filter_; + std::shared_ptr scan_ground_filter_; rclcpp::Node::SharedPtr dummy_node_; rclcpp::Publisher::SharedPtr input_pointcloud_pub_; rclcpp::Publisher::SharedPtr output_pointcloud_pub_; From 7a880803dfe9200032c08380748c8e52ef65b38a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Fatih=20C=C4=B1r=C4=B1t?= Date: Wed, 3 Jul 2024 12:23:12 +0300 Subject: [PATCH 033/306] ci(codecov.yaml): make it pass regardless of coverage (#7803) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: M. Fatih Cırıt --- codecov.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/codecov.yaml b/codecov.yaml index a4f3298cd4ab6..ecc77815e97e6 100644 --- a/codecov.yaml +++ b/codecov.yaml @@ -20,7 +20,9 @@ flag_management: statuses: - name_prefix: project- type: project - target: auto + target: 0% # Make CI always succeed + threshold: 100% # Make CI always succeed - name_prefix: patch- type: patch - target: auto + target: 0% # Make CI always succeed + threshold: 100% # Make CI always succeed From 287f22c883292ca935842cc12296992b7af62de0 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 3 Jul 2024 18:31:46 +0900 Subject: [PATCH 034/306] refactor(raindrop_cluster_filter)!: fix namespace and directory structure (#7785) refactor: namespace fix, move header to src Signed-off-by: Taekjin LEE --- .../raindrop_cluster_filter/CMakeLists.txt | 4 ++-- ... => low_intensity_cluster_filter_node.cpp} | 12 +++++++----- .../low_intensity_cluster_filter_node.hpp} | 19 +++++++++---------- 3 files changed, 18 insertions(+), 17 deletions(-) rename perception/raindrop_cluster_filter/src/{low_intensity_cluster_filter.cpp => low_intensity_cluster_filter_node.cpp} (95%) rename perception/raindrop_cluster_filter/{include/raindrop_cluster_filter/low_intensity_cluster_filter/low_intensity_cluster_filter.hpp => src/low_intensity_cluster_filter_node.hpp} (78%) diff --git a/perception/raindrop_cluster_filter/CMakeLists.txt b/perception/raindrop_cluster_filter/CMakeLists.txt index a867bc740317b..17eef97cc2f52 100644 --- a/perception/raindrop_cluster_filter/CMakeLists.txt +++ b/perception/raindrop_cluster_filter/CMakeLists.txt @@ -10,11 +10,11 @@ autoware_package() # Targets ament_auto_add_library(low_intensity_cluster_filter SHARED - src/low_intensity_cluster_filter.cpp + src/low_intensity_cluster_filter_node.cpp ) rclcpp_components_register_node(low_intensity_cluster_filter - PLUGIN "low_intensity_cluster_filter::LowIntensityClusterFilter" + PLUGIN "autoware::low_intensity_cluster_filter::LowIntensityClusterFilter" EXECUTABLE low_intensity_cluster_filter_node) diff --git a/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter.cpp b/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp similarity index 95% rename from perception/raindrop_cluster_filter/src/low_intensity_cluster_filter.cpp rename to perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp index 4772c355ec0b6..105fc98722a26 100644 --- a/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter.cpp +++ b/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp @@ -12,15 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "raindrop_cluster_filter/low_intensity_cluster_filter/low_intensity_cluster_filter.hpp" +#include "low_intensity_cluster_filter_node.hpp" + +#include "autoware/universe_utils/geometry/geometry.hpp" -#include #include #include #include -namespace low_intensity_cluster_filter + +namespace autoware::low_intensity_cluster_filter { LowIntensityClusterFilter::LowIntensityClusterFilter(const rclcpp::NodeOptions & node_options) : Node("low_intensity_cluster_filter_node", node_options), @@ -135,7 +137,7 @@ bool LowIntensityClusterFilter::isValidatedCluster(const sensor_msgs::msg::Point return false; } -} // namespace low_intensity_cluster_filter +} // namespace autoware::low_intensity_cluster_filter #include -RCLCPP_COMPONENTS_REGISTER_NODE(low_intensity_cluster_filter::LowIntensityClusterFilter) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::low_intensity_cluster_filter::LowIntensityClusterFilter) diff --git a/perception/raindrop_cluster_filter/include/raindrop_cluster_filter/low_intensity_cluster_filter/low_intensity_cluster_filter.hpp b/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp similarity index 78% rename from perception/raindrop_cluster_filter/include/raindrop_cluster_filter/low_intensity_cluster_filter/low_intensity_cluster_filter.hpp rename to perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp index b3ebc4d916947..8e21306218ab2 100644 --- a/perception/raindrop_cluster_filter/include/raindrop_cluster_filter/low_intensity_cluster_filter/low_intensity_cluster_filter.hpp +++ b/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp @@ -12,26 +12,25 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RAINDROP_CLUSTER_FILTER__LOW_INTENSITY_CLUSTER_FILTER__LOW_INTENSITY_CLUSTER_FILTER_HPP_ -#define RAINDROP_CLUSTER_FILTER__LOW_INTENSITY_CLUSTER_FILTER__LOW_INTENSITY_CLUSTER_FILTER_HPP_ +#ifndef LOW_INTENSITY_CLUSTER_FILTER_NODE_HPP_ +#define LOW_INTENSITY_CLUSTER_FILTER_NODE_HPP_ +#include "autoware/universe_utils/ros/debug_publisher.hpp" +#include "autoware/universe_utils/system/stop_watch.hpp" #include "detected_object_validation/utils/utils.hpp" -#include -#include +#include #include -#include +#include "tier4_perception_msgs/msg/detected_objects_with_feature.hpp" #include #include -// #include -#include #include #include -namespace low_intensity_cluster_filter +namespace autoware::low_intensity_cluster_filter { class LowIntensityClusterFilter : public rclcpp::Node @@ -73,6 +72,6 @@ class LowIntensityClusterFilter : public rclcpp::Node std::unique_ptr debug_publisher_ptr_{nullptr}; }; -} // namespace low_intensity_cluster_filter +} // namespace autoware::low_intensity_cluster_filter -#endif // RAINDROP_CLUSTER_FILTER__LOW_INTENSITY_CLUSTER_FILTER__LOW_INTENSITY_CLUSTER_FILTER_HPP_ +#endif // LOW_INTENSITY_CLUSTER_FILTER_NODE_HPP_ From f96ad28011f21deab4de1829a4a54c92db23da5c Mon Sep 17 00:00:00 2001 From: Esteve Fernandez <33620+esteve@users.noreply.github.com> Date: Wed, 3 Jul 2024 13:13:18 +0200 Subject: [PATCH 035/306] refactor(stop_filter): prefix package and namespace with autoware (#7789) * refactor(stop_filter): prefix package and namespace with autoware Signed-off-by: Esteve Fernandez * fix launch files and update CODEOWNERS Signed-off-by: Esteve Fernandez --------- Signed-off-by: Esteve Fernandez --- .github/CODEOWNERS | 2 +- .../pose_twist_fusion_filter.launch.xml | 2 +- .../{stop_filter => autoware_stop_filter}/CMakeLists.txt | 3 ++- .../{stop_filter => autoware_stop_filter}/README.md | 0 .../config/stop_filter.param.yaml | 0 .../launch/stop_filter.launch.xml | 4 ++-- .../{stop_filter => autoware_stop_filter}/package.xml | 2 +- .../schema/stop_filter.schema.json | 0 .../src/stop_filter.cpp | 7 +++++-- .../src}/stop_filter.hpp | 9 ++++++--- 10 files changed, 18 insertions(+), 11 deletions(-) rename localization/{stop_filter => autoware_stop_filter}/CMakeLists.txt (87%) rename localization/{stop_filter => autoware_stop_filter}/README.md (100%) rename localization/{stop_filter => autoware_stop_filter}/config/stop_filter.param.yaml (100%) rename localization/{stop_filter => autoware_stop_filter}/launch/stop_filter.launch.xml (69%) rename localization/{stop_filter => autoware_stop_filter}/package.xml (97%) rename localization/{stop_filter => autoware_stop_filter}/schema/stop_filter.schema.json (100%) rename localization/{stop_filter => autoware_stop_filter}/src/stop_filter.cpp (92%) rename localization/{stop_filter/include/stop_filter => autoware_stop_filter/src}/stop_filter.hpp (91%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b932cc62b77ca..1f25372c14d71 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -81,6 +81,7 @@ launch/tier4_vehicle_launch/** yukihiro.saito@tier4.jp localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/autoware_landmark_based_localizer/autoware_landmark_manager/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/autoware_pose_covariance_modifier/** melike@leodrive.ai +localization/autoware_stop_filter/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/ekf_localizer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp takamasa.horibe@tier4.jp takeshi.ishita@tier4.jp yamato.ando@tier4.jp localization/geo_pose_projector/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/gyro_odometer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp @@ -91,7 +92,6 @@ localization/pose2twist/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masah localization/pose_estimator_arbiter/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/pose_initializer/** anh.nguyen.2@tier4.jp isamu.takagi@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/pose_instability_detector/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -localization/stop_filter/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/twist2accel/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/yabloc/yabloc_common/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/yabloc/yabloc_image_processing/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp diff --git a/launch/tier4_localization_launch/launch/pose_twist_fusion_filter/pose_twist_fusion_filter.launch.xml b/launch/tier4_localization_launch/launch/pose_twist_fusion_filter/pose_twist_fusion_filter.launch.xml index bdea584bd58ae..b39346de8f8da 100644 --- a/launch/tier4_localization_launch/launch/pose_twist_fusion_filter/pose_twist_fusion_filter.launch.xml +++ b/launch/tier4_localization_launch/launch/pose_twist_fusion_filter/pose_twist_fusion_filter.launch.xml @@ -17,7 +17,7 @@ - + diff --git a/localization/stop_filter/CMakeLists.txt b/localization/autoware_stop_filter/CMakeLists.txt similarity index 87% rename from localization/stop_filter/CMakeLists.txt rename to localization/autoware_stop_filter/CMakeLists.txt index 4776a1f4967b2..f33ab41169cb3 100644 --- a/localization/stop_filter/CMakeLists.txt +++ b/localization/autoware_stop_filter/CMakeLists.txt @@ -1,11 +1,12 @@ cmake_minimum_required(VERSION 3.14) -project(stop_filter) +project(autoware_stop_filter) find_package(autoware_cmake REQUIRED) autoware_package() ament_auto_add_library(${PROJECT_NAME} SHARED src/stop_filter.cpp + src/stop_filter.hpp ) rclcpp_components_register_node(${PROJECT_NAME} diff --git a/localization/stop_filter/README.md b/localization/autoware_stop_filter/README.md similarity index 100% rename from localization/stop_filter/README.md rename to localization/autoware_stop_filter/README.md diff --git a/localization/stop_filter/config/stop_filter.param.yaml b/localization/autoware_stop_filter/config/stop_filter.param.yaml similarity index 100% rename from localization/stop_filter/config/stop_filter.param.yaml rename to localization/autoware_stop_filter/config/stop_filter.param.yaml diff --git a/localization/stop_filter/launch/stop_filter.launch.xml b/localization/autoware_stop_filter/launch/stop_filter.launch.xml similarity index 69% rename from localization/stop_filter/launch/stop_filter.launch.xml rename to localization/autoware_stop_filter/launch/stop_filter.launch.xml index c53b37efc9954..ff7b6cafe6e8f 100644 --- a/localization/stop_filter/launch/stop_filter.launch.xml +++ b/localization/autoware_stop_filter/launch/stop_filter.launch.xml @@ -1,9 +1,9 @@ - + - + diff --git a/localization/stop_filter/package.xml b/localization/autoware_stop_filter/package.xml similarity index 97% rename from localization/stop_filter/package.xml rename to localization/autoware_stop_filter/package.xml index 2e6d5c4f8bbe1..dfdbd5f182983 100644 --- a/localization/stop_filter/package.xml +++ b/localization/autoware_stop_filter/package.xml @@ -1,7 +1,7 @@ - stop_filter + autoware_stop_filter 0.0.0 The stop filter package Koji Minoda diff --git a/localization/stop_filter/schema/stop_filter.schema.json b/localization/autoware_stop_filter/schema/stop_filter.schema.json similarity index 100% rename from localization/stop_filter/schema/stop_filter.schema.json rename to localization/autoware_stop_filter/schema/stop_filter.schema.json diff --git a/localization/stop_filter/src/stop_filter.cpp b/localization/autoware_stop_filter/src/stop_filter.cpp similarity index 92% rename from localization/stop_filter/src/stop_filter.cpp rename to localization/autoware_stop_filter/src/stop_filter.cpp index c1c4de2fb6b6e..f5e29419105d4 100644 --- a/localization/stop_filter/src/stop_filter.cpp +++ b/localization/autoware_stop_filter/src/stop_filter.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "stop_filter/stop_filter.hpp" +#include "stop_filter.hpp" #include @@ -24,6 +24,8 @@ using std::placeholders::_1; +namespace autoware::stop_filter +{ StopFilter::StopFilter(const rclcpp::NodeOptions & node_options) : rclcpp::Node("stop_filter", node_options) { @@ -57,6 +59,7 @@ void StopFilter::callback_odometry(const nav_msgs::msg::Odometry::SharedPtr msg) pub_stop_flag_->publish(stop_flag_msg); pub_odom_->publish(odom_msg); } +} // namespace autoware::stop_filter #include -RCLCPP_COMPONENTS_REGISTER_NODE(StopFilter) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::stop_filter::StopFilter) diff --git a/localization/stop_filter/include/stop_filter/stop_filter.hpp b/localization/autoware_stop_filter/src/stop_filter.hpp similarity index 91% rename from localization/stop_filter/include/stop_filter/stop_filter.hpp rename to localization/autoware_stop_filter/src/stop_filter.hpp index e8428788820b2..ce6e67f0b7265 100644 --- a/localization/stop_filter/include/stop_filter/stop_filter.hpp +++ b/localization/autoware_stop_filter/src/stop_filter.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef STOP_FILTER__STOP_FILTER_HPP_ -#define STOP_FILTER__STOP_FILTER_HPP_ +#ifndef STOP_FILTER_HPP_ +#define STOP_FILTER_HPP_ #include @@ -34,6 +34,8 @@ #include #include +namespace autoware::stop_filter +{ class StopFilter : public rclcpp::Node { public: @@ -54,4 +56,5 @@ class StopFilter : public rclcpp::Node */ void callback_odometry(const nav_msgs::msg::Odometry::SharedPtr msg); }; -#endif // STOP_FILTER__STOP_FILTER_HPP_ +} // namespace autoware::stop_filter +#endif // STOP_FILTER_HPP_ From e193434b42845efa7eb9fda281bb3e1c0dbb75ff Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 00:09:17 +0900 Subject: [PATCH 036/306] fix(autoware_map_based_prediction): fix syntaxError (#7813) * fix(autoware_map_based_prediction): fix syntaxError Signed-off-by: Ryuta Kambe * style(pre-commit): autofix * fix spellcheck Signed-off-by: Ryuta Kambe * fix new cppcheck warnings Signed-off-by: Ryuta Kambe * style(pre-commit): autofix --------- Signed-off-by: Ryuta Kambe Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../src/map_based_prediction_node.cpp | 13 +++++----- .../src/path_generator.cpp | 24 ++++++++++--------- 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp index c8c4e3bed2d01..2b8358eb52e4e 100644 --- a/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp +++ b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp @@ -1771,11 +1771,12 @@ std::vector MapBasedPredictionNode::getPredictedReferencePath( object.kinematics.acceleration_with_covariance.accel.linear.y) : 0.0; const double t_h = time_horizon; - const double λ = std::log(2) / acceleration_exponential_half_life_; + const double lambda = std::log(2) / acceleration_exponential_half_life_; auto get_search_distance_with_decaying_acc = [&]() -> double { const double acceleration_distance = - obj_acc * (1.0 / λ) * t_h + obj_acc * (1.0 / std::pow(λ, 2)) * (std::exp(-λ * t_h) - 1); + obj_acc * (1.0 / lambda) * t_h + + obj_acc * (1.0 / std::pow(lambda, 2)) * std::expm1(-lambda * t_h); double search_dist = acceleration_distance + obj_vel * t_h; return search_dist; }; @@ -1787,13 +1788,13 @@ std::vector MapBasedPredictionNode::getPredictedReferencePath( return obj_vel * t_h; } // Time to reach final speed - const double t_f = (-1.0 / λ) * std::log(1 - ((final_speed - obj_vel) * λ) / obj_acc); + const double t_f = (-1.0 / lambda) * std::log(1 - ((final_speed - obj_vel) * lambda) / obj_acc); // It is assumed the vehicle accelerates until final_speed is reached and // then continues at constant speed for the rest of the time horizon const double search_dist = // Distance covered while accelerating - obj_acc * (1.0 / λ) * t_f + obj_acc * (1.0 / std::pow(λ, 2)) * (std::exp(-λ * t_f) - 1) + - obj_vel * t_f + + obj_acc * (1.0 / lambda) * t_f + + obj_acc * (1.0 / std::pow(lambda, 2)) * std::expm1(-lambda * t_f) + obj_vel * t_f + // Distance covered at constant speed final_speed * (t_h - t_f); return search_dist; @@ -1807,7 +1808,7 @@ std::vector MapBasedPredictionNode::getPredictedReferencePath( const double legal_speed_limit = static_cast(limit.speedLimit.value()); double final_speed_after_acceleration = - obj_vel + obj_acc * (1.0 / λ) * (1.0 - std::exp(-λ * t_h)); + obj_vel + obj_acc * (1.0 / lambda) * (1.0 - std::exp(-lambda * t_h)); const double final_speed_limit = legal_speed_limit * speed_limit_multiplier_; const bool final_speed_surpasses_limit = final_speed_after_acceleration > final_speed_limit; diff --git a/perception/autoware_map_based_prediction/src/path_generator.cpp b/perception/autoware_map_based_prediction/src/path_generator.cpp index aeb1b0fedd33f..dac034a6b7a7d 100644 --- a/perception/autoware_map_based_prediction/src/path_generator.cpp +++ b/perception/autoware_map_based_prediction/src/path_generator.cpp @@ -421,7 +421,7 @@ FrenetPoint PathGenerator::getFrenetPoint( // Using a decaying acceleration model. Consult the README for more information about the model. const double t_h = duration; - const float λ = std::log(2) / acceleration_exponential_half_life_; + const float lambda = std::log(2) / acceleration_exponential_half_life_; auto have_same_sign = [](double a, double b) -> bool { return (a >= 0.0 && b >= 0.0) || (a < 0.0 && b < 0.0); @@ -434,7 +434,7 @@ FrenetPoint PathGenerator::getFrenetPoint( return v; } // Get velocity after time horizon - const auto terminal_velocity = v + a * (1.0 / λ) * (1 - std::exp(-λ * t_h)); + const auto terminal_velocity = v + a * (1.0 / lambda) * (1 - std::exp(-lambda * t_h)); // If vehicle is decelerating, make sure its speed does not change signs (we assume it will, at // most stop, not reverse its direction) @@ -443,15 +443,16 @@ FrenetPoint PathGenerator::getFrenetPoint( // if the velocities don't have the same sign, calculate when the vehicle reaches 0 speed -> // time t_stop - // 0 = Vo + acc(1/λ)(1-e^(-λt_stop)) - // e^(-λt_stop) = 1 - (-Vo* λ)/acc - // t_stop = (-1/λ)*ln(1 - (-Vo* λ)/acc) - // t_stop = (-1/λ)*ln(1 + (Vo* λ)/acc) - auto t_stop = (-1.0 / λ) * std::log(1 + (v * λ / a)); + // 0 = Vo + acc(1/lambda)(1-e^(-lambda t_stop)) + // e^(-lambda t_stop) = 1 - (-Vo* lambda)/acc + // t_stop = (-1/lambda)*ln(1 - (-Vo* lambda)/acc) + // t_stop = (-1/lambda)*ln(1 + (Vo* lambda)/acc) + auto t_stop = (-1.0 / lambda) * std::log1p(v * lambda / a); // Calculate the distance traveled until stopping auto distance_to_reach_zero_speed = - v * t_stop + a * t_stop * (1.0 / λ) + a * (1.0 / std::pow(λ, 2)) * (std::exp(-λ * t_h) - 1); + v * t_stop + a * t_stop * (1.0 / lambda) + + a * (1.0 / std::pow(lambda, 2)) * std::expm1(-lambda * t_h); // Output an equivalent constant speed return distance_to_reach_zero_speed / t_h; } @@ -461,17 +462,18 @@ FrenetPoint PathGenerator::getFrenetPoint( // assume it will continue accelerating (reckless driving) const bool object_has_surpassed_limit_already = v > speed_limit; if (terminal_velocity < speed_limit || object_has_surpassed_limit_already) - return v + a * (1.0 / λ) + (a / (t_h * std::pow(λ, 2))) * (std::exp(-λ * t_h) - 1); + return v + a * (1.0 / lambda) + (a / (t_h * std::pow(lambda, 2))) * std::expm1(-lambda * t_h); // It is assumed the vehicle accelerates until final_speed is reached and // then continues at constant speed for the rest of the time horizon // So, we calculate the time it takes to reach the speed limit and compute how far the vehicle // would go if it accelerated until reaching the speed limit, and then continued at a constant // speed. - const double t_f = (-1.0 / λ) * std::log(1 - ((speed_limit - v) * λ) / a); + const double t_f = (-1.0 / lambda) * std::log(1 - ((speed_limit - v) * lambda) / a); const double distance_covered = // Distance covered while accelerating - a * (1.0 / λ) * t_f + a * (1.0 / std::pow(λ, 2)) * (std::exp(-λ * t_f) - 1) + v * t_f + + a * (1.0 / lambda) * t_f + a * (1.0 / std::pow(lambda, 2)) * std::expm1(-lambda * t_f) + + v * t_f + // Distance covered at constant speed for the rest of the horizon time speed_limit * (t_h - t_f); return distance_covered / t_h; From 9b27f355e0b17da860444ec79b0a8f0c42eb2862 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Thu, 4 Jul 2024 00:34:15 +0900 Subject: [PATCH 037/306] feat(pointcloud_preprocessor): add unit test for distortion corrector node (#7801) feat: add unit test for distoriton corrector node Signed-off-by: vividf --- .../pointcloud_preprocessor/CMakeLists.txt | 14 +- .../test/test_distortion_corrector.py | 241 ------- .../test/test_distortion_corrector_node.cpp | 600 ++++++++++++++++++ ...test_distortion_corrector_use_imu_false.py | 240 ------- 4 files changed, 606 insertions(+), 489 deletions(-) delete mode 100644 sensing/pointcloud_preprocessor/test/test_distortion_corrector.py create mode 100644 sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp delete mode 100644 sensing/pointcloud_preprocessor/test/test_distortion_corrector_use_imu_false.py diff --git a/sensing/pointcloud_preprocessor/CMakeLists.txt b/sensing/pointcloud_preprocessor/CMakeLists.txt index dd73f28a41f3c..2d0649fe43954 100644 --- a/sensing/pointcloud_preprocessor/CMakeLists.txt +++ b/sensing/pointcloud_preprocessor/CMakeLists.txt @@ -231,14 +231,12 @@ if(BUILD_TESTING) ament_add_gtest(test_utilities test/test_utilities.cpp ) + ament_add_gtest(distortion_corrector_node_tests + test/test_distortion_corrector_node.cpp + ) + target_link_libraries(test_utilities pointcloud_preprocessor_filter) + target_link_libraries(distortion_corrector_node_tests pointcloud_preprocessor_filter) + - add_ros_test( - test/test_distortion_corrector.py - TIMEOUT "30" - ) - add_ros_test( - test/test_distortion_corrector_use_imu_false.py - TIMEOUT "30" - ) endif() diff --git a/sensing/pointcloud_preprocessor/test/test_distortion_corrector.py b/sensing/pointcloud_preprocessor/test/test_distortion_corrector.py deleted file mode 100644 index cc80da29e3c13..0000000000000 --- a/sensing/pointcloud_preprocessor/test/test_distortion_corrector.py +++ /dev/null @@ -1,241 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2023 TIER IV, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - -from geometry_msgs.msg import TwistWithCovarianceStamped -import launch -from launch.logging import get_logger -from launch_ros.actions import ComposableNodeContainer -from launch_ros.descriptions import ComposableNode -import launch_testing -import numpy as np -import pytest -import rclpy -from rclpy.qos import QoSDurabilityPolicy -from rclpy.qos import QoSHistoryPolicy -from rclpy.qos import QoSProfile -from rclpy.qos import QoSReliabilityPolicy -from sensor_msgs.msg import Imu -from sensor_msgs.msg import PointCloud2 -from sensor_msgs.msg import PointField -from std_msgs.msg import Header - -logger = get_logger(__name__) - - -@pytest.mark.launch_test -def generate_test_description(): - nodes = [] - - nodes.append( - ComposableNode( - package="pointcloud_preprocessor", - plugin="pointcloud_preprocessor::DistortionCorrectorComponent", - name="distortion_corrector_node", - parameters=[ - {"base_frame": "base_link", "use_imu": True, "use_3d_distortion_correction": False}, - ], - remappings=[ - ("~/input/twist", "/test/sensing/vehicle_velocity_converter/twist_with_covariance"), - ("~/input/imu", "/test/sensing/imu/imu_data"), - ("~/input/pointcloud", "/test/sensing/lidar/top/mirror_cropped/pointcloud_ex"), - ("~/output/pointcloud", "/test/sensing/lidar/top/rectified/pointcloud_ex"), - ], - extra_arguments=[{"use_intra_process_comms": True}], - ) - ) - - container = ComposableNodeContainer( - name="test_distortion_corrector_container", - namespace="pointcloud_preprocessor", - package="rclcpp_components", - executable="component_container", - composable_node_descriptions=nodes, - output="screen", - ) - - return launch.LaunchDescription( - [ - container, - # Start tests right away - no need to wait for anything - launch_testing.actions.ReadyToTest(), - ] - ) - - -class TestDistortionCorrector(unittest.TestCase): - @classmethod - def setUpClass(cls): - # Initialize the ROS context for the test node - rclpy.init() - - @classmethod - def tearDownClass(cls): - # Shutdown the ROS context - rclpy.shutdown() - - def setUp(self): - # Create a ROS node for tests - self.test_node = rclpy.create_node("test_node") - self.evaluation_time = 2 # 200ms - - def tearDown(self): - self.test_node.destroy_node() - - @staticmethod - def print_message(stat): - logger.debug("===========================") - logger.debug(stat) - - @staticmethod - def pointcloud2_to_xyz_array(cloud_msg): - cloud_arr = np.frombuffer(cloud_msg.data, dtype=np.float32) - cloud_arr = np.reshape(cloud_arr, (cloud_msg.width, int(cloud_msg.point_step / 4))) - return cloud_arr[:, :3] - - @staticmethod - def generate_pointcloud(num_points, header, timestamp_offset_per_point=0.01): - points_xyz = np.random.rand(num_points, 3).astype(np.float32) - timestamps = np.array( - [ - header.stamp.sec + header.stamp.nanosec * 1e-9 + timestamp_offset_per_point * i - for i in range(num_points) - ] - ).astype(np.float64) - xyz_data = points_xyz.tobytes() - timestamp_data = timestamps.tobytes() - pointcloud_data = b"".join( - xyz_data[i * 12 : i * 12 + 12] + timestamp_data[i * 8 : i * 8 + 8] - for i in range(len(xyz_data)) - ) - fields = [ - PointField(name="x", offset=0, datatype=PointField.FLOAT32, count=1), - PointField(name="y", offset=4, datatype=PointField.FLOAT32, count=1), - PointField(name="z", offset=8, datatype=PointField.FLOAT32, count=1), - PointField(name="time_stamp", offset=12, datatype=PointField.FLOAT64, count=1), - ] - pointcloud_msg = PointCloud2( - header=header, - height=1, - width=10, - is_dense=True, - is_bigendian=False, - point_step=20, # 4 float32 fields * 4 bytes/field - row_step=20 * num_points, # point_step * width - fields=fields, - data=pointcloud_data, - ) - return pointcloud_msg - - def test_node_link(self): - # QoS profile for sensor data - sensor_qos = QoSProfile( - history=QoSHistoryPolicy.KEEP_LAST, - depth=10, - reliability=QoSReliabilityPolicy.BEST_EFFORT, - durability=QoSDurabilityPolicy.VOLATILE, - ) - - # Publishers - imu_pub = self.test_node.create_publisher(Imu, "/test/sensing/imu/imu_data", 10) - velocity_pub = self.test_node.create_publisher( - TwistWithCovarianceStamped, - "/test/sensing/vehicle_velocity_converter/twist_with_covariance", - 10, - ) - pointcloud_pub = self.test_node.create_publisher( - PointCloud2, - "/test/sensing/lidar/top/mirror_cropped/pointcloud_ex", - qos_profile=sensor_qos, - ) - - # Subscribers - received_data = {"msg": None} - - def pointcloud_callback(msg): - received_data["msg"] = msg - - self.test_node.create_subscription( - PointCloud2, - "/test/sensing/lidar/top/rectified/pointcloud_ex", - pointcloud_callback, - qos_profile=sensor_qos, - ) - - # Wait for composable node launches - rclpy.spin_once(self.test_node, timeout_sec=1.0) - - # Prepare header - header = Header() - header.stamp = self.test_node.get_clock().now().to_msg() - header.frame_id = "base_link" - - # Publish IMU and velocity data - for i in range(50): - header_tmp = Header() - header_tmp.stamp = self.test_node.get_clock().now().to_msg() - header_tmp.frame_id = "base_link" - - imu_msg = Imu() - imu_msg.header = header_tmp - velocity_msg = TwistWithCovarianceStamped() - velocity_msg.header = header_tmp - velocity_msg.twist.twist.linear.x = 1.0 - - imu_pub.publish(imu_msg) - velocity_pub.publish(velocity_msg) - rclpy.spin_once(self.test_node, timeout_sec=0.01) - - # Publish pointcloud data - num_points = 10 - pointcloud_msg = self.generate_pointcloud(num_points, header) - pointcloud_pub.publish(pointcloud_msg) - - # Wait for output with a timeout - start_time = self.test_node.get_clock().now() - while self.test_node.get_clock().now() - start_time < rclpy.duration.Duration( - seconds=self.evaluation_time - ): - rclpy.spin_once(self.test_node, timeout_sec=0.1) - if received_data["msg"] is not None: - break - - # Check if the output was received - self.assertIsNotNone(received_data["msg"], "Did not receive output pointcloud data") - - # Check that the received pointcloud data has same length as num_points - received_pointcloud = received_data["msg"] - self.assertEqual( - received_pointcloud.width, - num_points, - "The received pointcloud data has a different length than expected", - ) - - # Check that the received pointcloud data is different from the original one - original_pointcloud_arr = self.pointcloud2_to_xyz_array(pointcloud_msg) - received_pointcloud_arr = self.pointcloud2_to_xyz_array(received_pointcloud) - self.assertFalse( - np.allclose(original_pointcloud_arr, received_pointcloud_arr, atol=1e-6), - "The received pointcloud data is not different from the original one", - ) - - -@launch_testing.post_shutdown_test() -class TestProcessOutput(unittest.TestCase): - def test_exit_code(self, proc_info): - # Check that process exits with code 0: no error - launch_testing.asserts.assertExitCodes(proc_info) diff --git a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp new file mode 100644 index 0000000000000..9e5d068be52f5 --- /dev/null +++ b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp @@ -0,0 +1,600 @@ +// Copyright 2024 Tier IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" + +#include + +#include +#include +#include +#include + +#include +#include + +class DistortionCorrectorTest : public ::testing::Test +{ +protected: + void SetUp() override + { + node_ = std::make_shared("test_node"); + distortion_corrector_2d_ = + std::make_shared(node_.get()); + distortion_corrector_3d_ = + std::make_shared(node_.get()); + + // Setup TF + tf_broadcaster_ = std::make_shared(node_); + tf_broadcaster_->sendTransform(generateStaticTransformMsg()); + + // Spin the node for a while to ensure transforms are published + auto start = std::chrono::steady_clock::now(); + auto timeout = std::chrono::seconds(1); + while (std::chrono::steady_clock::now() - start < timeout) { + rclcpp::spin_some(node_); + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + } + + void TearDown() override {} + + rclcpp::Time addMilliseconds(rclcpp::Time stamp, int ms) + { + auto ms_in_ns = rclcpp::Duration(0, ms * 1000000); + return stamp + ms_in_ns; + } + + rclcpp::Time subtractMilliseconds(rclcpp::Time stamp, int ms) + { + auto ms_in_ns = rclcpp::Duration(0, ms * 1000000); + return stamp - ms_in_ns; + } + + geometry_msgs::msg::TransformStamped generateTransformMsg( + const std::string & parent_frame, const std::string & child_frame, double x, double y, double z, + double qx, double qy, double qz, double qw) + { + geometry_msgs::msg::TransformStamped tf_msg; + tf_msg.header.stamp = node_->get_clock()->now(); + tf_msg.header.frame_id = parent_frame; + tf_msg.child_frame_id = child_frame; + tf_msg.transform.translation.x = x; + tf_msg.transform.translation.y = y; + tf_msg.transform.translation.z = z; + tf_msg.transform.rotation.x = qx; + tf_msg.transform.rotation.y = qy; + tf_msg.transform.rotation.z = qz; + tf_msg.transform.rotation.w = qw; + return tf_msg; + } + + std::vector generateStaticTransformMsg() + { + return { + generateTransformMsg("base_link", "lidar_top", 5.0, 5.0, 5.0, 0.683, 0.5, 0.183, 0.499), + generateTransformMsg("base_link", "imu_link", 1.0, 1.0, 3.0, 0.278, 0.717, 0.441, 0.453)}; + } + + std::shared_ptr generateTwistMsg( + double linear_x, double angular_z, rclcpp::Time stamp) + { + auto twist_msg = std::make_shared(); + twist_msg->header.stamp = stamp; + twist_msg->header.frame_id = "base_link"; + twist_msg->twist.twist.linear.x = linear_x; + twist_msg->twist.twist.angular.z = angular_z; + return twist_msg; + } + + std::shared_ptr generateImuMsg( + double angular_vel_x, double angular_vel_y, double angular_vel_z, rclcpp::Time stamp) + { + auto imu_msg = std::make_shared(); + imu_msg->header.stamp = stamp; + imu_msg->header.frame_id = "imu_link"; + imu_msg->angular_velocity.x = angular_vel_x; + imu_msg->angular_velocity.y = angular_vel_y; + imu_msg->angular_velocity.z = angular_vel_z; + return imu_msg; + } + + std::vector> generateTwistMsgs( + rclcpp::Time pointcloud_timestamp) + { + std::vector> twist_msgs; + rclcpp::Time twist_stamp = subtractMilliseconds(pointcloud_timestamp, 5); + + for (int i = 0; i < 6; ++i) { + auto twist_msg = generateTwistMsg(10.0 + i * 2, 0.02 + i * 0.01, twist_stamp); + twist_msgs.push_back(twist_msg); + // Make sure the twist stamp is not identical to any point stamp, and imu stamp + twist_stamp = addMilliseconds(twist_stamp, 24); + } + + return twist_msgs; + } + + std::vector> generateImuMsgs( + rclcpp::Time pointcloud_timestamp) + { + std::vector> imu_msgs; + rclcpp::Time imu_stamp = subtractMilliseconds(pointcloud_timestamp, 10); + + for (int i = 0; i < 6; ++i) { + auto imu_msg = + generateImuMsg(0.01 + i * 0.005, -0.02 + i * 0.005, 0.05 + i * 0.005, imu_stamp); + imu_msgs.push_back(imu_msg); + // Make sure the imu stamp is not identical to any point stamp, and twist stamp + imu_stamp = addMilliseconds(imu_stamp, 27); + } + + return imu_msgs; + } + + sensor_msgs::msg::PointCloud2 generatePointCloudMsg( + bool is_generate_points, bool is_lidar_frame, rclcpp::Time stamp) + { + sensor_msgs::msg::PointCloud2 pointcloud_msg; + pointcloud_msg.header.stamp = stamp; + pointcloud_msg.header.frame_id = is_lidar_frame ? "lidar_top" : "base_link"; + pointcloud_msg.height = 1; + pointcloud_msg.is_dense = true; + pointcloud_msg.is_bigendian = false; + pointcloud_msg.point_step = + 20; // 3 float32 fields * 4 bytes/field + 1 float64 field * 8 bytes/field + + if (is_generate_points) { + std::vector points = { + 10.0f, 0.0f, 0.0f, // point 1 + 0.0f, 10.0f, 0.0f, // point 2 + 0.0f, 0.0f, 10.0f, // point 3 + 20.0f, 0.0f, 0.0f, // point 4 + 0.0f, 20.0f, 0.0f, // point 5 + 0.0f, 0.0f, 20.0f, // point 6 + 30.0f, 0.0f, 0.0f, // point 7 + 0.0f, 30.0f, 0.0f, // point 8 + 0.0f, 0.0f, 30.0f, // point 9 + 10.0f, 10.0f, 10.0f // point 10 + }; + + size_t number_of_points = points.size() / 3; + std::vector timestamps = + generatePointTimestamps(is_generate_points, stamp, number_of_points); + + std::vector data(number_of_points * pointcloud_msg.point_step); + + for (size_t i = 0; i < number_of_points; ++i) { + std::memcpy(data.data() + i * pointcloud_msg.point_step, &points[i * 3], 3 * sizeof(float)); + std::memcpy( + data.data() + i * pointcloud_msg.point_step + 12, ×tamps[i], sizeof(double)); + } + + pointcloud_msg.width = number_of_points; + pointcloud_msg.row_step = pointcloud_msg.point_step * pointcloud_msg.width; + pointcloud_msg.data = std::move(data); + } else { + pointcloud_msg.width = 0; + pointcloud_msg.row_step = 0; + } + + sensor_msgs::msg::PointField x_field; + x_field.name = "x"; + x_field.offset = 0; + x_field.datatype = sensor_msgs::msg::PointField::FLOAT32; + x_field.count = 1; + + sensor_msgs::msg::PointField y_field; + y_field.name = "y"; + y_field.offset = 4; + y_field.datatype = sensor_msgs::msg::PointField::FLOAT32; + y_field.count = 1; + + sensor_msgs::msg::PointField z_field; + z_field.name = "z"; + z_field.offset = 8; + z_field.datatype = sensor_msgs::msg::PointField::FLOAT32; + z_field.count = 1; + + sensor_msgs::msg::PointField timestamp_field; + timestamp_field.name = "time_stamp"; + timestamp_field.offset = 12; + timestamp_field.datatype = sensor_msgs::msg::PointField::FLOAT64; + timestamp_field.count = 1; + + pointcloud_msg.fields = {x_field, y_field, z_field, timestamp_field}; + + return pointcloud_msg; + } + + std::vector generatePointTimestamps( + bool is_generate_points, rclcpp::Time pointcloud_timestamp, size_t number_of_points) + { + std::vector timestamps; + if (is_generate_points) { + rclcpp::Time point_stamp = pointcloud_timestamp; + for (size_t i = 0; i < number_of_points; ++i) { + double timestamp = point_stamp.seconds(); + timestamps.push_back(timestamp); + if (i > 0) { + point_stamp = point_stamp + rclcpp::Duration::from_seconds( + 0.001); // Assuming 1ms offset for demonstration + } + } + } + return timestamps; + } + + std::shared_ptr node_; + std::shared_ptr distortion_corrector_2d_; + std::shared_ptr distortion_corrector_3d_; + std::shared_ptr tf_broadcaster_; +}; + +TEST_F(DistortionCorrectorTest, TestProcessTwistMessage) +{ + auto twist_msg = generateTwistMsg(1.0, 0.5, node_->get_clock()->now()); + distortion_corrector_2d_->processTwistMessage(twist_msg); + + ASSERT_FALSE(distortion_corrector_2d_->twist_queue_.empty()); + EXPECT_EQ(distortion_corrector_2d_->twist_queue_.front().twist.linear.x, 1.0); + EXPECT_EQ(distortion_corrector_2d_->twist_queue_.front().twist.angular.z, 0.5); +} + +TEST_F(DistortionCorrectorTest, TestProcessIMUMessage) +{ + auto imu_msg = generateImuMsg(0.5, 0.3, 0.1, node_->get_clock()->now()); + distortion_corrector_2d_->processIMUMessage("base_link", imu_msg); + + ASSERT_FALSE(distortion_corrector_2d_->angular_velocity_queue_.empty()); + EXPECT_NEAR(distortion_corrector_2d_->angular_velocity_queue_.front().vector.z, 0.0443032, 1e-5); +} + +TEST_F(DistortionCorrectorTest, TestIsInputValid) +{ + // input normal pointcloud without twist + sensor_msgs::msg::PointCloud2 pointcloud = + generatePointCloudMsg(true, false, node_->get_clock()->now()); + bool result = distortion_corrector_2d_->isInputValid(pointcloud); + EXPECT_FALSE(result); + + // input normal pointcloud with valid twist + auto twist_msg = generateTwistMsg(1.0, 0.5, node_->get_clock()->now()); + distortion_corrector_2d_->processTwistMessage(twist_msg); + + pointcloud = generatePointCloudMsg(true, false, node_->get_clock()->now()); + result = distortion_corrector_2d_->isInputValid(pointcloud); + EXPECT_TRUE(result); + + // input empty pointcloud + pointcloud = generatePointCloudMsg(false, false, node_->get_clock()->now()); + result = distortion_corrector_2d_->isInputValid(pointcloud); + EXPECT_FALSE(result); +} + +TEST_F(DistortionCorrectorTest, TestSetPointCloudTransformWithBaseLink) +{ + distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); + EXPECT_TRUE(distortion_corrector_2d_->pointcloud_transform_exists_); + EXPECT_FALSE(distortion_corrector_2d_->pointcloud_transform_needed_); +} + +TEST_F(DistortionCorrectorTest, TestSetPointCloudTransformWithLidarFrame) +{ + distortion_corrector_2d_->setPointCloudTransform("base_link", "lidar_top"); + EXPECT_TRUE(distortion_corrector_2d_->pointcloud_transform_exists_); + EXPECT_TRUE(distortion_corrector_2d_->pointcloud_transform_needed_); +} + +TEST_F(DistortionCorrectorTest, TestSetPointCloudTransformWithMissingFrame) +{ + distortion_corrector_2d_->setPointCloudTransform("base_link", "missing_lidar_frame"); + EXPECT_FALSE(distortion_corrector_2d_->pointcloud_transform_exists_); + EXPECT_FALSE(distortion_corrector_2d_->pointcloud_transform_needed_); +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithEmptyTwist) +{ + rclcpp::Time timestamp = node_->get_clock()->now(); + // Generate the point cloud message + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Process empty twist queue + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->undistortPointCloud(false, pointcloud); + + // Verify the point cloud is not changed + const float * data_ptr = reinterpret_cast(pointcloud.data.data()); + std::vector> expected_pointcloud = { + {10.0f, 0.0f, 0.0f}, {0.0f, 10.0f, 0.0f}, {0.0f, 0.0f, 10.0f}, {20.0f, 0.0f, 0.0f}, + {0.0f, 20.0f, 0.0f}, {0.0f, 0.0f, 20.0f}, {30.0f, 0.0f, 0.0f}, {0.0f, 30.0f, 0.0f}, + {0.0f, 0.0f, 30.0f}, {10.0f, 10.0f, 10.0f}, + }; + + for (size_t i = 0; i < expected_pointcloud.size(); ++i) { + EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 1e-5); + EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 1e-5); + EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 1e-5); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithEmptyPointCloud) +{ + rclcpp::Time timestamp = node_->get_clock()->now(); + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_2d_->processTwistMessage(twist_msg); + } + // Generate an empty point cloud message + sensor_msgs::msg::PointCloud2 empty_pointcloud = generatePointCloudMsg(false, false, timestamp); + + // Process empty point cloud + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->undistortPointCloud(true, empty_pointcloud); + + // Verify the point cloud is still empty + EXPECT_EQ(empty_pointcloud.width, 0); + EXPECT_EQ(empty_pointcloud.row_step, 0); +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud2dWithoutImuInBaseLink) +{ + // Generate the point cloud message + rclcpp::Time timestamp = node_->get_clock()->now(); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_2d_->processTwistMessage(twist_msg); + } + + // Test using only twist + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_2d_->undistortPointCloud(false, pointcloud); + + const float * data_ptr = reinterpret_cast(pointcloud.data.data()); + + // Expected undistorted point cloud values + std::vector> expected_pointcloud = { + {10.0f, 0.0f, 0.0f}, {0.0f, 10.0f, 0.0f}, {0.012002f, 5.75338e-07f, 10.0f}, + {20.024f, 0.00191863f, 0.0f}, {0.0340828f, 20.0f, 0.0f}, {0.0479994f, 4.02654e-06f, 20.0f}, + {30.06f, 0.00575818f, 0.0f}, {0.0662481f, 30.0f, 0.0f}, {0.0839996f, 1.03542e-05f, 30.0f}, + {10.0931f, 10.0029f, 10.0f}, + }; + + // Verify each point in the undistorted point cloud + for (size_t i = 0; i < expected_pointcloud.size(); ++i) { + EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud2dWithImuInBaseLink) +{ + // Generate the point cloud message + rclcpp::Time timestamp = node_->get_clock()->now(); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_2d_->processTwistMessage(twist_msg); + } + + // Generate and process multiple IMU messages + auto imu_msgs = generateImuMsgs(timestamp); + for (const auto & imu_msg : imu_msgs) { + distortion_corrector_2d_->processIMUMessage("base_link", imu_msg); + } + + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_2d_->undistortPointCloud(true, pointcloud); + + const float * data_ptr = reinterpret_cast(pointcloud.data.data()); + + // Expected undistorted point cloud values + std::vector> expected_pointcloud = { + {10.0f, 0.0f, 0.0f}, {0.0f, 10.0f, 0.0f}, {0.0119991f, 5.75201e-07f, 10.0f}, + {20.024f, 0.0019192f, 0.0f}, {0.0321653f, 20.0f, 0.0f}, {0.0479994f, 6.32762e-06f, 20.0f}, + {30.06f, 0.00863842f, 0.0f}, {0.063369f, 30.0f, 0.0f}, {0.0839996f, 1.84079e-05f, 30.0f}, + {10.0912f, 10.0048f, 10.0f}, + }; + + // Verify each point in the undistorted point cloud + for (size_t i = 0; i < expected_pointcloud.size(); ++i) { + EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud2dWithImuInLidarFrame) +{ + // Generate the point cloud message + rclcpp::Time timestamp = node_->get_clock()->now(); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, true, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_2d_->processTwistMessage(twist_msg); + } + + // Generate and process multiple IMU messages + auto imu_msgs = generateImuMsgs(timestamp); + for (const auto & imu_msg : imu_msgs) { + distortion_corrector_2d_->processIMUMessage("base_link", imu_msg); + } + + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->setPointCloudTransform("base_link", "lidar_top"); + distortion_corrector_2d_->undistortPointCloud(true, pointcloud); + + const float * data_ptr = reinterpret_cast(pointcloud.data.data()); + // Expected undistorted point cloud values + std::vector> expected_pointcloud = { + {10.0f, -1.77636e-15f, -4.44089e-16f}, {-2.66454e-15f, 10.0f, -8.88178e-16f}, + {0.00622853f, 0.00600991f, 10.0084f}, {20.0106f, 0.010948f, 0.0157355f}, + {0.0176543f, 20.0176f, 0.0248379f}, {0.024499f, 0.0245179f, 20.0348f}, + {30.0266f, 0.0255826f, 0.0357166f}, {0.0355204f, 30.0353f, 0.0500275f}, + {0.047132f, 0.0439795f, 30.0606f}, {10.0488f, 10.046f, 10.0636f}, + }; + + // Verify each point in the undistorted point cloud + for (size_t i = 0; i < expected_pointcloud.size(); ++i) { + EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud3dWithoutImuInBaseLink) +{ + // Generate the point cloud message + rclcpp::Time timestamp = node_->get_clock()->now(); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_3d_->processTwistMessage(twist_msg); + } + + // Test using only twist + distortion_corrector_3d_->initialize(); + distortion_corrector_3d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_3d_->undistortPointCloud(false, pointcloud); + + const float * data_ptr = reinterpret_cast(pointcloud.data.data()); + + // Expected undistorted point cloud values + std::vector> expected_pointcloud = { + {10.0f, 0.0f, 0.0f}, {0.0f, 10.0f, 0.0f}, {0.0119991f, 0.0f, 10.0f}, + {20.024f, 0.00120042f, 0.0f}, {0.0342002f, 20.0f, 0.0f}, {0.0479994f, 2.15994e-06f, 20.0f}, + {30.06f, 0.00450349f, 0.0f}, {0.0666005f, 30.0f, 0.0f}, {0.0839996f, 7.55993e-06f, 30.0f}, + {10.0936f, 10.0024f, 10.0f}, + }; + + // Verify each point in the undistorted point cloud + for (size_t i = 0; i < expected_pointcloud.size(); ++i) { + EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud3dWithImuInBaseLink) +{ + // Generate the point cloud message + rclcpp::Time timestamp = node_->get_clock()->now(); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_3d_->processTwistMessage(twist_msg); + } + + // Generate and process multiple IMU messages + auto imu_msgs = generateImuMsgs(timestamp); + for (const auto & imu_msg : imu_msgs) { + distortion_corrector_3d_->processIMUMessage("base_link", imu_msg); + } + + distortion_corrector_3d_->initialize(); + distortion_corrector_3d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_3d_->undistortPointCloud(true, pointcloud); + + const float * data_ptr = reinterpret_cast(pointcloud.data.data()); + + // Expected undistorted point cloud values + std::vector> expected_pointcloud = { + {10.0f, 0.0f, 0.0f}, + {0.0f, 10.0f, 0.0f}, + {0.0118491f, -0.000149993f, 10.0f}, + {20.024f, 0.00220075f, 0.000600241f}, + {0.0327002f, 20.0f, 0.000900472f}, + {0.0468023f, -0.00119623f, 20.0f}, + {30.06f, 0.0082567f, 0.00225216f}, + {0.0621003f, 30.0f, 0.00270227f}, + {0.0808503f, -0.00313673f, 30.0f}, + {10.0904f, 10.0032f, 10.0024f}, + }; + + // Verify each point in the undistorted point cloud + for (size_t i = 0; i < expected_pointcloud.size(); ++i) { + EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud3dWithImuInLidarFrame) +{ + // Generate the point cloud message + rclcpp::Time timestamp = node_->get_clock()->now(); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, true, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_3d_->processTwistMessage(twist_msg); + } + + // Generate and process multiple IMU messages + auto imu_msgs = generateImuMsgs(timestamp); + for (const auto & imu_msg : imu_msgs) { + distortion_corrector_3d_->processIMUMessage("base_link", imu_msg); + } + + distortion_corrector_3d_->initialize(); + distortion_corrector_3d_->setPointCloudTransform("base_link", "lidar_top"); + distortion_corrector_3d_->undistortPointCloud(true, pointcloud); + + const float * data_ptr = reinterpret_cast(pointcloud.data.data()); + // Expected undistorted point cloud values + std::vector> expected_pointcloud = { + {10.0f, 0.0f, 0.0f}, + {-4.76837e-07f, 10.0f, 4.76837e-07f}, + {0.00572586f, 0.00616837f, 10.0086f}, + {20.0103f, 0.0117249f, 0.0149349f}, + {0.0158343f, 20.0179f, 0.024497f}, + {0.0251098f, 0.0254798f, 20.0343f}, + {30.0259f, 0.0290527f, 0.034577f}, + {0.0319824f, 30.0358f, 0.0477753f}, + {0.0478067f, 0.0460052f, 30.06f}, + {10.0462f, 10.0489f, 10.0625f}, + }; + + // Verify each point in the undistorted point cloud + for (size_t i = 0; i < expected_pointcloud.size(); ++i) { + EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); + EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); + } +} + +int main(int argc, char ** argv) +{ + ::testing::InitGoogleTest(&argc, argv); + rclcpp::init(argc, argv); + int ret = RUN_ALL_TESTS(); + rclcpp::shutdown(); + return ret; +} diff --git a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_use_imu_false.py b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_use_imu_false.py deleted file mode 100644 index 35eb41f9dbc17..0000000000000 --- a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_use_imu_false.py +++ /dev/null @@ -1,240 +0,0 @@ -#!/usr/bin/env python3 - -# Copyright 2023 TIER IV, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - -from geometry_msgs.msg import TwistWithCovarianceStamped -import launch -from launch.logging import get_logger -from launch_ros.actions import ComposableNodeContainer -from launch_ros.descriptions import ComposableNode -import launch_testing -import numpy as np -import pytest -import rclpy -from rclpy.qos import QoSDurabilityPolicy -from rclpy.qos import QoSHistoryPolicy -from rclpy.qos import QoSProfile -from rclpy.qos import QoSReliabilityPolicy -from sensor_msgs.msg import PointCloud2 -from sensor_msgs.msg import PointField -from std_msgs.msg import Header - -logger = get_logger(__name__) - - -@pytest.mark.launch_test -def generate_test_description(): - nodes = [] - - nodes.append( - ComposableNode( - package="pointcloud_preprocessor", - plugin="pointcloud_preprocessor::DistortionCorrectorComponent", - name="distortion_corrector_node", - parameters=[ - { - "base_frame": "base_link", - "use_imu": False, - "use_3d_distortion_correction": False, - }, - ], - remappings=[ - ("~/input/twist", "/test/sensing/vehicle_velocity_converter/twist_with_covariance"), - ("~/input/imu", "/test/sensing/imu/imu_data"), - ("~/input/pointcloud", "/test/sensing/lidar/top/mirror_cropped/pointcloud_ex"), - ("~/output/pointcloud", "/test/sensing/lidar/top/rectified/pointcloud_ex"), - ], - extra_arguments=[{"use_intra_process_comms": True}], - ) - ) - - container = ComposableNodeContainer( - name="test_distortion_corrector_container", - namespace="pointcloud_preprocessor", - package="rclcpp_components", - executable="component_container", - composable_node_descriptions=nodes, - output="screen", - ) - - return launch.LaunchDescription( - [ - container, - # Start tests right away - no need to wait for anything - launch_testing.actions.ReadyToTest(), - ] - ) - - -class TestDistortionCorrector(unittest.TestCase): - @classmethod - def setUpClass(cls): - # Initialize the ROS context for the test node - rclpy.init() - - @classmethod - def tearDownClass(cls): - # Shutdown the ROS context - rclpy.shutdown() - - def setUp(self): - # Create a ROS node for tests - self.test_node = rclpy.create_node("test_node") - self.evaluation_time = 2 # 200ms - - def tearDown(self): - self.test_node.destroy_node() - - @staticmethod - def print_message(stat): - logger.debug("===========================") - logger.debug(stat) - - @staticmethod - def pointcloud2_to_xyz_array(cloud_msg): - cloud_arr = np.frombuffer(cloud_msg.data, dtype=np.float32) - cloud_arr = np.reshape(cloud_arr, (cloud_msg.width, int(cloud_msg.point_step / 4))) - return cloud_arr[:, :3] - - @staticmethod - def generate_pointcloud(num_points, header, timestamp_offset_per_point=0.01): - points_xyz = np.random.rand(num_points, 3).astype(np.float32) - timestamps = np.array( - [ - header.stamp.sec + header.stamp.nanosec * 1e-9 + timestamp_offset_per_point * i - for i in range(num_points) - ] - ).astype(np.float64) - xyz_data = points_xyz.tobytes() - timestamp_data = timestamps.tobytes() - pointcloud_data = b"".join( - xyz_data[i * 12 : i * 12 + 12] + timestamp_data[i * 8 : i * 8 + 8] - for i in range(len(xyz_data)) - ) - fields = [ - PointField(name="x", offset=0, datatype=PointField.FLOAT32, count=1), - PointField(name="y", offset=4, datatype=PointField.FLOAT32, count=1), - PointField(name="z", offset=8, datatype=PointField.FLOAT32, count=1), - PointField(name="time_stamp", offset=12, datatype=PointField.FLOAT64, count=1), - ] - pointcloud_msg = PointCloud2( - header=header, - height=1, - width=10, - is_dense=True, - is_bigendian=False, - point_step=20, # 4 float32 fields * 4 bytes/field - row_step=20 * num_points, # point_step * width - fields=fields, - data=pointcloud_data, - ) - return pointcloud_msg - - def test_node_link(self): - # QoS profile for sensor data - sensor_qos = QoSProfile( - history=QoSHistoryPolicy.KEEP_LAST, - depth=10, - reliability=QoSReliabilityPolicy.BEST_EFFORT, - durability=QoSDurabilityPolicy.VOLATILE, - ) - - # Publishers - velocity_pub = self.test_node.create_publisher( - TwistWithCovarianceStamped, - "/test/sensing/vehicle_velocity_converter/twist_with_covariance", - 10, - ) - pointcloud_pub = self.test_node.create_publisher( - PointCloud2, - "/test/sensing/lidar/top/mirror_cropped/pointcloud_ex", - qos_profile=sensor_qos, - ) - - # Subscribers - received_data = {"msg": None} - - def pointcloud_callback(msg): - received_data["msg"] = msg - - self.test_node.create_subscription( - PointCloud2, - "/test/sensing/lidar/top/rectified/pointcloud_ex", - pointcloud_callback, - qos_profile=sensor_qos, - ) - - # Wait for composable node launches - rclpy.spin_once(self.test_node, timeout_sec=1.0) - - # Prepare header - header = Header() - header.stamp = self.test_node.get_clock().now().to_msg() - header.frame_id = "base_link" - - # Publish velocity data - for i in range(50): - header_tmp = Header() - header_tmp.stamp = self.test_node.get_clock().now().to_msg() - header_tmp.frame_id = "base_link" - - velocity_msg = TwistWithCovarianceStamped() - velocity_msg.header = header_tmp - velocity_msg.twist.twist.linear.x = 1.0 - - velocity_pub.publish(velocity_msg) - rclpy.spin_once(self.test_node, timeout_sec=0.01) - - # Publish pointcloud data - num_points = 10 - pointcloud_msg = self.generate_pointcloud(num_points, header) - pointcloud_pub.publish(pointcloud_msg) - - # Wait for output with a timeout - start_time = self.test_node.get_clock().now() - while self.test_node.get_clock().now() - start_time < rclpy.duration.Duration( - seconds=self.evaluation_time - ): - rclpy.spin_once(self.test_node, timeout_sec=0.1) - if received_data["msg"] is not None: - break - - # Check if the output was received - self.assertIsNotNone(received_data["msg"], "Did not receive output pointcloud data") - - # Check that the received pointcloud data has same length as num_points - received_pointcloud = received_data["msg"] - self.assertEqual( - received_pointcloud.width, - num_points, - "The received pointcloud data has a different length than expected", - ) - - # Check that the received pointcloud data is different from the original one - original_pointcloud_arr = self.pointcloud2_to_xyz_array(pointcloud_msg) - received_pointcloud_arr = self.pointcloud2_to_xyz_array(received_pointcloud) - self.assertFalse( - np.allclose(original_pointcloud_arr, received_pointcloud_arr, atol=1e-6), - "The received pointcloud data is not different from the original one", - ) - - -@launch_testing.post_shutdown_test() -class TestProcessOutput(unittest.TestCase): - def test_exit_code(self, proc_info): - # Check that process exits with code 0: no error - launch_testing.asserts.assertExitCodes(proc_info) From 04ba365da278a2a879e0cbc5a4442aeb31021e6f Mon Sep 17 00:00:00 2001 From: beyzanurkaya <32412808+beyzanurkaya@users.noreply.github.com> Date: Wed, 3 Jul 2024 19:53:34 +0300 Subject: [PATCH 038/306] fix(tier4_planning_rviz_plugin): fix calculation of drivable area bounds (#7815) change angle condition Signed-off-by: beyza --- .../include/tier4_planning_rviz_plugin/path/display.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display.hpp b/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display.hpp index ef5663f024c8d..dc0cb0eb5188a 100644 --- a/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display.hpp +++ b/common/tier4_planning_rviz_plugin/include/tier4_planning_rviz_plugin/path/display.hpp @@ -77,7 +77,7 @@ void visualizeBound( const float diff_angle = autoware::universe_utils::normalizeRadian(normal_vector_angle - curr_to_next_angle); - if (diff_angle == 0.0) { + if (diff_angle <= 1e-7 && diff_angle >= -1e-7) { return std::make_pair(normal_vector_angle, width); } From 90d5c32b333098d3b94d54cd416362272ce17d06 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Sakamoto <50359861+mitukou1109@users.noreply.github.com> Date: Thu, 4 Jul 2024 07:43:24 +0900 Subject: [PATCH 039/306] feat(obstacle_cruise_planner): support pointcloud-based obstacles (#6907) * add pointcloud to obstacle properties * add tf listener & pointcloud subscriber * add parameters for pointcloud obstacle * add type aliases * convert pointcloud to obstacle * add type alias * add polygon conversion for pointcloud obstacle * initialize twist & pose of pointcloud obstacle * overload to handle both obstacle & predicted path * implement ego behavior determination against pointcloud obstacles * generate obstacle from point * revert getCollisionIndex() * generate obstacle from each point in cloud * set pointcloud obstacle velocity to 0 * use tf buffer & listener with pointers * update latest pointcloud data * add topic remap * remove unnecessary includes * set slow down obstacle velocity to 0 * add flag to consider pointcloud obstacle for stopping & slowing down * style(pre-commit): autofix * downsample pointcloud using voxel grid * change shape type of pointcloud obstacle to polygon * convert pointcloud to obstacle by clustering * add parameters for clustering * add max_num_points parameter to dummy object * downsample pointcloud when the number of points is larger than max_num_points * add max_num_points property to dummy bus * add parameters for pointcloud based obstacles * store pointcloud in obstacle struct * change obstacle conversion method * migrate previous changes to new package * store necessary points only * move use_pointcloud to common parameter * extract necessary points from pointcloud * add use_pointcloud parameter to planner interface * fix obstacle conversion * fix collision point determination * simplify pointcloud transformation * style(pre-commit): autofix * fix collision point determination * pick nearest stop collision point * check collision for every point in cluster * migrate previous changes to new files * reduce diff * remove use_pointcloud parameter * add parameters for pointcloud filtering * add autoware namespace * Revert "add max_num_points parameter to dummy object" This reverts commit 98bcd0856f861d23c9f7989d8128939ec0b3e27c. * Revert "downsample pointcloud when the number of points is larger than max_num_points" This reverts commit fb00b59d8f14cec6810e7fab12bc34d8a0c617c7. * Revert "add max_num_points property to dummy bus" This reverts commit 5f9e4ab5ae7d8d46521c736b1d259040121f3bc5. * feat(diagnostic_graph_utils): add logging tool Signed-off-by: Takagi, Isamu * fix all OK Signed-off-by: Takagi, Isamu * feat(default_ad_api): add log when operation mode change fails Signed-off-by: Takagi, Isamu * get only the necessary one of object or pointcloud data * addfield for obstacle source type * enable simultaneous use of PredictedObjects and PointCloud * separate convertToObstacles() by source type * avoid using pointer * reduce diff * make nest shallower * define vector concatenate function * shorten variable names * fix redundant condition --------- Signed-off-by: Takagi, Isamu Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Takagi, Isamu Co-authored-by: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> --- .../motion_planning.launch.xml | 1 + .../config/obstacle_cruise_planner.param.yaml | 10 + .../common_structs.hpp | 32 +- .../autoware/obstacle_cruise_planner/node.hpp | 37 +- .../planner_interface.hpp | 6 +- .../obstacle_cruise_planner/type_alias.hpp | 7 + .../src/node.cpp | 341 +++++++++++++++++- .../src/planner_interface.cpp | 2 +- 8 files changed, 404 insertions(+), 32 deletions(-) diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml index ae43c2d81efb6..d0c34ea01b2c6 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml @@ -160,6 +160,7 @@ + diff --git a/planning/autoware_obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml b/planning/autoware_obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml index 8b338e9d0cd9a..e797faaff9aa9 100644 --- a/planning/autoware_obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml +++ b/planning/autoware_obstacle_cruise_planner/config/obstacle_cruise_planner.param.yaml @@ -37,6 +37,7 @@ motorcycle: true bicycle: true pedestrian: true + pointcloud: false cruise_obstacle_type: inside: @@ -68,8 +69,17 @@ motorcycle: true bicycle: true pedestrian: true + pointcloud: false behavior_determination: + pointcloud_search_radius: 5.0 + pointcloud_voxel_grid_x: 0.05 + pointcloud_voxel_grid_y: 0.05 + pointcloud_voxel_grid_z: 100000.0 + pointcloud_cluster_tolerance: 1.0 + pointcloud_min_cluster_size: 1 + pointcloud_max_cluster_size: 100000 + decimate_trajectory_step_length : 2.0 # longitudinal step length to calculate trajectory polygon for collision checking prediction_resampling_time_interval: 0.1 diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp index e4ae670ef6b97..fc8a0a96ade42 100644 --- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp @@ -58,15 +58,15 @@ struct Obstacle const geometry_msgs::msg::Pose & arg_pose, const double ego_to_obstacle_distance, const double lat_dist_from_obstacle_to_traj) : stamp(arg_stamp), + ego_to_obstacle_distance(ego_to_obstacle_distance), + lat_dist_from_obstacle_to_traj(lat_dist_from_obstacle_to_traj), pose(arg_pose), orientation_reliable(true), twist(object.kinematics.initial_twist_with_covariance.twist), twist_reliable(true), classification(object.classification.at(0)), uuid(autoware::universe_utils::toHexString(object.object_id)), - shape(object.shape), - ego_to_obstacle_distance(ego_to_obstacle_distance), - lat_dist_from_obstacle_to_traj(lat_dist_from_obstacle_to_traj) + shape(object.shape) { predicted_paths.clear(); for (const auto & path : object.kinematics.predicted_paths) { @@ -74,9 +74,26 @@ struct Obstacle } } - Polygon2d toPolygon() const { return autoware::universe_utils::toPolygon2d(pose, shape); } + Obstacle( + const rclcpp::Time & arg_stamp, + const std::optional & stop_collision_point, + const std::optional & slow_down_front_collision_point, + const std::optional & slow_down_back_collision_point, + const double ego_to_obstacle_distance, const double lat_dist_from_obstacle_to_traj) + : stamp(arg_stamp), + ego_to_obstacle_distance(ego_to_obstacle_distance), + lat_dist_from_obstacle_to_traj(lat_dist_from_obstacle_to_traj), + stop_collision_point(stop_collision_point), + slow_down_front_collision_point(slow_down_front_collision_point), + slow_down_back_collision_point(slow_down_back_collision_point) + { + } rclcpp::Time stamp; // This is not the current stamp, but when the object was observed. + double ego_to_obstacle_distance; + double lat_dist_from_obstacle_to_traj; + + // for PredictedObject geometry_msgs::msg::Pose pose; // interpolated with the current stamp bool orientation_reliable; Twist twist; @@ -85,8 +102,11 @@ struct Obstacle std::string uuid; Shape shape; std::vector predicted_paths; - double ego_to_obstacle_distance; - double lat_dist_from_obstacle_to_traj; + + // for PointCloud + std::optional stop_collision_point; + std::optional slow_down_front_collision_point; + std::optional slow_down_back_collision_point; }; struct TargetObstacleInterface diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/node.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/node.hpp index dd9a6c3880672..b96605f57b943 100644 --- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/node.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/node.hpp @@ -27,6 +27,9 @@ #include #include +#include +#include + #include #include #include @@ -58,16 +61,27 @@ class ObstacleCruisePlannerNode : public rclcpp::Node std::vector convertToObstacles( const Odometry & odometry, const PredictedObjects & objects, const std::vector & traj_points) const; + std::vector convertToObstacles( + const Odometry & odometry, const PointCloud2 & pointcloud, + const std::vector & traj_points, + const std_msgs::msg::Header & traj_header) const; std::tuple, std::vector, std::vector> - determineEgoBehaviorAgainstObstacles( + determineEgoBehaviorAgainstPredictedObjectObstacles( const Odometry & odometry, const PredictedObjects & objects, const std::vector & traj_points, const std::vector & obstacles); + std::tuple, std::vector, std::vector> + determineEgoBehaviorAgainstPointCloudObstacles( + const Odometry & odometry, const std::vector & traj_points, + const std::vector & obstacles); std::vector decimateTrajectoryPoints( const Odometry & odometry, const std::vector & traj_points) const; - std::optional createStopObstacle( + std::optional createStopObstacleForPredictedObject( const Odometry & odometry, const std::vector & traj_points, const std::vector & traj_polys, const Obstacle & obstacle, const double precise_lateral_dist) const; + std::optional createStopObstacleForPointCloud( + const std::vector & traj_points, const Obstacle & obstacle, + const double precise_lateral_dist) const; bool isStopObstacle(const uint8_t label) const; bool isInsideCruiseObstacle(const uint8_t label) const; bool isOutsideCruiseObstacle(const uint8_t label) const; @@ -94,9 +108,11 @@ class ObstacleCruisePlannerNode : public rclcpp::Node double calcCollisionTimeMargin( const Odometry & odometry, const std::vector & collision_points, const std::vector & traj_points, const bool is_driving_forward) const; - std::optional createSlowDownObstacle( + std::optional createSlowDownObstacleForPredictedObject( const Odometry & odometry, const std::vector & traj_points, const Obstacle & obstacle, const double precise_lat_dist); + std::optional createSlowDownObstacleForPointCloud( + const Obstacle & obstacle, const double precise_lat_dist); PlannerData createPlannerData( const Odometry & odometry, const AccelWithCovarianceStamped & acc, const std::vector & traj_points) const; @@ -116,6 +132,8 @@ class ObstacleCruisePlannerNode : public rclcpp::Node bool enable_debug_info_; bool enable_calculation_time_info_; + bool use_pointcloud_for_stop_; + bool use_pointcloud_for_slow_down_; double min_behavior_stop_margin_; bool enable_approaching_on_curve_; double additional_safe_distance_margin_on_curve_; @@ -149,9 +167,14 @@ class ObstacleCruisePlannerNode : public rclcpp::Node this, "~/input/odometry"}; autoware::universe_utils::InterProcessPollingSubscriber objects_sub_{ this, "~/input/objects"}; + autoware::universe_utils::InterProcessPollingSubscriber pointcloud_sub_{ + this, "~/input/pointcloud"}; autoware::universe_utils::InterProcessPollingSubscriber acc_sub_{ this, "~/input/acceleration"}; + std::unique_ptr tf_buffer_; + std::shared_ptr tf_listener_{nullptr}; + // Vehicle Parameters VehicleInfo vehicle_info_; @@ -182,6 +205,13 @@ class ObstacleCruisePlannerNode : public rclcpp::Node void onParam(const std::vector & parameters); double decimate_trajectory_step_length; + double pointcloud_search_radius; + double pointcloud_voxel_grid_x; + double pointcloud_voxel_grid_y; + double pointcloud_voxel_grid_z; + double pointcloud_cluster_tolerance; + int pointcloud_min_cluster_size; + int pointcloud_max_cluster_size; // hysteresis for stop and cruise double obstacle_velocity_threshold_from_cruise_to_stop; double obstacle_velocity_threshold_from_stop_to_cruise; @@ -271,6 +301,7 @@ class ObstacleCruisePlannerNode : public rclcpp::Node bool is_driving_forward_{true}; bool enable_slow_down_planning_{false}; + bool use_pointcloud_{false}; std::vector prev_closest_stop_obstacles_{}; diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp index 0641d076bb3ff..3679c253e2bbb 100644 --- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp @@ -63,12 +63,13 @@ class PlannerInterface void setParam( const bool enable_debug_info, const bool enable_calculation_time_info, - const double min_behavior_stop_margin, const double enable_approaching_on_curve, - const double additional_safe_distance_margin_on_curve, + const bool use_pointcloud, const double min_behavior_stop_margin, + const double enable_approaching_on_curve, const double additional_safe_distance_margin_on_curve, const double min_safe_distance_margin_on_curve, const bool suppress_sudden_obstacle_stop) { enable_debug_info_ = enable_debug_info; enable_calculation_time_info_ = enable_calculation_time_info; + use_pointcloud_ = use_pointcloud; min_behavior_stop_margin_ = min_behavior_stop_margin; enable_approaching_on_curve_ = enable_approaching_on_curve; additional_safe_distance_margin_on_curve_ = additional_safe_distance_margin_on_curve; @@ -117,6 +118,7 @@ class PlannerInterface // Parameters bool enable_debug_info_{false}; bool enable_calculation_time_info_{false}; + bool use_pointcloud_{false}; LongitudinalInfo longitudinal_info_; double min_behavior_stop_margin_; bool enable_approaching_on_curve_; diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/type_alias.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/type_alias.hpp index 5721efd051f63..03e536ce238cd 100644 --- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/type_alias.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/type_alias.hpp @@ -27,6 +27,7 @@ #include "geometry_msgs/msg/transform_stamped.hpp" #include "geometry_msgs/msg/twist_stamped.hpp" #include "nav_msgs/msg/odometry.hpp" +#include "sensor_msgs/msg/point_cloud2.hpp" #include "tier4_debug_msgs/msg/float32_stamped.hpp" #include "tier4_planning_msgs/msg/stop_factor.hpp" #include "tier4_planning_msgs/msg/stop_reason_array.hpp" @@ -35,6 +36,9 @@ #include "tier4_planning_msgs/msg/velocity_limit_clear_command.hpp" #include "visualization_msgs/msg/marker_array.hpp" +#include +#include + using autoware::vehicle_info_utils::VehicleInfo; using autoware_adapi_v1_msgs::msg::PlanningBehavior; using autoware_adapi_v1_msgs::msg::VelocityFactor; @@ -50,6 +54,7 @@ using geometry_msgs::msg::AccelStamped; using geometry_msgs::msg::AccelWithCovarianceStamped; using geometry_msgs::msg::Twist; using nav_msgs::msg::Odometry; +using sensor_msgs::msg::PointCloud2; using tier4_debug_msgs::msg::Float32Stamped; using tier4_planning_msgs::msg::StopFactor; using tier4_planning_msgs::msg::StopReason; @@ -63,4 +68,6 @@ namespace bg = boost::geometry; using autoware::universe_utils::Point2d; using autoware::universe_utils::Polygon2d; +using PointCloud = pcl::PointCloud; + #endif // AUTOWARE__OBSTACLE_CRUISE_PLANNER__TYPE_ALIAS_HPP_ diff --git a/planning/autoware_obstacle_cruise_planner/src/node.cpp b/planning/autoware_obstacle_cruise_planner/src/node.cpp index f6e7c2bb43b38..c8f962c3ad711 100644 --- a/planning/autoware_obstacle_cruise_planner/src/node.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/node.cpp @@ -23,8 +23,15 @@ #include "autoware/universe_utils/ros/update_param.hpp" #include "object_recognition_utils/predicted_path_utils.hpp" +#include +#include + #include +#include +#include +#include + #include #include @@ -194,6 +201,15 @@ std::vector resampleTrajectoryPoints( return autoware::motion_utils::convertToTrajectoryPointArray(resampled_traj); } +geometry_msgs::msg::Point toGeomPoint(const pcl::PointXYZ & point) +{ + geometry_msgs::msg::Point geom_point; + geom_point.x = point.x; + geom_point.y = point.y; + geom_point.z = point.z; + return geom_point; +} + geometry_msgs::msg::Point toGeomPoint(const autoware::universe_utils::Point2d & point) { geometry_msgs::msg::Point geom_point; @@ -216,6 +232,12 @@ bool isLowerConsideringHysteresis( } return false; } + +template +void concatenate(std::vector & first, const std::vector & last) +{ + first.insert(first.end(), last.begin(), last.end()); +} } // namespace namespace autoware::motion_planning @@ -225,6 +247,20 @@ ObstacleCruisePlannerNode::BehaviorDeterminationParam::BehaviorDeterminationPara { // behavior determination decimate_trajectory_step_length = node.declare_parameter("behavior_determination.decimate_trajectory_step_length"); + pointcloud_search_radius = + node.declare_parameter("behavior_determination.pointcloud_search_radius"); + pointcloud_voxel_grid_x = + node.declare_parameter("behavior_determination.pointcloud_voxel_grid_x"); + pointcloud_voxel_grid_y = + node.declare_parameter("behavior_determination.pointcloud_voxel_grid_y"); + pointcloud_voxel_grid_z = + node.declare_parameter("behavior_determination.pointcloud_voxel_grid_z"); + pointcloud_cluster_tolerance = + node.declare_parameter("behavior_determination.pointcloud_cluster_tolerance"); + pointcloud_min_cluster_size = + node.declare_parameter("behavior_determination.pointcloud_min_cluster_size"); + pointcloud_max_cluster_size = + node.declare_parameter("behavior_determination.pointcloud_max_cluster_size"); obstacle_velocity_threshold_from_cruise_to_stop = node.declare_parameter( "behavior_determination.obstacle_velocity_threshold_from_cruise_to_stop"); obstacle_velocity_threshold_from_stop_to_cruise = node.declare_parameter( @@ -284,6 +320,21 @@ void ObstacleCruisePlannerNode::BehaviorDeterminationParam::onParam( autoware::universe_utils::updateParam( parameters, "behavior_determination.decimate_trajectory_step_length", decimate_trajectory_step_length); + autoware::universe_utils::updateParam( + parameters, "behavior_determination.pointcloud_search_radius", pointcloud_search_radius); + autoware::universe_utils::updateParam( + parameters, "behavior_determination.pointcloud_voxel_grid_x", pointcloud_voxel_grid_x); + autoware::universe_utils::updateParam( + parameters, "behavior_determination.pointcloud_voxel_grid_y", pointcloud_voxel_grid_y); + autoware::universe_utils::updateParam( + parameters, "behavior_determination.pointcloud_voxel_grid_z", pointcloud_voxel_grid_z); + autoware::universe_utils::updateParam( + parameters, "behavior_determination.pointcloud_cluster_tolerance", + pointcloud_cluster_tolerance); + autoware::universe_utils::updateParam( + parameters, "behavior_determination.pointcloud_min_cluster_size", pointcloud_min_cluster_size); + autoware::universe_utils::updateParam( + parameters, "behavior_determination.pointcloud_max_cluster_size", pointcloud_max_cluster_size); autoware::universe_utils::updateParam( parameters, "behavior_determination.crossing_obstacle.obstacle_velocity_threshold", crossing_obstacle_velocity_threshold); @@ -387,6 +438,10 @@ ObstacleCruisePlannerNode::ObstacleCruisePlannerNode(const rclcpp::NodeOptions & debug_slow_down_planning_info_pub_ = create_publisher("~/debug/slow_down_planning_info", 1); + // tf listener + tf_buffer_ = std::make_unique(get_clock()); + tf_listener_ = std::make_shared(*tf_buffer_); + const auto longitudinal_info = LongitudinalInfo(*this); ego_nearest_param_ = EgoNearestParam(*this); @@ -395,6 +450,11 @@ ObstacleCruisePlannerNode::ObstacleCruisePlannerNode(const rclcpp::NodeOptions & enable_calculation_time_info_ = declare_parameter("common.enable_calculation_time_info"); enable_slow_down_planning_ = declare_parameter("common.enable_slow_down_planning"); + use_pointcloud_for_stop_ = declare_parameter("common.stop_obstacle_type.pointcloud"); + use_pointcloud_for_slow_down_ = + declare_parameter("common.slow_down_obstacle_type.pointcloud"); + use_pointcloud_ = use_pointcloud_for_stop_ || use_pointcloud_for_slow_down_; + behavior_determination_param_ = BehaviorDeterminationParam(*this); { // planning algorithm @@ -422,7 +482,7 @@ ObstacleCruisePlannerNode::ObstacleCruisePlannerNode(const rclcpp::NodeOptions & suppress_sudden_obstacle_stop_ = declare_parameter("common.suppress_sudden_obstacle_stop"); planner_ptr_->setParam( - enable_debug_info_, enable_calculation_time_info_, min_behavior_stop_margin_, + enable_debug_info_, enable_calculation_time_info_, use_pointcloud_, min_behavior_stop_margin_, enable_approaching_on_curve_, additional_safe_distance_margin_on_curve_, min_safe_distance_margin_on_curve_, suppress_sudden_obstacle_stop_); } @@ -476,7 +536,7 @@ rcl_interfaces::msg::SetParametersResult ObstacleCruisePlannerNode::onParam( min_safe_distance_margin_on_curve_); planner_ptr_->setParam( - enable_debug_info_, enable_calculation_time_info_, min_behavior_stop_margin_, + enable_debug_info_, enable_calculation_time_info_, use_pointcloud_, min_behavior_stop_margin_, enable_approaching_on_curve_, additional_safe_distance_margin_on_curve_, min_safe_distance_margin_on_curve_, suppress_sudden_obstacle_stop_); @@ -495,13 +555,13 @@ void ObstacleCruisePlannerNode::onTrajectory(const Trajectory::ConstSharedPtr ms { const auto ego_odom_ptr = ego_odom_sub_.takeData(); const auto objects_ptr = objects_sub_.takeData(); + const auto pointcloud_ptr = use_pointcloud_ ? pointcloud_sub_.takeData() : nullptr; const auto acc_ptr = acc_sub_.takeData(); - if (!ego_odom_ptr || !objects_ptr || !acc_ptr) { + if (!ego_odom_ptr || (!objects_ptr && (!use_pointcloud_ || !pointcloud_ptr)) || !acc_ptr) { return; } const auto & ego_odom = *ego_odom_ptr; - const auto & objects = *objects_ptr; const auto & acc = *acc_ptr; const auto traj_points = autoware::motion_utils::convertToTrajectoryPointArray(*msg); @@ -516,15 +576,39 @@ void ObstacleCruisePlannerNode::onTrajectory(const Trajectory::ConstSharedPtr ms const auto is_driving_forward = autoware::motion_utils::isDrivingForwardWithTwist(traj_points); is_driving_forward_ = is_driving_forward ? is_driving_forward.value() : is_driving_forward_; - // 1. Convert predicted objects to obstacles which are - // (1) with a proper label - // (2) in front of ego - // (3) not too far from trajectory - const auto target_obstacles = convertToObstacles(ego_odom, objects, traj_points); + const auto & [stop_obstacles, cruise_obstacles, slow_down_obstacles] = [&]() { + std::vector stop_obstacles; + std::vector cruise_obstacles; + std::vector slow_down_obstacles; + if (objects_ptr) { + // 1. Convert predicted objects to obstacles which are + // (1) with a proper label + // (2) in front of ego + // (3) not too far from trajectory + const auto target_obstacles = convertToObstacles(ego_odom, *objects_ptr, traj_points); + + // 2. Determine ego's behavior against each obstacle from stop, cruise and slow down. + const auto & [stop_object_obstacles, cruise_object_obstacles, slow_down_object_obstacles] = + determineEgoBehaviorAgainstPredictedObjectObstacles( + ego_odom, *objects_ptr, traj_points, target_obstacles); + + concatenate(stop_obstacles, stop_object_obstacles); + concatenate(cruise_obstacles, cruise_object_obstacles); + concatenate(slow_down_obstacles, slow_down_object_obstacles); + } + if (pointcloud_ptr && !pointcloud_ptr->data.empty()) { + const auto target_obstacles = + convertToObstacles(ego_odom, *pointcloud_ptr, traj_points, msg->header); + + const auto & [stop_pc_obstacles, cruise_pc_obstacles, slow_down_pc_obstacles] = + determineEgoBehaviorAgainstPointCloudObstacles(ego_odom, traj_points, target_obstacles); - // 2. Determine ego's behavior against each obstacle from stop, cruise and slow down. - const auto & [stop_obstacles, cruise_obstacles, slow_down_obstacles] = - determineEgoBehaviorAgainstObstacles(ego_odom, objects, traj_points, target_obstacles); + concatenate(stop_obstacles, stop_pc_obstacles); + concatenate(cruise_obstacles, cruise_pc_obstacles); + concatenate(slow_down_obstacles, slow_down_pc_obstacles); + } + return std::make_tuple(stop_obstacles, cruise_obstacles, slow_down_obstacles); + }(); // 3. Create data for planning const auto planner_data = createPlannerData(ego_odom, acc, traj_points); @@ -715,6 +799,124 @@ std::vector ObstacleCruisePlannerNode::convertToObstacles( return target_obstacles; } +std::vector ObstacleCruisePlannerNode::convertToObstacles( + const Odometry & odometry, const PointCloud2 & pointcloud, + const std::vector & traj_points, const std_msgs::msg::Header & traj_header) const +{ + stop_watch_.tic(__func__); + + const auto & p = behavior_determination_param_; + + std::vector target_obstacles; + + std::optional transform_stamped{}; + try { + transform_stamped = tf_buffer_->lookupTransform( + traj_header.frame_id, pointcloud.header.frame_id, pointcloud.header.stamp, + rclcpp::Duration::from_seconds(0.5)); + } catch (tf2::TransformException & ex) { + RCLCPP_ERROR_STREAM( + get_logger(), "Failed to look up transform from " << traj_header.frame_id << " to " + << pointcloud.header.frame_id); + transform_stamped = std::nullopt; + } + + if (transform_stamped) { + // 1. transform pointcloud + PointCloud::Ptr pointcloud_ptr(new PointCloud); + pcl::fromROSMsg(pointcloud, *pointcloud_ptr); + const Eigen::Matrix4f transform = + tf2::transformToEigen(transform_stamped.value().transform).matrix().cast(); + pcl::transformPointCloud(*pointcloud_ptr, *pointcloud_ptr, transform); + + // 2. downsample & cluster pointcloud + PointCloud::Ptr filtered_points_ptr(new PointCloud); + pcl::VoxelGrid filter; + filter.setInputCloud(pointcloud_ptr); + filter.setLeafSize( + p.pointcloud_voxel_grid_x, p.pointcloud_voxel_grid_y, p.pointcloud_voxel_grid_z); + filter.filter(*filtered_points_ptr); + + pcl::search::KdTree::Ptr tree(new pcl::search::KdTree); + tree->setInputCloud(filtered_points_ptr); + std::vector clusters; + pcl::EuclideanClusterExtraction ec; + ec.setClusterTolerance(p.pointcloud_cluster_tolerance); + ec.setMinClusterSize(p.pointcloud_min_cluster_size); + ec.setMaxClusterSize(p.pointcloud_max_cluster_size); + ec.setSearchMethod(tree); + ec.setInputCloud(filtered_points_ptr); + ec.extract(clusters); + + const auto max_lat_margin = + std::max(p.max_lat_margin_for_stop_against_unknown, p.max_lat_margin_for_slow_down); + const size_t ego_idx = ego_nearest_param_.findIndex(traj_points, odometry.pose.pose); + + // 3. convert clusters to obstacles + for (const auto & cluster_indices : clusters) { + double ego_to_stop_collision_distance = std::numeric_limits::max(); + double ego_to_slow_down_front_collision_distance = std::numeric_limits::max(); + double ego_to_slow_down_back_collision_distance = std::numeric_limits::min(); + double lat_dist_from_obstacle_to_traj = std::numeric_limits::max(); + double ego_to_obstacle_distance = std::numeric_limits::max(); + std::optional stop_collision_point = std::nullopt; + std::optional slow_down_front_collision_point = std::nullopt; + std::optional slow_down_back_collision_point = std::nullopt; + + for (const auto & index : cluster_indices.indices) { + const auto obstacle_point = toGeomPoint(filtered_points_ptr->points[index]); + const auto current_lat_dist_from_obstacle_to_traj = + autoware::motion_utils::calcLateralOffset(traj_points, obstacle_point); + const auto min_lat_dist_to_traj_poly = + std::abs(current_lat_dist_from_obstacle_to_traj) - vehicle_info_.vehicle_width_m; + + if (min_lat_dist_to_traj_poly < max_lat_margin) { + const auto current_ego_to_obstacle_distance = + calcDistanceToFrontVehicle(traj_points, ego_idx, obstacle_point); + if (current_ego_to_obstacle_distance) { + ego_to_obstacle_distance = + std::min(ego_to_obstacle_distance, *current_ego_to_obstacle_distance); + } else { + continue; + } + + lat_dist_from_obstacle_to_traj = + std::min(lat_dist_from_obstacle_to_traj, current_lat_dist_from_obstacle_to_traj); + + if (min_lat_dist_to_traj_poly < p.max_lat_margin_for_stop_against_unknown) { + if (*current_ego_to_obstacle_distance < ego_to_stop_collision_distance) { + stop_collision_point = obstacle_point; + ego_to_stop_collision_distance = *current_ego_to_obstacle_distance; + } + } else if (min_lat_dist_to_traj_poly < p.max_lat_margin_for_slow_down) { + if (*current_ego_to_obstacle_distance < ego_to_slow_down_front_collision_distance) { + slow_down_front_collision_point = obstacle_point; + ego_to_slow_down_front_collision_distance = *current_ego_to_obstacle_distance; + } else if ( + *current_ego_to_obstacle_distance > ego_to_slow_down_back_collision_distance) { + slow_down_back_collision_point = obstacle_point; + ego_to_slow_down_back_collision_distance = *current_ego_to_obstacle_distance; + } + } + } + } + + if (stop_collision_point || slow_down_front_collision_point) { + target_obstacles.emplace_back( + pointcloud.header.stamp, stop_collision_point, slow_down_front_collision_point, + slow_down_back_collision_point, ego_to_obstacle_distance, lat_dist_from_obstacle_to_traj); + } + } + } + + const double calculation_time = stop_watch_.toc(__func__); + RCLCPP_INFO_EXPRESSION( + rclcpp::get_logger("ObstacleCruisePlanner"), enable_debug_info_, " %s := %f [ms]", __func__, + calculation_time); + + return target_obstacles; +} + bool ObstacleCruisePlannerNode::isStopObstacle(const uint8_t label) const { const auto & types = stop_obstacle_types_; @@ -760,7 +962,7 @@ bool ObstacleCruisePlannerNode::isFrontCollideObstacle( } std::tuple, std::vector, std::vector> -ObstacleCruisePlannerNode::determineEgoBehaviorAgainstObstacles( +ObstacleCruisePlannerNode::determineEgoBehaviorAgainstPredictedObjectObstacles( const Odometry & odometry, const PredictedObjects & objects, const std::vector & traj_points, const std::vector & obstacles) { @@ -778,7 +980,7 @@ ObstacleCruisePlannerNode::determineEgoBehaviorAgainstObstacles( std::vector slow_down_obstacles; slow_down_condition_counter_.resetCurrentUuids(); for (const auto & obstacle : obstacles) { - const auto obstacle_poly = obstacle.toPolygon(); + const auto obstacle_poly = autoware::universe_utils::toPolygon2d(obstacle.pose, obstacle.shape); // Calculate distance between trajectory and obstacle first double precise_lat_dist = std::numeric_limits::max(); @@ -794,14 +996,14 @@ ObstacleCruisePlannerNode::determineEgoBehaviorAgainstObstacles( cruise_obstacles.push_back(*cruise_obstacle); continue; } - const auto stop_obstacle = createStopObstacle( + const auto stop_obstacle = createStopObstacleForPredictedObject( odometry, decimated_traj_points, decimated_traj_polys, obstacle, precise_lat_dist); if (stop_obstacle) { stop_obstacles.push_back(*stop_obstacle); continue; } - const auto slow_down_obstacle = - createSlowDownObstacle(odometry, decimated_traj_points, obstacle, precise_lat_dist); + const auto slow_down_obstacle = createSlowDownObstacleForPredictedObject( + odometry, decimated_traj_points, obstacle, precise_lat_dist); if (slow_down_obstacle) { slow_down_obstacles.push_back(*slow_down_obstacle); continue; @@ -842,6 +1044,47 @@ ObstacleCruisePlannerNode::determineEgoBehaviorAgainstObstacles( return {stop_obstacles, cruise_obstacles, slow_down_obstacles}; } +std::tuple, std::vector, std::vector> +ObstacleCruisePlannerNode::determineEgoBehaviorAgainstPointCloudObstacles( + const Odometry & odometry, const std::vector & traj_points, + const std::vector & obstacles) +{ + stop_watch_.tic(__func__); + + // calculated decimated trajectory points and trajectory polygon + const auto decimated_traj_points = decimateTrajectoryPoints(odometry, traj_points); + const auto decimated_traj_polys = + createOneStepPolygons(decimated_traj_points, vehicle_info_, odometry.pose.pose); + debug_data_ptr_->detection_polygons = decimated_traj_polys; + + // determine ego's behavior from stop and slow down + std::vector stop_obstacles; + std::vector slow_down_obstacles; + for (const auto & obstacle : obstacles) { + const auto & precise_lat_dist = obstacle.lat_dist_from_obstacle_to_traj; + + // Filter obstacles for stop and slow down + const auto stop_obstacle = + createStopObstacleForPointCloud(decimated_traj_points, obstacle, precise_lat_dist); + if (stop_obstacle) { + stop_obstacles.push_back(*stop_obstacle); + continue; + } + const auto slow_down_obstacle = createSlowDownObstacleForPointCloud(obstacle, precise_lat_dist); + if (slow_down_obstacle) { + slow_down_obstacles.push_back(*slow_down_obstacle); + continue; + } + } + + const double calculation_time = stop_watch_.toc(__func__); + RCLCPP_INFO_EXPRESSION( + rclcpp::get_logger("ObstacleCruisePlanner"), enable_calculation_time_info_, " %s := %f [ms]", + __func__, calculation_time); + + return {stop_obstacles, {}, slow_down_obstacles}; +} + std::vector ObstacleCruisePlannerNode::decimateTrajectoryPoints( const Odometry & odometry, const std::vector & traj_points) const { @@ -1173,7 +1416,7 @@ ObstacleCruisePlannerNode::createCollisionPointsForOutsideCruiseObstacle( return collision_points; } -std::optional ObstacleCruisePlannerNode::createStopObstacle( +std::optional ObstacleCruisePlannerNode::createStopObstacleForPredictedObject( const Odometry & odometry, const std::vector & traj_points, const std::vector & traj_polys, const Obstacle & obstacle, const double precise_lat_dist) const @@ -1264,7 +1507,45 @@ std::optional ObstacleCruisePlannerNode::createStopObstacle( normal_vel, collision_point->first, collision_point->second}; } -std::optional ObstacleCruisePlannerNode::createSlowDownObstacle( +std::optional ObstacleCruisePlannerNode::createStopObstacleForPointCloud( + const std::vector & traj_points, const Obstacle & obstacle, + const double precise_lat_dist) const +{ + const auto & p = behavior_determination_param_; + + if (!use_pointcloud_for_stop_) { + return std::nullopt; + } + + if (!obstacle.stop_collision_point) { + return std::nullopt; + } + + const double max_lat_margin_for_stop = + (obstacle.classification.label == ObjectClassification::UNKNOWN) + ? p.max_lat_margin_for_stop_against_unknown + : p.max_lat_margin_for_stop; + + if (precise_lat_dist > std::max(max_lat_margin_for_stop, 1e-3)) { + return std::nullopt; + } + + const auto dist_to_collide_on_traj = + autoware::motion_utils::calcSignedArcLength(traj_points, 0, *obstacle.stop_collision_point); + + return StopObstacle{ + obstacle.uuid, + obstacle.stamp, + obstacle.classification, + obstacle.pose, + obstacle.shape, + {}, + {}, + *obstacle.stop_collision_point, + dist_to_collide_on_traj}; +} + +std::optional ObstacleCruisePlannerNode::createSlowDownObstacleForPredictedObject( const Odometry & odometry, const std::vector & traj_points, const Obstacle & obstacle, const double precise_lat_dist) { @@ -1315,7 +1596,7 @@ std::optional ObstacleCruisePlannerNode::createSlowDownObstacl return std::nullopt; } - const auto obstacle_poly = obstacle.toPolygon(); + const auto obstacle_poly = autoware::universe_utils::toPolygon2d(obstacle.pose, obstacle.shape); // calculate collision points with trajectory with lateral stop margin // NOTE: For additional margin, hysteresis is not divided by two. @@ -1388,6 +1669,26 @@ std::optional ObstacleCruisePlannerNode::createSlowDownObstacl precise_lat_dist, front_collision_point, back_collision_point}; } +std::optional ObstacleCruisePlannerNode::createSlowDownObstacleForPointCloud( + const Obstacle & obstacle, const double precise_lat_dist) +{ + if (!enable_slow_down_planning_ || !use_pointcloud_for_slow_down_) { + return std::nullopt; + } + + if (!obstacle.slow_down_front_collision_point) { + return std::nullopt; + } + + auto front_collision_point = *obstacle.slow_down_front_collision_point; + auto back_collision_point = + obstacle.slow_down_back_collision_point.value_or(front_collision_point); + + return SlowDownObstacle{ + obstacle.uuid, obstacle.stamp, obstacle.classification, obstacle.pose, {}, {}, + precise_lat_dist, front_collision_point, back_collision_point}; +} + void ObstacleCruisePlannerNode::checkConsistency( const rclcpp::Time & current_time, const PredictedObjects & predicted_objects, std::vector & stop_obstacles) diff --git a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp index 516bf5579b82c..0413d4bbf3529 100644 --- a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp @@ -439,7 +439,7 @@ std::vector PlannerInterface::generateStopTrajectory( double PlannerInterface::calculateMarginFromObstacleOnCurve( const PlannerData & planner_data, const StopObstacle & stop_obstacle) const { - if (!enable_approaching_on_curve_) { + if (!enable_approaching_on_curve_ || use_pointcloud_) { return longitudinal_info_.safe_distance_margin; } From 2511ebf9dd47dfdcf0c30e2297578751f6ede1d0 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 08:23:15 +0900 Subject: [PATCH 040/306] fix(autoware_freespace_planning_algorithms): fix syntaxError (#7812) Signed-off-by: Ryuta Kambe --- .../scripts/bind/astar_search_pybind.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp b/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp index 0a76067bc77f8..f557926806382 100644 --- a/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp +++ b/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp @@ -99,6 +99,7 @@ class AstarSearchPython : public freespace_planning_algorithms::AstarSearch namespace py = pybind11; +// cppcheck-suppress syntaxError PYBIND11_MODULE(autoware_freespace_planning_algorithms_pybind, p) { auto pyPlannerWaypointsVector = From cfe9cdc77837010c0e330ca43265b85955fae532 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 09:08:18 +0900 Subject: [PATCH 041/306] fix(autoware_behavior_path_planner_common): fix knownConditionTrueFalse (#7816) Signed-off-by: Ryuta Kambe --- .../src/utils/path_shifter/path_shifter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_shifter/path_shifter.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_shifter/path_shifter.cpp index a0ae99d54df0b..f88efa49f10ff 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_shifter/path_shifter.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_shifter/path_shifter.cpp @@ -194,7 +194,7 @@ void PathShifter::applyLinearShifter(ShiftedPath * shifted_path) const double ith_shift_length = 0.0; if (i < shift_line.start_idx) { ith_shift_length = 0.0; - } else if (shift_line.start_idx <= i && i <= shift_line.end_idx) { + } else if (i <= shift_line.end_idx) { auto dist_from_start = arclength_arr.at(i) - arclength_arr.at(shift_line.start_idx); ith_shift_length = (dist_from_start / shifting_arclength) * delta_shift; } else { From 43ed25a5e11724d127a39c472f646df647794dc8 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Thu, 4 Jul 2024 09:21:11 +0900 Subject: [PATCH 042/306] refactor(cluster_merger)!: fix namespace and directory structure (#7738) feat(cluster_merger): refactor cluster merger node component Signed-off-by: Taekjin LEE --- perception/cluster_merger/CMakeLists.txt | 8 ++++---- .../node.cpp => cluster_merger_node.cpp} | 9 +++++---- .../node.hpp => src/cluster_merger_node.hpp} | 10 +++++----- 3 files changed, 14 insertions(+), 13 deletions(-) rename perception/cluster_merger/src/{cluster_merger/node.cpp => cluster_merger_node.cpp} (93%) rename perception/cluster_merger/{include/cluster_merger/node.hpp => src/cluster_merger_node.hpp} (92%) diff --git a/perception/cluster_merger/CMakeLists.txt b/perception/cluster_merger/CMakeLists.txt index 5ad0de572b44f..773cea6383f41 100644 --- a/perception/cluster_merger/CMakeLists.txt +++ b/perception/cluster_merger/CMakeLists.txt @@ -6,12 +6,12 @@ find_package(autoware_cmake REQUIRED) autoware_package() # Targets -ament_auto_add_library(cluster_merger_node_component SHARED - src/cluster_merger/node.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/cluster_merger_node.cpp ) -rclcpp_components_register_node(cluster_merger_node_component - PLUGIN "cluster_merger::ClusterMergerNode" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::cluster_merger::ClusterMergerNode" EXECUTABLE cluster_merger_node) diff --git a/perception/cluster_merger/src/cluster_merger/node.cpp b/perception/cluster_merger/src/cluster_merger_node.cpp similarity index 93% rename from perception/cluster_merger/src/cluster_merger/node.cpp rename to perception/cluster_merger/src/cluster_merger_node.cpp index 48bf953027510..ada95b905d320 100644 --- a/perception/cluster_merger/src/cluster_merger/node.cpp +++ b/perception/cluster_merger/src/cluster_merger_node.cpp @@ -12,14 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "cluster_merger/node.hpp" +#include "cluster_merger_node.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include #include #include -namespace cluster_merger + +namespace autoware::cluster_merger { ClusterMergerNode::ClusterMergerNode(const rclcpp::NodeOptions & node_options) @@ -67,7 +68,7 @@ void ClusterMergerNode::objectsCallback( transformed_objects1.feature_objects.end()); pub_objects_->publish(output_objects); } -} // namespace cluster_merger +} // namespace autoware::cluster_merger #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(cluster_merger::ClusterMergerNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::cluster_merger::ClusterMergerNode) diff --git a/perception/cluster_merger/include/cluster_merger/node.hpp b/perception/cluster_merger/src/cluster_merger_node.hpp similarity index 92% rename from perception/cluster_merger/include/cluster_merger/node.hpp rename to perception/cluster_merger/src/cluster_merger_node.hpp index a60a76f1c2ef0..2213d413d7031 100644 --- a/perception/cluster_merger/include/cluster_merger/node.hpp +++ b/perception/cluster_merger/src/cluster_merger_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef CLUSTER_MERGER__NODE_HPP_ -#define CLUSTER_MERGER__NODE_HPP_ +#ifndef CLUSTER_MERGER_NODE_HPP_ +#define CLUSTER_MERGER_NODE_HPP_ #include "autoware/universe_utils/ros/transform_listener.hpp" #include "message_filters/subscriber.h" @@ -31,7 +31,7 @@ #include #include -namespace cluster_merger +namespace autoware::cluster_merger { using tier4_perception_msgs::msg::DetectedObjectsWithFeature; using tier4_perception_msgs::msg::DetectedObjectWithFeature; @@ -68,6 +68,6 @@ class ClusterMergerNode : public rclcpp::Node rclcpp::Publisher::SharedPtr pub_objects_; }; -} // namespace cluster_merger +} // namespace autoware::cluster_merger -#endif // CLUSTER_MERGER__NODE_HPP_ +#endif // CLUSTER_MERGER_NODE_HPP_ From 6049fe6e15c65461a780c2f568fc34959ddad13c Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Thu, 4 Jul 2024 09:30:17 +0900 Subject: [PATCH 043/306] fix(stop_filter): fix plugin name (#7820) Fixed plugin name Signed-off-by: Shintaro Sakoda --- localization/autoware_stop_filter/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localization/autoware_stop_filter/CMakeLists.txt b/localization/autoware_stop_filter/CMakeLists.txt index f33ab41169cb3..96123e89c5050 100644 --- a/localization/autoware_stop_filter/CMakeLists.txt +++ b/localization/autoware_stop_filter/CMakeLists.txt @@ -10,7 +10,7 @@ ament_auto_add_library(${PROJECT_NAME} SHARED ) rclcpp_components_register_node(${PROJECT_NAME} - PLUGIN "StopFilter" + PLUGIN "autoware::stop_filter::StopFilter" EXECUTABLE ${PROJECT_NAME}_node EXECUTOR SingleThreadedExecutor ) From 0a6e19460330971172e2974febdc919bed5047a2 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 10:15:20 +0900 Subject: [PATCH 044/306] fix(object_merger): fix knownConditionTrueFalse (#7822) * fix(object_merger): fix knownConditionTrueFalse Signed-off-by: Ryuta Kambe * style(pre-commit): autofix --------- Signed-off-by: Ryuta Kambe Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- perception/object_merger/src/association/data_association.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/object_merger/src/association/data_association.cpp b/perception/object_merger/src/association/data_association.cpp index c2f7d44fa779b..e317ac63d9831 100644 --- a/perception/object_merger/src/association/data_association.cpp +++ b/perception/object_merger/src/association/data_association.cpp @@ -141,7 +141,7 @@ Eigen::MatrixXd DataAssociation::calcScoreMatrix( bool passed_gate = true; // dist gate - if (passed_gate) { + { // passed_gate is always true if (max_dist < dist) passed_gate = false; } // angle gate From 27f0b93319b54b18d1035cb15198994e0f66615f Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 10:16:19 +0900 Subject: [PATCH 045/306] fix(radar_object_tracker): fix knownConditionTrueFalse (#7824) * fix(radar_object_tracker): fix knownConditionTrueFalse Signed-off-by: Ryuta Kambe * style(pre-commit): autofix --------- Signed-off-by: Ryuta Kambe Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../radar_object_tracker/src/association/data_association.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/radar_object_tracker/src/association/data_association.cpp b/perception/radar_object_tracker/src/association/data_association.cpp index ac57a3f0a87c0..2d906ce55bcec 100644 --- a/perception/radar_object_tracker/src/association/data_association.cpp +++ b/perception/radar_object_tracker/src/association/data_association.cpp @@ -209,7 +209,7 @@ Eigen::MatrixXd DataAssociation::calcScoreMatrix( bool passed_gate = true; // dist gate - if (passed_gate) { + { // passed_gate is always true if (max_dist < dist) { passed_gate = false; } From 7ae1bac0d88b70d4e59ce3ea310241ce31f39f75 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 10:25:47 +0900 Subject: [PATCH 046/306] fix(tracking_object_merger): fix knownConditionTrueFalse (#7825) * fix(tracking_object_merger): fix knownConditionTrueFalse Signed-off-by: Ryuta Kambe * style(pre-commit): autofix --------- Signed-off-by: Ryuta Kambe Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../tracking_object_merger/src/association/data_association.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/tracking_object_merger/src/association/data_association.cpp b/perception/tracking_object_merger/src/association/data_association.cpp index e77a71744fe9b..046fcf5986469 100644 --- a/perception/tracking_object_merger/src/association/data_association.cpp +++ b/perception/tracking_object_merger/src/association/data_association.cpp @@ -191,7 +191,7 @@ double DataAssociation::calcScoreBetweenObjects( bool passed_gate = true; // dist gate - if (passed_gate) { + { // passed_gate is always true if (max_dist < dist) passed_gate = false; } // angle gate From 052681ffdaf1672eb3d9b246c4e8926376acc3ac Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 10:47:08 +0900 Subject: [PATCH 047/306] fix(multi_object_tracker): fix knownConditionTrueFalse (#7821) * fix(multi_object_tracker): fix knownConditionTrueFalse Signed-off-by: Ryuta Kambe * style(pre-commit): autofix --------- Signed-off-by: Ryuta Kambe Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../src/data_association/data_association.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/multi_object_tracker/src/data_association/data_association.cpp b/perception/multi_object_tracker/src/data_association/data_association.cpp index 013137aa8b82c..f7b40cd178528 100644 --- a/perception/multi_object_tracker/src/data_association/data_association.cpp +++ b/perception/multi_object_tracker/src/data_association/data_association.cpp @@ -176,7 +176,7 @@ Eigen::MatrixXd DataAssociation::calcScoreMatrix( bool passed_gate = true; // dist gate - if (passed_gate) { + { // passed_gate is always true if (max_dist < dist) passed_gate = false; } // area gate From 78a4ff1fb39892b84ba003f0db949b4eb610deda Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Thu, 4 Jul 2024 13:04:01 +0900 Subject: [PATCH 048/306] refactor(detection_by_tracker)!: fix namespace and directory structure (#7742) chore: remove unnecessary dependencies and rework package structure Signed-off-by: Taekjin LEE --- .../detection_by_tracker/CMakeLists.txt | 14 ++++---- .../launch/detection_by_tracker.launch.xml | 2 +- perception/detection_by_tracker/package.xml | 2 -- .../debugger}/debugger.hpp | 28 ++++++++------- ...core.cpp => detection_by_tracker_node.cpp} | 21 +++++++----- .../detection_by_tracker_node.hpp} | 34 +++++++++++-------- .../src/{ => utils}/utils.cpp | 6 ++-- .../utils}/utils.hpp | 10 +++--- 8 files changed, 65 insertions(+), 52 deletions(-) rename perception/detection_by_tracker/{include/detection_by_tracker => src/debugger}/debugger.hpp (85%) rename perception/detection_by_tracker/src/{detection_by_tracker_core.cpp => detection_by_tracker_node.cpp} (98%) rename perception/detection_by_tracker/{include/detection_by_tracker/detection_by_tracker_core.hpp => src/detection_by_tracker_node.hpp} (81%) rename perception/detection_by_tracker/src/{ => utils}/utils.cpp (91%) rename perception/detection_by_tracker/{include/detection_by_tracker => src/utils}/utils.hpp (82%) diff --git a/perception/detection_by_tracker/CMakeLists.txt b/perception/detection_by_tracker/CMakeLists.txt index 3813f1ba4707f..112187551d924 100644 --- a/perception/detection_by_tracker/CMakeLists.txt +++ b/perception/detection_by_tracker/CMakeLists.txt @@ -26,22 +26,22 @@ include_directories( # Generate exe file set(DETECTION_BY_TRACKER_SRC - src/detection_by_tracker_core.cpp - src/utils.cpp + src/detection_by_tracker_node.cpp + src/utils/utils.cpp ) -ament_auto_add_library(detection_by_tracker_node SHARED +ament_auto_add_library(${PROJECT_NAME} SHARED ${DETECTION_BY_TRACKER_SRC} ) -target_link_libraries(detection_by_tracker_node +target_link_libraries(${PROJECT_NAME} Eigen3::Eigen ${PCL_LIBRARIES} ) -rclcpp_components_register_node(detection_by_tracker_node - PLUGIN "DetectionByTracker" - EXECUTABLE detection_by_tracker +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::detection_by_tracker::DetectionByTracker" + EXECUTABLE detection_by_tracker_node ) ament_auto_package( diff --git a/perception/detection_by_tracker/launch/detection_by_tracker.launch.xml b/perception/detection_by_tracker/launch/detection_by_tracker.launch.xml index 95e7cbf16b388..3fba5cb58f8f3 100644 --- a/perception/detection_by_tracker/launch/detection_by_tracker.launch.xml +++ b/perception/detection_by_tracker/launch/detection_by_tracker.launch.xml @@ -4,7 +4,7 @@ - + diff --git a/perception/detection_by_tracker/package.xml b/perception/detection_by_tracker/package.xml index 52d4d3fcdd7a2..50bd876ce0605 100644 --- a/perception/detection_by_tracker/package.xml +++ b/perception/detection_by_tracker/package.xml @@ -16,9 +16,7 @@ autoware_universe_utils eigen euclidean_cluster - libpcl-all-dev object_recognition_utils - pcl_conversions rclcpp rclcpp_components shape_estimation diff --git a/perception/detection_by_tracker/include/detection_by_tracker/debugger.hpp b/perception/detection_by_tracker/src/debugger/debugger.hpp similarity index 85% rename from perception/detection_by_tracker/include/detection_by_tracker/debugger.hpp rename to perception/detection_by_tracker/src/debugger/debugger.hpp index 0169082a2253a..242056c3ca316 100644 --- a/perception/detection_by_tracker/include/detection_by_tracker/debugger.hpp +++ b/perception/detection_by_tracker/src/debugger/debugger.hpp @@ -12,22 +12,23 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DETECTION_BY_TRACKER__DEBUGGER_HPP_ -#define DETECTION_BY_TRACKER__DEBUGGER_HPP_ +#ifndef DEBUGGER__DEBUGGER_HPP_ +#define DEBUGGER__DEBUGGER_HPP_ + +#include "autoware/universe_utils/ros/debug_publisher.hpp" +#include "autoware/universe_utils/system/stop_watch.hpp" +#include "euclidean_cluster/euclidean_cluster.hpp" +#include "euclidean_cluster/utils.hpp" +#include "euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" +#include "shape_estimation/shape_estimator.hpp" -#include -#include -#include -#include -#include #include -#include -#include -#include +#include "autoware_perception_msgs/msg/detected_objects.hpp" +#include "autoware_perception_msgs/msg/tracked_objects.hpp" +#include "tier4_perception_msgs/msg/detected_objects_with_feature.hpp" #include #include -#include #include #include @@ -46,6 +47,8 @@ #include #include +namespace autoware::detection_by_tracker +{ class Debugger { public: @@ -117,5 +120,6 @@ class Debugger return objects; } }; +} // namespace autoware::detection_by_tracker -#endif // DETECTION_BY_TRACKER__DEBUGGER_HPP_ +#endif // DEBUGGER__DEBUGGER_HPP_ diff --git a/perception/detection_by_tracker/src/detection_by_tracker_core.cpp b/perception/detection_by_tracker/src/detection_by_tracker_node.cpp similarity index 98% rename from perception/detection_by_tracker/src/detection_by_tracker_core.cpp rename to perception/detection_by_tracker/src/detection_by_tracker_node.cpp index 4e502b359120d..c41d6002d9266 100644 --- a/perception/detection_by_tracker/src/detection_by_tracker_core.cpp +++ b/perception/detection_by_tracker/src/detection_by_tracker_node.cpp @@ -12,12 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "detection_by_tracker/detection_by_tracker_core.hpp" +#define EIGEN_MPL2_ONLY + +#include "detection_by_tracker_node.hpp" +#include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/math/unit_conversion.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" -#include -#include +#include +#include #include #include @@ -25,10 +29,6 @@ #include #include -#define EIGEN_MPL2_ONLY -#include -#include - using Label = autoware_perception_msgs::msg::ObjectClassification; namespace { @@ -80,6 +80,9 @@ boost::optional getReferenceShapeSizeInfo( } } // namespace +namespace autoware::detection_by_tracker +{ + void TrackerHandler::onTrackedObjects( const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr msg) { @@ -466,5 +469,7 @@ void DetectionByTracker::mergeOverSegmentedObjects( } } +} // namespace autoware::detection_by_tracker + #include -RCLCPP_COMPONENTS_REGISTER_NODE(DetectionByTracker) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::detection_by_tracker::DetectionByTracker) diff --git a/perception/detection_by_tracker/include/detection_by_tracker/detection_by_tracker_core.hpp b/perception/detection_by_tracker/src/detection_by_tracker_node.hpp similarity index 81% rename from perception/detection_by_tracker/include/detection_by_tracker/detection_by_tracker_core.hpp rename to perception/detection_by_tracker/src/detection_by_tracker_node.hpp index d6d030aadb000..4e58d53fa71aa 100644 --- a/perception/detection_by_tracker/include/detection_by_tracker/detection_by_tracker_core.hpp +++ b/perception/detection_by_tracker/src/detection_by_tracker_node.hpp @@ -12,24 +12,24 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DETECTION_BY_TRACKER__DETECTION_BY_TRACKER_CORE_HPP_ -#define DETECTION_BY_TRACKER__DETECTION_BY_TRACKER_CORE_HPP_ +#ifndef DETECTION_BY_TRACKER_NODE_HPP_ +#define DETECTION_BY_TRACKER_NODE_HPP_ -#include "detection_by_tracker/debugger.hpp" -#include "detection_by_tracker/utils.hpp" +#include "autoware/universe_utils/ros/published_time_publisher.hpp" +#include "debugger/debugger.hpp" +#include "euclidean_cluster/euclidean_cluster.hpp" +#include "euclidean_cluster/utils.hpp" +#include "euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" +#include "shape_estimation/shape_estimator.hpp" +#include "utils/utils.hpp" -#include -#include -#include -#include #include -#include -#include -#include +#include "autoware_perception_msgs/msg/detected_objects.hpp" +#include "autoware_perception_msgs/msg/tracked_objects.hpp" +#include "tier4_perception_msgs/msg/detected_objects_with_feature.hpp" #include #include -#include #include #include @@ -48,6 +48,10 @@ #include #include #include + +namespace autoware::detection_by_tracker +{ + class TrackerHandler { private: @@ -82,7 +86,7 @@ class DetectionByTracker : public rclcpp::Node std::map max_search_distance_for_merger_; std::map max_search_distance_for_divider_; - detection_by_tracker::utils::TrackerIgnoreLabel tracker_ignore_; + utils::TrackerIgnoreLabel tracker_ignore_; std::unique_ptr published_time_publisher_; @@ -109,4 +113,6 @@ class DetectionByTracker : public rclcpp::Node tier4_perception_msgs::msg::DetectedObjectsWithFeature & out_objects); }; -#endif // DETECTION_BY_TRACKER__DETECTION_BY_TRACKER_CORE_HPP_ +} // namespace autoware::detection_by_tracker + +#endif // DETECTION_BY_TRACKER_NODE_HPP_ diff --git a/perception/detection_by_tracker/src/utils.cpp b/perception/detection_by_tracker/src/utils/utils.cpp similarity index 91% rename from perception/detection_by_tracker/src/utils.cpp rename to perception/detection_by_tracker/src/utils/utils.cpp index 51c6e5724543b..b269d703be7d4 100644 --- a/perception/detection_by_tracker/src/utils.cpp +++ b/perception/detection_by_tracker/src/utils/utils.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "detection_by_tracker/utils.hpp" +#include "utils.hpp" #include -namespace detection_by_tracker +namespace autoware::detection_by_tracker { namespace utils { @@ -30,4 +30,4 @@ bool TrackerIgnoreLabel::isIgnore(const uint8_t label) const (label == Label::BICYCLE && BICYCLE) || (label == Label::PEDESTRIAN && PEDESTRIAN); } } // namespace utils -} // namespace detection_by_tracker +} // namespace autoware::detection_by_tracker diff --git a/perception/detection_by_tracker/include/detection_by_tracker/utils.hpp b/perception/detection_by_tracker/src/utils/utils.hpp similarity index 82% rename from perception/detection_by_tracker/include/detection_by_tracker/utils.hpp rename to perception/detection_by_tracker/src/utils/utils.hpp index ed783b0343a14..b7041124fa931 100644 --- a/perception/detection_by_tracker/include/detection_by_tracker/utils.hpp +++ b/perception/detection_by_tracker/src/utils/utils.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DETECTION_BY_TRACKER__UTILS_HPP_ -#define DETECTION_BY_TRACKER__UTILS_HPP_ +#ifndef UTILS__UTILS_HPP_ +#define UTILS__UTILS_HPP_ #include -namespace detection_by_tracker +namespace autoware::detection_by_tracker { namespace utils { @@ -34,6 +34,6 @@ struct TrackerIgnoreLabel bool isIgnore(const uint8_t label) const; }; // struct TrackerIgnoreLabel } // namespace utils -} // namespace detection_by_tracker +} // namespace autoware::detection_by_tracker -#endif // DETECTION_BY_TRACKER__UTILS_HPP_ +#endif // UTILS__UTILS_HPP_ From 4ff4f35236107125bb446a5fb1018034206031d5 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 13:53:21 +0900 Subject: [PATCH 049/306] fix(ci): skip when modified package has no cpp/hpp files (#7829) * fix(ci): skip when modified package has no cpp/hpp files Signed-off-by: veqcc * test Signed-off-by: veqcc * fix Signed-off-by: veqcc * restore Signed-off-by: veqcc --------- Signed-off-by: veqcc --- .github/workflows/cppcheck-differential.yaml | 24 +++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/.github/workflows/cppcheck-differential.yaml b/.github/workflows/cppcheck-differential.yaml index 90fae29730afb..63f15cb9da319 100644 --- a/.github/workflows/cppcheck-differential.yaml +++ b/.github/workflows/cppcheck-differential.yaml @@ -53,31 +53,43 @@ jobs: done echo "full-paths=$paths" >> $GITHUB_OUTPUT + - name: Filter packages with no cpp/hpp files + id: filter-paths-no-cpp-files + run: | + filtered_paths="" + for dir in ${{ steps.get-full-paths.outputs.full-paths }}; do + if [ -d "$dir" ] && find "$dir" -name "*.cpp" -o -name "*.hpp" | grep -q .; then + filtered_paths="$filtered_paths $dir" + fi + done + echo "filtered-full-paths=$filtered_paths" >> $GITHUB_OUTPUT + # cspell: ignore suppr - name: Run Cppcheck on modified packages - if: ${{ steps.get-modified-packages.outputs.modified-packages != '' }} + if: ${{ steps.filter-paths-no-cpp-files.outputs.filtered-full-paths != '' }} continue-on-error: true id: cppcheck run: | - echo "Running Cppcheck on modified packages: ${{ steps.get-modified-packages.outputs.modified-packages }}" - cppcheck --enable=all --inconclusive --check-level=exhaustive --error-exitcode=1 --suppressions-list=.cppcheck_suppressions --inline-suppr ${{ steps.get-full-paths.outputs.full-paths }} 2> cppcheck-report.txt + echo "Running Cppcheck on modified packages: ${{ steps.filter-paths-no-cpp-files.outputs.filtered-full-paths }}" + cppcheck --enable=all --inconclusive --check-level=exhaustive --error-exitcode=1 --suppressions-list=.cppcheck_suppressions --inline-suppr ${{ steps.filter-paths-no-cpp-files.outputs.filtered-full-paths }} 2> cppcheck-report.txt shell: bash - name: Setup Problem Matchers for cppcheck + if: ${{ steps.filter-paths-no-cpp-files.outputs.filtered-full-paths != '' }} run: echo "::add-matcher::.github/cppcheck-problem-matcher.json" - name: Show cppcheck-report result - if: ${{ steps.get-modified-packages.outputs.modified-packages != '' }} + if: ${{ steps.filter-paths-no-cpp-files.outputs.filtered-full-paths != '' }} run: | cat cppcheck-report.txt - name: Upload Cppcheck report - if: ${{ steps.get-modified-packages.outputs.modified-packages != '' }} + if: ${{ steps.filter-paths-no-cpp-files.outputs.filtered-full-paths != '' }} uses: actions/upload-artifact@v2 with: name: cppcheck-report path: cppcheck-report.txt - name: Fail the job if Cppcheck failed - if: ${{ steps.get-modified-packages.outputs.modified-packages != '' && steps.cppcheck.outcome == 'failure' }} + if: ${{ steps.filter-paths-no-cpp-files.outputs.filtered-full-paths != '' && steps.cppcheck.outcome == 'failure' }} run: exit 1 From 9584fd50c92968eabf1900b2c0060599a7f352c0 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Sakamoto <50359861+mitukou1109@users.noreply.github.com> Date: Thu, 4 Jul 2024 14:00:56 +0900 Subject: [PATCH 050/306] refactor(tier4_control_launch): replace python launch with xml (#7682) * refactor: add xml version of control launch Signed-off-by: mitukou1109 * refactor: remove python version of control launch Signed-off-by: mitukou1109 * set default value of trajectory_follower_mode Signed-off-by: mitukou1109 * fix file extension to .py Signed-off-by: mitukou1109 * fix node name Signed-off-by: mitukou1109 * add lanelet info to the metrics Signed-off-by: mitukou1109 * style(pre-commit): autofix * Update launch/tier4_control_launch/launch/control.launch.xml Co-authored-by: Kosuke Takeuchi --------- Signed-off-by: mitukou1109 Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Kosuke Takeuchi Co-authored-by: Kotaro Yoshimoto --- .../launch/control.launch.py | 517 ------------------ .../launch/control.launch.xml | 251 +++++++++ 2 files changed, 251 insertions(+), 517 deletions(-) delete mode 100644 launch/tier4_control_launch/launch/control.launch.py create mode 100644 launch/tier4_control_launch/launch/control.launch.xml diff --git a/launch/tier4_control_launch/launch/control.launch.py b/launch/tier4_control_launch/launch/control.launch.py deleted file mode 100644 index 5843ec98d7068..0000000000000 --- a/launch/tier4_control_launch/launch/control.launch.py +++ /dev/null @@ -1,517 +0,0 @@ -# Copyright 2020 Tier IV, Inc. All rights reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import launch -from launch.actions import DeclareLaunchArgument -from launch.actions import GroupAction -from launch.actions import IncludeLaunchDescription -from launch.actions import OpaqueFunction -from launch.actions import SetLaunchConfiguration -from launch.conditions import IfCondition -from launch.conditions import UnlessCondition -from launch.launch_description_sources import PythonLaunchDescriptionSource -from launch.substitutions import LaunchConfiguration -from launch_ros.actions import ComposableNodeContainer -from launch_ros.actions import LoadComposableNodes -from launch_ros.actions import Node -from launch_ros.actions import PushRosNamespace -from launch_ros.descriptions import ComposableNode -from launch_ros.substitutions import FindPackageShare -import yaml - - -def launch_setup(context, *args, **kwargs): - with open(LaunchConfiguration("vehicle_param_file").perform(context), "r") as f: - vehicle_info_param = yaml.safe_load(f)["/**"]["ros__parameters"] - - with open(LaunchConfiguration("nearest_search_param_path").perform(context), "r") as f: - nearest_search_param = yaml.safe_load(f)["/**"]["ros__parameters"] - - with open( - LaunchConfiguration("trajectory_follower_node_param_path").perform(context), "r" - ) as f: - trajectory_follower_node_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open(LaunchConfiguration("lat_controller_param_path").perform(context), "r") as f: - lat_controller_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open(LaunchConfiguration("lon_controller_param_path").perform(context), "r") as f: - lon_controller_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open(LaunchConfiguration("vehicle_cmd_gate_param_path").perform(context), "r") as f: - vehicle_cmd_gate_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open(LaunchConfiguration("lane_departure_checker_param_path").perform(context), "r") as f: - lane_departure_checker_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open(LaunchConfiguration("control_validator_param_path").perform(context), "r") as f: - control_validator_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open( - LaunchConfiguration("operation_mode_transition_manager_param_path").perform(context), - "r", - ) as f: - operation_mode_transition_manager_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open(LaunchConfiguration("shift_decider_param_path").perform(context), "r") as f: - shift_decider_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open( - LaunchConfiguration("obstacle_collision_checker_param_path").perform(context), "r" - ) as f: - obstacle_collision_checker_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open(LaunchConfiguration("aeb_param_path").perform(context), "r") as f: - aeb_param = yaml.safe_load(f)["/**"]["ros__parameters"] - with open(LaunchConfiguration("predicted_path_checker_param_path").perform(context), "r") as f: - predicted_path_checker_param = yaml.safe_load(f)["/**"]["ros__parameters"] - trajectory_follower_mode = LaunchConfiguration("trajectory_follower_mode").perform(context) - - controller_component = ComposableNode( - package="autoware_trajectory_follower_node", - plugin="autoware::motion::control::trajectory_follower_node::Controller", - name="controller_node_exe", - namespace="trajectory_follower", - remappings=[ - ("~/input/reference_trajectory", "/planning/scenario_planning/trajectory"), - ("~/input/current_odometry", "/localization/kinematic_state"), - ("~/input/current_steering", "/vehicle/status/steering_status"), - ("~/input/current_accel", "/localization/acceleration"), - ("~/input/current_operation_mode", "/system/operation_mode/state"), - ("~/output/predicted_trajectory", "lateral/predicted_trajectory"), - ("~/output/lateral_diagnostic", "lateral/diagnostic"), - ("~/output/slope_angle", "longitudinal/slope_angle"), - ("~/output/longitudinal_diagnostic", "longitudinal/diagnostic"), - ("~/output/stop_reason", "longitudinal/stop_reason"), - ("~/output/control_cmd", "control_cmd"), - ], - parameters=[ - { - "lateral_controller_mode": LaunchConfiguration("lateral_controller_mode"), - "longitudinal_controller_mode": LaunchConfiguration("longitudinal_controller_mode"), - }, - nearest_search_param, - trajectory_follower_node_param, - lon_controller_param, - lat_controller_param, - vehicle_info_param, - ], - extra_arguments=[{"use_intra_process_comms": LaunchConfiguration("use_intra_process")}], - ) - - # lane departure checker - lane_departure_component = ComposableNode( - package="autoware_lane_departure_checker", - plugin="autoware::lane_departure_checker::LaneDepartureCheckerNode", - name="lane_departure_checker_node", - namespace="trajectory_follower", - remappings=[ - ("~/input/odometry", "/localization/kinematic_state"), - ("~/input/lanelet_map_bin", "/map/vector_map"), - ("~/input/route", "/planning/mission_planning/route"), - ("~/input/reference_trajectory", "/planning/scenario_planning/trajectory"), - ( - "~/input/predicted_trajectory", - "/control/trajectory_follower/lateral/predicted_trajectory", - ), - ], - parameters=[nearest_search_param, lane_departure_checker_param, vehicle_info_param], - extra_arguments=[{"use_intra_process_comms": LaunchConfiguration("use_intra_process")}], - ) - - # shift decider - shift_decider_component = ComposableNode( - package="autoware_shift_decider", - plugin="autoware::shift_decider::ShiftDecider", - name="autoware_shift_decider", - remappings=[ - ("input/control_cmd", "/control/trajectory_follower/control_cmd"), - ("input/state", "/autoware/state"), - ("input/current_gear", "/vehicle/status/gear_status"), - ("output/gear_cmd", "/control/shift_decider/gear_cmd"), - ], - parameters=[ - shift_decider_param, - ], - extra_arguments=[{"use_intra_process_comms": LaunchConfiguration("use_intra_process")}], - ) - - # autonomous emergency braking - autonomous_emergency_braking = ComposableNode( - package="autoware_autonomous_emergency_braking", - plugin="autoware::motion::control::autonomous_emergency_braking::AEB", - name="autonomous_emergency_braking", - remappings=[ - ("~/input/pointcloud", "/perception/obstacle_segmentation/pointcloud"), - ("~/input/velocity", "/vehicle/status/velocity_status"), - ("~/input/imu", "/sensing/imu/imu_data"), - ("~/input/odometry", "/localization/kinematic_state"), - ("~/input/objects", "/perception/object_recognition/objects"), - ( - "~/input/predicted_trajectory", - "/control/trajectory_follower/lateral/predicted_trajectory", - ), - ], - parameters=[ - aeb_param, - ], - extra_arguments=[{"use_intra_process_comms": LaunchConfiguration("use_intra_process")}], - ) - - autonomous_emergency_braking_loader = LoadComposableNodes( - condition=IfCondition(LaunchConfiguration("enable_autonomous_emergency_braking")), - composable_node_descriptions=[autonomous_emergency_braking], - target_container="/control/control_container", - ) - - # autonomous emergency braking - predicted_path_checker = ComposableNode( - package="predicted_path_checker", - plugin="autoware::motion::control::predicted_path_checker::PredictedPathCheckerNode", - name="predicted_path_checker", - remappings=[ - ("~/input/objects", "/perception/object_recognition/objects"), - ("~/input/reference_trajectory", "/planning/scenario_planning/trajectory"), - ("~/input/current_accel", "/localization/acceleration"), - ("~/input/odometry", "/localization/kinematic_state"), - ( - "~/input/predicted_trajectory", - "/control/trajectory_follower/lateral/predicted_trajectory", - ), - ], - parameters=[ - vehicle_info_param, - predicted_path_checker_param, - ], - extra_arguments=[{"use_intra_process_comms": LaunchConfiguration("use_intra_process")}], - ) - - predicted_path_checker_loader = LoadComposableNodes( - condition=IfCondition(LaunchConfiguration("enable_predicted_path_checker")), - composable_node_descriptions=[predicted_path_checker], - target_container="/control/control_container", - ) - - # vehicle cmd gate - vehicle_cmd_gate_component = ComposableNode( - package="autoware_vehicle_cmd_gate", - plugin="autoware::vehicle_cmd_gate::VehicleCmdGate", - name="vehicle_cmd_gate", - remappings=[ - ("input/steering", "/vehicle/status/steering_status"), - ("input/operation_mode", "/system/operation_mode/state"), - ("input/auto/control_cmd", "/control/trajectory_follower/control_cmd"), - ("input/auto/turn_indicators_cmd", "/planning/turn_indicators_cmd"), - ("input/auto/hazard_lights_cmd", "/planning/hazard_lights_cmd"), - ("input/auto/gear_cmd", "/control/shift_decider/gear_cmd"), - ("input/external/control_cmd", "/external/selected/control_cmd"), - ("input/external/turn_indicators_cmd", "/external/selected/turn_indicators_cmd"), - ("input/external/hazard_lights_cmd", "/external/selected/hazard_lights_cmd"), - ("input/external/gear_cmd", "/external/selected/gear_cmd"), - ("input/external_emergency_stop_heartbeat", "/external/selected/heartbeat"), - ("input/gate_mode", "/control/gate_mode_cmd"), - ("input/emergency/control_cmd", "/system/emergency/control_cmd"), - ("input/emergency/hazard_lights_cmd", "/system/emergency/hazard_lights_cmd"), - ("input/emergency/gear_cmd", "/system/emergency/gear_cmd"), - ("input/mrm_state", "/system/fail_safe/mrm_state"), - ("input/kinematics", "/localization/kinematic_state"), - ("input/acceleration", "/localization/acceleration"), - ("output/vehicle_cmd_emergency", "/control/command/emergency_cmd"), - ("output/control_cmd", "/control/command/control_cmd"), - ("output/gear_cmd", "/control/command/gear_cmd"), - ("output/turn_indicators_cmd", "/control/command/turn_indicators_cmd"), - ("output/hazard_lights_cmd", "/control/command/hazard_lights_cmd"), - ("output/gate_mode", "/control/current_gate_mode"), - ("output/engage", "/api/autoware/get/engage"), - ("output/external_emergency", "/api/autoware/get/emergency"), - ("output/operation_mode", "/control/vehicle_cmd_gate/operation_mode"), - ("~/service/engage", "/api/autoware/set/engage"), - ("~/service/external_emergency", "/api/autoware/set/emergency"), - # TODO(Takagi, Isamu): deprecated - ("input/engage", "/autoware/engage"), - ("~/service/external_emergency_stop", "~/external_emergency_stop"), - ("~/service/clear_external_emergency_stop", "~/clear_external_emergency_stop"), - ], - parameters=[ - vehicle_cmd_gate_param, - vehicle_info_param, - { - "check_external_emergency_heartbeat": LaunchConfiguration( - "check_external_emergency_heartbeat" - ), - }, - ], - extra_arguments=[{"use_intra_process_comms": LaunchConfiguration("use_intra_process")}], - ) - - # operation mode transition manager - autoware_operation_mode_transition_manager_component = ComposableNode( - package="autoware_operation_mode_transition_manager", - plugin="autoware::operation_mode_transition_manager::OperationModeTransitionManager", - name="autoware_operation_mode_transition_manager", - remappings=[ - # input - ("kinematics", "/localization/kinematic_state"), - ("steering", "/vehicle/status/steering_status"), - ("trajectory", "/planning/scenario_planning/trajectory"), - ("control_cmd", "/control/command/control_cmd"), - ("trajectory_follower_control_cmd", "/control/trajectory_follower/control_cmd"), - ("control_mode_report", "/vehicle/status/control_mode"), - ("gate_operation_mode", "/control/vehicle_cmd_gate/operation_mode"), - # output - ("is_autonomous_available", "/control/is_autonomous_available"), - ("control_mode_request", "/control/control_mode_request"), - ], - parameters=[ - nearest_search_param, - operation_mode_transition_manager_param, - vehicle_info_param, - ], - ) - - # external cmd selector - external_cmd_selector_loader = IncludeLaunchDescription( - PythonLaunchDescriptionSource( - [ - FindPackageShare("autoware_external_cmd_selector"), - "/launch/external_cmd_selector.launch.py", - ] - ), - launch_arguments=[ - ("use_intra_process", LaunchConfiguration("use_intra_process")), - ("target_container", "/control/control_container"), - ( - "external_cmd_selector_param_path", - LaunchConfiguration("external_cmd_selector_param_path"), - ), - ], - ) - - # external cmd converter - external_cmd_converter_loader = IncludeLaunchDescription( - PythonLaunchDescriptionSource( - [ - FindPackageShare("autoware_external_cmd_converter"), - "/launch/external_cmd_converter.launch.py", - ] - ), - launch_arguments=[ - ("use_intra_process", LaunchConfiguration("use_intra_process")), - ("target_container", "/control/control_container"), - ], - ) - - # obstacle collision checker - obstacle_collision_checker_component = ComposableNode( - package="obstacle_collision_checker", - plugin="obstacle_collision_checker::ObstacleCollisionCheckerNode", - name="obstacle_collision_checker", - remappings=[ - ("input/lanelet_map_bin", "/map/vector_map"), - ("input/obstacle_pointcloud", "/perception/obstacle_segmentation/pointcloud"), - ("input/reference_trajectory", "/planning/scenario_planning/trajectory"), - ( - "input/predicted_trajectory", - "/control/trajectory_follower/lateral/predicted_trajectory", - ), - ("input/odometry", "/localization/kinematic_state"), - ], - parameters=[ - obstacle_collision_checker_param, - vehicle_info_param, - ], - extra_arguments=[{"use_intra_process_comms": LaunchConfiguration("use_intra_process")}], - ) - - obstacle_collision_checker_loader = LoadComposableNodes( - condition=IfCondition(LaunchConfiguration("enable_obstacle_collision_checker")), - composable_node_descriptions=[obstacle_collision_checker_component], - target_container="/control/control_container", - ) - - glog_component = ComposableNode( - package="glog_component", - plugin="GlogComponent", - name="glog_component", - ) - - # set container to run all required components in the same process - if trajectory_follower_mode == "trajectory_follower_node": - container = ComposableNodeContainer( - name="control_container", - namespace="", - package="rclcpp_components", - executable=LaunchConfiguration("container_executable"), - composable_node_descriptions=[ - controller_component, - lane_departure_component, - shift_decider_component, - vehicle_cmd_gate_component, - autoware_operation_mode_transition_manager_component, - glog_component, - ], - ) - - elif trajectory_follower_mode == "smart_mpc_trajectory_follower": - container = ComposableNodeContainer( - name="control_container", - namespace="", - package="rclcpp_components", - executable=LaunchConfiguration("container_executable"), - composable_node_descriptions=[ - lane_departure_component, - shift_decider_component, - vehicle_cmd_gate_component, - autoware_operation_mode_transition_manager_component, - glog_component, - ], - ) - else: - raise Exception( - f"The argument trajectory_follower_mode must be either trajectory_follower_node or smart_mpc_trajectory_follower, but {trajectory_follower_mode} was given." - ) - - # control evaluator - control_evaluator_component = ComposableNode( - package="autoware_control_evaluator", - plugin="control_diagnostics::ControlEvaluatorNode", - name="control_evaluator", - remappings=[ - ("~/input/diagnostics", "/diagnostics"), - ("~/input/odometry", "/localization/kinematic_state"), - ("~/input/acceleration", "/localization/acceleration"), - ("~/input/trajectory", "/planning/scenario_planning/trajectory"), - ("~/metrics", "/diagnostic/control_evaluator/metrics"), - ("~/input/vector_map", "/map/vector_map"), - ("~/input/route", "/planning/mission_planning/route"), - ], - ) - - control_evaluator_loader = LoadComposableNodes( - composable_node_descriptions=[control_evaluator_component], - target_container="/control/control_container", - ) - - # control validator checker - control_validator_component = ComposableNode( - package="autoware_control_validator", - plugin="autoware::control_validator::ControlValidator", - name="control_validator", - remappings=[ - ("~/input/kinematics", "/localization/kinematic_state"), - ("~/input/reference_trajectory", "/planning/scenario_planning/trajectory"), - ( - "~/input/predicted_trajectory", - "/control/trajectory_follower/lateral/predicted_trajectory", - ), - ("~/output/validation_status", "~/validation_status"), - ], - parameters=[control_validator_param], - ) - - group = GroupAction( - [ - PushRosNamespace("control"), - container, - external_cmd_selector_loader, - external_cmd_converter_loader, - obstacle_collision_checker_loader, - autonomous_emergency_braking_loader, - predicted_path_checker_loader, - control_evaluator_loader, - ] - ) - - control_validator_group = GroupAction( - [ - PushRosNamespace("control"), - ComposableNodeContainer( - name="control_validator_container", - namespace="", - package="rclcpp_components", - executable=LaunchConfiguration("container_executable"), - composable_node_descriptions=[ - control_validator_component, - ComposableNode( - package="glog_component", - plugin="GlogComponent", - name="glog_validator_component", - ), - ], - ), - ] - ) - - smart_mpc_trajectory_follower = Node( - package="autoware_smart_mpc_trajectory_follower", - executable="pympc_trajectory_follower.py", - name="controller_node_exe", - ) - if trajectory_follower_mode == "trajectory_follower_node": - return [group, control_validator_group] - elif trajectory_follower_mode == "smart_mpc_trajectory_follower": - return [group, control_validator_group, smart_mpc_trajectory_follower] - - -def generate_launch_description(): - launch_arguments = [] - - def add_launch_arg(name: str, default_value=None, description=None): - launch_arguments.append( - DeclareLaunchArgument(name, default_value=default_value, description=description) - ) - - # option - add_launch_arg("vehicle_param_file") - add_launch_arg("vehicle_id") - add_launch_arg("enable_obstacle_collision_checker") - add_launch_arg("lateral_controller_mode") - add_launch_arg("longitudinal_controller_mode") - # common param path - add_launch_arg("nearest_search_param_path") - # package param path - add_launch_arg("trajectory_follower_node_param_path") - add_launch_arg("lat_controller_param_path") - add_launch_arg("lon_controller_param_path") - add_launch_arg("vehicle_cmd_gate_param_path") - add_launch_arg("lane_departure_checker_param_path") - add_launch_arg("control_validator_param_path") - add_launch_arg("operation_mode_transition_manager_param_path") - add_launch_arg("shift_decider_param_path") - add_launch_arg("obstacle_collision_checker_param_path") - add_launch_arg("external_cmd_selector_param_path") - add_launch_arg("aeb_param_path") - add_launch_arg("predicted_path_checker_param_path") - add_launch_arg("enable_predicted_path_checker") - add_launch_arg("enable_autonomous_emergency_braking") - add_launch_arg("check_external_emergency_heartbeat") - - # component - add_launch_arg("use_intra_process", "false", "use ROS 2 component container communication") - add_launch_arg("use_multithread", "true", "use multithread") - add_launch_arg( - "trajectory_follower_mode", - "trajectory_follower_node", - "Options for which trajectory_follower to use. Options: `trajectory_follower_node`, `smart_mpc_trajectory_follower`", - ) - set_container_executable = SetLaunchConfiguration( - "container_executable", - "component_container", - condition=UnlessCondition(LaunchConfiguration("use_multithread")), - ) - - set_container_mt_executable = SetLaunchConfiguration( - "container_executable", - "component_container_mt", - condition=IfCondition(LaunchConfiguration("use_multithread")), - ) - return launch.LaunchDescription( - launch_arguments - + [ - set_container_executable, - set_container_mt_executable, - ] - + [OpaqueFunction(function=launch_setup)] - ) diff --git a/launch/tier4_control_launch/launch/control.launch.xml b/launch/tier4_control_launch/launch/control.launch.xml new file mode 100644 index 0000000000000..f23d9f74986e6 --- /dev/null +++ b/launch/tier4_control_launch/launch/control.launch.xml @@ -0,0 +1,251 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b158a06d6b89c72dcfc562e7449a0a2d96a43615 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 14:02:32 +0900 Subject: [PATCH 051/306] chore(ci): remove unnecessary cppcheck suppresion (#7780) * chore(ci): remove unnecessary cppcheck suppresion Signed-off-by: Ryuta Kambe * remove syntaxError suppression Signed-off-by: Ryuta Kambe --------- Signed-off-by: Ryuta Kambe --- .cppcheck_suppressions | 2 -- 1 file changed, 2 deletions(-) diff --git a/.cppcheck_suppressions b/.cppcheck_suppressions index b2ef5ac6c3f7e..74e4de15becf3 100644 --- a/.cppcheck_suppressions +++ b/.cppcheck_suppressions @@ -20,7 +20,6 @@ preprocessorErrorDirective redundantInitialization shadowFunction shadowVariable -syntaxError // cspell: ignore uninit uninitMemberVar unknownMacro @@ -30,6 +29,5 @@ unusedFunction unusedStructMember useInitializationList useStlAlgorithm -uselessOverride variableScope virtualCallInConstructor From f6d8b1850d3ce385e628c4a7a8e6a4932bb0248f Mon Sep 17 00:00:00 2001 From: TakumIto <61740530+TakumIto@users.noreply.github.com> Date: Thu, 4 Jul 2024 14:33:09 +0900 Subject: [PATCH 052/306] feat(freespace_planning_algorithms): add is_back flag into the return of A* python wrapper (#7831) add is_back flag to the return of getWaypoints Signed-off-by: Takumi Ito Co-authored-by: Takumi Ito --- .../astar_search.py | 11 ++++++++++- .../scripts/bind/astar_search_pybind.cpp | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/planning/autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms/astar_search.py b/planning/autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms/astar_search.py index 2ffa20150fb0c..7b03a4024dc1b 100644 --- a/planning/autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms/astar_search.py +++ b/planning/autoware_freespace_planning_algorithms/autoware_freespace_planning_algorithms/astar_search.py @@ -24,6 +24,12 @@ AstarParam = _fp.AstarParam +class PlannerWaypoint: + def __init__(self, pose, is_back): + self.pose = pose + self.is_back = is_back + + class PlannerWaypoints: def __init__(self): self.waypoints = [] @@ -59,6 +65,9 @@ def getWaypoints(self): for waypoint in waypoints_vector.waypoints: pos = Point(x=waypoint[0], y=waypoint[1], z=waypoint[2]) quat = Quaternion(x=waypoint[3], y=waypoint[4], z=waypoint[5], w=waypoint[6]) - waypoints.waypoints.append(Pose(position=pos, orientation=quat)) + is_bask = bool(waypoint[7]) + waypoints.waypoints.append( + PlannerWaypoint(Pose(position=pos, orientation=quat), is_bask) + ) return waypoints diff --git a/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp b/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp index f557926806382..8932fb277abe8 100644 --- a/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp +++ b/planning/autoware_freespace_planning_algorithms/scripts/bind/astar_search_pybind.cpp @@ -89,8 +89,9 @@ class AstarSearchPython : public freespace_planning_algorithms::AstarSearch // python-side. So this function returns [*position, *quaternion] as double array const auto & xyz = waypoint.pose.pose.position; const auto & quat = waypoint.pose.pose.orientation; + const double & is_back = waypoint.is_back; waypoints_vector.waypoints.push_back( - std::vector({xyz.x, xyz.y, xyz.z, quat.x, quat.y, quat.z, quat.w})); + std::vector({xyz.x, xyz.y, xyz.z, quat.x, quat.y, quat.z, quat.w, is_back})); } waypoints_vector.length = waypoints.compute_length(); return waypoints_vector; From 5d99550b77ca1887c1083f85068ed24aae2bbeae Mon Sep 17 00:00:00 2001 From: TakumIto <61740530+TakumIto@users.noreply.github.com> Date: Thu, 4 Jul 2024 14:38:05 +0900 Subject: [PATCH 053/306] chore(freespace_planning_algorithm): modify A* script for standalone running (#7070) * modify astar for standalone running move clearNoe() from setMap to makePlan(). Signed-off-by: Takumi Ito * small modification Signed-off-by: Takumi Ito * run pre-commit Signed-off-by: Takumi Ito --------- Signed-off-by: Takumi Ito Co-authored-by: Takumi Ito --- .../src/astar_search.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/planning/autoware_freespace_planning_algorithms/src/astar_search.cpp b/planning/autoware_freespace_planning_algorithms/src/astar_search.cpp index 6b04ca87bfb7d..1902b7aa2d091 100644 --- a/planning/autoware_freespace_planning_algorithms/src/astar_search.cpp +++ b/planning/autoware_freespace_planning_algorithms/src/astar_search.cpp @@ -131,10 +131,7 @@ void AstarSearch::setMap(const nav_msgs::msg::OccupancyGrid & costmap) { AbstractPlanningAlgorithm::setMap(costmap); - clearNodes(); - x_scale_ = costmap_.info.height; - graph_.reserve(100000); } bool AstarSearch::makePlan( @@ -143,6 +140,9 @@ bool AstarSearch::makePlan( start_pose_ = global2local(costmap_, start_pose); goal_pose_ = global2local(costmap_, goal_pose); + clearNodes(); + graph_.reserve(100000); + if (!setStartNode()) { return false; } From eb3ec5428b07f232ace2f05b3df05580cfd0dc0d Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 15:40:21 +0900 Subject: [PATCH 054/306] fix(radar_fusion_to_detected_object): fix knownConditionTrueFalse (#7814) * fix(radar_fusion_to_detected_object): fix knownConditionTrueFalse Signed-off-by: Ryuta Kambe * inline suppression Signed-off-by: Ryuta Kambe --------- Signed-off-by: Ryuta Kambe --- .../src/radar_fusion_to_detected_object.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/perception/radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp b/perception/radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp index 0c90a468f2ebd..0fb87c0f88ba0 100644 --- a/perception/radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp +++ b/perception/radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp @@ -95,6 +95,8 @@ RadarFusionToDetectedObject::Output RadarFusionToDetectedObject::update( for (auto & split_object : split_objects) { // set radars within objects std::shared_ptr> radars_within_split_object; + + // cppcheck-suppress knownConditionTrueFalse if (split_objects.size() == 1) { // If object is not split, radar data within object is same radars_within_split_object = radars_within_object; From a56359bdbc49c79992457b2ca0e810ff473145e5 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 15:43:33 +0900 Subject: [PATCH 055/306] fix(autoware_behavior_velocity_intersection_module): fix shadowFunction (#7835) * fix(autoware_behavior_velocity_intersection_module): fix shadowFunction Signed-off-by: Ryuta Kambe * style(pre-commit): autofix --------- Signed-off-by: Ryuta Kambe Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../src/intersection_lanelets.cpp | 3 +-- .../src/object_manager.cpp | 12 ++++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp index 648fc611ac6b1..943eef03fc6ce 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/intersection_lanelets.cpp @@ -48,11 +48,10 @@ void IntersectionLanelets::update( } } if (first_attention_lane_ && !second_attention_lane_ && !second_attention_lane_empty_) { - const auto first_attention_lane = first_attention_lane_.value(); // remove first_attention_area_ and non-straight lanelets from attention_non_preceding lanelet::ConstLanelets attention_non_preceding_ex_first; lanelet::ConstLanelets sibling_first_attention_lanelets; - for (const auto & previous : routing_graph_ptr->previous(first_attention_lane)) { + for (const auto & previous : routing_graph_ptr->previous(first_attention_lane_.value())) { for (const auto & following : routing_graph_ptr->following(previous)) { sibling_first_attention_lanelets.push_back(following); } diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/object_manager.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/object_manager.cpp index 6ead1df3eb2d1..b749207aa2393 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/object_manager.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/object_manager.cpp @@ -137,11 +137,9 @@ bool ObjectInfo::can_stop_before_stopline(const double brake_deceleration) const if (!dist_to_stopline_opt) { return false; } - const double observed_velocity = - predicted_object_.kinematics.initial_twist_with_covariance.twist.linear.x; + const double velocity = predicted_object_.kinematics.initial_twist_with_covariance.twist.linear.x; const double dist_to_stopline = dist_to_stopline_opt.value(); - const double braking_distance = - (observed_velocity * observed_velocity) / (2.0 * brake_deceleration); + const double braking_distance = (velocity * velocity) / (2.0 * brake_deceleration); return dist_to_stopline > braking_distance; } @@ -153,10 +151,8 @@ bool ObjectInfo::can_stop_before_ego_lane( return false; } const double dist_to_stopline = dist_to_stopline_opt.value(); - const double observed_velocity = - predicted_object_.kinematics.initial_twist_with_covariance.twist.linear.x; - const double braking_distance = - (observed_velocity * observed_velocity) / (2.0 * brake_deceleration); + const double velocity = predicted_object_.kinematics.initial_twist_with_covariance.twist.linear.x; + const double braking_distance = (velocity * velocity) / (2.0 * brake_deceleration); if (dist_to_stopline > braking_distance) { return false; } From b2ad6f5927199e2058170c4813631d696480c02b Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Thu, 4 Jul 2024 15:54:52 +0900 Subject: [PATCH 056/306] feat(obstacle_cruise_planner): add diagnostics publishing to cruise planner (#7836) add diagnostics publishing to cruise planner Signed-off-by: Daniel Sanchez --- .../planner_interface.hpp | 6 ++ .../src/node.cpp | 3 +- .../src/planner_interface.cpp | 80 ++++++++++++++++++- 3 files changed, 86 insertions(+), 3 deletions(-) diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp index 3679c253e2bbb..0b54542cbea85 100644 --- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp @@ -23,6 +23,8 @@ #include "autoware/universe_utils/ros/update_param.hpp" #include "autoware/universe_utils/system/stop_watch.hpp" +#include + #include #include #include @@ -33,6 +35,8 @@ #include #include +using DiagnosticStatus = diagnostic_msgs::msg::DiagnosticStatus; +using DiagnosticArray = diagnostic_msgs::msg::DiagnosticArray; class PlannerInterface { public: @@ -52,6 +56,7 @@ class PlannerInterface node.create_publisher("/planning/velocity_factors/obstacle_cruise", 1); stop_speed_exceeded_pub_ = node.create_publisher("~/output/stop_speed_exceeded", 1); + diagnostics_pub_ = node.create_publisher("/diagnostics", 10); moving_object_speed_threshold = node.declare_parameter("slow_down.moving_object_speed_threshold"); @@ -135,6 +140,7 @@ class PlannerInterface rclcpp::Publisher::SharedPtr stop_reasons_pub_; rclcpp::Publisher::SharedPtr velocity_factors_pub_; rclcpp::Publisher::SharedPtr stop_speed_exceeded_pub_; + rclcpp::Publisher::SharedPtr diagnostics_pub_; // Vehicle Parameters autoware::vehicle_info_utils::VehicleInfo vehicle_info_; diff --git a/planning/autoware_obstacle_cruise_planner/src/node.cpp b/planning/autoware_obstacle_cruise_planner/src/node.cpp index c8f962c3ad711..ec0b70e4e1b2d 100644 --- a/planning/autoware_obstacle_cruise_planner/src/node.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/node.cpp @@ -557,7 +557,8 @@ void ObstacleCruisePlannerNode::onTrajectory(const Trajectory::ConstSharedPtr ms const auto objects_ptr = objects_sub_.takeData(); const auto pointcloud_ptr = use_pointcloud_ ? pointcloud_sub_.takeData() : nullptr; const auto acc_ptr = acc_sub_.takeData(); - if (!ego_odom_ptr || (!objects_ptr && (!use_pointcloud_ || !pointcloud_ptr)) || !acc_ptr) { + const bool can_detect_obstacles = objects_ptr || pointcloud_ptr; + if (!ego_odom_ptr || !can_detect_obstacles || !acc_ptr) { return; } diff --git a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp index 0413d4bbf3529..c531c4fefac95 100644 --- a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp @@ -25,6 +25,8 @@ #include #include +#include + namespace { StopSpeedExceeded createStopSpeedExceededMsg( @@ -104,6 +106,78 @@ VelocityFactorArray makeVelocityFactorArray( return velocity_factor_array; } +DiagnosticArray makeEmptyStopReasonDiagnosticArray(const rclcpp::Time & current_time) +{ + // Create status + DiagnosticStatus status; + status.level = status.OK; + status.name = "obstacle_cruise_planner"; + diagnostic_msgs::msg::KeyValue key_value; + { + // Decision + key_value.key = "decision"; + key_value.value = "none"; + status.values.push_back(key_value); + } + // create array + DiagnosticArray diagnostics; + diagnostics.header.stamp = current_time; + diagnostics.header.frame_id = "map"; + diagnostics.status.push_back(status); + return diagnostics; +} + +DiagnosticArray makeStopReasonDiagnosticArray( + const PlannerData & planner_data, const geometry_msgs::msg::Pose & stop_pose, + const StopObstacle & stop_obstacle) +{ + // Create status + DiagnosticStatus status; + status.level = status.OK; + status.name = "obstacle_cruise_planner"; + diagnostic_msgs::msg::KeyValue key_value; + { + // Decision + key_value.key = "decision"; + key_value.value = "stop"; + status.values.push_back(key_value); + } + + { // Stop info + key_value.key = "stop_position"; + const auto & p = stop_pose.position; + key_value.value = + "{" + std::to_string(p.x) + ", " + std::to_string(p.y) + ", " + std::to_string(p.z) + "}"; + status.values.push_back(key_value); + key_value.key = "stop_orientation"; + const auto & o = stop_pose.orientation; + key_value.value = "{" + std::to_string(o.w) + ", " + std::to_string(o.x) + ", " + + std::to_string(o.y) + ", " + std::to_string(o.z) + "}"; + status.values.push_back(key_value); + const auto dist_to_stop_pose = autoware::motion_utils::calcSignedArcLength( + planner_data.traj_points, planner_data.ego_pose.position, stop_pose.position); + key_value.key = "distance_to_stop_pose"; + key_value.value = std::to_string(dist_to_stop_pose); + status.values.push_back(key_value); + } + + { + // Obstacle info + const auto & p = stop_obstacle.collision_point; + key_value.key = "collision_point"; + key_value.value = + "{" + std::to_string(p.x) + ", " + std::to_string(p.y) + ", " + std::to_string(p.z) + "}"; + status.values.push_back(key_value); + } + + // create array + DiagnosticArray diagnostics; + diagnostics.header.stamp = planner_data.current_time; + diagnostics.header.frame_id = "map"; + diagnostics.status.push_back(status); + return diagnostics; +} + double calcMinimumDistanceToStop( const double initial_vel, const double max_acc, const double min_acc) { @@ -245,7 +319,7 @@ std::vector PlannerInterface::generateStopTrajectory( if (stop_obstacles.empty()) { stop_reasons_pub_->publish(makeEmptyStopReasonArray(planner_data.current_time)); velocity_factors_pub_->publish(makeVelocityFactorArray(planner_data.current_time)); - + diagnostics_pub_->publish(makeEmptyStopReasonDiagnosticArray(planner_data.current_time)); // delete marker const auto markers = autoware::motion_utils::createDeletedStopVirtualWallMarker(planner_data.current_time, 0); @@ -400,9 +474,11 @@ std::vector PlannerInterface::generateStopTrajectory( const auto stop_pose = output_traj_points.at(*zero_vel_idx).pose; const auto stop_reasons_msg = makeStopReasonArray(planner_data, stop_pose, *determined_stop_obstacle); + const auto stop_reason_diagnostic_array = + makeStopReasonDiagnosticArray(planner_data, stop_pose, *determined_stop_obstacle); stop_reasons_pub_->publish(stop_reasons_msg); velocity_factors_pub_->publish(makeVelocityFactorArray(planner_data.current_time, stop_pose)); - + diagnostics_pub_->publish(stop_reason_diagnostic_array); // Publish if ego vehicle will over run against the stop point with a limit acceleration const bool will_over_run = determined_zero_vel_dist.value() > From 5a0776c6db3d93ca1b0a188e9864329e20a2d184 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 16:14:01 +0900 Subject: [PATCH 057/306] fix(diagnostic_graph_aggregator): fix shadowFunction (#7838) * fix(diagnostic_graph_aggregator): fix shadowFunction Signed-off-by: Ryuta Kambe * feat: modify variable name Signed-off-by: Takagi, Isamu --------- Signed-off-by: Ryuta Kambe Signed-off-by: Takagi, Isamu Co-authored-by: Takagi, Isamu --- .../src/common/graph/config.cpp | 4 ++-- .../src/common/graph/data.cpp | 12 ++++++------ .../src/common/graph/units.cpp | 8 ++++---- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/system/diagnostic_graph_aggregator/src/common/graph/config.cpp b/system/diagnostic_graph_aggregator/src/common/graph/config.cpp index 553c21b5ff4d7..496c95722002a 100644 --- a/system/diagnostic_graph_aggregator/src/common/graph/config.cpp +++ b/system/diagnostic_graph_aggregator/src/common/graph/config.cpp @@ -68,10 +68,10 @@ FileLoader::FileLoader(const PathConfig * path) } TreeData tree = TreeData::Load(path->resolved); - const auto paths = tree.optional("files").children("files"); + const auto files = tree.optional("files").children("files"); const auto edits = tree.optional("edits").children("edits"); const auto units = tree.optional("units").children("units"); - for (const auto & data : paths) create_path_config(data); + for (const auto & data : files) create_path_config(data); for (const auto & data : edits) create_edit_config(data); for (const auto & data : units) create_unit_config(data); } diff --git a/system/diagnostic_graph_aggregator/src/common/graph/data.cpp b/system/diagnostic_graph_aggregator/src/common/graph/data.cpp index ff186098c32e3..2a4aef7e39c1f 100644 --- a/system/diagnostic_graph_aggregator/src/common/graph/data.cpp +++ b/system/diagnostic_graph_aggregator/src/common/graph/data.cpp @@ -35,25 +35,25 @@ TreeData::TreeData(const YAML::Node & yaml, const TreePath & path) : path_(path) TreeData::Item TreeData::required(const std::string & name) { // TODO(Takagi, Isamu): check map type. - const auto path = path_.field(name); + const auto tree_path = path_.field(name); if (!yaml_[name]) { - throw FieldNotFound(path); + throw FieldNotFound(tree_path); } const auto data = yaml_[name]; yaml_.remove(name); - return TreeData(data, path); + return TreeData(data, tree_path); } TreeData::Item TreeData::optional(const std::string & name) { // TODO(Takagi, Isamu): check map type. - const auto path = path_.field(name); + const auto tree_path = path_.field(name); if (!yaml_[name]) { - return TreeData(YAML::Node(YAML::NodeType::Undefined), path); + return TreeData(YAML::Node(YAML::NodeType::Undefined), tree_path); } const auto data = yaml_[name]; yaml_.remove(name); - return TreeData(data, path); + return TreeData(data, tree_path); } bool TreeData::is_valid() const diff --git a/system/diagnostic_graph_aggregator/src/common/graph/units.cpp b/system/diagnostic_graph_aggregator/src/common/graph/units.cpp index da801ae078e6c..d9cbdbaa64400 100644 --- a/system/diagnostic_graph_aggregator/src/common/graph/units.cpp +++ b/system/diagnostic_graph_aggregator/src/common/graph/units.cpp @@ -84,12 +84,12 @@ void NodeUnit::initialize_status() LeafUnit::LeafUnit(const UnitLoader & unit) : BaseUnit(unit) { - const auto node = unit.data().required("node").text(); - const auto name = unit.data().required("name").text(); - const auto sep = node.empty() ? "" : ": "; + const auto diag_node = unit.data().required("node").text(); + const auto diag_name = unit.data().required("name").text(); + const auto sep = diag_node.empty() ? "" : ": "; struct_.path = unit.path(); - struct_.name = node + sep + name; + struct_.name = diag_node + sep + diag_name; status_.level = DiagnosticStatus::STALE; } From be5d5e96f4419f14c8d6a636710c6993f502972e Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 4 Jul 2024 16:48:46 +0900 Subject: [PATCH 058/306] feat(safety_check): filter safety check targe objects by yaw deviation between pose and lane (#7828) * fix(safety_check): filter by yaw deviation to check object belongs to lane Signed-off-by: satoshi-ota * fix(static_obstacle_avoidance): check yaw only when the object is moving Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../src/scene.cpp | 4 +- .../src/util.cpp | 4 +- .../path_safety_checker/objects_filtering.hpp | 18 ++++++-- .../path_safety_checker/objects_filtering.cpp | 43 +++++++++++++++---- .../pull_out_planner_base.hpp | 5 ++- .../src/start_planner_module.cpp | 5 ++- .../src/utils.cpp | 34 +++++++++------ 7 files changed, 80 insertions(+), 33 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp index 856681d538db0..303d7449e40dd 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp @@ -151,8 +151,8 @@ void AvoidanceByLaneChange::fillAvoidanceTargetObjects( const auto [object_within_target_lane, object_outside_target_lane] = utils::path_safety_checker::separateObjectsByLanelets( *planner_data_->dynamic_object, data.current_lanelets, - [](const auto & obj, const auto & lane) { - return utils::path_safety_checker::isPolygonOverlapLanelet(obj, lane); + [](const auto & obj, const auto & lane, const auto yaw_threshold) { + return utils::path_safety_checker::isPolygonOverlapLanelet(obj, lane, yaw_threshold); }); // Assume that the maximum allocation for data.other object is the sum of diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/util.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/util.cpp index d6f03f79186d8..b74cdbc6a569b 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/util.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/util.cpp @@ -145,8 +145,8 @@ PredictedObjects extractObjectsInExpandedPullOverLanes( route_handler, left_side, backward_distance, forward_distance, bound_offset); const auto [objects_in_lanes, others] = utils::path_safety_checker::separateObjectsByLanelets( - objects, lanes, [](const auto & obj, const auto & lanelet) { - return utils::path_safety_checker::isPolygonOverlapLanelet(obj, lanelet); + objects, lanes, [](const auto & obj, const auto & lanelet, const auto yaw_threshold) { + return utils::path_safety_checker::isPolygonOverlapLanelet(obj, lanelet, yaw_threshold); }); return objects_in_lanes; diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp index 4fd6fce325f49..f73f989174b54 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/utils/path_safety_checker/objects_filtering.hpp @@ -56,18 +56,24 @@ using tier4_planning_msgs::msg::PathPointWithLaneId; * * @param objects The predicted objects to filter. * @param lanelet + * @param yaw_threshold * @return result. */ -bool isCentroidWithinLanelet(const PredictedObject & object, const lanelet::ConstLanelet & lanelet); +bool isCentroidWithinLanelet( + const PredictedObject & object, const lanelet::ConstLanelet & lanelet, + const double yaw_threshold); /** * @brief Filters objects based on object polygon overlapping with lanelet. * * @param objects The predicted objects to filter. * @param lanelet + * @param yaw_threshold * @return result. */ -bool isPolygonOverlapLanelet(const PredictedObject & object, const lanelet::ConstLanelet & lanelet); +bool isPolygonOverlapLanelet( + const PredictedObject & object, const lanelet::ConstLanelet & lanelet, + const double yaw_threshold); bool isPolygonOverlapLanelet( const PredictedObject & object, const autoware::universe_utils::Polygon2d & lanelet_polygon); @@ -168,7 +174,9 @@ void filterObjectsByClass( */ std::pair, std::vector> separateObjectIndicesByLanelets( const PredictedObjects & objects, const lanelet::ConstLanelets & target_lanelets, - const std::function & condition); + const std::function & + condition, + const double yaw_threshold = M_PI); /** * @brief Separate the objects into two part based on whether the object is within lanelet. @@ -176,7 +184,9 @@ std::pair, std::vector> separateObjectIndicesByLanel */ std::pair separateObjectsByLanelets( const PredictedObjects & objects, const lanelet::ConstLanelets & target_lanelets, - const std::function & condition); + const std::function & + condition, + const double yaw_threshold = M_PI); /** * @brief Get the predicted path from an object. diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_safety_checker/objects_filtering.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_safety_checker/objects_filtering.cpp index 469be03eb905c..95a498b7b8475 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_safety_checker/objects_filtering.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_safety_checker/objects_filtering.cpp @@ -57,15 +57,34 @@ bool is_within_circle( namespace autoware::behavior_path_planner::utils::path_safety_checker { -bool isCentroidWithinLanelet(const PredictedObject & object, const lanelet::ConstLanelet & lanelet) +bool isCentroidWithinLanelet( + const PredictedObject & object, const lanelet::ConstLanelet & lanelet, const double yaw_threshold) { - const auto & object_pos = object.kinematics.initial_pose_with_covariance.pose.position; - lanelet::BasicPoint2d object_centroid(object_pos.x, object_pos.y); - return boost::geometry::within(object_centroid, lanelet.polygon2d().basicPolygon()); + const auto & object_pose = object.kinematics.initial_pose_with_covariance.pose; + const auto closest_pose = lanelet::utils::getClosestCenterPose(lanelet, object_pose.position); + if ( + std::abs(autoware::universe_utils::calcYawDeviation(closest_pose, object_pose)) > + yaw_threshold) { + return false; + } + + return boost::geometry::within( + lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object_pose.position)) + .basicPoint(), + lanelet.polygon2d().basicPolygon()); } -bool isPolygonOverlapLanelet(const PredictedObject & object, const lanelet::ConstLanelet & lanelet) +bool isPolygonOverlapLanelet( + const PredictedObject & object, const lanelet::ConstLanelet & lanelet, const double yaw_threshold) { + const auto & object_pose = object.kinematics.initial_pose_with_covariance.pose; + const auto closest_pose = lanelet::utils::getClosestCenterPose(lanelet, object_pose.position); + if ( + std::abs(autoware::universe_utils::calcYawDeviation(closest_pose, object_pose)) > + yaw_threshold) { + return false; + } + const auto lanelet_polygon = utils::toPolygon2d(lanelet); return isPolygonOverlapLanelet(object, lanelet_polygon); } @@ -174,7 +193,9 @@ void filterObjectsByClass( std::pair, std::vector> separateObjectIndicesByLanelets( const PredictedObjects & objects, const lanelet::ConstLanelets & target_lanelets, - const std::function & condition) + const std::function & + condition, + const double yaw_threshold) { if (target_lanelets.empty()) { return {}; @@ -184,7 +205,9 @@ std::pair, std::vector> separateObjectIndicesByLanel std::vector other_indices; for (size_t i = 0; i < objects.objects.size(); i++) { - const auto filter = [&](const auto & llt) { return condition(objects.objects.at(i), llt); }; + const auto filter = [&](const auto & llt) { + return condition(objects.objects.at(i), llt, yaw_threshold); + }; const auto found = std::find_if(target_lanelets.begin(), target_lanelets.end(), filter); if (found != target_lanelets.end()) { target_indices.push_back(i); @@ -198,13 +221,15 @@ std::pair, std::vector> separateObjectIndicesByLanel std::pair separateObjectsByLanelets( const PredictedObjects & objects, const lanelet::ConstLanelets & target_lanelets, - const std::function & condition) + const std::function & + condition, + const double yaw_threshold) { PredictedObjects target_objects; PredictedObjects other_objects; const auto [target_indices, other_indices] = - separateObjectIndicesByLanelets(objects, target_lanelets, condition); + separateObjectIndicesByLanelets(objects, target_lanelets, condition, yaw_threshold); target_objects.objects.reserve(target_indices.size()); other_objects.objects.reserve(other_indices.size()); diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/pull_out_planner_base.hpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/pull_out_planner_base.hpp index 7b30745057743..03b6e13cb2d3e 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/pull_out_planner_base.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/pull_out_planner_base.hpp @@ -74,8 +74,9 @@ class PullOutPlannerBase *dynamic_objects, parameters_.th_moving_object_velocity); auto [pull_out_lane_stop_objects, others] = utils::path_safety_checker::separateObjectsByLanelets( - stop_objects, pull_out_lanes, [](const auto & obj, const auto & lane) { - return utils::path_safety_checker::isPolygonOverlapLanelet(obj, lane); + stop_objects, pull_out_lanes, + [](const auto & obj, const auto & lane, const auto yaw_threshold) { + return utils::path_safety_checker::isPolygonOverlapLanelet(obj, lane, yaw_threshold); }); utils::path_safety_checker::filterObjectsByClass( pull_out_lane_stop_objects, parameters_.object_types_to_check_for_path_generation); diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp index 00b6649851f87..9b94d3505c405 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp @@ -1217,8 +1217,9 @@ PredictedObjects StartPlannerModule::filterStopObjectsInPullOutLanes( // filter for objects located in pull out lanes and moving at a speed below the threshold auto [stop_objects_in_pull_out_lanes, others] = utils::path_safety_checker::separateObjectsByLanelets( - stop_objects, pull_out_lanes, [](const auto & obj, const auto & lane) { - return utils::path_safety_checker::isPolygonOverlapLanelet(obj, lane); + stop_objects, pull_out_lanes, + [](const auto & obj, const auto & lane, const auto yaw_threshold) { + return utils::path_safety_checker::isPolygonOverlapLanelet(obj, lane, yaw_threshold); }); const auto path = planner_data_->route_handler->getCenterLinePath( diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp index 03fe48c6ab441..4272d0eaf9c5d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp @@ -2064,21 +2064,35 @@ std::vector getSafetyCheckTargetObjects( return {}; } + const auto is_moving = [¶meters](const auto & object) { + const auto & object_twist = object.kinematics.initial_twist_with_covariance.twist; + const auto object_vel_norm = std::hypot(object_twist.linear.x, object_twist.linear.y); + const auto object_parameter = + parameters->object_parameters.at(utils::getHighestProbLabel(object.classification)); + return object_vel_norm > object_parameter.moving_speed_threshold; + }; + + const auto filter = + [&is_moving](const auto & object, const auto & lanelet, [[maybe_unused]] const auto unused) { + // filter by yaw deviation only when the object is moving because the head direction is not + // reliable while object is stopping. + const auto yaw_threshold = is_moving(object) ? M_PI_2 : M_PI; + return utils::path_safety_checker::isCentroidWithinLanelet(object, lanelet, yaw_threshold); + }; + // check right lanes if (check_right_lanes) { const auto check_lanes = getAdjacentLane(closest_lanelet, planner_data, p, true); if (p->check_other_object) { const auto [targets, others] = utils::path_safety_checker::separateObjectsByLanelets( - to_predicted_objects(data.other_objects), check_lanes, - utils::path_safety_checker::isCentroidWithinLanelet); + to_predicted_objects(data.other_objects), check_lanes, filter); append(targets); } if (p->check_unavoidable_object) { const auto [targets, others] = utils::path_safety_checker::separateObjectsByLanelets( - to_predicted_objects(unavoidable_objects), check_lanes, - utils::path_safety_checker::isCentroidWithinLanelet); + to_predicted_objects(unavoidable_objects), check_lanes, filter); append(targets); } @@ -2092,15 +2106,13 @@ std::vector getSafetyCheckTargetObjects( if (p->check_other_object) { const auto [targets, others] = utils::path_safety_checker::separateObjectsByLanelets( - to_predicted_objects(data.other_objects), check_lanes, - utils::path_safety_checker::isCentroidWithinLanelet); + to_predicted_objects(data.other_objects), check_lanes, filter); append(targets); } if (p->check_unavoidable_object) { const auto [targets, others] = utils::path_safety_checker::separateObjectsByLanelets( - to_predicted_objects(unavoidable_objects), check_lanes, - utils::path_safety_checker::isCentroidWithinLanelet); + to_predicted_objects(unavoidable_objects), check_lanes, filter); append(targets); } @@ -2114,15 +2126,13 @@ std::vector getSafetyCheckTargetObjects( if (p->check_other_object) { const auto [targets, others] = utils::path_safety_checker::separateObjectsByLanelets( - to_predicted_objects(data.other_objects), check_lanes, - utils::path_safety_checker::isCentroidWithinLanelet); + to_predicted_objects(data.other_objects), check_lanes, filter); append(targets); } if (p->check_unavoidable_object) { const auto [targets, others] = utils::path_safety_checker::separateObjectsByLanelets( - to_predicted_objects(unavoidable_objects), check_lanes, - utils::path_safety_checker::isCentroidWithinLanelet); + to_predicted_objects(unavoidable_objects), check_lanes, filter); append(targets); } From 2e2aef9db8bca063cce87c537b99ae7c1dd73aeb Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Thu, 4 Jul 2024 16:50:34 +0900 Subject: [PATCH 059/306] feat(goal_planner): prioritize pull over path by curvature (#7791) * feat(goal_planner): prioritize pull over path by curvature Signed-off-by: kosuke55 fix Signed-off-by: kosuke55 * add comment * pre commit Signed-off-by: kosuke55 --------- Signed-off-by: kosuke55 Co-authored-by: Mamoru Sobue --- .../config/goal_planner.param.yaml | 1 + .../goal_planner_parameters.hpp | 1 + .../pull_over_planner_base.hpp | 2 + .../src/goal_planner_module.cpp | 121 +++++++++++++----- .../src/manager.cpp | 1 + 5 files changed, 92 insertions(+), 34 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/config/goal_planner.param.yaml b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/config/goal_planner.param.yaml index 53e06631a81d5..e6f84e7eece0c 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/config/goal_planner.param.yaml +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/config/goal_planner.param.yaml @@ -22,6 +22,7 @@ lateral_offset_interval: 0.25 ignore_distance_from_lane_start: 0.0 margin_from_boundary: 0.5 + high_curvature_threshold: 0.1 # occupancy grid map occupancy_grid: diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/goal_planner_parameters.hpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/goal_planner_parameters.hpp index bdb267ce223d3..6a10c0fb183f6 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/goal_planner_parameters.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/goal_planner_parameters.hpp @@ -60,6 +60,7 @@ struct GoalPlannerParameters double lateral_offset_interval{0.0}; double ignore_distance_from_lane_start{0.0}; double margin_from_boundary{0.0}; + double high_curvature_threshold{0.0}; // occupancy grid map bool use_occupancy_grid_for_goal_search{false}; diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner_base.hpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner_base.hpp index d2ba416c7fa90..05385600926f5 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner_base.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/include/autoware/behavior_path_goal_planner_module/pull_over_planner_base.hpp @@ -52,6 +52,7 @@ struct PullOverPath size_t goal_id{}; size_t id{}; bool decided_velocity{false}; + double max_curvature{0.0}; // max curvature of the parking path PathWithLaneId getFullPath() const { @@ -72,6 +73,7 @@ struct PullOverPath return path; } + // path from the pull over start pose to the end pose PathWithLaneId getParkingPath() const { const PathWithLaneId full_path = getFullPath(); diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp index 00510a8725e32..1a711adb133eb 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/goal_planner_module.cpp @@ -293,9 +293,18 @@ void GoalPlannerModule::onTimer() planner->setPlannerData(local_planner_data); planner->setPreviousModuleOutput(previous_module_output); auto pull_over_path = planner->plan(goal_candidate.goal_pose); - if (pull_over_path) { + if (pull_over_path && pull_over_path->getParkingPath().points.size() >= 3) { pull_over_path->goal_id = goal_candidate.id; pull_over_path->id = path_candidates.size(); + + // calculate absolute maximum curvature of parking path(start pose to end pose) for path + // priority + const std::vector curvatures = + autoware::motion_utils::calcCurvature(pull_over_path->getParkingPath().points); + pull_over_path->max_curvature = std::abs(*std::max_element( + curvatures.begin(), curvatures.end(), + [](const double & a, const double & b) { return std::abs(a) < std::abs(b); })); + path_candidates.push_back(*pull_over_path); // calculate closest pull over start pose for stop path const double start_arc_length = @@ -817,23 +826,37 @@ std::vector GoalPlannerModule::sortPullOverPathCandidatesByGoalPri const auto debugPrintPathPriority = [this]( const std::vector & sorted_pull_over_path_candidates, - const std::map & goal_id_to_index, - const std::optional> & path_id_to_margin_map_opt = std::nullopt, - const std::optional> & isSoftMarginOpt = - std::nullopt) { + const std::map & goal_id_to_index, const GoalCandidates & goal_candidates, + const std::map & path_id_to_margin_map, + const std::function & isSoftMargin, + const std::function & isHighCurvature) { std::stringstream ss; - ss << "\n---------------------- path priority ----------------------\n"; - for (const auto & path : sorted_pull_over_path_candidates) { - // clang-format off - ss << "path_type: " << magic_enum::enum_name(path.type) - << ", path_id: " << path.id - << ", goal_id: " << path.goal_id - << ", goal_priority:" << goal_id_to_index.at(path.goal_id); - // clang-format on - if (path_id_to_margin_map_opt && isSoftMarginOpt) { - ss << ", margin: " << path_id_to_margin_map_opt->at(path.id) - << ((*isSoftMarginOpt)(path) ? " (soft)" : " (hard)"); + + // unsafe goal and it's priority are not visible as debug marker in rviz, + // so exclude unsafe goal from goal_priority + std::map goal_id_and_priority; + { + int priority = 0; + for (const auto & goal_candidate : goal_candidates) { + goal_id_and_priority[goal_candidate.id] = goal_candidate.is_safe ? priority++ : -1; } + } + + ss << "\n---------------------- path priority ----------------------\n"; + for (size_t i = 0; i < sorted_pull_over_path_candidates.size(); ++i) { + const auto & path = sorted_pull_over_path_candidates[i]; + + // goal_index is same to goal priority including unsafe goal + const int goal_index = static_cast(goal_id_to_index.at(path.goal_id)); + const bool is_safe_goal = goal_candidates[goal_index].is_safe; + const int goal_priority = goal_id_and_priority[path.goal_id]; + + ss << "path_priority: " << i << ", path_type: " << magic_enum::enum_name(path.type) + << ", path_id: " << path.id << ", goal_id: " << path.goal_id + << ", goal_priority: " << (is_safe_goal ? std::to_string(goal_priority) : "unsafe") + << ", margin: " << path_id_to_margin_map.at(path.id) + << (isSoftMargin(path) ? " (soft)" : " (hard)") << ", curvature: " << path.max_curvature + << (isHighCurvature(path) ? " (high)" : " (low)"); ss << "\n"; } ss << "-----------------------------------------------------------\n"; @@ -844,6 +867,7 @@ std::vector GoalPlannerModule::sortPullOverPathCandidatesByGoalPri const auto & soft_margins = parameters_->object_recognition_collision_check_soft_margins; const auto & hard_margins = parameters_->object_recognition_collision_check_hard_margins; + // (1) Sort pull_over_path_candidates based on the order in goal_candidates // Create a map of goal_id to its index in goal_candidates std::map goal_id_to_index; for (size_t i = 0; i < goal_candidates.size(); ++i) { @@ -868,6 +892,7 @@ std::vector GoalPlannerModule::sortPullOverPathCandidatesByGoalPri // if object recognition is enabled, sort by collision check margin if (parameters_->use_object_recognition) { + // (2) Sort by collision check margins const std::vector margins = std::invoke([&]() { std::vector combined_margins = soft_margins; combined_margins.insert(combined_margins.end(), hard_margins.begin(), hard_margins.end()); @@ -914,23 +939,45 @@ std::vector GoalPlannerModule::sortPullOverPathCandidatesByGoalPri return path_id_to_margin_map[a.id] > path_id_to_margin_map[b.id]; }); - // Sort pull_over_path_candidates based on the order in efficient_path_order - if (parameters_->path_priority == "efficient_path") { - const auto isSoftMargin = [&](const PullOverPath & path) -> bool { - const double margin = path_id_to_margin_map[path.id]; - return std::any_of( - soft_margins.begin(), soft_margins.end(), - [margin](const double soft_margin) { return std::abs(margin - soft_margin) < 0.01; }); - }; - const auto isSameHardMargin = [&](const PullOverPath & a, const PullOverPath & b) -> bool { - return !isSoftMargin(a) && !isSoftMargin(b) && - std::abs(path_id_to_margin_map[a.id] - path_id_to_margin_map[b.id]) < 0.01; - }; + // (3) Sort by curvature + // If the curvature is less than the threshold, prioritize the path. + const auto isHighCurvature = [&](const PullOverPath & path) -> bool { + return path.max_curvature >= parameters_->high_curvature_threshold; + }; + const auto isSoftMargin = [&](const PullOverPath & path) -> bool { + const double margin = path_id_to_margin_map[path.id]; + return std::any_of( + soft_margins.begin(), soft_margins.end(), + [margin](const double soft_margin) { return std::abs(margin - soft_margin) < 0.01; }); + }; + const auto isSameHardMargin = [&](const PullOverPath & a, const PullOverPath & b) -> bool { + return !isSoftMargin(a) && !isSoftMargin(b) && + std::abs(path_id_to_margin_map[a.id] - path_id_to_margin_map[b.id]) < 0.01; + }; + + // NOTE: this is just partition sort based on curvature threshold within each sub partitions + std::stable_sort( + sorted_pull_over_path_candidates.begin(), sorted_pull_over_path_candidates.end(), + [&](const PullOverPath & a, const PullOverPath & b) { + // if both are soft margin or both are same hard margin, prioritize the path with lower + // curvature. + if ((isSoftMargin(a) && isSoftMargin(b)) || isSameHardMargin(a, b)) { + return !isHighCurvature(a) && isHighCurvature(b); + } + // otherwise, keep the order based on the margin. + return false; + }); + + // (4) Sort pull_over_path_candidates based on the order in efficient_path_order keeping the + // collision check margin and curvature priority. + if (parameters_->path_priority == "efficient_path") { std::stable_sort( sorted_pull_over_path_candidates.begin(), sorted_pull_over_path_candidates.end(), [&](const auto & a, const auto & b) { - // if both are soft margin or both are same hard margin, sort by planner priority + // if any of following conditions are met, sort by path type priority + // - both are soft margin + // - both are same hard margin if ((isSoftMargin(a) && isSoftMargin(b)) || isSameHardMargin(a, b)) { return comparePathTypePriority(a, b); } @@ -938,18 +985,24 @@ std::vector GoalPlannerModule::sortPullOverPathCandidatesByGoalPri return false; }); - // debug print path priority: sorted by efficient_path_order and collision check margin + // debug print path priority sorted by + // - efficient_path_order + // - collision check margin + // - curvature debugPrintPathPriority( - sorted_pull_over_path_candidates, goal_id_to_index, path_id_to_margin_map, isSoftMargin); + sorted_pull_over_path_candidates, goal_id_to_index, goal_candidates, path_id_to_margin_map, + isSoftMargin, isHighCurvature); } } else { - // Sort pull_over_path_candidates based on the order in efficient_path_order + /** + * NOTE: use_object_recognition=false is not recommended. This option will be deprecated in the + * future. sort by curvature is not implemented yet. + * Sort pull_over_path_candidates based on the order in efficient_path_order + */ if (parameters_->path_priority == "efficient_path") { std::stable_sort( sorted_pull_over_path_candidates.begin(), sorted_pull_over_path_candidates.end(), [&](const auto & a, const auto & b) { return comparePathTypePriority(a, b); }); - // debug print path priority: sorted by efficient_path_order and collision check margin - debugPrintPathPriority(sorted_pull_over_path_candidates, goal_id_to_index); } } diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/manager.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/manager.cpp index b079db9babf31..b86bbbca7d98b 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/manager.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/manager.cpp @@ -61,6 +61,7 @@ void GoalPlannerModuleManager::init(rclcpp::Node * node) p.ignore_distance_from_lane_start = node->declare_parameter(ns + "ignore_distance_from_lane_start"); p.margin_from_boundary = node->declare_parameter(ns + "margin_from_boundary"); + p.high_curvature_threshold = node->declare_parameter(ns + "high_curvature_threshold"); const std::string parking_policy_name = node->declare_parameter(ns + "parking_policy"); From 837855255d913437315d53545554545ab26c481c Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 4 Jul 2024 17:07:23 +0900 Subject: [PATCH 060/306] fix(static_obstacle_avoidance): fix issues in target object filtering logic (#7830) * fix(static_obstacle_avoidance): check if object is inside/outside by its position point instead of its polygon Signed-off-by: satoshi-ota * refactor(static_obstacle_avoidance): add getter functions Signed-off-by: satoshi-ota * fix(static_obstacle_avoidance): check next lane without route if the current lane is not preferred Signed-off-by: satoshi-ota * fix(static_obstacle_avoidance): fix parked vehicle check Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../data_structs.hpp | 4 + .../src/debug.cpp | 10 +-- .../src/shift_line_generator.cpp | 16 ++-- .../src/utils.cpp | 84 ++++++++++--------- 4 files changed, 59 insertions(+), 55 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp index d02b39047e71c..49599004e0952 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp @@ -352,6 +352,10 @@ struct ObjectData // avoidance target { } + Pose getPose() const { return object.kinematics.initial_pose_with_covariance.pose; } + + Point getPosition() const { return object.kinematics.initial_pose_with_covariance.pose.position; } + PredictedObject object; // object behavior. diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp index 9c771224e89eb..eb0d903f2e398 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp @@ -64,7 +64,7 @@ MarkerArray createObjectsCubeMarkerArray( } marker.id = uuidToInt32(object.object.object_id); - marker.pose = object.object.kinematics.initial_pose_with_covariance.pose; + marker.pose = object.getPose(); msg.markers.push_back(marker); } @@ -80,10 +80,8 @@ MarkerArray createObjectPolygonMarkerArray(const ObjectDataArray & objects, std: "map", rclcpp::Clock{RCL_ROS_TIME}.now(), ns, 0L, Marker::LINE_STRIP, createMarkerScale(0.1, 0.0, 0.0), createMarkerColor(1.0, 1.0, 1.0, 0.999)); - const auto pos = object.object.kinematics.initial_pose_with_covariance.pose.position; - for (const auto & p : object.envelope_poly.outer()) { - marker.points.push_back(createPoint(p.x(), p.y(), pos.z)); + marker.points.push_back(createPoint(p.x(), p.y(), object.getPosition().z)); } marker.points.push_back(marker.points.front()); @@ -142,7 +140,7 @@ MarkerArray createObjectInfoMarkerArray( for (const auto & object : objects) { if (verbose) { marker.id = uuidToInt32(object.object.object_id); - marker.pose = object.object.kinematics.initial_pose_with_covariance.pose; + marker.pose = object.getPose(); std::ostringstream string_stream; string_stream << std::fixed << std::setprecision(2) << std::boolalpha; string_stream << "ratio:" << object.shiftable_ratio << " [-]\n" @@ -162,7 +160,7 @@ MarkerArray createObjectInfoMarkerArray( { marker.id = uuidToInt32(object.object.object_id); - marker.pose = object.object.kinematics.initial_pose_with_covariance.pose; + marker.pose = object.getPose(); marker.pose.position.z += 2.0; std::ostringstream string_stream; string_stream << magic_enum::enum_name(object.info) << (object.is_parked ? "(PARKED)" : ""); diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp index a171ae9161041..c3a67eb074d73 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp @@ -165,9 +165,9 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline( } // the avoidance path is already approved - const auto & object_pos = object.object.kinematics.initial_pose_with_covariance.pose.position; - const auto is_approved = (helper_->getShift(object_pos) > 0.0 && is_object_on_right) || - (helper_->getShift(object_pos) < 0.0 && !is_object_on_right); + const auto is_approved = + (helper_->getShift(object.getPosition()) > 0.0 && is_object_on_right) || + (helper_->getShift(object.getPosition()) < 0.0 && !is_object_on_right); if (is_approved) { return std::make_pair(desire_shift_length, avoidance_distance); } @@ -363,9 +363,8 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline( if (is_return_shift_to_goal) { return true; } - const auto & object_pos = o.object.kinematics.initial_pose_with_covariance.pose.position; const bool has_object_near_goal = - autoware::universe_utils::calcDistance2d(goal_pose.position, object_pos) < + autoware::universe_utils::calcDistance2d(goal_pose.position, o.getPosition()) < parameters_->object_check_goal_distance; return has_object_near_goal; }(); @@ -1027,8 +1026,7 @@ AvoidLineArray ShiftLineGenerator::addReturnShiftLine( const auto has_object_near_goal = std::any_of(data.target_objects.begin(), data.target_objects.end(), [&](const auto & o) { return autoware::universe_utils::calcDistance2d( - data_->route_handler->getGoalPose().position, - o.object.kinematics.initial_pose_with_covariance.pose.position) < + data_->route_handler->getGoalPose().position, o.getPosition()) < parameters_->object_check_goal_distance; }); if (has_object_near_goal) { @@ -1097,9 +1095,7 @@ AvoidLineArray ShiftLineGenerator::addReturnShiftLine( if (utils::isAllowedGoalModification(data_->route_handler)) { const bool has_last_shift_near_goal = std::any_of(data.target_objects.begin(), data.target_objects.end(), [&](const auto & o) { - return autoware::universe_utils::calcDistance2d( - last_sl.end.position, - o.object.kinematics.initial_pose_with_covariance.pose.position) < + return autoware::universe_utils::calcDistance2d(last_sl.end.position, o.getPosition()) < parameters_->object_check_goal_distance; }); if (has_last_shift_near_goal) { diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp index 4272d0eaf9c5d..608dc209e4fce 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp @@ -293,8 +293,7 @@ bool isWithinCrosswalk( { using Point = boost::geometry::model::d2::point_xy; - const auto & p = object.object.kinematics.initial_pose_with_covariance.pose.position; - const Point p_object{p.x, p.y}; + const Point p_object{object.getPosition().x, object.getPosition().y}; // get conflicting crosswalk crosswalk constexpr int PEDESTRIAN_GRAPH_ID = 1; @@ -335,14 +334,16 @@ bool isWithinIntersection( route_handler->getLaneletMapPtr()->polygonLayer.get(std::atoi(area_id.c_str())); return boost::geometry::within( - object_polygon, utils::toPolygon2d(lanelet::utils::to2D(polygon.basicPolygon()))); + lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object.getPosition())) + .basicPoint(), + lanelet::utils::to2D(polygon.basicPolygon())); } bool isOnEgoLane(const ObjectData & object, const std::shared_ptr & route_handler) { - const auto & object_pos = object.object.kinematics.initial_pose_with_covariance.pose.position; if (boost::geometry::within( - lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object_pos)).basicPoint(), + lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object.getPosition())) + .basicPoint(), object.overhang_lanelet.polygon2d().basicPolygon())) { return true; } @@ -351,7 +352,8 @@ bool isOnEgoLane(const ObjectData & object, const std::shared_ptr lanelet::ConstLanelets prev_lanelet; if (route_handler->getPreviousLaneletsWithinRoute(object.overhang_lanelet, &prev_lanelet)) { if (boost::geometry::within( - lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object_pos)).basicPoint(), + lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object.getPosition())) + .basicPoint(), prev_lanelet.front().polygon2d().basicPolygon())) { return true; } @@ -361,10 +363,20 @@ bool isOnEgoLane(const ObjectData & object, const std::shared_ptr lanelet::ConstLanelet next_lanelet; if (route_handler->getNextLaneletWithinRoute(object.overhang_lanelet, &next_lanelet)) { if (boost::geometry::within( - lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object_pos)).basicPoint(), + lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object.getPosition())) + .basicPoint(), next_lanelet.polygon2d().basicPolygon())) { return true; } + } else { + for (const auto & lane : route_handler->getNextLanelets(object.overhang_lanelet)) { + if (boost::geometry::within( + lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object.getPosition())) + .basicPoint(), + lane.polygon2d().basicPolygon())) { + return true; + } + } } return false; @@ -372,20 +384,18 @@ bool isOnEgoLane(const ObjectData & object, const std::shared_ptr bool isParallelToEgoLane(const ObjectData & object, const double threshold) { - const auto & object_pose = object.object.kinematics.initial_pose_with_covariance.pose; const auto closest_pose = - lanelet::utils::getClosestCenterPose(object.overhang_lanelet, object_pose.position); - const auto yaw_deviation = std::abs(calcYawDeviation(closest_pose, object_pose)); + lanelet::utils::getClosestCenterPose(object.overhang_lanelet, object.getPosition()); + const auto yaw_deviation = std::abs(calcYawDeviation(closest_pose, object.getPose())); return yaw_deviation < threshold || yaw_deviation > M_PI - threshold; } bool isMergingToEgoLane(const ObjectData & object) { - const auto & object_pose = object.object.kinematics.initial_pose_with_covariance.pose; const auto closest_pose = - lanelet::utils::getClosestCenterPose(object.overhang_lanelet, object_pose.position); - const auto yaw_deviation = calcYawDeviation(closest_pose, object_pose); + lanelet::utils::getClosestCenterPose(object.overhang_lanelet, object.getPosition()); + const auto yaw_deviation = calcYawDeviation(closest_pose, object.getPose()); if (isOnRight(object)) { if (yaw_deviation < 0.0 && -1.0 * M_PI_2 < yaw_deviation) { @@ -422,9 +432,8 @@ bool isParkedVehicle( return false; } - const auto & object_pos = object.object.kinematics.initial_pose_with_covariance.pose.position; const auto centerline_pos = - lanelet::utils::getClosestCenterPose(object.overhang_lanelet, object_pos).position; + lanelet::utils::getClosestCenterPose(object.overhang_lanelet, object.getPosition()).position; bool is_left_side_parked_vehicle = false; if (!isOnRight(object)) { @@ -442,7 +451,8 @@ bool isParkedVehicle( return same_direction_lane; } - return static_cast(opposite_lanes.front().invert()); + return static_cast( + route_handler->getMostRightLanelet(opposite_lanes.front()).invert()); }(); const auto center_to_left_boundary = distance2d( @@ -457,7 +467,7 @@ bool isParkedVehicle( if (sub_type == "road_shoulder") { // assuming it's parked vehicle if its CoG is within road shoulder lanelet. if (boost::geometry::within( - to2D(toLaneletPoint(object_pos)).basicPoint(), + to2D(toLaneletPoint(object.getPosition())).basicPoint(), most_left_lanelet.polygon2d().basicPolygon())) { return true; } @@ -468,7 +478,7 @@ bool isParkedVehicle( const auto arc_coordinates = toArcCoordinates( to2D(object.overhang_lanelet.centerline().basicLineString()), - to2D(toLaneletPoint(object_pos)).basicPoint()); + to2D(toLaneletPoint(object.getPosition())).basicPoint()); object.shiftable_ratio = arc_coordinates.distance / object_shiftable_distance; is_left_side_parked_vehicle = object.shiftable_ratio > parameters->object_check_shiftable_ratio; @@ -490,7 +500,8 @@ bool isParkedVehicle( return same_direction_lane; } - return static_cast(opposite_lanes.front().invert()); + return static_cast( + route_handler->getMostLeftLanelet(opposite_lanes.front()).invert()); }(); const auto center_to_right_boundary = distance2d( @@ -505,7 +516,7 @@ bool isParkedVehicle( if (sub_type == "road_shoulder") { // assuming it's parked vehicle if its CoG is within road shoulder lanelet. if (boost::geometry::within( - to2D(toLaneletPoint(object_pos)).basicPoint(), + to2D(toLaneletPoint(object.getPosition())).basicPoint(), most_right_lanelet.polygon2d().basicPolygon())) { return true; } @@ -516,7 +527,7 @@ bool isParkedVehicle( const auto arc_coordinates = toArcCoordinates( to2D(object.overhang_lanelet.centerline().basicLineString()), - to2D(toLaneletPoint(object_pos)).basicPoint()); + to2D(toLaneletPoint(object.getPosition())).basicPoint()); object.shiftable_ratio = -1.0 * arc_coordinates.distance / object_shiftable_distance; is_right_side_parked_vehicle = @@ -527,9 +538,8 @@ bool isParkedVehicle( return false; } - const auto & object_pose = object.object.kinematics.initial_pose_with_covariance.pose; object.to_centerline = - lanelet::utils::getArcCoordinates(data.current_lanelets, object_pose).distance; + lanelet::utils::getArcCoordinates(data.current_lanelets, object.getPose()).distance; if (std::abs(object.to_centerline) < parameters->threshold_distance_object_is_on_center) { return false; } @@ -544,13 +554,13 @@ bool isCloseToStopFactor( { const auto & rh = planner_data->route_handler; const auto & ego_pose = planner_data->self_odometry->pose.pose; - const auto & object_pose = object.object.kinematics.initial_pose_with_covariance.pose; // force avoidance for stopped vehicle bool is_close_to_stop_factor = false; // check traffic light - const auto to_traffic_light = getDistanceToNextTrafficLight(object_pose, data.extend_lanelets); + const auto to_traffic_light = + getDistanceToNextTrafficLight(object.getPose(), data.extend_lanelets); { is_close_to_stop_factor = to_traffic_light < parameters->object_ignore_section_traffic_light_in_front_distance; @@ -792,9 +802,8 @@ bool isSatisfiedWithNonVehicleCondition( } // Object is on center line -> ignore. - const auto & object_pose = object.object.kinematics.initial_pose_with_covariance.pose; object.to_centerline = - lanelet::utils::getArcCoordinates(data.current_lanelets, object_pose).distance; + lanelet::utils::getArcCoordinates(data.current_lanelets, object.getPose()).distance; if (std::abs(object.to_centerline) < parameters->threshold_distance_object_is_on_center) { object.info = ObjectInfo::TOO_NEAR_TO_CENTERLINE; return false; @@ -844,9 +853,8 @@ bool isSatisfiedWithVehicleCondition( return false; } - const auto & current_pose = object.object.kinematics.initial_pose_with_covariance.pose; const auto is_moving_distance_longer_than_threshold = - calcDistance2d(object.init_pose, current_pose) > + calcDistance2d(object.init_pose, object.getPose()) > parameters->distance_threshold_for_ambiguous_vehicle; if (is_moving_distance_longer_than_threshold) { object.info = ObjectInfo::AMBIGUOUS_STOPPED_VEHICLE; @@ -944,9 +952,8 @@ double getRoadShoulderDistance( using autoware::universe_utils::Point2d; using lanelet::utils::to2D; - const auto & object_pose = object.object.kinematics.initial_pose_with_covariance.pose; const auto object_closest_index = - autoware::motion_utils::findNearestIndex(data.reference_path.points, object_pose.position); + autoware::motion_utils::findNearestIndex(data.reference_path.points, object.getPosition()); const auto object_closest_pose = data.reference_path.points.at(object_closest_index).point.pose; const auto rh = planner_data->route_handler; @@ -957,7 +964,7 @@ double getRoadShoulderDistance( std::vector> intersects; for (const auto & p1 : object.overhang_points) { const auto centerline_pose = - lanelet::utils::getClosestCenterPose(object.overhang_lanelet, object_pose.position); + lanelet::utils::getClosestCenterPose(object.overhang_lanelet, object.getPosition()); const auto p_tmp = geometry_msgs::build().position(p1.second).orientation(centerline_pose.orientation); @@ -1326,8 +1333,7 @@ std::vector generateObstaclePolygonsForDrivableArea( object.avoid_margin.value() - object_parameter.envelope_buffer_margin - vehicle_width / 2.0; const auto obj_poly = autoware::universe_utils::expandPolygon(object.envelope_poly, diff_poly_buffer); - obstacles_for_drivable_area.push_back( - {object.object.kinematics.initial_pose_with_covariance.pose, obj_poly, !isOnRight(object)}); + obstacles_for_drivable_area.push_back({object.getPose(), obj_poly, !isOnRight(object)}); } return obstacles_for_drivable_area; } @@ -1495,7 +1501,7 @@ void fillObjectMovingTime( object_data.last_stop = now; object_data.move_time = 0.0; if (is_new_object) { - object_data.init_pose = object_data.object.kinematics.initial_pose_with_covariance.pose; + object_data.init_pose = object_data.getPose(); object_data.stop_time = 0.0; object_data.last_move = now; stopped_objects.push_back(object_data); @@ -1510,7 +1516,7 @@ void fillObjectMovingTime( } if (is_new_object) { - object_data.init_pose = object_data.object.kinematics.initial_pose_with_covariance.pose; + object_data.init_pose = object_data.getPose(); object_data.move_time = std::numeric_limits::infinity(); object_data.stop_time = 0.0; object_data.last_move = now; @@ -1520,7 +1526,7 @@ void fillObjectMovingTime( object_data.last_stop = same_id_obj->last_stop; object_data.move_time = (now - same_id_obj->last_stop).seconds(); object_data.stop_time = 0.0; - object_data.init_pose = object_data.object.kinematics.initial_pose_with_covariance.pose; + object_data.init_pose = object_data.getPose(); if (object_data.move_time > object_parameter.moving_time_threshold) { stopped_objects.erase(same_id_obj); @@ -1617,9 +1623,9 @@ void updateRegisteredObject( } constexpr auto POS_THR = 1.5; - const auto r_pos = registered_object.object.kinematics.initial_pose_with_covariance.pose; + const auto r_pos = registered_object.getPose(); const auto similar_pos_obj = std::find_if(n.begin(), n.end(), [&](const auto & o) { - return calcDistance2d(r_pos, o.object.kinematics.initial_pose_with_covariance.pose) < POS_THR; + return calcDistance2d(r_pos, o.getPose()) < POS_THR; }); // same id object is not detected, but object is found around registered. update registered. From 683c1b53ddadd9567cd61b180fe584005434adb7 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Thu, 4 Jul 2024 17:26:46 +0900 Subject: [PATCH 061/306] refactor(occupancy_grid_map_outlier_filter)!: fix namespace and directory structure (#7748) chore: update namespace and file structure Signed-off-by: Taekjin LEE --- .../ground_segmentation.launch.py | 2 +- .../CMakeLists.txt | 13 ++++++------- .../occupancy_grid_map_outlier_filter/package.xml | 9 --------- ...=> occupancy_grid_map_outlier_filter_node.cpp} | 15 ++++++++------- .../occupancy_grid_map_outlier_filter_node.hpp} | 12 ++++++------ 5 files changed, 21 insertions(+), 30 deletions(-) rename perception/occupancy_grid_map_outlier_filter/src/{occupancy_grid_map_outlier_filter_nodelet.cpp => occupancy_grid_map_outlier_filter_node.cpp} (97%) rename perception/occupancy_grid_map_outlier_filter/{include/occupancy_grid_map_outlier_filter/occupancy_grid_map_outlier_filter_nodelet.hpp => src/occupancy_grid_map_outlier_filter_node.hpp} (91%) diff --git a/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py b/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py index 684ecee757aad..ba0b058d8c00b 100644 --- a/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py +++ b/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py @@ -332,7 +332,7 @@ def create_time_series_outlier_filter_components(input_topic, output_topic): components.append( ComposableNode( package="occupancy_grid_map_outlier_filter", - plugin="occupancy_grid_map_outlier_filter::OccupancyGridMapOutlierFilterComponent", + plugin="autoware::occupancy_grid_map_outlier_filter::OccupancyGridMapOutlierFilterComponent", name="occupancy_grid_based_outlier_filter", remappings=[ ("~/input/occupancy_grid_map", "/perception/occupancy_grid_map/map"), diff --git a/perception/occupancy_grid_map_outlier_filter/CMakeLists.txt b/perception/occupancy_grid_map_outlier_filter/CMakeLists.txt index 724e5a3354396..9754cea458577 100644 --- a/perception/occupancy_grid_map_outlier_filter/CMakeLists.txt +++ b/perception/occupancy_grid_map_outlier_filter/CMakeLists.txt @@ -8,7 +8,6 @@ find_package(OpenCV REQUIRED) find_package(Eigen3 REQUIRED) find_package(Boost REQUIRED) find_package(PCL REQUIRED) -find_package(pcl_conversions REQUIRED) find_package(OpenMP) ament_auto_find_build_dependencies() @@ -22,26 +21,26 @@ include_directories( ${GRID_MAP_INCLUDE_DIR} ) -ament_auto_add_library(occupancy_grid_map_outlier_filter SHARED - src/occupancy_grid_map_outlier_filter_nodelet.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/occupancy_grid_map_outlier_filter_node.cpp ) -target_link_libraries(occupancy_grid_map_outlier_filter +target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES} ${OpenCV_LIBRARIES} ${PCL_LIBRARIES} ) if(OPENMP_FOUND) - set_target_properties(occupancy_grid_map_outlier_filter PROPERTIES + set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} LINK_FLAGS ${OpenMP_CXX_FLAGS} ) endif() # -- Occupancy Grid Map Outlier Filter -- -rclcpp_components_register_node(occupancy_grid_map_outlier_filter - PLUGIN "occupancy_grid_map_outlier_filter::OccupancyGridMapOutlierFilterComponent" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::occupancy_grid_map_outlier_filter::OccupancyGridMapOutlierFilterComponent" EXECUTABLE occupancy_grid_map_outlier_filter_node) ament_auto_package(INSTALL_TO_SHARE) diff --git a/perception/occupancy_grid_map_outlier_filter/package.xml b/perception/occupancy_grid_map_outlier_filter/package.xml index 23d08db09553a..e92e5edb4b084 100644 --- a/perception/occupancy_grid_map_outlier_filter/package.xml +++ b/perception/occupancy_grid_map_outlier_filter/package.xml @@ -19,27 +19,18 @@ autoware_lanelet2_extension autoware_universe_utils - autoware_vehicle_msgs - diagnostic_updater - image_transport - libopencv-dev libpcl-all-dev message_filters nav_msgs pcl_conversions - pcl_msgs pcl_ros pointcloud_preprocessor rclcpp rclcpp_components sensor_msgs std_msgs - tf2 tf2_eigen - tf2_geometry_msgs tf2_ros - tier4_debug_msgs - tier4_pcl_extensions ament_lint_auto autoware_lint_common diff --git a/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_nodelet.cpp b/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.cpp similarity index 97% rename from perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_nodelet.cpp rename to perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.cpp index f62a3f7e689fc..1536db8610b76 100644 --- a/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_nodelet.cpp +++ b/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.cpp @@ -12,11 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "occupancy_grid_map_outlier_filter/occupancy_grid_map_outlier_filter_nodelet.hpp" +#include "occupancy_grid_map_outlier_filter_node.hpp" + +#include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/ros/debug_publisher.hpp" +#include "autoware/universe_utils/system/stop_watch.hpp" -#include -#include -#include #include #include @@ -101,7 +102,7 @@ boost::optional getCost( } // namespace -namespace occupancy_grid_map_outlier_filter +namespace autoware::occupancy_grid_map_outlier_filter { RadiusSearch2dFilter::RadiusSearch2dFilter(rclcpp::Node & node) { @@ -489,8 +490,8 @@ void OccupancyGridMapOutlierFilterComponent::Debugger::transformToBaseLink( transformPointcloud(ros_input, *(node_.tf2_), node_.base_link_frame_, output); } -} // namespace occupancy_grid_map_outlier_filter +} // namespace autoware::occupancy_grid_map_outlier_filter #include RCLCPP_COMPONENTS_REGISTER_NODE( - occupancy_grid_map_outlier_filter::OccupancyGridMapOutlierFilterComponent) + autoware::occupancy_grid_map_outlier_filter::OccupancyGridMapOutlierFilterComponent) diff --git a/perception/occupancy_grid_map_outlier_filter/include/occupancy_grid_map_outlier_filter/occupancy_grid_map_outlier_filter_nodelet.hpp b/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.hpp similarity index 91% rename from perception/occupancy_grid_map_outlier_filter/include/occupancy_grid_map_outlier_filter/occupancy_grid_map_outlier_filter_nodelet.hpp rename to perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.hpp index ae6d7a34fca2a..e9402d6416cbd 100644 --- a/perception/occupancy_grid_map_outlier_filter/include/occupancy_grid_map_outlier_filter/occupancy_grid_map_outlier_filter_nodelet.hpp +++ b/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OCCUPANCY_GRID_MAP_OUTLIER_FILTER__OCCUPANCY_GRID_MAP_OUTLIER_FILTER_NODELET_HPP_ -#define OCCUPANCY_GRID_MAP_OUTLIER_FILTER__OCCUPANCY_GRID_MAP_OUTLIER_FILTER_NODELET_HPP_ +#ifndef OCCUPANCY_GRID_MAP_OUTLIER_FILTER_NODE_HPP_ +#define OCCUPANCY_GRID_MAP_OUTLIER_FILTER_NODE_HPP_ +#include "autoware/universe_utils/ros/published_time_publisher.hpp" #include "pointcloud_preprocessor/filter.hpp" -#include #include #include @@ -40,7 +40,7 @@ #include #include -namespace occupancy_grid_map_outlier_filter +namespace autoware::occupancy_grid_map_outlier_filter { using geometry_msgs::msg::Pose; using nav_msgs::msg::OccupancyGrid; @@ -129,6 +129,6 @@ class OccupancyGridMapOutlierFilterComponent : public rclcpp::Node std::string base_link_frame_; int cost_threshold_; }; -} // namespace occupancy_grid_map_outlier_filter +} // namespace autoware::occupancy_grid_map_outlier_filter -#endif // OCCUPANCY_GRID_MAP_OUTLIER_FILTER__OCCUPANCY_GRID_MAP_OUTLIER_FILTER_NODELET_HPP_ +#endif // OCCUPANCY_GRID_MAP_OUTLIER_FILTER_NODE_HPP_ From 64f471ccba57bb4b8c8013737c5636845af1bd5a Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Thu, 4 Jul 2024 17:54:36 +0900 Subject: [PATCH 062/306] chore(motion_velocity_planner): add new codeowners (#7757) Signed-off-by: Maxime CLEMENT --- .github/CODEOWNERS | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 1f25372c14d71..8f947ce2d2a13 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -192,10 +192,10 @@ planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_modu planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/** mamoru.sobue@tier4.jp maxime.clement@tier4.jp -planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/** maxime.clement@tier4.jp +planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/** maxime.clement@tier4.jp daniel.sanchez@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp -planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp +planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp daniel.sanchez@tier4.jp alqudah.mohammad@tier4.jp +planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp daniel.sanchez@tier4.jp alqudah.mohammad@tier4.jp planning/sampling_based_planner/autoware_bezier_sampler/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_frenet_planner/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_path_sampler/** maxime.clement@tier4.jp From a39ad525da6a0a7b552bd293fda73444d7cd83f2 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Thu, 4 Jul 2024 18:02:00 +0900 Subject: [PATCH 063/306] refactor(detected_object_feature_remover)!: fix namespace and directory structure (#7739) refactor: namespace fix, rename file names, move header to src refactor: update PLUGIN namespace in CMakeLists.txt Signed-off-by: Taekjin LEE --- .../CMakeLists.txt | 10 +++++----- .../detected_object_feature_remover.launch.xml | 2 +- ...=> detected_object_feature_remover_node.cpp} | 9 +++++---- .../detected_object_feature_remover_node.hpp} | 17 +++++++++-------- 4 files changed, 20 insertions(+), 18 deletions(-) rename perception/detected_object_feature_remover/src/{detected_object_feature_remover.cpp => detected_object_feature_remover_node.cpp} (86%) rename perception/detected_object_feature_remover/{include/detected_object_feature_remover/detected_object_feature_remover.hpp => src/detected_object_feature_remover_node.hpp} (71%) diff --git a/perception/detected_object_feature_remover/CMakeLists.txt b/perception/detected_object_feature_remover/CMakeLists.txt index b3dd3c35e19d5..e0ff35d75e64a 100644 --- a/perception/detected_object_feature_remover/CMakeLists.txt +++ b/perception/detected_object_feature_remover/CMakeLists.txt @@ -4,13 +4,13 @@ project(detected_object_feature_remover) find_package(autoware_cmake REQUIRED) autoware_package() -ament_auto_add_library(detected_object_feature_remover_node SHARED - src/detected_object_feature_remover.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/detected_object_feature_remover_node.cpp ) -rclcpp_components_register_node(detected_object_feature_remover_node - PLUGIN "detected_object_feature_remover::DetectedObjectFeatureRemover" - EXECUTABLE detected_object_feature_remover +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::detected_object_feature_remover::DetectedObjectFeatureRemover" + EXECUTABLE detected_object_feature_remover_node ) ament_auto_package( diff --git a/perception/detected_object_feature_remover/launch/detected_object_feature_remover.launch.xml b/perception/detected_object_feature_remover/launch/detected_object_feature_remover.launch.xml index 2e7fa4605d656..d86d75ce297be 100644 --- a/perception/detected_object_feature_remover/launch/detected_object_feature_remover.launch.xml +++ b/perception/detected_object_feature_remover/launch/detected_object_feature_remover.launch.xml @@ -3,7 +3,7 @@ - + diff --git a/perception/detected_object_feature_remover/src/detected_object_feature_remover.cpp b/perception/detected_object_feature_remover/src/detected_object_feature_remover_node.cpp similarity index 86% rename from perception/detected_object_feature_remover/src/detected_object_feature_remover.cpp rename to perception/detected_object_feature_remover/src/detected_object_feature_remover_node.cpp index 3fe9e6fde8683..47fe67de9d9aa 100644 --- a/perception/detected_object_feature_remover/src/detected_object_feature_remover.cpp +++ b/perception/detected_object_feature_remover/src/detected_object_feature_remover_node.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include "detected_object_feature_remover_node.hpp" -namespace detected_object_feature_remover +namespace autoware::detected_object_feature_remover { DetectedObjectFeatureRemover::DetectedObjectFeatureRemover(const rclcpp::NodeOptions & node_options) : Node("detected_object_feature_remover", node_options) @@ -45,7 +45,8 @@ void DetectedObjectFeatureRemover::convert( } } -} // namespace detected_object_feature_remover +} // namespace autoware::detected_object_feature_remover #include -RCLCPP_COMPONENTS_REGISTER_NODE(detected_object_feature_remover::DetectedObjectFeatureRemover) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::detected_object_feature_remover::DetectedObjectFeatureRemover) diff --git a/perception/detected_object_feature_remover/include/detected_object_feature_remover/detected_object_feature_remover.hpp b/perception/detected_object_feature_remover/src/detected_object_feature_remover_node.hpp similarity index 71% rename from perception/detected_object_feature_remover/include/detected_object_feature_remover/detected_object_feature_remover.hpp rename to perception/detected_object_feature_remover/src/detected_object_feature_remover_node.hpp index 02e4c9c3ca29a..2877d38259f83 100644 --- a/perception/detected_object_feature_remover/include/detected_object_feature_remover/detected_object_feature_remover.hpp +++ b/perception/detected_object_feature_remover/src/detected_object_feature_remover_node.hpp @@ -12,18 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DETECTED_OBJECT_FEATURE_REMOVER__DETECTED_OBJECT_FEATURE_REMOVER_HPP_ -#define DETECTED_OBJECT_FEATURE_REMOVER__DETECTED_OBJECT_FEATURE_REMOVER_HPP_ +#ifndef DETECTED_OBJECT_FEATURE_REMOVER_NODE_HPP_ +#define DETECTED_OBJECT_FEATURE_REMOVER_NODE_HPP_ + +#include "autoware/universe_utils/ros/published_time_publisher.hpp" -#include #include -#include -#include +#include "autoware_perception_msgs/msg/detected_objects.hpp" +#include "tier4_perception_msgs/msg/detected_objects_with_feature.hpp" #include -namespace detected_object_feature_remover +namespace autoware::detected_object_feature_remover { using autoware_perception_msgs::msg::DetectedObjects; using tier4_perception_msgs::msg::DetectedObjectsWithFeature; @@ -41,6 +42,6 @@ class DetectedObjectFeatureRemover : public rclcpp::Node void convert(const DetectedObjectsWithFeature & objs_with_feature, DetectedObjects & objs); }; -} // namespace detected_object_feature_remover +} // namespace autoware::detected_object_feature_remover -#endif // DETECTED_OBJECT_FEATURE_REMOVER__DETECTED_OBJECT_FEATURE_REMOVER_HPP_ +#endif // DETECTED_OBJECT_FEATURE_REMOVER_NODE_HPP_ From 1145391ade9f0386c0803579a0c6ab7f968cbd6a Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Thu, 4 Jul 2024 18:02:21 +0900 Subject: [PATCH 064/306] fix(motion_velocity_planner): use the slowdown velocity (instead of 0) (#7840) Signed-off-by: Maxime CLEMENT --- .../autoware_motion_velocity_planner_node/src/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp index 5e6f9619e75c2..f0100f58074ba 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp @@ -325,7 +325,7 @@ void MotionVelocityPlannerNode::insert_slowdown( autoware::motion_utils::insertTargetPoint(to_seg_idx, slowdown_interval.to, trajectory.points); if (from_insert_idx && to_insert_idx) { for (auto idx = *from_insert_idx; idx <= *to_insert_idx; ++idx) - trajectory.points[idx].longitudinal_velocity_mps = 0.0; + trajectory.points[idx].longitudinal_velocity_mps = slowdown_interval.velocity; } else { RCLCPP_WARN(get_logger(), "Failed to insert slowdown point"); } From 76835977fd1514e435bb0164ac5305032c961439 Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Thu, 4 Jul 2024 19:14:11 +0900 Subject: [PATCH 065/306] refactor(map_height_fitter): apply static analysis (#7837) * refactor based on linter Signed-off-by: a-maumau * style(pre-commit): autofix * Update map/map_height_fitter/src/map_height_fitter.cpp fix to used angle brackets for including Co-authored-by: Takagi, Isamu <43976882+isamu-takagi@users.noreply.github.com> Signed-off-by: a-maumau * style(pre-commit): autofix --------- Signed-off-by: a-maumau Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Takagi, Isamu <43976882+isamu-takagi@users.noreply.github.com> --- .../map_height_fitter/map_height_fitter.hpp | 6 +++++- map/map_height_fitter/src/map_height_fitter.cpp | 14 +++++++------- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/map/map_height_fitter/include/map_height_fitter/map_height_fitter.hpp b/map/map_height_fitter/include/map_height_fitter/map_height_fitter.hpp index 95ca3f3dfbea0..46baffa270108 100644 --- a/map/map_height_fitter/include/map_height_fitter/map_height_fitter.hpp +++ b/map/map_height_fitter/include/map_height_fitter/map_height_fitter.hpp @@ -31,8 +31,12 @@ using geometry_msgs::msg::Point; class MapHeightFitter final { public: - MapHeightFitter(rclcpp::Node * node); + explicit MapHeightFitter(rclcpp::Node * node); ~MapHeightFitter(); + MapHeightFitter(const MapHeightFitter &) = delete; + MapHeightFitter & operator=(const MapHeightFitter &) = delete; + MapHeightFitter(MapHeightFitter &&) = delete; + MapHeightFitter & operator=(MapHeightFitter &&) = delete; std::optional fit(const Point & position, const std::string & frame); private: diff --git a/map/map_height_fitter/src/map_height_fitter.cpp b/map/map_height_fitter/src/map_height_fitter.cpp index d6a20a636733d..c9e199ad88422 100644 --- a/map/map_height_fitter/src/map_height_fitter.cpp +++ b/map/map_height_fitter/src/map_height_fitter.cpp @@ -29,6 +29,8 @@ #include #include +#include + namespace map_height_fitter { @@ -107,7 +109,7 @@ MapHeightFitter::Impl::Impl(rclcpp::Node * node) : tf2_listener_(tf2_buffer_), n void MapHeightFitter::Impl::on_pcd_map(const sensor_msgs::msg::PointCloud2::ConstSharedPtr msg) { map_frame_ = msg->header.frame_id; - map_cloud_ = pcl::PointCloud::Ptr(new pcl::PointCloud); + map_cloud_ = std::make_shared>(); pcl::fromROSMsg(*msg, *map_cloud_); } @@ -125,8 +127,8 @@ bool MapHeightFitter::Impl::get_partial_point_cloud_map(const Point & point) } const auto req = std::make_shared(); - req->area.center_x = point.x; - req->area.center_y = point.y; + req->area.center_x = static_cast(point.x); + req->area.center_y = static_cast(point.y); req->area.radius = 50; RCLCPP_DEBUG(logger, "Send request to map_loader"); @@ -157,7 +159,7 @@ bool MapHeightFitter::Impl::get_partial_point_cloud_map(const Point & point) } } map_frame_ = res->header.frame_id; - map_cloud_ = pcl::PointCloud::Ptr(new pcl::PointCloud); + map_cloud_ = std::make_shared>(); pcl::fromROSMsg(pcd_msg, *map_cloud_); return true; } @@ -276,9 +278,7 @@ MapHeightFitter::MapHeightFitter(rclcpp::Node * node) impl_ = std::make_unique(node); } -MapHeightFitter::~MapHeightFitter() -{ -} +MapHeightFitter::~MapHeightFitter() = default; std::optional MapHeightFitter::fit(const Point & position, const std::string & frame) { From 391971fb4980086dbaee0ce4db1f110e80255bfc Mon Sep 17 00:00:00 2001 From: Go Sakayori Date: Thu, 4 Jul 2024 19:44:01 +0900 Subject: [PATCH 066/306] refactor(velocity_smoother): change method to take data for external velocity (#7810) refactor external velocity Signed-off-by: Go Sakayori --- planning/autoware_velocity_smoother/src/node.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/planning/autoware_velocity_smoother/src/node.cpp b/planning/autoware_velocity_smoother/src/node.cpp index 5c66f5b906bba..b881b68798cdc 100644 --- a/planning/autoware_velocity_smoother/src/node.cpp +++ b/planning/autoware_velocity_smoother/src/node.cpp @@ -422,7 +422,7 @@ void VelocitySmootherNode::onCurrentTrajectory(const Trajectory::ConstSharedPtr // receive data current_odometry_ptr_ = sub_current_odometry_.takeData(); current_acceleration_ptr_ = sub_current_acceleration_.takeData(); - external_velocity_limit_ptr_ = sub_external_velocity_limit_.takeData(); + external_velocity_limit_ptr_ = sub_external_velocity_limit_.takeNewData(); const auto operation_mode_ptr = sub_operation_mode_.takeData(); if (operation_mode_ptr) { operation_mode_ = *operation_mode_ptr; @@ -455,9 +455,6 @@ void VelocitySmootherNode::onCurrentTrajectory(const Trajectory::ConstSharedPtr calcExternalVelocityLimit(); updateDataForExternalVelocityLimit(); - // ignore current external velocity limit next time - external_velocity_limit_ptr_ = nullptr; - // For negative velocity handling, multiple -1 to velocity if it is for reverse. // NOTE: this process must be in the beginning of the process is_reverse_ = isReverse(input_points); From 2e6b570710ad062b86740cec2d78f1528e362151 Mon Sep 17 00:00:00 2001 From: "Takagi, Isamu" <43976882+isamu-takagi@users.noreply.github.com> Date: Thu, 4 Jul 2024 19:50:43 +0900 Subject: [PATCH 067/306] fix: adapi vehicle topic qos (#7847) Signed-off-by: Takagi, Isamu --- .../include/autoware_ad_api_specs/vehicle.hpp | 2 +- system/default_ad_api/src/utils/topics.hpp | 44 +++++++++++++++++++ system/default_ad_api/src/vehicle_door.cpp | 11 ++++- system/default_ad_api/src/vehicle_door.hpp | 4 ++ 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 system/default_ad_api/src/utils/topics.hpp diff --git a/common/autoware_ad_api_specs/include/autoware_ad_api_specs/vehicle.hpp b/common/autoware_ad_api_specs/include/autoware_ad_api_specs/vehicle.hpp index 4175a04aadadc..e1220bf2c5879 100644 --- a/common/autoware_ad_api_specs/include/autoware_ad_api_specs/vehicle.hpp +++ b/common/autoware_ad_api_specs/include/autoware_ad_api_specs/vehicle.hpp @@ -32,7 +32,7 @@ struct VehicleKinematics using Message = autoware_adapi_v1_msgs::msg::VehicleKinematics; static constexpr char name[] = "/api/vehicle/kinematics"; static constexpr size_t depth = 1; - static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE; + static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_BEST_EFFORT; static constexpr auto durability = RMW_QOS_POLICY_DURABILITY_VOLATILE; }; diff --git a/system/default_ad_api/src/utils/topics.hpp b/system/default_ad_api/src/utils/topics.hpp new file mode 100644 index 0000000000000..97d91b33c9fa3 --- /dev/null +++ b/system/default_ad_api/src/utils/topics.hpp @@ -0,0 +1,44 @@ +// Copyright 2024 The Autoware Contributors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef UTILS__TOPICS_HPP_ +#define UTILS__TOPICS_HPP_ + +#include +#include + +#include + +namespace default_ad_api::utils +{ + +template +MsgT ignore_stamp(MsgT msg) +{ + msg.stamp = rclcpp::Time(0, 0); + return msg; +}; + +template +void notify(PubT & pub, std::optional & prev, const MsgT & curr, FuncT && ignore) +{ + if (!prev || ignore(*prev) != ignore(curr)) { + prev = curr; + pub->publish(curr); + } +} + +} // namespace default_ad_api::utils + +#endif // UTILS__TOPICS_HPP_ diff --git a/system/default_ad_api/src/vehicle_door.cpp b/system/default_ad_api/src/vehicle_door.cpp index b94921c8fd41b..e37e91bdda8e2 100644 --- a/system/default_ad_api/src/vehicle_door.cpp +++ b/system/default_ad_api/src/vehicle_door.cpp @@ -14,6 +14,8 @@ #include "vehicle_door.hpp" +#include "utils/topics.hpp" + namespace default_ad_api { @@ -24,7 +26,14 @@ VehicleDoorNode::VehicleDoorNode(const rclcpp::NodeOptions & options) group_cli_ = create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive); adaptor.relay_service(cli_command_, srv_command_, group_cli_, 3.0); adaptor.relay_service(cli_layout_, srv_layout_, group_cli_, 3.0); - adaptor.relay_message(pub_status_, sub_status_); + adaptor.init_pub(pub_status_); + adaptor.init_sub(sub_status_, this, &VehicleDoorNode::on_status); +} + +void VehicleDoorNode::on_status(vehicle_interface::DoorStatus::Message::ConstSharedPtr msg) +{ + utils::notify( + pub_status_, status_, *msg, utils::ignore_stamp); } } // namespace default_ad_api diff --git a/system/default_ad_api/src/vehicle_door.hpp b/system/default_ad_api/src/vehicle_door.hpp index 92e8918afcdf8..e83e0a164d3f6 100644 --- a/system/default_ad_api/src/vehicle_door.hpp +++ b/system/default_ad_api/src/vehicle_door.hpp @@ -19,6 +19,8 @@ #include #include +#include + // This file should be included after messages. #include "utils/types.hpp" @@ -31,6 +33,7 @@ class VehicleDoorNode : public rclcpp::Node explicit VehicleDoorNode(const rclcpp::NodeOptions & options); private: + void on_status(vehicle_interface::DoorStatus::Message::ConstSharedPtr msg); rclcpp::CallbackGroup::SharedPtr group_cli_; Srv srv_command_; Srv srv_layout_; @@ -38,6 +41,7 @@ class VehicleDoorNode : public rclcpp::Node Cli cli_command_; Cli cli_layout_; Sub sub_status_; + std::optional status_; }; } // namespace default_ad_api From 1875a80e2f8f75bacf3b6cd6f49c407c3d19ded9 Mon Sep 17 00:00:00 2001 From: Go Sakayori Date: Thu, 4 Jul 2024 20:55:01 +0900 Subject: [PATCH 068/306] refactor(static_avoidance): modify getAdjacentLane function (#7843) add getLeftOppositeLanelers in getAdjacentLane function Signed-off-by: Go Sakayori --- .../src/utils.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp index 608dc209e4fce..d454a97400e78 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp @@ -1993,6 +1993,17 @@ lanelet::ConstLanelets getAdjacentLane( lanes.push_back(opt_right_lane.value()); } + const auto left_opposite_lanes = rh->getLeftOppositeLanelets(lane); + if (!is_right_shift && !left_opposite_lanes.empty()) { + lanes.push_back(left_opposite_lanes.front()); + + for (const auto & prev_lane : rh->getPreviousLanelets(left_opposite_lanes.front())) { + if (!exist(prev_lane.id())) { + lanes.push_back(prev_lane); + } + } + } + const auto right_opposite_lanes = rh->getRightOppositeLanelets(lane); if (is_right_shift && !right_opposite_lanes.empty()) { lanes.push_back(right_opposite_lanes.front()); From da47c3ca2e1b4336e65e30766d898fb7ca73551d Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 23:01:15 +0900 Subject: [PATCH 069/306] fix(pointcloud_preprocessor): fix preprocessorErrorDirective (#7786) * fix(pointcloud_preprocessor): fix preprocessorErrorDirective Signed-off-by: Ryuta Kambe * fix postfixOperator Signed-off-by: Ryuta Kambe * remove unnecessary count() and contains() Signed-off-by: Ryuta Kambe * restore bitness macros Signed-off-by: veqcc * remove operator= Signed-off-by: veqcc * remove addOrFree function Signed-off-by: veqcc * add cppcheck suppression Signed-off-by: Ryuta Kambe * add cppcheck suppression Signed-off-by: Ryuta Kambe * add cppcheck suppression Signed-off-by: Ryuta Kambe * add cppcheck suppression Signed-off-by: Ryuta Kambe --------- Signed-off-by: Ryuta Kambe Signed-off-by: veqcc --- .../src/downsample_filter/robin_hood.h | 78 +++---------------- 1 file changed, 9 insertions(+), 69 deletions(-) diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/robin_hood.h b/sensing/pointcloud_preprocessor/src/downsample_filter/robin_hood.h index 02fa183e5d017..edbc55c8158c0 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/robin_hood.h +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/robin_hood.h @@ -126,10 +126,8 @@ static Counts & counts() // bitness #if SIZE_MAX == UINT32_MAX #define ROBIN_HOOD_PRIVATE_DEFINITION_BITNESS() 32 -#elif SIZE_MAX == UINT64_MAX -#define ROBIN_HOOD_PRIVATE_DEFINITION_BITNESS() 64 #else -#error Unsupported bitness +#define ROBIN_HOOD_PRIVATE_DEFINITION_BITNESS() 64 #endif // endianess @@ -165,12 +163,13 @@ static Counts & counts() #endif #include #pragma intrinsic(ROBIN_HOOD(BITSCANFORWARD)) -#define ROBIN_HOOD_COUNT_TRAILING_ZEROES(x) \ - [](size_t mask) noexcept -> int { \ - unsigned long index; \ // NOLINT - return ROBIN_HOOD(BITSCANFORWARD)(&index, mask) ? static_cast(index) \ - : ROBIN_HOOD(BITNESS); \ - }(x) +#define ROBIN_HOOD_COUNT_TRAILING_ZEROES(x) \ + [](size_t mask) noexcept -> int { \ + unsigned long index; \ // NOLINT + return ROBIN_HOOD(BITSCANFORWARD)(&index, mask) \ // NOLINT + ? static_cast(index) \ // cppcheck-suppress syntaxError + : ROBIN_HOOD(BITNESS); \ // cppcheck-suppress syntaxError + }(x) // cppcheck-suppress syntaxError #else #if ROBIN_HOOD(BITNESS) == 32 #define ROBIN_HOOD_PRIVATE_DEFINITION_CTZ() __builtin_ctzl @@ -429,14 +428,6 @@ class BulkPoolAllocator return *this; } - BulkPoolAllocator & - // NOLINTNEXTLINE (bugprone-unhandled-self-assignment,cert-oop54-cpp) - operator=(const BulkPoolAllocator & ROBIN_HOOD_UNUSED(o) /*unused*/) noexcept - { - // does not do anything - return *this; - } - ~BulkPoolAllocator() noexcept { reset(); } // Deallocates all allocated memory. @@ -475,22 +466,6 @@ class BulkPoolAllocator mHead = obj; } - // Adds an already allocated block of memory to the allocator. This allocator is from now on - // responsible for freeing the data (with free()). If the provided data is not large enough to - // make use of, it is immediately freed. Otherwise it is reused and freed in the destructor. - void addOrFree(void * ptr, const size_t numBytes) noexcept - { - // calculate number of available elements in ptr - if (numBytes < ALIGNMENT + ALIGNED_SIZE) { - // not enough data for at least one element. Free and return. - ROBIN_HOOD_LOG("std::free") - std::free(ptr); - } else { - ROBIN_HOOD_LOG("add to buffer") - add(ptr, numBytes); - } - } - void swap(BulkPoolAllocator & other) noexcept { using std::swap; @@ -1382,7 +1357,7 @@ class Table Iter & operator++() noexcept { mInfo++; - mKeyVals++; + ++mKeyVals; fastForward(); return *this; } @@ -2035,41 +2010,6 @@ class Table return emplace(std::move(keyval)).first; } - // Returns 1 if key is found, 0 otherwise. - size_t count(const key_type & key) const - { // NOLINT (modernize-use-nodiscard) - ROBIN_HOOD_TRACE(this) - auto kv = mKeyVals + findIdx(key); - if (kv != reinterpret_cast_no_cast_align_warning(mInfo)) { - return 1; - } - return 0; - } - - template - // NOLINTNEXTLINE (modernize-use-nodiscard) - typename std::enable_if::type count(const OtherKey & key) const - { - ROBIN_HOOD_TRACE(this) - auto kv = mKeyVals + findIdx(key); - if (kv != reinterpret_cast_no_cast_align_warning(mInfo)) { - return 1; - } - return 0; - } - - bool contains(const key_type & key) const - { // NOLINT (modernize-use-nodiscard) - return 1U == count(key); - } - - template - // NOLINTNEXTLINE (modernize-use-nodiscard) - typename std::enable_if::type contains(const OtherKey & key) const - { - return 1U == count(key); - } - // Returns a reference to the value found for key. // Throws std::out_of_range if element cannot be found template From 90e8b6ef6f30483e17b55a7c4ce29cc39dbde46b Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 23:29:22 +0900 Subject: [PATCH 070/306] fix(probabilistic_occupancy_grid_map): fix noExplicitConstructor (#7811) Signed-off-by: Ryuta Kambe --- .../src/fusion/single_frame_fusion_policy.cpp | 2 +- .../occupancy_grid_map_projective.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/perception/probabilistic_occupancy_grid_map/src/fusion/single_frame_fusion_policy.cpp b/perception/probabilistic_occupancy_grid_map/src/fusion/single_frame_fusion_policy.cpp index 6ac681eff4916..7e2c3f7ba304a 100644 --- a/perception/probabilistic_occupancy_grid_map/src/fusion/single_frame_fusion_policy.cpp +++ b/perception/probabilistic_occupancy_grid_map/src/fusion/single_frame_fusion_policy.cpp @@ -171,7 +171,7 @@ struct dempsterShaferOccupancy } // initialize with probability - dempsterShaferOccupancy(double occupied_probability) + explicit dempsterShaferOccupancy(double occupied_probability) { // confine to [0, 1] double p = std::max(0.0, std::min(1.0, occupied_probability)); diff --git a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.cpp b/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.cpp index 3846b3a7d16e7..03d7a42ae7043 100644 --- a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.cpp +++ b/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.cpp @@ -75,7 +75,7 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( // Create angle bins and sort points by range struct BinInfo3D { - BinInfo3D( + explicit BinInfo3D( const double _range = 0.0, const double _wx = 0.0, const double _wy = 0.0, const double _wz = 0.0, const double _projection_length = 0.0, const double _projected_wx = 0.0, const double _projected_wy = 0.0) From 2f4fb42ee3a2028978d663e068605eb36b6bcb2c Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 4 Jul 2024 23:29:56 +0900 Subject: [PATCH 071/306] chore(ci): remove unnecessary cppcheck suppressions (#7848) chore(ci): remove unnecessary suppressions Signed-off-by: Ryuta Kambe --- .cppcheck_suppressions | 2 -- 1 file changed, 2 deletions(-) diff --git a/.cppcheck_suppressions b/.cppcheck_suppressions index 74e4de15becf3..94ca14f8f47d6 100644 --- a/.cppcheck_suppressions +++ b/.cppcheck_suppressions @@ -14,9 +14,7 @@ missingInclude missingIncludeSystem noConstructor noExplicitConstructor -noValidConfiguration passedByValue -preprocessorErrorDirective redundantInitialization shadowFunction shadowVariable From 45fa063b6f06af28a1f8932416f5e90db9884bd8 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Fri, 5 Jul 2024 09:32:53 +0900 Subject: [PATCH 072/306] fix(imu_corrector): fix shadowFunction (#7839) Signed-off-by: Ryuta Kambe --- sensing/imu_corrector/src/gyro_bias_estimator.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sensing/imu_corrector/src/gyro_bias_estimator.cpp b/sensing/imu_corrector/src/gyro_bias_estimator.cpp index 278d2dfc28e59..6882fbf068fd1 100644 --- a/sensing/imu_corrector/src/gyro_bias_estimator.cpp +++ b/sensing/imu_corrector/src/gyro_bias_estimator.cpp @@ -51,11 +51,11 @@ GyroBiasEstimator::GyroBiasEstimator(const rclcpp::NodeOptions & options) [this](const Odometry::ConstSharedPtr msg) { callback_odom(msg); }); gyro_bias_pub_ = create_publisher("~/output/gyro_bias", rclcpp::SensorDataQoS()); - auto timer_callback = std::bind(&GyroBiasEstimator::timer_callback, this); + auto bound_timer_callback = std::bind(&GyroBiasEstimator::timer_callback, this); auto period_control = std::chrono::duration_cast( std::chrono::duration(timer_callback_interval_sec_)); - timer_ = std::make_shared>( - this->get_clock(), period_control, std::move(timer_callback), + timer_ = std::make_shared>( + this->get_clock(), period_control, std::move(bound_timer_callback), this->get_node_base_interface()->get_context()); this->get_node_timers_interface()->add_timer(timer_, nullptr); From 4a85f2334995c171cd46fef21f53aa4672479f4f Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Fri, 5 Jul 2024 09:38:38 +0900 Subject: [PATCH 073/306] fix(control_launch): fix control launch control_evaluator plugin name (#7846) fix control evaluator plugin name Signed-off-by: Daniel Sanchez --- launch/tier4_control_launch/launch/control.launch.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launch/tier4_control_launch/launch/control.launch.xml b/launch/tier4_control_launch/launch/control.launch.xml index f23d9f74986e6..d8f3ef55b15dd 100644 --- a/launch/tier4_control_launch/launch/control.launch.xml +++ b/launch/tier4_control_launch/launch/control.launch.xml @@ -216,7 +216,7 @@ - + From 34bd969e09869bb7dbaec76961c4263132d3c71c Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Fri, 5 Jul 2024 10:16:14 +0900 Subject: [PATCH 074/306] fix(traffic_light_occlusion_predictor): fix cppcheck warnings (#7826) Signed-off-by: Ryuta Kambe --- perception/traffic_light_occlusion_predictor/src/nodelet.cpp | 2 +- .../src/occlusion_predictor.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/perception/traffic_light_occlusion_predictor/src/nodelet.cpp b/perception/traffic_light_occlusion_predictor/src/nodelet.cpp index 0202a26e46ef6..bc668c6af6c3c 100644 --- a/perception/traffic_light_occlusion_predictor/src/nodelet.cpp +++ b/perception/traffic_light_occlusion_predictor/src/nodelet.cpp @@ -129,10 +129,10 @@ void TrafficLightOcclusionPredictorNodelet::syncCallback( const uint8_t traffic_light_type) { std::vector occlusion_ratios; - size_t not_detected_roi = 0; if (in_cloud_msg == nullptr || in_cam_info_msg == nullptr || in_roi_msg == nullptr) { occlusion_ratios.resize(in_signal_msg->signals.size(), 0); } else { + size_t not_detected_roi = 0; tier4_perception_msgs::msg::TrafficLightRoiArray selected_roi_msg; selected_roi_msg.rois.reserve(in_roi_msg->rois.size()); for (size_t i = 0; i < in_roi_msg->rois.size(); ++i) { diff --git a/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.cpp b/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.cpp index 6515a515397da..40e50aabf3c17 100644 --- a/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.cpp +++ b/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.cpp @@ -211,7 +211,9 @@ uint32_t CloudOcclusionPredictor::predict( { const uint32_t horizontal_sample_num = 20; const uint32_t vertical_sample_num = 20; - static_assert(horizontal_sample_num > 1 && vertical_sample_num > 1); + static_assert(horizontal_sample_num > 1); + static_assert(vertical_sample_num > 1); + const float min_dist_from_occlusion_to_tl = 5.0f; pcl::PointCloud tl_sample_cloud; From 73b6a120228b6370bfc9b2f82e9487dcd1726cad Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Fri, 5 Jul 2024 10:20:47 +0900 Subject: [PATCH 075/306] fix(autoware_planning_validator): fix knownConditionTrueFalse (#7817) Signed-off-by: Ryuta Kambe --- .../invalid_trajectory_publisher.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/planning/autoware_planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp b/planning/autoware_planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp index 645d6c92e3698..4b5c495cc85b6 100644 --- a/planning/autoware_planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp +++ b/planning/autoware_planning_validator/src/invalid_trajectory_publisher/invalid_trajectory_publisher.cpp @@ -59,11 +59,6 @@ void InvalidTrajectoryPublisherNode::onTimer() traj_pub_->publish(output); RCLCPP_INFO(this->get_logger(), "invalid trajectory is published."); - - bool EXIT_AFTER_PUBLISH = false; - if (EXIT_AFTER_PUBLISH) { - exit(0); - } } void InvalidTrajectoryPublisherNode::onCurrentTrajectory(const Trajectory::ConstSharedPtr msg) From c16edbe319d2739ec99adfbce5f4454d0bd464b8 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Fri, 5 Jul 2024 10:32:07 +0900 Subject: [PATCH 076/306] chore(ci): remove unnecessary cppcheck suppression (#7854) Signed-off-by: Ryuta Kambe --- .cppcheck_suppressions | 1 - 1 file changed, 1 deletion(-) diff --git a/.cppcheck_suppressions b/.cppcheck_suppressions index 94ca14f8f47d6..1407a01c4054a 100644 --- a/.cppcheck_suppressions +++ b/.cppcheck_suppressions @@ -13,7 +13,6 @@ knownConditionTrueFalse missingInclude missingIncludeSystem noConstructor -noExplicitConstructor passedByValue redundantInitialization shadowFunction From 374703e6b356d9eaa9ffdb220a322e30f9afab83 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Fri, 5 Jul 2024 10:39:40 +0900 Subject: [PATCH 077/306] fix(tensorrt_yolox): fix knownConditionTrueFalse (#7823) * fix(tensorrt_yolox): fix knownConditionTrueFalse Signed-off-by: Ryuta Kambe * style(pre-commit): autofix --------- Signed-off-by: Ryuta Kambe Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../tensorrt_yolox/src/tensorrt_yolox.cpp | 74 ++++++------------- 1 file changed, 24 insertions(+), 50 deletions(-) diff --git a/perception/tensorrt_yolox/src/tensorrt_yolox.cpp b/perception/tensorrt_yolox/src/tensorrt_yolox.cpp index 34155c3477003..94c795cfc2403 100644 --- a/perception/tensorrt_yolox/src/tensorrt_yolox.cpp +++ b/perception/tensorrt_yolox/src/tensorrt_yolox.cpp @@ -508,29 +508,16 @@ void TrtYoloX::preprocess(const std::vector & images) const float input_width = static_cast(input_dims.d[3]); std::vector dst_images; scales_.clear(); - bool letterbox = true; - if (letterbox) { - for (const auto & image : images) { - cv::Mat dst_image; - const float scale = std::min(input_width / image.cols, input_height / image.rows); - scales_.emplace_back(scale); - const auto scale_size = cv::Size(image.cols * scale, image.rows * scale); - cv::resize(image, dst_image, scale_size, 0, 0, cv::INTER_CUBIC); - const auto bottom = input_height - dst_image.rows; - const auto right = input_width - dst_image.cols; - copyMakeBorder( - dst_image, dst_image, 0, bottom, 0, right, cv::BORDER_CONSTANT, {114, 114, 114}); - dst_images.emplace_back(dst_image); - } - } else { - for (const auto & image : images) { - cv::Mat dst_image; - const float scale = -1.0; - scales_.emplace_back(scale); - const auto scale_size = cv::Size(input_width, input_height); - cv::resize(image, dst_image, scale_size, 0, 0, cv::INTER_CUBIC); - dst_images.emplace_back(dst_image); - } + for (const auto & image : images) { + cv::Mat dst_image; + const float scale = std::min(input_width / image.cols, input_height / image.rows); + scales_.emplace_back(scale); + const auto scale_size = cv::Size(image.cols * scale, image.rows * scale); + cv::resize(image, dst_image, scale_size, 0, 0, cv::INTER_CUBIC); + const auto bottom = input_height - dst_image.rows; + const auto right = input_width - dst_image.cols; + copyMakeBorder(dst_image, dst_image, 0, bottom, 0, right, cv::BORDER_CONSTANT, {114, 114, 114}); + dst_images.emplace_back(dst_image); } const auto chw_images = cv::dnn::blobFromImages( dst_images, norm_factor_, cv::Size(), cv::Scalar(), false, false, CV_32F); @@ -650,34 +637,21 @@ void TrtYoloX::preprocessWithRoi( const float input_width = static_cast(input_dims.d[3]); std::vector dst_images; scales_.clear(); - bool letterbox = true; int b = 0; - if (letterbox) { - for (const auto & image : images) { - cv::Mat dst_image; - cv::Mat cropped = image(rois[b]); - const float scale = std::min( - input_width / static_cast(rois[b].width), - input_height / static_cast(rois[b].height)); - scales_.emplace_back(scale); - const auto scale_size = cv::Size(rois[b].width * scale, rois[b].height * scale); - cv::resize(cropped, dst_image, scale_size, 0, 0, cv::INTER_CUBIC); - const auto bottom = input_height - dst_image.rows; - const auto right = input_width - dst_image.cols; - copyMakeBorder( - dst_image, dst_image, 0, bottom, 0, right, cv::BORDER_CONSTANT, {114, 114, 114}); - dst_images.emplace_back(dst_image); - b++; - } - } else { - for (const auto & image : images) { - cv::Mat dst_image; - const float scale = -1.0; - scales_.emplace_back(scale); - const auto scale_size = cv::Size(input_width, input_height); - cv::resize(image, dst_image, scale_size, 0, 0, cv::INTER_CUBIC); - dst_images.emplace_back(dst_image); - } + for (const auto & image : images) { + cv::Mat dst_image; + cv::Mat cropped = image(rois[b]); + const float scale = std::min( + input_width / static_cast(rois[b].width), + input_height / static_cast(rois[b].height)); + scales_.emplace_back(scale); + const auto scale_size = cv::Size(rois[b].width * scale, rois[b].height * scale); + cv::resize(cropped, dst_image, scale_size, 0, 0, cv::INTER_CUBIC); + const auto bottom = input_height - dst_image.rows; + const auto right = input_width - dst_image.cols; + copyMakeBorder(dst_image, dst_image, 0, bottom, 0, right, cv::BORDER_CONSTANT, {114, 114, 114}); + dst_images.emplace_back(dst_image); + b++; } const auto chw_images = cv::dnn::blobFromImages( dst_images, norm_factor_, cv::Size(), cv::Scalar(), false, false, CV_32F); From 9d58d5d0473bb842e2361ce4938deda55af55bda Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:37:50 +0900 Subject: [PATCH 078/306] refactor(lane_change): move struct to lane change namespace (#7841) * move struct to lane change namespace Signed-off-by: Muhammad Zulfaqar Azmi * Revert "move struct to lane change namespace" This reverts commit 306984a76103c427732f170a6f7eb5f94e895b0b. Signed-off-by: Muhammad Zulfaqar Azmi --------- Signed-off-by: Muhammad Zulfaqar Azmi --- .../utils/base_class.hpp | 19 +++- .../utils/data_structs.hpp | 102 ++++++++++++++---- .../utils/path.hpp | 4 +- 3 files changed, 99 insertions(+), 26 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp index e8e83a0703a76..9df19c4de6834 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp @@ -50,7 +50,10 @@ class LaneChangeBase LaneChangeBase( std::shared_ptr parameters, LaneChangeModuleType type, Direction direction) - : lane_change_parameters_{std::move(parameters)}, direction_{direction}, type_{type} + : lane_change_parameters_{std::move(parameters)}, + common_data_ptr_{std::make_shared()}, + direction_{direction}, + type_{type} { } @@ -151,7 +154,18 @@ class LaneChangeBase bool isValidPath() const { return status_.is_valid_path; } - void setData(const std::shared_ptr & data) { planner_data_ = data; } + void setData(const std::shared_ptr & data) + { + planner_data_ = data; + if (!common_data_ptr_->bpp_param_ptr) { + common_data_ptr_->bpp_param_ptr = + std::make_shared(data->parameters); + } + common_data_ptr_->self_odometry_ptr = data->self_odometry; + common_data_ptr_->route_handler_ptr = data->route_handler; + common_data_ptr_->lc_param_ptr = lane_change_parameters_; + common_data_ptr_->direction = direction_; + } void toNormalState() { current_lane_change_state_ = LaneChangeStates::Normal; } @@ -219,6 +233,7 @@ class LaneChangeBase std::shared_ptr lane_change_parameters_{}; std::shared_ptr abort_path_{}; std::shared_ptr planner_data_{}; + lane_change::CommonDataPtr common_data_ptr_{}; BehaviorModuleOutput prev_module_output_{}; std::optional lane_change_stop_pose_{std::nullopt}; diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp index ffd2754acc38f..2fdf7c6b550a3 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp @@ -17,16 +17,28 @@ #include "autoware/behavior_path_planner_common/utils/path_safety_checker/path_safety_checker_parameters.hpp" #include "autoware/behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" +#include +#include #include +#include + #include #include +#include #include #include -namespace autoware::behavior_path_planner +namespace autoware::behavior_path_planner::lane_change { +using geometry_msgs::msg::Pose; +using geometry_msgs::msg::Twist; +using nav_msgs::msg::Odometry; +using route_handler::Direction; +using route_handler::RouteHandler; +using utils::path_safety_checker::ExtendedPredictedObjects; + struct LateralAccelerationMap { std::vector base_vel; @@ -68,7 +80,7 @@ struct LateralAccelerationMap } }; -struct LaneChangeCancelParameters +struct CancelParameters { bool enable_on_prepare_phase{true}; bool enable_on_lane_changing_phase{false}; @@ -83,7 +95,7 @@ struct LaneChangeCancelParameters int unsafe_hysteresis_threshold{2}; }; -struct LaneChangeParameters +struct Parameters { // trajectory generation double backward_lane_length{200.0}; @@ -92,8 +104,8 @@ struct LaneChangeParameters int lateral_acc_sampling_num{10}; // lane change parameters - double backward_length_buffer_for_end_of_lane; - double backward_length_buffer_for_blocking_object; + double backward_length_buffer_for_end_of_lane{0.0}; + double backward_length_buffer_for_blocking_object{0.0}; double lane_changing_lateral_jerk{0.5}; double minimum_lane_changing_velocity{5.6}; double lane_change_prepare_duration{4.0}; @@ -143,7 +155,7 @@ struct LaneChangeParameters utils::path_safety_checker::RSSparams rss_params_for_stuck{}; // abort - LaneChangeCancelParameters cancel{}; + CancelParameters cancel{}; double finish_judge_lateral_threshold{0.2}; @@ -151,32 +163,32 @@ struct LaneChangeParameters bool publish_debug_marker{false}; }; -enum class LaneChangeStates { +enum class States { Normal = 0, Cancel, Abort, Stop, }; -struct LaneChangePhaseInfo +struct PhaseInfo { double prepare{0.0}; double lane_changing{0.0}; [[nodiscard]] double sum() const { return prepare + lane_changing; } - LaneChangePhaseInfo(const double _prepare, const double _lane_changing) + PhaseInfo(const double _prepare, const double _lane_changing) : prepare(_prepare), lane_changing(_lane_changing) { } }; -struct LaneChangeInfo +struct Info { - LaneChangePhaseInfo longitudinal_acceleration{0.0, 0.0}; - LaneChangePhaseInfo velocity{0.0, 0.0}; - LaneChangePhaseInfo duration{0.0, 0.0}; - LaneChangePhaseInfo length{0.0, 0.0}; + PhaseInfo longitudinal_acceleration{0.0, 0.0}; + PhaseInfo velocity{0.0, 0.0}; + PhaseInfo duration{0.0, 0.0}; + PhaseInfo length{0.0, 0.0}; lanelet::ConstLanelets current_lanes{}; lanelet::ConstLanelets target_lanes{}; @@ -190,22 +202,19 @@ struct LaneChangeInfo double terminal_lane_changing_velocity{0.0}; }; -struct LaneChangeLanesFilteredObjects +struct LanesObjects { - utils::path_safety_checker::ExtendedPredictedObjects current_lane{}; - utils::path_safety_checker::ExtendedPredictedObjects target_lane{}; - utils::path_safety_checker::ExtendedPredictedObjects other_lane{}; + ExtendedPredictedObjects current_lane{}; + ExtendedPredictedObjects target_lane{}; + ExtendedPredictedObjects other_lane{}; }; -enum class LaneChangeModuleType { +enum class ModuleType { NORMAL = 0, EXTERNAL_REQUEST, AVOIDANCE_BY_LANE_CHANGE, }; -} // namespace autoware::behavior_path_planner -namespace autoware::behavior_path_planner::lane_change -{ struct PathSafetyStatus { bool is_safe{true}; @@ -218,6 +227,55 @@ struct LanesPolygon std::optional target; std::vector target_backward; }; + +struct Lanes +{ + lanelet::ConstLanelets current; + lanelet::ConstLanelets target; + std::vector preceding_target; +}; + +struct CommonData +{ + std::shared_ptr route_handler_ptr; + Odometry::ConstSharedPtr self_odometry_ptr; + std::shared_ptr bpp_param_ptr; + std::shared_ptr lc_param_ptr; + Lanes lanes; + Direction direction; + + [[nodiscard]] Pose get_ego_pose() const { return self_odometry_ptr->pose.pose; } + + [[nodiscard]] Twist get_ego_twist() const { return self_odometry_ptr->twist.twist; } + + [[nodiscard]] double get_ego_speed(bool use_norm = false) const + { + if (!use_norm) { + return get_ego_twist().linear.x; + } + + const auto x = get_ego_twist().linear.x; + const auto y = get_ego_twist().linear.y; + return std::hypot(x, y); + } +}; + +using RouteHandlerPtr = std::shared_ptr; +using BppParamPtr = std::shared_ptr; +using LCParamPtr = std::shared_ptr; +using CommonDataPtr = std::shared_ptr; +using LanesPtr = std::shared_ptr; } // namespace autoware::behavior_path_planner::lane_change +namespace autoware::behavior_path_planner +{ +using LaneChangeModuleType = lane_change::ModuleType; +using LaneChangeParameters = lane_change::Parameters; +using LaneChangeStates = lane_change::States; +using LaneChangePhaseInfo = lane_change::PhaseInfo; +using LaneChangeInfo = lane_change::Info; +using LaneChangeLanesFilteredObjects = lane_change::LanesObjects; +using LateralAccelerationMap = lane_change::LateralAccelerationMap; +} // namespace autoware::behavior_path_planner + #endif // AUTOWARE__BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__DATA_STRUCTS_HPP_ diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp index 77c603e3bd975..97b5c621deea5 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp @@ -31,8 +31,8 @@ struct LaneChangePath { PathWithLaneId path{}; ShiftedPath shifted_path{}; - PathWithLaneId prev_path{}; - LaneChangeInfo info{}; + LaneChangeInfo info; + bool is_safe{false}; }; using LaneChangePaths = std::vector; From 45f0769b75fae27d48044dd0e5669a259180278a Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:10:51 +0900 Subject: [PATCH 079/306] fix(image_projection_based_fusion): segmentation pointcloud fusion param update (#7858) --- .../segmentation_pointcloud_fusion.param.yaml | 53 +++---- .../docs/segmentation-pointcloud-fusion.md | 4 +- .../segmentation_pointcloud_fusion/node.hpp | 9 +- ...segmentation_pointcloud_fusion.schema.json | 134 ++++++++++++++++++ .../segmentation_pointcloud_fusion/node.cpp | 13 +- 5 files changed, 171 insertions(+), 42 deletions(-) create mode 100644 perception/image_projection_based_fusion/schema/segmentation_pointcloud_fusion.schema.json diff --git a/perception/image_projection_based_fusion/config/segmentation_pointcloud_fusion.param.yaml b/perception/image_projection_based_fusion/config/segmentation_pointcloud_fusion.param.yaml index 2120a909cd672..fdabb0c7055d8 100644 --- a/perception/image_projection_based_fusion/config/segmentation_pointcloud_fusion.param.yaml +++ b/perception/image_projection_based_fusion/config/segmentation_pointcloud_fusion.param.yaml @@ -1,39 +1,24 @@ /**: ros__parameters: # if the semantic label is applied for pointcloud filtering + filter_semantic_label_target: - [ - true, # road - true, # sidewalk - true, # building - true, # wall - true, # fence - true, # pole - true, # traffic_light - true, # traffic_sign - true, # vegetation - true, # terrain - true, # sky - false, # person - false, # ride - false, # car - false, # truck - false, # bus - false, # train - false, # motorcycle - false, # bicycle - false, # others - ] - # the maximum distance of pointcloud to be applied filter, - # this is selected based on semantic segmentation model accuracy, - # calibration accuracy and unknown reaction distance - filter_distance_threshold: 60.0 + UNKNOWN: false + BUILDING: true + WALL: true + OBSTACLE: false + TRAFFIC_LIGHT: false + TRAFFIC_SIGN: false + PERSON: false + VEHICLE: false + BIKE: false + ROAD: true + SIDEWALK: false + ROAD_PAINT: false + CURBSTONE: false + CROSSWALK: false + VEGETATION: true + SKY: false - # debug - debug_mode: false - filter_scope_min_x: -100.0 - filter_scope_max_x: 100.0 - filter_scope_min_y: -100.0 - filter_scope_max_y: 100.0 - filter_scope_min_z: -100.0 - filter_scope_max_z: 100.0 + # the maximum distance of pointcloud to be applied filter + filter_distance_threshold: 60.0 diff --git a/perception/image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md b/perception/image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md index d59e804f1228c..3c469ac15c6e7 100644 --- a/perception/image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md +++ b/perception/image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md @@ -32,9 +32,7 @@ The node `segmentation_pointcloud_fusion` is a package for filtering pointcloud ### Core Parameters -| Name | Type | Description | -| ------------- | ---- | ------------------------ | -| `rois_number` | int | the number of input rois | +{{ json_to_markdown("perception/image_projection_based_fusion/schema/segmentation_pointcloud_fusion.schema.json") }} ## Assumptions / Known limits diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp b/perception/image_projection_based_fusion/include/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp index 26bcfd5ed802a..89b33775f7898 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp +++ b/perception/image_projection_based_fusion/include/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp @@ -20,6 +20,7 @@ #include #include +#include #include #if __has_include() @@ -36,7 +37,13 @@ class SegmentPointCloudFusionNode : public FusionNode::SharedPtr pub_pointcloud_ptr_; std::vector filter_semantic_label_target_; float filter_distance_threshold_; - /* data */ + // declare list of semantic label target, depend on trained data of yolox segmentation model + std::vector> filter_semantic_label_target_list_ = { + {"UNKNOWN", false}, {"BUILDING", false}, {"WALL", false}, {"OBSTACLE", false}, + {"TRAFFIC_LIGHT", false}, {"TRAFFIC_SIGN", false}, {"PERSON", false}, {"VEHICLE", false}, + {"BIKE", false}, {"ROAD", false}, {"SIDEWALK", false}, {"ROAD_PAINT", false}, + {"CURBSTONE", false}, {"CROSSWALK", false}, {"VEGETATION", false}, {"SKY", false}}; + public: explicit SegmentPointCloudFusionNode(const rclcpp::NodeOptions & options); diff --git a/perception/image_projection_based_fusion/schema/segmentation_pointcloud_fusion.schema.json b/perception/image_projection_based_fusion/schema/segmentation_pointcloud_fusion.schema.json new file mode 100644 index 0000000000000..f5ab1be5eac34 --- /dev/null +++ b/perception/image_projection_based_fusion/schema/segmentation_pointcloud_fusion.schema.json @@ -0,0 +1,134 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Segmentation Pointcloud Fusion Node", + "type": "object", + "definitions": { + "segmentation_pointcloud_fusion": { + "type": "object", + "properties": { + "filter_semantic_label_target": { + "type": "object", + "properties": { + "UNKNOWN": { + "type": "boolean", + "description": "If true, UNKNOWN class of semantic will be filtered.", + "default": false + }, + "BUILDING": { + "type": "boolean", + "description": "If true, BUILDING class of semantic will be filtered.", + "default": true + }, + "WALL": { + "type": "boolean", + "description": "If true, WALL class of semantic will be filtered.", + "default": true + }, + "OBSTACLE": { + "type": "boolean", + "description": "If true, OBSTACLE class of semantic will be filtered.", + "default": false + }, + "TRAFFIC_LIGHT": { + "type": "boolean", + "description": "If true, TRAFFIC_LIGHT class of semantic will be filtered.", + "default": false + }, + "TRAFFIC_SIGN": { + "type": "boolean", + "description": "If true, TRAFFIC_SIGN class of semantic will be filtered.", + "default": false + }, + "PERSON": { + "type": "boolean", + "description": "If true, PERSON class of semantic will be filtered.", + "default": false + }, + "VEHICLE": { + "type": "boolean", + "description": "If true, VEHICLE class of semantic will be filtered.", + "default": false + }, + "BIKE": { + "type": "boolean", + "description": "If true, BIKE class of semantic will be filtered.", + "default": false + }, + "ROAD": { + "type": "boolean", + "description": "If true, ROAD class of semantic will be filtered.", + "default": true + }, + "SIDEWALK": { + "type": "boolean", + "description": "If true, SIDEWALK class of semantic will be filtered.", + "default": false + }, + "ROAD_PAINT": { + "type": "boolean", + "description": "If true, ROAD_PAINT class of semantic will be filtered.", + "default": false + }, + "CURBSTONE": { + "type": "boolean", + "description": "If true, CURBSTONE class of semantic will be filtered.", + "default": false + }, + "CROSSWALK": { + "type": "boolean", + "description": "If true, CROSSWALK class of semantic will be filtered.", + "default": false + }, + "VEGETATION": { + "type": "boolean", + "description": "If true, VEGETATION class of semantic will be filtered.", + "default": true + }, + "SKY": { + "type": "boolean", + "description": "If true, SKY class of semantic will be filtered.", + "default": false + } + }, + "required": [ + "UNKNOWN", + "BUILDING", + "WALL", + "OBSTACLE", + "TRAFFIC_LIGHT", + "TRAFFIC_SIGN", + "PERSON", + "VEHICLE", + "BIKE", + "ROAD", + "SIDEWALK", + "ROAD_PAINT", + "CURBSTONE", + "CROSSWALK", + "VEGETATION", + "SKY" + ] + }, + "filter_distance_threshold": { + "type": "number", + "description": "A maximum distance of pointcloud to apply filter [m].", + "default": 60.0, + "minimum": 0.0 + } + }, + "required": ["filter_semantic_label_target", "filter_distance_threshold"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/segmentation_pointcloud_fusion" + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/perception/image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp b/perception/image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp index a3117125a46b1..9a983252af436 100644 --- a/perception/image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp @@ -31,8 +31,13 @@ SegmentPointCloudFusionNode::SegmentPointCloudFusionNode(const rclcpp::NodeOptio : FusionNode("segmentation_pointcloud_fusion", options) { filter_distance_threshold_ = declare_parameter("filter_distance_threshold"); - filter_semantic_label_target_ = - declare_parameter>("filter_semantic_label_target"); + for (auto & item : filter_semantic_label_target_list_) { + item.second = declare_parameter("filter_semantic_label_target." + item.first); + } + for (const auto & item : filter_semantic_label_target_list_) { + RCLCPP_INFO( + this->get_logger(), "filter_semantic_label_target: %s %d", item.first.c_str(), item.second); + } } void SegmentPointCloudFusionNode::preprocess(__attribute__((unused)) PointCloud2 & pointcloud_msg) @@ -129,12 +134,12 @@ void SegmentPointCloudFusionNode::fuseOnSingleImage( // skip filtering pointcloud where semantic id out of the defined list uint8_t semantic_id = mask.at( static_cast(projected_point.y()), static_cast(projected_point.x())); - if (static_cast(semantic_id) >= filter_semantic_label_target_.size()) { + if (static_cast(semantic_id) >= filter_semantic_label_target_list_.size()) { copyPointCloud( input_pointcloud_msg, point_step, global_offset, output_cloud, output_pointcloud_size); continue; } - if (!filter_semantic_label_target_.at(semantic_id)) { + if (!filter_semantic_label_target_list_.at(semantic_id).second) { copyPointCloud( input_pointcloud_msg, point_step, global_offset, output_cloud, output_pointcloud_size); } From cee3e168676a549b52c2082d3e4082957de55800 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 5 Jul 2024 12:49:24 +0900 Subject: [PATCH 080/306] fix(static_obstacle_avoidance): ignore pedestrian/cyclist who is not on road edge (#7850) * fix(static_obstacle_avoidance): ignore pedestrian/cyclist who is not on road edge Signed-off-by: satoshi-ota * docs(static_obstacle_avoidance): update flowchart Signed-off-by: satoshi-ota * Update planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md Co-authored-by: Go Sakayori --------- Signed-off-by: satoshi-ota Co-authored-by: Go Sakayori --- .../README.md | 21 ++++++++++ .../src/utils.cpp | 41 +++++++++++++++++++ 2 files changed, 62 insertions(+) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md index 40d36898b2309..8e20cf2c9f660 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md @@ -659,6 +659,27 @@ if(isWithinCrosswalk()) then (yes) stop else (\n no) endif + +if(is object within intersection?) then (yes) +#00FFB1 :return false; +stop +else (\n no) +endif + +if(is object on right side of the ego path?) then (yes) +if(are there adjacent lanes on right side of ego lane?) then (yes) +#00FFB1 :return false; +stop +else (\n no) +endif +else (\n no) +if(are there adjacent lanes on left side of ego lane?) then (yes) +#00FFB1 :return false; +stop +else (\n no) +endif +endif + #FF006C :return true; stop } diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp index d454a97400e78..30d1aad16374b 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp @@ -809,6 +809,45 @@ bool isSatisfiedWithNonVehicleCondition( return false; } + if (object.is_within_intersection) { + RCLCPP_DEBUG( + rclcpp::get_logger(logger_namespace), + "object is within intersection. don't have to avoid it."); + return false; + } + + const auto right_lane = + planner_data->route_handler->getRightLanelet(object.overhang_lanelet, true, true); + if (right_lane.has_value() && isOnRight(object)) { + RCLCPP_DEBUG( + rclcpp::get_logger(logger_namespace), "object isn't on the edge lane. never avoid it."); + return false; + } + + const auto left_lane = + planner_data->route_handler->getLeftLanelet(object.overhang_lanelet, true, true); + if (left_lane.has_value() && !isOnRight(object)) { + RCLCPP_DEBUG( + rclcpp::get_logger(logger_namespace), "object isn't on the edge lane. never avoid it."); + return false; + } + + const auto right_opposite_lanes = + planner_data->route_handler->getRightOppositeLanelets(object.overhang_lanelet); + if (!right_opposite_lanes.empty() && isOnRight(object)) { + RCLCPP_DEBUG( + rclcpp::get_logger(logger_namespace), "object isn't on the edge lane. never avoid it."); + return false; + } + + const auto left_opposite_lanes = + planner_data->route_handler->getLeftOppositeLanelets(object.overhang_lanelet); + if (!left_opposite_lanes.empty() && !isOnRight(object)) { + RCLCPP_DEBUG( + rclcpp::get_logger(logger_namespace), "object isn't on the edge lane. never avoid it."); + return false; + } + return true; } @@ -1840,6 +1879,8 @@ void filterTargetObjects( continue; } } else { + o.is_within_intersection = + filtering_utils::isWithinIntersection(o, planner_data->route_handler); o.is_parked = false; o.avoid_margin = filtering_utils::getAvoidMargin(o, planner_data, parameters); From 765a656b727ab5be0b29bb2cd1912201ec7875e8 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Fri, 5 Jul 2024 13:13:57 +0900 Subject: [PATCH 081/306] feat(planning_evaluator): add planning evaluator polling sub (#7827) * WIP add polling subs Signed-off-by: Daniel Sanchez * WIP Signed-off-by: Daniel Sanchez * update functions Signed-off-by: Daniel Sanchez * remove semicolon Signed-off-by: Daniel Sanchez * use last data for modified goal Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .../planning_evaluator_node.hpp | 46 ++++-- .../src/planning_evaluator_node.cpp | 146 +++++++++--------- 2 files changed, 106 insertions(+), 86 deletions(-) diff --git a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp index 74523398c3a77..91dc0386ae6c6 100644 --- a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp +++ b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp @@ -70,7 +70,8 @@ class PlanningEvaluatorNode : public rclcpp::Node * @brief callback on receiving a trajectory * @param [in] traj_msg received trajectory message */ - void onTrajectory(const Trajectory::ConstSharedPtr traj_msg); + void onTrajectory( + const Trajectory::ConstSharedPtr traj_msg, const Odometry::ConstSharedPtr ego_state_ptr); /** * @brief callback on receiving a reference trajectory @@ -88,7 +89,9 @@ class PlanningEvaluatorNode : public rclcpp::Node * @brief callback on receiving a modified goal * @param [in] modified_goal_msg received modified goal message */ - void onModifiedGoal(const PoseWithUuidStamped::ConstSharedPtr modified_goal_msg); + void onModifiedGoal( + const PoseWithUuidStamped::ConstSharedPtr modified_goal_msg, + const Odometry::ConstSharedPtr ego_state_ptr); /** * @brief publish the given metric statistic @@ -99,26 +102,43 @@ class PlanningEvaluatorNode : public rclcpp::Node /** * @brief publish current ego lane info */ - DiagnosticStatus generateLaneletDiagnosticStatus(); + DiagnosticStatus generateLaneletDiagnosticStatus(const Odometry::ConstSharedPtr ego_state_ptr); /** * @brief publish current ego kinematic state */ DiagnosticStatus generateKinematicStateDiagnosticStatus( - const AccelWithCovarianceStamped & accel_stamped); + const AccelWithCovarianceStamped & accel_stamped, const Odometry::ConstSharedPtr ego_state_ptr); private: static bool isFinite(const TrajectoryPoint & p); - void publishModifiedGoalDeviationMetrics(); - // update Route Handler + + /** + * @brief update route handler data + */ void getRouteData(); + /** + * @brief fetch data and publish diagnostics + */ + void onTimer(); + + /** + * @brief fetch topic data + */ + void fetchData(); + // ROS - rclcpp::Subscription::SharedPtr traj_sub_; - rclcpp::Subscription::SharedPtr ref_sub_; - rclcpp::Subscription::SharedPtr objects_sub_; - rclcpp::Subscription::SharedPtr modified_goal_sub_; - rclcpp::Subscription::SharedPtr odom_sub_; + autoware::universe_utils::InterProcessPollingSubscriber traj_sub_{ + this, "~/input/trajectory"}; + autoware::universe_utils::InterProcessPollingSubscriber ref_sub_{ + this, "~/input/reference_trajectory"}; + autoware::universe_utils::InterProcessPollingSubscriber objects_sub_{ + this, "~/input/objects"}; + autoware::universe_utils::InterProcessPollingSubscriber modified_goal_sub_{ + this, "~/input/modified_goal"}; + autoware::universe_utils::InterProcessPollingSubscriber odometry_sub_{ + this, "~/input/odometry"}; autoware::universe_utils::InterProcessPollingSubscriber route_subscriber_{ this, "~/input/route", rclcpp::QoS{1}.transient_local()}; autoware::universe_utils::InterProcessPollingSubscriber vector_map_subscriber_{ @@ -131,6 +151,7 @@ class PlanningEvaluatorNode : public rclcpp::Node std::unique_ptr tf_buffer_; autoware::route_handler::RouteHandler route_handler_; + DiagnosticArray metrics_msg_; // Parameters std::string output_file_str_; std::string ego_frame_str_; @@ -142,8 +163,7 @@ class PlanningEvaluatorNode : public rclcpp::Node std::deque stamps_; std::array>, static_cast(Metric::SIZE)> metric_stats_; - Odometry::ConstSharedPtr ego_state_ptr_; - PoseWithUuidStamped::ConstSharedPtr modified_goal_ptr_; + rclcpp::TimerBase::SharedPtr timer_; std::optional prev_acc_stamped_{std::nullopt}; }; } // namespace planning_diagnostics diff --git a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp index 5e959aed123af..9b65dbbc0b89e 100644 --- a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp +++ b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp @@ -35,26 +35,13 @@ PlanningEvaluatorNode::PlanningEvaluatorNode(const rclcpp::NodeOptions & node_op : Node("planning_evaluator", node_options) { using std::placeholders::_1; - - traj_sub_ = create_subscription( - "~/input/trajectory", 1, std::bind(&PlanningEvaluatorNode::onTrajectory, this, _1)); - - ref_sub_ = create_subscription( - "~/input/reference_trajectory", 1, - std::bind(&PlanningEvaluatorNode::onReferenceTrajectory, this, _1)); - - objects_sub_ = create_subscription( - "~/input/objects", 1, std::bind(&PlanningEvaluatorNode::onObjects, this, _1)); - - modified_goal_sub_ = create_subscription( - "~/input/modified_goal", 1, std::bind(&PlanningEvaluatorNode::onModifiedGoal, this, _1)); - - odom_sub_ = create_subscription( - "~/input/odometry", 1, std::bind(&PlanningEvaluatorNode::onOdometry, this, _1)); - tf_buffer_ = std::make_unique(this->get_clock()); transform_listener_ = std::make_shared(*tf_buffer_); + // Timer callback to publish evaluator diagnostics + using namespace std::literals::chrono_literals; + timer_ = rclcpp::create_timer( + this, get_clock(), 100ms, std::bind(&PlanningEvaluatorNode::onTimer, this)); // Parameters metrics_calculator_.parameters.trajectory.min_point_dist_m = declare_parameter("trajectory.min_point_dist_m"); @@ -133,9 +120,10 @@ void PlanningEvaluatorNode::getRouteData() } } -DiagnosticStatus PlanningEvaluatorNode::generateLaneletDiagnosticStatus() +DiagnosticStatus PlanningEvaluatorNode::generateLaneletDiagnosticStatus( + const Odometry::ConstSharedPtr ego_state_ptr) { - const auto & ego_pose = ego_state_ptr_->pose.pose; + const auto & ego_pose = ego_state_ptr->pose.pose; const auto current_lanelets = [&]() { lanelet::ConstLanelet closest_route_lanelet; route_handler_.getClosestLaneletWithinRoute(ego_pose, &closest_route_lanelet); @@ -166,14 +154,14 @@ DiagnosticStatus PlanningEvaluatorNode::generateLaneletDiagnosticStatus() } DiagnosticStatus PlanningEvaluatorNode::generateKinematicStateDiagnosticStatus( - const AccelWithCovarianceStamped & accel_stamped) + const AccelWithCovarianceStamped & accel_stamped, const Odometry::ConstSharedPtr ego_state_ptr) { DiagnosticStatus status; status.name = "kinematic_state"; status.level = status.OK; diagnostic_msgs::msg::KeyValue key_value; key_value.key = "vel"; - key_value.value = std::to_string(ego_state_ptr_->twist.twist.linear.x); + key_value.value = std::to_string(ego_state_ptr->twist.twist.linear.x); status.values.push_back(key_value); key_value.key = "acc"; const auto & acc = accel_stamped.accel.accel.linear.x; @@ -220,9 +208,40 @@ DiagnosticStatus PlanningEvaluatorNode::generateDiagnosticStatus( return status; } -void PlanningEvaluatorNode::onTrajectory(const Trajectory::ConstSharedPtr traj_msg) +void PlanningEvaluatorNode::onTimer() +{ + metrics_msg_.header.stamp = now(); + + const auto ego_state_ptr = odometry_sub_.takeData(); + onOdometry(ego_state_ptr); + { + const auto objects_msg = objects_sub_.takeData(); + onObjects(objects_msg); + } + + { + const auto ref_traj_msg = ref_sub_.takeData(); + onReferenceTrajectory(ref_traj_msg); + } + + { + const auto traj_msg = traj_sub_.takeData(); + onTrajectory(traj_msg, ego_state_ptr); + } + { + const auto modified_goal_msg = modified_goal_sub_.takeData(); + onModifiedGoal(modified_goal_msg, ego_state_ptr); + } + if (!metrics_msg_.status.empty()) { + metrics_pub_->publish(metrics_msg_); + } + metrics_msg_ = DiagnosticArray{}; +} + +void PlanningEvaluatorNode::onTrajectory( + const Trajectory::ConstSharedPtr traj_msg, const Odometry::ConstSharedPtr ego_state_ptr) { - if (!ego_state_ptr_) { + if (!ego_state_ptr || !traj_msg) { return; } @@ -231,8 +250,6 @@ void PlanningEvaluatorNode::onTrajectory(const Trajectory::ConstSharedPtr traj_m stamps_.push_back(traj_msg->header.stamp); } - DiagnosticArray metrics_msg; - metrics_msg.header.stamp = now(); for (Metric metric : metrics_) { const auto metric_stat = metrics_calculator_.calculate(Metric(metric), *traj_msg); if (!metric_stat) { @@ -244,88 +261,71 @@ void PlanningEvaluatorNode::onTrajectory(const Trajectory::ConstSharedPtr traj_m } if (metric_stat->count() > 0) { - metrics_msg.status.push_back(generateDiagnosticStatus(metric, *metric_stat)); + metrics_msg_.status.push_back(generateDiagnosticStatus(metric, *metric_stat)); } } - if (!metrics_msg.status.empty()) { - metrics_pub_->publish(metrics_msg); - } + metrics_calculator_.setPreviousTrajectory(*traj_msg); auto runtime = (now() - start).seconds(); RCLCPP_DEBUG(get_logger(), "Planning evaluation calculation time: %2.2f ms", runtime * 1e3); } void PlanningEvaluatorNode::onModifiedGoal( - const PoseWithUuidStamped::ConstSharedPtr modified_goal_msg) + const PoseWithUuidStamped::ConstSharedPtr modified_goal_msg, + const Odometry::ConstSharedPtr ego_state_ptr) { - modified_goal_ptr_ = modified_goal_msg; - if (ego_state_ptr_) { - publishModifiedGoalDeviationMetrics(); - } -} - -void PlanningEvaluatorNode::onOdometry(const Odometry::ConstSharedPtr odometry_msg) -{ - ego_state_ptr_ = odometry_msg; - metrics_calculator_.setEgoPose(odometry_msg->pose.pose); - { - DiagnosticArray metrics_msg; - metrics_msg.header.stamp = now(); - - getRouteData(); - if (route_handler_.isHandlerReady() && ego_state_ptr_) { - metrics_msg.status.push_back(generateLaneletDiagnosticStatus()); - } - - const auto acc = accel_sub_.takeData(); - - if (acc && ego_state_ptr_) { - metrics_msg.status.push_back(generateKinematicStateDiagnosticStatus(*acc)); - } - - if (!metrics_msg.status.empty()) { - metrics_pub_->publish(metrics_msg); - } - } - - if (modified_goal_ptr_) { - publishModifiedGoalDeviationMetrics(); + if (!modified_goal_msg || !ego_state_ptr) { + return; } -} - -void PlanningEvaluatorNode::publishModifiedGoalDeviationMetrics() -{ auto start = now(); - DiagnosticArray metrics_msg; - metrics_msg.header.stamp = now(); for (Metric metric : metrics_) { const auto metric_stat = metrics_calculator_.calculate( - Metric(metric), modified_goal_ptr_->pose, ego_state_ptr_->pose.pose); + Metric(metric), modified_goal_msg->pose, ego_state_ptr->pose.pose); if (!metric_stat) { continue; } metric_stats_[static_cast(metric)].push_back(*metric_stat); if (metric_stat->count() > 0) { - metrics_msg.status.push_back(generateDiagnosticStatus(metric, *metric_stat)); + metrics_msg_.status.push_back(generateDiagnosticStatus(metric, *metric_stat)); } } - if (!metrics_msg.status.empty()) { - metrics_pub_->publish(metrics_msg); - } auto runtime = (now() - start).seconds(); RCLCPP_DEBUG( get_logger(), "Planning evaluation modified goal deviation calculation time: %2.2f ms", runtime * 1e3); } +void PlanningEvaluatorNode::onOdometry(const Odometry::ConstSharedPtr odometry_msg) +{ + if (!odometry_msg) return; + metrics_calculator_.setEgoPose(odometry_msg->pose.pose); + { + getRouteData(); + if (route_handler_.isHandlerReady() && odometry_msg) { + metrics_msg_.status.push_back(generateLaneletDiagnosticStatus(odometry_msg)); + } + + const auto acc_msg = accel_sub_.takeData(); + if (acc_msg && odometry_msg) { + metrics_msg_.status.push_back(generateKinematicStateDiagnosticStatus(*acc_msg, odometry_msg)); + } + } +} + void PlanningEvaluatorNode::onReferenceTrajectory(const Trajectory::ConstSharedPtr traj_msg) { + if (!traj_msg) { + return; + } metrics_calculator_.setReferenceTrajectory(*traj_msg); } void PlanningEvaluatorNode::onObjects(const PredictedObjects::ConstSharedPtr objects_msg) { + if (!objects_msg) { + return; + } metrics_calculator_.setPredictedObjects(*objects_msg); } From 8c746ed3669cc49ca7315cf678d76a5bf084cd90 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:14:39 +0900 Subject: [PATCH 082/306] perf(map_based_prediction): remove query on all fences linestrings (#7237) Signed-off-by: Maxime CLEMENT --- .../src/map_based_prediction_node.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp index 2b8358eb52e4e..4f223d5c99bd6 100644 --- a/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp +++ b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp @@ -1309,10 +1309,14 @@ std::string MapBasedPredictionNode::tryMatchNewObjectToDisappeared( bool MapBasedPredictionNode::doesPathCrossAnyFence(const PredictedPath & predicted_path) { - const lanelet::ConstLineStrings3d & all_fences = - lanelet::utils::query::getAllFences(lanelet_map_ptr_); - for (const auto & fence_line : all_fences) { - if (doesPathCrossFence(predicted_path, fence_line)) { + lanelet::BasicLineString2d predicted_path_ls; + for (const auto & p : predicted_path.path) + predicted_path_ls.emplace_back(p.position.x, p.position.y); + const auto candidates = + lanelet_map_ptr_->lineStringLayer.search(lanelet::geometry::boundingBox2d(predicted_path_ls)); + for (const auto & candidate : candidates) { + const std::string type = candidate.attributeOr(lanelet::AttributeName::Type, "none"); + if (type == "fence" && doesPathCrossFence(predicted_path, candidate)) { return true; } } From e4efec200ec4d621e7cc954c9ebea81d1cef1fcf Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Fri, 5 Jul 2024 14:17:47 +0900 Subject: [PATCH 083/306] fix(yabloc_image_processing): fix shadowFunction (#7865) * fix(yabloc_image_processing): fix shadowFunction Signed-off-by: veqcc * fix Signed-off-by: veqcc * style(pre-commit): autofix --------- Signed-off-by: veqcc Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../src/undistort/undistort_node.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/localization/yabloc/yabloc_image_processing/src/undistort/undistort_node.cpp b/localization/yabloc/yabloc_image_processing/src/undistort/undistort_node.cpp index 46f5165c5f4e2..4c33377c8ed0f 100644 --- a/localization/yabloc/yabloc_image_processing/src/undistort/undistort_node.cpp +++ b/localization/yabloc/yabloc_image_processing/src/undistort/undistort_node.cpp @@ -53,14 +53,13 @@ class UndistortNode : public rclcpp::Node qos = rclcpp::QoS(10).durability_volatile().best_effort(); } - auto on_image = std::bind(&UndistortNode::on_image, this, _1); - auto on_compressed_image = std::bind(&UndistortNode::on_compressed_image, this, _1); - auto on_info = std::bind(&UndistortNode::on_info, this, _1); - sub_image_ = create_subscription("~/input/image_raw", qos, std::move(on_image)); + sub_image_ = create_subscription( + "~/input/image_raw", qos, std::bind(&UndistortNode::on_image, this, _1)); sub_compressed_image_ = create_subscription( - "~/input/image_raw/compressed", qos, std::move(on_compressed_image)); - - sub_info_ = create_subscription("~/input/camera_info", qos, std::move(on_info)); + "~/input/image_raw/compressed", qos, + std::bind(&UndistortNode::on_compressed_image, this, _1)); + sub_info_ = create_subscription( + "~/input/camera_info", qos, std::bind(&UndistortNode::on_info, this, _1)); pub_info_ = create_publisher("~/output/resized_info", 10); pub_image_ = create_publisher("~/output/resized_image", 10); From b514b1def4e978af7f008ba262d50744c823bec6 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Fri, 5 Jul 2024 14:31:00 +0900 Subject: [PATCH 084/306] chore(ci): remove unnecessary cppcheck suppression (#7862) Signed-off-by: Ryuta Kambe --- .cppcheck_suppressions | 1 - 1 file changed, 1 deletion(-) diff --git a/.cppcheck_suppressions b/.cppcheck_suppressions index 1407a01c4054a..7c921dac7db4c 100644 --- a/.cppcheck_suppressions +++ b/.cppcheck_suppressions @@ -15,7 +15,6 @@ missingIncludeSystem noConstructor passedByValue redundantInitialization -shadowFunction shadowVariable // cspell: ignore uninit uninitMemberVar From b3f9b10171e178e13c303dfc6b4e11a79c07bb09 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Fri, 5 Jul 2024 15:06:44 +0900 Subject: [PATCH 085/306] fix(fake_test_node, osqp_interface, qp_interface): remove unnecessary cppcheck inline suppressions (#7855) * fix(fake_test_node, osqp_interface, qp_interface): remove unnecessary cppcheck inline suppressions Signed-off-by: Ryuta Kambe * style(pre-commit): autofix --------- Signed-off-by: Ryuta Kambe Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- common/fake_test_node/test/test_fake_test_node.cpp | 4 +--- common/osqp_interface/test/test_osqp_interface.cpp | 1 - common/qp_interface/test/test_osqp_interface.cpp | 1 - common/qp_interface/test/test_proxqp_interface.cpp | 1 - 4 files changed, 1 insertion(+), 6 deletions(-) diff --git a/common/fake_test_node/test/test_fake_test_node.cpp b/common/fake_test_node/test/test_fake_test_node.cpp index 163bd761407c5..77e9294cb48c2 100644 --- a/common/fake_test_node/test/test_fake_test_node.cpp +++ b/common/fake_test_node/test/test_fake_test_node.cpp @@ -96,9 +96,7 @@ TEST_F(FakeNodeFixture, Test) } INSTANTIATE_TEST_SUITE_P( - FakeNodeFixtureTests, FakeNodeFixtureParametrized, - // cppcheck-suppress syntaxError // cppcheck doesn't like the trailing comma. - ::testing::Values(-5, 0, 42)); + FakeNodeFixtureTests, FakeNodeFixtureParametrized, ::testing::Values(-5, 0, 42)); /// @test Test that we can use a parametrized test. TEST_P(FakeNodeFixtureParametrized, Test) diff --git a/common/osqp_interface/test/test_osqp_interface.cpp b/common/osqp_interface/test/test_osqp_interface.cpp index caa89c79d08ea..4644ec6c3e019 100644 --- a/common/osqp_interface/test/test_osqp_interface.cpp +++ b/common/osqp_interface/test/test_osqp_interface.cpp @@ -37,7 +37,6 @@ namespace // y = [-2.9, 0.0, 0.2, 0.0]` // obj = 1.88 -// cppcheck-suppress syntaxError TEST(TestOsqpInterface, BasicQp) { using autoware::common::osqp::calCSCMatrix; diff --git a/common/qp_interface/test/test_osqp_interface.cpp b/common/qp_interface/test/test_osqp_interface.cpp index e5d7041469289..5ce1f0eb064a1 100644 --- a/common/qp_interface/test/test_osqp_interface.cpp +++ b/common/qp_interface/test/test_osqp_interface.cpp @@ -37,7 +37,6 @@ namespace // y = [-2.9, 0.0, 0.2, 0.0]` // obj = 1.88 -// cppcheck-suppress syntaxError TEST(TestOsqpInterface, BasicQp) { using qp::calCSCMatrix; diff --git a/common/qp_interface/test/test_proxqp_interface.cpp b/common/qp_interface/test/test_proxqp_interface.cpp index 96466665d5172..c28678e5c872a 100644 --- a/common/qp_interface/test/test_proxqp_interface.cpp +++ b/common/qp_interface/test/test_proxqp_interface.cpp @@ -38,7 +38,6 @@ namespace // y = [-2.9, 0.0, 0.2, 0.0]` // obj = 1.88 -// cppcheck-suppress syntaxError TEST(TestProxqpInterface, BasicQp) { auto check_result = [](const auto & solution) { From 46125cc5bdf615af1f4ee279e53625dce02d3d87 Mon Sep 17 00:00:00 2001 From: Fumiya Watanabe Date: Fri, 5 Jul 2024 16:37:00 +0900 Subject: [PATCH 086/306] feat(mission_planner): reroute in manual driving (#7842) * feat(mission_planner): reroute in manual driving Signed-off-by: Fumiya Watanabe * docs(mission_planner): update document Signed-off-by: Fumiya Watanabe * feat(mission_planner): fix operation mode state receiving check Signed-off-by: Fumiya Watanabe --------- Signed-off-by: Fumiya Watanabe --- planning/autoware_mission_planner/README.md | 10 ++-- .../launch/mission_planner.launch.xml | 1 + .../src/mission_planner/mission_planner.cpp | 50 ++++++++++++++++--- .../src/mission_planner/mission_planner.hpp | 5 ++ 4 files changed, 54 insertions(+), 12 deletions(-) diff --git a/planning/autoware_mission_planner/README.md b/planning/autoware_mission_planner/README.md index 2f912e30b8246..452d0a64d5c9c 100644 --- a/planning/autoware_mission_planner/README.md +++ b/planning/autoware_mission_planner/README.md @@ -47,10 +47,11 @@ It distributes route requests and planning results according to current MRM oper ### Subscriptions -| Name | Type | Description | -| --------------------- | ----------------------------------- | ---------------------- | -| `input/vector_map` | autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 | -| `input/modified_goal` | geometry_msgs/PoseWithUuidStamped | modified goal pose | +| Name | Type | Description | +| ---------------------------- | ----------------------------------------- | ---------------------- | +| `input/vector_map` | autoware_map_msgs/msg/LaneletMapBin | vector map of Lanelet2 | +| `input/modified_goal` | geometry_msgs/PoseWithUuidStamped | modified goal pose | +| `input/operation_mode_state` | autoware_adapi_v1_msgs/OperationModeState | operation mode state | ### Publications @@ -170,6 +171,7 @@ To calculate `route_lanelets`, ### Rerouting Reroute here means changing the route while driving. Unlike route setting, it is required to keep a certain distance from vehicle to the point where the route is changed. +If the ego vehicle is not on autonomous driving state, the safety checking process will be skipped. ![rerouting_safety](./media/rerouting_safety.svg) diff --git a/planning/autoware_mission_planner/launch/mission_planner.launch.xml b/planning/autoware_mission_planner/launch/mission_planner.launch.xml index 655662c392213..8d77e417a6379 100644 --- a/planning/autoware_mission_planner/launch/mission_planner.launch.xml +++ b/planning/autoware_mission_planner/launch/mission_planner.launch.xml @@ -10,6 +10,7 @@ + diff --git a/planning/autoware_mission_planner/src/mission_planner/mission_planner.cpp b/planning/autoware_mission_planner/src/mission_planner/mission_planner.cpp index 0df01257f049e..2b1b943e002a8 100644 --- a/planning/autoware_mission_planner/src/mission_planner/mission_planner.cpp +++ b/planning/autoware_mission_planner/src/mission_planner/mission_planner.cpp @@ -55,6 +55,9 @@ MissionPlanner::MissionPlanner(const rclcpp::NodeOptions & options) const auto durable_qos = rclcpp::QoS(1).transient_local(); sub_odometry_ = create_subscription( "~/input/odometry", rclcpp::QoS(1), std::bind(&MissionPlanner::on_odometry, this, _1)); + sub_operation_mode_state_ = create_subscription( + "~/input/operation_mode_state", rclcpp::QoS(1), + std::bind(&MissionPlanner::on_operation_mode_state, this, _1)); sub_vector_map_ = create_subscription( "~/input/vector_map", durable_qos, std::bind(&MissionPlanner::on_map, this, _1)); pub_marker_ = create_publisher("~/debug/route_marker", durable_qos); @@ -130,6 +133,11 @@ void MissionPlanner::on_odometry(const Odometry::ConstSharedPtr msg) } } +void MissionPlanner::on_operation_mode_state(const OperationModeState::ConstSharedPtr msg) +{ + operation_mode_state_ = msg; +} + void MissionPlanner::on_map(const LaneletMapBin::ConstSharedPtr msg) { map_ptr_ = msg; @@ -222,10 +230,23 @@ void MissionPlanner::on_set_lanelet_route( throw service_utils::ServiceException( ResponseCode::ERROR_PLANNER_UNREADY, "The vehicle pose is not received."); } - const auto reroute_availability = sub_reroute_availability_.takeData(); - if (is_reroute && (!reroute_availability || !reroute_availability->availability)) { + if (is_reroute && !operation_mode_state_) { throw service_utils::ServiceException( - ResponseCode::ERROR_INVALID_STATE, "Cannot reroute as the planner is not in lane following."); + ResponseCode::ERROR_PLANNER_UNREADY, "Operation mode state is not received."); + } + + const bool is_autonomous_driving = + operation_mode_state_ ? operation_mode_state_->mode == OperationModeState::AUTONOMOUS && + operation_mode_state_->is_autoware_control_enabled + : false; + + if (is_reroute && is_autonomous_driving) { + const auto reroute_availability = sub_reroute_availability_.takeData(); + if (!reroute_availability || !reroute_availability->availability) { + throw service_utils::ServiceException( + ResponseCode::ERROR_INVALID_STATE, + "Cannot reroute as the planner is not in lane following."); + } } change_state(is_reroute ? RouteState::REROUTING : RouteState::ROUTING); @@ -238,7 +259,7 @@ void MissionPlanner::on_set_lanelet_route( ResponseCode::ERROR_PLANNER_FAILED, "The planned route is empty."); } - if (is_reroute && !check_reroute_safety(*current_route_, route)) { + if (is_reroute && is_autonomous_driving && !check_reroute_safety(*current_route_, route)) { cancel_route(); change_state(RouteState::SET); throw service_utils::ServiceException( @@ -271,10 +292,23 @@ void MissionPlanner::on_set_waypoint_route( throw service_utils::ServiceException( ResponseCode::ERROR_PLANNER_UNREADY, "The vehicle pose is not received."); } - const auto reroute_availability = sub_reroute_availability_.takeData(); - if (is_reroute && (!reroute_availability || !reroute_availability->availability)) { + if (is_reroute && !operation_mode_state_) { throw service_utils::ServiceException( - ResponseCode::ERROR_INVALID_STATE, "Cannot reroute as the planner is not in lane following."); + ResponseCode::ERROR_PLANNER_UNREADY, "Operation mode state is not received."); + } + + const bool is_autonomous_driving = + operation_mode_state_ ? operation_mode_state_->mode == OperationModeState::AUTONOMOUS && + operation_mode_state_->is_autoware_control_enabled + : false; + + if (is_reroute && is_autonomous_driving) { + const auto reroute_availability = sub_reroute_availability_.takeData(); + if (!reroute_availability || !reroute_availability->availability) { + throw service_utils::ServiceException( + ResponseCode::ERROR_INVALID_STATE, + "Cannot reroute as the planner is not in lane following."); + } } change_state(is_reroute ? RouteState::REROUTING : RouteState::ROUTING); @@ -287,7 +321,7 @@ void MissionPlanner::on_set_waypoint_route( ResponseCode::ERROR_PLANNER_FAILED, "The planned route is empty."); } - if (is_reroute && !check_reroute_safety(*current_route_, route)) { + if (is_reroute && is_autonomous_driving && !check_reroute_safety(*current_route_, route)) { cancel_route(); change_state(RouteState::SET); throw service_utils::ServiceException( diff --git a/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp b/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp index 1a04a91c14ba3..1181ef54273ae 100644 --- a/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp +++ b/planning/autoware_mission_planner/src/mission_planner/mission_planner.hpp @@ -24,6 +24,7 @@ #include #include +#include #include #include #include @@ -45,6 +46,7 @@ namespace autoware::mission_planner { +using autoware_adapi_v1_msgs::msg::OperationModeState; using autoware_map_msgs::msg::LaneletMapBin; using autoware_planning_msgs::msg::LaneletPrimitive; using autoware_planning_msgs::msg::LaneletRoute; @@ -85,18 +87,21 @@ class MissionPlanner : public rclcpp::Node rclcpp::Subscription::SharedPtr sub_modified_goal_; rclcpp::Subscription::SharedPtr sub_odometry_; + rclcpp::Subscription::SharedPtr sub_operation_mode_state_; autoware::universe_utils::InterProcessPollingSubscriber sub_reroute_availability_{this, "~/input/reroute_availability"}; rclcpp::Subscription::SharedPtr sub_vector_map_; rclcpp::Publisher::SharedPtr pub_marker_; Odometry::ConstSharedPtr odometry_; + OperationModeState::ConstSharedPtr operation_mode_state_; LaneletMapBin::ConstSharedPtr map_ptr_; RouteState state_; LaneletRoute::ConstSharedPtr current_route_; lanelet::LaneletMapPtr lanelet_map_ptr_{nullptr}; void on_odometry(const Odometry::ConstSharedPtr msg); + void on_operation_mode_state(const OperationModeState::ConstSharedPtr msg); void on_map(const LaneletMapBin::ConstSharedPtr msg); void on_reroute_availability(const RerouteAvailability::ConstSharedPtr msg); void on_modified_goal(const PoseWithUuidStamped::ConstSharedPtr msg); From a5ab63ba751675cbecfa58bb091c026197d95cc7 Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Fri, 5 Jul 2024 16:47:02 +0900 Subject: [PATCH 087/306] refactor(map_loader): apply static analysis (#7845) * refactor based on linter Signed-off-by: a-maumau * style(pre-commit): autofix --------- Signed-off-by: a-maumau Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../map_loader/lanelet2_map_loader_node.hpp | 7 +- .../lanelet2_map_visualization_node.hpp | 2 +- .../lanelet2_local_projector.hpp | 2 +- .../lanelet2_map_loader_node.cpp | 10 +- .../lanelet2_map_visualization_node.cpp | 160 ++++++++++-------- .../differential_map_loader_module.cpp | 30 ++-- .../differential_map_loader_module.hpp | 12 +- .../partial_map_loader_module.cpp | 33 ++-- .../partial_map_loader_module.hpp | 12 +- .../pointcloud_map_loader_module.cpp | 8 +- .../pointcloud_map_loader_module.hpp | 2 +- .../pointcloud_map_loader_node.cpp | 33 ++-- .../pointcloud_map_loader_node.hpp | 4 +- .../selected_map_loader_module.cpp | 28 +-- .../selected_map_loader_module.hpp | 6 +- .../src/pointcloud_map_loader/utils.cpp | 36 ++-- .../src/pointcloud_map_loader/utils.hpp | 10 +- .../test/test_cylinder_box_overlap.cpp | 6 +- .../test/test_load_pcd_metadata.cpp | 6 +- .../test_pointcloud_map_loader_module.cpp | 4 +- .../test/test_replace_with_absolute_path.cpp | 4 +- 21 files changed, 217 insertions(+), 198 deletions(-) diff --git a/map/map_loader/include/map_loader/lanelet2_map_loader_node.hpp b/map/map_loader/include/map_loader/lanelet2_map_loader_node.hpp index 4e85ddec056c1..8bfdbc5d5560c 100644 --- a/map/map_loader/include/map_loader/lanelet2_map_loader_node.hpp +++ b/map/map_loader/include/map_loader/lanelet2_map_loader_node.hpp @@ -27,9 +27,6 @@ #include #include -using autoware_map_msgs::msg::LaneletMapBin; -using tier4_map_msgs::msg::MapProjectorInfo; - class Lanelet2MapLoaderNode : public rclcpp::Node { public: @@ -38,7 +35,7 @@ class Lanelet2MapLoaderNode : public rclcpp::Node static lanelet::LaneletMapPtr load_map( const std::string & lanelet2_filename, const tier4_map_msgs::msg::MapProjectorInfo & projector_info); - static LaneletMapBin create_map_bin_msg( + static autoware_map_msgs::msg::LaneletMapBin create_map_bin_msg( const lanelet::LaneletMapPtr map, const std::string & lanelet2_filename, const rclcpp::Time & now); @@ -48,7 +45,7 @@ class Lanelet2MapLoaderNode : public rclcpp::Node void on_map_projector_info(const MapProjectorInfo::Message::ConstSharedPtr msg); component_interface_utils::Subscription::SharedPtr sub_map_projector_info_; - rclcpp::Publisher::SharedPtr pub_map_bin_; + rclcpp::Publisher::SharedPtr pub_map_bin_; }; #endif // MAP_LOADER__LANELET2_MAP_LOADER_NODE_HPP_ diff --git a/map/map_loader/include/map_loader/lanelet2_map_visualization_node.hpp b/map/map_loader/include/map_loader/lanelet2_map_visualization_node.hpp index cb640e4dc83d5..049d714ec452a 100644 --- a/map/map_loader/include/map_loader/lanelet2_map_visualization_node.hpp +++ b/map/map_loader/include/map_loader/lanelet2_map_visualization_node.hpp @@ -34,7 +34,7 @@ class Lanelet2MapVisualizationNode : public rclcpp::Node bool viz_lanelets_centerline_; - void onMapBin(const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg); + void on_map_bin(const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg); }; #endif // MAP_LOADER__LANELET2_MAP_VISUALIZATION_NODE_HPP_ diff --git a/map/map_loader/src/lanelet2_map_loader/lanelet2_local_projector.hpp b/map/map_loader/src/lanelet2_map_loader/lanelet2_local_projector.hpp index 225445d17bfa1..d73ec0d1ee06e 100644 --- a/map/map_loader/src/lanelet2_map_loader/lanelet2_local_projector.hpp +++ b/map/map_loader/src/lanelet2_map_loader/lanelet2_local_projector.hpp @@ -30,7 +30,7 @@ class LocalProjector : public Projector return BasicPoint3d{0.0, 0.0, gps.ele}; } - GPSPoint reverse(const BasicPoint3d & point) const override + [[nodiscard]] GPSPoint reverse(const BasicPoint3d & point) const override { return GPSPoint{0.0, 0.0, point.z()}; } diff --git a/map/map_loader/src/lanelet2_map_loader/lanelet2_map_loader_node.cpp b/map/map_loader/src/lanelet2_map_loader/lanelet2_map_loader_node.cpp index 7b712c7c281a2..e2b2a052619e4 100644 --- a/map/map_loader/src/lanelet2_map_loader/lanelet2_map_loader_node.cpp +++ b/map/map_loader/src/lanelet2_map_loader/lanelet2_map_loader_node.cpp @@ -51,6 +51,9 @@ #include +using autoware_map_msgs::msg::LaneletMapBin; +using tier4_map_msgs::msg::MapProjectorInfo; + Lanelet2MapLoaderNode::Lanelet2MapLoaderNode(const rclcpp::NodeOptions & options) : Node("lanelet2_map_loader", options) { @@ -105,13 +108,13 @@ lanelet::LaneletMapPtr Lanelet2MapLoaderNode::load_map( if (projector_info.projector_type != tier4_map_msgs::msg::MapProjectorInfo::LOCAL) { std::unique_ptr projector = geography_utils::get_lanelet2_projector(projector_info); - const lanelet::LaneletMapPtr map = lanelet::load(lanelet2_filename, *projector, &errors); + lanelet::LaneletMapPtr map = lanelet::load(lanelet2_filename, *projector, &errors); if (errors.empty()) { return map; } } else { const lanelet::projection::LocalProjector projector; - const lanelet::LaneletMapPtr map = lanelet::load(lanelet2_filename, projector, &errors); + lanelet::LaneletMapPtr map = lanelet::load(lanelet2_filename, projector, &errors); if (!errors.empty()) { for (const auto & error : errors) { @@ -150,7 +153,8 @@ lanelet::LaneletMapPtr Lanelet2MapLoaderNode::load_map( LaneletMapBin Lanelet2MapLoaderNode::create_map_bin_msg( const lanelet::LaneletMapPtr map, const std::string & lanelet2_filename, const rclcpp::Time & now) { - std::string format_version{}, map_version{}; + std::string format_version{}; + std::string map_version{}; lanelet::io_handlers::AutowareOsmParser::parseVersions( lanelet2_filename, &format_version, &map_version); diff --git a/map/map_loader/src/lanelet2_map_loader/lanelet2_map_visualization_node.cpp b/map/map_loader/src/lanelet2_map_loader/lanelet2_map_visualization_node.cpp index 87319222001d9..4bff12c640c30 100644 --- a/map/map_loader/src/lanelet2_map_loader/lanelet2_map_visualization_node.cpp +++ b/map/map_loader/src/lanelet2_map_loader/lanelet2_map_visualization_node.cpp @@ -51,18 +51,18 @@ namespace { -void insertMarkerArray( +void insert_marker_array( visualization_msgs::msg::MarkerArray * a1, const visualization_msgs::msg::MarkerArray & a2) { a1->markers.insert(a1->markers.end(), a2.markers.begin(), a2.markers.end()); } -void setColor(std_msgs::msg::ColorRGBA * cl, double r, double g, double b, double a) +void set_color(std_msgs::msg::ColorRGBA * cl, double r, double g, double b, double a) { - cl->r = r; - cl->g = g; - cl->b = b; - cl->a = a; + cl->r = static_cast(r); + cl->g = static_cast(g); + cl->b = static_cast(b); + cl->a = static_cast(a); } } // namespace @@ -75,13 +75,13 @@ Lanelet2MapVisualizationNode::Lanelet2MapVisualizationNode(const rclcpp::NodeOpt sub_map_bin_ = this->create_subscription( "input/lanelet2_map", rclcpp::QoS{1}.transient_local(), - std::bind(&Lanelet2MapVisualizationNode::onMapBin, this, _1)); + std::bind(&Lanelet2MapVisualizationNode::on_map_bin, this, _1)); pub_marker_ = this->create_publisher( "output/lanelet2_map_marker", rclcpp::QoS{1}.transient_local()); } -void Lanelet2MapVisualizationNode::onMapBin( +void Lanelet2MapVisualizationNode::on_map_bin( const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg) { lanelet::LaneletMapPtr viz_lanelet_map(new lanelet::LaneletMap); @@ -103,8 +103,6 @@ void Lanelet2MapVisualizationNode::onMapBin( lanelet::ConstLanelets walkway_lanelets = lanelet::utils::query::walkwayLanelets(all_lanelets); std::vector stop_lines = lanelet::utils::query::stopLinesLanelets(road_lanelets); - std::vector tl_reg_elems = - lanelet::utils::query::trafficLights(all_lanelets); std::vector aw_tl_reg_elems = lanelet::utils::query::autowareTrafficLights(all_lanelets); std::vector da_reg_elems = @@ -133,140 +131,158 @@ void Lanelet2MapVisualizationNode::onMapBin( lanelet::utils::query::noParkingAreas(all_lanelets); lanelet::ConstLineStrings3d curbstones = lanelet::utils::query::curbstones(viz_lanelet_map); - std_msgs::msg::ColorRGBA cl_road, cl_shoulder, cl_cross, cl_partitions, cl_pedestrian_markings, - cl_ll_borders, cl_shoulder_borders, cl_stoplines, cl_trafficlights, cl_detection_areas, - cl_speed_bumps, cl_crosswalks, cl_parking_lots, cl_parking_spaces, cl_lanelet_id, - cl_obstacle_polygons, cl_no_stopping_areas, cl_no_obstacle_segmentation_area, - cl_no_obstacle_segmentation_area_for_run_out, cl_hatched_road_markings_area, - cl_hatched_road_markings_line, cl_no_parking_areas, cl_curbstones, cl_intersection_area; - setColor(&cl_road, 0.27, 0.27, 0.27, 0.999); - setColor(&cl_shoulder, 0.15, 0.15, 0.15, 0.999); - setColor(&cl_cross, 0.27, 0.3, 0.27, 0.5); - setColor(&cl_partitions, 0.25, 0.25, 0.25, 0.999); - setColor(&cl_pedestrian_markings, 0.5, 0.5, 0.5, 0.999); - setColor(&cl_ll_borders, 0.5, 0.5, 0.5, 0.999); - setColor(&cl_shoulder_borders, 0.2, 0.2, 0.2, 0.999); - setColor(&cl_stoplines, 0.5, 0.5, 0.5, 0.999); - setColor(&cl_trafficlights, 0.5, 0.5, 0.5, 0.8); - setColor(&cl_detection_areas, 0.27, 0.27, 0.37, 0.5); - setColor(&cl_no_stopping_areas, 0.37, 0.37, 0.37, 0.5); - setColor(&cl_speed_bumps, 0.56, 0.40, 0.27, 0.5); - setColor(&cl_crosswalks, 0.80, 0.80, 0.0, 0.5); - setColor(&cl_obstacle_polygons, 0.4, 0.27, 0.27, 0.5); - setColor(&cl_parking_lots, 1.0, 1.0, 1.0, 0.2); - setColor(&cl_parking_spaces, 1.0, 1.0, 1.0, 0.3); - setColor(&cl_lanelet_id, 0.5, 0.5, 0.5, 0.999); - setColor(&cl_no_obstacle_segmentation_area, 0.37, 0.37, 0.27, 0.5); - setColor(&cl_no_obstacle_segmentation_area_for_run_out, 0.37, 0.7, 0.27, 0.5); - setColor(&cl_hatched_road_markings_area, 0.3, 0.3, 0.3, 0.5); - setColor(&cl_hatched_road_markings_line, 0.5, 0.5, 0.5, 0.999); - setColor(&cl_no_parking_areas, 0.42, 0.42, 0.42, 0.5); - setColor(&cl_curbstones, 0.1, 0.1, 0.2, 0.999); - setColor(&cl_intersection_area, 0.16, 1.0, 0.69, 0.5); + std_msgs::msg::ColorRGBA cl_road; + std_msgs::msg::ColorRGBA cl_shoulder; + std_msgs::msg::ColorRGBA cl_cross; + std_msgs::msg::ColorRGBA cl_partitions; + std_msgs::msg::ColorRGBA cl_pedestrian_markings; + std_msgs::msg::ColorRGBA cl_ll_borders; + std_msgs::msg::ColorRGBA cl_shoulder_borders; + std_msgs::msg::ColorRGBA cl_stoplines; + std_msgs::msg::ColorRGBA cl_trafficlights; + std_msgs::msg::ColorRGBA cl_detection_areas; + std_msgs::msg::ColorRGBA cl_speed_bumps; + std_msgs::msg::ColorRGBA cl_crosswalks; + std_msgs::msg::ColorRGBA cl_parking_lots; + std_msgs::msg::ColorRGBA cl_parking_spaces; + std_msgs::msg::ColorRGBA cl_lanelet_id; + std_msgs::msg::ColorRGBA cl_obstacle_polygons; + std_msgs::msg::ColorRGBA cl_no_stopping_areas; + std_msgs::msg::ColorRGBA cl_no_obstacle_segmentation_area; + std_msgs::msg::ColorRGBA cl_no_obstacle_segmentation_area_for_run_out; + std_msgs::msg::ColorRGBA cl_hatched_road_markings_area; + std_msgs::msg::ColorRGBA cl_hatched_road_markings_line; + std_msgs::msg::ColorRGBA cl_no_parking_areas; + std_msgs::msg::ColorRGBA cl_curbstones; + std_msgs::msg::ColorRGBA cl_intersection_area; + set_color(&cl_road, 0.27, 0.27, 0.27, 0.999); + set_color(&cl_shoulder, 0.15, 0.15, 0.15, 0.999); + set_color(&cl_cross, 0.27, 0.3, 0.27, 0.5); + set_color(&cl_partitions, 0.25, 0.25, 0.25, 0.999); + set_color(&cl_pedestrian_markings, 0.5, 0.5, 0.5, 0.999); + set_color(&cl_ll_borders, 0.5, 0.5, 0.5, 0.999); + set_color(&cl_shoulder_borders, 0.2, 0.2, 0.2, 0.999); + set_color(&cl_stoplines, 0.5, 0.5, 0.5, 0.999); + set_color(&cl_trafficlights, 0.5, 0.5, 0.5, 0.8); + set_color(&cl_detection_areas, 0.27, 0.27, 0.37, 0.5); + set_color(&cl_no_stopping_areas, 0.37, 0.37, 0.37, 0.5); + set_color(&cl_speed_bumps, 0.56, 0.40, 0.27, 0.5); + set_color(&cl_crosswalks, 0.80, 0.80, 0.0, 0.5); + set_color(&cl_obstacle_polygons, 0.4, 0.27, 0.27, 0.5); + set_color(&cl_parking_lots, 1.0, 1.0, 1.0, 0.2); + set_color(&cl_parking_spaces, 1.0, 1.0, 1.0, 0.3); + set_color(&cl_lanelet_id, 0.5, 0.5, 0.5, 0.999); + set_color(&cl_no_obstacle_segmentation_area, 0.37, 0.37, 0.27, 0.5); + set_color(&cl_no_obstacle_segmentation_area_for_run_out, 0.37, 0.7, 0.27, 0.5); + set_color(&cl_hatched_road_markings_area, 0.3, 0.3, 0.3, 0.5); + set_color(&cl_hatched_road_markings_line, 0.5, 0.5, 0.5, 0.999); + set_color(&cl_no_parking_areas, 0.42, 0.42, 0.42, 0.5); + set_color(&cl_curbstones, 0.1, 0.1, 0.2, 0.999); + set_color(&cl_intersection_area, 0.16, 1.0, 0.69, 0.5); visualization_msgs::msg::MarkerArray map_marker_array; - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::lineStringsAsMarkerArray(stop_lines, "stop_lines", cl_stoplines, 0.5)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::lineStringsAsMarkerArray(partitions, "partitions", cl_partitions, 0.1)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::laneletDirectionAsMarkerArray(shoulder_lanelets, "shoulder_")); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::laneletDirectionAsMarkerArray(road_lanelets)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::laneletsAsTriangleMarkerArray( "crosswalk_lanelets", crosswalk_lanelets, cl_cross)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::pedestrianPolygonMarkingsAsMarkerArray( pedestrian_polygon_markings, cl_pedestrian_markings)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::pedestrianLineMarkingsAsMarkerArray( pedestrian_line_markings, cl_pedestrian_markings)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::laneletsAsTriangleMarkerArray( "walkway_lanelets", walkway_lanelets, cl_cross)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::obstaclePolygonsAsMarkerArray(obstacle_polygons, cl_obstacle_polygons)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::detectionAreasAsMarkerArray(da_reg_elems, cl_detection_areas)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::noStoppingAreasAsMarkerArray(no_reg_elems, cl_no_stopping_areas)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::speedBumpsAsMarkerArray(sb_reg_elems, cl_speed_bumps)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::crosswalkAreasAsMarkerArray(cw_reg_elems, cl_crosswalks)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::parkingLotsAsMarkerArray(parking_lots, cl_parking_lots)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::parkingSpacesAsMarkerArray(parking_spaces, cl_parking_spaces)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::laneletsBoundaryAsMarkerArray( shoulder_lanelets, cl_shoulder_borders, viz_lanelets_centerline_, "shoulder_")); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::laneletsBoundaryAsMarkerArray( road_lanelets, cl_ll_borders, viz_lanelets_centerline_)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::autowareTrafficLightsAsMarkerArray(aw_tl_reg_elems, cl_trafficlights)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::generateTrafficLightRegulatoryElementIdMaker( road_lanelets, cl_trafficlights)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::generateTrafficLightRegulatoryElementIdMaker( crosswalk_lanelets, cl_trafficlights)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::generateTrafficLightIdMaker(aw_tl_reg_elems, cl_trafficlights)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::generateLaneletIdMarker(shoulder_lanelets, cl_lanelet_id)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::generateLaneletIdMarker(road_lanelets, cl_lanelet_id)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::generateLaneletIdMarker( crosswalk_lanelets, cl_lanelet_id, "crosswalk_lanelet_id")); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::laneletsAsTriangleMarkerArray( "shoulder_road_lanelets", shoulder_lanelets, cl_shoulder)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::laneletsAsTriangleMarkerArray("road_lanelets", road_lanelets, cl_road)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::noObstacleSegmentationAreaAsMarkerArray( no_obstacle_segmentation_area, cl_no_obstacle_segmentation_area)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::noObstacleSegmentationAreaForRunOutAsMarkerArray( no_obstacle_segmentation_area_for_run_out, cl_no_obstacle_segmentation_area_for_run_out)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::hatchedRoadMarkingsAreaAsMarkerArray( hatched_road_markings_area, cl_hatched_road_markings_area, cl_hatched_road_markings_line)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::noParkingAreasAsMarkerArray(no_parking_reg_elems, cl_no_parking_areas)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::lineStringsAsMarkerArray(curbstones, "curbstone", cl_curbstones, 0.2)); - insertMarkerArray( + insert_marker_array( &map_marker_array, lanelet::visualization::intersectionAreaAsMarkerArray( intersection_areas, cl_intersection_area)); diff --git a/map/map_loader/src/pointcloud_map_loader/differential_map_loader_module.cpp b/map/map_loader/src/pointcloud_map_loader/differential_map_loader_module.cpp index a8d380fd81b86..da42389dcc69f 100644 --- a/map/map_loader/src/pointcloud_map_loader/differential_map_loader_module.cpp +++ b/map/map_loader/src/pointcloud_map_loader/differential_map_loader_module.cpp @@ -14,20 +14,22 @@ #include "differential_map_loader_module.hpp" +#include + DifferentialMapLoaderModule::DifferentialMapLoaderModule( - rclcpp::Node * node, const std::map & pcd_file_metadata_dict) -: logger_(node->get_logger()), all_pcd_file_metadata_dict_(pcd_file_metadata_dict) + rclcpp::Node * node, std::map pcd_file_metadata_dict) +: logger_(node->get_logger()), all_pcd_file_metadata_dict_(std::move(pcd_file_metadata_dict)) { get_differential_pcd_maps_service_ = node->create_service( "service/get_differential_pcd_map", std::bind( - &DifferentialMapLoaderModule::onServiceGetDifferentialPointCloudMap, this, + &DifferentialMapLoaderModule::on_service_get_differential_point_cloud_map, this, std::placeholders::_1, std::placeholders::_2)); } -void DifferentialMapLoaderModule::differentialAreaLoad( - const autoware_map_msgs::msg::AreaInfo & area, const std::vector & cached_ids, - GetDifferentialPointCloudMap::Response::SharedPtr & response) const +void DifferentialMapLoaderModule::differential_area_load( + const autoware_map_msgs::msg::AreaInfo & area_info, const std::vector & cached_ids, + const GetDifferentialPointCloudMap::Response::SharedPtr & response) const { // iterate over all the available pcd map grids std::vector should_remove(static_cast(cached_ids.size()), true); @@ -36,18 +38,18 @@ void DifferentialMapLoaderModule::differentialAreaLoad( PCDFileMetadata metadata = ele.second; // assume that the map ID = map path (for now) - std::string map_id = path; + const std::string & map_id = path; // skip if the pcd file is not within the queried area - if (!isGridWithinQueriedArea(area, metadata)) continue; + if (!is_grid_within_queried_area(area_info, metadata)) continue; auto id_in_cached_list = std::find(cached_ids.begin(), cached_ids.end(), map_id); if (id_in_cached_list != cached_ids.end()) { - int index = id_in_cached_list - cached_ids.begin(); + int index = static_cast(id_in_cached_list - cached_ids.begin()); should_remove[index] = false; } else { autoware_map_msgs::msg::PointCloudMapCellWithID pointcloud_map_cell_with_id = - loadPointCloudMapCellWithID(path, map_id); + load_point_cloud_map_cell_with_id(path, map_id); pointcloud_map_cell_with_id.metadata.min_x = metadata.min.x; pointcloud_map_cell_with_id.metadata.min_y = metadata.min.y; pointcloud_map_cell_with_id.metadata.max_x = metadata.max.x; @@ -63,19 +65,19 @@ void DifferentialMapLoaderModule::differentialAreaLoad( } } -bool DifferentialMapLoaderModule::onServiceGetDifferentialPointCloudMap( +bool DifferentialMapLoaderModule::on_service_get_differential_point_cloud_map( GetDifferentialPointCloudMap::Request::SharedPtr req, - GetDifferentialPointCloudMap::Response::SharedPtr res) + GetDifferentialPointCloudMap::Response::SharedPtr res) const { auto area = req->area; std::vector cached_ids = req->cached_ids; - differentialAreaLoad(area, cached_ids, res); + differential_area_load(area, cached_ids, res); res->header.frame_id = "map"; return true; } autoware_map_msgs::msg::PointCloudMapCellWithID -DifferentialMapLoaderModule::loadPointCloudMapCellWithID( +DifferentialMapLoaderModule::load_point_cloud_map_cell_with_id( const std::string & path, const std::string & map_id) const { sensor_msgs::msg::PointCloud2 pcd; diff --git a/map/map_loader/src/pointcloud_map_loader/differential_map_loader_module.hpp b/map/map_loader/src/pointcloud_map_loader/differential_map_loader_module.hpp index 7069e1dbdf45c..690ffeca653c8 100644 --- a/map/map_loader/src/pointcloud_map_loader/differential_map_loader_module.hpp +++ b/map/map_loader/src/pointcloud_map_loader/differential_map_loader_module.hpp @@ -38,7 +38,7 @@ class DifferentialMapLoaderModule public: explicit DifferentialMapLoaderModule( - rclcpp::Node * node, const std::map & pcd_file_metadata_dict); + rclcpp::Node * node, std::map pcd_file_metadata_dict); private: rclcpp::Logger logger_; @@ -46,13 +46,13 @@ class DifferentialMapLoaderModule std::map all_pcd_file_metadata_dict_; rclcpp::Service::SharedPtr get_differential_pcd_maps_service_; - bool onServiceGetDifferentialPointCloudMap( + [[nodiscard]] bool on_service_get_differential_point_cloud_map( GetDifferentialPointCloudMap::Request::SharedPtr req, - GetDifferentialPointCloudMap::Response::SharedPtr res); - void differentialAreaLoad( + GetDifferentialPointCloudMap::Response::SharedPtr res) const; + void differential_area_load( const autoware_map_msgs::msg::AreaInfo & area_info, const std::vector & cached_ids, - GetDifferentialPointCloudMap::Response::SharedPtr & response) const; - autoware_map_msgs::msg::PointCloudMapCellWithID loadPointCloudMapCellWithID( + const GetDifferentialPointCloudMap::Response::SharedPtr & response) const; + [[nodiscard]] autoware_map_msgs::msg::PointCloudMapCellWithID load_point_cloud_map_cell_with_id( const std::string & path, const std::string & map_id) const; }; diff --git a/map/map_loader/src/pointcloud_map_loader/partial_map_loader_module.cpp b/map/map_loader/src/pointcloud_map_loader/partial_map_loader_module.cpp index 8c9378e9dfadb..62e165dd1005b 100644 --- a/map/map_loader/src/pointcloud_map_loader/partial_map_loader_module.cpp +++ b/map/map_loader/src/pointcloud_map_loader/partial_map_loader_module.cpp @@ -14,19 +14,22 @@ #include "partial_map_loader_module.hpp" +#include + PartialMapLoaderModule::PartialMapLoaderModule( - rclcpp::Node * node, const std::map & pcd_file_metadata_dict) -: logger_(node->get_logger()), all_pcd_file_metadata_dict_(pcd_file_metadata_dict) + rclcpp::Node * node, std::map pcd_file_metadata_dict) +: logger_(node->get_logger()), all_pcd_file_metadata_dict_(std::move(pcd_file_metadata_dict)) { get_partial_pcd_maps_service_ = node->create_service( - "service/get_partial_pcd_map", std::bind( - &PartialMapLoaderModule::onServiceGetPartialPointCloudMap, - this, std::placeholders::_1, std::placeholders::_2)); + "service/get_partial_pcd_map", + std::bind( + &PartialMapLoaderModule::on_service_get_partial_point_cloud_map, this, std::placeholders::_1, + std::placeholders::_2)); } -void PartialMapLoaderModule::partialAreaLoad( +void PartialMapLoaderModule::partial_area_load( const autoware_map_msgs::msg::AreaInfo & area, - GetPartialPointCloudMap::Response::SharedPtr & response) const + const GetPartialPointCloudMap::Response::SharedPtr & response) const { // iterate over all the available pcd map grids for (const auto & ele : all_pcd_file_metadata_dict_) { @@ -34,13 +37,13 @@ void PartialMapLoaderModule::partialAreaLoad( PCDFileMetadata metadata = ele.second; // assume that the map ID = map path (for now) - std::string map_id = path; + const std::string & map_id = path; // skip if the pcd file is not within the queried area - if (!isGridWithinQueriedArea(area, metadata)) continue; + if (!is_grid_within_queried_area(area, metadata)) continue; autoware_map_msgs::msg::PointCloudMapCellWithID pointcloud_map_cell_with_id = - loadPointCloudMapCellWithID(path, map_id); + load_point_cloud_map_cell_with_id(path, map_id); pointcloud_map_cell_with_id.metadata.min_x = metadata.min.x; pointcloud_map_cell_with_id.metadata.min_y = metadata.min.y; pointcloud_map_cell_with_id.metadata.max_x = metadata.max.x; @@ -50,16 +53,18 @@ void PartialMapLoaderModule::partialAreaLoad( } } -bool PartialMapLoaderModule::onServiceGetPartialPointCloudMap( - GetPartialPointCloudMap::Request::SharedPtr req, GetPartialPointCloudMap::Response::SharedPtr res) +bool PartialMapLoaderModule::on_service_get_partial_point_cloud_map( + GetPartialPointCloudMap::Request::SharedPtr req, + GetPartialPointCloudMap::Response::SharedPtr res) const { auto area = req->area; - partialAreaLoad(area, res); + partial_area_load(area, res); res->header.frame_id = "map"; return true; } -autoware_map_msgs::msg::PointCloudMapCellWithID PartialMapLoaderModule::loadPointCloudMapCellWithID( +autoware_map_msgs::msg::PointCloudMapCellWithID +PartialMapLoaderModule::load_point_cloud_map_cell_with_id( const std::string & path, const std::string & map_id) const { sensor_msgs::msg::PointCloud2 pcd; diff --git a/map/map_loader/src/pointcloud_map_loader/partial_map_loader_module.hpp b/map/map_loader/src/pointcloud_map_loader/partial_map_loader_module.hpp index 4d97ab90667ec..ec97661366419 100644 --- a/map/map_loader/src/pointcloud_map_loader/partial_map_loader_module.hpp +++ b/map/map_loader/src/pointcloud_map_loader/partial_map_loader_module.hpp @@ -38,7 +38,7 @@ class PartialMapLoaderModule public: explicit PartialMapLoaderModule( - rclcpp::Node * node, const std::map & pcd_file_metadata_dict); + rclcpp::Node * node, std::map pcd_file_metadata_dict); private: rclcpp::Logger logger_; @@ -46,13 +46,13 @@ class PartialMapLoaderModule std::map all_pcd_file_metadata_dict_; rclcpp::Service::SharedPtr get_partial_pcd_maps_service_; - bool onServiceGetPartialPointCloudMap( + [[nodiscard]] bool on_service_get_partial_point_cloud_map( GetPartialPointCloudMap::Request::SharedPtr req, - GetPartialPointCloudMap::Response::SharedPtr res); - void partialAreaLoad( + GetPartialPointCloudMap::Response::SharedPtr res) const; + void partial_area_load( const autoware_map_msgs::msg::AreaInfo & area, - GetPartialPointCloudMap::Response::SharedPtr & response) const; - autoware_map_msgs::msg::PointCloudMapCellWithID loadPointCloudMapCellWithID( + const GetPartialPointCloudMap::Response::SharedPtr & response) const; + [[nodiscard]] autoware_map_msgs::msg::PointCloudMapCellWithID load_point_cloud_map_cell_with_id( const std::string & path, const std::string & map_id) const; }; diff --git a/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_module.cpp b/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_module.cpp index a66f9ee99534c..1754d0b7629a2 100644 --- a/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_module.cpp +++ b/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_module.cpp @@ -50,10 +50,10 @@ PointcloudMapLoaderModule::PointcloudMapLoaderModule( sensor_msgs::msg::PointCloud2 pcd; if (use_downsample) { - const float leaf_size = node->declare_parameter("leaf_size"); - pcd = loadPCDFiles(pcd_paths, leaf_size); + const float leaf_size = static_cast(node->declare_parameter("leaf_size")); + pcd = load_pcd_files(pcd_paths, leaf_size); } else { - pcd = loadPCDFiles(pcd_paths, boost::none); + pcd = load_pcd_files(pcd_paths, boost::none); } if (pcd.width == 0) { @@ -65,7 +65,7 @@ PointcloudMapLoaderModule::PointcloudMapLoaderModule( pub_pointcloud_map_->publish(pcd); } -sensor_msgs::msg::PointCloud2 PointcloudMapLoaderModule::loadPCDFiles( +sensor_msgs::msg::PointCloud2 PointcloudMapLoaderModule::load_pcd_files( const std::vector & pcd_paths, const boost::optional leaf_size) const { sensor_msgs::msg::PointCloud2 whole_pcd; diff --git a/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_module.hpp b/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_module.hpp index 6a87643b57bff..44f23ded70e37 100644 --- a/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_module.hpp +++ b/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_module.hpp @@ -39,7 +39,7 @@ class PointcloudMapLoaderModule rclcpp::Logger logger_; rclcpp::Publisher::SharedPtr pub_pointcloud_map_; - sensor_msgs::msg::PointCloud2 loadPCDFiles( + [[nodiscard]] sensor_msgs::msg::PointCloud2 load_pcd_files( const std::vector & pcd_paths, const boost::optional leaf_size) const; }; diff --git a/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_node.cpp b/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_node.cpp index 349fc2954fe28..c718b25c56694 100644 --- a/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_node.cpp +++ b/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_node.cpp @@ -28,7 +28,7 @@ namespace fs = std::filesystem; namespace { -bool isPcdFile(const std::string & p) +bool is_pcd_file(const std::string & p) { if (fs::is_directory(p)) { return false; @@ -36,11 +36,7 @@ bool isPcdFile(const std::string & p) const std::string ext = fs::path(p).extension(); - if (ext != ".pcd" && ext != ".PCD") { - return false; - } - - return true; + return !(ext != ".pcd" && ext != ".PCD"); } } // namespace @@ -48,7 +44,7 @@ PointCloudMapLoaderNode::PointCloudMapLoaderNode(const rclcpp::NodeOptions & opt : Node("pointcloud_map_loader", options) { const auto pcd_paths = - getPcdPaths(declare_parameter>("pcd_paths_or_directory")); + get_pcd_paths(declare_parameter>("pcd_paths_or_directory")); std::string pcd_metadata_path = declare_parameter("pcd_metadata_path"); bool enable_whole_load = declare_parameter("enable_whole_load"); bool enable_downsample_whole_load = declare_parameter("enable_downsampled_whole_load"); @@ -68,7 +64,7 @@ PointCloudMapLoaderNode::PointCloudMapLoaderNode(const rclcpp::NodeOptions & opt } // Parse the metadata file and get the map of (absolute pcd path, pcd file metadata) - auto pcd_metadata_dict = getPCDMetadata(pcd_metadata_path, pcd_paths); + auto pcd_metadata_dict = get_pcd_metadata(pcd_metadata_path, pcd_paths); if (enable_partial_load) { partial_map_loader_ = std::make_unique(this, pcd_metadata_dict); @@ -81,14 +77,14 @@ PointCloudMapLoaderNode::PointCloudMapLoaderNode(const rclcpp::NodeOptions & opt } } -std::map PointCloudMapLoaderNode::getPCDMetadata( +std::map PointCloudMapLoaderNode::get_pcd_metadata( const std::string & pcd_metadata_path, const std::vector & pcd_paths) const { if (fs::exists(pcd_metadata_path)) { std::set missing_pcd_names; - auto pcd_metadata_dict = loadPCDMetadata(pcd_metadata_path); + auto pcd_metadata_dict = load_pcd_metadata(pcd_metadata_path); - pcd_metadata_dict = replaceWithAbsolutePath(pcd_metadata_dict, pcd_paths, missing_pcd_names); + pcd_metadata_dict = replace_with_absolute_path(pcd_metadata_dict, pcd_paths, missing_pcd_names); // Warning if some segments are missing if (!missing_pcd_names.empty()) { @@ -96,7 +92,7 @@ std::map PointCloudMapLoaderNode::getPCDMetadata( oss << "The following segment(s) are missing from the input PCDs: "; - for (auto & fname : missing_pcd_names) { + for (const auto & fname : missing_pcd_names) { oss << std::endl << fname; } @@ -105,7 +101,9 @@ std::map PointCloudMapLoaderNode::getPCDMetadata( } return pcd_metadata_dict; - } else if (pcd_paths.size() == 1) { + } + + if (pcd_paths.size() == 1) { // An exception when using a single file PCD map so that the users do not have to provide // a metadata file. // Note that this should ideally be avoided and thus eventually be removed by someone, until @@ -119,12 +117,11 @@ std::map PointCloudMapLoaderNode::getPCDMetadata( PCDFileMetadata metadata = {}; pcl::getMinMax3D(single_pcd, metadata.min, metadata.max); return std::map{{pcd_path, metadata}}; - } else { - throw std::runtime_error("PCD metadata file not found: " + pcd_metadata_path); } + throw std::runtime_error("PCD metadata file not found: " + pcd_metadata_path); } -std::vector PointCloudMapLoaderNode::getPcdPaths( +std::vector PointCloudMapLoaderNode::get_pcd_paths( const std::vector & pcd_paths_or_directory) const { std::vector pcd_paths; @@ -133,14 +130,14 @@ std::vector PointCloudMapLoaderNode::getPcdPaths( RCLCPP_ERROR_STREAM(get_logger(), "invalid path: " << p); } - if (isPcdFile(p)) { + if (is_pcd_file(p)) { pcd_paths.push_back(p); } if (fs::is_directory(p)) { for (const auto & file : fs::directory_iterator(p)) { const auto filename = file.path().string(); - if (isPcdFile(filename)) { + if (is_pcd_file(filename)) { pcd_paths.push_back(filename); } } diff --git a/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_node.hpp b/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_node.hpp index fd9b297a9e3f4..dbc0d584d347b 100644 --- a/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_node.hpp +++ b/map/map_loader/src/pointcloud_map_loader/pointcloud_map_loader_node.hpp @@ -45,9 +45,9 @@ class PointCloudMapLoaderNode : public rclcpp::Node std::unique_ptr differential_map_loader_; std::unique_ptr selected_map_loader_; - std::vector getPcdPaths( + std::vector get_pcd_paths( const std::vector & pcd_paths_or_directory) const; - std::map getPCDMetadata( + std::map get_pcd_metadata( const std::string & pcd_metadata_path, const std::vector & pcd_paths) const; }; diff --git a/map/map_loader/src/pointcloud_map_loader/selected_map_loader_module.cpp b/map/map_loader/src/pointcloud_map_loader/selected_map_loader_module.cpp index 3e7b046f9d178..76b56341b8632 100644 --- a/map/map_loader/src/pointcloud_map_loader/selected_map_loader_module.cpp +++ b/map/map_loader/src/pointcloud_map_loader/selected_map_loader_module.cpp @@ -13,9 +13,11 @@ // limitations under the License. #include "selected_map_loader_module.hpp" + +#include namespace { -autoware_map_msgs::msg::PointCloudMapMetaData createMetadata( +autoware_map_msgs::msg::PointCloudMapMetaData create_metadata( const std::map & pcd_file_metadata_dict) { autoware_map_msgs::msg::PointCloudMapMetaData metadata_msg; @@ -23,11 +25,10 @@ autoware_map_msgs::msg::PointCloudMapMetaData createMetadata( metadata_msg.header.stamp = rclcpp::Clock().now(); for (const auto & ele : pcd_file_metadata_dict) { - std::string path = ele.first; PCDFileMetadata metadata = ele.second; // assume that the map ID = map path (for now) - std::string map_id = path; + const std::string & map_id = ele.first; autoware_map_msgs::msg::PointCloudMapCellMetaDataWithID cell_metadata_with_id; cell_metadata_with_id.cell_id = map_id; @@ -44,23 +45,24 @@ autoware_map_msgs::msg::PointCloudMapMetaData createMetadata( } // namespace SelectedMapLoaderModule::SelectedMapLoaderModule( - rclcpp::Node * node, const std::map & pcd_file_metadata_dict) -: logger_(node->get_logger()), all_pcd_file_metadata_dict_(pcd_file_metadata_dict) + rclcpp::Node * node, std::map pcd_file_metadata_dict) +: logger_(node->get_logger()), all_pcd_file_metadata_dict_(std::move(pcd_file_metadata_dict)) { get_selected_pcd_maps_service_ = node->create_service( - "service/get_selected_pcd_map", std::bind( - &SelectedMapLoaderModule::onServiceGetSelectedPointCloudMap, - this, std::placeholders::_1, std::placeholders::_2)); + "service/get_selected_pcd_map", + std::bind( + &SelectedMapLoaderModule::on_service_get_selected_point_cloud_map, this, + std::placeholders::_1, std::placeholders::_2)); // publish the map metadata rclcpp::QoS durable_qos{1}; durable_qos.transient_local(); pub_metadata_ = node->create_publisher( "output/pointcloud_map_metadata", durable_qos); - pub_metadata_->publish(createMetadata(all_pcd_file_metadata_dict_)); + pub_metadata_->publish(create_metadata(all_pcd_file_metadata_dict_)); } -bool SelectedMapLoaderModule::onServiceGetSelectedPointCloudMap( +bool SelectedMapLoaderModule::on_service_get_selected_point_cloud_map( GetSelectedPointCloudMap::Request::SharedPtr req, GetSelectedPointCloudMap::Response::SharedPtr res) const { @@ -76,11 +78,11 @@ bool SelectedMapLoaderModule::onServiceGetSelectedPointCloudMap( const std::string path = requested_selected_map_iterator->first; // assume that the map ID = map path (for now) - const std::string map_id = path; + const std::string & map_id = path; PCDFileMetadata metadata = requested_selected_map_iterator->second; autoware_map_msgs::msg::PointCloudMapCellWithID pointcloud_map_cell_with_id = - loadPointCloudMapCellWithID(path, map_id); + load_point_cloud_map_cell_with_id(path, map_id); pointcloud_map_cell_with_id.metadata.min_x = metadata.min.x; pointcloud_map_cell_with_id.metadata.min_y = metadata.min.y; pointcloud_map_cell_with_id.metadata.max_x = metadata.max.x; @@ -93,7 +95,7 @@ bool SelectedMapLoaderModule::onServiceGetSelectedPointCloudMap( } autoware_map_msgs::msg::PointCloudMapCellWithID -SelectedMapLoaderModule::loadPointCloudMapCellWithID( +SelectedMapLoaderModule::load_point_cloud_map_cell_with_id( const std::string & path, const std::string & map_id) const { sensor_msgs::msg::PointCloud2 pcd; diff --git a/map/map_loader/src/pointcloud_map_loader/selected_map_loader_module.hpp b/map/map_loader/src/pointcloud_map_loader/selected_map_loader_module.hpp index f44d549a0f576..eea8b8c1950ae 100644 --- a/map/map_loader/src/pointcloud_map_loader/selected_map_loader_module.hpp +++ b/map/map_loader/src/pointcloud_map_loader/selected_map_loader_module.hpp @@ -39,7 +39,7 @@ class SelectedMapLoaderModule public: explicit SelectedMapLoaderModule( - rclcpp::Node * node, const std::map & pcd_file_metadata_dict); + rclcpp::Node * node, std::map pcd_file_metadata_dict); private: rclcpp::Logger logger_; @@ -49,10 +49,10 @@ class SelectedMapLoaderModule rclcpp::Publisher::SharedPtr pub_metadata_; - bool onServiceGetSelectedPointCloudMap( + [[nodiscard]] bool on_service_get_selected_point_cloud_map( GetSelectedPointCloudMap::Request::SharedPtr req, GetSelectedPointCloudMap::Response::SharedPtr res) const; - autoware_map_msgs::msg::PointCloudMapCellWithID loadPointCloudMapCellWithID( + [[nodiscard]] autoware_map_msgs::msg::PointCloudMapCellWithID load_point_cloud_map_cell_with_id( const std::string & path, const std::string & map_id) const; }; diff --git a/map/map_loader/src/pointcloud_map_loader/utils.cpp b/map/map_loader/src/pointcloud_map_loader/utils.cpp index 96f9d114ed265..ea2c2e7033014 100644 --- a/map/map_loader/src/pointcloud_map_loader/utils.cpp +++ b/map/map_loader/src/pointcloud_map_loader/utils.cpp @@ -20,7 +20,7 @@ #include #include -std::map loadPCDMetadata(const std::string & pcd_metadata_path) +std::map load_pcd_metadata(const std::string & pcd_metadata_path) { YAML::Node config = YAML::LoadFile(pcd_metadata_path); @@ -33,22 +33,22 @@ std::map loadPCDMetadata(const std::string & pcd_m continue; } - std::string key = node.first.as(); - std::vector values = node.second.as>(); + auto key = node.first.as(); + auto values = node.second.as>(); - PCDFileMetadata fileMetadata; - fileMetadata.min.x = values[0]; - fileMetadata.min.y = values[1]; - fileMetadata.max.x = values[0] + config["x_resolution"].as(); - fileMetadata.max.y = values[1] + config["y_resolution"].as(); + PCDFileMetadata file_metadata; + file_metadata.min.x = static_cast(values[0]); + file_metadata.min.y = static_cast(values[1]); + file_metadata.max.x = static_cast(values[0]) + config["x_resolution"].as(); + file_metadata.max.y = static_cast(values[1]) + config["y_resolution"].as(); - metadata[key] = fileMetadata; + metadata[key] = file_metadata; } return metadata; } -std::map replaceWithAbsolutePath( +std::map replace_with_absolute_path( const std::map & pcd_metadata_path, const std::vector & pcd_paths, std::set & missing_pcd_names) { @@ -75,7 +75,7 @@ std::map replaceWithAbsolutePath( return absolute_path_map; } -bool cylinderAndBoxOverlapExists( +bool cylinder_and_box_overlap_exists( const double center_x, const double center_y, const double radius, const pcl::PointXYZ box_min_point, const pcl::PointXYZ box_max_point) { @@ -92,22 +92,18 @@ bool cylinderAndBoxOverlapExists( const double dy0 = center_y - box_min_point.y; const double dy1 = center_y - box_max_point.y; - if ( - std::hypot(dx0, dy0) <= radius || std::hypot(dx1, dy0) <= radius || - std::hypot(dx0, dy1) <= radius || std::hypot(dx1, dy1) <= radius) { - return true; - } - - return false; + return std::hypot(dx0, dy0) <= radius || std::hypot(dx1, dy0) <= radius || + std::hypot(dx0, dy1) <= radius || std::hypot(dx1, dy1) <= radius; } -bool isGridWithinQueriedArea( +bool is_grid_within_queried_area( const autoware_map_msgs::msg::AreaInfo area, const PCDFileMetadata metadata) { // Currently, the area load only supports cylindrical area double center_x = area.center_x; double center_y = area.center_y; double radius = area.radius; - bool res = cylinderAndBoxOverlapExists(center_x, center_y, radius, metadata.min, metadata.max); + bool res = + cylinder_and_box_overlap_exists(center_x, center_y, radius, metadata.min, metadata.max); return res; } diff --git a/map/map_loader/src/pointcloud_map_loader/utils.hpp b/map/map_loader/src/pointcloud_map_loader/utils.hpp index 29d9a24d7b0e7..07e8ade5c6f7c 100644 --- a/map/map_loader/src/pointcloud_map_loader/utils.hpp +++ b/map/map_loader/src/pointcloud_map_loader/utils.hpp @@ -37,15 +37,15 @@ struct PCDFileMetadata } }; -std::map loadPCDMetadata(const std::string & pcd_metadata_path); -std::map replaceWithAbsolutePath( +std::map load_pcd_metadata(const std::string & pcd_metadata_path); +std::map replace_with_absolute_path( const std::map & pcd_metadata_path, const std::vector & pcd_paths, std::set & missing_pcd_names); -bool cylinderAndBoxOverlapExists( +bool cylinder_and_box_overlap_exists( const double center_x, const double center_y, const double radius, - const pcl::PointXYZ position_min, const pcl::PointXYZ position_max); -bool isGridWithinQueriedArea( + const pcl::PointXYZ box_min_point, const pcl::PointXYZ box_max_point); +bool is_grid_within_queried_area( const autoware_map_msgs::msg::AreaInfo area, const PCDFileMetadata metadata); #endif // POINTCLOUD_MAP_LOADER__UTILS_HPP_ diff --git a/map/map_loader/test/test_cylinder_box_overlap.cpp b/map/map_loader/test/test_cylinder_box_overlap.cpp index 4c9b18a3dbd8e..d8ca2ca9f8734 100644 --- a/map/map_loader/test/test_cylinder_box_overlap.cpp +++ b/map/map_loader/test/test_cylinder_box_overlap.cpp @@ -35,7 +35,7 @@ TEST(CylinderAndBoxOverlapExists, NoOverlap) p_max.y = 1.0; p_max.z = 1.0; - bool result = cylinderAndBoxOverlapExists(center_x, center_y, radius, p_min, p_max); + bool result = cylinder_and_box_overlap_exists(center_x, center_y, radius, p_min, p_max); EXPECT_FALSE(result); } @@ -57,7 +57,7 @@ TEST(CylinderAndBoxOverlapExists, Overlap1) p_max.y = 1.0; p_max.z = 1.0; - bool result = cylinderAndBoxOverlapExists(center_x, center_y, radius, p_min, p_max); + bool result = cylinder_and_box_overlap_exists(center_x, center_y, radius, p_min, p_max); EXPECT_TRUE(result); } @@ -79,6 +79,6 @@ TEST(CylinderAndBoxOverlapExists, Overlap2) p_max.y = 1.0; p_max.z = -99.0; - bool result = cylinderAndBoxOverlapExists(center_x, center_y, radius, p_min, p_max); + bool result = cylinder_and_box_overlap_exists(center_x, center_y, radius, p_min, p_max); EXPECT_TRUE(result); } diff --git a/map/map_loader/test/test_load_pcd_metadata.cpp b/map/map_loader/test/test_load_pcd_metadata.cpp index a832489b6db99..fcec100f389c5 100644 --- a/map/map_loader/test/test_load_pcd_metadata.cpp +++ b/map/map_loader/test/test_load_pcd_metadata.cpp @@ -21,7 +21,7 @@ using ::testing::ContainerEq; -std::string createYAMLFile() +std::string create_yaml_file() { std::filesystem::path tmp_path = std::filesystem::temp_directory_path() / "temp_metadata.yaml"; @@ -37,14 +37,14 @@ std::string createYAMLFile() TEST(LoadPCDMetadataTest, BasicFunctionality) { - std::string yaml_file_path = createYAMLFile(); + std::string yaml_file_path = create_yaml_file(); std::map expected = { {"file1.pcd", {{1, 2, 0}, {6, 8, 0}}}, {"file2.pcd", {{3, 4, 0}, {8, 10, 0}}}, }; - auto result = loadPCDMetadata(yaml_file_path); + auto result = load_pcd_metadata(yaml_file_path); ASSERT_THAT(result, ContainerEq(expected)); } diff --git a/map/map_loader/test/test_pointcloud_map_loader_module.cpp b/map/map_loader/test/test_pointcloud_map_loader_module.cpp index 2b686dc0fe8c3..5667f476b4dab 100644 --- a/map/map_loader/test/test_pointcloud_map_loader_module.cpp +++ b/map/map_loader/test/test_pointcloud_map_loader_module.cpp @@ -26,8 +26,6 @@ #include #include -using std::chrono_literals::operator""ms; - class TestPointcloudMapLoaderModule : public ::testing::Test { protected: @@ -61,6 +59,8 @@ class TestPointcloudMapLoaderModule : public ::testing::Test TEST_F(TestPointcloudMapLoaderModule, LoadPCDFilesNoDownsampleTest) { + using namespace std::literals::chrono_literals; + // Prepare PCD paths std::vector pcd_paths = {temp_pcd_path}; diff --git a/map/map_loader/test/test_replace_with_absolute_path.cpp b/map/map_loader/test/test_replace_with_absolute_path.cpp index f61dd188f0679..03d533d41cf18 100644 --- a/map/map_loader/test/test_replace_with_absolute_path.cpp +++ b/map/map_loader/test/test_replace_with_absolute_path.cpp @@ -37,7 +37,7 @@ TEST(ReplaceWithAbsolutePathTest, BasicFunctionality) }; std::set missing_pcd_names; - auto result = replaceWithAbsolutePath(pcd_metadata_path, pcd_paths, missing_pcd_names); + auto result = replace_with_absolute_path(pcd_metadata_path, pcd_paths, missing_pcd_names); ASSERT_THAT(result, ContainerEq(expected)); } @@ -56,7 +56,7 @@ TEST(ReplaceWithAbsolutePathTest, NoMatchingFiles) std::map expected = {}; std::set missing_pcd_names; - auto result = replaceWithAbsolutePath(pcd_metadata_path, pcd_paths, missing_pcd_names); + auto result = replace_with_absolute_path(pcd_metadata_path, pcd_paths, missing_pcd_names); ASSERT_THAT(result, ContainerEq(expected)); } From 73459c10ed896dc1e82d049a495a10058fc72fe7 Mon Sep 17 00:00:00 2001 From: Koichi98 <45482193+Koichi98@users.noreply.github.com> Date: Fri, 5 Jul 2024 16:47:51 +0900 Subject: [PATCH 088/306] fix(system_monitor): apply cppcheck-suppress for cstyleCast (#7867) * fix(system_monitor): apply cppcheck-suppress for cstyleCast Signed-off-by: Koichi Imai * fix(system_monitor): apply cppcheck-suppress for cstyleCast Signed-off-by: Koichi Imai * style(pre-commit): autofix --------- Signed-off-by: Koichi Imai Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- system/system_monitor/reader/hdd_reader/hdd_reader.cpp | 7 +++++-- system/system_monitor/reader/msr_reader/msr_reader.cpp | 1 + .../system_monitor/src/cpu_monitor/intel_cpu_monitor.cpp | 1 + system/system_monitor/src/hdd_monitor/hdd_monitor.cpp | 2 ++ .../test/src/cpu_monitor/test_intel_cpu_monitor.cpp | 1 + .../test/src/hdd_monitor/test_hdd_monitor.cpp | 1 + 6 files changed, 11 insertions(+), 2 deletions(-) diff --git a/system/system_monitor/reader/hdd_reader/hdd_reader.cpp b/system/system_monitor/reader/hdd_reader/hdd_reader.cpp index f12e34c8aca46..cbb37343be05e 100644 --- a/system/system_monitor/reader/hdd_reader/hdd_reader.cpp +++ b/system/system_monitor/reader/hdd_reader/hdd_reader.cpp @@ -198,7 +198,8 @@ int get_ata_identify(int fd, HddInfo * info) // Create a control structure hdr.interface_id = 'S'; // This must be set to 'S' hdr.dxfer_direction = SG_DXFER_FROM_DEV; // a SCSI READ command - hdr.cmd_len = sizeof(ata); // length in bytes of the SCSI command that 'cmdp' points to + hdr.cmd_len = sizeof(ata); // length in bytes of the SCSI command that 'cmdp' points to + // cppcheck-suppress cstyleCast hdr.cmdp = (unsigned char *)&ata; // SCSI command to be executed hdr.dxfer_len = sizeof(data); // number of bytes to be moved in the data transfer hdr.dxferp = data; // a pointer to user memory @@ -260,7 +261,8 @@ int get_ata_smart_data(int fd, HddInfo * info, const HddDevice & device) // Create a control structure hdr.interface_id = 'S'; // This must be set to 'S' hdr.dxfer_direction = SG_DXFER_FROM_DEV; // a SCSI READ command - hdr.cmd_len = sizeof(ata); // length in bytes of the SCSI command that 'cmdp' points to + hdr.cmd_len = sizeof(ata); // length in bytes of the SCSI command that 'cmdp' points to + // cppcheck-suppress cstyleCast hdr.cmdp = (unsigned char *)&ata; // SCSI command to be executed hdr.dxfer_len = sizeof(data); // number of bytes to be moved in the data transfer hdr.dxferp = &data; // a pointer to user memory @@ -545,6 +547,7 @@ void run(int port) addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = htonl(INADDR_ANY); + // cppcheck-suppress cstyleCast ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { syslog(LOG_ERR, "Failed to give the socket FD the local address ADDR. %s\n", strerror(errno)); diff --git a/system/system_monitor/reader/msr_reader/msr_reader.cpp b/system/system_monitor/reader/msr_reader/msr_reader.cpp index 16f8fe9b93477..6de88d9e23276 100644 --- a/system/system_monitor/reader/msr_reader/msr_reader.cpp +++ b/system/system_monitor/reader/msr_reader/msr_reader.cpp @@ -114,6 +114,7 @@ void run(int port, const std::vector & list) addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = htonl(INADDR_ANY); + // cppcheck-suppress cstyleCast ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { syslog(LOG_ERR, "Failed to give the socket FD the local address ADDR. %s\n", strerror(errno)); diff --git a/system/system_monitor/src/cpu_monitor/intel_cpu_monitor.cpp b/system/system_monitor/src/cpu_monitor/intel_cpu_monitor.cpp index e78d49b55a3df..1e6325d9c452b 100644 --- a/system/system_monitor/src/cpu_monitor/intel_cpu_monitor.cpp +++ b/system/system_monitor/src/cpu_monitor/intel_cpu_monitor.cpp @@ -76,6 +76,7 @@ void CPUMonitor::checkThrottling(diagnostic_updater::DiagnosticStatusWrapper & s addr.sin_family = AF_INET; addr.sin_port = htons(msr_reader_port_); addr.sin_addr.s_addr = htonl(INADDR_ANY); + // cppcheck-suppress cstyleCast ret = connect(sock, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { stat.summary(DiagStatus::ERROR, "connect error"); diff --git a/system/system_monitor/src/hdd_monitor/hdd_monitor.cpp b/system/system_monitor/src/hdd_monitor/hdd_monitor.cpp index c57aea81d410d..85a88d2430bce 100644 --- a/system/system_monitor/src/hdd_monitor/hdd_monitor.cpp +++ b/system/system_monitor/src/hdd_monitor/hdd_monitor.cpp @@ -615,6 +615,7 @@ void HddMonitor::updateHddInfoList() addr.sin_family = AF_INET; addr.sin_port = htons(hdd_reader_port_); addr.sin_addr.s_addr = htonl(INADDR_ANY); + // cppcheck-suppress cstyleCast ret = connect(sock, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { connect_diag_.summary(DiagStatus::ERROR, "connect error"); @@ -854,6 +855,7 @@ int HddMonitor::unmountDevice(std::string & device) addr.sin_family = AF_INET; addr.sin_port = htons(hdd_reader_port_); addr.sin_addr.s_addr = htonl(INADDR_ANY); + // cppcheck-suppress cstyleCast ret = connect(sock, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { RCLCPP_ERROR(get_logger(), "socket connect error. %s", strerror(errno)); diff --git a/system/system_monitor/test/src/cpu_monitor/test_intel_cpu_monitor.cpp b/system/system_monitor/test/src/cpu_monitor/test_intel_cpu_monitor.cpp index 0f321efe5c311..45ce75cbe3fae 100644 --- a/system/system_monitor/test/src/cpu_monitor/test_intel_cpu_monitor.cpp +++ b/system/system_monitor/test/src/cpu_monitor/test_intel_cpu_monitor.cpp @@ -200,6 +200,7 @@ void * msr_reader(void * args) addr.sin_family = AF_INET; addr.sin_port = htons(7634); addr.sin_addr.s_addr = htonl(INADDR_ANY); + // cppcheck-suppress cstyleCast ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { close(sock); diff --git a/system/system_monitor/test/src/hdd_monitor/test_hdd_monitor.cpp b/system/system_monitor/test/src/hdd_monitor/test_hdd_monitor.cpp index 4a948029a2f3a..aa5359ba1ceb6 100644 --- a/system/system_monitor/test/src/hdd_monitor/test_hdd_monitor.cpp +++ b/system/system_monitor/test/src/hdd_monitor/test_hdd_monitor.cpp @@ -206,6 +206,7 @@ void * hdd_reader(void * args) addr.sin_family = AF_INET; addr.sin_port = htons(7635); addr.sin_addr.s_addr = htonl(INADDR_ANY); + // cppcheck-suppress cstyleCast ret = bind(sock, (struct sockaddr *)&addr, sizeof(addr)); if (ret < 0) { close(sock); From 38bd1408df885e470386e90bd2740bcb027724a7 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Fri, 5 Jul 2024 16:48:06 +0900 Subject: [PATCH 089/306] feat(tier4_perception_launch): add image segmentation based pointcloud filter (#7225) * feat(tier4_perception_launch): add image segmentation based pointcloud filter Signed-off-by: badai-nguyen * chore: typo Signed-off-by: badai-nguyen * fix: detection launch Signed-off-by: badai-nguyen * chore: add maintainer Signed-off-by: badai-nguyen * Revert "chore: add maintainer" This reverts commit 5adfef6e9ca8196d3ba88ad574b2ba35489a5e49. --------- Signed-off-by: badai-nguyen --- .../detection/detection.launch.xml | 2 ++ .../detector/camera_lidar_detector.launch.xml | 13 ++++++++++++- .../launch/perception.launch.xml | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml index 373e343ad64fa..b3280fee47364 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml @@ -13,6 +13,7 @@ + @@ -163,6 +164,7 @@ + diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml index 4c288aa632182..fba0144e6cee1 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml @@ -4,6 +4,7 @@ + @@ -95,14 +96,24 @@ + + + + + + + + + + - + diff --git a/launch/tier4_perception_launch/launch/perception.launch.xml b/launch/tier4_perception_launch/launch/perception.launch.xml index 5d8d7563e7a7c..6c428a5adea0b 100644 --- a/launch/tier4_perception_launch/launch/perception.launch.xml +++ b/launch/tier4_perception_launch/launch/perception.launch.xml @@ -80,6 +80,7 @@ + + From d11701b985f76806addf8cc79449c50680b1c31f Mon Sep 17 00:00:00 2001 From: Koichi98 <45482193+Koichi98@users.noreply.github.com> Date: Fri, 5 Jul 2024 16:56:54 +0900 Subject: [PATCH 090/306] fix(bluetooth_monitor): apply cppcheck-suppress for cstyleCast (#7869) Signed-off-by: Koichi Imai --- system/bluetooth_monitor/service/l2ping_service.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/system/bluetooth_monitor/service/l2ping_service.cpp b/system/bluetooth_monitor/service/l2ping_service.cpp index e811ffb030cd6..f20c763d643ce 100644 --- a/system/bluetooth_monitor/service/l2ping_service.cpp +++ b/system/bluetooth_monitor/service/l2ping_service.cpp @@ -60,6 +60,7 @@ bool L2pingService::initialize() address.sin_family = AF_INET; address.sin_port = htons(port_); address.sin_addr.s_addr = htonl(INADDR_ANY); + // cppcheck-suppress cstyleCast ret = bind(socket_, (struct sockaddr *)&address, sizeof(address)); if (ret < 0) { syslog(LOG_ERR, "Failed to give the socket FD the local address ADDR. %s\n", strerror(errno)); From 39bd72220a8af1dfe2b9f0c0b08772a72dba6841 Mon Sep 17 00:00:00 2001 From: SaltUhey <111027815+SaltUhey@users.noreply.github.com> Date: Fri, 5 Jul 2024 17:26:20 +0900 Subject: [PATCH 091/306] feat(ndt_scan_matcher): estimate the covariance of ndt scan matching in real time instead of using a predefined value (#7596) * enable to calculate 2D covariance in real time Signed-off-by: yuhei * enable to display offset_pose Signed-off-by: yuhei * enable to publish estimated ndt_dev Signed-off-by: yuhei * Addition of explanation of 2D real-time covariance estimation Signed-off-by: yuhei * fix name of picture Signed-off-by: yuhei * style(pre-commit): autofix * fix covariance_covariance_estimation.json Signed-off-by: yuhei * fix covariance_covariance_estimation.json Signed-off-by: yuhei * style(pre-commit): autofix * Commonality using estimated_cov_2d and removal of unnecessary publishers Signed-off-by: yuhei * Add a specific explanation for 2D real-time covariance estimation Signed-off-by: yuhei * style(pre-commit): autofix * Remove initial_pose_offset_model_x and initial_pose_offset_model_y from the structure in hyper_parameters.hpp Signed-off-by: yuhei * Generate initial_pose_offset_model_x and initial_pose_offset_model_y from initial_pose_offset_model Signed-off-by: yuhei * Addition of covariance_estimation_type Signed-off-by: yuhei * style(pre-commit): autofix * Add temperature to parameters Signed-off-by: yuhei * Remove covariance_estimation.enable from the parameters and change the return value of estimate_covariance() Signed-off-by: yuhei * style(pre-commit): autofix * Add a temperature description Signed-off-by: yuhei * Add processing when the inverse matrix cannot be calculated in estimate_covariance() Signed-off-by: yuhei * set default value and range of temperature Signed-off-by: yuhei * Simplify the code Signed-off-by: yuhei * style(pre-commit): autofix * Fix explanation of covariance_estimation_type Signed-off-by: yuhei * Define initial_pose_offset_model_x and initial_pose_offset_model_y in hyper_parameters Signed-off-by: yuhei * style(pre-commit): autofix * Add explanation of 2D real-time covariance estimation Signed-off-by: yuhei --------- Signed-off-by: yuhei Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- localization/ndt_scan_matcher/README.md | 12 +- .../config/ndt_scan_matcher.param.yaml | 7 +- .../ndt_scan_matcher/hyper_parameters.hpp | 59 +++++----- .../ndt_scan_matcher_core.hpp | 2 +- .../media/calculation_of_ndt_covariance.png | Bin 0 -> 103464 bytes .../sub/covariance_covariance_estimation.json | 23 +++- .../src/ndt_scan_matcher_core.cpp | 107 +++++++++--------- 7 files changed, 117 insertions(+), 93 deletions(-) create mode 100644 localization/ndt_scan_matcher/media/calculation_of_ndt_covariance.png diff --git a/localization/ndt_scan_matcher/README.md b/localization/ndt_scan_matcher/README.md index 48ce49d2bcaa9..1881deab23d05 100644 --- a/localization/ndt_scan_matcher/README.md +++ b/localization/ndt_scan_matcher/README.md @@ -241,18 +241,26 @@ This is a function that uses no ground LiDAR scan to estimate the scan matching ### Abstract -Calculate 2D covariance (xx, xy, yx, yy) in real time using the NDT convergence from multiple initial poses. -The arrangement of multiple initial poses is efficiently limited by the Hessian matrix of the NDT score function. +Initially, the covariance of NDT scan matching is a fixed value(FIXED_VALUE mode). +So, three modes are provided for 2D covariance (xx, xy, yx, yy) estimation in real time: LAPLACE_APPROXIMATION, MULTI_NDT, and MULTI_NDT_SCORE. +LAPLACE_APPROXIMATION calculates the inverse matrix of the XY (2x2) part of the Hessian obtained by NDT scan matching and uses it as the covariance matrix. +On the other hand, MULTI_NDT, and MULTI_NDT_SCORE use NDT convergence from multiple initial poses to obtain 2D covariance. +Ideally, the arrangement of multiple initial poses is efficiently limited by the Hessian matrix of the NDT score function. In this implementation, the number of initial positions is fixed to simplify the code. +To obtain the covariance, MULTI_NDT computes until convergence at each initial position, while MULTI_NDT_SCORE uses the nearest voxel transformation likelihood. The covariance can be seen as error ellipse from ndt_pose_with_covariance setting on rviz2. [original paper](https://www.fujipress.jp/jrm/rb/robot003500020435/). +drawing + Note that this function may spoil healthy system behavior if it consumes much calculation resources. ### Parameters +There are three types in the calculation of 2D covariance in real time.You can select the method by changing covariance_estimation_type. initial_pose_offset_model is rotated around (x,y) = (0,0) in the direction of the first principal component of the Hessian matrix. initial_pose_offset_model_x & initial_pose_offset_model_y must have the same number of elements. +In MULTI_NDT_SCORE mode, the scale of the output 2D covariance can be adjusted according to the temperature. {{ json_to_markdown("localization/ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json") }} diff --git a/localization/ndt_scan_matcher/config/ndt_scan_matcher.param.yaml b/localization/ndt_scan_matcher/config/ndt_scan_matcher.param.yaml index f62329b8bdb6d..616cb108baf4a 100644 --- a/localization/ndt_scan_matcher/config/ndt_scan_matcher.param.yaml +++ b/localization/ndt_scan_matcher/config/ndt_scan_matcher.param.yaml @@ -107,13 +107,18 @@ # 2D Real-time covariance estimation with multiple searches (output_pose_covariance is the minimum value) covariance_estimation: - enable: false + # Covariance estimation type + # 0=FIXED_VALUE, 1=LAPLACE_APPROXIMATION, 2=MULTI_NDT, 3=MULTI_NDT_SCORE + covariance_estimation_type: 0 # Offset arrangement in covariance estimation [m] # initial_pose_offset_model_x & initial_pose_offset_model_y must have the same number of elements. initial_pose_offset_model_x: [0.0, 0.0, 0.5, -0.5, 1.0, -1.0] initial_pose_offset_model_y: [0.5, -0.5, 0.0, 0.0, 0.0, 0.0] + # In MULTI_NDT_SCORE, the parameter that adjusts the estimated 2D covariance + temperature: 0.1 + dynamic_map_loading: # Dynamic map loading distance diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp index e488b49393d48..d6bd975c36bf3 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp @@ -29,6 +29,13 @@ enum class ConvergedParamType { NEAREST_VOXEL_TRANSFORMATION_LIKELIHOOD = 1 }; +enum class CovarianceEstimationType { + FIXED_VALUE = 0, + LAPLACE_APPROXIMATION = 1, + MULTI_NDT = 2, + MULTI_NDT_SCORE = 3, +}; + struct HyperParameters { struct Frame @@ -80,8 +87,10 @@ struct HyperParameters struct CovarianceEstimation { - bool enable{}; - std::vector initial_pose_offset_model{}; + CovarianceEstimationType covariance_estimation_type{}; + std::vector initial_pose_offset_model_x{}; + std::vector initial_pose_offset_model_y{}; + double temperature{}; } covariance_estimation{}; } covariance{}; @@ -148,33 +157,27 @@ struct HyperParameters for (std::size_t i = 0; i < output_pose_covariance.size(); ++i) { covariance.output_pose_covariance[i] = output_pose_covariance[i]; } - covariance.covariance_estimation.enable = - node->declare_parameter("covariance.covariance_estimation.enable"); - if (covariance.covariance_estimation.enable) { - std::vector initial_pose_offset_model_x = - node->declare_parameter>( - "covariance.covariance_estimation.initial_pose_offset_model_x"); - std::vector initial_pose_offset_model_y = - node->declare_parameter>( - "covariance.covariance_estimation.initial_pose_offset_model_y"); - - if (initial_pose_offset_model_x.size() == initial_pose_offset_model_y.size()) { - const size_t size = initial_pose_offset_model_x.size(); - covariance.covariance_estimation.initial_pose_offset_model.resize(size); - for (size_t i = 0; i < size; i++) { - covariance.covariance_estimation.initial_pose_offset_model[i].x() = - initial_pose_offset_model_x[i]; - covariance.covariance_estimation.initial_pose_offset_model[i].y() = - initial_pose_offset_model_y[i]; - } - } else { - std::stringstream message; - message << "Invalid initial pose offset model parameters." - << "Please make sure that the number of elements in " - << "initial_pose_offset_model_x and initial_pose_offset_model_y are the same."; - throw std::runtime_error(message.str()); - } + const int64_t covariance_estimation_type_tmp = node->declare_parameter( + "covariance.covariance_estimation.covariance_estimation_type"); + covariance.covariance_estimation.covariance_estimation_type = + static_cast(covariance_estimation_type_tmp); + covariance.covariance_estimation.initial_pose_offset_model_x = + node->declare_parameter>( + "covariance.covariance_estimation.initial_pose_offset_model_x"); + covariance.covariance_estimation.initial_pose_offset_model_y = + node->declare_parameter>( + "covariance.covariance_estimation.initial_pose_offset_model_y"); + if ( + covariance.covariance_estimation.initial_pose_offset_model_x.size() != + covariance.covariance_estimation.initial_pose_offset_model_y.size()) { + std::stringstream message; + message << "Invalid initial pose offset model parameters." + << "Please make sure that the number of elements in " + << "initial_pose_offset_model_x and initial_pose_offset_model_y are the same."; + throw std::runtime_error(message.str()); } + covariance.covariance_estimation.temperature = + node->declare_parameter("covariance.covariance_estimation.temperature"); dynamic_map_loading.update_distance = node->declare_parameter("dynamic_map_loading.update_distance"); diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp index 2f3eb82b1c217..119c3534cab16 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp @@ -131,7 +131,7 @@ class NDTScanMatcher : public rclcpp::Node static int count_oscillation(const std::vector & result_pose_msg_array); - std::array estimate_covariance( + Eigen::Matrix2d estimate_covariance( const pclomp::NdtResult & ndt_result, const Eigen::Matrix4f & initial_pose_matrix, const rclcpp::Time & sensor_ros_time); diff --git a/localization/ndt_scan_matcher/media/calculation_of_ndt_covariance.png b/localization/ndt_scan_matcher/media/calculation_of_ndt_covariance.png new file mode 100644 index 0000000000000000000000000000000000000000..f6e25d04c0fd6f9dff9b924876c66e2ac2df17d4 GIT binary patch literal 103464 zcmZ6yWmsInvNb%xA-D$*1b2705G**s-Q8{Q;1WV`cemi~65QQ&aCiGA>GDkq7AfQJA80Fb0UizxyCFtPvu#1oeE7#rI-n%O#?LbeNlA7V9ER(BG0FxGc6 zx3wWrHn%ng-vj_ym{{0$8f%z1c2h%`S$7liNSK*-ll)mYcS3@gnfD5QPFNM=0RSWb zDKTMXx74E*pqZvxI_KHx(SctI?CHr&`TI$^!3Pt?5Eg2&kF5AfH_?Sg9S9#nWMD{R zMM{iFa%!Y$ImhSsiNBG5R~{9zFeRzg0Fm5gi6gVA`(e`hHiIg01C1H8i4=bw;h@A|Mg=uu)0J3YXF$cME?HxN{0EgkNLue(S_^AVB01< zu-ZK0^&Izxr#}01Od=eS75A~*a{j@A^Fbh4B>Y#6#IPs4m;hIV&MmSP(4E$$r3oik zFhq~$HrG<(O&IVz+$ZBmz+z@o_KIza3Q9~;eATknL1>DWL|d-KzRq?JgPBYq3-Ll1 zzDhxiAO-Y>jz?m`)Xh+`#XQ;&#Dt@XwS5uFfCNCNhx1TG&EuI^KQ-dq%=PO-`1Xc= z_0UhRaY2*;ZcDB;BBsJVj9ZV9T^mCgat>t`%i;Lr^rNk=-D$kdeBz<{e^fXTo7?g1 zjcJoO02GWGM-!B=NuHS_@NBWGOKfM4B)HO~&OQAAz+CqYU1!*_SAL=-ccqRPKoY7- zWYUDLw~<66n#!UQ>a>a}PtO*5HzKoGUwb`yMm z7Al11Y~`l1u?~LVYYsIoe!$tWk|iUR9F!oj@Zd~v)gxf{_rL|m+si!+{uxO&jdKo6 zGxT^utx5vIoM$)glL>6LpI1Um+#~KD7RPsQ zz9C@dHSJ^bn>)hGXwk0Whap%7d>Z5+?#g&1vaEgk2WD06?vq$=rn47dU5{fExtCPR z>wUbx;7Ix1$=LbF?~PE^?{AN4Y)LZwoskB<<`bN~W|s4ui+Y&Pz92u*_K%7ut8abm zZ`#i8kD`6kznOCcfrE5L+`{8swv)3XWk!wR&f_Xlp!?cx&5aOzCf+8?2I zTRNYdVwLz6RWu3YhcrYMS4XCJ=cr*GD!lR2?f4@~$2wu%(VfgSYkR^J6B80w&Vb?8 zdw0CsgmOvt@YJZ`V=SGmoy3x6)gk&qb>I8k3dT2Mto<&G@g_0WGlrmu5DYDrsf14jQqbL;$hHlgNPh!CuABO7V^ z+PlN|E>@FA^H)n~x%jd=_~sGMp2Rwyf5MO$t-2`sRjoWG!jNWVLEb=ALrzUtepMA0 z-Z1dnCZkt%7xZfvtNv7BY3ly&wpa-~nUgnsI@#h6?rBL7+71wKvUIUJfd9B)=FonE zr%@{qkQT0-(Mymoa41<}sZ zV`9a$9G%V9j3W z5Ik;iO;*PZv*4b)+ug-Fxr+zEKVOh^CF~_wY4JwR>6`?;8X%8iFc0%lWu7sGPrJdj zMShcczGr*T;;p>RS^VUZN4Q_1s^+5U0FQX$(gEav>|avIz4|b`oY--ufMb;(RV0X# zJ+~wA8n-;@UKR%bJP7yT(~NbKpwqqKL)<<6+|1njf_RC2#bFFMrAe#f|e?i>8o?NRTKiQxHZD3Rc0J16sT7Z22iA7Y!S1=Bdy zO1Kx-`k+ykOI;gh8QNt@QQYMMcG(dcE$s<#-;m=90b#CvZp_ZP&! zZewCf^v&jJY!E}bA>NVrl12gF!4p`YacyFp+5{J3!_je^>srU{*95vy&+yfbFu;4I zF}ADzNa`sJ9FrhVDr?O-tCd&&b*MkpGl3DmFLK}O^~GSXo8{@cMmhawa4h<=;+Io5 z#)TS+??vzIX?DD@3J_(munWG~ELc+yY-=WWWJ|4E#JUQ6QC$KESp^&XwEbbCCtdcE zr8y#<%9XA9xa`Qh#J6#sX%=U>iuL1XI8V+k1JK%fP$u?YYTeTwP6Q= zw`C*{j|4Ner-vDc@v7|V1ZOX!Gc^>0<%XbB>ICb2<}2a*;hzs|Lv+pbw`5$;Nyt`L z9nH;uc!BE>77(e&890=FZfPn5#3vhtFEc z9ltqw9vLD!865zaT&+56+QB&KJ zhY>EN*lNQ77X1XAG7?3)pnl*>UMV8Ck=4bYzU9Z+1^E9`;~Exhta8^b+?ETCDH5Tr z+uB%@4~JYf@+3OkSItw%&Y|_i6)uLsEUL*M4%W|FWBPiUD`K|}gErxz+seh5)6{qa z&zX!|fo-Gl0#G!<#Nh~%{dj75G3+m5nKxHmIZ<(H+KB^3PJq$LaD4u=Bjq1=vrrLi zq_!s=Jq19JAhWNK{LV5a^yqW?eG)e7=M}2k#csMQ;$&jg>}x30!l!I5ee2}keg^30 zwltPXN0sfBVjh~D%bLDDvH+%-miR#Tp5_*n&u>2XN?CvW&Bj%QMQ`PnT5N9xZ6tWK zc>|Xw`-bRRMW8ByupsGF|P=H0$`gQl;ZJlLIlYC%x4oH8jY&a6oyxc&?O^lwX{(nDHI~ zy~xdF9Q3+W4EIqpV1#aJH_B$_4>E{2cjs?@6nWic^KiY@KhoJ+j&$;PR^^yUGlevYu_O~PJT7b%ttx&$ zYVgn4Op*S_*ymbqqwQz-3dlAmEE)^2bDb&UZR8E=Xhu`^ES}QgA6{ws zP?Dx!9k_ffb9rfqw@}!r1Mh)}B(rAYu82 zL3aNmbDLdCae>$&(g>oF=@61~D#&G~>{C*tAt?6yoaFb*ueh=MpMp@P>yB8;BlNS; z*%b)poARE*xWC6#pXUX9?Bjx2iz2N~J^pRAVrO0cWIzh!_sbK}a?feuPZj^}DSyj? zK=w~uwEq#;B!c!CZp9(X_0f>7X6XHCNnDW&hSJtn8Rg)f6KF>-aB(Vlwcn1W*)h7= zCa(we$rc*4G=nyeJKl9)Q+aEo;FksFJ3-4@gr1)1B-Ecv%XSQ=&2-@yt?iDgkes`<%sm<~ zlo$R(Lf?N9U-$hhu4gcDhJzUQG#?u6pGg9)$Nar$Fv39TB_DNjBkyc%w)obn-j;ToJl50fl zv+E0(qVyS%0kE=La74{3B%jyTTkcVVz<9BR9c5 zd@QA5z3ph`?J$H?+eke-wE*gCiHwnFPCag6)?;8lF4h{b8IRkNzBczqIG^DV8mla>UEun#?L zGMwpmj0YiJn0`7?R*%6-!y$LrCl)xNH?0-l=a1d!w13F3V_sCj4($gVk^rBjNLVv81LJrO3 zqKm5u<64vFC|?RlyyKX?P`(W`ZqoM@&mU_j2Ev3>ytoB~Us6#B)Rw1*iF#$ok1;kg zkyX{FW&;eC2raxKul4N{mMYrNf6b#@TIzld?p=ZR8zJki$D84x#n@rdxXyCXt12SZ-@X)3x*P0PD~@dDo9 zEtG*M%Sd8Py*5|&&?QX|LqU1OVGX0B)4$u8>Dqt{6Vou}yo8&p#6LhN*Uo>w9Pw8) z)Gy)5gwbXnUxb_v8yy1ra!O^=uS2V=Zv>pHl~Q>L4U|X*O`@T2Cr)9r;Ov)hlmA0(5{1f0zvw3KI<{$!2Mve)ja#ql0A(kmDW0j&TP7gi zGbSb$U(NCcg@B4ocYn0S3tdDZ8zO(@VdqL^XmB+j64){Tg3+!Fp-l;xCWYb*$9nve z5qf!bcZaYokY^T-Aq=25z{~|g!01QAPoanOcT?G2vpYh!M4SX=$$Gm#8Y?=gzCj}r z?iaBsx;k$oVuTfUo)_bv9M|2HD@+JIq;M&^I&I59TO?qd@Y`_lBzPZQB#yUB>(Qk7 z30Oi9($vte*qyp`-8dmqyrt+GqO>T<6sNEEL5>_@~av&c0r{QmW3G^1o9)y7O! zZ0K2J+G#o7BSwqyIPaX5Rm8~_lL{&oH?ECM}RtR?#UcJ zw7_5ayVq?oKBvo*xJ*~MNdXIBv&Q)ILO10f?C}-zMz1NNVxLPPsc5+4bw7~SVl)h!% z8OGfsh-mN+g%kUFJL_8yUF!X+KQV3nd!##um$yG>Fomd2AEC6-f~*!(SU2NStdIth$JV( zjoYWQlgkcACf{*&grYH^owCW?-Xv}ts_tgWB?nj2!EC5{X(jvP_)J!(vl(Eb2=S+B z>-gXf?wX|CoeJkeJ9Bc&Ik#R_rz1;PXbE#5v0(>PFJcff6q*lSykH?-&E7Mldjd?P zFgn;`J(5ReDqh(2>#BDc{>j5ySe7Yu63#@SrO-3xp=Zg|SV9;<;#KGpA8Jnv2@K`q zbh1*H<9`>9RDNsl+54md+AM+^@!o^k$4nwX6M5*h|z{_M$CT6Hxj61+wr z^SEXfKO=H8gM8HX)Qy|$f4RPv1+AIE;fJofZ?562VwerL&6e-t+LiRQ!x!0$hx`T31>R;EUOGUp7hTVUS+&-5=meXA$EI&&0Us|2FRRL|Nb%&3B^ zk!9szEY0(1|DieN%|guL7E_{5YO*Hm$*zClSXDv{2>ThJPOebzncSa;3) z9D1*f`M=sMU0K|K%;OdvjD4b9m6QGM_3w{irrO)5Z0_WhPiIySdW01#-Lgp*?$( zb0>{gh%gI3D3UN!FbmoX(?&hR+Cadx~+QdoI(A~aXy1nAZ_`c%jC&9~of)Fzb9 zpLJ1KIau}P*C}iYS$rBt3Mp3G!dO@PHLI{?Fu` zFa?8SIF6s6&Y7BYmjQ?2DV0*yT_>R4eOrg{>V}Mt9~Jl~81UQ0o+<@sH`m#>t~>q2 zqysfmCw=sO-uGo2HF;B5T7 z%OuCS?6V}c+1;k0NsFQ@*oUJ`|7@S*R1l+nz%=~`kNB+5Sl3qhPSu*$g^RQE#UCrh z+YvFw$=iC-#t8Mbfw=XrFTMTfQ1SGn1+ztbWzZkK(>7OH*;a$|oPceW&zvH$z0x|b z&lvro8B4Wa2T^A-0q*zqkGnf?v*~zVuhy`{5w?y8jL>$$sOug`tif&#upMVOH@*I! zCsP%f6``Ozk&|t~Daae&)% zIlC8bMu&$GVXehKv>Xy)t7uVDlCRMmihW+j$5P;EBEQ?u1>?M*H}qA(#oxI#?Ouu5 zCU=U}4|!pe&2IGNJ=7URHJiC70UA&&%Tu~qYF(3uhSg>}4e5f^hk0vDEuR_k4b4mG z)E71?zZ@_$cO8}^OA|Y8=S*o$}XQq4jNI=-h1hopm*1{ zRf1oYVZrA@L~g7n-6$8PBvOw@PV;Cl;@_++989qqs~~mYPK|lN!ip8=2TZ2gvESrk zqnV0C7y?hvlR<$NnAh+r^;>G`4_T=zdQ)yeILv4r=kQ5frzJCM1{kk<80gF97<*Yi#4x6Qj+hwlJ`~>7 z&rxK}1WfeBjz$}7mdLcYx{=Sm>{uP?e-UX`@$02n4G$M(_}-vv6~EZyb>Sd1N4QHry*aNA#oi2k-{GrqEIeMfQ%43R3I(yt}d%4t;mx6avB z3E2L;GEsM*(%rdu22-T7Mykrw)qzDig1&9}qnu}|94{EBAy`!s;+UY6YAc3QDn|AB zprxLp69tX~*63oxzm!PsOC?|D8x-8rHSNn4r$M5pS1jeU=~2m%wLFs>O_XP(r)gaq zxwsSG;T8Z82kN8=B$+91C&S1hu-r$9VhT;CZ}gQY6Genc7F`$J$OQ;kf>WS``K(E( z_KPnK_hE@ofp^Uo7*{9N;oX1>D(cP=YbaSF*^qX}&`c=~inhodm9M6Fzf?GYeYM4L z6e{C6V;~ppj za2p{zHhphh%XhC=oe`h;EgA>df&@Z@Y=2cw>A21VF|c`$ZoU{}HOPxIx9DpAl3Caf zYS#L+>o8Ed!Ay#@LfE-Z`62P^hQM@iFFVBee$d{`mpn|fWNTw%AWq*p4mSWHRmXPg zH$doGZ`~T_ORF)7JwssCLL3%6z|7rR=F{kv;gNtZGUt;mS8~47(bD^V#kod8LXLS} z8t18XL7bra65%Fmn+8rb@2c!uD@4eO!tkjDEj!*J!;(T#Tei=%*Q%I>NQ-)NY|0X* zt7c9vLyIf_t-D(P%uu9sR%V&iM2Q<=>>|eQv(w^?BaWDtf#~u2Lm#c`#xp%9@y;OQ zJw-v@lI%y{dZ|p2?~iV%Cxf|ch@Z;yEEsVLm>lejoj%uYc0|#a4c2rzb_5Kv)w=Wh zS1m;r&&qjXQpG)JV5(coLZD#tTH(_=k92DttY4@MdZG1B699~1o3xQAw%-BpAao0U zJn@9h&tMwZvLm_H=#hFe`^%vDiuXnxmtBq{Uu88r{Bhh0(a|UXO&oDayl927P%W+4 z)rY}a*L1dF3u9RMDiUTOVE18`&~cdEG~v*XpfBnl)4i&*{m9U?lcyy@Onu+Av?YGF zOtOshTj5|y#p=qo3-7;mVyOo$9Lp1iGzuvkp(Ag2k=uMDduad@^Zwjf*ZOBh+UtmO z-c*#y)TL#13674M_0PG6*rGDjMt;A$m5Z@7m%@?Vtf6VO=Bk{ZeZwU7t)1JzW{myg z+-j=%ubkmJ>bQ0qO5C5yO$T=t#~t2%4Ouq7HJC3uipCv~LpX~nFNxoFll!EXrOGkd5n6rG#%$wLFIgTdB8 zY)x$AeLdgacakfs^7(B77^g)=8ccn~#fN+h8R#a+q4EzChc$-%S^A)4;%>@i%lVt# zTjIC8`|o8!Lp>!E9?$`^7HU{X;0GWJU-qzhr!q|9o@3)2)Ei}^cIikq8}=;jX^q}s z)5VceqIo?zx&IrhKNWB|?z5 zBUBS>#C9ZnAWCC$s`PJuvI2k@I>@>NOR)Z1Zv+|p!vt&hz)YDuTzS`Mv6+nT=&GNG#{U}mM6ss4M)o@ zA>PGmct!O+w3o@8B{V5(*)B|1(LXKbt?e2nafUssMchnurX^4|i@Me&zr0h|KZUX* z7E+MhOkt~BYTRzVvfX5I^;}mUbzUy)v=QDXxy$z3U*Z{`dSG&^X2{O6vDYK-AFI#r zSX8(@M9HJ?NH3s81TeAUUU-cAi~#DO(VqDLru~z)nsF3hbx$NW6Lway+8Zr}dboO^ zHm&QfzUs2q zl|bu9gLy3*t~v9IjwgY@moW=U1*)Y0IKpo^ zMW^I#D&LlZq=oA(C7t5}E=p{i)YQ~KpLH}1+{Gt^R;k8%oSeF=AGvw1yEc8db{4~Y zhjGY47_TEa$)cu+%htcTXmV<$(6%Rj)|Drjqv7{$QD_Uo#ya6gqWFH$XWe|A)DE41 zVC}fFfbWX_dD)gV#}uU5+QIN4|w+o#gnhqbP_^8>DJ*<2GtdtFQE!K}u zGe>U$vBt|1pN%>{=1YpNxab8uElb73P>~^cNQ@-S zq)D-+gCJMk70!mHmb12EM>fSyPg7^AOmy%?OO1U+g1sxWVk3cPr{B2jrWa{qvi(F# z^yI7li~&-cn=Lh!N669c=~jvro$vX0O_y@ZDT|l%tjtV38_D~pXux)#eLcDFdpnH! zr0qOb1n#$g2s*_=I$#y#F6wf0z}!&M7aO}OTe=AoI~0DSOA+&Vw!rB`kW}tS&6xoc z8?_D@FRZQ%ucqF)-MX#we&{^=_!9X~J9w6OY|IQuWDYo$gm5`Np>Y_r+yqN+uy(eI z5QgFB+G^&e-AM^f(;WajHFHvGns2MA8yx$(+zJ(1`smc>!vZQwD&rYzw=t)4)D`?dUS@*UM9gf+%9odH7C0xheo61EX{<+q~ysX4q`KQt$ku@ z$zS8(jA_9PShaJQ7kk)Z>T?9tL7@s%xsgZy<_+A)*+H@DCFqN~O_*d<{(rj+vC(cp zeqMPDj`tL?v+l|+DIybK79R(*?QE+_m)ks5453CI@5raVS1n|RZFGkQH?Fe7V|6U z$^fKQRyv#kf!i``mYST%!|C5ckQrYwV?g6#<*GbIIeKmQq@#`O+Q)pS$thyjz4FbS zC7`Ev@;k@gAkfM_>ouZ%*4q#v;PGbjsumj3zy(3nHoY8(%0R)aQ0~cI;exdUq6G+L zam0tYv*EKuBG**xxixZd$2?k~`i)te~IvXvZ-Z|7sr_E^o1Hj90IA!P;6qboIA^8 z<8+~Wb(6`ZD9V;NHTL?rh?pQqCrqWcMBGeYz$)9fVZ|m%URuz-bu5I&cj7iQ=@A%Z zhCuIRe|-VgKN??2wB0-eeVmGb8cHJT;2ISIvqFjw`<{4#zsP2%xW!@jWxr{#EI~y> zZ>=^)Z+6(>v(z6PiXOq!wy!;Pz0|9$vChxBKc>0Io^CXi?T^l-&Ys`F6P<@lnPAK* zytY_EieoKdC)_dQ#?LI>m-x8@cLbKUla0GB7x&yOe{Uql5a(=`S>{;378)H^D7m~G z`jQ@)6mZqgi|vntYkTU2is$h1cI#KOm1~_XaEfN8y-nWKeqtM=*2Qv}TT(;h4LA29 zxJdBJD7;-E1jJ00`>9464NR-)6ZCm2#)(q$0w{Jub!C$T&$)fj=NYrk_bFl*j8Q0z z)_OD@WQR=dpr2;> zLPg#6R8OfQI2@t;30#$kkN(Z#K1(?|3LX3Bf7>pCwyU~DmjdS}_90D7^W#~eCH<6; z=Pd(e3h)GW;oWtWrWa}~CT)mew(Xh(X-Jc;n`moA&=|Y-xq%)Q!o>4h zo9&4fd_}AA{=*R{AqCRkydrtiHhB}QQg0*m&yO8L^Eu4dJgZ_H`j5f^s(MHY`CP3+bv>+w_ooQ)N{fi%i>A_iGl3mf+IadtuoX#+&xN4P z0OIRL^d55)W$+az{3qK(rZ5EMlpw-pemiG+M^O^i;Hz4wpRP{0j=qycof}S_t-lPv8&4FWBemXU6WaB9ArhLyr&Jh;Nk+Si&VOZ9BVj6O~sfsJD_xo1) zcODYK#8c*XM<)TU3CBgm_~DpHM&*<-NsvbxoLWoRPXT&HKN1HG0&!ybivHD zTbpyL=pH_<)|J>s6j;}nmsrhhWO~U&k8s3+bincw&1Q;}sg(BWGoXd+QSOVxfmG*m z(Zm~glJLlE3^7k2#)1)K`RBL^4DVJCj3)USe6O3R`%T{#MiHTfy};dJQQckVFDNja ziVU0$%wE)AD=hDREhsTBfj7kd%DXo=m^u@~&e5@G9I$AkBMuo<#DGhj*R-Rrt-1sT zm=n{Yn$GpR8WO%QEc7LU*(xhTq`Jy_EAzX!nvCL*584&WkoKl-OI|ChzU0l(r_s3D7{A76mgO1u^9pHVa z@GY$%#JWJuKci0l_}jo22f9x$E6G%ZM4_tK_jx&g!OC96`in|RCZFbUiTJ9?TsvAC z$Y8DPqA%voc00f@*;M{_ALMElVXG-Jq6RxY-ukQj2%E3-B)@aVr`5is4sAQdnDfU< z8VZ#$+jPHB9VE3bu*C9Eby zfgiQtZ&Z+t?$J%J0V~GOq5vfK1gb-L)+`>_^iqt9cK;k6^LZVf+j$Y8Pdkj|_gGI=|~F zKDFqU)UDW4EnY2GKPjv8;bT=D!w-UHehq_Ie>U;ZbT(N_#94cXzKmz%NvnU;eE+jm zKqHy1q8a-ymC{}L$2RrtCcQeXImhGf+^vGDqHa)6yJQJ;r?298E)#wCqg7-DJ4s!7 zWiHX|%okfGo6ImlogZF&m2S&cC{o33r|+lGf!)-_;#hlGl|7T+s4)?KzUnJVtQDov z7Mvh{ma%o}G%>m;b?uCA4{I2spa0E~@zYOxhsVX;NRN;F-W?u+1%o(#y$xD(fdMfY z6a1{m*A`yuO9<4wOex`?rbBz9Dn!@jF2TkRF(IE-Db`%sTXhc7HyoO3@pwt6GGNH< z*hu_x(iguuW6SbMLhS58qH}#)^kDa)rP#=^v7d$|q?d-0RkbI4|B#EwNFW-QDdqC} zWUUMu1&r8}Lvp`m`tm3+vRvlUS5W6KWZ9;jJYYByjB2UO zlXVNu>LkB-C}(dez!Migax`tmOcd##JJA>{?ZkEb`4PB!8D4Ob$_Vh6t4B0Vo-Rtu z{DacH$sj+z7$rmZaO3kLt?N9gvhX4K)%s3@CW$U%CbJbSR$M<7R^eQg(hti%O*>V3 zL*nyt8tSoLPUaWYY}nex>qTyoKXIwBRhxCA1KR}(p+IgrKkb7SdsgmU3|WQV#xX|7 z0udIwX-!ucowBx~FZv6)VuF!UM^l*%hoe=FEu0@QY`Mi02shoys2~eqKG}`ef|iB) zCl(i+ziVQkKYNH!j6U`#$QFdXZWi9vHIlnA(`<;2TKEd>e<*L}V4V?gCP*@?geWAL z!r`lZncqxMkG<0Z@(7{b-b1@8eWdQRMzy*cH0!R?_%ZFKOtD$j1klXM{8J<2MHCxa z5!_qf$S{5`p-eH>(7S-~YeMY4r6-t`#XY}V2V2EUS8k|>SFXzXRthwfJG}i~(Je7< zTil1f!>B6Mwnf;^j{YQ8lKEWa70JviU&@GMfTS01f3gQTgAbk4D^|3SUxJNeLmHd+#F;v!L%!{JrNIjVFwu33!o&y{Nw+qe62=7Aqm ze%QIV4V*e|6jMCqwb=Tzi@A0$q1nDe?lG>KAcrwGVb*P3{L}fq$d(Q{th9IDoYG8D zB_y;0-OLJ&?OXNX9Thp`lEs$Fv4gap*LfoSv~Gr6hRhk0=ig?khr|<-_XPqIk*YUG zOa^O)k#UH(fg89M5mu(-tPA=fGZ`IW2EZh;M+b!){9D|WGOto7hp(}8v;Cz^1TH(wdpU<2ah5-PAGdF@6 zm%?Ni&y|w@qEUMZ`Z7>9S;QaWh)Qv5c^hW>8>n8-a=Cv?c2Y zl4iPjcK@N37hkPu5fqH|=mWmG+-A=OQCOW3qjV@R@Vef!iL9|b_^iO3-s|6SCisj* z8lJ5%Zvzt7zOM_W2;UY_byd{Zd$|>~&dy>hH@7aj4yFr>tvZNkry``M6V^WVqlsPl zqi6(JG`P5`4Y8l@4=~77!Wf!NmvPX& zc`pqemS^+3c3$sd!GCeP^e?NMYuqmRn|=0cLp`=$k~FD3(73v0G3#UC>RE@Q8EO_; z6bv;-rfMj}F!XDF%3ta@B)EN1P8fOkzQdg*bYBc{;{4N39H2ACGR$VeCR3O%OG?iG zaWK>L8CnL86O(NobL;S{uIiF1pyRcu_Upo?pRH*uw(X7K`q!1*%VQ|?TWpHrR<)&- z_pY&04ojWF1WT%q+U@B=9>Oae%GHWhx4!klfULed8h`ah2IPVqV~wMu@AZl<3X)f2 z_H0i)fd|5OA}c*ldBRYF_@b{dAB{XEP=N&sKAhuB>kacTdF5+ZdHW4Y)*8nG=5e?0 zIh42LP$I>xwPLHP=@5RA8^~CC5@J!!_;~(pR**7*n-w$bwnV#Hhdk(iRm@MncxN+v zN&Q^V4X6F(BY#|wP4*&2W5ttQesI;6F(<^H=o#BHHg;K@&ttt$_n6O%qt#*!eEVH5 z<5{@w6NJy}t$pubM~p!D zhRR65u4{Qqq%lAVrU}_?TvmVRX%8W}FvmRSbsl3(L>%=>3DgnWPdUKXlwG13ck!$O zH6QjODsm1!UogFY4&J53tW5_%%p9fGN}afr{Vp5I>1bVpJeDWRd!d#iyM**D$1*au z?>clgI5TOwdR#$dp;$jMi*Hjgf!S0;XBu>_aaq(PhoO^e(4Db+$k*|>y@vWJ&bW*; z`1LlB`AHSR^EJ`$+cfiy3325@bm;pw7~!6{=~fBzTa0MvS|O<%A!GKHAdBH{x_F|? zgA4V3xjeZt9j)NQdASUYUk)9`(+SYt%t3z>u5>iPh0M@P5S4*sh7&!g!snTmh|kRz z7KLbicO+$I&zeJ%-B%Gl|LJ(`s+5rZjNr;CD$}_)6MP31n+o?oA+!nz>%q`Ii8R;f|fC7|*?p2OY zJATfiX2N-?o0Xxd)S(yQ8(S`&6)|}nV{Ty~baYhi>9GC9^19LU_C(*rBp*-ge(m*H zce&LQ$MtlzEPo#aQm?_=A%58)P8Y)fTSWXw3!&d@2Xn-V%EpTxL}={EO+C2=2lSWV zutBya73~`n6_p1y@PWcdwA>A`^&#bM$jp?Pteb=azhP^_`Sy#<;21eF$lInMS=H6q zxJr?-QkW{L%3@kgV+a7~>lfH@oOeRsow1lhkY+4RNK>>uc4D)C)s?fn>-a6U;HU(b zK^SaME!>z9@NF8+of8mEi*U-?Ccd{t$SbWmcldU2<0=(=ZX^ARwzf9t;J|8xtd0$qB z6P-Z4(Ys3*fK4|dx=)OP$p!^=tXJsZB6M#!!afzm*%Zu)z?S&YRIVkDq_fU*GDF{J;|dW z;v~ow(CaMJN#w_~8yzQ~#)xX!be3qJBRXUL3bMD*a~Uj*;Xy$a=KpuPci?${1KPN_ zxU5?Ida!Q&`NxQTrE7*t@b!KyC zSM!YzGwwHDMa0iinD{uL)8$1%njd1Ae3$b`o-!Jl&ii7u)2c}24Z!Ll{EvD*7f)+UkKnagqQD*KW?Phvvva7rbScuB60K%>VZ@BEoX2CR2m|Evt$wD9 z11N|Rcp`rILuQxp-S&5~Wn<27%>)mf=aJZQz=Xy_g3mop!-@?7w*wTh_uWT<=PM;d zWaQ2D&Vak?3ZF=yhXS9j#W2>K>+B+o~APxai~aL?TcUaxguzZ=-A zWXObufVhR!m`E}r2`xQ4yFS%;@wqjya^PTyn9K!w={xIiY$uT@8fSx1q z)1w7OZC|bM)r&WxM}V2g$rr(vcKMF;$2NCOw`ZT56Mlwbp4Y9rrIwiFm@rbEPU-CU z7@VIP7#g%v+ErFCIp`}EL(2@xbt#XUOT)F3b!@JjC1se75|_VeR8{rN-TK*We<8Su zVq(xSx-DHkb{iY%2?hGGvbLm0_q&6*9oyDUJ$DIOQpdc;;PKft6uz(h5X>n0F29`h z{}J}qVO6$E`|vUlOjJN5Ejp!CLQoWS(G8L!AtBw3DDX(iqLGr2F6jmpke2T52I>CI zy3;A_0-ujmZuRF=p<#p7 z13$`Q#Xoe_%?THC*Gj35bbV}N7rZ)bxjpLXDktdl^inQR?QGadYn}@}XqHf)QrYwp zl@y#f^6lLrXLc~Jsg7XLX0Yw7?$6x8r_7{PZMs`8(Y1|RYw&X7QWMF%1C2ZXVL8o} z?P0~2AqM*dG7UFHj_h^3yoQNoB%2QyzI#Up3PeSd$yBhNtLG9{m)gup@WcZukX+4jWw*~I8BFpbW1 z<%c^vJF_dJzl6oac#@G7-|d(u4M*%sG7oR4U2E!Y78jf*pf7W8hot*?dcj`-jQ+Nxdf4ogW+a4g}g zc*QpJ+^Mcy$s@%;qurG&{NEoNYT_9E*6gjSWGV2p$87+DHEozvaSbo!)W3 zI5oq)y64XtH0G|(?Nvkv?X%VztgCkgs@<+{QHUCkXkxT{P&2#FSG#;sJdkZXF=j;i z{Dj5R*~u@i?IF8=S`^e;y9cb6a%D|Mab>@xxaAyeg-uh<7fHzkP7%^c?9h^b2(%Vt zDO`IrRk!LN)zUrdD$U=zh9jiLD0#@5VSNT{h|l*_WlxE9rhi1l`_io;`x-CSa^2rG zHNlEbd;PgyT`-ci1%K$u%d$PZPeN@i7jKz%_^b2v~lCJ!-P7Y@;5p5m0pq%C}`bG zcE+IUYcIbPxC)1PQNcGI;w9j8PjTc!J(WB1FuGw$8uV~gAIyD!O zxsjZ&s~&RxC-OqwdAcQcdu*7oYMZB^BknDg4|8yJ^>w~|N6p$IGjc8BXbe<*<6ngLiZ_m$-6Ysm ztOIw-uMMXCDH>q>=DimCYMAjlSOL$67whU6Z*O%LM>P@=HTKx>I>|SIY^FY`SMW*D zEh_t>2S#7tY6V)UG$)XrSM`kAs;bEft8O+>i2mGQ-gV#GoTP^L%)S@-$JQ5^hBbzk zS9W~cZB9+GKGs%6eVIK)QnZb)6wQm*yBYV*&HA?O-uv_Y1Lr*+wv%)q-M(TVP_8U47^S!*Kt=K&|-1M6!1+QCz${s7i|b za%1n$6gtm`Z@k|oW(-wX9TR8_l^MIcsCRF1`JVURyTp`owZnKmk#FN~sNoH-V6Mq; z7dt1hjV|I`xfuI8i<3+JiTtY*Xq&EPtaK?oaViPL&$Ry}7q5f%f$pA!&~#&)l>0 zen699<~X{sKDFh;R)7<{U%G$Vr`)f?I6eroh2gtrICV45I7YpWpA?6z)%g{}!A}R< z!tt^j^x@kZq?)4S{oQ!$YYzo+z3;ye;IFy)n6DmhBV?4gr~BqwCT9q7)I}oZt7ios zwc6;t$r_!$_5S(gTZZ1Y4!LY^-z1GL)BZa8eyt`@jzyT2Y>4f}r6q&2B@FUh7rA2J z*4#8#xpAI_yUfzp|NiZ5>8F)PZ`p3=mK{~EO;*v@bnmHh^5s_EG!Lj~5B>1)GROD# zCPU1|)gmv}#aNoptMX;4E19hl2!DO>bA!8|u4jhV4~8eZzNoseNb!B-g?J{zJI$0fC%xpad+rQbjW6{H>E3Dnz&u=#)hVC2Wy5B? z+VV|wdM$6KVNzJ6MOOSn^nSkwz5Wx~x|UQ|h7C0Zfy6I=lI!_ccLpB_@yb&tX?Kw_ zA3@+Tzc4XrPWjQzg=oE@f5Bhh8KQIs8%Zry!bTcV_ zD~luSWX!sb@5CCtzph1{*_+%L;Xw39;seDm!fUhTEdvUL^V3w$TRMx4TMD{cZ+1#n zN6g4i!5((gg`kd2eEI~}+fd^SOFb3*LwaOH)A*#MD-%vTvuwVXQZ!3f<^09sX@ArXm zFa7lAyVCoLEmPxE*QS~xb>b{${yw#w@8X(OMZS#uPytXVccv;xeEat8!sW}B?|H2j zLfhX5KDOVS`Qv|&$86%iuC&+VJ*_|&5ThHEq3PX2%7yEi0`RqOFhYt&W8>zo?gX@1zLPnec9q*2VRQ#$0#x9~%iD84kM)mfyg`EqifL&wgh ziqi)TPrQqA9UQl25?%>o-zPW1LMVn}wOSe|x}GEDOU^C*w!*~)1=G57=T3@xMfv&9 zh#|sHr8%6WgQ%KX)XC9zB+F258Vr}0!T-)T><|BPmFO3e$;?KjISZ9(!K$OeC*$#_#up3I!YbU1?$P;VTq8Cd#ZQ!|;2>o=2gj zot(-~9yn1K01xcWh-`lkDI*fY;HOeSlJk^g%12y$o~9S3mddOG0s@J+jn-hrVqYI{ z-C;id7)thv5CLk^>TrJt)_LU?zslPRuq61-`Sa)fqobq$Z=Esw;B-lWLSWztD&(maL}mx%bjNkE6*869^oSKP4{%=;uWCiV^7zr zJ2TZQz`t~w!o!e#S=K1%-&l4&QpR*-YrZ@Hm4J==8uGR68=f?%lmWMk#KMg)>gwv~ zv(-lp%Pzb_-0%b947c@uxnKU#`yO2W3)O5!$r7ge?dUQZ`K}2Ed{@+Te|r^{1lF5s z*q;x(+*e?%exPv*b-xZ$Lv48Op!F~s!(%x|mD-u|_pf9?0CJ)(#<4J8O|5tDc$;4I z=DhRsJh~=lqnsIgd`y+Z%Eq~6c;W1{P`!Q8(!d~qTq$&7)R{_9tw3!-r~DUs^w;K zlp`P8FeLjy(b25v;<=Pm1fpld4Kh||8s)NK=+wGB8ztoRjxjuvoKJmj+`O4&zf|-R zGkuWw<>)p%+^313oXmKzcERC^sdD~%|3M>bLeabT?rCQ$b`+Xw9-khn@G;^_l9!zh zci#0bS|!BCzryt88PIxF$9^>`uA9(;zoJ|OvHOKe>FHK?X8zjrJ%Cn17~_tAD@OM0ek{}27Vs? zX=(}@G*ZylPoYXSpKeCZ`SNA1<8zKFJ$_tJuEUO5@B0Ul0?uj>l7gz=N?BOs_GTjk zpcMWCcz`W<%4@xZc%z@dAsrgt?(n5kUoJBQWU@W4j^C5U*;r@Y@k_*%X_b`dSz z5X_8hXQITdlkH^qh#kxX2h4@KWH19b3mW6J_H`H*85)7S+Y>c%1v_&WGX&VcydN0$ zQK5@R-O04_l!(a5-VyID&t&Xpa7L+g)#$pho+Ua)HmbQdkdYm@yoG29Okf z5nhcx+J6Z?2C8rnmC%b9_4;{pU@B}UyTEWflqa{-ejz+iK0}2btq*t${$#g4qhWL( z8SF_A_%ZyGaJ5rGz0Rm$9#9e!zqeeW{>JHKhN54E`Z&21FBP@%j`BVu%(icU+U_R!BCwL zEm5eI*Zl>?-HFjoDLZS^278-}lltwYw&v9}H4G0P$d8VW%0*m_s=R**j*nTjSQgWf zt0(iC>BgW{zab4Rl9i%l3zXb7Zt8fzuO^8w2ybxxO?IvS(&SU$YHAJ!UW(EgEVcwJ zsIRN@ry6wJ8vLP@o}!Q$butZ|7-ZcJFXZKeowiDbXCbLIF{rQ}vm?*+}ku- zB%b01=Z3ulesT|8e7HN09D9NY@yW3_K5sn>82l-SQGtPlMH~t)OqS6`gT=`ZWqj2Q zI#UwX*DVqf6Ab_bg(W1qlVuWB@(nvvg02$~bXGVYG1%cIv7pgtz~^Fs)F`LBW1;OD3F)cLhFHTvr_ zt;OTMybK-7^+AkW=2N0gk-P=J4G3sN|ALiGU)b=PQ;?Lr4In_oDE|uM>go!R-ce$0 ze6kgMmjTjIBYD6Ck~36Gf_tLAe2Jl#`Ch2)Jso8)E|VzEob7n9yP;ySb$ZxoFC8`& zv;rzLSXt-6*0Ax3X(wW>u~a@)K0PopaxvF%sMMB}-=R>sHcY^|yy4;^H#fI_Ypk1c zt*iaQaD_Tpzn-2RCZ5c=RO*J8P*qjciFMepBaU0i_;{_6!)`vkAR=FGL%=}4Gi5TD zU+d4+gT3LSj5apY$r~&xNuY^=fh9@Z1JDu@5(+zU*vlF0ykK0FLE+ryI-gz9mV~U* z($W!KAxy7h-$gs-*VhW|ydNrk&04-48~5fq5mCa!VTS-$1XWNm1EG3gUZwSQ0koZE z_SV|k+T8iz$-=iBR-Wd0FV9u2(bLn<4OckldHZ2}Zwau#&Kj5Ryuc8WlQRM2!Gc;( zz|;5{Vr4c#e*C+yR##VjH-HuB0a-=tF_rn5mR3Bt_N=1w*k@W!%^GigvRfezJCh+` z`Vh1OsphHN+yIzOS2B;_Hh-a7 zVkP(Dg}Y|IHwnl3ZvqKf1K;qOilc)}IQd`}RR*+vUv4rut5Mm8{D}=YoZ0% zZ=hmf$>@W5$yPWyUZ&vb&{JN0Z&Cpk&2Z;VmDGKbMA}p(;h5SG3U0IK559_llLk>)&bA5N z@Ji@2Zotxu6-NZ6UAlFFNF(;CTFTrGG)Sze{ks?$#Uqo->_do2^mp(6{QbQAUGEQV z*k!EicBayTmz6A+_b(`7=X6W1b^-Zi(sZQq)XS>ph|7qIno9v`iSVQW(hj$twE*{E zfW9*O0;<{kexm@0Q1BqJW2&>Fjh&0apTZ!DJvUW3*6Zp7ldzpRencT|E^ zs5|W>#Cuh%h zmMV^%PC~gpC_0GC5VF3?HSF(-rwSP``E^-*o=}WI2XZa|slHO%9IE7(ev}Yykw{Wh zg_jn%{Q=D4PL%9s-AQ-qa(Y zD8*KbDZs>P^GP^#WANVLcjpwsq{QNN-(bF+)5-OvY=e1$DGsQ&<)m? z29;Y|Tb0TkisHRENTwRY;?My!at6NDUc|gaqCmho9ky5Wn?{l$`C$UE0<%J61fM-a zB4UyGyAu~Su{}N=62R;@-MeVxii7;6@;#%C`R+`m8UfpX@k2J_KG(xwycBH*iF}J$ zX*lYGt%@T#2o5lo#nzzp*W>8tVm7|10&`1^;Iowm!l3}6T2on3F|@6%Ek%3(&NFx2 z*|r4negNeT2&VcZ!vv7Qh#`as_y-l@_Hdk1pdFl$xyqoTdaO?>#DYBuzj|fTmv6hK z^LT&dmmL4*Mb=Wu*f;+GsycdH>j3iBM?G$VxuE+XyHU#1Px$od?Bm1jaY9k7O{skj z!+J|~b+uk|1h;sT4fG(ssWKb*nDLs`EY zfsLN5Zzl}QgcXZ7^Ax;RqEb>)EEmbaKRvy?+Rxzg#X$VaZghf0Bd0JI=f~d$1YL1# zgYvN*9XEGT4c`PGE2{*YHRA46^i)*O!K}eZPEtLT9F~!VJ$1Qe$GCKn{aI0;KAV zzF5WJgfBbPi?Ei(7YsWo(@I2Hh&VerIoWOYzC$8rae{zE0Z=bsu8RXjG8jTiN)`y{ zm6cCUd_-~sdqU9xK|u)!`Gug{m!De)*idf1Q5@?Bv}N3o>=khMXF zwWj~!qd7L>t(Zc9gc41^cX1rYn|i5sj?A_#yg9hi=GW`PBAylb9G zNzFja4vMo)$7bgOx3U2*MiQL%S6{*tA*m3-{QUJxJ5Q-IR_Nl1WsO8)Ez2ehGGcH% zgPnhqn0Nqz20#eo;qw12u;h4wcaxKoA*k~JB2a-U{1m(s%q9PS({ehVR^_*69!N6b zbYO>;?#@s}o(LM$|DMQu{KP`%qrG8RBPKpIvs?)|=ONp~lQ6&X7&{VQ2Sh3DoL)#D z>CtoDnbBa;`v(UnWCyD!!2&hJBOcvBj=ADc2?Js+8Ittq3rsGDMvU z4K>NkrLrxxlb|ihacl}G(7WL?eLu9lsOXuPka%j?mwS>Oqqsn2gl!LK`ub49ir0w9_sc zOg&X0GnmS9p$ExFAOqz%aR@Fl%H%y5l~#{%|Y}X$o|1%Zs%ws89fShZ0k1! z_E$cFzqYlvQ=&|?mW zA_UDFG7(P)2&r(+yHM_@LW9s543;IQpsIZ`+Q2L{G?x!-ilNcC5X0evgTXX^j2TB5qQ|(wQVY3`cTw3HT5ZC1u7}shna_m9@hw#Um(U9$nf|v!j{`%fJQcv{Szx#YXk9FS_tj6a8i6gliM!O++7Hk_64@bkzQv4DT7OqeF2M2$L@9TpK z>Wka(5Q2p%IWDYjKBJ_0A`m+t8yX~RbVx$c+>#*>N=d>hVOzjUv9U159W5r-IZ$Mt_r8}M^anJC^r2DO(~sx$ zRz|9j)sb@PYZ<*N>;(QmQ5^sk{27qrFjRTQ!)hPTU6y|TJ`HXvh>BzN43{0mtRn99K@CIU^?i-`q;OgaD%L`rfUF0jUvTM@~g00*lK8SU-D1 ziL7fo3rZsfz%PVFMInsOQ=y?!gJ2}wp`~qXfMt%Y zk9@?R>odsY;=Y63r%t56gW{(HD}X5>!wr?$Q==c-txGyMl!6vkS8ei$+i^FS|8QFq zav%|dt~7rt&=AB;O-+Gk%0LI4s5q$apn}3%`cI==@VP;oRkL5@YKq{Nf$a~XLi9%8 zw{=*!6tpQus20#@$nC~h484WzjGaBrhu)xkrmKnRs|D5;7Z`m#8b(3?5 zAZFx$@8#U#-ZIeBQYkaDADWw=Elj8C3Qfn?x5xcX#BG-ptkT1}1;#v+*R9qLDiaNQ zt~Vz!%K6Y10%1Tv6>*wcnG)#m^3u{6$Z}zTnptef!d5s?NSzZU83#r)2RH#*j+~KE z2C!(0vES#x4y2(ZqCZqxq?rstXs>BQAS4OEZp1*I3!+lBU(B;xDwZC-#rBE@qM9HfaN^Mt7~BOsJV_|{$`u%?2DIBnA*&7Nv;6_RAhc-6tp38p z2(Mm!a}r|)5ErYQo}8M}hm%JRHXkOF@qk$=_wO_O$MGJNcCUcEXO4YRFapJIw>|nW z{+9E;6lQ(p7yf+Fbky3PG@X<`+4z?(fle34soy~d1%hv$1a=|7<@Nqe)a}*^9766r zP?SR>8XD8nqZkknv;w!%!r?R=!*8$^K62N>J{QrZ`V;ZwvFEo;z@ETxJumuq7(w zd=QyxK$5bCqP83k1uVK7W@<6+^RSrvo3)6ra2qJ=c_2rj+XCrj0>6BDW0oS~v^z@+ zLaPGsH939#IifrtU*9h1!{c(;HsN~TljV6G>p6UgP~swi?Cbh$JIFxX1smKJGm>SX z03wNF|8A-Da`|2cB4nd6HNF(707_xO)iOnUJwVx%B_3}Cjz7>XoXD=FY=;UNwd(#r zqG;G#{ix-NBQ@CQ?5XC+RK#ObGT{UbwpT{MKjL(;yTOHreRyw$b48lGLD(=0J{&z# zNe2!NcCX|^_OJ_rSVVAJE}SXS1O%GWVak8%-=S)xI$q-wKn0OR3`!#Do0p=}_-f19 z0aqY{MN07uv%|_|`~Mok?`ybH(S!0I?eOn2JvaZ(1OYV_6&)>YZTi8vbLaG7m85KM zKPm5FldxlijLz1oyAD!_C^3r)-Kr9JGh!_U6My_KT)I^HUL6?k%Qwvp(z-s zSpr8$_e^UXbi*EqV37LIW%5T^eKnisv?=VZkz+;#VUQMNXCDpefOJ(1`w9#bawZTD z<S9mAS_ryI&c8EwxQx+E9L*Ar{6hBk72XJpWNCGZW z=MRI5N6Kv$KQ=yY34aet%>-r!mB*Lx*Imf2g-a=ki4&oQtH8s7m_N2skFqI)@_Gsc zVi*7fbfBM65QP{XztAI|8g|@LeY`sp7qnEt35qoQ=0}Cz4^oxZt1ahAQ?F2i!2Uq{ zy+jwt1dc}sTXvH{3Y<>++YA&2Bb6Umyf{FUX#>3_2Ha60X&A|P0P;F+9c|ZM&kSP= zz}g+WARIzYsoMWa0gFo|%UytoQ(dM*cJs`Luuq+D43dK|C86qi@Uvq*y`sN%#VW(s z(Gto&QoxBt$%YAFA>yEy2T=7cZZg;(wm?+g7%*?)HUz33H3Vz%A?I#m)^q?cw_C`r zwb)#Eow%6uu0P&tWtGv=DAsXmxu7VKY;qFj(6Eh9sXzTs7EYQSx+l&dQRMFmiR zAy;54AQGk01Iq;oH53Z)%eetaw z4V9HZL6E#3czIxOusriPEfp1Vloowc8OpkdZ^98k`46EXjDyjcrj`p$HH+;k_S>T# zAaOEP|NgBDh0dU*Wr$Xg6RLmq$eo^=N`Wl|+hP(p+>XnrIJ8Sd>g?^VI2Tha5XAt( z^;;19D;b-j1%_v1ZGo+?{-ZzVccd!6ATx7(^_JEhO7P(LW*|(ZR?byifX z6uHzJ7qLHH9?bs!{&rAcY1r7}MxarF!O4F&IWbB)n%^}hq z?br?;>V7Tg&1t|F!zrNVS(s%uS#Nf9Pm#v!Mc2W(+Q4EW@_`d4 zN%u0uX5q=|f*{3X`%f!x8tgs_WXo_0IQT#fq)6N6hkZ6-#Ul#94B*9Km;{^b@9f0Q z@0!9BTwPDYiPAxj#E(`73@tGYANSWV=skdPWgLKqaMObwm{BBF^akcC|6qtHM=AZn z#f#=?@3gf|7ZCfZ^gyyPn@AwJiIyBXVT1@%19XL=jzUHUh!G4O-5}Ugu{Fdq!HQ^; z8?(18-KN)x)g7cp`8|onp!&-gl+3Qu^Z@!q3IhWPN!+WzKH=x>nDjLSfYoU4-TSq= z2VS6G>2m73_UhIa>#E@vTq(J*A-7#_R5<_VaXd0Jv(;@4noSQ=5ojy?%`XMID1c^WPbPFUzvECddobcKnZwxBfv zgnx(L2Sl%3@|=?Kyk#%(y!Ce;h-|8$jKR0sq57Lq=(rk-hCnh%lr9K1Ji7i);>C+| zEnHatyCsD!EUA1RBTn!lW@?lyHIeZ*ZeJcOQNRGQ(H3a^6B?5Iva%j_U+2R4^R2K< zkX&r5h5V4*Ya_PcH-`vhO+i6HlZq{kjk3UsQVsVJ33TVu>q z1&2~m>&Xx;0mUJxuUQ5OEr78b+g{!}xxDt9X;ibIFLWUadxlkeqC__^%Lq>b%)9*o zP;`7rI9?#>W6?6`Z=D6k!`J&S4y)@83>pFCiyd0Oc*`C5ebfQiht4H;RC%%D{RlL|Qix zEk?TpPBUaj>>#`^11d?{Lvz`=Yfat#ZXO<~z^KKiU$>g4!!IoT0OIiSuGzMlRNeob zWXua?09FWQB93LT!&+%G)paf|r~-AZb$6?fy>nX7JEdY&F;HESl$1o;Zv@#~LjIZ+ zlBLc=iv%YAbQD6spsJ6!A*q9K!d%dL4i##luMdq`ELAu)%RX^m0OMQ9PPo zb?j>`)W+l>C zi^z{!?&u*&S#l&RkUgZN+Q^Bd!R>Z>Ip^!8dvqYY7`>YKia?dDzoxnjA%8(4qzVcH z`9fYd#OJG>ry3>qTPTem31HzV#5xEX^g8&Ut;KFGIdS{JV+JZZx>sW1oTh2^g01n} zmr^}d_@J+&2qJ<7P#;jfx>Z{pgjY3}KNp%TDFKv#fI@ilreZ8gni3LL@p{+ZhcH|bPtMH2HKiCX|b@=rlSLSKc_k5w1PiR*m8(LWphC`3(~$giGjnb$b+7= zo_)gA1KrJPwv$8$2g}Y1fZ?DXt}o=Y%mM3u$V*x(3kB`=U1)g_6~0SNL&M`ZU*>#t zNVH2+Mm1=^T!x89F31?wO?e?ZC>^G`Jb$5Oc5kU9Q*cq$F$0nmbOO6v4Se5Xs*$AD zZn`;AtO1+#Ve4ZljgVV$8uoD>K+4hyX=^9+LHkfXRsxie%~UIE^u=X;0NG;V#_!+H zLFya~WU9XSpgKqOGvvT|x~+l$#nQsU!rE~=@%0Yna!mm_Vf570aCFRwWK2j#rabCY z<4rQ2Yoyak#m3gE7paMlEWI2lpcU{!?-(MVlx>fBAvUVtoskZ6mjJfej&!71@ol?6 zhRp~{ST-WN%IJJ$QYrj9+sg;;9#m}82gM1Wn{0yDbHs#Y_IvC->nZKk@q4Ct?pRU?M94n?_Fm~)qI#z1bX z*OR4DJjZbO=ffUh#Vc;hIoWi@?AShRff>T9>|L2BPo5;~GVjwk!F4tS*^|p1f@sxZ ztZK8jgbuJ@6-|i&wJKZJ-q>S_mZ}QLFc0b@p(uYlDb~&ASVmzPWywCZ3sT8 z{Ew7D;XBu6_3h$NnQ~jT$7s#(-$~GnK|}jYYz2zNx(hwo;{AyH+0oI#K(XaUto9em zsH3@y$kUMmZNYkl(I5|Gypp!Iwn&kg%W>DDV0~Uhg~C3EZ}m5U?-+_DjNh@?3931a z;I+ULWE2$@6ZZI^NCf4kAbkE8BLJiWz@S%vFmrL(~VNAMaWynbk^rR>k(9S%Qv+<^_aZsI2IR1F^n7%oz>x!QuY2fI^)O z6o#mcu5~~$6narR)5jY@_`?_2&x%h0{@vJ_ory$jq$sbce@-G-r->Bq4!^>b@6It6 z@V9_AW(#F7@qSoqWE86`5pcnC5P+JpmzI|^flCfT!Cj7r1yyOkZPq#gDNs1{pd)>u zkUNZ@IcujXQ&28}C z<4+fb0DGRnEeRtE5zOIwqJSQ>k7FF>1qPQU=6V!Dz@!*xX<+Y&Pk0Fhz>@T!WgmGs zI|m2jfJA}OAoO>bK(uj0N|R)u*h)SC_e*I6$rE7YE_U}lM4*4x{R&0O3m?+3h$~#G zATEM1p!U`tx-zhBlfWf{DC2Zb#U*i@PZcu77m9!s%fCBw4?Vf(RrZ~Ju}8rJxNkD3 zLEpU>>!1(y8zMnvmj3gs@w=t2J^oxs2;iw&uOCY8fuW&E1{p;)%$lGOu_B!T7;2G- zd~;DY{W;nRkwJ4CIgP$sZg7iCbO#G#1U1!zO98X-*q{1X@p zG<=$XMQM6^dbU9lB3#-9(*mtS8Z?^_$8%MqzdX3!HIqZo(g!J*Wee&BNSSC5Q^FVJ zw5wMJ`8Y5lA`L;=V~K3yhThlz^#c4)E*o~PSg^9s z^BGK4V69!t^Gx~kxWjp8lDIZaSb+m=x4DoEs-ZjsE2`3ZN3eAQNDXx9Tkqe>N&+HT zJDfggt1fgT&U{FXi*2U@t~%}8139QC5|a@2J67$r0Tnh84Aj@sLqkLL%br}4t${X? z6r>p3(f!fYwd04j2wYE01~OK>*=GRxP6ALRI_UcV650Vmib{UjVtzl;UlPvVA2;)B zG*Rs9cW8!@w?8LgU8Jc_;>Y*zKb_`?*VK;oIU(v!uK}OGSY#J&A#mEqQ3@e3fxjhw zg>nx19;9`3lMt||HP^jx;R3cf2Y9C>l;02|1ivp{cy}T}29@E$C6Kkv*gA0N4$z>k z_h%MOk%~b9^p^*|!jmVJL|gXIMF%dY2)9e94}AuqJtXpxY3$FiQ>a36a7zYizyS!~ zZJiN_L1SmGiqo@I4ED?IkL zfI7~<0QGwUJDtg{r<$h?rb8~~t~7A<`CGn%`*@u{L;_=9^2N-sIAw59D8{+11q2q` zCSI8oar#hI%>7U8@%_@w)2Vmwp=8;RJ(vJGizqx`+EYCbps5$Mha{wKL34)T9i)?p z@&T=~2@4Ag7dE6|fseOGJ|e0YAqmOs)F+}G;EPC0Zi)4>JX|yRpN7AnNLl^=r{N>I zHzW;P|C#^Q$(eCN3bMMoO_#% z!_+5E2SYU=#^b)Str>pFwft+_fc`GU_llf9U_Jjtno2Zp0V!Z!KrXbC|g&bC~z=#6s6}(l~d_l38ev{KXX8v-21XtjRoLpzTH&@6D^Q9nR z>Id(8Tp)QJ0ogce1TQfdx)N>)?9@rDw282uLQy(xYse}ni~}udGSy0U+DKI&1sFnJ z!15VU-S72T#gFF^2;$vgli|`c19t?y?apKlAnjWqdIb3`@aVDqoi+OCNPb6Bz|XH) zj#IvuhOd#O@sj>EyK{Es^lzeb|6T038i?aU{(J?4zvO%4k%Taw+bO5=Yh8nuNh)dN zos?(N$?jyBqYS=|_NDr*U-fs)%2f9Cc^N;WMBX7${5MbeVn&M>&qqqRA?~Edt?u=0 zuj*+!G~9+H&q&Y}e{OTBk!iY5>{BF-cW1)=Tm1PuT0KKfdxqqX?KlrFF0{2t2Zn@b zf&$6y>;2{P258DqL*=hTI{LTwko|@>9oj%)YUoyM-kyi5n?=Si3e2z3N(hQxpn#8E zRNp?Gl9IAA5g;MWntci3SmPkIa-9C~WdAX0z_gY^FEiO>$v8Je&F(yQccI9MY-%-7 zW_Sg1;C$A(4d}I}tbkYgw6?bsIA30{wdhv09))A6fl`!|k`m9{YTtP<)Z|dk*@Xqs zuO-r{oj(_?BxanReY*-^D$Nga!!_&)btxN1{&gIdyu(UL`S9CZ7XA-c4;@G5g_6d< zggUPeLcR}A!PDE9P~?}yo^ocA7zo@H#49qT(-Xua zX@gV$+t+s?x&;??_3SAyR1(_#d!Ixv-*Q~P7Uj74ns09*XFK|6=T_s_hxiiwJ5*q3 zqbeRRzJGvbK{8~A{=#eQqK79zF#b6W6&w|h2MoxUsn98-*97sx zXuiK~(*ot@5!4y$-(je}6&Bk3+;Rj|g=0;0$hY4z;@g=BAShoZyF2o{^8&$~xCaUc z-_(PkNy30_VnqH2{^eAm_xv|dl}{Dr{PLgaBzXiS;(gPOBqd_SbqNbH+0*|<5o%KO z=4G{KlWx)PrvtNs%0&dRH5dFEpE_6iTL07FJec zK+&q9o&FRG5{qBZap?*KcKQ)JJ5iAe3-%RVpzoqkpmO~N^KpY)jZ=@l1!57C81rGEaY@twR1L$DXb4c6hLP=52b;ahZ_f4yeI}<;3 z7O!(c(csEYJKO=>OV5mN=?l8O5fs52xzYD`GTEJ{-Odb8n)No}>dF$`v)-eP(<2)1 z&;OK)(mV5{{O(g0!b*u?aT-UK_g(MLITw;W*u6}5N9$@FI()zBInFb@Fmi<4VyBMG z7~a%1VAjA4x>qGoF?tQbKb$!xqk_5l`9F;c#>@AXenCZW75JZKYpf7l1VbId8_OPc z-@(w2Kmi0OD^4)eYgbTLM&Yv`2aR4D7%)GMO{l}Wd1Qit7}`A}ph2xbpR&s| z!DBK=C2$hkZJ%l0bUu~KXC!>-gItn_;TGO?8dRlM)*|N%k4em(viI&g)OtzjDEK$y zmCx+)vFvI6Bgg;tAMRC`5)SqYIE3W?&ds_s5Q)WpI**#2Bz?p($#X&QkA)DLK=6Au zBr;rCaqR6^sk=b;pJVeXUu#9Js>vlz8H-M zU!~;b-J=f{-fcsfb6LgX6;0UTq0@dt#r{PL9tsd|e4s!~Arj0~#h6*@+T7fnTc-gy zaFu=IGI=l~v3U^i<}<@bhg&lIWH-BI33zmbI!B+oK2wxA-%dv(KHZRd{g=4gGn1vB zOM5|81?N?~MXB&_W6qN3(`uZ@P}LF_`8P&lL_!vl`ep@nXSe_yWs^Dszv#_C1?{K6 z;kdvU+vpP+{dAN>4gTy6hPQZf~%pHBWbujaij*;7s0JvRAWnuiHxIR^pn?l1(fnQbO4wEQOKO?K>FMdK?te2K zCK(lr%&3J$M9jhUs6voQ@j>f?uCZ|~=%u43k5(WZ9EXO$8t9!G%LFn!#UpEWMy1%| zym%tVp{LKZK6_Xew0ttX{y|lH?Kf9Cv6CDW@)~-KTSzNCqZbr#-+934C4_gunD6{JuL}OOIP;~~?yZ<#VFE4U zFOL2zICb?(m37XoA8PDRvN^}9rvWtI#Cg;D z4c-XQ3yq0oWEI%mHr2`9A^WC)`ar;yG$8Nwodb;~#lhcTV4T~M6(oP*bl0NqN`Es? zkKf+ywbQaYPq#Ba-968ucG=XB`aN&s-z)xEUs`&yccd7}iBTF$v8xr6B065>rcl4|#I?3x;lXc^MZq z;Iy~6-E3V>;Oqz;O3kM6*fVQAM?>xDY1S{iTg~dkrfsWFBSuvyktp7k5zdY45S-`X zMi9et&V;3y{7U8G>M6$9Usm*IXXMGMgbo{@CAIsy6SSJ9dRp91M~m}KXf!iji4ewL zQ{vh^b(^Vb$AO?!12yvPwT`IX{gx8dkFN2-&-9#ee%B648k)t}7n~AITls=7#@m=x zI`N#Y@mb`Ci7X-=L;=pi$>e z^Xg3Pvx^=hyee*!?;K6YjX&L)PbYAlCLs{zja+Hr{5kdhqqbf=u@Cu5Wp?UyIab>d zJB@q4yKeOOK9VfDzt(v-I^#oO$A#z`_x!CCg1T@MRMbJxePaXHRQ#*KSIkNkl(KBy z&ToFX5@bJM5^NA7`{{P1MT|}f(Ps12Qjc`SG1Iv6Jd)rxsmly6|EyQx-H~aAt3|!g zq88e!s|CGz8pwa(V#ixh7#l2gKYgK}V|CuS$ZIikRk_TLt7M}~nZ#w=0B-KRUmhx3 zfLkyPmZ4gB3Ylu!$h&5H;JRZY|5i~;b;~G3iF$}qP4HHU-|%k6iU}T31P7JuMn2$5 zAG*)Y%>1!@^%^K(!hYlz1Gonwnp|S+IImoEMQg^}#&_Fnk#TIHi#+n;r}H=(L^1Kk|ySGAhvan7wY zZYzCX-g~`8>A!j*N-x^#9iMyDvvc2NfBOc#8ymW`Vck@9X(v0hGi|p+5;v?`?xBHG zo=;wdd`n{j+EPVVr-_oR{U5mu3+In|)x0z(KcCm~NhFz1>WfA~x^kAhEn8cPt-Sm< zynNEQ$3M@!TS|o6sLKjkdG9zng&(GtMQe`argeqvNZM`Al4PO?@{4oG4ahiJrfz!r zG~UtPJ`DdV*CLVfvG+z7Wupq=9T};Aj=TdFcpIE|v^=>@$Ib#Byyn^5^}T&oQcca5 z)p1q?5|OLyK}3XvZ$L{>EU{u{Q7g@&W9iE}xL0a+lN$JfAdMH~b^=3Zh)}W&a#!L$7eX_wba0}U zL_j%e|IGJ3x{+F*A|5~255FF$Zv4W3a#OSJ9?_$r(+aGWO|l*5MaS!NSygtwKTUBZpQ=wZ^w+#> zelWk@brYn6ER}!ml>GtN6YehbQT5OPLGjj1>K!d~g&FBIhJJvyJPj!16aqu#`|xjG{fLM9!@r^y z$189KUKPO6${}f+ezZHAUQj>`B~srCAe(MSyO~GAucyBb@9XeMvBP~Kav@=aq1NfY z5q!(OpY>LWN^HU@UQ8n6=KR%{rkPorWUkB^?PmWx{i_9v5v)|Nn^k z3aF~K@9RrJhQ{Ytrv14{pL-TV9RJcIW-{vqGGuD0WOp_c{6CKna z1H#ZS%0!;S{J<$aKfK6w*2i&uHdcaS;c1}1`ta_GO6m&^SF8GXXoCDPpe%|2^F9N_ zX-sj8$~mx;NPe2wf`$UarU2xcA>zXa&747=yABY1@%*z$urNP>`|&*Z(zt#Qu*GW9 z@x$xF8DQzwNLOwVw@32xzps7@0$I)mh%kP=4R|mBDN|8J1*>B&^vMB{XBYUuY3_+H z61YKw68~&JnJl30cbu{%_PD1i7)`eZ*!#?buU%9`5V)@Mh~iz6-7lUSVJRD}YT@qiXP$z=6YD}VK58ri8*#`+uqirgQkf=ycSpOnP!Qj*r zZk&varg=%i1|yDK1*d%KsGy*|dDaIP=#2bg0lkdHLEE%@gSNiQvwosY!a&udXRw0L;Cp!Rf1vA8j8<=YP&5;%DYwcYrFOzGqxV@K za=dWvs4XX%W*i!2s9(DnWHBRds+~blMTS_owHk&Ee~~)0cPa`9VPSlHtr8uQV`08hVMMy&p zrUpd38p$1zH)l($=BTEfgMV+Hg|DE_Q+y7&-EW-G%jYA8`@&*KuSTT`o&7ViQKY~m zhD`=&X!}oM2F+SP)$~KaHK-94{rEwae>Y_9LPSg*T5^9s^D_>rzk9ZYC3;J>yh^E9 z1|K5f=H>?KiL`Bb3LhmwyZ;Y8vgDsfxBPr&Y~+GZpO8dEL~b`I{}KhPOiU#64G};V z0hoT&t{$v^2LD@%fq?-v-3&_(bLb)`m;vaHwl7ZzD4D?f{}lV=nynO{#{e5j1Dr=X z`roNSF32+l&BFuPjd4=K>)VY2gA#O+Le{^iDFM@@wcD~hq&~V z=W`sS@+m~S;upxk3biMgI-zkWaR9LX_rkWY(n$o#%(fZ;yP7TDBUvar*DCDHmbjI` zc26b6eQ)-?6BqVrGmn65GOMmuS`blz2&);g3_mFGwgiSUl1?>m1$pO*WVdm$$Rh$~ z9|no+Fcz~HACr2PRFOl;D2Gb?qxcWZP3OyuPJg-d1wu`k>fQ$jgJu>tPzsStgIm!`p03`~7cyia8NO5t>)G6hKi}5ROi|LqpO8~%p&OunIvDePxk_(rvyK5(;eMUA0<S zN93NteBAuHbQ%tGWMi;mfwGjIly>1h%04VFmW-@|vC+mBS+TFyycAwKA-`mLPbZLH z9{3Q75I224iTKCaVUmk@T!u0bC9l|`2%kXwBg7Z%FO+{tjb+bm?9QjKgU!$dr3uqb zAjUzvbccrFe;HQ`=hnq%>QHAJ^v0Zr(&hAJeDa=)?FD}+C!YF{Tov!Efs;-r$5oKI z_)~(`V!Qwpfs-Tkzx05nnd^No3vgg`aT^?<&j+flj2kyVCuXfcJ{3I25THfUff46@ z3m~Iu63H};OCAPQQgl#b0`}FV8gM^xTL)^v0BGe5XoZWXx}d}}Ha?DP@^ok|mdzEv ztXX7e7TEW4EoKXst$DQ#-saWI`B`FqVZSID|5_Y;+g21O;jM86fwU|$5e>A1--zGn zuBuRSoy32U;4hL-jY=DkH~V7N?iu@%JISfqmtJ$IN0*d@OCqGQv{bIDCkWRLr#i`* ziHm3+*q`5^!gR(ARlMWIsHrDXo3f2?w8kKbQ;Z@ufo0Rx$u1C{LUesc^II4*v046J z*xAd1C~Z9c8!|B_H1F$I0}qJ{H-H8&I4?LhTKW;R{e61a-PwWK8{z$J(h8;2pwR2l}>Xil$-FT72z4Il7W&MupIb(G>L6b=d(0vihV6Up7gij z2X_h%%b7$%3dfZ)jui-TT8YM3pWjf6T1On#7VqUCOu0tXj<{l!2{9LWOwf_mHL!<1 z&HAW>)Xmi*z}WF3<;0b8Ng6kez}(+SrOxE<3To&gE*+MfbaF|WVft!Rg_zjLewlzD zbIs+Hq85@snJHK z(659L3r|d*_OBla<`bXVe~utLtaX>H4`}h}y3Q(!d-sQCWe(dsr^F7CL^+d3TKuqG z@Fonu${4bSZAfm^&H`|3wr)%tS*uAfea4ec_JL=-XrU4Y^q|UT8wlnO!jr2LtUVRZ zB$jw`eVB;GMl&~Y#!io3HF1hk!Da98>O@-j(~&G1Bu@2Y+^mVk*&MC9pmz2-@>*m) z@QVO4tAou%beVnwnfsV@tlKz(iEhmGIZlC5JKQJQEhPOfHSUpRM#9qbo5AD_=3M(8 zm~AA~6LTw@LJ+8TfUW_sB6B}Lvr*O)1^LbX{=Sn9I%xEYGo=vC+k!Im=)n~~Pxw0> z2iZp_sW%iK&^&a_MO0(V% z^4y)#F3BPE4->RS<|STccqtsx!&Lm>@V>+t-!6kVRYUuc?Ej6WNNWGM`^p8ww$UbKK_4d0B(wY0RH zg>v~V{sOK_FVumijFft?C&QbylE;0?ve|f#T=lAa8E{ppAo9`@nz^Lv@11T@V%yJ# zIZmR{t-~a7>R%mlpqm@AHH$GjjUhEgFR zovITt&|5!e4#FpK5I+64QVH3kpcj1#7(zl@U!e_HytWmo z-D$i*F0ZVTJMEp3UlJ`AC9I5}>B!#VkW4S>TO|8|S*leorE#{!$5SbK1%)L=#44h?FXo<{W<1W2TAV5F1m}19{wgYD_p0-$i5OFls3(U! zB%#&$aB#V}=OzgsV+XQnZ|2uel7A?gSyPTv&sx-<;*9+JXfDZ$%a?sp8dv=nFy`U$ zY$h`CK|aOnP_08@mK2W4FLEOOVI-;Sx`oP5H8W@r=0eDy1xNQ-O}Vs9?}~8CCI{7B zCByx#9p7+yNjhoA{C`V}=?BUm?T~I0a&mG|M9~F-PIF2VObr4Wfzs^L{r&y;HB#Us zh(+^2t5rqpz^gtfN@i?hNQb*?0&}}I8iITf*6S-&|I=Pw*DdF=cj_+ z9%<2X6?}!#fZFUU>xETsEZ0hWjo&aj`u$*Ry>Y8`BOeKA#`%-Nwm`PN%U>T%s~i-> zuy%AL?>fy_{Pu?Q-Glx2EPOThU-f9Mjl{IApNE*}54L=Lo3=!1RjP?z_TA`cC_seX zbK0-HZ<37YoOkGa9-EPI*Q(*yfOMupq86Wft?A)|y-20wr#uu?4ySFZ-h*V0zI2?s~jZn-`l&QpELX+Au%iCLoq zv!jR4nP>jI6UT=G?mWfszhu`ReX;1l*DuYiu-d<);TE*JI!>ldKHcdZc zqm`^zh+KZS(j_yzeCI%~-W5K;eN$8HVBX$hzS*wSXr-^EYD*|@ZQoj?N>;m7c5o7{ zBJ<&X)Zl+Ns85q$E14mNQ(IjmBjiFxy&gDCRCIHw&3x`UOfCdOvJ!HBCFI9Sd zO0@mZyvykt!>-LeEcs$$2tR{MY+84O`-%&#BA}Sjr;b(z%hiFC0c9~D!nFILL}SRi5{w%9vZU0OuW!7GwTsKrcNe*Y_rmCey%vK zP;R;HXOsfQ>W&xii zUTi%wN&1@Ic@cHO+ykC4Q>~CW@NWs+wRzhvovK2l>LWML-xEr;_iS~dKTC<97^J)j zrMVQia^g{R+r)&P%xe*jPNt-C4)OGjDnpK!Sv)Nut5j`Fg?!q8L#V>r_@Og(8`FG8!rWcN)E5zj*%0FzivJ_otD7<-4t%z@T?dCJyWiB!*Y3NdEEfi#*v zn{@hx7qS9=Q%SZGrd)z|@y0c?C-PS5Qlfg_KkclhpPIfvkY(UT#ftIAciB_8$S^+YeTjKycJ^EG0D=?zx7eGKMW)z z^-{C@N4R7xrpqAzCfr|b`3<+m>^}i*$wA{Y<=ykG!3=I|OkYuxft{6y<(pF=@35Zu zilT$R?JO22ePL`YNXOU<0ccIgJvadxJimG;JVby=QHDtImmw0@8^c<}T0I4Uk0fuJ zNz8>%RZxaeX?a+C2$FS$)2I+TDyXZ7H#mDXSqqKKLOpnT2hc{l&w1_?YzRmT^n@Fn zZ!>Aoxj!xQ%Js$a^sEHjNMXYC&9wiRiJPy_`W91n5QY2POH?RPGZ7_r`O@Sz;x|vn zwKV;{kYvI`uy`U&10e>)Vpo#oxfl_NK}PfV0_@-h#;F9{f{>%e2oA+M8lSyC!?&aJg^fR z8*Ag>&<#LGwV?g^=Ml`=O0aA_A7FJBAiJHa_D?T>gv~LFo{|m1f+11&Ma$kF{Ky)q8jHQu^z)ron8Y8ti&Rkjmxx&H5IQ2k4HXIMW z3$4qD2bMtNTU2Ba}bpdStB1EyS=<83}yQ#xlrglZkA33d_wyp<`_WO;^1`eJQWQAN>>=2!uQ|+Jbp6&xj!~1JsGfZw-Zxpe z+RhA7Q^nRjHEW4GJztV6E>PgOVwhz)%7`wL)~>!8`v4FLGBG>-wd^RyFh+*zt2IiYHNd?=@9n#P`T|}%=9>KR&1M+Qj)*U%!_7 zez`CdCDXU_F~K|vPjF9!db5&h~%Mu^dcyhg=F?d7ab%*mvXFg(Yn{BviA{HMU4+PMSEsUh&zZVkIc zkqb3Cb@l5Z^Z=6LK^lQc@d1(I`M3j}o4it|!mnYvE|$+I30{y%%55W|>oCx|{fehT zEnr!X$TdYZI+tM6lp*`BgAM(N54XYm=Oml;@;n>8?(9~ z2L)1gIKyblD4ce&Ny@GkQ5q(4-12ScHrAfQ>I5SXa5ec(^)==*`N7BqQ58h?@I-&g zSY+*3VTCIetlDiY%@Q;%au$T&i>4&nzfYjOik8Gr>1svpd06bZM4&Q4k<^a4%!-lw ziBz0#l1MY-b=J3$Bn5K|HIr!RoVi=!?5lmJZ z1Pgu^em2C^k>j&duz3ypZ1Fo;_KgoVi6j4y2@H-eRpP()Q8gWG#C0ljj2SCyM|5-w z-dtJDveP*dVscYT0%NDr2m_idyB^*}z2t!h&9S59sA?R=@bui^O$up(TSab8 zrGzYS#~Fh!nqF;qyu+L8{N1WFM%oCAc#s|3Th3*nRh}_ z(^1uya!~2NZWl;1i7y|~>(&)wR>D2Bq8P2!gca`y4&kxe|YXg*gfq@pjy-JPB)*m^UK z1Y3gVp{tWF!CMSJcyqs=|DbPgs$USDbD+oatZcy4yCWpX+NNBGLxNo zH>R-d8PDla|3T1$B(otyQ3x|GioKK~WM#v2%D!HyPgO`;WrVE5e|x!HxdP2h(dUon zlBzxNNO|U&4F5&%zUb`mya#bcyUg{cr3t(hotq#9t2qm^G-dD7xL?)S8Bgkpm#%1E zg_nlBXE_XSzEu7+vZ*)veAie< z$#b--&z3ITPOf&u_?nxW(V{%hZNEa&+}M;Ut9=q>9P#MC?LXExS$ogSRU>Pgu;E{w zW@~=%yVBwqXZZr|>gSH>wnm;rxn&yRg5J#*6`Jvp*|8KsY3!7GVV?tIh~6M_i-Xeh zbs`k+~lVXmvJ`6%|%%wC-YP^uW;WW;ye$I#%C6fj}p@x?`rn( zB`-zSGQ1tl=ecW4?5wZgP9(yTGFMDv?iTc})}OyS)7SRlGv~p1^3e7Z8)?e)*7hsQ zbypOr+|eYhSShg_m^~x3)BDK1*X#++S8F*Q9Yifn_9@@XJjKoy$%~lCpY3Cnh_?1z z{m+d%*+FFu23GR_sRu-X9ld!E!-10IpDg&6LAgO7!~9EDdAe3z4}VLh7?Fj9$;%2O zdODI{*4A%Jj^;jDD}*KO-FSTcmeV)oVU?L}gZ_-KzV=YLrpviLac?7bNH5O7&N@zK zL3bf&6LIRYM1F)6bNbN1JT{vrYGd=V@<|JAVu=6iz0}o^%TKPhRx9iG7G1BWl)8dY zvgaq_(>bRvit^5)!EBnvD=Vv*Uny@*hl}ND?v{q$6=d>KmRS^WHJ>%c);p?m$LVlC z-YaOge$CRGMwiovD7BW0_+#FWG;sFXJ61Zr)z}d6v|66&i*c3FZXW5dn_(bPXtul> z3TVx)C%3b5tOj;<*xgK?!4oxeQY?R!{nqsA?QDi_rByg3f1Sr$tcwR9U7gpKMTul& zcqT*RDc)Z`%n@89N-wuvy5Hw+ONVfLvPxyd!$A-k9y-$}b^W8O#PbJJDJ#Z&spo?O zm$dnM=Gtic+XuY|ZTIkQFdsLQ$E!M#IJ&+4!_cIxa4XtAkNU;^?!5~xYhQ~#S>^EDkVAie^jvD?QN2QG?pxETh{ehseT${z zw9Nxr4b>%O*;2M?uE9LMY4>Kaq!Q;TuCAeyo#E*cA2-L{_IH< zEH!;u@qCMjf2MQ3sx)A!RVTj*$un{4{>_4W?RF{O^!4Z1z1RC?nS#@wGo62CPBk>? z-B^lUVEy4Qn(dtD78&W;_&+23w-U~fZ=27v<{1?A66pyyhtuOrY~}~t*ukk~bc9x& z5owAT1H=3)!mbXu`;wCGK-v975|wef-yhxn9+w6#ncbX|d zy)47Aj6zOQ{Ow0xd9T{7(#p{DJU1c?1+- zUfZeQwf!If!1zSISKe)y`pRzlr8V%(j-~;`RjuyMVFHo%EL0Y(0YRAivxh2mSi`+e zlT6nNW#Qbl0wxI=WrEM89y2g{)_3b9QI6&nG(}k?iE|HiTWDY)zP(v%{XF!6l5iJ7 zSSkfayKe|cOGaOwIN{q<@MMtv?< z`<|(B_3tLkMpMDd+Rq#C$lMwu>EBkO!_gqm?1;4OzaD=uXd>1cEZUL!C!-o~Pj%9v z@yBOYu4%Oi6$)5Y2&~b>QvM@Y6mm6nc>x1iq`_&K_0}ngxk!vz@SD&>J6Hoqdy)|9 z18(de6jNf8vNy!R_VF0Xt#H%oWd$0)iq@%)-3r=-Tcw@akU2e~ZV*;U1?v0pU)o_R zh$m8n|I*6~K*exF!&Uv$eg-%j8am8ON{b7h&%Jq0l!W2%dg&z%u^;$5^Ve38|1E(0 z6YtX?^1V>D^ZLOeVg?IYEtW?j4vbNgLrj=NCiE!Y%771iHF_YvbfM=lI)fp&jQzap z{WKD>9Xf3;r=Z@~yND4A0NQ7^QiU*Jwr!u7y0EYg%1y8n9MT zqv;HOgx3XT`HWoUf}dpP4m++th5Dyb_}b%1LN=2cV0zz>CWH0eLTIWiHV^N5Vf0J=p2*0B6cxp*l z0#@4xNYZcabi!sfONgP_bpUNB4TU(JE8adDOrMAPzv(mdUM6JEr6^>fhYzwtXp}1x zwqSnJw5dVnWu^Cq@hh6bJ3A0eL`6$2d+qtd!axs1^7v_Fu+pzFf9de!U;znqlkfL#bZ z7OZn_%(a>ZQ(`%sd=VMUJbnnjY5W1Xko1zvN2|%7Rw@fhZM(r6f#la+FQOCh}F4H@Ce@?KKu zapcT4n^h4qb1A4O%*J(^?(iLkUr1MGN1%RQh+tAI4-p`B&W-BcI(C-wpG@#p>S|`g zCp&M_6@uGU6%-|QQq|eac18}mDcPNP88XM9`v!#_A%FS1b;gYxMY`L2RnPH%t65Ng z2Ovum47N!wba15IY`x)XEP+n1MfO3_p(flB_BVXvP8nXrG6e~;T8fZ zz|M5G4CnC0Oj#7@!L1M-#Wa*yO{t=3ATzALM7#` z+Nrr8n{c&gd|AZG*PRwjdQYNLR;caTp4o?zKu<{r$wZPP{nCxCmtz`uBr{lM@9n1Z z>Mzp`z|Z_!?gCYp@65cP`cFUdMfUr3^i?-?`QO6vPv~AN5M4K~&D)1EcnxKVQs#`j z4OKA;k9}yxTQE1}u|m!W_45s9j#N8jyja5y)(a5Lr|l|RXkWmXEyL%qc8B|;Pr9gq zHE&WGD&Yz@qEIHrX+1C{K96nFwT4CKNIxjWpUkSM#*C+Y`nbkCU6XgTczsVB^^A%O zeKvt#7)jJN4_mKi*1N+37l365l?M#3x>QBP{{Ln7(Qzs#Gr;|_whSN1cHI247aig8 z0nSL2pQJGoJIMz>^hb>tgXH2`reRdFFDAm7N!JAv(eD!aWZ7|HIy1^2Z8?a^PNOXt z?ah8DJRkVGaB$7Uroy&AVW{mCJvEnnzkb8->lad$+Z?$`fln<4E0vZg6cH2s6UX&2 zrr2ReJ8_Y;D?Tt_w+J<9TX!AR^K@ewkImM<^nFLg|1B?av+dF|dAzC`DpAJZ z6J2iMu6r$4NSo_K8NF(GnAh8vEh7!Z9$y&Bad_ZIT&;9pGOEwh>f6~WIU1g&&U((IxSx|%1FLZ$#6zq+Nm4af0iuF z{!GjumfC8WSWpJ$HhA}HYDadkwte-WcfBQp$AR?!e;sPP)l#`E@h?F_PZd@#?Mx_I zf>iv!6KuC0_fNr@hyHjtSUpsJjA12E_v(wS(qS!(!an2<~I7v=TXl2J^I)YBbg+}GZC~qp5{7m{+w@`X+QCEW%erEaJY$z2k(A)rDze))_pZ`4W z|NM|%B9q7ah^$WP2*HRLts4$);STvW+Aqp;XcJVU$v+?;j?_2i`6y9M9+#ZyJ?M-* zU_VyZi+%EL9Sa`O@f+ocAVxR~tMfEz=7xBo^e>jj+nf;6@Q@}=X<R@P9Emh7Y-vbC=RImv&q z05VI-FR;_1qGmr}a6DH)AKtOGCH}#$nh(!BPc_2MUHB$x7)EUWLAFrhm!0yPrmt}f zJXl$t2~=R%@d|(lD>80lPCmykj4{4A&lJiC5b%8S+-)ejWl(7M10!7y&xU9`TIMr4 zc}dW>!Xy(21X>~+P;?y&3(M)`YgIEay#`Dj;XegLRMC%(`2S}cPHcGjJc-E+uk-q3 zBc0Q3AP|_+tNZQ*%~m$e7Y3LIoXo9zjUz}8=J+-D7_&d#peGB4Zb{GepM0$nTXeyD z`w+3n0MK&Vl^BTw`1shxM};gOUBsmXk?1h?lDP`+@Y#Qu-`2n9Sfwlxg|&G}u;<<} zyn;Sh*FowKQ58~ldRo=`BvDSJw>mYDsc=Ro$WM@^}@4ts!*WNf9w5IGFdnL!)$8&uYcAgR&aA4=YAK zguCO{ToEG~vcnFE@iBU5=9Wh|CUk%B9Y<(H51eQ}2V3U*pE+BP5V(;ErsE@}9+wpx zK0UKY`k;G5n^|r-n(7&Z9cE$((pdySq!dOxf8|E<#Pmj*zG+@I&&s4fUbj2O>2;}N zOgjoI3m=b^r|_O{PXk%wW>2@sg`5)@xkmwop2q;bY*9%Gd=XQp1K&obb)JN)E4RMB zehrkm3SfP=*Ns18K?`65KySJHFN-PHfVhHVRTtxbmfeTJ*CC&b4I5OF_9=mK9QhLp z3IZNVguhq9_Kfon6v7VEdzBP>J2Qi~Hw9KfWOHj!d=Rdm;>2rJ8M+ z5tlA$+w`8p9e|3puDLO=J1HsC;21R~9M=E`o1CCdmm(aI!}z}}{v3sP+PaulnO)+? z@jL=7@VkRZm>tEz*!C8wOEzAD^ShMJg?3UeTEdszuQP6JI)%y`+Y_BheH! z$t=7Hi}4pc6Lq%qbfu=7VVCR}!swwEdsEC!o%16X*7 z5Owoxf}V-6-9;l|#P8KuL?E59a<7KmB*nDXvS=PUQ*Xtg(ND>n*j)N)Z0i(WtGm-= z5;}LZXksk2uuLAkm7Fkpx!;go@cN+UjtJ?($$tK-^F>3U|Lbot&Jg8=&s;OAvk~Dt z**M6qqYk!#?q=cHVp~m{hy7Gu;+;J92y}jgDxx!)v3qUIJOxgw>sgnr7D4s26J5ID z)~axZeh|tp-`ym-Db?4o@4u3p>Z;tU$nMSup5T*c9@UDISKAS{rSlg%Op`s=(?K}k zb}yS#N0?X{4$?OXsq*o&&6+U@wBYc%YCdK(SyS}K(!Po_1+AQn zm+#r0M*iN32?RX-scC!!u-a45+d)SoWa|cs(xCwMt!nxYLjIqpJyUZQe*b2gs}>tQ zvelE}c+cvwi>)Ag?sx}xAzhp6Jx7=K%)H*#Vz+b`GjRawc)>6*c)OnA?Z*f-_)vV9-xr=E;Yf$ zckiaM9i1KX+>lreQOC|I_EXZEmVK)$`^lKs&PtCq4Htk;ls8RBo*u5{&2=&s(3jvs zPMpnU@=D?p{nnr8?-TK6i^tisoQDc63~2S0b>%PLotWHwy*Bb@U~0b&ORaq2IvXQ@ zrKHq?8TyJ_M2zS_%-&p|ZO^Nocj9Vcqy>v8GmCWd4{S`fz11-BvEKB`ug^P-PqC{C z0H~rLel`9STVv_j6L-QLzZpj-f4H#nbiMj_I)44?=xso@d{W9m7cKBBeRS7A38UoC z}SCy<%Qg0s^=wJVy8Pg>Qm-*M^w3gQEf%@iV`BCtR*M~vs25Gi(9$YR*~-eW)JhnsC!Iv^s2}}H{iprR zcVTHLzTx(t)rPxW&|H6{H|R_^ZT+=Ac?!vHI{9-Z<~r4AMDkvghF3?>9q+B3cVq(E zxx@$I(JqA?W|v%MmnG)$4g^guLU{Qo^juR$WkCt+NG1O{3k3(8KFTDJqG&SgQN z<4B_2O2QtVUP8Tn|IrP(pVchxhh#zt^S8be?k}Iu(jVfNyVK*7hPL|Ma^pO6B;|=3 zd1u+Wt6o+j%?b+Ar!q}?d{)KmZn7PXjza+d&yT6)FI z{{Di=-}g%d-W88!uZOfWdQKT(X^Fk&bHP$PmqI$VGW^m{MsKK$WOD3r8uUX(?Zyok zw28x*{mDrLoCvqC5DQ-@y>_Zs&$#i37d#31l+*b`c**_si*NODoKZCIx>$3FtLpbP zS~;fYr9YTh{EgFnLlouJ{ml4+Neu9cyVC)Jr?NjDDhM<=Jsl0Cw6)2^{0#w%BQoG| zCIBDIt4T>sje;UOiB}$g5K3k&B~UC)!AWKSZ(m0&k{B9)t#}@wJgf=sh5dCwHY=lM zXN@S7L>gYqau=>Rr58)VeZj+mPE{n$6<#PFT&jsA^%2GebD|-X{caVjqR@yz zN~Hh(?C&=+OP@CvOg8Vm#sb76Ms2ZLe&1rF!f6zuA1T10v&xQq;lh&cI=yLH6QmRu zV3ByOk16$$;@s0!X4A&*KwDxLj{P1MwS?xyfOcP0bKv^J`oY;7XLaI%^pVqARHRkG zy(m8`EfSmb^sXA&Y?2kv6l`A+3Qu-;Y>McaSQV@;7BB6*_Y*hG>evED64fK|?Ysy~ zYEs5YC-w!wqk34v)_;(@ZV8 zKbri3H*|v9znmDjlhzyKc`hih0;pWLB;(-W;Eegc2FSVdheAM&0ZN<02Et%f;h~%u z<`Gx-nbIMV;t*x2RN7_WB?v@D@xvy+Ya!MH)_Ygk1o3mY6G=L+nqab8DYWE}whzHY$y zG!X@ccf@-ELCe2FPdfom)&mVv-~`au9e?5+B+@B3=>)RPIeql!m$_ofFi`0^1H!i@ zKlqG_B!j+P|E>Vn zOW#`#Aeb7KGGj&K1r%hG&;J1VeNP}>_{s14zo(Yw;m+VG+~eO2sbJ(d=b4;9Q5A?k z8)B?nxcktX##9VNuH6FEOV;^36rT$)Y^o0pfFJzQ3NsZ9-4eAN*ZKD{XtKV81KAc| z9)@hKA*nSqkv;rosqI+Rgs|}z@3(OYpVlBecnka)wWx90VW%)CI&*h(TLsV=+7X}) zUJFDqh!>vX1OAv-0*yN*rT?z(W{IKH{`4(4N0F_XmKH+eg2?$FsQwGkQMTp@4|r${ z=mK=Y$HW~V>DBp)(k~Rqa}L{(fzR{!XliPfT#6n6rh;oR0`%roj=3gpCtC30z*!_XI5;pfLhKPJi<8d+4o6I{B=iHXp_+CZ;C@3@ zIo=w!`4R&WicX+s@osON-uKAfq-*7IX~hf(7cwz32R$EzYMB6$<-C)csK`i$P^T(E5t|(F3(WoM9bcqZH67tz<7f(1BCQpGboa z%{T*`oKHW%{F31Ld41rB-fRt|a^tW7dsE)XfqEJqYfs_4l%2a>OD+dMeqtV30n(KK zNFyu*wKblr|1>%9@$qi~*(Z(DEU6!;)SUs6>l)NBp{&b`{J*~5u=L>OunV4&&^Kuh+Mg`ZO+DUcHG0naZN z{Q)gF65IcdpX5-=<>QQMNs-jg4Nsr3eh=fSAW+D zf3^c?5GM~0&x->_8k!cp{~d)xh+17!Gv$*UZrgQz^+#dVW0Zfs-V9WEpb3yu!2S4W zyYw3*N3}qI5y*%5>o-bC^N@G$EZO+iA!0e$g^8_njDB1F*AN(ERI*|yNLVRlRV7FA z{#i#Iav?WlzHG;yhEGhWfQKpyz1x5#b`#_Hen94N*S8Jt$)+U?_uCX-Mw+}}waQ%q z`S1y1fdy*`XM2Ml+TSs4Pf0yRhB7)i78H%3(6BI>(P#J)Y*UhKLn3^Tb}g(dlM@-w zHzyIhZGdD>n5NzNz z9STr9G#PMZP=>BO8+3+*6^~gGRD&V=6#n9C^k-!KRtk-Fr1!5_=a;W&b5g_;jW4>~ zKO^*XE^0I4AE>p-hIFusx>2|kT|KHfNCXj-E_vu`zmOTDA;zWaV;wZRb;AytaCD|{ zh&Y+=?n;k#XR79C|F#UPSdY1XrjPoV>nuDGqc%@BW+Bh92M)EcS<_ORTm3EZ`V%`H6P-3YUAld@{8S}`iUOA{qEt@Nm3(nofx+QaQ@nL# zrOOMU>hNrbo0-tgV7VG)pAip+ALbId#Fx#;w+q>!$D8awVCF4+ibPwoM#LtI5l4o> zi8AFF#d>RvMrIH@`Wa^HGgjUVY3-6GqMlBO-`n_!K}#DBf9qDn`(ey)xx3*rGZ9a& zkF;1P{&2W{vUEh(KCjbm0J__+2qEr^x6L{NtyIWf<0~H0=U+SAOR@ZRd~J-XDSiqM zd;MqiQ0W@s{8;(qF}yCYo#707KzSg5SeG5S3x zE2V~$^P;e9Kk|uJCqq&Rw(RR}I@PK<3!dA$vC8wAK3L(Qvs&0po*^W`yGIe+UujQL z9!viHCHn1fR0{9J2v>9^3h^~D`u8Pd%UKmqxuBx)cDFvblSJ=~3JkDJ65o}wJ)eEz zW2yL1Up|#NO| z33JjxCzfafCkD~yFTR{&D393{i+&Sr#>yqUg^P@I`n_9QWi2({eWIFsT@AFm#e%?= zh@;%8>VJ;+2gsm}yeEP{zAs@mF65qYl!ms9M`xvYDLuP2sck>smyU2rt*OBdw4omtgCRx?agy+W8j;3FxM72OyhUB_EIY;=QcEVV z7rJ&!UUm9Lh;s+Z4O4; z+{X~hWW*{A%d)$2>*!t)`XYmV0C0?YdE8{adFLRP6?1IM^@))a`V<a7t-immSn57eF<`mG2Brq%^}VVg7@e zkY+IEQHOFKMUo=67`cpcBhNq+El*K&0KiKEVAjO)8!tf2JcAbKws^03sKG@x7Zn%7 z0cAAxwk|m^nK%f{y4ZOcQ~uf^w3&;!m19$CgMoFPedk3{49`LKXv^z#xgXL}yNl*h z4^!$0AFep6a^|O>?TNxEeek*w9md#T;IK6|9S?QFLG>Nc>1cWhnXqS@tTt`2hhX&ZXCr_JM-)AAq-frKFntk{LEy@884AjuG*E|M=VlRKiBot{qnBo_!sJ*-=I z;L^`NvimWsj{Rd9Lk@>iXCTJ5)b8Q6O(K}4{ZjKnzJ>M7j%zf2*FLuF7J zPo|m?TK$~cqimyOBV;FKvL%|q*MI7vPkq56EsdvUVDJI36rDEjfb3@w2tC$-0AKEy z090Iz5J+$R6=mRq1|Q9`Y>G|8-*9_pY^%MFc9}w|W)B>#myibSz4|RCld8G*5VO-7+(tXxMCgKa~u+KqouXt|QF~$LF z-Fj+-{zeUkz{Xep z{$-lp2(J@4=Q!l#4J4XQs)9YD%5y!n$nc_T=0NIiJu-InN*%tw4Z}B(yI}n|%|kQg zXo1Mk3#IIB95hX%-Ov;FXbBn)hr^y;-LL)>ibN(bHLC^A%ndKbG90<+?)M5EdKflS zZ4|)#VTOlBMjrQCz{pAd{HZE^PL7E)EGS#74k7XqzM6c^P0S^CaOodWz)0e1kP~^f$hQHiIKwBR6qsLk+jt~8;Eq)z~ zm)Mlxqw-?C-U}*X8Aa!uV1C0+!vx)*nsanLK8pG~WRmG*pA={-85yqAA6D%dsACU5 z(J579s4ygKK}4XRc;#3#hyV5wXc@n`ppb-8@ zc1UQ%J{R^bQ%IZtK)<^HThezQKh93@9j06z2PNhAGYOOIn(7JE`VyRb{p^~PIy8It zA5N(ColO-oZV&e|f17W+R@m>^5yA3yEEAZKR=H~J^UAPrB0nT9&KJ<^tiLO#qKnnu z)!qv=WI_?gb+K%}ibfsGxl;zE`RQ?Ws# z4+8(uA__Ch)VF!>{k3{Sq0!lC8cn%l)*P;0J0s5}D#+G>itLd*dBUfZovcW2wI|T# zvt}>p?!yH+1_l}riWCey>SgEJ;Cl{fo*Af|=N8fkkc;#>1KN`L+zpR~h16$QK}i1Jd0!_C6|x-WzcHUgB|5}ImG|zdin4k5Y-yyWFOO!>+|Sz-^vy&PTM^uP zk{S40!oJX5dD^_Ue2Y!)xSh-(G4_~ZT&9(jFe4axVED$TEBi zkWgB>J0+ABP!N#r2I=k&&usku;{5N<)j8+A;3K&AyfbUftXZ>Wt>-Zn;bq9vcG|bH zzxHkYja9!E`#}~Zr?o{1j-q-G)gvX?RYNt%H(Z7D3hU#`Tju2{n|EBNG&Ix`b?=tW zgqDkxW2S|RJLnK%xnB&~MeW7uvTVO79!4ekf?OV-ouU4@%Cn1vci4T1mXp42$kq;P z9^Z85J={(3j#cglsfm2NMp6SEVSEZlT+5I%hfD&J`&-Gtj+>F971rszo->$X*PqPt zxpCx2CuUjmX*efSVYR>L^*>?hfZKJ15O;r@wtRDo<=gRZKRt1gyk7R9-ARuq(sLuf zwqGB7y&5ULIgYW7EVX^*M?u>hhIRJ*wM+^MkVz|sSj`NzuHp~VhNn0S6mG_}in~dT zIffpETdM7ONW-*2dluO$q9W{%Uq4$MRu)sPEqj0WPPx)r=IS>kInm(I&8w5jCa-21$j8GWopm$S+7{yM|#_9UrL>9m2gBRL)}c7iX&I!V!zhc{$L;?3`uHPc*9 zXfG9~LzpvghF;7kRph+9K(jTOC2C<6w!p6Mw&|!JrE3fD(huu}A{qd^zz z!)eEsQX9jguqd(e-Zakev=aPA*vI{i)Wew;*dLt-rZz=7H+n+rWemT3HXRA3osJSx zY4f>!|BKGTS2%7*l+B^q==26r;&9XlO&1rl{rw{o)+7vsAd_#4EC_);Ar#~u=C@=L z?c$+R_^q-GyM?^c_?Qa609%;gde|T+GcNFL0)Uo8H3sMGz?mX{zOFg43hFd}d7Dtq z=GND9FKW2Nu~R8Xl(Bh@7v+6tPu=Wgl^^&;qd=ZxZMsc*I6~hYJfm*GZiPi+hrz=7 zc;g33h+utusNLCm1zXh4BNjrFsGs!dMZ$6BL0Y=OY{eh7{1|-)6WTjv#CeOy#A@ak zbw{}5(PO@|>1*u~Zf}or8`I0jbC3{iY#O>Cx8w~BQJ5=#{T5c@>kBHd|c3sW9r_iCE>=96bt zf_lf~_nss&9myfqE?kHP9r}XY?HpZELd)8IaWZj~K~k{;aj@w_m9Zg5-!?PAO$~bT z>H-bD!i+POQ-M&%hgf#%Fq4~M7LwAq&~!Z&mTSq(3_qz|0%^(NSSx}`;=7J&G1*Mc zaE}n*Y2Hi)py_m(@Kvif6lwA!tM($CN^~@-!(Kw?{+L!(c{_c-du!F@i;T0 z@ten@_pB0mnu#-fJ`7_Bve-){R6Kryhi6<|fg)FTk!3jy%c!r9*2j^4h#uvqMzH^y z@slYx&o@$Zx>L_GU+M%!xZK`2J=_psNM4U#wByN{39Dc99B0h;Qi`O7f zre^sTSQ(%FMvj!IUL*TfhNr6(w_n!R2J5njtUQdrn@LF`-Ue`LRcSNQRki>$eBg7h z*4mx`0t>php-10%+O8Bhd3cm&xj~TUUBL_}@Om2iTo|4`}#Uo#M{_?fGw#mjJ!Pq@`lIUY+>v*F4(%38X{O#RA=uLGW2MQ`VH zgcP&Fy#bUee{%ui0>cD`s}`}Xle8@)`i~iB8S8V5opVCy9BR?}H@flEtO1+ihu)!~ zVT7H}oHYhX1jZzu2BJ%kCXluuNU`>2;8baGU^j0U@bcV6CDmSkC4u#YcrM3C)Cx z$TnciWLSkN!8}XotTmLBqzAawOheyy*VtGt*0JY2+fuI!S)AuMXjir*IKR+2kU2lcfrlXJ8mvD_X>Jea z_GQt%m{E2g3;WntkSFdNgLtlSw2^PYdx4fC*+#n0npIqtdn7_C&%kadTSL74Lnsaj zl}3E1%sFevRsiJ(mP3Eo`RlT(mXY`8{^f6Pd}*57WUoiw5_Pqd(+bQYZJ-eoDbeH; zCr%By_QIG7Quccx5`{4i*;+}_mW0}sV)uJ94kb}8K+ob}2wFc;tk)0T zkms;1c&wn_PWs>BGaJa7d6EG%+h)KBG6k5C;_XU{i;(~ThqUM3d!t+O#-^r17Xjc4 zNsKaKJdQM?9b9)EfrH5YvV1WS_N`I!@;8rc=t4!1`4_y5pwM5a^&Dm{ffA}r0h~|t zFcRFsA(aq98DCB~Ka?h6D`u^P-z(trxYU)^exi^Ot$87Gz$3LvS1V)eJ~m^)=I#C! z!etHwhfFudL)m}mgRXR}i7OubGjkcVtjC{Gp80j!d9aQ$N(Z}{~$H6Zbf-4TX zq#-zv*ag^~&+<2fM%_RB;9^g3Kh>9yh&5@$GJi)#WIm;cRO#m3eY-P{0YQ2~0pp=) zAaU zCi6>)QsMjcqC!J+6q>CRbI%kX)2e3cZ7k?~~0z zgTM)IibK52WUhX_)A8t`NP&$&++ThYBKw}*wjjnLQavYZ?;Y{WVW+X?r)|oTFh!CZ zZn!A)0gW9n7vWx;BR*HF1kVJUm@Ih-VJRPNqm6g6`XtF@qpc^+VDPGihSnf=yg=h! z_?%PD&4-7Sf@{IMI1a(pu)Gx^G-S#fZX!Yze+xIyj4y~da(hVx8!<6GoP}UB=!r4l zcJcEABI<0)GE2GC;&W&6_m!&RT00_>zu{TStV9&~jAcUW)nO~>zJ0*ok2BWhS-&ZK zj@i!zu$Q4>{M6$a!0>noYFkY}&JismOfe`tOb`inRom`8TDmxZQ6Gn5q^wLad#IQlH?`E~}tkyyw(T&V2Rx zID^El^FtP0kIxAWL^@w`Duca12P^Q#_CWfPhstsKpHGY&-;`l5e_zAG`DjV$JiMl<%|KLrmj^5H$kMwGI~w^U*)8Kxuivt%K)e&rHzgr> z=>_fqi&Nc`sHT?bPKIG>qG1gzR=8(sddadxZTkUvW9k$cbUsf{ zLrr(Kyj##_7kgU`_C8CXXXoVAg)9Jg#*F6p+L^osuB|nux7x1)8gwOh`i|V>exNV% zL2#=JTffX#OFV@XOF!Lu8T(Nkt&@l=g{52Qpw|;!Fli^7DV)Vf6V2C{0`@s%(regq zq@$%3E&8<$E0Y|*B^C9QoMgH8&nE|;v`NF1xN-+F?|x~2l@M@>`iMM2vLm=;bj>O3 zyY%)#_x6tt$8`@UE9slJ^I9QYC&(CQ*`DqcjGZllIWU~UTLG0*$dgB@GRY8SLCb@8 zMyu*?aH8x+)vS!m;)fk3VzdziA!7wwOu5|O9BW|~xKKAqVI3N9U2m8U_ha0rpSX6k zPNEh!!dKjF9cZdlvbUo^5|A4WkFs9$@#^#zyL|;V?l(D3euI~E-=2ew%}b3?L+|3% zye7Ji!*h>p8_xApcsU798z?lq?=`1pxo*PoHJCIJi?{1MQ_Y?njCg&)aWqgmIY&SN z(0sjJdI=I61T3z=oKn$Esg7X-lWMq(s_&}R-`xj5lMlE*<`7$$3FU5s(HQJL(2WTl zy7~%_s*6ridVDtN2zkp;Tv;S%_N(>nbFo7sf>s^PjzBi|59`uL9XrH!ISJ2vpNE|l z)egO(T2j6BO}aZ|NcIs>87Qw|XVg=0IIX3?f$y;YlC$@jus(K`{dp~^>!SpPtuToQ z1dOi)@AY(b!kA<3s1G(XwOiyqqm(08cimYE-{Ql>=P?wE$h_fGaz_hghR2A6Rkl)g z{z}G_fQ@W!CXkWQDnZfGNPF<2g*^^L`O(k%-cBhy4L=Kf4qt7GA!cMhvSbw-FFv9e zxG%&+dD>Mee0NAihF*t+>W$(cOsJ$N*?H*BnYGSDQ@dkpIc0$8TrlkZI}-`=fv0Jx z&3`+TGnFoFG$=+=Q3dAt`hJ481< zG?YB=KqefMAHcBu4Swy8@jIpP0oc_m6%07Y%YgNO4&bu_PADO2V)rq*Z}XrUVcjm8jb9aXYpBnatTn2(+*faH@ey>s&qPJp$@pp^tX$*Onqr5N;P^; z7J9qc^uZ_dOR$r#PDWr4Igx||>(keqkw1qh4;0YhF^N9OX~N_*lu4mB@D^9|5=nNc z)DA0KO5VHO#k&U+e?JXA7LvIp==(uvE9N%B1tMiZT)kV%t5qr$Po#2ex@15p$>9U^~FLTezX79g`M48Ti=3sS- zbJl=t%6jFa6|cj_sV*7vL@kzj`y)0>-RtOMD}o?C%I|rBAu>Ep=;*jf@~HFC+^1Li zMMjkhEn5N$CwXty9!*Vhl=vP>k|%@w5htP#7Kz3q!RycA+pWV{_+(NxgUzvAno@?V z`2DiKu6Lau?1{fJ;Lvq@Q`6=OyNas#b&i>rhg#`4@7bZBz`3m_#5|@+ig|3suu6m7 zCJeg=bL|dcZ1-GIu!m#eYm{}#D}sft5H}kmid>sfA(srLfnIB4{Ym^Y6}#WbPNoUP)?Iw6w00wfgv_K!p^LAPvnB2k4o zO*AdKV^W`2sK4?mg~xBzBpcHmkm^c+27GfKP;o!F+IqIQ37g0BgH3+akHG z@+^JJ?(=eRZln4+uJ|=3dGtKxBQlnA(WQ5@8i!X;0)$)1am;`g%GCaT3q(F1;Pign*w6%}nyo_G!&zUcc2cLoVyDZ=KF$vpbT zfjD~uawt5d-^R`{srA~Dm*B*romKK;8Hp+9mW?>Xtq59V2QPWnp>Z{m$J^S7iPYy< z#Tc77CTS0QeTz@tl*tdtb~2I4aO@TsOI{XyC5v)~i`seN_2`WYdvEJxz&Sd#8?Jo+ zD|B+f_-a~Am4WlU*)S+*GGN^X5Z7yYlQk||s=M<|_<%{Z6C4o=SjC{1AGd%?=lo;h z^sw6$k+pR6lV&^d`B{#snM+ZQG*X$1U^y_|x%)@>o<=IT!ORE>DmV=pxs0zP>m+x$90Hi%qd#M31ky>)u-n=p>zX=JPm ztseWWM09@*2jgxKPtr9(1ZAit1Ecs=Y@WFae6Hk9pjQH}qPy_5(paZ{p9l}4{^M9rq95#}&Qn`~x zhc53-A@<2K^^)0>ecH9sukk6921zzxRa99|G6T1!O;k$@ABxAqXwZlQjab*T9snaJ zs-b}kJ@i3$Jdf+GLi=pCIuM!I)I0*%&OD3H&1wPEiXbqNAV9$auK$+2Br~N|B|0Au zsz0juEwvJ-NXh?HdT8G=)Yr3~XDtpcy_M0i#%d~PJ;`U~%bzs+(3Qx@&&z2+vWVg@ zRfR)85bxKlluL-Ratd~Y!*yPl5GpdtunN5){G_DGHy<%E>Q_s8B%*5{L}fkrjPN=k z+)~`0>l>SwWxflz&_Ak=-OP82i?4~Q+TRbkmnK6%L}c?A2%31L$ZNC}C``~UQu!o0 zs`>43+e?+Y<3fi6@&QGuM7QZ6O=@RZSv1pKgYx_ zd>9i@2+SV&;IaoGoSkl;_ladoc!{Z5$)^h~l|AC}7PMNR60LB{+L6cKWx%q3oOVn( z^Xy4q7V#B_?%NHKNBqt|gM*{_hTIfhFkscmrwj?k^C#xzJahfkrJru!)oL0vghIn2 z1}p^N!$`|@U?C!77QafgfOApw7<6fGP|4h+V@G;xifY-I^_Kb`zPNc2vZLgDIm{}W z((Cor=WbKTGQ==0O%N&j!u$zJ!TKB)4V`NPWE;gD9RqV7C3pB8lspIu*9&MGh8GuO z0O1%SOY0>$lmq(~xF_F1fdDHfXE1atgksjes@6V)A|NkjLvsui-h*sK{JOe2py%>w zqRBjow+z2;-x$7ZL7TVCR!Zf(1It&&7PiHlQV+@ zaU`+uj!!0}gu2p|5^vl$Hm*4aP;gY2tnFXgPuwXF z`BwXi~^9o(6yI&U!a<*%d(>g=q6YUG6j2WV_YBB}m6pIc8A?FJ zJ`nVfnnu>&wfY_8nh7ziq*N6JzRQ91n(b>(esd{8Ju9WYMEsmX89M#x-E*=O9>Q0A z+hkUU>RP-@LUv(xu}n$5%G-WnVFlR=un<|ss!3|9bj>5eeB9kPys7-w6SLT_Lp(yY670d(`(vWm%3lR?i?mjCGVR0+Ky zX`m2xX~b_|!_(G^@gK^Q6)2N=0p~CtwU@AV*N~F zam_o;nw{O7Q5het&&4e#I9b2*fG`6_r?$YG+Jx z>_Bnb)+rk|I#(z3hidbtAmL3}Q7N%<65#e7OXN3Oq#cQHLWx19W}2YJqJ_B3?ov3j zKz$Ei*0SoXBePe(Jh8T|B>Efo9PsVKeCKVXKS3}gPLvNnh)M@Qo+(@68t_mb?~4xC zY2b}urEU^MRvx^Qu~a`gD?aP++^1d zsXvq(Q+@{V`yva|mnR2jj)9HCG$eg1H$@{zQYpTX9%&t(^s(oAnEt6%%yC$=`pXzw z7mV5Vm3Dc8iIeYJkw`(h9CYWNHU(56;cfO1X!hs9hb~u;S6J{p?VuZ^=EWY+el4Y$Ar!CC*GtFNnd%JjN_QkZ z8I#PYFlXUu^4BC{l}~R7*3#b0ZSTMddr0}3P&(y#KdwvD} zkJWot*`C?B5W6~2f>MPJb!)u!C=28HH`w*0ZpQv4hP-Ip;q};tY#*u>7-;p0*Vt}g z5-3-35sYVE;X(7n8KTFlYrj)Bj*`5Wwr>HcSe4>TE_!+rMzYhQ!|qdzwLNRUH`G_X zluvJHj*R~#a1Ad!e!MrZAKBgZhf2JRsak}Eo5C3O z0!(c0>lv&fPG?Lf<4xi$8<-^4IpO(L7E^CUQ6uVSzQ2^xUBmF@IpW)& zDSLXQ%0VJarY}2U=3JlGleIaMma-b&GDl@2hh>y8Lpo2s;$Dlass9FCHJY#twJfb*D zq}A2~U!`t)$#HP86&S{H$^fPhTTGmCP(M z;?~!sA!)6CNxnz@-0D}ynN>jo%H!8BZ~N>+C{{@Ek2WRx_^tAUIH+PC=El4Az=mW_ zOcR^AE3aF?CH~7@V=n%_Q`1=gHAbWAS+Z}OtV>7L0IfVC^}>qDQk9G)@(7heU`O33 zWn_X^Hq)$o1- zl-&DD?Ay`MPJ3!K08=z3W@wDjRnBB0@|bPN4!cXX<-_Rdd4Mk7wQQWj`8tMumJ9*% zv(@xC>)eP-&;w@i4$)lviB4bB*|GuNkYZJu)nTO2z;*S|GqM@Kz{3Q^~?~ zDkiy!#QWJ% z5bD*c#MlNo7pL;}sY`z=QKUHsX*cK8gHt9uA(Y96Pde%x(~d+c8>(A!5NwSca|Uh2 z8?7eAq)M~qe@91I(^?ttoaR`~f2aBVSkNdsU+KK7>oBgC6~G+2*5F|U98SCOy76Rj zV2Ca``OJM=J3BnLky^zi)_syXT+hXAm+jOD6WS~J>I;5Gp{o_OEOKW{K8i-CDM4cL zuv-c0`foP)w?&Av_`(6}eGql_-4~A>DioP=NJ`tqoM~3e4Gu}TO?K5^`|axKfD4KM zyGndtr5$!Hv08lB87EFd*k^=8s|TUwl-707cn=8S>4F4z53tusW?Y<}Lg}(R-_vN} zGwTOvmXfwDaq71E@Bz?QL(}Azjzd?E=NiOP>u6cO;`>@0GEY1F%`q;;Fu|TcFlm{c zu>`j+`xDVV2ESEK6h$%s{=FHrE`~MSRiTpA%gFX+RR@~dmO|NDEMmq}qp}4&9MPIG z5{(3Y%Yv1(Cl@){fbe!Yq<$uZ00kcN+65zMnYBYa=p723a{QF(;pj6lt-H;gvkrF+ zn8fki!HodsQ8s0P;TwfV~L@@}#45h-hYEr}C-;>m;BzxO_$xk1}8s9Z} zBq~6(5dE#H9aelxL35~wEbAwToXQmpMO3_c5-INIv2gZ%poRE}$*hrSu<@VFxttT*Wl~PqpPhJi&G6ZFdp*Orry9j-BXuuFyp$;1gUVoHx-~-84Ld3lKgC}OF ziq_dkGQlAxx>QS?!BOq{>Y>mmvUJTV^YRX$rOJ6`sPUWe*YHYQ;W*NKt~-w2-wi=* z=}^J!^LXQK-ZOw6GtLw1%Jca30i|8f<9ehxYA(}q=5eHXtf&vjX2$%Rxb4^zZ1afp@#512|X|&&kd7C8WVR-%RxC0bRIZ4*A;>!o@M|->$zhLD*^}m)<+8lvp;yp zw?n5`CMAwX>f@z8J3RF;x1sl_e(c<+S%)*bT7{(l#_Df-C+RMXei_w#)Cu$IKZt{; z9huo_BclOM<1PT~Z#-~vaJ zhi8@p94RTvpZWB}WHllyyzq6{8xybTicE>UbV?w)?w(n){UW9b)4K8Wo9dmLiy=G) zYWBE(C}PI01g$5rim>jN_}pDbo>+0TOgnKsv5tS`0(^foycC4=YM_2Plqgjj#)16FWNGbY{>w_5fv4c=QKBFe;x)u zS*56f5@!7Yw^A9YbgW8U1&V6BSkd%KgassQBgd2J)C<)`j~`Q&a7l0y^+v%(BMonu z^|rA25FO^F6W?iW(@e6Q*AJ zs3H6ftU}leJVFgA@ei7OL+&L{XLQC}68?H8ChOaW`aOV3VrXiL*L3y<&`3h5+4`r> z-_iPakm6bP?>&~Gu7x*X-4HCph6E2c$UI3c!F@~7Wkoh%)s;t_@qW)#&5pg(`G|F> zxnO!pWL|}5+pF2Z_0rg%zHOy8I$Kp-&sd_XXiS%2qCY43NgYMC><@l|2v=5lixyFx8XdLQGR)64Z_ysMnY^6uVdqRskwU_Tyo)vpJ`U=19=G1mrBc2_&K+*4j z9`y$=#qaH8>M&t!mTwtSbcE-bs}%IUUV^g_91WMDkiYGp~$Z%pvD}`{PDYPn?uvxhyv4 zY{d7}qX=1}fJps?ehA{J`PbLOVmRexZ&xBwx@FMQ5>6`N=^XgtEej*T?O4j7B`x6w zXSQB2?BapoIW!RY$}*OLP=0iNI?JLa(Q*CMk$c*zkbr05SS86HbUcTUN32DL}c zSL>;~Zo3445P|yk9^?(@)Ys#I7zqFc9p;pfmT;Ejj9i!`bs(_`x$)t(Rw@1t>EjmI zb|-i~SSTvn0dvU`g2B5Ywz44UAr}5JWgKjKlUeeK*#-rljKn{#4V$fVf)Kpjb7Y@N zZRHvslpQ^gCvWoG%pzoY+BP`95T)FntNmv%w8jfe6^av(?fz@cX?d(zjQ~8J667C0 zt^qQp%WbW;2q*)6V&ZQ-Km*=f`iMM*X!+!+hZk5JDCE32p;+*Fu&5DuEFpIJFrm07 z99CIrwlBq-guR~^qfE3|48RD!Oy+#vD|&e+sqNmVTw92$u(Re9=4?%Hob8&5S{{pA zj#xf~w<_@L?`ki0WuR0Txw<>>k9qqR<}ZI#>v4il7^tj@H({5-UN7BD%r&$PEA4(a z@aSgfYZ3hU)~DHM$;;u!LfqbUMGpo}kih-dF)SD|aGwup+HVAT@?efA5K=2_PN-*v zSlP?9=6-!?Y3y4}w&xVjhq9c1Hw^1D30S5TGCDzpF|JKZZUNT<`Cfd3H9Oy&uZ%|&)Urh3!SMY2BCJ45Y($W)B1kk1Y zYEWJZD*M*e&$*umC$D?_SI^#Aym%<@`1e=<tOmK>w+1Mxg zxItSbjZf20jhM|XynPru*=x#wfiO{YL_`EzA2ea@T>(HobdeKqUPrmV>=uSie&LU! z=>G3-G{hVGFmfcAJ9#epM7=JVc#(dDfjQjY0Lu41J*Xsyurm*7{&;3)=9m-~%xP0- zUdF@*BL@fcg2|=1XAP-2h!MMg`-{ECc9yZz zltZg;RY2&U0j3E2578g;T%r9vmj0EBCHMbO-G5{b)$aeHV*fABssD#wEs}5m0n)Wx zhu*(JuT;Uj?1%LSw{$U}9E##$Jwt`tkNhC)c@utq{==37UzSDVAx0;VTOoM-li~^u zT9^SI+5=uee2`edR8Uw*v-o_75n7Z@x%m8_rT_0n?Aq?mLCIFlucX$~eDIII)0&gP z!Gjq@vGjfc4%RRS-pItn#M(Y#Krt*@IXUQ{&Y51J-w+55e_JI1^5Dh5(XF)Qzb^)5 zA%(NS7~~ID2GpL%{JBJLzWn_j8YdrNZUZGhRqh9d+Kh>W(UAomdiE{wg`-H7lc{bE zfW8fiwC@jUv@@1}{?nQT%Y%inbF^dYJ|&O81WK0q@{clRL{jptyGorO55s z+}jHo-I93y`t{5j2-nkOc>G2Z1o7I-xeXzn&S9wFz|(K{ccSJD(?Z*72Jrn~z0Tgu zuv^p+f*X1twVD`O)d0EA%0jPIhcTh znN%i2B6qmf+-+|r1jK9bphP3DdHH2Gz%pYj=?f$RirI% z{xiUJyuZbyku|RefB(QY`VPvWKDu4~x$*yl4(-xPjIdDWN0raednPE!11QrSW%dWR z^$)>lC|U@Ll;nffPXE-n{~1;pcfap8k}XRLbQ=o5&gyljGA~jOgXiMAe!+^PXL2U( zR3)dnJ0k7QWf=gclwjG!IaHJKYUulXkc6(y$kXZX^G;ZU5peFV*m`pkT2$4qLN$KM z!}qHPH6(0q+(^atRDQY*Fgp&~SV`j>n7e7XXg!DtUp?t;|>X;!o2n0pi+1c5$ISw#4gxJuZcRn&$05FE&Am{6Vh%KjR>K z7zY*@=S;O}STqSAmfJnphAMVjz3pRek_S4`ZS!kk zZaE#H)k1`h=iAlW2bq2XRl?FhAkfADa>QtrE#O&udI$1<#uKy*3D>qI3juwFQA0z6 z7qDU!^$kFPb%2w^!1ruir3?kyRKN-PL!X=unopvSPfoxVT~T#HBcGfFbPV`{<&3U+ zwQ}_5HxB`$wg%AiOsj7bpuEkkvW<<4gEltrGOF+|U7uh-G{y}e)P_J7W3BySYt>0* z<2L<+wgEqDj{fvddV2a1aO3U@uqUcc>>IbJ%Z=I$dwP0QD*ova@k1kSKYsjx4h(Ro z8`z;jz(@ph*S~nH5MN4cSlM>p2vrvp=56;@j-^F?XR=aDQZkgeY4`I#l7{d< z%$y>A$KSzjyHnY>w?63rEx{%g(6?BwbVa4`Ia`3Xbh~57v82LUuU8U_=8pAwfa%2*0>YFz-9QQO2z&h6pMlL z=M5;@>#T18i9qpS76Kz9^@aCuLzoW@sQ>{$WpjS8Nal7ASb9)joDPX!56Af7fOS2v zKi_l)wk*IBy?`trEF@$IrqFdex*x_`??Wph{*M*FEGjzu#W6@LEG%p?wRGlHXEjO< z2ep1Ik<_qt7c6N3bkR&G6@OMD0%1{Zv8UtB|E?`wl$JFVz zc-3*+Og)R~#$Ma*04deOK*t*T`Xp}mc`|X(VMIovfHNu6KWj3e{Tb9gb3;r+y&XZwv(J#EuAEa{9&(k?zRBQPW zNF_ccg}>}?ZvvJ@Eny*$uE@d+FKBo8omQo%uAuvJo#Tq+yi*^Oc;h_OVhjP%oPj=t zru(lYXoYq$g-?*OJappK=7W`CTLT-7rk`Icm{4b1g_)tY&VWPH3QV|0Plj(gKJG`qL&Sz38<5+lc^=>KWtK`Lxphs&K%yFIETOj_L!Dtc-`H~7*AM9T#* z9tU?ZU4bri)L(&FlLvI;DVQNzPW;e7q~U{hQARTMywM7M0D@*gC*wp!Gp%QwOp3~6}e006Nzp_|;5U68ebu}AKhR^-g zhVks}{Ni0Y!@9ZISwM?p(Q!aPJH?uivsVhP#%~ z)|Of!C67uj@iYY;d=Ldu3_EQSY)g6Q!nevJn^*Y`UuPrFuMtKpYA1O~!wjme!L7@WKNh zJC2!csFHJ*VLLO$e+!<2T+q$7`<*t*s8%E7EBH^`xwf;l%X5+A+!O|64|*UF_-}n0 z@Q%Pg{2BTq65+qp{{NnK{}KK>gv`N0;05+fd4LU=dXNo|N5o)hJIJ(ci`r4EF7DLy#8w9OKZO8$$H4W zcRM_OQERK=+1VM0Y^eGAwt$6QQ`I++%q9*^1+Dcs`fWV(cR{m`JnYHI7o|pbvepx2 zNCF4fJC&29?sM6=44Rf89mBU`0~Fh3cYC#f$|d93-GvrC{|k42_h{UQ7XD?AtR8$) z=&`4zpi;L^7C_GEHo9!-lwYhR8BG8Yc%)|8(<9xBXim> zG#id`aBw7~rV3Eb{_O2lH8eD=+=4o%b(X_9&!-U{#7aQ=x6@pJ%9D$m+b#7RAShV@ zG$!%J^cL@nZJ?7~t```OHzOD-2u5rlv={JE{9%{O11=P>uWeu|-@opM$JZa)JAwMb zP~%88Vf$dh0yY~Q{w~h4bOHBsWceISLjV#}HM_C+=l%lh0xMPa_zyjiKz!)DnqsC< zITRRdzTggoaVDUtK)bVs%^r@Gq8nsj!-UGNv(*;zZOV+STzR?6jLBiKq$Agt3#I7# zi=OKR(+TInLWI!Fc=75&ehQDUXmN}N1MezsF3pX0e#FxTy`Ba56dwN!yg8rJeZM^E z@wXqLZYv7n(?KvNy5f!QwzYI?EEG1KZEVV*m^QvAsf&@isB(#nTX^wvz}cZ^WQ?3S zhe;c>(YR+<2&tP}G2&v9Zi>F=n07-sirZ+k zrP#Mj^@qTF^;4TqB{8$Hl-91ry62Q32Cj$GW9noBm(&R)Iu7t}N)EIu=6H#q`fonHCPVZAIuYe{~KQGnE%qW*Q_B2KN z^JTeT@>Gc*tx9+deEh9`lv}w&t-`{G68LaKb5a!9!jgoGI2WdOEE>oSVAEMa_|ps~ zhG|!}c$m7%@YT;)By4J0E-tQZ*Ez>-(iGsR5)lzm%FrlfjDg-m(|jab@E{uuaswfB zz0=wyInhmMW^~5l)ox4&_R~-)X^e;`d`=CD-P|L6GmyYXuT8fVFXvj(q%lmAosC=h ztME6K%y@a7tVdbJqN{-BYO%+A^~(sRi*1tpLDI&?;U1yn^4jha+_X={@v|i99E>sS z7dR!+@B6jU|!Zz0Uhp z->VOS^xmJPUCU$FBH~In+-)o(A`EFY*SB%Zg)}4_;3405|E{)3;KkZyO8sVzLu1e^ z+dRJl#vpO=fGqnBB<%}x^}y%Rx%^dJBvtIrcj%SjkNkWR%`yEWiTV@hg{SW4t4LC? z3cyuwgwq8MgF9+FE>H#P!-C`Be;P(519iDUT!Gu9ZVsFVp@*U`RzjKf!6h&O?as_H zv6C;|52}ba(?!_Q-mB!cO4gCasMkcp$+=WXojnTJ#?jE$uRRQxbdwaxHfti($M(qJU-3aFdtT*vWt=Ifl z(TKRlPkfomMOu{R>&J-V4=hF6Cqye5Z}9?QuC{m7d4hKYt;H?UCcSjnQIEQuKwrKtrOs5NTNK* z4BIP|`UP1O7nT>A*kC#}qziU&)T+05zchqtv7Ow!kdk(Pr^a>Xe5SrwsxN*mYBc`q zbPDOl$cT}87;MBV-w9us__a%8 zjq=`XjjM4wZrk*`4UXtc(4hm!6!Qgq?_DGbj zu3@Q!)pKUDiF6COvbN`SWTP|7!{-Oaar&Fq>}==pJ%xAND%FnDdu%JE1S)Nt8byjp zM-SvRj}1IasFYzKuk;@_cT=%Jk>9-xl_c4+{Qa3=19}a7*jyv!@i1~15}wK8-$$;E zu6}72-UkyCi<+e?)Yv!L;UkGO3~4zhw~Xqy_w_6o?C#5TFFZcIQL3x# zt57qR&Dr;BtiOv!(QEac?wz0X?Q0Lxt8?)S9C1Tf^(<0HrO_KZE;iya=ac=krFB-L zmq64e@U`W&=N|QGCcTfGfOi2HJzHZbXedJ+V(}O*Sxcpb-oO$&5g^s zUa-ij`wITjK?&sxBX!3mWl-71s+_oU&iCn0-$89wDJZ8yIu=r$-XRD}Y`W51yTnr0 zp3S3fGrBLJzA~CBgQt;8xacF-xNzK1J**R)=NA_JRM|~u`#OQh2eri0F^N5?DQ~5Y z{>Hon%dYiiSG*jpn<3t{Mi1#CNv6+9-7`;y3GnL_F;A?UtF6u&csA;{SXhA^((8_n;JbXu6?CZ&s}-$LhPJl<)1j> zFRaApjU4Y6SL0hk)jcLEG{L4_T(6w(HZ-D%Eb5n+myW1Uq-4dTrY4*? z6sRVC<&V*`RvvGY*SNO#4iy$n5d2UPyMol~$*m>h%%51b+RUZ^eEtI@AJyPz&NWT-VoQzL)+u{@I$MqUlEL$WbTwSvFN`{#m3p#X zC9?T?syM=Z&-QdBa~x*B4ii z6TLOKJ5o_NvKqdn1DrGhE#N49BLMKF=9D3Z;o;#F2C+Rqe{O1y3g3+iN4dyA26)1_ ziQVP92cP$SwU^`Bx(N0xS74Koo9n`)$R#M0@vc4?*R*vA@vG;vXo$RMrym^=s?4vL z!x2oembFe5+tc&QG$A1sMo(v6G0d<=b7veLN*`Wj4ZkNiY6>fx-2 zb{1loCwbgt6s9mB#^7S$VRuR}nDTqTd89RlONo;3wfu&VrD7xBq19wggu;j!p@Jg& zkIa;+6j{~C(N7k=-V=@m1?8brlxjZg9jzoiTt}oEifD0PN69?fDBiH=m!{ix?-l5e zVpQui$fS-p0J{)IQTe&=%%+@?8?ypPomJ7X5E?wku4vpY0UkhSI<>2->%7n)h{l>B z!vwe~+=I>U%By)>-Mv=P)wLA{-Ecp78|5zFcSv?*J?yu@pJP9}oDm*#`mM%+Cb=>? z$CQzy$%}r)e4!LN_ik9UnArV3^=sSxA$}jF*QHg4s*!p!?p;!4osEv^pA!MVV}-^7 z#okK33xit(2`PhJ-P*lOw5mm&f3zdLpKAg8q}LkBuX&j6_qDEHlu|ww+%Swc0OP zTs);G9gSv53EdK8FGBs{KAFBO0oYD2UR?TAI4xGKX=jw=v7S)L)CkHtgeEGlovaa^ z1`QbYX`I_Xvb~9m&wF>V%!^fbbsxRMThzP9N6&{_%m#t*W;&_?SA_r@9OEmXA$f3; zsLmV4OgZ%t1Vy}vket4eay>N5$>Ya0dO;St{Q%;`J(v$1RGBn{=1bdu@W zy{T~oI`ij6Onv3>&NsT%YT*pnYaXo$+B{k-?waZ~u#_uMVqnYu-kzBMK^^ARsCw-CY(S-Q6PHvFT7$ zP$ZxrbDG$y5XD0_xH!=buRG8X7BZ^m^Cx^J@px~Rceb3W>G`jm1_iFvNl{_9 zbzjrek0?Vqj-zrtsFS;gcNQ1dx8khM-#+uUR8bi&yXiuq{Ocpj3D#05Cy&Y!d5T;> z8c5Io<{WHn>6KJf^oXS2uf%A5p_Ayr57L!$~&=w=O^2f!YsOV z>T23{EguK5u`VtsetVX+d}PCG=~G^w@XogF#;?L_Sz7DrIa^g!qg&*g68Cy)FP>~2 zj`1HdsfF4nN>U6J1PW&1->FGIwNm>qIcwt{pcOz>9e(yYh(6LJhy8&>1vdH)9Ye8t zHBYAbVGp?`LB{Yc#pOzPP zDjzarbZE~n;|Go4)T#b+1*Vurb9tvcNw|1EwDxWupEj#hICh|)h}RcXXg-?m>+cDr z7>t%0Z>~F%K7%g9*ze@JIAr`WkJZ zGoy0Sb$h~Vxb}jN*X1K}!O3OrR>^on`J1-<*L7N7@@eM9e(asUCz9WuaB)m4h)$@L zHYA@7W7xFtr)s6fvBQP zUbi&{u(i#tN#6 z0vW5-ELH6aYj^~MniHw*X=$(Uz|rnXTE!`(#+DEY zfE(r#mZ6e7^?p{a>6?VH=S`a7$?t>C_EeK{@%9`jp22E2?FFs3Uz5~kpJ;XxDE}23 zH1Z(3gBC}5(uNpce)FOR{mNlq60=|A?7T(=E*h6*_5QjEp>;!+DNpEpAehbt*-WeNY$` z>a5dQ5C5Swc53A5)OvN_h+*U1CF-7gXJc1-Ri!NSa)JwLDwkhNg*NAGESmT zq`Q9Z!sI8usSD(2Z;WAzAlYQ>jXt5rCOQsQj=f+0!1vx zCmOxI(QWppjpzI4%IfO8mgAS+c=3N#(oLyb5_+dPcl44saBA55IRLN|;NPTI;eaqTT*HW!3UU(NE#qtmIXiZ0i zPGUJsWGl@oC+t7t;NbXrXaSS3W-d~zMy3{$f2dzy-#(nagLT8#v!BH~n_w(bgtzGS z!__n+%}PNP>I;>jYCHES(^sl)%Cw!HI^P>lc>2k+&O+w5hLpXsZE$VDyE?Aq(5ofN zch*&dhWLqub#tHOQTKX&=xAV*j&jSJBndA&dhVPNA4VKpQjyh3J{Dh4V=`>kgxN0J zDP%M{XP48WXjfcj+Mbo2$c;T5?a(1#zY|UKK~^HKAXE5C{Y@bs=};e;5DF8b8@V}# z-f?kPZkdnfx-}>_6s=iegk#2?Ru?iE_ET6>L@g3q!F2`!li)rv}EGb(i^QKP#r zg4(s$xC-0X)@-`i{M-vGGg@aSUZV_Ma) zGS!X2DqJct-8@cwPLXY|Rec3ue)a4AVKjzg7U=pr6&L5>I~TyGCPazx!k%MV8gAoEO;*WP6^tJpYYM7>~43F18uAdvl9Eg+ht4%t7oz0izOw>@_sE8bJ ziKLF{Zrm6fU**Y&3k}%kH;I#VYt=A;|P+aXVk-;BE$oJlNaxnLi}cYj7>ky}=( zH8#wYeV+`kHmJEbJuaQvdgkL&y-g6`CXF5HZ4Qag-|y#=g%Z_0x91P|0^E&)_-++m zJd=MbQ4K>O`yDLRpQ$*|H%Cn4%jX+8U{%MUC~b`zr?*Ia$tKbHZFS>y)F-{fSKQ9m z|Gy>Dn_o09@yB%NLh zDG01q9{{S=b&OE^6#zsjJZvY}L@QSwU1-u=&9{ZFn%HfCSHg0CwPxq`~HdPN1o zz4+)lhi^ee>^PTH!ilqL^@^zZ!c~8!>ww1Pq+U*Lr6*2>raiBYW)YRbX6X^{H>W44 zHm2$Y-t=U-a!h$H-?GvJ(@y)U*@jVu4OGwDgtVb#^L@4K%&Dw5R_$z^lpE~miQ-ch ze%=ZXv`TJGg=~XT1?T9);fYJGQ7*G&|Up)kn z^g6apm)(E|f*Bck+&GN}eugIksYiigcmYV#@M&jU#A1E_?LAGWcnzey-xNRmKX8>^ zz=?m&@R%pc~knG&=bEfKY;-@Wq|B3t;gaP5ESOF2TZG+A%_@pTe{7mhr`oF=*Zxd4j_z@0FI&uc9Q%~OxQPVmi%F425_{Lj_J z#l@x6xx(67_V~c8&0R~Td++5PfZ13xSu>H(d~Lb)ojcw@bS@tZ##`zL;Mebe%T@kyetQ#`cqZW}E69HlI`%annEfk#MjK*j0% zYXq~7{6zmuEy}i@5PY?Be)LSYr_>ccc z2v}dgT)!K@$<3XckwI;F3^1g5YXC_s%riu+_uVM&-n~25@wT|rp_e&gilZOqu=hWo91H7ZsPNgrjBe9QL&G$mCjF7UySgq0Bl@plKt~;F4fu1* z$g6)%{Ev08K+-rpZ51C9WIGF9=k@WalKi57AD*VohkW)8mVX2TeKLNBdFc`T^x|TL zf`S5rsOp`5spcz`#qj@y_mLNh{iE+-vHHU9;1b%g z?&>&(yn6M@tzIO`6#*%^KuAU=QBWg{Mh2(8#%tZ>JOb@u6y0;nSCN(YhWqdjXd*;t z7gLz>a#-Lcjchz|OGjJEP_l=(C(ac(ezUeUvx#$ylZB&MHTv-r93<11i5+AyxvQg( zh}Lq#4Gkmw)%*^Ff(;=59kKVM*h8tV!!7p-or74-BiM8-$n!r@9M}7vB&imvXJ&um>>IO)!0enYFDGhQ8Q5bo$k4^zqFT#uZbkU=+Ine$dL@1&EuE1}tYTEvYl&QU z#-}++cXEwCo4k;`!m19Db3~4*Nr?ZRYR536L?piRk#fTjUw;d3!jPts`yJDjaVrY) zJjpp03H(j4OFx@us$ns*kO{|mDtz*{*=w4IhbP#v{Xe8F63&%(@Za;228l2lv#~O> zlv^1q-pw+l`P=BYd9XD%NRgu|R%c-b?vug05TK$y>cAwKXkN^9VbswGj?7_xtl>~6 z>G`@eG?L1+DV|q@tzz|!o}UGS%I5eZqsh>$)fIfy%1JW)K13a{Vs1CFZVZmMbTDnU zm!#jRJ)bv>%J>vXonuAY+jf2vEOLJpMD=gjUO)IP-gcZx!++6k9ifw6xXL(?DKj8? zSBJBo`ewA%I1C2N@(bBMeJ+JmuO3RWIqv&!=GDC z^JY6RPw5{r&dF~m;OH-|Q9ctoxy-{_aS-mjEofA4ZoxQZ_UbBj=)mYgFZprcBO@!i zklx=a^A+7&K?#!=0gm}43)hX&ZF+lK-5!pWuV=b)y4gjN zo3oZvS?TH7H8pPXT9sDg|+n%V5w}5O->UQk8UX1wH`jQNVwWmc!}?Yp}n zg})ighv;mKf+mhXM+~;zyuVVzNfe$TiiX|N_Yb9PhLbM*nfRll^f6%Sg8fFzU?hg% zz~6V<zVHKRl49NZ$dhbpFmV6{B!y+3ain5$VTA2s%sy}+S3m@(AC6@@LUXgI zM?h}yyj8TcNQ(oTe=qW=^Ti49$R-MsII-@@2_I5f9!EzV-=*4>`h=iv*Ooq$+X?>9T1gW-R_Q)2}NXqtM{mOZ;g>!KnO`w8CDz z21qo0v|gl_uzrz2YGo0;{M#2pz$xNg=F$O<=p^=+w{?h-%O3u8rlG2}&YOtn&K zrIjU{fb-!o(u1Wj$0Hgklqqf2ZhLvYy(ee)W^q0ca zL5|eGRHrxrL;MxX11w@L8m;E(SwH2uKiPMDbmWHkDa{S1u*fTb{SAUGe&l-}u8)*` zLo@AbFQSYzQm|enYiem-B`iTSqyEp!ap^%Ng1LplzCz@!inbfUFw?OWySEL%dT|2p zMF)jZnOuKRy;{=QQ++=GfA>R&R|)sd{@l9CN;tkdH$%znWOU*CIbpUV0@f>m)rkRs zv`Q%TSX2;B(kcTBqm*_2EC)hZTXRdx8>B&X(73C)qWd#*%}X^MR77FjmgK*Wm~uXe zx^;;XvE`6P{7_i+$NxgPh{JpUkoeE!Hb5S*^4!VO8#q%Axl3Vk!U~?Ao~B(9Nawl~ ztZg9Rd;yneqS}GWd3~bqm;qh46<_fw#5iv&=a~w3rFVcG!)DJxsorF~GIe+F{a*<* z6+UgJTRh_>WX#n^_pF3h|6IV3SI#C5%p^w719q;(X_qP06SDfU{2dP2eqIiyKfGzs z9*9R8<+8hZbM}l5Y zRnFNpB!Y+Wj^4i7+vGo_t)08KxaL^!^m0%_%YI5Tt0&NDi7gJM$+3RbZNp}Cs#Qw2 z;Kesvedn-Qj`n1FMQjhuTXVR}pEtBpe`c^62EGuJinpvU8 zr7HIpr`WAsgK&nb+}9I4j;}}TyM##I9HQ$h4k7l_mI{q%pc9Yj{I(Vk{DN0RLOSWG z3wc~~4fNz*oVt5I*^SPrbUs|YSYj9t5O8L{-%PC#f48t^$~WUS=|R}0eW1R za-7yy20NA55}wTVf#N4gjX8^P?Q?_tb4eD9G@&4;|sTR#+>vt*EOUs=1# zGL#lBj-%qD=W!nFEud16YE@0|*6<9|R-;ENkyjdi`XqG16Qx^uMY&!;tyqcb{x|c@O zw>mf(;*vA{tnrha+t66+9;I*S9pHN?pP3)nvQ@s9y<4G8l#eGO7JBOR$^Jf*e0ziD zp=En0(|F`-zB!H1{4$wQNxlBln$lpk+`n&89cNZiGp57zJk%O3xqAtz6yB?$@WLuc!z8yGAb^ejrDB2W8_0`(;v3QbZDUWtuhAcL&u@9TmNTZk#&#byb8lj@ybI zQdY*(4W9GR0+6#w-!}bbldBD+E8hucfhO<$rIKFvCjCC7iWhlRW^(dZ=-JZ#@3)8b zyz9XdOZlF-djN$dZrr-I``-`Oof|oTlaqe)f}0!lK-DY$-k9?AuLpishD@3BpQvVH z8E2~4CJB|vxXAC= z;Y=dg8NXuz9hZ#I@?Q#i?ie1vnsSH2$Ez2Go1tPd26I3M>v&pR2or(UbZ&tSY%$4P*lIah!k#@Wg4 zZx?+alaZO?DI|l+Fy6*DIp$`ZaV^T-M~#afYKmuD{pm?;%WOHwyDqI5Wzk=pS+_5# z87uwVs8Aw)^wbS6D}}0H&0S#BuzznbI+Md{+{}fojjCt4N_UcGZGW<{$uFs$b7?<4 zZpR%zuy%&GtxEdO*v{V463yvv#Q}&7Xf32SBMAva@>cen*r&3Nc=wt7WH#@?v-1X+ zpbF^^+HVK3KFr*h_MoLLa2~>2)Y3V*0pQgNO1RX zO*sJq5sezh90@r&9@vrd8Bx0IQ0YRkG$|(XpG<2ObaIW0(sgS`(o#D+j)-a|hhb~L z!_yu)5FbGL($3#)Jow-WeEe%q#nqb$bPZ8_B0-orPp90(&&_f!fs|scnpLC9AC}0h zb9&e|gZ4CO+@+0;hJzFvbLi=~=ZGc+;tHtwGEZ_|%pmEgBzhh$@srl`CIh7g>f+J? z{#HZo{TtT;*ydm7NL)j$YSNtj^x|hct(8tSBH1ALJ$5LwbT6uyY}42QwLv+eSU>vR z`8_|IY*<-Vee>Sy2s$P@p1EGs5>;e?`}5*{5ty~$*JnqU z2B2hW=tM@{PyLc!uCA6jxyV@S9Pl5Z3dc!uS2m;rM?G|o*{Y38bNB`ft8Y5Rd=J{@ z;Vaf!98#K2kvR6U+J4_-IMSD{gQ0PrPH7Lpp0PS_5E$M&s~*_VmRuCDWP)^Sv(>CL z%+;D!C>^e|%pqR%pM?&YLyje@=_s$~VOJnd!>I0$*%Qpi8R3aw4!2ukrSjd!4 zJoU4%?M@IZesu;s>1e(4qv3g=wQ~X&k=0?LhrA@|CX%`DhI)A;NZNM+zf;W3xtHN8 zcU4Wo=a=5My?V?Y#`vcU|$vw{DoOM+vr-kniKNRMxgQqg=#_$;&nPq(+3>vp6y+nhywLYtec zF}mkxF7v`SwoW5}cyLT}7Gv0yGg-%mYA?FlR=Y_M!?r<#IAR(lx~_ijF=&fxKaXr!#lxINVWvOyU_Zr=x09L zq|V2!M*VsLwh0M2>@f}kXxD}1MCV7i-}@|0UKTbkclAx)84AT75O6bNy-YqV88DDu zPwYy1@tRC*q6C?|X@8NB@F4RSb)<6EOBEel8SjAuU`%_915}$_9dg%A>FUdr+ zJ_Wgo{uc`s4N5cbe0X;7Nt6N!NK26$L^TnI$Fc&@`%@IIX6JKO!Q+3|fcP ztQ6Kdp6(8>gi0}!WC~qm4fj2+J%w(u<{)LP2{08@&7>nl-G>jKA|-b4kx>3$Z!pF& z(v)eP#ANYbtIHyFawt=Eu5~1#dtPXy=#;O!Ri>gzg*UHe{_0wN+emS|UBWw>UP&bd z3FC!m@`tjJuN7{G6Rj`=;3(I$FqrgiDv{~B-i02# z7?vdTLiYU%`U)$R7CMPxD!R4#zr&wQTvN5lSJtaH{(q87VJUGi{vDJq>)X4MDx+i# zW-p$XB|NM?t0@682N#>H9r<+5P;#s+uG7el0e+1zBOmiMha0p4bN*J|)Ay8>(4U=) z;sHrpSkQ9#P+@IxoTv`29+}+_f~@}gFQaNbDX@<#=uNygX81Y(IUzT%_*}&b;77!DLhoB-`w`@Jxc+yVa6y%Oh@GFN|u==H%7nQy-$&hIcvmi zt)j$TV-JU={n9I%(C@mRO6a&{yd$FbYG9hMXO>*lHMu)ff{huZ$=PDkDvTqTTe6?P zKJHM)Fq&oRMaa$5^~;e>Z!%N(pmGI(BK2QjGjYkCp7dT7&#F5^Ysg0*9_m7ZG6+dficMUl@JNQf*~`D0-W@?S zXhY6tKbt?iTVUfUg`8-RqIr%+GT{d0Sgmm+9LA=QjD?~QGt)81Hl%>dD6|6wdS4K# z$AtoTNH$fDzWqPn{H{ zpYrahG`mqh;$kGMRM?d`Acx8MQz;7jP@PC;qmIOuN zQ56k8@9bRG%TZRbP~3mx{P>@-r9`gGY)Hzce3?bcvUk$T`4P{5@lFt;IFnFf&`ala4gU_EENV_NoRgJBkJD#`exLd4Z5@vV>jj9Ljb9HZ z3>5j3v=K5M>d_qvTfHC(zj=c0_6;YeNP+oU0SXI@HQb4{Et+Q{?#}nsR1(hZP70FQ zty5k-GWXH+my$5^H@fiQj%>!`jH-ZNiecO`2Ab8cIc{{PSL8-W^q^nJ^!NAEkiTvB zZ0@+sK;UozpQr;@NuW_AfFa8LX=LrUl|z>a@py;c{o~UK_nvx;>-4seu@v7`_6X0V z{V73){uxY8U>)`&A`$2K1TVDBxE;OwiN=r73{eLY^F5!rj-9~4>|ze04I$;3yS4hZ ziZ9L*=VG@z$f&*InbA{eoYtCku_7Xx4wA7Y`Hv(8lpN@uFV&(O#EoKdiwyNcHhSZw zjpn7cs*mcJguxS1riNw3s_pFVR?*aqh05n-q@GDgsD8rp;P^Q11Lb6`vl>(&ugNoE zsqcgM|5GT4Qr(!Ums#;ToVyD(tCNf``5YJfxQ@pV0>|oT8k|F&P(m`Y{JuW<%U7@F zftrQ%f|2Nx;U`@C(rhxj%3q*}`i~N?isajp&lAs6k{_Ipr39eSv3GrG=)d5s3MI%V z`vwKdpG3|9(4sg`O;2fDf_qv2kOWS6gV4;rJe7P}tC)J-XW5+kOAEb(Q+ioX4y%cHo4o1t zTpRW1RKCO&tV)&CdB0~G@rdsr_ogvnFB3HI$*hY>tt(99oI8~c#HqJWipPvIC?$Ck zk!coa^veD0nw7qMBPMlpT#YU@AB)940upjtPh|gJ>3xmIp?%Ew@!??%%ykVaEI7EgoD}=bJ1)x+`TYrp z;L$-{TG@D3nI#qC^w&m45o2;ck5gS-Tpn|BD%ZR1vVVB|{(GnoCE>h)_@@v1x+6)c zGJIh~gC&EiL{SL^mJ$~-tY&uo@@V&k>M=jY&!Vgk!~*-jnsr9FDASLGq<_b?i*?O{ z@kilLPiG|G{)EGvbE6j^(Yi9ZTBo}&&w{E3ziWkDbKo@JmZx54=_{zd-VMG`6r5zj2#cUAI#@5 zhR1gFs1phLk+5t9g_-ijHc!96 zg2)j;1}^V24^eUP&f&@(rT0-RdP7iZuXhSfh6aHC$>QzpEd;_ilG4(HznlHYcj&dh zs70ry`NwB7j-<~uP6yN~N^fu7otiz^U*9)*Jfqpz+Tb|FnGhu?K;JhelxkJr^}ZGN z+%s8X7^S{x54_V)4s75xoLYo1kH#-vnivPw#Q@h~}N&vE0=p&%#(2L_SLT?XyNF z$*15eX5wUqTHc7d>cSoBoHngD7bBy2W+vOd=Kq-YOG?+4_Cx((J9@j5CHYj}DG|-j zdv_n}yQD@|OX!E5FPZL=vWeIBxG?;Qz{uW|PM_am!oOp(F2QoB%k_boC`K|*CmA~- znhzW67akIbL%)~}U8J|7|HqH=;8=6H?U*v@)F^}OMn;9jNKp#-)WWbxhzJ3KmVg2W zm(!{`C^xh|#iZqq);goF+#pT{^HC};O0+=>I~@t@aT&x=__uB)E2N3hLGRbm(a|GF zUhK}t*_eNQbD?IvW(BmSL2@KRD$0Ck@u&HCMFEKF>;Uy7;;?l`#V_jH{a~eNy5Yz2 z9TR+G+P}?=amp-Op9IP_xYcY9{nAyVt!|f7=m@fK3`s(N^PX`<;VDJe7rN2Wn6C1E zIQ2?fj}Im&Uo~xrWKqxDz8TQ}Rnh#vMKV)2Prmlj4#%6m0hO&5lDW9+Y`-xtb+;7J zCi4ttnj(kBHvP+TY79cP)sOUKe>QbFcAq=Qe+s+7SHAbE4qHH1Xequ?^Am-(KwYPc zg->YE9quhmLBe&LsRVR5k8#v*-X4Yi@7FYS3vc}po>5*sVCY+Jl&S7Vo4k2sNLk31 z5{^rlpq7@(!_-)&u}MIHzLY(6`ySW#%dhVDKG|KizCU5bujCeXa)PbYM|^9n*LUC^ zHkLfsCR!5fNwp;~5I`yg1GFa)A30(#&(W!^fY!MgAQ|%mkd+#=rxVGsdi7kp;g?%{% zN&5yz8c~N#8TqtcQnSU5ez_O!yX#r38={(tEKAb!f)j0nc&}W&%H@0i<_@R*5R&#C0@uU2UTDq}v@lc%bt*uMcc(A`| zpjH!Z<(BQ^e}%kpdyC$FZX||%BJIamv>&(GK+5!a;q=QXZvJw{}TSG%bv-s5q8qm+VFXR?J=5%_r8_R7K>+|j%5g}nZLd*aaUcB51 zk~+d2=}==4d6$mLCvhe>2D2~E#bq*xp!^@v&YPXo+2Js{;SUNZ65MaR_w_Y%Vn({6 zmtCXl8qJ(`=&XpcU2}o-sDp%2oLKHe9TA^#Hnt#j&Xd|ZROU*43imL__p;u5KH{?e zf#JVi(bfO;@1|y1TSnWe z>qz_NZ{=7kr9nR_d7nL|0 z;v$CiKO@!IDxWT3y&+m!T51iaQwsR{^~rO^nEMYOJ`@9SA*lDqGl>c|Uk2r;R*;oa zo;R$>50*{fCjo%cZm;t>7s6bkeE6{GziZd%w%JIDiA@0>Z+R&v=j?R27gE{&@#cR0 zQLK<>;IFLE08iIpOVjk;&)hy^qQo4PNtF%lhmMpDSy4GQ(-*b_-`y>+bf#+mxD)ZP z7t3(ae&u449$&}bvw8}&^=4}WelC9_Xa8UN31*Lq5YK`r17cr0w#knhs_I!$x4A2& z3vN)l$J}1iTaDh_;_|sqZ1i0wkjI!tn!6SE8aMWG=NFsw5XbK&pFOWV&2+0zizK10 z3u|nwQfYmhls9wfCb3a~JAF^IAgbhc(k+`V57$gK_jOCdGk1yBl8BW6nc7mR_1-Jx zHg5CF-ouv!iwnP(44)n@ZxZeBFt`_v*gb0hBKPI?p>iGD@hKJMQvGP_ESrIvxfzKS zV`+)|mg1j)C+Jt`Hi5qXNbj3S%SM}hmkZ=bZN7+WBS$io!V%~>6x7TPCwxx$Y%3uB zg6I@F@^)+2nrr659#fL#3&;Ohu{9y}t=~mY$-*)jEkxD-aau=FPgm@3=T#|Uc9^z? zBl6pu_B94a>50AE+}-3xmry~RH0OLHj)Hj(@x@DJ2E+@!qzf$f)PnS;^ETr46T$*f zA6RyGo*H60e~Nwaesf!%H>fV~$9`$xHi<-Q_VG*r>chrdi=(0aRUOYp{C+gq!stps z)n8M?hS6fTDRu7jA1hLif5%Z8R^0yWfYMe$JmBu@E#PTEY9VLHaEsrS=Ir!urI%2Js*O)78fM_S!@@{9~Y+ zo+qXXz~4YHDv?XX>%-`zO~{jx0R6LvdAg#9f-_Qx$nwDLj%$6xQ?Xekj=*%TrPc;Y zSFx$3?bgFO%b8z=sMZpmKLI}q8+@HB?ZgztaGGF?nHzPA#jZROzQ z9LiQ0SNRZ)MQK0PfG@k1#4~it_siUBw>cn&WT>K(BNCSdAM5Z1p}nu z4^0nu3<+1iWYX24)#H1rJF$ck(_VPAJ3(S2^paITR?_9*J;`RAl$&=C>G9O(iW{8% zjT8yuB%K{D(!BQZTlc+PEn0Q>T=jS}vnp@*asBwua>>Z0{07ILVKPo`A+^;u{=_M< zk{5)+R@9Td$0HEmXGhfo%9L7vSDdH?%_2Y-9HY9alRvfw|tevj?T5koNmkW z0ZVhO(VO2o)8qfSr>P%&sqG@3(@RfO^vSQ|vJEP+xp?IU>y+2A)y%IZe6P`~yhwl7 zKuEp@f4!tK1|D@_<+Rs0F{}O?1+;Fx#r+QY5>z(YeH-05!w-MUj^PZl0fW|yLW&n+2UdLP7LtR-|U#w7n( ztL*kqj;|*#@?QU-?fcLD!PrNwL@VOEJR}@`;`eS(dN5UNZ{f0kOKm0DF7Ra(_0u$d zajbi2binoMfmBRhz`=#LzEN2b`?=$f4fpn5p_yzFZi`TT`){ifAK&Hh-qYV9t+Nr- z+E!ocd!n^>I+9BS1wG-|NiCx5%FoYq{ZM}^CK_~#ZYvzl~x9p=6~$TaLhuc)e}c z;dzq4)4w1_`c_mV4>rcHFEOo|--;{cxP5Sv_VGAV7w%k>_7b`Bu7K>_6uD2}$A>^F z{zK6|u++MGp+)4guGo`<*M^vl3n6rzITZTuTfUP@#C_ITbKFc0*;#mXT;=uVHXABp ziN5Te&HI?dee=5p-_ey@lV8C4H#WXxYG`WBb`>r3;w$Nj*6v?fAv1o_+Epod7Qpb( zTH7VWs~-KH|Lxh7ns8jR$-R~Q4+eWD+CYVzHwRGRIyHz2ju-G=6e~9-Ybzg7QgYe;dQxtV>3FI#rtvh$sbD&N=QO6Hy<185?JOoa zB=-0!J!^K9iETHjaa89gLKzo*ADl$Jf`j#ih=j1TlRCk_EQ9hcn8^u1) z<07`|32zbRKS{!gP?3Jit`udl8!1gRxUZsbEAj!g%|%XosD;mEqDCnyCK}1F+mxa+ zRwkfydG{jWh|tRmyWMR+MvEnuvf@^Temyyiw7)eE(RhG|&1EONFO|4AhfYrEBuC>@ zy5c>Een>T}`3y2}c8P5OVHSg^0x5Gq{5EiMxLxkD`3fWhGY74jo0~C>-rl<#(|TTB zUU<2;iW0(T<;-CvAuwQ26Tl{@Dg`0P0_|!=sJuHXfVW}|iiztP?o+t^B@Eb6MB3jXARmVHMhG&} zPl%#oV{;F;7c8I=F|{=?r3jSdw?N?e=UdE$ppb}&jHmCen1L8+hPAl9Pc9=!10YZA zPsHH(7mQ$~`(lb8Apt>}-+i|qZ!szK9p^6D*c7_yWayXF@$ z$xq)Qs(^XD1kuSgRW6&Ubb^P_GF5V79iCW4S~?&#Ee&3r8yemgw~|scxYz~pLG79y#>iHQmJ-SHeHT2P=hgM*^7{Mz2yx)9mA zAX_^(KTl6fD{j&guK;^#Ze=A8;n3`4LnL0>`2m+)#7i643d2yskdAIRl0?_<#ZoPO zqD_>Sm;VAmSuR9<%a90BE6^;D*Jjcu1*I%WSy@#upfQc-q+I6db#-<4NlB~*KFC7> zVfwqOQEF~&c$!WU4c*cVq19MoVZd{~4wkB|@F<%%*tM4!80(U*;C)iIm10>K0yV)m z=7{+1#7KXJ6qmz%7yic2TaezpewP_Z6f4fW5EYHNzy27MZ$YB;?UeVqrzgOuM&<+g z8XSSdY|kjg0_33u>6-S#)r?2SQ^Uh*Kv?t-3{-*RiTvYQ$~o@`--B9UH<0N>ZT=CB+Z_e7iwJ+!Y_^hG z4bfWm4joT5H$MlCY&y8+Mqy|ABFN_cN2G*tsX941WgKno@2e>*hl2^7=YIPHLPQva zW#yR#Cf8`!0oiOCrN(sp{A1RJi2T}{G_ZSbNHrk%Kic20DQ7XFzwpKp8 z1JxGeX&%bYH1<4=c9tC;DB{Y_SkjJa5fa zNb}7w%CO6_n zGwXFp=Z&cXShr=UIZ-{1VK?$WgKjJ1+eXUjkoIbBJRgT`3`IaguTGHyUMN!LFS~<0 zPZ2ekeA|ogFsiR!rM4VFC5!GkAlo2cCny9O#j@F}9rcvh7cVBTJ1HQUP^gBnE0Cj6XaTfm4vTAr2=H@4n#T zdw*oG$y*Qrd~G@14E8Q_D{n?1TZ3lbr8t|0pCGCI=Y2=v-|g)I$V1RioaLb#6o(6S z7*w8vlqkQ`s%i0AkidE$m=RC~Rm(Zc2$kzTKT%Qnajz$h$F)z>Pu zwi3aPYXq+9xq80b%a?snWi|KvH#`@Mc2zPcor*%Hs;f?YDPvzOYqCN^5e){K7IOBRjw+c4VWet#p?~n>jQ9}Eb*gX_FreIOGYBzSEm3s z=R##&D~)0DN&cF z&E`e6j{+38^+BnaQSli_j@PVJj8jR-3GIeMIor}=KVu!FDE#6CY2dg(4)_Z0yCj%W;}tmeg`l~uoVx*6n}pi8F!B4Y=@U(#7(CByCaM&G zNU!+v<;PJ61d;*&L}-EV3bG(XNa;TFBI0nsIx`JX2z#ibR)!*|KrPt}3RHra3toWu zduR{jFEg#IP&fU-uq>4i>vCxExct?xow9f&C^+%wj2#N}^8aGEvxzN^r$|%_wR5tP zyv9b2lo>#exu{B90qj1qi`MWJlbEw`5I}e1)4FDVPRq98be&<{EpeuT%+`?eC~Vs zh?Z|D3bu?U=rv{>H$;w%sDCDygNsuE!sf{~-(AlQX}HPhkEfm@F2K(;ajkr~UfxZ% z$;!xZX-zeHH-fsbN$FW9L44KLeq;Hs*ArEC5jFcn$V~Afy0ul&)eZ~DWof*E0O)`J z+72KdMP~wMSfS^mUe&h}zt!PBVP_gH&{9JR4`q&+KZ6CGggfvKSJRpQhP&F=2Il}+ z;1!_oa%okXW9SbL4n{mzl2)=7<7*5S==eKbVW@3OdG<0XudD;ww zJbNAkB^V2vqaW+J4w@9!!%GMGhcguC*>HejB9mO_Nf3ArsVu8L#=*rc zuW0}omm|1>FyMrJUYM9W_J$5l%hQdGOVz;olGUoTR)LL?pz^N!Z!(V{rr-%qt zn;o{2+6)dAXkoGyC`;F#J%6s_#Gh=E=qkq2cv3RTucd47DiCgphO;A!JX+#4CSKl= zRo^~X@1G!lz5bU!_w(9#<;vc;jk6PpYVpRJ1(+;^Y}PfjHd5TY>VHLCz2x;L-y0;a zG_8N8e$dHGq^IMx%i1_EDq<})>joLn#>L%XJ!dg9WWME%r6CK<{76V>@=t36Xla-J zCtXrns7{}GCOWby=J^FcqRrc1WY9dAtHLl~58E9^mY^!9qIQy=&tNb; zuD02izKFRW1VjT?zW^mc&&a|e2ipv#t`FBf!3RITanJZr7k789ld(z6euw~rm*NnnXk%>#&VGqH z4`7S5%JwZl_EZ6BP`>~bPF}m+nY_QpjoDx@F_wpL0#L6d{!Okm;>%F5y=7vwsw?V z4aieiShlFd9!SvHivEl{m88})`-4XtMBYBy$QzYTYF*W28RPkyV*PJJ&GW$ZY(ceH z?JC=*S2fM4P+FD-gh|ZDTs5kk;9`_(cRT$gH-(;P1s2= z1Fn?EPg=t$)~A}gNv@Ly&Z;Ku(doi5HKK1G>^gaU*8JM2}^*==!U~LPgiqs$t@o_z_t}sACd8Gd}U~j%)m*{EEN})Tk(ZhCP z^Qx67dd8e-Zv`DW;!&kKTu4P%p{OP-%$_Zho zsP^7>OlSq(VT*@2SmRSXy=0}`r&ins)>aGNqvP|oy*&)7KM!ZsQ>}pqKPw|H5+C6S zqi_uM73e`eS`vR30e1o<>LaevAXZ)`pXqZyvI=Q=6RX8i^~ge0i~|GY8-c zmpDf4I8Np{@6P#66OH{QW#vRo#VCxWsL~LPwW@(ugZ1x`p>)N0x&_PmXpvb%OeN@! zo_orxF8t}glnq#rGRA;)fUFRkD{yF_%Tk2NNn?YWxh-ltTeSNf`y+vzUTtm<_&h!yY`ovM7IAn= zSI6VsRuXPE9_1l7;s700MoM!$j>+yiUFK=qoS9@`x>g0?X`9i4dGj3pwT9b+QIWsR z6ILfM*iQBM@p?dd+oWL5;|J0~0ZQ2yE2f=E{Nv$Dc1QBI;wa5ax9*Si|5;Iy_6cJ;UKRgnUUwJP%Ik{Ky1(gA(D8=DKR*j%wU3uWnicQ-FKYr8#B)ra{q6r=! z))3BW@9vHQ-VKPqit}xoBG1^?#XUOm*a5zLyU_$eRK(ylXFG#;UD%KGg*2nddWcoj zT){v7(y&Nif7~Y(1HGdBjD>nR)o;lQTs6Il))PF+2}O*m#&7N$D|nxJ!e<+tgO`*B zJ*7hK7KLx%_qUqAum+74X|kpJ-8))ZRd9x7>0X|mXqposBAJ^W9WCL-#;Fm%sHmuk z&)s{C>_rwYeu4r4VP)pIh-VDp&TV!hN2R^Jy-TKU7DZko907c;mq_l@U?jG9-7V39 zgL>IGmW}8WrbR9+K&o{&dfIN0Zbb=b&pUTyF7GWqaC5(znHgOU!L99JP>#!_QBKKe z#K-@FuNz{2%<%A{qbb{A2vgXwlzZt+JOc;!uzSLR!iDtove5|-J2durH`1Pry*M`E zQX2xbw6sd)UxE2xkM(5)K2(sGAA%X@04jA!y`BZFKh2_4w1%L-5O$4R?(Lo@pYkt@ z_g)<%=WpQAj9e>MoKZa%(}f}xh+uM#mQrgBoU1M6Dr2s=mEmB)X!xMzPNxOSxlEoz zAqJ zHhD+z0=rV~ZP#C22WF#@ULdtKN?{{Y{az7YKl6N8!$mMNAjtK2ZmZGKM|{Hu4m@pr za~)T4hEl;KZ1vfiCHHTT_FXhDnc%drX^wkF1V?Rkmn+qcb%av}t+Sn}u2Dqawb8rUgxtx*H*;CpQuH z(Vk@7rkY^VNzihc3#MM#&(iFDWf&HWOIG7SWo16TP8&3*l*9B~m|cwb2cygHE7!nw zbDCX!>k<5sMGuGEarmbnCl7%qzF;2;|5K`ec}O7K8q&+!!b@oQp{Ftz z$+I#u;cC1@*give3;&T-2=zVzVeuYxhIM^HFmcCG-g^OBy-Wg{KHe-s0-C7SSM2^~ zgPh9)>7`B*kJ4NRtm$wGf}Y9UX*YW;dDRir6{)Ol_&<-#i^Zotp2eYM~-)ME+{YDNrvT(oT2``Up?4-XdS znu?v>rfYL(I2pwdNZQt?pKDE^v!AD2`E~Kz?Hjj296Cfy3<_O+x2;@6{Pa+-MdBklc-x` zgN&#J@k|6^M-5+^{{;IQibTybSa_lpu(tebLaUyZE)^}NZbqsqDjEPReTupURHg^r zky7p8#=Vxrtn=_A-LlP%g zKTAF_)oAshpC=h7kBBkqLgxz}6JHPX^~HmSR~@!r7`XGC2 z3l*&eD`@{Me_QQijhdA7lk7}^Y6du*QYwl>qiTJI7mA~>aH-Q*f) zoNYm?H=)ed;sGH7ttvPe%sDidb8CB_!t8LeW97cK#5TL%cBiexz zmy+?BR=t~2LN~cB#3Z-_!|6We*T&p`^5ls_r}s`thy)G}gaUJMM4Ey|$m5MyYMAa7b( z`Vfs^>s94wGAz zy3DzA=K_c4G^GsZ3;zDQ5|tR5*KUb>^~U96xvZLBH&8E;F*nVuffOxz#=LjFsYEkN zjfTbF+Jde4BJ$iQm~?ekoh-^isYI#Vb4X( z5p&F3L-@})1 zajeI_`tc8Fwpq6%?W+C=(XrA_yn|7 z9>yhpRs^Ecz3-JtYNlpp$SENv5Bn$@ypnBAq<3SwJqLFp_w?cz=|sUl%J3Cr5MV^Y zA6h^EWf3{dV5y(;v`@F9mWCvx9PBX46UKik060xnk(7h7ww|8 z8!LYW^T;VHJL)w+e)$+w0{2un{l!g+I4ByhhaC$7<6WUAGv`Uz!J(d16lojM$T>Sb zWtJ>k7EQtf(-FwT#6(E9+l55E!OoY&5kHzx1ZcoW*W+)15oJTsw(S~h0sdsu`#OoN z9=98%U`|RyeW7zsWBHz+5UA5wzm<2Y9FlPBs+zyEITVq6ES_UeV;Tn=0OdinHt6&^ z5hz1Ir`J>7c^w&?VqzSuaA>$R(dQS?ME|GW%xKI2o3SKqW1@xU&b?&H_UQCprC^9! z=MiVo4Lt%`y?dh9?kWQRbt?PW6VM~ECI$H^M=oaKyKT_e4Aqh!p(ogXm!RqUc2RpC z?F%t6F(mQeNTqgiV2^O6H?d7VgN5Kvsdz3D|YoE>#i0Qzed_e5^X7?eZ zF&s=SbqQP$JH@0>!yIi9kh|*8PA1Us+AljeBO_y@JP#_ax#x^t>(8GCsg!0`vGZi3mqp$>kE3|+!ED|eiF&#Koj%-$!C~f@0V>4es4SC#o`w)B*6vlTgn7Bd{jjA zu#J`9zy;KaLQcS8SWXR)DV&z_&i0Uwj*cNzbkUAoh^u*_v#BdEJqQ_ZaM)MM)pH>( zh1Pw{V6hhSRSxdc_JkM@`WMuRl#mYNm=j2&RZrj<;qq3($0^$et{Z=R&;r9kz@{l& z2G@?oB91pmd9manHez~hAJj%OVO5A4XTMyi{{}8(su?0S^N1!Kk6OD5TA9?s0|;r) zdC(7Pw;oL)fO5=EH z3pyl{CI0>QzaO;+vO7Ah#6F|NvRioC5i(hLE|+tL)Xq=0YJiHfQ9=dDBwB&UZq-s> zykyDg*6FmfLWL!89#P<&$%Ym)ni0l$wDeTI>aSgJbE<#=>mmc(A{0wx{4cuD99{;Us5U`1oVG4@pb zehY)0tzmiz2btug;|V8)4+nUKl61^s2<8T4&q3dkM{zd0W=;8d9RZ<(7USD+F@l_Fh0Cu#3Zp zPQno40?{A&gDxrMy>!feCEnHayB$HBs^S`?|L=m>n^Y> zDHkH5J!h+#9w$0t?%{kGf8k*={VS$_L zjpMS;&d%7V*sdf-95tFT_viIbec`vx0IL!@-MDUJMP866xdRHx;Gd$Qv=PH;e?pq( zG;}R2IP2JD2;5q~BvVIGgfmO~InbO$Yn-|9M)fzj&sx3?2we-p&uVKqN$oera(Iz} z4llpG{66GrzlODSG*FD4K6AZ7UAo@pZamE@e1bThn!WBo;lhG?LjQuOyXf93OA$_{tizES!?Hum%8@so^a3?F0tUU^UVs z{QN(_vP=7GaKvNNcf7jzK!hyz`rBz@3h#l*Vzs5CJeQ5=6S$@Wpde!$3Y2C%cydh@ z*R)gLzS3JtE!Gc!-Dv(H5a}koe4{j53*ke;2Yj%2UWeM!g*-TIs(5xyw$y@CgN+Fj5K^Z5 zmn;cgGG7aNaL&bH_t7C6;1D&+IlCZ+j&O@-_(Bbch3EP(^wy*_dUUgKb~xO`gJqs8 z6`ZvJsCKN*fbY~DFninCY5p;Z`KEralpm0A!$IUgTL)0tB7Fip{|`B<_gDRh8c=RA zmHPNB5Rl|{{lVd3>FxS9xGRvkT496Jlry0Y#F+gF2k#5vAY%|%*qkk#2T1yN1G7dL zb&FLDQcw$kS{qWZbVzAQN%D%wm5^boJKw#1D}i(*RDGAYAO?VH>^_cW=BY8nK#k^v zyE{8MX=iWNHo0j=89!e@O#Fng11+=zJ;^&FbZH&qEbpz~7Sb(6XVc=B5JHDu2q*|u z%IsYC?Yp*MwW6IfO}Z%Q21(VO-QC@2@m)}+^~?6N&7T7PP_6np5|p%W!lDFe8JWb| zufv_b>zD^^xt5R)G>v`G4bwl3K}x%%3Yrp&Dwb)|E%x_^57nST!-1Y-p4&r$Du4E% zqrC(G-tHvH)<*?rH+ntMdrFWK9$OFRC{;h_q_Qcfv72y?{T+0Fu)`kRv@v&$D@sMgE7DTnn5kA-T%~ih&}HE! z^?3OpF%1$zBY+xpSFc*N%Gb~xf$GJ2H$ZoaMMj~X9=!uA8z`;kFphPpoA7rhXf5A2 z-`vL2O3_SQ-2Q@3_sP=JE!r}#s6h$0oV@$Whj0uo22`&9M1EbebmYtf!&*>sKm#5G zTaO*4@@O?!`HPM`=EK^{0GU`i%|LIO33t0tm~zkM{-Bgn$Q_u_6MrZ}4M1+l_f~%M z>HQu>Oo`LED2Z_9(SV=Eo9<7?7xJNSX!N+Ami%}E&Lw#K19Ro`Fto4{VPq5+MF+`U zJ_ct8{@l+2`AZyky`d~RT(oz5NGr?M4vcO;s=Zxtb}oUEf$=4eURHX{fwrSmsDbcX zF0YfhXlNWQpC5fiSFDIlO-;R+hPYCL@stFsU{yJhDNIDh{C0jO4dKh{|4*OL=w~Ej zLsoy7(}D#^W?W92!A7hT2J`VSt*ED`=@Ik~k5smx+B1|cOOo*K3{A!IkYbvC=}^nS zA>@AW&?(}nO#y;AF8Bp$7BiM0tW~dWZVFOLPN7EP>t$3hrPDKka9*O33Iui!v zLE~|(Z5zYH)YNU9rZ0(Mai@!!*)LqmESroG)Q6-3b)x)R^Oip$6$joiM!f*;p9l<5 znUi*d&G0wF=+&(qZNhxEjjf1nmo8gK8OskL-ID1f9@Rwzk@R*U?1t<615nHnb%mxZ8mYtEgi zsb6`We2|9`Wr1K%#T~e{;87h#0b93Lt?4w%8FazA1)5wbtH=!D>FNZ4E!J7_-Mbq= zO%D!Mf&Tn<#{^KN>7u*qHf)fyb79_Sx|i8l@k1BHs zhd-`I76fjyd4iObDDK7X;LEXywk-Kb77o^C>1rel~OMW@ZPSp9>7W z)yT29GW?TwJ2NVes}z2)&V~U=Se7Py9dP>eX@BXlu`#(QlorLyRD^j>(x3kMCk75Y z(n4>xnx~14ru^%v$HRnHtW57GS`J^NE4HCDHHrs0SzdP`f(hhU{X{L{U337t3rRN{ zbk@3p|F$f}<|HBPe(coM(wSxv&4;ke8$Li8P6GjctNud!vzg>hEcu@GOllRYdEwNe zpi&M85B^M{Zz;mzx2UdJ1rkNA6d*)=YTiSIr=DYk)2=~qAbcp)4zE9vA4KG{$(C?H z5rf~5g~@b@Z&sympI=`QEEiQUF`T$S%>B>1YZ?LJl&}@>Djc7BlA4Jp6_5`5D830q z zYA>fe$g83u@Ro)4c;0`VYQek0AU*bAEBf|N;wQ2b|moKAExQ4*_5$yt6lY>%2jUE30xI`lyS(>n%8EocyW|fXW zhK>N?&6#!!+W)}1JO;W!9EPI;|5yi0Bvq>n8%=!2 z{N=I-Db&1hV`^xO2k?-zMYqm^y_H1<&l|)*9C{Xe4oP$%tKlo)|({DbudvcinWq#=W z?>fkTnsn@IJG4*2sqSvk3dU9rI7{;Psh#_y#nd)pMgR5%h4@xYdHGOT+!npG4`B}R`k!2+=Q1B()M^*feXIVA zWxC4s3D+=bTJz84%b89ca(_Vd`D2KEJui zCYEi=8Za8m?I~z&5c23=c}JPX%Gnz5^lJCVD|}&=OOj2%s*|O0_m}6jhTxM;mn>7= zkce{AW@Ps|Imeuq>=T>0PPg_8oqkjmBHh{IVr$9A-&uv-TmHSJy+)`cL$77mzTED2 f{}&SyJ33?L!Qi1;#&53C#Z{D!9ZcA7`qO^^nMErM literal 0 HcmV?d00001 diff --git a/localization/ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json b/localization/ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json index d978e5bcf7357..cbee3b5da72aa 100644 --- a/localization/ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json +++ b/localization/ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json @@ -5,10 +5,12 @@ "covariance_estimation": { "type": "object", "properties": { - "enable": { - "type": "boolean", - "description": "2D Real-time covariance estimation with multiple searches (output_pose_covariance is the minimum value).", - "default": false + "covariance_estimation_type": { + "type": "number", + "description": "2D Real-time Converged estimation type. 0=FIXED_VALUE, 1=LAPLACE_APPROXIMATION, 2=MULTI_NDT, 3=MULTI_NDT_SCORE (FIXED_VALUE mode does not perform 2D Real-time Converged estimation)", + "default": 0, + "minimum": 0, + "maximum": 3 }, "initial_pose_offset_model_x": { "type": "array", @@ -19,9 +21,20 @@ "type": "array", "description": "Offset arrangement in covariance estimation [m]. initial_pose_offset_model_x & initial_pose_offset_model_y must have the same number of elements.", "default": [0.5, -0.5, 0.0, 0.0, 0.0, 0.0] + }, + "temperature": { + "type": "number", + "description": "In MULTI_NDT_SCORE, the parameter that adjusts the estimated 2D covariance", + "default": 0.1, + "exclusiveMinimum": 0 } }, - "required": ["enable", "initial_pose_offset_model_x", "initial_pose_offset_model_y"], + + "required": [ + "covariance_estimation_type", + "initial_pose_offset_model_x", + "initial_pose_offset_model_y" + ], "additionalProperties": false } } diff --git a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp index ca486a320d9dc..6d34f666b997b 100644 --- a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp +++ b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp @@ -21,6 +21,7 @@ #include #include +#include #include @@ -566,11 +567,17 @@ bool NDTScanMatcher::callback_sensor_points_main( std::array ndt_covariance = rotate_covariance(param_.covariance.output_pose_covariance, map_to_base_link_rotation); - - if (is_converged && param_.covariance.covariance_estimation.enable) { - const auto estimated_covariance = + if ( + param_.covariance.covariance_estimation.covariance_estimation_type != + CovarianceEstimationType::FIXED_VALUE) { + const Eigen::Matrix2d estimated_covariance_2d = estimate_covariance(ndt_result, initial_pose_matrix, sensor_ros_time); - ndt_covariance = estimated_covariance; + const Eigen::Matrix2d estimated_covariance_2d_adj = + pclomp::adjust_diagonal_covariance(estimated_covariance_2d, ndt_result.pose, 0.0225, 0.0225); + ndt_covariance[0 + 6 * 0] = estimated_covariance_2d_adj(0, 0); + ndt_covariance[1 + 6 * 1] = estimated_covariance_2d_adj(1, 1); + ndt_covariance[1 + 6 * 0] = estimated_covariance_2d_adj(1, 0); + ndt_covariance[0 + 6 * 1] = estimated_covariance_2d_adj(0, 1); } // check distance_initial_to_result @@ -807,7 +814,7 @@ int NDTScanMatcher::count_oscillation( return max_oscillation_cnt; } -std::array NDTScanMatcher::estimate_covariance( +Eigen::Matrix2d NDTScanMatcher::estimate_covariance( const pclomp::NdtResult & ndt_result, const Eigen::Matrix4f & initial_pose_matrix, const rclcpp::Time & sensor_ros_time) { @@ -819,19 +826,9 @@ std::array NDTScanMatcher::estimate_covariance( std::stringstream message; message << "Error in Eigen solver: " << e.what(); RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, message.str()); - - return param_.covariance.output_pose_covariance; + return Eigen::Matrix2d::Identity() * param_.covariance.output_pose_covariance[0 + 6 * 0]; } - // first result is added to mean - const int n = - static_cast(param_.covariance.covariance_estimation.initial_pose_offset_model.size()) + 1; - const Eigen::Vector2d ndt_pose_2d(ndt_result.pose(0, 3), ndt_result.pose(1, 3)); - Eigen::Vector2d mean = ndt_pose_2d; - std::vector ndt_pose_2d_vec; - ndt_pose_2d_vec.reserve(n); - ndt_pose_2d_vec.emplace_back(ndt_pose_2d); - geometry_msgs::msg::PoseArray multi_ndt_result_msg; geometry_msgs::msg::PoseArray multi_initial_pose_msg; multi_ndt_result_msg.header.stamp = sensor_ros_time; @@ -841,47 +838,45 @@ std::array NDTScanMatcher::estimate_covariance( multi_ndt_result_msg.poses.push_back(matrix4f_to_pose(ndt_result.pose)); multi_initial_pose_msg.poses.push_back(matrix4f_to_pose(initial_pose_matrix)); - // multiple searches - for (const auto & pose_offset : - param_.covariance.covariance_estimation.initial_pose_offset_model) { - const Eigen::Vector2d rotated_pose_offset_2d = rot * pose_offset; - - Eigen::Matrix4f sub_initial_pose_matrix(Eigen::Matrix4f::Identity()); - sub_initial_pose_matrix = ndt_result.pose; - sub_initial_pose_matrix(0, 3) += static_cast(rotated_pose_offset_2d.x()); - sub_initial_pose_matrix(1, 3) += static_cast(rotated_pose_offset_2d.y()); - - auto sub_output_cloud = std::make_shared>(); - ndt_ptr_->align(*sub_output_cloud, sub_initial_pose_matrix); - const Eigen::Matrix4f sub_ndt_result = ndt_ptr_->getResult().pose; - - const Eigen::Vector2d sub_ndt_pose_2d = sub_ndt_result.topRightCorner<2, 1>().cast(); - mean += sub_ndt_pose_2d; - ndt_pose_2d_vec.emplace_back(sub_ndt_pose_2d); - - multi_ndt_result_msg.poses.push_back(matrix4f_to_pose(sub_ndt_result)); - multi_initial_pose_msg.poses.push_back(matrix4f_to_pose(sub_initial_pose_matrix)); - } - - // calculate the covariance matrix - mean /= n; - Eigen::Matrix2d pca_covariance = Eigen::Matrix2d::Zero(); - for (const auto & temp_ndt_pose_2d : ndt_pose_2d_vec) { - const Eigen::Vector2d diff_2d = temp_ndt_pose_2d - mean; - pca_covariance += diff_2d * diff_2d.transpose(); + if ( + param_.covariance.covariance_estimation.covariance_estimation_type == + CovarianceEstimationType::LAPLACE_APPROXIMATION) { + return pclomp::estimate_xy_covariance_by_Laplace_approximation(ndt_result.hessian); + } else if ( + param_.covariance.covariance_estimation.covariance_estimation_type == + CovarianceEstimationType::MULTI_NDT) { + const std::vector poses_to_search = pclomp::propose_poses_to_search( + ndt_result, param_.covariance.covariance_estimation.initial_pose_offset_model_x, + param_.covariance.covariance_estimation.initial_pose_offset_model_y); + const pclomp::ResultOfMultiNdtCovarianceEstimation result_of_multi_ndt_covariance_estimation = + estimate_xy_covariance_by_multi_ndt(ndt_result, ndt_ptr_, poses_to_search); + for (size_t i = 0; i < result_of_multi_ndt_covariance_estimation.ndt_initial_poses.size(); + i++) { + multi_ndt_result_msg.poses.push_back( + matrix4f_to_pose(result_of_multi_ndt_covariance_estimation.ndt_results[i].pose)); + multi_initial_pose_msg.poses.push_back( + matrix4f_to_pose(result_of_multi_ndt_covariance_estimation.ndt_initial_poses[i])); + } + multi_ndt_pose_pub_->publish(multi_ndt_result_msg); + multi_initial_pose_pub_->publish(multi_initial_pose_msg); + return result_of_multi_ndt_covariance_estimation.covariance; + } else if ( + param_.covariance.covariance_estimation.covariance_estimation_type == + CovarianceEstimationType::MULTI_NDT_SCORE) { + const std::vector poses_to_search = pclomp::propose_poses_to_search( + ndt_result, param_.covariance.covariance_estimation.initial_pose_offset_model_x, + param_.covariance.covariance_estimation.initial_pose_offset_model_y); + const pclomp::ResultOfMultiNdtCovarianceEstimation + result_of_multi_ndt_score_covariance_estimation = estimate_xy_covariance_by_multi_ndt_score( + ndt_result, ndt_ptr_, poses_to_search, param_.covariance.covariance_estimation.temperature); + for (const auto & sub_initial_pose_matrix : poses_to_search) { + multi_initial_pose_msg.poses.push_back(matrix4f_to_pose(sub_initial_pose_matrix)); + } + multi_initial_pose_pub_->publish(multi_initial_pose_msg); + return result_of_multi_ndt_score_covariance_estimation.covariance; + } else { + return Eigen::Matrix2d::Identity() * param_.covariance.output_pose_covariance[0 + 6 * 0]; } - pca_covariance /= (n - 1); // unbiased covariance - - std::array ndt_covariance = param_.covariance.output_pose_covariance; - ndt_covariance[0 + 6 * 0] += pca_covariance(0, 0); - ndt_covariance[1 + 6 * 0] += pca_covariance(1, 0); - ndt_covariance[0 + 6 * 1] += pca_covariance(0, 1); - ndt_covariance[1 + 6 * 1] += pca_covariance(1, 1); - - multi_ndt_pose_pub_->publish(multi_ndt_result_msg); - multi_initial_pose_pub_->publish(multi_initial_pose_msg); - - return ndt_covariance; } void NDTScanMatcher::add_regularization_pose(const rclcpp::Time & sensor_ros_time) From 824c3036fe585ca8378b61daf6750e4988e3e68e Mon Sep 17 00:00:00 2001 From: Tao Zhong <55872497+tzhong518@users.noreply.github.com> Date: Fri, 5 Jul 2024 17:39:37 +0900 Subject: [PATCH 092/306] feat(pointpainting_fusion): add test for painting util (#7169) * add: unit test for inside bbox func Signed-off-by: tzhong518 * style(pre-commit): autofix * fix: correct param name Signed-off-by: tzhong518 * add: comment Signed-off-by: tzhong518 --------- Signed-off-by: tzhong518 Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../CMakeLists.txt | 7 +++ .../pointpainting_fusion/node.hpp | 8 +++ .../src/pointpainting_fusion/node.cpp | 7 --- .../test/test_pointpainting_fusion.cpp | 56 +++++++++++++++++++ 4 files changed, 71 insertions(+), 7 deletions(-) create mode 100644 perception/image_projection_based_fusion/test/test_pointpainting_fusion.cpp diff --git a/perception/image_projection_based_fusion/CMakeLists.txt b/perception/image_projection_based_fusion/CMakeLists.txt index b6dfbaf402cc8..6be7defe422c3 100644 --- a/perception/image_projection_based_fusion/CMakeLists.txt +++ b/perception/image_projection_based_fusion/CMakeLists.txt @@ -172,6 +172,13 @@ if(BUILD_TESTING) ament_auto_add_gtest(test_geometry test/test_geometry.cpp ) + # test needed cuda, tensorRT and cudnn + if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) + ament_auto_add_gtest(test_pointpainting + test/test_pointpainting_fusion.cpp + ) + endif() + endif() ament_auto_package(INSTALL_TO_SHARE diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/node.hpp b/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/node.hpp index a4e6f315a36d6..756cb4224bc20 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/node.hpp +++ b/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/node.hpp @@ -33,6 +33,14 @@ namespace image_projection_based_fusion { using Label = autoware_perception_msgs::msg::ObjectClassification; +inline bool isInsideBbox( + float proj_x, float proj_y, sensor_msgs::msg::RegionOfInterest roi, float zc) +{ + // z_c is scaling to normalize projection point + return proj_x >= roi.x_offset * zc && proj_x <= (roi.x_offset + roi.width) * zc && + proj_y >= roi.y_offset * zc && proj_y <= (roi.y_offset + roi.height) * zc; +} + class PointPaintingFusionNode : public FusionNode { diff --git a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp index a7c83ac7614a8..0f3a50628ccbc 100644 --- a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp @@ -45,13 +45,6 @@ Eigen::Affine3f _transformToEigen(const geometry_msgs::msg::Transform & t) namespace image_projection_based_fusion { -inline bool isInsideBbox( - float proj_x, float proj_y, sensor_msgs::msg::RegionOfInterest roi, float zc) -{ - return proj_x >= roi.x_offset * zc && proj_x <= (roi.x_offset + roi.width) * zc && - proj_y >= roi.y_offset * zc && proj_y <= (roi.y_offset + roi.height) * zc; -} - inline bool isVehicle(int label2d) { return label2d == autoware_perception_msgs::msg::ObjectClassification::CAR || diff --git a/perception/image_projection_based_fusion/test/test_pointpainting_fusion.cpp b/perception/image_projection_based_fusion/test/test_pointpainting_fusion.cpp new file mode 100644 index 0000000000000..1c69273667997 --- /dev/null +++ b/perception/image_projection_based_fusion/test/test_pointpainting_fusion.cpp @@ -0,0 +1,56 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include + +sensor_msgs::msg::RegionOfInterest createRoi( + const int32_t x_offset, const int32_t y_offset, const int32_t width, const int32_t height) +{ + sensor_msgs::msg::RegionOfInterest roi; + roi.x_offset = x_offset; + roi.y_offset = y_offset; + roi.width = width; + roi.height = height; + return roi; +} + +TEST(isInsideBboxTest, Inside) +{ + const sensor_msgs::msg::RegionOfInterest roi = createRoi(20, 20, 10, 10); + bool result = image_projection_based_fusion::isInsideBbox(25.0, 25.0, roi, 1.0); + EXPECT_TRUE(result); +} + +TEST(isInsideBboxTest, Border) +{ + const sensor_msgs::msg::RegionOfInterest roi = createRoi(20, 20, 10, 10); + bool result = image_projection_based_fusion::isInsideBbox(20.0, 30.0, roi, 1.0); + EXPECT_TRUE(result); +} + +TEST(isInsideBboxTest, Outside) +{ + const sensor_msgs::msg::RegionOfInterest roi = createRoi(20, 20, 10, 10); + bool result = image_projection_based_fusion::isInsideBbox(15.0, 15.0, roi, 1.0); + EXPECT_FALSE(result); +} + +TEST(isInsideBboxTest, Zero) +{ + const sensor_msgs::msg::RegionOfInterest roi = createRoi(0, 0, 0, 0); + bool result = image_projection_based_fusion::isInsideBbox(0.0, 0.0, roi, 1.0); + EXPECT_TRUE(result); +} From acf800120b0e815cb48bf5e2f9a9f8f2b2901a11 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Fri, 5 Jul 2024 18:30:35 +0900 Subject: [PATCH 093/306] refactor(shape_estimation)!: fix namespace and directory structure (#7844) * chore: Update shape_estimation library and node names refactor: relocate headers refactor: add namespace refactor: update shape_estimation namespace on the user side Signed-off-by: Taekjin LEE * refactor: update namespace of the node refactor: update namespace of the node refactor: update namespace and directory structure for detection_by_tracker node Signed-off-by: Taekjin LEE * refactor: update namespace and directory structure for detection_by_tracker node Signed-off-by: Taekjin LEE * Update perception/detection_by_tracker/src/tracker/tracker_handler.hpp Co-authored-by: Yoshi Ri Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE Co-authored-by: Yoshi Ri --- .../detection_by_tracker/CMakeLists.txt | 14 +-- .../src/debugger/debugger.hpp | 2 - .../src/detection_by_tracker_node.cpp | 77 ++-------------- .../src/detection_by_tracker_node.hpp | 21 +---- .../src/tracker/tracker_handler.cpp | 88 +++++++++++++++++++ .../utils.cpp => tracker/tracker_handler.hpp} | 35 +++++--- .../detection_by_tracker/src/utils/utils.hpp | 15 +++- perception/shape_estimation/CMakeLists.txt | 26 +++--- perception/shape_estimation/README.md | 2 +- .../corrector/bicycle_corrector.hpp | 16 +++- .../corrector/bus_corrector.hpp | 16 ++-- .../corrector/car_corrector.hpp | 16 +++- .../shape_estimation/corrector/corrector.hpp | 27 ++++++ .../corrector/corrector_interface.hpp | 14 ++- .../corrector/no_corrector.hpp | 22 +++-- .../reference_shape_size_corrector.hpp | 17 ++-- .../corrector/trailer_corrector.hpp | 16 +++- .../corrector/truck_corrector.hpp | 16 +++- .../shape_estimation/corrector/utils.hpp | 13 ++- .../corrector/vehicle_corrector.hpp | 18 ++-- .../shape_estimation/filter/bus_filter.hpp | 15 +++- .../shape_estimation/filter/car_filter.hpp | 15 +++- .../shape_estimation/filter/filter.hpp | 25 ++++++ .../filter/filter_interface.hpp | 14 ++- .../shape_estimation/filter/no_filter.hpp | 23 +++-- .../filter/trailer_filter.hpp | 14 ++- .../shape_estimation/filter/truck_filter.hpp | 15 ++-- .../shape_estimation/filter/utils.hpp | 10 ++- .../shape_estimation/model/bounding_box.hpp | 18 ++-- .../shape_estimation/model/convex_hull.hpp | 16 +++- .../shape_estimation/model/cylinder.hpp | 16 +++- .../shape_estimation/model/model.hpp | 14 +-- .../model/model_interface.hpp | 14 ++- .../shape_estimation/shape_estimator.hpp | 10 ++- .../shape_estimation/corrector/corrector.hpp | 27 ------ .../shape_estimation/filter/filter.hpp | 25 ------ .../launch/shape_estimation.launch.xml | 2 +- .../lib/corrector/no_corrector.cpp | 9 +- .../shape_estimation/lib/corrector/utils.cpp | 16 ++-- .../lib/filter/bus_filter.cpp | 10 ++- .../lib/filter/car_filter.cpp | 9 +- .../shape_estimation/lib/filter/no_filter.cpp | 9 +- .../lib/filter/trailer_filter.cpp | 10 ++- .../lib/filter/truck_filter.cpp | 10 ++- .../shape_estimation/lib/filter/utils.cpp | 6 +- .../lib/model/bounding_box.cpp | 18 ++-- .../lib/model/convex_hull.cpp | 10 ++- .../shape_estimation/lib/model/cylinder.cpp | 10 ++- .../shape_estimation/lib/shape_estimator.cpp | 50 ++++++----- .../{node.cpp => shape_estimation_node.cpp} | 14 +-- .../{node.hpp => shape_estimation_node.hpp} | 12 ++- .../shape_estimation/test_shape_estimator.cpp | 34 +++---- 52 files changed, 609 insertions(+), 362 deletions(-) create mode 100644 perception/detection_by_tracker/src/tracker/tracker_handler.cpp rename perception/detection_by_tracker/src/{utils/utils.cpp => tracker/tracker_handler.hpp} (50%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/bicycle_corrector.hpp (74%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/bus_corrector.hpp (73%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/car_corrector.hpp (74%) create mode 100644 perception/shape_estimation/include/autoware/shape_estimation/corrector/corrector.hpp rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/corrector_interface.hpp (73%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/no_corrector.hpp (58%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/reference_shape_size_corrector.hpp (70%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/trailer_corrector.hpp (77%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/truck_corrector.hpp (74%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/utils.hpp (82%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/corrector/vehicle_corrector.hpp (75%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/filter/bus_filter.hpp (70%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/filter/car_filter.hpp (70%) create mode 100644 perception/shape_estimation/include/autoware/shape_estimation/filter/filter.hpp rename perception/shape_estimation/include/{ => autoware}/shape_estimation/filter/filter_interface.hpp (75%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/filter/no_filter.hpp (58%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/filter/trailer_filter.hpp (70%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/filter/truck_filter.hpp (70%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/filter/utils.hpp (77%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/model/bounding_box.hpp (80%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/model/convex_hull.hpp (71%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/model/cylinder.hpp (74%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/model/model.hpp (60%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/model/model_interface.hpp (78%) rename perception/shape_estimation/include/{ => autoware}/shape_estimation/shape_estimator.hpp (90%) delete mode 100644 perception/shape_estimation/include/shape_estimation/corrector/corrector.hpp delete mode 100644 perception/shape_estimation/include/shape_estimation/filter/filter.hpp rename perception/shape_estimation/src/{node.cpp => shape_estimation_node.cpp} (93%) rename perception/shape_estimation/src/{node.hpp => shape_estimation_node.hpp} (88%) diff --git a/perception/detection_by_tracker/CMakeLists.txt b/perception/detection_by_tracker/CMakeLists.txt index 112187551d924..c019b2be77587 100644 --- a/perception/detection_by_tracker/CMakeLists.txt +++ b/perception/detection_by_tracker/CMakeLists.txt @@ -17,21 +17,15 @@ find_package(eigen3_cmake_module REQUIRED) find_package(Eigen3 REQUIRED) include_directories( - include SYSTEM ${EIGEN3_INCLUDE_DIRS} ${PCL_COMMON_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS} ) -# Generate exe file -set(DETECTION_BY_TRACKER_SRC - src/detection_by_tracker_node.cpp - src/utils/utils.cpp -) - ament_auto_add_library(${PROJECT_NAME} SHARED - ${DETECTION_BY_TRACKER_SRC} + src/detection_by_tracker_node.cpp + src/tracker/tracker_handler.cpp ) target_link_libraries(${PROJECT_NAME} @@ -43,9 +37,7 @@ rclcpp_components_register_node(${PROJECT_NAME} PLUGIN "autoware::detection_by_tracker::DetectionByTracker" EXECUTABLE detection_by_tracker_node ) - -ament_auto_package( - INSTALL_TO_SHARE +ament_auto_package(INSTALL_TO_SHARE launch config ) diff --git a/perception/detection_by_tracker/src/debugger/debugger.hpp b/perception/detection_by_tracker/src/debugger/debugger.hpp index 242056c3ca316..56f37fb10043d 100644 --- a/perception/detection_by_tracker/src/debugger/debugger.hpp +++ b/perception/detection_by_tracker/src/debugger/debugger.hpp @@ -20,7 +20,6 @@ #include "euclidean_cluster/euclidean_cluster.hpp" #include "euclidean_cluster/utils.hpp" #include "euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" -#include "shape_estimation/shape_estimator.hpp" #include @@ -46,7 +45,6 @@ #include #include #include - namespace autoware::detection_by_tracker { class Debugger diff --git a/perception/detection_by_tracker/src/detection_by_tracker_node.cpp b/perception/detection_by_tracker/src/detection_by_tracker_node.cpp index c41d6002d9266..c22d015aa11a4 100644 --- a/perception/detection_by_tracker/src/detection_by_tracker_node.cpp +++ b/perception/detection_by_tracker/src/detection_by_tracker_node.cpp @@ -56,24 +56,26 @@ autoware_perception_msgs::msg::Shape extendShape( return output; } -boost::optional getReferenceYawInfo(const uint8_t label, const float yaw) +boost::optional getReferenceYawInfo( + const uint8_t label, const float yaw) { const bool is_vehicle = Label::CAR == label || Label::TRUCK == label || Label::BUS == label || Label::TRAILER == label; if (is_vehicle) { - return ReferenceYawInfo{yaw, autoware::universe_utils::deg2rad(30)}; + return autoware::shape_estimation::ReferenceYawInfo{yaw, autoware::universe_utils::deg2rad(30)}; } else { return boost::none; } } -boost::optional getReferenceShapeSizeInfo( +boost::optional getReferenceShapeSizeInfo( const uint8_t label, const autoware_perception_msgs::msg::Shape & shape) { const bool is_vehicle = Label::CAR == label || Label::TRUCK == label || Label::BUS == label || Label::TRAILER == label; if (is_vehicle) { - return ReferenceShapeSizeInfo{shape, ReferenceShapeSizeInfo::Mode::Min}; + return autoware::shape_estimation::ReferenceShapeSizeInfo{ + shape, autoware::shape_estimation::ReferenceShapeSizeInfo::Mode::Min}; } else { return boost::none; } @@ -83,70 +85,6 @@ boost::optional getReferenceShapeSizeInfo( namespace autoware::detection_by_tracker { -void TrackerHandler::onTrackedObjects( - const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr msg) -{ - constexpr size_t max_buffer_size = 10; - - // Add tracked objects to buffer - objects_buffer_.push_front(*msg); - - // Remove old data - while (max_buffer_size < objects_buffer_.size()) { - objects_buffer_.pop_back(); - } -} - -bool TrackerHandler::estimateTrackedObjects( - const rclcpp::Time & time, autoware_perception_msgs::msg::TrackedObjects & output) -{ - if (objects_buffer_.empty()) { - return false; - } - - // Get the objects closest to the target time. - const auto target_objects_iter = std::min_element( - objects_buffer_.cbegin(), objects_buffer_.cend(), - [&time]( - autoware_perception_msgs::msg::TrackedObjects first, - autoware_perception_msgs::msg::TrackedObjects second) { - return std::fabs((time - first.header.stamp).seconds()) < - std::fabs((time - second.header.stamp).seconds()); - }); - - // Estimate the pose of the object at the target time - const auto dt = time - target_objects_iter->header.stamp; - output.header.frame_id = target_objects_iter->header.frame_id; - output.header.stamp = time; - for (const auto & object : target_objects_iter->objects) { - const auto & pose_with_covariance = object.kinematics.pose_with_covariance; - const auto & x = pose_with_covariance.pose.position.x; - const auto & y = pose_with_covariance.pose.position.y; - const auto & z = pose_with_covariance.pose.position.z; - const float yaw = tf2::getYaw(pose_with_covariance.pose.orientation); - const auto & twist = object.kinematics.twist_with_covariance.twist; - const float & vx = twist.linear.x; - const float & wz = twist.angular.z; - - // build output - autoware_perception_msgs::msg::TrackedObject estimated_object; - estimated_object.object_id = object.object_id; - estimated_object.existence_probability = object.existence_probability; - estimated_object.classification = object.classification; - estimated_object.shape = object.shape; - estimated_object.kinematics.pose_with_covariance.pose.position.x = - x + vx * std::cos(yaw) * dt.seconds(); - estimated_object.kinematics.pose_with_covariance.pose.position.y = - y + vx * std::sin(yaw) * dt.seconds(); - estimated_object.kinematics.pose_with_covariance.pose.position.z = z; - const float yaw_hat = autoware::universe_utils::normalizeRadian(yaw + wz * dt.seconds()); - estimated_object.kinematics.pose_with_covariance.pose.orientation = - autoware::universe_utils::createQuaternionFromYaw(yaw_hat); - output.objects.push_back(estimated_object); - } - return true; -} - DetectionByTracker::DetectionByTracker(const rclcpp::NodeOptions & node_options) : rclcpp::Node("detection_by_tracker", node_options), tf_buffer_(this->get_clock()), @@ -176,7 +114,7 @@ DetectionByTracker::DetectionByTracker(const rclcpp::NodeOptions & node_options) // set maximum search setting for merger/divider setMaxSearchRange(); - shape_estimator_ = std::make_shared(true, true); + shape_estimator_ = std::make_shared(true, true); cluster_ = std::make_shared( false, 10, 10000, 0.7, 0.3, 0); debugger_ = std::make_shared(this); @@ -468,7 +406,6 @@ void DetectionByTracker::mergeOverSegmentedObjects( out_objects.feature_objects.push_back(feature_object); } } - } // namespace autoware::detection_by_tracker #include diff --git a/perception/detection_by_tracker/src/detection_by_tracker_node.hpp b/perception/detection_by_tracker/src/detection_by_tracker_node.hpp index 4e58d53fa71aa..095708fb4b51f 100644 --- a/perception/detection_by_tracker/src/detection_by_tracker_node.hpp +++ b/perception/detection_by_tracker/src/detection_by_tracker_node.hpp @@ -15,12 +15,13 @@ #ifndef DETECTION_BY_TRACKER_NODE_HPP_ #define DETECTION_BY_TRACKER_NODE_HPP_ +#include "autoware/shape_estimation/shape_estimator.hpp" #include "autoware/universe_utils/ros/published_time_publisher.hpp" #include "debugger/debugger.hpp" #include "euclidean_cluster/euclidean_cluster.hpp" #include "euclidean_cluster/utils.hpp" #include "euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" -#include "shape_estimation/shape_estimator.hpp" +#include "tracker/tracker_handler.hpp" #include "utils/utils.hpp" #include @@ -52,19 +53,6 @@ namespace autoware::detection_by_tracker { -class TrackerHandler -{ -private: - std::deque objects_buffer_; - -public: - TrackerHandler() = default; - void onTrackedObjects( - const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr input_objects_msg); - bool estimateTrackedObjects( - const rclcpp::Time & time, autoware_perception_msgs::msg::TrackedObjects & output); -}; - class DetectionByTracker : public rclcpp::Node { public: @@ -80,13 +68,13 @@ class DetectionByTracker : public rclcpp::Node tf2_ros::TransformListener tf_listener_; TrackerHandler tracker_handler_; - std::shared_ptr shape_estimator_; + std::shared_ptr shape_estimator_; std::shared_ptr cluster_; std::shared_ptr debugger_; std::map max_search_distance_for_merger_; std::map max_search_distance_for_divider_; - utils::TrackerIgnoreLabel tracker_ignore_; + detection_by_tracker::utils::TrackerIgnoreLabel tracker_ignore_; std::unique_ptr published_time_publisher_; @@ -112,7 +100,6 @@ class DetectionByTracker : public rclcpp::Node autoware_perception_msgs::msg::DetectedObjects & out_no_found_tracked_objects, tier4_perception_msgs::msg::DetectedObjectsWithFeature & out_objects); }; - } // namespace autoware::detection_by_tracker #endif // DETECTION_BY_TRACKER_NODE_HPP_ diff --git a/perception/detection_by_tracker/src/tracker/tracker_handler.cpp b/perception/detection_by_tracker/src/tracker/tracker_handler.cpp new file mode 100644 index 0000000000000..a099c8b1ba55d --- /dev/null +++ b/perception/detection_by_tracker/src/tracker/tracker_handler.cpp @@ -0,0 +1,88 @@ +// Copyright 2021 Tier IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "tracker_handler.hpp" + +#include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/math/normalization.hpp" + +#include + +namespace autoware::detection_by_tracker +{ + +void TrackerHandler::onTrackedObjects( + const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr msg) +{ + constexpr size_t max_buffer_size = 10; + + // Add tracked objects to buffer + objects_buffer_.push_front(*msg); + + // Remove old data + while (max_buffer_size < objects_buffer_.size()) { + objects_buffer_.pop_back(); + } +} + +bool TrackerHandler::estimateTrackedObjects( + const rclcpp::Time & time, autoware_perception_msgs::msg::TrackedObjects & output) +{ + if (objects_buffer_.empty()) { + return false; + } + + // Get the objects closest to the target time. + const auto target_objects_iter = std::min_element( + objects_buffer_.cbegin(), objects_buffer_.cend(), + [&time]( + autoware_perception_msgs::msg::TrackedObjects first, + autoware_perception_msgs::msg::TrackedObjects second) { + return std::fabs((time - first.header.stamp).seconds()) < + std::fabs((time - second.header.stamp).seconds()); + }); + + // Estimate the pose of the object at the target time + const auto dt = time - target_objects_iter->header.stamp; + output.header.frame_id = target_objects_iter->header.frame_id; + output.header.stamp = time; + for (const auto & object : target_objects_iter->objects) { + const auto & pose_with_covariance = object.kinematics.pose_with_covariance; + const auto & x = pose_with_covariance.pose.position.x; + const auto & y = pose_with_covariance.pose.position.y; + const auto & z = pose_with_covariance.pose.position.z; + const float yaw = tf2::getYaw(pose_with_covariance.pose.orientation); + const auto & twist = object.kinematics.twist_with_covariance.twist; + const float & vx = twist.linear.x; + const float & wz = twist.angular.z; + + // build output + autoware_perception_msgs::msg::TrackedObject estimated_object; + estimated_object.object_id = object.object_id; + estimated_object.existence_probability = object.existence_probability; + estimated_object.classification = object.classification; + estimated_object.shape = object.shape; + estimated_object.kinematics.pose_with_covariance.pose.position.x = + x + vx * std::cos(yaw) * dt.seconds(); + estimated_object.kinematics.pose_with_covariance.pose.position.y = + y + vx * std::sin(yaw) * dt.seconds(); + estimated_object.kinematics.pose_with_covariance.pose.position.z = z; + const float yaw_hat = autoware::universe_utils::normalizeRadian(yaw + wz * dt.seconds()); + estimated_object.kinematics.pose_with_covariance.pose.orientation = + autoware::universe_utils::createQuaternionFromYaw(yaw_hat); + output.objects.push_back(estimated_object); + } + return true; +} +} // namespace autoware::detection_by_tracker diff --git a/perception/detection_by_tracker/src/utils/utils.cpp b/perception/detection_by_tracker/src/tracker/tracker_handler.hpp similarity index 50% rename from perception/detection_by_tracker/src/utils/utils.cpp rename to perception/detection_by_tracker/src/tracker/tracker_handler.hpp index b269d703be7d4..13aa00aaf0c4c 100644 --- a/perception/detection_by_tracker/src/utils/utils.cpp +++ b/perception/detection_by_tracker/src/tracker/tracker_handler.hpp @@ -1,4 +1,4 @@ -// Copyright 2023 TIER IV, Inc. +// Copyright 2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,22 +12,31 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "utils.hpp" +#ifndef TRACKER__TRACKER_HANDLER_HPP_ +#define TRACKER__TRACKER_HANDLER_HPP_ -#include +#include + +#include "autoware_perception_msgs/msg/tracked_objects.hpp" + +#include namespace autoware::detection_by_tracker { -namespace utils -{ -using Label = autoware_perception_msgs::msg::ObjectClassification; -bool TrackerIgnoreLabel::isIgnore(const uint8_t label) const +class TrackerHandler { - return (label == Label::UNKNOWN && UNKNOWN) || (label == Label::CAR && CAR) || - (label == Label::TRUCK && TRUCK) || (label == Label::BUS && BUS) || - (label == Label::TRAILER && TRAILER) || (label == Label::MOTORCYCLE && MOTORCYCLE) || - (label == Label::BICYCLE && BICYCLE) || (label == Label::PEDESTRIAN && PEDESTRIAN); -} -} // namespace utils +private: + std::deque objects_buffer_; + +public: + TrackerHandler() = default; + void onTrackedObjects( + const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr input_objects_msg); + bool estimateTrackedObjects( + const rclcpp::Time & time, autoware_perception_msgs::msg::TrackedObjects & output); +}; + } // namespace autoware::detection_by_tracker + +#endif // TRACKER__TRACKER_HANDLER_HPP_ diff --git a/perception/detection_by_tracker/src/utils/utils.hpp b/perception/detection_by_tracker/src/utils/utils.hpp index b7041124fa931..cc29164e4aad9 100644 --- a/perception/detection_by_tracker/src/utils/utils.hpp +++ b/perception/detection_by_tracker/src/utils/utils.hpp @@ -15,12 +15,16 @@ #ifndef UTILS__UTILS_HPP_ #define UTILS__UTILS_HPP_ +#include "autoware_perception_msgs/msg/object_classification.hpp" + #include namespace autoware::detection_by_tracker { namespace utils { +using Label = autoware_perception_msgs::msg::ObjectClassification; + struct TrackerIgnoreLabel { bool UNKNOWN; @@ -31,8 +35,15 @@ struct TrackerIgnoreLabel bool MOTORCYCLE; bool BICYCLE; bool PEDESTRIAN; - bool isIgnore(const uint8_t label) const; -}; // struct TrackerIgnoreLabel + bool isIgnore(const uint8_t label) const + { + return (label == Label::UNKNOWN && UNKNOWN) || (label == Label::CAR && CAR) || + (label == Label::TRUCK && TRUCK) || (label == Label::BUS && BUS) || + (label == Label::TRAILER && TRAILER) || (label == Label::MOTORCYCLE && MOTORCYCLE) || + (label == Label::BICYCLE && BICYCLE) || (label == Label::PEDESTRIAN && PEDESTRIAN); + } +}; + } // namespace utils } // namespace autoware::detection_by_tracker diff --git a/perception/shape_estimation/CMakeLists.txt b/perception/shape_estimation/CMakeLists.txt index 527c565b91e05..21517f8c0f766 100644 --- a/perception/shape_estimation/CMakeLists.txt +++ b/perception/shape_estimation/CMakeLists.txt @@ -16,7 +16,7 @@ set(SHAPE_ESTIMATION_DEPENDENCIES Eigen3 ) -ament_auto_add_library(shape_estimation_lib SHARED +ament_auto_add_library(${PROJECT_NAME}_lib SHARED lib/shape_estimator.cpp lib/model/bounding_box.cpp lib/model/convex_hull.cpp @@ -27,23 +27,23 @@ ament_auto_add_library(shape_estimation_lib SHARED lib/filter/trailer_filter.cpp lib/filter/no_filter.cpp lib/filter/utils.cpp - lib/corrector/no_corrector.cpp lib/corrector/utils.cpp + lib/corrector/no_corrector.cpp ) -ament_target_dependencies(shape_estimation_lib ${SHAPE_ESTIMATION_DEPENDENCIES}) +ament_target_dependencies(${PROJECT_NAME}_lib ${SHAPE_ESTIMATION_DEPENDENCIES}) -target_include_directories(shape_estimation_lib +target_include_directories(${PROJECT_NAME}_lib SYSTEM PUBLIC "${PCL_INCLUDE_DIRS}" "${EIGEN3_INCLUDE_DIR}" ) -ament_auto_add_library(shape_estimation_node SHARED - src/node.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/shape_estimation_node.cpp ) -target_include_directories(shape_estimation_node +target_include_directories(${PROJECT_NAME} PUBLIC $ $ @@ -51,15 +51,15 @@ target_include_directories(shape_estimation_node ${CMAKE_CURRENT_SOURCE_DIR}/src ) -ament_target_dependencies(shape_estimation_node ${SHAPE_ESTIMATION_DEPENDENCIES}) +ament_target_dependencies(${PROJECT_NAME} ${SHAPE_ESTIMATION_DEPENDENCIES}) -target_link_libraries(shape_estimation_node +target_link_libraries(${PROJECT_NAME} shape_estimation_lib ) -rclcpp_components_register_node(shape_estimation_node - PLUGIN "ShapeEstimationNode" - EXECUTABLE shape_estimation +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::shape_estimation::ShapeEstimationNode" + EXECUTABLE shape_estimation_node ) ament_auto_package(INSTALL_TO_SHARE @@ -79,6 +79,6 @@ if(BUILD_TESTING) ament_add_ros_isolated_gtest(test_shape_estimation ${test_files}) target_link_libraries(test_shape_estimation - shape_estimation_node + ${PROJECT_NAME} ) endif() diff --git a/perception/shape_estimation/README.md b/perception/shape_estimation/README.md index 206e8d422c727..9615b314f62c6 100644 --- a/perception/shape_estimation/README.md +++ b/perception/shape_estimation/README.md @@ -36,7 +36,7 @@ This node calculates a refined object shape (bounding box, cylinder, convex hull ## Parameters -{{ json_to_markdown("perception/shape_estimation/schema/shape_estimation.schema.json") }} +{{ json_to_markdown("perception/autoware/shape_estimation/schema/shape_estimation.schema.json") }} ## Assumptions / Known limits diff --git a/perception/shape_estimation/include/shape_estimation/corrector/bicycle_corrector.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/bicycle_corrector.hpp similarity index 74% rename from perception/shape_estimation/include/shape_estimation/corrector/bicycle_corrector.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/bicycle_corrector.hpp index ec1a2b8a42973..f8dc489a563be 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/bicycle_corrector.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/bicycle_corrector.hpp @@ -12,12 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__BICYCLE_CORRECTOR_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__BICYCLE_CORRECTOR_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__BICYCLE_CORRECTOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__BICYCLE_CORRECTOR_HPP_ -#include "shape_estimation/corrector/vehicle_corrector.hpp" +#include "autoware/shape_estimation/corrector/vehicle_corrector.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace corrector +{ + class BicycleCorrector : public VehicleCorrector { public: @@ -37,4 +42,7 @@ class BicycleCorrector : public VehicleCorrector ~BicycleCorrector() = default; }; -#endif // SHAPE_ESTIMATION__CORRECTOR__BICYCLE_CORRECTOR_HPP_ +} // namespace corrector +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__BICYCLE_CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/bus_corrector.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/bus_corrector.hpp similarity index 73% rename from perception/shape_estimation/include/shape_estimation/corrector/bus_corrector.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/bus_corrector.hpp index 4ef1f00122ca4..d7386ace5b364 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/bus_corrector.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/bus_corrector.hpp @@ -12,12 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__BUS_CORRECTOR_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__BUS_CORRECTOR_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__BUS_CORRECTOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__BUS_CORRECTOR_HPP_ -#include "shape_estimation/corrector/vehicle_corrector.hpp" +#include "autoware/shape_estimation/corrector/vehicle_corrector.hpp" #include "utils.hpp" - +namespace autoware::shape_estimation +{ +namespace corrector +{ class BusCorrector : public VehicleCorrector { public: @@ -36,4 +39,7 @@ class BusCorrector : public VehicleCorrector ~BusCorrector() = default; }; -#endif // SHAPE_ESTIMATION__CORRECTOR__BUS_CORRECTOR_HPP_ +} // namespace corrector +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__BUS_CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/car_corrector.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/car_corrector.hpp similarity index 74% rename from perception/shape_estimation/include/shape_estimation/corrector/car_corrector.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/car_corrector.hpp index d4d33599c7730..7292704d0f6d9 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/car_corrector.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/car_corrector.hpp @@ -12,12 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__CAR_CORRECTOR_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__CAR_CORRECTOR_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__CAR_CORRECTOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__CAR_CORRECTOR_HPP_ -#include "shape_estimation/corrector/vehicle_corrector.hpp" +#include "autoware/shape_estimation/corrector/vehicle_corrector.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace corrector +{ + class CarCorrector : public VehicleCorrector { public: @@ -36,4 +41,7 @@ class CarCorrector : public VehicleCorrector ~CarCorrector() = default; }; -#endif // SHAPE_ESTIMATION__CORRECTOR__CAR_CORRECTOR_HPP_ +} // namespace corrector +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__CAR_CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/autoware/shape_estimation/corrector/corrector.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/corrector.hpp new file mode 100644 index 0000000000000..dd4c4f68d3f46 --- /dev/null +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/corrector.hpp @@ -0,0 +1,27 @@ +// Copyright 2018 Autoware Foundation. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_HPP_ + +#include "autoware/shape_estimation/corrector/bicycle_corrector.hpp" +#include "autoware/shape_estimation/corrector/bus_corrector.hpp" +#include "autoware/shape_estimation/corrector/car_corrector.hpp" +#include "autoware/shape_estimation/corrector/corrector_interface.hpp" +#include "autoware/shape_estimation/corrector/no_corrector.hpp" +#include "autoware/shape_estimation/corrector/reference_shape_size_corrector.hpp" +#include "autoware/shape_estimation/corrector/trailer_corrector.hpp" +#include "autoware/shape_estimation/corrector/truck_corrector.hpp" + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/corrector_interface.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/corrector_interface.hpp similarity index 73% rename from perception/shape_estimation/include/shape_estimation/corrector/corrector_interface.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/corrector_interface.hpp index 1ce1273f042b9..1dcf85b46887c 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/corrector_interface.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/corrector_interface.hpp @@ -12,14 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_INTERFACE_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_INTERFACE_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_INTERFACE_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_INTERFACE_HPP_ #include #include #include - +namespace autoware::shape_estimation +{ +namespace corrector +{ class ShapeEstimationCorrectorInterface { public: @@ -31,4 +34,7 @@ class ShapeEstimationCorrectorInterface autoware_perception_msgs::msg::Shape & shape, geometry_msgs::msg::Pose & pose) = 0; }; -#endif // SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_INTERFACE_HPP_ +} // namespace corrector +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_INTERFACE_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/no_corrector.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/no_corrector.hpp similarity index 58% rename from perception/shape_estimation/include/shape_estimation/corrector/no_corrector.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/no_corrector.hpp index 1303f6f859191..e3c33100861a0 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/no_corrector.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/no_corrector.hpp @@ -12,12 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__NO_CORRECTOR_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__NO_CORRECTOR_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__NO_CORRECTOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__NO_CORRECTOR_HPP_ -#include "shape_estimation/corrector/corrector_interface.hpp" +#include "autoware/shape_estimation/corrector/corrector_interface.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace corrector +{ + class NoCorrector : public ShapeEstimationCorrectorInterface { public: @@ -26,7 +31,14 @@ class NoCorrector : public ShapeEstimationCorrectorInterface ~NoCorrector() {} bool correct( - autoware_perception_msgs::msg::Shape & shape, geometry_msgs::msg::Pose & pose) override; + [[maybe_unused]] autoware_perception_msgs::msg::Shape & shape, + [[maybe_unused]] geometry_msgs::msg::Pose & pose) override + { + return true; + } }; -#endif // SHAPE_ESTIMATION__CORRECTOR__NO_CORRECTOR_HPP_ +} // namespace corrector +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__NO_CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/reference_shape_size_corrector.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/reference_shape_size_corrector.hpp similarity index 70% rename from perception/shape_estimation/include/shape_estimation/corrector/reference_shape_size_corrector.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/reference_shape_size_corrector.hpp index 0d1740dc30d61..a05027a3348b6 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/reference_shape_size_corrector.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/reference_shape_size_corrector.hpp @@ -12,13 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__REFERENCE_SHAPE_SIZE_CORRECTOR_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__REFERENCE_SHAPE_SIZE_CORRECTOR_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__REFERENCE_SHAPE_SIZE_CORRECTOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__REFERENCE_SHAPE_SIZE_CORRECTOR_HPP_ -#include "shape_estimation/corrector/corrector_interface.hpp" -#include "shape_estimation/shape_estimator.hpp" +#include "autoware/shape_estimation/corrector/corrector_interface.hpp" +#include "autoware/shape_estimation/shape_estimator.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace corrector +{ + class ReferenceShapeBasedVehicleCorrector : public ShapeEstimationCorrectorInterface { ReferenceShapeSizeInfo ref_shape_size_info_; @@ -38,4 +43,6 @@ class ReferenceShapeBasedVehicleCorrector : public ShapeEstimationCorrectorInter } }; -#endif // SHAPE_ESTIMATION__CORRECTOR__REFERENCE_SHAPE_SIZE_CORRECTOR_HPP_ +} // namespace corrector +} // namespace autoware::shape_estimation +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__REFERENCE_SHAPE_SIZE_CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/trailer_corrector.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/trailer_corrector.hpp similarity index 77% rename from perception/shape_estimation/include/shape_estimation/corrector/trailer_corrector.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/trailer_corrector.hpp index 6dd885353c78f..afd0f1f7c451d 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/trailer_corrector.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/trailer_corrector.hpp @@ -12,12 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__TRAILER_CORRECTOR_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__TRAILER_CORRECTOR_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__TRAILER_CORRECTOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__TRAILER_CORRECTOR_HPP_ -#include "shape_estimation/corrector/vehicle_corrector.hpp" +#include "autoware/shape_estimation/corrector/vehicle_corrector.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace corrector +{ + // Generally speaking, trailer would be much larger than bus and truck. // But currently we do not make large differences among bus/truck/trailer // because current our vehicle classification is not reliable enough. @@ -40,4 +45,7 @@ class TrailerCorrector : public VehicleCorrector ~TrailerCorrector() = default; }; -#endif // SHAPE_ESTIMATION__CORRECTOR__TRAILER_CORRECTOR_HPP_ +} // namespace corrector +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__TRAILER_CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/truck_corrector.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/truck_corrector.hpp similarity index 74% rename from perception/shape_estimation/include/shape_estimation/corrector/truck_corrector.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/truck_corrector.hpp index 3b2475286fa61..8a641e84176a5 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/truck_corrector.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/truck_corrector.hpp @@ -12,12 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__TRUCK_CORRECTOR_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__TRUCK_CORRECTOR_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__TRUCK_CORRECTOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__TRUCK_CORRECTOR_HPP_ -#include "shape_estimation/corrector/vehicle_corrector.hpp" +#include "autoware/shape_estimation/corrector/vehicle_corrector.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace corrector +{ + class TruckCorrector : public VehicleCorrector { public: @@ -37,4 +42,7 @@ class TruckCorrector : public VehicleCorrector ~TruckCorrector() = default; }; -#endif // SHAPE_ESTIMATION__CORRECTOR__TRUCK_CORRECTOR_HPP_ +} // namespace corrector +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__TRUCK_CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/utils.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/utils.hpp similarity index 82% rename from perception/shape_estimation/include/shape_estimation/corrector/utils.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/utils.hpp index 951f3d16aa278..a16cb146ca4a3 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/utils.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/utils.hpp @@ -12,14 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__UTILS_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__UTILS_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__UTILS_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__UTILS_HPP_ -#include "shape_estimation/shape_estimator.hpp" +#include "autoware/shape_estimation/shape_estimator.hpp" #include #include +namespace autoware::shape_estimation +{ + namespace corrector_utils { struct CorrectionBBParameters @@ -46,4 +49,6 @@ bool correctWithReferenceYaw( } // namespace corrector_utils -#endif // SHAPE_ESTIMATION__CORRECTOR__UTILS_HPP_ +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__UTILS_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/vehicle_corrector.hpp b/perception/shape_estimation/include/autoware/shape_estimation/corrector/vehicle_corrector.hpp similarity index 75% rename from perception/shape_estimation/include/shape_estimation/corrector/vehicle_corrector.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/corrector/vehicle_corrector.hpp index 1b38f15620663..e1b292eb5318a 100644 --- a/perception/shape_estimation/include/shape_estimation/corrector/vehicle_corrector.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/corrector/vehicle_corrector.hpp @@ -12,13 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__CORRECTOR__VEHICLE_CORRECTOR_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__VEHICLE_CORRECTOR_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__VEHICLE_CORRECTOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__VEHICLE_CORRECTOR_HPP_ -#include "shape_estimation/corrector/corrector_interface.hpp" -#include "shape_estimation/shape_estimator.hpp" +#include "autoware/shape_estimation/corrector/corrector_interface.hpp" +#include "autoware/shape_estimation/shape_estimator.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace corrector +{ + class VehicleCorrector : public ShapeEstimationCorrectorInterface { protected: @@ -47,4 +52,7 @@ class VehicleCorrector : public ShapeEstimationCorrectorInterface void setParams(const corrector_utils::CorrectionBBParameters & params) { params_ = params; } }; -#endif // SHAPE_ESTIMATION__CORRECTOR__VEHICLE_CORRECTOR_HPP_ +} // namespace corrector +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__CORRECTOR__VEHICLE_CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/filter/bus_filter.hpp b/perception/shape_estimation/include/autoware/shape_estimation/filter/bus_filter.hpp similarity index 70% rename from perception/shape_estimation/include/shape_estimation/filter/bus_filter.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/filter/bus_filter.hpp index 301921b00d439..54d45498a3d40 100644 --- a/perception/shape_estimation/include/shape_estimation/filter/bus_filter.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/filter/bus_filter.hpp @@ -12,12 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__FILTER__BUS_FILTER_HPP_ -#define SHAPE_ESTIMATION__FILTER__BUS_FILTER_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__FILTER__BUS_FILTER_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__FILTER__BUS_FILTER_HPP_ -#include "shape_estimation/filter/filter_interface.hpp" +#include "autoware/shape_estimation/filter/filter_interface.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace filter +{ class BusFilter : public ShapeEstimationFilterInterface { public: @@ -30,4 +34,7 @@ class BusFilter : public ShapeEstimationFilterInterface const geometry_msgs::msg::Pose & pose_output) override; }; -#endif // SHAPE_ESTIMATION__FILTER__BUS_FILTER_HPP_ +} // namespace filter +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__FILTER__BUS_FILTER_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/filter/car_filter.hpp b/perception/shape_estimation/include/autoware/shape_estimation/filter/car_filter.hpp similarity index 70% rename from perception/shape_estimation/include/shape_estimation/filter/car_filter.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/filter/car_filter.hpp index 79104823bb7ab..8ff79f901d8a3 100644 --- a/perception/shape_estimation/include/shape_estimation/filter/car_filter.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/filter/car_filter.hpp @@ -12,12 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__FILTER__CAR_FILTER_HPP_ -#define SHAPE_ESTIMATION__FILTER__CAR_FILTER_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__FILTER__CAR_FILTER_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__FILTER__CAR_FILTER_HPP_ -#include "shape_estimation/filter/filter_interface.hpp" +#include "autoware/shape_estimation/filter/filter_interface.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace filter +{ class CarFilter : public ShapeEstimationFilterInterface { public: @@ -30,4 +34,7 @@ class CarFilter : public ShapeEstimationFilterInterface const geometry_msgs::msg::Pose & pose) override; }; -#endif // SHAPE_ESTIMATION__FILTER__CAR_FILTER_HPP_ +} // namespace filter +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__FILTER__CAR_FILTER_HPP_ diff --git a/perception/shape_estimation/include/autoware/shape_estimation/filter/filter.hpp b/perception/shape_estimation/include/autoware/shape_estimation/filter/filter.hpp new file mode 100644 index 0000000000000..5b7bad4f57208 --- /dev/null +++ b/perception/shape_estimation/include/autoware/shape_estimation/filter/filter.hpp @@ -0,0 +1,25 @@ +// Copyright 2018 Autoware Foundation. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef AUTOWARE__SHAPE_ESTIMATION__FILTER__FILTER_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__FILTER__FILTER_HPP_ + +#include "autoware/shape_estimation/filter/bus_filter.hpp" +#include "autoware/shape_estimation/filter/car_filter.hpp" +#include "autoware/shape_estimation/filter/filter_interface.hpp" +#include "autoware/shape_estimation/filter/no_filter.hpp" +#include "autoware/shape_estimation/filter/trailer_filter.hpp" +#include "autoware/shape_estimation/filter/truck_filter.hpp" + +#endif // AUTOWARE__SHAPE_ESTIMATION__FILTER__FILTER_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/filter/filter_interface.hpp b/perception/shape_estimation/include/autoware/shape_estimation/filter/filter_interface.hpp similarity index 75% rename from perception/shape_estimation/include/shape_estimation/filter/filter_interface.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/filter/filter_interface.hpp index 67dfe27eb93b0..cba7715314a9e 100644 --- a/perception/shape_estimation/include/shape_estimation/filter/filter_interface.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/filter/filter_interface.hpp @@ -12,14 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__FILTER__FILTER_INTERFACE_HPP_ -#define SHAPE_ESTIMATION__FILTER__FILTER_INTERFACE_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__FILTER__FILTER_INTERFACE_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__FILTER__FILTER_INTERFACE_HPP_ #include #include #include +namespace autoware::shape_estimation +{ +namespace filter +{ + class ShapeEstimationFilterInterface { public: @@ -31,4 +36,7 @@ class ShapeEstimationFilterInterface const autoware_perception_msgs::msg::Shape & shape, const geometry_msgs::msg::Pose & pose) = 0; }; -#endif // SHAPE_ESTIMATION__FILTER__FILTER_INTERFACE_HPP_ +} // namespace filter +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__FILTER__FILTER_INTERFACE_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/filter/no_filter.hpp b/perception/shape_estimation/include/autoware/shape_estimation/filter/no_filter.hpp similarity index 58% rename from perception/shape_estimation/include/shape_estimation/filter/no_filter.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/filter/no_filter.hpp index d007e6c61c965..f05c0e9affa02 100644 --- a/perception/shape_estimation/include/shape_estimation/filter/no_filter.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/filter/no_filter.hpp @@ -12,10 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__FILTER__NO_FILTER_HPP_ -#define SHAPE_ESTIMATION__FILTER__NO_FILTER_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__FILTER__NO_FILTER_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__FILTER__NO_FILTER_HPP_ -#include "shape_estimation/filter/filter_interface.hpp" +#include "autoware/shape_estimation/filter/filter_interface.hpp" + +namespace autoware::shape_estimation +{ +namespace filter +{ class NoFilter : public ShapeEstimationFilterInterface { @@ -25,8 +30,14 @@ class NoFilter : public ShapeEstimationFilterInterface ~NoFilter() = default; bool filter( - const autoware_perception_msgs::msg::Shape & shape, - const geometry_msgs::msg::Pose & pose) override; + [[maybe_unused]] const autoware_perception_msgs::msg::Shape & shape, + [[maybe_unused]] const geometry_msgs::msg::Pose & pose) override + { + return true; + } }; -#endif // SHAPE_ESTIMATION__FILTER__NO_FILTER_HPP_ +} // namespace filter +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__FILTER__NO_FILTER_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/filter/trailer_filter.hpp b/perception/shape_estimation/include/autoware/shape_estimation/filter/trailer_filter.hpp similarity index 70% rename from perception/shape_estimation/include/shape_estimation/filter/trailer_filter.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/filter/trailer_filter.hpp index 319d3e25c77c0..21394938a8026 100644 --- a/perception/shape_estimation/include/shape_estimation/filter/trailer_filter.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/filter/trailer_filter.hpp @@ -12,12 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__FILTER__TRAILER_FILTER_HPP_ -#define SHAPE_ESTIMATION__FILTER__TRAILER_FILTER_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__FILTER__TRAILER_FILTER_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__FILTER__TRAILER_FILTER_HPP_ -#include "shape_estimation/filter/filter_interface.hpp" +#include "autoware/shape_estimation/filter/filter_interface.hpp" #include "utils.hpp" +namespace autoware::shape_estimation +{ +namespace filter +{ class TrailerFilter : public ShapeEstimationFilterInterface { public: @@ -29,5 +33,7 @@ class TrailerFilter : public ShapeEstimationFilterInterface const autoware_perception_msgs::msg::Shape & shape, const geometry_msgs::msg::Pose & pose) override; }; +} // namespace filter +} // namespace autoware::shape_estimation -#endif // SHAPE_ESTIMATION__FILTER__TRAILER_FILTER_HPP_ +#endif // AUTOWARE__SHAPE_ESTIMATION__FILTER__TRAILER_FILTER_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/filter/truck_filter.hpp b/perception/shape_estimation/include/autoware/shape_estimation/filter/truck_filter.hpp similarity index 70% rename from perception/shape_estimation/include/shape_estimation/filter/truck_filter.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/filter/truck_filter.hpp index e67da1c31115e..a941ec4fd7932 100644 --- a/perception/shape_estimation/include/shape_estimation/filter/truck_filter.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/filter/truck_filter.hpp @@ -12,12 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__FILTER__TRUCK_FILTER_HPP_ -#define SHAPE_ESTIMATION__FILTER__TRUCK_FILTER_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__FILTER__TRUCK_FILTER_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__FILTER__TRUCK_FILTER_HPP_ -#include "shape_estimation/filter/filter_interface.hpp" +#include "autoware/shape_estimation/filter/filter_interface.hpp" #include "utils.hpp" - +namespace autoware::shape_estimation +{ +namespace filter +{ class TruckFilter : public ShapeEstimationFilterInterface { public: @@ -29,5 +32,7 @@ class TruckFilter : public ShapeEstimationFilterInterface const autoware_perception_msgs::msg::Shape & shape, const geometry_msgs::msg::Pose & pose) override; }; +} // namespace filter +} // namespace autoware::shape_estimation -#endif // SHAPE_ESTIMATION__FILTER__TRUCK_FILTER_HPP_ +#endif // AUTOWARE__SHAPE_ESTIMATION__FILTER__TRUCK_FILTER_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/filter/utils.hpp b/perception/shape_estimation/include/autoware/shape_estimation/filter/utils.hpp similarity index 77% rename from perception/shape_estimation/include/shape_estimation/filter/utils.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/filter/utils.hpp index 8d487b8d42a93..7f56664e0a57d 100644 --- a/perception/shape_estimation/include/shape_estimation/filter/utils.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/filter/utils.hpp @@ -12,10 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__FILTER__UTILS_HPP_ -#define SHAPE_ESTIMATION__FILTER__UTILS_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__FILTER__UTILS_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__FILTER__UTILS_HPP_ #include +namespace autoware::shape_estimation +{ namespace utils { @@ -24,4 +26,6 @@ bool filterVehicleBoundingBox( const float max_length); } // namespace utils -#endif // SHAPE_ESTIMATION__FILTER__UTILS_HPP_ +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__FILTER__UTILS_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/model/bounding_box.hpp b/perception/shape_estimation/include/autoware/shape_estimation/model/bounding_box.hpp similarity index 80% rename from perception/shape_estimation/include/shape_estimation/model/bounding_box.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/model/bounding_box.hpp index 2ac179d030629..c9d6889c21de5 100644 --- a/perception/shape_estimation/include/shape_estimation/model/bounding_box.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/model/bounding_box.hpp @@ -12,14 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__MODEL__BOUNDING_BOX_HPP_ -#define SHAPE_ESTIMATION__MODEL__BOUNDING_BOX_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__MODEL__BOUNDING_BOX_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__MODEL__BOUNDING_BOX_HPP_ -#include "shape_estimation/model/model_interface.hpp" -#include "shape_estimation/shape_estimator.hpp" +#include "autoware/shape_estimation/model/model_interface.hpp" +#include "autoware/shape_estimation/shape_estimator.hpp" #include +namespace autoware::shape_estimation +{ +namespace model +{ + class BoundingBoxShapeModel : public ShapeEstimationModelInterface { private: @@ -47,4 +52,7 @@ class BoundingBoxShapeModel : public ShapeEstimationModelInterface geometry_msgs::msg::Pose & pose_output) override; }; -#endif // SHAPE_ESTIMATION__MODEL__BOUNDING_BOX_HPP_ +} // namespace model +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__MODEL__BOUNDING_BOX_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/model/convex_hull.hpp b/perception/shape_estimation/include/autoware/shape_estimation/model/convex_hull.hpp similarity index 71% rename from perception/shape_estimation/include/shape_estimation/model/convex_hull.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/model/convex_hull.hpp index 2748d4a53a807..c3ffa297833fb 100644 --- a/perception/shape_estimation/include/shape_estimation/model/convex_hull.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/model/convex_hull.hpp @@ -12,10 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__MODEL__CONVEX_HULL_HPP_ -#define SHAPE_ESTIMATION__MODEL__CONVEX_HULL_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__MODEL__CONVEX_HULL_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__MODEL__CONVEX_HULL_HPP_ -#include "shape_estimation/model/model_interface.hpp" +#include "autoware/shape_estimation/model/model_interface.hpp" + +namespace autoware::shape_estimation +{ +namespace model +{ class ConvexHullShapeModel : public ShapeEstimationModelInterface { @@ -30,4 +35,7 @@ class ConvexHullShapeModel : public ShapeEstimationModelInterface geometry_msgs::msg::Pose & pose_output) override; }; -#endif // SHAPE_ESTIMATION__MODEL__CONVEX_HULL_HPP_ +} // namespace model +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__MODEL__CONVEX_HULL_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/model/cylinder.hpp b/perception/shape_estimation/include/autoware/shape_estimation/model/cylinder.hpp similarity index 74% rename from perception/shape_estimation/include/shape_estimation/model/cylinder.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/model/cylinder.hpp index ccd28afa3173b..6623934cdcc21 100644 --- a/perception/shape_estimation/include/shape_estimation/model/cylinder.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/model/cylinder.hpp @@ -12,10 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__MODEL__CYLINDER_HPP_ -#define SHAPE_ESTIMATION__MODEL__CYLINDER_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__MODEL__CYLINDER_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__MODEL__CYLINDER_HPP_ -#include "shape_estimation/model/model_interface.hpp" +#include "autoware/shape_estimation/model/model_interface.hpp" + +namespace autoware::shape_estimation +{ +namespace model +{ class CylinderShapeModel : public ShapeEstimationModelInterface { @@ -33,4 +38,7 @@ class CylinderShapeModel : public ShapeEstimationModelInterface geometry_msgs::msg::Pose & pose_output) override; }; -#endif // SHAPE_ESTIMATION__MODEL__CYLINDER_HPP_ +} // namespace model +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__MODEL__CYLINDER_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/model/model.hpp b/perception/shape_estimation/include/autoware/shape_estimation/model/model.hpp similarity index 60% rename from perception/shape_estimation/include/shape_estimation/model/model.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/model/model.hpp index 65080ac884073..382812de6f188 100644 --- a/perception/shape_estimation/include/shape_estimation/model/model.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/model/model.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__MODEL__MODEL_HPP_ -#define SHAPE_ESTIMATION__MODEL__MODEL_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__MODEL__MODEL_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__MODEL__MODEL_HPP_ -#include "shape_estimation/model/bounding_box.hpp" -#include "shape_estimation/model/convex_hull.hpp" -#include "shape_estimation/model/cylinder.hpp" -#include "shape_estimation/model/model_interface.hpp" +#include "autoware/shape_estimation/model/bounding_box.hpp" +#include "autoware/shape_estimation/model/convex_hull.hpp" +#include "autoware/shape_estimation/model/cylinder.hpp" +#include "autoware/shape_estimation/model/model_interface.hpp" -#endif // SHAPE_ESTIMATION__MODEL__MODEL_HPP_ +#endif // AUTOWARE__SHAPE_ESTIMATION__MODEL__MODEL_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/model/model_interface.hpp b/perception/shape_estimation/include/autoware/shape_estimation/model/model_interface.hpp similarity index 78% rename from perception/shape_estimation/include/shape_estimation/model/model_interface.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/model/model_interface.hpp index f5324196f69bd..380e88704baae 100644 --- a/perception/shape_estimation/include/shape_estimation/model/model_interface.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/model/model_interface.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__MODEL__MODEL_INTERFACE_HPP_ -#define SHAPE_ESTIMATION__MODEL__MODEL_INTERFACE_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__MODEL__MODEL_INTERFACE_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__MODEL__MODEL_INTERFACE_HPP_ #include #include @@ -24,6 +24,11 @@ #include +namespace autoware::shape_estimation +{ +namespace model +{ + class ShapeEstimationModelInterface { public: @@ -37,4 +42,7 @@ class ShapeEstimationModelInterface geometry_msgs::msg::Pose & pose_output) = 0; }; -#endif // SHAPE_ESTIMATION__MODEL__MODEL_INTERFACE_HPP_ +} // namespace model +} // namespace autoware::shape_estimation + +#endif // AUTOWARE__SHAPE_ESTIMATION__MODEL__MODEL_INTERFACE_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/shape_estimator.hpp b/perception/shape_estimation/include/autoware/shape_estimation/shape_estimator.hpp similarity index 90% rename from perception/shape_estimation/include/shape_estimation/shape_estimator.hpp rename to perception/shape_estimation/include/autoware/shape_estimation/shape_estimator.hpp index 7cdab6f86b585..9759c7c77855e 100644 --- a/perception/shape_estimation/include/shape_estimation/shape_estimator.hpp +++ b/perception/shape_estimation/include/autoware/shape_estimation/shape_estimator.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef SHAPE_ESTIMATION__SHAPE_ESTIMATOR_HPP_ -#define SHAPE_ESTIMATION__SHAPE_ESTIMATOR_HPP_ +#ifndef AUTOWARE__SHAPE_ESTIMATION__SHAPE_ESTIMATOR_HPP_ +#define AUTOWARE__SHAPE_ESTIMATION__SHAPE_ESTIMATOR_HPP_ #include #include @@ -27,6 +27,9 @@ #include +namespace autoware::shape_estimation +{ + struct ReferenceYawInfo { float yaw; @@ -75,5 +78,6 @@ class ShapeEstimator const boost::optional & ref_shape_size_info, autoware_perception_msgs::msg::Shape & shape_output, geometry_msgs::msg::Pose & pose_output); }; +} // namespace autoware::shape_estimation -#endif // SHAPE_ESTIMATION__SHAPE_ESTIMATOR_HPP_ +#endif // AUTOWARE__SHAPE_ESTIMATION__SHAPE_ESTIMATOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/corrector/corrector.hpp b/perception/shape_estimation/include/shape_estimation/corrector/corrector.hpp deleted file mode 100644 index e4efc17181e52..0000000000000 --- a/perception/shape_estimation/include/shape_estimation/corrector/corrector.hpp +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2018 Autoware Foundation. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_HPP_ -#define SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_HPP_ - -#include "shape_estimation/corrector/bicycle_corrector.hpp" -#include "shape_estimation/corrector/bus_corrector.hpp" -#include "shape_estimation/corrector/car_corrector.hpp" -#include "shape_estimation/corrector/corrector_interface.hpp" -#include "shape_estimation/corrector/no_corrector.hpp" -#include "shape_estimation/corrector/reference_shape_size_corrector.hpp" -#include "shape_estimation/corrector/trailer_corrector.hpp" -#include "shape_estimation/corrector/truck_corrector.hpp" - -#endif // SHAPE_ESTIMATION__CORRECTOR__CORRECTOR_HPP_ diff --git a/perception/shape_estimation/include/shape_estimation/filter/filter.hpp b/perception/shape_estimation/include/shape_estimation/filter/filter.hpp deleted file mode 100644 index b205cbd6791ba..0000000000000 --- a/perception/shape_estimation/include/shape_estimation/filter/filter.hpp +++ /dev/null @@ -1,25 +0,0 @@ -// Copyright 2018 Autoware Foundation. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef SHAPE_ESTIMATION__FILTER__FILTER_HPP_ -#define SHAPE_ESTIMATION__FILTER__FILTER_HPP_ - -#include "shape_estimation/filter/bus_filter.hpp" -#include "shape_estimation/filter/car_filter.hpp" -#include "shape_estimation/filter/filter_interface.hpp" -#include "shape_estimation/filter/no_filter.hpp" -#include "shape_estimation/filter/trailer_filter.hpp" -#include "shape_estimation/filter/truck_filter.hpp" - -#endif // SHAPE_ESTIMATION__FILTER__FILTER_HPP_ diff --git a/perception/shape_estimation/launch/shape_estimation.launch.xml b/perception/shape_estimation/launch/shape_estimation.launch.xml index f13b5d1e5f273..88cea81412d97 100644 --- a/perception/shape_estimation/launch/shape_estimation.launch.xml +++ b/perception/shape_estimation/launch/shape_estimation.launch.xml @@ -5,7 +5,7 @@ - + diff --git a/perception/shape_estimation/lib/corrector/no_corrector.cpp b/perception/shape_estimation/lib/corrector/no_corrector.cpp index e18de4acefcdd..b37ee289871dc 100644 --- a/perception/shape_estimation/lib/corrector/no_corrector.cpp +++ b/perception/shape_estimation/lib/corrector/no_corrector.cpp @@ -12,11 +12,4 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/corrector/no_corrector.hpp" - -bool NoCorrector::correct( - [[maybe_unused]] autoware_perception_msgs::msg::Shape & shape_output, - [[maybe_unused]] geometry_msgs::msg::Pose & pose_output) -{ - return true; -} +#include "autoware/shape_estimation/corrector/no_corrector.hpp" diff --git a/perception/shape_estimation/lib/corrector/utils.cpp b/perception/shape_estimation/lib/corrector/utils.cpp index 1332647b0f1f4..a18e09d5b8a04 100644 --- a/perception/shape_estimation/lib/corrector/utils.cpp +++ b/perception/shape_estimation/lib/corrector/utils.cpp @@ -12,9 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/corrector/utils.hpp" +#define EIGEN_MPL2_ONLY + +#include "autoware/shape_estimation/corrector/utils.hpp" -#include +#include "autoware/universe_utils/geometry/geometry.hpp" #include #include @@ -28,12 +30,14 @@ #include #endif +#include +#include + #include #include -#define EIGEN_MPL2_ONLY -#include -#include +namespace autoware::shape_estimation +{ namespace corrector_utils { @@ -398,3 +402,5 @@ bool correctWithReferenceYawAndShapeSize( return true; } } // namespace corrector_utils + +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/lib/filter/bus_filter.cpp b/perception/shape_estimation/lib/filter/bus_filter.cpp index 536545813237f..a301ce716cca2 100644 --- a/perception/shape_estimation/lib/filter/bus_filter.cpp +++ b/perception/shape_estimation/lib/filter/bus_filter.cpp @@ -12,8 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/filter/bus_filter.hpp" - +#include "autoware/shape_estimation/filter/bus_filter.hpp" +namespace autoware::shape_estimation +{ +namespace filter +{ bool BusFilter::filter( const autoware_perception_msgs::msg::Shape & shape, [[maybe_unused]] const geometry_msgs::msg::Pose & pose) @@ -23,3 +26,6 @@ bool BusFilter::filter( constexpr float max_length = 17.0; return utils::filterVehicleBoundingBox(shape, min_width, max_width, max_length); } + +} // namespace filter +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/lib/filter/car_filter.cpp b/perception/shape_estimation/lib/filter/car_filter.cpp index e12b9c211a24e..ab7a8d69d109f 100644 --- a/perception/shape_estimation/lib/filter/car_filter.cpp +++ b/perception/shape_estimation/lib/filter/car_filter.cpp @@ -12,8 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/filter/car_filter.hpp" +#include "autoware/shape_estimation/filter/car_filter.hpp" +namespace autoware::shape_estimation +{ +namespace filter +{ bool CarFilter::filter( const autoware_perception_msgs::msg::Shape & shape, [[maybe_unused]] const geometry_msgs::msg::Pose & pose) @@ -23,3 +27,6 @@ bool CarFilter::filter( constexpr float max_length = 5.8; return utils::filterVehicleBoundingBox(shape, min_width, max_width, max_length); } + +} // namespace filter +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/lib/filter/no_filter.cpp b/perception/shape_estimation/lib/filter/no_filter.cpp index 564de63461c4f..22690be2ed769 100644 --- a/perception/shape_estimation/lib/filter/no_filter.cpp +++ b/perception/shape_estimation/lib/filter/no_filter.cpp @@ -12,11 +12,4 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/filter/no_filter.hpp" - -bool NoFilter::filter( - [[maybe_unused]] const autoware_perception_msgs::msg::Shape & shape, - [[maybe_unused]] const geometry_msgs::msg::Pose & pose) -{ - return true; -} +#include "autoware/shape_estimation/filter/no_filter.hpp" diff --git a/perception/shape_estimation/lib/filter/trailer_filter.cpp b/perception/shape_estimation/lib/filter/trailer_filter.cpp index 5087350f4d60a..378ce085aa881 100644 --- a/perception/shape_estimation/lib/filter/trailer_filter.cpp +++ b/perception/shape_estimation/lib/filter/trailer_filter.cpp @@ -12,7 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/filter/trailer_filter.hpp" +#include "autoware/shape_estimation/filter/trailer_filter.hpp" + +namespace autoware::shape_estimation +{ +namespace filter +{ bool TrailerFilter::filter( const autoware_perception_msgs::msg::Shape & shape, @@ -23,3 +28,6 @@ bool TrailerFilter::filter( constexpr float max_length = 25.0; // maximum Full-TRAILER size in JAPAN(normally upto 18m) return utils::filterVehicleBoundingBox(shape, min_width, max_width, max_length); } + +} // namespace filter +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/lib/filter/truck_filter.cpp b/perception/shape_estimation/lib/filter/truck_filter.cpp index ad733bb58c97c..4afcccaf55347 100644 --- a/perception/shape_estimation/lib/filter/truck_filter.cpp +++ b/perception/shape_estimation/lib/filter/truck_filter.cpp @@ -12,7 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/filter/truck_filter.hpp" +#include "autoware/shape_estimation/filter/truck_filter.hpp" + +namespace autoware::shape_estimation +{ +namespace filter +{ bool TruckFilter::filter( const autoware_perception_msgs::msg::Shape & shape, @@ -23,3 +28,6 @@ bool TruckFilter::filter( constexpr float max_length = 18.0; // upto 12m in japanese law return utils::filterVehicleBoundingBox(shape, min_width, max_width, max_length); } + +} // namespace filter +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/lib/filter/utils.cpp b/perception/shape_estimation/lib/filter/utils.cpp index 9412be4e99a9e..616eb5e22769e 100644 --- a/perception/shape_estimation/lib/filter/utils.cpp +++ b/perception/shape_estimation/lib/filter/utils.cpp @@ -12,7 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/filter/utils.hpp" +#include "autoware/shape_estimation/filter/utils.hpp" +namespace autoware::shape_estimation +{ namespace utils { @@ -43,4 +45,6 @@ bool filterVehicleBoundingBox( } return true; } + } // namespace utils +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/lib/model/bounding_box.cpp b/perception/shape_estimation/lib/model/bounding_box.cpp index a6693fa56d55b..df751be27d8c0 100644 --- a/perception/shape_estimation/lib/model/bounding_box.cpp +++ b/perception/shape_estimation/lib/model/bounding_box.cpp @@ -12,13 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/model/bounding_box.hpp" +#define EIGEN_MPL2_ONLY + +#include "autoware/shape_estimation/model/bounding_box.hpp" #include #include #include -#include +#include "autoware_perception_msgs/msg/shape.hpp" #include @@ -33,14 +35,17 @@ #include #endif +#include + #include #include #include #include -#define EIGEN_MPL2_ONLY - -#include +namespace autoware::shape_estimation +{ +namespace model +{ constexpr float epsilon = 0.001; @@ -252,3 +257,6 @@ float BoundingBoxShapeModel::boostOptimize( float theta_star = min.first; return theta_star; } + +} // namespace model +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/lib/model/convex_hull.cpp b/perception/shape_estimation/lib/model/convex_hull.cpp index d29fb6aa90a99..3c68634aaff4c 100644 --- a/perception/shape_estimation/lib/model/convex_hull.cpp +++ b/perception/shape_estimation/lib/model/convex_hull.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/model/convex_hull.hpp" +#include "autoware/shape_estimation/model/convex_hull.hpp" #include #include @@ -28,6 +28,11 @@ #include #include +namespace autoware::shape_estimation +{ +namespace model +{ + bool ConvexHullShapeModel::estimate( const pcl::PointCloud & cluster, autoware_perception_msgs::msg::Shape & shape_output, geometry_msgs::msg::Pose & pose_output) @@ -94,3 +99,6 @@ bool ConvexHullShapeModel::estimate( pose_output.orientation.w = 1; return true; } + +} // namespace model +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/lib/model/cylinder.cpp b/perception/shape_estimation/lib/model/cylinder.cpp index 9b3f58854df9d..3f3139222a2bc 100644 --- a/perception/shape_estimation/lib/model/cylinder.cpp +++ b/perception/shape_estimation/lib/model/cylinder.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/model/cylinder.hpp" +#include "autoware/shape_estimation/model/cylinder.hpp" #include #include @@ -26,6 +26,11 @@ #include +namespace autoware::shape_estimation +{ +namespace model +{ + bool CylinderShapeModel::estimate( const pcl::PointCloud & cluster, autoware_perception_msgs::msg::Shape & shape_output, geometry_msgs::msg::Pose & pose_output) @@ -63,3 +68,6 @@ bool CylinderShapeModel::estimate( pose_output.orientation.w = 1; return true; } + +} // namespace model +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/lib/shape_estimator.cpp b/perception/shape_estimation/lib/shape_estimator.cpp index 85bc3cd8bd9d9..34eed5e641368 100644 --- a/perception/shape_estimation/lib/shape_estimator.cpp +++ b/perception/shape_estimation/lib/shape_estimator.cpp @@ -12,15 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/shape_estimator.hpp" +#include "autoware/shape_estimation/shape_estimator.hpp" -#include "shape_estimation/corrector/corrector.hpp" -#include "shape_estimation/filter/filter.hpp" -#include "shape_estimation/model/model.hpp" +#include "autoware/shape_estimation/corrector/corrector.hpp" +#include "autoware/shape_estimation/filter/filter.hpp" +#include "autoware/shape_estimation/model/model.hpp" #include #include +namespace autoware::shape_estimation +{ + using Label = autoware_perception_msgs::msg::ObjectClassification; ShapeEstimator::ShapeEstimator(bool use_corrector, bool use_filter, bool use_boost_bbox_optimizer) @@ -75,15 +78,15 @@ bool ShapeEstimator::estimateOriginalShapeAndPose( autoware_perception_msgs::msg::Shape & shape_output, geometry_msgs::msg::Pose & pose_output) { // estimate shape - std::unique_ptr model_ptr; + std::unique_ptr model_ptr; if ( label == Label::CAR || label == Label::TRUCK || label == Label::BUS || label == Label::TRAILER || label == Label::MOTORCYCLE || label == Label::BICYCLE) { - model_ptr.reset(new BoundingBoxShapeModel(ref_yaw_info, use_boost_bbox_optimizer_)); + model_ptr.reset(new model::BoundingBoxShapeModel(ref_yaw_info, use_boost_bbox_optimizer_)); } else if (label == Label::PEDESTRIAN) { - model_ptr.reset(new CylinderShapeModel()); + model_ptr.reset(new model::CylinderShapeModel()); } else { - model_ptr.reset(new ConvexHullShapeModel()); + model_ptr.reset(new model::ConvexHullShapeModel()); } return model_ptr->estimate(cluster, shape_output, pose_output); @@ -93,17 +96,17 @@ bool ShapeEstimator::applyFilter( const uint8_t label, const autoware_perception_msgs::msg::Shape & shape, const geometry_msgs::msg::Pose & pose) { - std::unique_ptr filter_ptr; + std::unique_ptr filter_ptr; if (label == Label::CAR) { - filter_ptr.reset(new CarFilter); + filter_ptr.reset(new filter::CarFilter); } else if (label == Label::BUS) { - filter_ptr.reset(new BusFilter); + filter_ptr.reset(new filter::BusFilter); } else if (label == Label::TRUCK) { - filter_ptr.reset(new TruckFilter); + filter_ptr.reset(new filter::TruckFilter); } else if (label == Label::TRAILER) { - filter_ptr.reset(new TrailerFilter); + filter_ptr.reset(new filter::TrailerFilter); } else { - filter_ptr.reset(new NoFilter); + filter_ptr.reset(new filter::NoFilter); } return filter_ptr->filter(shape, pose); @@ -114,23 +117,26 @@ bool ShapeEstimator::applyCorrector( const boost::optional & ref_shape_size_info, autoware_perception_msgs::msg::Shape & shape, geometry_msgs::msg::Pose & pose) { - std::unique_ptr corrector_ptr; + std::unique_ptr corrector_ptr; if (ref_shape_size_info && use_reference_yaw) { - corrector_ptr.reset(new ReferenceShapeBasedVehicleCorrector(ref_shape_size_info.get())); + corrector_ptr.reset( + new corrector::ReferenceShapeBasedVehicleCorrector(ref_shape_size_info.get())); } else if (label == Label::CAR) { - corrector_ptr.reset(new CarCorrector(use_reference_yaw)); + corrector_ptr.reset(new corrector::CarCorrector(use_reference_yaw)); } else if (label == Label::BUS) { - corrector_ptr.reset(new BusCorrector(use_reference_yaw)); + corrector_ptr.reset(new corrector::BusCorrector(use_reference_yaw)); } else if (label == Label::TRUCK) { - corrector_ptr.reset(new TruckCorrector(use_reference_yaw)); + corrector_ptr.reset(new corrector::TruckCorrector(use_reference_yaw)); } else if (label == Label::TRAILER) { - corrector_ptr.reset(new TrailerCorrector(use_reference_yaw)); + corrector_ptr.reset(new corrector::TrailerCorrector(use_reference_yaw)); } else if (label == Label::MOTORCYCLE || label == Label::BICYCLE) { - corrector_ptr.reset(new BicycleCorrector(use_reference_yaw)); + corrector_ptr.reset(new corrector::BicycleCorrector(use_reference_yaw)); } else { - corrector_ptr.reset(new NoCorrector); + corrector_ptr.reset(new corrector::NoCorrector); } return corrector_ptr->correct(shape, pose); } + +} // namespace autoware::shape_estimation diff --git a/perception/shape_estimation/src/node.cpp b/perception/shape_estimation/src/shape_estimation_node.cpp similarity index 93% rename from perception/shape_estimation/src/node.cpp rename to perception/shape_estimation/src/shape_estimation_node.cpp index 5719cd97b3ed5..4a373b15d580f 100644 --- a/perception/shape_estimation/src/node.cpp +++ b/perception/shape_estimation/src/shape_estimation_node.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/shape_estimator.hpp" +#include "shape_estimation_node.hpp" -#include -#include +#include "autoware/shape_estimation/shape_estimator.hpp" +#include "autoware/universe_utils/math/unit_conversion.hpp" -#include +#include "autoware_perception_msgs/msg/object_classification.hpp" #include #include @@ -32,6 +32,9 @@ #include #include +namespace autoware::shape_estimation +{ + using Label = autoware_perception_msgs::msg::ObjectClassification; ShapeEstimationNode::ShapeEstimationNode(const rclcpp::NodeOptions & node_options) @@ -143,6 +146,7 @@ void ShapeEstimationNode::callback(const DetectedObjectsWithFeature::ConstShared processing_time_publisher_->publish( "debug/processing_time_ms", stop_watch_ptr_->toc("processing_time", true)); } +} // namespace autoware::shape_estimation #include -RCLCPP_COMPONENTS_REGISTER_NODE(ShapeEstimationNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::shape_estimation::ShapeEstimationNode) diff --git a/perception/shape_estimation/src/node.hpp b/perception/shape_estimation/src/shape_estimation_node.hpp similarity index 88% rename from perception/shape_estimation/src/node.hpp rename to perception/shape_estimation/src/shape_estimation_node.hpp index 807f12e39b025..d9f944346611a 100644 --- a/perception/shape_estimation/src/node.hpp +++ b/perception/shape_estimation/src/shape_estimation_node.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef NODE_HPP_ -#define NODE_HPP_ +#ifndef SHAPE_ESTIMATION_NODE_HPP_ +#define SHAPE_ESTIMATION_NODE_HPP_ -#include "shape_estimation/shape_estimator.hpp" +#include "autoware/shape_estimation/shape_estimator.hpp" #include #include @@ -27,6 +27,9 @@ #include +namespace autoware::shape_estimation +{ + using autoware_perception_msgs::msg::DetectedObjects; using tier4_perception_msgs::msg::DetectedObjectsWithFeature; class ShapeEstimationNode : public rclcpp::Node @@ -51,5 +54,6 @@ class ShapeEstimationNode : public rclcpp::Node public: explicit ShapeEstimationNode(const rclcpp::NodeOptions & node_options); }; +} // namespace autoware::shape_estimation -#endif // NODE_HPP_ +#endif // SHAPE_ESTIMATION_NODE_HPP_ diff --git a/perception/shape_estimation/test/shape_estimation/test_shape_estimator.cpp b/perception/shape_estimation/test/shape_estimation/test_shape_estimator.cpp index 0c41e04e5ddd2..2e6dcc62d8699 100644 --- a/perception/shape_estimation/test/shape_estimation/test_shape_estimator.cpp +++ b/perception/shape_estimation/test/shape_estimation/test_shape_estimator.cpp @@ -13,10 +13,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "shape_estimation/corrector/corrector.hpp" -#include "shape_estimation/filter/filter.hpp" -#include "shape_estimation/model/model.hpp" -#include "shape_estimation/shape_estimator.hpp" +#include "autoware/shape_estimation/corrector/corrector.hpp" +#include "autoware/shape_estimation/filter/filter.hpp" +#include "autoware/shape_estimation/model/model.hpp" +#include "autoware/shape_estimation/shape_estimator.hpp" #include #include @@ -70,7 +70,7 @@ pcl::PointCloud createLShapeCluster( TEST(BoundingBoxShapeModel, test_estimateShape) { // Generate BoundingBoxShapeModel - BoundingBoxShapeModel bbox_shape_model = BoundingBoxShapeModel(); + auto bbox_shape_model = autoware::shape_estimation::model::BoundingBoxShapeModel(); // Generate cluster const double length = 4.0; @@ -117,12 +117,12 @@ TEST(BoundingBoxShapeModel, test_estimateShape_rotated) pcl::PointCloud cluster = createLShapeCluster(length, width, height, yaw, offset_x, offset_y); - const auto ref_yaw_info = - ReferenceYawInfo{static_cast(yaw), static_cast(deg2rad(10.0))}; + const auto ref_yaw_info = autoware::shape_estimation::ReferenceYawInfo{ + static_cast(yaw), static_cast(deg2rad(10.0))}; const bool use_boost_bbox_optimizer = true; // Generate BoundingBoxShapeModel - BoundingBoxShapeModel bbox_shape_model = - BoundingBoxShapeModel(ref_yaw_info, use_boost_bbox_optimizer); + auto bbox_shape_model = autoware::shape_estimation::model::BoundingBoxShapeModel( + ref_yaw_info, use_boost_bbox_optimizer); // Generate shape and pose output autoware_perception_msgs::msg::Shape shape_output; @@ -152,7 +152,7 @@ TEST(BoundingBoxShapeModel, test_estimateShape_rotated) TEST(CylinderShapeModel, test_estimateShape) { // Generate CylinderShapeModel - CylinderShapeModel cylinder_shape_model = CylinderShapeModel(); + auto cylinder_shape_model = autoware::shape_estimation::model::CylinderShapeModel(); // Generate cluster pcl::PointCloud cluster = createLShapeCluster(4.0, 2.0, 1.0, 0.0, 0.0, 0.0); @@ -169,7 +169,7 @@ TEST(CylinderShapeModel, test_estimateShape) TEST(ConvexHullShapeModel, test_estimateShape) { // Generate ConvexHullShapeModel - ConvexHullShapeModel convex_hull_shape_model = ConvexHullShapeModel(); + auto convex_hull_shape_model = autoware::shape_estimation::model::ConvexHullShapeModel(); // Generate cluster pcl::PointCloud cluster = createLShapeCluster(2.0, 1.0, 1.0, 0.0, 0.0, 0.0); @@ -200,14 +200,16 @@ TEST(ShapeEstimator, test_estimateShapeAndPose) const bool use_corrector = true; const bool use_filter = true; const bool use_boost_bbox_optimizer = true; - ShapeEstimator shape_estimator = - ShapeEstimator(use_corrector, use_filter, use_boost_bbox_optimizer); + auto shape_estimator = + autoware::shape_estimation::ShapeEstimator(use_corrector, use_filter, use_boost_bbox_optimizer); // Generate ref_yaw_info - boost::optional ref_yaw_info = boost::none; - boost::optional ref_shape_size_info = boost::none; + boost::optional ref_yaw_info = boost::none; + boost::optional ref_shape_size_info = + boost::none; - ref_yaw_info = ReferenceYawInfo{static_cast(yaw), static_cast(deg2rad(10.0))}; + ref_yaw_info = autoware::shape_estimation::ReferenceYawInfo{ + static_cast(yaw), static_cast(deg2rad(10.0))}; const auto label = autoware_perception_msgs::msg::ObjectClassification::CAR; // Generate shape and pose output From 667570065a4b84c8a354b6c24b9b69b5b74c3dbf Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 8 Jul 2024 08:10:59 +0900 Subject: [PATCH 094/306] fix(pointcloud_preprocessor): temporarily remove distortion corrector unit test (#7879) fix: temporarily remove distortion corretor unit test Signed-off-by: vividf --- .../pointcloud_preprocessor/CMakeLists.txt | 4 - .../test/test_distortion_corrector_node.cpp | 600 ------------------ 2 files changed, 604 deletions(-) delete mode 100644 sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp diff --git a/sensing/pointcloud_preprocessor/CMakeLists.txt b/sensing/pointcloud_preprocessor/CMakeLists.txt index 2d0649fe43954..53b6aae55d47b 100644 --- a/sensing/pointcloud_preprocessor/CMakeLists.txt +++ b/sensing/pointcloud_preprocessor/CMakeLists.txt @@ -231,12 +231,8 @@ if(BUILD_TESTING) ament_add_gtest(test_utilities test/test_utilities.cpp ) - ament_add_gtest(distortion_corrector_node_tests - test/test_distortion_corrector_node.cpp - ) target_link_libraries(test_utilities pointcloud_preprocessor_filter) - target_link_libraries(distortion_corrector_node_tests pointcloud_preprocessor_filter) endif() diff --git a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp deleted file mode 100644 index 9e5d068be52f5..0000000000000 --- a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp +++ /dev/null @@ -1,600 +0,0 @@ -// Copyright 2024 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" - -#include - -#include -#include -#include -#include - -#include -#include - -class DistortionCorrectorTest : public ::testing::Test -{ -protected: - void SetUp() override - { - node_ = std::make_shared("test_node"); - distortion_corrector_2d_ = - std::make_shared(node_.get()); - distortion_corrector_3d_ = - std::make_shared(node_.get()); - - // Setup TF - tf_broadcaster_ = std::make_shared(node_); - tf_broadcaster_->sendTransform(generateStaticTransformMsg()); - - // Spin the node for a while to ensure transforms are published - auto start = std::chrono::steady_clock::now(); - auto timeout = std::chrono::seconds(1); - while (std::chrono::steady_clock::now() - start < timeout) { - rclcpp::spin_some(node_); - std::this_thread::sleep_for(std::chrono::milliseconds(10)); - } - } - - void TearDown() override {} - - rclcpp::Time addMilliseconds(rclcpp::Time stamp, int ms) - { - auto ms_in_ns = rclcpp::Duration(0, ms * 1000000); - return stamp + ms_in_ns; - } - - rclcpp::Time subtractMilliseconds(rclcpp::Time stamp, int ms) - { - auto ms_in_ns = rclcpp::Duration(0, ms * 1000000); - return stamp - ms_in_ns; - } - - geometry_msgs::msg::TransformStamped generateTransformMsg( - const std::string & parent_frame, const std::string & child_frame, double x, double y, double z, - double qx, double qy, double qz, double qw) - { - geometry_msgs::msg::TransformStamped tf_msg; - tf_msg.header.stamp = node_->get_clock()->now(); - tf_msg.header.frame_id = parent_frame; - tf_msg.child_frame_id = child_frame; - tf_msg.transform.translation.x = x; - tf_msg.transform.translation.y = y; - tf_msg.transform.translation.z = z; - tf_msg.transform.rotation.x = qx; - tf_msg.transform.rotation.y = qy; - tf_msg.transform.rotation.z = qz; - tf_msg.transform.rotation.w = qw; - return tf_msg; - } - - std::vector generateStaticTransformMsg() - { - return { - generateTransformMsg("base_link", "lidar_top", 5.0, 5.0, 5.0, 0.683, 0.5, 0.183, 0.499), - generateTransformMsg("base_link", "imu_link", 1.0, 1.0, 3.0, 0.278, 0.717, 0.441, 0.453)}; - } - - std::shared_ptr generateTwistMsg( - double linear_x, double angular_z, rclcpp::Time stamp) - { - auto twist_msg = std::make_shared(); - twist_msg->header.stamp = stamp; - twist_msg->header.frame_id = "base_link"; - twist_msg->twist.twist.linear.x = linear_x; - twist_msg->twist.twist.angular.z = angular_z; - return twist_msg; - } - - std::shared_ptr generateImuMsg( - double angular_vel_x, double angular_vel_y, double angular_vel_z, rclcpp::Time stamp) - { - auto imu_msg = std::make_shared(); - imu_msg->header.stamp = stamp; - imu_msg->header.frame_id = "imu_link"; - imu_msg->angular_velocity.x = angular_vel_x; - imu_msg->angular_velocity.y = angular_vel_y; - imu_msg->angular_velocity.z = angular_vel_z; - return imu_msg; - } - - std::vector> generateTwistMsgs( - rclcpp::Time pointcloud_timestamp) - { - std::vector> twist_msgs; - rclcpp::Time twist_stamp = subtractMilliseconds(pointcloud_timestamp, 5); - - for (int i = 0; i < 6; ++i) { - auto twist_msg = generateTwistMsg(10.0 + i * 2, 0.02 + i * 0.01, twist_stamp); - twist_msgs.push_back(twist_msg); - // Make sure the twist stamp is not identical to any point stamp, and imu stamp - twist_stamp = addMilliseconds(twist_stamp, 24); - } - - return twist_msgs; - } - - std::vector> generateImuMsgs( - rclcpp::Time pointcloud_timestamp) - { - std::vector> imu_msgs; - rclcpp::Time imu_stamp = subtractMilliseconds(pointcloud_timestamp, 10); - - for (int i = 0; i < 6; ++i) { - auto imu_msg = - generateImuMsg(0.01 + i * 0.005, -0.02 + i * 0.005, 0.05 + i * 0.005, imu_stamp); - imu_msgs.push_back(imu_msg); - // Make sure the imu stamp is not identical to any point stamp, and twist stamp - imu_stamp = addMilliseconds(imu_stamp, 27); - } - - return imu_msgs; - } - - sensor_msgs::msg::PointCloud2 generatePointCloudMsg( - bool is_generate_points, bool is_lidar_frame, rclcpp::Time stamp) - { - sensor_msgs::msg::PointCloud2 pointcloud_msg; - pointcloud_msg.header.stamp = stamp; - pointcloud_msg.header.frame_id = is_lidar_frame ? "lidar_top" : "base_link"; - pointcloud_msg.height = 1; - pointcloud_msg.is_dense = true; - pointcloud_msg.is_bigendian = false; - pointcloud_msg.point_step = - 20; // 3 float32 fields * 4 bytes/field + 1 float64 field * 8 bytes/field - - if (is_generate_points) { - std::vector points = { - 10.0f, 0.0f, 0.0f, // point 1 - 0.0f, 10.0f, 0.0f, // point 2 - 0.0f, 0.0f, 10.0f, // point 3 - 20.0f, 0.0f, 0.0f, // point 4 - 0.0f, 20.0f, 0.0f, // point 5 - 0.0f, 0.0f, 20.0f, // point 6 - 30.0f, 0.0f, 0.0f, // point 7 - 0.0f, 30.0f, 0.0f, // point 8 - 0.0f, 0.0f, 30.0f, // point 9 - 10.0f, 10.0f, 10.0f // point 10 - }; - - size_t number_of_points = points.size() / 3; - std::vector timestamps = - generatePointTimestamps(is_generate_points, stamp, number_of_points); - - std::vector data(number_of_points * pointcloud_msg.point_step); - - for (size_t i = 0; i < number_of_points; ++i) { - std::memcpy(data.data() + i * pointcloud_msg.point_step, &points[i * 3], 3 * sizeof(float)); - std::memcpy( - data.data() + i * pointcloud_msg.point_step + 12, ×tamps[i], sizeof(double)); - } - - pointcloud_msg.width = number_of_points; - pointcloud_msg.row_step = pointcloud_msg.point_step * pointcloud_msg.width; - pointcloud_msg.data = std::move(data); - } else { - pointcloud_msg.width = 0; - pointcloud_msg.row_step = 0; - } - - sensor_msgs::msg::PointField x_field; - x_field.name = "x"; - x_field.offset = 0; - x_field.datatype = sensor_msgs::msg::PointField::FLOAT32; - x_field.count = 1; - - sensor_msgs::msg::PointField y_field; - y_field.name = "y"; - y_field.offset = 4; - y_field.datatype = sensor_msgs::msg::PointField::FLOAT32; - y_field.count = 1; - - sensor_msgs::msg::PointField z_field; - z_field.name = "z"; - z_field.offset = 8; - z_field.datatype = sensor_msgs::msg::PointField::FLOAT32; - z_field.count = 1; - - sensor_msgs::msg::PointField timestamp_field; - timestamp_field.name = "time_stamp"; - timestamp_field.offset = 12; - timestamp_field.datatype = sensor_msgs::msg::PointField::FLOAT64; - timestamp_field.count = 1; - - pointcloud_msg.fields = {x_field, y_field, z_field, timestamp_field}; - - return pointcloud_msg; - } - - std::vector generatePointTimestamps( - bool is_generate_points, rclcpp::Time pointcloud_timestamp, size_t number_of_points) - { - std::vector timestamps; - if (is_generate_points) { - rclcpp::Time point_stamp = pointcloud_timestamp; - for (size_t i = 0; i < number_of_points; ++i) { - double timestamp = point_stamp.seconds(); - timestamps.push_back(timestamp); - if (i > 0) { - point_stamp = point_stamp + rclcpp::Duration::from_seconds( - 0.001); // Assuming 1ms offset for demonstration - } - } - } - return timestamps; - } - - std::shared_ptr node_; - std::shared_ptr distortion_corrector_2d_; - std::shared_ptr distortion_corrector_3d_; - std::shared_ptr tf_broadcaster_; -}; - -TEST_F(DistortionCorrectorTest, TestProcessTwistMessage) -{ - auto twist_msg = generateTwistMsg(1.0, 0.5, node_->get_clock()->now()); - distortion_corrector_2d_->processTwistMessage(twist_msg); - - ASSERT_FALSE(distortion_corrector_2d_->twist_queue_.empty()); - EXPECT_EQ(distortion_corrector_2d_->twist_queue_.front().twist.linear.x, 1.0); - EXPECT_EQ(distortion_corrector_2d_->twist_queue_.front().twist.angular.z, 0.5); -} - -TEST_F(DistortionCorrectorTest, TestProcessIMUMessage) -{ - auto imu_msg = generateImuMsg(0.5, 0.3, 0.1, node_->get_clock()->now()); - distortion_corrector_2d_->processIMUMessage("base_link", imu_msg); - - ASSERT_FALSE(distortion_corrector_2d_->angular_velocity_queue_.empty()); - EXPECT_NEAR(distortion_corrector_2d_->angular_velocity_queue_.front().vector.z, 0.0443032, 1e-5); -} - -TEST_F(DistortionCorrectorTest, TestIsInputValid) -{ - // input normal pointcloud without twist - sensor_msgs::msg::PointCloud2 pointcloud = - generatePointCloudMsg(true, false, node_->get_clock()->now()); - bool result = distortion_corrector_2d_->isInputValid(pointcloud); - EXPECT_FALSE(result); - - // input normal pointcloud with valid twist - auto twist_msg = generateTwistMsg(1.0, 0.5, node_->get_clock()->now()); - distortion_corrector_2d_->processTwistMessage(twist_msg); - - pointcloud = generatePointCloudMsg(true, false, node_->get_clock()->now()); - result = distortion_corrector_2d_->isInputValid(pointcloud); - EXPECT_TRUE(result); - - // input empty pointcloud - pointcloud = generatePointCloudMsg(false, false, node_->get_clock()->now()); - result = distortion_corrector_2d_->isInputValid(pointcloud); - EXPECT_FALSE(result); -} - -TEST_F(DistortionCorrectorTest, TestSetPointCloudTransformWithBaseLink) -{ - distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); - EXPECT_TRUE(distortion_corrector_2d_->pointcloud_transform_exists_); - EXPECT_FALSE(distortion_corrector_2d_->pointcloud_transform_needed_); -} - -TEST_F(DistortionCorrectorTest, TestSetPointCloudTransformWithLidarFrame) -{ - distortion_corrector_2d_->setPointCloudTransform("base_link", "lidar_top"); - EXPECT_TRUE(distortion_corrector_2d_->pointcloud_transform_exists_); - EXPECT_TRUE(distortion_corrector_2d_->pointcloud_transform_needed_); -} - -TEST_F(DistortionCorrectorTest, TestSetPointCloudTransformWithMissingFrame) -{ - distortion_corrector_2d_->setPointCloudTransform("base_link", "missing_lidar_frame"); - EXPECT_FALSE(distortion_corrector_2d_->pointcloud_transform_exists_); - EXPECT_FALSE(distortion_corrector_2d_->pointcloud_transform_needed_); -} - -TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithEmptyTwist) -{ - rclcpp::Time timestamp = node_->get_clock()->now(); - // Generate the point cloud message - sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); - - // Process empty twist queue - distortion_corrector_2d_->initialize(); - distortion_corrector_2d_->undistortPointCloud(false, pointcloud); - - // Verify the point cloud is not changed - const float * data_ptr = reinterpret_cast(pointcloud.data.data()); - std::vector> expected_pointcloud = { - {10.0f, 0.0f, 0.0f}, {0.0f, 10.0f, 0.0f}, {0.0f, 0.0f, 10.0f}, {20.0f, 0.0f, 0.0f}, - {0.0f, 20.0f, 0.0f}, {0.0f, 0.0f, 20.0f}, {30.0f, 0.0f, 0.0f}, {0.0f, 30.0f, 0.0f}, - {0.0f, 0.0f, 30.0f}, {10.0f, 10.0f, 10.0f}, - }; - - for (size_t i = 0; i < expected_pointcloud.size(); ++i) { - EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 1e-5); - EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 1e-5); - EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 1e-5); - } -} - -TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithEmptyPointCloud) -{ - rclcpp::Time timestamp = node_->get_clock()->now(); - // Generate and process multiple twist messages - auto twist_msgs = generateTwistMsgs(timestamp); - for (const auto & twist_msg : twist_msgs) { - distortion_corrector_2d_->processTwistMessage(twist_msg); - } - // Generate an empty point cloud message - sensor_msgs::msg::PointCloud2 empty_pointcloud = generatePointCloudMsg(false, false, timestamp); - - // Process empty point cloud - distortion_corrector_2d_->initialize(); - distortion_corrector_2d_->undistortPointCloud(true, empty_pointcloud); - - // Verify the point cloud is still empty - EXPECT_EQ(empty_pointcloud.width, 0); - EXPECT_EQ(empty_pointcloud.row_step, 0); -} - -TEST_F(DistortionCorrectorTest, TestUndistortPointCloud2dWithoutImuInBaseLink) -{ - // Generate the point cloud message - rclcpp::Time timestamp = node_->get_clock()->now(); - sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); - - // Generate and process multiple twist messages - auto twist_msgs = generateTwistMsgs(timestamp); - for (const auto & twist_msg : twist_msgs) { - distortion_corrector_2d_->processTwistMessage(twist_msg); - } - - // Test using only twist - distortion_corrector_2d_->initialize(); - distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); - distortion_corrector_2d_->undistortPointCloud(false, pointcloud); - - const float * data_ptr = reinterpret_cast(pointcloud.data.data()); - - // Expected undistorted point cloud values - std::vector> expected_pointcloud = { - {10.0f, 0.0f, 0.0f}, {0.0f, 10.0f, 0.0f}, {0.012002f, 5.75338e-07f, 10.0f}, - {20.024f, 0.00191863f, 0.0f}, {0.0340828f, 20.0f, 0.0f}, {0.0479994f, 4.02654e-06f, 20.0f}, - {30.06f, 0.00575818f, 0.0f}, {0.0662481f, 30.0f, 0.0f}, {0.0839996f, 1.03542e-05f, 30.0f}, - {10.0931f, 10.0029f, 10.0f}, - }; - - // Verify each point in the undistorted point cloud - for (size_t i = 0; i < expected_pointcloud.size(); ++i) { - EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); - } -} - -TEST_F(DistortionCorrectorTest, TestUndistortPointCloud2dWithImuInBaseLink) -{ - // Generate the point cloud message - rclcpp::Time timestamp = node_->get_clock()->now(); - sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); - - // Generate and process multiple twist messages - auto twist_msgs = generateTwistMsgs(timestamp); - for (const auto & twist_msg : twist_msgs) { - distortion_corrector_2d_->processTwistMessage(twist_msg); - } - - // Generate and process multiple IMU messages - auto imu_msgs = generateImuMsgs(timestamp); - for (const auto & imu_msg : imu_msgs) { - distortion_corrector_2d_->processIMUMessage("base_link", imu_msg); - } - - distortion_corrector_2d_->initialize(); - distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); - distortion_corrector_2d_->undistortPointCloud(true, pointcloud); - - const float * data_ptr = reinterpret_cast(pointcloud.data.data()); - - // Expected undistorted point cloud values - std::vector> expected_pointcloud = { - {10.0f, 0.0f, 0.0f}, {0.0f, 10.0f, 0.0f}, {0.0119991f, 5.75201e-07f, 10.0f}, - {20.024f, 0.0019192f, 0.0f}, {0.0321653f, 20.0f, 0.0f}, {0.0479994f, 6.32762e-06f, 20.0f}, - {30.06f, 0.00863842f, 0.0f}, {0.063369f, 30.0f, 0.0f}, {0.0839996f, 1.84079e-05f, 30.0f}, - {10.0912f, 10.0048f, 10.0f}, - }; - - // Verify each point in the undistorted point cloud - for (size_t i = 0; i < expected_pointcloud.size(); ++i) { - EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); - } -} - -TEST_F(DistortionCorrectorTest, TestUndistortPointCloud2dWithImuInLidarFrame) -{ - // Generate the point cloud message - rclcpp::Time timestamp = node_->get_clock()->now(); - sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, true, timestamp); - - // Generate and process multiple twist messages - auto twist_msgs = generateTwistMsgs(timestamp); - for (const auto & twist_msg : twist_msgs) { - distortion_corrector_2d_->processTwistMessage(twist_msg); - } - - // Generate and process multiple IMU messages - auto imu_msgs = generateImuMsgs(timestamp); - for (const auto & imu_msg : imu_msgs) { - distortion_corrector_2d_->processIMUMessage("base_link", imu_msg); - } - - distortion_corrector_2d_->initialize(); - distortion_corrector_2d_->setPointCloudTransform("base_link", "lidar_top"); - distortion_corrector_2d_->undistortPointCloud(true, pointcloud); - - const float * data_ptr = reinterpret_cast(pointcloud.data.data()); - // Expected undistorted point cloud values - std::vector> expected_pointcloud = { - {10.0f, -1.77636e-15f, -4.44089e-16f}, {-2.66454e-15f, 10.0f, -8.88178e-16f}, - {0.00622853f, 0.00600991f, 10.0084f}, {20.0106f, 0.010948f, 0.0157355f}, - {0.0176543f, 20.0176f, 0.0248379f}, {0.024499f, 0.0245179f, 20.0348f}, - {30.0266f, 0.0255826f, 0.0357166f}, {0.0355204f, 30.0353f, 0.0500275f}, - {0.047132f, 0.0439795f, 30.0606f}, {10.0488f, 10.046f, 10.0636f}, - }; - - // Verify each point in the undistorted point cloud - for (size_t i = 0; i < expected_pointcloud.size(); ++i) { - EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); - } -} - -TEST_F(DistortionCorrectorTest, TestUndistortPointCloud3dWithoutImuInBaseLink) -{ - // Generate the point cloud message - rclcpp::Time timestamp = node_->get_clock()->now(); - sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); - - // Generate and process multiple twist messages - auto twist_msgs = generateTwistMsgs(timestamp); - for (const auto & twist_msg : twist_msgs) { - distortion_corrector_3d_->processTwistMessage(twist_msg); - } - - // Test using only twist - distortion_corrector_3d_->initialize(); - distortion_corrector_3d_->setPointCloudTransform("base_link", "base_link"); - distortion_corrector_3d_->undistortPointCloud(false, pointcloud); - - const float * data_ptr = reinterpret_cast(pointcloud.data.data()); - - // Expected undistorted point cloud values - std::vector> expected_pointcloud = { - {10.0f, 0.0f, 0.0f}, {0.0f, 10.0f, 0.0f}, {0.0119991f, 0.0f, 10.0f}, - {20.024f, 0.00120042f, 0.0f}, {0.0342002f, 20.0f, 0.0f}, {0.0479994f, 2.15994e-06f, 20.0f}, - {30.06f, 0.00450349f, 0.0f}, {0.0666005f, 30.0f, 0.0f}, {0.0839996f, 7.55993e-06f, 30.0f}, - {10.0936f, 10.0024f, 10.0f}, - }; - - // Verify each point in the undistorted point cloud - for (size_t i = 0; i < expected_pointcloud.size(); ++i) { - EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); - } -} - -TEST_F(DistortionCorrectorTest, TestUndistortPointCloud3dWithImuInBaseLink) -{ - // Generate the point cloud message - rclcpp::Time timestamp = node_->get_clock()->now(); - sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); - - // Generate and process multiple twist messages - auto twist_msgs = generateTwistMsgs(timestamp); - for (const auto & twist_msg : twist_msgs) { - distortion_corrector_3d_->processTwistMessage(twist_msg); - } - - // Generate and process multiple IMU messages - auto imu_msgs = generateImuMsgs(timestamp); - for (const auto & imu_msg : imu_msgs) { - distortion_corrector_3d_->processIMUMessage("base_link", imu_msg); - } - - distortion_corrector_3d_->initialize(); - distortion_corrector_3d_->setPointCloudTransform("base_link", "base_link"); - distortion_corrector_3d_->undistortPointCloud(true, pointcloud); - - const float * data_ptr = reinterpret_cast(pointcloud.data.data()); - - // Expected undistorted point cloud values - std::vector> expected_pointcloud = { - {10.0f, 0.0f, 0.0f}, - {0.0f, 10.0f, 0.0f}, - {0.0118491f, -0.000149993f, 10.0f}, - {20.024f, 0.00220075f, 0.000600241f}, - {0.0327002f, 20.0f, 0.000900472f}, - {0.0468023f, -0.00119623f, 20.0f}, - {30.06f, 0.0082567f, 0.00225216f}, - {0.0621003f, 30.0f, 0.00270227f}, - {0.0808503f, -0.00313673f, 30.0f}, - {10.0904f, 10.0032f, 10.0024f}, - }; - - // Verify each point in the undistorted point cloud - for (size_t i = 0; i < expected_pointcloud.size(); ++i) { - EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); - } -} - -TEST_F(DistortionCorrectorTest, TestUndistortPointCloud3dWithImuInLidarFrame) -{ - // Generate the point cloud message - rclcpp::Time timestamp = node_->get_clock()->now(); - sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, true, timestamp); - - // Generate and process multiple twist messages - auto twist_msgs = generateTwistMsgs(timestamp); - for (const auto & twist_msg : twist_msgs) { - distortion_corrector_3d_->processTwistMessage(twist_msg); - } - - // Generate and process multiple IMU messages - auto imu_msgs = generateImuMsgs(timestamp); - for (const auto & imu_msg : imu_msgs) { - distortion_corrector_3d_->processIMUMessage("base_link", imu_msg); - } - - distortion_corrector_3d_->initialize(); - distortion_corrector_3d_->setPointCloudTransform("base_link", "lidar_top"); - distortion_corrector_3d_->undistortPointCloud(true, pointcloud); - - const float * data_ptr = reinterpret_cast(pointcloud.data.data()); - // Expected undistorted point cloud values - std::vector> expected_pointcloud = { - {10.0f, 0.0f, 0.0f}, - {-4.76837e-07f, 10.0f, 4.76837e-07f}, - {0.00572586f, 0.00616837f, 10.0086f}, - {20.0103f, 0.0117249f, 0.0149349f}, - {0.0158343f, 20.0179f, 0.024497f}, - {0.0251098f, 0.0254798f, 20.0343f}, - {30.0259f, 0.0290527f, 0.034577f}, - {0.0319824f, 30.0358f, 0.0477753f}, - {0.0478067f, 0.0460052f, 30.06f}, - {10.0462f, 10.0489f, 10.0625f}, - }; - - // Verify each point in the undistorted point cloud - for (size_t i = 0; i < expected_pointcloud.size(); ++i) { - EXPECT_NEAR(data_ptr[i * 5], expected_pointcloud[i][0], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 1], expected_pointcloud[i][1], 5e-5); - EXPECT_NEAR(data_ptr[i * 5 + 2], expected_pointcloud[i][2], 5e-5); - } -} - -int main(int argc, char ** argv) -{ - ::testing::InitGoogleTest(&argc, argv); - rclcpp::init(argc, argv); - int ret = RUN_ALL_TESTS(); - rclcpp::shutdown(); - return ret; -} From 68a9bb3be97c4c44bf98df72fa69042934e2e874 Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Mon, 8 Jul 2024 09:10:41 +0900 Subject: [PATCH 095/306] refactor(gnss_poser): apply static analysis (#7874) * refactor based on linter Signed-off-by: a-maumau * style(pre-commit): autofix --------- Signed-off-by: a-maumau Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../include/gnss_poser/gnss_poser_core.hpp | 26 +++---- sensing/gnss_poser/src/gnss_poser_core.cpp | 71 ++++++++++--------- 2 files changed, 50 insertions(+), 47 deletions(-) diff --git a/sensing/gnss_poser/include/gnss_poser/gnss_poser_core.hpp b/sensing/gnss_poser/include/gnss_poser/gnss_poser_core.hpp index 97ca1d8bffe77..033abf04f1255 100644 --- a/sensing/gnss_poser/include/gnss_poser/gnss_poser_core.hpp +++ b/sensing/gnss_poser/include/gnss_poser/gnss_poser_core.hpp @@ -49,29 +49,29 @@ class GNSSPoser : public rclcpp::Node private: using MapProjectorInfo = map_interface::MapProjectorInfo; - void callbackMapProjectorInfo(const MapProjectorInfo::Message::ConstSharedPtr msg); - void callbackNavSatFix(const sensor_msgs::msg::NavSatFix::ConstSharedPtr nav_sat_fix_msg_ptr); - void callbackGnssInsOrientationStamped( + void callback_map_projector_info(const MapProjectorInfo::Message::ConstSharedPtr msg); + void callback_nav_sat_fix(const sensor_msgs::msg::NavSatFix::ConstSharedPtr nav_sat_fix_msg_ptr); + void callback_gnss_ins_orientation_stamped( const autoware_sensing_msgs::msg::GnssInsOrientationStamped::ConstSharedPtr msg); - bool isFixed(const sensor_msgs::msg::NavSatStatus & nav_sat_status_msg); - bool canGetCovariance(const sensor_msgs::msg::NavSatFix & nav_sat_fix_msg); - geometry_msgs::msg::Point getMedianPosition( + static bool is_fixed(const sensor_msgs::msg::NavSatStatus & nav_sat_status_msg); + static bool can_get_covariance(const sensor_msgs::msg::NavSatFix & nav_sat_fix_msg); + static geometry_msgs::msg::Point get_median_position( const boost::circular_buffer & position_buffer); - geometry_msgs::msg::Point getAveragePosition( + static geometry_msgs::msg::Point get_average_position( const boost::circular_buffer & position_buffer); - geometry_msgs::msg::Quaternion getQuaternionByHeading(const int heading); - geometry_msgs::msg::Quaternion getQuaternionByPositionDifference( + static geometry_msgs::msg::Quaternion get_quaternion_by_heading(const int heading); + static geometry_msgs::msg::Quaternion get_quaternion_by_position_difference( const geometry_msgs::msg::Point & point, const geometry_msgs::msg::Point & prev_point); - bool getTransform( + bool get_transform( const std::string & target_frame, const std::string & source_frame, const geometry_msgs::msg::TransformStamped::SharedPtr transform_stamped_ptr); - bool getStaticTransform( + bool get_static_transform( const std::string & target_frame, const std::string & source_frame, const geometry_msgs::msg::TransformStamped::SharedPtr transform_stamped_ptr, const builtin_interfaces::msg::Time & stamp); - void publishTF( + void publish_tf( const std::string & frame_id, const std::string & child_frame_id, const geometry_msgs::msg::PoseStamped & pose_msg); @@ -99,7 +99,7 @@ class GNSSPoser : public rclcpp::Node autoware_sensing_msgs::msg::GnssInsOrientationStamped::SharedPtr msg_gnss_ins_orientation_stamped_; - int gnss_pose_pub_method; + int gnss_pose_pub_method_; }; } // namespace gnss_poser diff --git a/sensing/gnss_poser/src/gnss_poser_core.cpp b/sensing/gnss_poser/src/gnss_poser_core.cpp index 7a3b40336ff3d..40a60d17ea7db 100644 --- a/sensing/gnss_poser/src/gnss_poser_core.cpp +++ b/sensing/gnss_poser/src/gnss_poser_core.cpp @@ -36,25 +36,27 @@ GNSSPoser::GNSSPoser(const rclcpp::NodeOptions & node_options) use_gnss_ins_orientation_(declare_parameter("use_gnss_ins_orientation")), msg_gnss_ins_orientation_stamped_( std::make_shared()), - gnss_pose_pub_method(declare_parameter("gnss_pose_pub_method")) + gnss_pose_pub_method_(static_cast(declare_parameter("gnss_pose_pub_method"))) { // Subscribe to map_projector_info topic const auto adaptor = component_interface_utils::NodeAdaptor(this); adaptor.init_sub( - sub_map_projector_info_, - [this](const MapProjectorInfo::Message::ConstSharedPtr msg) { callbackMapProjectorInfo(msg); }); + sub_map_projector_info_, [this](const MapProjectorInfo::Message::ConstSharedPtr msg) { + callback_map_projector_info(msg); + }); // Set up position buffer - int buff_epoch = declare_parameter("buff_epoch"); + int buff_epoch = static_cast(declare_parameter("buff_epoch")); position_buffer_.set_capacity(buff_epoch); // Set subscribers and publishers nav_sat_fix_sub_ = create_subscription( - "fix", rclcpp::QoS{1}, std::bind(&GNSSPoser::callbackNavSatFix, this, std::placeholders::_1)); + "fix", rclcpp::QoS{1}, + std::bind(&GNSSPoser::callback_nav_sat_fix, this, std::placeholders::_1)); autoware_orientation_sub_ = create_subscription( "autoware_orientation", rclcpp::QoS{1}, - std::bind(&GNSSPoser::callbackGnssInsOrientationStamped, this, std::placeholders::_1)); + std::bind(&GNSSPoser::callback_gnss_ins_orientation_stamped, this, std::placeholders::_1)); pose_pub_ = create_publisher("gnss_pose", rclcpp::QoS{1}); pose_cov_pub_ = create_publisher( @@ -68,13 +70,13 @@ GNSSPoser::GNSSPoser(const rclcpp::NodeOptions & node_options) msg_gnss_ins_orientation_stamped_->orientation.rmse_rotation_z = 1.0; } -void GNSSPoser::callbackMapProjectorInfo(const MapProjectorInfo::Message::ConstSharedPtr msg) +void GNSSPoser::callback_map_projector_info(const MapProjectorInfo::Message::ConstSharedPtr msg) { projector_info_ = *msg; received_map_projector_info_ = true; } -void GNSSPoser::callbackNavSatFix( +void GNSSPoser::callback_nav_sat_fix( const sensor_msgs::msg::NavSatFix::ConstSharedPtr nav_sat_fix_msg_ptr) { // Return immediately if map_projector_info has not been received yet. @@ -94,15 +96,15 @@ void GNSSPoser::callbackNavSatFix( } // check fixed topic - const bool is_fixed = isFixed(nav_sat_fix_msg_ptr->status); + const bool is_status_fixed = is_fixed(nav_sat_fix_msg_ptr->status); // publish is_fixed topic tier4_debug_msgs::msg::BoolStamped is_fixed_msg; is_fixed_msg.stamp = this->now(); - is_fixed_msg.data = is_fixed; + is_fixed_msg.data = is_status_fixed; fixed_pub_->publish(is_fixed_msg); - if (!is_fixed) { + if (!is_status_fixed) { RCLCPP_WARN_STREAM_THROTTLE( this->get_logger(), *this->get_clock(), std::chrono::milliseconds(1000).count(), "Not Fixed Topic. Skipping Calculate."); @@ -122,7 +124,7 @@ void GNSSPoser::callbackNavSatFix( geometry_msgs::msg::Pose gnss_antenna_pose{}; // publish pose immediately - if (!gnss_pose_pub_method) { + if (!gnss_pose_pub_method_) { gnss_antenna_pose.position = position; } else { // fill position buffer @@ -134,8 +136,9 @@ void GNSSPoser::callbackNavSatFix( return; } // publish average pose or median pose of position buffer - gnss_antenna_pose.position = (gnss_pose_pub_method == 1) ? getAveragePosition(position_buffer_) - : getMedianPosition(position_buffer_); + gnss_antenna_pose.position = (gnss_pose_pub_method_ == 1) + ? get_average_position(position_buffer_) + : get_median_position(position_buffer_); } // calc gnss antenna orientation @@ -144,7 +147,7 @@ void GNSSPoser::callbackNavSatFix( orientation = msg_gnss_ins_orientation_stamped_->orientation.orientation; } else { static auto prev_position = gnss_antenna_pose.position; - orientation = getQuaternionByPositionDifference(gnss_antenna_pose.position, prev_position); + orientation = get_quaternion_by_position_difference(gnss_antenna_pose.position, prev_position); prev_position = gnss_antenna_pose.position; } @@ -157,7 +160,7 @@ void GNSSPoser::callbackNavSatFix( auto tf_gnss_antenna2base_link_msg_ptr = std::make_shared(); const std::string gnss_frame = nav_sat_fix_msg_ptr->header.frame_id; - getStaticTransform( + get_static_transform( gnss_frame, base_frame_, tf_gnss_antenna2base_link_msg_ptr, nav_sat_fix_msg_ptr->header.stamp); tf2::Transform tf_gnss_antenna2base_link{}; tf2::fromMsg(tf_gnss_antenna2base_link_msg_ptr->transform, tf_gnss_antenna2base_link); @@ -179,11 +182,11 @@ void GNSSPoser::callbackNavSatFix( gnss_base_pose_cov_msg.header = gnss_base_pose_msg.header; gnss_base_pose_cov_msg.pose.pose = gnss_base_pose_msg.pose; gnss_base_pose_cov_msg.pose.covariance[7 * 0] = - canGetCovariance(*nav_sat_fix_msg_ptr) ? nav_sat_fix_msg_ptr->position_covariance[0] : 10.0; + can_get_covariance(*nav_sat_fix_msg_ptr) ? nav_sat_fix_msg_ptr->position_covariance[0] : 10.0; gnss_base_pose_cov_msg.pose.covariance[7 * 1] = - canGetCovariance(*nav_sat_fix_msg_ptr) ? nav_sat_fix_msg_ptr->position_covariance[4] : 10.0; + can_get_covariance(*nav_sat_fix_msg_ptr) ? nav_sat_fix_msg_ptr->position_covariance[4] : 10.0; gnss_base_pose_cov_msg.pose.covariance[7 * 2] = - canGetCovariance(*nav_sat_fix_msg_ptr) ? nav_sat_fix_msg_ptr->position_covariance[8] : 10.0; + can_get_covariance(*nav_sat_fix_msg_ptr) ? nav_sat_fix_msg_ptr->position_covariance[8] : 10.0; if (use_gnss_ins_orientation_) { gnss_base_pose_cov_msg.pose.covariance[7 * 3] = @@ -201,30 +204,30 @@ void GNSSPoser::callbackNavSatFix( pose_cov_pub_->publish(gnss_base_pose_cov_msg); // broadcast map to gnss_base_link - publishTF(map_frame_, gnss_base_frame_, gnss_base_pose_msg); + publish_tf(map_frame_, gnss_base_frame_, gnss_base_pose_msg); } -void GNSSPoser::callbackGnssInsOrientationStamped( +void GNSSPoser::callback_gnss_ins_orientation_stamped( const autoware_sensing_msgs::msg::GnssInsOrientationStamped::ConstSharedPtr msg) { *msg_gnss_ins_orientation_stamped_ = *msg; } -bool GNSSPoser::isFixed(const sensor_msgs::msg::NavSatStatus & nav_sat_status_msg) +bool GNSSPoser::is_fixed(const sensor_msgs::msg::NavSatStatus & nav_sat_status_msg) { return nav_sat_status_msg.status >= sensor_msgs::msg::NavSatStatus::STATUS_FIX; } -bool GNSSPoser::canGetCovariance(const sensor_msgs::msg::NavSatFix & nav_sat_fix_msg) +bool GNSSPoser::can_get_covariance(const sensor_msgs::msg::NavSatFix & nav_sat_fix_msg) { return nav_sat_fix_msg.position_covariance_type > sensor_msgs::msg::NavSatFix::COVARIANCE_TYPE_UNKNOWN; } -geometry_msgs::msg::Point GNSSPoser::getMedianPosition( +geometry_msgs::msg::Point GNSSPoser::get_median_position( const boost::circular_buffer & position_buffer) { - auto getMedian = [](std::vector array) { + auto get_median = [](std::vector array) { std::sort(std::begin(array), std::end(array)); const size_t median_index = array.size() / 2; double median = (array.size() % 2) @@ -243,13 +246,13 @@ geometry_msgs::msg::Point GNSSPoser::getMedianPosition( } geometry_msgs::msg::Point median_point; - median_point.x = getMedian(array_x); - median_point.y = getMedian(array_y); - median_point.z = getMedian(array_z); + median_point.x = get_median(array_x); + median_point.y = get_median(array_y); + median_point.z = get_median(array_z); return median_point; } -geometry_msgs::msg::Point GNSSPoser::getAveragePosition( +geometry_msgs::msg::Point GNSSPoser::get_average_position( const boost::circular_buffer & position_buffer) { std::vector array_x; @@ -271,7 +274,7 @@ geometry_msgs::msg::Point GNSSPoser::getAveragePosition( return average_point; } -geometry_msgs::msg::Quaternion GNSSPoser::getQuaternionByHeading(const int heading) +geometry_msgs::msg::Quaternion GNSSPoser::get_quaternion_by_heading(const int heading) { int heading_conv = 0; // convert heading[0(North)~360] to yaw[-M_PI(West)~M_PI] @@ -288,7 +291,7 @@ geometry_msgs::msg::Quaternion GNSSPoser::getQuaternionByHeading(const int headi return tf2::toMsg(quaternion); } -geometry_msgs::msg::Quaternion GNSSPoser::getQuaternionByPositionDifference( +geometry_msgs::msg::Quaternion GNSSPoser::get_quaternion_by_position_difference( const geometry_msgs::msg::Point & point, const geometry_msgs::msg::Point & prev_point) { const double yaw = std::atan2(point.y - prev_point.y, point.x - prev_point.x); @@ -297,7 +300,7 @@ geometry_msgs::msg::Quaternion GNSSPoser::getQuaternionByPositionDifference( return tf2::toMsg(quaternion); } -bool GNSSPoser::getTransform( +bool GNSSPoser::get_transform( const std::string & target_frame, const std::string & source_frame, const geometry_msgs::msg::TransformStamped::SharedPtr transform_stamped_ptr) { @@ -340,7 +343,7 @@ bool GNSSPoser::getTransform( return true; } -bool GNSSPoser::getStaticTransform( +bool GNSSPoser::get_static_transform( const std::string & target_frame, const std::string & source_frame, const geometry_msgs::msg::TransformStamped::SharedPtr transform_stamped_ptr, const builtin_interfaces::msg::Time & stamp) @@ -385,7 +388,7 @@ bool GNSSPoser::getStaticTransform( return true; } -void GNSSPoser::publishTF( +void GNSSPoser::publish_tf( const std::string & frame_id, const std::string & child_frame_id, const geometry_msgs::msg::PoseStamped & pose_msg) { From 7badbe2cb06fa39a4d486e25d9e210d3839195c3 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 8 Jul 2024 11:18:31 +0900 Subject: [PATCH 096/306] fix(pointcloud_preprocessor): fix documentation (#7878) fix: fix wrong name for json file Signed-off-by: vividf Co-authored-by: Kenzo Lobos Tsunekawa --- sensing/pointcloud_preprocessor/docs/distortion-corrector.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/docs/distortion-corrector.md b/sensing/pointcloud_preprocessor/docs/distortion-corrector.md index 96124f473f825..033e82607057a 100644 --- a/sensing/pointcloud_preprocessor/docs/distortion-corrector.md +++ b/sensing/pointcloud_preprocessor/docs/distortion-corrector.md @@ -36,7 +36,7 @@ Please note that the processing time difference between the two distortion metho ### Core Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/distortion_corrector.schema.json") }} +{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/distortion_corrector_node.schema.json") }} ## Launch From 7c11c8147b3ac6b97aab50ec228491ca43926d5b Mon Sep 17 00:00:00 2001 From: "awf-autoware-bot[bot]" <94889083+awf-autoware-bot[bot]@users.noreply.github.com> Date: Mon, 8 Jul 2024 13:47:05 +0900 Subject: [PATCH 097/306] chore: update CODEOWNERS (#7819) Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions Co-authored-by: Kenzo Lobos Tsunekawa --- .github/CODEOWNERS | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 8f947ce2d2a13..0fe324f84f81a 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -6,7 +6,7 @@ common/autoware_motion_utils/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.j common/autoware_overlay_rviz_plugin/autoware_mission_details_overlay_rviz_plugin/** ahmed.ebrahim@leodrive.ai common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/** khalil@leodrive.ai common/autoware_perception_rviz_plugin/** opensource@apex.ai satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taiki.tanaka@tier4.jp takeshi.miura@tier4.jp yoshi.ri@tier4.jp -common/autoware_point_types/** taichi.higashide@tier4.jp +common/autoware_point_types/** david.wong@tier4.jp max.schmeller@tier4.jp common/autoware_test_utils/** kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp zulfaqar.azmi@tier4.jp common/autoware_testing/** adam.dabrowski@robotec.ai satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp common/autoware_universe_utils/** mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp @@ -115,9 +115,9 @@ perception/elevation_map_loader/** kosuke.takeuchi@tier4.jp shintaro.tomie@tier4 perception/euclidean_cluster/** dai.nguyen@tier4.jp yukihiro.saito@tier4.jp perception/ground_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/image_projection_based_fusion/** dai.nguyen@tier4.jp koji.minoda@tier4.jp kotaro.uetake@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp -perception/lidar_apollo_instance_segmentation/** yukihiro.saito@tier4.jp -perception/lidar_apollo_segmentation_tvm/** ambroise.vincent@arm.com xinyu.wang@tier4.jp -perception/lidar_apollo_segmentation_tvm_nodes/** ambroise.vincent@arm.com xinyu.wang@tier4.jp +perception/lidar_apollo_instance_segmentation/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +perception/lidar_apollo_segmentation_tvm/** ambroise.vincent@arm.com yoshi.ri@tier4.jp +perception/lidar_apollo_segmentation_tvm_nodes/** ambroise.vincent@arm.com yoshi.ri@tier4.jp perception/lidar_centerpoint/** kenzo.lobos@tier4.jp koji.minoda@tier4.jp perception/lidar_transfusion/** amadeusz.szymko.2@tier4.jp kenzo.lobos@tier4.jp satoshi.tanaka@tier4.jp perception/multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp @@ -192,10 +192,10 @@ planning/behavior_velocity_planner/autoware_behavior_velocity_traffic_light_modu planning/behavior_velocity_planner/autoware_behavior_velocity_virtual_traffic_light_module/** kosuke.takeuchi@tier4.jp shumpei.wakabayashi@tier4.jp tomoya.kimura@tier4.jp planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/** satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/** mamoru.sobue@tier4.jp maxime.clement@tier4.jp -planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/** maxime.clement@tier4.jp daniel.sanchez@tier4.jp +planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/** maxime.clement@tier4.jp planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/** maxime.clement@tier4.jp shumpei.wakabayashi@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp -planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp daniel.sanchez@tier4.jp alqudah.mohammad@tier4.jp -planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp daniel.sanchez@tier4.jp alqudah.mohammad@tier4.jp +planning/motion_velocity_planner/autoware_motion_velocity_planner_common/** maxime.clement@tier4.jp +planning/motion_velocity_planner/autoware_motion_velocity_planner_node/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_bezier_sampler/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_frenet_planner/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_path_sampler/** maxime.clement@tier4.jp @@ -204,7 +204,7 @@ sensing/gnss_poser/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minod sensing/image_diagnostics/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp sensing/image_transport_decompressor/** kenzo.lobos@tier4.jp yukihiro.saito@tier4.jp sensing/imu_corrector/** koji.minoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -sensing/livox/livox_tag_filter/** kenzo.lobos@tier4.jp ryohsuke.mitsudome@tier4.jp +sensing/livox/autoware_livox_tag_filter/** kenzo.lobos@tier4.jp ryohsuke.mitsudome@tier4.jp sensing/pointcloud_preprocessor/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp david.wong@tier4.jp kenzo.lobos@tier4.jp kyoichi.sugahara@tier4.jp melike@leodrive.ai shunsuke.miura@tier4.jp yihsiang.fang@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp sensing/radar_scan_to_pointcloud2/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp sensing/radar_static_pointcloud_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp From fb6a1448256a46c3d51580636f9c7f66ce58ce5c Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Mon, 8 Jul 2024 14:49:05 +0900 Subject: [PATCH 098/306] fix(motion_planning): fix processing time topic names (#7885) Signed-off-by: Maxime CLEMENT --- .../autoware_motion_velocity_planner_node/src/node.cpp | 4 ++-- .../autoware_motion_velocity_planner_node/src/node.hpp | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp index f0100f58074ba..f181b0c76b51e 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.cpp @@ -83,8 +83,8 @@ MotionVelocityPlannerNode::MotionVelocityPlannerNode(const rclcpp::NodeOptions & velocity_factor_publisher_ = this->create_publisher( "~/output/velocity_factors", 1); - processing_time_publisher_ = this->create_publisher( - "~/debug/total_time/processing_time_ms", 1); + processing_time_publisher_ = + this->create_publisher("~/debug/processing_time_ms", 1); // Parameters smooth_velocity_before_planning_ = declare_parameter("smooth_velocity_before_planning"); diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp index 8debb9cbedf00..4bf24cadb36f2 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_planner_node/src/node.hpp @@ -97,7 +97,8 @@ class MotionVelocityPlannerNode : public rclcpp::Node rclcpp::Publisher::SharedPtr debug_viz_pub_; rclcpp::Publisher::SharedPtr velocity_factor_publisher_; - autoware::universe_utils::ProcessingTimePublisher processing_diag_publisher_{this}; + autoware::universe_utils::ProcessingTimePublisher processing_diag_publisher_{ + this, "~/debug/processing_time_ms_diag"}; rclcpp::Publisher::SharedPtr processing_time_publisher_; autoware::universe_utils::PublishedTimePublisher published_time_publisher_{this}; From 76c69f7523924703860d174d0f9c279b1d192207 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 8 Jul 2024 15:53:24 +0900 Subject: [PATCH 099/306] refactor(probabilistic_occupancy_grid_map)!: fix namespace and directory structure (#7872) * refactor: update include paths for probabilistic occupancy grid map Signed-off-by: Taekjin LEE * refactor: update include paths for probabilistic occupancy grid map Signed-off-by: Taekjin LEE * refactor: update namespace for nodes Signed-off-by: Taekjin LEE * refactor: update namespace for lib Signed-off-by: Taekjin LEE * refactor: remove unused dependency Signed-off-by: Taekjin LEE * refactor: use const pointer for occupancy grid map data Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- .../CMakeLists.txt | 35 ++++++++++--------- .../cost_value}/cost_value.hpp | 14 +++++--- .../costmap_2d}/occupancy_grid_map.hpp | 9 +++-- .../costmap_2d}/occupancy_grid_map_base.hpp | 9 +++-- .../costmap_2d}/occupancy_grid_map_fixed.hpp | 11 +++--- .../occupancy_grid_map_projective.hpp | 11 +++--- .../fusion_policy/fusion_policy.hpp} | 12 ++++--- .../updater/binary_bayes_filter_updater.hpp} | 11 +++--- .../log_odds_bayes_filter_updater.hpp} | 15 ++++---- .../updater/ogm_updater_interface.hpp} | 14 ++++---- .../utils/utils.hpp | 12 ++++--- ...serscan_based_occupancy_grid_map.launch.py | 2 +- ...ntcloud_based_occupancy_grid_map.launch.py | 2 +- ...ntcloud_based_occupancy_grid_map.launch.py | 2 +- .../costmap_2d}/occupancy_grid_map.cpp | 17 +++++---- .../costmap_2d}/occupancy_grid_map_base.cpp | 12 ++++--- .../costmap_2d}/occupancy_grid_map_fixed.cpp | 29 ++++++++------- .../occupancy_grid_map_projective.cpp | 26 ++++++++------ .../fusion_policy/fusion_policy.cpp} | 9 +++-- .../updater/binary_bayes_filter_updater.cpp} | 13 ++++--- .../log_odds_bayes_filter_updater.cpp} | 10 ++++-- .../{src => lib}/utils/utils.cpp | 15 ++++---- .../package.xml | 5 +-- .../synchronized_grid_map_fusion_node.cpp | 20 +++++------ .../synchronized_grid_map_fusion_node.hpp | 18 +++++----- ...aserscan_based_occupancy_grid_map_node.cpp | 14 ++++---- ...aserscan_based_occupancy_grid_map_node.hpp | 16 ++++----- ...intcloud_based_occupancy_grid_map_node.cpp | 18 +++++----- ...intcloud_based_occupancy_grid_map_node.hpp | 16 ++++----- .../test/cost_value_test.cpp | 6 ++-- .../test/fusion_policy_test.cpp | 9 ++--- .../test/test_utils.cpp | 12 +++---- 32 files changed, 241 insertions(+), 183 deletions(-) rename perception/probabilistic_occupancy_grid_map/include/{probabilistic_occupancy_grid_map => autoware/probabilistic_occupancy_grid_map/cost_value}/cost_value.hpp (90%) rename perception/probabilistic_occupancy_grid_map/include/{probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map => autoware/probabilistic_occupancy_grid_map/costmap_2d}/occupancy_grid_map.hpp (91%) rename perception/probabilistic_occupancy_grid_map/include/{probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map => autoware/probabilistic_occupancy_grid_map/costmap_2d}/occupancy_grid_map_base.hpp (91%) rename perception/probabilistic_occupancy_grid_map/include/{probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map => autoware/probabilistic_occupancy_grid_map/costmap_2d}/occupancy_grid_map_fixed.hpp (74%) rename perception/probabilistic_occupancy_grid_map/include/{probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map => autoware/probabilistic_occupancy_grid_map/costmap_2d}/occupancy_grid_map_projective.hpp (77%) rename perception/probabilistic_occupancy_grid_map/include/{probabilistic_occupancy_grid_map/fusion/single_frame_fusion_policy.hpp => autoware/probabilistic_occupancy_grid_map/fusion_policy/fusion_policy.hpp} (84%) rename perception/probabilistic_occupancy_grid_map/include/{probabilistic_occupancy_grid_map/updater/occupancy_grid_map_binary_bayes_filter_updater.hpp => autoware/probabilistic_occupancy_grid_map/updater/binary_bayes_filter_updater.hpp} (72%) rename perception/probabilistic_occupancy_grid_map/include/{probabilistic_occupancy_grid_map/updater/occupancy_grid_map_log_odds_bayes_filter_updater.hpp => autoware/probabilistic_occupancy_grid_map/updater/log_odds_bayes_filter_updater.hpp} (69%) rename perception/probabilistic_occupancy_grid_map/include/{probabilistic_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp => autoware/probabilistic_occupancy_grid_map/updater/ogm_updater_interface.hpp} (68%) rename perception/probabilistic_occupancy_grid_map/include/{ => autoware}/probabilistic_occupancy_grid_map/utils/utils.hpp (90%) rename perception/probabilistic_occupancy_grid_map/{src/laserscan_based_occupancy_grid_map => lib/costmap_2d}/occupancy_grid_map.cpp (93%) rename perception/probabilistic_occupancy_grid_map/{src/pointcloud_based_occupancy_grid_map => lib/costmap_2d}/occupancy_grid_map_base.cpp (95%) rename perception/probabilistic_occupancy_grid_map/{src/pointcloud_based_occupancy_grid_map => lib/costmap_2d}/occupancy_grid_map_fixed.cpp (90%) rename perception/probabilistic_occupancy_grid_map/{src/pointcloud_based_occupancy_grid_map => lib/costmap_2d}/occupancy_grid_map_projective.cpp (93%) rename perception/probabilistic_occupancy_grid_map/{src/fusion/single_frame_fusion_policy.cpp => lib/fusion_policy/fusion_policy.cpp} (97%) rename perception/probabilistic_occupancy_grid_map/{src/updater/occupancy_grid_map_binary_bayes_filter_updater.cpp => lib/updater/binary_bayes_filter_updater.cpp} (88%) rename perception/probabilistic_occupancy_grid_map/{src/updater/occupancy_grid_map_log_odds_bayes_filter_updater.cpp => lib/updater/log_odds_bayes_filter_updater.cpp} (88%) rename perception/probabilistic_occupancy_grid_map/{src => lib}/utils/utils.cpp (95%) rename perception/probabilistic_occupancy_grid_map/{include/probabilistic_occupancy_grid_map => src}/fusion/synchronized_grid_map_fusion_node.hpp (85%) rename perception/probabilistic_occupancy_grid_map/{include/probabilistic_occupancy_grid_map => src}/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.hpp (82%) rename perception/probabilistic_occupancy_grid_map/{include/probabilistic_occupancy_grid_map => src}/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.hpp (81%) diff --git a/perception/probabilistic_occupancy_grid_map/CMakeLists.txt b/perception/probabilistic_occupancy_grid_map/CMakeLists.txt index 928532f928e38..d01ef157e21b4 100644 --- a/perception/probabilistic_occupancy_grid_map/CMakeLists.txt +++ b/perception/probabilistic_occupancy_grid_map/CMakeLists.txt @@ -14,8 +14,8 @@ include_directories( ) ament_auto_add_library(${PROJECT_NAME}_common SHARED - src/updater/occupancy_grid_map_binary_bayes_filter_updater.cpp - src/utils/utils.cpp + lib/updater/binary_bayes_filter_updater.cpp + lib/utils/utils.cpp ) target_link_libraries(${PROJECT_NAME}_common ${PCL_LIBRARIES} @@ -24,9 +24,9 @@ target_link_libraries(${PROJECT_NAME}_common # PointcloudBasedOccupancyGridMap ament_auto_add_library(pointcloud_based_occupancy_grid_map SHARED src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp - src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.cpp - src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.cpp - src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.cpp + lib/costmap_2d/occupancy_grid_map_base.cpp + lib/costmap_2d/occupancy_grid_map_fixed.cpp + lib/costmap_2d/occupancy_grid_map_projective.cpp ) target_link_libraries(pointcloud_based_occupancy_grid_map @@ -35,14 +35,14 @@ target_link_libraries(pointcloud_based_occupancy_grid_map ) rclcpp_components_register_node(pointcloud_based_occupancy_grid_map - PLUGIN "occupancy_grid_map::PointcloudBasedOccupancyGridMapNode" + PLUGIN "autoware::occupancy_grid_map::PointcloudBasedOccupancyGridMapNode" EXECUTABLE pointcloud_based_occupancy_grid_map_node ) # LaserscanBasedOccupancyGridMap ament_auto_add_library(laserscan_based_occupancy_grid_map SHARED src/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.cpp - src/laserscan_based_occupancy_grid_map/occupancy_grid_map.cpp + lib/costmap_2d/occupancy_grid_map.cpp ) target_link_libraries(laserscan_based_occupancy_grid_map @@ -51,17 +51,17 @@ target_link_libraries(laserscan_based_occupancy_grid_map ) rclcpp_components_register_node(laserscan_based_occupancy_grid_map - PLUGIN "occupancy_grid_map::LaserscanBasedOccupancyGridMapNode" + PLUGIN "autoware::occupancy_grid_map::LaserscanBasedOccupancyGridMapNode" EXECUTABLE laserscan_based_occupancy_grid_map_node ) # GridMapFusionNode ament_auto_add_library(synchronized_grid_map_fusion SHARED src/fusion/synchronized_grid_map_fusion_node.cpp - src/fusion/single_frame_fusion_policy.cpp - src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.cpp - src/updater/occupancy_grid_map_log_odds_bayes_filter_updater.cpp - src/utils/utils.cpp + lib/fusion_policy/fusion_policy.cpp + lib/costmap_2d/occupancy_grid_map_fixed.cpp + lib/updater/log_odds_bayes_filter_updater.cpp + lib/utils/utils.cpp ) target_link_libraries(synchronized_grid_map_fusion @@ -69,7 +69,7 @@ target_link_libraries(synchronized_grid_map_fusion ) rclcpp_components_register_node(synchronized_grid_map_fusion - PLUGIN "synchronized_grid_map_fusion::GridMapFusionNode" + PLUGIN "autoware::occupancy_grid_map::GridMapFusionNode" EXECUTABLE synchronized_grid_map_fusion_node ) @@ -88,13 +88,14 @@ if(BUILD_TESTING) # gtest ament_add_gtest(test_utils - test/test_utils.cpp + test/test_utils.cpp ) ament_add_gtest(costmap_unit_tests - test/cost_value_test.cpp) + test/cost_value_test.cpp + ) ament_add_gtest(fusion_policy_unit_tests - test/fusion_policy_test.cpp - src/fusion/single_frame_fusion_policy.cpp + test/fusion_policy_test.cpp + lib/fusion_policy/fusion_policy.cpp ) target_link_libraries(test_utils ${PCL_LIBRARIES} diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/cost_value.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp similarity index 90% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/cost_value.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp index 880297a1210ed..d470d206c41c6 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/cost_value.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp @@ -48,12 +48,14 @@ * Author: Eitan Marder-Eppstein *********************************************************************/ -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__COST_VALUE_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__COST_VALUE_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COST_VALUE__COST_VALUE_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COST_VALUE__COST_VALUE_HPP_ #include -namespace occupancy_cost_value +namespace autoware::occupancy_grid_map +{ +namespace cost_value { static const unsigned char NO_INFORMATION = 128; // 0.5 * 255 static const unsigned char LETHAL_OBSTACLE = 255; @@ -101,6 +103,8 @@ struct InverseCostTranslationTable static const CostTranslationTable cost_translation_table; static const InverseCostTranslationTable inverse_cost_translation_table; -} // namespace occupancy_cost_value -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__COST_VALUE_HPP_ +} // namespace cost_value +} // namespace autoware::occupancy_grid_map + +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COST_VALUE__COST_VALUE_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map/occupancy_grid_map.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map.hpp similarity index 91% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map/occupancy_grid_map.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map.hpp index d2210cf9c348a..93e768c0f6b4e 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map/occupancy_grid_map.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map.hpp @@ -49,8 +49,8 @@ * David V. Lu!! *********************************************************************/ -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_HPP_ #include #include @@ -59,6 +59,8 @@ #include #include +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { using geometry_msgs::msg::Pose; @@ -90,5 +92,6 @@ class OccupancyGridMap : public nav2_costmap_2d::Costmap2D }; } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_HPP_ +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp similarity index 91% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp index f01b2d74e160b..2b2057af9cc12 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp @@ -49,8 +49,8 @@ * David V. Lu!! *********************************************************************/ -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_BASE_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_BASE_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_BASE_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_BASE_HPP_ #include #include @@ -59,6 +59,8 @@ #include #include +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { using geometry_msgs::msg::Pose; @@ -91,5 +93,6 @@ class OccupancyGridMapInterface : public nav2_costmap_2d::Costmap2D }; } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_BASE_HPP_ +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_BASE_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp similarity index 74% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp index 298f327d632d7..9dfd8b8689123 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp @@ -12,11 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_FIXED_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_FIXED_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_FIXED_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_FIXED_HPP_ -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp" +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { using geometry_msgs::msg::Pose; @@ -43,5 +45,6 @@ class OccupancyGridMapFixedBlindSpot : public OccupancyGridMapInterface }; } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_FIXED_HPP_ +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_FIXED_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_projective.hpp similarity index 77% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_projective.hpp index 67b51d6184c8c..1f0f92d933ff3 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_projective.hpp @@ -12,15 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_PROJECTIVE_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_PROJECTIVE_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_PROJECTIVE_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_PROJECTIVE_HPP_ -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp" #include #include +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { using geometry_msgs::msg::Pose; @@ -51,5 +53,6 @@ class OccupancyGridMapProjectiveBlindSpot : public OccupancyGridMapInterface }; } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_PROJECTIVE_HPP_ +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_PROJECTIVE_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/fusion/single_frame_fusion_policy.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/fusion_policy/fusion_policy.hpp similarity index 84% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/fusion/single_frame_fusion_policy.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/fusion_policy/fusion_policy.hpp index 1f0553878ef5a..a2d7c90a023a5 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/fusion/single_frame_fusion_policy.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/fusion_policy/fusion_policy.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__FUSION__SINGLE_FRAME_FUSION_POLICY_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__FUSION__SINGLE_FRAME_FUSION_POLICY_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__FUSION_POLICY__FUSION_POLICY_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__FUSION_POLICY__FUSION_POLICY_HPP_ -#include "probabilistic_occupancy_grid_map/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" #include #include @@ -25,6 +25,8 @@ /*min and max prob threshold to prevent log-odds to diverge*/ #define EPSILON_PROB 0.03 +namespace autoware::occupancy_grid_map +{ namespace fusion_policy { enum class FusionMethod { OVERWRITE, LOG_ODDS, DEMPSTER_SHAFER }; @@ -61,6 +63,8 @@ unsigned char singleFrameOccupancyFusion( unsigned char singleFrameOccupancyFusion( const std::vector & occupancy, FusionMethod method, const std::vector & reliability); + } // namespace fusion_policy +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__FUSION__SINGLE_FRAME_FUSION_POLICY_HPP_ +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__FUSION_POLICY__FUSION_POLICY_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/updater/occupancy_grid_map_binary_bayes_filter_updater.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/updater/binary_bayes_filter_updater.hpp similarity index 72% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/updater/occupancy_grid_map_binary_bayes_filter_updater.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/updater/binary_bayes_filter_updater.hpp index 3a921035ef219..af28b7962b3bc 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/updater/occupancy_grid_map_binary_bayes_filter_updater.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/updater/binary_bayes_filter_updater.hpp @@ -12,14 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OCCUPANCY_GRID_MAP_BINARY_BAYES_FILTER_UPDATER_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OCCUPANCY_GRID_MAP_BINARY_BAYES_FILTER_UPDATER_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__BINARY_BAYES_FILTER_UPDATER_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__BINARY_BAYES_FILTER_UPDATER_HPP_ -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/ogm_updater_interface.hpp" #include #include +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { class OccupancyGridMapBBFUpdater : public OccupancyGridMapUpdaterInterface @@ -38,5 +40,6 @@ class OccupancyGridMapBBFUpdater : public OccupancyGridMapUpdaterInterface }; } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OCCUPANCY_GRID_MAP_BINARY_BAYES_FILTER_UPDATER_HPP_ +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__BINARY_BAYES_FILTER_UPDATER_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/updater/occupancy_grid_map_log_odds_bayes_filter_updater.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/updater/log_odds_bayes_filter_updater.hpp similarity index 69% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/updater/occupancy_grid_map_log_odds_bayes_filter_updater.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/updater/log_odds_bayes_filter_updater.hpp index 245484e442609..d7bb1184c06d6 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/updater/occupancy_grid_map_log_odds_bayes_filter_updater.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/updater/log_odds_bayes_filter_updater.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OCCUPANCY_GRID_MAP_LOG_ODDS_BAYES_FILTER_UPDATER_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OCCUPANCY_GRID_MAP_LOG_ODDS_BAYES_FILTER_UPDATER_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__LOG_ODDS_BAYES_FILTER_UPDATER_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__LOG_ODDS_BAYES_FILTER_UPDATER_HPP_ -#include "probabilistic_occupancy_grid_map/fusion/single_frame_fusion_policy.hpp" -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp" -#include "probabilistic_occupancy_grid_map/utils/utils.hpp" +#include "autoware/probabilistic_occupancy_grid_map/fusion_policy/fusion_policy.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/ogm_updater_interface.hpp" +#include "autoware/probabilistic_occupancy_grid_map/utils/utils.hpp" #include #include @@ -25,6 +25,8 @@ // LOBF means: Log Odds Bayes Filter // cspell: ignore LOBF +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { class OccupancyGridMapLOBFUpdater : public OccupancyGridMapUpdaterInterface @@ -45,5 +47,6 @@ class OccupancyGridMapLOBFUpdater : public OccupancyGridMapUpdaterInterface }; } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OCCUPANCY_GRID_MAP_LOG_ODDS_BAYES_FILTER_UPDATER_HPP_ +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__LOG_ODDS_BAYES_FILTER_UPDATER_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/updater/ogm_updater_interface.hpp similarity index 68% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/updater/ogm_updater_interface.hpp index e85edf2245ef3..75231089ac33c 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/updater/ogm_updater_interface.hpp @@ -12,14 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OCCUPANCY_GRID_MAP_UPDATER_INTERFACE_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OCCUPANCY_GRID_MAP_UPDATER_INTERFACE_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OGM_UPDATER_INTERFACE_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OGM_UPDATER_INTERFACE_HPP_ -#include "probabilistic_occupancy_grid_map/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" #include #include +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { class OccupancyGridMapUpdaterInterface : public nav2_costmap_2d::Costmap2D @@ -27,8 +29,7 @@ class OccupancyGridMapUpdaterInterface : public nav2_costmap_2d::Costmap2D public: OccupancyGridMapUpdaterInterface( const unsigned int cells_size_x, const unsigned int cells_size_y, const float resolution) - : Costmap2D( - cells_size_x, cells_size_y, resolution, 0.f, 0.f, occupancy_cost_value::NO_INFORMATION) + : Costmap2D(cells_size_x, cells_size_y, resolution, 0.f, 0.f, cost_value::NO_INFORMATION) { } virtual ~OccupancyGridMapUpdaterInterface() = default; @@ -37,5 +38,6 @@ class OccupancyGridMapUpdaterInterface : public nav2_costmap_2d::Costmap2D }; } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OCCUPANCY_GRID_MAP_UPDATER_INTERFACE_HPP_ +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UPDATER__OGM_UPDATER_INTERFACE_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/utils/utils.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/utils/utils.hpp similarity index 90% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/utils/utils.hpp rename to perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/utils/utils.hpp index 0950272dac470..50b470d904ef6 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/utils/utils.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/utils/utils.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__UTILS__UTILS_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__UTILS__UTILS_HPP_ +#ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UTILS__UTILS_HPP_ +#define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UTILS__UTILS_HPP_ -#include "probabilistic_occupancy_grid_map/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" #include #include @@ -45,6 +45,8 @@ #include #include +namespace autoware::occupancy_grid_map +{ namespace utils { @@ -117,6 +119,8 @@ bool extractCommonPointCloud( sensor_msgs::msg::PointCloud2 & output_obstacle_pc); unsigned char getApproximateOccupancyState(const unsigned char & value); + } // namespace utils +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__UTILS__UTILS_HPP_ +#endif // AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__UTILS__UTILS_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/launch/laserscan_based_occupancy_grid_map.launch.py b/perception/probabilistic_occupancy_grid_map/launch/laserscan_based_occupancy_grid_map.launch.py index 62cfa4bcb5228..1edc538b3de3f 100644 --- a/perception/probabilistic_occupancy_grid_map/launch/laserscan_based_occupancy_grid_map.launch.py +++ b/perception/probabilistic_occupancy_grid_map/launch/laserscan_based_occupancy_grid_map.launch.py @@ -85,7 +85,7 @@ def launch_setup(context, *args, **kwargs): ), ComposableNode( package="probabilistic_occupancy_grid_map", - plugin="occupancy_grid_map::LaserscanBasedOccupancyGridMapNode", + plugin="autoware::occupancy_grid_map::LaserscanBasedOccupancyGridMapNode", name="occupancy_grid_map_node", remappings=[ ("~/input/laserscan", LaunchConfiguration("output/laserscan")), diff --git a/perception/probabilistic_occupancy_grid_map/launch/multi_lidar_pointcloud_based_occupancy_grid_map.launch.py b/perception/probabilistic_occupancy_grid_map/launch/multi_lidar_pointcloud_based_occupancy_grid_map.launch.py index b112dd0a84b83..ef40839d2a5aa 100644 --- a/perception/probabilistic_occupancy_grid_map/launch/multi_lidar_pointcloud_based_occupancy_grid_map.launch.py +++ b/perception/probabilistic_occupancy_grid_map/launch/multi_lidar_pointcloud_based_occupancy_grid_map.launch.py @@ -196,7 +196,7 @@ def launch_setup(context, *args, **kwargs): # generate composable node node = ComposableNode( package="probabilistic_occupancy_grid_map", - plugin="occupancy_grid_map::PointcloudBasedOccupancyGridMapNode", + plugin="autoware::occupancy_grid_map::PointcloudBasedOccupancyGridMapNode", name="occupancy_grid_map_node", namespace=frame_name, remappings=[ diff --git a/perception/probabilistic_occupancy_grid_map/launch/pointcloud_based_occupancy_grid_map.launch.py b/perception/probabilistic_occupancy_grid_map/launch/pointcloud_based_occupancy_grid_map.launch.py index 0e84e4860fdf3..bb5ef025a7e47 100644 --- a/perception/probabilistic_occupancy_grid_map/launch/pointcloud_based_occupancy_grid_map.launch.py +++ b/perception/probabilistic_occupancy_grid_map/launch/pointcloud_based_occupancy_grid_map.launch.py @@ -96,7 +96,7 @@ def launch_setup(context, *args, **kwargs): composable_nodes.append( ComposableNode( package="probabilistic_occupancy_grid_map", - plugin="occupancy_grid_map::PointcloudBasedOccupancyGridMapNode", + plugin="autoware::occupancy_grid_map::PointcloudBasedOccupancyGridMapNode", name="occupancy_grid_map_node", remappings=[ ( diff --git a/perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/occupancy_grid_map.cpp b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map.cpp similarity index 93% rename from perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/occupancy_grid_map.cpp rename to perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map.cpp index 3d02be9ca7156..25eafcd564e2d 100644 --- a/perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/occupancy_grid_map.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map.cpp @@ -49,21 +49,23 @@ * David V. Lu!! *********************************************************************/ -#include "probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map/occupancy_grid_map.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map.hpp" -#include "probabilistic_occupancy_grid_map/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" #include #include +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { using sensor_msgs::PointCloud2ConstIterator; OccupancyGridMap::OccupancyGridMap( const unsigned int cells_size_x, const unsigned int cells_size_y, const float resolution) -: Costmap2D(cells_size_x, cells_size_y, resolution, 0.f, 0.f, occupancy_cost_value::NO_INFORMATION) +: Costmap2D(cells_size_x, cells_size_y, resolution, 0.f, 0.f, cost_value::NO_INFORMATION) { } @@ -140,7 +142,7 @@ void OccupancyGridMap::raytrace2D(const PointCloud2 & pointcloud, const Pose & r raytraceFreespace(pointcloud, robot_pose); // occupied - MarkCell marker(costmap_, occupancy_cost_value::LETHAL_OBSTACLE); + MarkCell marker(costmap_, cost_value::LETHAL_OBSTACLE); for (PointCloud2ConstIterator iter_x(pointcloud, "x"), iter_y(pointcloud, "y"); iter_x != iter_x.end(); ++iter_x, ++iter_y) { unsigned int mx, my; @@ -155,12 +157,12 @@ void OccupancyGridMap::raytrace2D(const PointCloud2 & pointcloud, const Pose & r void OccupancyGridMap::updateFreespaceCells(const PointCloud2 & pointcloud) { - updateCellsByPointCloud(pointcloud, occupancy_cost_value::FREE_SPACE); + updateCellsByPointCloud(pointcloud, cost_value::FREE_SPACE); } void OccupancyGridMap::updateOccupiedCells(const PointCloud2 & pointcloud) { - updateCellsByPointCloud(pointcloud, occupancy_cost_value::LETHAL_OBSTACLE); + updateCellsByPointCloud(pointcloud, cost_value::LETHAL_OBSTACLE); } void OccupancyGridMap::updateCellsByPointCloud( @@ -244,9 +246,10 @@ void OccupancyGridMap::raytraceFreespace(const PointCloud2 & pointcloud, const P } constexpr unsigned int cell_raytrace_range = 10000; // large number to ignore range threshold - MarkCell marker(costmap_, occupancy_cost_value::FREE_SPACE); + MarkCell marker(costmap_, cost_value::FREE_SPACE); raytraceLine(marker, x0, y0, x1, y1, cell_raytrace_range); } } } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map diff --git a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.cpp b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_base.cpp similarity index 95% rename from perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.cpp rename to perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_base.cpp index 3d176e41583a0..5e9b5598c8f63 100644 --- a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_base.cpp @@ -49,10 +49,10 @@ * David V. Lu!! *********************************************************************/ -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp" -#include "probabilistic_occupancy_grid_map/cost_value.hpp" -#include "probabilistic_occupancy_grid_map/utils/utils.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/utils/utils.hpp" #include #include @@ -69,13 +69,16 @@ #endif #include + +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { using sensor_msgs::PointCloud2ConstIterator; OccupancyGridMapInterface::OccupancyGridMapInterface( const unsigned int cells_size_x, const unsigned int cells_size_y, const float resolution) -: Costmap2D(cells_size_x, cells_size_y, resolution, 0.f, 0.f, occupancy_cost_value::NO_INFORMATION) +: Costmap2D(cells_size_x, cells_size_y, resolution, 0.f, 0.f, cost_value::NO_INFORMATION) { } @@ -230,3 +233,4 @@ void OccupancyGridMapInterface::raytrace( } } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map diff --git a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.cpp b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp similarity index 90% rename from perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.cpp rename to perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp index d4e177209f99d..f25009d47bdcc 100644 --- a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp" -#include "probabilistic_occupancy_grid_map/cost_value.hpp" -#include "probabilistic_occupancy_grid_map/utils/utils.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/utils/utils.hpp" #include #include @@ -33,6 +33,9 @@ #endif #include + +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { using sensor_msgs::PointCloud2ConstIterator; @@ -136,7 +139,7 @@ void OccupancyGridMapFixedBlindSpot::updateWithPointCloud( } raytrace( scan_origin.position.x, scan_origin.position.y, end_distance.wx, end_distance.wy, - occupancy_cost_value::FREE_SPACE); + cost_value::FREE_SPACE); } // Second step: Add unknown cell @@ -162,9 +165,8 @@ void OccupancyGridMapFixedBlindSpot::updateWithPointCloud( const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); if (!no_freespace_point) { const auto & target = *raw_distance_iter; - raytrace( - source.wx, source.wy, target.wx, target.wy, occupancy_cost_value::NO_INFORMATION); - setCellValue(target.wx, target.wy, occupancy_cost_value::FREE_SPACE); + raytrace(source.wx, source.wy, target.wx, target.wy, cost_value::NO_INFORMATION); + setCellValue(target.wx, target.wy, cost_value::FREE_SPACE); } continue; } @@ -177,7 +179,7 @@ void OccupancyGridMapFixedBlindSpot::updateWithPointCloud( } else if (no_freespace_point) { const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); const auto & target = obstacle_pointcloud_angle_bin.at(dist_index + 1); - raytrace(source.wx, source.wy, target.wx, target.wy, occupancy_cost_value::NO_INFORMATION); + raytrace(source.wx, source.wy, target.wx, target.wy, cost_value::NO_INFORMATION); continue; } @@ -186,13 +188,13 @@ void OccupancyGridMapFixedBlindSpot::updateWithPointCloud( if (next_raw_distance < next_obstacle_point_distance) { const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); const auto & target = *raw_distance_iter; - raytrace(source.wx, source.wy, target.wx, target.wy, occupancy_cost_value::NO_INFORMATION); - setCellValue(target.wx, target.wy, occupancy_cost_value::FREE_SPACE); + raytrace(source.wx, source.wy, target.wx, target.wy, cost_value::NO_INFORMATION); + setCellValue(target.wx, target.wy, cost_value::FREE_SPACE); continue; } else { const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); const auto & target = obstacle_pointcloud_angle_bin.at(dist_index + 1); - raytrace(source.wx, source.wy, target.wx, target.wy, occupancy_cost_value::NO_INFORMATION); + raytrace(source.wx, source.wy, target.wx, target.wy, cost_value::NO_INFORMATION); continue; } } @@ -203,7 +205,7 @@ void OccupancyGridMapFixedBlindSpot::updateWithPointCloud( auto & obstacle_pointcloud_angle_bin = obstacle_pointcloud_angle_bins.at(bin_index); for (size_t dist_index = 0; dist_index < obstacle_pointcloud_angle_bin.size(); ++dist_index) { const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); - setCellValue(source.wx, source.wy, occupancy_cost_value::LETHAL_OBSTACLE); + setCellValue(source.wx, source.wy, cost_value::LETHAL_OBSTACLE); if (dist_index + 1 == obstacle_pointcloud_angle_bin.size()) { continue; @@ -215,7 +217,7 @@ void OccupancyGridMapFixedBlindSpot::updateWithPointCloud( if (next_obstacle_point_distance <= distance_margin_) { const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); const auto & target = obstacle_pointcloud_angle_bin.at(dist_index + 1); - raytrace(source.wx, source.wy, target.wx, target.wy, occupancy_cost_value::LETHAL_OBSTACLE); + raytrace(source.wx, source.wy, target.wx, target.wy, cost_value::LETHAL_OBSTACLE); continue; } } @@ -229,3 +231,4 @@ void OccupancyGridMapFixedBlindSpot::initRosParam(rclcpp::Node & node) } } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map diff --git a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.cpp b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp similarity index 93% rename from perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.cpp rename to perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp index 03d7a42ae7043..a2400fb3c81b2 100644 --- a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_projective.hpp" -#include "probabilistic_occupancy_grid_map/cost_value.hpp" -#include "probabilistic_occupancy_grid_map/utils/utils.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/utils/utils.hpp" #include #include @@ -34,6 +34,9 @@ #endif #include + +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { using sensor_msgs::PointCloud2ConstIterator; @@ -192,7 +195,7 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( } raytrace( scan_origin.position.x, scan_origin.position.y, ray_end.wx, ray_end.wy, - occupancy_cost_value::FREE_SPACE); + cost_value::FREE_SPACE); } if (pub_debug_grid_) @@ -219,7 +222,7 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); raytrace( source.wx, source.wy, source.projected_wx, source.projected_wy, - occupancy_cost_value::NO_INFORMATION); + cost_value::NO_INFORMATION); break; } @@ -227,7 +230,7 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); raytrace( source.wx, source.wy, source.projected_wx, source.projected_wy, - occupancy_cost_value::NO_INFORMATION); + cost_value::NO_INFORMATION); continue; } @@ -243,13 +246,13 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( if (next_raw_distance < next_obstacle_point_distance) { const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); const auto & target = *raw_distance_iter; - raytrace(source.wx, source.wy, target.wx, target.wy, occupancy_cost_value::NO_INFORMATION); - setCellValue(target.wx, target.wy, occupancy_cost_value::FREE_SPACE); + raytrace(source.wx, source.wy, target.wx, target.wy, cost_value::NO_INFORMATION); + setCellValue(target.wx, target.wy, cost_value::FREE_SPACE); continue; } else { const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); const auto & target = obstacle_pointcloud_angle_bin.at(dist_index + 1); - raytrace(source.wx, source.wy, target.wx, target.wy, occupancy_cost_value::NO_INFORMATION); + raytrace(source.wx, source.wy, target.wx, target.wy, cost_value::NO_INFORMATION); continue; } } @@ -262,7 +265,7 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( auto & obstacle_pointcloud_angle_bin = obstacle_pointcloud_angle_bins.at(bin_index); for (size_t dist_index = 0; dist_index < obstacle_pointcloud_angle_bin.size(); ++dist_index) { const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); - setCellValue(source.wx, source.wy, occupancy_cost_value::LETHAL_OBSTACLE); + setCellValue(source.wx, source.wy, cost_value::LETHAL_OBSTACLE); if (dist_index + 1 == obstacle_pointcloud_angle_bin.size()) { continue; @@ -274,7 +277,7 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( if (next_obstacle_point_distance <= obstacle_separation_threshold_) { const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); const auto & target = obstacle_pointcloud_angle_bin.at(dist_index + 1); - raytrace(source.wx, source.wy, target.wx, target.wy, occupancy_cost_value::LETHAL_OBSTACLE); + raytrace(source.wx, source.wy, target.wx, target.wy, cost_value::LETHAL_OBSTACLE); continue; } } @@ -299,3 +302,4 @@ void OccupancyGridMapProjectiveBlindSpot::initRosParam(rclcpp::Node & node) } } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map diff --git a/perception/probabilistic_occupancy_grid_map/src/fusion/single_frame_fusion_policy.cpp b/perception/probabilistic_occupancy_grid_map/lib/fusion_policy/fusion_policy.cpp similarity index 97% rename from perception/probabilistic_occupancy_grid_map/src/fusion/single_frame_fusion_policy.cpp rename to perception/probabilistic_occupancy_grid_map/lib/fusion_policy/fusion_policy.cpp index 7e2c3f7ba304a..1e88b7a39fd14 100644 --- a/perception/probabilistic_occupancy_grid_map/src/fusion/single_frame_fusion_policy.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/fusion_policy/fusion_policy.cpp @@ -12,8 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/fusion/single_frame_fusion_policy.hpp" +#include "autoware/probabilistic_occupancy_grid_map/fusion_policy/fusion_policy.hpp" +namespace autoware::occupancy_grid_map +{ namespace fusion_policy { @@ -61,9 +63,9 @@ namespace overwrite_fusion */ State getApproximateState(const unsigned char & occupancy) { - if (occupancy >= occupancy_cost_value::OCCUPIED_THRESHOLD) { + if (occupancy >= cost_value::OCCUPIED_THRESHOLD) { return State::OCCUPIED; - } else if (occupancy <= occupancy_cost_value::FREE_THRESHOLD) { + } else if (occupancy <= cost_value::FREE_THRESHOLD) { return State::FREE; } else { return State::UNKNOWN; @@ -320,3 +322,4 @@ unsigned char singleFrameOccupancyFusion( } } // namespace fusion_policy +} // namespace autoware::occupancy_grid_map diff --git a/perception/probabilistic_occupancy_grid_map/src/updater/occupancy_grid_map_binary_bayes_filter_updater.cpp b/perception/probabilistic_occupancy_grid_map/lib/updater/binary_bayes_filter_updater.cpp similarity index 88% rename from perception/probabilistic_occupancy_grid_map/src/updater/occupancy_grid_map_binary_bayes_filter_updater.cpp rename to perception/probabilistic_occupancy_grid_map/lib/updater/binary_bayes_filter_updater.cpp index 40f538a64f6e9..74506d095b36d 100644 --- a/perception/probabilistic_occupancy_grid_map/src/updater/occupancy_grid_map_binary_bayes_filter_updater.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/updater/binary_bayes_filter_updater.cpp @@ -12,12 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_binary_bayes_filter_updater.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/binary_bayes_filter_updater.hpp" -#include "probabilistic_occupancy_grid_map/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" #include +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { @@ -48,15 +50,15 @@ inline unsigned char OccupancyGridMapBBFUpdater::applyBBF( float pz{}; float not_pz{}; float po_hat{}; - if (z == occupancy_cost_value::LETHAL_OBSTACLE) { + if (z == cost_value::LETHAL_OBSTACLE) { pz = probability_matrix_(Index::OCCUPIED, Index::OCCUPIED); not_pz = probability_matrix_(Index::FREE, Index::OCCUPIED); po_hat = ((po * pz) / ((po * pz) + ((1.f - po) * not_pz))); - } else if (z == occupancy_cost_value::FREE_SPACE) { + } else if (z == cost_value::FREE_SPACE) { pz = 1.f - probability_matrix_(Index::FREE, Index::FREE); not_pz = 1.f - probability_matrix_(Index::OCCUPIED, Index::FREE); po_hat = ((po * pz) / ((po * pz) + ((1.f - po) * not_pz))); - } else if (z == occupancy_cost_value::NO_INFORMATION) { + } else if (z == cost_value::NO_INFORMATION) { const float inv_v_ratio = 1.f / v_ratio_; po_hat = ((po + (0.5f * inv_v_ratio)) / ((1.f * inv_v_ratio) + 1.f)); } @@ -79,3 +81,4 @@ bool OccupancyGridMapBBFUpdater::update(const Costmap2D & single_frame_occupancy } } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map diff --git a/perception/probabilistic_occupancy_grid_map/src/updater/occupancy_grid_map_log_odds_bayes_filter_updater.cpp b/perception/probabilistic_occupancy_grid_map/lib/updater/log_odds_bayes_filter_updater.cpp similarity index 88% rename from perception/probabilistic_occupancy_grid_map/src/updater/occupancy_grid_map_log_odds_bayes_filter_updater.cpp rename to perception/probabilistic_occupancy_grid_map/lib/updater/log_odds_bayes_filter_updater.cpp index 607694d6da571..9f3c3c7e40eaf 100644 --- a/perception/probabilistic_occupancy_grid_map/src/updater/occupancy_grid_map_log_odds_bayes_filter_updater.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/updater/log_odds_bayes_filter_updater.cpp @@ -12,14 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_log_odds_bayes_filter_updater.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/log_odds_bayes_filter_updater.hpp" -#include "probabilistic_occupancy_grid_map/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" #include // cspell: ignore LOBF +namespace autoware::occupancy_grid_map +{ namespace costmap_2d { @@ -35,7 +37,7 @@ inline unsigned char OccupancyGridMapLOBFUpdater::applyLOBF( using fusion_policy::convertProbabilityToChar; using fusion_policy::log_odds_fusion::logOddsFusion; - constexpr unsigned char unknown = occupancy_cost_value::NO_INFORMATION; + constexpr unsigned char unknown = cost_value::NO_INFORMATION; constexpr unsigned char unknown_margin = 1; /* Tau and ST decides how fast the observation decay to the unknown status*/ constexpr double tau = 0.75; @@ -68,4 +70,6 @@ bool OccupancyGridMapLOBFUpdater::update(const Costmap2D & single_frame_occupanc } return true; } + } // namespace costmap_2d +} // namespace autoware::occupancy_grid_map diff --git a/perception/probabilistic_occupancy_grid_map/src/utils/utils.cpp b/perception/probabilistic_occupancy_grid_map/lib/utils/utils.cpp similarity index 95% rename from perception/probabilistic_occupancy_grid_map/src/utils/utils.cpp rename to perception/probabilistic_occupancy_grid_map/lib/utils/utils.cpp index 209207fe10f34..e8c2cdb2617df 100644 --- a/perception/probabilistic_occupancy_grid_map/src/utils/utils.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/utils/utils.cpp @@ -12,12 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/utils/utils.hpp" +#include "autoware/probabilistic_occupancy_grid_map/utils/utils.hpp" #include #include +namespace autoware::occupancy_grid_map +{ namespace utils { @@ -189,13 +191,14 @@ bool extractCommonPointCloud( */ unsigned char getApproximateOccupancyState(const unsigned char & value) { - if (value >= occupancy_cost_value::OCCUPIED_THRESHOLD) { - return occupancy_cost_value::LETHAL_OBSTACLE; - } else if (value <= occupancy_cost_value::FREE_THRESHOLD) { - return occupancy_cost_value::FREE_SPACE; + if (value >= cost_value::OCCUPIED_THRESHOLD) { + return cost_value::LETHAL_OBSTACLE; + } else if (value <= cost_value::FREE_THRESHOLD) { + return cost_value::FREE_SPACE; } else { - return occupancy_cost_value::NO_INFORMATION; + return cost_value::NO_INFORMATION; } } } // namespace utils +} // namespace autoware::occupancy_grid_map diff --git a/perception/probabilistic_occupancy_grid_map/package.xml b/perception/probabilistic_occupancy_grid_map/package.xml index d8ae702ef60ca..d8647ae2ba744 100644 --- a/perception/probabilistic_occupancy_grid_map/package.xml +++ b/perception/probabilistic_occupancy_grid_map/package.xml @@ -13,9 +13,9 @@ ament_cmake_auto autoware_cmake + eigen3_cmake_module autoware_universe_utils - eigen3_cmake_module grid_map_costmap_2d grid_map_msgs grid_map_ros @@ -27,12 +27,9 @@ rclcpp rclcpp_components sensor_msgs - tf2 tf2_eigen - tf2_geometry_msgs tf2_ros tf2_sensor_msgs - visualization_msgs pointcloud_preprocessor pointcloud_to_laserscan diff --git a/perception/probabilistic_occupancy_grid_map/src/fusion/synchronized_grid_map_fusion_node.cpp b/perception/probabilistic_occupancy_grid_map/src/fusion/synchronized_grid_map_fusion_node.cpp index fa93db802b0ce..a271e17a1e566 100644 --- a/perception/probabilistic_occupancy_grid_map/src/fusion/synchronized_grid_map_fusion_node.cpp +++ b/perception/probabilistic_occupancy_grid_map/src/fusion/synchronized_grid_map_fusion_node.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/fusion/synchronized_grid_map_fusion_node.hpp" +#include "synchronized_grid_map_fusion_node.hpp" -#include "probabilistic_occupancy_grid_map/cost_value.hpp" -#include "probabilistic_occupancy_grid_map/utils/utils.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/utils/utils.hpp" // cspell: ignore LOBF -namespace synchronized_grid_map_fusion +namespace autoware::occupancy_grid_map { using costmap_2d::OccupancyGridMapFixedBlindSpot; using costmap_2d::OccupancyGridMapLOBFUpdater; @@ -404,7 +404,7 @@ nav2_costmap_2d::Costmap2D GridMapFusionNode::OccupancyGridMsgToCostmap2D( for (unsigned int j = 0; j < occupancy_grid_map.info.height; j++) { const unsigned int index = i + j * occupancy_grid_map.info.width; costmap2d.setCost( - i, j, occupancy_cost_value::inverse_cost_translation_table[occupancy_grid_map.data[index]]); + i, j, cost_value::inverse_cost_translation_table[occupancy_grid_map.data[index]]); } } @@ -424,7 +424,7 @@ OccupancyGridMapFixedBlindSpot GridMapFusionNode::OccupancyGridMsgToGridMap( for (unsigned int j = 0; j < occupancy_grid_map.info.height; j++) { const unsigned int index = i + j * occupancy_grid_map.info.width; gridmap.setCost( - i, j, occupancy_cost_value::inverse_cost_translation_table[occupancy_grid_map.data[index]]); + i, j, cost_value::inverse_cost_translation_table[occupancy_grid_map.data[index]]); } } return gridmap; @@ -453,14 +453,14 @@ nav_msgs::msg::OccupancyGrid::UniquePtr GridMapFusionNode::OccupancyGridMapToMsg msg_ptr->data.resize(msg_ptr->info.width * msg_ptr->info.height); - unsigned char * data = occupancy_grid_map.getCharMap(); + const unsigned char * data = occupancy_grid_map.getCharMap(); for (unsigned int i = 0; i < msg_ptr->data.size(); ++i) { - msg_ptr->data[i] = occupancy_cost_value::cost_translation_table[data[i]]; + msg_ptr->data[i] = cost_value::cost_translation_table[data[i]]; } return msg_ptr; } -} // namespace synchronized_grid_map_fusion +} // namespace autoware::occupancy_grid_map #include -RCLCPP_COMPONENTS_REGISTER_NODE(synchronized_grid_map_fusion::GridMapFusionNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::occupancy_grid_map::GridMapFusionNode) diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/fusion/synchronized_grid_map_fusion_node.hpp b/perception/probabilistic_occupancy_grid_map/src/fusion/synchronized_grid_map_fusion_node.hpp similarity index 85% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/fusion/synchronized_grid_map_fusion_node.hpp rename to perception/probabilistic_occupancy_grid_map/src/fusion/synchronized_grid_map_fusion_node.hpp index 84ca13c8b1881..c839f160aab9b 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/fusion/synchronized_grid_map_fusion_node.hpp +++ b/perception/probabilistic_occupancy_grid_map/src/fusion/synchronized_grid_map_fusion_node.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__FUSION__SYNCHRONIZED_GRID_MAP_FUSION_NODE_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__FUSION__SYNCHRONIZED_GRID_MAP_FUSION_NODE_HPP_ +#ifndef FUSION__SYNCHRONIZED_GRID_MAP_FUSION_NODE_HPP_ +#define FUSION__SYNCHRONIZED_GRID_MAP_FUSION_NODE_HPP_ -#include "probabilistic_occupancy_grid_map/fusion/single_frame_fusion_policy.hpp" -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.hpp" -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_log_odds_bayes_filter_updater.hpp" -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp" +#include "autoware/probabilistic_occupancy_grid_map/fusion_policy/fusion_policy.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/log_odds_bayes_filter_updater.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/ogm_updater_interface.hpp" #include #include @@ -45,7 +45,7 @@ // cspell: ignore LOBF -namespace synchronized_grid_map_fusion +namespace autoware::occupancy_grid_map { using costmap_2d::OccupancyGridMapFixedBlindSpot; @@ -124,6 +124,6 @@ class GridMapFusionNode : public rclcpp::Node fusion_policy::FusionMethod fusion_method_; }; -} // namespace synchronized_grid_map_fusion +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__FUSION__SYNCHRONIZED_GRID_MAP_FUSION_NODE_HPP_ +#endif // FUSION__SYNCHRONIZED_GRID_MAP_FUSION_NODE_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.cpp b/perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.cpp index 777c180fe1a3a..6c4ad8135b37d 100644 --- a/perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.cpp +++ b/perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.hpp" +#include "laserscan_based_occupancy_grid_map_node.hpp" -#include "probabilistic_occupancy_grid_map/cost_value.hpp" -#include "probabilistic_occupancy_grid_map/utils/utils.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/utils/utils.hpp" #include @@ -35,7 +35,7 @@ #include #include -namespace occupancy_grid_map +namespace autoware::occupancy_grid_map { using costmap_2d::OccupancyGridMap; using costmap_2d::OccupancyGridMapBBFUpdater; @@ -229,12 +229,12 @@ OccupancyGrid::UniquePtr LaserscanBasedOccupancyGridMapNode::OccupancyGridMapToM unsigned char * data = occupancy_grid_map.getCharMap(); for (unsigned int i = 0; i < msg_ptr->data.size(); ++i) { - msg_ptr->data[i] = occupancy_cost_value::cost_translation_table[data[i]]; + msg_ptr->data[i] = cost_value::cost_translation_table[data[i]]; } return msg_ptr; } -} // namespace occupancy_grid_map +} // namespace autoware::occupancy_grid_map #include -RCLCPP_COMPONENTS_REGISTER_NODE(occupancy_grid_map::LaserscanBasedOccupancyGridMapNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::occupancy_grid_map::LaserscanBasedOccupancyGridMapNode) diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.hpp b/perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.hpp similarity index 82% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.hpp rename to perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.hpp index a8adea6e700e5..a599f7b564c8b 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.hpp +++ b/perception/probabilistic_occupancy_grid_map/src/laserscan_based_occupancy_grid_map/laserscan_based_occupancy_grid_map_node.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ +#ifndef LASERSCAN_BASED_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ +#define LASERSCAN_BASED_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ -#include "probabilistic_occupancy_grid_map/laserscan_based_occupancy_grid_map/occupancy_grid_map.hpp" -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_binary_bayes_filter_updater.hpp" -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/binary_bayes_filter_updater.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/ogm_updater_interface.hpp" #include #include @@ -36,7 +36,7 @@ #include #include -namespace occupancy_grid_map +namespace autoware::occupancy_grid_map { using builtin_interfaces::msg::Time; using costmap_2d::OccupancyGridMapUpdaterInterface; @@ -100,6 +100,6 @@ class LaserscanBasedOccupancyGridMapNode : public rclcpp::Node bool enable_single_frame_mode_; }; -} // namespace occupancy_grid_map +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ +#endif // LASERSCAN_BASED_OCCUPANCY_GRID_MAP__LASERSCAN_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp b/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp index d019280aefda0..3fe75263b3f28 100644 --- a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp +++ b/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.hpp" +#include "pointcloud_based_occupancy_grid_map_node.hpp" -#include "probabilistic_occupancy_grid_map/cost_value.hpp" -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_fixed.hpp" -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_projective.hpp" -#include "probabilistic_occupancy_grid_map/utils/utils.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_projective.hpp" +#include "autoware/probabilistic_occupancy_grid_map/utils/utils.hpp" #include #include @@ -40,7 +40,7 @@ #include #include -namespace occupancy_grid_map +namespace autoware::occupancy_grid_map { using costmap_2d::OccupancyGridMapBBFUpdater; using costmap_2d::OccupancyGridMapFixedBlindSpot; @@ -250,12 +250,12 @@ OccupancyGrid::UniquePtr PointcloudBasedOccupancyGridMapNode::OccupancyGridMapTo unsigned char * data = occupancy_grid_map.getCharMap(); for (unsigned int i = 0; i < msg_ptr->data.size(); ++i) { - msg_ptr->data[i] = occupancy_cost_value::cost_translation_table[data[i]]; + msg_ptr->data[i] = cost_value::cost_translation_table[data[i]]; } return msg_ptr; } -} // namespace occupancy_grid_map +} // namespace autoware::occupancy_grid_map #include -RCLCPP_COMPONENTS_REGISTER_NODE(occupancy_grid_map::PointcloudBasedOccupancyGridMapNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::occupancy_grid_map::PointcloudBasedOccupancyGridMapNode) diff --git a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.hpp b/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.hpp similarity index 81% rename from perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.hpp rename to perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.hpp index 1d119102dc28d..e0c7ef74988f4 100644 --- a/perception/probabilistic_occupancy_grid_map/include/probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.hpp +++ b/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ -#define PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ +#ifndef POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ +#define POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ -#include "probabilistic_occupancy_grid_map/pointcloud_based_occupancy_grid_map/occupancy_grid_map_base.hpp" -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_binary_bayes_filter_updater.hpp" -#include "probabilistic_occupancy_grid_map/updater/occupancy_grid_map_updater_interface.hpp" +#include "autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/binary_bayes_filter_updater.hpp" +#include "autoware/probabilistic_occupancy_grid_map/updater/ogm_updater_interface.hpp" #include #include @@ -38,7 +38,7 @@ #include #include -namespace occupancy_grid_map +namespace autoware::occupancy_grid_map { using builtin_interfaces::msg::Time; using costmap_2d::OccupancyGridMapInterface; @@ -93,6 +93,6 @@ class PointcloudBasedOccupancyGridMapNode : public rclcpp::Node bool filter_obstacle_pointcloud_by_raw_pointcloud_; }; -} // namespace occupancy_grid_map +} // namespace autoware::occupancy_grid_map -#endif // PROBABILISTIC_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ +#endif // POINTCLOUD_BASED_OCCUPANCY_GRID_MAP__POINTCLOUD_BASED_OCCUPANCY_GRID_MAP_NODE_HPP_ diff --git a/perception/probabilistic_occupancy_grid_map/test/cost_value_test.cpp b/perception/probabilistic_occupancy_grid_map/test/cost_value_test.cpp index c41c809a92b0c..f03852562f7ca 100644 --- a/perception/probabilistic_occupancy_grid_map/test/cost_value_test.cpp +++ b/perception/probabilistic_occupancy_grid_map/test/cost_value_test.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/cost_value.hpp" +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" #include // Test the CostTranslationTable and InverseCostTranslationTable functions -using occupancy_cost_value::cost_translation_table; -using occupancy_cost_value::inverse_cost_translation_table; +using autoware::occupancy_grid_map::cost_value::cost_translation_table; +using autoware::occupancy_grid_map::cost_value::inverse_cost_translation_table; TEST(CostTranslationTableTest, TestRange) { diff --git a/perception/probabilistic_occupancy_grid_map/test/fusion_policy_test.cpp b/perception/probabilistic_occupancy_grid_map/test/fusion_policy_test.cpp index 6b3dc8a2ebcef..78137371c720e 100644 --- a/perception/probabilistic_occupancy_grid_map/test/fusion_policy_test.cpp +++ b/perception/probabilistic_occupancy_grid_map/test/fusion_policy_test.cpp @@ -12,15 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "probabilistic_occupancy_grid_map/cost_value.hpp" -#include "probabilistic_occupancy_grid_map/fusion/single_frame_fusion_policy.hpp" +#include "autoware/probabilistic_occupancy_grid_map/fusion_policy/fusion_policy.hpp" + +#include "autoware/probabilistic_occupancy_grid_map/cost_value/cost_value.hpp" #include // Test the log-odds update rule TEST(FusionPolicyTest, TestLogOddsUpdateRule) { - using fusion_policy::log_odds_fusion::logOddsFusion; + using autoware::occupancy_grid_map::fusion_policy::log_odds_fusion::logOddsFusion; const double MARGIN = 0.03; const double OCCUPIED = 1.0 - MARGIN; const double FREE = 0.0 + MARGIN; @@ -49,7 +50,7 @@ TEST(FusionPolicyTest, TestLogOddsUpdateRule) // Test the dempster-shafer update rule TEST(FusionPolicyTest, TestDempsterShaferUpdateRule) { - using fusion_policy::dempster_shafer_fusion::dempsterShaferFusion; + using autoware::occupancy_grid_map::fusion_policy::dempster_shafer_fusion::dempsterShaferFusion; const double MARGIN = 0.03; const double OCCUPIED = 1.0 - MARGIN; const double FREE = 0.0 + MARGIN; diff --git a/perception/probabilistic_occupancy_grid_map/test/test_utils.cpp b/perception/probabilistic_occupancy_grid_map/test/test_utils.cpp index 4bc3dca0a67bd..17df981d849d4 100644 --- a/perception/probabilistic_occupancy_grid_map/test/test_utils.cpp +++ b/perception/probabilistic_occupancy_grid_map/test/test_utils.cpp @@ -13,7 +13,7 @@ // limitations under the License. // autoware -#include "probabilistic_occupancy_grid_map/utils/utils.hpp" +#include "autoware/probabilistic_occupancy_grid_map/utils/utils.hpp" #include @@ -77,14 +77,14 @@ TEST(TestUtils, TestCropPointcloudByHeight) sensor_msgs::msg::PointCloud2 test1_output, test2_output, test3_output; // case1: normal input, normal output - EXPECT_NO_THROW( - utils::cropPointcloudByHeight(ros_cloud_10, mock_buffer, "base_link", 0.0, 10.0, test1_output)); + EXPECT_NO_THROW(autoware::occupancy_grid_map::utils::cropPointcloudByHeight( + ros_cloud_10, mock_buffer, "base_link", 0.0, 10.0, test1_output)); // case2: normal input, empty output - EXPECT_NO_THROW(utils::cropPointcloudByHeight( + EXPECT_NO_THROW(autoware::occupancy_grid_map::utils::cropPointcloudByHeight( ros_cloud_10, mock_buffer, "base_link", -2.0, -0.1, test2_output)); // case3: empty input, normal output - EXPECT_NO_THROW( - utils::cropPointcloudByHeight(ros_cloud_0, mock_buffer, "base_link", 0.0, 10.0, test3_output)); + EXPECT_NO_THROW(autoware::occupancy_grid_map::utils::cropPointcloudByHeight( + ros_cloud_0, mock_buffer, "base_link", 0.0, 10.0, test3_output)); } From 552ffd0b24d89b327b1f2a98d41ab300eef924b1 Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Mon, 8 Jul 2024 15:59:06 +0900 Subject: [PATCH 100/306] refactor(lanelet2_map_preprocessor): apply static analysis (#7870) * refactor based on linter Signed-off-by: a-maumau * style(pre-commit): autofix * apply suggestion Signed-off-by: a-maumau --------- Signed-off-by: a-maumau Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../src/fix_lane_change_tags.cpp | 33 +++---- .../src/fix_z_value_by_pcd.cpp | 43 ++++---- .../src/merge_close_lines.cpp | 98 ++++++++----------- .../src/merge_close_points.cpp | 23 ++--- .../src/remove_unreferenced_geometry.cpp | 27 ++--- .../src/transform_maps.cpp | 27 ++--- 6 files changed, 116 insertions(+), 135 deletions(-) diff --git a/map/util/lanelet2_map_preprocessor/src/fix_lane_change_tags.cpp b/map/util/lanelet2_map_preprocessor/src/fix_lane_change_tags.cpp index cbd279af2b46f..571c2e91c53a5 100644 --- a/map/util/lanelet2_map_preprocessor/src/fix_lane_change_tags.cpp +++ b/map/util/lanelet2_map_preprocessor/src/fix_lane_change_tags.cpp @@ -27,10 +27,7 @@ #include #include -using lanelet::utils::getId; -using lanelet::utils::to2D; - -bool loadLaneletMap( +bool load_lanelet_map( const std::string & llt_map_path, lanelet::LaneletMapPtr & lanelet_map_ptr, lanelet::Projector & projector) { @@ -48,32 +45,32 @@ bool loadLaneletMap( return true; } -lanelet::Lanelets convertToVector(lanelet::LaneletMapPtr & lanelet_map_ptr) +lanelet::Lanelets convert_to_vector(const lanelet::LaneletMapPtr & lanelet_map_ptr) { lanelet::Lanelets lanelets; - for (lanelet::Lanelet lanelet : lanelet_map_ptr->laneletLayer) { - lanelets.push_back(lanelet); - } + std::copy( + lanelet_map_ptr->laneletLayer.begin(), lanelet_map_ptr->laneletLayer.end(), + std::back_inserter(lanelets)); return lanelets; } -void fixTags(lanelet::LaneletMapPtr & lanelet_map_ptr) +void fix_tags(lanelet::LaneletMapPtr & lanelet_map_ptr) { - auto lanelets = convertToVector(lanelet_map_ptr); - lanelet::traffic_rules::TrafficRulesPtr trafficRules = + auto lanelets = convert_to_vector(lanelet_map_ptr); + lanelet::traffic_rules::TrafficRulesPtr traffic_rules = lanelet::traffic_rules::TrafficRulesFactory::create( lanelet::Locations::Germany, lanelet::Participants::Vehicle); - lanelet::routing::RoutingGraphUPtr routingGraph = - lanelet::routing::RoutingGraph::build(*lanelet_map_ptr, *trafficRules); + lanelet::routing::RoutingGraphUPtr routing_graph = + lanelet::routing::RoutingGraph::build(*lanelet_map_ptr, *traffic_rules); for (auto & llt : lanelets) { - if (!routingGraph->conflicting(llt).empty()) { + if (!routing_graph->conflicting(llt).empty()) { continue; } llt.attributes().erase("turn_direction"); - if (!!routingGraph->adjacentRight(llt)) { + if (!!routing_graph->adjacentRight(llt)) { llt.rightBound().attributes()["lane_change"] = "yes"; } - if (!!routingGraph->adjacentLeft(llt)) { + if (!!routing_graph->adjacentLeft(llt)) { llt.leftBound().attributes()["lane_change"] = "yes"; } } @@ -91,11 +88,11 @@ int main(int argc, char * argv[]) lanelet::LaneletMapPtr llt_map_ptr(new lanelet::LaneletMap); lanelet::projection::MGRSProjector projector; - if (!loadLaneletMap(llt_map_path, llt_map_ptr, projector)) { + if (!load_lanelet_map(llt_map_path, llt_map_ptr, projector)) { return EXIT_FAILURE; } - fixTags(llt_map_ptr); + fix_tags(llt_map_ptr); lanelet::write(output_path, *llt_map_ptr, projector); rclcpp::shutdown(); diff --git a/map/util/lanelet2_map_preprocessor/src/fix_z_value_by_pcd.cpp b/map/util/lanelet2_map_preprocessor/src/fix_z_value_by_pcd.cpp index 14a33b01beee0..af565208c5f71 100644 --- a/map/util/lanelet2_map_preprocessor/src/fix_z_value_by_pcd.cpp +++ b/map/util/lanelet2_map_preprocessor/src/fix_z_value_by_pcd.cpp @@ -27,7 +27,7 @@ #include #include -bool loadLaneletMap( +bool load_lanelet_map( const std::string & llt_map_path, lanelet::LaneletMapPtr & lanelet_map_ptr, lanelet::Projector & projector) { @@ -45,7 +45,8 @@ bool loadLaneletMap( return true; } -bool loadPCDMap(const std::string & pcd_map_path, pcl::PointCloud::Ptr & pcd_map_ptr) +bool load_pcd_map( + const std::string & pcd_map_path, pcl::PointCloud::Ptr & pcd_map_ptr) { if (pcl::io::loadPCDFile(pcd_map_path, *pcd_map_ptr) == -1) { //* load the file RCLCPP_ERROR_STREAM(rclcpp::get_logger("loadPCDMap"), "Couldn't read file: " << pcd_map_path); @@ -56,16 +57,16 @@ bool loadPCDMap(const std::string & pcd_map_path, pcl::PointCloud return true; } -double getMinHeightAroundPoint( +double get_min_height_around_point( const pcl::PointCloud::Ptr & pcd_map_ptr, const pcl::KdTreeFLANN & kdtree, const pcl::PointXYZ & search_pt, const double search_radius3d, const double search_radius2d) { - std::vector pointIdxRadiusSearch; - std::vector pointRadiusSquaredDistance; + std::vector point_idx_radius_search; + std::vector point_radius_squared_distance; if ( kdtree.radiusSearch( - search_pt, search_radius3d, pointIdxRadiusSearch, pointRadiusSquaredDistance) <= 0) { + search_pt, search_radius3d, point_idx_radius_search, point_radius_squared_distance) <= 0) { std::cout << "no points found within 3d radius " << search_radius3d << std::endl; return search_pt.z; } @@ -73,8 +74,7 @@ double getMinHeightAroundPoint( double min_height = std::numeric_limits::max(); bool found = false; - for (std::size_t i = 0; i < pointIdxRadiusSearch.size(); i++) { - std::size_t pt_idx = pointIdxRadiusSearch.at(i); + for (auto pt_idx : point_idx_radius_search) { const auto pt = pcd_map_ptr->points.at(pt_idx); if (pt.z > min_height) { continue; @@ -91,8 +91,9 @@ double getMinHeightAroundPoint( return min_height; } -void adjustHeight( - const pcl::PointCloud::Ptr & pcd_map_ptr, lanelet::LaneletMapPtr & lanelet_map_ptr) +void adjust_height( + const pcl::PointCloud::Ptr & pcd_map_ptr, + const lanelet::LaneletMapPtr & lanelet_map_ptr) { std::unordered_set done; double search_radius2d = 0.5; @@ -107,11 +108,11 @@ void adjustHeight( continue; } pcl::PointXYZ pcl_pt; - pcl_pt.x = pt.x(); - pcl_pt.y = pt.y(); - pcl_pt.z = pt.z(); + pcl_pt.x = static_cast(pt.x()); + pcl_pt.y = static_cast(pt.y()); + pcl_pt.z = static_cast(pt.z()); double min_height = - getMinHeightAroundPoint(pcd_map_ptr, kdtree, pcl_pt, search_radius3d, search_radius2d); + get_min_height_around_point(pcd_map_ptr, kdtree, pcl_pt, search_radius3d, search_radius2d); std::cout << "moving from " << pt.z() << " to " << min_height << std::endl; pt.z() = min_height; done.insert(pt.id()); @@ -121,11 +122,11 @@ void adjustHeight( continue; } pcl::PointXYZ pcl_pt; - pcl_pt.x = pt.x(); - pcl_pt.y = pt.y(); - pcl_pt.z = pt.z(); + pcl_pt.x = static_cast(pt.x()); + pcl_pt.y = static_cast(pt.y()); + pcl_pt.z = static_cast(pt.z()); double min_height = - getMinHeightAroundPoint(pcd_map_ptr, kdtree, pcl_pt, search_radius3d, search_radius2d); + get_min_height_around_point(pcd_map_ptr, kdtree, pcl_pt, search_radius3d, search_radius2d); std::cout << "moving from " << pt.z() << " to " << min_height << std::endl; pt.z() = min_height; done.insert(pt.id()); @@ -148,14 +149,14 @@ int main(int argc, char * argv[]) pcl::PointCloud::Ptr pcd_map_ptr(new pcl::PointCloud); - if (!loadLaneletMap(llt_map_path, llt_map_ptr, projector)) { + if (!load_lanelet_map(llt_map_path, llt_map_ptr, projector)) { return EXIT_FAILURE; } - if (!loadPCDMap(pcd_map_path, pcd_map_ptr)) { + if (!load_pcd_map(pcd_map_path, pcd_map_ptr)) { return EXIT_FAILURE; } - adjustHeight(pcd_map_ptr, llt_map_ptr); + adjust_height(pcd_map_ptr, llt_map_ptr); lanelet::write(llt_output_path, *llt_map_ptr, projector); rclcpp::shutdown(); diff --git a/map/util/lanelet2_map_preprocessor/src/merge_close_lines.cpp b/map/util/lanelet2_map_preprocessor/src/merge_close_lines.cpp index e0d071ea11dc1..0e40d04a2cec3 100644 --- a/map/util/lanelet2_map_preprocessor/src/merge_close_lines.cpp +++ b/map/util/lanelet2_map_preprocessor/src/merge_close_lines.cpp @@ -26,10 +26,7 @@ #include #include -using lanelet::utils::getId; -using lanelet::utils::to2D; - -bool loadLaneletMap( +bool load_lanelet_map( const std::string & llt_map_path, lanelet::LaneletMapPtr & lanelet_map_ptr, lanelet::Projector & projector) { @@ -47,21 +44,17 @@ bool loadLaneletMap( return true; } -bool exists(std::unordered_set & set, lanelet::Id element) -{ - return set.find(element) != set.end(); -} - -lanelet::LineStrings3d convertLineLayerToLineStrings(lanelet::LaneletMapPtr & lanelet_map_ptr) +lanelet::LineStrings3d convert_line_layer_to_line_strings( + const lanelet::LaneletMapPtr & lanelet_map_ptr) { lanelet::LineStrings3d lines; - for (const lanelet::LineString3d & line : lanelet_map_ptr->lineStringLayer) { - lines.push_back(line); - } + std::copy( + lanelet_map_ptr->lineStringLayer.begin(), lanelet_map_ptr->lineStringLayer.end(), + std::back_inserter(lines)); return lines; } -lanelet::ConstPoint3d get3DPointFrom2DArcLength( +lanelet::ConstPoint3d get3d_point_from2d_arc_length( const lanelet::ConstLineString3d & line, const double s) { double accumulated_distance2d = 0; @@ -71,27 +64,23 @@ lanelet::ConstPoint3d get3DPointFrom2DArcLength( auto prev_pt = line.front(); for (size_t i = 1; i < line.size(); i++) { const auto & pt = line[i]; - double distance2d = lanelet::geometry::distance2d(to2D(prev_pt), to2D(pt)); + double distance2d = + lanelet::geometry::distance2d(lanelet::utils::to2D(prev_pt), lanelet::utils::to2D(pt)); if (accumulated_distance2d + distance2d >= s) { double ratio = (s - accumulated_distance2d) / distance2d; auto interpolated_pt = prev_pt.basicPoint() * (1 - ratio) + pt.basicPoint() * ratio; std::cout << interpolated_pt << std::endl; - return lanelet::ConstPoint3d( - lanelet::utils::getId(), interpolated_pt.x(), interpolated_pt.y(), interpolated_pt.z()); + return lanelet::ConstPoint3d{ + lanelet::utils::getId(), interpolated_pt.x(), interpolated_pt.y(), interpolated_pt.z()}; } accumulated_distance2d += distance2d; prev_pt = pt; } RCLCPP_ERROR(rclcpp::get_logger("merge_close_lines"), "interpolation failed"); - return lanelet::ConstPoint3d(); -} - -double getLineLength(const lanelet::ConstLineString3d & line) -{ - return boost::geometry::length(line.basicLineString()); + return {}; } -bool areLinesSame( +bool are_lines_same( const lanelet::ConstLineString3d & line1, const lanelet::ConstLineString3d & line2) { bool same_ends = false; @@ -105,66 +94,63 @@ bool areLinesSame( return false; } - double sum_distance = 0; - for (const auto & pt : line1) { - sum_distance += boost::geometry::distance(pt.basicPoint(), line2); - } - for (const auto & pt : line2) { - sum_distance += boost::geometry::distance(pt.basicPoint(), line1); - } + double sum_distance = + std::accumulate(line1.begin(), line1.end(), 0.0, [&line2](double sum, const auto & pt) { + return sum + boost::geometry::distance(pt.basicPoint(), line2); + }); + sum_distance += + std::accumulate(line2.begin(), line2.end(), 0.0, [&line1](double sum, const auto & pt) { + return sum + boost::geometry::distance(pt.basicPoint(), line1); + }); - double avg_distance = sum_distance / (line1.size() + line2.size()); + double avg_distance = sum_distance / static_cast(line1.size() + line2.size()); std::cout << line1 << " " << line2 << " " << avg_distance << std::endl; - if (avg_distance < 1.0) { - return true; - } else { - return false; - } + return avg_distance < 1.0; } -lanelet::BasicPoint3d getClosestPointOnLine( +lanelet::BasicPoint3d get_closest_point_on_line( const lanelet::BasicPoint3d & search_point, const lanelet::ConstLineString3d & line) { - auto arc_coordinate = lanelet::geometry::toArcCoordinates(to2D(line), to2D(search_point)); + auto arc_coordinate = lanelet::geometry::toArcCoordinates( + lanelet::utils::to2D(line), lanelet::utils::to2D(search_point)); std::cout << arc_coordinate.length << " " << arc_coordinate.distance << std::endl; - return get3DPointFrom2DArcLength(line, arc_coordinate.length).basicPoint(); + return get3d_point_from2d_arc_length(line, arc_coordinate.length).basicPoint(); } -lanelet::LineString3d mergeTwoLines( +lanelet::LineString3d merge_two_lines( const lanelet::LineString3d & line1, const lanelet::ConstLineString3d & line2) { lanelet::Points3d new_points; for (const auto & p1 : line1) { - lanelet::BasicPoint3d p1_basic_point = p1.basicPoint(); - lanelet::BasicPoint3d p2_basic_point = getClosestPointOnLine(p1, line2); + const lanelet::BasicPoint3d & p1_basic_point = p1.basicPoint(); + lanelet::BasicPoint3d p2_basic_point = get_closest_point_on_line(p1, line2); lanelet::BasicPoint3d new_basic_point = (p1_basic_point + p2_basic_point) / 2; lanelet::Point3d new_point(lanelet::utils::getId(), new_basic_point); new_points.push_back(new_point); } - return lanelet::LineString3d(lanelet::utils::getId(), new_points); + return lanelet::LineString3d{lanelet::utils::getId(), new_points}; } -void copyData(lanelet::LineString3d & dst, lanelet::LineString3d & src) +void copy_data(lanelet::LineString3d & dst, const lanelet::LineString3d & src) { - lanelet::Points3d points; dst.clear(); - for (lanelet::Point3d & pt : src) { - dst.push_back(pt); + for (const lanelet::ConstPoint3d & pt : src) { + dst.push_back(static_cast(pt)); } } -void mergeLines(lanelet::LaneletMapPtr & lanelet_map_ptr) +void merge_lines(lanelet::LaneletMapPtr & lanelet_map_ptr) { - auto lines = convertLineLayerToLineStrings(lanelet_map_ptr); + auto lines = convert_line_layer_to_line_strings(lanelet_map_ptr); for (size_t i = 0; i < lines.size(); i++) { auto line_i = lines.at(i); for (size_t j = 0; j < i; j++) { auto line_j = lines.at(j); - if (areLinesSame(line_i, line_j)) { - auto merged_line = mergeTwoLines(line_i, line_j); - copyData(line_i, merged_line); - copyData(line_j, merged_line); + if (are_lines_same(line_i, line_j)) { + auto merged_line = merge_two_lines(line_i, line_j); + copy_data(line_i, merged_line); + copy_data(line_j, merged_line); line_i.setId(line_j.id()); std::cout << line_j << " " << line_i << std::endl; // lanelet_map_ptr->add(merged_line); @@ -189,11 +175,11 @@ int main(int argc, char * argv[]) lanelet::LaneletMapPtr llt_map_ptr(new lanelet::LaneletMap); lanelet::projection::MGRSProjector projector; - if (!loadLaneletMap(llt_map_path, llt_map_ptr, projector)) { + if (!load_lanelet_map(llt_map_path, llt_map_ptr, projector)) { return EXIT_FAILURE; } - mergeLines(llt_map_ptr); + merge_lines(llt_map_ptr); lanelet::write(output_path, *llt_map_ptr, projector); rclcpp::shutdown(); diff --git a/map/util/lanelet2_map_preprocessor/src/merge_close_points.cpp b/map/util/lanelet2_map_preprocessor/src/merge_close_points.cpp index e18a366003e10..3cbbffc702019 100644 --- a/map/util/lanelet2_map_preprocessor/src/merge_close_points.cpp +++ b/map/util/lanelet2_map_preprocessor/src/merge_close_points.cpp @@ -25,7 +25,7 @@ #include #include -bool loadLaneletMap( +bool load_lanelet_map( const std::string & llt_map_path, lanelet::LaneletMapPtr & lanelet_map_ptr, lanelet::Projector & projector) { @@ -43,17 +43,12 @@ bool loadLaneletMap( return true; } -bool exists(std::unordered_set & set, lanelet::Id element) -{ - return set.find(element) != set.end(); -} - -lanelet::Points3d convertPointsLayerToPoints(lanelet::LaneletMapPtr & lanelet_map_ptr) +lanelet::Points3d convert_points_layer_to_points(const lanelet::LaneletMapPtr & lanelet_map_ptr) { lanelet::Points3d points; - for (const lanelet::Point3d & pt : lanelet_map_ptr->pointLayer) { - points.push_back(pt); - } + std::copy( + lanelet_map_ptr->pointLayer.begin(), lanelet_map_ptr->pointLayer.end(), + std::back_inserter(points)); return points; } @@ -72,9 +67,9 @@ lanelet::Points3d convertPointsLayerToPoints(lanelet::LaneletMapPtr & lanelet_ma // return lanelet::LineString3d(lanelet::utils::getId(), new_points); // } -void mergePoints(lanelet::LaneletMapPtr & lanelet_map_ptr) +void merge_points(const lanelet::LaneletMapPtr & lanelet_map_ptr) { - const auto & points = convertPointsLayerToPoints(lanelet_map_ptr); + const auto & points = convert_points_layer_to_points(lanelet_map_ptr); for (size_t i = 0; i < points.size(); i++) { auto point_i = points.at(i); @@ -109,11 +104,11 @@ int main(int argc, char * argv[]) lanelet::LaneletMapPtr llt_map_ptr(new lanelet::LaneletMap); lanelet::projection::MGRSProjector projector; - if (!loadLaneletMap(llt_map_path, llt_map_ptr, projector)) { + if (!load_lanelet_map(llt_map_path, llt_map_ptr, projector)) { return EXIT_FAILURE; } - mergePoints(llt_map_ptr); + merge_points(llt_map_ptr); lanelet::write(output_path, *llt_map_ptr, projector); rclcpp::shutdown(); diff --git a/map/util/lanelet2_map_preprocessor/src/remove_unreferenced_geometry.cpp b/map/util/lanelet2_map_preprocessor/src/remove_unreferenced_geometry.cpp index 633dae4e20c1d..3ab10551e36f9 100644 --- a/map/util/lanelet2_map_preprocessor/src/remove_unreferenced_geometry.cpp +++ b/map/util/lanelet2_map_preprocessor/src/remove_unreferenced_geometry.cpp @@ -25,7 +25,7 @@ #include #include -bool loadLaneletMap( +bool load_lanelet_map( const std::string & llt_map_path, lanelet::LaneletMapPtr & lanelet_map_ptr, lanelet::Projector & projector) { @@ -43,28 +43,29 @@ bool loadLaneletMap( return true; } -lanelet::Points3d convertPointsLayerToPoints(lanelet::LaneletMapPtr & lanelet_map_ptr) +lanelet::Points3d convert_points_layer_to_points(const lanelet::LaneletMapPtr & lanelet_map_ptr) { lanelet::Points3d points; - for (const lanelet::Point3d & pt : lanelet_map_ptr->pointLayer) { - points.push_back(pt); - } + std::copy( + lanelet_map_ptr->pointLayer.begin(), lanelet_map_ptr->pointLayer.end(), + std::back_inserter(points)); return points; } -lanelet::LineStrings3d convertLineLayerToLineStrings(lanelet::LaneletMapPtr & lanelet_map_ptr) +lanelet::LineStrings3d convert_line_layer_to_line_strings( + const lanelet::LaneletMapPtr & lanelet_map_ptr) { lanelet::LineStrings3d lines; - for (const lanelet::LineString3d & line : lanelet_map_ptr->lineStringLayer) { - lines.push_back(line); - } + std::copy( + lanelet_map_ptr->lineStringLayer.begin(), lanelet_map_ptr->lineStringLayer.end(), + std::back_inserter(lines)); return lines; } -void removeUnreferencedGeometry(lanelet::LaneletMapPtr & lanelet_map_ptr) +void remove_unreferenced_geometry(lanelet::LaneletMapPtr & lanelet_map_ptr) { lanelet::LaneletMapPtr new_map(new lanelet::LaneletMap); - for (auto llt : lanelet_map_ptr->laneletLayer) { + for (const auto & llt : lanelet_map_ptr->laneletLayer) { new_map->add(llt); } lanelet_map_ptr = new_map; @@ -82,10 +83,10 @@ int main(int argc, char * argv[]) lanelet::LaneletMapPtr llt_map_ptr(new lanelet::LaneletMap); lanelet::projection::MGRSProjector projector; - if (!loadLaneletMap(llt_map_path, llt_map_ptr, projector)) { + if (!load_lanelet_map(llt_map_path, llt_map_ptr, projector)) { return EXIT_FAILURE; } - removeUnreferencedGeometry(llt_map_ptr); + remove_unreferenced_geometry(llt_map_ptr); lanelet::write(output_path, *llt_map_ptr, projector); rclcpp::shutdown(); diff --git a/map/util/lanelet2_map_preprocessor/src/transform_maps.cpp b/map/util/lanelet2_map_preprocessor/src/transform_maps.cpp index d29df716b11e7..d55e03c7faee5 100644 --- a/map/util/lanelet2_map_preprocessor/src/transform_maps.cpp +++ b/map/util/lanelet2_map_preprocessor/src/transform_maps.cpp @@ -27,7 +27,7 @@ #include #include -bool loadLaneletMap( +bool load_lanelet_map( const std::string & llt_map_path, lanelet::LaneletMapPtr & lanelet_map_ptr, lanelet::Projector & projector) { @@ -45,7 +45,8 @@ bool loadLaneletMap( return true; } -bool loadPCDMap(const std::string & pcd_map_path, pcl::PointCloud::Ptr & pcd_map_ptr) +bool load_pcd_map( + const std::string & pcd_map_path, pcl::PointCloud::Ptr & pcd_map_ptr) { if (pcl::io::loadPCDFile(pcd_map_path, *pcd_map_ptr) == -1) { //* load the file RCLCPP_ERROR_STREAM(rclcpp::get_logger("loadPCDMap"), "Couldn't read file: " << pcd_map_path); @@ -56,9 +57,9 @@ bool loadPCDMap(const std::string & pcd_map_path, pcl::PointCloud return true; } -void transformMaps( - pcl::PointCloud::Ptr & pcd_map_ptr, lanelet::LaneletMapPtr & lanelet_map_ptr, - const Eigen::Affine3d affine) +void transform_maps( + const pcl::PointCloud::Ptr & pcd_map_ptr, + const lanelet::LaneletMapPtr & lanelet_map_ptr, const Eigen::Affine3d & affine) { { for (lanelet::Point3d & pt : lanelet_map_ptr->pointLayer) { @@ -74,14 +75,14 @@ void transformMaps( for (auto & pt : pcd_map_ptr->points) { Eigen::Vector3d eigen_pt(pt.x, pt.y, pt.z); auto transformed_pt = affine * eigen_pt; - pt.x = transformed_pt.x(); - pt.y = transformed_pt.y(); - pt.z = transformed_pt.z(); + pt.x = static_cast(transformed_pt.x()); + pt.y = static_cast(transformed_pt.y()); + pt.z = static_cast(transformed_pt.z()); } } } -Eigen::Affine3d createAffineMatrixFromXYZRPY( +Eigen::Affine3d create_affine_matrix_from_xyzrpy( const double x, const double y, const double z, const double roll, const double pitch, const double yaw) { @@ -127,19 +128,19 @@ int main(int argc, char * argv[]) pcl::PointCloud::Ptr pcd_map_ptr(new pcl::PointCloud); - if (!loadLaneletMap(llt_map_path, llt_map_ptr, projector)) { + if (!load_lanelet_map(llt_map_path, llt_map_ptr, projector)) { return EXIT_FAILURE; } - if (!loadPCDMap(pcd_map_path, pcd_map_ptr)) { + if (!load_pcd_map(pcd_map_path, pcd_map_ptr)) { return EXIT_FAILURE; } - Eigen::Affine3d affine = createAffineMatrixFromXYZRPY(x, y, z, roll, pitch, yaw); + Eigen::Affine3d affine = create_affine_matrix_from_xyzrpy(x, y, z, roll, pitch, yaw); const auto mgrs_grid = node->declare_parameter("mgrs_grid", projector.getProjectedMGRSGrid()); std::cout << "using mgrs grid: " << mgrs_grid << std::endl; - transformMaps(pcd_map_ptr, llt_map_ptr, affine); + transform_maps(pcd_map_ptr, llt_map_ptr, affine); lanelet::write(llt_output_path, *llt_map_ptr, projector); pcl::io::savePCDFileBinary(pcd_output_path, *pcd_map_ptr); From ab87ef155cac2859d3b40658ab6f176f2e9dd0d8 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 8 Jul 2024 16:22:41 +0900 Subject: [PATCH 101/306] fix(pointcloud_preprocessor): fix the bug where the geometry message was not saved correctly. (#7886) * fix: fix bug that geometry message didn't save correctly Signed-off-by: vividf * chore: change some functions from public to protected Signed-off-by: vividf --------- Signed-off-by: vividf Co-authored-by: Kenzo Lobos Tsunekawa --- .../distortion_corrector.hpp | 36 +++++++++---------- .../distortion_corrector.cpp | 19 +++++----- 2 files changed, 25 insertions(+), 30 deletions(-) diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp index 6f372f0e74646..8a7b7c90113da 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp @@ -61,7 +61,8 @@ class DistortionCorrectorBase template class DistortionCorrector : public DistortionCorrectorBase { -public: +protected: + geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr_; bool pointcloud_transform_needed_{false}; bool pointcloud_transform_exists_{false}; bool imu_transform_exists_{false}; @@ -72,28 +73,12 @@ class DistortionCorrector : public DistortionCorrectorBase std::deque twist_queue_; std::deque angular_velocity_queue_; - explicit DistortionCorrector(rclcpp::Node * node) - : node_(node), tf_buffer_(node_->get_clock()), tf_listener_(tf_buffer_) - { - } - void processTwistMessage( - const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) override; - - void processIMUMessage( - const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) override; - void getIMUTransformation( - const std::string & base_frame, const std::string & imu_frame, - geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr); - void enqueueIMU( - const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg, - geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr); - - bool isInputValid(sensor_msgs::msg::PointCloud2 & pointcloud); + void getIMUTransformation(const std::string & base_frame, const std::string & imu_frame); + void enqueueIMU(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg); void getTwistAndIMUIterator( bool use_imu, double first_point_time_stamp_sec, std::deque::iterator & it_twist, std::deque::iterator & it_imu); - void undistortPointCloud(bool use_imu, sensor_msgs::msg::PointCloud2 & pointcloud) override; void warnIfTimestampIsTooLate(bool is_twist_time_stamp_too_late, bool is_imu_time_stamp_too_late); void undistortPoint( sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, @@ -105,6 +90,19 @@ class DistortionCorrector : public DistortionCorrectorBase static_cast(this)->undistortPointImplementation( it_x, it_y, it_z, it_twist, it_imu, time_offset, is_twist_valid, is_imu_valid); }; + +public: + explicit DistortionCorrector(rclcpp::Node * node) + : node_(node), tf_buffer_(node_->get_clock()), tf_listener_(tf_buffer_) + { + } + void processTwistMessage( + const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) override; + + void processIMUMessage( + const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) override; + void undistortPointCloud(bool use_imu, sensor_msgs::msg::PointCloud2 & pointcloud) override; + bool isInputValid(sensor_msgs::msg::PointCloud2 & pointcloud); }; class DistortionCorrector2D : public DistortionCorrector diff --git a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp index 81c29a9f6202a..8c8752c7e278e 100644 --- a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp +++ b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp @@ -47,21 +47,20 @@ template void DistortionCorrector::processIMUMessage( const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) { - geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr = - std::make_shared(); - getIMUTransformation(base_frame, imu_msg->header.frame_id, geometry_imu_to_base_link_ptr); - enqueueIMU(imu_msg, geometry_imu_to_base_link_ptr); + getIMUTransformation(base_frame, imu_msg->header.frame_id); + enqueueIMU(imu_msg); } template void DistortionCorrector::getIMUTransformation( - const std::string & base_frame, const std::string & imu_frame, - geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr) + const std::string & base_frame, const std::string & imu_frame) { if (imu_transform_exists_) { return; } + geometry_imu_to_base_link_ptr_ = std::make_shared(); + tf2::Transform tf2_imu_to_base_link; if (base_frame == imu_frame) { tf2_imu_to_base_link.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); @@ -83,20 +82,18 @@ void DistortionCorrector::getIMUTransformation( } } - geometry_imu_to_base_link_ptr->transform.rotation = + geometry_imu_to_base_link_ptr_->transform.rotation = tf2::toMsg(tf2_imu_to_base_link.getRotation()); } template -void DistortionCorrector::enqueueIMU( - const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg, - geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr) +void DistortionCorrector::enqueueIMU(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) { geometry_msgs::msg::Vector3Stamped angular_velocity; angular_velocity.vector = imu_msg->angular_velocity; geometry_msgs::msg::Vector3Stamped transformed_angular_velocity; - tf2::doTransform(angular_velocity, transformed_angular_velocity, *geometry_imu_to_base_link_ptr); + tf2::doTransform(angular_velocity, transformed_angular_velocity, *geometry_imu_to_base_link_ptr_); transformed_angular_velocity.header = imu_msg->header; angular_velocity_queue_.push_back(transformed_angular_velocity); From 1d6ff8e6a61fcc9ccbd0f074d873b4df644672c0 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 8 Jul 2024 16:30:07 +0900 Subject: [PATCH 102/306] refactor(multi_object_tracker)!: fix namespace and directory structure (#7863) * refactor: update include paths for debugger and processor modules Signed-off-by: Taekjin LEE * refactor: update include paths for debugger and processor modules Signed-off-by: Taekjin LEE * refactor: move include files into 'autoware' Signed-off-by: Taekjin LEE * refactor: set namespace Signed-off-by: Taekjin LEE * refactor: refine logics to pass cppcheck Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- .../multi_object_tracker/CMakeLists.txt | 44 ++++++++++--------- .../association/association.hpp} | 14 +++--- .../association}/solver/gnn_solver.hpp | 12 ++--- .../solver/gnn_solver_interface.hpp | 10 +++-- .../association/solver/mu_ssp.hpp} | 12 +++-- .../association/solver/ssp.hpp} | 12 +++-- .../tracker/model/bicycle_tracker.hpp | 17 ++++--- .../tracker/model/big_vehicle_tracker.hpp | 17 ++++--- .../model/multiple_vehicle_tracker.hpp | 17 ++++--- .../tracker/model/normal_vehicle_tracker.hpp | 17 ++++--- .../tracker/model/pass_through_tracker.hpp | 11 +++-- .../model/pedestrian_and_bicycle_tracker.hpp | 17 ++++--- .../tracker/model/pedestrian_tracker.hpp | 19 ++++---- .../tracker/model/tracker_base.hpp | 13 ++++-- .../tracker/model/unknown_tracker.hpp | 15 ++++--- .../motion_model/bicycle_motion_model.hpp | 13 ++++-- .../motion_model/ctrv_motion_model.hpp | 14 +++--- .../tracker/motion_model/cv_motion_model.hpp | 13 ++++-- .../motion_model/motion_model_base.hpp | 11 +++-- .../tracker/object_model/object_model.hpp | 10 +++-- .../multi_object_tracker/tracker/tracker.hpp | 6 +-- .../multi_object_tracker/utils/utils.hpp | 6 +-- .../association/association.cpp} | 11 +++-- .../mu_successive_shortest_path/mu_ssp.cpp} | 6 ++- .../successive_shortest_path/ssp.cpp} | 6 ++- .../tracker/model/bicycle_tracker.cpp | 9 +++- .../tracker/model/big_vehicle_tracker.cpp | 8 +++- .../model/multiple_vehicle_tracker.cpp | 7 ++- .../tracker/model/normal_vehicle_tracker.cpp | 9 +++- .../tracker/model/pass_through_tracker.cpp | 9 +++- .../model/pedestrian_and_bicycle_tracker.cpp | 7 ++- .../tracker/model/pedestrian_tracker.cpp | 9 +++- .../tracker/model/tracker_base.cpp | 9 +++- .../tracker/model/unknown_tracker.cpp | 9 +++- .../motion_model/bicycle_motion_model.cpp | 11 +++-- .../motion_model/ctrv_motion_model.cpp | 10 +++-- .../tracker/motion_model/cv_motion_model.cpp | 10 +++-- .../motion_model/motion_model_base.cpp | 7 ++- .../src/debugger/debug_object.cpp | 9 +++- .../debugger/debug_object.hpp | 13 ++++-- .../src/debugger/debugger.cpp | 6 ++- .../debugger/debugger.hpp | 13 ++++-- ...core.cpp => multi_object_tracker_node.cpp} | 19 ++++---- .../multi_object_tracker_node.hpp} | 22 +++++----- .../src/processor/input_manager.cpp | 32 ++++++++------ .../processor/input_manager.hpp | 10 ++--- .../src/processor/processor.cpp | 9 +++- .../processor/processor.hpp | 12 +++-- 48 files changed, 398 insertions(+), 204 deletions(-) rename perception/multi_object_tracker/include/{multi_object_tracker/data_association/data_association.hpp => autoware/multi_object_tracker/association/association.hpp} (81%) rename perception/multi_object_tracker/include/{multi_object_tracker/data_association => autoware/multi_object_tracker/association}/solver/gnn_solver.hpp (55%) rename perception/multi_object_tracker/include/{multi_object_tracker/data_association => autoware/multi_object_tracker/association}/solver/gnn_solver_interface.hpp (73%) rename perception/multi_object_tracker/include/{multi_object_tracker/data_association/solver/mu_successive_shortest_path.hpp => autoware/multi_object_tracker/association/solver/mu_ssp.hpp} (71%) rename perception/multi_object_tracker/include/{multi_object_tracker/data_association/solver/successive_shortest_path.hpp => autoware/multi_object_tracker/association/solver/ssp.hpp} (71%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/model/bicycle_tracker.hpp (78%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp (78%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp (71%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp (78%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/model/pass_through_tracker.hpp (81%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp (71%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/model/pedestrian_tracker.hpp (78%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/model/tracker_base.hpp (91%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/model/unknown_tracker.hpp (80%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp (87%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp (86%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp (84%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/motion_model/motion_model_base.hpp (85%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/object_model/object_model.hpp (96%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/tracker/tracker.hpp (84%) rename perception/multi_object_tracker/include/{ => autoware}/multi_object_tracker/utils/utils.hpp (98%) rename perception/multi_object_tracker/{src/data_association/data_association.cpp => lib/association/association.cpp} (96%) rename perception/multi_object_tracker/{src/data_association/mu_successive_shortest_path/mu_successive_shortest_path_wrapper.cpp => lib/association/mu_successive_shortest_path/mu_ssp.cpp} (88%) rename perception/multi_object_tracker/{src/data_association/successive_shortest_path/successive_shortest_path.cpp => lib/association/successive_shortest_path/ssp.cpp} (98%) rename perception/multi_object_tracker/{src => lib}/tracker/model/bicycle_tracker.cpp (98%) rename perception/multi_object_tracker/{src => lib}/tracker/model/big_vehicle_tracker.cpp (98%) rename perception/multi_object_tracker/{src => lib}/tracker/model/multiple_vehicle_tracker.cpp (93%) rename perception/multi_object_tracker/{src => lib}/tracker/model/normal_vehicle_tracker.cpp (98%) rename perception/multi_object_tracker/{src => lib}/tracker/model/pass_through_tracker.cpp (95%) rename perception/multi_object_tracker/{src => lib}/tracker/model/pedestrian_and_bicycle_tracker.cpp (93%) rename perception/multi_object_tracker/{src => lib}/tracker/model/pedestrian_tracker.cpp (98%) rename perception/multi_object_tracker/{src => lib}/tracker/model/tracker_base.cpp (96%) rename perception/multi_object_tracker/{src => lib}/tracker/model/unknown_tracker.cpp (97%) rename perception/multi_object_tracker/{src => lib}/tracker/motion_model/bicycle_motion_model.cpp (98%) rename perception/multi_object_tracker/{src => lib}/tracker/motion_model/ctrv_motion_model.cpp (97%) rename perception/multi_object_tracker/{src => lib}/tracker/motion_model/cv_motion_model.cpp (97%) rename perception/multi_object_tracker/{src => lib}/tracker/motion_model/motion_model_base.cpp (93%) rename perception/multi_object_tracker/{include/multi_object_tracker => src}/debugger/debug_object.hpp (91%) rename perception/multi_object_tracker/{include/multi_object_tracker => src}/debugger/debugger.hpp (94%) rename perception/multi_object_tracker/src/{multi_object_tracker_core.cpp => multi_object_tracker_node.cpp} (96%) rename perception/multi_object_tracker/{include/multi_object_tracker/multi_object_tracker_core.hpp => src/multi_object_tracker_node.hpp} (82%) rename perception/multi_object_tracker/{include/multi_object_tracker => src}/processor/input_manager.hpp (95%) rename perception/multi_object_tracker/{include/multi_object_tracker => src}/processor/processor.hpp (91%) diff --git a/perception/multi_object_tracker/CMakeLists.txt b/perception/multi_object_tracker/CMakeLists.txt index 4f9268583dd34..370e5bb0b9161 100644 --- a/perception/multi_object_tracker/CMakeLists.txt +++ b/perception/multi_object_tracker/CMakeLists.txt @@ -20,32 +20,34 @@ include_directories( ) # Generate exe file -set(MULTI_OBJECT_TRACKER_SRC - src/multi_object_tracker_core.cpp +set(${PROJECT_NAME}_src + src/multi_object_tracker_node.cpp src/debugger/debugger.cpp src/debugger/debug_object.cpp src/processor/processor.cpp src/processor/input_manager.cpp - src/data_association/data_association.cpp - src/data_association/mu_successive_shortest_path/mu_successive_shortest_path_wrapper.cpp - src/tracker/motion_model/motion_model_base.cpp - src/tracker/motion_model/bicycle_motion_model.cpp +) +set(${PROJECT_NAME}_lib + lib/association/association.cpp + lib/association/mu_successive_shortest_path/mu_ssp.cpp + lib/tracker/motion_model/motion_model_base.cpp + lib/tracker/motion_model/bicycle_motion_model.cpp # cspell: ignore ctrv - src/tracker/motion_model/ctrv_motion_model.cpp - src/tracker/motion_model/cv_motion_model.cpp - src/tracker/model/tracker_base.cpp - src/tracker/model/big_vehicle_tracker.cpp - src/tracker/model/normal_vehicle_tracker.cpp - src/tracker/model/multiple_vehicle_tracker.cpp - src/tracker/model/bicycle_tracker.cpp - src/tracker/model/pedestrian_tracker.cpp - src/tracker/model/pedestrian_and_bicycle_tracker.cpp - src/tracker/model/unknown_tracker.cpp - src/tracker/model/pass_through_tracker.cpp + lib/tracker/motion_model/ctrv_motion_model.cpp + lib/tracker/motion_model/cv_motion_model.cpp + lib/tracker/model/tracker_base.cpp + lib/tracker/model/big_vehicle_tracker.cpp + lib/tracker/model/normal_vehicle_tracker.cpp + lib/tracker/model/multiple_vehicle_tracker.cpp + lib/tracker/model/bicycle_tracker.cpp + lib/tracker/model/pedestrian_tracker.cpp + lib/tracker/model/pedestrian_and_bicycle_tracker.cpp + lib/tracker/model/unknown_tracker.cpp + lib/tracker/model/pass_through_tracker.cpp ) - ament_auto_add_library(${PROJECT_NAME} SHARED - ${MULTI_OBJECT_TRACKER_SRC} + ${${PROJECT_NAME}_src} + ${${PROJECT_NAME}_lib} ) target_link_libraries(${PROJECT_NAME} @@ -54,8 +56,8 @@ target_link_libraries(${PROJECT_NAME} ) rclcpp_components_register_node(${PROJECT_NAME} - PLUGIN "multi_object_tracker::MultiObjectTracker" - EXECUTABLE ${PROJECT_NAME}_node + PLUGIN "autoware::multi_object_tracker::MultiObjectTracker" + EXECUTABLE multi_object_tracker_node ) ament_auto_package(INSTALL_TO_SHARE diff --git a/perception/multi_object_tracker/include/multi_object_tracker/data_association/data_association.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/association.hpp similarity index 81% rename from perception/multi_object_tracker/include/multi_object_tracker/data_association/data_association.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/association/association.hpp index c30423db02c26..2c12341d0aa67 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/data_association/data_association.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/association.hpp @@ -16,13 +16,13 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__DATA_ASSOCIATION_HPP_ -#define MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__DATA_ASSOCIATION_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__ASSOCIATION_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__ASSOCIATION_HPP_ #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/data_association/solver/gnn_solver.hpp" -#include "multi_object_tracker/tracker/tracker.hpp" +#include "autoware/multi_object_tracker/association/solver/gnn_solver.hpp" +#include "autoware/multi_object_tracker/tracker/tracker.hpp" #include #include @@ -34,6 +34,8 @@ #include #include +namespace autoware::multi_object_tracker +{ class DataAssociation { private: @@ -61,4 +63,6 @@ class DataAssociation virtual ~DataAssociation() {} }; -#endif // MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__DATA_ASSOCIATION_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__ASSOCIATION_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/gnn_solver.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver.hpp similarity index 55% rename from perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/gnn_solver.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver.hpp index 631fd73f8583d..3b72b800e86bc 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/gnn_solver.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ -#define MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ -#include "multi_object_tracker/data_association/solver/gnn_solver_interface.hpp" -#include "multi_object_tracker/data_association/solver/mu_successive_shortest_path.hpp" -#include "multi_object_tracker/data_association/solver/successive_shortest_path.hpp" +#include "autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp" +#include "autoware/multi_object_tracker/association/solver/mu_ssp.hpp" +#include "autoware/multi_object_tracker/association/solver/ssp.hpp" -#endif // MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/gnn_solver_interface.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp similarity index 73% rename from perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/gnn_solver_interface.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp index 1fb508bcf12b2..88f9181d96d9b 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/gnn_solver_interface.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp @@ -12,12 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ -#define MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ #include #include +namespace autoware::multi_object_tracker +{ namespace gnn_solver { class GnnSolverInterface @@ -30,6 +32,8 @@ class GnnSolverInterface const std::vector> & cost, std::unordered_map * direct_assignment, std::unordered_map * reverse_assignment) = 0; }; + } // namespace gnn_solver +} // namespace autoware::multi_object_tracker -#endif // MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/mu_successive_shortest_path.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/mu_ssp.hpp similarity index 71% rename from perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/mu_successive_shortest_path.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/mu_ssp.hpp index a4d9d727e6cc5..024670c3389c6 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/mu_successive_shortest_path.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/mu_ssp.hpp @@ -12,14 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__MU_SUCCESSIVE_SHORTEST_PATH_HPP_ -#define MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__MU_SUCCESSIVE_SHORTEST_PATH_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__MU_SSP_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__MU_SSP_HPP_ -#include "multi_object_tracker/data_association/solver/gnn_solver_interface.hpp" +#include "autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp" #include #include +namespace autoware::multi_object_tracker +{ namespace gnn_solver { class MuSSP : public GnnSolverInterface @@ -32,6 +34,8 @@ class MuSSP : public GnnSolverInterface const std::vector> & cost, std::unordered_map * direct_assignment, std::unordered_map * reverse_assignment) override; }; + } // namespace gnn_solver +} // namespace autoware::multi_object_tracker -#endif // MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__MU_SUCCESSIVE_SHORTEST_PATH_HPP_ +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__MU_SSP_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/successive_shortest_path.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/ssp.hpp similarity index 71% rename from perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/successive_shortest_path.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/ssp.hpp index 1c4b15cd68b59..0f987fc49ee7c 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/data_association/solver/successive_shortest_path.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/ssp.hpp @@ -12,14 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__SUCCESSIVE_SHORTEST_PATH_HPP_ -#define MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__SUCCESSIVE_SHORTEST_PATH_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__SSP_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__SSP_HPP_ -#include "multi_object_tracker/data_association/solver/gnn_solver_interface.hpp" +#include "autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp" #include #include +namespace autoware::multi_object_tracker +{ namespace gnn_solver { class SSP : public GnnSolverInterface @@ -32,6 +34,8 @@ class SSP : public GnnSolverInterface const std::vector> & cost, std::unordered_map * direct_assignment, std::unordered_map * reverse_assignment) override; }; + } // namespace gnn_solver +} // namespace autoware::multi_object_tracker -#endif // MULTI_OBJECT_TRACKER__DATA_ASSOCIATION__SOLVER__SUCCESSIVE_SHORTEST_PATH_HPP_ +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__ASSOCIATION__SOLVER__SSP_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/bicycle_tracker.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp similarity index 78% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/model/bicycle_tracker.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp index 63ad496b70ed9..5374e28d5f9cf 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/bicycle_tracker.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp @@ -16,13 +16,16 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__BICYCLE_TRACKER_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__BICYCLE_TRACKER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__BICYCLE_TRACKER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__BICYCLE_TRACKER_HPP_ +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/object_model/object_model.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/model/tracker_base.hpp" -#include "multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp" -#include "multi_object_tracker/tracker/object_model/object_model.hpp" + +namespace autoware::multi_object_tracker +{ class BicycleTracker : public Tracker { @@ -67,4 +70,6 @@ class BicycleTracker : public Tracker const geometry_msgs::msg::Transform & self_transform) const; }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__BICYCLE_TRACKER_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__BICYCLE_TRACKER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp similarity index 78% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp index 7112e6a08ade1..c3f824aff35b4 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp @@ -16,13 +16,16 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__BIG_VEHICLE_TRACKER_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__BIG_VEHICLE_TRACKER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__BIG_VEHICLE_TRACKER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__BIG_VEHICLE_TRACKER_HPP_ +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/object_model/object_model.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/model/tracker_base.hpp" -#include "multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp" -#include "multi_object_tracker/tracker/object_model/object_model.hpp" + +namespace autoware::multi_object_tracker +{ class BigVehicleTracker : public Tracker { @@ -70,4 +73,6 @@ class BigVehicleTracker : public Tracker const geometry_msgs::msg::Transform & self_transform); }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__BIG_VEHICLE_TRACKER_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__BIG_VEHICLE_TRACKER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp similarity index 71% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp index 75aec0b06d6b8..a0a6bd7781761 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp @@ -16,16 +16,19 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__MULTIPLE_VEHICLE_TRACKER_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__MULTIPLE_VEHICLE_TRACKER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__MULTIPLE_VEHICLE_TRACKER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__MULTIPLE_VEHICLE_TRACKER_HPP_ +#include "autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/model/big_vehicle_tracker.hpp" -#include "multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp" -#include "multi_object_tracker/tracker/model/tracker_base.hpp" #include +namespace autoware::multi_object_tracker +{ + class MultipleVehicleTracker : public Tracker { private: @@ -48,4 +51,6 @@ class MultipleVehicleTracker : public Tracker virtual ~MultipleVehicleTracker() {} }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__MULTIPLE_VEHICLE_TRACKER_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__MULTIPLE_VEHICLE_TRACKER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp similarity index 78% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp index 1165cecab258b..f7edebfc31378 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp @@ -16,13 +16,16 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__NORMAL_VEHICLE_TRACKER_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__NORMAL_VEHICLE_TRACKER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__NORMAL_VEHICLE_TRACKER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__NORMAL_VEHICLE_TRACKER_HPP_ +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/object_model/object_model.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/model/tracker_base.hpp" -#include "multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp" -#include "multi_object_tracker/tracker/object_model/object_model.hpp" + +namespace autoware::multi_object_tracker +{ class NormalVehicleTracker : public Tracker { @@ -70,4 +73,6 @@ class NormalVehicleTracker : public Tracker const geometry_msgs::msg::Transform & self_transform); }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__NORMAL_VEHICLE_TRACKER_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__NORMAL_VEHICLE_TRACKER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/pass_through_tracker.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pass_through_tracker.hpp similarity index 81% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/model/pass_through_tracker.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pass_through_tracker.hpp index cd661dab52c6e..e7f0a5fd699e1 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/pass_through_tracker.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pass_through_tracker.hpp @@ -16,12 +16,15 @@ // Author: v1.0 Yutaka Shimizu // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__PASS_THROUGH_TRACKER_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__PASS_THROUGH_TRACKER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PASS_THROUGH_TRACKER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PASS_THROUGH_TRACKER_HPP_ #include "kalman_filter/kalman_filter.hpp" #include "tracker_base.hpp" +namespace autoware::multi_object_tracker +{ + class PassThroughTracker : public Tracker { private: @@ -44,4 +47,6 @@ class PassThroughTracker : public Tracker autoware_perception_msgs::msg::TrackedObject & object) const override; }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__PASS_THROUGH_TRACKER_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PASS_THROUGH_TRACKER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp similarity index 71% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp index 3c3ac038b085e..f593280c2e183 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp @@ -16,13 +16,16 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_AND_BICYCLE_TRACKER_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_AND_BICYCLE_TRACKER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_AND_BICYCLE_TRACKER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_AND_BICYCLE_TRACKER_HPP_ +#include "autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/model/bicycle_tracker.hpp" -#include "multi_object_tracker/tracker/model/pedestrian_tracker.hpp" -#include "multi_object_tracker/tracker/model/tracker_base.hpp" + +namespace autoware::multi_object_tracker +{ class PedestrianAndBicycleTracker : public Tracker { @@ -46,4 +49,6 @@ class PedestrianAndBicycleTracker : public Tracker virtual ~PedestrianAndBicycleTracker() {} }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_AND_BICYCLE_TRACKER_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_AND_BICYCLE_TRACKER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/pedestrian_tracker.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp similarity index 78% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/model/pedestrian_tracker.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp index c5be57f656eb5..1e0f778a69137 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/pedestrian_tracker.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp @@ -16,15 +16,16 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_TRACKER_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_TRACKER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_TRACKER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_TRACKER_HPP_ +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/object_model/object_model.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/model/tracker_base.hpp" -#include "multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp" -#include "multi_object_tracker/tracker/object_model/object_model.hpp" -// cspell: ignore CTRV +namespace autoware::multi_object_tracker +{ class PedestrianTracker : public Tracker { @@ -49,7 +50,7 @@ class PedestrianTracker : public Tracker }; BoundingBox bounding_box_; Cylinder cylinder_; - + // cspell: ignore CTRV CTRVMotionModel motion_model_; using IDX = CTRVMotionModel::IDX; @@ -75,4 +76,6 @@ class PedestrianTracker : public Tracker const geometry_msgs::msg::Transform & self_transform) const; }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_TRACKER_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__PEDESTRIAN_TRACKER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/tracker_base.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/tracker_base.hpp similarity index 91% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/model/tracker_base.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/tracker_base.hpp index 44b3884c392e6..bc52e49f763fd 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/tracker_base.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/tracker_base.hpp @@ -16,11 +16,11 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__TRACKER_BASE_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__TRACKER_BASE_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__TRACKER_BASE_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__TRACKER_BASE_HPP_ #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/utils/utils.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include @@ -33,6 +33,9 @@ #include +namespace autoware::multi_object_tracker +{ + class Tracker { private: @@ -114,4 +117,6 @@ class Tracker virtual bool predict(const rclcpp::Time & time) = 0; }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__TRACKER_BASE_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__TRACKER_BASE_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/unknown_tracker.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/unknown_tracker.hpp similarity index 80% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/model/unknown_tracker.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/unknown_tracker.hpp index ca8ecba160bd8..4bc03f439ffc2 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/model/unknown_tracker.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/unknown_tracker.hpp @@ -16,12 +16,15 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MODEL__UNKNOWN_TRACKER_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MODEL__UNKNOWN_TRACKER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__UNKNOWN_TRACKER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__UNKNOWN_TRACKER_HPP_ +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/model/tracker_base.hpp" -#include "multi_object_tracker/tracker/motion_model/cv_motion_model.hpp" + +namespace autoware::multi_object_tracker +{ class UnknownTracker : public Tracker { @@ -62,4 +65,6 @@ class UnknownTracker : public Tracker autoware_perception_msgs::msg::TrackedObject & object) const override; }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MODEL__UNKNOWN_TRACKER_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MODEL__UNKNOWN_TRACKER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp similarity index 87% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp index f6ce2842388c6..6e20d31aad168 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp @@ -16,11 +16,11 @@ // Author: v1.0 Taekjin Lee // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__BICYCLE_MOTION_MODEL_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__BICYCLE_MOTION_MODEL_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__BICYCLE_MOTION_MODEL_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__BICYCLE_MOTION_MODEL_HPP_ +#include "autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/motion_model/motion_model_base.hpp" #include #include @@ -32,6 +32,9 @@ #endif #include +namespace autoware::multi_object_tracker +{ + class BicycleMotionModel : public MotionModel { private: @@ -107,4 +110,6 @@ class BicycleMotionModel : public MotionModel geometry_msgs::msg::Twist & twist, std::array & twist_cov) const override; }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__BICYCLE_MOTION_MODEL_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__BICYCLE_MOTION_MODEL_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp similarity index 86% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp index 657048079c46c..3cca786d9f65b 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp @@ -16,11 +16,11 @@ // Author: v1.0 Taekjin Lee // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CTRV_MOTION_MODEL_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CTRV_MOTION_MODEL_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CTRV_MOTION_MODEL_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CTRV_MOTION_MODEL_HPP_ +#include "autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/motion_model/motion_model_base.hpp" #include #include @@ -32,8 +32,10 @@ #endif #include -// cspell: ignore CTRV +namespace autoware::multi_object_tracker +{ +// cspell: ignore CTRV class CTRVMotionModel : public MotionModel { private: @@ -92,4 +94,6 @@ class CTRVMotionModel : public MotionModel geometry_msgs::msg::Twist & twist, std::array & twist_cov) const override; }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CTRV_MOTION_MODEL_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CTRV_MOTION_MODEL_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp similarity index 84% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp index 421e413d7aab7..ad3061285a80c 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp @@ -16,11 +16,11 @@ // Author: v1.0 Taekjin Lee // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CV_MOTION_MODEL_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CV_MOTION_MODEL_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CV_MOTION_MODEL_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CV_MOTION_MODEL_HPP_ +#include "autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp" #include "kalman_filter/kalman_filter.hpp" -#include "multi_object_tracker/tracker/motion_model/motion_model_base.hpp" #include #include @@ -32,6 +32,9 @@ #endif #include +namespace autoware::multi_object_tracker +{ + class CVMotionModel : public MotionModel { private: @@ -85,4 +88,6 @@ class CVMotionModel : public MotionModel geometry_msgs::msg::Twist & twist, std::array & twist_cov) const override; }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CV_MOTION_MODEL_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__CV_MOTION_MODEL_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/motion_model_base.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp similarity index 85% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/motion_model_base.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp index e740612e96d4f..130053fafd2ed 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/motion_model/motion_model_base.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp @@ -16,8 +16,8 @@ // Author: v1.0 Taekjin Lee // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__MOTION_MODEL_BASE_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__MOTION_MODEL_BASE_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__MOTION_MODEL_BASE_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__MOTION_MODEL_BASE_HPP_ #include "kalman_filter/kalman_filter.hpp" @@ -31,6 +31,9 @@ #endif #include +namespace autoware::multi_object_tracker +{ + class MotionModel { private: @@ -65,4 +68,6 @@ class MotionModel geometry_msgs::msg::Twist & twist, std::array & twist_cov) const = 0; }; -#endif // MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__MOTION_MODEL_BASE_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__MOTION_MODEL__MOTION_MODEL_BASE_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/object_model/object_model.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/object_model/object_model.hpp similarity index 96% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/object_model/object_model.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/object_model/object_model.hpp index 6a771344bb36b..b49464109eec8 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/object_model/object_model.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/object_model/object_model.hpp @@ -16,8 +16,8 @@ // Author: v1.0 Taekjin Lee // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__OBJECT_MODEL__OBJECT_MODEL_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__OBJECT_MODEL__OBJECT_MODEL_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__OBJECT_MODEL__OBJECT_MODEL_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__OBJECT_MODEL__OBJECT_MODEL_HPP_ #include @@ -46,6 +46,9 @@ constexpr T kmph2mps(const T kmph) } // namespace +namespace autoware::multi_object_tracker +{ + namespace object_model { @@ -301,5 +304,6 @@ static const ObjectModel bicycle(ObjectModelType::Bicycle); static const ObjectModel pedestrian(ObjectModelType::Pedestrian); } // namespace object_model +} // namespace autoware::multi_object_tracker -#endif // MULTI_OBJECT_TRACKER__TRACKER__OBJECT_MODEL__OBJECT_MODEL_HPP_ +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__OBJECT_MODEL__OBJECT_MODEL_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/tracker/tracker.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/tracker.hpp similarity index 84% rename from perception/multi_object_tracker/include/multi_object_tracker/tracker/tracker.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/tracker.hpp index a8bc58e254fc2..ea1e60d4c7e17 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/tracker/tracker.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/tracker.hpp @@ -16,8 +16,8 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__TRACKER__TRACKER_HPP_ -#define MULTI_OBJECT_TRACKER__TRACKER__TRACKER_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__TRACKER_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__TRACKER_HPP_ #include "model/bicycle_tracker.hpp" #include "model/big_vehicle_tracker.hpp" @@ -29,4 +29,4 @@ #include "model/tracker_base.hpp" #include "model/unknown_tracker.hpp" -#endif // MULTI_OBJECT_TRACKER__TRACKER__TRACKER_HPP_ +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__TRACKER__TRACKER_HPP_ diff --git a/perception/multi_object_tracker/include/multi_object_tracker/utils/utils.hpp b/perception/multi_object_tracker/include/autoware/multi_object_tracker/utils/utils.hpp similarity index 98% rename from perception/multi_object_tracker/include/multi_object_tracker/utils/utils.hpp rename to perception/multi_object_tracker/include/autoware/multi_object_tracker/utils/utils.hpp index 0bda7870ae2b9..833f768e171f4 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/utils/utils.hpp +++ b/perception/multi_object_tracker/include/autoware/multi_object_tracker/utils/utils.hpp @@ -16,8 +16,8 @@ // Author: v1.0 Yukihiro Saito // -#ifndef MULTI_OBJECT_TRACKER__UTILS__UTILS_HPP_ -#define MULTI_OBJECT_TRACKER__UTILS__UTILS_HPP_ +#ifndef AUTOWARE__MULTI_OBJECT_TRACKER__UTILS__UTILS_HPP_ +#define AUTOWARE__MULTI_OBJECT_TRACKER__UTILS__UTILS_HPP_ #include #include @@ -276,4 +276,4 @@ inline bool getMeasurementYaw( } // namespace utils -#endif // MULTI_OBJECT_TRACKER__UTILS__UTILS_HPP_ +#endif // AUTOWARE__MULTI_OBJECT_TRACKER__UTILS__UTILS_HPP_ diff --git a/perception/multi_object_tracker/src/data_association/data_association.cpp b/perception/multi_object_tracker/lib/association/association.cpp similarity index 96% rename from perception/multi_object_tracker/src/data_association/data_association.cpp rename to perception/multi_object_tracker/lib/association/association.cpp index f7b40cd178528..ac31cad4cc13c 100644 --- a/perception/multi_object_tracker/src/data_association/data_association.cpp +++ b/perception/multi_object_tracker/lib/association/association.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "multi_object_tracker/data_association/data_association.hpp" +#include "autoware/multi_object_tracker/association/association.hpp" -#include "multi_object_tracker/data_association/solver/gnn_solver.hpp" -#include "multi_object_tracker/utils/utils.hpp" +#include "autoware/multi_object_tracker/association/solver/gnn_solver.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include @@ -68,6 +68,9 @@ double getFormedYawAngle( } } // namespace +namespace autoware::multi_object_tracker +{ + DataAssociation::DataAssociation( std::vector can_assign_vector, std::vector max_dist_vector, std::vector max_area_vector, std::vector min_area_vector, @@ -224,3 +227,5 @@ Eigen::MatrixXd DataAssociation::calcScoreMatrix( return score_matrix; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/data_association/mu_successive_shortest_path/mu_successive_shortest_path_wrapper.cpp b/perception/multi_object_tracker/lib/association/mu_successive_shortest_path/mu_ssp.cpp similarity index 88% rename from perception/multi_object_tracker/src/data_association/mu_successive_shortest_path/mu_successive_shortest_path_wrapper.cpp rename to perception/multi_object_tracker/lib/association/mu_successive_shortest_path/mu_ssp.cpp index 18779a7fffbdf..9ae6e300b2b9b 100644 --- a/perception/multi_object_tracker/src/data_association/mu_successive_shortest_path/mu_successive_shortest_path_wrapper.cpp +++ b/perception/multi_object_tracker/lib/association/mu_successive_shortest_path/mu_ssp.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "multi_object_tracker/data_association/solver/mu_successive_shortest_path.hpp" +#include "autoware/multi_object_tracker/association/solver/mu_ssp.hpp" #include @@ -24,6 +24,8 @@ #include #include +namespace autoware::multi_object_tracker +{ namespace gnn_solver { void MuSSP::maximizeLinearAssignment( @@ -39,3 +41,5 @@ void MuSSP::maximizeLinearAssignment( solve_muSSP(cost, direct_assignment, reverse_assignment); } } // namespace gnn_solver + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/data_association/successive_shortest_path/successive_shortest_path.cpp b/perception/multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp similarity index 98% rename from perception/multi_object_tracker/src/data_association/successive_shortest_path/successive_shortest_path.cpp rename to perception/multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp index 0b52c09cb54b8..d20992c7d183b 100644 --- a/perception/multi_object_tracker/src/data_association/successive_shortest_path/successive_shortest_path.cpp +++ b/perception/multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "multi_object_tracker/data_association/solver/successive_shortest_path.hpp" +#include "autoware/multi_object_tracker/association/solver/ssp.hpp" #include #include @@ -22,6 +22,8 @@ #include #include +namespace autoware::multi_object_tracker +{ namespace gnn_solver { struct ResidualEdge @@ -368,3 +370,5 @@ void SSP::maximizeLinearAssignment( #endif } } // namespace gnn_solver + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/model/bicycle_tracker.cpp b/perception/multi_object_tracker/lib/tracker/model/bicycle_tracker.cpp similarity index 98% rename from perception/multi_object_tracker/src/tracker/model/bicycle_tracker.cpp rename to perception/multi_object_tracker/lib/tracker/model/bicycle_tracker.cpp index a438c830596d7..ba53ccec1ad43 100644 --- a/perception/multi_object_tracker/src/tracker/model/bicycle_tracker.cpp +++ b/perception/multi_object_tracker/lib/tracker/model/bicycle_tracker.cpp @@ -17,13 +17,13 @@ // #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/tracker/model/bicycle_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "autoware/universe_utils/geometry/boost_polygon_utils.hpp" #include "autoware/universe_utils/math/normalization.hpp" #include "autoware/universe_utils/math/unit_conversion.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" -#include "multi_object_tracker/utils/utils.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include @@ -40,6 +40,9 @@ #include #endif +namespace autoware::multi_object_tracker +{ + using Label = autoware_perception_msgs::msg::ObjectClassification; BicycleTracker::BicycleTracker( @@ -334,3 +337,5 @@ bool BicycleTracker::getTrackedObject( return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/model/big_vehicle_tracker.cpp b/perception/multi_object_tracker/lib/tracker/model/big_vehicle_tracker.cpp similarity index 98% rename from perception/multi_object_tracker/src/tracker/model/big_vehicle_tracker.cpp rename to perception/multi_object_tracker/lib/tracker/model/big_vehicle_tracker.cpp index 90d33e65b46bd..0593b7fc9dc12 100644 --- a/perception/multi_object_tracker/src/tracker/model/big_vehicle_tracker.cpp +++ b/perception/multi_object_tracker/lib/tracker/model/big_vehicle_tracker.cpp @@ -17,13 +17,13 @@ // #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/tracker/model/big_vehicle_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "autoware/universe_utils/geometry/boost_polygon_utils.hpp" #include "autoware/universe_utils/math/normalization.hpp" #include "autoware/universe_utils/math/unit_conversion.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" -#include "multi_object_tracker/utils/utils.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include @@ -40,6 +40,8 @@ #include #endif +namespace autoware::multi_object_tracker +{ using Label = autoware_perception_msgs::msg::ObjectClassification; BigVehicleTracker::BigVehicleTracker( @@ -398,3 +400,5 @@ bool BigVehicleTracker::getTrackedObject( return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/model/multiple_vehicle_tracker.cpp b/perception/multi_object_tracker/lib/tracker/model/multiple_vehicle_tracker.cpp similarity index 93% rename from perception/multi_object_tracker/src/tracker/model/multiple_vehicle_tracker.cpp rename to perception/multi_object_tracker/lib/tracker/model/multiple_vehicle_tracker.cpp index 67445e5b0daa2..a6e5021e4fe7d 100644 --- a/perception/multi_object_tracker/src/tracker/model/multiple_vehicle_tracker.cpp +++ b/perception/multi_object_tracker/lib/tracker/model/multiple_vehicle_tracker.cpp @@ -16,7 +16,10 @@ // Author: v1.0 Yukihiro Saito // -#include "multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp" + +namespace autoware::multi_object_tracker +{ using Label = autoware_perception_msgs::msg::ObjectClassification; @@ -65,3 +68,5 @@ bool MultipleVehicleTracker::getTrackedObject( object.classification = getClassification(); return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/model/normal_vehicle_tracker.cpp b/perception/multi_object_tracker/lib/tracker/model/normal_vehicle_tracker.cpp similarity index 98% rename from perception/multi_object_tracker/src/tracker/model/normal_vehicle_tracker.cpp rename to perception/multi_object_tracker/lib/tracker/model/normal_vehicle_tracker.cpp index 67282893083c1..ef345692b32ca 100644 --- a/perception/multi_object_tracker/src/tracker/model/normal_vehicle_tracker.cpp +++ b/perception/multi_object_tracker/lib/tracker/model/normal_vehicle_tracker.cpp @@ -17,13 +17,13 @@ // #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "autoware/universe_utils/geometry/boost_polygon_utils.hpp" #include "autoware/universe_utils/math/normalization.hpp" #include "autoware/universe_utils/math/unit_conversion.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" -#include "multi_object_tracker/utils/utils.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include @@ -40,6 +40,9 @@ #include #endif +namespace autoware::multi_object_tracker +{ + using Label = autoware_perception_msgs::msg::ObjectClassification; NormalVehicleTracker::NormalVehicleTracker( @@ -399,3 +402,5 @@ bool NormalVehicleTracker::getTrackedObject( return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/model/pass_through_tracker.cpp b/perception/multi_object_tracker/lib/tracker/model/pass_through_tracker.cpp similarity index 95% rename from perception/multi_object_tracker/src/tracker/model/pass_through_tracker.cpp rename to perception/multi_object_tracker/lib/tracker/model/pass_through_tracker.cpp index 17be415480360..c872944fab3d7 100644 --- a/perception/multi_object_tracker/src/tracker/model/pass_through_tracker.cpp +++ b/perception/multi_object_tracker/lib/tracker/model/pass_through_tracker.cpp @@ -16,10 +16,10 @@ // Author: v1.0 Yutaka Shimizu // #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/tracker/model/pass_through_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/pass_through_tracker.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" -#include "multi_object_tracker/utils/utils.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include @@ -36,6 +36,9 @@ #include #endif +namespace autoware::multi_object_tracker +{ + PassThroughTracker::PassThroughTracker( const rclcpp::Time & time, const autoware_perception_msgs::msg::DetectedObject & object, const geometry_msgs::msg::Transform & /*self_transform*/, const size_t channel_size, @@ -117,3 +120,5 @@ bool PassThroughTracker::getTrackedObject( return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/model/pedestrian_and_bicycle_tracker.cpp b/perception/multi_object_tracker/lib/tracker/model/pedestrian_and_bicycle_tracker.cpp similarity index 93% rename from perception/multi_object_tracker/src/tracker/model/pedestrian_and_bicycle_tracker.cpp rename to perception/multi_object_tracker/lib/tracker/model/pedestrian_and_bicycle_tracker.cpp index 00609934990a3..8c665e6078a2b 100644 --- a/perception/multi_object_tracker/src/tracker/model/pedestrian_and_bicycle_tracker.cpp +++ b/perception/multi_object_tracker/lib/tracker/model/pedestrian_and_bicycle_tracker.cpp @@ -16,7 +16,10 @@ // Author: v1.0 Yukihiro Saito // -#include "multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp" + +namespace autoware::multi_object_tracker +{ using Label = autoware_perception_msgs::msg::ObjectClassification; @@ -65,3 +68,5 @@ bool PedestrianAndBicycleTracker::getTrackedObject( object.classification = getClassification(); return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/model/pedestrian_tracker.cpp b/perception/multi_object_tracker/lib/tracker/model/pedestrian_tracker.cpp similarity index 98% rename from perception/multi_object_tracker/src/tracker/model/pedestrian_tracker.cpp rename to perception/multi_object_tracker/lib/tracker/model/pedestrian_tracker.cpp index d9412c3b5739c..ee50c2e5449ed 100644 --- a/perception/multi_object_tracker/src/tracker/model/pedestrian_tracker.cpp +++ b/perception/multi_object_tracker/lib/tracker/model/pedestrian_tracker.cpp @@ -17,13 +17,13 @@ // #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/tracker/model/pedestrian_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "autoware/universe_utils/geometry/boost_polygon_utils.hpp" #include "autoware/universe_utils/math/normalization.hpp" #include "autoware/universe_utils/math/unit_conversion.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" -#include "multi_object_tracker/utils/utils.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include @@ -40,6 +40,9 @@ #include #endif +namespace autoware::multi_object_tracker +{ + using Label = autoware_perception_msgs::msg::ObjectClassification; PedestrianTracker::PedestrianTracker( @@ -338,3 +341,5 @@ bool PedestrianTracker::getTrackedObject( return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/model/tracker_base.cpp b/perception/multi_object_tracker/lib/tracker/model/tracker_base.cpp similarity index 96% rename from perception/multi_object_tracker/src/tracker/model/tracker_base.cpp rename to perception/multi_object_tracker/lib/tracker/model/tracker_base.cpp index f27bad172a4b9..daa8db5db91e6 100644 --- a/perception/multi_object_tracker/src/tracker/model/tracker_base.cpp +++ b/perception/multi_object_tracker/lib/tracker/model/tracker_base.cpp @@ -14,9 +14,9 @@ // // -#include "multi_object_tracker/tracker/model/tracker_base.hpp" +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" -#include "multi_object_tracker/utils/utils.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include #include @@ -40,6 +40,9 @@ float decayProbability(const float & prior, const float & delta_time) } } // namespace +namespace autoware::multi_object_tracker +{ + Tracker::Tracker( const rclcpp::Time & time, const std::vector & classification, @@ -202,3 +205,5 @@ geometry_msgs::msg::PoseWithCovariance Tracker::getPoseWithCovariance( getTrackedObject(time, object); return object.kinematics.pose_with_covariance; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/model/unknown_tracker.cpp b/perception/multi_object_tracker/lib/tracker/model/unknown_tracker.cpp similarity index 97% rename from perception/multi_object_tracker/src/tracker/model/unknown_tracker.cpp rename to perception/multi_object_tracker/lib/tracker/model/unknown_tracker.cpp index 6905d7c3b8ced..0648007e0b807 100644 --- a/perception/multi_object_tracker/src/tracker/model/unknown_tracker.cpp +++ b/perception/multi_object_tracker/lib/tracker/model/unknown_tracker.cpp @@ -13,13 +13,13 @@ // limitations under the License. #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/tracker/model/unknown_tracker.hpp" +#include "autoware/multi_object_tracker/tracker/model/unknown_tracker.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "autoware/universe_utils/geometry/boost_polygon_utils.hpp" #include "autoware/universe_utils/math/normalization.hpp" #include "autoware/universe_utils/math/unit_conversion.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" -#include "multi_object_tracker/utils/utils.hpp" #include #include @@ -36,6 +36,9 @@ #endif #include "object_recognition_utils/object_recognition_utils.hpp" +namespace autoware::multi_object_tracker +{ + UnknownTracker::UnknownTracker( const rclcpp::Time & time, const autoware_perception_msgs::msg::DetectedObject & object, const geometry_msgs::msg::Transform & /*self_transform*/, const size_t channel_size, @@ -234,3 +237,5 @@ bool UnknownTracker::getTrackedObject( return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/motion_model/bicycle_motion_model.cpp b/perception/multi_object_tracker/lib/tracker/motion_model/bicycle_motion_model.cpp similarity index 98% rename from perception/multi_object_tracker/src/tracker/motion_model/bicycle_motion_model.cpp rename to perception/multi_object_tracker/lib/tracker/motion_model/bicycle_motion_model.cpp index 466108a2bef0e..2e325d18579a6 100644 --- a/perception/multi_object_tracker/src/tracker/motion_model/bicycle_motion_model.cpp +++ b/perception/multi_object_tracker/lib/tracker/motion_model/bicycle_motion_model.cpp @@ -17,17 +17,20 @@ // #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "autoware/universe_utils/math/normalization.hpp" #include "autoware/universe_utils/math/unit_conversion.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" -#include "multi_object_tracker/tracker/motion_model/motion_model_base.hpp" -#include "multi_object_tracker/utils/utils.hpp" #include #include +namespace autoware::multi_object_tracker +{ + // cspell: ignore CTRV // Bicycle CTRV motion model // CTRV : Constant Turn Rate and constant Velocity @@ -487,3 +490,5 @@ bool BicycleMotionModel::getPredictedState( return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/motion_model/ctrv_motion_model.cpp b/perception/multi_object_tracker/lib/tracker/motion_model/ctrv_motion_model.cpp similarity index 97% rename from perception/multi_object_tracker/src/tracker/motion_model/ctrv_motion_model.cpp rename to perception/multi_object_tracker/lib/tracker/motion_model/ctrv_motion_model.cpp index b19af1d26d162..b1c5a36f9ad5b 100644 --- a/perception/multi_object_tracker/src/tracker/motion_model/ctrv_motion_model.cpp +++ b/perception/multi_object_tracker/lib/tracker/motion_model/ctrv_motion_model.cpp @@ -17,17 +17,19 @@ // #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "autoware/universe_utils/math/normalization.hpp" #include "autoware/universe_utils/math/unit_conversion.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" -#include "multi_object_tracker/tracker/motion_model/motion_model_base.hpp" -#include "multi_object_tracker/utils/utils.hpp" #include #include +namespace autoware::multi_object_tracker +{ // cspell: ignore CTRV // Constant Turn Rate and constant Velocity (CTRV) motion model using autoware::universe_utils::xyzrpy_covariance_index::XYZRPY_COV_IDX; @@ -386,3 +388,5 @@ bool CTRVMotionModel::getPredictedState( return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/motion_model/cv_motion_model.cpp b/perception/multi_object_tracker/lib/tracker/motion_model/cv_motion_model.cpp similarity index 97% rename from perception/multi_object_tracker/src/tracker/motion_model/cv_motion_model.cpp rename to perception/multi_object_tracker/lib/tracker/motion_model/cv_motion_model.cpp index 231ba73796ed9..2e2ba660a6e0d 100644 --- a/perception/multi_object_tracker/src/tracker/motion_model/cv_motion_model.cpp +++ b/perception/multi_object_tracker/lib/tracker/motion_model/cv_motion_model.cpp @@ -17,19 +17,21 @@ // #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/tracker/motion_model/cv_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include "autoware/universe_utils/math/normalization.hpp" #include "autoware/universe_utils/math/unit_conversion.hpp" #include "autoware/universe_utils/ros/msg_covariance.hpp" -#include "multi_object_tracker/tracker/motion_model/motion_model_base.hpp" -#include "multi_object_tracker/utils/utils.hpp" #include #include #include +namespace autoware::multi_object_tracker +{ // cspell: ignore CV // Constant Velocity (CV) motion model using autoware::universe_utils::xyzrpy_covariance_index::XYZRPY_COV_IDX; @@ -306,3 +308,5 @@ bool CVMotionModel::getPredictedState( return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/tracker/motion_model/motion_model_base.cpp b/perception/multi_object_tracker/lib/tracker/motion_model/motion_model_base.cpp similarity index 93% rename from perception/multi_object_tracker/src/tracker/motion_model/motion_model_base.cpp rename to perception/multi_object_tracker/lib/tracker/motion_model/motion_model_base.cpp index 4d51021de634b..ffbb452815fa7 100644 --- a/perception/multi_object_tracker/src/tracker/motion_model/motion_model_base.cpp +++ b/perception/multi_object_tracker/lib/tracker/motion_model/motion_model_base.cpp @@ -16,7 +16,10 @@ // Author: v1.0 Taekjin Lee // -#include "multi_object_tracker/tracker/motion_model/motion_model_base.hpp" +#include "autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp" + +namespace autoware::multi_object_tracker +{ MotionModel::MotionModel() : last_update_time_(rclcpp::Time(0, 0)) { @@ -90,3 +93,5 @@ bool MotionModel::getPredictedState( tmp_ekf_for_no_update.getP(P); return true; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/src/debugger/debug_object.cpp b/perception/multi_object_tracker/src/debugger/debug_object.cpp index fe6d3d5c75564..58b7dfc5cef48 100644 --- a/perception/multi_object_tracker/src/debugger/debug_object.cpp +++ b/perception/multi_object_tracker/src/debugger/debug_object.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "multi_object_tracker/debugger/debug_object.hpp" +#include "debug_object.hpp" #include "autoware_perception_msgs/msg/tracked_object.hpp" @@ -48,6 +48,9 @@ int32_t uuidToInt(const boost::uuids::uuid & uuid) } } // namespace +namespace autoware::multi_object_tracker +{ + TrackerObjectDebugger::TrackerObjectDebugger(std::string frame_id) { // set frame id @@ -79,7 +82,7 @@ void TrackerObjectDebugger::collect( const std::unordered_map & direct_assignment, const std::unordered_map & /*reverse_assignment*/) { - if (!is_initialized_) is_initialized_ = true; + is_initialized_ = true; message_time_ = message_time; @@ -391,3 +394,5 @@ void TrackerObjectDebugger::getMessage(visualization_msgs::msg::MarkerArray & ma return; } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/include/multi_object_tracker/debugger/debug_object.hpp b/perception/multi_object_tracker/src/debugger/debug_object.hpp similarity index 91% rename from perception/multi_object_tracker/include/multi_object_tracker/debugger/debug_object.hpp rename to perception/multi_object_tracker/src/debugger/debug_object.hpp index 08c9eb975d8e6..ed4c556959861 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/debugger/debug_object.hpp +++ b/perception/multi_object_tracker/src/debugger/debug_object.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MULTI_OBJECT_TRACKER__DEBUGGER__DEBUG_OBJECT_HPP_ -#define MULTI_OBJECT_TRACKER__DEBUGGER__DEBUG_OBJECT_HPP_ +#ifndef DEBUGGER__DEBUG_OBJECT_HPP_ +#define DEBUGGER__DEBUG_OBJECT_HPP_ +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" #include "autoware/universe_utils/ros/uuid_helper.hpp" -#include "multi_object_tracker/tracker/model/tracker_base.hpp" #include @@ -37,6 +37,9 @@ #include #include +namespace autoware::multi_object_tracker +{ + struct ObjectData { rclcpp::Time time; @@ -99,4 +102,6 @@ class TrackerObjectDebugger void getMessage(visualization_msgs::msg::MarkerArray & marker_array) const; }; -#endif // MULTI_OBJECT_TRACKER__DEBUGGER__DEBUG_OBJECT_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // DEBUGGER__DEBUG_OBJECT_HPP_ diff --git a/perception/multi_object_tracker/src/debugger/debugger.cpp b/perception/multi_object_tracker/src/debugger/debugger.cpp index e692ae76468e4..3e47bbe9bed8d 100644 --- a/perception/multi_object_tracker/src/debugger/debugger.cpp +++ b/perception/multi_object_tracker/src/debugger/debugger.cpp @@ -12,10 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "multi_object_tracker/debugger/debugger.hpp" +#include "debugger.hpp" #include +namespace autoware::multi_object_tracker +{ TrackerDebugger::TrackerDebugger(rclcpp::Node & node, const std::string & frame_id) : node_(node), diagnostic_updater_(&node), object_debugger_(frame_id) { @@ -207,3 +209,5 @@ void TrackerDebugger::publishObjectsMarkers() // reset object data object_debugger_.reset(); } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/include/multi_object_tracker/debugger/debugger.hpp b/perception/multi_object_tracker/src/debugger/debugger.hpp similarity index 94% rename from perception/multi_object_tracker/include/multi_object_tracker/debugger/debugger.hpp rename to perception/multi_object_tracker/src/debugger/debugger.hpp index a1c516147b220..77618e1882be7 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/debugger/debugger.hpp +++ b/perception/multi_object_tracker/src/debugger/debugger.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MULTI_OBJECT_TRACKER__DEBUGGER__DEBUGGER_HPP_ -#define MULTI_OBJECT_TRACKER__DEBUGGER__DEBUGGER_HPP_ +#ifndef DEBUGGER__DEBUGGER_HPP_ +#define DEBUGGER__DEBUGGER_HPP_ #include "autoware/universe_utils/ros/debug_publisher.hpp" #include "autoware/universe_utils/ros/published_time_publisher.hpp" -#include "multi_object_tracker/debugger/debug_object.hpp" +#include "debug_object.hpp" #include #include @@ -33,6 +33,9 @@ #include #include +namespace autoware::multi_object_tracker +{ + /** * @brief Debugger class for multi object tracker * @details This class is used to publish debug information of multi object tracker @@ -104,4 +107,6 @@ class TrackerDebugger void publishObjectsMarkers(); }; -#endif // MULTI_OBJECT_TRACKER__DEBUGGER__DEBUGGER_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // DEBUGGER__DEBUGGER_HPP_ diff --git a/perception/multi_object_tracker/src/multi_object_tracker_core.cpp b/perception/multi_object_tracker/src/multi_object_tracker_node.cpp similarity index 96% rename from perception/multi_object_tracker/src/multi_object_tracker_core.cpp rename to perception/multi_object_tracker/src/multi_object_tracker_node.cpp index 97c3d93d191b2..d3e1c9686b69b 100644 --- a/perception/multi_object_tracker/src/multi_object_tracker_core.cpp +++ b/perception/multi_object_tracker/src/multi_object_tracker_node.cpp @@ -15,13 +15,12 @@ // #define EIGEN_MPL2_ONLY -#include "multi_object_tracker/multi_object_tracker_core.hpp" +#include "multi_object_tracker_node.hpp" -#include "multi_object_tracker/utils/utils.hpp" +#include "autoware/multi_object_tracker/utils/utils.hpp" #include #include -#include #include @@ -66,7 +65,7 @@ boost::optional getTransformAnonymous( } // namespace -namespace multi_object_tracker +namespace autoware::multi_object_tracker { using Label = autoware_perception_msgs::msg::ObjectClassification; @@ -192,7 +191,7 @@ MultiObjectTracker::MultiObjectTracker(const rclcpp::NodeOptions & node_options) const auto max_rad_matrix = this->declare_parameter>("max_rad_matrix"); const auto min_iou_matrix = this->declare_parameter>("min_iou_matrix"); - data_association_ = std::make_unique( + association_ = std::make_unique( can_assign_matrix, max_dist_matrix, max_area_matrix, min_area_matrix, max_rad_matrix, min_iou_matrix); } @@ -295,9 +294,9 @@ void MultiObjectTracker::runProcess( const auto & list_tracker = processor_->getListTracker(); const auto & detected_objects = transformed_objects; // global nearest neighbor - Eigen::MatrixXd score_matrix = data_association_->calcScoreMatrix( + Eigen::MatrixXd score_matrix = association_->calcScoreMatrix( detected_objects, list_tracker); // row : tracker, col : measurement - data_association_->assign(score_matrix, direct_assignment, reverse_assignment); + association_->assign(score_matrix, direct_assignment, reverse_assignment); // Collect debug information - tracker list, existence probabilities, association results debugger_->collectObjectInfo( @@ -358,6 +357,8 @@ void MultiObjectTracker::publish(const rclcpp::Time & time) const debugger_->publishObjectsMarkers(); } -} // namespace multi_object_tracker +} // namespace autoware::multi_object_tracker + +#include -RCLCPP_COMPONENTS_REGISTER_NODE(multi_object_tracker::MultiObjectTracker) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::multi_object_tracker::MultiObjectTracker) diff --git a/perception/multi_object_tracker/include/multi_object_tracker/multi_object_tracker_core.hpp b/perception/multi_object_tracker/src/multi_object_tracker_node.hpp similarity index 82% rename from perception/multi_object_tracker/include/multi_object_tracker/multi_object_tracker_core.hpp rename to perception/multi_object_tracker/src/multi_object_tracker_node.hpp index aff3cbd00eabe..db5eaaa88ca8c 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/multi_object_tracker_core.hpp +++ b/perception/multi_object_tracker/src/multi_object_tracker_node.hpp @@ -16,14 +16,14 @@ // Author: v1.0 Yukihiro Saito /// -#ifndef MULTI_OBJECT_TRACKER__MULTI_OBJECT_TRACKER_CORE_HPP_ -#define MULTI_OBJECT_TRACKER__MULTI_OBJECT_TRACKER_CORE_HPP_ +#ifndef MULTI_OBJECT_TRACKER_NODE_HPP_ +#define MULTI_OBJECT_TRACKER_NODE_HPP_ -#include "multi_object_tracker/data_association/data_association.hpp" -#include "multi_object_tracker/debugger/debugger.hpp" -#include "multi_object_tracker/processor/input_manager.hpp" -#include "multi_object_tracker/processor/processor.hpp" -#include "multi_object_tracker/tracker/model/tracker_base.hpp" +#include "autoware/multi_object_tracker/association/association.hpp" +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" +#include "debugger/debugger.hpp" +#include "processor/input_manager.hpp" +#include "processor/processor.hpp" #include @@ -52,7 +52,7 @@ #include #include -namespace multi_object_tracker +namespace autoware::multi_object_tracker { using DetectedObject = autoware_perception_msgs::msg::DetectedObject; @@ -82,7 +82,7 @@ class MultiObjectTracker : public rclcpp::Node // internal states std::string world_frame_id_; // tracking frame - std::unique_ptr data_association_; + std::unique_ptr association_; std::unique_ptr processor_; // input manager @@ -103,6 +103,6 @@ class MultiObjectTracker : public rclcpp::Node inline bool shouldTrackerPublish(const std::shared_ptr tracker) const; }; -} // namespace multi_object_tracker +} // namespace autoware::multi_object_tracker -#endif // MULTI_OBJECT_TRACKER__MULTI_OBJECT_TRACKER_CORE_HPP_ +#endif // MULTI_OBJECT_TRACKER_NODE_HPP_ diff --git a/perception/multi_object_tracker/src/processor/input_manager.cpp b/perception/multi_object_tracker/src/processor/input_manager.cpp index bee76e6c05940..5172cc5062450 100644 --- a/perception/multi_object_tracker/src/processor/input_manager.cpp +++ b/perception/multi_object_tracker/src/processor/input_manager.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "multi_object_tracker/processor/input_manager.hpp" +#include "input_manager.hpp" #include -namespace multi_object_tracker +namespace autoware::multi_object_tracker { /////////////////////////// /////// InputStream /////// @@ -62,7 +62,7 @@ void InputStream::onMessage( { const DetectedObjects objects = *msg; objects_que_.push_back(objects); - if (objects_que_.size() > que_size_) { + while (objects_que_.size() > que_size_) { objects_que_.pop_front(); } @@ -160,21 +160,27 @@ void InputStream::getObjectsOlderThan( return; } - for (const auto & object : objects_que_) { - const rclcpp::Time object_time = rclcpp::Time(object.header.stamp); - - // remove objects older than the specified duration + for (const auto & objects : objects_que_) { + const rclcpp::Time object_time = rclcpp::Time(objects.header.stamp); + // ignore objects older than the specified duration if (object_time < object_oldest_time) { - objects_que_.pop_front(); continue; } // Add the object if the object is older than the specified latest time - if (object_latest_time >= object_time) { - std::pair object_pair(index_, object); - objects_list.push_back(object_pair); - // remove the object from the queue + if (object_time <= object_latest_time) { + std::pair objects_pair(index_, objects); + objects_list.push_back(objects_pair); + } + } + + // remove objects older than 'object_latest_time' + while (!objects_que_.empty()) { + const rclcpp::Time object_time = rclcpp::Time(objects_que_.front().header.stamp); + if (object_time < object_latest_time) { objects_que_.pop_front(); + } else { + break; } } } @@ -368,4 +374,4 @@ bool InputManager::getObjects(const rclcpp::Time & now, ObjectsList & objects_li return is_any_object; } -} // namespace multi_object_tracker +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/include/multi_object_tracker/processor/input_manager.hpp b/perception/multi_object_tracker/src/processor/input_manager.hpp similarity index 95% rename from perception/multi_object_tracker/include/multi_object_tracker/processor/input_manager.hpp rename to perception/multi_object_tracker/src/processor/input_manager.hpp index 29b0c18ae766f..432a4105d815f 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/processor/input_manager.hpp +++ b/perception/multi_object_tracker/src/processor/input_manager.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MULTI_OBJECT_TRACKER__PROCESSOR__INPUT_MANAGER_HPP_ -#define MULTI_OBJECT_TRACKER__PROCESSOR__INPUT_MANAGER_HPP_ +#ifndef PROCESSOR__INPUT_MANAGER_HPP_ +#define PROCESSOR__INPUT_MANAGER_HPP_ #include "rclcpp/rclcpp.hpp" @@ -26,7 +26,7 @@ #include #include -namespace multi_object_tracker +namespace autoware::multi_object_tracker { using DetectedObjects = autoware_perception_msgs::msg::DetectedObjects; using ObjectsList = std::vector>; @@ -155,6 +155,6 @@ class InputManager void optimizeTimings(); }; -} // namespace multi_object_tracker +} // namespace autoware::multi_object_tracker -#endif // MULTI_OBJECT_TRACKER__PROCESSOR__INPUT_MANAGER_HPP_ +#endif // PROCESSOR__INPUT_MANAGER_HPP_ diff --git a/perception/multi_object_tracker/src/processor/processor.cpp b/perception/multi_object_tracker/src/processor/processor.cpp index 50d1a021c5838..17871c89b5258 100644 --- a/perception/multi_object_tracker/src/processor/processor.cpp +++ b/perception/multi_object_tracker/src/processor/processor.cpp @@ -12,15 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "multi_object_tracker/processor/processor.hpp" +#include "processor.hpp" -#include "multi_object_tracker/tracker/tracker.hpp" +#include "autoware/multi_object_tracker/tracker/tracker.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include "autoware_perception_msgs/msg/tracked_objects.hpp" #include +namespace autoware::multi_object_tracker +{ + using Label = autoware_perception_msgs::msg::ObjectClassification; TrackerProcessor::TrackerProcessor( @@ -248,3 +251,5 @@ void TrackerProcessor::getTentativeObjects( } } } + +} // namespace autoware::multi_object_tracker diff --git a/perception/multi_object_tracker/include/multi_object_tracker/processor/processor.hpp b/perception/multi_object_tracker/src/processor/processor.hpp similarity index 91% rename from perception/multi_object_tracker/include/multi_object_tracker/processor/processor.hpp rename to perception/multi_object_tracker/src/processor/processor.hpp index 6d0dbcd036e53..5eac113b3974c 100644 --- a/perception/multi_object_tracker/include/multi_object_tracker/processor/processor.hpp +++ b/perception/multi_object_tracker/src/processor/processor.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef MULTI_OBJECT_TRACKER__PROCESSOR__PROCESSOR_HPP_ -#define MULTI_OBJECT_TRACKER__PROCESSOR__PROCESSOR_HPP_ +#ifndef PROCESSOR__PROCESSOR_HPP_ +#define PROCESSOR__PROCESSOR_HPP_ -#include "multi_object_tracker/tracker/model/tracker_base.hpp" +#include "autoware/multi_object_tracker/tracker/model/tracker_base.hpp" #include @@ -29,6 +29,8 @@ #include #include +namespace autoware::multi_object_tracker +{ class TrackerProcessor { public: @@ -78,4 +80,6 @@ class TrackerProcessor const geometry_msgs::msg::Transform & self_transform, const uint & channel_index) const; }; -#endif // MULTI_OBJECT_TRACKER__PROCESSOR__PROCESSOR_HPP_ +} // namespace autoware::multi_object_tracker + +#endif // PROCESSOR__PROCESSOR_HPP_ From 54cff774c55db008fe1f71f80223aee6c3e86011 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 8 Jul 2024 16:34:56 +0900 Subject: [PATCH 103/306] refactor(detected_object_validation)!: fix namespace and directory structure (#7866) * refactor: update include paths for detected object filters Signed-off-by: Taekjin LEE * refactor: set proper namespace Signed-off-by: Taekjin LEE * refactor: move utils to be shared Signed-off-by: Taekjin LEE * refactor: remove unnecessary dependencies in detected_object_validation/package.xml Signed-off-by: Taekjin LEE * chore: Override functions in pcl_validator.hpp Signed-off-by: Taekjin LEE * style(pre-commit): autofix * refactor: pcl_validator to obstacle_pointcloud_validator, ogm_validator to occupancy_grid_map_validator Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../detected_object_validation/CMakeLists.txt | 28 +++++------- .../utils/utils.hpp | 10 +++-- .../{src => lib/utils}/utils.cpp | 6 ++- .../detected_object_validation/package.xml | 3 -- .../lanelet_filter.cpp} | 20 +++++---- .../lanelet_filter/lanelet_filter.hpp} | 27 ++++++----- .../obstacle_pointcloud}/debugger.hpp | 16 ++++--- .../obstacle_pointcloud_validator.cpp} | 14 +++--- .../obstacle_pointcloud_validator.hpp} | 45 ++++++++++++------- .../occupancy_grid_map_validator.cpp} | 21 +++++---- .../occupancy_grid_map_validator.hpp} | 19 +++++--- .../position_filter.cpp} | 12 +++-- .../position_filter/position_filter.hpp} | 23 +++++----- .../test_object_position_filter.cpp | 4 +- .../test/test_utils.cpp | 13 +++--- .../src/low_intensity_cluster_filter_node.hpp | 4 +- 16 files changed, 153 insertions(+), 112 deletions(-) rename perception/detected_object_validation/include/{ => autoware}/detected_object_validation/utils/utils.hpp (82%) rename perception/detected_object_validation/{src => lib/utils}/utils.cpp (87%) rename perception/detected_object_validation/src/{object_lanelet_filter.cpp => lanelet_filter/lanelet_filter.cpp} (95%) rename perception/detected_object_validation/{include/detected_object_validation/detected_object_filter/object_lanelet_filter.hpp => src/lanelet_filter/lanelet_filter.hpp} (81%) rename perception/detected_object_validation/{include/detected_object_validation/obstacle_pointcloud_based_validator => src/obstacle_pointcloud}/debugger.hpp (89%) rename perception/detected_object_validation/src/{obstacle_pointcloud_based_validator.cpp => obstacle_pointcloud/obstacle_pointcloud_validator.cpp} (97%) rename perception/detected_object_validation/{include/detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp => src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp} (79%) rename perception/detected_object_validation/src/{occupancy_grid_based_validator.cpp => occupancy_grid_map/occupancy_grid_map_validator.cpp} (92%) rename perception/detected_object_validation/{include/detected_object_validation/occupancy_grid_based_validator/occupancy_grid_based_validator.hpp => src/occupancy_grid_map/occupancy_grid_map_validator.hpp} (83%) rename perception/detected_object_validation/src/{object_position_filter.cpp => position_filter/position_filter.cpp} (91%) rename perception/detected_object_validation/{include/detected_object_validation/detected_object_filter/object_position_filter.hpp => src/position_filter/position_filter.hpp} (71%) diff --git a/perception/detected_object_validation/CMakeLists.txt b/perception/detected_object_validation/CMakeLists.txt index c416209d7d55d..6d93e7b426ad2 100644 --- a/perception/detected_object_validation/CMakeLists.txt +++ b/perception/detected_object_validation/CMakeLists.txt @@ -28,12 +28,8 @@ include_directories( ) # Generate occupancy grid based validator exe file -set(OCCUPANCY_GRID_BASED_VALIDATOR_SRC - src/occupancy_grid_based_validator.cpp -) - ament_auto_add_library(occupancy_grid_based_validator SHARED - ${OCCUPANCY_GRID_BASED_VALIDATOR_SRC} + src/occupancy_grid_map/occupancy_grid_map_validator.cpp ) target_link_libraries(occupancy_grid_based_validator @@ -42,12 +38,8 @@ target_link_libraries(occupancy_grid_based_validator ) # Generate obstacle pointcloud based validator exe file -set(OBSTACLE_POINTCLOUD_BASED_VALIDATOR_SRC - src/obstacle_pointcloud_based_validator.cpp -) - ament_auto_add_library(obstacle_pointcloud_based_validator SHARED - ${OBSTACLE_POINTCLOUD_BASED_VALIDATOR_SRC} + src/obstacle_pointcloud/obstacle_pointcloud_validator.cpp ) target_link_libraries(obstacle_pointcloud_based_validator @@ -56,32 +48,32 @@ target_link_libraries(obstacle_pointcloud_based_validator ) ament_auto_add_library(object_lanelet_filter SHARED - src/object_lanelet_filter.cpp - src/utils.cpp + src/lanelet_filter/lanelet_filter.cpp + lib/utils/utils.cpp ) ament_auto_add_library(object_position_filter SHARED - src/object_position_filter.cpp - src/utils.cpp + src/position_filter/position_filter.cpp + lib/utils/utils.cpp ) rclcpp_components_register_node(obstacle_pointcloud_based_validator - PLUGIN "obstacle_pointcloud_based_validator::ObstaclePointCloudBasedValidator" + PLUGIN "autoware::detected_object_validation::obstacle_pointcloud::ObstaclePointCloudBasedValidator" EXECUTABLE obstacle_pointcloud_based_validator_node ) rclcpp_components_register_node(object_lanelet_filter - PLUGIN "object_lanelet_filter::ObjectLaneletFilterNode" + PLUGIN "autoware::detected_object_validation::lanelet_filter::ObjectLaneletFilterNode" EXECUTABLE object_lanelet_filter_node ) rclcpp_components_register_node(object_position_filter - PLUGIN "object_position_filter::ObjectPositionFilterNode" + PLUGIN "autoware::detected_object_validation::position_filter::ObjectPositionFilterNode" EXECUTABLE object_position_filter_node ) rclcpp_components_register_node(occupancy_grid_based_validator - PLUGIN "occupancy_grid_based_validator::OccupancyGridBasedValidator" + PLUGIN "autoware::detected_object_validation::occupancy_grid_map::OccupancyGridBasedValidator" EXECUTABLE occupancy_grid_based_validator_node ) diff --git a/perception/detected_object_validation/include/detected_object_validation/utils/utils.hpp b/perception/detected_object_validation/include/autoware/detected_object_validation/utils/utils.hpp similarity index 82% rename from perception/detected_object_validation/include/detected_object_validation/utils/utils.hpp rename to perception/detected_object_validation/include/autoware/detected_object_validation/utils/utils.hpp index c55e992213eb5..3ec119d2a48c5 100644 --- a/perception/detected_object_validation/include/detected_object_validation/utils/utils.hpp +++ b/perception/detected_object_validation/include/autoware/detected_object_validation/utils/utils.hpp @@ -12,12 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DETECTED_OBJECT_VALIDATION__UTILS__UTILS_HPP_ -#define DETECTED_OBJECT_VALIDATION__UTILS__UTILS_HPP_ +#ifndef AUTOWARE__DETECTED_OBJECT_VALIDATION__UTILS__UTILS_HPP_ +#define AUTOWARE__DETECTED_OBJECT_VALIDATION__UTILS__UTILS_HPP_ #include #include + +namespace autoware::detected_object_validation +{ namespace utils { struct FilterTargetLabel @@ -48,5 +51,6 @@ inline bool hasBoundingBox(const autoware_perception_msgs::msg::DetectedObject & } } // namespace utils +} // namespace autoware::detected_object_validation -#endif // DETECTED_OBJECT_VALIDATION__UTILS__UTILS_HPP_ +#endif // AUTOWARE__DETECTED_OBJECT_VALIDATION__UTILS__UTILS_HPP_ diff --git a/perception/detected_object_validation/src/utils.cpp b/perception/detected_object_validation/lib/utils/utils.cpp similarity index 87% rename from perception/detected_object_validation/src/utils.cpp rename to perception/detected_object_validation/lib/utils/utils.cpp index f6e2157cb885f..327f65a0c833e 100644 --- a/perception/detected_object_validation/src/utils.cpp +++ b/perception/detected_object_validation/lib/utils/utils.cpp @@ -12,10 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "detected_object_validation/utils/utils.hpp" +#include "autoware/detected_object_validation/utils/utils.hpp" #include +namespace autoware::detected_object_validation +{ namespace utils { using Label = autoware_perception_msgs::msg::ObjectClassification; @@ -27,4 +29,6 @@ bool FilterTargetLabel::isTarget(const uint8_t label) const (label == Label::TRAILER && TRAILER) || (label == Label::MOTORCYCLE && MOTORCYCLE) || (label == Label::BICYCLE && BICYCLE) || (label == Label::PEDESTRIAN && PEDESTRIAN); } + } // namespace utils +} // namespace autoware::detected_object_validation diff --git a/perception/detected_object_validation/package.xml b/perception/detected_object_validation/package.xml index d8eb1257ba451..09440c9f6358d 100644 --- a/perception/detected_object_validation/package.xml +++ b/perception/detected_object_validation/package.xml @@ -22,17 +22,14 @@ autoware_perception_msgs autoware_test_utils autoware_universe_utils - geometry_msgs message_filters nav_msgs object_recognition_utils pcl_conversions rclcpp rclcpp_components - tf2 tf2_geometry_msgs tf2_ros - tier4_perception_msgs ament_lint_auto autoware_lint_common diff --git a/perception/detected_object_validation/src/object_lanelet_filter.cpp b/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.cpp similarity index 95% rename from perception/detected_object_validation/src/object_lanelet_filter.cpp rename to perception/detected_object_validation/src/lanelet_filter/lanelet_filter.cpp index d1ba34f4a61b2..09440fedc1764 100644 --- a/perception/detected_object_validation/src/object_lanelet_filter.cpp +++ b/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "detected_object_validation/detected_object_filter/object_lanelet_filter.hpp" +#include "lanelet_filter.hpp" -#include -#include -#include -#include +#include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware_lanelet2_extension/utility/message_conversion.hpp" +#include "autoware_lanelet2_extension/utility/query.hpp" +#include "object_recognition_utils/object_recognition_utils.hpp" #include #include @@ -25,7 +25,9 @@ #include -namespace object_lanelet_filter +namespace autoware::detected_object_validation +{ +namespace lanelet_filter { ObjectLaneletFilterNode::ObjectLaneletFilterNode(const rclcpp::NodeOptions & node_options) : Node("object_lanelet_filter_node", node_options), @@ -309,7 +311,9 @@ bool ObjectLaneletFilterNode::isSameDirectionWithLanelets( return false; } -} // namespace object_lanelet_filter +} // namespace lanelet_filter +} // namespace autoware::detected_object_validation #include -RCLCPP_COMPONENTS_REGISTER_NODE(object_lanelet_filter::ObjectLaneletFilterNode) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::detected_object_validation::lanelet_filter::ObjectLaneletFilterNode) diff --git a/perception/detected_object_validation/include/detected_object_validation/detected_object_filter/object_lanelet_filter.hpp b/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.hpp similarity index 81% rename from perception/detected_object_validation/include/detected_object_validation/detected_object_filter/object_lanelet_filter.hpp rename to perception/detected_object_validation/src/lanelet_filter/lanelet_filter.hpp index 3ffd8d18c9a67..25d78a160c246 100644 --- a/perception/detected_object_validation/include/detected_object_validation/detected_object_filter/object_lanelet_filter.hpp +++ b/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.hpp @@ -12,19 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DETECTED_OBJECT_VALIDATION__DETECTED_OBJECT_FILTER__OBJECT_LANELET_FILTER_HPP_ -#define DETECTED_OBJECT_VALIDATION__DETECTED_OBJECT_FILTER__OBJECT_LANELET_FILTER_HPP_ +#ifndef LANELET_FILTER__LANELET_FILTER_HPP_ +#define LANELET_FILTER__LANELET_FILTER_HPP_ -#include "detected_object_validation/utils/utils.hpp" +#include "autoware/detected_object_validation/utils/utils.hpp" +#include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/ros/debug_publisher.hpp" +#include "autoware/universe_utils/ros/published_time_publisher.hpp" +#include "autoware_lanelet2_extension/utility/utilities.hpp" -#include -#include -#include -#include #include -#include -#include +#include "autoware_map_msgs/msg/lanelet_map_bin.hpp" +#include "autoware_perception_msgs/msg/detected_objects.hpp" #include #include @@ -33,7 +33,9 @@ #include #include -namespace object_lanelet_filter +namespace autoware::detected_object_validation +{ +namespace lanelet_filter { using autoware::universe_utils::LinearRing2d; using autoware::universe_utils::MultiPoint2d; @@ -92,6 +94,7 @@ class ObjectLaneletFilterNode : public rclcpp::Node std::unique_ptr published_time_publisher_; }; -} // namespace object_lanelet_filter +} // namespace lanelet_filter +} // namespace autoware::detected_object_validation -#endif // DETECTED_OBJECT_VALIDATION__DETECTED_OBJECT_FILTER__OBJECT_LANELET_FILTER_HPP_ +#endif // LANELET_FILTER__LANELET_FILTER_HPP_ diff --git a/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/debugger.hpp b/perception/detected_object_validation/src/obstacle_pointcloud/debugger.hpp similarity index 89% rename from perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/debugger.hpp rename to perception/detected_object_validation/src/obstacle_pointcloud/debugger.hpp index d338580d95418..5886474d51b34 100644 --- a/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/debugger.hpp +++ b/perception/detected_object_validation/src/obstacle_pointcloud/debugger.hpp @@ -12,19 +12,21 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DETECTED_OBJECT_VALIDATION__OBSTACLE_POINTCLOUD_BASED_VALIDATOR__DEBUGGER_HPP_ -#define DETECTED_OBJECT_VALIDATION__OBSTACLE_POINTCLOUD_BASED_VALIDATOR__DEBUGGER_HPP_ +#ifndef OBSTACLE_POINTCLOUD__DEBUGGER_HPP_ +#define OBSTACLE_POINTCLOUD__DEBUGGER_HPP_ #include -#include +#include "autoware_perception_msgs/msg/detected_objects.hpp" #include #include #include #include -namespace obstacle_pointcloud_based_validator +namespace autoware::detected_object_validation +{ +namespace obstacle_pointcloud { class Debugger { @@ -106,6 +108,8 @@ class Debugger return pointcloud_xyz; } }; -} // namespace obstacle_pointcloud_based_validator -#endif // DETECTED_OBJECT_VALIDATION__OBSTACLE_POINTCLOUD_BASED_VALIDATOR__DEBUGGER_HPP_ +} // namespace obstacle_pointcloud +} // namespace autoware::detected_object_validation + +#endif // OBSTACLE_POINTCLOUD__DEBUGGER_HPP_ diff --git a/perception/detected_object_validation/src/obstacle_pointcloud_based_validator.cpp b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.cpp similarity index 97% rename from perception/detected_object_validation/src/obstacle_pointcloud_based_validator.cpp rename to perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.cpp index fbb3f863be7c4..3fe527935c485 100644 --- a/perception/detected_object_validation/src/obstacle_pointcloud_based_validator.cpp +++ b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.cpp @@ -12,7 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp" +#define EIGEN_MPL2_ONLY + +#include "obstacle_pointcloud_validator.hpp" #include #include @@ -25,11 +27,12 @@ #include #endif -#define EIGEN_MPL2_ONLY #include #include -namespace obstacle_pointcloud_based_validator +namespace autoware::detected_object_validation +{ +namespace obstacle_pointcloud { namespace bg = boost::geometry; using Shape = autoware_perception_msgs::msg::Shape; @@ -369,8 +372,9 @@ void ObstaclePointCloudBasedValidator::onObjectsAndObstaclePointCloud( "debug/pipeline_latency_ms", pipeline_latency); } -} // namespace obstacle_pointcloud_based_validator +} // namespace obstacle_pointcloud +} // namespace autoware::detected_object_validation #include RCLCPP_COMPONENTS_REGISTER_NODE( - obstacle_pointcloud_based_validator::ObstaclePointCloudBasedValidator) + autoware::detected_object_validation::obstacle_pointcloud::ObstaclePointCloudBasedValidator) diff --git a/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp similarity index 79% rename from perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp rename to perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp index a16bb63fd0c87..19b42ecf9055b 100644 --- a/perception/detected_object_validation/include/detected_object_validation/obstacle_pointcloud_based_validator/obstacle_pointcloud_based_validator.hpp +++ b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp @@ -13,17 +13,17 @@ // limitations under the License. // NOLINTNEXTLINE(whitespace/line_length) -#ifndef DETECTED_OBJECT_VALIDATION__OBSTACLE_POINTCLOUD_BASED_VALIDATOR__OBSTACLE_POINTCLOUD_BASED_VALIDATOR_HPP_ +#ifndef OBSTACLE_POINTCLOUD__OBSTACLE_POINTCLOUD_VALIDATOR_HPP_ // NOLINTNEXTLINE(whitespace/line_length) -#define DETECTED_OBJECT_VALIDATION__OBSTACLE_POINTCLOUD_BASED_VALIDATOR__OBSTACLE_POINTCLOUD_BASED_VALIDATOR_HPP_ +#define OBSTACLE_POINTCLOUD__OBSTACLE_POINTCLOUD_VALIDATOR_HPP_ -#include "detected_object_validation/obstacle_pointcloud_based_validator/debugger.hpp" +#include "autoware/universe_utils/ros/debug_publisher.hpp" +#include "autoware/universe_utils/ros/published_time_publisher.hpp" +#include "debugger.hpp" -#include -#include #include -#include +#include "autoware_perception_msgs/msg/detected_objects.hpp" #include #include @@ -42,7 +42,10 @@ #include #include #include -namespace obstacle_pointcloud_based_validator + +namespace autoware::detected_object_validation +{ +namespace obstacle_pointcloud { struct PointsNumThresholdParam @@ -91,14 +94,17 @@ class Validator2D : public Validator pcl::PointCloud::Ptr convertToXYZ( const pcl::PointCloud::Ptr & pointcloud_xy); - inline pcl::PointCloud::Ptr getDebugNeighborPointCloud() + inline pcl::PointCloud::Ptr getDebugNeighborPointCloud() override { return convertToXYZ(neighbor_pointcloud_); } - bool setKdtreeInputCloud(const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_cloud); - bool validate_object(const autoware_perception_msgs::msg::DetectedObject & transformed_object); - std::optional getMaxRadius(const autoware_perception_msgs::msg::DetectedObject & object); + bool setKdtreeInputCloud( + const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_cloud) override; + bool validate_object( + const autoware_perception_msgs::msg::DetectedObject & transformed_object) override; + std::optional getMaxRadius( + const autoware_perception_msgs::msg::DetectedObject & object) override; std::optional getPointCloudWithinObject( const autoware_perception_msgs::msg::DetectedObject & object, const pcl::PointCloud::Ptr neighbor_pointcloud); @@ -112,13 +118,16 @@ class Validator3D : public Validator public: explicit Validator3D(PointsNumThresholdParam & points_num_threshold_param); - inline pcl::PointCloud::Ptr getDebugNeighborPointCloud() + inline pcl::PointCloud::Ptr getDebugNeighborPointCloud() override { return neighbor_pointcloud_; } - bool setKdtreeInputCloud(const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_cloud); - bool validate_object(const autoware_perception_msgs::msg::DetectedObject & transformed_object); - std::optional getMaxRadius(const autoware_perception_msgs::msg::DetectedObject & object); + bool setKdtreeInputCloud( + const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_cloud) override; + bool validate_object( + const autoware_perception_msgs::msg::DetectedObject & transformed_object) override; + std::optional getMaxRadius( + const autoware_perception_msgs::msg::DetectedObject & object) override; std::optional getPointCloudWithinObject( const autoware_perception_msgs::msg::DetectedObject & object, const pcl::PointCloud::Ptr neighbor_pointcloud); @@ -154,7 +163,9 @@ class ObstaclePointCloudBasedValidator : public rclcpp::Node const autoware_perception_msgs::msg::DetectedObjects::ConstSharedPtr & input_objects, const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_obstacle_pointcloud); }; -} // namespace obstacle_pointcloud_based_validator + +} // namespace obstacle_pointcloud +} // namespace autoware::detected_object_validation // NOLINTNEXTLINE(whitespace/line_length) -#endif // DETECTED_OBJECT_VALIDATION__OBSTACLE_POINTCLOUD_BASED_VALIDATOR__OBSTACLE_POINTCLOUD_BASED_VALIDATOR_HPP_ +#endif // OBSTACLE_POINTCLOUD__OBSTACLE_POINTCLOUD_VALIDATOR_HPP_ diff --git a/perception/detected_object_validation/src/occupancy_grid_based_validator.cpp b/perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.cpp similarity index 92% rename from perception/detected_object_validation/src/occupancy_grid_based_validator.cpp rename to perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.cpp index b8682a6e56b3b..ce900f30f4255 100644 --- a/perception/detected_object_validation/src/occupancy_grid_based_validator.cpp +++ b/perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.cpp @@ -12,11 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "detected_object_validation/occupancy_grid_based_validator/occupancy_grid_based_validator.hpp" +#define EIGEN_MPL2_ONLY + +#include "occupancy_grid_map_validator.hpp" -#include -#include -#include +#include "autoware/universe_utils/geometry/boost_polygon_utils.hpp" +#include "object_recognition_utils/object_classification.hpp" +#include "object_recognition_utils/object_recognition_utils.hpp" #include @@ -26,11 +28,12 @@ #include #endif -#define EIGEN_MPL2_ONLY #include #include -namespace occupancy_grid_based_validator +namespace autoware::detected_object_validation +{ +namespace occupancy_grid_map { using Shape = autoware_perception_msgs::msg::Shape; using Polygon2d = autoware::universe_utils::Polygon2d; @@ -173,7 +176,9 @@ void OccupancyGridBasedValidator::showDebugImage( cv::waitKey(2); } -} // namespace occupancy_grid_based_validator +} // namespace occupancy_grid_map +} // namespace autoware::detected_object_validation #include -RCLCPP_COMPONENTS_REGISTER_NODE(occupancy_grid_based_validator::OccupancyGridBasedValidator) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::detected_object_validation::occupancy_grid_map::OccupancyGridBasedValidator) diff --git a/perception/detected_object_validation/include/detected_object_validation/occupancy_grid_based_validator/occupancy_grid_based_validator.hpp b/perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.hpp similarity index 83% rename from perception/detected_object_validation/include/detected_object_validation/occupancy_grid_based_validator/occupancy_grid_based_validator.hpp rename to perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.hpp index beb8faf5db1a3..52b6f79e5e20a 100644 --- a/perception/detected_object_validation/include/detected_object_validation/occupancy_grid_based_validator/occupancy_grid_based_validator.hpp +++ b/perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.hpp @@ -12,16 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DETECTED_OBJECT_VALIDATION__OCCUPANCY_GRID_BASED_VALIDATOR__OCCUPANCY_GRID_BASED_VALIDATOR_HPP_ -#define DETECTED_OBJECT_VALIDATION__OCCUPANCY_GRID_BASED_VALIDATOR__OCCUPANCY_GRID_BASED_VALIDATOR_HPP_ +#ifndef OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_VALIDATOR_HPP_ +#define OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_VALIDATOR_HPP_ + +#include "autoware/universe_utils/ros/published_time_publisher.hpp" -#include #include #include #include #include -#include +#include "autoware_perception_msgs/msg/detected_objects.hpp" #include #include @@ -30,7 +31,9 @@ #include #include -namespace occupancy_grid_based_validator +namespace autoware::detected_object_validation +{ +namespace occupancy_grid_map { class OccupancyGridBasedValidator : public rclcpp::Node { @@ -68,6 +71,8 @@ class OccupancyGridBasedValidator : public rclcpp::Node const nav_msgs::msg::OccupancyGrid & ros_occ_grid, const autoware_perception_msgs::msg::DetectedObjects & objects, const cv::Mat & occ_grid); }; -} // namespace occupancy_grid_based_validator -#endif // DETECTED_OBJECT_VALIDATION__OCCUPANCY_GRID_BASED_VALIDATOR__OCCUPANCY_GRID_BASED_VALIDATOR_HPP_ +} // namespace occupancy_grid_map +} // namespace autoware::detected_object_validation + +#endif // OCCUPANCY_GRID_MAP__OCCUPANCY_GRID_MAP_VALIDATOR_HPP_ diff --git a/perception/detected_object_validation/src/object_position_filter.cpp b/perception/detected_object_validation/src/position_filter/position_filter.cpp similarity index 91% rename from perception/detected_object_validation/src/object_position_filter.cpp rename to perception/detected_object_validation/src/position_filter/position_filter.cpp index dccff8a6ccc67..ac0bab404c476 100644 --- a/perception/detected_object_validation/src/object_position_filter.cpp +++ b/perception/detected_object_validation/src/position_filter/position_filter.cpp @@ -12,9 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "detected_object_validation/detected_object_filter/object_position_filter.hpp" +#include "position_filter.hpp" -namespace object_position_filter +namespace autoware::detected_object_validation +{ +namespace position_filter { ObjectPositionFilterNode::ObjectPositionFilterNode(const rclcpp::NodeOptions & node_options) : Node("object_position_filter_node", node_options), @@ -78,7 +80,9 @@ bool ObjectPositionFilterNode::isObjectInBounds( position.y > lower_bound_y_ && position.y < upper_bound_y_; } -} // namespace object_position_filter +} // namespace position_filter +} // namespace autoware::detected_object_validation #include -RCLCPP_COMPONENTS_REGISTER_NODE(object_position_filter::ObjectPositionFilterNode) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::detected_object_validation::position_filter::ObjectPositionFilterNode) diff --git a/perception/detected_object_validation/include/detected_object_validation/detected_object_filter/object_position_filter.hpp b/perception/detected_object_validation/src/position_filter/position_filter.hpp similarity index 71% rename from perception/detected_object_validation/include/detected_object_validation/detected_object_filter/object_position_filter.hpp rename to perception/detected_object_validation/src/position_filter/position_filter.hpp index ea70d62fd952d..30a5d7fc9dfb1 100644 --- a/perception/detected_object_validation/include/detected_object_validation/detected_object_filter/object_position_filter.hpp +++ b/perception/detected_object_validation/src/position_filter/position_filter.hpp @@ -12,17 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DETECTED_OBJECT_VALIDATION__DETECTED_OBJECT_FILTER__OBJECT_POSITION_FILTER_HPP_ -#define DETECTED_OBJECT_VALIDATION__DETECTED_OBJECT_FILTER__OBJECT_POSITION_FILTER_HPP_ +#ifndef POSITION_FILTER__POSITION_FILTER_HPP_ +#define POSITION_FILTER__POSITION_FILTER_HPP_ -#include "detected_object_validation/utils/utils.hpp" +#include "autoware/detected_object_validation/utils/utils.hpp" +#include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/ros/published_time_publisher.hpp" -#include -#include #include -#include -#include +#include "autoware_map_msgs/msg/lanelet_map_bin.hpp" +#include "autoware_perception_msgs/msg/detected_objects.hpp" #include #include @@ -30,7 +30,9 @@ #include #include -namespace object_position_filter +namespace autoware::detected_object_validation +{ +namespace position_filter { class ObjectPositionFilterNode : public rclcpp::Node @@ -57,6 +59,7 @@ class ObjectPositionFilterNode : public rclcpp::Node std::unique_ptr published_time_publisher_; }; -} // namespace object_position_filter +} // namespace position_filter +} // namespace autoware::detected_object_validation -#endif // DETECTED_OBJECT_VALIDATION__DETECTED_OBJECT_FILTER__OBJECT_POSITION_FILTER_HPP_ +#endif // POSITION_FILTER__POSITION_FILTER_HPP_ diff --git a/perception/detected_object_validation/test/object_position_filter/test_object_position_filter.cpp b/perception/detected_object_validation/test/object_position_filter/test_object_position_filter.cpp index 03cebf91418ce..5bd174d5a9e17 100644 --- a/perception/detected_object_validation/test/object_position_filter/test_object_position_filter.cpp +++ b/perception/detected_object_validation/test/object_position_filter/test_object_position_filter.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "detected_object_validation/detected_object_filter/object_position_filter.hpp" +#include "../../src/position_filter/position_filter.hpp" #include #include @@ -21,10 +21,10 @@ #include +using autoware::detected_object_validation::position_filter::ObjectPositionFilterNode; using autoware_perception_msgs::msg::DetectedObject; using autoware_perception_msgs::msg::DetectedObjects; using autoware_perception_msgs::msg::ObjectClassification; -using object_position_filter::ObjectPositionFilterNode; std::shared_ptr generateTestManager() { diff --git a/perception/detected_object_validation/test/test_utils.cpp b/perception/detected_object_validation/test/test_utils.cpp index f7077dadb1ef2..7865f928f23a8 100644 --- a/perception/detected_object_validation/test/test_utils.cpp +++ b/perception/detected_object_validation/test/test_utils.cpp @@ -12,17 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "detected_object_validation/utils/utils.hpp" +#include "autoware/detected_object_validation/utils/utils.hpp" -#include +#include "autoware_perception_msgs/msg/object_classification.hpp" #include +using autoware::detected_object_validation::utils::FilterTargetLabel; using AutowareLabel = autoware_perception_msgs::msg::ObjectClassification; -utils::FilterTargetLabel createFilterTargetAll() +FilterTargetLabel createFilterTargetAll() { - utils::FilterTargetLabel filter; + FilterTargetLabel filter; filter.UNKNOWN = true; filter.CAR = true; filter.TRUCK = true; @@ -34,9 +35,9 @@ utils::FilterTargetLabel createFilterTargetAll() return filter; } -utils::FilterTargetLabel createFilterTargetVehicle() +FilterTargetLabel createFilterTargetVehicle() { - utils::FilterTargetLabel filter; + FilterTargetLabel filter; filter.UNKNOWN = false; filter.CAR = true; filter.TRUCK = true; diff --git a/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp b/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp index 8e21306218ab2..61e23860cd195 100644 --- a/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp +++ b/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp @@ -15,9 +15,9 @@ #ifndef LOW_INTENSITY_CLUSTER_FILTER_NODE_HPP_ #define LOW_INTENSITY_CLUSTER_FILTER_NODE_HPP_ +#include "autoware/detected_object_validation/utils/utils.hpp" #include "autoware/universe_utils/ros/debug_publisher.hpp" #include "autoware/universe_utils/system/stop_watch.hpp" -#include "detected_object_validation/utils/utils.hpp" #include #include @@ -64,7 +64,7 @@ class LowIntensityClusterFilter : public rclcpp::Node // Eigen::Vector4f max_boundary_transformed_; bool is_validation_range_transformed_ = false; const std::string base_link_frame_id_ = "base_link"; - utils::FilterTargetLabel filter_target_; + autoware::detected_object_validation::utils::FilterTargetLabel filter_target_; // debugger std::unique_ptr> stop_watch_ptr_{ From 9cf0436d7891f77ab1e4a3957d786c968b5c3b95 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Mon, 8 Jul 2024 22:55:42 +0900 Subject: [PATCH 104/306] feat(autoware_universe_utils): add TimeKeeper to track function's processing time (#7754) Signed-off-by: Takayuki Murooka --- common/autoware_universe_utils/CMakeLists.txt | 25 ++ common/autoware_universe_utils/README.md | 249 ++++++++++++++++++ .../examples/example_scoped_time_track.cpp | 61 +++++ .../examples/example_time_keeper.cpp | 64 +++++ .../universe_utils/system/time_keeper.hpp | 202 ++++++++++++++ .../src/system/time_keeper.cpp | 175 ++++++++++++ .../test/src/system/test_time_keeper.cpp | 53 ++++ .../path_optimizer/common_structs.hpp | 52 ---- .../autoware/path_optimizer/mpt_optimizer.hpp | 5 +- .../include/autoware/path_optimizer/node.hpp | 7 +- .../state_equation_generator.hpp | 7 +- .../src/mpt_optimizer.cpp | 63 ++--- planning/autoware_path_optimizer/src/node.cpp | 71 +++-- .../src/state_equation_generator.cpp | 3 +- 14 files changed, 893 insertions(+), 144 deletions(-) create mode 100644 common/autoware_universe_utils/examples/example_scoped_time_track.cpp create mode 100644 common/autoware_universe_utils/examples/example_time_keeper.cpp create mode 100644 common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp create mode 100644 common/autoware_universe_utils/src/system/time_keeper.cpp create mode 100644 common/autoware_universe_utils/test/src/system/test_time_keeper.cpp diff --git a/common/autoware_universe_utils/CMakeLists.txt b/common/autoware_universe_utils/CMakeLists.txt index 9e86ddeb60692..2fdeef2119ab8 100644 --- a/common/autoware_universe_utils/CMakeLists.txt +++ b/common/autoware_universe_utils/CMakeLists.txt @@ -1,11 +1,15 @@ cmake_minimum_required(VERSION 3.14) project(autoware_universe_utils) +option(BUILD_EXAMPLES "Build examples" OFF) + find_package(autoware_cmake REQUIRED) autoware_package() find_package(Boost REQUIRED) +find_package(fmt REQUIRED) + ament_auto_add_library(autoware_universe_utils SHARED src/geometry/geometry.cpp src/geometry/pose_deviation.cpp @@ -16,6 +20,11 @@ ament_auto_add_library(autoware_universe_utils SHARED src/ros/marker_helper.cpp src/ros/logger_level_configure.cpp src/system/backtrace.cpp + src/system/time_keeper.cpp +) + +target_link_libraries(autoware_universe_utils + fmt::fmt ) if(BUILD_TESTING) @@ -30,4 +39,20 @@ if(BUILD_TESTING) ) endif() +if(BUILD_EXAMPLES) + message(STATUS "Building examples") + file(GLOB_RECURSE example_files examples/*.cpp) + + foreach(example_file ${example_files}) + get_filename_component(example_name ${example_file} NAME_WE) + add_executable(${example_name} ${example_file}) + target_link_libraries(${example_name} + autoware_universe_utils + ) + install(TARGETS ${example_name} + DESTINATION lib/${PROJECT_NAME} + ) + endforeach() +endif() + ament_auto_package() diff --git a/common/autoware_universe_utils/README.md b/common/autoware_universe_utils/README.md index 22b9355b09635..2d24f84423299 100644 --- a/common/autoware_universe_utils/README.md +++ b/common/autoware_universe_utils/README.md @@ -7,3 +7,252 @@ This package contains many common functions used by other packages, so please re ## For developers `autoware_universe_utils.hpp` header file was removed because the source files that directly/indirectly include this file took a long time for preprocessing. + +## `autoware::universe_utils` + +### `systems` + +#### `autoware::universe_utils::TimeKeeper` + +##### Constructor + +```cpp +template +explicit TimeKeeper(Reporters... reporters); +``` + +- Initializes the `TimeKeeper` with a list of reporters. + +##### Methods + +- `void add_reporter(std::ostream * os);` + + - Adds a reporter to output processing times to an `ostream`. + - `os`: Pointer to the `ostream` object. + +- `void add_reporter(rclcpp::Publisher::SharedPtr publisher);` + + - Adds a reporter to publish processing times to an `rclcpp` publisher. + - `publisher`: Shared pointer to the `rclcpp` publisher. + +- `void add_reporter(rclcpp::Publisher::SharedPtr publisher);` + + - Adds a reporter to publish processing times to an `rclcpp` publisher with `std_msgs::msg::String`. + - `publisher`: Shared pointer to the `rclcpp` publisher. + +- `void start_track(const std::string & func_name);` + + - Starts tracking the processing time of a function. + - `func_name`: Name of the function to be tracked. + +- `void end_track(const std::string & func_name);` + - Ends tracking the processing time of a function. + - `func_name`: Name of the function to end tracking. + +##### Example + +```cpp +#include "autoware/universe_utils/system/time_keeper.hpp" + +#include + +#include +#include + +int main(int argc, char ** argv) +{ + rclcpp::init(argc, argv); + auto node = std::make_shared("time_keeper_example"); + + auto time_keeper = std::make_shared(); + + time_keeper->add_reporter(&std::cout); + + auto publisher = + node->create_publisher("processing_time", 10); + + time_keeper->add_reporter(publisher); + + auto publisher_str = node->create_publisher("processing_time_str", 10); + + time_keeper->add_reporter(publisher_str); + + auto funcA = [&time_keeper]() { + time_keeper->start_track("funcA"); + std::this_thread::sleep_for(std::chrono::seconds(1)); + time_keeper->end_track("funcA"); + }; + + auto funcB = [&time_keeper, &funcA]() { + time_keeper->start_track("funcB"); + std::this_thread::sleep_for(std::chrono::seconds(2)); + funcA(); + time_keeper->end_track("funcB"); + }; + + auto funcC = [&time_keeper, &funcB]() { + time_keeper->start_track("funcC"); + std::this_thread::sleep_for(std::chrono::seconds(3)); + funcB(); + time_keeper->end_track("funcC"); + }; + + funcC(); + + rclcpp::spin(node); + rclcpp::shutdown(); + return 0; +} +``` + +- Output (console) + + ```text + ========================== + funcC (6000.7ms) + └── funcB (3000.44ms) + └── funcA (1000.19ms) + ``` + +- Output (`ros2 topic echo /processing_time`) + + ```text + nodes: + - id: 1 + name: funcC + processing_time: 6000.659 + parent_id: 0 + - id: 2 + name: funcB + processing_time: 3000.415 + parent_id: 1 + - id: 3 + name: funcA + processing_time: 1000.181 + parent_id: 2 + --- + ``` + +- Output (`ros2 topic echo /processing_time_str --field data`) + + ```text + funcC (6000.67ms) + └── funcB (3000.42ms) + └── funcA (1000.19ms) + + --- + ``` + +#### `autoware::universe_utils::ScopedTimeTrack` + +##### Description + +Class for automatically tracking the processing time of a function within a scope. + +##### Constructor + +```cpp +ScopedTimeTrack(const std::string & func_name, TimeKeeper & time_keeper); +``` + +- `func_name`: Name of the function to be tracked. +- `time_keeper`: Reference to the `TimeKeeper` object. + +##### Destructor + +```cpp +~ScopedTimeTrack(); +``` + +- Destroys the `ScopedTimeTrack` object, ending the tracking of the function. + +##### Example + +```cpp +#include "autoware/universe_utils/system/time_keeper.hpp" + +#include + +#include +#include + +int main(int argc, char ** argv) +{ + rclcpp::init(argc, argv); + auto node = std::make_shared("scoped_time_track_example"); + + auto time_keeper = std::make_shared(); + + time_keeper->add_reporter(&std::cout); + + auto publisher = + node->create_publisher("processing_time", 10); + + time_keeper->add_reporter(publisher); + + auto publisher_str = node->create_publisher("processing_time_str", 10); + + time_keeper->add_reporter(publisher_str); + + auto funcA = [&time_keeper]() { + autoware::universe_utils::ScopedTimeTrack st("funcA", *time_keeper); + std::this_thread::sleep_for(std::chrono::seconds(1)); + }; + + auto funcB = [&time_keeper, &funcA]() { + autoware::universe_utils::ScopedTimeTrack st("funcB", *time_keeper); + std::this_thread::sleep_for(std::chrono::seconds(2)); + funcA(); + }; + + auto funcC = [&time_keeper, &funcB]() { + autoware::universe_utils::ScopedTimeTrack st("funcC", *time_keeper); + std::this_thread::sleep_for(std::chrono::seconds(3)); + funcB(); + }; + + funcC(); + + rclcpp::spin(node); + rclcpp::shutdown(); + return 0; +} +``` + +- Output (console) + + ```text + ========================== + funcC (6000.7ms) + └── funcB (3000.44ms) + └── funcA (1000.19ms) + ``` + +- Output (`ros2 topic echo /processing_time`) + + ```text + nodes: + - id: 1 + name: funcC + processing_time: 6000.659 + parent_id: 0 + - id: 2 + name: funcB + processing_time: 3000.415 + parent_id: 1 + - id: 3 + name: funcA + processing_time: 1000.181 + parent_id: 2 + --- + ``` + +- Output (`ros2 topic echo /processing_time_str --field data`) + + ```text + funcC (6000.67ms) + └── funcB (3000.42ms) + └── funcA (1000.19ms) + + --- + ``` diff --git a/common/autoware_universe_utils/examples/example_scoped_time_track.cpp b/common/autoware_universe_utils/examples/example_scoped_time_track.cpp new file mode 100644 index 0000000000000..010cc58aba8ae --- /dev/null +++ b/common/autoware_universe_utils/examples/example_scoped_time_track.cpp @@ -0,0 +1,61 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include "autoware/universe_utils/system/time_keeper.hpp" + +#include + +#include +#include + +int main(int argc, char ** argv) +{ + rclcpp::init(argc, argv); + auto node = std::make_shared("scoped_time_track_example"); + + auto time_keeper = std::make_shared(); + + time_keeper->add_reporter(&std::cout); + + auto publisher = + node->create_publisher("processing_time", 10); + + time_keeper->add_reporter(publisher); + + auto publisher_str = node->create_publisher("processing_time_str", 10); + + time_keeper->add_reporter(publisher_str); + + auto funcA = [&time_keeper]() { + autoware::universe_utils::ScopedTimeTrack st("funcA", *time_keeper); + std::this_thread::sleep_for(std::chrono::seconds(1)); + }; + + auto funcB = [&time_keeper, &funcA]() { + autoware::universe_utils::ScopedTimeTrack st("funcB", *time_keeper); + std::this_thread::sleep_for(std::chrono::seconds(2)); + funcA(); + }; + + auto funcC = [&time_keeper, &funcB]() { + autoware::universe_utils::ScopedTimeTrack st("funcC", *time_keeper); + std::this_thread::sleep_for(std::chrono::seconds(3)); + funcB(); + }; + + funcC(); + + rclcpp::spin(node); + rclcpp::shutdown(); + return 0; +} diff --git a/common/autoware_universe_utils/examples/example_time_keeper.cpp b/common/autoware_universe_utils/examples/example_time_keeper.cpp new file mode 100644 index 0000000000000..3f6037e68daac --- /dev/null +++ b/common/autoware_universe_utils/examples/example_time_keeper.cpp @@ -0,0 +1,64 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include "autoware/universe_utils/system/time_keeper.hpp" + +#include + +#include +#include + +int main(int argc, char ** argv) +{ + rclcpp::init(argc, argv); + auto node = std::make_shared("time_keeper_example"); + + auto time_keeper = std::make_shared(); + + time_keeper->add_reporter(&std::cout); + + auto publisher = + node->create_publisher("processing_time", 10); + + time_keeper->add_reporter(publisher); + + auto publisher_str = node->create_publisher("processing_time_str", 10); + + time_keeper->add_reporter(publisher_str); + + auto funcA = [&time_keeper]() { + time_keeper->start_track("funcA"); + std::this_thread::sleep_for(std::chrono::seconds(1)); + time_keeper->end_track("funcA"); + }; + + auto funcB = [&time_keeper, &funcA]() { + time_keeper->start_track("funcB"); + std::this_thread::sleep_for(std::chrono::seconds(2)); + funcA(); + time_keeper->end_track("funcB"); + }; + + auto funcC = [&time_keeper, &funcB]() { + time_keeper->start_track("funcC"); + std::this_thread::sleep_for(std::chrono::seconds(3)); + funcB(); + time_keeper->end_track("funcC"); + }; + + funcC(); + + rclcpp::spin(node); + rclcpp::shutdown(); + return 0; +} diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp new file mode 100644 index 0000000000000..96070f0f30b77 --- /dev/null +++ b/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp @@ -0,0 +1,202 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#ifndef AUTOWARE__UNIVERSE_UTILS__SYSTEM__TIME_KEEPER_HPP_ +#define AUTOWARE__UNIVERSE_UTILS__SYSTEM__TIME_KEEPER_HPP_ + +#include "autoware/universe_utils/system/stop_watch.hpp" + +#include +#include + +#include +#include +#include + +#include + +#include +#include +#include +#include + +namespace autoware::universe_utils +{ +/** + * @brief Class representing a node in the time tracking tree + */ +class ProcessingTimeNode : public std::enable_shared_from_this +{ +public: + /** + * @brief Construct a new ProcessingTimeNode object + * + * @param name Name of the node + */ + explicit ProcessingTimeNode(const std::string & name); + + /** + * @brief Add a child node + * + * @param name Name of the child node + * @return std::shared_ptr Shared pointer to the newly added child node + */ + std::shared_ptr add_child(const std::string & name); + + /** + * @brief Get the result string representing the node and its children in a tree structure + * + * @return std::string Result string representing the node and its children + */ + std::string to_string() const; + + /** + * @brief Construct a ProcessingTimeTree message from the node and its children + * + * @return tier4_debug_msgs::msg::ProcessingTimeTree Constructed ProcessingTimeTree message + */ + tier4_debug_msgs::msg::ProcessingTimeTree to_msg() const; + + /** + * @brief Get the parent node + * + * @return std::shared_ptr Shared pointer to the parent node + */ + std::shared_ptr get_parent_node() const; + + /** + * @brief Get the child nodes + * + * @return std::vector> Vector of shared pointers to the child + * nodes + */ + std::vector> get_child_nodes() const; + + /** + * @brief Set the processing time for the node + * + * @param processing_time Processing time to be set + */ + void set_time(const double processing_time); + + /** + * @brief Get the name of the node + * + * @return std::string Name of the node + */ + std::string get_name() const; + +private: + const std::string name_; //!< Name of the node + double processing_time_{0.0}; //!< Processing time of the node + std::shared_ptr parent_node_{nullptr}; //!< Shared pointer to the parent node + std::vector> + child_nodes_; //!< Vector of shared pointers to the child nodes +}; + +using ProcessingTimeDetail = + tier4_debug_msgs::msg::ProcessingTimeTree; //!< Alias for the ProcessingTimeTree message + +/** + * @brief Class for tracking and reporting the processing time of various functions + */ +class TimeKeeper +{ +public: + template + explicit TimeKeeper(Reporters... reporters) : current_time_node_(nullptr), root_node_(nullptr) + { + reporters_.reserve(sizeof...(Reporters)); + (add_reporter(reporters), ...); + } + + /** + * @brief Add a reporter to output processing times to an ostream + * + * @param os Pointer to the ostream object + */ + void add_reporter(std::ostream * os); + + /** + * @brief Add a reporter to publish processing times to an rclcpp publisher + * + * @param publisher Shared pointer to the rclcpp publisher + */ + void add_reporter(rclcpp::Publisher::SharedPtr publisher); + + /** + * @brief Add a reporter to publish processing times to an rclcpp publisher with + * std_msgs::msg::String + * + * @param publisher Shared pointer to the rclcpp publisher + */ + void add_reporter(rclcpp::Publisher::SharedPtr publisher); + + /** + * @brief Start tracking the processing time of a function + * + * @param func_name Name of the function to be tracked + */ + void start_track(const std::string & func_name); + + /** + * @brief End tracking the processing time of a function + * + * @param func_name Name of the function to end tracking + */ + void end_track(const std::string & func_name); + +private: + /** + * @brief Report the processing times to all registered reporters + */ + void report(); + + std::shared_ptr + current_time_node_; //!< Shared pointer to the current time node + std::shared_ptr root_node_; //!< Shared pointer to the root time node + autoware::universe_utils::StopWatch< + std::chrono::milliseconds, std::chrono::microseconds, std::chrono::steady_clock> + stop_watch_; //!< StopWatch object for tracking the processing time + + std::vector &)>> + reporters_; //!< Vector of functions for reporting the processing times +}; + +/** + * @brief Class for automatically tracking the processing time of a function within a scope + */ +class ScopedTimeTrack +{ +public: + /** + * @brief Construct a new ScopedTimeTrack object + * + * @param func_name Name of the function to be tracked + * @param time_keeper Reference to the TimeKeeper object + */ + ScopedTimeTrack(const std::string & func_name, TimeKeeper & time_keeper); + + /** + * @brief Destroy the ScopedTimeTrack object, ending the tracking of the function + */ + ~ScopedTimeTrack(); + +private: + const std::string func_name_; //!< Name of the function being tracked + TimeKeeper & time_keeper_; //!< Reference to the TimeKeeper object +}; + +} // namespace autoware::universe_utils + +#endif // AUTOWARE__UNIVERSE_UTILS__SYSTEM__TIME_KEEPER_HPP_ diff --git a/common/autoware_universe_utils/src/system/time_keeper.cpp b/common/autoware_universe_utils/src/system/time_keeper.cpp new file mode 100644 index 0000000000000..58bed6677227c --- /dev/null +++ b/common/autoware_universe_utils/src/system/time_keeper.cpp @@ -0,0 +1,175 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "autoware/universe_utils/system/time_keeper.hpp" + +#include +#include + +namespace autoware::universe_utils +{ + +ProcessingTimeNode::ProcessingTimeNode(const std::string & name) : name_(name) +{ +} + +std::shared_ptr ProcessingTimeNode::add_child(const std::string & name) +{ + auto new_child_node = std::make_shared(name); + new_child_node->parent_node_ = shared_from_this(); + child_nodes_.push_back(new_child_node); + return new_child_node; +} + +std::string ProcessingTimeNode::to_string() const +{ + std::function + construct_string = [&]( + const ProcessingTimeNode & node, std::ostringstream & oss, + const std::string & prefix, bool is_last, bool is_root) { + if (!is_root) { + oss << prefix << (is_last ? "└── " : "├── "); + } + oss << node.name_ << " (" << node.processing_time_ << "ms)\n"; + for (size_t i = 0; i < node.child_nodes_.size(); ++i) { + const auto & child = node.child_nodes_[i]; + construct_string( + *child, oss, prefix + (is_last ? " " : "│ "), i == node.child_nodes_.size() - 1, + false); + } + }; + + std::ostringstream oss; + construct_string(*this, oss, "", true, true); + return oss.str(); +} + +tier4_debug_msgs::msg::ProcessingTimeTree ProcessingTimeNode::to_msg() const +{ + tier4_debug_msgs::msg::ProcessingTimeTree time_tree_msg; + + std::function + construct_msg = [&]( + const ProcessingTimeNode & node, + tier4_debug_msgs::msg::ProcessingTimeTree & tree_msg, int parent_id) { + tier4_debug_msgs::msg::ProcessingTimeNode time_node_msg; + time_node_msg.name = node.name_; + time_node_msg.processing_time = node.processing_time_; + time_node_msg.id = tree_msg.nodes.size() + 1; + time_node_msg.parent_id = parent_id; + tree_msg.nodes.emplace_back(time_node_msg); + + for (const auto & child : node.child_nodes_) { + construct_msg(*child, tree_msg, time_node_msg.id); + } + }; + construct_msg(*this, time_tree_msg, 0); + + return time_tree_msg; +} + +std::shared_ptr ProcessingTimeNode::get_parent_node() const +{ + return parent_node_; +} +std::vector> ProcessingTimeNode::get_child_nodes() const +{ + return child_nodes_; +} +void ProcessingTimeNode::set_time(const double processing_time) +{ + processing_time_ = processing_time; +} +std::string ProcessingTimeNode::get_name() const +{ + return name_; +} + +void TimeKeeper::add_reporter(std::ostream * os) +{ + reporters_.emplace_back([os](const std::shared_ptr & node) { + *os << "==========================" << std::endl; + *os << node->to_string() << std::endl; + }); +} + +void TimeKeeper::add_reporter(rclcpp::Publisher::SharedPtr publisher) +{ + reporters_.emplace_back([publisher](const std::shared_ptr & node) { + publisher->publish(node->to_msg()); + }); +} + +void TimeKeeper::add_reporter(rclcpp::Publisher::SharedPtr publisher) +{ + reporters_.emplace_back([publisher](const std::shared_ptr & node) { + std_msgs::msg::String msg; + msg.data = node->to_string(); + publisher->publish(msg); + }); +} + +void TimeKeeper::start_track(const std::string & func_name) +{ + if (current_time_node_ == nullptr) { + current_time_node_ = std::make_shared(func_name); + root_node_ = current_time_node_; + } else { + current_time_node_ = current_time_node_->add_child(func_name); + } + stop_watch_.tic(func_name); +} + +void TimeKeeper::end_track(const std::string & func_name) +{ + if (current_time_node_->get_name() != func_name) { + throw std::runtime_error(fmt::format( + "You must call end_track({}) first, but end_track({}) is called", + current_time_node_->get_name(), func_name)); + } + const double processing_time = stop_watch_.toc(func_name); + current_time_node_->set_time(processing_time); + current_time_node_ = current_time_node_->get_parent_node(); + + if (current_time_node_ == nullptr) { + report(); + } +} + +void TimeKeeper::report() +{ + if (current_time_node_ != nullptr) { + throw std::runtime_error(fmt::format( + "You must call end_track({}) first, but report() is called", current_time_node_->get_name())); + } + for (const auto & reporter : reporters_) { + reporter(root_node_); + } + current_time_node_.reset(); + root_node_.reset(); +} + +ScopedTimeTrack::ScopedTimeTrack(const std::string & func_name, TimeKeeper & time_keeper) +: func_name_(func_name), time_keeper_(time_keeper) +{ + time_keeper_.start_track(func_name_); +} + +ScopedTimeTrack::~ScopedTimeTrack() +{ + time_keeper_.end_track(func_name_); +} + +} // namespace autoware::universe_utils diff --git a/common/autoware_universe_utils/test/src/system/test_time_keeper.cpp b/common/autoware_universe_utils/test/src/system/test_time_keeper.cpp new file mode 100644 index 0000000000000..71ca7cc74bec5 --- /dev/null +++ b/common/autoware_universe_utils/test/src/system/test_time_keeper.cpp @@ -0,0 +1,53 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "autoware/universe_utils/system/time_keeper.hpp" + +#include +#include + +#include + +#include +#include +#include + +TEST(system, TimeKeeper) +{ + using autoware::universe_utils::ScopedTimeTrack; + using autoware::universe_utils::TimeKeeper; + + rclcpp::Node node{"sample_node"}; + + auto publisher = node.create_publisher( + "~/debug/processing_time_tree", 1); + + TimeKeeper time_keeper(&std::cerr, publisher); + + ScopedTimeTrack st{"main_func", time_keeper}; + + { // funcA + ScopedTimeTrack st{"funcA", time_keeper}; + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + + { // funcB + ScopedTimeTrack st{"funcB", time_keeper}; + std::this_thread::sleep_for(std::chrono::seconds(1)); + { // funcC + ScopedTimeTrack st{"funcC", time_keeper}; + std::this_thread::sleep_for(std::chrono::seconds(1)); + } + } +} diff --git a/planning/autoware_path_optimizer/include/autoware/path_optimizer/common_structs.hpp b/planning/autoware_path_optimizer/include/autoware/path_optimizer/common_structs.hpp index 7f2688ffaad95..399262f93e19d 100644 --- a/planning/autoware_path_optimizer/include/autoware/path_optimizer/common_structs.hpp +++ b/planning/autoware_path_optimizer/include/autoware/path_optimizer/common_structs.hpp @@ -17,7 +17,6 @@ #include "autoware/path_optimizer/type_alias.hpp" #include "autoware/universe_utils/ros/update_param.hpp" -#include "autoware/universe_utils/system/stop_watch.hpp" #include "rclcpp/rclcpp.hpp" #include @@ -43,57 +42,6 @@ struct PlannerData double ego_vel{}; }; -struct TimeKeeper -{ - void init() - { - accumulated_msg = "\n"; - accumulated_time = 0.0; - } - - template - TimeKeeper & operator<<(const T & msg) - { - latest_stream << msg; - return *this; - } - - void endLine() - { - const auto msg = latest_stream.str(); - accumulated_msg += msg + "\n"; - latest_stream.str(""); - - if (enable_calculation_time_info) { - RCLCPP_INFO_STREAM(rclcpp::get_logger("autoware_path_optimizer.time"), msg); - } - } - - void tic(const std::string & func_name) { stop_watch_.tic(func_name); } - - void toc(const std::string & func_name, const std::string & white_spaces) - { - const double elapsed_time = stop_watch_.toc(func_name); - *this << white_spaces << func_name << ":= " << elapsed_time << " [ms]"; - accumulated_time = elapsed_time; - endLine(); - } - - std::string getLog() const { return accumulated_msg; } - - bool enable_calculation_time_info; - std::string accumulated_msg = "\n"; - std::stringstream latest_stream; - - double getAccumulatedTime() const { return accumulated_time; } - - double accumulated_time{0.0}; - - autoware::universe_utils::StopWatch< - std::chrono::milliseconds, std::chrono::microseconds, std::chrono::steady_clock> - stop_watch_; -}; - struct DebugData { // settting diff --git a/planning/autoware_path_optimizer/include/autoware/path_optimizer/mpt_optimizer.hpp b/planning/autoware_path_optimizer/include/autoware/path_optimizer/mpt_optimizer.hpp index 4303e5c7e05b4..3443ab663b642 100644 --- a/planning/autoware_path_optimizer/include/autoware/path_optimizer/mpt_optimizer.hpp +++ b/planning/autoware_path_optimizer/include/autoware/path_optimizer/mpt_optimizer.hpp @@ -19,6 +19,7 @@ #include "autoware/path_optimizer/state_equation_generator.hpp" #include "autoware/path_optimizer/type_alias.hpp" #include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/system/time_keeper.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" #include "gtest/gtest.h" #include "interpolation/linear_interpolation.hpp" @@ -107,7 +108,7 @@ class MPTOptimizer rclcpp::Node * node, const bool enable_debug_info, const EgoNearestParam ego_nearest_param, const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const TrajectoryParam & traj_param, const std::shared_ptr debug_data_ptr, - const std::shared_ptr time_keeper_ptr); + const std::shared_ptr time_keeper_); std::vector optimizeTrajectory(const PlannerData & planner_data); std::optional> getPrevOptimizedTrajectoryPoints() const; @@ -222,7 +223,7 @@ class MPTOptimizer autoware::vehicle_info_utils::VehicleInfo vehicle_info_; TrajectoryParam traj_param_; mutable std::shared_ptr debug_data_ptr_; - mutable std::shared_ptr time_keeper_ptr_; + mutable std::shared_ptr time_keeper_; rclcpp::Logger logger_; MPTParam mpt_param_; diff --git a/planning/autoware_path_optimizer/include/autoware/path_optimizer/node.hpp b/planning/autoware_path_optimizer/include/autoware/path_optimizer/node.hpp index 359c20f2a4d29..6f75c649e02b2 100644 --- a/planning/autoware_path_optimizer/include/autoware/path_optimizer/node.hpp +++ b/planning/autoware_path_optimizer/include/autoware/path_optimizer/node.hpp @@ -22,10 +22,11 @@ #include "autoware/path_optimizer/type_alias.hpp" #include "autoware/universe_utils/ros/logger_level_configure.hpp" #include "autoware/universe_utils/ros/polling_subscriber.hpp" +#include "autoware/universe_utils/system/time_keeper.hpp" #include "autoware_vehicle_info_utils/vehicle_info_utils.hpp" -#include "rclcpp/rclcpp.hpp" #include +#include #include #include @@ -65,7 +66,7 @@ class PathOptimizer : public rclcpp::Node // argument variables autoware::vehicle_info_utils::VehicleInfo vehicle_info_{}; mutable std::shared_ptr debug_data_ptr_{nullptr}; - mutable std::shared_ptr time_keeper_ptr_{nullptr}; + mutable std::shared_ptr time_keeper_{nullptr}; // flags for some functions bool enable_pub_debug_marker_; @@ -98,6 +99,8 @@ class PathOptimizer : public rclcpp::Node rclcpp::Publisher::SharedPtr debug_markers_pub_; rclcpp::Publisher::SharedPtr debug_calculation_time_str_pub_; rclcpp::Publisher::SharedPtr debug_calculation_time_float_pub_; + rclcpp::Publisher::SharedPtr + debug_processing_time_detail_pub_; // parameter callback rcl_interfaces::msg::SetParametersResult onParam( diff --git a/planning/autoware_path_optimizer/include/autoware/path_optimizer/state_equation_generator.hpp b/planning/autoware_path_optimizer/include/autoware/path_optimizer/state_equation_generator.hpp index b8162f5ef2d32..1d23d7788dca1 100644 --- a/planning/autoware_path_optimizer/include/autoware/path_optimizer/state_equation_generator.hpp +++ b/planning/autoware_path_optimizer/include/autoware/path_optimizer/state_equation_generator.hpp @@ -18,6 +18,7 @@ #include "autoware/path_optimizer/common_structs.hpp" #include "autoware/path_optimizer/vehicle_model/vehicle_model_bicycle_kinematics.hpp" #include "autoware/path_optimizer/vehicle_model/vehicle_model_interface.hpp" +#include "autoware/universe_utils/system/time_keeper.hpp" #include #include @@ -39,9 +40,9 @@ class StateEquationGenerator StateEquationGenerator() = default; StateEquationGenerator( const double wheel_base, const double max_steer_rad, - const std::shared_ptr time_keeper_ptr) + const std::shared_ptr time_keeper) : vehicle_model_ptr_(std::make_unique(wheel_base, max_steer_rad)), - time_keeper_ptr_(time_keeper_ptr) + time_keeper_(time_keeper) { } @@ -56,7 +57,7 @@ class StateEquationGenerator private: std::unique_ptr vehicle_model_ptr_; - mutable std::shared_ptr time_keeper_ptr_; + mutable std::shared_ptr time_keeper_; }; } // namespace autoware::path_optimizer #endif // AUTOWARE__PATH_OPTIMIZER__STATE_EQUATION_GENERATOR_HPP_ diff --git a/planning/autoware_path_optimizer/src/mpt_optimizer.cpp b/planning/autoware_path_optimizer/src/mpt_optimizer.cpp index b5fd266006a48..45943d7deec09 100644 --- a/planning/autoware_path_optimizer/src/mpt_optimizer.cpp +++ b/planning/autoware_path_optimizer/src/mpt_optimizer.cpp @@ -395,13 +395,13 @@ MPTOptimizer::MPTOptimizer( rclcpp::Node * node, const bool enable_debug_info, const EgoNearestParam ego_nearest_param, const autoware::vehicle_info_utils::VehicleInfo & vehicle_info, const TrajectoryParam & traj_param, const std::shared_ptr debug_data_ptr, - const std::shared_ptr time_keeper_ptr) + const std::shared_ptr time_keeper) : enable_debug_info_(enable_debug_info), ego_nearest_param_(ego_nearest_param), vehicle_info_(vehicle_info), traj_param_(traj_param), debug_data_ptr_(debug_data_ptr), - time_keeper_ptr_(time_keeper_ptr), + time_keeper_(time_keeper), logger_(node->get_logger().get_child("mpt_optimizer")) { // initialize mpt param @@ -411,7 +411,7 @@ MPTOptimizer::MPTOptimizer( // state equation generator state_equation_generator_ = - StateEquationGenerator(vehicle_info_.wheel_base_m, mpt_param_.max_steer_rad, time_keeper_ptr_); + StateEquationGenerator(vehicle_info_.wheel_base_m, mpt_param_.max_steer_rad, time_keeper_); // osqp solver osqp_solver_ptr_ = std::make_unique(osqp_epsilon_); @@ -470,7 +470,7 @@ void MPTOptimizer::onParam(const std::vector & parameters) std::vector MPTOptimizer::optimizeTrajectory(const PlannerData & planner_data) { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & p = planner_data; const auto & traj_points = p.traj_points; @@ -520,8 +520,6 @@ std::vector MPTOptimizer::optimizeTrajectory(const PlannerData // 8. publish trajectories for debug publishDebugTrajectories(p.header, ref_points, *mpt_traj_points); - time_keeper_ptr_->toc(__func__, " "); - debug_data_ptr_->ref_points = ref_points; prev_ref_points_ptr_ = std::make_shared>(ref_points); prev_optimized_traj_points_ptr_ = @@ -541,7 +539,7 @@ std::optional> MPTOptimizer::getPrevOptimizedTrajec std::vector MPTOptimizer::calcReferencePoints( const PlannerData & planner_data, const std::vector & smoothed_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & p = planner_data; @@ -549,14 +547,14 @@ std::vector MPTOptimizer::calcReferencePoints( const double backward_traj_length = traj_param_.output_backward_traj_length; // 1. resample and convert smoothed points type from trajectory points to reference points - time_keeper_ptr_->tic("resampleReferencePoints"); + time_keeper_->start_track("resampleReferencePoints"); auto ref_points = [&]() { const auto resampled_smoothed_points = trajectory_utils::resampleTrajectoryPointsWithoutStopPoint( smoothed_points, mpt_param_.delta_arc_length); return trajectory_utils::convertToReferencePoints(resampled_smoothed_points); }(); - time_keeper_ptr_->toc("resampleReferencePoints", " "); + time_keeper_->end_track("resampleReferencePoints"); // 2. crop forward and backward with margin, and calculate spline interpolation // NOTE: Margin is added to calculate orientation, curvature, etc precisely. @@ -611,8 +609,6 @@ std::vector MPTOptimizer::calcReferencePoints( ref_points.resize(mpt_param_.num_points); } - time_keeper_ptr_->toc(__func__, " "); - return ref_points; } @@ -639,7 +635,7 @@ void MPTOptimizer::updateCurvature( void MPTOptimizer::updateFixedPoint(std::vector & ref_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); if (!prev_ref_points_ptr_) { // no fixed point @@ -681,8 +677,6 @@ void MPTOptimizer::updateFixedPoint(std::vector & ref_points) co ref_points.front().curvature = front_point.curvature; ref_points.front().fixed_kinematic_state = front_point.optimized_kinematic_state; } - - time_keeper_ptr_->toc(__func__, " "); } void MPTOptimizer::updateDeltaArcLength(std::vector & ref_points) const @@ -697,7 +691,7 @@ void MPTOptimizer::updateDeltaArcLength(std::vector & ref_points void MPTOptimizer::updateExtraPoints(std::vector & ref_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); // alpha for (size_t i = 0; i < ref_points.size(); ++i) { @@ -786,8 +780,6 @@ void MPTOptimizer::updateExtraPoints(std::vector & ref_points) c } } } - - time_keeper_ptr_->toc(__func__, " "); } void MPTOptimizer::updateBounds( @@ -796,7 +788,7 @@ void MPTOptimizer::updateBounds( const std::vector & right_bound, const geometry_msgs::msg::Pose & ego_pose, const double ego_vel) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const double soft_road_clearance = mpt_param_.soft_clearance_from_road + vehicle_info_.vehicle_width_m / 2.0; @@ -844,8 +836,6 @@ void MPTOptimizer::updateBounds( } } */ - - time_keeper_ptr_->toc(__func__, " "); return; } @@ -1104,7 +1094,7 @@ void MPTOptimizer::updateVehicleBounds( std::vector & ref_points, const SplineInterpolationPoints2d & ref_points_spline) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); for (size_t p_idx = 0; p_idx < ref_points.size(); ++p_idx) { const auto & ref_point = ref_points.at(p_idx); @@ -1160,8 +1150,6 @@ void MPTOptimizer::updateVehicleBounds( ref_points.at(p_idx).pose_on_constraints.push_back(vehicle_bounds_pose); } } - - time_keeper_ptr_->toc(__func__, " "); } // cost function: J = x' Q x + u' R u @@ -1169,7 +1157,7 @@ MPTOptimizer::ValueMatrix MPTOptimizer::calcValueMatrix( const std::vector & ref_points, const std::vector & traj_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const size_t D_x = state_equation_generator_.getDimX(); const size_t D_u = state_equation_generator_.getDimU(); @@ -1228,7 +1216,6 @@ MPTOptimizer::ValueMatrix MPTOptimizer::calcValueMatrix( R_sparse_mat.setFromTriplets(R_triplet_vec.begin(), R_triplet_vec.end()); - time_keeper_ptr_->toc(__func__, " "); return ValueMatrix{Q_sparse_mat, R_sparse_mat}; } @@ -1236,7 +1223,7 @@ MPTOptimizer::ObjectiveMatrix MPTOptimizer::calcObjectiveMatrix( [[maybe_unused]] const StateEquationGenerator::Matrix & mpt_mat, const ValueMatrix & val_mat, const std::vector & ref_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const size_t D_x = state_equation_generator_.getDimX(); const size_t D_u = state_equation_generator_.getDimU(); @@ -1286,7 +1273,6 @@ MPTOptimizer::ObjectiveMatrix MPTOptimizer::calcObjectiveMatrix( obj_matrix.hessian = H; obj_matrix.gradient = g; - time_keeper_ptr_->toc(__func__, " "); return obj_matrix; } @@ -1297,7 +1283,7 @@ MPTOptimizer::ConstraintMatrix MPTOptimizer::calcConstraintMatrix( const StateEquationGenerator::Matrix & mpt_mat, const std::vector & ref_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const size_t D_x = state_equation_generator_.getDimX(); const size_t D_u = state_equation_generator_.getDimU(); @@ -1451,7 +1437,6 @@ MPTOptimizer::ConstraintMatrix MPTOptimizer::calcConstraintMatrix( A_rows_end += N_u; } - time_keeper_ptr_->toc(__func__, " "); return ConstraintMatrix{A, lb, ub}; } @@ -1477,7 +1462,7 @@ std::optional MPTOptimizer::calcOptimizedSteerAngles( const std::vector & ref_points, const ObjectiveMatrix & obj_mat, const ConstraintMatrix & const_mat) { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const size_t D_x = state_equation_generator_.getDimX(); const size_t D_u = state_equation_generator_.getDimU(); @@ -1510,7 +1495,7 @@ std::optional MPTOptimizer::calcOptimizedSteerAngles( const auto lower_bound = toStdVector(updated_const_mat.lower_bound); // initialize or update solver according to warm start - time_keeper_ptr_->tic("initOsqp"); + time_keeper_->start_track("initOsqp"); const autoware::common::osqp::CSC_Matrix P_csc = autoware::common::osqp::calCSCMatrixTrapezoidal(H); @@ -1530,13 +1515,12 @@ std::optional MPTOptimizer::calcOptimizedSteerAngles( } prev_mat_n_ = H.rows(); prev_mat_m_ = A.rows(); - - time_keeper_ptr_->toc("initOsqp", " "); + time_keeper_->end_track("initOsqp"); // solve qp - time_keeper_ptr_->tic("solveOsqp"); + time_keeper_->start_track("solveOsqp"); const auto result = osqp_solver_ptr_->optimize(); - time_keeper_ptr_->toc("solveOsqp", " "); + time_keeper_->end_track("solveOsqp"); // check solution status const int solution_status = std::get<3>(result); @@ -1563,8 +1547,6 @@ std::optional MPTOptimizer::calcOptimizedSteerAngles( const Eigen::VectorXd optimized_variables = Eigen::Map(&optimization_result[0], N_v); - time_keeper_ptr_->toc(__func__, " "); - if (u0) { // manual warm start return static_cast(optimized_variables + *u0); } @@ -1647,7 +1629,7 @@ std::optional> MPTOptimizer::calcMPTPoints( std::vector & ref_points, const Eigen::VectorXd & optimized_variables, [[maybe_unused]] const StateEquationGenerator::Matrix & mpt_mat) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const size_t D_x = state_equation_generator_.getDimX(); const size_t D_u = state_equation_generator_.getDimU(); @@ -1700,7 +1682,6 @@ std::optional> MPTOptimizer::calcMPTPoints( traj_points.push_back(traj_point); } - time_keeper_ptr_->toc(__func__, " "); return traj_points; } @@ -1708,7 +1689,7 @@ void MPTOptimizer::publishDebugTrajectories( const std_msgs::msg::Header & header, const std::vector & ref_points, const std::vector & mpt_traj_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); // reference points const auto ref_traj = autoware::motion_utils::convertToTrajectory( @@ -1723,8 +1704,6 @@ void MPTOptimizer::publishDebugTrajectories( // mpt points const auto mpt_traj = autoware::motion_utils::convertToTrajectory(mpt_traj_points, header); debug_mpt_traj_pub_->publish(mpt_traj); - - time_keeper_ptr_->toc(__func__, " "); } std::vector MPTOptimizer::extractFixedPoints( diff --git a/planning/autoware_path_optimizer/src/node.cpp b/planning/autoware_path_optimizer/src/node.cpp index 3899867a9dcce..7c73d1ad1fee3 100644 --- a/planning/autoware_path_optimizer/src/node.cpp +++ b/planning/autoware_path_optimizer/src/node.cpp @@ -23,6 +23,7 @@ #include "rclcpp/time.hpp" #include +#include #include namespace autoware::path_optimizer @@ -38,7 +39,8 @@ std::vector concatVectors(const std::vector & prev_vector, const std::vect return concatenated_vector; } -StringStamped createStringStamped(const rclcpp::Time & now, const std::string & data) +[[maybe_unused]] StringStamped createStringStamped( + const rclcpp::Time & now, const std::string & data) { StringStamped msg; msg.stamp = now; @@ -46,7 +48,7 @@ StringStamped createStringStamped(const rclcpp::Time & now, const std::string & return msg; } -Float64Stamped createFloat64Stamped(const rclcpp::Time & now, const float & data) +[[maybe_unused]] Float64Stamped createFloat64Stamped(const rclcpp::Time & now, const float & data) { Float64Stamped msg; msg.stamp = now; @@ -85,8 +87,7 @@ std::vector calcSegmentLengthVector(const std::vector & PathOptimizer::PathOptimizer(const rclcpp::NodeOptions & node_options) : Node("path_optimizer", node_options), vehicle_info_(autoware::vehicle_info_utils::VehicleInfoUtils(*this).getVehicleInfo()), - debug_data_ptr_(std::make_shared()), - time_keeper_ptr_(std::make_shared()) + debug_data_ptr_(std::make_shared()) { // interface publisher traj_pub_ = create_publisher("~/output/path", 1); @@ -102,6 +103,9 @@ PathOptimizer::PathOptimizer(const rclcpp::NodeOptions & node_options) debug_calculation_time_str_pub_ = create_publisher("~/debug/calculation_time", 1); debug_calculation_time_float_pub_ = create_publisher("~/debug/processing_time_ms", 1); + debug_processing_time_detail_pub_ = + create_publisher( + "~/debug/processing_time_detail_ms", 1); { // parameters // parameter for option @@ -120,8 +124,6 @@ PathOptimizer::PathOptimizer(const rclcpp::NodeOptions & node_options) // parameter for debug info enable_debug_info_ = declare_parameter("option.debug.enable_debug_info"); - time_keeper_ptr_->enable_calculation_time_info = - declare_parameter("option.debug.enable_calculation_time_info"); vehicle_stop_margin_outside_drivable_area_ = declare_parameter("common.vehicle_stop_margin_outside_drivable_area"); @@ -133,11 +135,14 @@ PathOptimizer::PathOptimizer(const rclcpp::NodeOptions & node_options) traj_param_ = TrajectoryParam(this); } + time_keeper_ = + std::make_shared(debug_processing_time_detail_pub_); + // create core algorithm pointers with parameter declaration replan_checker_ptr_ = std::make_shared(this, ego_nearest_param_); mpt_optimizer_ptr_ = std::make_shared( this, enable_debug_info_, ego_nearest_param_, vehicle_info_, traj_param_, debug_data_ptr_, - time_keeper_ptr_); + time_keeper_); // reset planners // NOTE: This function must be called after core algorithms (e.g. mpt_optimizer_) have been @@ -177,9 +182,6 @@ rcl_interfaces::msg::SetParametersResult PathOptimizer::onParam( // parameters for debug info updateParam(parameters, "option.debug.enable_debug_info", enable_debug_info_); - updateParam( - parameters, "option.debug.enable_calculation_time_info", - time_keeper_ptr_->enable_calculation_time_info); updateParam( parameters, "common.vehicle_stop_margin_outside_drivable_area", @@ -220,8 +222,7 @@ void PathOptimizer::resetPreviousData() void PathOptimizer::onPath(const Path::ConstSharedPtr path_ptr) { - time_keeper_ptr_->init(); - time_keeper_ptr_->tic(__func__); + time_keeper_->start_track(__func__); // check if input path is valid if (!checkInputPath(*path_ptr, *get_clock())) { @@ -267,21 +268,21 @@ void PathOptimizer::onPath(const Path::ConstSharedPtr path_ptr) // 5. publish debug data publishDebugData(planner_data.header); - time_keeper_ptr_->toc(__func__, ""); - *time_keeper_ptr_ << "========================================"; - time_keeper_ptr_->endLine(); - // publish calculation_time // NOTE: This function must be called after measuring onPath calculation time + /* const auto calculation_time_msg = createStringStamped(now(), time_keeper_ptr_->getLog()); debug_calculation_time_str_pub_->publish(calculation_time_msg); debug_calculation_time_float_pub_->publish( createFloat64Stamped(now(), time_keeper_ptr_->getAccumulatedTime())); + */ const auto output_traj_msg = autoware::motion_utils::convertToTrajectory(full_traj_points, path_ptr->header); traj_pub_->publish(output_traj_msg); published_time_publisher_->publish_if_subscribed(traj_pub_, output_traj_msg.header.stamp); + + time_keeper_->end_track(__func__); } bool PathOptimizer::checkInputPath(const Path & path, rclcpp::Clock clock) const @@ -319,7 +320,7 @@ PlannerData PathOptimizer::createPlannerData( std::vector PathOptimizer::generateOptimizedTrajectory( const PlannerData & planner_data) { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & input_traj_points = planner_data.traj_points; @@ -339,13 +340,12 @@ std::vector PathOptimizer::generateOptimizedTrajectory( // 4. publish debug marker publishDebugMarkerOfOptimization(optimized_traj_points); - time_keeper_ptr_->toc(__func__, " "); return optimized_traj_points; } std::vector PathOptimizer::optimizeTrajectory(const PlannerData & planner_data) { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & p = planner_data; // 1. check if replan (= optimization) is required @@ -372,7 +372,6 @@ std::vector PathOptimizer::optimizeTrajectory(const PlannerData // with model predictive trajectory const auto mpt_traj = mpt_optimizer_ptr_->optimizeTrajectory(planner_data); - time_keeper_ptr_->toc(__func__, " "); return mpt_traj; } @@ -391,7 +390,7 @@ void PathOptimizer::applyInputVelocity( const std::vector & input_traj_points, const geometry_msgs::msg::Pose & ego_pose) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); // crop forward for faster calculation const auto forward_cropped_input_traj_points = [&]() { @@ -486,14 +485,12 @@ void PathOptimizer::applyInputVelocity( trajectory_utils::insertStopPoint(output_traj_points, input_stop_pose, *stop_seg_idx); } } - - time_keeper_ptr_->toc(__func__, " "); } void PathOptimizer::insertZeroVelocityOutsideDrivableArea( const PlannerData & planner_data, std::vector & optimized_traj_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); if (optimized_traj_points.empty()) { return; @@ -553,13 +550,11 @@ void PathOptimizer::insertZeroVelocityOutsideDrivableArea( } else { debug_data_ptr_->stop_pose_by_drivable_area = std::nullopt; } - - time_keeper_ptr_->toc(__func__, " "); } void PathOptimizer::publishVirtualWall(const geometry_msgs::msg::Pose & stop_pose) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); auto virtual_wall_marker = autoware::motion_utils::createStopVirtualWallMarker( stop_pose, "outside drivable area", now(), 0, vehicle_info_.max_longitudinal_offset_m); @@ -569,36 +564,33 @@ void PathOptimizer::publishVirtualWall(const geometry_msgs::msg::Pose & stop_pos } virtual_wall_pub_->publish(virtual_wall_marker); - time_keeper_ptr_->toc(__func__, " "); } void PathOptimizer::publishDebugMarkerOfOptimization( const std::vector & traj_points) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + if (!enable_pub_debug_marker_) { return; } - time_keeper_ptr_->tic(__func__); - // debug marker - time_keeper_ptr_->tic("getDebugMarker"); + time_keeper_->start_track("getDebugMarker"); const auto debug_marker = getDebugMarker(*debug_data_ptr_, traj_points, vehicle_info_, enable_pub_extra_debug_marker_); - time_keeper_ptr_->toc("getDebugMarker", " "); + time_keeper_->end_track("getDebugMarker"); - time_keeper_ptr_->tic("publishDebugMarker"); + time_keeper_->start_track("publishDebugMarker"); debug_markers_pub_->publish(debug_marker); - time_keeper_ptr_->toc("publishDebugMarker", " "); - - time_keeper_ptr_->toc(__func__, " "); + time_keeper_->end_track("publishDebugMarker"); } std::vector PathOptimizer::extendTrajectory( const std::vector & traj_points, const std::vector & optimized_traj_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & joint_start_pose = optimized_traj_points.back().pose; @@ -654,20 +646,17 @@ std::vector PathOptimizer::extendTrajectory( // debug_data_ptr_->extended_traj_points = // extended_traj_points ? *extended_traj_points : std::vector(); - time_keeper_ptr_->toc(__func__, " "); return resampled_traj_points; } void PathOptimizer::publishDebugData(const Header & header) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); // publish trajectories const auto debug_extended_traj = autoware::motion_utils::convertToTrajectory(debug_data_ptr_->extended_traj_points, header); debug_extended_traj_pub_->publish(debug_extended_traj); - - time_keeper_ptr_->toc(__func__, " "); } } // namespace autoware::path_optimizer diff --git a/planning/autoware_path_optimizer/src/state_equation_generator.cpp b/planning/autoware_path_optimizer/src/state_equation_generator.cpp index 5aa2ab4ffbfa8..74033c5834db2 100644 --- a/planning/autoware_path_optimizer/src/state_equation_generator.cpp +++ b/planning/autoware_path_optimizer/src/state_equation_generator.cpp @@ -23,7 +23,7 @@ namespace autoware::path_optimizer StateEquationGenerator::Matrix StateEquationGenerator::calcMatrix( const std::vector & ref_points) const { - time_keeper_ptr_->tic(__func__); + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const size_t D_x = vehicle_model_ptr_->getDimX(); const size_t D_u = vehicle_model_ptr_->getDimU(); @@ -60,7 +60,6 @@ StateEquationGenerator::Matrix StateEquationGenerator::calcMatrix( W.segment(i * D_x, D_x) = Wd; } - time_keeper_ptr_->toc(__func__, " "); return Matrix{A, B, W}; } From 6c45ec5463110a02766aa18f454fdc7829c59f7c Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Tue, 9 Jul 2024 09:29:58 +0900 Subject: [PATCH 105/306] fix(multi_object_tracker): fix publish interval adjust timing (#7904) refactor: optimize publish time check in multi_object_tracker_node.cpp Signed-off-by: Taekjin LEE --- .../multi_object_tracker/src/multi_object_tracker_node.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/perception/multi_object_tracker/src/multi_object_tracker_node.cpp b/perception/multi_object_tracker/src/multi_object_tracker_node.cpp index d3e1c9686b69b..198d9e2238566 100644 --- a/perception/multi_object_tracker/src/multi_object_tracker_node.cpp +++ b/perception/multi_object_tracker/src/multi_object_tracker_node.cpp @@ -221,8 +221,9 @@ void MultiObjectTracker::onTrigger() } else { // Publish if the next publish time is close const double minimum_publish_interval = publisher_period_ * 0.70; // 70% of the period - if ((current_time - last_published_time_).seconds() > minimum_publish_interval) { - checkAndPublish(current_time); + const rclcpp::Time publish_time = this->now(); + if ((publish_time - last_published_time_).seconds() > minimum_publish_interval) { + checkAndPublish(publish_time); } } } From f397b1cc2336a236380852484ab923fdfceb2b5b Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Tue, 9 Jul 2024 09:55:53 +0900 Subject: [PATCH 106/306] refactor(tier4_perception_launch): add maintainer to tier4_perception_launch (#7893) refactor: add maintainer to tier4_perception_launch Signed-off-by: Taekjin LEE --- launch/tier4_perception_launch/package.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index 57d4b209efeef..5c15a937304ad 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -7,6 +7,7 @@ Yukihiro Saito Shunsuke Miura Yoshi Ri + Taekjin Lee Apache License 2.0 ament_cmake_auto From 022e8d23365dcc959d209cc72aa2e6efef3d4d56 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Tue, 9 Jul 2024 11:24:09 +0900 Subject: [PATCH 107/306] refactor(euclidean_cluster)!: fix namespace and directory structure (#7887) * refactor: update include paths for euclidean_cluster code Signed-off-by: Taekjin LEE refactor: fix namespace Signed-off-by: Taekjin LEE chore: update include paths for euclidean_cluster code Signed-off-by: Taekjin LEE * style(pre-commit): autofix --------- Signed-off-by: Taekjin LEE Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../src/debugger/debugger.hpp | 3 -- .../src/detection_by_tracker_node.cpp | 4 +-- .../src/detection_by_tracker_node.hpp | 8 +++--- perception/euclidean_cluster/CMakeLists.txt | 28 +++++++++---------- .../euclidean_cluster/euclidean_cluster.hpp | 8 +++--- .../euclidean_cluster_interface.hpp | 4 +-- .../euclidean_cluster/utils.hpp | 4 +-- .../voxel_grid_based_euclidean_cluster.hpp | 8 +++--- .../launch/euclidean_cluster.launch.py | 4 +-- ...xel_grid_based_euclidean_cluster.launch.py | 4 +-- .../lib/euclidean_cluster.cpp | 6 ++-- perception/euclidean_cluster/lib/utils.cpp | 6 ++-- .../voxel_grid_based_euclidean_cluster.cpp | 6 ++-- .../src/euclidean_cluster_node.cpp | 8 +++--- .../src/euclidean_cluster_node.hpp | 7 +++-- ...oxel_grid_based_euclidean_cluster_node.cpp | 8 +++--- ...oxel_grid_based_euclidean_cluster_node.hpp | 6 ++-- .../src/roi_pointcloud_fusion/node.cpp | 4 +-- 18 files changed, 62 insertions(+), 64 deletions(-) rename perception/euclidean_cluster/include/{ => autoware}/euclidean_cluster/euclidean_cluster.hpp (87%) rename perception/euclidean_cluster/include/{ => autoware}/euclidean_cluster/euclidean_cluster_interface.hpp (95%) rename perception/euclidean_cluster/include/{ => autoware}/euclidean_cluster/utils.hpp (94%) rename perception/euclidean_cluster/include/{ => autoware}/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp (90%) diff --git a/perception/detection_by_tracker/src/debugger/debugger.hpp b/perception/detection_by_tracker/src/debugger/debugger.hpp index 56f37fb10043d..bda42aa5f0b55 100644 --- a/perception/detection_by_tracker/src/debugger/debugger.hpp +++ b/perception/detection_by_tracker/src/debugger/debugger.hpp @@ -17,9 +17,6 @@ #include "autoware/universe_utils/ros/debug_publisher.hpp" #include "autoware/universe_utils/system/stop_watch.hpp" -#include "euclidean_cluster/euclidean_cluster.hpp" -#include "euclidean_cluster/utils.hpp" -#include "euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" #include diff --git a/perception/detection_by_tracker/src/detection_by_tracker_node.cpp b/perception/detection_by_tracker/src/detection_by_tracker_node.cpp index c22d015aa11a4..4c65500d96aaa 100644 --- a/perception/detection_by_tracker/src/detection_by_tracker_node.cpp +++ b/perception/detection_by_tracker/src/detection_by_tracker_node.cpp @@ -115,7 +115,7 @@ DetectionByTracker::DetectionByTracker(const rclcpp::NodeOptions & node_options) setMaxSearchRange(); shape_estimator_ = std::make_shared(true, true); - cluster_ = std::make_shared( + cluster_ = std::make_shared( false, 10, 10000, 0.7, 0.3, 0); debugger_ = std::make_shared(this); published_time_publisher_ = @@ -277,7 +277,7 @@ float DetectionByTracker::optimizeUnderSegmentedObject( const auto & label = target_object.classification.front().label; // initialize clustering parameters - euclidean_cluster::VoxelGridBasedEuclideanCluster cluster( + autoware::euclidean_cluster::VoxelGridBasedEuclideanCluster cluster( false, 4, 10000, initial_cluster_range, initial_voxel_size, 0); // convert to pcl diff --git a/perception/detection_by_tracker/src/detection_by_tracker_node.hpp b/perception/detection_by_tracker/src/detection_by_tracker_node.hpp index 095708fb4b51f..9c974d72cfdca 100644 --- a/perception/detection_by_tracker/src/detection_by_tracker_node.hpp +++ b/perception/detection_by_tracker/src/detection_by_tracker_node.hpp @@ -15,12 +15,12 @@ #ifndef DETECTION_BY_TRACKER_NODE_HPP_ #define DETECTION_BY_TRACKER_NODE_HPP_ +#include "autoware/euclidean_cluster/euclidean_cluster.hpp" +#include "autoware/euclidean_cluster/utils.hpp" +#include "autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" #include "autoware/shape_estimation/shape_estimator.hpp" #include "autoware/universe_utils/ros/published_time_publisher.hpp" #include "debugger/debugger.hpp" -#include "euclidean_cluster/euclidean_cluster.hpp" -#include "euclidean_cluster/utils.hpp" -#include "euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" #include "tracker/tracker_handler.hpp" #include "utils/utils.hpp" @@ -69,7 +69,7 @@ class DetectionByTracker : public rclcpp::Node TrackerHandler tracker_handler_; std::shared_ptr shape_estimator_; - std::shared_ptr cluster_; + std::shared_ptr cluster_; std::shared_ptr debugger_; std::map max_search_distance_for_merger_; std::map max_search_distance_for_divider_; diff --git a/perception/euclidean_cluster/CMakeLists.txt b/perception/euclidean_cluster/CMakeLists.txt index fe1fa9fda5fca..dacbcf460a14a 100644 --- a/perception/euclidean_cluster/CMakeLists.txt +++ b/perception/euclidean_cluster/CMakeLists.txt @@ -13,45 +13,45 @@ include_directories( ${PCL_INCLUDE_DIRS} ) -ament_auto_add_library(cluster_lib SHARED - lib/utils.cpp +ament_auto_add_library(${PROJECT_NAME}_lib SHARED lib/euclidean_cluster.cpp lib/voxel_grid_based_euclidean_cluster.cpp + lib/utils.cpp ) -target_link_libraries(cluster_lib +target_link_libraries(${PROJECT_NAME}_lib ${PCL_LIBRARIES} ) -target_include_directories(cluster_lib +target_include_directories(${PROJECT_NAME}_lib PUBLIC $ $ ) -ament_auto_add_library(euclidean_cluster_node_core SHARED +ament_auto_add_library(${PROJECT_NAME}_node_core SHARED src/euclidean_cluster_node.cpp ) -target_link_libraries(euclidean_cluster_node_core +target_link_libraries(${PROJECT_NAME}_node_core ${PCL_LIBRARIES} - cluster_lib + ${PROJECT_NAME}_lib ) -rclcpp_components_register_node(euclidean_cluster_node_core - PLUGIN "euclidean_cluster::EuclideanClusterNode" +rclcpp_components_register_node(${PROJECT_NAME}_node_core + PLUGIN "autoware::euclidean_cluster::EuclideanClusterNode" EXECUTABLE euclidean_cluster_node ) -ament_auto_add_library(voxel_grid_based_euclidean_cluster_node_core SHARED +ament_auto_add_library(${PROJECT_NAME}_voxel_grid_node_core SHARED src/voxel_grid_based_euclidean_cluster_node.cpp ) -target_link_libraries(voxel_grid_based_euclidean_cluster_node_core +target_link_libraries(${PROJECT_NAME}_voxel_grid_node_core ${PCL_LIBRARIES} - cluster_lib + ${PROJECT_NAME}_lib ) -rclcpp_components_register_node(voxel_grid_based_euclidean_cluster_node_core - PLUGIN "euclidean_cluster::VoxelGridBasedEuclideanClusterNode" +rclcpp_components_register_node(${PROJECT_NAME}_voxel_grid_node_core + PLUGIN "autoware::euclidean_cluster::VoxelGridBasedEuclideanClusterNode" EXECUTABLE voxel_grid_based_euclidean_cluster_node ) diff --git a/perception/euclidean_cluster/include/euclidean_cluster/euclidean_cluster.hpp b/perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster.hpp similarity index 87% rename from perception/euclidean_cluster/include/euclidean_cluster/euclidean_cluster.hpp rename to perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster.hpp index aec3f56936828..8c4aad537cc43 100644 --- a/perception/euclidean_cluster/include/euclidean_cluster/euclidean_cluster.hpp +++ b/perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster.hpp @@ -14,14 +14,14 @@ #pragma once -#include "euclidean_cluster/euclidean_cluster_interface.hpp" -#include "euclidean_cluster/utils.hpp" +#include "autoware/euclidean_cluster/euclidean_cluster_interface.hpp" +#include "autoware/euclidean_cluster/utils.hpp" #include #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { class EuclideanCluster : public EuclideanClusterInterface { @@ -42,4 +42,4 @@ class EuclideanCluster : public EuclideanClusterInterface float tolerance_; }; -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster diff --git a/perception/euclidean_cluster/include/euclidean_cluster/euclidean_cluster_interface.hpp b/perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster_interface.hpp similarity index 95% rename from perception/euclidean_cluster/include/euclidean_cluster/euclidean_cluster_interface.hpp rename to perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster_interface.hpp index 65b907f747666..461d75d4931db 100644 --- a/perception/euclidean_cluster/include/euclidean_cluster/euclidean_cluster_interface.hpp +++ b/perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster_interface.hpp @@ -24,7 +24,7 @@ #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { class EuclideanClusterInterface { @@ -54,4 +54,4 @@ class EuclideanClusterInterface int max_cluster_size_; }; -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster diff --git a/perception/euclidean_cluster/include/euclidean_cluster/utils.hpp b/perception/euclidean_cluster/include/autoware/euclidean_cluster/utils.hpp similarity index 94% rename from perception/euclidean_cluster/include/euclidean_cluster/utils.hpp rename to perception/euclidean_cluster/include/autoware/euclidean_cluster/utils.hpp index 50d2306d48f72..a52c0840c4d41 100644 --- a/perception/euclidean_cluster/include/euclidean_cluster/utils.hpp +++ b/perception/euclidean_cluster/include/autoware/euclidean_cluster/utils.hpp @@ -24,7 +24,7 @@ #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { geometry_msgs::msg::Point getCentroid(const sensor_msgs::msg::PointCloud2 & pointcloud); void convertPointCloudClusters2Msg( @@ -37,4 +37,4 @@ void convertPointCloudClusters2Msg( void convertObjectMsg2SensorMsg( const tier4_perception_msgs::msg::DetectedObjectsWithFeature & input, sensor_msgs::msg::PointCloud2 & output); -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster diff --git a/perception/euclidean_cluster/include/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp b/perception/euclidean_cluster/include/autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp similarity index 90% rename from perception/euclidean_cluster/include/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp rename to perception/euclidean_cluster/include/autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp index 375cc2d19a01f..5c51bb85ce177 100644 --- a/perception/euclidean_cluster/include/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp +++ b/perception/euclidean_cluster/include/autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp @@ -14,15 +14,15 @@ #pragma once -#include "euclidean_cluster/euclidean_cluster_interface.hpp" -#include "euclidean_cluster/utils.hpp" +#include "autoware/euclidean_cluster/euclidean_cluster_interface.hpp" +#include "autoware/euclidean_cluster/utils.hpp" #include #include #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { class VoxelGridBasedEuclideanCluster : public EuclideanClusterInterface { @@ -52,4 +52,4 @@ class VoxelGridBasedEuclideanCluster : public EuclideanClusterInterface int min_points_number_per_voxel_; }; -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster diff --git a/perception/euclidean_cluster/launch/euclidean_cluster.launch.py b/perception/euclidean_cluster/launch/euclidean_cluster.launch.py index b8d4f61a9cf28..053438a4352b0 100644 --- a/perception/euclidean_cluster/launch/euclidean_cluster.launch.py +++ b/perception/euclidean_cluster/launch/euclidean_cluster.launch.py @@ -49,7 +49,7 @@ def load_composable_node_param(param_path): use_low_height_euclidean_component = ComposableNode( package=pkg, - plugin="euclidean_cluster::EuclideanClusterNode", + plugin="autoware::euclidean_cluster::EuclideanClusterNode", name=AnonName("euclidean_cluster"), remappings=[ ("input", "low_height/pointcloud"), @@ -60,7 +60,7 @@ def load_composable_node_param(param_path): disuse_low_height_euclidean_component = ComposableNode( package=pkg, - plugin="euclidean_cluster::EuclideanClusterNode", + plugin="autoware::euclidean_cluster::EuclideanClusterNode", name=AnonName("euclidean_cluster"), remappings=[ ("input", LaunchConfiguration("input_pointcloud")), diff --git a/perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py b/perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py index 607e1bf30ccaa..0b502b1c43d67 100644 --- a/perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py +++ b/perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py @@ -49,7 +49,7 @@ def load_composable_node_param(param_path): use_low_height_euclidean_component = ComposableNode( package=pkg, namespace=ns, - plugin="euclidean_cluster::VoxelGridBasedEuclideanClusterNode", + plugin="autoware::euclidean_cluster::VoxelGridBasedEuclideanClusterNode", name="euclidean_cluster", remappings=[ ("input", "low_height/pointcloud"), @@ -61,7 +61,7 @@ def load_composable_node_param(param_path): disuse_low_height_euclidean_component = ComposableNode( package=pkg, namespace=ns, - plugin="euclidean_cluster::VoxelGridBasedEuclideanClusterNode", + plugin="autoware::euclidean_cluster::VoxelGridBasedEuclideanClusterNode", name="euclidean_cluster", remappings=[ ("input", LaunchConfiguration("input_pointcloud")), diff --git a/perception/euclidean_cluster/lib/euclidean_cluster.cpp b/perception/euclidean_cluster/lib/euclidean_cluster.cpp index 5ba1b99403280..0481b7e1b742d 100644 --- a/perception/euclidean_cluster/lib/euclidean_cluster.cpp +++ b/perception/euclidean_cluster/lib/euclidean_cluster.cpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "euclidean_cluster/euclidean_cluster.hpp" +#include "autoware/euclidean_cluster/euclidean_cluster.hpp" #include #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { EuclideanCluster::EuclideanCluster() { @@ -93,4 +93,4 @@ bool EuclideanCluster::cluster( return true; } -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster diff --git a/perception/euclidean_cluster/lib/utils.cpp b/perception/euclidean_cluster/lib/utils.cpp index 6d119ef3d01aa..624c838ef0647 100644 --- a/perception/euclidean_cluster/lib/utils.cpp +++ b/perception/euclidean_cluster/lib/utils.cpp @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "euclidean_cluster/utils.hpp" +#include "autoware/euclidean_cluster/utils.hpp" #include #include @@ -19,7 +19,7 @@ #include #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { geometry_msgs::msg::Point getCentroid(const sensor_msgs::msg::PointCloud2 & pointcloud) { @@ -128,4 +128,4 @@ void convertObjectMsg2SensorMsg( output.height = 1; output.is_dense = false; } -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster diff --git a/perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp b/perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp index 126f877afddb0..096de3dc1b296 100644 --- a/perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp +++ b/perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" +#include "autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" #include #include #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { VoxelGridBasedEuclideanCluster::VoxelGridBasedEuclideanCluster() { @@ -166,4 +166,4 @@ bool VoxelGridBasedEuclideanCluster::cluster( return true; } -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster diff --git a/perception/euclidean_cluster/src/euclidean_cluster_node.cpp b/perception/euclidean_cluster/src/euclidean_cluster_node.cpp index f986b0334935f..b0b9448dfc0c4 100644 --- a/perception/euclidean_cluster/src/euclidean_cluster_node.cpp +++ b/perception/euclidean_cluster/src/euclidean_cluster_node.cpp @@ -14,11 +14,11 @@ #include "euclidean_cluster_node.hpp" -#include "euclidean_cluster/utils.hpp" +#include "autoware/euclidean_cluster/utils.hpp" #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { EuclideanClusterNode::EuclideanClusterNode(const rclcpp::NodeOptions & options) : Node("euclidean_cluster_node", options) @@ -86,8 +86,8 @@ void EuclideanClusterNode::onPointCloud( } } -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster #include -RCLCPP_COMPONENTS_REGISTER_NODE(euclidean_cluster::EuclideanClusterNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::euclidean_cluster::EuclideanClusterNode) diff --git a/perception/euclidean_cluster/src/euclidean_cluster_node.hpp b/perception/euclidean_cluster/src/euclidean_cluster_node.hpp index 92f10696d17dc..5ab48abb4f042 100644 --- a/perception/euclidean_cluster/src/euclidean_cluster_node.hpp +++ b/perception/euclidean_cluster/src/euclidean_cluster_node.hpp @@ -14,7 +14,7 @@ #pragma once -#include "euclidean_cluster/euclidean_cluster.hpp" +#include "autoware/euclidean_cluster/euclidean_cluster.hpp" #include #include @@ -26,7 +26,8 @@ #include #include -namespace euclidean_cluster + +namespace autoware::euclidean_cluster { class EuclideanClusterNode : public rclcpp::Node { @@ -45,4 +46,4 @@ class EuclideanClusterNode : public rclcpp::Node std::unique_ptr debug_publisher_; }; -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster diff --git a/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.cpp b/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.cpp index e9425095a3b0d..e54c55e4873ee 100644 --- a/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.cpp +++ b/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.cpp @@ -14,11 +14,11 @@ #include "voxel_grid_based_euclidean_cluster_node.hpp" -#include "euclidean_cluster/utils.hpp" +#include "autoware/euclidean_cluster/utils.hpp" #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { VoxelGridBasedEuclideanClusterNode::VoxelGridBasedEuclideanClusterNode( const rclcpp::NodeOptions & options) @@ -89,8 +89,8 @@ void VoxelGridBasedEuclideanClusterNode::onPointCloud( } } -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster #include -RCLCPP_COMPONENTS_REGISTER_NODE(euclidean_cluster::VoxelGridBasedEuclideanClusterNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::euclidean_cluster::VoxelGridBasedEuclideanClusterNode) diff --git a/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.hpp b/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.hpp index b0c5d0e5a7fbf..b48e30b37de04 100644 --- a/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.hpp +++ b/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.hpp @@ -14,7 +14,7 @@ #pragma once -#include "euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" +#include "autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" #include #include @@ -26,7 +26,7 @@ #include -namespace euclidean_cluster +namespace autoware::euclidean_cluster { class VoxelGridBasedEuclideanClusterNode : public rclcpp::Node { @@ -45,4 +45,4 @@ class VoxelGridBasedEuclideanClusterNode : public rclcpp::Node std::unique_ptr debug_publisher_; }; -} // namespace euclidean_cluster +} // namespace autoware::euclidean_cluster diff --git a/perception/image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp b/perception/image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp index 7f19402d9e565..904e66cb53298 100644 --- a/perception/image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp @@ -25,7 +25,7 @@ #include #endif -#include "euclidean_cluster/utils.hpp" +#include "autoware/euclidean_cluster/utils.hpp" namespace image_projection_based_fusion { @@ -68,7 +68,7 @@ void RoiPointCloudFusionNode::postprocess( // publish debug cluster if (cluster_debug_pub_->get_subscription_count() > 0) { sensor_msgs::msg::PointCloud2 debug_cluster_msg; - euclidean_cluster::convertObjectMsg2SensorMsg(output_msg, debug_cluster_msg); + autoware::euclidean_cluster::convertObjectMsg2SensorMsg(output_msg, debug_cluster_msg); cluster_debug_pub_->publish(debug_cluster_msg); } } From 93aea0b56cc53ac0be2252f309fcc4cb02cc4adc Mon Sep 17 00:00:00 2001 From: Satoshi Tanaka <16330533+scepter914@users.noreply.github.com> Date: Tue, 9 Jul 2024 13:42:29 +0900 Subject: [PATCH 108/306] chore(radar_object_tracker): delete maintainer (#7898) Signed-off-by: scepter914 --- perception/radar_object_tracker/package.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/perception/radar_object_tracker/package.xml b/perception/radar_object_tracker/package.xml index 79ae0385d4b5e..f104e2d7ea456 100644 --- a/perception/radar_object_tracker/package.xml +++ b/perception/radar_object_tracker/package.xml @@ -6,7 +6,6 @@ Do tracking radar object Yoshi Ri Yukihiro Saito - Satoshi Tanaka Taekjin Lee Apache License 2.0 From 2875b51ef464f0a6a18977f35705f5f293b904ba Mon Sep 17 00:00:00 2001 From: Esteve Fernandez <33620+esteve@users.noreply.github.com> Date: Tue, 9 Jul 2024 07:45:46 +0200 Subject: [PATCH 109/306] chore(autoware_behavior_velocity_planner): remove no_prefix function from tests (#7589) Signed-off-by: Esteve Fernandez --- .../test/src/test_node_interface.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp index 3482d7be8ec48..cc2f4bf3b96b4 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner/test/src/test_node_interface.cpp @@ -54,7 +54,6 @@ std::shared_ptr generateNode() const auto velocity_smoother_dir = ament_index_cpp::get_package_share_directory("autoware_velocity_smoother"); - // TODO(esteve): delete when all the modules are migrated to autoware_behavior_velocity_* const auto get_behavior_velocity_module_config = [](const std::string & module) { const auto package_name = "autoware_behavior_velocity_" + module + "_module"; const auto package_path = ament_index_cpp::get_package_share_directory(package_name); From 6e353ae7d9afc6f9c5cf49594658478000a56eee Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Tue, 9 Jul 2024 15:02:25 +0900 Subject: [PATCH 110/306] fix(euclidean_cluster): include autoware_universe_utils headers (#7908) fix: include autoware_universe_utils headers instead of compare_map_segmentation package Signed-off-by: Taekjin LEE --- perception/euclidean_cluster/package.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/euclidean_cluster/package.xml b/perception/euclidean_cluster/package.xml index c5cdd9c54b988..2644786ead061 100644 --- a/perception/euclidean_cluster/package.xml +++ b/perception/euclidean_cluster/package.xml @@ -12,7 +12,7 @@ autoware_cmake autoware_perception_msgs - compare_map_segmentation + autoware_universe_utils geometry_msgs libpcl-all-dev pcl_conversions From 0e9201e070a2c5c705f5894e9b5983d33c4420e7 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Tue, 9 Jul 2024 18:46:05 +0900 Subject: [PATCH 111/306] feat(autonomous_emergency_braking): add virtual stop wall to aeb (#7894) * add virtual stop wall to aeb Signed-off-by: Daniel Sanchez * add maintainer Signed-off-by: Daniel Sanchez * add uppercase Signed-off-by: Daniel Sanchez * use motion utils function instead of shiftPose Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .github/CODEOWNERS | 2 +- .../README.md | 1 + .../autonomous_emergency_braking.param.yaml | 1 + .../autonomous_emergency_braking/node.hpp | 1 + .../autonomous_emergency_braking/utils.hpp | 2 - .../package.xml | 1 + .../src/node.cpp | 38 ++++++++++++++++++- 7 files changed, 41 insertions(+), 5 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0fe324f84f81a..ed496d7b7ba74 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -45,7 +45,7 @@ common/time_utils/** christopherj.ho@gmail.com shumpei.wakabayashi@tier4.jp tomo common/traffic_light_recognition_marker_publisher/** shumpei.wakabayashi@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp common/traffic_light_utils/** kotaro.uetake@tier4.jp satoshi.ota@tier4.jp shunsuke.miura@tier4.jp common/tvm_utility/** ambroise.vincent@arm.com xinyu.wang@tier4.jp -control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp +control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp kyoichi.sugahara@tier4.jp control/autoware_control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/autoware_external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/autoware_joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp diff --git a/control/autoware_autonomous_emergency_braking/README.md b/control/autoware_autonomous_emergency_braking/README.md index f040235f3f052..db27ca1b4f699 100644 --- a/control/autoware_autonomous_emergency_braking/README.md +++ b/control/autoware_autonomous_emergency_braking/README.md @@ -192,6 +192,7 @@ When vehicle odometry information is faulty, it is possible that the MPC fails t | Name | Unit | Type | Description | Default value | | :-------------------------------- | :----- | :----- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------ | +| publish_debug_markers | [-] | bool | flag to publish debug markers | true | | publish_debug_pointcloud | [-] | bool | flag to publish the point cloud used for debugging | false | | use_predicted_trajectory | [-] | bool | flag to use the predicted path from the control module | true | | use_imu_path | [-] | bool | flag to use the predicted path generated by sensor data | true | diff --git a/control/autoware_autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml b/control/autoware_autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml index 482ddc50766f8..25db9448f758b 100644 --- a/control/autoware_autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml +++ b/control/autoware_autonomous_emergency_braking/config/autonomous_emergency_braking.param.yaml @@ -14,6 +14,7 @@ # Debug publish_debug_pointcloud: false + publish_debug_markers: true # Point cloud partitioning detection_range_min_height: 0.0 diff --git a/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/node.hpp b/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/node.hpp index f6df46440d841..9fd6d0192439c 100644 --- a/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/node.hpp +++ b/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/node.hpp @@ -329,6 +329,7 @@ class AEB : public rclcpp::Node // member variables bool publish_debug_pointcloud_; + bool publish_debug_markers_; bool use_predicted_trajectory_; bool use_imu_path_; bool use_pointcloud_data_; diff --git a/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/utils.hpp b/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/utils.hpp index 4a6bc0ce2c11f..d2ec1763ca4dd 100644 --- a/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/utils.hpp +++ b/control/autoware_autonomous_emergency_braking/include/autoware/autonomous_emergency_braking/utils.hpp @@ -33,8 +33,6 @@ #include #endif -#include - namespace autoware::motion::control::autonomous_emergency_braking::utils { using autoware::universe_utils::Polygon2d; diff --git a/control/autoware_autonomous_emergency_braking/package.xml b/control/autoware_autonomous_emergency_braking/package.xml index c822adb510805..0c64b9498486a 100644 --- a/control/autoware_autonomous_emergency_braking/package.xml +++ b/control/autoware_autonomous_emergency_braking/package.xml @@ -8,6 +8,7 @@ Tomoya Kimura Mamoru Sobue Daniel Sanchez + Kyoichi Sugahara Apache License 2.0 diff --git a/control/autoware_autonomous_emergency_braking/src/node.cpp b/control/autoware_autonomous_emergency_braking/src/node.cpp index fb0fc2d043cc5..69bedd02d201b 100644 --- a/control/autoware_autonomous_emergency_braking/src/node.cpp +++ b/control/autoware_autonomous_emergency_braking/src/node.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -41,7 +42,9 @@ #include #include +#include #include +#include #ifdef ROS_DISTRO_GALACTIC #include #include @@ -131,6 +134,7 @@ AEB::AEB(const rclcpp::NodeOptions & node_options) } // parameter publish_debug_pointcloud_ = declare_parameter("publish_debug_pointcloud"); + publish_debug_markers_ = declare_parameter("publish_debug_markers"); use_predicted_trajectory_ = declare_parameter("use_predicted_trajectory"); use_imu_path_ = declare_parameter("use_imu_path"); use_pointcloud_data_ = declare_parameter("use_pointcloud_data"); @@ -182,6 +186,7 @@ rcl_interfaces::msg::SetParametersResult AEB::onParameter( { using autoware::universe_utils::updateParam; updateParam(parameters, "publish_debug_pointcloud", publish_debug_pointcloud_); + updateParam(parameters, "publish_debug_markers", publish_debug_markers_); updateParam(parameters, "use_predicted_trajectory", use_predicted_trajectory_); updateParam(parameters, "use_imu_path", use_imu_path_); updateParam(parameters, "use_pointcloud_data", use_pointcloud_data_); @@ -378,7 +383,9 @@ void AEB::onCheckCollision(DiagnosticStatusWrapper & stat) stat.addf("RSS", "%.2f", data.rss); stat.addf("Distance", "%.2f", data.distance_to_object); stat.addf("Object Speed", "%.2f", data.velocity); - addCollisionMarker(data, debug_markers); + if (publish_debug_markers_) { + addCollisionMarker(data, debug_markers); + } } else { const std::string error_msg = "[AEB]: No Collision"; const auto diag_level = DiagnosticStatus::OK; @@ -455,7 +462,7 @@ bool AEB::checkCollision(MarkerArray & debug_markers) }); // Add debug markers - { + if (publish_debug_markers_) { const auto [color_r, color_g, color_b, color_a] = debug_colors; addMarker( this->get_clock()->now(), path, ego_polys, objects, closest_object_point, color_r, color_g, @@ -896,6 +903,33 @@ void AEB::addCollisionMarker(const ObjectData & data, MarkerArray & debug_marker autoware::universe_utils::createMarkerColor(1.0, 0.0, 0.0, 0.3)); point_marker.pose.position = data.position; debug_markers.markers.push_back(point_marker); + + const auto ego_map_pose = std::invoke([this]() -> std::optional { + geometry_msgs::msg::TransformStamped tf_current_pose; + geometry_msgs::msg::Pose p; + try { + tf_current_pose = tf_buffer_.lookupTransform( + "map", "base_link", rclcpp::Time(0), rclcpp::Duration::from_seconds(1.0)); + } catch (tf2::TransformException & ex) { + RCLCPP_ERROR(get_logger(), "%s", ex.what()); + return std::nullopt; + } + + p.orientation = tf_current_pose.transform.rotation; + p.position.x = tf_current_pose.transform.translation.x; + p.position.y = tf_current_pose.transform.translation.y; + p.position.z = tf_current_pose.transform.translation.z; + return std::make_optional(p); + }); + + if (ego_map_pose.has_value()) { + const double base_to_front_offset = vehicle_info_.max_longitudinal_offset_m; + const auto ego_front_pose = autoware::universe_utils::calcOffsetPose( + ego_map_pose.value(), base_to_front_offset, 0.0, 0.0, 0.0); + const auto virtual_stop_wall = autoware::motion_utils::createStopVirtualWallMarker( + ego_front_pose, "autonomous_emergency_braking", this->now(), 0); + autoware::universe_utils::appendMarkerArray(virtual_stop_wall, &debug_markers); + } } } // namespace autoware::motion::control::autonomous_emergency_braking From 1afa2c44335e495b92cae26fa02eeb7b29e6d4ea Mon Sep 17 00:00:00 2001 From: Keisuke Shima <19993104+KeisukeShima@users.noreply.github.com> Date: Tue, 9 Jul 2024 18:47:11 +0900 Subject: [PATCH 112/306] docs(goal_planner): update parameter description (#7889) * docs(goal_planner): update parameter description Signed-off-by: Keisuke Shima <19993104+KeisukeShima@users.noreply.github.com> * style(pre-commit): autofix Signed-off-by: Keisuke Shima <19993104+KeisukeShima@users.noreply.github.com> --------- Signed-off-by: Keisuke Shima <19993104+KeisukeShima@users.noreply.github.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../README.md | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md index 3e155aba0af2e..014aaf6db6657 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/README.md @@ -173,20 +173,19 @@ The gray numbers represent objects to avoid, and you can see that the goal in fr ### Parameters for goal search -| Name | Unit | Type | Description | Default value | -| :------------------------------ | :--- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------- | -| goal_priority | [-] | string | In case `minimum_longitudinal_distance`, sort with smaller longitudinal distances taking precedence over smaller lateral distances. In case `minimum_weighted_distance`, sort with the sum of weighted lateral distance and longitudinal distance | `minimum_weighted_distance` | -| lateral_weight | [-] | double | Weight for lateral distance used when `minimum_weighted_distance` | 40.0 | -| prioritize_goals_before_objects | [-] | bool | If there are objects that may need to be avoided, prioritize the goal in front of them | true | -| forward_goal_search_length | [m] | double | length of forward range to be explored from the original goal | 20.0 | -| backward_goal_search_length | [m] | double | length of backward range to be explored from the original goal | 20.0 | -| goal_search_interval | [m] | double | distance interval for goal search | 2.0 | -| longitudinal_margin | [m] | double | margin between ego-vehicle at the goal position and obstacles | 3.0 | -| max_lateral_offset | [m] | double | maximum offset of goal search in the lateral direction | 0.5 | -| lateral_offset_interval | [m] | double | distance interval of goal search in the lateral direction | 0.25 | -| ignore_distance_from_lane_start | [m] | double | distance from start of pull over lanes for ignoring goal candidates | 0.0 | -| ignore_distance_from_lane_start | [m] | double | distance from start of pull over lanes for ignoring goal candidates | 0.0 | -| margin_from_boundary | [m] | double | distance margin from edge of the shoulder lane | 0.5 | +| Name | Unit | Type | Description | Default value | +| :------------------------------ | :--- | :----- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------- | +| goal_priority | [-] | string | In case `minimum_longitudinal_distance`, sort with smaller longitudinal distances taking precedence over smaller lateral distances. In case `minimum_weighted_distance`, sort with the sum of weighted lateral distance and longitudinal distance | `minimum_weighted_distance` | +| lateral_weight | [-] | double | Weight for lateral distance used when `minimum_weighted_distance` | 40.0 | +| prioritize_goals_before_objects | [-] | bool | If there are objects that may need to be avoided, prioritize the goal in front of them | true | +| forward_goal_search_length | [m] | double | length of forward range to be explored from the original goal | 20.0 | +| backward_goal_search_length | [m] | double | length of backward range to be explored from the original goal | 20.0 | +| goal_search_interval | [m] | double | distance interval for goal search | 2.0 | +| longitudinal_margin | [m] | double | margin between ego-vehicle at the goal position and obstacles | 3.0 | +| max_lateral_offset | [m] | double | maximum offset of goal search in the lateral direction | 0.5 | +| lateral_offset_interval | [m] | double | distance interval of goal search in the lateral direction | 0.25 | +| ignore_distance_from_lane_start | [m] | double | This parameter ensures that the distance between the start of the shoulder lane and the goal is not less than the specified value. It's used to prevent setting goals too close to the beginning of the shoulder lane, which might lead to unsafe or impractical pull-over maneuvers. Increasing this value will force the system to ignore potential goal positions near the start of the shoulder lane, potentially leading to safer and more comfortable pull-over locations. | 0.0 | +| margin_from_boundary | [m] | double | distance margin from edge of the shoulder lane | 0.5 | ## **Pull Over** From 58f2bf613be52a2b63ca237c1c224b5166b2f451 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Tue, 9 Jul 2024 19:07:17 +0900 Subject: [PATCH 113/306] fix(start/goal_planner): fix addition of duplicate segments in calcBeforeShiftedArcLength (#7902) * fix(start/goal_planner): fix addition of duplicate segments in calcBeforeShiftedArcLength Signed-off-by: kosuke55 * Update trajectory.hpp Co-authored-by: Kyoichi Sugahara * Update trajectory.hpp Co-authored-by: Kyoichi Sugahara --------- Signed-off-by: kosuke55 Co-authored-by: Kyoichi Sugahara --- .../motion_utils/trajectory/trajectory.hpp | 49 +++++++++++++------ .../src/trajectory/trajectory.cpp | 12 ++--- .../src/shift_pull_over.cpp | 15 +++++- .../src/shift_pull_out.cpp | 13 ++++- 4 files changed, 63 insertions(+), 26 deletions(-) diff --git a/common/autoware_motion_utils/include/autoware/motion_utils/trajectory/trajectory.hpp b/common/autoware_motion_utils/include/autoware/motion_utils/trajectory/trajectory.hpp index da37d04550f5e..126e66772920a 100644 --- a/common/autoware_motion_utils/include/autoware/motion_utils/trajectory/trajectory.hpp +++ b/common/autoware_motion_utils/include/autoware/motion_utils/trajectory/trajectory.hpp @@ -991,34 +991,51 @@ calcCurvature>( * curvature calculation */ template -std::vector> calcCurvatureAndArcLength(const T & points) +std::vector>> calcCurvatureAndSegmentLength( + const T & points) { - // Note that arclength is for the segment, not the sum. - std::vector> curvature_arc_length_vec; - curvature_arc_length_vec.emplace_back(0.0, 0.0); + // segment length is pair of segment length between {p1, p2} and {p2, p3} + std::vector>> curvature_and_segment_length_vec; + curvature_and_segment_length_vec.reserve(points.size()); + curvature_and_segment_length_vec.emplace_back(0.0, std::make_pair(0.0, 0.0)); for (size_t i = 1; i < points.size() - 1; ++i) { const auto p1 = autoware::universe_utils::getPoint(points.at(i - 1)); const auto p2 = autoware::universe_utils::getPoint(points.at(i)); const auto p3 = autoware::universe_utils::getPoint(points.at(i + 1)); const double curvature = autoware::universe_utils::calcCurvature(p1, p2, p3); - const double arc_length = - autoware::universe_utils::calcDistance2d(points.at(i - 1), points.at(i)) + - autoware::universe_utils::calcDistance2d(points.at(i), points.at(i + 1)); - curvature_arc_length_vec.emplace_back(curvature, arc_length); + + // The first point has only the next point, so put the distance to that point. + // In other words, assign the first segment length at the second point to the + // second_segment_length at the first point. + if (i == 1) { + curvature_and_segment_length_vec.at(0).second.second = + autoware::universe_utils::calcDistance2d(p1, p2); + } + + // The second_segment_length of the previous point and the first segment length of the current + // point are equal. + const std::pair arc_length{ + curvature_and_segment_length_vec.back().second.second, + autoware::universe_utils::calcDistance2d(p2, p3)}; + + curvature_and_segment_length_vec.emplace_back(curvature, arc_length); } - curvature_arc_length_vec.emplace_back(0.0, 0.0); - return curvature_arc_length_vec; + // set to the last point + curvature_and_segment_length_vec.emplace_back( + 0.0, std::make_pair(curvature_and_segment_length_vec.back().second.second, 0.0)); + + return curvature_and_segment_length_vec; } -extern template std::vector> -calcCurvatureAndArcLength>( +extern template std::vector>> +calcCurvatureAndSegmentLength>( const std::vector & points); -extern template std::vector> -calcCurvatureAndArcLength>( +extern template std::vector>> +calcCurvatureAndSegmentLength>( const std::vector & points); -extern template std::vector> -calcCurvatureAndArcLength>( +extern template std::vector>> +calcCurvatureAndSegmentLength>( const std::vector & points); /** diff --git a/common/autoware_motion_utils/src/trajectory/trajectory.cpp b/common/autoware_motion_utils/src/trajectory/trajectory.cpp index 5d536c0772fea..ce26952c3d634 100644 --- a/common/autoware_motion_utils/src/trajectory/trajectory.cpp +++ b/common/autoware_motion_utils/src/trajectory/trajectory.cpp @@ -238,14 +238,14 @@ calcCurvature>( const std::vector & points); // -template std::vector> -calcCurvatureAndArcLength>( +template std::vector>> +calcCurvatureAndSegmentLength>( const std::vector & points); -template std::vector> -calcCurvatureAndArcLength>( +template std::vector>> +calcCurvatureAndSegmentLength>( const std::vector & points); -template std::vector> -calcCurvatureAndArcLength>( +template std::vector>> +calcCurvatureAndSegmentLength>( const std::vector & points); // diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/shift_pull_over.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/shift_pull_over.cpp index 3d2bf9500bc78..9570621f0f717 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/shift_pull_over.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/shift_pull_over.cpp @@ -308,8 +308,19 @@ double ShiftPullOver::calcBeforeShiftedArcLength( double before_arc_length{0.0}; double after_arc_length{0.0}; - for (const auto & [k, segment_length] : - autoware::motion_utils::calcCurvatureAndArcLength(reversed_path.points)) { + + const auto curvature_and_segment_length = + autoware::motion_utils::calcCurvatureAndSegmentLength(reversed_path.points); + + for (size_t i = 0; i < curvature_and_segment_length.size(); ++i) { + const auto & [k, segment_length_pair] = curvature_and_segment_length[i]; + + // If it is the last point, add the lengths of the previous and next segments. + // For other points, only add the length of the previous segment. + const double segment_length = i == curvature_and_segment_length.size() - 1 + ? segment_length_pair.first + : segment_length_pair.first + segment_length_pair.second; + // after shifted segment length const double after_segment_length = k > 0 ? segment_length * (1 + k * dr) : segment_length / (1 - k * dr); diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/shift_pull_out.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/shift_pull_out.cpp index 7c78f62192105..f1e0f8abb2395 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/shift_pull_out.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/shift_pull_out.cpp @@ -423,8 +423,17 @@ double ShiftPullOut::calcBeforeShiftedArcLength( double before_arc_length{0.0}; double after_arc_length{0.0}; - for (const auto & [k, segment_length] : - autoware::motion_utils::calcCurvatureAndArcLength(path.points)) { + const auto curvatures_and_segment_lengths = + autoware::motion_utils::calcCurvatureAndSegmentLength(path.points); + for (size_t i = 0; i < curvatures_and_segment_lengths.size(); ++i) { + const auto & [k, segment_length_pair] = curvatures_and_segment_lengths.at(i); + + // If it is the last point, add the lengths of the previous and next segments. + // For other points, only add the length of the previous segment. + const double segment_length = i == curvatures_and_segment_lengths.size() - 1 + ? segment_length_pair.first + segment_length_pair.second + : segment_length_pair.first; + // after shifted segment length const double after_segment_length = k < 0 ? segment_length * (1 - k * dr) : segment_length / (1 + k * dr); From ce71e7fea11ea5f1334e0e3c1e63f87677421374 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Tue, 9 Jul 2024 19:55:42 +0900 Subject: [PATCH 114/306] fix(frenet_planner): fix mistake in the curvature calculation (#7920) Signed-off-by: Maxime CLEMENT --- .../lane_driving/motion_planning/motion_planning.launch.xml | 1 + .../src/frenet_planner/frenet_planner.cpp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml index d0c34ea01b2c6..63353459fa16c 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/motion_planning/motion_planning.launch.xml @@ -90,6 +90,7 @@ + diff --git a/planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/frenet_planner.cpp b/planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/frenet_planner.cpp index 1f05fc93138a2..1e04db2a17eee 100644 --- a/planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/frenet_planner.cpp +++ b/planning/sampling_based_planner/autoware_frenet_planner/src/frenet_planner/frenet_planner.cpp @@ -1,4 +1,4 @@ -// Copyright 2023 Tier IV, Inc. +// Copyright 2023-2024 Tier IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -186,7 +186,7 @@ void calculateCartesian( for (size_t i = 1; i < path.yaws.size(); ++i) { const auto dyaw = autoware::common::helper_functions::wrap_angle(path.yaws[i] - path.yaws[i - 1]); - path.curvatures.push_back(dyaw / (path.lengths[i - 1], path.lengths[i])); + path.curvatures.push_back(dyaw / (path.lengths[i] - path.lengths[i - 1])); } path.curvatures.push_back(path.curvatures.back()); } From d8d3830f11b15bd9b796b3bc53dab534450141ce Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Tue, 9 Jul 2024 21:02:02 +0900 Subject: [PATCH 115/306] fix(pointcloud_preprocessor): fix distortion corrector unit test (#7833) * fix: use pointcloud iterator instead of memcpy, remove reinterpret cast Signed-off-by: vividf * chore: set default debugging parameter to false Signed-off-by: vividf * style(pre-commit): autofix * chore: run precommit Signed-off-by: vividf * chore: fix TIER IV name Signed-off-by: vividf * chore: changed public variables to protected and add getters Signed-off-by: vividf * chore: add tolerance Signed-off-by: vividf * feat: add two tests for pure linear and rotation Signed-off-by: vividf * chore: change naming, fix tolerance value Signed-off-by: vividf * chore: add comment for quat Signed-off-by: vividf * fix: remove node_->get_clock() and use self-defined timestamp Signed-off-by: vividf * chore: remove redundant parameters Signed-off-by: vividf * chore: fix spell error and add tests in cmake Signed-off-by: vividf * chore: move all clock->now() to self-defined time Signed-off-by: vividf * chore: change function names Signed-off-by: vividf * chore: remove irrelevant variable Signed-off-by: vividf * chore: fix variables naming Signed-off-by: vividf * chore: change boolen naming: generate_points Signed-off-by: vividf * chore: add assert to make sure ms is not larger than a second Signed-off-by: vividf * chore: add note Signed-off-by: vividf * chore: add unifore initialization and semantic meaning for magic number Signed-off-by: vividf * chore: change vector to Eigen Signed-off-by: vividf * chore: fix explanation Signed-off-by: vividf * chore: fix more eigen Signed-off-by: vividf * chore: fix more magic numbers Signed-off-by: vividf * chore: add unit Signed-off-by: vividf * fix: use assert from gtest Signed-off-by: vividf --------- Signed-off-by: vividf Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Kenzo Lobos Tsunekawa --- .../pointcloud_preprocessor/CMakeLists.txt | 4 + .../distortion_corrector.hpp | 9 + .../distortion_corrector.cpp | 29 +- .../test/test_distortion_corrector_node.cpp | 904 ++++++++++++++++++ 4 files changed, 945 insertions(+), 1 deletion(-) create mode 100644 sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp diff --git a/sensing/pointcloud_preprocessor/CMakeLists.txt b/sensing/pointcloud_preprocessor/CMakeLists.txt index 53b6aae55d47b..2d0649fe43954 100644 --- a/sensing/pointcloud_preprocessor/CMakeLists.txt +++ b/sensing/pointcloud_preprocessor/CMakeLists.txt @@ -231,8 +231,12 @@ if(BUILD_TESTING) ament_add_gtest(test_utilities test/test_utilities.cpp ) + ament_add_gtest(distortion_corrector_node_tests + test/test_distortion_corrector_node.cpp + ) target_link_libraries(test_utilities pointcloud_preprocessor_filter) + target_link_libraries(distortion_corrector_node_tests pointcloud_preprocessor_filter) endif() diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp index 8a7b7c90113da..e37329a9a4cc3 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp @@ -48,6 +48,11 @@ namespace pointcloud_preprocessor class DistortionCorrectorBase { public: + virtual bool pointcloud_transform_exists() = 0; + virtual bool pointcloud_transform_needed() = 0; + virtual std::deque get_twist_queue() = 0; + virtual std::deque get_angular_velocity_queue() = 0; + virtual void processTwistMessage( const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) = 0; virtual void processIMUMessage( @@ -96,6 +101,10 @@ class DistortionCorrector : public DistortionCorrectorBase : node_(node), tf_buffer_(node_->get_clock()), tf_listener_(tf_buffer_) { } + bool pointcloud_transform_exists(); + bool pointcloud_transform_needed(); + std::deque get_twist_queue(); + std::deque get_angular_velocity_queue(); void processTwistMessage( const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) override; diff --git a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp index 8c8752c7e278e..f933d4c6f75d9 100644 --- a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp +++ b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp @@ -20,6 +20,31 @@ namespace pointcloud_preprocessor { + +template +bool DistortionCorrector::pointcloud_transform_exists() +{ + return pointcloud_transform_exists_; +} + +template +bool DistortionCorrector::pointcloud_transform_needed() +{ + return pointcloud_transform_needed_; +} + +template +std::deque DistortionCorrector::get_twist_queue() +{ + return twist_queue_; +} + +template +std::deque DistortionCorrector::get_angular_velocity_queue() +{ + return angular_velocity_queue_; +} + template void DistortionCorrector::processTwistMessage( const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) @@ -349,7 +374,9 @@ inline void DistortionCorrector2D::undistortPointImplementation( theta_ += w * time_offset; baselink_quat_.setValue( 0, 0, autoware::universe_utils::sin(theta_ * 0.5f), - autoware::universe_utils::cos(theta_ * 0.5f)); // baselink_quat.setRPY(0.0, 0.0, theta); + autoware::universe_utils::cos( + theta_ * + 0.5f)); // baselink_quat.setRPY(0.0, 0.0, theta); (Note that the value is slightly different) const float dis = v * time_offset; x_ += dis * autoware::universe_utils::cos(theta_); y_ += dis * autoware::universe_utils::sin(theta_); diff --git a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp new file mode 100644 index 0000000000000..7997aaf43c202 --- /dev/null +++ b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp @@ -0,0 +1,904 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Note: To regenerate the ground truth (GT) for the expected undistorted point cloud values, +// set the "debug_" value to true to display the point cloud values. Then, +// replace the expected values with the newly displayed undistorted point cloud values. +// +// Also, make sure the point stamp, twist stamp, and imu stamp are not identical. +// In the current hardcoded design, timestamp of pointcloud, twist, and imu msg are listed below +// pointcloud (1 msgs, 10points): +// 10.10, 10.11, 10.12, 10.13, 10.14, 10.15, 10.16, 10.17, 10.18, 10.19 +// twist (6msgs): +// 10.095, 10.119, 10.143, 10.167, 10.191, 10.215 +// imu (6msgs): +// 10.09, 10.117, 10.144, 10.171, 10.198, 10.225 + +#include "autoware/universe_utils/math/trigonometry.hpp" +#include "pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" + +#include + +#include +#include +#include +#include +#include + +#include +#include + +#include + +class DistortionCorrectorTest : public ::testing::Test +{ +protected: + void SetUp() override + { + node_ = std::make_shared("test_node"); + distortion_corrector_2d_ = + std::make_shared(node_.get()); + distortion_corrector_3d_ = + std::make_shared(node_.get()); + + // Setup TF + tf_broadcaster_ = std::make_shared(node_); + tf_broadcaster_->sendTransform(generateStaticTransformMsg()); + + // Spin the node for a while to ensure transforms are published + auto start = std::chrono::steady_clock::now(); + auto timeout = std::chrono::seconds(1); + while (std::chrono::steady_clock::now() - start < timeout) { + rclcpp::spin_some(node_); + std::this_thread::sleep_for(std::chrono::milliseconds(10)); + } + } + + void TearDown() override {} + + void checkInput(int ms) { ASSERT_LT(ms, 1000) << "ms should be less than a second."; } + + rclcpp::Time addMilliseconds(rclcpp::Time stamp, int ms) + { + checkInput(ms); + auto ms_in_ns = rclcpp::Duration(0, ms * 1000000); + return stamp + ms_in_ns; + } + + rclcpp::Time subtractMilliseconds(rclcpp::Time stamp, int ms) + { + checkInput(ms); + auto ms_in_ns = rclcpp::Duration(0, ms * 1000000); + return stamp - ms_in_ns; + } + + geometry_msgs::msg::TransformStamped generateTransformMsg( + const std::string & parent_frame, const std::string & child_frame, double x, double y, double z, + double qx, double qy, double qz, double qw) + { + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + geometry_msgs::msg::TransformStamped tf_msg; + tf_msg.header.stamp = timestamp; + tf_msg.header.frame_id = parent_frame; + tf_msg.child_frame_id = child_frame; + tf_msg.transform.translation.x = x; + tf_msg.transform.translation.y = y; + tf_msg.transform.translation.z = z; + tf_msg.transform.rotation.x = qx; + tf_msg.transform.rotation.y = qy; + tf_msg.transform.rotation.z = qz; + tf_msg.transform.rotation.w = qw; + return tf_msg; + } + + std::vector generateStaticTransformMsg() + { + // generate defined transformations + return { + generateTransformMsg("base_link", "lidar_top", 5.0, 5.0, 5.0, 0.683, 0.5, 0.183, 0.499), + generateTransformMsg("base_link", "imu_link", 1.0, 1.0, 3.0, 0.278, 0.717, 0.441, 0.453)}; + } + + std::shared_ptr generateTwistMsg( + double linear_x, double angular_z, rclcpp::Time stamp) + { + auto twist_msg = std::make_shared(); + twist_msg->header.stamp = stamp; + twist_msg->header.frame_id = "base_link"; + twist_msg->twist.twist.linear.x = linear_x; + twist_msg->twist.twist.angular.z = angular_z; + return twist_msg; + } + + std::shared_ptr generateImuMsg( + double angular_vel_x, double angular_vel_y, double angular_vel_z, rclcpp::Time stamp) + { + auto imu_msg = std::make_shared(); + imu_msg->header.stamp = stamp; + imu_msg->header.frame_id = "imu_link"; + imu_msg->angular_velocity.x = angular_vel_x; + imu_msg->angular_velocity.y = angular_vel_y; + imu_msg->angular_velocity.z = angular_vel_z; + return imu_msg; + } + + std::vector> generateTwistMsgs( + rclcpp::Time pointcloud_timestamp) + { + std::vector> twist_msgs; + rclcpp::Time twist_stamp = subtractMilliseconds(pointcloud_timestamp, 5); + + for (int i = 0; i < number_of_twist_msgs_; ++i) { + auto twist_msg = generateTwistMsg( + twist_linear_x_ + i * twist_linear_x_increment_, + twist_angular_z_ + i * twist_angular_z_increment_, twist_stamp); + twist_msgs.push_back(twist_msg); + + twist_stamp = addMilliseconds(twist_stamp, twist_msgs_interval_ms_); + } + + return twist_msgs; + } + + std::vector> generateImuMsgs( + rclcpp::Time pointcloud_timestamp) + { + std::vector> imu_msgs; + rclcpp::Time imu_stamp = subtractMilliseconds(pointcloud_timestamp, 10); + + for (int i = 0; i < number_of_imu_msgs_; ++i) { + auto imu_msg = generateImuMsg( + imu_angular_x_ + i * imu_angular_x_increment_, + imu_angular_y_ + i * imu_angular_y_increment_, + imu_angular_z_ + i * imu_angular_z_increment_, imu_stamp); + imu_msgs.push_back(imu_msg); + imu_stamp = addMilliseconds(imu_stamp, imu_msgs_interval_ms_); + } + + return imu_msgs; + } + + sensor_msgs::msg::PointCloud2 generatePointCloudMsg( + bool generate_points, bool is_lidar_frame, rclcpp::Time stamp) + { + sensor_msgs::msg::PointCloud2 pointcloud_msg; + pointcloud_msg.header.stamp = stamp; + pointcloud_msg.header.frame_id = is_lidar_frame ? "lidar_top" : "base_link"; + pointcloud_msg.height = 1; + pointcloud_msg.is_dense = true; + pointcloud_msg.is_bigendian = false; + + if (generate_points) { + std::array points = {{ + Eigen::Vector3f(10.0f, 0.0f, 0.0f), // point 1 + Eigen::Vector3f(0.0f, 10.0f, 0.0f), // point 2 + Eigen::Vector3f(0.0f, 0.0f, 10.0f), // point 3 + Eigen::Vector3f(20.0f, 0.0f, 0.0f), // point 4 + Eigen::Vector3f(0.0f, 20.0f, 0.0f), // point 5 + Eigen::Vector3f(0.0f, 0.0f, 20.0f), // point 6 + Eigen::Vector3f(30.0f, 0.0f, 0.0f), // point 7 + Eigen::Vector3f(0.0f, 30.0f, 0.0f), // point 8 + Eigen::Vector3f(0.0f, 0.0f, 30.0f), // point 9 + Eigen::Vector3f(10.0f, 10.0f, 10.0f) // point 10 + }}; + + // Generate timestamps for the points + std::vector timestamps = generatePointTimestamps(stamp, number_of_points_); + + sensor_msgs::PointCloud2Modifier modifier(pointcloud_msg); + modifier.setPointCloud2Fields( + 4, "x", 1, sensor_msgs::msg::PointField::FLOAT32, "y", 1, + sensor_msgs::msg::PointField::FLOAT32, "z", 1, sensor_msgs::msg::PointField::FLOAT32, + "time_stamp", 1, sensor_msgs::msg::PointField::FLOAT64); + modifier.resize(number_of_points_); + + sensor_msgs::PointCloud2Iterator iter_x(pointcloud_msg, "x"); + sensor_msgs::PointCloud2Iterator iter_y(pointcloud_msg, "y"); + sensor_msgs::PointCloud2Iterator iter_z(pointcloud_msg, "z"); + sensor_msgs::PointCloud2Iterator iter_t(pointcloud_msg, "time_stamp"); + + for (size_t i = 0; i < number_of_points_; ++i) { + *iter_x = points[i].x(); + *iter_y = points[i].y(); + *iter_z = points[i].z(); + *iter_t = timestamps[i]; + ++iter_x; + ++iter_y; + ++iter_z; + ++iter_t; + } + } else { + pointcloud_msg.width = 0; + pointcloud_msg.row_step = 0; + } + + return pointcloud_msg; + } + + std::vector generatePointTimestamps( + rclcpp::Time pointcloud_timestamp, size_t number_of_points) + { + std::vector timestamps; + rclcpp::Time point_stamp = pointcloud_timestamp; + for (size_t i = 0; i < number_of_points; ++i) { + double timestamp = point_stamp.seconds(); + timestamps.push_back(timestamp); + point_stamp = addMilliseconds(point_stamp, points_interval_ms_); + } + + return timestamps; + } + + std::shared_ptr node_; + std::shared_ptr distortion_corrector_2d_; + std::shared_ptr distortion_corrector_3d_; + std::shared_ptr tf_broadcaster_; + + static constexpr float standard_tolerance_{1e-4}; + static constexpr float coarse_tolerance_{5e-3}; + static constexpr int number_of_twist_msgs_{6}; + static constexpr int number_of_imu_msgs_{6}; + static constexpr size_t number_of_points_{10}; + static constexpr int32_t timestamp_seconds_{10}; + static constexpr uint32_t timestamp_nanoseconds_{100000000}; + + static constexpr double twist_linear_x_{10.0}; + static constexpr double twist_angular_z_{0.02}; + static constexpr double twist_linear_x_increment_{2.0}; + static constexpr double twist_angular_z_increment_{0.01}; + + static constexpr double imu_angular_x_{0.01}; + static constexpr double imu_angular_y_{-0.02}; + static constexpr double imu_angular_z_{0.05}; + static constexpr double imu_angular_x_increment_{0.005}; + static constexpr double imu_angular_y_increment_{0.005}; + static constexpr double imu_angular_z_increment_{0.005}; + + static constexpr int points_interval_ms_{10}; + static constexpr int twist_msgs_interval_ms_{24}; + static constexpr int imu_msgs_interval_ms_{27}; + + // for debugging or regenerating the ground truth point cloud + bool debug_{false}; +}; + +TEST_F(DistortionCorrectorTest, TestProcessTwistMessage) +{ + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + auto twist_msg = generateTwistMsg(twist_linear_x_, twist_angular_z_, timestamp); + distortion_corrector_2d_->processTwistMessage(twist_msg); + + ASSERT_FALSE(distortion_corrector_2d_->get_twist_queue().empty()); + EXPECT_EQ(distortion_corrector_2d_->get_twist_queue().front().twist.linear.x, twist_linear_x_); + EXPECT_EQ(distortion_corrector_2d_->get_twist_queue().front().twist.angular.z, twist_angular_z_); +} + +TEST_F(DistortionCorrectorTest, TestProcessIMUMessage) +{ + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + auto imu_msg = generateImuMsg(imu_angular_x_, imu_angular_y_, imu_angular_z_, timestamp); + distortion_corrector_2d_->processIMUMessage("base_link", imu_msg); + + ASSERT_FALSE(distortion_corrector_2d_->get_angular_velocity_queue().empty()); + EXPECT_NEAR( + distortion_corrector_2d_->get_angular_velocity_queue().front().vector.z, -0.03159, + standard_tolerance_); +} + +TEST_F(DistortionCorrectorTest, TestIsInputValid) +{ + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + + // input normal pointcloud without twist + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + bool result = distortion_corrector_2d_->isInputValid(pointcloud); + EXPECT_FALSE(result); + + // input normal pointcloud with valid twist + auto twist_msg = generateTwistMsg(twist_linear_x_, twist_angular_z_, timestamp); + distortion_corrector_2d_->processTwistMessage(twist_msg); + + pointcloud = generatePointCloudMsg(true, false, timestamp); + result = distortion_corrector_2d_->isInputValid(pointcloud); + EXPECT_TRUE(result); + + // input empty pointcloud + pointcloud = generatePointCloudMsg(false, false, timestamp); + result = distortion_corrector_2d_->isInputValid(pointcloud); + EXPECT_FALSE(result); +} + +TEST_F(DistortionCorrectorTest, TestSetPointCloudTransformWithBaseLink) +{ + distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); + EXPECT_TRUE(distortion_corrector_2d_->pointcloud_transform_exists()); + EXPECT_FALSE(distortion_corrector_2d_->pointcloud_transform_needed()); +} + +TEST_F(DistortionCorrectorTest, TestSetPointCloudTransformWithLidarFrame) +{ + distortion_corrector_2d_->setPointCloudTransform("base_link", "lidar_top"); + EXPECT_TRUE(distortion_corrector_2d_->pointcloud_transform_exists()); + EXPECT_TRUE(distortion_corrector_2d_->pointcloud_transform_needed()); +} + +TEST_F(DistortionCorrectorTest, TestSetPointCloudTransformWithMissingFrame) +{ + distortion_corrector_2d_->setPointCloudTransform("base_link", "missing_lidar_frame"); + EXPECT_FALSE(distortion_corrector_2d_->pointcloud_transform_exists()); + EXPECT_FALSE(distortion_corrector_2d_->pointcloud_transform_needed()); +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithEmptyTwist) +{ + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + // Generate the point cloud message + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Process empty twist queue + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->undistortPointCloud(false, pointcloud); + + // Verify the point cloud is not changed + sensor_msgs::PointCloud2ConstIterator iter_x(pointcloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(pointcloud, "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(pointcloud, "z"); + + std::array expected_pointcloud = { + {Eigen::Vector3f(10.0f, 0.0f, 0.0f), Eigen::Vector3f(0.0f, 10.0f, 0.0f), + Eigen::Vector3f(0.0f, 0.0f, 10.0f), Eigen::Vector3f(20.0f, 0.0f, 0.0f), + Eigen::Vector3f(0.0f, 20.0f, 0.0f), Eigen::Vector3f(0.0f, 0.0f, 20.0f), + Eigen::Vector3f(30.0f, 0.0f, 0.0f), Eigen::Vector3f(0.0f, 30.0f, 0.0f), + Eigen::Vector3f(0.0f, 0.0f, 30.0f), Eigen::Vector3f(10.0f, 10.0f, 10.0f)}}; + + size_t i = 0; + std::ostringstream oss; + oss << "Expected pointcloud:\n"; + + for (; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++i) { + oss << "Point " << i << ": (" << *iter_x << ", " << *iter_y << ", " << *iter_z << ")\n"; + EXPECT_NEAR(*iter_x, expected_pointcloud[i].x(), standard_tolerance_); + EXPECT_NEAR(*iter_y, expected_pointcloud[i].y(), standard_tolerance_); + EXPECT_NEAR(*iter_z, expected_pointcloud[i].z(), standard_tolerance_); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithEmptyPointCloud) +{ + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_2d_->processTwistMessage(twist_msg); + } + // Generate an empty point cloud message + sensor_msgs::msg::PointCloud2 empty_pointcloud = generatePointCloudMsg(false, false, timestamp); + + // Process empty point cloud + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->undistortPointCloud(true, empty_pointcloud); + + // Verify the point cloud is still empty + EXPECT_EQ(empty_pointcloud.width, 0); + EXPECT_EQ(empty_pointcloud.row_step, 0); +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud2dWithoutImuInBaseLink) +{ + // Generate the point cloud message + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_2d_->processTwistMessage(twist_msg); + } + + // Test using only twist + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_2d_->undistortPointCloud(false, pointcloud); + + sensor_msgs::PointCloud2ConstIterator iter_x(pointcloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(pointcloud, "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(pointcloud, "z"); + + // Expected undistorted point cloud values + std::array expected_pointcloud = { + {Eigen::Vector3f(10.0f, 0.0f, 0.0f), Eigen::Vector3f(0.117124f, 10.0f, 0.0f), + Eigen::Vector3f(0.26f, 0.000135182f, 10.0f), Eigen::Vector3f(20.4f, 0.0213818f, 0.0f), + Eigen::Vector3f(0.50932f, 20.0005f, 0.0f), Eigen::Vector3f(0.699999f, 0.000819721f, 20.0f), + Eigen::Vector3f(30.8599f, 0.076f, 0.0f), Eigen::Vector3f(0.947959f, 30.0016f, 0.0f), + Eigen::Vector3f(1.22f, 0.00244382f, 30.0f), Eigen::Vector3f(11.3568f, 10.0463f, 10.0f)}}; + + // Verify each point in the undistorted point cloud + size_t i = 0; + std::ostringstream oss; + oss << "Expected pointcloud:\n"; + + for (; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++i) { + oss << "Point " << i << ": (" << *iter_x << ", " << *iter_y << ", " << *iter_z << ")\n"; + EXPECT_NEAR(*iter_x, expected_pointcloud[i].x(), standard_tolerance_); + EXPECT_NEAR(*iter_y, expected_pointcloud[i].y(), standard_tolerance_); + EXPECT_NEAR(*iter_z, expected_pointcloud[i].z(), standard_tolerance_); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud2dWithImuInBaseLink) +{ + // Generate the point cloud message + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_2d_->processTwistMessage(twist_msg); + } + + // Generate and process multiple IMU messages + auto imu_msgs = generateImuMsgs(timestamp); + for (const auto & imu_msg : imu_msgs) { + distortion_corrector_2d_->processIMUMessage("base_link", imu_msg); + } + + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_2d_->undistortPointCloud(true, pointcloud); + + sensor_msgs::PointCloud2ConstIterator iter_x(pointcloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(pointcloud, "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(pointcloud, "z"); + + // Expected undistorted point cloud values + std::array expected_pointcloud = { + {Eigen::Vector3f(10.0f, 0.0f, 0.0f), Eigen::Vector3f(0.122876f, 9.99996f, 0.0f), + Eigen::Vector3f(0.26f, -0.000115049f, 10.0f), Eigen::Vector3f(20.4f, -0.0174931f, 0.0f), + Eigen::Vector3f(0.56301f, 19.9996f, 0.0f), Eigen::Vector3f(0.7f, -0.000627014f, 20.0f), + Eigen::Vector3f(30.86f, -0.052675f, 0.0f), Eigen::Vector3f(1.1004f, 29.9987f, 0.0f), + Eigen::Vector3f(1.22f, -0.00166245f, 30.0f), Eigen::Vector3f(11.4249f, 9.97293f, 10.0f)}}; + + // Verify each point in the undistorted point cloud + size_t i = 0; + std::ostringstream oss; + oss << "Expected pointcloud:\n"; + + for (; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++i) { + oss << "Point " << i << ": (" << *iter_x << ", " << *iter_y << ", " << *iter_z << ")\n"; + EXPECT_NEAR(*iter_x, expected_pointcloud[i].x(), standard_tolerance_); + EXPECT_NEAR(*iter_y, expected_pointcloud[i].y(), standard_tolerance_); + EXPECT_NEAR(*iter_z, expected_pointcloud[i].z(), standard_tolerance_); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud2dWithImuInLidarFrame) +{ + // Generate the point cloud message + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, true, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_2d_->processTwistMessage(twist_msg); + } + + // Generate and process multiple IMU messages + auto imu_msgs = generateImuMsgs(timestamp); + for (const auto & imu_msg : imu_msgs) { + distortion_corrector_2d_->processIMUMessage("base_link", imu_msg); + } + + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->setPointCloudTransform("base_link", "lidar_top"); + distortion_corrector_2d_->undistortPointCloud(true, pointcloud); + + sensor_msgs::PointCloud2ConstIterator iter_x(pointcloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(pointcloud, "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(pointcloud, "z"); + + // Expected undistorted point cloud values + std::array expected_pointcloud = { + {Eigen::Vector3f(10.0f, -1.77636e-15f, -4.44089e-16f), + Eigen::Vector3f(0.049989f, 10.0608f, 0.0924992f), + Eigen::Vector3f(0.106107f, 0.130237f, 10.1986f), + Eigen::Vector3f(20.1709f, 0.210011f, 0.32034f), + Eigen::Vector3f(0.220674f, 20.2734f, 0.417974f), + Eigen::Vector3f(0.274146f, 0.347043f, 20.5341f), + Eigen::Vector3f(30.3673f, 0.457564f, 0.700818f), + Eigen::Vector3f(0.418014f, 30.5259f, 0.807963f), + Eigen::Vector3f(0.464088f, 0.600081f, 30.9292f), + Eigen::Vector3f(10.5657f, 10.7121f, 11.094f)}}; + + // Verify each point in the undistorted point cloud + size_t i = 0; + std::ostringstream oss; + oss << "Expected pointcloud:\n"; + + for (; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++i) { + oss << "Point " << i << ": (" << *iter_x << ", " << *iter_y << ", " << *iter_z << ")\n"; + EXPECT_NEAR(*iter_x, expected_pointcloud[i].x(), standard_tolerance_); + EXPECT_NEAR(*iter_y, expected_pointcloud[i].y(), standard_tolerance_); + EXPECT_NEAR(*iter_z, expected_pointcloud[i].z(), standard_tolerance_); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud3dWithoutImuInBaseLink) +{ + // Generate the point cloud message + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_3d_->processTwistMessage(twist_msg); + } + + // Test using only twist + distortion_corrector_3d_->initialize(); + distortion_corrector_3d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_3d_->undistortPointCloud(false, pointcloud); + + sensor_msgs::PointCloud2ConstIterator iter_x(pointcloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(pointcloud, "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(pointcloud, "z"); + + // Expected undistorted point cloud values + std::array expected_pointcloud = { + {Eigen::Vector3f(10.0f, 0.0f, 0.0f), Eigen::Vector3f(0.117f, 10.0f, 0.0f), + Eigen::Vector3f(0.26f, 9.27035e-05f, 10.0f), Eigen::Vector3f(20.4f, 0.0222176f, 0.0f), + Eigen::Vector3f(0.51f, 20.0004f, 0.0f), Eigen::Vector3f(0.7f, 0.000706573f, 20.0f), + Eigen::Vector3f(30.8599f, 0.0760946f, 0.0f), Eigen::Vector3f(0.946998f, 30.0015f, 0.0f), + Eigen::Vector3f(1.22f, 0.00234201f, 30.0f), Eigen::Vector3f(11.3569f, 10.046f, 10.0f)}}; + + // Verify each point in the undistorted point cloud + size_t i = 0; + std::ostringstream oss; + oss << "Expected pointcloud:\n"; + + for (; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++i) { + oss << "Point " << i << ": (" << *iter_x << ", " << *iter_y << ", " << *iter_z << ")\n"; + EXPECT_NEAR(*iter_x, expected_pointcloud[i].x(), standard_tolerance_); + EXPECT_NEAR(*iter_y, expected_pointcloud[i].y(), standard_tolerance_); + EXPECT_NEAR(*iter_z, expected_pointcloud[i].z(), standard_tolerance_); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud3dWithImuInBaseLink) +{ + // Generate the point cloud message + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_3d_->processTwistMessage(twist_msg); + } + + // Generate and process multiple IMU messages + auto imu_msgs = generateImuMsgs(timestamp); + for (const auto & imu_msg : imu_msgs) { + distortion_corrector_3d_->processIMUMessage("base_link", imu_msg); + } + + distortion_corrector_3d_->initialize(); + distortion_corrector_3d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_3d_->undistortPointCloud(true, pointcloud); + + sensor_msgs::PointCloud2ConstIterator iter_x(pointcloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(pointcloud, "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(pointcloud, "z"); + + // Expected undistorted point cloud values + std::array expected_pointcloud = { + {Eigen::Vector3f(10.0f, 0.0f, 0.0f), Eigen::Vector3f(0.123015f, 9.99998f, 0.00430552f), + Eigen::Vector3f(0.266103f, -0.00895269f, 9.99992f), + Eigen::Vector3f(20.4f, -0.0176539f, -0.0193392f), + Eigen::Vector3f(0.563265f, 19.9997f, 0.035628f), + Eigen::Vector3f(0.734597f, -0.046068f, 19.9993f), + Eigen::Vector3f(30.8599f, -0.0517931f, -0.0658165f), + Eigen::Vector3f(1.0995f, 29.9989f, 0.0956997f), + Eigen::Vector3f(1.31283f, -0.113544f, 29.9977f), + Eigen::Vector3f(11.461f, 9.93096f, 10.0035f)}}; + + // Verify each point in the undistorted point cloud + size_t i = 0; + std::ostringstream oss; + oss << "Expected pointcloud:\n"; + + for (; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++i) { + oss << "Point " << i << ": (" << *iter_x << ", " << *iter_y << ", " << *iter_z << ")\n"; + EXPECT_NEAR(*iter_x, expected_pointcloud[i].x(), standard_tolerance_); + EXPECT_NEAR(*iter_y, expected_pointcloud[i].y(), standard_tolerance_); + EXPECT_NEAR(*iter_z, expected_pointcloud[i].z(), standard_tolerance_); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloud3dWithImuInLidarFrame) +{ + // Generate the point cloud message + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + sensor_msgs::msg::PointCloud2 pointcloud = generatePointCloudMsg(true, true, timestamp); + + // Generate and process multiple twist messages + auto twist_msgs = generateTwistMsgs(timestamp); + for (const auto & twist_msg : twist_msgs) { + distortion_corrector_3d_->processTwistMessage(twist_msg); + } + + // Generate and process multiple IMU messages + auto imu_msgs = generateImuMsgs(timestamp); + for (const auto & imu_msg : imu_msgs) { + distortion_corrector_3d_->processIMUMessage("base_link", imu_msg); + } + + distortion_corrector_3d_->initialize(); + distortion_corrector_3d_->setPointCloudTransform("base_link", "lidar_top"); + distortion_corrector_3d_->undistortPointCloud(true, pointcloud); + + sensor_msgs::PointCloud2ConstIterator iter_x(pointcloud, "x"); + sensor_msgs::PointCloud2ConstIterator iter_y(pointcloud, "y"); + sensor_msgs::PointCloud2ConstIterator iter_z(pointcloud, "z"); + + // Expected undistorted point cloud values + std::array expected_pointcloud = { + {Eigen::Vector3f(10.0f, 0.0f, 0.0f), Eigen::Vector3f(0.046484f, 10.0622f, 0.098484f), + Eigen::Vector3f(0.107595f, 0.123767f, 10.2026f), + Eigen::Vector3f(20.1667f, 0.22465f, 0.313351f), + Eigen::Vector3f(0.201149f, 20.2784f, 0.464665f), + Eigen::Vector3f(0.290531f, 0.303489f, 20.5452f), + Eigen::Vector3f(30.3598f, 0.494116f, 0.672914f), + Eigen::Vector3f(0.375848f, 30.5336f, 0.933633f), + Eigen::Vector3f(0.510001f, 0.479651f, 30.9493f), + Eigen::Vector3f(10.5629f, 10.6855f, 11.1461f)}}; + + // Verify each point in the undistorted point cloud + size_t i = 0; + std::ostringstream oss; + oss << "Expected pointcloud:\n"; + + for (; iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++i) { + oss << "Point " << i << ": (" << *iter_x << ", " << *iter_y << ", " << *iter_z << ")\n"; + EXPECT_NEAR(*iter_x, expected_pointcloud[i].x(), standard_tolerance_); + EXPECT_NEAR(*iter_y, expected_pointcloud[i].y(), standard_tolerance_); + EXPECT_NEAR(*iter_z, expected_pointcloud[i].z(), standard_tolerance_); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithPureLinearMotion) +{ + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + sensor_msgs::msg::PointCloud2 test2d_pointcloud = generatePointCloudMsg(true, false, timestamp); + sensor_msgs::msg::PointCloud2 test3d_pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process a single twist message with constant linear velocity + auto twist_msg = generateTwistMsg(1.0, 0.0, timestamp); + + distortion_corrector_2d_->processTwistMessage(twist_msg); + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_2d_->undistortPointCloud(false, test2d_pointcloud); + + distortion_corrector_3d_->processTwistMessage(twist_msg); + distortion_corrector_3d_->initialize(); + distortion_corrector_3d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_3d_->undistortPointCloud(false, test3d_pointcloud); + + // Generate expected point cloud for testing + sensor_msgs::msg::PointCloud2 expected_pointcloud_msg = + generatePointCloudMsg(true, false, timestamp); + + // Calculate expected point cloud values based on constant linear motion + double velocity = 1.0; // 1 m/s linear velocity + sensor_msgs::PointCloud2Iterator iter_x(expected_pointcloud_msg, "x"); + sensor_msgs::PointCloud2Iterator iter_y(expected_pointcloud_msg, "y"); + sensor_msgs::PointCloud2Iterator iter_z(expected_pointcloud_msg, "z"); + sensor_msgs::PointCloud2Iterator iter_t(expected_pointcloud_msg, "time_stamp"); + + std::vector expected_points; + for (; iter_t != iter_t.end(); ++iter_t, ++iter_x, ++iter_y, ++iter_z) { + double time_offset = *iter_t - timestamp.seconds(); + expected_points.emplace_back( + *iter_x + static_cast(velocity * time_offset), *iter_y, *iter_z); + } + + // Verify each point in the undistorted point cloud + sensor_msgs::PointCloud2Iterator test2d_iter_x(test2d_pointcloud, "x"); + sensor_msgs::PointCloud2Iterator test2d_iter_y(test2d_pointcloud, "y"); + sensor_msgs::PointCloud2Iterator test2d_iter_z(test2d_pointcloud, "z"); + size_t i = 0; + std::ostringstream oss; + oss << "Expected pointcloud:\n"; + + for (; test2d_iter_x != test2d_iter_x.end(); + ++test2d_iter_x, ++test2d_iter_y, ++test2d_iter_z, ++i) { + oss << "Point " << i << ": (" << *test2d_iter_x << ", " << *test2d_iter_y << ", " + << *test2d_iter_z << ")\n"; + EXPECT_FLOAT_EQ(*test2d_iter_x, expected_points[i].x()); + EXPECT_FLOAT_EQ(*test2d_iter_y, expected_points[i].y()); + EXPECT_FLOAT_EQ(*test2d_iter_z, expected_points[i].z()); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } + + // Verify each point in the undistorted 2d point cloud with undistorted 3d point cloud + test2d_iter_x = sensor_msgs::PointCloud2Iterator(test2d_pointcloud, "x"); + test2d_iter_y = sensor_msgs::PointCloud2Iterator(test2d_pointcloud, "y"); + test2d_iter_z = sensor_msgs::PointCloud2Iterator(test2d_pointcloud, "z"); + sensor_msgs::PointCloud2Iterator test3d_iter_x(test3d_pointcloud, "x"); + sensor_msgs::PointCloud2Iterator test3d_iter_y(test3d_pointcloud, "y"); + sensor_msgs::PointCloud2Iterator test3d_iter_z(test3d_pointcloud, "z"); + + i = 0; + oss.str(""); + oss.clear(); + + oss << "Expected pointcloud:\n"; + for (; test2d_iter_x != test2d_iter_x.end(); ++test2d_iter_x, ++test2d_iter_y, ++test2d_iter_z, + ++test3d_iter_x, ++test3d_iter_y, ++test3d_iter_z, + ++i) { + oss << "Point " << i << " - 2D: (" << *test2d_iter_x << ", " << *test2d_iter_y << ", " + << *test2d_iter_z << ")" + << " vs 3D: (" << *test3d_iter_x << ", " << *test3d_iter_y << ", " << *test3d_iter_z + << ")\n"; + EXPECT_FLOAT_EQ(*test2d_iter_x, *test3d_iter_x); + EXPECT_FLOAT_EQ(*test2d_iter_y, *test3d_iter_y); + EXPECT_FLOAT_EQ(*test2d_iter_z, *test3d_iter_z); + } + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } +} + +TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithPureRotationalMotion) +{ + rclcpp::Time timestamp(timestamp_seconds_, timestamp_nanoseconds_, RCL_ROS_TIME); + sensor_msgs::msg::PointCloud2 test2d_pointcloud = generatePointCloudMsg(true, false, timestamp); + sensor_msgs::msg::PointCloud2 test3d_pointcloud = generatePointCloudMsg(true, false, timestamp); + + // Generate and process a single twist message with constant angular velocity + auto twist_msg = generateTwistMsg(0.0, 0.1, timestamp); + + distortion_corrector_2d_->processTwistMessage(twist_msg); + distortion_corrector_2d_->initialize(); + distortion_corrector_2d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_2d_->undistortPointCloud(false, test2d_pointcloud); + + distortion_corrector_3d_->processTwistMessage(twist_msg); + distortion_corrector_3d_->initialize(); + distortion_corrector_3d_->setPointCloudTransform("base_link", "base_link"); + distortion_corrector_3d_->undistortPointCloud(false, test3d_pointcloud); + + // Generate expected point cloud for testing + sensor_msgs::msg::PointCloud2 expected_pointcloud_msg = + generatePointCloudMsg(true, false, timestamp); + + // Calculate expected point cloud values based on constant rotational motion + double angular_velocity = 0.1; // 0.1 rad/s rotational velocity + sensor_msgs::PointCloud2Iterator iter_x(expected_pointcloud_msg, "x"); + sensor_msgs::PointCloud2Iterator iter_y(expected_pointcloud_msg, "y"); + sensor_msgs::PointCloud2Iterator iter_z(expected_pointcloud_msg, "z"); + sensor_msgs::PointCloud2Iterator iter_t(expected_pointcloud_msg, "time_stamp"); + + std::vector expected_pointcloud; + for (; iter_t != iter_t.end(); ++iter_t, ++iter_x, ++iter_y, ++iter_z) { + double time_offset = *iter_t - timestamp.seconds(); + float angle = angular_velocity * time_offset; + + // Set the quaternion for the current angle + tf2::Quaternion quaternion; + quaternion.setValue( + 0, 0, autoware::universe_utils::sin(angle * 0.5f), + autoware::universe_utils::cos(angle * 0.5f)); + + tf2::Vector3 point(*iter_x, *iter_y, *iter_z); + tf2::Vector3 rotated_point = tf2::quatRotate(quaternion, point); + expected_pointcloud.emplace_back( + static_cast(rotated_point.x()), static_cast(rotated_point.y()), + static_cast(rotated_point.z())); + } + + // Verify each point in the undistorted 2D point cloud + sensor_msgs::PointCloud2Iterator test2d_iter_x(test2d_pointcloud, "x"); + sensor_msgs::PointCloud2Iterator test2d_iter_y(test2d_pointcloud, "y"); + sensor_msgs::PointCloud2Iterator test2d_iter_z(test2d_pointcloud, "z"); + + size_t i = 0; + std::ostringstream oss; + oss << "Expected pointcloud:\n"; + + for (; test2d_iter_x != test2d_iter_x.end(); + ++test2d_iter_x, ++test2d_iter_y, ++test2d_iter_z, ++i) { + oss << "Point " << i << ": (" << *test2d_iter_x << ", " << *test2d_iter_y << ", " + << *test2d_iter_z << ")\n"; + EXPECT_FLOAT_EQ(*test2d_iter_x, expected_pointcloud[i].x()); + EXPECT_FLOAT_EQ(*test2d_iter_y, expected_pointcloud[i].y()); + EXPECT_FLOAT_EQ(*test2d_iter_z, expected_pointcloud[i].z()); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } + + // Verify each point in the undistorted 2D point cloud with undistorted 3D point cloud + test2d_iter_x = sensor_msgs::PointCloud2Iterator(test2d_pointcloud, "x"); + test2d_iter_y = sensor_msgs::PointCloud2Iterator(test2d_pointcloud, "y"); + test2d_iter_z = sensor_msgs::PointCloud2Iterator(test2d_pointcloud, "z"); + sensor_msgs::PointCloud2Iterator test3d_iter_x(test3d_pointcloud, "x"); + sensor_msgs::PointCloud2Iterator test3d_iter_y(test3d_pointcloud, "y"); + sensor_msgs::PointCloud2Iterator test3d_iter_z(test3d_pointcloud, "z"); + + i = 0; + oss.str(""); + oss.clear(); + + oss << "Expected pointcloud:\n"; + for (; test2d_iter_x != test2d_iter_x.end(); ++test2d_iter_x, ++test2d_iter_y, ++test2d_iter_z, + ++test3d_iter_x, ++test3d_iter_y, ++test3d_iter_z, + ++i) { + oss << "Point " << i << " - 2D: (" << *test2d_iter_x << ", " << *test2d_iter_y << ", " + << *test2d_iter_z << ")" + << " vs 3D: (" << *test3d_iter_x << ", " << *test3d_iter_y << ", " << *test3d_iter_z + << ")\n"; + EXPECT_NEAR(*test2d_iter_x, *test3d_iter_x, coarse_tolerance_); + EXPECT_NEAR(*test2d_iter_y, *test3d_iter_y, coarse_tolerance_); + EXPECT_NEAR(*test2d_iter_z, *test3d_iter_z, coarse_tolerance_); + } + + if (debug_) { + RCLCPP_INFO(node_->get_logger(), "%s", oss.str().c_str()); + } +} + +int main(int argc, char ** argv) +{ + ::testing::InitGoogleTest(&argc, argv); + rclcpp::init(argc, argv); + int ret = RUN_ALL_TESTS(); + rclcpp::shutdown(); + return ret; +} From 23cf5154304633da3bf945cf0081fa6ce6ec9eb0 Mon Sep 17 00:00:00 2001 From: Kenzo Lobos Tsunekawa Date: Tue, 9 Jul 2024 22:17:40 +0900 Subject: [PATCH 116/306] feat: migrating pointcloud types (#6996) * feat: changed most of sensing to the new type Signed-off-by: Kenzo Lobos-Tsunekawa * chore: started applying changes to the perception stack Signed-off-by: Kenzo Lobos-Tsunekawa * feat: confirmed operation until centerpoint Signed-off-by: Kenzo Lobos-Tsunekawa * feat: reverted to the original implementation of pointpainting Signed-off-by: Kenzo Lobos-Tsunekawa * chore: forgot to push a header Signed-off-by: Kenzo Lobos-Tsunekawa * feat: also implemented the changes for the subsample filters that were out of scope before Signed-off-by: Kenzo Lobos-Tsunekawa * fix: some point type changes were missing from the latest merge from main Signed-off-by: Kenzo Lobos-Tsunekawa * chore: removed unused code, added comments, and brought back a removed publish Signed-off-by: Kenzo Lobos-Tsunekawa * chore: replaced pointcloud_raw for pointcloud_raw_ex to avoid extra processing time in the drivers Signed-off-by: Kenzo Lobos-Tsunekawa * feat: added memory layout checks Signed-off-by: Kenzo Lobos-Tsunekawa * chore: updated documentation regarding the point types Signed-off-by: Kenzo Lobos-Tsunekawa * chore: added hyperlinks to the point definitions. will be valid only once the PR is merged Signed-off-by: Kenzo Lobos-Tsunekawa * fix: fixed compilation due to moving the utilities files to the base library Signed-off-by: Kenzo Lobos-Tsunekawa * chore: separated the utilities functions due to a dependency issue * chore: forgot that perception also uses the filter class Signed-off-by: Kenzo Lobos-Tsunekawa * feature: adapted the undistortion tests to the new point type Signed-off-by: Kenzo Lobos-Tsunekawa --------- Signed-off-by: Kenzo Lobos-Tsunekawa Co-authored-by: kminoda <44218668+kminoda@users.noreply.github.com> Co-authored-by: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> --- .../include/autoware_point_types/types.hpp | 91 +++++++- .../test/test_point_types.cpp | 9 + .../traffic_light.launch.xml | 2 +- .../src/scan_ground_filter/node.cpp | 4 +- .../src/scan_ground_filter/node.hpp | 1 + .../src/pointpainting_fusion/node.cpp | 6 +- .../src/detector.cpp | 24 +- .../src/lidar_apollo_segmentation_tvm.cpp | 26 ++- .../src/low_intensity_cluster_filter_node.cpp | 6 +- .../pointcloud_preprocessor/CMakeLists.txt | 14 +- .../docs/dual-return-outlier-filter.md | 4 +- .../docs/ring-outlier-filter.md | 11 +- .../concatenate_and_time_sync_nodelet.hpp | 4 +- .../concatenate_pointclouds.hpp | 4 +- .../faster_voxel_grid_downsample_filter.hpp | 4 +- .../ring_outlier_filter_nodelet.hpp | 14 +- .../polygon_remover/polygon_remover.hpp | 2 +- .../time_synchronizer_nodelet.hpp | 4 +- .../utility/{utilities.hpp => geometry.hpp} | 16 +- .../utility/memory.hpp | 40 ++++ .../vector_map_inside_area_filter.hpp | 4 +- .../blockage_diag/blockage_diag_nodelet.cpp | 10 +- .../concatenate_and_time_sync_nodelet.cpp | 63 ++++-- .../concatenate_pointclouds.cpp | 62 +++-- .../distortion_corrector.cpp | 43 +++- .../faster_voxel_grid_downsample_filter.cpp | 27 ++- .../voxel_grid_downsample_filter_nodelet.cpp | 2 +- .../pointcloud_preprocessor/src/filter.cpp | 26 +++ .../dual_return_outlier_filter_nodelet.cpp | 34 +-- .../ring_outlier_filter_nodelet.cpp | 149 ++++++------- .../time_synchronizer_nodelet.cpp | 47 ++-- .../utility/{utilities.cpp => geometry.cpp} | 93 +------- .../src/utility/memory.cpp | 211 ++++++++++++++++++ .../test/test_distortion_corrector_node.cpp | 35 +-- .../test/test_utilities.cpp | 4 +- 35 files changed, 767 insertions(+), 329 deletions(-) rename sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/{utilities.hpp => geometry.hpp} (78%) create mode 100644 sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp rename sensing/pointcloud_preprocessor/src/utility/{utilities.cpp => geometry.cpp} (52%) create mode 100644 sensing/pointcloud_preprocessor/src/utility/memory.cpp diff --git a/common/autoware_point_types/include/autoware_point_types/types.hpp b/common/autoware_point_types/include/autoware_point_types/types.hpp index 71ea80c5a9733..a3b0670280530 100644 --- a/common/autoware_point_types/include/autoware_point_types/types.hpp +++ b/common/autoware_point_types/include/autoware_point_types/types.hpp @@ -54,6 +54,23 @@ enum ReturnType : uint8_t { DUAL_ONLY, }; +struct PointXYZIRC +{ + float x{0.0F}; + float y{0.0F}; + float z{0.0F}; + std::uint8_t intensity{0U}; + std::uint8_t return_type{0U}; + std::uint16_t channel{0U}; + + friend bool operator==(const PointXYZIRC & p1, const PointXYZIRC & p2) noexcept + { + return float_eq(p1.x, p2.x) && float_eq(p1.y, p2.y) && + float_eq(p1.z, p2.z) && p1.intensity == p2.intensity && + p1.return_type == p2.return_type && p1.channel == p2.channel; + } +}; + struct PointXYZIRADRT { float x{0.0F}; @@ -75,25 +92,97 @@ struct PointXYZIRADRT } }; -enum class PointIndex { X, Y, Z, Intensity, Ring, Azimuth, Distance, ReturnType, TimeStamp }; +struct PointXYZIRCAEDT +{ + float x{0.0F}; + float y{0.0F}; + float z{0.0F}; + std::uint8_t intensity{0U}; + std::uint8_t return_type{0U}; + std::uint16_t channel{0U}; + float azimuth{0.0F}; + float elevation{0.0F}; + float distance{0.0F}; + std::uint32_t time_stamp{0U}; + + friend bool operator==(const PointXYZIRCAEDT & p1, const PointXYZIRCAEDT & p2) noexcept + { + return float_eq(p1.x, p2.x) && float_eq(p1.y, p2.y) && + float_eq(p1.z, p2.z) && p1.intensity == p2.intensity && + p1.return_type == p2.return_type && p1.channel == p2.channel && + float_eq(p1.azimuth, p2.azimuth) && float_eq(p1.distance, p2.distance) && + p1.time_stamp == p2.time_stamp; + } +}; + +enum class PointXYZIIndex { X, Y, Z, Intensity }; +enum class PointXYZIRCIndex { X, Y, Z, Intensity, ReturnType, Channel }; +enum class PointXYZIRADRTIndex { + X, + Y, + Z, + Intensity, + Ring, + Azimuth, + Distance, + ReturnType, + TimeStamp +}; +enum class PointXYZIRCAEDTIndex { + X, + Y, + Z, + Intensity, + ReturnType, + Channel, + Azimuth, + Elevation, + Distance, + TimeStamp +}; LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(azimuth); +LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(elevation); LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(distance); LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(return_type); LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(time_stamp); +LIDAR_UTILS__DEFINE_FIELD_GENERATOR_FOR_MEMBER(channel); + +using PointXYZIRCGenerator = std::tuple< + point_cloud_msg_wrapper::field_x_generator, point_cloud_msg_wrapper::field_y_generator, + point_cloud_msg_wrapper::field_z_generator, point_cloud_msg_wrapper::field_intensity_generator, + field_return_type_generator, field_channel_generator>; + using PointXYZIRADRTGenerator = std::tuple< point_cloud_msg_wrapper::field_x_generator, point_cloud_msg_wrapper::field_y_generator, point_cloud_msg_wrapper::field_z_generator, point_cloud_msg_wrapper::field_intensity_generator, point_cloud_msg_wrapper::field_ring_generator, field_azimuth_generator, field_distance_generator, field_return_type_generator, field_time_stamp_generator>; +using PointXYZIRCAEDTGenerator = std::tuple< + point_cloud_msg_wrapper::field_x_generator, point_cloud_msg_wrapper::field_y_generator, + point_cloud_msg_wrapper::field_z_generator, point_cloud_msg_wrapper::field_intensity_generator, + field_return_type_generator, field_channel_generator, field_azimuth_generator, + field_elevation_generator, field_distance_generator, field_time_stamp_generator>; + } // namespace autoware_point_types +POINT_CLOUD_REGISTER_POINT_STRUCT( + autoware_point_types::PointXYZIRC, + (float, x, x)(float, y, y)(float, z, z)(std::uint8_t, intensity, intensity)( + std::uint8_t, return_type, return_type)(std::uint16_t, channel, channel)) + POINT_CLOUD_REGISTER_POINT_STRUCT( autoware_point_types::PointXYZIRADRT, (float, x, x)(float, y, y)(float, z, z)(float, intensity, intensity)(std::uint16_t, ring, ring)( float, azimuth, azimuth)(float, distance, distance)(std::uint8_t, return_type, return_type)( double, time_stamp, time_stamp)) +POINT_CLOUD_REGISTER_POINT_STRUCT( + autoware_point_types::PointXYZIRCAEDT, + (float, x, x)(float, y, y)(float, z, z)(std::uint8_t, intensity, intensity)( + std::uint8_t, return_type, + return_type)(std::uint16_t, channel, channel)(float, azimuth, azimuth)( + float, elevation, elevation)(float, distance, distance)(std::uint32_t, time_stamp, time_stamp)) #endif // AUTOWARE_POINT_TYPES__TYPES_HPP_ diff --git a/common/autoware_point_types/test/test_point_types.cpp b/common/autoware_point_types/test/test_point_types.cpp index 27ab1ef993ab3..16887ac2aa498 100644 --- a/common/autoware_point_types/test/test_point_types.cpp +++ b/common/autoware_point_types/test/test_point_types.cpp @@ -36,6 +36,15 @@ TEST(PointEquality, PointXYZIRADRT) EXPECT_EQ(pt0, pt1); } +TEST(PointEquality, PointXYZIRCAEDT) +{ + using autoware_point_types::PointXYZIRCAEDT; + + PointXYZIRCAEDT pt0{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + PointXYZIRCAEDT pt1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; + EXPECT_EQ(pt0, pt1); +} + TEST(PointEquality, FloatEq) { // test template diff --git a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml index ed7ff059a6e53..6cc47de76ea96 100644 --- a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml +++ b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light.launch.xml @@ -11,7 +11,7 @@ - + diff --git a/perception/ground_segmentation/src/scan_ground_filter/node.cpp b/perception/ground_segmentation/src/scan_ground_filter/node.cpp index 26db036f79bbe..dd867c3cfba0e 100644 --- a/perception/ground_segmentation/src/scan_ground_filter/node.cpp +++ b/perception/ground_segmentation/src/scan_ground_filter/node.cpp @@ -96,8 +96,9 @@ inline void ScanGroundFilterComponent::set_field_offsets(const PointCloud2ConstP int intensity_index = pcl::getFieldIndex(*input, "intensity"); if (intensity_index != -1) { intensity_offset_ = input->fields[intensity_index].offset; + intensity_type_ = input->fields[intensity_index].datatype; } else { - intensity_offset_ = z_offset_ + sizeof(float); + intensity_offset_ = -1; } offset_initialized_ = true; } @@ -569,6 +570,7 @@ void ScanGroundFilterComponent::extractObjectPoints( PointCloud2 & out_object_cloud) { size_t output_data_size = 0; + for (const auto & i : in_indices.indices) { std::memcpy( &out_object_cloud.data[output_data_size], &in_cloud_ptr->data[i * in_cloud_ptr->point_step], diff --git a/perception/ground_segmentation/src/scan_ground_filter/node.hpp b/perception/ground_segmentation/src/scan_ground_filter/node.hpp index 0e6ed598053ba..6de1d1b7ad09f 100644 --- a/perception/ground_segmentation/src/scan_ground_filter/node.hpp +++ b/perception/ground_segmentation/src/scan_ground_filter/node.hpp @@ -161,6 +161,7 @@ class ScanGroundFilterComponent : public pointcloud_preprocessor::Filter int y_offset_; int z_offset_; int intensity_offset_; + int intensity_type_; bool offset_initialized_; void set_field_offsets(const PointCloud2ConstPtr & input); diff --git a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp index 0f3a50628ccbc..ffeb47d3123a3 100644 --- a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp @@ -289,13 +289,13 @@ void PointPaintingFusionNode::fuseOnSingleImage( // tf2::doTransform(painted_pointcloud_msg, transformed_pointcloud, transform_stamped); const auto x_offset = - painted_pointcloud_msg.fields.at(static_cast(autoware_point_types::PointIndex::X)) + painted_pointcloud_msg.fields.at(static_cast(autoware_point_types::PointXYZIRCIndex::X)) .offset; const auto y_offset = - painted_pointcloud_msg.fields.at(static_cast(autoware_point_types::PointIndex::Y)) + painted_pointcloud_msg.fields.at(static_cast(autoware_point_types::PointXYZIRCIndex::Y)) .offset; const auto z_offset = - painted_pointcloud_msg.fields.at(static_cast(autoware_point_types::PointIndex::Z)) + painted_pointcloud_msg.fields.at(static_cast(autoware_point_types::PointXYZIRCIndex::Z)) .offset; const auto class_offset = painted_pointcloud_msg.fields.at(4).offset; const auto p_step = painted_pointcloud_msg.point_step; diff --git a/perception/lidar_apollo_instance_segmentation/src/detector.cpp b/perception/lidar_apollo_instance_segmentation/src/detector.cpp index b704bab39338a..ba4d7f788b0f5 100644 --- a/perception/lidar_apollo_instance_segmentation/src/detector.cpp +++ b/perception/lidar_apollo_instance_segmentation/src/detector.cpp @@ -16,6 +16,8 @@ #include "lidar_apollo_instance_segmentation/feature_map.hpp" +#include + #include #include #include @@ -126,7 +128,27 @@ bool LidarApolloInstanceSegmentation::detectDynamicObjects( // convert from ros to pcl pcl::PointCloud::Ptr pcl_pointcloud_raw_ptr(new pcl::PointCloud); - pcl::fromROSMsg(transformed_cloud, *pcl_pointcloud_raw_ptr); + // pcl::fromROSMsg(transformed_cloud, *pcl_pointcloud_raw_ptr); + + auto pcl_pointcloud_raw = *pcl_pointcloud_raw_ptr; + pcl_pointcloud_raw.width = transformed_cloud.width; + pcl_pointcloud_raw.height = transformed_cloud.height; + pcl_pointcloud_raw.is_dense = transformed_cloud.is_dense == 1; + pcl_pointcloud_raw.resize(transformed_cloud.width * transformed_cloud.height); + + sensor_msgs::PointCloud2ConstIterator it_x(transformed_cloud, "x"); + sensor_msgs::PointCloud2ConstIterator it_y(transformed_cloud, "y"); + sensor_msgs::PointCloud2ConstIterator it_z(transformed_cloud, "z"); + sensor_msgs::PointCloud2ConstIterator it_intensity(transformed_cloud, "intensity"); + + for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_intensity) { + pcl::PointXYZI point; + point.x = *it_x; + point.y = *it_y; + point.z = *it_z; + point.intensity = static_cast(*it_intensity); + pcl_pointcloud_raw.emplace_back(std::move(point)); + } // generate feature map std::shared_ptr feature_map_ptr = diff --git a/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp b/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp index 9d41770eb5331..c83e4836c1dd0 100644 --- a/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp +++ b/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp @@ -18,6 +18,8 @@ #include #include +#include + #include #include #include @@ -168,7 +170,29 @@ std::shared_ptr ApolloLidarSegmentation::detec sensor_msgs::msg::PointCloud2 transformed_cloud; ApolloLidarSegmentation::transformCloud(input, transformed_cloud, z_offset_); // convert from ros to pcl - pcl::fromROSMsg(transformed_cloud, *pcl_pointcloud_ptr_); + // pcl::fromROSMsg( + // transformed_cloud, *pcl_pointcloud_ptr_); // Manual conversion is needed since intensity + // comes as an uint8_t + + auto pcl_pointcloud = *pcl_pointcloud_ptr_; + pcl_pointcloud.width = input.width; + pcl_pointcloud.height = input.height; + pcl_pointcloud.is_dense = input.is_dense == 1; + pcl_pointcloud.resize(input.width * input.height); + + sensor_msgs::PointCloud2ConstIterator it_x(input, "x"); + sensor_msgs::PointCloud2ConstIterator it_y(input, "y"); + sensor_msgs::PointCloud2ConstIterator it_z(input, "z"); + sensor_msgs::PointCloud2ConstIterator it_intensity(input, "intensity"); + + for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_intensity) { + pcl::PointXYZI point; + point.x = *it_x; + point.y = *it_y; + point.z = *it_z; + point.intensity = static_cast(*it_intensity); + pcl_pointcloud.emplace_back(std::move(point)); + } // inference pipeline auto output = pipeline->schedule(pcl_pointcloud_ptr_); diff --git a/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp b/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp index 105fc98722a26..62b6b9f3b09b5 100644 --- a/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp +++ b/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp @@ -125,9 +125,9 @@ bool LowIntensityClusterFilter::isValidatedCluster(const sensor_msgs::msg::Point RCLCPP_WARN(get_logger(), "Invalid point cloud data. point_step is less than 16."); return true; } - for (sensor_msgs::PointCloud2ConstIterator iter(cluster, "intensity"); iter != iter.end(); - ++iter) { - mean_intensity += *iter; + for (sensor_msgs::PointCloud2ConstIterator iter(cluster, "intensity"); + iter != iter.end(); ++iter) { + mean_intensity += static_cast(*iter); } const size_t num_points = cluster.width * cluster.height; mean_intensity /= static_cast(num_points); diff --git a/sensing/pointcloud_preprocessor/CMakeLists.txt b/sensing/pointcloud_preprocessor/CMakeLists.txt index 2d0649fe43954..76b9cc91ea586 100644 --- a/sensing/pointcloud_preprocessor/CMakeLists.txt +++ b/sensing/pointcloud_preprocessor/CMakeLists.txt @@ -26,11 +26,13 @@ include_directories( add_library(pointcloud_preprocessor_filter_base SHARED src/filter.cpp + src/utility/memory.cpp ) target_include_directories(pointcloud_preprocessor_filter_base PUBLIC "$" "$" + ${autoware_point_types_INCLUDE_DIRS} ) ament_target_dependencies(pointcloud_preprocessor_filter_base @@ -41,6 +43,7 @@ ament_target_dependencies(pointcloud_preprocessor_filter_base tf2_ros autoware_universe_utils pcl_ros + autoware_point_types ) add_library(faster_voxel_grid_downsample_filter SHARED @@ -59,7 +62,6 @@ ament_target_dependencies(faster_voxel_grid_downsample_filter ) ament_auto_add_library(pointcloud_preprocessor_filter SHARED - src/utility/utilities.cpp src/concatenate_data/concatenate_and_time_sync_nodelet.cpp src/concatenate_data/concatenate_pointclouds.cpp src/time_synchronizer/time_synchronizer_nodelet.cpp @@ -82,6 +84,7 @@ ament_auto_add_library(pointcloud_preprocessor_filter SHARED src/blockage_diag/blockage_diag_nodelet.cpp src/polygon_remover/polygon_remover.cpp src/vector_map_filter/vector_map_inside_area_filter.cpp + src/utility/geometry.cpp ) target_link_libraries(pointcloud_preprocessor_filter @@ -227,16 +230,19 @@ ament_auto_package(INSTALL_TO_SHARE if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) find_package(ament_cmake_gtest) + ament_lint_auto_find_test_dependencies() + ament_add_gtest(test_utilities test/test_utilities.cpp ) - ament_add_gtest(distortion_corrector_node_tests - test/test_distortion_corrector_node.cpp + + ament_add_gtest(test_distortion_corrector_node + test/test_distortion_corrector_node.cpp ) target_link_libraries(test_utilities pointcloud_preprocessor_filter) - target_link_libraries(distortion_corrector_node_tests pointcloud_preprocessor_filter) + target_link_libraries(test_distortion_corrector_node pointcloud_preprocessor_filter) endif() diff --git a/sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md b/sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md index cc32aa3df4b62..16f9d05807fa7 100644 --- a/sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md +++ b/sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md @@ -10,7 +10,7 @@ This node can remove rain and fog by considering the light reflected from the ob ![outlier_filter-return_type](./image/outlier_filter-return_type.drawio.svg) -Therefore, in order to use this node, the sensor driver must publish custom data including `return_type`. please refer to [PointXYZIRADRT](../../../common/autoware_point_types/include/autoware_point_types/types.hpp#L57-L76) data structure. +Therefore, in order to use this node, the sensor driver must publish custom data including `return_type`. please refer to [PointXYZIRCAEDT](../../../common/autoware_point_types/include/autoware_point_types/types.hpp#L95-L116) data structure. Another feature of this node is that it publishes visibility as a diagnostic topic. With this function, for example, in heavy rain, the sensing module can notify that the processing performance has reached its limit, which can lead to ensuring the safety of the vehicle. @@ -75,7 +75,7 @@ This implementation inherits `pointcloud_preprocessor::Filter` class, please ref ## Assumptions / Known limits Not recommended for use as it is under development. -Input data must be `PointXYZIRADRT` type data including `return_type`. +Input data must be [PointXYZIRCAEDT](../../../common/autoware_point_types/include/autoware_point_types/types.hpp#L95-L116) type data including `return_type`. ## (Optional) Error detection and handling diff --git a/sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md b/sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md index ddad51998dcd3..052c725a5e7cf 100644 --- a/sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md +++ b/sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md @@ -75,16 +75,7 @@ This implementation inherits `pointcloud_preprocessor::Filter` class, please ref ## Assumptions / Known limits -It is a prerequisite to input a scan point cloud in chronological order. In this repository it is defined as blow structure (please refer to [PointXYZIRADT](https://github.com/tier4/AutowareArchitectureProposal.iv/blob/5d8dff0db51634f0c42d2a3e87ca423fbee84348/sensing/preprocessor/pointcloud/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp#L53-L62)). - -- X: x -- Y: y -- z: z -- I: intensity -- R: ring -- A :azimuth -- D: distance -- T: time_stamp +This nodes requires that the points of the input point cloud are in chronological order and that individual points follow the memory layout specified by [PointXYZIRCAEDT](../../../common/autoware_point_types/include/autoware_point_types/types.hpp#L95-L116). ## (Optional) Error detection and handling diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp index 86c4ed5943540..619a0b8520b97 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp @@ -87,7 +87,7 @@ namespace pointcloud_preprocessor { -using autoware_point_types::PointXYZI; +using autoware_point_types::PointXYZIRC; using point_cloud_msg_wrapper::PointCloud2Modifier; /** \brief @b PointCloudConcatenateDataSynchronizerComponent is a special form of data @@ -169,7 +169,7 @@ class PointCloudConcatenateDataSynchronizerComponent : public rclcpp::Node sensor_msgs::msg::PointCloud2::SharedPtr & concat_cloud_ptr); void publish(); - void convertToXYZICloud( + void convertToXYZIRCCloud( const sensor_msgs::msg::PointCloud2::SharedPtr & input_ptr, sensor_msgs::msg::PointCloud2::SharedPtr & output_ptr); void setPeriod(const int64_t new_period); diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp index ead66d98b8be7..77717c51e6981 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp @@ -86,7 +86,7 @@ namespace pointcloud_preprocessor { -using autoware_point_types::PointXYZI; +using autoware_point_types::PointXYZIRC; using point_cloud_msg_wrapper::PointCloud2Modifier; /** \brief @b PointCloudConcatenationComponent is a special form of data * synchronizer: it listens for a set of input PointCloud messages on the same topic, @@ -160,7 +160,7 @@ class PointCloudConcatenationComponent : public rclcpp::Node void combineClouds(sensor_msgs::msg::PointCloud2::SharedPtr & concat_cloud_ptr); void publish(); - void convertToXYZICloud( + void convertToXYZIRCCloud( const sensor_msgs::msg::PointCloud2::SharedPtr & input_ptr, sensor_msgs::msg::PointCloud2::SharedPtr & output_ptr); void setPeriod(const int64_t new_period); diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp index d80e62d08330d..379c4c79e555a 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp @@ -34,7 +34,7 @@ class FasterVoxelGridDownsampleFilter public: FasterVoxelGridDownsampleFilter(); void set_voxel_size(float voxel_size_x, float voxel_size_y, float voxel_size_z); - void set_field_offsets(const PointCloud2ConstPtr & input); + void set_field_offsets(const PointCloud2ConstPtr & input, const rclcpp::Logger & logger); void filter( const PointCloud2ConstPtr & input, PointCloud2 & output, const TransformInfo & transform_info, const rclcpp::Logger & logger); @@ -48,7 +48,7 @@ class FasterVoxelGridDownsampleFilter float intensity; uint32_t point_count_; - Centroid() : x(0), y(0), z(0), intensity(-1.0) {} + Centroid() : x(0), y(0), z(0), intensity(0) {} Centroid(float _x, float _y, float _z, float _intensity) : x(_x), y(_y), z(_z), intensity(_intensity) { diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp index 55ba79aac4593..08fbfe73f2744 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp @@ -35,12 +35,15 @@ namespace pointcloud_preprocessor { -using autoware_point_types::PointXYZI; using point_cloud_msg_wrapper::PointCloud2Modifier; class RingOutlierFilterComponent : public pointcloud_preprocessor::Filter { protected: + using InputPointIndex = autoware_point_types::PointXYZIRCAEDTIndex; + using InputPointType = autoware_point_types::PointXYZIRCAEDT; + using OutputPointType = autoware_point_types::PointXYZIRC; + virtual void filter( const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); @@ -83,8 +86,10 @@ class RingOutlierFilterComponent : public pointcloud_preprocessor::Filter { if (walk_size > num_points_threshold_) return true; - auto first_point = reinterpret_cast(&input->data[data_idx_both_ends.first]); - auto last_point = reinterpret_cast(&input->data[data_idx_both_ends.second]); + auto first_point = + reinterpret_cast(&input->data[data_idx_both_ends.first]); + auto last_point = + reinterpret_cast(&input->data[data_idx_both_ends.second]); const auto x = first_point->x - last_point->x; const auto y = first_point->y - last_point->y; @@ -94,8 +99,7 @@ class RingOutlierFilterComponent : public pointcloud_preprocessor::Filter } void setUpPointCloudFormat( - const PointCloud2ConstPtr & input, PointCloud2 & formatted_points, size_t points_size, - size_t num_fields); + const PointCloud2ConstPtr & input, PointCloud2 & formatted_points, size_t points_size); float calculateVisibilityScore(const PointCloud2 & input); public: diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp index 49baed4ed7ed5..4d2e66eea700e 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp @@ -16,7 +16,7 @@ #define POINTCLOUD_PREPROCESSOR__POLYGON_REMOVER__POLYGON_REMOVER_HPP_ #include "pointcloud_preprocessor/filter.hpp" -#include "pointcloud_preprocessor/utility/utilities.hpp" +#include "pointcloud_preprocessor/utility/geometry.hpp" #include #include diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp index 4153cee7695f8..2dc98a571ff2c 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp @@ -87,7 +87,7 @@ namespace pointcloud_preprocessor { -using autoware_point_types::PointXYZI; +using autoware_point_types::PointXYZIRC; using point_cloud_msg_wrapper::PointCloud2Modifier; // cspell:ignore Yoshi /** \brief @b PointCloudDataSynchronizerComponent is a special form of data @@ -166,7 +166,7 @@ class PointCloudDataSynchronizerComponent : public rclcpp::Node std::map synchronizeClouds(); void publish(); - void convertToXYZICloud( + void convertToXYZIRCCloud( const sensor_msgs::msg::PointCloud2::SharedPtr & input_ptr, sensor_msgs::msg::PointCloud2::SharedPtr & output_ptr); void setPeriod(const int64_t new_period); diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/utilities.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp similarity index 78% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/utilities.hpp rename to sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp index 654057e7bb8d7..0175f88ceb89c 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/utilities.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp @@ -1,4 +1,4 @@ -// Copyright 2022 Tier IV, Inc. +// Copyright 2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef POINTCLOUD_PREPROCESSOR__UTILITY__UTILITIES_HPP_ -#define POINTCLOUD_PREPROCESSOR__UTILITY__UTILITIES_HPP_ +#ifndef POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ +#define POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ #include #include @@ -81,14 +81,6 @@ void remove_polygon_cgal_from_cloud( bool point_within_cgal_polys( const pcl::PointXYZ & point, const std::vector & polyline_polygons); -/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZI. That is to - * say whether you can memcpy from the PointCloud2 data buffer to a PointXYZI */ -bool is_data_layout_compatible_with_PointXYZI(const sensor_msgs::msg::PointCloud2 & input); - -/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZIRADRT. That - * is to say whether you can memcpy from the PointCloud2 data buffer to a PointXYZIRADRT */ -bool is_data_layout_compatible_with_PointXYZIRADRT(const sensor_msgs::msg::PointCloud2 & input); - } // namespace pointcloud_preprocessor::utils -#endif // POINTCLOUD_PREPROCESSOR__UTILITY__UTILITIES_HPP_ +#endif // POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp new file mode 100644 index 0000000000000..ef87a4f31457b --- /dev/null +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp @@ -0,0 +1,40 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef POINTCLOUD_PREPROCESSOR__UTILITY__MEMORY_HPP_ +#define POINTCLOUD_PREPROCESSOR__UTILITY__MEMORY_HPP_ + +#include + +namespace pointcloud_preprocessor::utils +{ +/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZI. That is to + * say whether you can memcpy from the PointCloud2 data buffer to a PointXYZI */ +bool is_data_layout_compatible_with_point_xyzi(const sensor_msgs::msg::PointCloud2 & input); + +/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZIRC. That is + * to say whether you can memcpy from the PointCloud2 data buffer to a PointXYZIRC */ +bool is_data_layout_compatible_with_point_xyzirc(const sensor_msgs::msg::PointCloud2 & input); + +/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZIRADRT. That + * is to say whether you can memcpy from the PointCloud2 data buffer to a PointXYZIRADRT */ +bool is_data_layout_compatible_with_point_xyziradrt(const sensor_msgs::msg::PointCloud2 & input); + +/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZIRCAEDT. That + * is to say whether you can memcpy from the PointCloud2 data buffer to a PointXYZIRCAEDT */ +bool is_data_layout_compatible_with_point_xyzircaedt(const sensor_msgs::msg::PointCloud2 & input); + +} // namespace pointcloud_preprocessor::utils + +#endif // POINTCLOUD_PREPROCESSOR__UTILITY__MEMORY_HPP_ diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp index 7f48497d7e578..d28a6550123cf 100644 --- a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp +++ b/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp @@ -1,4 +1,4 @@ -// Copyright 2022 Tier IV, Inc. +// Copyright 2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ #define POINTCLOUD_PREPROCESSOR__VECTOR_MAP_FILTER__VECTOR_MAP_INSIDE_AREA_FILTER_HPP_ #include "pointcloud_preprocessor/filter.hpp" -#include "pointcloud_preprocessor/utility/utilities.hpp" +#include "pointcloud_preprocessor/utility/geometry.hpp" #include #include diff --git a/sensing/pointcloud_preprocessor/src/blockage_diag/blockage_diag_nodelet.cpp b/sensing/pointcloud_preprocessor/src/blockage_diag/blockage_diag_nodelet.cpp index 773e6db056990..aae50a18f2024 100644 --- a/sensing/pointcloud_preprocessor/src/blockage_diag/blockage_diag_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/blockage_diag/blockage_diag_nodelet.cpp @@ -21,7 +21,7 @@ namespace pointcloud_preprocessor { -using autoware_point_types::PointXYZIRADRT; +using autoware_point_types::PointXYZIRCAEDT; using diagnostic_msgs::msg::DiagnosticStatus; BlockageDiagComponent::BlockageDiagComponent(const rclcpp::NodeOptions & options) @@ -175,7 +175,7 @@ void BlockageDiagComponent::filter( } ideal_horizontal_bins = static_cast( (angle_range_deg_[1] + compensate_angle - angle_range_deg_[0]) / horizontal_resolution_); - pcl::PointCloud::Ptr pcl_input(new pcl::PointCloud); + pcl::PointCloud::Ptr pcl_input(new pcl::PointCloud); pcl::fromROSMsg(*input, *pcl_input); cv::Mat full_size_depth_map( cv::Size(ideal_horizontal_bins, vertical_bins), CV_16UC1, cv::Scalar(0)); @@ -196,7 +196,7 @@ void BlockageDiagComponent::filter( sky_blockage_range_deg_[1] = angle_range_deg_[1]; } else { for (const auto p : pcl_input->points) { - double azimuth_deg = p.azimuth / 100.; + double azimuth_deg = p.azimuth * (180.0 / M_PI); if ( ((azimuth_deg > angle_range_deg_[0]) && (azimuth_deg <= angle_range_deg_[1] + compensate_angle)) || @@ -208,9 +208,9 @@ void BlockageDiagComponent::filter( uint16_t depth_intensity = UINT16_MAX * (1.0 - std::min(p.distance / max_distance_range_, 1.0)); if (is_channel_order_top2down_) { - full_size_depth_map.at(p.ring, horizontal_bin_index) = depth_intensity; + full_size_depth_map.at(p.channel, horizontal_bin_index) = depth_intensity; } else { - full_size_depth_map.at(vertical_bins - p.ring - 1, horizontal_bin_index) = + full_size_depth_map.at(vertical_bins - p.channel - 1, horizontal_bin_index) = depth_intensity; } } diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index 9a13f57a87b72..62c41bd5252fa 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -51,6 +51,8 @@ #include "pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp" +#include "pointcloud_preprocessor/utility/memory.hpp" + #include #include @@ -490,40 +492,56 @@ void PointCloudConcatenateDataSynchronizerComponent::publish() } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -void PointCloudConcatenateDataSynchronizerComponent::convertToXYZICloud( +void PointCloudConcatenateDataSynchronizerComponent::convertToXYZIRCCloud( const sensor_msgs::msg::PointCloud2::SharedPtr & input_ptr, sensor_msgs::msg::PointCloud2::SharedPtr & output_ptr) { output_ptr->header = input_ptr->header; - PointCloud2Modifier output_modifier{*output_ptr, input_ptr->header.frame_id}; + PointCloud2Modifier output_modifier{ + *output_ptr, input_ptr->header.frame_id}; output_modifier.reserve(input_ptr->width); - bool has_intensity = std::any_of( - input_ptr->fields.begin(), input_ptr->fields.end(), - [](auto & field) { return field.name == "intensity"; }); + bool has_valid_intensity = + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + return field.name == "intensity" && field.datatype == sensor_msgs::msg::PointField::UINT8; + }); + + bool has_valid_return_type = + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + return field.name == "return_type" && field.datatype == sensor_msgs::msg::PointField::UINT8; + }); + + bool has_valid_channel = + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + return field.name == "channel" && field.datatype == sensor_msgs::msg::PointField::UINT16; + }); sensor_msgs::PointCloud2Iterator it_x(*input_ptr, "x"); sensor_msgs::PointCloud2Iterator it_y(*input_ptr, "y"); sensor_msgs::PointCloud2Iterator it_z(*input_ptr, "z"); - if (has_intensity) { - sensor_msgs::PointCloud2Iterator it_i(*input_ptr, "intensity"); - for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_i) { - PointXYZI point; + if (has_valid_intensity && has_valid_return_type && has_valid_channel) { + sensor_msgs::PointCloud2Iterator it_i(*input_ptr, "intensity"); + sensor_msgs::PointCloud2Iterator it_r(*input_ptr, "return_type"); + sensor_msgs::PointCloud2Iterator it_c(*input_ptr, "channel"); + + for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_i, ++it_r, ++it_c) { + PointXYZIRC point; point.x = *it_x; point.y = *it_y; point.z = *it_z; point.intensity = *it_i; + point.return_type = *it_r; + point.channel = *it_c; output_modifier.push_back(std::move(point)); } } else { for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z) { - PointXYZI point; + PointXYZIRC point; point.x = *it_x; point.y = *it_y; point.z = *it_z; - point.intensity = 0.0f; output_modifier.push_back(std::move(point)); } } @@ -548,15 +566,28 @@ void PointCloudConcatenateDataSynchronizerComponent::setPeriod(const int64_t new void PointCloudConcatenateDataSynchronizerComponent::cloud_callback( const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_ptr, const std::string & topic_name) { + if (!utils::is_data_layout_compatible_with_point_xyzirc(*input_ptr)) { + RCLCPP_ERROR( + get_logger(), "The pointcloud layout is not compatible with PointXYZIRC. Aborting"); + + if (utils::is_data_layout_compatible_with_point_xyzi(*input_ptr)) { + RCLCPP_ERROR( + get_logger(), + "The pointcloud layout is compatible with PointXYZI. You may be using legacy code/data"); + } + + return; + } + std::lock_guard lock(mutex_); - sensor_msgs::msg::PointCloud2::SharedPtr xyzi_input_ptr(new sensor_msgs::msg::PointCloud2()); + sensor_msgs::msg::PointCloud2::SharedPtr xyzirc_input_ptr(new sensor_msgs::msg::PointCloud2()); auto input = std::make_shared(*input_ptr); if (input->data.empty()) { RCLCPP_WARN_STREAM_THROTTLE( this->get_logger(), *this->get_clock(), 1000, "Empty sensor points!"); } else { - // convert to XYZI pointcloud if pointcloud is not empty - convertToXYZICloud(input, xyzi_input_ptr); + // convert to XYZIRC pointcloud if pointcloud is not empty + convertToXYZIRCCloud(input, xyzirc_input_ptr); } const bool is_already_subscribed_this = (cloud_stdmap_[topic_name] != nullptr); @@ -565,7 +596,7 @@ void PointCloudConcatenateDataSynchronizerComponent::cloud_callback( [](const auto & e) { return e.second != nullptr; }); if (is_already_subscribed_this) { - cloud_stdmap_tmp_[topic_name] = xyzi_input_ptr; + cloud_stdmap_tmp_[topic_name] = xyzirc_input_ptr; if (!is_already_subscribed_tmp) { auto period = std::chrono::duration_cast( @@ -578,7 +609,7 @@ void PointCloudConcatenateDataSynchronizerComponent::cloud_callback( timer_->reset(); } } else { - cloud_stdmap_[topic_name] = xyzi_input_ptr; + cloud_stdmap_[topic_name] = xyzirc_input_ptr; const bool is_subscribed_all = std::all_of( std::begin(cloud_stdmap_), std::end(cloud_stdmap_), diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp index c2d185d1ed2c2..a54ec123c154f 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp @@ -14,6 +14,8 @@ #include "pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp" +#include "pointcloud_preprocessor/utility/memory.hpp" + #include #include @@ -325,39 +327,56 @@ void PointCloudConcatenationComponent::publish() } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -void PointCloudConcatenationComponent::convertToXYZICloud( +void PointCloudConcatenationComponent::convertToXYZIRCCloud( const sensor_msgs::msg::PointCloud2::SharedPtr & input_ptr, sensor_msgs::msg::PointCloud2::SharedPtr & output_ptr) { output_ptr->header = input_ptr->header; - PointCloud2Modifier output_modifier{*output_ptr, input_ptr->header.frame_id}; + + PointCloud2Modifier output_modifier{ + *output_ptr, input_ptr->header.frame_id}; output_modifier.reserve(input_ptr->width); - bool has_intensity = std::any_of( - input_ptr->fields.begin(), input_ptr->fields.end(), - [](auto & field) { return field.name == "intensity"; }); + bool has_valid_intensity = + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + return field.name == "intensity" && field.datatype == sensor_msgs::msg::PointField::UINT8; + }); + + bool has_valid_return_type = + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + return field.name == "return_type" && field.datatype == sensor_msgs::msg::PointField::UINT8; + }); + + bool has_valid_channel = + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + return field.name == "channel" && field.datatype == sensor_msgs::msg::PointField::UINT16; + }); sensor_msgs::PointCloud2Iterator it_x(*input_ptr, "x"); sensor_msgs::PointCloud2Iterator it_y(*input_ptr, "y"); sensor_msgs::PointCloud2Iterator it_z(*input_ptr, "z"); - if (has_intensity) { - sensor_msgs::PointCloud2Iterator it_i(*input_ptr, "intensity"); - for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_i) { - PointXYZI point; + if (has_valid_intensity && has_valid_return_type && has_valid_channel) { + sensor_msgs::PointCloud2Iterator it_i(*input_ptr, "intensity"); + sensor_msgs::PointCloud2Iterator it_r(*input_ptr, "return_type"); + sensor_msgs::PointCloud2Iterator it_c(*input_ptr, "channel"); + + for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_i, ++it_r, ++it_c) { + PointXYZIRC point; point.x = *it_x; point.y = *it_y; point.z = *it_z; point.intensity = *it_i; + point.return_type = *it_r; + point.channel = *it_c; output_modifier.push_back(std::move(point)); } } else { for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z) { - PointXYZI point; + PointXYZIRC point; point.x = *it_x; point.y = *it_y; point.z = *it_z; - point.intensity = 0.0f; output_modifier.push_back(std::move(point)); } } @@ -382,10 +401,23 @@ void PointCloudConcatenationComponent::setPeriod(const int64_t new_period) void PointCloudConcatenationComponent::cloud_callback( const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_ptr, const std::string & topic_name) { + if (!utils::is_data_layout_compatible_with_point_xyzirc(*input_ptr)) { + RCLCPP_ERROR( + get_logger(), "The pointcloud layout is not compatible with PointXYZIRC. Aborting"); + + if (utils::is_data_layout_compatible_with_point_xyzi(*input_ptr)) { + RCLCPP_ERROR( + get_logger(), + "The pointcloud layout is compatible with PointXYZI. You may be using legacy code/data"); + } + + return; + } + std::lock_guard lock(mutex_); auto input = std::make_shared(*input_ptr); - sensor_msgs::msg::PointCloud2::SharedPtr xyzi_input_ptr(new sensor_msgs::msg::PointCloud2()); - convertToXYZICloud(input, xyzi_input_ptr); + sensor_msgs::msg::PointCloud2::SharedPtr xyzirc_input_ptr(new sensor_msgs::msg::PointCloud2()); + convertToXYZIRCCloud(input, xyzirc_input_ptr); const bool is_already_subscribed_this = (cloud_stdmap_[topic_name] != nullptr); const bool is_already_subscribed_tmp = std::any_of( @@ -393,7 +425,7 @@ void PointCloudConcatenationComponent::cloud_callback( [](const auto & e) { return e.second != nullptr; }); if (is_already_subscribed_this) { - cloud_stdmap_tmp_[topic_name] = xyzi_input_ptr; + cloud_stdmap_tmp_[topic_name] = xyzirc_input_ptr; if (!is_already_subscribed_tmp) { auto period = std::chrono::duration_cast( @@ -406,7 +438,7 @@ void PointCloudConcatenationComponent::cloud_callback( timer_->reset(); } } else { - cloud_stdmap_[topic_name] = xyzi_input_ptr; + cloud_stdmap_[topic_name] = xyzirc_input_ptr; const bool is_subscribed_all = std::all_of( std::begin(cloud_stdmap_), std::end(cloud_stdmap_), diff --git a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp index f933d4c6f75d9..4a7152a3cd38a 100644 --- a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp +++ b/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp @@ -14,8 +14,9 @@ #include "pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" -#include "autoware/universe_utils/math/trigonometry.hpp" +#include "pointcloud_preprocessor/utility/memory.hpp" +#include #include namespace pointcloud_preprocessor @@ -181,6 +182,22 @@ bool DistortionCorrector::isInputValid(sensor_msgs::msg::PointCloud2 & pointc "Required field time stamp doesn't exist in the point cloud."); return false; } + + if (!utils::is_data_layout_compatible_with_point_xyzircaedt(pointcloud)) { + RCLCPP_ERROR( + node_->get_logger(), + "The pointcloud layout is not compatible with PointXYZIRCAEDT. Aborting"); + + if (utils::is_data_layout_compatible_with_point_xyziradrt(pointcloud)) { + RCLCPP_ERROR( + node_->get_logger(), + "The pointcloud layout is compatible with PointXYZIRADRT. You may be using legacy " + "code/data"); + } + + return false; + } + return true; } @@ -193,10 +210,12 @@ void DistortionCorrector::undistortPointCloud( sensor_msgs::PointCloud2Iterator it_x(pointcloud, "x"); sensor_msgs::PointCloud2Iterator it_y(pointcloud, "y"); sensor_msgs::PointCloud2Iterator it_z(pointcloud, "z"); - sensor_msgs::PointCloud2ConstIterator it_time_stamp(pointcloud, "time_stamp"); + sensor_msgs::PointCloud2ConstIterator it_time_stamp(pointcloud, "time_stamp"); - double prev_time_stamp_sec{*it_time_stamp}; - const double first_point_time_stamp_sec{*it_time_stamp}; + double prev_time_stamp_sec{ + pointcloud.header.stamp.sec + 1e-9 * (pointcloud.header.stamp.nanosec + *it_time_stamp)}; + const double first_point_time_stamp_sec{ + pointcloud.header.stamp.sec + 1e-9 * (pointcloud.header.stamp.nanosec + *it_time_stamp)}; std::deque::iterator it_twist; std::deque::iterator it_imu; @@ -214,29 +233,33 @@ void DistortionCorrector::undistortPointCloud( bool is_imu_time_stamp_too_late = false; bool is_twist_valid = true; bool is_imu_valid = true; + double global_point_stamp; for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_time_stamp) { is_twist_valid = true; is_imu_valid = true; + global_point_stamp = + pointcloud.header.stamp.sec + 1e-9 * (pointcloud.header.stamp.nanosec + *it_time_stamp); + // Get closest twist information - while (it_twist != std::end(twist_queue_) - 1 && *it_time_stamp > twist_stamp) { + while (it_twist != std::end(twist_queue_) - 1 && global_point_stamp > twist_stamp) { ++it_twist; twist_stamp = rclcpp::Time(it_twist->header.stamp).seconds(); } - if (std::abs(*it_time_stamp - twist_stamp) > 0.1) { + if (std::abs(global_point_stamp - twist_stamp) > 0.1) { is_twist_time_stamp_too_late = true; is_twist_valid = false; } // Get closest IMU information if (use_imu && !angular_velocity_queue_.empty()) { - while (it_imu != std::end(angular_velocity_queue_) - 1 && *it_time_stamp > imu_stamp) { + while (it_imu != std::end(angular_velocity_queue_) - 1 && global_point_stamp > imu_stamp) { ++it_imu; imu_stamp = rclcpp::Time(it_imu->header.stamp).seconds(); } - if (std::abs(*it_time_stamp - imu_stamp) > 0.1) { + if (std::abs(global_point_stamp - imu_stamp) > 0.1) { is_imu_time_stamp_too_late = true; is_imu_valid = false; } @@ -244,12 +267,12 @@ void DistortionCorrector::undistortPointCloud( is_imu_valid = false; } - float time_offset = static_cast(*it_time_stamp - prev_time_stamp_sec); + float time_offset = static_cast(global_point_stamp - prev_time_stamp_sec); // Undistort a single point based on the strategy undistortPoint(it_x, it_y, it_z, it_twist, it_imu, time_offset, is_twist_valid, is_imu_valid); - prev_time_stamp_sec = *it_time_stamp; + prev_time_stamp_sec = global_point_stamp; } warnIfTimestampIsTooLate(is_twist_time_stamp_too_late, is_imu_time_stamp_too_late); diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp index 0ca28f5f9a455..b9488d1ed7a73 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp @@ -29,16 +29,27 @@ void FasterVoxelGridDownsampleFilter::set_voxel_size( Eigen::Array3f::Ones() / Eigen::Array3f(voxel_size_x, voxel_size_y, voxel_size_z); } -void FasterVoxelGridDownsampleFilter::set_field_offsets(const PointCloud2ConstPtr & input) +void FasterVoxelGridDownsampleFilter::set_field_offsets( + const PointCloud2ConstPtr & input, const rclcpp::Logger & logger) { x_offset_ = input->fields[pcl::getFieldIndex(*input, "x")].offset; y_offset_ = input->fields[pcl::getFieldIndex(*input, "y")].offset; z_offset_ = input->fields[pcl::getFieldIndex(*input, "z")].offset; intensity_index_ = pcl::getFieldIndex(*input, "intensity"); + + if ( + intensity_index_ < 0 || input->fields[pcl::getFieldIndex(*input, "intensity")].datatype != + sensor_msgs::msg::PointField::UINT8) { + RCLCPP_ERROR( + logger, + "There is no intensity field in the input point cloud or the intensity field is not of type " + "UINT8."); + } + if (intensity_index_ != -1) { intensity_offset_ = input->fields[intensity_index_].offset; } else { - intensity_offset_ = z_offset_ + sizeof(float); + intensity_offset_ = -1; } offset_initialized_ = true; } @@ -49,7 +60,7 @@ void FasterVoxelGridDownsampleFilter::filter( { // Check if the field offset has been set if (!offset_initialized_) { - set_field_offsets(input); + set_field_offsets(input, logger); } // Compute the minimum and maximum voxel coordinates @@ -85,10 +96,9 @@ Eigen::Vector4f FasterVoxelGridDownsampleFilter::get_point_from_global_offset( const PointCloud2ConstPtr & input, size_t global_offset) { float intensity = 0.0; - if (intensity_index_ == -1) { - intensity = -1.0; - } else { - intensity = *reinterpret_cast(&input->data[global_offset + intensity_offset_]); + if (intensity_index_ >= 0) { + intensity = static_cast( + *reinterpret_cast(&input->data[global_offset + intensity_offset_])); } Eigen::Vector4f point( *reinterpret_cast(&input->data[global_offset + x_offset_]), @@ -179,7 +189,8 @@ void FasterVoxelGridDownsampleFilter::copy_centroids_to_output( *reinterpret_cast(&output.data[output_data_size + x_offset_]) = centroid[0]; *reinterpret_cast(&output.data[output_data_size + y_offset_]) = centroid[1]; *reinterpret_cast(&output.data[output_data_size + z_offset_]) = centroid[2]; - *reinterpret_cast(&output.data[output_data_size + intensity_offset_]) = centroid[3]; + *reinterpret_cast(&output.data[output_data_size + intensity_offset_]) = + static_cast(centroid[3]); output_data_size += output.point_step; } } diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp index ad6e49514714a..992f2086edcd0 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp @@ -108,7 +108,7 @@ void VoxelGridDownsampleFilterComponent::faster_filter( std::scoped_lock lock(mutex_); FasterVoxelGridDownsampleFilter faster_voxel_filter; faster_voxel_filter.set_voxel_size(voxel_size_x_, voxel_size_y_, voxel_size_z_); - faster_voxel_filter.set_field_offsets(input); + faster_voxel_filter.set_field_offsets(input, this->get_logger()); faster_voxel_filter.filter(input, output, transform_info, this->get_logger()); } diff --git a/sensing/pointcloud_preprocessor/src/filter.cpp b/sensing/pointcloud_preprocessor/src/filter.cpp index b306e23af5e8e..9b52babac88d6 100644 --- a/sensing/pointcloud_preprocessor/src/filter.cpp +++ b/sensing/pointcloud_preprocessor/src/filter.cpp @@ -51,6 +51,8 @@ #include "pointcloud_preprocessor/filter.hpp" +#include "pointcloud_preprocessor/utility/memory.hpp" + #include #include @@ -411,6 +413,30 @@ bool pointcloud_preprocessor::Filter::convert_output_costly(std::unique_ptrget_logger(), "[input_indices_callback] Invalid input!"); return; diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp index 7da38e47a16df..88d1666267c8f 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp @@ -28,7 +28,7 @@ namespace pointcloud_preprocessor { -using autoware_point_types::PointXYZIRADRT; +using autoware_point_types::PointXYZIRCAEDT; using autoware_point_types::ReturnType; using diagnostic_msgs::msg::DiagnosticStatus; @@ -105,22 +105,22 @@ void DualReturnOutlierFilterComponent::filter( if (indices) { RCLCPP_WARN(get_logger(), "Indices are not supported and will be ignored"); } - pcl::PointCloud::Ptr pcl_input(new pcl::PointCloud); + pcl::PointCloud::Ptr pcl_input(new pcl::PointCloud); pcl::fromROSMsg(*input, *pcl_input); uint32_t vertical_bins = vertical_bins_; uint32_t horizontal_bins = 36; - float max_azimuth = 36000.0f; + float max_azimuth = 2 * M_PI; float min_azimuth = 0.0f; switch (roi_mode_map_[roi_mode_]) { case 2: { - max_azimuth = max_azimuth_deg_ * 100.0; - min_azimuth = min_azimuth_deg_ * 100.0; + max_azimuth = max_azimuth_deg_ * (M_PI / 180.0); + min_azimuth = min_azimuth_deg_ * (M_PI / 180.0); break; } default: { - max_azimuth = 36000.0f; + max_azimuth = 2 * M_PI; min_azimuth = 0.0f; break; } @@ -129,13 +129,13 @@ void DualReturnOutlierFilterComponent::filter( uint32_t horizontal_resolution = static_cast((max_azimuth - min_azimuth) / horizontal_bins); - pcl::PointCloud::Ptr pcl_output(new pcl::PointCloud); + pcl::PointCloud::Ptr pcl_output(new pcl::PointCloud); pcl_output->points.reserve(pcl_input->points.size()); - std::vector> pcl_input_ring_array; - std::vector> weak_first_pcl_input_ring_array; + std::vector> pcl_input_ring_array; + std::vector> weak_first_pcl_input_ring_array; - pcl::PointCloud::Ptr noise_output(new pcl::PointCloud); + pcl::PointCloud::Ptr noise_output(new pcl::PointCloud); noise_output->points.reserve(pcl_input->points.size()); pcl_input_ring_array.resize( vertical_bins); // TODO(davidw): this is for Pandar 40 only, make dynamic @@ -144,9 +144,9 @@ void DualReturnOutlierFilterComponent::filter( // Split into 36 x 10 degree bins x 40 lines (TODO: change to dynamic) for (const auto & p : pcl_input->points) { if (p.return_type == ReturnType::DUAL_WEAK_FIRST) { - weak_first_pcl_input_ring_array.at(p.ring).push_back(p); + weak_first_pcl_input_ring_array.at(p.channel).push_back(p); } else { - pcl_input_ring_array.at(p.ring).push_back(p); + pcl_input_ring_array.at(p.channel).push_back(p); } } @@ -159,16 +159,16 @@ void DualReturnOutlierFilterComponent::filter( } std::vector deleted_azimuths; std::vector deleted_distances; - pcl::PointCloud temp_segment; + pcl::PointCloud temp_segment; bool keep_next = false; - uint ring_id = weak_first_single_ring.points.front().ring; + uint ring_id = weak_first_single_ring.points.front().channel; for (auto iter = std::begin(weak_first_single_ring) + 1; iter != std::end(weak_first_single_ring) - 1; ++iter) { const float min_dist = std::min(iter->distance, (iter + 1)->distance); const float max_dist = std::max(iter->distance, (iter + 1)->distance); float azimuth_diff = (iter + 1)->azimuth - iter->azimuth; - azimuth_diff = azimuth_diff < 0.f ? azimuth_diff + 36000.f : azimuth_diff; + azimuth_diff = azimuth_diff < 0.f ? azimuth_diff + 2 * M_PI : azimuth_diff; if (max_dist < min_dist * weak_first_distance_ratio_ && azimuth_diff < max_azimuth_diff) { temp_segment.points.push_back(*iter); @@ -278,14 +278,14 @@ void DualReturnOutlierFilterComponent::filter( if (input_ring.size() < 2) { continue; } - pcl::PointCloud temp_segment; + pcl::PointCloud temp_segment; bool keep_next = false; // uint ring_id = input_ring.points.front().ring; for (auto iter = std::begin(input_ring) + 1; iter != std::end(input_ring) - 1; ++iter) { const float min_dist = std::min(iter->distance, (iter + 1)->distance); const float max_dist = std::max(iter->distance, (iter + 1)->distance); float azimuth_diff = (iter + 1)->azimuth - iter->azimuth; - azimuth_diff = azimuth_diff < 0.f ? azimuth_diff + 36000.f : azimuth_diff; + azimuth_diff = azimuth_diff < 0.f ? azimuth_diff + 2 * M_PI : azimuth_diff; if (max_dist < min_dist * general_distance_ratio_ && azimuth_diff < max_azimuth_diff) { temp_segment.points.push_back(*iter); diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp index 28fbc11b77180..3182c6fc6a075 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp @@ -79,24 +79,22 @@ void RingOutlierFilterComponent::faster_filter( } stop_watch_ptr_->toc("processing_time", true); - output.point_step = sizeof(PointXYZI); + output.point_step = sizeof(OutputPointType); output.data.resize(output.point_step * input->width); size_t output_size = 0; - pcl::PointCloud::Ptr outlier_pcl(new pcl::PointCloud); - - const auto ring_offset = - input->fields.at(static_cast(autoware_point_types::PointIndex::Ring)).offset; - const auto azimuth_offset = - input->fields.at(static_cast(autoware_point_types::PointIndex::Azimuth)).offset; - const auto distance_offset = - input->fields.at(static_cast(autoware_point_types::PointIndex::Distance)).offset; - const auto intensity_offset = - input->fields.at(static_cast(autoware_point_types::PointIndex::Intensity)).offset; - const auto return_type_offset = - input->fields.at(static_cast(autoware_point_types::PointIndex::ReturnType)).offset; - const auto time_stamp_offset = - input->fields.at(static_cast(autoware_point_types::PointIndex::TimeStamp)).offset; + pcl::PointCloud::Ptr outlier_pcl(new pcl::PointCloud); + + const auto input_channel_offset = + input->fields.at(static_cast(InputPointIndex::Channel)).offset; + const auto input_azimuth_offset = + input->fields.at(static_cast(InputPointIndex::Azimuth)).offset; + const auto input_distance_offset = + input->fields.at(static_cast(InputPointIndex::Distance)).offset; + const auto input_intensity_offset = + input->fields.at(static_cast(InputPointIndex::Intensity)).offset; + const auto input_return_type_offset = + input->fields.at(static_cast(InputPointIndex::ReturnType)).offset; std::vector> ring2indices; ring2indices.reserve(max_rings_num_); @@ -107,7 +105,8 @@ void RingOutlierFilterComponent::faster_filter( } for (size_t data_idx = 0; data_idx < input->data.size(); data_idx += input->point_step) { - const uint16_t ring = *reinterpret_cast(&input->data[data_idx + ring_offset]); + const uint16_t ring = + *reinterpret_cast(&input->data[data_idx + input_channel_offset]); ring2indices[ring].push_back(data_idx); } @@ -129,30 +128,30 @@ void RingOutlierFilterComponent::faster_filter( // if(std::abs(iter->distance - (iter+1)->distance) <= std::sqrt(iter->distance) * 0.08) const float & current_azimuth = - *reinterpret_cast(&input->data[current_data_idx + azimuth_offset]); + *reinterpret_cast(&input->data[current_data_idx + input_azimuth_offset]); const float & next_azimuth = - *reinterpret_cast(&input->data[next_data_idx + azimuth_offset]); + *reinterpret_cast(&input->data[next_data_idx + input_azimuth_offset]); float azimuth_diff = next_azimuth - current_azimuth; - azimuth_diff = azimuth_diff < 0.f ? azimuth_diff + 36000.f : azimuth_diff; + azimuth_diff = azimuth_diff < 0.f ? azimuth_diff + 2 * M_PI : azimuth_diff; const float & current_distance = - *reinterpret_cast(&input->data[current_data_idx + distance_offset]); + *reinterpret_cast(&input->data[current_data_idx + input_distance_offset]); const float & next_distance = - *reinterpret_cast(&input->data[next_data_idx + distance_offset]); + *reinterpret_cast(&input->data[next_data_idx + input_distance_offset]); if ( std::max(current_distance, next_distance) < std::min(current_distance, next_distance) * distance_ratio_ && - azimuth_diff < 100.f) { - continue; // Determined to be included in the same walk + azimuth_diff < 1.0 * (180.0 / M_PI)) { // one degree + continue; // Determined to be included in the same walk } if (isCluster( input, std::make_pair(indices[walk_first_idx], indices[walk_last_idx]), walk_last_idx - walk_first_idx + 1)) { for (int i = walk_first_idx; i <= walk_last_idx; i++) { - auto output_ptr = reinterpret_cast(&output.data[output_size]); - auto input_ptr = reinterpret_cast(&input->data[indices[i]]); + auto output_ptr = reinterpret_cast(&output.data[output_size]); + auto input_ptr = reinterpret_cast(&input->data[indices[i]]); if (transform_info.need_transform) { Eigen::Vector4f p(input_ptr->x, input_ptr->y, input_ptr->z, 1); @@ -161,41 +160,38 @@ void RingOutlierFilterComponent::faster_filter( output_ptr->y = p[1]; output_ptr->z = p[2]; } else { - *output_ptr = *input_ptr; + output_ptr->x = input_ptr->x; + output_ptr->y = input_ptr->y; + output_ptr->z = input_ptr->z; } - const float & intensity = - *reinterpret_cast(&input->data[indices[i] + intensity_offset]); + const std::uint8_t & intensity = *reinterpret_cast( + &input->data[indices[i] + input_intensity_offset]); output_ptr->intensity = intensity; + const std::uint8_t & return_type = *reinterpret_cast( + &input->data[indices[i] + input_return_type_offset]); + output_ptr->return_type = return_type; + + const std::uint8_t & channel = *reinterpret_cast( + &input->data[indices[i] + input_channel_offset]); + output_ptr->channel = channel; + output_size += output.point_step; } } else if (publish_outlier_pointcloud_) { for (int i = walk_first_idx; i <= walk_last_idx; i++) { - PointXYZIRADRT outlier_point; auto input_ptr = - reinterpret_cast(&input->data[indices[walk_first_idx]]); + reinterpret_cast(&input->data[indices[walk_first_idx]]); + InputPointType outlier_point = *input_ptr; + if (transform_info.need_transform) { Eigen::Vector4f p(input_ptr->x, input_ptr->y, input_ptr->z, 1); p = transform_info.eigen_transform * p; outlier_point.x = p[0]; outlier_point.y = p[1]; outlier_point.z = p[2]; - } else { - outlier_point = *input_ptr; } - outlier_point.intensity = *reinterpret_cast( - &input->data[indices[walk_first_idx] + intensity_offset]); - outlier_point.ring = *reinterpret_cast( - &input->data[indices[walk_first_idx] + ring_offset]); - outlier_point.azimuth = *reinterpret_cast( - &input->data[indices[walk_first_idx] + azimuth_offset]); - outlier_point.distance = *reinterpret_cast( - &input->data[indices[walk_first_idx] + distance_offset]); - outlier_point.return_type = *reinterpret_cast( - &input->data[indices[walk_first_idx] + return_type_offset]); - outlier_point.time_stamp = *reinterpret_cast( - &input->data[indices[walk_first_idx] + time_stamp_offset]); outlier_pcl->push_back(outlier_point); } } @@ -209,8 +205,8 @@ void RingOutlierFilterComponent::faster_filter( input, std::make_pair(indices[walk_first_idx], indices[walk_last_idx]), walk_last_idx - walk_first_idx + 1)) { for (int i = walk_first_idx; i <= walk_last_idx; i++) { - auto output_ptr = reinterpret_cast(&output.data[output_size]); - auto input_ptr = reinterpret_cast(&input->data[indices[i]]); + auto output_ptr = reinterpret_cast(&output.data[output_size]); + auto input_ptr = reinterpret_cast(&input->data[indices[i]]); if (transform_info.need_transform) { Eigen::Vector4f p(input_ptr->x, input_ptr->y, input_ptr->z, 1); @@ -219,46 +215,42 @@ void RingOutlierFilterComponent::faster_filter( output_ptr->y = p[1]; output_ptr->z = p[2]; } else { - *output_ptr = *input_ptr; + output_ptr->x = input_ptr->x; + output_ptr->y = input_ptr->y; + output_ptr->z = input_ptr->z; } const float & intensity = - *reinterpret_cast(&input->data[indices[i] + intensity_offset]); + *reinterpret_cast(&input->data[indices[i] + input_intensity_offset]); output_ptr->intensity = intensity; + const std::uint8_t & return_type = *reinterpret_cast( + &input->data[indices[i] + input_return_type_offset]); + output_ptr->return_type = return_type; + + const std::uint8_t & channel = + *reinterpret_cast(&input->data[indices[i] + input_channel_offset]); + output_ptr->channel = channel; + output_size += output.point_step; } } else if (publish_outlier_pointcloud_) { for (int i = walk_first_idx; i < walk_last_idx; i++) { - PointXYZIRADRT outlier_point; - - auto input_ptr = reinterpret_cast(&input->data[indices[i]]); + auto input_ptr = reinterpret_cast(&input->data[indices[i]]); + InputPointType outlier_point = *input_ptr; if (transform_info.need_transform) { Eigen::Vector4f p(input_ptr->x, input_ptr->y, input_ptr->z, 1); p = transform_info.eigen_transform * p; outlier_point.x = p[0]; outlier_point.y = p[1]; outlier_point.z = p[2]; - } else { - outlier_point = *input_ptr; } - outlier_point.intensity = - *reinterpret_cast(&input->data[indices[i] + intensity_offset]); - outlier_point.ring = - *reinterpret_cast(&input->data[indices[i] + ring_offset]); - outlier_point.azimuth = - *reinterpret_cast(&input->data[indices[i] + azimuth_offset]); - outlier_point.distance = - *reinterpret_cast(&input->data[indices[i] + distance_offset]); - outlier_point.return_type = - *reinterpret_cast(&input->data[indices[i] + return_type_offset]); - outlier_point.time_stamp = - *reinterpret_cast(&input->data[indices[i] + time_stamp_offset]); + outlier_pcl->push_back(outlier_point); } } } - setUpPointCloudFormat(input, output, output_size, /*num_fields=*/4); + setUpPointCloudFormat(input, output, output_size); if (publish_outlier_pointcloud_) { PointCloud2 outlier; @@ -348,8 +340,7 @@ rcl_interfaces::msg::SetParametersResult RingOutlierFilterComponent::paramCallba } void RingOutlierFilterComponent::setUpPointCloudFormat( - const PointCloud2ConstPtr & input, PointCloud2 & formatted_points, size_t points_size, - size_t num_fields) + const PointCloud2ConstPtr & input, PointCloud2 & formatted_points, size_t points_size) { formatted_points.data.resize(points_size); // Note that `input->header.frame_id` is data before converted when `transform_info.need_transform @@ -363,40 +354,40 @@ void RingOutlierFilterComponent::setUpPointCloudFormat( formatted_points.is_bigendian = input->is_bigendian; formatted_points.is_dense = input->is_dense; - sensor_msgs::PointCloud2Modifier pcd_modifier(formatted_points); - pcd_modifier.setPointCloud2Fields( - num_fields, "x", 1, sensor_msgs::msg::PointField::FLOAT32, "y", 1, - sensor_msgs::msg::PointField::FLOAT32, "z", 1, sensor_msgs::msg::PointField::FLOAT32, - "intensity", 1, sensor_msgs::msg::PointField::FLOAT32); + // This is a hack to get the correct fields in the output point cloud without creating the fields + // manually + sensor_msgs::msg::PointCloud2 msg_aux; + pcl::toROSMsg(pcl::PointCloud(), msg_aux); + formatted_points.fields = msg_aux.fields; } float RingOutlierFilterComponent::calculateVisibilityScore( const sensor_msgs::msg::PointCloud2 & input) { - pcl::PointCloud::Ptr input_cloud(new pcl::PointCloud); + pcl::PointCloud::Ptr input_cloud(new pcl::PointCloud); pcl::fromROSMsg(input, *input_cloud); const uint32_t vertical_bins = vertical_bins_; const uint32_t horizontal_bins = horizontal_bins_; - const float max_azimuth = max_azimuth_deg_ * 100.0; - const float min_azimuth = min_azimuth_deg_ * 100.0; + const float max_azimuth = max_azimuth_deg_ * (M_PI / 180.f); + const float min_azimuth = min_azimuth_deg_ * (M_PI / 180.f); const uint32_t horizontal_resolution = static_cast((max_azimuth - min_azimuth) / horizontal_bins); - std::vector> ring_point_clouds(vertical_bins); + std::vector> ring_point_clouds(vertical_bins); cv::Mat frequency_image(cv::Size(horizontal_bins, vertical_bins), CV_8UC1, cv::Scalar(0)); // Split points into rings for (const auto & point : input_cloud->points) { - ring_point_clouds.at(point.ring).push_back(point); + ring_point_clouds.at(point.channel).push_back(point); } // Calculate frequency for each bin in each ring for (const auto & ring_points : ring_point_clouds) { if (ring_points.empty()) continue; - const uint ring_id = ring_points.front().ring; + const uint ring_id = ring_points.front().channel; std::vector frequency_in_ring(horizontal_bins, 0); for (const auto & point : ring_points.points) { diff --git a/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp b/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp index a2e70d0f7ead9..7816e9d4b325a 100644 --- a/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp @@ -430,39 +430,56 @@ void PointCloudDataSynchronizerComponent::publish() } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -void PointCloudDataSynchronizerComponent::convertToXYZICloud( +void PointCloudDataSynchronizerComponent::convertToXYZIRCCloud( const sensor_msgs::msg::PointCloud2::SharedPtr & input_ptr, sensor_msgs::msg::PointCloud2::SharedPtr & output_ptr) { output_ptr->header = input_ptr->header; - PointCloud2Modifier output_modifier{*output_ptr, input_ptr->header.frame_id}; + + PointCloud2Modifier output_modifier{ + *output_ptr, input_ptr->header.frame_id}; output_modifier.reserve(input_ptr->width); - bool has_intensity = std::any_of( - input_ptr->fields.begin(), input_ptr->fields.end(), - [](auto & field) { return field.name == "intensity"; }); + bool has_valid_intensity = + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + return field.name == "intensity" && field.datatype == sensor_msgs::msg::PointField::UINT8; + }); + + bool has_valid_return_type = + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + return field.name == "return_type" && field.datatype == sensor_msgs::msg::PointField::UINT8; + }); + + bool has_valid_channel = + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + return field.name == "channel" && field.datatype == sensor_msgs::msg::PointField::UINT16; + }); sensor_msgs::PointCloud2Iterator it_x(*input_ptr, "x"); sensor_msgs::PointCloud2Iterator it_y(*input_ptr, "y"); sensor_msgs::PointCloud2Iterator it_z(*input_ptr, "z"); - if (has_intensity) { - sensor_msgs::PointCloud2Iterator it_i(*input_ptr, "intensity"); - for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_i) { - PointXYZI point; + if (has_valid_intensity && has_valid_return_type && has_valid_channel) { + sensor_msgs::PointCloud2Iterator it_i(*input_ptr, "intensity"); + sensor_msgs::PointCloud2Iterator it_r(*input_ptr, "return_type"); + sensor_msgs::PointCloud2Iterator it_c(*input_ptr, "channel"); + + for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_i, ++it_r, ++it_c) { + PointXYZIRC point; point.x = *it_x; point.y = *it_y; point.z = *it_z; point.intensity = *it_i; + point.return_type = *it_r; + point.channel = *it_c; output_modifier.push_back(std::move(point)); } } else { for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z) { - PointXYZI point; + PointXYZIRC point; point.x = *it_x; point.y = *it_y; point.z = *it_z; - point.intensity = 0.0f; output_modifier.push_back(std::move(point)); } } @@ -489,9 +506,9 @@ void PointCloudDataSynchronizerComponent::cloud_callback( { std::lock_guard lock(mutex_); auto input = std::make_shared(*input_ptr); - sensor_msgs::msg::PointCloud2::SharedPtr xyzi_input_ptr(new sensor_msgs::msg::PointCloud2()); + sensor_msgs::msg::PointCloud2::SharedPtr xyzirc_input_ptr(new sensor_msgs::msg::PointCloud2()); if (input->data.size() > 0) { - convertToXYZICloud(input, xyzi_input_ptr); + convertToXYZIRCCloud(input, xyzirc_input_ptr); } const bool is_already_subscribed_this = (cloud_stdmap_[topic_name] != nullptr); @@ -500,7 +517,7 @@ void PointCloudDataSynchronizerComponent::cloud_callback( [](const auto & e) { return e.second != nullptr; }); if (is_already_subscribed_this) { - cloud_stdmap_tmp_[topic_name] = xyzi_input_ptr; + cloud_stdmap_tmp_[topic_name] = xyzirc_input_ptr; if (!is_already_subscribed_tmp) { auto period = std::chrono::duration_cast( @@ -513,7 +530,7 @@ void PointCloudDataSynchronizerComponent::cloud_callback( timer_->reset(); } } else { - cloud_stdmap_[topic_name] = xyzi_input_ptr; + cloud_stdmap_[topic_name] = xyzirc_input_ptr; const bool is_subscribed_all = std::all_of( std::begin(cloud_stdmap_), std::end(cloud_stdmap_), diff --git a/sensing/pointcloud_preprocessor/src/utility/utilities.cpp b/sensing/pointcloud_preprocessor/src/utility/geometry.cpp similarity index 52% rename from sensing/pointcloud_preprocessor/src/utility/utilities.cpp rename to sensing/pointcloud_preprocessor/src/utility/geometry.cpp index ec84a2467db78..e3013d05d925f 100644 --- a/sensing/pointcloud_preprocessor/src/utility/utilities.cpp +++ b/sensing/pointcloud_preprocessor/src/utility/geometry.cpp @@ -1,4 +1,4 @@ -// Copyright 2022 Tier IV, Inc. +// Copyright 2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,9 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "pointcloud_preprocessor/utility/utilities.hpp" - -#include +#include "pointcloud_preprocessor/utility/geometry.hpp" namespace pointcloud_preprocessor::utils { @@ -157,91 +155,4 @@ bool point_within_cgal_polys( return false; } -bool is_data_layout_compatible_with_PointXYZI(const sensor_msgs::msg::PointCloud2 & input) -{ - using autoware_point_types::PointIndex; - using autoware_point_types::PointXYZI; - if (input.fields.size() < 4) { - return false; - } - bool same_layout = true; - const auto & field_x = input.fields.at(static_cast(PointIndex::X)); - same_layout &= field_x.name == "x"; - same_layout &= field_x.offset == offsetof(PointXYZI, x); - same_layout &= field_x.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_x.count == 1; - const auto & field_y = input.fields.at(static_cast(PointIndex::Y)); - same_layout &= field_y.name == "y"; - same_layout &= field_y.offset == offsetof(PointXYZI, y); - same_layout &= field_y.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_y.count == 1; - const auto & field_z = input.fields.at(static_cast(PointIndex::Z)); - same_layout &= field_z.name == "z"; - same_layout &= field_z.offset == offsetof(PointXYZI, z); - same_layout &= field_z.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_z.count == 1; - const auto & field_intensity = input.fields.at(static_cast(PointIndex::Intensity)); - same_layout &= field_intensity.name == "intensity"; - same_layout &= field_intensity.offset == offsetof(PointXYZI, intensity); - same_layout &= field_intensity.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_intensity.count == 1; - return same_layout; -} - -bool is_data_layout_compatible_with_PointXYZIRADRT(const sensor_msgs::msg::PointCloud2 & input) -{ - using autoware_point_types::PointIndex; - using autoware_point_types::PointXYZIRADRT; - if (input.fields.size() < 9) { - return false; - } - bool same_layout = true; - const auto & field_x = input.fields.at(static_cast(PointIndex::X)); - same_layout &= field_x.name == "x"; - same_layout &= field_x.offset == offsetof(PointXYZIRADRT, x); - same_layout &= field_x.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_x.count == 1; - const auto & field_y = input.fields.at(static_cast(PointIndex::Y)); - same_layout &= field_y.name == "y"; - same_layout &= field_y.offset == offsetof(PointXYZIRADRT, y); - same_layout &= field_y.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_y.count == 1; - const auto & field_z = input.fields.at(static_cast(PointIndex::Z)); - same_layout &= field_z.name == "z"; - same_layout &= field_z.offset == offsetof(PointXYZIRADRT, z); - same_layout &= field_z.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_z.count == 1; - const auto & field_intensity = input.fields.at(static_cast(PointIndex::Intensity)); - same_layout &= field_intensity.name == "intensity"; - same_layout &= field_intensity.offset == offsetof(PointXYZIRADRT, intensity); - same_layout &= field_intensity.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_intensity.count == 1; - const auto & field_ring = input.fields.at(static_cast(PointIndex::Ring)); - same_layout &= field_ring.name == "ring"; - same_layout &= field_ring.offset == offsetof(PointXYZIRADRT, ring); - same_layout &= field_ring.datatype == sensor_msgs::msg::PointField::UINT16; - same_layout &= field_ring.count == 1; - const auto & field_azimuth = input.fields.at(static_cast(PointIndex::Azimuth)); - same_layout &= field_azimuth.name == "azimuth"; - same_layout &= field_azimuth.offset == offsetof(PointXYZIRADRT, azimuth); - same_layout &= field_azimuth.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_azimuth.count == 1; - const auto & field_distance = input.fields.at(static_cast(PointIndex::Distance)); - same_layout &= field_distance.name == "distance"; - same_layout &= field_distance.offset == offsetof(PointXYZIRADRT, distance); - same_layout &= field_distance.datatype == sensor_msgs::msg::PointField::FLOAT32; - same_layout &= field_distance.count == 1; - const auto & field_return_type = input.fields.at(static_cast(PointIndex::ReturnType)); - same_layout &= field_return_type.name == "return_type"; - same_layout &= field_return_type.offset == offsetof(PointXYZIRADRT, return_type); - same_layout &= field_return_type.datatype == sensor_msgs::msg::PointField::UINT8; - same_layout &= field_return_type.count == 1; - const auto & field_time_stamp = input.fields.at(static_cast(PointIndex::TimeStamp)); - same_layout &= field_time_stamp.name == "time_stamp"; - same_layout &= field_time_stamp.offset == offsetof(PointXYZIRADRT, time_stamp); - same_layout &= field_time_stamp.datatype == sensor_msgs::msg::PointField::FLOAT64; - same_layout &= field_time_stamp.count == 1; - return same_layout; -} - } // namespace pointcloud_preprocessor::utils diff --git a/sensing/pointcloud_preprocessor/src/utility/memory.cpp b/sensing/pointcloud_preprocessor/src/utility/memory.cpp new file mode 100644 index 0000000000000..138573a2014ff --- /dev/null +++ b/sensing/pointcloud_preprocessor/src/utility/memory.cpp @@ -0,0 +1,211 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "pointcloud_preprocessor/utility/memory.hpp" + +#include + +namespace pointcloud_preprocessor::utils +{ +bool is_data_layout_compatible_with_point_xyzi(const sensor_msgs::msg::PointCloud2 & input) +{ + using PointIndex = autoware_point_types::PointXYZIIndex; + using autoware_point_types::PointXYZI; + if (input.fields.size() < 4) { + return false; + } + bool same_layout = true; + const auto & field_x = input.fields.at(static_cast(PointIndex::X)); + same_layout &= field_x.name == "x"; + same_layout &= field_x.offset == offsetof(PointXYZI, x); + same_layout &= field_x.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_x.count == 1; + const auto & field_y = input.fields.at(static_cast(PointIndex::Y)); + same_layout &= field_y.name == "y"; + same_layout &= field_y.offset == offsetof(PointXYZI, y); + same_layout &= field_y.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_y.count == 1; + const auto & field_z = input.fields.at(static_cast(PointIndex::Z)); + same_layout &= field_z.name == "z"; + same_layout &= field_z.offset == offsetof(PointXYZI, z); + same_layout &= field_z.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_z.count == 1; + const auto & field_intensity = input.fields.at(static_cast(PointIndex::Intensity)); + same_layout &= field_intensity.name == "intensity"; + same_layout &= field_intensity.offset == offsetof(PointXYZI, intensity); + same_layout &= field_intensity.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_intensity.count == 1; + return same_layout; +} + +bool is_data_layout_compatible_with_point_xyzirc(const sensor_msgs::msg::PointCloud2 & input) +{ + using PointIndex = autoware_point_types::PointXYZIRCIndex; + using autoware_point_types::PointXYZIRC; + if (input.fields.size() < 6) { + return false; + } + bool same_layout = true; + const auto & field_x = input.fields.at(static_cast(PointIndex::X)); + same_layout &= field_x.name == "x"; + same_layout &= field_x.offset == offsetof(PointXYZIRC, x); + same_layout &= field_x.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_x.count == 1; + const auto & field_y = input.fields.at(static_cast(PointIndex::Y)); + same_layout &= field_y.name == "y"; + same_layout &= field_y.offset == offsetof(PointXYZIRC, y); + same_layout &= field_y.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_y.count == 1; + const auto & field_z = input.fields.at(static_cast(PointIndex::Z)); + same_layout &= field_z.name == "z"; + same_layout &= field_z.offset == offsetof(PointXYZIRC, z); + same_layout &= field_z.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_z.count == 1; + const auto & field_intensity = input.fields.at(static_cast(PointIndex::Intensity)); + same_layout &= field_intensity.name == "intensity"; + same_layout &= field_intensity.offset == offsetof(PointXYZIRC, intensity); + same_layout &= field_intensity.datatype == sensor_msgs::msg::PointField::UINT8; + same_layout &= field_intensity.count == 1; + const auto & field_return_type = input.fields.at(static_cast(PointIndex::ReturnType)); + same_layout &= field_return_type.name == "return_type"; + same_layout &= field_return_type.offset == offsetof(PointXYZIRC, return_type); + same_layout &= field_return_type.datatype == sensor_msgs::msg::PointField::UINT8; + same_layout &= field_return_type.count == 1; + const auto & field_ring = input.fields.at(static_cast(PointIndex::Channel)); + same_layout &= field_ring.name == "channel"; + same_layout &= field_ring.offset == offsetof(PointXYZIRC, channel); + same_layout &= field_ring.datatype == sensor_msgs::msg::PointField::UINT16; + same_layout &= field_ring.count == 1; + + return same_layout; +} + +bool is_data_layout_compatible_with_point_xyziradrt(const sensor_msgs::msg::PointCloud2 & input) +{ + using PointIndex = autoware_point_types::PointXYZIRADRTIndex; + using autoware_point_types::PointXYZIRADRT; + if (input.fields.size() < 9) { + return false; + } + bool same_layout = true; + const auto & field_x = input.fields.at(static_cast(PointIndex::X)); + same_layout &= field_x.name == "x"; + same_layout &= field_x.offset == offsetof(PointXYZIRADRT, x); + same_layout &= field_x.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_x.count == 1; + const auto & field_y = input.fields.at(static_cast(PointIndex::Y)); + same_layout &= field_y.name == "y"; + same_layout &= field_y.offset == offsetof(PointXYZIRADRT, y); + same_layout &= field_y.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_y.count == 1; + const auto & field_z = input.fields.at(static_cast(PointIndex::Z)); + same_layout &= field_z.name == "z"; + same_layout &= field_z.offset == offsetof(PointXYZIRADRT, z); + same_layout &= field_z.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_z.count == 1; + const auto & field_intensity = input.fields.at(static_cast(PointIndex::Intensity)); + same_layout &= field_intensity.name == "intensity"; + same_layout &= field_intensity.offset == offsetof(PointXYZIRADRT, intensity); + same_layout &= field_intensity.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_intensity.count == 1; + const auto & field_ring = input.fields.at(static_cast(PointIndex::Ring)); + same_layout &= field_ring.name == "ring"; + same_layout &= field_ring.offset == offsetof(PointXYZIRADRT, ring); + same_layout &= field_ring.datatype == sensor_msgs::msg::PointField::UINT16; + same_layout &= field_ring.count == 1; + const auto & field_azimuth = input.fields.at(static_cast(PointIndex::Azimuth)); + same_layout &= field_azimuth.name == "azimuth"; + same_layout &= field_azimuth.offset == offsetof(PointXYZIRADRT, azimuth); + same_layout &= field_azimuth.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_azimuth.count == 1; + const auto & field_distance = input.fields.at(static_cast(PointIndex::Distance)); + same_layout &= field_distance.name == "distance"; + same_layout &= field_distance.offset == offsetof(PointXYZIRADRT, distance); + same_layout &= field_distance.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_distance.count == 1; + const auto & field_return_type = input.fields.at(static_cast(PointIndex::ReturnType)); + same_layout &= field_return_type.name == "return_type"; + same_layout &= field_return_type.offset == offsetof(PointXYZIRADRT, return_type); + same_layout &= field_return_type.datatype == sensor_msgs::msg::PointField::UINT8; + same_layout &= field_return_type.count == 1; + const auto & field_time_stamp = input.fields.at(static_cast(PointIndex::TimeStamp)); + same_layout &= field_time_stamp.name == "time_stamp"; + same_layout &= field_time_stamp.offset == offsetof(PointXYZIRADRT, time_stamp); + same_layout &= field_time_stamp.datatype == sensor_msgs::msg::PointField::FLOAT64; + same_layout &= field_time_stamp.count == 1; + return same_layout; +} + +bool is_data_layout_compatible_with_point_xyzircaedt(const sensor_msgs::msg::PointCloud2 & input) +{ + using PointIndex = autoware_point_types::PointXYZIRCAEDTIndex; + using autoware_point_types::PointXYZIRCAEDT; + if (input.fields.size() != 10) { + return false; + } + bool same_layout = true; + const auto & field_x = input.fields.at(static_cast(PointIndex::X)); + same_layout &= field_x.name == "x"; + same_layout &= field_x.offset == offsetof(PointXYZIRCAEDT, x); + same_layout &= field_x.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_x.count == 1; + const auto & field_y = input.fields.at(static_cast(PointIndex::Y)); + same_layout &= field_y.name == "y"; + same_layout &= field_y.offset == offsetof(PointXYZIRCAEDT, y); + same_layout &= field_y.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_y.count == 1; + const auto & field_z = input.fields.at(static_cast(PointIndex::Z)); + same_layout &= field_z.name == "z"; + same_layout &= field_z.offset == offsetof(PointXYZIRCAEDT, z); + same_layout &= field_z.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_z.count == 1; + const auto & field_intensity = input.fields.at(static_cast(PointIndex::Intensity)); + same_layout &= field_intensity.name == "intensity"; + same_layout &= field_intensity.offset == offsetof(PointXYZIRCAEDT, intensity); + same_layout &= field_intensity.datatype == sensor_msgs::msg::PointField::UINT8; + same_layout &= field_intensity.count == 1; + const auto & field_return_type = input.fields.at(static_cast(PointIndex::ReturnType)); + same_layout &= field_return_type.name == "return_type"; + same_layout &= field_return_type.offset == offsetof(PointXYZIRCAEDT, return_type); + same_layout &= field_return_type.datatype == sensor_msgs::msg::PointField::UINT8; + same_layout &= field_return_type.count == 1; + const auto & field_ring = input.fields.at(static_cast(PointIndex::Channel)); + same_layout &= field_ring.name == "channel"; + same_layout &= field_ring.offset == offsetof(PointXYZIRCAEDT, channel); + same_layout &= field_ring.datatype == sensor_msgs::msg::PointField::UINT16; + same_layout &= field_ring.count == 1; + const auto & field_azimuth = input.fields.at(static_cast(PointIndex::Azimuth)); + same_layout &= field_azimuth.name == "azimuth"; + same_layout &= field_azimuth.offset == offsetof(PointXYZIRCAEDT, azimuth); + same_layout &= field_azimuth.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_azimuth.count == 1; + const auto & field_elevation = input.fields.at(static_cast(PointIndex::Elevation)); + same_layout &= field_elevation.name == "elevation"; + same_layout &= field_elevation.offset == offsetof(PointXYZIRCAEDT, elevation); + same_layout &= field_elevation.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_elevation.count == 1; + const auto & field_distance = input.fields.at(static_cast(PointIndex::Distance)); + same_layout &= field_distance.name == "distance"; + same_layout &= field_distance.offset == offsetof(PointXYZIRCAEDT, distance); + same_layout &= field_distance.datatype == sensor_msgs::msg::PointField::FLOAT32; + same_layout &= field_distance.count == 1; + const auto & field_time_stamp = input.fields.at(static_cast(PointIndex::TimeStamp)); + same_layout &= field_time_stamp.name == "time_stamp"; + same_layout &= field_time_stamp.offset == offsetof(PointXYZIRCAEDT, time_stamp); + same_layout &= field_time_stamp.datatype == sensor_msgs::msg::PointField::UINT32; + same_layout &= field_time_stamp.count == 1; + return same_layout; +} + +} // namespace pointcloud_preprocessor::utils diff --git a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp index 7997aaf43c202..3b500bfb3e982 100644 --- a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp +++ b/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp @@ -58,7 +58,7 @@ class DistortionCorrectorTest : public ::testing::Test // Spin the node for a while to ensure transforms are published auto start = std::chrono::steady_clock::now(); - auto timeout = std::chrono::seconds(1); + auto timeout = std::chrono::milliseconds(100); while (std::chrono::steady_clock::now() - start < timeout) { rclcpp::spin_some(node_); std::this_thread::sleep_for(std::chrono::milliseconds(10)); @@ -194,19 +194,24 @@ class DistortionCorrectorTest : public ::testing::Test }}; // Generate timestamps for the points - std::vector timestamps = generatePointTimestamps(stamp, number_of_points_); + std::vector timestamps = generatePointTimestamps(stamp, number_of_points_); sensor_msgs::PointCloud2Modifier modifier(pointcloud_msg); modifier.setPointCloud2Fields( - 4, "x", 1, sensor_msgs::msg::PointField::FLOAT32, "y", 1, + 10, "x", 1, sensor_msgs::msg::PointField::FLOAT32, "y", 1, sensor_msgs::msg::PointField::FLOAT32, "z", 1, sensor_msgs::msg::PointField::FLOAT32, - "time_stamp", 1, sensor_msgs::msg::PointField::FLOAT64); + "intensity", 1, sensor_msgs::msg::PointField::UINT8, "return_type", 1, + sensor_msgs::msg::PointField::UINT8, "channel", 1, sensor_msgs::msg::PointField::UINT16, + "azimuth", 1, sensor_msgs::msg::PointField::FLOAT32, "elevation", 1, + sensor_msgs::msg::PointField::FLOAT32, "distance", 1, sensor_msgs::msg::PointField::FLOAT32, + "time_stamp", 1, sensor_msgs::msg::PointField::UINT32); + modifier.resize(number_of_points_); sensor_msgs::PointCloud2Iterator iter_x(pointcloud_msg, "x"); sensor_msgs::PointCloud2Iterator iter_y(pointcloud_msg, "y"); sensor_msgs::PointCloud2Iterator iter_z(pointcloud_msg, "z"); - sensor_msgs::PointCloud2Iterator iter_t(pointcloud_msg, "time_stamp"); + sensor_msgs::PointCloud2Iterator iter_t(pointcloud_msg, "time_stamp"); for (size_t i = 0; i < number_of_points_; ++i) { *iter_x = points[i].x(); @@ -226,15 +231,15 @@ class DistortionCorrectorTest : public ::testing::Test return pointcloud_msg; } - std::vector generatePointTimestamps( + std::vector generatePointTimestamps( rclcpp::Time pointcloud_timestamp, size_t number_of_points) { - std::vector timestamps; - rclcpp::Time point_stamp = pointcloud_timestamp; + std::vector timestamps; + rclcpp::Time global_point_stamp = pointcloud_timestamp; for (size_t i = 0; i < number_of_points; ++i) { - double timestamp = point_stamp.seconds(); - timestamps.push_back(timestamp); - point_stamp = addMilliseconds(point_stamp, points_interval_ms_); + std::uint32_t relative_timestamp = (global_point_stamp - pointcloud_timestamp).nanoseconds(); + timestamps.push_back(relative_timestamp); + global_point_stamp = addMilliseconds(global_point_stamp, points_interval_ms_); } return timestamps; @@ -735,11 +740,11 @@ TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithPureLinearMotion) sensor_msgs::PointCloud2Iterator iter_x(expected_pointcloud_msg, "x"); sensor_msgs::PointCloud2Iterator iter_y(expected_pointcloud_msg, "y"); sensor_msgs::PointCloud2Iterator iter_z(expected_pointcloud_msg, "z"); - sensor_msgs::PointCloud2Iterator iter_t(expected_pointcloud_msg, "time_stamp"); + sensor_msgs::PointCloud2Iterator iter_t(expected_pointcloud_msg, "time_stamp"); std::vector expected_points; for (; iter_t != iter_t.end(); ++iter_t, ++iter_x, ++iter_y, ++iter_z) { - double time_offset = *iter_t - timestamp.seconds(); + double time_offset = static_cast(*iter_t) / 1e9; expected_points.emplace_back( *iter_x + static_cast(velocity * time_offset), *iter_y, *iter_z); } @@ -822,11 +827,11 @@ TEST_F(DistortionCorrectorTest, TestUndistortPointCloudWithPureRotationalMotion) sensor_msgs::PointCloud2Iterator iter_x(expected_pointcloud_msg, "x"); sensor_msgs::PointCloud2Iterator iter_y(expected_pointcloud_msg, "y"); sensor_msgs::PointCloud2Iterator iter_z(expected_pointcloud_msg, "z"); - sensor_msgs::PointCloud2Iterator iter_t(expected_pointcloud_msg, "time_stamp"); + sensor_msgs::PointCloud2Iterator iter_t(expected_pointcloud_msg, "time_stamp"); std::vector expected_pointcloud; for (; iter_t != iter_t.end(); ++iter_t, ++iter_x, ++iter_y, ++iter_z) { - double time_offset = *iter_t - timestamp.seconds(); + double time_offset = static_cast(*iter_t) / 1e9; float angle = angular_velocity * time_offset; // Set the quaternion for the current angle diff --git a/sensing/pointcloud_preprocessor/test/test_utilities.cpp b/sensing/pointcloud_preprocessor/test/test_utilities.cpp index 68c86dfbd0505..e3075b4b11e79 100644 --- a/sensing/pointcloud_preprocessor/test/test_utilities.cpp +++ b/sensing/pointcloud_preprocessor/test/test_utilities.cpp @@ -1,4 +1,4 @@ -// Copyright 2024 Tier IV, Inc. +// Copyright 2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "pointcloud_preprocessor/utility/utilities.hpp" +#include "pointcloud_preprocessor/utility/geometry.hpp" #include From fd5f5edca752cee7f5f3418dda1c0a7ea635541d Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Tue, 9 Jul 2024 22:43:00 +0900 Subject: [PATCH 117/306] feat(map_loader, route_handler)!: add format_version validation (#7074) Signed-off-by: Mamoru Sobue Co-authored-by: Yamato Ando --- .../config/lanelet2_map_loader.param.yaml | 1 + .../map_loader/lanelet2_map_loader_node.hpp | 4 +++ .../schema/lanelet2_map_loader.schema.json | 5 +++ .../lanelet2_map_loader_node.cpp | 32 +++++++++++++++++++ .../test/lanelet2_map_loader_launch.test.py | 1 + .../src/route_handler.cpp | 11 +++++++ 6 files changed, 54 insertions(+) diff --git a/map/map_loader/config/lanelet2_map_loader.param.yaml b/map/map_loader/config/lanelet2_map_loader.param.yaml index 48152605ec0a2..48d392a1b8e66 100755 --- a/map/map_loader/config/lanelet2_map_loader.param.yaml +++ b/map/map_loader/config/lanelet2_map_loader.param.yaml @@ -1,5 +1,6 @@ /**: ros__parameters: + allow_unsupported_version: true # flag to load unsupported format_version anyway. If true, just prints warning. center_line_resolution: 5.0 # [m] use_waypoints: true # "centerline" in the Lanelet2 map will be used as a "waypoints" tag. lanelet2_map_path: $(var lanelet2_map_path) # The lanelet2 map path diff --git a/map/map_loader/include/map_loader/lanelet2_map_loader_node.hpp b/map/map_loader/include/map_loader/lanelet2_map_loader_node.hpp index 8bfdbc5d5560c..e38d65201ee56 100644 --- a/map/map_loader/include/map_loader/lanelet2_map_loader_node.hpp +++ b/map/map_loader/include/map_loader/lanelet2_map_loader_node.hpp @@ -15,6 +15,7 @@ #ifndef MAP_LOADER__LANELET2_MAP_LOADER_NODE_HPP_ #define MAP_LOADER__LANELET2_MAP_LOADER_NODE_HPP_ +#include #include #include #include @@ -29,6 +30,9 @@ class Lanelet2MapLoaderNode : public rclcpp::Node { +public: + static constexpr lanelet::autoware::Version version = lanelet::autoware::version; + public: explicit Lanelet2MapLoaderNode(const rclcpp::NodeOptions & options); diff --git a/map/map_loader/schema/lanelet2_map_loader.schema.json b/map/map_loader/schema/lanelet2_map_loader.schema.json index aae295f847ab2..a55050e4ed570 100644 --- a/map/map_loader/schema/lanelet2_map_loader.schema.json +++ b/map/map_loader/schema/lanelet2_map_loader.schema.json @@ -6,6 +6,11 @@ "lanelet2_map_loader": { "type": "object", "properties": { + "allow_unsupported_version": { + "type": "boolean", + "description": "Flag to load unsupported format_version anyway. If true, just prints warning.", + "default": "true" + }, "center_line_resolution": { "type": "number", "description": "Resolution of the Lanelet center line [m]", diff --git a/map/map_loader/src/lanelet2_map_loader/lanelet2_map_loader_node.cpp b/map/map_loader/src/lanelet2_map_loader/lanelet2_map_loader_node.cpp index e2b2a052619e4..437c9e44cb7c1 100644 --- a/map/map_loader/src/lanelet2_map_loader/lanelet2_map_loader_node.cpp +++ b/map/map_loader/src/lanelet2_map_loader/lanelet2_map_loader_node.cpp @@ -49,6 +49,7 @@ #include #include +#include #include using autoware_map_msgs::msg::LaneletMapBin; @@ -64,6 +65,7 @@ Lanelet2MapLoaderNode::Lanelet2MapLoaderNode(const rclcpp::NodeOptions & options sub_map_projector_info_, [this](const MapProjectorInfo::Message::ConstSharedPtr msg) { on_map_projector_info(msg); }); + declare_parameter("allow_unsupported_version"); declare_parameter("lanelet2_map_path"); declare_parameter("center_line_resolution"); declare_parameter("use_waypoints"); @@ -72,6 +74,7 @@ Lanelet2MapLoaderNode::Lanelet2MapLoaderNode(const rclcpp::NodeOptions & options void Lanelet2MapLoaderNode::on_map_projector_info( const MapProjectorInfo::Message::ConstSharedPtr msg) { + const auto allow_unsupported_version = get_parameter("allow_unsupported_version").as_bool(); const auto lanelet2_filename = get_parameter("lanelet2_map_path").as_string(); const auto center_line_resolution = get_parameter("center_line_resolution").as_double(); const auto use_waypoints = get_parameter("use_waypoints").as_bool(); @@ -83,6 +86,35 @@ void Lanelet2MapLoaderNode::on_map_projector_info( return; } + std::string format_version{"null"}, map_version{""}; + lanelet::io_handlers::AutowareOsmParser::parseVersions( + lanelet2_filename, &format_version, &map_version); + if (format_version == "null" || format_version.empty() || !isdigit(format_version[0])) { + RCLCPP_WARN( + get_logger(), + "%s has no format_version(null) or non semver-style format_version(%s) information", + lanelet2_filename.c_str(), format_version.c_str()); + if (!allow_unsupported_version) { + throw std::invalid_argument( + "allow_unsupported_version is false, so stop loading lanelet map"); + } + } else if (const auto map_major_ver_opt = lanelet::io_handlers::parseMajorVersion(format_version); + map_major_ver_opt.has_value()) { + const auto map_major_ver = map_major_ver_opt.value(); + if (map_major_ver > static_cast(lanelet::autoware::version)) { + RCLCPP_WARN( + get_logger(), + "format_version(%ld) of the provided map(%s) is larger than the supported version(%ld)", + map_major_ver, lanelet2_filename.c_str(), + static_cast(lanelet::autoware::version)); + if (!allow_unsupported_version) { + throw std::invalid_argument( + "allow_unsupported_version is false, so stop loading lanelet map"); + } + } + } + RCLCPP_INFO(get_logger(), "Loaded map format_version: %s", format_version.c_str()); + // overwrite centerline if (use_waypoints) { lanelet::utils::overwriteLaneletsCenterlineWithWaypoints(map, center_line_resolution, false); diff --git a/map/map_loader/test/lanelet2_map_loader_launch.test.py b/map/map_loader/test/lanelet2_map_loader_launch.test.py index 9f9a59f565e3f..0a29a74e90b06 100644 --- a/map/map_loader/test/lanelet2_map_loader_launch.test.py +++ b/map/map_loader/test/lanelet2_map_loader_launch.test.py @@ -39,6 +39,7 @@ def generate_test_description(): "lanelet2_map_path": lanelet2_map_path, "center_line_resolution": 5.0, "use_waypoints": True, + "allow_unsupported_version": True, } ], ) diff --git a/planning/autoware_route_handler/src/route_handler.cpp b/planning/autoware_route_handler/src/route_handler.cpp index 0540fb1758802..9811f982f8e1b 100644 --- a/planning/autoware_route_handler/src/route_handler.cpp +++ b/planning/autoware_route_handler/src/route_handler.cpp @@ -15,6 +15,7 @@ #include "autoware/route_handler/route_handler.hpp" #include +#include #include #include #include @@ -186,6 +187,16 @@ void RouteHandler::setMap(const LaneletMapBin & map_msg) lanelet_map_ptr_ = std::make_shared(); lanelet::utils::conversion::fromBinMsg( map_msg, lanelet_map_ptr_, &traffic_rules_ptr_, &routing_graph_ptr_); + const auto map_major_version_opt = + lanelet::io_handlers::parseMajorVersion(map_msg.version_map_format); + if (!map_major_version_opt) { + RCLCPP_WARN( + logger_, "setMap() for invalid version map: %s", map_msg.version_map_format.c_str()); + } else if (map_major_version_opt.value() > static_cast(lanelet::autoware::version)) { + RCLCPP_WARN( + logger_, "setMap() for a map(version %s) newer than lanelet2_extension support version(%d)", + map_msg.version_map_format.c_str(), static_cast(lanelet::autoware::version)); + } const auto traffic_rules = lanelet::traffic_rules::TrafficRulesFactory::create( lanelet::Locations::Germany, lanelet::Participants::Vehicle); From 9bb01d7ca1e81f39945e219f6705d27a47b0424f Mon Sep 17 00:00:00 2001 From: Shunsuke Miura <37187849+miursh@users.noreply.github.com> Date: Tue, 9 Jul 2024 23:27:18 +0900 Subject: [PATCH 118/306] chore: add missing dependency (#7919) add raindrop_cluster_filter dependency --- launch/tier4_perception_launch/package.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index 5c15a937304ad..592ef7cf01f86 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -38,6 +38,7 @@ radar_fusion_to_detected_object radar_object_clustering radar_object_tracker + raindrop_cluster_filter shape_estimation topic_tools tracking_object_merger From a7c3c4bfd780cb32ab26703f21aa8e759d6afbde Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 10 Jul 2024 08:13:26 +0900 Subject: [PATCH 119/306] fix(static_obstacle_avoidance): stop position is unstable (#7880) fix(static_obstacle_avoidance): fix stop position Signed-off-by: satoshi-ota --- .../src/scene.cpp | 6 +- .../debug.hpp | 2 + .../scene.hpp | 6 + .../utils.hpp | 11 +- .../src/debug.cpp | 17 +++ .../src/scene.cpp | 46 ++++--- .../src/utils.cpp | 117 +++++++++--------- 7 files changed, 119 insertions(+), 86 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp index 303d7449e40dd..501554b0a2b02 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp @@ -113,10 +113,8 @@ void AvoidanceByLaneChange::updateSpecialData() : Direction::RIGHT; } - utils::static_obstacle_avoidance::updateRegisteredObject( - registered_objects_, avoidance_data_.target_objects, p); - utils::static_obstacle_avoidance::compensateDetectionLost( - registered_objects_, avoidance_data_.target_objects, avoidance_data_.other_objects); + utils::static_obstacle_avoidance::compensateLostTargetObjects( + registered_objects_, avoidance_data_, clock_.now(), planner_data_, p); std::sort( avoidance_data_.target_objects.begin(), avoidance_data_.target_objects.end(), diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/debug.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/debug.hpp index 316501fbbd37f..63985e574f3b2 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/debug.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/debug.hpp @@ -47,6 +47,8 @@ MarkerArray createTargetObjectsMarkerArray(const ObjectDataArray & objects, cons MarkerArray createOtherObjectsMarkerArray( const ObjectDataArray & objects, const ObjectInfo & info, const bool verbose); +MarkerArray createStopTargetObjectMarkerArray(const AvoidancePlanningData & data); + MarkerArray createDebugMarkerArray( const AvoidancePlanningData & data, const PathShifter & shifter, const DebugData & debug, const std::shared_ptr & parameters); diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/scene.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/scene.hpp index 635edb7c84f40..34d06a46d9ac8 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/scene.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/scene.hpp @@ -266,6 +266,12 @@ class StaticObstacleAvoidanceModule : public SceneModuleInterface */ void fillAvoidanceTargetObjects(AvoidancePlanningData & data, DebugData & debug) const; + /** + * @brief fill additional data which are necessary to plan avoidance path/velocity. + * @param avoidance target objects. + */ + void fillAvoidanceTargetData(ObjectDataArray & objects) const; + /** * @brief fill candidate shift lines. * @param avoidance data. diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/utils.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/utils.hpp index 3797fe0d55147..a3b1b7e10b885 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/utils.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/utils.hpp @@ -118,15 +118,12 @@ void fillObjectStoppableJudge( ObjectData & object_data, const ObjectDataArray & registered_objects, const double feasible_stop_distance, const std::shared_ptr & parameters); -void updateRegisteredObject( - ObjectDataArray & registered_objects, const ObjectDataArray & now_objects, - const std::shared_ptr & parameters); - void updateClipObject(ObjectDataArray & clip_objects, AvoidancePlanningData & data); -void compensateDetectionLost( - const ObjectDataArray & registered_objects, ObjectDataArray & now_objects, - ObjectDataArray & other_objects); +void compensateLostTargetObjects( + ObjectDataArray & stored_objects, AvoidancePlanningData & data, const rclcpp::Time & now, + const std::shared_ptr & planner_data, + const std::shared_ptr & parameters); void filterTargetObjects( ObjectDataArray & objects, AvoidancePlanningData & data, const double forward_detection_range, diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp index eb0d903f2e398..e1f8bd4ad2734 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp @@ -466,6 +466,23 @@ MarkerArray createOtherObjectsMarkerArray( return msg; } +MarkerArray createStopTargetObjectMarkerArray(const AvoidancePlanningData & data) +{ + MarkerArray msg; + + if (!data.stop_target_object.has_value()) { + return msg; + } + + appendMarkerArray( + createObjectsCubeMarkerArray( + {data.stop_target_object.value()}, "stop_target", createMarkerScale(3.4, 1.9, 1.9), + createMarkerColor(1.0, 0.0, 0.42, 0.5)), + &msg); + + return msg; +} + MarkerArray createDrivableBounds( const AvoidancePlanningData & data, std::string && ns, const float & r, const float & g, const float & b) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp index b0e7d68c75d44..641ae9547b712 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp @@ -286,16 +286,22 @@ void StaticObstacleAvoidanceModule::fillFundamentalData( data.to_start_point = utils::static_obstacle_avoidance::calcDistanceToAvoidStartLine( data.current_lanelets, data.reference_path_rough, planner_data_, parameters_); - // target objects for avoidance + // filter only for the latest detected objects. fillAvoidanceTargetObjects(data, debug); - // lost object compensation - utils::static_obstacle_avoidance::updateRegisteredObject( - registered_objects_, data.target_objects, parameters_); - utils::static_obstacle_avoidance::compensateDetectionLost( - registered_objects_, data.target_objects, data.other_objects); + // compensate lost object which was avoidance target. if the time hasn't passed more than + // threshold since perception module lost the target yet, this module keeps it as avoidance + // target. + utils::static_obstacle_avoidance::compensateLostTargetObjects( + registered_objects_, data, clock_->now(), planner_data_, parameters_); + + // once an object filtered for boundary clipping, this module keeps the information until the end + // of execution. utils::static_obstacle_avoidance::updateClipObject(clip_objects_, data); + // calculate various data for each target objects. + fillAvoidanceTargetData(data.target_objects); + // sort object order by longitudinal distance std::sort(data.target_objects.begin(), data.target_objects.end(), [](auto a, auto b) { return a.longitudinal < b.longitudinal; @@ -308,8 +314,6 @@ void StaticObstacleAvoidanceModule::fillFundamentalData( void StaticObstacleAvoidanceModule::fillAvoidanceTargetObjects( AvoidancePlanningData & data, DebugData & debug) const { - using utils::static_obstacle_avoidance::fillAvoidanceNecessity; - using utils::static_obstacle_avoidance::fillObjectStoppableJudge; using utils::static_obstacle_avoidance::filterTargetObjects; using utils::static_obstacle_avoidance::separateObjectsByPath; using utils::static_obstacle_avoidance::updateRoadShoulderDistance; @@ -345,15 +349,6 @@ void StaticObstacleAvoidanceModule::fillAvoidanceTargetObjects( filterTargetObjects(objects, data, forward_detection_range, planner_data_, parameters_); updateRoadShoulderDistance(data, planner_data_, parameters_); - // Calculate the distance needed to safely decelerate the ego vehicle to a stop line. - const auto & vehicle_width = planner_data_->parameters.vehicle_width; - const auto feasible_stop_distance = helper_->getFeasibleDecelDistance(0.0, false); - std::for_each(data.target_objects.begin(), data.target_objects.end(), [&, this](auto & o) { - fillAvoidanceNecessity(o, registered_objects_, vehicle_width, parameters_); - o.to_stop_line = calcDistanceToStopLine(o); - fillObjectStoppableJudge(o, registered_objects_, feasible_stop_distance, parameters_); - }); - // debug { std::vector debug_info_array; @@ -371,6 +366,21 @@ void StaticObstacleAvoidanceModule::fillAvoidanceTargetObjects( } } +void StaticObstacleAvoidanceModule::fillAvoidanceTargetData(ObjectDataArray & objects) const +{ + using utils::static_obstacle_avoidance::fillAvoidanceNecessity; + using utils::static_obstacle_avoidance::fillObjectStoppableJudge; + + // Calculate the distance needed to safely decelerate the ego vehicle to a stop line. + const auto & vehicle_width = planner_data_->parameters.vehicle_width; + const auto feasible_stop_distance = helper_->getFeasibleDecelDistance(0.0, false); + std::for_each(objects.begin(), objects.end(), [&, this](auto & o) { + fillAvoidanceNecessity(o, registered_objects_, vehicle_width, parameters_); + o.to_stop_line = calcDistanceToStopLine(o); + fillObjectStoppableJudge(o, registered_objects_, feasible_stop_distance, parameters_); + }); +} + ObjectData StaticObstacleAvoidanceModule::createObjectData( const AvoidancePlanningData & data, const PredictedObject & object) const { @@ -1376,11 +1386,13 @@ void StaticObstacleAvoidanceModule::updateRTCData() void StaticObstacleAvoidanceModule::updateInfoMarker(const AvoidancePlanningData & data) const { + using utils::static_obstacle_avoidance::createStopTargetObjectMarkerArray; using utils::static_obstacle_avoidance::createTargetObjectsMarkerArray; info_marker_.markers.clear(); appendMarkerArray( createTargetObjectsMarkerArray(data.target_objects, "target_objects"), &info_marker_); + appendMarkerArray(createStopTargetObjectMarkerArray(data), &info_marker_); } void StaticObstacleAvoidanceModule::updateDebugMarker( diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp index 30d1aad16374b..ddc544553f30e 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp @@ -1645,31 +1645,39 @@ void fillObjectStoppableJudge( object_data.is_stoppable = same_id_obj->is_stoppable; } -void updateRegisteredObject( - ObjectDataArray & registered_objects, const ObjectDataArray & now_objects, +void compensateLostTargetObjects( + ObjectDataArray & stored_objects, AvoidancePlanningData & data, const rclcpp::Time & now, + const std::shared_ptr & planner_data, const std::shared_ptr & parameters) { - const auto updateIfDetectedNow = [&now_objects](auto & registered_object) { - const auto & n = now_objects; - const auto r_id = registered_object.object.object_id; - const auto same_id_obj = std::find_if( - n.begin(), n.end(), [&r_id](const auto & o) { return o.object.object_id == r_id; }); + const auto include = [](const auto & objects, const auto & search_id) { + return std::all_of(objects.begin(), objects.end(), [&search_id](const auto & o) { + return o.object.object_id != search_id; + }); + }; + + // STEP.1 UPDATE STORED OBJECTS. + const auto match = [&data](auto & object) { + const auto & search_id = object.object.object_id; + const auto same_id_object = std::find_if( + data.target_objects.begin(), data.target_objects.end(), + [&search_id](const auto & o) { return o.object.object_id == search_id; }); // same id object is detected. update registered. - if (same_id_obj != n.end()) { - registered_object = *same_id_obj; + if (same_id_object != data.target_objects.end()) { + object = *same_id_object; return true; } - constexpr auto POS_THR = 1.5; - const auto r_pos = registered_object.getPose(); - const auto similar_pos_obj = std::find_if(n.begin(), n.end(), [&](const auto & o) { - return calcDistance2d(r_pos, o.getPose()) < POS_THR; - }); + const auto similar_pos_obj = std::find_if( + data.target_objects.begin(), data.target_objects.end(), [&object](const auto & o) { + constexpr auto POS_THR = 1.5; + return calcDistance2d(object.getPose(), o.getPose()) < POS_THR; + }); // same id object is not detected, but object is found around registered. update registered. - if (similar_pos_obj != n.end()) { - registered_object = *similar_pos_obj; + if (similar_pos_obj != data.target_objects.end()) { + object = *similar_pos_obj; return true; } @@ -1677,61 +1685,54 @@ void updateRegisteredObject( return false; }; - const rclcpp::Time now = rclcpp::Clock(RCL_ROS_TIME).now(); - - // -- check registered_objects, remove if lost_count exceeds limit. -- - for (int i = static_cast(registered_objects.size()) - 1; i >= 0; --i) { - auto & r = registered_objects.at(i); - - // registered object is not detected this time. lost count up. - if (!updateIfDetectedNow(r)) { - r.lost_time = (now - r.last_seen).seconds(); - } else { - r.last_seen = now; - r.lost_time = 0.0; - } + // STEP1-1: REMOVE EXPIRED OBJECTS. + const auto itr = std::remove_if( + stored_objects.begin(), stored_objects.end(), [&now, &match, ¶meters](auto & o) { + if (!match(o)) { + o.lost_time = (now - o.last_seen).seconds(); + } else { + o.last_seen = now; + o.lost_time = 0.0; + } - // lost count exceeds threshold. remove object from register. - if (r.lost_time > parameters->object_last_seen_threshold) { - registered_objects.erase(registered_objects.begin() + i); - } - } + return o.lost_time > parameters->object_last_seen_threshold; + }); - const auto isAlreadyRegistered = [&](const auto & n_id) { - const auto & r = registered_objects; - return std::any_of( - r.begin(), r.end(), [&n_id](const auto & o) { return o.object.object_id == n_id; }); - }; + stored_objects.erase(itr, stored_objects.end()); - // -- check now_objects, add it if it has new object id -- - for (const auto & now_obj : now_objects) { - if (!isAlreadyRegistered(now_obj.object.object_id)) { - registered_objects.push_back(now_obj); + // STEP1-2: UPDATE STORED OBJECTS IF THERE ARE NEW OBJECTS. + for (const auto & current_object : data.target_objects) { + if (!include(stored_objects, current_object.object.object_id)) { + stored_objects.push_back(current_object); } } -} -void compensateDetectionLost( - const ObjectDataArray & registered_objects, ObjectDataArray & now_objects, - ObjectDataArray & other_objects) -{ - const auto isDetectedNow = [&](const auto & r_id) { - const auto & n = now_objects; + // STEP2: COMPENSATE CURRENT TARGET OBJECTS + const auto is_detected = [&](const auto & object_id) { return std::any_of( - n.begin(), n.end(), [&r_id](const auto & o) { return o.object.object_id == r_id; }); + data.target_objects.begin(), data.target_objects.end(), + [&object_id](const auto & o) { return o.object.object_id == object_id; }); }; - const auto isIgnoreObject = [&](const auto & r_id) { - const auto & n = other_objects; + const auto is_ignored = [&](const auto & object_id) { return std::any_of( - n.begin(), n.end(), [&r_id](const auto & o) { return o.object.object_id == r_id; }); + data.other_objects.begin(), data.other_objects.end(), + [&object_id](const auto & o) { return o.object.object_id == object_id; }); }; - for (const auto & registered : registered_objects) { - if ( - !isDetectedNow(registered.object.object_id) && !isIgnoreObject(registered.object.object_id)) { - now_objects.push_back(registered); + for (auto & stored_object : stored_objects) { + if (is_detected(stored_object.object.object_id)) { + continue; + } + if (is_ignored(stored_object.object.object_id)) { + continue; } + + const auto & ego_pos = planner_data->self_odometry->pose.pose.position; + fillLongitudinalAndLengthByClosestEnvelopeFootprint( + data.reference_path_rough, ego_pos, stored_object); + + data.target_objects.push_back(stored_object); } } From 991a1ca2d0888ab48f5642243e20d6467df7d5b6 Mon Sep 17 00:00:00 2001 From: Mamoru Sobue Date: Wed, 10 Jul 2024 09:39:43 +0900 Subject: [PATCH 120/306] feat(blind_spot): consider road_shoulder if exist (#7925) Signed-off-by: Mamoru Sobue --- .../src/scene.cpp | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp index 1880adb045b42..d8725f016fda2 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_blind_spot_module/src/scene.cpp @@ -621,14 +621,14 @@ lanelet::ConstLanelets BlindSpotModule::generateBlindSpotLanelets( for (const auto i : lane_ids) { const auto lane = lanelet_map_ptr->laneletLayer.get(i); const auto ego_half_lanelet = generateHalfLanelet(lane); - const auto adj = + const auto assoc_adj = turn_direction_ == TurnDirection::LEFT ? (routing_graph_ptr->adjacentLeft(lane)) : (turn_direction_ == TurnDirection::RIGHT ? (routing_graph_ptr->adjacentRight(lane)) : boost::none); const std::optional opposite_adj = [&]() -> std::optional { - if (!!adj) { + if (!!assoc_adj) { return std::nullopt; } if (turn_direction_ == TurnDirection::LEFT) { @@ -653,10 +653,27 @@ lanelet::ConstLanelets BlindSpotModule::generateBlindSpotLanelets( } }(); - if (!adj && !opposite_adj) { - blind_spot_lanelets.push_back(ego_half_lanelet); - } else if (!!adj) { - const auto adj_half_lanelet = generateExtendedAdjacentLanelet(adj.value(), turn_direction_); + const auto assoc_shoulder = [&]() -> std::optional { + if (turn_direction_ == TurnDirection::LEFT) { + return planner_data_->route_handler_->getLeftShoulderLanelet(lane); + } else if (turn_direction_ == TurnDirection::RIGHT) { + return planner_data_->route_handler_->getRightShoulderLanelet(lane); + } + return std::nullopt; + }(); + if (assoc_shoulder) { + const auto lefts = (turn_direction_ == TurnDirection::LEFT) + ? assoc_shoulder.value().leftBound() + : ego_half_lanelet.leftBound(); + const auto rights = (turn_direction_ == TurnDirection::LEFT) + ? ego_half_lanelet.rightBound() + : assoc_shoulder.value().rightBound(); + blind_spot_lanelets.push_back( + lanelet::ConstLanelet(lanelet::InvalId, removeConst(lefts), removeConst(rights))); + + } else if (!!assoc_adj) { + const auto adj_half_lanelet = + generateExtendedAdjacentLanelet(assoc_adj.value(), turn_direction_); const auto lefts = (turn_direction_ == TurnDirection::LEFT) ? adj_half_lanelet.leftBound() : ego_half_lanelet.leftBound(); const auto rights = (turn_direction_ == TurnDirection::RIGHT) ? adj_half_lanelet.rightBound() @@ -672,6 +689,8 @@ lanelet::ConstLanelets BlindSpotModule::generateBlindSpotLanelets( : adj_half_lanelet.rightBound(); blind_spot_lanelets.push_back( lanelet::ConstLanelet(lanelet::InvalId, removeConst(lefts), removeConst(rights))); + } else { + blind_spot_lanelets.push_back(ego_half_lanelet); } } return blind_spot_lanelets; From 59af2120e192d013d849f24c3ecfa84158b1091e Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Wed, 10 Jul 2024 10:29:13 +0900 Subject: [PATCH 121/306] feat(planning_evaluator,control_evaluator, evaluator utils): add diagnostics subscriber to planning eval (#7849) * add utils and diagnostics subscription to planning_evaluator Signed-off-by: Daniel Sanchez * add diagnostics eval Signed-off-by: Daniel Sanchez * fix input diag in launch Signed-off-by: kosuke55 --------- Signed-off-by: Daniel Sanchez Signed-off-by: kosuke55 Co-authored-by: kosuke55 --- .../control_evaluator_node.hpp | 7 -- .../autoware_control_evaluator/package.xml | 1 + .../src/control_evaluator_node.cpp | 50 +------------- .../autoware_evaluator_utils/CMakeLists.txt | 13 ++++ evaluator/autoware_evaluator_utils/README.md | 5 ++ .../evaluator_utils/evaluator_utils.hpp | 45 +++++++++++++ .../autoware_evaluator_utils/package.xml | 24 +++++++ .../src/evaluator_utils.cpp | 66 +++++++++++++++++++ .../planning_evaluator_node.hpp | 20 +++++- .../launch/planning_evaluator.launch.xml | 2 + .../autoware_planning_evaluator/package.xml | 1 + .../src/planning_evaluator_node.cpp | 46 +++++++++++++ 12 files changed, 225 insertions(+), 55 deletions(-) create mode 100644 evaluator/autoware_evaluator_utils/CMakeLists.txt create mode 100644 evaluator/autoware_evaluator_utils/README.md create mode 100644 evaluator/autoware_evaluator_utils/include/autoware/evaluator_utils/evaluator_utils.hpp create mode 100644 evaluator/autoware_evaluator_utils/package.xml create mode 100644 evaluator/autoware_evaluator_utils/src/evaluator_utils.cpp diff --git a/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp b/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp index da60c820c45b1..614f1d66b9e0d 100644 --- a/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp +++ b/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp @@ -52,13 +52,6 @@ class ControlEvaluatorNode : public rclcpp::Node { public: explicit ControlEvaluatorNode(const rclcpp::NodeOptions & node_options); - void removeOldDiagnostics(const rclcpp::Time & stamp); - void removeDiagnosticsByName(const std::string & name); - void addDiagnostic(const DiagnosticStatus & diag, const rclcpp::Time & stamp); - void updateDiagnosticQueue( - const DiagnosticArray & input_diagnostics, const std::string & function, - const rclcpp::Time & stamp); - DiagnosticStatus generateLateralDeviationDiagnosticStatus( const Trajectory & traj, const Point & ego_point); DiagnosticStatus generateYawDeviationDiagnosticStatus( diff --git a/evaluator/autoware_control_evaluator/package.xml b/evaluator/autoware_control_evaluator/package.xml index 21f48b1c64485..d7300e6a3bfb4 100644 --- a/evaluator/autoware_control_evaluator/package.xml +++ b/evaluator/autoware_control_evaluator/package.xml @@ -14,6 +14,7 @@ ament_cmake_auto autoware_cmake + autoware_evaluator_utils autoware_motion_utils autoware_planning_msgs autoware_route_handler diff --git a/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp b/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp index 5862522d582f7..47706ed56cd7a 100644 --- a/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp +++ b/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp @@ -14,6 +14,8 @@ #include "autoware/control_evaluator/control_evaluator_node.hpp" +#include "autoware/evaluator_utils/evaluator_utils.hpp" + #include #include @@ -64,57 +66,11 @@ void ControlEvaluatorNode::getRouteData() } } -void ControlEvaluatorNode::removeOldDiagnostics(const rclcpp::Time & stamp) -{ - constexpr double KEEP_TIME = 1.0; - diag_queue_.erase( - std::remove_if( - diag_queue_.begin(), diag_queue_.end(), - [stamp](const std::pair & p) { - return (stamp - p.second).seconds() > KEEP_TIME; - }), - diag_queue_.end()); -} - -void ControlEvaluatorNode::removeDiagnosticsByName(const std::string & name) -{ - diag_queue_.erase( - std::remove_if( - diag_queue_.begin(), diag_queue_.end(), - [&name](const std::pair & p) { - return p.first.name.find(name) != std::string::npos; - }), - diag_queue_.end()); -} - -void ControlEvaluatorNode::addDiagnostic( - const diagnostic_msgs::msg::DiagnosticStatus & diag, const rclcpp::Time & stamp) -{ - diag_queue_.push_back(std::make_pair(diag, stamp)); -} - -void ControlEvaluatorNode::updateDiagnosticQueue( - const DiagnosticArray & input_diagnostics, const std::string & function, - const rclcpp::Time & stamp) -{ - const auto it = std::find_if( - input_diagnostics.status.begin(), input_diagnostics.status.end(), - [&function](const diagnostic_msgs::msg::DiagnosticStatus & diag) { - return diag.name.find(function) != std::string::npos; - }); - if (it != input_diagnostics.status.end()) { - removeDiagnosticsByName(it->name); - addDiagnostic(*it, input_diagnostics.header.stamp); - } - - removeOldDiagnostics(stamp); -} - void ControlEvaluatorNode::onDiagnostics(const DiagnosticArray::ConstSharedPtr diag_msg) { // add target diagnostics to the queue and remove old ones for (const auto & function : target_functions_) { - updateDiagnosticQueue(*diag_msg, function, now()); + autoware::evaluator_utils::updateDiagnosticQueue(*diag_msg, function, now(), diag_queue_); } } diff --git a/evaluator/autoware_evaluator_utils/CMakeLists.txt b/evaluator/autoware_evaluator_utils/CMakeLists.txt new file mode 100644 index 0000000000000..d75ed43a4e3cb --- /dev/null +++ b/evaluator/autoware_evaluator_utils/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_evaluator_utils) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +ament_auto_add_library(evaluator_utils SHARED + src/evaluator_utils.cpp +) + +ament_auto_package( + INSTALL_TO_SHARE +) diff --git a/evaluator/autoware_evaluator_utils/README.md b/evaluator/autoware_evaluator_utils/README.md new file mode 100644 index 0000000000000..b0db86f86b5c0 --- /dev/null +++ b/evaluator/autoware_evaluator_utils/README.md @@ -0,0 +1,5 @@ +# Evaluator Utils + +## Purpose + +This package provides utils functions for other evaluator packages diff --git a/evaluator/autoware_evaluator_utils/include/autoware/evaluator_utils/evaluator_utils.hpp b/evaluator/autoware_evaluator_utils/include/autoware/evaluator_utils/evaluator_utils.hpp new file mode 100644 index 0000000000000..3b91c9d7605e0 --- /dev/null +++ b/evaluator/autoware_evaluator_utils/include/autoware/evaluator_utils/evaluator_utils.hpp @@ -0,0 +1,45 @@ +// Copyright 2024 Tier IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef AUTOWARE__EVALUATOR_UTILS__EVALUATOR_UTILS_HPP_ +#define AUTOWARE__EVALUATOR_UTILS__EVALUATOR_UTILS_HPP_ + +#include + +#include + +#include +#include +#include +#include +#include + +namespace autoware::evaluator_utils +{ + +using diagnostic_msgs::msg::DiagnosticArray; +using diagnostic_msgs::msg::DiagnosticStatus; +using DiagnosticQueue = std::deque>; + +void removeOldDiagnostics(const rclcpp::Time & stamp, DiagnosticQueue & diag_queue); +void removeDiagnosticsByName(const std::string & name, DiagnosticQueue & diag_queue); +void addDiagnostic( + const DiagnosticStatus & diag, const rclcpp::Time & stamp, DiagnosticQueue & diag_queue); +void updateDiagnosticQueue( + const DiagnosticArray & input_diagnostics, const std::string & function, + const rclcpp::Time & stamp, DiagnosticQueue & diag_queue); + +} // namespace autoware::evaluator_utils + +#endif // AUTOWARE__EVALUATOR_UTILS__EVALUATOR_UTILS_HPP_ diff --git a/evaluator/autoware_evaluator_utils/package.xml b/evaluator/autoware_evaluator_utils/package.xml new file mode 100644 index 0000000000000..b8566e33a32a3 --- /dev/null +++ b/evaluator/autoware_evaluator_utils/package.xml @@ -0,0 +1,24 @@ + + + + autoware_evaluator_utils + 0.1.0 + ROS 2 node for evaluating control + Daniel SANCHEZ + Takayuki MUROOKA + Apache License 2.0 + + Daniel SANCHEZ + Takayuki MUROOKA + + ament_cmake_auto + autoware_cmake + + diagnostic_msgs + rclcpp + rclcpp_components + + + ament_cmake + + diff --git a/evaluator/autoware_evaluator_utils/src/evaluator_utils.cpp b/evaluator/autoware_evaluator_utils/src/evaluator_utils.cpp new file mode 100644 index 0000000000000..293db21f50e7f --- /dev/null +++ b/evaluator/autoware_evaluator_utils/src/evaluator_utils.cpp @@ -0,0 +1,66 @@ +// Copyright 2024 Tier IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "autoware/evaluator_utils/evaluator_utils.hpp" + +#include + +namespace autoware::evaluator_utils +{ +void removeOldDiagnostics(const rclcpp::Time & stamp, DiagnosticQueue & diag_queue) +{ + constexpr double KEEP_TIME = 1.0; + diag_queue.erase( + std::remove_if( + diag_queue.begin(), diag_queue.end(), + [stamp](const std::pair & p) { + return (stamp - p.second).seconds() > KEEP_TIME; + }), + diag_queue.end()); +} + +void removeDiagnosticsByName(const std::string & name, DiagnosticQueue & diag_queue) +{ + diag_queue.erase( + std::remove_if( + diag_queue.begin(), diag_queue.end(), + [&name](const std::pair & p) { + return p.first.name.find(name) != std::string::npos; + }), + diag_queue.end()); +} + +void addDiagnostic( + const DiagnosticStatus & diag, const rclcpp::Time & stamp, DiagnosticQueue & diag_queue) +{ + diag_queue.push_back(std::make_pair(diag, stamp)); +} + +void updateDiagnosticQueue( + const DiagnosticArray & input_diagnostics, const std::string & function, + const rclcpp::Time & stamp, DiagnosticQueue & diag_queue) +{ + const auto it = std::find_if( + input_diagnostics.status.begin(), input_diagnostics.status.end(), + [&function](const DiagnosticStatus & diag) { + return diag.name.find(function) != std::string::npos; + }); + if (it != input_diagnostics.status.end()) { + removeDiagnosticsByName(it->name, diag_queue); + addDiagnostic(*it, input_diagnostics.header.stamp, diag_queue); + } + + removeOldDiagnostics(stamp, diag_queue); +} +} // namespace autoware::evaluator_utils diff --git a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp index 91dc0386ae6c6..6925cb15e8fad 100644 --- a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp +++ b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp @@ -32,13 +32,14 @@ #include "geometry_msgs/msg/accel_with_covariance_stamped.hpp" #include "nav_msgs/msg/odometry.hpp" #include +#include #include #include #include #include +#include #include - namespace planning_diagnostics { using autoware_perception_msgs::msg::PredictedObjects; @@ -93,12 +94,22 @@ class PlanningEvaluatorNode : public rclcpp::Node const PoseWithUuidStamped::ConstSharedPtr modified_goal_msg, const Odometry::ConstSharedPtr ego_state_ptr); + /** + * @brief obtain diagnostics information + */ + void onDiagnostics(const DiagnosticArray::ConstSharedPtr diag_msg); + /** * @brief publish the given metric statistic */ DiagnosticStatus generateDiagnosticStatus( const Metric & metric, const Stat & metric_stat) const; + /** + * @brief publish current ego lane info + */ + DiagnosticStatus generateDiagnosticEvaluationStatus(const DiagnosticStatus & diag); + /** * @brief publish current ego lane info */ @@ -127,6 +138,10 @@ class PlanningEvaluatorNode : public rclcpp::Node * @brief fetch topic data */ void fetchData(); + // The diagnostics cycle is faster than timer, and each node publishes diagnostic separately. + // takeData() in onTimer() with a polling subscriber will miss a topic, so save all topics with + // onDiagnostics(). + rclcpp::Subscription::SharedPtr planning_diag_sub_; // ROS autoware::universe_utils::InterProcessPollingSubscriber traj_sub_{ @@ -164,6 +179,9 @@ class PlanningEvaluatorNode : public rclcpp::Node std::array>, static_cast(Metric::SIZE)> metric_stats_; rclcpp::TimerBase::SharedPtr timer_; + // queue for diagnostics and time stamp + std::deque> diag_queue_; + const std::vector target_functions_ = {"obstacle_cruise_planner"}; std::optional prev_acc_stamped_{std::nullopt}; }; } // namespace planning_diagnostics diff --git a/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml b/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml index 70301ebe6275f..c9517404b63a9 100644 --- a/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml +++ b/evaluator/autoware_planning_evaluator/launch/planning_evaluator.launch.xml @@ -7,6 +7,7 @@ + @@ -15,6 +16,7 @@ + diff --git a/evaluator/autoware_planning_evaluator/package.xml b/evaluator/autoware_planning_evaluator/package.xml index 3c3d4bd8bb595..eb3161e0afb35 100644 --- a/evaluator/autoware_planning_evaluator/package.xml +++ b/evaluator/autoware_planning_evaluator/package.xml @@ -13,6 +13,7 @@ ament_cmake_auto autoware_cmake + autoware_evaluator_utils autoware_motion_utils autoware_perception_msgs autoware_planning_msgs diff --git a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp index 9b65dbbc0b89e..ae3416b9cba8f 100644 --- a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp +++ b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp @@ -14,6 +14,8 @@ #include "autoware/planning_evaluator/planning_evaluator_node.hpp" +#include "autoware/evaluator_utils/evaluator_utils.hpp" + #include #include @@ -21,6 +23,7 @@ #include "boost/lexical_cast.hpp" +#include #include #include #include @@ -55,6 +58,9 @@ PlanningEvaluatorNode::PlanningEvaluatorNode(const rclcpp::NodeOptions & node_op output_file_str_ = declare_parameter("output_file"); ego_frame_str_ = declare_parameter("ego_frame"); + planning_diag_sub_ = create_subscription( + "~/input/diagnostics", 1, std::bind(&PlanningEvaluatorNode::onDiagnostics, this, _1)); + // List of metrics to calculate and publish metrics_pub_ = create_publisher("~/metrics", 1); for (const std::string & selected_metric : @@ -97,6 +103,29 @@ PlanningEvaluatorNode::~PlanningEvaluatorNode() } } +void PlanningEvaluatorNode::onDiagnostics(const DiagnosticArray::ConstSharedPtr diag_msg) +{ + // add target diagnostics to the queue and remove old ones + for (const auto & function : target_functions_) { + autoware::evaluator_utils::updateDiagnosticQueue(*diag_msg, function, now(), diag_queue_); + } +} + +DiagnosticStatus PlanningEvaluatorNode::generateDiagnosticEvaluationStatus( + const DiagnosticStatus & diag) +{ + DiagnosticStatus status; + status.name = diag.name; + + const auto it = std::find_if(diag.values.begin(), diag.values.end(), [](const auto & key_value) { + return key_value.key.find("decision") != std::string::npos; + }); + const bool found = it != diag.values.end(); + status.level = (found) ? status.OK : status.ERROR; + status.values.push_back((found) ? *it : diagnostic_msgs::msg::KeyValue{}); + return status; +} + void PlanningEvaluatorNode::getRouteData() { // route @@ -232,6 +261,23 @@ void PlanningEvaluatorNode::onTimer() const auto modified_goal_msg = modified_goal_sub_.takeData(); onModifiedGoal(modified_goal_msg, ego_state_ptr); } + + { + // generate decision diagnostics from input diagnostics + for (const auto & function : target_functions_) { + const auto it = std::find_if( + diag_queue_.begin(), diag_queue_.end(), + [&function](const std::pair & p) { + return p.first.name.find(function) != std::string::npos; + }); + if (it == diag_queue_.end()) { + continue; + } + // generate each decision diagnostics + metrics_msg_.status.push_back(generateDiagnosticEvaluationStatus(it->first)); + } + } + if (!metrics_msg_.status.empty()) { metrics_pub_->publish(metrics_msg_); } From 4ff69bf17b6d200ea20276b8b039ebc946d6e7a7 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 10 Jul 2024 10:50:22 +0900 Subject: [PATCH 122/306] refactor(image_diagnostics): fix namespace and directory structure (#7915) refactor: update include paths and namespace for image_diagnostics Signed-off-by: Taekjin LEE --- sensing/image_diagnostics/CMakeLists.txt | 8 ++++---- .../image_diagnostics/src/image_diagnostics_node.cpp | 10 ++++++---- .../image_diagnostics_node.hpp | 11 ++++++----- 3 files changed, 16 insertions(+), 13 deletions(-) rename sensing/image_diagnostics/{include/image_diagnostics => src}/image_diagnostics_node.hpp (93%) diff --git a/sensing/image_diagnostics/CMakeLists.txt b/sensing/image_diagnostics/CMakeLists.txt index 800cd3f67d902..186d9340dc08a 100644 --- a/sensing/image_diagnostics/CMakeLists.txt +++ b/sensing/image_diagnostics/CMakeLists.txt @@ -28,14 +28,14 @@ include_directories( ) -ament_auto_add_library(image_diagnostics SHARED +ament_auto_add_library(${PROJECT_NAME} SHARED src/image_diagnostics_node.cpp ) -target_link_libraries(image_diagnostics +target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES} ) -rclcpp_components_register_node(image_diagnostics - PLUGIN "image_diagnostics::ImageDiagNode" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::image_diagnostics::ImageDiagNode" EXECUTABLE image_diagnostics_node ) diff --git a/sensing/image_diagnostics/src/image_diagnostics_node.cpp b/sensing/image_diagnostics/src/image_diagnostics_node.cpp index 3db9ab94f50fa..49204f5cbc756 100644 --- a/sensing/image_diagnostics/src/image_diagnostics_node.cpp +++ b/sensing/image_diagnostics/src/image_diagnostics_node.cpp @@ -12,11 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_diagnostics/image_diagnostics_node.hpp" +#include "image_diagnostics_node.hpp" #include -namespace image_diagnostics +#include + +namespace autoware::image_diagnostics { using image_diagnostics::Image_State; ImageDiagNode::ImageDiagNode(const rclcpp::NodeOptions & node_options) @@ -271,7 +273,7 @@ void ImageDiagNode::shiftImage(cv::Mat & img) tmp.copyTo(left_bottom); } -} // namespace image_diagnostics +} // namespace autoware::image_diagnostics #include -RCLCPP_COMPONENTS_REGISTER_NODE(image_diagnostics::ImageDiagNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::image_diagnostics::ImageDiagNode) diff --git a/sensing/image_diagnostics/include/image_diagnostics/image_diagnostics_node.hpp b/sensing/image_diagnostics/src/image_diagnostics_node.hpp similarity index 93% rename from sensing/image_diagnostics/include/image_diagnostics/image_diagnostics_node.hpp rename to sensing/image_diagnostics/src/image_diagnostics_node.hpp index d6d150220555f..325624062b90b 100644 --- a/sensing/image_diagnostics/include/image_diagnostics/image_diagnostics_node.hpp +++ b/sensing/image_diagnostics/src/image_diagnostics_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_DIAGNOSTICS__IMAGE_DIAGNOSTICS_NODE_HPP_ -#define IMAGE_DIAGNOSTICS__IMAGE_DIAGNOSTICS_NODE_HPP_ +#ifndef IMAGE_DIAGNOSTICS_NODE_HPP_ +#define IMAGE_DIAGNOSTICS_NODE_HPP_ #include #include @@ -34,7 +34,8 @@ #include #include -namespace image_diagnostics + +namespace autoware::image_diagnostics { using diagnostic_updater::DiagnosticStatusWrapper; using diagnostic_updater::Updater; @@ -98,6 +99,6 @@ class ImageDiagNode : public rclcpp::Node rclcpp::Publisher::SharedPtr image_state_pub_; }; -} // namespace image_diagnostics +} // namespace autoware::image_diagnostics -#endif // IMAGE_DIAGNOSTICS__IMAGE_DIAGNOSTICS_NODE_HPP_ +#endif // IMAGE_DIAGNOSTICS_NODE_HPP_ From 96b36f75cdb1aab37a276e69f0243efe50dced7c Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 10 Jul 2024 10:53:32 +0900 Subject: [PATCH 123/306] fix(controller): revival of dry steering (#7903) * Revert "fix(autoware_mpc_lateral_controller): delete the zero speed constraint (#7673)" This reverts commit 69258bd92cb8a0ff8320df9b2302db72975e027f. * dry steering Signed-off-by: Takayuki Murooka * add comments Signed-off-by: Takayuki Murooka * add minor fix and modify unit test for dry steering Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../autoware/mpc_lateral_controller/mpc.hpp | 5 +- .../src/mpc.cpp | 20 ++++-- .../pid_longitudinal_controller.hpp | 2 + .../src/pid_longitudinal_controller.cpp | 63 +++++++++++-------- .../test/test_controller_node.cpp | 27 ++++++-- 5 files changed, 79 insertions(+), 38 deletions(-) diff --git a/control/autoware_mpc_lateral_controller/include/autoware/mpc_lateral_controller/mpc.hpp b/control/autoware_mpc_lateral_controller/include/autoware/mpc_lateral_controller/mpc.hpp index 902790f260e5e..058eb45bfaaff 100644 --- a/control/autoware_mpc_lateral_controller/include/autoware/mpc_lateral_controller/mpc.hpp +++ b/control/autoware_mpc_lateral_controller/include/autoware/mpc_lateral_controller/mpc.hpp @@ -271,7 +271,7 @@ class MPC */ std::pair executeOptimization( const MPCMatrix & mpc_matrix, const VectorXd & x0, const double prediction_dt, - const MPCTrajectory & trajectory); + const MPCTrajectory & trajectory, const double current_velocity); /** * @brief Resample the trajectory with the MPC resampling time. @@ -386,7 +386,8 @@ class MPC * @param reference_trajectory The reference trajectory. * @param current_velocity current velocity of ego. */ - VectorXd calcSteerRateLimitOnTrajectory(const MPCTrajectory & trajectory) const; + VectorXd calcSteerRateLimitOnTrajectory( + const MPCTrajectory & trajectory, const double current_velocity) const; //!< @brief logging with warn and return false template diff --git a/control/autoware_mpc_lateral_controller/src/mpc.cpp b/control/autoware_mpc_lateral_controller/src/mpc.cpp index ea97e9e6d5f39..dfc4d82541bf8 100644 --- a/control/autoware_mpc_lateral_controller/src/mpc.cpp +++ b/control/autoware_mpc_lateral_controller/src/mpc.cpp @@ -76,8 +76,9 @@ bool MPC::calculateMPC( const auto mpc_matrix = generateMPCMatrix(mpc_resampled_ref_trajectory, prediction_dt); // solve Optimization problem - const auto [success_opt, Uex] = - executeOptimization(mpc_matrix, x0_delayed, prediction_dt, mpc_resampled_ref_trajectory); + const auto [success_opt, Uex] = executeOptimization( + mpc_matrix, x0_delayed, prediction_dt, mpc_resampled_ref_trajectory, + current_kinematics.twist.twist.linear.x); if (!success_opt) { return fail_warn_throttle("optimization failed. Stop MPC."); } @@ -543,7 +544,8 @@ MPCMatrix MPC::generateMPCMatrix( * [ -au_lim * dt ] < [uN-uN-1] < [ au_lim * dt ] (*N... DIM_U) */ std::pair MPC::executeOptimization( - const MPCMatrix & m, const VectorXd & x0, const double prediction_dt, const MPCTrajectory & traj) + const MPCMatrix & m, const VectorXd & x0, const double prediction_dt, const MPCTrajectory & traj, + const double current_velocity) { VectorXd Uex; @@ -576,7 +578,7 @@ std::pair MPC::executeOptimization( VectorXd ub = VectorXd::Constant(DIM_U_N, m_steer_lim); // max steering angle // steering angle rate limit - VectorXd steer_rate_limits = calcSteerRateLimitOnTrajectory(traj); + VectorXd steer_rate_limits = calcSteerRateLimitOnTrajectory(traj, current_velocity); VectorXd ubA = steer_rate_limits * prediction_dt; VectorXd lbA = -steer_rate_limits * prediction_dt; ubA(0) = m_raw_steer_cmd_prev + steer_rate_limits(0) * m_ctrl_period; @@ -728,7 +730,8 @@ double MPC::calcDesiredSteeringRate( return steer_rate; } -VectorXd MPC::calcSteerRateLimitOnTrajectory(const MPCTrajectory & trajectory) const +VectorXd MPC::calcSteerRateLimitOnTrajectory( + const MPCTrajectory & trajectory, const double current_velocity) const { const auto interp = [&](const auto & steer_rate_limit_map, const auto & current) { std::vector reference, limits; @@ -762,6 +765,13 @@ VectorXd MPC::calcSteerRateLimitOnTrajectory(const MPCTrajectory & trajectory) c return reference.back(); }; + // When the vehicle is stopped, a large steer rate limit is used for the dry steering. + constexpr double steer_rate_lim = 100.0; + const bool is_vehicle_stopped = std::fabs(current_velocity) < 0.01; + if (is_vehicle_stopped) { + return steer_rate_lim * VectorXd::Ones(m_param.prediction_horizon); + } + // calculate steering rate limit VectorXd steer_rate_limits = VectorXd::Zero(m_param.prediction_horizon); for (int i = 0; i < m_param.prediction_horizon; ++i) { diff --git a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp index 5805ef7db9f86..0fd85b5822924 100644 --- a/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp +++ b/control/autoware_pid_longitudinal_controller/include/autoware/pid_longitudinal_controller/pid_longitudinal_controller.hpp @@ -234,6 +234,8 @@ class PidLongitudinalController : public trajectory_follower::LongitudinalContro // debug values DebugValues m_debug_values; + std::optional m_prev_keep_stopped_condition{std::nullopt}; + std::shared_ptr m_last_running_time{std::make_shared(clock_->now())}; // Diagnostic diff --git a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp index 93496c85c741b..a0118092413a9 100644 --- a/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp +++ b/control/autoware_pid_longitudinal_controller/src/pid_longitudinal_controller.cpp @@ -599,21 +599,6 @@ void PidLongitudinalController::updateControlState(const ControlData & control_d // NOTE: the same velocity threshold as autoware::motion_utils::searchZeroVelocity static constexpr double vel_epsilon = 1e-3; - // Let vehicle start after the steering is converged for control accuracy - const bool keep_stopped_condition = std::fabs(current_vel) < vel_epsilon && - m_enable_keep_stopped_until_steer_convergence && - !lateral_sync_data_.is_steer_converged; - if (keep_stopped_condition) { - auto marker = createDefaultMarker( - "map", clock_->now(), "stop_reason", 0, Marker::TEXT_VIEW_FACING, - createMarkerScale(0.0, 0.0, 1.0), createMarkerColor(1.0, 1.0, 1.0, 0.999)); - marker.pose = autoware::universe_utils::calcOffsetPose( - m_current_kinematic_state.pose.pose, m_wheel_base + m_front_overhang, - m_vehicle_width / 2 + 2.0, 1.5); - marker.text = "steering not\nconverged"; - m_pub_stop_reason_marker->publish(marker); - } - const bool stopping_condition = stop_dist < p.stopping_state_stop_dist; const bool is_stopped = std::abs(current_vel) < p.stopped_state_entry_vel && @@ -672,15 +657,18 @@ void PidLongitudinalController::updateControlState(const ControlData & control_d m_under_control_starting_time = is_under_control ? std::make_shared(clock_->now()) : nullptr; } + + if (m_control_state != ControlState::STOPPED) { + m_prev_keep_stopped_condition = std::nullopt; + } + // transit state // in DRIVE state if (m_control_state == ControlState::DRIVE) { if (emergency_condition) { return changeState(ControlState::EMERGENCY); } - if (!is_under_control && stopped_condition && keep_stopped_condition) { - // NOTE: When the ego is stopped on manual driving, since the driving state may transit to - // autonomous, keep_stopped_condition should be checked. + if (!is_under_control && stopped_condition) { return changeState(ControlState::STOPPED); } @@ -723,19 +711,42 @@ void PidLongitudinalController::updateControlState(const ControlData & control_d // in STOPPED state if (m_control_state == ControlState::STOPPED) { - // -- debug print -- + // debug print if (has_nonzero_target_vel && !departure_condition_from_stopped) { debug_msg_once("target speed > 0, but departure condition is not met. Keep STOPPED."); } - if (has_nonzero_target_vel && keep_stopped_condition) { - debug_msg_once("target speed > 0, but keep stop condition is met. Keep STOPPED."); - } - // --------------- - if (keep_stopped_condition) { - return changeState(ControlState::STOPPED); - } if (departure_condition_from_stopped) { + // Let vehicle start after the steering is converged for dry steering + const bool current_keep_stopped_condition = + std::fabs(current_vel) < vel_epsilon && !lateral_sync_data_.is_steer_converged; + // NOTE: Dry steering is considered unnecessary when the steering is converged twice in a + // row. This is because lateral_sync_data_.is_steer_converged is not the current but + // the previous value due to the order controllers' run and sync functions. + const bool keep_stopped_condition = + !m_prev_keep_stopped_condition || + (current_keep_stopped_condition || *m_prev_keep_stopped_condition); + m_prev_keep_stopped_condition = current_keep_stopped_condition; + if (m_enable_keep_stopped_until_steer_convergence && keep_stopped_condition) { + // debug print + if (has_nonzero_target_vel) { + debug_msg_once("target speed > 0, but keep stop condition is met. Keep STOPPED."); + } + + // publish debug marker + auto marker = createDefaultMarker( + "map", clock_->now(), "stop_reason", 0, Marker::TEXT_VIEW_FACING, + createMarkerScale(0.0, 0.0, 1.0), createMarkerColor(1.0, 1.0, 1.0, 0.999)); + marker.pose = autoware::universe_utils::calcOffsetPose( + m_current_kinematic_state.pose.pose, m_wheel_base + m_front_overhang, + m_vehicle_width / 2 + 2.0, 1.5); + marker.text = "steering not\nconverged"; + m_pub_stop_reason_marker->publish(marker); + + // keep STOPPED + return; + } + m_pid_vel.reset(); m_lpf_vel_error->reset(0.0); // prevent the car from taking a long time to start to move diff --git a/control/autoware_trajectory_follower_node/test/test_controller_node.cpp b/control/autoware_trajectory_follower_node/test/test_controller_node.cpp index e0dc5ede906a9..48ffab52e2b15 100644 --- a/control/autoware_trajectory_follower_node/test/test_controller_node.cpp +++ b/control/autoware_trajectory_follower_node/test/test_controller_node.cpp @@ -589,11 +589,28 @@ TEST_F(FakeNodeFixture, longitudinal_check_steer_converged) traj.points.push_back(make_traj_point(0.0, 0.0, 1.0f)); traj.points.push_back(make_traj_point(50.0, 0.0, 1.0f)); traj.points.push_back(make_traj_point(100.0, 0.0, 1.0f)); - tester.traj_pub->publish(traj); - test_utils::waitForMessage(tester.node, this, tester.received_control_command); + { // Check if the ego can keep stopped when the steering is not converged. + tester.traj_pub->publish(traj); + test_utils::waitForMessage(tester.node, this, tester.received_control_command); - ASSERT_TRUE(tester.received_control_command); - // Keep stopped state when the lateral control is not converged. - EXPECT_DOUBLE_EQ(tester.cmd_msg->longitudinal.velocity, 0.0f); + ASSERT_TRUE(tester.received_control_command); + // Keep stopped state when the lateral control is not converged. + EXPECT_DOUBLE_EQ(tester.cmd_msg->longitudinal.velocity, 0.0f); + } + + { // Check if the ego can keep stopped after the following sequence + // 1. not converged -> 2. converged -> 3. not converged + tester.publish_steer_angle(0.0); + tester.traj_pub->publish(traj); + test_utils::waitForMessage(tester.node, this, tester.received_control_command); + + tester.publish_steer_angle(steering_tire_angle); + tester.traj_pub->publish(traj); + test_utils::waitForMessage(tester.node, this, tester.received_control_command); + + ASSERT_TRUE(tester.received_control_command); + // Keep stopped state when the lateral control is not converged. + EXPECT_DOUBLE_EQ(tester.cmd_msg->longitudinal.velocity, 0.0f); + } } From 696a2a5d7bf3b69be315c04fd67d6c52ac62819a Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Wed, 10 Jul 2024 13:11:17 +0900 Subject: [PATCH 124/306] fix(autoware_behavior_velocity_no_drivable_lane_module): fix bug of uninitialization (#7928) Signed-off-by: Y.Hisaki --- .../src/scene.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/src/scene.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/src/scene.cpp index 42d896fec8ab3..465fd770049e9 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/src/scene.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_no_drivable_lane_module/src/scene.cpp @@ -149,7 +149,7 @@ void NoDrivableLaneModule::handle_approaching_state(PathWithLaneId * path, StopR const auto & op_target_point_idx = autoware::motion_utils::insertTargetPoint(target_segment_idx, target_point, path->points, 5e-2); - size_t target_point_idx; + size_t target_point_idx = 0; if (op_target_point_idx) { target_point_idx = op_target_point_idx.value(); } From 95594d900ea61924766722b47cb1c47b0e248c95 Mon Sep 17 00:00:00 2001 From: Kenzo Lobos Tsunekawa Date: Wed, 10 Jul 2024 13:36:31 +0900 Subject: [PATCH 125/306] fix: added temporary retrocompatibility to old perception data (#7929) Signed-off-by: Kenzo Lobos-Tsunekawa --- sensing/pointcloud_preprocessor/src/filter.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sensing/pointcloud_preprocessor/src/filter.cpp b/sensing/pointcloud_preprocessor/src/filter.cpp index 9b52babac88d6..eaadd1da2c064 100644 --- a/sensing/pointcloud_preprocessor/src/filter.cpp +++ b/sensing/pointcloud_preprocessor/src/filter.cpp @@ -413,12 +413,19 @@ bool pointcloud_preprocessor::Filter::convert_output_costly(std::unique_ptr Date: Wed, 10 Jul 2024 13:42:44 +0900 Subject: [PATCH 126/306] feat(lidar_transfusion): intensity as uint8 and tests (#7745) * feat(lidar_transfusion): intensity as uint8 and tests Signed-off-by: Amadeusz Szymko * style(pre-commit): autofix * fix(lidar_transfusion): headers include Signed-off-by: Amadeusz Szymko * feat(lidar_transfusion): use autoware_point_types for validation & refactor Signed-off-by: Amadeusz Szymko * style(lidar_transfusion): remove deprecated function Signed-off-by: Amadeusz Szymko * test(lidar_transfusion): point_step validation is not required Signed-off-by: Amadeusz Szymko * docs(lidar_transfusion): update assumptions / known limits Signed-off-by: Amadeusz Szymko * refactor(lidar_transfusion): redundant points structure Signed-off-by: Amadeusz Szymko * docs(lidar_transfusion): update assumptions / known limits Signed-off-by: Amadeusz Szymko * test(lidar_transfusion): temporary disable CUDA tests Signed-off-by: Amadeusz Szymko --------- Signed-off-by: Amadeusz Szymko Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Kenzo Lobos Tsunekawa --- perception/lidar_transfusion/CMakeLists.txt | 52 +++ perception/lidar_transfusion/README.md | 18 ++ .../preprocess/pointcloud_densification.hpp | 2 +- .../preprocess/preprocess_kernel.hpp | 6 +- .../preprocess/voxel_generator.hpp | 8 +- .../include/lidar_transfusion/ros_utils.hpp | 68 ++++ .../include/lidar_transfusion/utils.hpp | 46 --- .../preprocess/pointcloud_densification.cpp | 9 +- .../lib/preprocess/preprocess_kernel.cu | 61 ++-- .../lib/preprocess/voxel_generator.cpp | 23 +- perception/lidar_transfusion/package.xml | 1 + .../test/test_detection_class_remapper.cpp | 92 ++++++ .../lidar_transfusion/test/test_nms.cpp | 121 +++++++ .../test/test_postprocess_kernel.cpp | 299 ++++++++++++++++++ .../test/test_postprocess_kernel.hpp | 48 +++ .../test/test_preprocess_kernel.cpp | 265 ++++++++++++++++ .../test/test_preprocess_kernel.hpp | 50 +++ .../lidar_transfusion/test/test_ros_utils.cpp | 104 ++++++ .../test/test_voxel_generator.cpp | 284 +++++++++++++++++ .../test/test_voxel_generator.hpp | 65 ++++ 20 files changed, 1517 insertions(+), 105 deletions(-) create mode 100644 perception/lidar_transfusion/test/test_detection_class_remapper.cpp create mode 100644 perception/lidar_transfusion/test/test_nms.cpp create mode 100644 perception/lidar_transfusion/test/test_postprocess_kernel.cpp create mode 100644 perception/lidar_transfusion/test/test_postprocess_kernel.hpp create mode 100644 perception/lidar_transfusion/test/test_preprocess_kernel.cpp create mode 100644 perception/lidar_transfusion/test/test_preprocess_kernel.hpp create mode 100644 perception/lidar_transfusion/test/test_ros_utils.cpp create mode 100644 perception/lidar_transfusion/test/test_voxel_generator.cpp create mode 100644 perception/lidar_transfusion/test/test_voxel_generator.hpp diff --git a/perception/lidar_transfusion/CMakeLists.txt b/perception/lidar_transfusion/CMakeLists.txt index c0e2d85f27e62..677a835e5b04e 100644 --- a/perception/lidar_transfusion/CMakeLists.txt +++ b/perception/lidar_transfusion/CMakeLists.txt @@ -137,6 +137,58 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() + + find_package(ament_cmake_gtest REQUIRED) + ament_auto_add_gtest(test_detection_class_remapper + test/test_detection_class_remapper.cpp + ) + ament_auto_add_gtest(test_ros_utils + test/test_ros_utils.cpp + ) + ament_auto_add_gtest(test_nms + test/test_nms.cpp + ) + + # Temporary disabled, tracked by: + # https://github.com/autowarefoundation/autoware.universe/issues/7724 + # ament_auto_add_gtest(test_voxel_generator + # test/test_voxel_generator.cpp + # ) + + # # preprocess kernel test + # add_executable(test_preprocess_kernel + # test/test_preprocess_kernel.cpp + # ) + # target_include_directories(test_preprocess_kernel PUBLIC + # ${test_preprocess_kernel_SOURCE_DIR} + # ) + # target_link_libraries(test_preprocess_kernel + # transfusion_cuda_lib + # gtest + # gtest_main + # ) + # ament_add_test(test_preprocess_kernel + # GENERATE_RESULT_FOR_RETURN_CODE_ZERO + # COMMAND "$" + # ) + + # # postprocess kernel test + # add_executable(test_postprocess_kernel + # test/test_postprocess_kernel.cpp + # ) + # target_include_directories(test_postprocess_kernel PUBLIC + # ${test_postprocess_kernel_SOURCE_DIR} + # ) + # target_link_libraries(test_postprocess_kernel + # transfusion_cuda_lib + # gtest + # gtest_main + # ) + # ament_add_test(test_postprocess_kernel + # GENERATE_RESULT_FOR_RETURN_CODE_ZERO + # COMMAND "$" + # ) + endif() ament_auto_package( diff --git a/perception/lidar_transfusion/README.md b/perception/lidar_transfusion/README.md index 7974714720c32..e30403141e8ad 100644 --- a/perception/lidar_transfusion/README.md +++ b/perception/lidar_transfusion/README.md @@ -59,6 +59,24 @@ ros2 launch lidar_transfusion lidar_transfusion.launch.xml log_level:=debug ## Assumptions / Known limits +This library operates on raw cloud data (bytes). It is assumed that the input pointcloud message has following format: + +```python +[ + sensor_msgs.msg.PointField(name='x', offset=0, datatype=7, count=1), + sensor_msgs.msg.PointField(name='y', offset=4, datatype=7, count=1), + sensor_msgs.msg.PointField(name='z', offset=8, datatype=7, count=1), + sensor_msgs.msg.PointField(name='intensity', offset=12, datatype=2, count=1) +] +``` + +This input may consist of other fields as well - shown format is required minimum. +For debug purposes, you can validate your pointcloud topic using simple command: + +```bash +ros2 topic echo --field fields +``` + ## Trained Models You can download the onnx format of trained models by clicking on the links below. diff --git a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp index 25095f4dc9c0b..6ac0a6544389f 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp +++ b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp @@ -51,7 +51,7 @@ class DensificationParam struct PointCloudWithTransform { - cuda::unique_ptr points_d{nullptr}; + cuda::unique_ptr data_d{nullptr}; std_msgs::msg::Header header; size_t num_points{0}; Eigen::Affine3f affine_past2world; diff --git a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp index c571990d84b51..592f09c2d288a 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp +++ b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp @@ -56,12 +56,8 @@ class PreprocessCuda unsigned int * mask, float * voxels, unsigned int * pillar_num, float * voxel_features, unsigned int * voxel_num, unsigned int * voxel_idxs); - // cudaError_t generateVoxelsInput_launch( - // uint8_t * cloud_data, CloudInfo & cloud_info, unsigned int points_agg, unsigned int - // points_size, float time_lag, float * affine_transform, float * points); - cudaError_t generateSweepPoints_launch( - const float * input_points, size_t points_size, int input_point_step, float time_lag, + const uint8_t * input_data, size_t points_size, int input_point_step, float time_lag, const float * transform, float * output_points); private: diff --git a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp index 3e3660e238473..f0d253ee28755 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp +++ b/perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp @@ -18,8 +18,8 @@ #include "lidar_transfusion/cuda_utils.hpp" #include "lidar_transfusion/preprocess/pointcloud_densification.hpp" #include "lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include "lidar_transfusion/ros_utils.hpp" #include "lidar_transfusion/transfusion_config.hpp" -#include "lidar_transfusion/utils.hpp" #ifdef ROS_DISTRO_GALACTIC #include @@ -27,6 +27,8 @@ #include #endif +#include + #include #include @@ -36,8 +38,8 @@ namespace lidar_transfusion { -constexpr size_t AFF_MAT_SIZE = 16; // 4x4 matrix -constexpr size_t MAX_CLOUD_STEP_SIZE = 35; // PointXYZIRCADT +constexpr size_t AFF_MAT_SIZE = 16; // 4x4 matrix +constexpr size_t MAX_CLOUD_STEP_SIZE = sizeof(autoware_point_types::PointXYZIRCAEDT); class VoxelGenerator { diff --git a/perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp b/perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp index f013a02404a29..cbfc4e87b1610 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp +++ b/perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp @@ -17,16 +17,84 @@ #include "lidar_transfusion/utils.hpp" +#include + #include #include #include #include +#include +#include #include #include +#define CHECK_OFFSET(offset, structure, field) \ + static_assert( \ + offsetof(structure, field) == offset, \ + "Offset of " #field " in " #structure " does not match expected offset.") +#define CHECK_TYPE(type, structure, field) \ + static_assert( \ + std::is_same::value, \ + "Type of " #field " in " #structure " does not match expected type.") +#define CHECK_FIELD(offset, type, structure, field) \ + CHECK_OFFSET(offset, structure, field); \ + CHECK_TYPE(type, structure, field) + namespace lidar_transfusion { +using sensor_msgs::msg::PointField; + +CHECK_FIELD(0, float, autoware_point_types::PointXYZIRCAEDT, x); +CHECK_FIELD(4, float, autoware_point_types::PointXYZIRCAEDT, y); +CHECK_FIELD(8, float, autoware_point_types::PointXYZIRCAEDT, z); +CHECK_FIELD(12, uint8_t, autoware_point_types::PointXYZIRCAEDT, intensity); + +struct CloudInfo +{ + uint32_t x_offset{0}; + uint32_t y_offset{sizeof(float)}; + uint32_t z_offset{sizeof(float) * 2}; + uint32_t intensity_offset{sizeof(float) * 3}; + uint8_t x_datatype{PointField::FLOAT32}; + uint8_t y_datatype{PointField::FLOAT32}; + uint8_t z_datatype{PointField::FLOAT32}; + uint8_t intensity_datatype{PointField::UINT8}; + uint8_t x_count{1}; + uint8_t y_count{1}; + uint8_t z_count{1}; + uint8_t intensity_count{1}; + uint32_t point_step{sizeof(autoware_point_types::PointXYZIRCAEDT)}; + bool is_bigendian{false}; + + bool operator!=(const CloudInfo & rhs) const + { + return x_offset != rhs.x_offset || y_offset != rhs.y_offset || z_offset != rhs.z_offset || + intensity_offset != rhs.intensity_offset || x_datatype != rhs.x_datatype || + y_datatype != rhs.y_datatype || z_datatype != rhs.z_datatype || + intensity_datatype != rhs.intensity_datatype || x_count != rhs.x_count || + y_count != rhs.y_count || z_count != rhs.z_count || + intensity_count != rhs.intensity_count || is_bigendian != rhs.is_bigendian; + } + + friend std::ostream & operator<<(std::ostream & os, const CloudInfo & info) + { + os << "x_offset: " << static_cast(info.x_offset) << std::endl; + os << "y_offset: " << static_cast(info.y_offset) << std::endl; + os << "z_offset: " << static_cast(info.z_offset) << std::endl; + os << "intensity_offset: " << static_cast(info.intensity_offset) << std::endl; + os << "x_datatype: " << static_cast(info.x_datatype) << std::endl; + os << "y_datatype: " << static_cast(info.y_datatype) << std::endl; + os << "z_datatype: " << static_cast(info.z_datatype) << std::endl; + os << "intensity_datatype: " << static_cast(info.intensity_datatype) << std::endl; + os << "x_count: " << static_cast(info.x_count) << std::endl; + os << "y_count: " << static_cast(info.y_count) << std::endl; + os << "z_count: " << static_cast(info.z_count) << std::endl; + os << "intensity_count: " << static_cast(info.intensity_count) << std::endl; + os << "is_bigendian: " << static_cast(info.is_bigendian) << std::endl; + return os; + } +}; void box3DToDetectedObject( const Box3D & box3d, const std::vector & class_names, diff --git a/perception/lidar_transfusion/include/lidar_transfusion/utils.hpp b/perception/lidar_transfusion/include/lidar_transfusion/utils.hpp index e73fe7f055953..cc40e55851738 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/utils.hpp +++ b/perception/lidar_transfusion/include/lidar_transfusion/utils.hpp @@ -36,52 +36,6 @@ struct Box3D float yaw; }; -struct CloudInfo -{ - uint32_t x_offset; - uint32_t y_offset; - uint32_t z_offset; - uint32_t intensity_offset; - uint8_t x_datatype; - uint8_t y_datatype; - uint8_t z_datatype; - uint8_t intensity_datatype; - uint8_t x_count; - uint8_t y_count; - uint8_t z_count; - uint8_t intensity_count; - uint32_t point_step; - bool is_bigendian; - - CloudInfo() - : x_offset(0), - y_offset(4), - z_offset(8), - intensity_offset(12), - x_datatype(7), - y_datatype(7), - z_datatype(7), - intensity_datatype(7), - x_count(1), - y_count(1), - z_count(1), - intensity_count(1), - point_step(16), - is_bigendian(false) - { - } - - bool operator!=(const CloudInfo & rhs) const - { - return x_offset != rhs.x_offset || y_offset != rhs.y_offset || z_offset != rhs.z_offset || - intensity_offset != rhs.intensity_offset || x_datatype != rhs.x_datatype || - y_datatype != rhs.y_datatype || z_datatype != rhs.z_datatype || - intensity_datatype != rhs.intensity_datatype || x_count != rhs.x_count || - y_count != rhs.y_count || z_count != rhs.z_count || - intensity_count != rhs.intensity_count || is_bigendian != rhs.is_bigendian; - } -}; - enum NetworkIO { voxels = 0, num_points, coors, cls_score, dir_pred, bbox_pred, ENUM_SIZE }; // cspell: ignore divup diff --git a/perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp b/perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp index 774b3a05d71c1..c13423f2d24d8 100644 --- a/perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp +++ b/perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp @@ -93,16 +93,15 @@ void PointCloudDensification::enqueue( affine_world2current_ = affine_world2current; current_timestamp_ = rclcpp::Time(msg.header.stamp).seconds(); - assert(sizeof(uint8_t) * msg.width * msg.height * msg.point_step % sizeof(float) == 1); - auto points_d = cuda::make_unique( - sizeof(uint8_t) * msg.width * msg.height * msg.point_step / sizeof(float)); + auto data_d = cuda::make_unique( + sizeof(uint8_t) * msg.width * msg.height * msg.point_step / sizeof(uint8_t)); CHECK_CUDA_ERROR(cudaMemcpyAsync( - points_d.get(), msg.data.data(), sizeof(uint8_t) * msg.width * msg.height * msg.point_step, + data_d.get(), msg.data.data(), sizeof(uint8_t) * msg.width * msg.height * msg.point_step, cudaMemcpyHostToDevice, stream_)); PointCloudWithTransform pointcloud = { - std::move(points_d), msg.header, msg.width * msg.height, affine_world2current.inverse()}; + std::move(data_d), msg.header, msg.width * msg.height, affine_world2current.inverse()}; pointcloud_cache_.push_front(std::move(pointcloud)); } diff --git a/perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu b/perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu index b8f9ae998fd4f..48bb4eb9332a8 100644 --- a/perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu +++ b/perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu @@ -31,6 +31,8 @@ #include "lidar_transfusion/cuda_utils.hpp" #include "lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include + namespace lidar_transfusion { @@ -99,9 +101,12 @@ __global__ void generateVoxels_random_kernel( cudaError_t PreprocessCuda::generateVoxels_random_launch( float * points, unsigned int points_size, unsigned int * mask, float * voxels) { - int threadNum = config_.threads_for_voxel_; - dim3 blocks((points_size + threadNum - 1) / threadNum); - dim3 threads(threadNum); + if (points_size == 0) { + return cudaGetLastError(); + } + dim3 blocks(divup(points_size, config_.threads_for_voxel_)); + dim3 threads(config_.threads_for_voxel_); + generateVoxels_random_kernel<<>>( points, points_size, config_.min_x_range_, config_.max_x_range_, config_.min_y_range_, config_.max_y_range_, config_.min_z_range_, config_.max_z_range_, config_.voxel_x_size_, @@ -165,40 +170,48 @@ cudaError_t PreprocessCuda::generateBaseFeatures_launch( } __global__ void generateSweepPoints_kernel( - const float * input_points, size_t points_size, int input_point_step, float time_lag, + const uint8_t * input_data, size_t points_size, int input_point_step, float time_lag, const float * transform_array, int num_features, float * output_points) { int point_idx = blockIdx.x * blockDim.x + threadIdx.x; if (point_idx >= points_size) return; - const float input_x = input_points[point_idx * input_point_step + 0]; - const float input_y = input_points[point_idx * input_point_step + 1]; - const float input_z = input_points[point_idx * input_point_step + 2]; - const float intensity = input_points[point_idx * input_point_step + 3]; - - output_points[point_idx * num_features] = transform_array[0] * input_x + - transform_array[4] * input_y + - transform_array[8] * input_z + transform_array[12]; - output_points[point_idx * num_features + 1] = transform_array[1] * input_x + - transform_array[5] * input_y + - transform_array[9] * input_z + transform_array[13]; - output_points[point_idx * num_features + 2] = transform_array[2] * input_x + - transform_array[6] * input_y + - transform_array[10] * input_z + transform_array[14]; - output_points[point_idx * num_features + 3] = intensity; + union { + uint32_t raw{0}; + float value; + } input_x, input_y, input_z; + +#pragma unroll + for (int i = 0; i < 4; i++) { // 4 bytes for float32 + input_x.raw |= input_data[point_idx * input_point_step + i] << i * 8; + input_y.raw |= input_data[point_idx * input_point_step + i + 4] << i * 8; + input_z.raw |= input_data[point_idx * input_point_step + i + 8] << i * 8; + } + + float input_intensity = static_cast(input_data[point_idx * input_point_step + 12]); + + output_points[point_idx * num_features] = + transform_array[0] * input_x.value + transform_array[4] * input_y.value + + transform_array[8] * input_z.value + transform_array[12]; + output_points[point_idx * num_features + 1] = + transform_array[1] * input_x.value + transform_array[5] * input_y.value + + transform_array[9] * input_z.value + transform_array[13]; + output_points[point_idx * num_features + 2] = + transform_array[2] * input_x.value + transform_array[6] * input_y.value + + transform_array[10] * input_z.value + transform_array[14]; + output_points[point_idx * num_features + 3] = input_intensity; output_points[point_idx * num_features + 4] = time_lag; } cudaError_t PreprocessCuda::generateSweepPoints_launch( - const float * input_points, size_t points_size, int input_point_step, float time_lag, + const uint8_t * input_data, size_t points_size, int input_point_step, float time_lag, const float * transform_array, float * output_points) { - int threadNum = config_.threads_for_voxel_; - dim3 blocks((points_size + threadNum - 1) / threadNum); - dim3 threads(threadNum); + dim3 blocks(divup(points_size, config_.threads_for_voxel_)); + dim3 threads(config_.threads_for_voxel_); generateSweepPoints_kernel<<>>( - input_points, points_size, input_point_step, time_lag, transform_array, + input_data, points_size, input_point_step, time_lag, transform_array, config_.num_point_feature_size_, output_points); cudaError_t err = cudaGetLastError(); diff --git a/perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp b/perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp index 7072e8491af66..cb8bac984aef3 100644 --- a/perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp +++ b/perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp @@ -23,25 +23,6 @@ namespace lidar_transfusion { -std::ostream & operator<<(std::ostream & os, const CloudInfo & info) -{ - os << "x_offset: " << static_cast(info.x_offset) << std::endl; - os << "y_offset: " << static_cast(info.y_offset) << std::endl; - os << "z_offset: " << static_cast(info.z_offset) << std::endl; - os << "intensity_offset: " << static_cast(info.intensity_offset) << std::endl; - os << "x_datatype: " << static_cast(info.x_datatype) << std::endl; - os << "y_datatype: " << static_cast(info.y_datatype) << std::endl; - os << "z_datatype: " << static_cast(info.z_datatype) << std::endl; - os << "intensity_datatype: " << static_cast(info.intensity_datatype) << std::endl; - os << "x_count: " << static_cast(info.x_count) << std::endl; - os << "y_count: " << static_cast(info.y_count) << std::endl; - os << "z_count: " << static_cast(info.z_count) << std::endl; - os << "intensity_count: " << static_cast(info.intensity_count) << std::endl; - os << "point_step: " << static_cast(info.point_step) << std::endl; - os << "is_bigendian: " << static_cast(info.is_bigendian) << std::endl; - return os; -} - VoxelGenerator::VoxelGenerator( const DensificationParam & densification_param, const TransfusionConfig & config, cudaStream_t & stream) @@ -106,8 +87,8 @@ std::size_t VoxelGenerator::generateSweepPoints( CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); pre_ptr_->generateSweepPoints_launch( - pc_cache_iter->points_d.get(), sweep_num_points, cloud_info_.point_step / sizeof(float), - time_lag, affine_past2current_d_.get(), points_d.get() + shift); + pc_cache_iter->data_d.get(), sweep_num_points, cloud_info_.point_step, time_lag, + affine_past2current_d_.get(), points_d.get() + shift); point_counter += sweep_num_points; } diff --git a/perception/lidar_transfusion/package.xml b/perception/lidar_transfusion/package.xml index ffbe091b998e5..3b495025b1c34 100644 --- a/perception/lidar_transfusion/package.xml +++ b/perception/lidar_transfusion/package.xml @@ -13,6 +13,7 @@ autoware_cmake autoware_perception_msgs + autoware_point_types autoware_universe_utils launch_ros object_recognition_utils diff --git a/perception/lidar_transfusion/test/test_detection_class_remapper.cpp b/perception/lidar_transfusion/test/test_detection_class_remapper.cpp new file mode 100644 index 0000000000000..6e7f896e44d2c --- /dev/null +++ b/perception/lidar_transfusion/test/test_detection_class_remapper.cpp @@ -0,0 +1,92 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include + +TEST(DetectionClassRemapperTest, MapClasses) +{ + lidar_transfusion::DetectionClassRemapper remapper; + + // Set up the parameters for the remapper + // Labels: CAR, TRUCK, TRAILER + std::vector allow_remapping_by_area_matrix = { + 0, 0, 0, // CAR cannot be remapped + 0, 0, 1, // TRUCK can be remapped to TRAILER + 0, 1, 0 // TRAILER can be remapped to TRUCK + }; + std::vector min_area_matrix = {0.0, 0.0, 0.0, 0.0, 0.0, 10.0, 0.0, 0.0, 0.0}; + std::vector max_area_matrix = {0.0, 0.0, 0.0, 0.0, 0.0, 999.0, 0.0, 10.0, 0.0}; + + remapper.setParameters(allow_remapping_by_area_matrix, min_area_matrix, max_area_matrix); + + // Create a DetectedObjects message with some objects + autoware_perception_msgs::msg::DetectedObjects msg; + + // CAR with area 4.0, which is out of the range for remapping + autoware_perception_msgs::msg::DetectedObject obj1; + autoware_perception_msgs::msg::ObjectClassification obj1_classification; + obj1.shape.dimensions.x = 2.0; + obj1.shape.dimensions.y = 2.0; + obj1_classification.label = 0; + obj1_classification.probability = 1.0; + obj1.classification = {obj1_classification}; + msg.objects.push_back(obj1); + + // TRUCK with area 16.0, which is in the range for remapping to TRAILER + autoware_perception_msgs::msg::DetectedObject obj2; + autoware_perception_msgs::msg::ObjectClassification obj2_classification; + obj2.shape.dimensions.x = 8.0; + obj2.shape.dimensions.y = 2.0; + obj2_classification.label = 1; + obj2_classification.probability = 1.0; + obj2.classification = {obj2_classification}; + msg.objects.push_back(obj2); + + // TRAILER with area 9.0, which is in the range for remapping to TRUCK + autoware_perception_msgs::msg::DetectedObject obj3; + autoware_perception_msgs::msg::ObjectClassification obj3_classification; + obj3.shape.dimensions.x = 3.0; + obj3.shape.dimensions.y = 3.0; + obj3_classification.label = 2; + obj3_classification.probability = 1.0; + obj3.classification = {obj3_classification}; + msg.objects.push_back(obj3); + + // TRAILER with area 12.0, which is out of the range for remapping + autoware_perception_msgs::msg::DetectedObject obj4; + autoware_perception_msgs::msg::ObjectClassification obj4_classification; + obj4.shape.dimensions.x = 4.0; + obj4.shape.dimensions.y = 3.0; + obj4_classification.label = 2; + obj4_classification.probability = 1.0; + obj4.classification = {obj4_classification}; + msg.objects.push_back(obj4); + + // Call the mapClasses function + remapper.mapClasses(msg); + + // Check the remapped labels + EXPECT_EQ(msg.objects[0].classification[0].label, 0); + EXPECT_EQ(msg.objects[1].classification[0].label, 2); + EXPECT_EQ(msg.objects[2].classification[0].label, 1); + EXPECT_EQ(msg.objects[3].classification[0].label, 2); +} + +int main(int argc, char ** argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/perception/lidar_transfusion/test/test_nms.cpp b/perception/lidar_transfusion/test/test_nms.cpp new file mode 100644 index 0000000000000..b6f0ec8c31684 --- /dev/null +++ b/perception/lidar_transfusion/test/test_nms.cpp @@ -0,0 +1,121 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/postprocess/non_maximum_suppression.hpp" + +#include + +TEST(NonMaximumSuppressionTest, Apply) +{ + lidar_transfusion::NonMaximumSuppression nms; + lidar_transfusion::NMSParams params; + params.search_distance_2d_ = 1.0; + params.iou_threshold_ = 0.2; + params.nms_type_ = lidar_transfusion::NMS_TYPE::IoU_BEV; + params.target_class_names_ = {"CAR"}; + nms.setParameters(params); + + std::vector input_objects(4); + + // Object 1 + autoware_perception_msgs::msg::ObjectClassification obj1_classification; + obj1_classification.label = 0; // Assuming "car" has label 0 + obj1_classification.probability = 1.0; + input_objects[0].classification = {obj1_classification}; // Assuming "car" has label 0 + input_objects[0].kinematics.pose_with_covariance.pose.position.x = 0.0; + input_objects[0].kinematics.pose_with_covariance.pose.position.y = 0.0; + input_objects[0].kinematics.pose_with_covariance.pose.orientation.x = 0.0; + input_objects[0].kinematics.pose_with_covariance.pose.orientation.y = 0.0; + input_objects[0].kinematics.pose_with_covariance.pose.orientation.z = 0.0; + input_objects[0].kinematics.pose_with_covariance.pose.orientation.w = 1.0; + input_objects[0].shape.type = autoware_perception_msgs::msg::Shape::BOUNDING_BOX; + input_objects[0].shape.dimensions.x = 4.0; + input_objects[0].shape.dimensions.y = 2.0; + + // Object 2 (overlaps with Object 1) + autoware_perception_msgs::msg::ObjectClassification obj2_classification; + obj2_classification.label = 0; // Assuming "car" has label 0 + obj2_classification.probability = 1.0; + input_objects[1].classification = {obj2_classification}; // Assuming "car" has label 0 + input_objects[1].kinematics.pose_with_covariance.pose.position.x = 0.5; + input_objects[1].kinematics.pose_with_covariance.pose.position.y = 0.5; + input_objects[1].kinematics.pose_with_covariance.pose.orientation.x = 0.0; + input_objects[1].kinematics.pose_with_covariance.pose.orientation.y = 0.0; + input_objects[1].kinematics.pose_with_covariance.pose.orientation.z = 0.0; + input_objects[1].kinematics.pose_with_covariance.pose.orientation.w = 1.0; + input_objects[1].shape.type = autoware_perception_msgs::msg::Shape::BOUNDING_BOX; + input_objects[1].shape.dimensions.x = 4.0; + input_objects[1].shape.dimensions.y = 2.0; + + // Object 3 + autoware_perception_msgs::msg::ObjectClassification obj3_classification; + obj3_classification.label = 0; // Assuming "car" has label 0 + obj3_classification.probability = 1.0; + input_objects[2].classification = {obj3_classification}; // Assuming "car" has label 0 + input_objects[2].kinematics.pose_with_covariance.pose.position.x = 5.0; + input_objects[2].kinematics.pose_with_covariance.pose.position.y = 5.0; + input_objects[2].kinematics.pose_with_covariance.pose.orientation.x = 0.0; + input_objects[2].kinematics.pose_with_covariance.pose.orientation.y = 0.0; + input_objects[2].kinematics.pose_with_covariance.pose.orientation.z = 0.0; + input_objects[2].kinematics.pose_with_covariance.pose.orientation.w = 1.0; + input_objects[2].shape.type = autoware_perception_msgs::msg::Shape::BOUNDING_BOX; + input_objects[2].shape.dimensions.x = 4.0; + input_objects[2].shape.dimensions.y = 2.0; + + // Object 4 (different class) + autoware_perception_msgs::msg::ObjectClassification obj4_classification; + obj4_classification.label = 1; // Assuming "pedestrian" has label 1 + obj4_classification.probability = 1.0; + input_objects[3].classification = {obj4_classification}; // Assuming "pedestrian" has label 1 + input_objects[3].kinematics.pose_with_covariance.pose.position.x = 0.0; + input_objects[3].kinematics.pose_with_covariance.pose.position.y = 0.0; + input_objects[3].kinematics.pose_with_covariance.pose.orientation.x = 0.0; + input_objects[3].kinematics.pose_with_covariance.pose.orientation.y = 0.0; + input_objects[3].kinematics.pose_with_covariance.pose.orientation.z = 0.0; + input_objects[3].kinematics.pose_with_covariance.pose.orientation.w = 1.0; + input_objects[3].shape.type = autoware_perception_msgs::msg::Shape::BOUNDING_BOX; + input_objects[3].shape.dimensions.x = 0.5; + input_objects[3].shape.dimensions.y = 0.5; + + std::vector output_objects = nms.apply(input_objects); + + // Assert the expected number of output objects + EXPECT_EQ(output_objects.size(), 3); + + // Assert that input_objects[2] is included in the output_objects + bool is_input_object_2_included = false; + for (const auto & output_object : output_objects) { + if (output_object == input_objects[2]) { + is_input_object_2_included = true; + break; + } + } + EXPECT_TRUE(is_input_object_2_included); + + // Assert that input_objects[3] is included in the output_objects + bool is_input_object_3_included = false; + for (const auto & output_object : output_objects) { + if (output_object == input_objects[3]) { + is_input_object_3_included = true; + break; + } + } + EXPECT_TRUE(is_input_object_3_included); +} + +int main(int argc, char ** argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/perception/lidar_transfusion/test/test_postprocess_kernel.cpp b/perception/lidar_transfusion/test/test_postprocess_kernel.cpp new file mode 100644 index 0000000000000..1e01db5a8b3d7 --- /dev/null +++ b/perception/lidar_transfusion/test/test_postprocess_kernel.cpp @@ -0,0 +1,299 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "test_postprocess_kernel.hpp" + +#include + +#include +#include + +namespace lidar_transfusion +{ + +void PostprocessKernelTest::SetUp() +{ + cudaStreamCreate(&stream_); + + auto voxels_num = std::vector{1, 3, 5}; + auto point_cloud_range = std::vector{-76.8, -76.8, -3.0, 76.8, 76.8, 5.0}; + auto voxel_size = std::vector{0.3, 0.3, 8.0}; + auto score_threshold = 0.2f; + auto circle_nms_dist_threshold = 0.5f; + auto yaw_norm_thresholds = std::vector{0.5, 0.5, 0.5}; + config_ptr_ = std::make_unique( + voxels_num, point_cloud_range, voxel_size, circle_nms_dist_threshold, yaw_norm_thresholds, + score_threshold); + post_ptr_ = std::make_unique(*config_ptr_, stream_); + + cls_size_ = config_ptr_->num_proposals_ * config_ptr_->num_classes_; + box_size_ = config_ptr_->num_proposals_ * config_ptr_->num_box_values_; + dir_cls_size_ = config_ptr_->num_proposals_ * 2; // x, y + + cls_output_d_ = cuda::make_unique(cls_size_); + box_output_d_ = cuda::make_unique(box_size_); + dir_cls_output_d_ = cuda::make_unique(dir_cls_size_); + + cuda::clear_async(cls_output_d_.get(), cls_size_, stream_); + cuda::clear_async(box_output_d_.get(), box_size_, stream_); + cuda::clear_async(dir_cls_output_d_.get(), dir_cls_size_, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); +} + +void PostprocessKernelTest::TearDown() +{ +} + +TEST_F(PostprocessKernelTest, EmptyTensorTest) +{ + std::vector det_boxes3d; + + CHECK_CUDA_ERROR(post_ptr_->generateDetectedBoxes3D_launch( + cls_output_d_.get(), box_output_d_.get(), dir_cls_output_d_.get(), det_boxes3d, stream_)); + + EXPECT_EQ(0, det_boxes3d.size()); +} + +TEST_F(PostprocessKernelTest, SingleDetectionTest) +{ + cuda::clear_async(cls_output_d_.get(), cls_size_, stream_); + cuda::clear_async(box_output_d_.get(), box_size_, stream_); + cuda::clear_async(dir_cls_output_d_.get(), dir_cls_size_, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + std::vector det_boxes3d; + unsigned int det_idx = 42; + unsigned int cls_idx = 2; + + constexpr float detection_score = 1.f; + constexpr float detection_x = 50.f; + constexpr float detection_y = -38.4f; + constexpr float detection_z = 1.0; + const float detection_raw_x = (detection_x - config_ptr_->min_x_range_) / + (config_ptr_->num_point_values_ * config_ptr_->voxel_x_size_); + const float detection_raw_y = (detection_y - config_ptr_->min_y_range_) / + (config_ptr_->num_point_values_ * config_ptr_->voxel_y_size_); + const float detection_raw_z = detection_z; + + constexpr float detection_w = 3.2f; + constexpr float detection_l = 9.3f; + constexpr float detection_h = 1.7f; + constexpr float detection_log_w = std::log(detection_w); + constexpr float detection_log_l = std::log(detection_l); + constexpr float detection_log_h = std::log(detection_h); + + constexpr float detection_yaw = M_PI_4; + constexpr float detection_yaw_sin = std::sin(detection_yaw); + constexpr float detection_yaw_cos = std::cos(detection_yaw); + + // Set the values in the cuda tensor + cudaMemcpy( + &cls_output_d_[cls_idx * config_ptr_->num_proposals_ + det_idx], &detection_score, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &dir_cls_output_d_[det_idx], &detection_yaw_sin, 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &dir_cls_output_d_[det_idx + config_ptr_->num_proposals_], &detection_yaw_cos, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy(&box_output_d_[det_idx], &detection_raw_x, 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + config_ptr_->num_proposals_], &detection_raw_y, 1 * sizeof(float), + cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + 2 * config_ptr_->num_proposals_], &detection_raw_z, 1 * sizeof(float), + cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + 3 * config_ptr_->num_proposals_], &detection_log_w, 1 * sizeof(float), + cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + 4 * config_ptr_->num_proposals_], &detection_log_l, 1 * sizeof(float), + cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + 5 * config_ptr_->num_proposals_], &detection_log_h, 1 * sizeof(float), + cudaMemcpyHostToDevice); + + auto code1 = cudaGetLastError(); + ASSERT_EQ(cudaSuccess, code1); + + // Extract the boxes + auto code2 = post_ptr_->generateDetectedBoxes3D_launch( + cls_output_d_.get(), box_output_d_.get(), dir_cls_output_d_.get(), det_boxes3d, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + ASSERT_EQ(cudaSuccess, code2); + ASSERT_EQ(1, det_boxes3d.size()); + + const auto det_box3d = det_boxes3d[0]; + EXPECT_EQ(cls_idx, det_box3d.label); + EXPECT_EQ(detection_score, det_box3d.score); + EXPECT_EQ(detection_x, det_box3d.x); + EXPECT_EQ(detection_y, det_box3d.y); + EXPECT_EQ(detection_z, det_box3d.z); + EXPECT_NEAR(detection_w, det_box3d.width, 1e-6); + EXPECT_NEAR(detection_l, det_box3d.length, 1e-6); + EXPECT_NEAR(detection_h, det_box3d.height, 1e-6); + EXPECT_EQ(detection_yaw, det_box3d.yaw); +} + +TEST_F(PostprocessKernelTest, InvalidYawTest) +{ + cuda::clear_async(cls_output_d_.get(), cls_size_, stream_); + cuda::clear_async(box_output_d_.get(), box_size_, stream_); + cuda::clear_async(dir_cls_output_d_.get(), dir_cls_size_, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + std::vector det_boxes3d; + unsigned int det_idx = 42; + unsigned int cls_idx = 2; + + constexpr float detection_score = 1.f; + constexpr float detection_x = 50.f; + constexpr float detection_y = -38.4f; + constexpr float detection_z = 1.0; + const float detection_raw_x = (detection_x - config_ptr_->min_x_range_) / + (config_ptr_->num_point_values_ * config_ptr_->voxel_x_size_); + const float detection_raw_y = (detection_y - config_ptr_->min_y_range_) / + (config_ptr_->num_point_values_ * config_ptr_->voxel_y_size_); + const float detection_raw_z = detection_z; + + constexpr float detection_w = 3.2f; + constexpr float detection_l = 9.3f; + constexpr float detection_h = 1.7f; + constexpr float detection_log_w = std::log(detection_w); + constexpr float detection_log_l = std::log(detection_l); + constexpr float detection_log_h = std::log(detection_h); + + constexpr float detection_yaw_sin = 0.f; + constexpr float detection_yaw_cos = 0.2f; + + // Set the values in the cuda tensor + cudaMemcpy( + &cls_output_d_[cls_idx * config_ptr_->num_proposals_ + det_idx], &detection_score, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &dir_cls_output_d_[det_idx], &detection_yaw_sin, 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &dir_cls_output_d_[det_idx + config_ptr_->num_proposals_], &detection_yaw_cos, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy(&box_output_d_[det_idx], &detection_raw_x, 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + config_ptr_->num_proposals_], &detection_raw_y, 1 * sizeof(float), + cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + 2 * config_ptr_->num_proposals_], &detection_raw_z, 1 * sizeof(float), + cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + 3 * config_ptr_->num_proposals_], &detection_log_w, 1 * sizeof(float), + cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + 4 * config_ptr_->num_proposals_], &detection_log_l, 1 * sizeof(float), + cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + 5 * config_ptr_->num_proposals_], &detection_log_h, 1 * sizeof(float), + cudaMemcpyHostToDevice); + + auto code1 = cudaGetLastError(); + ASSERT_EQ(cudaSuccess, code1); + + // Extract the boxes + auto code2 = post_ptr_->generateDetectedBoxes3D_launch( + cls_output_d_.get(), box_output_d_.get(), dir_cls_output_d_.get(), det_boxes3d, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + ASSERT_EQ(cudaSuccess, code2); + EXPECT_EQ(0, det_boxes3d.size()); +} + +TEST_F(PostprocessKernelTest, CircleNMSTest) +{ + cuda::clear_async(cls_output_d_.get(), cls_size_, stream_); + cuda::clear_async(box_output_d_.get(), box_size_, stream_); + cuda::clear_async(dir_cls_output_d_.get(), dir_cls_size_, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + std::vector det_boxes3d; + unsigned int det_idx = 42; + unsigned int det_num = 2; + unsigned int cls_idx = 2; + + constexpr float detection_score = 1.f; + constexpr float detection_x = 50.f; + constexpr float detection_y = -38.4f; + constexpr float detection_z = 1.0; + const float detection_raw_x = (detection_x - config_ptr_->min_x_range_) / + (config_ptr_->num_point_values_ * config_ptr_->voxel_x_size_); + const float detection_raw_y = (detection_y - config_ptr_->min_y_range_) / + (config_ptr_->num_point_values_ * config_ptr_->voxel_y_size_); + const float detection_raw_z = detection_z; + + constexpr float detection_w = 3.2f; + constexpr float detection_l = 9.3f; + constexpr float detection_h = 1.7f; + constexpr float detection_log_w = std::log(detection_w); + constexpr float detection_log_l = std::log(detection_l); + constexpr float detection_log_h = std::log(detection_h); + + constexpr float detection_yaw = M_PI_4; + constexpr float detection_yaw_sin = std::sin(detection_yaw); + constexpr float detection_yaw_cos = std::cos(detection_yaw); + + // Set the values in the cuda tensor for 2 detections + for (std::size_t i = 0; i < det_num; ++i) { + cudaMemcpy( + &cls_output_d_[cls_idx * config_ptr_->num_proposals_ + det_idx + i], &detection_score, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &dir_cls_output_d_[det_idx + i], &detection_yaw_sin, 1 * sizeof(float), + cudaMemcpyHostToDevice); + cudaMemcpy( + &dir_cls_output_d_[det_idx + i + config_ptr_->num_proposals_], &detection_yaw_cos, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + i], &detection_raw_x, 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + i + config_ptr_->num_proposals_], &detection_raw_y, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + i + 2 * config_ptr_->num_proposals_], &detection_raw_z, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + i + 3 * config_ptr_->num_proposals_], &detection_log_w, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + i + 4 * config_ptr_->num_proposals_], &detection_log_l, + 1 * sizeof(float), cudaMemcpyHostToDevice); + cudaMemcpy( + &box_output_d_[det_idx + i + 5 * config_ptr_->num_proposals_], &detection_log_h, + 1 * sizeof(float), cudaMemcpyHostToDevice); + } + + auto code1 = cudaGetLastError(); + ASSERT_EQ(cudaSuccess, code1); + + // Extract the boxes + auto code2 = post_ptr_->generateDetectedBoxes3D_launch( + cls_output_d_.get(), box_output_d_.get(), dir_cls_output_d_.get(), det_boxes3d, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + ASSERT_EQ(cudaSuccess, code2); + EXPECT_EQ(1, det_boxes3d.size()); +} + +} // namespace lidar_transfusion + +int main(int argc, char ** argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/perception/lidar_transfusion/test/test_postprocess_kernel.hpp b/perception/lidar_transfusion/test/test_postprocess_kernel.hpp new file mode 100644 index 0000000000000..60fa7882ecc11 --- /dev/null +++ b/perception/lidar_transfusion/test/test_postprocess_kernel.hpp @@ -0,0 +1,48 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef TEST_POSTPROCESS_KERNEL_HPP_ +#define TEST_POSTPROCESS_KERNEL_HPP_ + +#include +#include + +#include + +#include + +namespace lidar_transfusion +{ + +class PostprocessKernelTest : public testing::Test +{ +public: + void SetUp() override; + void TearDown() override; + + std::unique_ptr post_ptr_{nullptr}; + std::unique_ptr config_ptr_{}; + cudaStream_t stream_{}; + + unsigned int cls_size_{0}; + unsigned int box_size_{0}; + unsigned int dir_cls_size_{0}; + cuda::unique_ptr cls_output_d_{nullptr}; + cuda::unique_ptr box_output_d_{nullptr}; + cuda::unique_ptr dir_cls_output_d_{nullptr}; +}; + +} // namespace lidar_transfusion + +#endif // TEST_POSTPROCESS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/test/test_preprocess_kernel.cpp b/perception/lidar_transfusion/test/test_preprocess_kernel.cpp new file mode 100644 index 0000000000000..c1c2a824f0f53 --- /dev/null +++ b/perception/lidar_transfusion/test/test_preprocess_kernel.cpp @@ -0,0 +1,265 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "test_preprocess_kernel.hpp" + +#include "lidar_transfusion/cuda_utils.hpp" + +#include + +#include +#include +#include + +#include +#include + +namespace lidar_transfusion +{ + +void PreprocessKernelTest::SetUp() +{ + cudaStreamCreate(&stream_); + + auto voxels_num = std::vector{1, 3, 5}; + auto point_cloud_range = std::vector{-76.8, -76.8, -3.0, 76.8, 76.8, 5.0}; + auto voxel_size = std::vector{0.3, 0.3, 8.0}; + auto score_threshold = 0.2f; + auto circle_nms_dist_threshold = 0.5f; + auto yaw_norm_thresholds = std::vector{0.5, 0.5, 0.5}; + config_ptr_ = std::make_unique( + voxels_num, point_cloud_range, voxel_size, circle_nms_dist_threshold, yaw_norm_thresholds, + score_threshold); + pre_ptr_ = std::make_unique(*config_ptr_, stream_); + + voxel_features_size_ = config_ptr_->max_voxels_ * config_ptr_->max_num_points_per_pillar_ * + config_ptr_->num_point_feature_size_; + voxel_num_size_ = config_ptr_->max_voxels_; + voxel_idxs_size_ = config_ptr_->max_voxels_ * config_ptr_->num_point_values_; + + params_input_d_ = cuda::make_unique(); + voxel_features_d_ = cuda::make_unique(voxel_features_size_); + voxel_num_d_ = cuda::make_unique(voxel_num_size_); + voxel_idxs_d_ = cuda::make_unique(voxel_idxs_size_); + points_d_ = + cuda::make_unique(config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_); + + cuda::clear_async(voxel_features_d_.get(), voxel_features_size_, stream_); + cuda::clear_async(voxel_num_d_.get(), voxel_num_size_, stream_); + cuda::clear_async(voxel_idxs_d_.get(), voxel_idxs_size_, stream_); + cuda::clear_async(params_input_d_.get(), 1, stream_); + cuda::clear_async( + points_d_.get(), config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); +} + +void PreprocessKernelTest::TearDown() +{ +} + +TEST_F(PreprocessKernelTest, EmptyVoxelTest) +{ + std::vector points{}; + std::size_t count = 0; + + pre_ptr_->generateVoxels( + points_d_.get(), count, params_input_d_.get(), voxel_features_d_.get(), voxel_num_d_.get(), + voxel_idxs_d_.get()); + unsigned int params_input; + auto code1 = cudaStreamSynchronize(stream_); + + auto code2 = cudaMemcpyAsync( + ¶ms_input, params_input_d_.get(), sizeof(unsigned int), cudaMemcpyDeviceToHost, stream_); + CHECK_CUDA_ERROR(cudaStreamSynchronize(stream_)); + + auto code3 = cudaMemcpy( + points_d_.get(), points.data(), count * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice); + + ASSERT_EQ(cudaSuccess, code1); + ASSERT_EQ(cudaSuccess, code2); + ASSERT_EQ(cudaSuccess, code3); + + EXPECT_EQ(0, params_input); +} + +TEST_F(PreprocessKernelTest, BasicTest) +{ + cuda::clear_async(voxel_features_d_.get(), voxel_features_size_, stream_); + cuda::clear_async(voxel_num_d_.get(), voxel_num_size_, stream_); + cuda::clear_async(voxel_idxs_d_.get(), voxel_idxs_size_, stream_); + cuda::clear_async(params_input_d_.get(), 1, stream_); + cuda::clear_async( + points_d_.get(), config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_, stream_); + cudaStreamSynchronize(stream_); + + std::vector point1{25.f, -61.1f, 1.8f, 42.0, 0.1f}; + std::vector point2{-31.6f, 1.1f, 2.8f, 77.0, 0.1f}; + std::vector point3{42.6f, 15.1f, -0.1f, 3.0, 0.1f}; + + std::vector points; + points.reserve(point1.size() + point2.size() + point3.size()); + points.insert(points.end(), point1.begin(), point1.end()); + points.insert(points.end(), point2.begin(), point2.end()); + points.insert(points.end(), point3.begin(), point3.end()); + std::size_t count = 3; + + CHECK_CUDA_ERROR(cudaMemcpy( + points_d_.get(), points.data(), count * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice)); + + // Compute the total amount of voxels filled + pre_ptr_->generateVoxels( + points_d_.get(), count, params_input_d_.get(), voxel_features_d_.get(), voxel_num_d_.get(), + voxel_idxs_d_.get()); + + unsigned int params_input; + CHECK_CUDA_ERROR( + cudaMemcpy(¶ms_input, params_input_d_.get(), sizeof(unsigned int), cudaMemcpyDeviceToHost)); + CHECK_CUDA_ERROR(cudaMemcpy( + points_d_.get(), points.data(), count * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice)); + + ASSERT_EQ(count, params_input); + + // Check if voxels were filled + unsigned int voxel_num; + + for (std::size_t i = 0; i < count; ++i) { + CHECK_CUDA_ERROR( + cudaMemcpy(&voxel_num, voxel_num_d_.get() + i, sizeof(unsigned int), cudaMemcpyDeviceToHost)); + EXPECT_EQ(1, voxel_num); + } + + // Check grid indices + thrust::host_vector voxel_idxs(config_ptr_->num_point_values_ * count, 0); + unsigned int voxel_idx_gt; + unsigned int voxel_idy_gt; + CHECK_CUDA_ERROR(cudaMemcpy( + voxel_idxs.data(), voxel_idxs_d_.get(), + config_ptr_->num_point_values_ * count * sizeof(unsigned int), cudaMemcpyDeviceToHost)); + + for (std::size_t i = 0; i < count; ++i) { + voxel_idx_gt = std::floor( + (points[config_ptr_->num_point_feature_size_ * i + 0] - config_ptr_->min_x_range_) / + config_ptr_->voxel_x_size_); + voxel_idy_gt = std::floor( + (points[config_ptr_->num_point_feature_size_ * i + 1] - config_ptr_->min_y_range_) / + config_ptr_->voxel_y_size_); + + EXPECT_EQ( + voxel_idx_gt, + voxel_idxs[config_ptr_->num_point_values_ * i + 3]); // {0, 0, voxel_idy, VOXEL_IDX} + EXPECT_EQ( + voxel_idy_gt, + voxel_idxs[config_ptr_->num_point_values_ * i + 2]); // {0, 0, VOXEL_IDY, voxel_idx} + } + + // Check voxel features + thrust::host_vector voxel_features( + count * config_ptr_->max_num_points_per_pillar_ * config_ptr_->num_point_feature_size_, 0.f); + CHECK_CUDA_ERROR(cudaMemcpy( + voxel_features.data(), voxel_features_d_.get(), + count * config_ptr_->max_num_points_per_pillar_ * config_ptr_->num_point_feature_size_ * + sizeof(float), + cudaMemcpyDeviceToHost)); + + for (std::size_t i = 0; i < count; ++i) { + for (std::size_t j = 0; j < config_ptr_->num_point_feature_size_; ++j) { + EXPECT_EQ( + points[config_ptr_->num_point_feature_size_ * i + j], + voxel_features + [i * config_ptr_->max_num_points_per_pillar_ * config_ptr_->num_point_feature_size_ + j]); + } + } +} + +TEST_F(PreprocessKernelTest, OutOfRangeTest) +{ + cuda::clear_async(voxel_features_d_.get(), voxel_features_size_, stream_); + cuda::clear_async(voxel_num_d_.get(), voxel_num_size_, stream_); + cuda::clear_async(voxel_idxs_d_.get(), voxel_idxs_size_, stream_); + cuda::clear_async(params_input_d_.get(), 1, stream_); + cuda::clear_async( + points_d_.get(), config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_, stream_); + cudaStreamSynchronize(stream_); + + std::vector points{25.f, config_ptr_->max_y_range_ + 0.1f, 2.1f, 55.f, 0.1f}; + std::size_t count = 0; + + CHECK_CUDA_ERROR(cudaMemcpy( + points_d_.get(), points.data(), count * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice)); + + pre_ptr_->generateVoxels( + points_d_.get(), count, params_input_d_.get(), voxel_features_d_.get(), voxel_num_d_.get(), + voxel_idxs_d_.get()); + + unsigned int params_input; + CHECK_CUDA_ERROR( + cudaMemcpy(¶ms_input, params_input_d_.get(), sizeof(unsigned int), cudaMemcpyDeviceToHost)); + CHECK_CUDA_ERROR(cudaMemcpy( + points_d_.get(), points.data(), count * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice)); + + EXPECT_EQ(count, params_input); +} + +TEST_F(PreprocessKernelTest, VoxelOverflowTest) +{ + cuda::clear_async(voxel_features_d_.get(), voxel_features_size_, stream_); + cuda::clear_async(voxel_num_d_.get(), voxel_num_size_, stream_); + cuda::clear_async(voxel_idxs_d_.get(), voxel_idxs_size_, stream_); + cuda::clear_async(params_input_d_.get(), 1, stream_); + cuda::clear_async( + points_d_.get(), config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_, stream_); + cudaStreamSynchronize(stream_); + + std::vector point{config_ptr_->min_x_range_, -61.1f, 1.8f, 42.f, 0.1f}; + std::size_t count = config_ptr_->max_voxels_ + 1; + std::vector points{}; + points.reserve(count * config_ptr_->num_point_feature_size_); + + for (std::size_t i = 0; i < count; ++i) { + points.insert(points.end(), point.begin(), point.end()); + point[0] += config_ptr_->voxel_x_size_; + } + + CHECK_CUDA_ERROR(cudaMemcpy( + points_d_.get(), points.data(), count * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice)); + + pre_ptr_->generateVoxels( + points_d_.get(), count, params_input_d_.get(), voxel_features_d_.get(), voxel_num_d_.get(), + voxel_idxs_d_.get()); + + ASSERT_EQ(cudaSuccess, cudaGetLastError()); + + unsigned int params_input; + CHECK_CUDA_ERROR( + cudaMemcpy(¶ms_input, params_input_d_.get(), sizeof(unsigned int), cudaMemcpyDeviceToHost)); + CHECK_CUDA_ERROR(cudaMemcpy( + points_d_.get(), points.data(), count * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice)); + + EXPECT_EQ(config_ptr_->max_voxels_, params_input); +} + +} // namespace lidar_transfusion + +int main(int argc, char ** argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/perception/lidar_transfusion/test/test_preprocess_kernel.hpp b/perception/lidar_transfusion/test/test_preprocess_kernel.hpp new file mode 100644 index 0000000000000..024fae5eae4b1 --- /dev/null +++ b/perception/lidar_transfusion/test/test_preprocess_kernel.hpp @@ -0,0 +1,50 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef TEST_PREPROCESS_KERNEL_HPP_ +#define TEST_PREPROCESS_KERNEL_HPP_ + +#include +#include + +#include + +#include + +namespace lidar_transfusion +{ + +class PreprocessKernelTest : public testing::Test +{ +public: + void SetUp() override; + void TearDown() override; + + std::unique_ptr pre_ptr_{nullptr}; + std::unique_ptr config_ptr_{}; + cudaStream_t stream_{}; + + unsigned int voxel_features_size_{0}; + unsigned int voxel_num_size_{0}; + unsigned int voxel_idxs_size_{0}; + cuda::unique_ptr points_d_{nullptr}; + cuda::unique_ptr params_input_d_{nullptr}; + cuda::unique_ptr voxel_features_d_{nullptr}; + cuda::unique_ptr voxel_num_d_{nullptr}; + cuda::unique_ptr voxel_idxs_d_{nullptr}; +}; + +} // namespace lidar_transfusion + +#endif // TEST_PREPROCESS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/test/test_ros_utils.cpp b/perception/lidar_transfusion/test/test_ros_utils.cpp new file mode 100644 index 0000000000000..15541e6353b42 --- /dev/null +++ b/perception/lidar_transfusion/test/test_ros_utils.cpp @@ -0,0 +1,104 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "lidar_transfusion/ros_utils.hpp" + +#include + +TEST(TestSuite, box3DToDetectedObject) +{ + std::vector class_names = {"CAR", "TRUCK", "BUS", "TRAILER", + "BICYCLE", "MOTORCYCLE", "PEDESTRIAN"}; + + // Test case 1: Test with valid label + { + lidar_transfusion::Box3D box3d; + box3d.label = 0; // CAR + box3d.score = 0.8f; + box3d.x = 1.0; + box3d.y = 2.0; + box3d.z = 3.0; + box3d.width = 2.0; + box3d.height = 1.5; + box3d.length = 4.0; + box3d.yaw = 0.5; + + autoware_perception_msgs::msg::DetectedObject obj; + lidar_transfusion::box3DToDetectedObject(box3d, class_names, obj); + + EXPECT_FLOAT_EQ(obj.existence_probability, 0.8f); + EXPECT_EQ( + obj.classification[0].label, autoware_perception_msgs::msg::ObjectClassification::CAR); + EXPECT_FLOAT_EQ(obj.kinematics.pose_with_covariance.pose.position.x, 1.0); + EXPECT_FLOAT_EQ(obj.kinematics.pose_with_covariance.pose.position.y, 2.0); + EXPECT_FLOAT_EQ(obj.kinematics.pose_with_covariance.pose.position.z, 3.0); + EXPECT_FLOAT_EQ(obj.shape.dimensions.x, 4.0); + EXPECT_FLOAT_EQ(obj.shape.dimensions.y, 2.0); + EXPECT_FLOAT_EQ(obj.shape.dimensions.z, 1.5); + EXPECT_FALSE(obj.kinematics.has_position_covariance); + EXPECT_FALSE(obj.kinematics.has_twist); + EXPECT_FALSE(obj.kinematics.has_twist_covariance); + } + + // Test case 2: Test with invalid label + { + lidar_transfusion::Box3D box3d; + box3d.score = 0.5f; + box3d.label = 10; // Invalid + + autoware_perception_msgs::msg::DetectedObject obj; + lidar_transfusion::box3DToDetectedObject(box3d, class_names, obj); + + EXPECT_FLOAT_EQ(obj.existence_probability, 0.5f); + EXPECT_EQ( + obj.classification[0].label, autoware_perception_msgs::msg::ObjectClassification::UNKNOWN); + EXPECT_FALSE(obj.kinematics.has_position_covariance); + EXPECT_FALSE(obj.kinematics.has_twist); + EXPECT_FALSE(obj.kinematics.has_twist_covariance); + } +} + +TEST(TestSuite, getSemanticType) +{ + EXPECT_EQ( + lidar_transfusion::getSemanticType("CAR"), + autoware_perception_msgs::msg::ObjectClassification::CAR); + EXPECT_EQ( + lidar_transfusion::getSemanticType("TRUCK"), + autoware_perception_msgs::msg::ObjectClassification::TRUCK); + EXPECT_EQ( + lidar_transfusion::getSemanticType("BUS"), + autoware_perception_msgs::msg::ObjectClassification::BUS); + EXPECT_EQ( + lidar_transfusion::getSemanticType("TRAILER"), + autoware_perception_msgs::msg::ObjectClassification::TRAILER); + EXPECT_EQ( + lidar_transfusion::getSemanticType("MOTORCYCLE"), + autoware_perception_msgs::msg::ObjectClassification::MOTORCYCLE); + EXPECT_EQ( + lidar_transfusion::getSemanticType("BICYCLE"), + autoware_perception_msgs::msg::ObjectClassification::BICYCLE); + EXPECT_EQ( + lidar_transfusion::getSemanticType("PEDESTRIAN"), + autoware_perception_msgs::msg::ObjectClassification::PEDESTRIAN); + EXPECT_EQ( + lidar_transfusion::getSemanticType("UNKNOWN"), + autoware_perception_msgs::msg::ObjectClassification::UNKNOWN); +} + +int main(int argc, char ** argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/perception/lidar_transfusion/test/test_voxel_generator.cpp b/perception/lidar_transfusion/test/test_voxel_generator.cpp new file mode 100644 index 0000000000000..2673a341b3721 --- /dev/null +++ b/perception/lidar_transfusion/test/test_voxel_generator.cpp @@ -0,0 +1,284 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "test_voxel_generator.hpp" + +#include "gtest/gtest.h" +#include "lidar_transfusion/transfusion_config.hpp" +#include "lidar_transfusion/utils.hpp" + +#include + +#include "sensor_msgs/point_cloud2_iterator.hpp" + +namespace lidar_transfusion +{ + +void VoxelGeneratorTest::SetUp() +{ + // Setup things that should occur before every test instance should go here + node_ = std::make_shared("voxel_generator_test_node"); + + world_frame_ = "map"; + lidar_frame_ = "lidar"; + delta_pointcloud_x_ = 1.0; + points_per_pointcloud_ = 300; + + voxels_num_ = std::vector{5000, 30000, 60000}; + point_cloud_range_ = std::vector{-76.8, -76.8, -3.0, 76.8, 76.8, 5.0}; + voxel_size_ = std::vector{0.3, 0.3, 8.0}; + score_threshold_ = 0.2f; + circle_nms_dist_threshold_ = 0.5f; + yaw_norm_thresholds_ = std::vector{0.5, 0.5, 0.5}; + config_ptr_ = std::make_unique( + voxels_num_, point_cloud_range_, voxel_size_, circle_nms_dist_threshold_, yaw_norm_thresholds_, + score_threshold_); + + cloud1_ = std::make_unique(); + cloud2_ = std::make_unique(); + + // Set up the fields + point_cloud_msg_wrapper::PointCloud2Modifier< + autoware_point_types::PointXYZIRCAEDT, autoware_point_types::PointXYZIRCAEDTGenerator> + modifier{*cloud1_, lidar_frame_}; + + // Resize the cloud to hold points_per_pointcloud_ points + modifier.resize(points_per_pointcloud_); + + // Create an iterator for desired fields + sensor_msgs::PointCloud2Iterator iter_x(*cloud1_, "x"); + sensor_msgs::PointCloud2Iterator iter_y(*cloud1_, "y"); + sensor_msgs::PointCloud2Iterator iter_z(*cloud1_, "z"); + sensor_msgs::PointCloud2Iterator iter_i(*cloud1_, "intensity"); + + // Populate the point cloud + for (size_t i = 0; i < modifier.size(); ++i, ++iter_x, ++iter_y, ++iter_z) { + *iter_x = static_cast(i); + *iter_y = static_cast(i); + *iter_z = static_cast(i); + } + for (size_t i = 0; i < modifier.size(); ++i, ++iter_i) { + *iter_i = static_cast(i % 256); + } + + *cloud2_ = *cloud1_; + + // Set the stamps for the point clouds. They usually come every 100ms + cloud1_->header.stamp.sec = 1; + cloud1_->header.stamp.nanosec = 100'000'000; + cloud2_->header.stamp.sec = 1; + cloud2_->header.stamp.nanosec = 200'000'000; + + tf2_buffer_ = std::make_unique(node_->get_clock()); + tf2_buffer_->setUsingDedicatedThread(true); + + // The vehicle moves 1m/s in the x direction + const double world_origin_x = 6'371'000.0; + const double world_origin_y = 1'371'000.0; + + transform1_.header.stamp = cloud1_->header.stamp; + transform1_.header.frame_id = world_frame_; + transform1_.child_frame_id = lidar_frame_; + transform1_.transform.translation.x = world_origin_x; + transform1_.transform.translation.y = world_origin_y; + transform1_.transform.translation.z = 1.8; + transform1_.transform.rotation.x = 0.0; + transform1_.transform.rotation.y = 0.0; + transform1_.transform.rotation.z = 0.0; + transform1_.transform.rotation.w = 1.0; + + transform2_ = transform1_; + transform2_.header.stamp = cloud2_->header.stamp; + transform2_.transform.translation.x = world_origin_x + delta_pointcloud_x_; + + cudaStreamCreate(&stream_); +} + +void VoxelGeneratorTest::TearDown() +{ +} + +TEST_F(VoxelGeneratorTest, CloudInfo) +{ + CloudInfo cloud_info{}; + EXPECT_EQ(cloud1_->is_bigendian, cloud_info.is_bigendian); + EXPECT_EQ(cloud1_->fields[0].name, "x"); + EXPECT_EQ(cloud1_->fields[0].datatype, cloud_info.x_datatype); + EXPECT_EQ(cloud1_->fields[0].count, cloud_info.x_count); + EXPECT_EQ(cloud1_->fields[0].offset, cloud_info.x_offset); + EXPECT_EQ(cloud1_->fields[1].name, "y"); + EXPECT_EQ(cloud1_->fields[1].datatype, cloud_info.y_datatype); + EXPECT_EQ(cloud1_->fields[1].count, cloud_info.y_count); + EXPECT_EQ(cloud1_->fields[1].offset, cloud_info.y_offset); + EXPECT_EQ(cloud1_->fields[2].name, "z"); + EXPECT_EQ(cloud1_->fields[2].datatype, cloud_info.z_datatype); + EXPECT_EQ(cloud1_->fields[2].count, cloud_info.z_count); + EXPECT_EQ(cloud1_->fields[2].offset, cloud_info.z_offset); + EXPECT_EQ(cloud1_->fields[3].name, "intensity"); + EXPECT_EQ(cloud1_->fields[3].datatype, cloud_info.intensity_datatype); + EXPECT_EQ(cloud1_->fields[3].count, cloud_info.intensity_count); + EXPECT_EQ(cloud1_->fields[3].offset, cloud_info.intensity_offset); + EXPECT_EQ(cloud1_->width, points_per_pointcloud_); + EXPECT_EQ(cloud1_->height, 1); +} + +TEST_F(VoxelGeneratorTest, SingleFrame) +{ + const unsigned int num_past_frames = 0; // only current frame + DensificationParam param(world_frame_, num_past_frames); + VoxelGenerator voxel_generator(param, *config_ptr_, stream_); + std::vector points; + points.resize(config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_); + std::fill(points.begin(), points.end(), std::nan("")); + + auto points_d = + cuda::make_unique(config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_); + cudaMemcpy( + points_d.get(), points.data(), + points_per_pointcloud_ * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice); + + bool status1 = voxel_generator.enqueuePointCloud(*cloud1_, *tf2_buffer_); + std::size_t generated_points_num = voxel_generator.generateSweepPoints(*cloud1_, points_d); + + cudaMemcpy( + points.data(), points_d.get(), + points_per_pointcloud_ * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyDeviceToHost); + + EXPECT_TRUE(status1); + EXPECT_EQ(generated_points_num, points_per_pointcloud_); + + // Check valid points + for (std::size_t i = 0; i < points_per_pointcloud_; ++i) { + // There are no tf conversions + EXPECT_EQ(static_cast(i), points[i * config_ptr_->num_point_feature_size_ + 0]); + EXPECT_EQ(static_cast(i), points[i * config_ptr_->num_point_feature_size_ + 1]); + EXPECT_EQ(static_cast(i), points[i * config_ptr_->num_point_feature_size_ + 2]); + EXPECT_EQ(static_cast(i % 256), points[i * config_ptr_->num_point_feature_size_ + 3]); + EXPECT_EQ(static_cast(0), points[i * config_ptr_->num_point_feature_size_ + 4]); + } + + // Check invalid points + for (std::size_t i = points_per_pointcloud_ * config_ptr_->num_point_feature_size_; + i < points_per_pointcloud_ * config_ptr_->num_point_feature_size_ * 2; ++i) { + EXPECT_TRUE(std::isnan(points[i])); + } +} + +TEST_F(VoxelGeneratorTest, TwoFramesNoTf) +{ + const unsigned int num_past_frames = 1; + DensificationParam param(world_frame_, num_past_frames); + VoxelGenerator voxel_generator(param, *config_ptr_, stream_); + std::vector points; + points.resize(config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_); + std::fill(points.begin(), points.end(), std::nan("")); + + auto points_d = + cuda::make_unique(config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_); + cudaMemcpy( + points_d.get(), points.data(), + points_per_pointcloud_ * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice); + + bool status1 = voxel_generator.enqueuePointCloud(*cloud1_, *tf2_buffer_); + bool status2 = voxel_generator.enqueuePointCloud(*cloud2_, *tf2_buffer_); + std::size_t generated_points_num = voxel_generator.generateSweepPoints(*cloud1_, points_d); + + cudaMemcpy( + points.data(), points_d.get(), + points_per_pointcloud_ * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyDeviceToHost); + + EXPECT_FALSE(status1); + EXPECT_FALSE(status2); + EXPECT_EQ(0, generated_points_num); +} + +TEST_F(VoxelGeneratorTest, TwoFrames) +{ + const unsigned int num_past_frames = 1; + DensificationParam param(world_frame_, num_past_frames); + VoxelGenerator voxel_generator(param, *config_ptr_, stream_); + std::vector points; + points.resize(config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_); + std::fill(points.begin(), points.end(), std::nan("")); + + auto points_d = + cuda::make_unique(config_ptr_->cloud_capacity_ * config_ptr_->num_point_feature_size_); + cudaMemcpy( + points_d.get(), points.data(), + 2 * points_per_pointcloud_ * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice); + + tf2_buffer_->setTransform(transform1_, "authority1"); + tf2_buffer_->setTransform(transform2_, "authority1"); + + bool status1 = voxel_generator.enqueuePointCloud(*cloud1_, *tf2_buffer_); + bool status2 = voxel_generator.enqueuePointCloud(*cloud2_, *tf2_buffer_); + std::size_t generated_points_num = voxel_generator.generateSweepPoints(*cloud1_, points_d); + + cudaMemcpy( + points.data(), points_d.get(), + 2 * points_per_pointcloud_ * config_ptr_->num_point_feature_size_ * sizeof(float), + cudaMemcpyDeviceToHost); + + EXPECT_TRUE(status1); + EXPECT_TRUE(status2); + EXPECT_EQ(2 * points_per_pointcloud_, generated_points_num); + + // Check valid points for the latest pointcloud + for (std::size_t i = 0; i < points_per_pointcloud_; ++i) { + // There are no tf conversions + EXPECT_EQ(static_cast(i), points[i * config_ptr_->num_point_feature_size_ + 0]); + EXPECT_EQ(static_cast(i), points[i * config_ptr_->num_point_feature_size_ + 1]); + EXPECT_EQ(static_cast(i), points[i * config_ptr_->num_point_feature_size_ + 2]); + EXPECT_EQ(static_cast(i % 256), points[i * config_ptr_->num_point_feature_size_ + 3]); + EXPECT_EQ(static_cast(0), points[i * config_ptr_->num_point_feature_size_ + 4]); + } + + // Check valid points for the oldest pointcloud + for (std::size_t i = 0; i < points_per_pointcloud_; ++i) { + // There are tf conversions, so results are not numerically the same + EXPECT_NEAR( + static_cast(i) - delta_pointcloud_x_, + points[(points_per_pointcloud_ + i) * config_ptr_->num_point_feature_size_ + 0], 1e-6); + EXPECT_NEAR( + static_cast(i), + points[(points_per_pointcloud_ + i) * config_ptr_->num_point_feature_size_ + 1], 1e-6); + EXPECT_NEAR( + static_cast(i), + points[(points_per_pointcloud_ + i) * config_ptr_->num_point_feature_size_ + 2], 1e-6); + EXPECT_NEAR( + static_cast(i % 256), + points[(points_per_pointcloud_ + i) * config_ptr_->num_point_feature_size_ + 3], 1e-6); + EXPECT_NEAR( + 0.1, points[(points_per_pointcloud_ + i) * config_ptr_->num_point_feature_size_ + 4], 1e-6); + } + + // Check invalid points + for (std::size_t i = 2 * points_per_pointcloud_ * config_ptr_->num_point_feature_size_; + i < 3 * points_per_pointcloud_ * config_ptr_->num_point_feature_size_; ++i) { + EXPECT_TRUE(std::isnan(points[i])); + } +} +} // namespace lidar_transfusion + +int main(int argc, char ** argv) +{ + testing::InitGoogleTest(&argc, argv); + rclcpp::init(argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/perception/lidar_transfusion/test/test_voxel_generator.hpp b/perception/lidar_transfusion/test/test_voxel_generator.hpp new file mode 100644 index 0000000000000..eccbe6412d183 --- /dev/null +++ b/perception/lidar_transfusion/test/test_voxel_generator.hpp @@ -0,0 +1,65 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef TEST_VOXEL_GENERATOR_HPP_ +#define TEST_VOXEL_GENERATOR_HPP_ + +#include +#include + +#include + +#include + +#include +#include +#include + +namespace lidar_transfusion +{ + +class VoxelGeneratorTest : public testing::Test +{ +public: + void SetUp() override; + void TearDown() override; + + // These need to be public so that they can be accessed in the test cases + rclcpp::Node::SharedPtr node_{}; + + std::unique_ptr cloud1_{}, cloud2_{}; + geometry_msgs::msg::TransformStamped transform1_{}, transform2_{}; + + std::unique_ptr densification_param_ptr_{}; + std::unique_ptr config_ptr_{}; + + std::unique_ptr tf2_buffer_{}; + + std::string world_frame_{}; + std::string lidar_frame_{}; + double delta_pointcloud_x_{}; + std::size_t points_per_pointcloud_{}; + + std::vector voxels_num_{}; + std::vector point_cloud_range_{}; + std::vector voxel_size_{}; + float circle_nms_dist_threshold_{}; + std::vector yaw_norm_thresholds_{}; + float score_threshold_{}; + + cudaStream_t stream_{}; +}; +} // namespace lidar_transfusion + +#endif // TEST_VOXEL_GENERATOR_HPP_ From cda480810306e5e092dfc750b7fe07d58d1916a2 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 10 Jul 2024 14:24:40 +0900 Subject: [PATCH 127/306] fix(autoware_universe_utils): fix constParameterReference (#7882) * fix: constParameterReference Signed-off-by: kobayu858 * fix: constParameterReference Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../include/autoware/universe_utils/geometry/geometry.hpp | 2 +- common/autoware_universe_utils/src/geometry/geometry.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/geometry/geometry.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/geometry/geometry.hpp index 87c06dfd9cf08..e6dd57c9d3fed 100644 --- a/common/autoware_universe_utils/include/autoware/universe_utils/geometry/geometry.hpp +++ b/common/autoware_universe_utils/include/autoware/universe_utils/geometry/geometry.hpp @@ -413,7 +413,7 @@ geometry_msgs::msg::Pose transformPose( const geometry_msgs::msg::Pose & pose, const geometry_msgs::msg::TransformStamped & transform); geometry_msgs::msg::Pose transformPose( - const geometry_msgs::msg::Pose & pose, geometry_msgs::msg::Transform & transform); + const geometry_msgs::msg::Pose & pose, const geometry_msgs::msg::Transform & transform); geometry_msgs::msg::Pose transformPose( const geometry_msgs::msg::Pose & pose, const geometry_msgs::msg::Pose & pose_transform); diff --git a/common/autoware_universe_utils/src/geometry/geometry.cpp b/common/autoware_universe_utils/src/geometry/geometry.cpp index 1f4fd318e227b..b0f5756fc2d94 100644 --- a/common/autoware_universe_utils/src/geometry/geometry.cpp +++ b/common/autoware_universe_utils/src/geometry/geometry.cpp @@ -225,7 +225,7 @@ geometry_msgs::msg::Pose transformPose( } geometry_msgs::msg::Pose transformPose( - const geometry_msgs::msg::Pose & pose, geometry_msgs::msg::Transform & transform) + const geometry_msgs::msg::Pose & pose, const geometry_msgs::msg::Transform & transform) { geometry_msgs::msg::TransformStamped transform_stamped; transform_stamped.transform = transform; From 625e16624ca4e6b455e2ebf61d479b99f89435f8 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 10 Jul 2024 14:44:19 +0900 Subject: [PATCH 128/306] refactor(compare_map_segmentation)!: fix namespace and directory structure (#7910) * feat: update namespace and directory structure for compare_map_segmentation code Signed-off-by: Taekjin LEE * refactor: update directory structure Signed-off-by: Taekjin LEE * fix: add missing include Signed-off-by: Taekjin LEE * style(pre-commit): autofix --------- Signed-off-by: Taekjin LEE Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../filter/pointcloud_map_filter.launch.py | 2 +- .../ground_segmentation.launch.py | 2 +- .../behavior_planning.launch.xml | 7 +++- .../compare_map_segmentation/CMakeLists.txt | 42 +++++++++---------- .../node.cpp} | 9 ++-- .../compare_elevation_map_filter/node.hpp} | 10 ++--- .../node.cpp} | 12 ++++-- .../node.hpp} | 12 +++--- .../node.cpp} | 11 +++-- .../node.hpp} | 12 +++--- .../node.cpp} | 12 ++++-- .../voxel_based_compare_map_filter/node.hpp} | 12 +++--- .../node.cpp} | 11 +++-- .../node.hpp} | 12 +++--- .../voxel_grid_map_loader.cpp | 6 ++- .../voxel_grid_map_loader.hpp | 16 ++++--- 16 files changed, 108 insertions(+), 80 deletions(-) rename perception/compare_map_segmentation/src/{compare_elevation_map_filter_node.cpp => compare_elevation_map_filter/node.cpp} (93%) rename perception/compare_map_segmentation/{include/compare_map_segmentation/compare_elevation_map_filter_node.hpp => src/compare_elevation_map_filter/node.hpp} (86%) rename perception/compare_map_segmentation/src/{distance_based_compare_map_filter_nodelet.cpp => distance_based_compare_map_filter/node.cpp} (94%) rename perception/compare_map_segmentation/{include/compare_map_segmentation/distance_based_compare_map_filter_nodelet.hpp => src/distance_based_compare_map_filter/node.hpp} (91%) rename perception/compare_map_segmentation/src/{voxel_based_approximate_compare_map_filter_nodelet.cpp => voxel_based_approximate_compare_map_filter/node.cpp} (94%) rename perception/compare_map_segmentation/{include/compare_map_segmentation/voxel_based_approximate_compare_map_filter_nodelet.hpp => src/voxel_based_approximate_compare_map_filter/node.hpp} (85%) rename perception/compare_map_segmentation/src/{voxel_based_compare_map_filter_nodelet.cpp => voxel_based_compare_map_filter/node.cpp} (92%) rename perception/compare_map_segmentation/{include/compare_map_segmentation/voxel_based_compare_map_filter_nodelet.hpp => src/voxel_based_compare_map_filter/node.hpp} (78%) rename perception/compare_map_segmentation/src/{voxel_distance_based_compare_map_filter_nodelet.cpp => voxel_distance_based_compare_map_filter/node.cpp} (95%) rename perception/compare_map_segmentation/{include/compare_map_segmentation/voxel_distance_based_compare_map_filter_nodelet.hpp => src/voxel_distance_based_compare_map_filter/node.hpp} (93%) rename perception/compare_map_segmentation/src/{ => voxel_grid_map_loader}/voxel_grid_map_loader.cpp (99%) rename perception/compare_map_segmentation/{include/compare_map_segmentation => src/voxel_grid_map_loader}/voxel_grid_map_loader.hpp (95%) diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/filter/pointcloud_map_filter.launch.py b/launch/tier4_perception_launch/launch/object_recognition/detection/filter/pointcloud_map_filter.launch.py index 5fa71cd1aa0e9..6c0e5f20b8957 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/filter/pointcloud_map_filter.launch.py +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/filter/pointcloud_map_filter.launch.py @@ -106,7 +106,7 @@ def create_compare_map_pipeline(self): components.append( ComposableNode( package="compare_map_segmentation", - plugin="compare_map_segmentation::VoxelBasedCompareMapFilterComponent", + plugin="autoware::compare_map_segmentation::VoxelBasedCompareMapFilterComponent", name="voxel_based_compare_map_filter", remappings=[ ("input", down_sample_topic), diff --git a/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py b/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py index ba0b058d8c00b..fd38b7bfd6ab3 100644 --- a/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py +++ b/launch/tier4_perception_launch/launch/obstacle_segmentation/ground_segmentation/ground_segmentation.launch.py @@ -391,7 +391,7 @@ def create_single_frame_outlier_filter_components(input_topic, output_topic, con components.append( ComposableNode( package="compare_map_segmentation", - plugin="compare_map_segmentation::CompareElevationMapFilterComponent", + plugin="autoware::compare_map_segmentation::CompareElevationMapFilterComponent", name="compare_elevation_map_filter", namespace="elevation_map", remappings=[ diff --git a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml index 3deff32d6e297..3c58c8d85b5be 100644 --- a/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml +++ b/launch/tier4_planning_launch/launch/scenario_planning/lane_driving/behavior_planning/behavior_planning.launch.xml @@ -260,7 +260,12 @@ - + diff --git a/perception/compare_map_segmentation/CMakeLists.txt b/perception/compare_map_segmentation/CMakeLists.txt index a76b0fc56e2a0..0a33711e946ef 100644 --- a/perception/compare_map_segmentation/CMakeLists.txt +++ b/perception/compare_map_segmentation/CMakeLists.txt @@ -21,23 +21,23 @@ include_directories( ${GRID_MAP_INCLUDE_DIR} ) -add_library(compare_map_segmentation SHARED - src/distance_based_compare_map_filter_nodelet.cpp - src/voxel_based_approximate_compare_map_filter_nodelet.cpp - src/voxel_based_compare_map_filter_nodelet.cpp - src/voxel_distance_based_compare_map_filter_nodelet.cpp - src/compare_elevation_map_filter_node.cpp - src/voxel_grid_map_loader.cpp +add_library(${PROJECT_NAME} SHARED + src/distance_based_compare_map_filter/node.cpp + src/voxel_based_approximate_compare_map_filter/node.cpp + src/voxel_based_compare_map_filter/node.cpp + src/voxel_distance_based_compare_map_filter/node.cpp + src/compare_elevation_map_filter/node.cpp + src/voxel_grid_map_loader/voxel_grid_map_loader.cpp ) -target_link_libraries(compare_map_segmentation +target_link_libraries(${PROJECT_NAME} pointcloud_preprocessor::pointcloud_preprocessor_filter_base ${Boost_LIBRARIES} ${OpenCV_LIBRARIES} ${PCL_LIBRARIES} ) -ament_target_dependencies(compare_map_segmentation +ament_target_dependencies(${PROJECT_NAME} grid_map_pcl grid_map_ros pcl_conversions @@ -50,7 +50,7 @@ ament_target_dependencies(compare_map_segmentation ) if(OPENMP_FOUND) - set_target_properties(compare_map_segmentation PROPERTIES + set_target_properties(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS ${OpenMP_CXX_FLAGS} LINK_FLAGS ${OpenMP_CXX_FLAGS} ) @@ -58,32 +58,32 @@ endif() # ========== Compare Map Filter ========== # -- Distance Based Compare Map Filter -- -rclcpp_components_register_node(compare_map_segmentation - PLUGIN "compare_map_segmentation::DistanceBasedCompareMapFilterComponent" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::compare_map_segmentation::DistanceBasedCompareMapFilterComponent" EXECUTABLE distance_based_compare_map_filter_node) # -- Voxel Based Approximate Compare Map Filter -- -rclcpp_components_register_node(compare_map_segmentation - PLUGIN "compare_map_segmentation::VoxelBasedApproximateCompareMapFilterComponent" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::compare_map_segmentation::VoxelBasedApproximateCompareMapFilterComponent" EXECUTABLE voxel_based_approximate_compare_map_filter_node) # -- Voxel Based Compare Map Filter -- -rclcpp_components_register_node(compare_map_segmentation - PLUGIN "compare_map_segmentation::VoxelBasedCompareMapFilterComponent" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::compare_map_segmentation::VoxelBasedCompareMapFilterComponent" EXECUTABLE voxel_based_compare_map_filter_node) # -- Voxel Distance Based Compare Map Filter -- -rclcpp_components_register_node(compare_map_segmentation - PLUGIN "compare_map_segmentation::VoxelDistanceBasedCompareMapFilterComponent" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::compare_map_segmentation::VoxelDistanceBasedCompareMapFilterComponent" EXECUTABLE voxel_distance_based_compare_map_filter_node) # -- Compare Elevation Map Filter -- -rclcpp_components_register_node(compare_map_segmentation - PLUGIN "compare_map_segmentation::CompareElevationMapFilterComponent" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::compare_map_segmentation::CompareElevationMapFilterComponent" EXECUTABLE compare_elevation_map_filter_node) install( - TARGETS compare_map_segmentation + TARGETS ${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin diff --git a/perception/compare_map_segmentation/src/compare_elevation_map_filter_node.cpp b/perception/compare_map_segmentation/src/compare_elevation_map_filter/node.cpp similarity index 93% rename from perception/compare_map_segmentation/src/compare_elevation_map_filter_node.cpp rename to perception/compare_map_segmentation/src/compare_elevation_map_filter/node.cpp index 1eadeeb3bec05..e5a19245bc5b1 100644 --- a/perception/compare_map_segmentation/src/compare_elevation_map_filter_node.cpp +++ b/perception/compare_map_segmentation/src/compare_elevation_map_filter/node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "compare_map_segmentation/compare_elevation_map_filter_node.hpp" +#include "node.hpp" #include #include @@ -33,7 +33,7 @@ #include #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { CompareElevationMapFilterComponent::CompareElevationMapFilterComponent( const rclcpp::NodeOptions & options) @@ -94,7 +94,8 @@ void CompareElevationMapFilterComponent::filter( output.header.stamp = input->header.stamp; output.header.frame_id = output_frame; } -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation #include -RCLCPP_COMPONENTS_REGISTER_NODE(compare_map_segmentation::CompareElevationMapFilterComponent) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::compare_map_segmentation::CompareElevationMapFilterComponent) diff --git a/perception/compare_map_segmentation/include/compare_map_segmentation/compare_elevation_map_filter_node.hpp b/perception/compare_map_segmentation/src/compare_elevation_map_filter/node.hpp similarity index 86% rename from perception/compare_map_segmentation/include/compare_map_segmentation/compare_elevation_map_filter_node.hpp rename to perception/compare_map_segmentation/src/compare_elevation_map_filter/node.hpp index 63aad08fe7611..ba2328d862951 100644 --- a/perception/compare_map_segmentation/include/compare_map_segmentation/compare_elevation_map_filter_node.hpp +++ b/perception/compare_map_segmentation/src/compare_elevation_map_filter/node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef COMPARE_MAP_SEGMENTATION__COMPARE_ELEVATION_MAP_FILTER_NODE_HPP_ -#define COMPARE_MAP_SEGMENTATION__COMPARE_ELEVATION_MAP_FILTER_NODE_HPP_ +#ifndef COMPARE_ELEVATION_MAP_FILTER__NODE_HPP_ +#define COMPARE_ELEVATION_MAP_FILTER__NODE_HPP_ #include "pointcloud_preprocessor/filter.hpp" @@ -29,7 +29,7 @@ #include #include #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { class CompareElevationMapFilterComponent : public pointcloud_preprocessor::Filter { @@ -56,6 +56,6 @@ class CompareElevationMapFilterComponent : public pointcloud_preprocessor::Filte PCL_MAKE_ALIGNED_OPERATOR_NEW explicit CompareElevationMapFilterComponent(const rclcpp::NodeOptions & options); }; -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation -#endif // COMPARE_MAP_SEGMENTATION__COMPARE_ELEVATION_MAP_FILTER_NODE_HPP_ +#endif // COMPARE_ELEVATION_MAP_FILTER__NODE_HPP_ diff --git a/perception/compare_map_segmentation/src/distance_based_compare_map_filter_nodelet.cpp b/perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.cpp similarity index 94% rename from perception/compare_map_segmentation/src/distance_based_compare_map_filter_nodelet.cpp rename to perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.cpp index 2962ba1e28a75..53183cd7dc3f0 100644 --- a/perception/compare_map_segmentation/src/distance_based_compare_map_filter_nodelet.cpp +++ b/perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.cpp @@ -12,7 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "compare_map_segmentation/distance_based_compare_map_filter_nodelet.hpp" +#include "node.hpp" + +#include "autoware/universe_utils/ros/debug_publisher.hpp" +#include "autoware/universe_utils/system/stop_watch.hpp" #include #include @@ -20,7 +23,7 @@ #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { void DistanceBasedStaticMapLoader::onMapCallback( @@ -176,7 +179,8 @@ void DistanceBasedCompareMapFilterComponent::filter( } } -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation #include -RCLCPP_COMPONENTS_REGISTER_NODE(compare_map_segmentation::DistanceBasedCompareMapFilterComponent) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::compare_map_segmentation::DistanceBasedCompareMapFilterComponent) diff --git a/perception/compare_map_segmentation/include/compare_map_segmentation/distance_based_compare_map_filter_nodelet.hpp b/perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.hpp similarity index 91% rename from perception/compare_map_segmentation/include/compare_map_segmentation/distance_based_compare_map_filter_nodelet.hpp rename to perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.hpp index 301dc75839f8e..115a73cf0d263 100644 --- a/perception/compare_map_segmentation/include/compare_map_segmentation/distance_based_compare_map_filter_nodelet.hpp +++ b/perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef COMPARE_MAP_SEGMENTATION__DISTANCE_BASED_COMPARE_MAP_FILTER_NODELET_HPP_ -#define COMPARE_MAP_SEGMENTATION__DISTANCE_BASED_COMPARE_MAP_FILTER_NODELET_HPP_ +#ifndef DISTANCE_BASED_COMPARE_MAP_FILTER__NODE_HPP_ +#define DISTANCE_BASED_COMPARE_MAP_FILTER__NODE_HPP_ +#include "../voxel_grid_map_loader/voxel_grid_map_loader.hpp" #include "pointcloud_preprocessor/filter.hpp" -#include "voxel_grid_map_loader.hpp" #include // for pcl::isFinite #include @@ -26,7 +26,7 @@ #include #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { typedef typename pcl::Filter::PointCloud PointCloud; @@ -114,8 +114,8 @@ class DistanceBasedCompareMapFilterComponent : public pointcloud_preprocessor::F PCL_MAKE_ALIGNED_OPERATOR_NEW explicit DistanceBasedCompareMapFilterComponent(const rclcpp::NodeOptions & options); }; -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation // clang-format off -#endif // COMPARE_MAP_SEGMENTATION__DISTANCE_BASED_COMPARE_MAP_FILTER_NODELET_HPP_ // NOLINT +#endif // DISTANCE_BASED_COMPARE_MAP_FILTER__NODE_HPP_ // NOLINT // clang-format on diff --git a/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter_nodelet.cpp b/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.cpp similarity index 94% rename from perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter_nodelet.cpp rename to perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.cpp index e14ae7d55a1d4..8bc22f8c31184 100644 --- a/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter_nodelet.cpp +++ b/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.cpp @@ -12,7 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "compare_map_segmentation/voxel_based_approximate_compare_map_filter_nodelet.hpp" +#include "node.hpp" + +#include "autoware/universe_utils/ros/debug_publisher.hpp" +#include "autoware/universe_utils/system/stop_watch.hpp" #include #include @@ -20,7 +23,7 @@ #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { bool VoxelBasedApproximateStaticMapLoader::is_close_to_map( @@ -145,8 +148,8 @@ void VoxelBasedApproximateCompareMapFilterComponent::filter( } } -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation #include RCLCPP_COMPONENTS_REGISTER_NODE( - compare_map_segmentation::VoxelBasedApproximateCompareMapFilterComponent) + autoware::compare_map_segmentation::VoxelBasedApproximateCompareMapFilterComponent) diff --git a/perception/compare_map_segmentation/include/compare_map_segmentation/voxel_based_approximate_compare_map_filter_nodelet.hpp b/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.hpp similarity index 85% rename from perception/compare_map_segmentation/include/compare_map_segmentation/voxel_based_approximate_compare_map_filter_nodelet.hpp rename to perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.hpp index 3a5e183767620..26b0204210209 100644 --- a/perception/compare_map_segmentation/include/compare_map_segmentation/voxel_based_approximate_compare_map_filter_nodelet.hpp +++ b/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef COMPARE_MAP_SEGMENTATION__VOXEL_BASED_APPROXIMATE_COMPARE_MAP_FILTER_NODELET_HPP_ // NOLINT -#define COMPARE_MAP_SEGMENTATION__VOXEL_BASED_APPROXIMATE_COMPARE_MAP_FILTER_NODELET_HPP_ // NOLINT +#ifndef VOXEL_BASED_APPROXIMATE_COMPARE_MAP_FILTER__NODE_HPP_ // NOLINT +#define VOXEL_BASED_APPROXIMATE_COMPARE_MAP_FILTER__NODE_HPP_ // NOLINT +#include "../voxel_grid_map_loader/voxel_grid_map_loader.hpp" #include "pointcloud_preprocessor/filter.hpp" -#include "voxel_grid_map_loader.hpp" #include #include @@ -25,7 +25,7 @@ #include #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { class VoxelBasedApproximateStaticMapLoader : public VoxelGridStaticMapLoader @@ -70,8 +70,8 @@ class VoxelBasedApproximateCompareMapFilterComponent : public pointcloud_preproc PCL_MAKE_ALIGNED_OPERATOR_NEW explicit VoxelBasedApproximateCompareMapFilterComponent(const rclcpp::NodeOptions & options); }; -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation // clang-format off -#endif // COMPARE_MAP_SEGMENTATION__VOXEL_BASED_APPROXIMATE_COMPARE_MAP_FILTER_NODELET_HPP_ // NOLINT +#endif // VOXEL_BASED_APPROXIMATE_COMPARE_MAP_FILTER__NODE_HPP_ // NOLINT // clang-format on diff --git a/perception/compare_map_segmentation/src/voxel_based_compare_map_filter_nodelet.cpp b/perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.cpp similarity index 92% rename from perception/compare_map_segmentation/src/voxel_based_compare_map_filter_nodelet.cpp rename to perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.cpp index 449ae76181bc6..1861a710cdebd 100644 --- a/perception/compare_map_segmentation/src/voxel_based_compare_map_filter_nodelet.cpp +++ b/perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.cpp @@ -12,7 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "compare_map_segmentation/voxel_based_compare_map_filter_nodelet.hpp" +#include "node.hpp" + +#include "autoware/universe_utils/ros/debug_publisher.hpp" +#include "autoware/universe_utils/system/stop_watch.hpp" #include #include @@ -21,7 +24,7 @@ #include #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { using pointcloud_preprocessor::get_param; @@ -106,7 +109,8 @@ void VoxelBasedCompareMapFilterComponent::filter( } } -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation #include -RCLCPP_COMPONENTS_REGISTER_NODE(compare_map_segmentation::VoxelBasedCompareMapFilterComponent) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::compare_map_segmentation::VoxelBasedCompareMapFilterComponent) diff --git a/perception/compare_map_segmentation/include/compare_map_segmentation/voxel_based_compare_map_filter_nodelet.hpp b/perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.hpp similarity index 78% rename from perception/compare_map_segmentation/include/compare_map_segmentation/voxel_based_compare_map_filter_nodelet.hpp rename to perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.hpp index 692193d13b04f..6e03e5d7a2e09 100644 --- a/perception/compare_map_segmentation/include/compare_map_segmentation/voxel_based_compare_map_filter_nodelet.hpp +++ b/perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef COMPARE_MAP_SEGMENTATION__VOXEL_BASED_COMPARE_MAP_FILTER_NODELET_HPP_ -#define COMPARE_MAP_SEGMENTATION__VOXEL_BASED_COMPARE_MAP_FILTER_NODELET_HPP_ +#ifndef VOXEL_BASED_COMPARE_MAP_FILTER__NODE_HPP_ +#define VOXEL_BASED_COMPARE_MAP_FILTER__NODE_HPP_ -#include "compare_map_segmentation/voxel_grid_map_loader.hpp" +#include "../voxel_grid_map_loader/voxel_grid_map_loader.hpp" #include "pointcloud_preprocessor/filter.hpp" #include @@ -24,7 +24,7 @@ #include #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { class VoxelBasedCompareMapFilterComponent : public pointcloud_preprocessor::Filter { @@ -45,6 +45,6 @@ class VoxelBasedCompareMapFilterComponent : public pointcloud_preprocessor::Filt PCL_MAKE_ALIGNED_OPERATOR_NEW explicit VoxelBasedCompareMapFilterComponent(const rclcpp::NodeOptions & options); }; -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation -#endif // COMPARE_MAP_SEGMENTATION__VOXEL_BASED_COMPARE_MAP_FILTER_NODELET_HPP_ +#endif // VOXEL_BASED_COMPARE_MAP_FILTER__NODE_HPP_ diff --git a/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter_nodelet.cpp b/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.cpp similarity index 95% rename from perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter_nodelet.cpp rename to perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.cpp index 0a660bfffd7fb..7fdeb5d8ea163 100644 --- a/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter_nodelet.cpp +++ b/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.cpp @@ -12,7 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "compare_map_segmentation/voxel_distance_based_compare_map_filter_nodelet.hpp" +#include "node.hpp" + +#include "autoware/universe_utils/ros/debug_publisher.hpp" +#include "autoware/universe_utils/system/stop_watch.hpp" #include #include @@ -20,7 +23,7 @@ #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { void VoxelDistanceBasedStaticMapLoader::onMapCallback( @@ -174,8 +177,8 @@ void VoxelDistanceBasedCompareMapFilterComponent::filter( "debug/processing_time_ms", processing_time_ms); } } -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation #include RCLCPP_COMPONENTS_REGISTER_NODE( - compare_map_segmentation::VoxelDistanceBasedCompareMapFilterComponent) + autoware::compare_map_segmentation::VoxelDistanceBasedCompareMapFilterComponent) diff --git a/perception/compare_map_segmentation/include/compare_map_segmentation/voxel_distance_based_compare_map_filter_nodelet.hpp b/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.hpp similarity index 93% rename from perception/compare_map_segmentation/include/compare_map_segmentation/voxel_distance_based_compare_map_filter_nodelet.hpp rename to perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.hpp index 0cfc8a64ab2dd..e0656359f3df2 100644 --- a/perception/compare_map_segmentation/include/compare_map_segmentation/voxel_distance_based_compare_map_filter_nodelet.hpp +++ b/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef COMPARE_MAP_SEGMENTATION__VOXEL_DISTANCE_BASED_COMPARE_MAP_FILTER_NODELET_HPP_ // NOLINT -#define COMPARE_MAP_SEGMENTATION__VOXEL_DISTANCE_BASED_COMPARE_MAP_FILTER_NODELET_HPP_ // NOLINT +#ifndef VOXEL_DISTANCE_BASED_COMPARE_MAP_FILTER__NODE_HPP_ // NOLINT +#define VOXEL_DISTANCE_BASED_COMPARE_MAP_FILTER__NODE_HPP_ // NOLINT +#include "../voxel_grid_map_loader/voxel_grid_map_loader.hpp" #include "pointcloud_preprocessor/filter.hpp" -#include "voxel_grid_map_loader.hpp" #include #include @@ -27,7 +27,7 @@ #include #include -namespace compare_map_segmentation +namespace autoware::compare_map_segmentation { typedef typename pcl::Filter::PointCloud PointCloud; @@ -139,8 +139,8 @@ class VoxelDistanceBasedCompareMapFilterComponent : public pointcloud_preprocess PCL_MAKE_ALIGNED_OPERATOR_NEW explicit VoxelDistanceBasedCompareMapFilterComponent(const rclcpp::NodeOptions & options); }; -} // namespace compare_map_segmentation +} // namespace autoware::compare_map_segmentation // clang-format off -#endif // COMPARE_MAP_SEGMENTATION__VOXEL_DISTANCE_BASED_COMPARE_MAP_FILTER_NODELET_HPP_ // NOLINT +#endif // VOXEL_DISTANCE_BASED_COMPARE_MAP_FILTER__NODE_HPP_ // NOLINT // clang-format on diff --git a/perception/compare_map_segmentation/src/voxel_grid_map_loader.cpp b/perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.cpp similarity index 99% rename from perception/compare_map_segmentation/src/voxel_grid_map_loader.cpp rename to perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.cpp index ef3727019c0f4..b011799e5b912 100644 --- a/perception/compare_map_segmentation/src/voxel_grid_map_loader.cpp +++ b/perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.cpp @@ -12,8 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "compare_map_segmentation/voxel_grid_map_loader.hpp" +#include "voxel_grid_map_loader.hpp" +namespace autoware::compare_map_segmentation +{ VoxelGridMapLoader::VoxelGridMapLoader( rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, std::string * tf_map_input_frame, std::mutex * mutex) @@ -462,3 +464,5 @@ void VoxelGridDynamicMapLoader::request_update_map(const geometry_msgs::msg::Poi } } } + +} // namespace autoware::compare_map_segmentation diff --git a/perception/compare_map_segmentation/include/compare_map_segmentation/voxel_grid_map_loader.hpp b/perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.hpp similarity index 95% rename from perception/compare_map_segmentation/include/compare_map_segmentation/voxel_grid_map_loader.hpp rename to perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.hpp index 21cb19edcd0ec..bc54519a95e47 100644 --- a/perception/compare_map_segmentation/include/compare_map_segmentation/voxel_grid_map_loader.hpp +++ b/perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef COMPARE_MAP_SEGMENTATION__VOXEL_GRID_MAP_LOADER_HPP_ -#define COMPARE_MAP_SEGMENTATION__VOXEL_GRID_MAP_LOADER_HPP_ +#ifndef VOXEL_GRID_MAP_LOADER__VOXEL_GRID_MAP_LOADER_HPP_ +#define VOXEL_GRID_MAP_LOADER__VOXEL_GRID_MAP_LOADER_HPP_ #include -#include +#include "autoware_map_msgs/srv/get_differential_point_cloud_map.hpp" #include #include #include @@ -33,6 +33,8 @@ #include #include +namespace autoware::compare_map_segmentation +{ template double distance3D(const T p1, const U p2) { @@ -138,7 +140,7 @@ class VoxelGridStaticMapLoader : public VoxelGridMapLoader rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, std::string * tf_map_input_frame, std::mutex * mutex); virtual void onMapCallback(const sensor_msgs::msg::PointCloud2::ConstSharedPtr map); - virtual bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold); + bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; }; class VoxelGridDynamicMapLoader : public VoxelGridMapLoader @@ -199,7 +201,7 @@ class VoxelGridDynamicMapLoader : public VoxelGridMapLoader void timer_callback(); bool should_update_map() const; void request_update_map(const geometry_msgs::msg::Point & position); - virtual bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold); + bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; /** \brief Check if point close to map pointcloud in the */ bool is_close_to_next_map_grid( const pcl::PointXYZ & point, const int current_map_grid_index, const double distance_threshold); @@ -319,4 +321,6 @@ class VoxelGridDynamicMapLoader : public VoxelGridMapLoader } }; -#endif // COMPARE_MAP_SEGMENTATION__VOXEL_GRID_MAP_LOADER_HPP_ +} // namespace autoware::compare_map_segmentation + +#endif // VOXEL_GRID_MAP_LOADER__VOXEL_GRID_MAP_LOADER_HPP_ From bb53c127c4338e4515e05563464d0281b3c595fa Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 10 Jul 2024 14:48:41 +0900 Subject: [PATCH 129/306] refactor(radar_threshold_filter): fix namespace and directory structure (#7913) Signed-off-by: Taekjin LEE --- sensing/radar_threshold_filter/CMakeLists.txt | 14 +++++++------- .../radar_threshold_filter_node.cpp | 11 +++++------ .../radar_threshold_filter_node.hpp | 10 +++++----- .../test_radar_threshold_filter.cpp | 4 ++-- 4 files changed, 19 insertions(+), 20 deletions(-) rename sensing/radar_threshold_filter/src/{radar_threshold_filter_node => }/radar_threshold_filter_node.cpp (95%) rename sensing/radar_threshold_filter/{include/radar_threshold_filter => src}/radar_threshold_filter_node.hpp (87%) diff --git a/sensing/radar_threshold_filter/CMakeLists.txt b/sensing/radar_threshold_filter/CMakeLists.txt index 3c4ae8d40d2c1..136b41cb3b37b 100644 --- a/sensing/radar_threshold_filter/CMakeLists.txt +++ b/sensing/radar_threshold_filter/CMakeLists.txt @@ -6,12 +6,12 @@ find_package(autoware_cmake REQUIRED) autoware_package() ## Targets -ament_auto_add_library(radar_threshold_filter_node_component SHARED - src/radar_threshold_filter_node/radar_threshold_filter_node.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/radar_threshold_filter_node.cpp ) -rclcpp_components_register_node(radar_threshold_filter_node_component - PLUGIN "radar_threshold_filter::RadarThresholdFilterNode" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::radar_threshold_filter::RadarThresholdFilterNode" EXECUTABLE radar_threshold_filter_node ) @@ -24,10 +24,10 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() file(GLOB_RECURSE test_files test/**/*.cpp) - ament_add_ros_isolated_gtest(radar_threshold_filter ${test_files}) + ament_add_ros_isolated_gtest(${PROJECT_NAME}_test ${test_files}) - target_link_libraries(radar_threshold_filter - radar_threshold_filter_node_component + target_link_libraries(${PROJECT_NAME}_test + ${PROJECT_NAME} ) endif() diff --git a/sensing/radar_threshold_filter/src/radar_threshold_filter_node/radar_threshold_filter_node.cpp b/sensing/radar_threshold_filter/src/radar_threshold_filter_node.cpp similarity index 95% rename from sensing/radar_threshold_filter/src/radar_threshold_filter_node/radar_threshold_filter_node.cpp rename to sensing/radar_threshold_filter/src/radar_threshold_filter_node.cpp index 3f3837b678992..7a260766c2c7a 100644 --- a/sensing/radar_threshold_filter/src/radar_threshold_filter_node/radar_threshold_filter_node.cpp +++ b/sensing/radar_threshold_filter/src/radar_threshold_filter_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "radar_threshold_filter/radar_threshold_filter_node.hpp" +#include "radar_threshold_filter_node.hpp" #include @@ -20,8 +20,6 @@ #include #include -using std::placeholders::_1; - namespace { template @@ -51,10 +49,11 @@ bool isWithin(double value, double max, double min) } } // namespace -namespace radar_threshold_filter +namespace autoware::radar_threshold_filter { using radar_msgs::msg::RadarReturn; using radar_msgs::msg::RadarScan; +using std::placeholders::_1; RadarThresholdFilterNode::RadarThresholdFilterNode(const rclcpp::NodeOptions & node_options) : Node("radar_threshold_filter", node_options) @@ -156,7 +155,7 @@ bool RadarThresholdFilterNode::isWithinThreshold(const RadarReturn & radar_retur return true; } -} // namespace radar_threshold_filter +} // namespace autoware::radar_threshold_filter #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(radar_threshold_filter::RadarThresholdFilterNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::radar_threshold_filter::RadarThresholdFilterNode) diff --git a/sensing/radar_threshold_filter/include/radar_threshold_filter/radar_threshold_filter_node.hpp b/sensing/radar_threshold_filter/src/radar_threshold_filter_node.hpp similarity index 87% rename from sensing/radar_threshold_filter/include/radar_threshold_filter/radar_threshold_filter_node.hpp rename to sensing/radar_threshold_filter/src/radar_threshold_filter_node.hpp index ac38261dc34f1..a8a25bd972112 100644 --- a/sensing/radar_threshold_filter/include/radar_threshold_filter/radar_threshold_filter_node.hpp +++ b/sensing/radar_threshold_filter/src/radar_threshold_filter_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RADAR_THRESHOLD_FILTER__RADAR_THRESHOLD_FILTER_NODE_HPP_ -#define RADAR_THRESHOLD_FILTER__RADAR_THRESHOLD_FILTER_NODE_HPP_ +#ifndef RADAR_THRESHOLD_FILTER_NODE_HPP_ +#define RADAR_THRESHOLD_FILTER_NODE_HPP_ #include @@ -24,7 +24,7 @@ #include #include -namespace radar_threshold_filter +namespace autoware::radar_threshold_filter { using radar_msgs::msg::RadarReturn; using radar_msgs::msg::RadarScan; @@ -73,6 +73,6 @@ class RadarThresholdFilterNode : public rclcpp::Node bool isWithinThreshold(const RadarReturn & radar_return); }; -} // namespace radar_threshold_filter +} // namespace autoware::radar_threshold_filter -#endif // RADAR_THRESHOLD_FILTER__RADAR_THRESHOLD_FILTER_NODE_HPP_ +#endif // RADAR_THRESHOLD_FILTER_NODE_HPP_ diff --git a/sensing/radar_threshold_filter/test/radar_threshold_filter/test_radar_threshold_filter.cpp b/sensing/radar_threshold_filter/test/radar_threshold_filter/test_radar_threshold_filter.cpp index 71a03f7d97cad..dd9063a380d69 100644 --- a/sensing/radar_threshold_filter/test/radar_threshold_filter/test_radar_threshold_filter.cpp +++ b/sensing/radar_threshold_filter/test/radar_threshold_filter/test_radar_threshold_filter.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "radar_threshold_filter/radar_threshold_filter_node.hpp" +#include "../../src/radar_threshold_filter_node.hpp" #include @@ -21,8 +21,8 @@ TEST(RadarThresholdFilter, isWithinThreshold) { rclcpp::init(0, nullptr); + using autoware::radar_threshold_filter::RadarThresholdFilterNode; using radar_msgs::msg::RadarReturn; - using radar_threshold_filter::RadarThresholdFilterNode; const double amplitude_min = -10.0; const double amplitude_max = 100.0; From a0c3a2461ee926e8233e3a13d34621692629ac2a Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 10 Jul 2024 14:48:53 +0900 Subject: [PATCH 130/306] refactor(radar_scan_to_pointcloud2): fix namespace and directory structure (#7912) * refactor(radar_scan_to_pointcloud2): fix namespace and directory structure Signed-off-by: Taekjin LEE * refactor(radar_scan_to_pointcloud2): add PCL dependency and update CMakeLists.txt Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- .../radar_scan_to_pointcloud2/CMakeLists.txt | 17 +++++++++++++---- sensing/radar_scan_to_pointcloud2/package.xml | 2 +- .../radar_scan_to_pointcloud2_node.cpp | 8 ++++---- .../radar_scan_to_pointcloud2_node.hpp | 10 +++++----- 4 files changed, 23 insertions(+), 14 deletions(-) rename sensing/radar_scan_to_pointcloud2/src/{radar_scan_to_pointcloud2_node => }/radar_scan_to_pointcloud2_node.cpp (95%) rename sensing/radar_scan_to_pointcloud2/{include/radar_scan_to_pointcloud2 => src}/radar_scan_to_pointcloud2_node.hpp (86%) diff --git a/sensing/radar_scan_to_pointcloud2/CMakeLists.txt b/sensing/radar_scan_to_pointcloud2/CMakeLists.txt index 6ec1759fc7d4d..44b668b49c87a 100644 --- a/sensing/radar_scan_to_pointcloud2/CMakeLists.txt +++ b/sensing/radar_scan_to_pointcloud2/CMakeLists.txt @@ -5,13 +5,22 @@ project(radar_scan_to_pointcloud2) find_package(autoware_cmake REQUIRED) autoware_package() +find_package(PCL REQUIRED COMPONENTS common) + # Targets -ament_auto_add_library(radar_scan_to_pointcloud2_node_component SHARED - src/radar_scan_to_pointcloud2_node/radar_scan_to_pointcloud2_node.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/radar_scan_to_pointcloud2_node.cpp +) + +target_include_directories(${PROJECT_NAME} + SYSTEM PUBLIC ${PCL_INCLUDE_DIRS} +) +target_link_libraries(${PROJECT_NAME} + ${PCL_LIBRARIES} ) -rclcpp_components_register_node(radar_scan_to_pointcloud2_node_component - PLUGIN "radar_scan_to_pointcloud2::RadarScanToPointcloud2Node" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::radar_scan_to_pointcloud2::RadarScanToPointcloud2Node" EXECUTABLE radar_scan_to_pointcloud2_node ) diff --git a/sensing/radar_scan_to_pointcloud2/package.xml b/sensing/radar_scan_to_pointcloud2/package.xml index a9d4fe7ebda8f..c8c84ee3c8a4a 100644 --- a/sensing/radar_scan_to_pointcloud2/package.xml +++ b/sensing/radar_scan_to_pointcloud2/package.xml @@ -14,8 +14,8 @@ ament_cmake_auto autoware_cmake + libpcl-common pcl_conversions - pcl_ros radar_msgs rclcpp rclcpp_components diff --git a/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node/radar_scan_to_pointcloud2_node.cpp b/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node.cpp similarity index 95% rename from sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node/radar_scan_to_pointcloud2_node.cpp rename to sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node.cpp index 8874b744bced6..30f267eebc205 100644 --- a/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node/radar_scan_to_pointcloud2_node.cpp +++ b/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "radar_scan_to_pointcloud2/radar_scan_to_pointcloud2_node.hpp" +#include "radar_scan_to_pointcloud2_node.hpp" #include #include @@ -87,7 +87,7 @@ sensor_msgs::msg::PointCloud2 toDopplerPointcloud2(const radar_msgs::msg::RadarS } } // namespace -namespace radar_scan_to_pointcloud2 +namespace autoware::radar_scan_to_pointcloud2 { using radar_msgs::msg::RadarReturn; using radar_msgs::msg::RadarScan; @@ -153,7 +153,7 @@ void RadarScanToPointcloud2Node::onData(const RadarScan::ConstSharedPtr radar_ms } } -} // namespace radar_scan_to_pointcloud2 +} // namespace autoware::radar_scan_to_pointcloud2 #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(radar_scan_to_pointcloud2::RadarScanToPointcloud2Node) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::radar_scan_to_pointcloud2::RadarScanToPointcloud2Node) diff --git a/sensing/radar_scan_to_pointcloud2/include/radar_scan_to_pointcloud2/radar_scan_to_pointcloud2_node.hpp b/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node.hpp similarity index 86% rename from sensing/radar_scan_to_pointcloud2/include/radar_scan_to_pointcloud2/radar_scan_to_pointcloud2_node.hpp rename to sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node.hpp index bb331609f606d..f758d149b184b 100644 --- a/sensing/radar_scan_to_pointcloud2/include/radar_scan_to_pointcloud2/radar_scan_to_pointcloud2_node.hpp +++ b/sensing/radar_scan_to_pointcloud2/src/radar_scan_to_pointcloud2_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RADAR_SCAN_TO_POINTCLOUD2__RADAR_SCAN_TO_POINTCLOUD2_NODE_HPP_ -#define RADAR_SCAN_TO_POINTCLOUD2__RADAR_SCAN_TO_POINTCLOUD2_NODE_HPP_ +#ifndef RADAR_SCAN_TO_POINTCLOUD2_NODE_HPP_ +#define RADAR_SCAN_TO_POINTCLOUD2_NODE_HPP_ #include "rclcpp/rclcpp.hpp" @@ -24,7 +24,7 @@ #include #include -namespace radar_scan_to_pointcloud2 +namespace autoware::radar_scan_to_pointcloud2 { using radar_msgs::msg::RadarReturn; using radar_msgs::msg::RadarScan; @@ -65,6 +65,6 @@ class RadarScanToPointcloud2Node : public rclcpp::Node NodeParam node_param_{}; }; -} // namespace radar_scan_to_pointcloud2 +} // namespace autoware::radar_scan_to_pointcloud2 -#endif // RADAR_SCAN_TO_POINTCLOUD2__RADAR_SCAN_TO_POINTCLOUD2_NODE_HPP_ +#endif // RADAR_SCAN_TO_POINTCLOUD2_NODE_HPP_ From 37abf730ffa01c6623a98198140c5ac20913ff1f Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 10 Jul 2024 14:49:08 +0900 Subject: [PATCH 131/306] refactor(radar_tracks_noise_filter)!: fix namespace and directory structure (#7911) feat(radar_tracks_noise_filter): fix namespace and directory structure Signed-off-by: Taekjin LEE --- sensing/radar_tracks_noise_filter/CMakeLists.txt | 14 +++++++------- .../radar_tracks_noise_filter_node.cpp | 9 +++++---- .../radar_tracks_noise_filter_node.hpp | 10 +++++----- .../test_radar_tracks_noise_filter_is_noise.cpp | 9 +++++---- 4 files changed, 22 insertions(+), 20 deletions(-) rename sensing/radar_tracks_noise_filter/src/{radar_tracks_noise_filter_node => }/radar_tracks_noise_filter_node.cpp (93%) rename sensing/radar_tracks_noise_filter/{include/radar_tracks_noise_filter => src}/radar_tracks_noise_filter_node.hpp (84%) diff --git a/sensing/radar_tracks_noise_filter/CMakeLists.txt b/sensing/radar_tracks_noise_filter/CMakeLists.txt index a257821a90198..436c3472c8734 100644 --- a/sensing/radar_tracks_noise_filter/CMakeLists.txt +++ b/sensing/radar_tracks_noise_filter/CMakeLists.txt @@ -6,12 +6,12 @@ find_package(autoware_cmake REQUIRED) autoware_package() # Targets -ament_auto_add_library(radar_tracks_noise_filter_node_component SHARED - src/radar_tracks_noise_filter_node/radar_tracks_noise_filter_node.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/radar_tracks_noise_filter_node.cpp ) -rclcpp_components_register_node(radar_tracks_noise_filter_node_component - PLUGIN "radar_tracks_noise_filter::RadarTrackCrossingNoiseFilterNode" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::radar_tracks_noise_filter::RadarTrackCrossingNoiseFilterNode" EXECUTABLE radar_tracks_noise_filter_node ) @@ -22,10 +22,10 @@ if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() file(GLOB_RECURSE test_files test/**/*.cpp) - ament_add_ros_isolated_gtest(radar_tracks_noise_filter ${test_files}) + ament_add_ros_isolated_gtest(${PROJECT_NAME}_test ${test_files}) - target_link_libraries(radar_tracks_noise_filter - radar_tracks_noise_filter_node_component + target_link_libraries(${PROJECT_NAME}_test + ${PROJECT_NAME} ) endif() diff --git a/sensing/radar_tracks_noise_filter/src/radar_tracks_noise_filter_node/radar_tracks_noise_filter_node.cpp b/sensing/radar_tracks_noise_filter/src/radar_tracks_noise_filter_node.cpp similarity index 93% rename from sensing/radar_tracks_noise_filter/src/radar_tracks_noise_filter_node/radar_tracks_noise_filter_node.cpp rename to sensing/radar_tracks_noise_filter/src/radar_tracks_noise_filter_node.cpp index 82a0a21ff6fdc..c71a95c4f59f0 100644 --- a/sensing/radar_tracks_noise_filter/src/radar_tracks_noise_filter_node/radar_tracks_noise_filter_node.cpp +++ b/sensing/radar_tracks_noise_filter/src/radar_tracks_noise_filter_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "radar_tracks_noise_filter/radar_tracks_noise_filter_node.hpp" +#include "radar_tracks_noise_filter_node.hpp" #include #include @@ -38,7 +38,7 @@ bool update_param( } } // namespace -namespace radar_tracks_noise_filter +namespace autoware::radar_tracks_noise_filter { using radar_msgs::msg::RadarTrack; using radar_msgs::msg::RadarTracks; @@ -116,7 +116,8 @@ bool RadarTrackCrossingNoiseFilterNode::isNoise(const RadarTrack & radar_track) } } -} // namespace radar_tracks_noise_filter +} // namespace autoware::radar_tracks_noise_filter #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(radar_tracks_noise_filter::RadarTrackCrossingNoiseFilterNode) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::radar_tracks_noise_filter::RadarTrackCrossingNoiseFilterNode) diff --git a/sensing/radar_tracks_noise_filter/include/radar_tracks_noise_filter/radar_tracks_noise_filter_node.hpp b/sensing/radar_tracks_noise_filter/src/radar_tracks_noise_filter_node.hpp similarity index 84% rename from sensing/radar_tracks_noise_filter/include/radar_tracks_noise_filter/radar_tracks_noise_filter_node.hpp rename to sensing/radar_tracks_noise_filter/src/radar_tracks_noise_filter_node.hpp index 2ff4025cc64bc..9262c34167363 100644 --- a/sensing/radar_tracks_noise_filter/include/radar_tracks_noise_filter/radar_tracks_noise_filter_node.hpp +++ b/sensing/radar_tracks_noise_filter/src/radar_tracks_noise_filter_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RADAR_TRACKS_NOISE_FILTER__RADAR_TRACKS_NOISE_FILTER_NODE_HPP_ -#define RADAR_TRACKS_NOISE_FILTER__RADAR_TRACKS_NOISE_FILTER_NODE_HPP_ +#ifndef RADAR_TRACKS_NOISE_FILTER_NODE_HPP_ +#define RADAR_TRACKS_NOISE_FILTER_NODE_HPP_ #include "rclcpp/rclcpp.hpp" @@ -23,7 +23,7 @@ #include #include -namespace radar_tracks_noise_filter +namespace autoware::radar_tracks_noise_filter { using radar_msgs::msg::RadarTrack; using radar_msgs::msg::RadarTracks; @@ -62,6 +62,6 @@ class RadarTrackCrossingNoiseFilterNode : public rclcpp::Node bool isNoise(const RadarTrack & radar_track); }; -} // namespace radar_tracks_noise_filter +} // namespace autoware::radar_tracks_noise_filter -#endif // RADAR_TRACKS_NOISE_FILTER__RADAR_TRACKS_NOISE_FILTER_NODE_HPP_ +#endif // RADAR_TRACKS_NOISE_FILTER_NODE_HPP_ diff --git a/sensing/radar_tracks_noise_filter/test/radar_tracks_noise_filter/test_radar_tracks_noise_filter_is_noise.cpp b/sensing/radar_tracks_noise_filter/test/radar_tracks_noise_filter/test_radar_tracks_noise_filter_is_noise.cpp index aa08260dee2e7..ea2dfc28b5a4c 100644 --- a/sensing/radar_tracks_noise_filter/test/radar_tracks_noise_filter/test_radar_tracks_noise_filter_is_noise.cpp +++ b/sensing/radar_tracks_noise_filter/test/radar_tracks_noise_filter/test_radar_tracks_noise_filter_is_noise.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "radar_tracks_noise_filter/radar_tracks_noise_filter_node.hpp" +#include "../../src/radar_tracks_noise_filter_node.hpp" #include #include -std::shared_ptr get_node( +std::shared_ptr get_node( float velocity_y_threshold) { rclcpp::NodeOptions node_options; @@ -28,7 +28,8 @@ std::shared_ptr ge }); auto node = - std::make_shared(node_options); + std::make_shared( + node_options); return node; } @@ -45,8 +46,8 @@ radar_msgs::msg::RadarTrack getRadarTrack(float velocity_x, float velocity_y) TEST(RadarTracksNoiseFilter, isNoise) { + using autoware::radar_tracks_noise_filter::RadarTrackCrossingNoiseFilterNode; using radar_msgs::msg::RadarTrack; - using radar_tracks_noise_filter::RadarTrackCrossingNoiseFilterNode; rclcpp::init(0, nullptr); { float velocity_node_threshold = 0.0; From ec3a3ea3420485ab1ef763a4edec5705a2cb010b Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 10 Jul 2024 14:57:05 +0900 Subject: [PATCH 132/306] refactor(radar_static_pointcloud_filter): fix namespace and directory structure (#7914) refactor: update include paths and namespace for radar_static_pointcloud_filter --- sensing/radar_static_pointcloud_filter/CMakeLists.txt | 8 ++++---- sensing/radar_static_pointcloud_filter/package.xml | 3 --- .../radar_static_pointcloud_filter_node.cpp | 9 +++++---- .../radar_static_pointcloud_filter_node.hpp | 10 +++++----- 4 files changed, 14 insertions(+), 16 deletions(-) rename sensing/radar_static_pointcloud_filter/src/{radar_static_pointcloud_filter_node => }/radar_static_pointcloud_filter_node.cpp (95%) rename sensing/radar_static_pointcloud_filter/{include/radar_static_pointcloud_filter => src}/radar_static_pointcloud_filter_node.hpp (87%) diff --git a/sensing/radar_static_pointcloud_filter/CMakeLists.txt b/sensing/radar_static_pointcloud_filter/CMakeLists.txt index ecd33d3166b19..a796a0fa9734d 100644 --- a/sensing/radar_static_pointcloud_filter/CMakeLists.txt +++ b/sensing/radar_static_pointcloud_filter/CMakeLists.txt @@ -6,12 +6,12 @@ find_package(autoware_cmake REQUIRED) autoware_package() # Targets -ament_auto_add_library(radar_static_pointcloud_filter_node_component SHARED - src/radar_static_pointcloud_filter_node/radar_static_pointcloud_filter_node.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/radar_static_pointcloud_filter_node.cpp ) -rclcpp_components_register_node(radar_static_pointcloud_filter_node_component - PLUGIN "radar_static_pointcloud_filter::RadarStaticPointcloudFilterNode" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::radar_static_pointcloud_filter::RadarStaticPointcloudFilterNode" EXECUTABLE radar_static_pointcloud_filter_node ) diff --git a/sensing/radar_static_pointcloud_filter/package.xml b/sensing/radar_static_pointcloud_filter/package.xml index b1063562b1708..45c706791535c 100644 --- a/sensing/radar_static_pointcloud_filter/package.xml +++ b/sensing/radar_static_pointcloud_filter/package.xml @@ -20,9 +20,6 @@ radar_msgs rclcpp rclcpp_components - tf2 - tf2_geometry_msgs - tf2_ros ament_clang_format ament_lint_auto diff --git a/sensing/radar_static_pointcloud_filter/src/radar_static_pointcloud_filter_node/radar_static_pointcloud_filter_node.cpp b/sensing/radar_static_pointcloud_filter/src/radar_static_pointcloud_filter_node.cpp similarity index 95% rename from sensing/radar_static_pointcloud_filter/src/radar_static_pointcloud_filter_node/radar_static_pointcloud_filter_node.cpp rename to sensing/radar_static_pointcloud_filter/src/radar_static_pointcloud_filter_node.cpp index 985f30c8e34b5..74c099b9bf32b 100644 --- a/sensing/radar_static_pointcloud_filter/src/radar_static_pointcloud_filter_node/radar_static_pointcloud_filter_node.cpp +++ b/sensing/radar_static_pointcloud_filter/src/radar_static_pointcloud_filter_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "radar_static_pointcloud_filter/radar_static_pointcloud_filter_node.hpp" +#include "radar_static_pointcloud_filter_node.hpp" #include #include @@ -75,7 +75,7 @@ geometry_msgs::msg::Vector3 compensateEgoVehicleTwist( } } // namespace -namespace radar_static_pointcloud_filter +namespace autoware::radar_static_pointcloud_filter { using nav_msgs::msg::Odometry; using radar_msgs::msg::RadarReturn; @@ -167,7 +167,8 @@ bool RadarStaticPointcloudFilterNode::isStaticPointcloud( (compensated_velocity.x < node_param_.doppler_velocity_sd); } -} // namespace radar_static_pointcloud_filter +} // namespace autoware::radar_static_pointcloud_filter #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(radar_static_pointcloud_filter::RadarStaticPointcloudFilterNode) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::radar_static_pointcloud_filter::RadarStaticPointcloudFilterNode) diff --git a/sensing/radar_static_pointcloud_filter/include/radar_static_pointcloud_filter/radar_static_pointcloud_filter_node.hpp b/sensing/radar_static_pointcloud_filter/src/radar_static_pointcloud_filter_node.hpp similarity index 87% rename from sensing/radar_static_pointcloud_filter/include/radar_static_pointcloud_filter/radar_static_pointcloud_filter_node.hpp rename to sensing/radar_static_pointcloud_filter/src/radar_static_pointcloud_filter_node.hpp index 72a78f35251f7..eff8437eb51d2 100644 --- a/sensing/radar_static_pointcloud_filter/include/radar_static_pointcloud_filter/radar_static_pointcloud_filter_node.hpp +++ b/sensing/radar_static_pointcloud_filter/src/radar_static_pointcloud_filter_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef RADAR_STATIC_POINTCLOUD_FILTER__RADAR_STATIC_POINTCLOUD_FILTER_NODE_HPP_ -#define RADAR_STATIC_POINTCLOUD_FILTER__RADAR_STATIC_POINTCLOUD_FILTER_NODE_HPP_ +#ifndef RADAR_STATIC_POINTCLOUD_FILTER_NODE_HPP_ +#define RADAR_STATIC_POINTCLOUD_FILTER_NODE_HPP_ #include "autoware/universe_utils/ros/transform_listener.hpp" @@ -31,7 +31,7 @@ #include #include -namespace radar_static_pointcloud_filter +namespace autoware::radar_static_pointcloud_filter { using nav_msgs::msg::Odometry; using radar_msgs::msg::RadarReturn; @@ -77,6 +77,6 @@ class RadarStaticPointcloudFilterNode : public rclcpp::Node const RadarReturn & radar_return, const Odometry::ConstSharedPtr & odom_msg, geometry_msgs::msg::TransformStamped::ConstSharedPtr transform); }; -} // namespace radar_static_pointcloud_filter +} // namespace autoware::radar_static_pointcloud_filter -#endif // RADAR_STATIC_POINTCLOUD_FILTER__RADAR_STATIC_POINTCLOUD_FILTER_NODE_HPP_ +#endif // RADAR_STATIC_POINTCLOUD_FILTER_NODE_HPP_ From ddae036ea24f7e5a4492ce161d810d9e080dfd4a Mon Sep 17 00:00:00 2001 From: Satoshi Tanaka <16330533+scepter914@users.noreply.github.com> Date: Wed, 10 Jul 2024 15:41:17 +0900 Subject: [PATCH 133/306] feat(lidar_transfusion): update TransFusion-L model (#7890) * add num_proposals Signed-off-by: scepter914 * fix config Signed-off-by: scepter914 * update README Signed-off-by: scepter914 --------- Signed-off-by: scepter914 --- perception/lidar_transfusion/README.md | 4 ++-- .../lidar_transfusion/config/transfusion.param.yaml | 7 ++++--- .../lidar_transfusion/transfusion_config.hpp | 13 ++++++++++--- .../schema/transfusion.schema.json | 6 ++++++ .../src/lidar_transfusion_node.cpp | 5 +++-- 5 files changed, 25 insertions(+), 10 deletions(-) diff --git a/perception/lidar_transfusion/README.md b/perception/lidar_transfusion/README.md index e30403141e8ad..6745cc1f7d219 100644 --- a/perception/lidar_transfusion/README.md +++ b/perception/lidar_transfusion/README.md @@ -81,9 +81,9 @@ ros2 topic echo --field fields You can download the onnx format of trained models by clicking on the links below. -- TransFusion: [transfusion.onnx](https://awf.ml.dev.web.auto/perception/models/transfusion/v1/transfusion.onnx) +- TransFusion: [transfusion.onnx](https://awf.ml.dev.web.auto/perception/models/transfusion/t4xx1_90m/v2/transfusion.onnx) -The model was trained in TIER IV's internal database (~11k lidar frames) for 20 epochs. +The model was trained in TIER IV's internal database (~11k lidar frames) for 50 epochs. ### Changelog diff --git a/perception/lidar_transfusion/config/transfusion.param.yaml b/perception/lidar_transfusion/config/transfusion.param.yaml index feabe359caf1f..2c6680fe50af1 100644 --- a/perception/lidar_transfusion/config/transfusion.param.yaml +++ b/perception/lidar_transfusion/config/transfusion.param.yaml @@ -4,8 +4,9 @@ class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] trt_precision: fp16 voxels_num: [5000, 30000, 60000] # [min, opt, max] - point_cloud_range: [-76.8, -76.8, -3.0, 76.8, 76.8, 5.0] # [x_min, y_min, z_min, x_max, y_max, z_max] - voxel_size: [0.3, 0.3, 8.0] # [x, y, z] + point_cloud_range: [-92.16, -92.16, -3.0, 92.16, 92.16, 7.0] # [x_min, y_min, z_min, x_max, y_max, z_max] + voxel_size: [0.24, 0.24, 10.0] # [x, y, z] + num_proposals: 500 onnx_path: "$(var model_path)/transfusion.onnx" engine_path: "$(var model_path)/transfusion.engine" # pre-process params @@ -17,4 +18,4 @@ iou_nms_search_distance_2d: 10.0 iou_nms_threshold: 0.1 yaw_norm_thresholds: [0.3, 0.3, 0.3, 0.3, 0.0] # refers to the class_names - score_threshold: 0.2 + score_threshold: 0.1 diff --git a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp b/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp index 31976de56a9da..0ad3ab2231f50 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp +++ b/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp @@ -26,8 +26,9 @@ class TransfusionConfig public: TransfusionConfig( const std::vector & voxels_num, const std::vector & point_cloud_range, - const std::vector & voxel_size, const float circle_nms_dist_threshold, - const std::vector & yaw_norm_thresholds, const float score_threshold) + const std::vector & voxel_size, const int num_proposals, + const float circle_nms_dist_threshold, const std::vector & yaw_norm_thresholds, + const float score_threshold) { if (voxels_num.size() == 3) { max_voxels_ = voxels_num[2]; @@ -61,6 +62,9 @@ class TransfusionConfig voxel_y_size_ = static_cast(voxel_size[1]); voxel_z_size_ = static_cast(voxel_size[2]); } + if (num_proposals > 0) { + num_proposals_ = num_proposals; + } if (score_threshold > 0.0) { score_threshold_ = score_threshold; } @@ -76,6 +80,9 @@ class TransfusionConfig grid_x_size_ = static_cast((max_x_range_ - min_x_range_) / voxel_x_size_); grid_y_size_ = static_cast((max_y_range_ - min_y_range_) / voxel_y_size_); grid_z_size_ = static_cast((max_z_range_ - min_z_range_) / voxel_z_size_); + + feature_x_size_ = grid_x_size_ / out_size_factor_; + feature_y_size_ = grid_y_size_ / out_size_factor_; } ///// INPUT PARAMETERS ///// @@ -107,7 +114,7 @@ class TransfusionConfig const std::size_t out_size_factor_{4}; const std::size_t max_num_points_per_pillar_{points_per_voxel_}; const std::size_t num_point_values_{4}; - const std::size_t num_proposals_{200}; + std::size_t num_proposals_{200}; // the number of feature maps for pillar scatter const std::size_t num_feature_scatter_{pillar_feature_size_}; // the score threshold for classification diff --git a/perception/lidar_transfusion/schema/transfusion.schema.json b/perception/lidar_transfusion/schema/transfusion.schema.json index 41d8d887236a8..7debc0edda6fb 100644 --- a/perception/lidar_transfusion/schema/transfusion.schema.json +++ b/perception/lidar_transfusion/schema/transfusion.schema.json @@ -61,6 +61,12 @@ "default": "$(var model_path)/transfusion.engine", "pattern": "\\.engine$" }, + "num_proposals": { + "type": "integer", + "description": "Number of proposals at TransHead.", + "default": 500, + "minimum": 1 + }, "down_sample_factor": { "type": "integer", "description": "A scale factor of downsampling points", diff --git a/perception/lidar_transfusion/src/lidar_transfusion_node.cpp b/perception/lidar_transfusion/src/lidar_transfusion_node.cpp index e3ea6b3780de8..7f5833e60d6d0 100644 --- a/perception/lidar_transfusion/src/lidar_transfusion_node.cpp +++ b/perception/lidar_transfusion/src/lidar_transfusion_node.cpp @@ -31,6 +31,7 @@ LidarTransfusionNode::LidarTransfusionNode(const rclcpp::NodeOptions & options) const auto point_cloud_range = this->declare_parameter>("point_cloud_range", descriptor); const auto voxel_size = this->declare_parameter>("voxel_size", descriptor); + const int num_proposals = (this->declare_parameter("num_proposals", descriptor)); const std::string onnx_path = this->declare_parameter("onnx_path", descriptor); const std::string engine_path = this->declare_parameter("engine_path", descriptor); @@ -73,8 +74,8 @@ LidarTransfusionNode::LidarTransfusionNode(const rclcpp::NodeOptions & options) DensificationParam densification_param( densification_world_frame_id, densification_num_past_frames); TransfusionConfig config( - voxels_num, point_cloud_range, voxel_size, circle_nms_dist_threshold, yaw_norm_thresholds, - score_threshold); + voxels_num, point_cloud_range, voxel_size, num_proposals, circle_nms_dist_threshold, + yaw_norm_thresholds, score_threshold); const auto allow_remapping_by_area_matrix = this->declare_parameter>("allow_remapping_by_area_matrix", descriptor); From 2125630d78f0eea19033517543bce10b6fa569a8 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Wed, 10 Jul 2024 16:08:05 +0900 Subject: [PATCH 134/306] refactor(radar)!: add package name prefix of autoware_ (#7892) * refactor: rename radar_object_tracker Signed-off-by: Taekjin LEE * refactor: rename package from radar_object_tracker to autoware_radar_object_tracker Signed-off-by: Taekjin LEE * refactor: rename package from radar_object_clustering to autoware_radar_object_clustering Signed-off-by: Taekjin LEE * refactor: rename package from radar_fusion_to_detected_object to autoware_radar_fusion_to_detected_object Signed-off-by: Taekjin LEE * refactor: rename radar_crossing_objects_noise_filter to autoware_radar_crossing_objects_noise_filter Signed-off-by: Taekjin LEE * refactor: rename object_velocity_splitter to autoware_object_velocity_splitter Signed-off-by: Taekjin LEE * refactor: rename object_range_splitter to autoware_object_range_splitter Signed-off-by: Taekjin LEE * refactor: update readme Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- .github/CODEOWNERS | 12 ++++++------ .../detection/detection.launch.xml | 2 +- .../detection/filter/radar_filter.launch.xml | 10 +++++----- .../merger/camera_lidar_radar_merger.launch.xml | 2 +- .../object_recognition/tracking/tracking.launch.xml | 2 +- launch/tier4_perception_launch/package.xml | 12 ++++++------ .../CMakeLists.txt | 2 +- .../README.md | 4 ++-- .../config/object_range_splitter.param.yaml | 0 .../launch/object_range_splitter.launch.xml | 4 ++-- .../package.xml | 4 ++-- .../schema/object_range_splitter.schema.json | 0 .../src/object_range_splitter_node.cpp | 0 .../src/object_range_splitter_node.hpp | 0 .../CMakeLists.txt | 2 +- .../README.md | 2 +- .../config/object_velocity_splitter.param.yaml | 0 .../launch/object_velocity_splitter.launch.xml | 4 ++-- .../package.xml | 4 ++-- .../src/object_velocity_splitter_node.cpp | 0 .../src/object_velocity_splitter_node.hpp | 0 .../CMakeLists.txt | 2 +- .../README.md | 2 +- .../radar_crossing_objects_noise_filter.param.yaml | 0 .../radar_crossing_objects_noise_filter.drawio.svg | 0 .../docs/turning_around.png | Bin .../docs/vertical_velocity_objects.png | Bin .../radar_crossing_objects_noise_filter.launch.xml | 4 ++-- .../package.xml | 4 ++-- .../radar_crossing_objects_noise_filter_node.cpp | 0 .../radar_crossing_objects_noise_filter_node.hpp | 0 .../test/test_radar_crossing_objects_filter.cpp | 0 .../test_radar_crossing_objects_filter_is_noise.cpp | 0 .../CMakeLists.txt | 2 +- .../README.md | 6 +++--- ...adar_object_fusion_to_detected_object.param.yaml | 0 .../docs/algorithm.md | 0 .../radar_fusion_to_detected_object_1.drawio.svg | 0 .../radar_fusion_to_detected_object_2.drawio.svg | 0 .../radar_fusion_to_detected_object_3.drawio.svg | 0 .../radar_fusion_to_detected_object_4.drawio.svg | 0 .../radar_fusion_to_detected_object_5.drawio.svg | 0 .../radar_fusion_to_detected_object_6.drawio.svg | 0 ...adar_object_fusion_to_detected_object.launch.xml | 4 ++-- .../package.xml | 4 ++-- ...dar_object_fusion_to_detected_object.schema.json | 0 .../src/include/node.hpp | 0 .../src/include/radar_fusion_to_detected_object.hpp | 0 .../src/node.cpp | 0 .../src/radar_fusion_to_detected_object.cpp | 0 .../CMakeLists.txt | 2 +- .../README.md | 2 +- .../config/radar_object_clustering.param.yaml | 0 .../docs/clustering.drawio.svg | 0 .../docs/radar_clustering.drawio.svg | 0 .../launch/radar_object_clustering.launch.xml | 4 ++-- .../package.xml | 4 ++-- .../src/radar_object_clustering_node.cpp | 0 .../src/radar_object_clustering_node.hpp | 0 .../CMakeLists.txt | 2 +- .../README.md | 2 +- .../config/data_association_matrix.param.yaml | 0 .../config/default_tracker.param.yaml | 0 .../config/radar_object_tracker.param.yaml | 0 .../config/simulation_tracker.param.yaml | 0 .../tracking/constant_turn_rate_motion_tracker.yaml | 0 .../config/tracking/linear_motion_tracker.yaml | 0 .../image/noise_filtering.drawio.svg | 0 .../association/data_association.hpp | 0 .../association/solver/gnn_solver.hpp | 0 .../association/solver/gnn_solver_interface.hpp | 0 .../association/solver/mu_ssp.hpp | 0 .../association/solver/ssp.hpp | 0 .../model/constant_turn_rate_motion_tracker.hpp | 0 .../tracker/model/linear_motion_tracker.hpp | 0 .../tracker/model/tracker_base.hpp | 0 .../tracker/tracker.hpp | 0 .../utils/radar_object_tracker_utils.hpp | 0 .../autoware_radar_object_tracker/utils/utils.hpp | 0 .../launch/radar_object_tracker.launch.xml | 8 ++++---- .../models.md | 0 .../package.xml | 2 +- .../src/association/data_association.cpp | 0 .../mu_ssp/mu_successive_shortest_path_wrapper.cpp | 0 .../association/ssp/successive_shortest_path.cpp | 0 .../src/radar_object_tracker_node.cpp | 0 .../src/radar_object_tracker_node.hpp | 0 .../model/constant_turn_rate_motion_tracker.cpp | 0 .../src/tracker/model/linear_motion_tracker.cpp | 0 .../src/tracker/model/tracker_base.cpp | 0 .../src/utils/radar_object_tracker_utils.cpp | 0 .../src/utils/utils.cpp | 0 .../test/test_radar_object_tracker_utils.cpp | 0 perception/simple_object_merger/README.md | 2 +- 94 files changed, 61 insertions(+), 61 deletions(-) rename perception/{object_range_splitter => autoware_object_range_splitter}/CMakeLists.txt (90%) rename perception/{object_range_splitter => autoware_object_range_splitter}/README.md (94%) rename perception/{object_range_splitter => autoware_object_range_splitter}/config/object_range_splitter.param.yaml (100%) rename perception/{object_range_splitter => autoware_object_range_splitter}/launch/object_range_splitter.launch.xml (66%) rename perception/{object_range_splitter => autoware_object_range_splitter}/package.xml (86%) rename perception/{object_range_splitter => autoware_object_range_splitter}/schema/object_range_splitter.schema.json (100%) rename perception/{object_range_splitter => autoware_object_range_splitter}/src/object_range_splitter_node.cpp (100%) rename perception/{object_range_splitter => autoware_object_range_splitter}/src/object_range_splitter_node.hpp (100%) rename perception/{object_velocity_splitter => autoware_object_velocity_splitter}/CMakeLists.txt (93%) rename perception/{object_velocity_splitter => autoware_object_velocity_splitter}/README.md (95%) rename perception/{object_velocity_splitter => autoware_object_velocity_splitter}/config/object_velocity_splitter.param.yaml (100%) rename perception/{object_velocity_splitter => autoware_object_velocity_splitter}/launch/object_velocity_splitter.launch.xml (68%) rename perception/{object_velocity_splitter => autoware_object_velocity_splitter}/package.xml (89%) rename perception/{object_velocity_splitter => autoware_object_velocity_splitter}/src/object_velocity_splitter_node.cpp (100%) rename perception/{object_velocity_splitter => autoware_object_velocity_splitter}/src/object_velocity_splitter_node.hpp (100%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/CMakeLists.txt (94%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/README.md (98%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/config/radar_crossing_objects_noise_filter.param.yaml (100%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/docs/radar_crossing_objects_noise_filter.drawio.svg (100%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/docs/turning_around.png (100%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/docs/vertical_velocity_objects.png (100%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/launch/radar_crossing_objects_noise_filter.launch.xml (63%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/package.xml (88%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/src/radar_crossing_objects_noise_filter_node.cpp (100%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/src/radar_crossing_objects_noise_filter_node.hpp (100%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/test/test_radar_crossing_objects_filter.cpp (100%) rename perception/{radar_crossing_objects_noise_filter => autoware_radar_crossing_objects_noise_filter}/test/test_radar_crossing_objects_noise_filter/test_radar_crossing_objects_filter_is_noise.cpp (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/CMakeLists.txt (93%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/README.md (96%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/config/radar_object_fusion_to_detected_object.param.yaml (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/docs/algorithm.md (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/docs/radar_fusion_to_detected_object_1.drawio.svg (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/docs/radar_fusion_to_detected_object_2.drawio.svg (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/docs/radar_fusion_to_detected_object_3.drawio.svg (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/docs/radar_fusion_to_detected_object_4.drawio.svg (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/docs/radar_fusion_to_detected_object_5.drawio.svg (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/docs/radar_fusion_to_detected_object_6.drawio.svg (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/launch/radar_object_fusion_to_detected_object.launch.xml (60%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/package.xml (89%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/schema/radar_object_fusion_to_detected_object.schema.json (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/src/include/node.hpp (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/src/include/radar_fusion_to_detected_object.hpp (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/src/node.cpp (100%) rename perception/{radar_fusion_to_detected_object => autoware_radar_fusion_to_detected_object}/src/radar_fusion_to_detected_object.cpp (100%) rename perception/{radar_object_clustering => autoware_radar_object_clustering}/CMakeLists.txt (93%) rename perception/{radar_object_clustering => autoware_radar_object_clustering}/README.md (99%) rename perception/{radar_object_clustering => autoware_radar_object_clustering}/config/radar_object_clustering.param.yaml (100%) rename perception/{radar_object_clustering => autoware_radar_object_clustering}/docs/clustering.drawio.svg (100%) rename perception/{radar_object_clustering => autoware_radar_object_clustering}/docs/radar_clustering.drawio.svg (100%) rename perception/{radar_object_clustering => autoware_radar_object_clustering}/launch/radar_object_clustering.launch.xml (55%) rename perception/{radar_object_clustering => autoware_radar_object_clustering}/package.xml (91%) rename perception/{radar_object_clustering => autoware_radar_object_clustering}/src/radar_object_clustering_node.cpp (100%) rename perception/{radar_object_clustering => autoware_radar_object_clustering}/src/radar_object_clustering_node.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/CMakeLists.txt (97%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/README.md (99%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/config/data_association_matrix.param.yaml (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/config/default_tracker.param.yaml (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/config/radar_object_tracker.param.yaml (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/config/simulation_tracker.param.yaml (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/config/tracking/constant_turn_rate_motion_tracker.yaml (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/config/tracking/linear_motion_tracker.yaml (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/image/noise_filtering.drawio.svg (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/association/data_association.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/association/solver/gnn_solver.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/association/solver/gnn_solver_interface.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/association/solver/mu_ssp.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/association/solver/ssp.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/tracker/model/constant_turn_rate_motion_tracker.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/tracker/model/linear_motion_tracker.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/tracker/model/tracker_base.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/tracker/tracker.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/utils/radar_object_tracker_utils.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/include/autoware_radar_object_tracker/utils/utils.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/launch/radar_object_tracker.launch.xml (63%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/models.md (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/package.xml (96%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/association/data_association.cpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/association/mu_ssp/mu_successive_shortest_path_wrapper.cpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/association/ssp/successive_shortest_path.cpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/radar_object_tracker_node.cpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/radar_object_tracker_node.hpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/tracker/model/constant_turn_rate_motion_tracker.cpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/tracker/model/linear_motion_tracker.cpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/tracker/model/tracker_base.cpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/utils/radar_object_tracker_utils.cpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/src/utils/utils.cpp (100%) rename perception/{radar_object_tracker => autoware_radar_object_tracker}/test/test_radar_object_tracker_utils.cpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ed496d7b7ba74..48e4a9921bb9b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -122,14 +122,14 @@ perception/lidar_centerpoint/** kenzo.lobos@tier4.jp koji.minoda@tier4.jp perception/lidar_transfusion/** amadeusz.szymko.2@tier4.jp kenzo.lobos@tier4.jp satoshi.tanaka@tier4.jp perception/multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp -perception/object_range_splitter/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp -perception/object_velocity_splitter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp +perception/autoware_object_range_splitter/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +perception/autoware_object_velocity_splitter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp perception/occupancy_grid_map_outlier_filter/** abrahammonrroy@yahoo.com yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/probabilistic_occupancy_grid_map/** mamoru.sobue@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp -perception/radar_crossing_objects_noise_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp -perception/radar_fusion_to_detected_object/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp -perception/radar_object_clustering/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp -perception/radar_object_tracker/** satoshi.tanaka@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +perception/autoware_radar_crossing_objects_noise_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp +perception/autoware_radar_fusion_to_detected_object/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp +perception/autoware_radar_object_clustering/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp +perception/autoware_radar_object_tracker/** satoshi.tanaka@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/radar_tracks_msgs_converter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp perception/raindrop_cluster_filter/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/shape_estimation/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml index b3280fee47364..8f64b624540e7 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detection.launch.xml @@ -359,7 +359,7 @@ - + diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/filter/radar_filter.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/filter/radar_filter.launch.xml index fe7ab70e9331e..151e3f28739d9 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/filter/radar_filter.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/filter/radar_filter.launch.xml @@ -5,28 +5,28 @@ - + - + - + - + @@ -39,7 +39,7 @@ - + diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_radar_merger.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_radar_merger.launch.xml index 6ea745a8bae2c..5bd2c36955b55 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_radar_merger.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_radar_merger.launch.xml @@ -89,7 +89,7 @@ - + diff --git a/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml index 1975ad2d15eb9..580436411a895 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml @@ -46,7 +46,7 @@ - + diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index 592ef7cf01f86..349472ed5f8d3 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -15,6 +15,12 @@ autoware_crosswalk_traffic_light_estimator autoware_map_based_prediction + autoware_object_range_splitter + autoware_object_velocity_splitter + autoware_radar_crossing_objects_noise_filter + autoware_radar_fusion_to_detected_object + autoware_radar_object_clustering + autoware_radar_object_tracker cluster_merger compare_map_segmentation detected_object_feature_remover @@ -28,16 +34,10 @@ lidar_apollo_instance_segmentation multi_object_tracker object_merger - object_range_splitter - object_velocity_splitter occupancy_grid_map_outlier_filter pointcloud_preprocessor pointcloud_to_laserscan probabilistic_occupancy_grid_map - radar_crossing_objects_noise_filter - radar_fusion_to_detected_object - radar_object_clustering - radar_object_tracker raindrop_cluster_filter shape_estimation topic_tools diff --git a/perception/object_range_splitter/CMakeLists.txt b/perception/autoware_object_range_splitter/CMakeLists.txt similarity index 90% rename from perception/object_range_splitter/CMakeLists.txt rename to perception/autoware_object_range_splitter/CMakeLists.txt index 1da71a31b26d0..2c2d8e4108578 100644 --- a/perception/object_range_splitter/CMakeLists.txt +++ b/perception/autoware_object_range_splitter/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(object_range_splitter) +project(autoware_object_range_splitter) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/perception/object_range_splitter/README.md b/perception/autoware_object_range_splitter/README.md similarity index 94% rename from perception/object_range_splitter/README.md rename to perception/autoware_object_range_splitter/README.md index 39375c3139b49..3cdfe36528094 100644 --- a/perception/object_range_splitter/README.md +++ b/perception/autoware_object_range_splitter/README.md @@ -1,8 +1,8 @@ -# object_range_splitter +# `autoware_object_range_splitter` ## Purpose -object_range_splitter is a package to divide detected objects into two messages by the distance from the origin. +autoware_object_range_splitter is a package to divide detected objects into two messages by the distance from the origin. ## Inner-workings / Algorithms diff --git a/perception/object_range_splitter/config/object_range_splitter.param.yaml b/perception/autoware_object_range_splitter/config/object_range_splitter.param.yaml similarity index 100% rename from perception/object_range_splitter/config/object_range_splitter.param.yaml rename to perception/autoware_object_range_splitter/config/object_range_splitter.param.yaml diff --git a/perception/object_range_splitter/launch/object_range_splitter.launch.xml b/perception/autoware_object_range_splitter/launch/object_range_splitter.launch.xml similarity index 66% rename from perception/object_range_splitter/launch/object_range_splitter.launch.xml rename to perception/autoware_object_range_splitter/launch/object_range_splitter.launch.xml index 3f2f3c6ba24c6..77ac04681ac7f 100644 --- a/perception/object_range_splitter/launch/object_range_splitter.launch.xml +++ b/perception/autoware_object_range_splitter/launch/object_range_splitter.launch.xml @@ -3,9 +3,9 @@ - + - + diff --git a/perception/object_range_splitter/package.xml b/perception/autoware_object_range_splitter/package.xml similarity index 86% rename from perception/object_range_splitter/package.xml rename to perception/autoware_object_range_splitter/package.xml index 7fc9245ee894f..1f678f72b7942 100644 --- a/perception/object_range_splitter/package.xml +++ b/perception/autoware_object_range_splitter/package.xml @@ -1,9 +1,9 @@ - object_range_splitter + autoware_object_range_splitter 0.1.0 - The object_range_splitter package + The autoware_object_range_splitter package Yukihiro Saito Yoshi Ri Apache License 2.0 diff --git a/perception/object_range_splitter/schema/object_range_splitter.schema.json b/perception/autoware_object_range_splitter/schema/object_range_splitter.schema.json similarity index 100% rename from perception/object_range_splitter/schema/object_range_splitter.schema.json rename to perception/autoware_object_range_splitter/schema/object_range_splitter.schema.json diff --git a/perception/object_range_splitter/src/object_range_splitter_node.cpp b/perception/autoware_object_range_splitter/src/object_range_splitter_node.cpp similarity index 100% rename from perception/object_range_splitter/src/object_range_splitter_node.cpp rename to perception/autoware_object_range_splitter/src/object_range_splitter_node.cpp diff --git a/perception/object_range_splitter/src/object_range_splitter_node.hpp b/perception/autoware_object_range_splitter/src/object_range_splitter_node.hpp similarity index 100% rename from perception/object_range_splitter/src/object_range_splitter_node.hpp rename to perception/autoware_object_range_splitter/src/object_range_splitter_node.hpp diff --git a/perception/object_velocity_splitter/CMakeLists.txt b/perception/autoware_object_velocity_splitter/CMakeLists.txt similarity index 93% rename from perception/object_velocity_splitter/CMakeLists.txt rename to perception/autoware_object_velocity_splitter/CMakeLists.txt index afad278e383d8..ec6b57083e058 100644 --- a/perception/object_velocity_splitter/CMakeLists.txt +++ b/perception/autoware_object_velocity_splitter/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(object_velocity_splitter) +project(autoware_object_velocity_splitter) # Dependencies find_package(autoware_cmake REQUIRED) diff --git a/perception/object_velocity_splitter/README.md b/perception/autoware_object_velocity_splitter/README.md similarity index 95% rename from perception/object_velocity_splitter/README.md rename to perception/autoware_object_velocity_splitter/README.md index 659ae5845f46a..ac57d5d7f6353 100644 --- a/perception/object_velocity_splitter/README.md +++ b/perception/autoware_object_velocity_splitter/README.md @@ -1,4 +1,4 @@ -# object_velocity_splitter +# autoware_object_velocity_splitter This package contains a object filter module for [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl). This package can split DetectedObjects into two messages by object's speed. diff --git a/perception/object_velocity_splitter/config/object_velocity_splitter.param.yaml b/perception/autoware_object_velocity_splitter/config/object_velocity_splitter.param.yaml similarity index 100% rename from perception/object_velocity_splitter/config/object_velocity_splitter.param.yaml rename to perception/autoware_object_velocity_splitter/config/object_velocity_splitter.param.yaml diff --git a/perception/object_velocity_splitter/launch/object_velocity_splitter.launch.xml b/perception/autoware_object_velocity_splitter/launch/object_velocity_splitter.launch.xml similarity index 68% rename from perception/object_velocity_splitter/launch/object_velocity_splitter.launch.xml rename to perception/autoware_object_velocity_splitter/launch/object_velocity_splitter.launch.xml index 8ab654d4907a4..f3a359d0ca246 100644 --- a/perception/object_velocity_splitter/launch/object_velocity_splitter.launch.xml +++ b/perception/autoware_object_velocity_splitter/launch/object_velocity_splitter.launch.xml @@ -5,10 +5,10 @@ - + - + diff --git a/perception/object_velocity_splitter/package.xml b/perception/autoware_object_velocity_splitter/package.xml similarity index 89% rename from perception/object_velocity_splitter/package.xml rename to perception/autoware_object_velocity_splitter/package.xml index 32fd5b2ff6337..eb233150a44d9 100644 --- a/perception/object_velocity_splitter/package.xml +++ b/perception/autoware_object_velocity_splitter/package.xml @@ -1,9 +1,9 @@ - object_velocity_splitter + autoware_object_velocity_splitter 0.1.0 - object_velocity_splitter + autoware_object_velocity_splitter Sathshi Tanaka Shunsuke Miura Yoshi Ri diff --git a/perception/object_velocity_splitter/src/object_velocity_splitter_node.cpp b/perception/autoware_object_velocity_splitter/src/object_velocity_splitter_node.cpp similarity index 100% rename from perception/object_velocity_splitter/src/object_velocity_splitter_node.cpp rename to perception/autoware_object_velocity_splitter/src/object_velocity_splitter_node.cpp diff --git a/perception/object_velocity_splitter/src/object_velocity_splitter_node.hpp b/perception/autoware_object_velocity_splitter/src/object_velocity_splitter_node.hpp similarity index 100% rename from perception/object_velocity_splitter/src/object_velocity_splitter_node.hpp rename to perception/autoware_object_velocity_splitter/src/object_velocity_splitter_node.hpp diff --git a/perception/radar_crossing_objects_noise_filter/CMakeLists.txt b/perception/autoware_radar_crossing_objects_noise_filter/CMakeLists.txt similarity index 94% rename from perception/radar_crossing_objects_noise_filter/CMakeLists.txt rename to perception/autoware_radar_crossing_objects_noise_filter/CMakeLists.txt index 6414739413d5c..aebd29f72b360 100644 --- a/perception/radar_crossing_objects_noise_filter/CMakeLists.txt +++ b/perception/autoware_radar_crossing_objects_noise_filter/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(radar_crossing_objects_noise_filter) +project(autoware_radar_crossing_objects_noise_filter) # Dependencies find_package(autoware_cmake REQUIRED) diff --git a/perception/radar_crossing_objects_noise_filter/README.md b/perception/autoware_radar_crossing_objects_noise_filter/README.md similarity index 98% rename from perception/radar_crossing_objects_noise_filter/README.md rename to perception/autoware_radar_crossing_objects_noise_filter/README.md index 96a624a1d4872..846da0a0c11d1 100644 --- a/perception/radar_crossing_objects_noise_filter/README.md +++ b/perception/autoware_radar_crossing_objects_noise_filter/README.md @@ -1,4 +1,4 @@ -# radar_crossing_objects_noise_filter +# autoware_radar_crossing_objects_noise_filter This package contains a radar noise filter module for [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl). This package can filter the noise objects which cross to the ego vehicle. diff --git a/perception/radar_crossing_objects_noise_filter/config/radar_crossing_objects_noise_filter.param.yaml b/perception/autoware_radar_crossing_objects_noise_filter/config/radar_crossing_objects_noise_filter.param.yaml similarity index 100% rename from perception/radar_crossing_objects_noise_filter/config/radar_crossing_objects_noise_filter.param.yaml rename to perception/autoware_radar_crossing_objects_noise_filter/config/radar_crossing_objects_noise_filter.param.yaml diff --git a/perception/radar_crossing_objects_noise_filter/docs/radar_crossing_objects_noise_filter.drawio.svg b/perception/autoware_radar_crossing_objects_noise_filter/docs/radar_crossing_objects_noise_filter.drawio.svg similarity index 100% rename from perception/radar_crossing_objects_noise_filter/docs/radar_crossing_objects_noise_filter.drawio.svg rename to perception/autoware_radar_crossing_objects_noise_filter/docs/radar_crossing_objects_noise_filter.drawio.svg diff --git a/perception/radar_crossing_objects_noise_filter/docs/turning_around.png b/perception/autoware_radar_crossing_objects_noise_filter/docs/turning_around.png similarity index 100% rename from perception/radar_crossing_objects_noise_filter/docs/turning_around.png rename to perception/autoware_radar_crossing_objects_noise_filter/docs/turning_around.png diff --git a/perception/radar_crossing_objects_noise_filter/docs/vertical_velocity_objects.png b/perception/autoware_radar_crossing_objects_noise_filter/docs/vertical_velocity_objects.png similarity index 100% rename from perception/radar_crossing_objects_noise_filter/docs/vertical_velocity_objects.png rename to perception/autoware_radar_crossing_objects_noise_filter/docs/vertical_velocity_objects.png diff --git a/perception/radar_crossing_objects_noise_filter/launch/radar_crossing_objects_noise_filter.launch.xml b/perception/autoware_radar_crossing_objects_noise_filter/launch/radar_crossing_objects_noise_filter.launch.xml similarity index 63% rename from perception/radar_crossing_objects_noise_filter/launch/radar_crossing_objects_noise_filter.launch.xml rename to perception/autoware_radar_crossing_objects_noise_filter/launch/radar_crossing_objects_noise_filter.launch.xml index 25856e12c3ba5..54cafd5086642 100644 --- a/perception/radar_crossing_objects_noise_filter/launch/radar_crossing_objects_noise_filter.launch.xml +++ b/perception/autoware_radar_crossing_objects_noise_filter/launch/radar_crossing_objects_noise_filter.launch.xml @@ -5,10 +5,10 @@ - + - + diff --git a/perception/radar_crossing_objects_noise_filter/package.xml b/perception/autoware_radar_crossing_objects_noise_filter/package.xml similarity index 88% rename from perception/radar_crossing_objects_noise_filter/package.xml rename to perception/autoware_radar_crossing_objects_noise_filter/package.xml index d0245dfe62a40..6476d66eef4f8 100644 --- a/perception/radar_crossing_objects_noise_filter/package.xml +++ b/perception/autoware_radar_crossing_objects_noise_filter/package.xml @@ -1,9 +1,9 @@ - radar_crossing_objects_noise_filter + autoware_radar_crossing_objects_noise_filter 0.1.0 - radar_crossing_objects_noise_filter + autoware_radar_crossing_objects_noise_filter Sathshi Tanaka Shunsuke Miura Yoshi Ri diff --git a/perception/radar_crossing_objects_noise_filter/src/radar_crossing_objects_noise_filter_node.cpp b/perception/autoware_radar_crossing_objects_noise_filter/src/radar_crossing_objects_noise_filter_node.cpp similarity index 100% rename from perception/radar_crossing_objects_noise_filter/src/radar_crossing_objects_noise_filter_node.cpp rename to perception/autoware_radar_crossing_objects_noise_filter/src/radar_crossing_objects_noise_filter_node.cpp diff --git a/perception/radar_crossing_objects_noise_filter/src/radar_crossing_objects_noise_filter_node.hpp b/perception/autoware_radar_crossing_objects_noise_filter/src/radar_crossing_objects_noise_filter_node.hpp similarity index 100% rename from perception/radar_crossing_objects_noise_filter/src/radar_crossing_objects_noise_filter_node.hpp rename to perception/autoware_radar_crossing_objects_noise_filter/src/radar_crossing_objects_noise_filter_node.hpp diff --git a/perception/radar_crossing_objects_noise_filter/test/test_radar_crossing_objects_filter.cpp b/perception/autoware_radar_crossing_objects_noise_filter/test/test_radar_crossing_objects_filter.cpp similarity index 100% rename from perception/radar_crossing_objects_noise_filter/test/test_radar_crossing_objects_filter.cpp rename to perception/autoware_radar_crossing_objects_noise_filter/test/test_radar_crossing_objects_filter.cpp diff --git a/perception/radar_crossing_objects_noise_filter/test/test_radar_crossing_objects_noise_filter/test_radar_crossing_objects_filter_is_noise.cpp b/perception/autoware_radar_crossing_objects_noise_filter/test/test_radar_crossing_objects_noise_filter/test_radar_crossing_objects_filter_is_noise.cpp similarity index 100% rename from perception/radar_crossing_objects_noise_filter/test/test_radar_crossing_objects_noise_filter/test_radar_crossing_objects_filter_is_noise.cpp rename to perception/autoware_radar_crossing_objects_noise_filter/test/test_radar_crossing_objects_noise_filter/test_radar_crossing_objects_filter_is_noise.cpp diff --git a/perception/radar_fusion_to_detected_object/CMakeLists.txt b/perception/autoware_radar_fusion_to_detected_object/CMakeLists.txt similarity index 93% rename from perception/radar_fusion_to_detected_object/CMakeLists.txt rename to perception/autoware_radar_fusion_to_detected_object/CMakeLists.txt index 76c27d3958841..aab25d6f54133 100644 --- a/perception/radar_fusion_to_detected_object/CMakeLists.txt +++ b/perception/autoware_radar_fusion_to_detected_object/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(radar_fusion_to_detected_object) +project(autoware_radar_fusion_to_detected_object) # Dependencies find_package(autoware_cmake REQUIRED) diff --git a/perception/radar_fusion_to_detected_object/README.md b/perception/autoware_radar_fusion_to_detected_object/README.md similarity index 96% rename from perception/radar_fusion_to_detected_object/README.md rename to perception/autoware_radar_fusion_to_detected_object/README.md index 831dbd24e4360..c57b710b09619 100644 --- a/perception/radar_fusion_to_detected_object/README.md +++ b/perception/autoware_radar_fusion_to_detected_object/README.md @@ -1,4 +1,4 @@ -# radar_fusion_to_detected_object +# `autoware_radar_fusion_to_detected_object` This package contains a sensor fusion module for radar-detected objects and 3D detected objects. @@ -94,7 +94,7 @@ If the probability of an output object is lower than this parameter, and the out This parameter is the flag to use probability compensation. If this parameter is true, compensate probability of objects to threshold probability. -## Interface for radar_object_fusion_to_detected_object +## Interface for `autoware_radar_object_fusion_to_detected_object` Sensor fusion with radar objects and a detected object. @@ -105,7 +105,7 @@ Sensor fusion with radar objects and a detected object. ### How to launch ```sh -ros2 launch radar_fusion_to_detected_object radar_object_to_detected_object.launch.xml +ros2 launch autoware_radar_fusion_to_detected_object radar_object_to_detected_object.launch.xml ``` ### Input diff --git a/perception/radar_fusion_to_detected_object/config/radar_object_fusion_to_detected_object.param.yaml b/perception/autoware_radar_fusion_to_detected_object/config/radar_object_fusion_to_detected_object.param.yaml similarity index 100% rename from perception/radar_fusion_to_detected_object/config/radar_object_fusion_to_detected_object.param.yaml rename to perception/autoware_radar_fusion_to_detected_object/config/radar_object_fusion_to_detected_object.param.yaml diff --git a/perception/radar_fusion_to_detected_object/docs/algorithm.md b/perception/autoware_radar_fusion_to_detected_object/docs/algorithm.md similarity index 100% rename from perception/radar_fusion_to_detected_object/docs/algorithm.md rename to perception/autoware_radar_fusion_to_detected_object/docs/algorithm.md diff --git a/perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_1.drawio.svg b/perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_1.drawio.svg similarity index 100% rename from perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_1.drawio.svg rename to perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_1.drawio.svg diff --git a/perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_2.drawio.svg b/perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_2.drawio.svg similarity index 100% rename from perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_2.drawio.svg rename to perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_2.drawio.svg diff --git a/perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_3.drawio.svg b/perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_3.drawio.svg similarity index 100% rename from perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_3.drawio.svg rename to perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_3.drawio.svg diff --git a/perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_4.drawio.svg b/perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_4.drawio.svg similarity index 100% rename from perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_4.drawio.svg rename to perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_4.drawio.svg diff --git a/perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_5.drawio.svg b/perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_5.drawio.svg similarity index 100% rename from perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_5.drawio.svg rename to perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_5.drawio.svg diff --git a/perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_6.drawio.svg b/perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_6.drawio.svg similarity index 100% rename from perception/radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_6.drawio.svg rename to perception/autoware_radar_fusion_to_detected_object/docs/radar_fusion_to_detected_object_6.drawio.svg diff --git a/perception/radar_fusion_to_detected_object/launch/radar_object_fusion_to_detected_object.launch.xml b/perception/autoware_radar_fusion_to_detected_object/launch/radar_object_fusion_to_detected_object.launch.xml similarity index 60% rename from perception/radar_fusion_to_detected_object/launch/radar_object_fusion_to_detected_object.launch.xml rename to perception/autoware_radar_fusion_to_detected_object/launch/radar_object_fusion_to_detected_object.launch.xml index e5505ad87d9ec..d074c66464f72 100644 --- a/perception/radar_fusion_to_detected_object/launch/radar_object_fusion_to_detected_object.launch.xml +++ b/perception/autoware_radar_fusion_to_detected_object/launch/radar_object_fusion_to_detected_object.launch.xml @@ -5,10 +5,10 @@ - + - + diff --git a/perception/radar_fusion_to_detected_object/package.xml b/perception/autoware_radar_fusion_to_detected_object/package.xml similarity index 89% rename from perception/radar_fusion_to_detected_object/package.xml rename to perception/autoware_radar_fusion_to_detected_object/package.xml index 2094ff7770555..94a0c55574f60 100644 --- a/perception/radar_fusion_to_detected_object/package.xml +++ b/perception/autoware_radar_fusion_to_detected_object/package.xml @@ -1,9 +1,9 @@ - radar_fusion_to_detected_object + autoware_radar_fusion_to_detected_object 0.0.0 - radar_fusion_to_detected_object + autoware_radar_fusion_to_detected_object Satoshi Tanaka Shunsuke Miura Yoshi Ri diff --git a/perception/radar_fusion_to_detected_object/schema/radar_object_fusion_to_detected_object.schema.json b/perception/autoware_radar_fusion_to_detected_object/schema/radar_object_fusion_to_detected_object.schema.json similarity index 100% rename from perception/radar_fusion_to_detected_object/schema/radar_object_fusion_to_detected_object.schema.json rename to perception/autoware_radar_fusion_to_detected_object/schema/radar_object_fusion_to_detected_object.schema.json diff --git a/perception/radar_fusion_to_detected_object/src/include/node.hpp b/perception/autoware_radar_fusion_to_detected_object/src/include/node.hpp similarity index 100% rename from perception/radar_fusion_to_detected_object/src/include/node.hpp rename to perception/autoware_radar_fusion_to_detected_object/src/include/node.hpp diff --git a/perception/radar_fusion_to_detected_object/src/include/radar_fusion_to_detected_object.hpp b/perception/autoware_radar_fusion_to_detected_object/src/include/radar_fusion_to_detected_object.hpp similarity index 100% rename from perception/radar_fusion_to_detected_object/src/include/radar_fusion_to_detected_object.hpp rename to perception/autoware_radar_fusion_to_detected_object/src/include/radar_fusion_to_detected_object.hpp diff --git a/perception/radar_fusion_to_detected_object/src/node.cpp b/perception/autoware_radar_fusion_to_detected_object/src/node.cpp similarity index 100% rename from perception/radar_fusion_to_detected_object/src/node.cpp rename to perception/autoware_radar_fusion_to_detected_object/src/node.cpp diff --git a/perception/radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp b/perception/autoware_radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp similarity index 100% rename from perception/radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp rename to perception/autoware_radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp diff --git a/perception/radar_object_clustering/CMakeLists.txt b/perception/autoware_radar_object_clustering/CMakeLists.txt similarity index 93% rename from perception/radar_object_clustering/CMakeLists.txt rename to perception/autoware_radar_object_clustering/CMakeLists.txt index 9a54bbb0dae43..43f6a3f73ebc0 100644 --- a/perception/radar_object_clustering/CMakeLists.txt +++ b/perception/autoware_radar_object_clustering/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(radar_object_clustering) +project(autoware_radar_object_clustering) # Dependencies find_package(autoware_cmake REQUIRED) diff --git a/perception/radar_object_clustering/README.md b/perception/autoware_radar_object_clustering/README.md similarity index 99% rename from perception/radar_object_clustering/README.md rename to perception/autoware_radar_object_clustering/README.md index 8f936ce61a1f3..5fbb4df81a115 100644 --- a/perception/radar_object_clustering/README.md +++ b/perception/autoware_radar_object_clustering/README.md @@ -1,4 +1,4 @@ -# radar_object_clustering +# `autoware_radar_object_clustering` This package contains a radar object clustering for [autoware_perception_msgs/msg/DetectedObject](https://github.com/autowarefoundation/autoware_msgs/tree/main/autoware_perception_msgs/msg/DetectedObject.idl) input. diff --git a/perception/radar_object_clustering/config/radar_object_clustering.param.yaml b/perception/autoware_radar_object_clustering/config/radar_object_clustering.param.yaml similarity index 100% rename from perception/radar_object_clustering/config/radar_object_clustering.param.yaml rename to perception/autoware_radar_object_clustering/config/radar_object_clustering.param.yaml diff --git a/perception/radar_object_clustering/docs/clustering.drawio.svg b/perception/autoware_radar_object_clustering/docs/clustering.drawio.svg similarity index 100% rename from perception/radar_object_clustering/docs/clustering.drawio.svg rename to perception/autoware_radar_object_clustering/docs/clustering.drawio.svg diff --git a/perception/radar_object_clustering/docs/radar_clustering.drawio.svg b/perception/autoware_radar_object_clustering/docs/radar_clustering.drawio.svg similarity index 100% rename from perception/radar_object_clustering/docs/radar_clustering.drawio.svg rename to perception/autoware_radar_object_clustering/docs/radar_clustering.drawio.svg diff --git a/perception/radar_object_clustering/launch/radar_object_clustering.launch.xml b/perception/autoware_radar_object_clustering/launch/radar_object_clustering.launch.xml similarity index 55% rename from perception/radar_object_clustering/launch/radar_object_clustering.launch.xml rename to perception/autoware_radar_object_clustering/launch/radar_object_clustering.launch.xml index 1759c17a5ab6b..a701b9f45b480 100644 --- a/perception/radar_object_clustering/launch/radar_object_clustering.launch.xml +++ b/perception/autoware_radar_object_clustering/launch/radar_object_clustering.launch.xml @@ -1,10 +1,10 @@ - + - + diff --git a/perception/radar_object_clustering/package.xml b/perception/autoware_radar_object_clustering/package.xml similarity index 91% rename from perception/radar_object_clustering/package.xml rename to perception/autoware_radar_object_clustering/package.xml index c7666d2c5701e..d9c3464e02b18 100644 --- a/perception/radar_object_clustering/package.xml +++ b/perception/autoware_radar_object_clustering/package.xml @@ -1,9 +1,9 @@ - radar_object_clustering + autoware_radar_object_clustering 0.1.0 - radar_object_clustering + autoware_radar_object_clustering Sathshi Tanaka Shunsuke Miura Yoshi Ri diff --git a/perception/radar_object_clustering/src/radar_object_clustering_node.cpp b/perception/autoware_radar_object_clustering/src/radar_object_clustering_node.cpp similarity index 100% rename from perception/radar_object_clustering/src/radar_object_clustering_node.cpp rename to perception/autoware_radar_object_clustering/src/radar_object_clustering_node.cpp diff --git a/perception/radar_object_clustering/src/radar_object_clustering_node.hpp b/perception/autoware_radar_object_clustering/src/radar_object_clustering_node.hpp similarity index 100% rename from perception/radar_object_clustering/src/radar_object_clustering_node.hpp rename to perception/autoware_radar_object_clustering/src/radar_object_clustering_node.hpp diff --git a/perception/radar_object_tracker/CMakeLists.txt b/perception/autoware_radar_object_tracker/CMakeLists.txt similarity index 97% rename from perception/radar_object_tracker/CMakeLists.txt rename to perception/autoware_radar_object_tracker/CMakeLists.txt index b732ef6cc863c..614dbfc6e1a30 100644 --- a/perception/radar_object_tracker/CMakeLists.txt +++ b/perception/autoware_radar_object_tracker/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(radar_object_tracker) +project(autoware_radar_object_tracker) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/perception/radar_object_tracker/README.md b/perception/autoware_radar_object_tracker/README.md similarity index 99% rename from perception/radar_object_tracker/README.md rename to perception/autoware_radar_object_tracker/README.md index 056a27d8c4ed0..f9ca194de2491 100644 --- a/perception/radar_object_tracker/README.md +++ b/perception/autoware_radar_object_tracker/README.md @@ -1,4 +1,4 @@ -# Radar Object Tracker +# `autoware_radar_object_tracker` ## Purpose diff --git a/perception/radar_object_tracker/config/data_association_matrix.param.yaml b/perception/autoware_radar_object_tracker/config/data_association_matrix.param.yaml similarity index 100% rename from perception/radar_object_tracker/config/data_association_matrix.param.yaml rename to perception/autoware_radar_object_tracker/config/data_association_matrix.param.yaml diff --git a/perception/radar_object_tracker/config/default_tracker.param.yaml b/perception/autoware_radar_object_tracker/config/default_tracker.param.yaml similarity index 100% rename from perception/radar_object_tracker/config/default_tracker.param.yaml rename to perception/autoware_radar_object_tracker/config/default_tracker.param.yaml diff --git a/perception/radar_object_tracker/config/radar_object_tracker.param.yaml b/perception/autoware_radar_object_tracker/config/radar_object_tracker.param.yaml similarity index 100% rename from perception/radar_object_tracker/config/radar_object_tracker.param.yaml rename to perception/autoware_radar_object_tracker/config/radar_object_tracker.param.yaml diff --git a/perception/radar_object_tracker/config/simulation_tracker.param.yaml b/perception/autoware_radar_object_tracker/config/simulation_tracker.param.yaml similarity index 100% rename from perception/radar_object_tracker/config/simulation_tracker.param.yaml rename to perception/autoware_radar_object_tracker/config/simulation_tracker.param.yaml diff --git a/perception/radar_object_tracker/config/tracking/constant_turn_rate_motion_tracker.yaml b/perception/autoware_radar_object_tracker/config/tracking/constant_turn_rate_motion_tracker.yaml similarity index 100% rename from perception/radar_object_tracker/config/tracking/constant_turn_rate_motion_tracker.yaml rename to perception/autoware_radar_object_tracker/config/tracking/constant_turn_rate_motion_tracker.yaml diff --git a/perception/radar_object_tracker/config/tracking/linear_motion_tracker.yaml b/perception/autoware_radar_object_tracker/config/tracking/linear_motion_tracker.yaml similarity index 100% rename from perception/radar_object_tracker/config/tracking/linear_motion_tracker.yaml rename to perception/autoware_radar_object_tracker/config/tracking/linear_motion_tracker.yaml diff --git a/perception/radar_object_tracker/image/noise_filtering.drawio.svg b/perception/autoware_radar_object_tracker/image/noise_filtering.drawio.svg similarity index 100% rename from perception/radar_object_tracker/image/noise_filtering.drawio.svg rename to perception/autoware_radar_object_tracker/image/noise_filtering.drawio.svg diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/association/data_association.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/data_association.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/association/data_association.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/data_association.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/association/solver/gnn_solver.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/solver/gnn_solver.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/association/solver/gnn_solver.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/solver/gnn_solver.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/association/solver/gnn_solver_interface.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/solver/gnn_solver_interface.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/association/solver/gnn_solver_interface.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/solver/gnn_solver_interface.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/association/solver/mu_ssp.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/solver/mu_ssp.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/association/solver/mu_ssp.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/solver/mu_ssp.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/association/solver/ssp.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/solver/ssp.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/association/solver/ssp.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/association/solver/ssp.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/constant_turn_rate_motion_tracker.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/constant_turn_rate_motion_tracker.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/constant_turn_rate_motion_tracker.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/constant_turn_rate_motion_tracker.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/linear_motion_tracker.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/linear_motion_tracker.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/linear_motion_tracker.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/linear_motion_tracker.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/tracker_base.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/tracker_base.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/tracker_base.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/tracker/model/tracker_base.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/tracker/tracker.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/tracker/tracker.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/tracker/tracker.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/tracker/tracker.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/utils/radar_object_tracker_utils.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/utils/radar_object_tracker_utils.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/utils/radar_object_tracker_utils.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/utils/radar_object_tracker_utils.hpp diff --git a/perception/radar_object_tracker/include/autoware_radar_object_tracker/utils/utils.hpp b/perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/utils/utils.hpp similarity index 100% rename from perception/radar_object_tracker/include/autoware_radar_object_tracker/utils/utils.hpp rename to perception/autoware_radar_object_tracker/include/autoware_radar_object_tracker/utils/utils.hpp diff --git a/perception/radar_object_tracker/launch/radar_object_tracker.launch.xml b/perception/autoware_radar_object_tracker/launch/radar_object_tracker.launch.xml similarity index 63% rename from perception/radar_object_tracker/launch/radar_object_tracker.launch.xml rename to perception/autoware_radar_object_tracker/launch/radar_object_tracker.launch.xml index 313ef4b0f9fcd..16e96e527af94 100644 --- a/perception/radar_object_tracker/launch/radar_object_tracker.launch.xml +++ b/perception/autoware_radar_object_tracker/launch/radar_object_tracker.launch.xml @@ -2,12 +2,12 @@ - - - + + + - + diff --git a/perception/radar_object_tracker/models.md b/perception/autoware_radar_object_tracker/models.md similarity index 100% rename from perception/radar_object_tracker/models.md rename to perception/autoware_radar_object_tracker/models.md diff --git a/perception/radar_object_tracker/package.xml b/perception/autoware_radar_object_tracker/package.xml similarity index 96% rename from perception/radar_object_tracker/package.xml rename to perception/autoware_radar_object_tracker/package.xml index f104e2d7ea456..50dd70e6cec67 100644 --- a/perception/radar_object_tracker/package.xml +++ b/perception/autoware_radar_object_tracker/package.xml @@ -1,7 +1,7 @@ - radar_object_tracker + autoware_radar_object_tracker 0.0.0 Do tracking radar object Yoshi Ri diff --git a/perception/radar_object_tracker/src/association/data_association.cpp b/perception/autoware_radar_object_tracker/src/association/data_association.cpp similarity index 100% rename from perception/radar_object_tracker/src/association/data_association.cpp rename to perception/autoware_radar_object_tracker/src/association/data_association.cpp diff --git a/perception/radar_object_tracker/src/association/mu_ssp/mu_successive_shortest_path_wrapper.cpp b/perception/autoware_radar_object_tracker/src/association/mu_ssp/mu_successive_shortest_path_wrapper.cpp similarity index 100% rename from perception/radar_object_tracker/src/association/mu_ssp/mu_successive_shortest_path_wrapper.cpp rename to perception/autoware_radar_object_tracker/src/association/mu_ssp/mu_successive_shortest_path_wrapper.cpp diff --git a/perception/radar_object_tracker/src/association/ssp/successive_shortest_path.cpp b/perception/autoware_radar_object_tracker/src/association/ssp/successive_shortest_path.cpp similarity index 100% rename from perception/radar_object_tracker/src/association/ssp/successive_shortest_path.cpp rename to perception/autoware_radar_object_tracker/src/association/ssp/successive_shortest_path.cpp diff --git a/perception/radar_object_tracker/src/radar_object_tracker_node.cpp b/perception/autoware_radar_object_tracker/src/radar_object_tracker_node.cpp similarity index 100% rename from perception/radar_object_tracker/src/radar_object_tracker_node.cpp rename to perception/autoware_radar_object_tracker/src/radar_object_tracker_node.cpp diff --git a/perception/radar_object_tracker/src/radar_object_tracker_node.hpp b/perception/autoware_radar_object_tracker/src/radar_object_tracker_node.hpp similarity index 100% rename from perception/radar_object_tracker/src/radar_object_tracker_node.hpp rename to perception/autoware_radar_object_tracker/src/radar_object_tracker_node.hpp diff --git a/perception/radar_object_tracker/src/tracker/model/constant_turn_rate_motion_tracker.cpp b/perception/autoware_radar_object_tracker/src/tracker/model/constant_turn_rate_motion_tracker.cpp similarity index 100% rename from perception/radar_object_tracker/src/tracker/model/constant_turn_rate_motion_tracker.cpp rename to perception/autoware_radar_object_tracker/src/tracker/model/constant_turn_rate_motion_tracker.cpp diff --git a/perception/radar_object_tracker/src/tracker/model/linear_motion_tracker.cpp b/perception/autoware_radar_object_tracker/src/tracker/model/linear_motion_tracker.cpp similarity index 100% rename from perception/radar_object_tracker/src/tracker/model/linear_motion_tracker.cpp rename to perception/autoware_radar_object_tracker/src/tracker/model/linear_motion_tracker.cpp diff --git a/perception/radar_object_tracker/src/tracker/model/tracker_base.cpp b/perception/autoware_radar_object_tracker/src/tracker/model/tracker_base.cpp similarity index 100% rename from perception/radar_object_tracker/src/tracker/model/tracker_base.cpp rename to perception/autoware_radar_object_tracker/src/tracker/model/tracker_base.cpp diff --git a/perception/radar_object_tracker/src/utils/radar_object_tracker_utils.cpp b/perception/autoware_radar_object_tracker/src/utils/radar_object_tracker_utils.cpp similarity index 100% rename from perception/radar_object_tracker/src/utils/radar_object_tracker_utils.cpp rename to perception/autoware_radar_object_tracker/src/utils/radar_object_tracker_utils.cpp diff --git a/perception/radar_object_tracker/src/utils/utils.cpp b/perception/autoware_radar_object_tracker/src/utils/utils.cpp similarity index 100% rename from perception/radar_object_tracker/src/utils/utils.cpp rename to perception/autoware_radar_object_tracker/src/utils/utils.cpp diff --git a/perception/radar_object_tracker/test/test_radar_object_tracker_utils.cpp b/perception/autoware_radar_object_tracker/test/test_radar_object_tracker_utils.cpp similarity index 100% rename from perception/radar_object_tracker/test/test_radar_object_tracker_utils.cpp rename to perception/autoware_radar_object_tracker/test/test_radar_object_tracker_utils.cpp diff --git a/perception/simple_object_merger/README.md b/perception/simple_object_merger/README.md index 782012ff1eaa1..f69b31f70969e 100644 --- a/perception/simple_object_merger/README.md +++ b/perception/simple_object_merger/README.md @@ -25,7 +25,7 @@ Merged objects will not be published until all topic data is received when initi - Post-processing -Because this package does not have matching processing, there are overlapping objects depending on the input objects. So output objects can be used only when post-processing is used. For now, [clustering processing](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/radar_object_clustering) can be used as post-processing. +Because this package does not have matching processing, there are overlapping objects depending on the input objects. So output objects can be used only when post-processing is used. For now, [clustering processing](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_radar_object_clustering) can be used as post-processing. ## Interface From 3b1b8ee4a8db32477c0476e7915fcb536d50e4ec Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 10 Jul 2024 16:15:36 +0900 Subject: [PATCH 135/306] fix(tensorrt_common): fix shadowVariable (#7906) * fix:shadowVariable Signed-off-by: kobayu858 * fix:shadowVariable Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../tensorrt_common/src/tensorrt_common.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/common/tensorrt_common/src/tensorrt_common.cpp b/common/tensorrt_common/src/tensorrt_common.cpp index 2b218cd3e49f2..a22372f74a286 100644 --- a/common/tensorrt_common/src/tensorrt_common.cpp +++ b/common/tensorrt_common/src/tensorrt_common.cpp @@ -427,18 +427,18 @@ bool TrtCommon::buildEngineFromOnnx( layer->setPrecision(nvinfer1::DataType::kHALF); std::cout << "Set kHALF in " << name << std::endl; } - for (int i = num - 1; i >= 0; i--) { - nvinfer1::ILayer * layer = network->getLayer(i); - auto layer_type = layer->getType(); - std::string name = layer->getName(); - if (layer_type == nvinfer1::LayerType::kCONVOLUTION) { - layer->setPrecision(nvinfer1::DataType::kHALF); - std::cout << "Set kHALF in " << name << std::endl; + for (int j = num - 1; j >= 0; j--) { + nvinfer1::ILayer * inner_layer = network->getLayer(j); + auto inner_layer_type = inner_layer->getType(); + std::string inner_name = inner_layer->getName(); + if (inner_layer_type == nvinfer1::LayerType::kCONVOLUTION) { + inner_layer->setPrecision(nvinfer1::DataType::kHALF); + std::cout << "Set kHALF in " << inner_name << std::endl; break; } - if (layer_type == nvinfer1::LayerType::kMATRIX_MULTIPLY) { - layer->setPrecision(nvinfer1::DataType::kHALF); - std::cout << "Set kHALF in " << name << std::endl; + if (inner_layer_type == nvinfer1::LayerType::kMATRIX_MULTIPLY) { + inner_layer->setPrecision(nvinfer1::DataType::kHALF); + std::cout << "Set kHALF in " << inner_name << std::endl; break; } } From f008609da7b2cdeeaf405be8ad2cd1249bdf4bc6 Mon Sep 17 00:00:00 2001 From: Masato Saeki <78376491+MasatoSaeki@users.noreply.github.com> Date: Wed, 10 Jul 2024 16:26:24 +0900 Subject: [PATCH 136/306] feat(tensorrt_yolox): change CMakeLists to be able to build cuda function without runtime gpu (#7800) change CMakeLists like lidar_centerpoint Signed-off-by: MasatoSaeki --- perception/tensorrt_yolox/CMakeLists.txt | 68 +++++++++++++++++++++--- 1 file changed, 62 insertions(+), 6 deletions(-) diff --git a/perception/tensorrt_yolox/CMakeLists.txt b/perception/tensorrt_yolox/CMakeLists.txt index a5498a845e62e..cac574aff8623 100644 --- a/perception/tensorrt_yolox/CMakeLists.txt +++ b/perception/tensorrt_yolox/CMakeLists.txt @@ -11,13 +11,69 @@ find_package(autoware_cmake REQUIRED) autoware_package() find_package(OpenCV REQUIRED) -include(CheckLanguage) -check_language(CUDA) -if(CMAKE_CUDA_COMPILER) - enable_language(CUDA) + +option(CUDA_VERBOSE "Verbose output of CUDA modules" OFF) + +# set flags for CUDA availability +option(CUDA_AVAIL "CUDA available" OFF) +find_package(CUDA) +if(CUDA_FOUND) + find_library(CUBLAS_LIBRARIES cublas HINTS + ${CUDA_TOOLKIT_ROOT_DIR}/lib64 + ${CUDA_TOOLKIT_ROOT_DIR}/lib + ) + if(CUDA_VERBOSE) + message("CUDA is available!") + message("CUDA Libs: ${CUDA_LIBRARIES}") + message("CUDA Headers: ${CUDA_INCLUDE_DIRS}") + endif() + # Note: cublas_device was depreciated in CUDA version 9.2 + # https://forums.developer.nvidia.com/t/where-can-i-find-libcublas-device-so-or-libcublas-device-a/67251/4 + # In LibTorch, CUDA_cublas_device_LIBRARY is used. + unset(CUDA_cublas_device_LIBRARY CACHE) + set(CUDA_AVAIL ON) +else() + message("CUDA NOT FOUND") + set(CUDA_AVAIL OFF) +endif() + +# set flags for TensorRT availability +option(TRT_AVAIL "TensorRT available" OFF) +# try to find the tensorRT modules +find_library(NVINFER nvinfer) +find_library(NVONNXPARSER nvonnxparser) +if(NVINFER AND NVONNXPARSER) + if(CUDA_VERBOSE) + message("TensorRT is available!") + message("NVINFER: ${NVINFER}") + message("NVONNXPARSER: ${NVONNXPARSER}") + endif() + set(TRT_AVAIL ON) else() - message(WARNING "CUDA is not found. preprocess acceleration using CUDA will not be available.") + message("TensorRT is NOT Available") + set(TRT_AVAIL OFF) endif() + +# set flags for CUDNN availability +option(CUDNN_AVAIL "CUDNN available" OFF) +# try to find the CUDNN module +find_library(CUDNN_LIBRARY +NAMES libcudnn.so${__cudnn_ver_suffix} libcudnn${__cudnn_ver_suffix}.dylib ${__cudnn_lib_win_name} +PATHS $ENV{LD_LIBRARY_PATH} ${__libpath_cudart} ${CUDNN_ROOT_DIR} ${PC_CUDNN_LIBRARY_DIRS} ${CMAKE_INSTALL_PREFIX} +PATH_SUFFIXES lib lib64 bin +DOC "CUDNN library." +) +if(CUDNN_LIBRARY) + if(CUDA_VERBOSE) + message(STATUS "CUDNN is available!") + message(STATUS "CUDNN_LIBRARY: ${CUDNN_LIBRARY}") + endif() + set(CUDNN_AVAIL ON) +else() + message("CUDNN is NOT Available") + set(CUDNN_AVAIL OFF) +endif() + find_package(OpenMP) if(OpenMP_FOUND) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") @@ -34,7 +90,7 @@ ament_target_dependencies(${PROJECT_NAME} OpenCV ) -if(CMAKE_CUDA_COMPILER) +if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) # Officially, add_library supports .cu file compilation. # However, as of cmake 3.22.1, it seems to fail compilation because compiler flags for # C++ are directly passed to nvcc (they are originally space separated From 2cf21014be070eb6fb52f1e0ac625e66a1f45523 Mon Sep 17 00:00:00 2001 From: kminoda <44218668+kminoda@users.noreply.github.com> Date: Wed, 10 Jul 2024 18:08:20 +0900 Subject: [PATCH 137/306] chore(localization, map): remove maintainer (#7940) Signed-off-by: kminoda --- launch/tier4_localization_launch/package.xml | 1 - launch/tier4_map_launch/package.xml | 1 - localization/autoware_stop_filter/package.xml | 1 - localization/ekf_localizer/package.xml | 1 - localization/geo_pose_projector/package.xml | 1 - localization/localization_error_monitor/package.xml | 1 - localization/ndt_scan_matcher/package.xml | 1 - localization/twist2accel/package.xml | 1 - localization/yabloc/yabloc_monitor/package.xml | 1 - map/map_loader/package.xml | 1 - map/map_projection_loader/package.xml | 1 - sensing/gnss_poser/package.xml | 1 - sensing/imu_corrector/package.xml | 1 - 13 files changed, 13 deletions(-) diff --git a/launch/tier4_localization_launch/package.xml b/launch/tier4_localization_launch/package.xml index 150744bbae4a7..b6f3ad4c27eea 100644 --- a/launch/tier4_localization_launch/package.xml +++ b/launch/tier4_localization_launch/package.xml @@ -5,7 +5,6 @@ 0.1.0 The tier4_localization_launch package Yamato Ando - Koji Minoda Kento Yabuuchi Ryu Yamamoto NGUYEN Viet Anh diff --git a/launch/tier4_map_launch/package.xml b/launch/tier4_map_launch/package.xml index 05643e354cfce..bca5a853d69f7 100644 --- a/launch/tier4_map_launch/package.xml +++ b/launch/tier4_map_launch/package.xml @@ -5,7 +5,6 @@ 0.1.0 The tier4_map_launch package Ryu Yamamoto - Koji Minoda Kento Yabuuchi Yamato Ando NGUYEN Viet Anh diff --git a/localization/autoware_stop_filter/package.xml b/localization/autoware_stop_filter/package.xml index dfdbd5f182983..d020f390e5bbf 100644 --- a/localization/autoware_stop_filter/package.xml +++ b/localization/autoware_stop_filter/package.xml @@ -4,7 +4,6 @@ autoware_stop_filter 0.0.0 The stop filter package - Koji Minoda Yamato Ando Masahiro Sakamoto Kento Yabuuchi diff --git a/localization/ekf_localizer/package.xml b/localization/ekf_localizer/package.xml index 9c89867025632..b53538de11f15 100644 --- a/localization/ekf_localizer/package.xml +++ b/localization/ekf_localizer/package.xml @@ -5,7 +5,6 @@ 0.1.0 The ekf_localizer package Takamasa Horibe - Koji Minoda Yamato Ando Takeshi Ishita Masahiro Sakamoto diff --git a/localization/geo_pose_projector/package.xml b/localization/geo_pose_projector/package.xml index 36b2aec8384ac..3ffa7cb1c7111 100644 --- a/localization/geo_pose_projector/package.xml +++ b/localization/geo_pose_projector/package.xml @@ -5,7 +5,6 @@ 0.1.0 The geo_pose_projector package Yamato Ando - Koji Minoda Masahiro Sakamoto Kento Yabuuchi NGUYEN Viet Anh diff --git a/localization/localization_error_monitor/package.xml b/localization/localization_error_monitor/package.xml index b8a466f95dfab..02602cbebff37 100644 --- a/localization/localization_error_monitor/package.xml +++ b/localization/localization_error_monitor/package.xml @@ -5,7 +5,6 @@ 0.1.0 ros node for monitoring localization error Yamato Ando - Koji Minoda Masahiro Sakamoto Kento Yabuuchi NGUYEN Viet Anh diff --git a/localization/ndt_scan_matcher/package.xml b/localization/ndt_scan_matcher/package.xml index c69836d77c825..932ee55874cea 100644 --- a/localization/ndt_scan_matcher/package.xml +++ b/localization/ndt_scan_matcher/package.xml @@ -6,7 +6,6 @@ The ndt_scan_matcher package Yamato Ando Kento Yabuuchi - Koji Minoda Masahiro Sakamoto NGUYEN Viet Anh Taiki Yamada diff --git a/localization/twist2accel/package.xml b/localization/twist2accel/package.xml index 0dbce08f309ac..158d8a8a8d283 100644 --- a/localization/twist2accel/package.xml +++ b/localization/twist2accel/package.xml @@ -4,7 +4,6 @@ twist2accel 0.0.0 The acceleration estimation package - Koji Minoda Yamato Ando Masahiro Sakamoto Kento Yabuuchi diff --git a/localization/yabloc/yabloc_monitor/package.xml b/localization/yabloc/yabloc_monitor/package.xml index a42a734dbab31..f3e6cfcdfbe5a 100644 --- a/localization/yabloc/yabloc_monitor/package.xml +++ b/localization/yabloc/yabloc_monitor/package.xml @@ -5,7 +5,6 @@ 0.1.0 YabLoc monitor package Kento Yabuuchi - Koji Minoda Masahiro Sakamoto Yamato Ando NGUYEN Viet Anh diff --git a/map/map_loader/package.xml b/map/map_loader/package.xml index 7c4d9eaf99556..6cceff98a8f9a 100644 --- a/map/map_loader/package.xml +++ b/map/map_loader/package.xml @@ -6,7 +6,6 @@ The map_loader package Yamato Ando Ryu Yamamoto - Koji Minoda Masahiro Sakamoto Kento Yabuuchi NGUYEN Viet Anh diff --git a/map/map_projection_loader/package.xml b/map/map_projection_loader/package.xml index b77ef18ac2293..c36c22c29a0fd 100644 --- a/map/map_projection_loader/package.xml +++ b/map/map_projection_loader/package.xml @@ -4,7 +4,6 @@ map_projection_loader 0.1.0 map_projection_loader package as a ROS 2 node - Koji Minoda Yamato Ando Masahiro Sakamoto Kento Yabuuchi diff --git a/sensing/gnss_poser/package.xml b/sensing/gnss_poser/package.xml index 2de081b6b009f..eef6d690b6e72 100644 --- a/sensing/gnss_poser/package.xml +++ b/sensing/gnss_poser/package.xml @@ -5,7 +5,6 @@ 1.0.0 The ROS 2 gnss_poser package Yamato Ando - Koji Minoda Masahiro Sakamoto Kento Yabuuchi NGUYEN Viet Anh diff --git a/sensing/imu_corrector/package.xml b/sensing/imu_corrector/package.xml index cbc28e2ff0eeb..f5c719d2b4f7e 100644 --- a/sensing/imu_corrector/package.xml +++ b/sensing/imu_corrector/package.xml @@ -6,7 +6,6 @@ The ROS 2 imu_corrector package Yamato Ando Taiki Yamada - Koji Minoda Apache License 2.0 Yamato Ando From d20208cfdebcbe2e68c555dc0dc3d2278c6a6874 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 10 Jul 2024 19:15:11 +0900 Subject: [PATCH 138/306] fix(object_merger): fix shadowVariable (#7941) fix:shadowVariable Signed-off-by: kobayu858 --- .../src/association/solver/successive_shortest_path.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/object_merger/src/association/solver/successive_shortest_path.cpp b/perception/object_merger/src/association/solver/successive_shortest_path.cpp index 782aa1ef4ac31..e384f12d60051 100644 --- a/perception/object_merger/src/association/solver/successive_shortest_path.cpp +++ b/perception/object_merger/src/association/solver/successive_shortest_path.cpp @@ -328,12 +328,12 @@ void SSP::maximizeLinearAssignment( #ifndef NDEBUG // Check if the potentials are feasible potentials - for (int v = 0; v < n_nodes; ++v) { - for (auto it_incident_edge = adjacency_list.at(v).cbegin(); - it_incident_edge != adjacency_list.at(v).cend(); ++it_incident_edge) { + for (int w = 0; w < n_nodes; ++w) { + for (auto it_incident_edge = adjacency_list.at(w).cbegin(); + it_incident_edge != adjacency_list.at(w).cend(); ++it_incident_edge) { if (it_incident_edge->capacity > 0) { double reduced_cost = - it_incident_edge->cost + potentials.at(v) - potentials.at(it_incident_edge->dst); + it_incident_edge->cost + potentials.at(w) - potentials.at(it_incident_edge->dst); assert(reduced_cost >= 0); } } From 83bcf07312c06adc95e644ef69506d8f5f3282d3 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 10 Jul 2024 19:15:34 +0900 Subject: [PATCH 139/306] fix(multi_object_tracker): fix shadowVariable (#7939) fix:shadowVariable Signed-off-by: kobayu858 --- .../src/multi_object_tracker_node.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/multi_object_tracker/src/multi_object_tracker_node.cpp b/perception/multi_object_tracker/src/multi_object_tracker_node.cpp index 198d9e2238566..45955ac983dde 100644 --- a/perception/multi_object_tracker/src/multi_object_tracker_node.cpp +++ b/perception/multi_object_tracker/src/multi_object_tracker_node.cpp @@ -350,10 +350,10 @@ void MultiObjectTracker::publish(const rclcpp::Time & time) const debugger_->endPublishTime(this->now(), time); if (debugger_->shouldPublishTentativeObjects()) { - TrackedObjects tentative_objects_msg; - tentative_objects_msg.header.frame_id = world_frame_id_; - processor_->getTentativeObjects(time, tentative_objects_msg); - debugger_->publishTentativeObjects(tentative_objects_msg); + TrackedObjects tentative_output_msg; + tentative_output_msg.header.frame_id = world_frame_id_; + processor_->getTentativeObjects(time, tentative_output_msg); + debugger_->publishTentativeObjects(tentative_output_msg); } debugger_->publishObjectsMarkers(); } From fbefa7ae292b7f3b25fd52e503563899ea8d997a Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Wed, 10 Jul 2024 19:18:30 +0900 Subject: [PATCH 140/306] fix(static_obstacle_avoidance): don't automatically avoid ambiguous vehicle (#7851) * fix(static_obstacle_avoidance): don't automatically avoid ambiguous vehicle Signed-off-by: satoshi-ota * chore(schema): update schema Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../src/manager.cpp | 8 ++-- .../static_obstacle_avoidance.param.yaml | 10 +++- .../data_structs.hpp | 5 +- .../helper.hpp | 47 +++++++++++++++++-- .../parameter_helper.hpp | 8 ++-- .../static_obstacle_avoidance.schema.json | 31 ++++++++---- .../src/manager.cpp | 5 +- .../src/utils.cpp | 23 +++------ 8 files changed, 95 insertions(+), 42 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.cpp b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.cpp index 02b90186d9b2f..8096d2944ee2b 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/manager.cpp @@ -137,9 +137,11 @@ void AvoidanceByLaneChangeModuleManager::init(rclcpp::Node * node) { const std::string ns = "avoidance.target_filtering.avoidance_for_ambiguous_vehicle."; - p.enable_avoidance_for_ambiguous_vehicle = getOrDeclareParameter(*node, ns + "enable"); - p.closest_distance_to_wait_and_see_for_ambiguous_vehicle = - getOrDeclareParameter(*node, ns + "closest_distance_to_wait_and_see"); + p.policy_ambiguous_vehicle = getOrDeclareParameter(*node, ns + "policy"); + p.wait_and_see_target_behaviors = + getOrDeclareParameter>(*node, ns + "wait_and_see.target_behaviors"); + p.wait_and_see_th_closest_distance = + getOrDeclareParameter(*node, ns + "wait_and_see.th_closest_distance"); p.time_threshold_for_ambiguous_vehicle = getOrDeclareParameter(*node, ns + "condition.th_stopped_time"); p.distance_threshold_for_ambiguous_vehicle = diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/config/static_obstacle_avoidance.param.yaml b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/config/static_obstacle_avoidance.param.yaml index 3087ccc93934b..6bd5e0faf1938 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/config/static_obstacle_avoidance.param.yaml +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/config/static_obstacle_avoidance.param.yaml @@ -138,8 +138,11 @@ # params for avoidance of vehicle type objects that are ambiguous as to whether they are parked. avoidance_for_ambiguous_vehicle: - enable: true # [-] - closest_distance_to_wait_and_see: 10.0 # [m] + # policy for ego behavior for ambiguous vehicle. + # "auto" : generate candidate path. if RTC is running as AUTO mode, the ego avoids it automatically. + # "manual" : generate candidate path and wait operator approval even if RTC is running as AUTO mode. + # "ignore" : never avoid it. + policy: "auto" # [-] condition: th_stopped_time: 3.0 # [s] th_moving_distance: 1.0 # [m] @@ -149,6 +152,9 @@ crosswalk: front_distance: 30.0 # [m] behind_distance: 30.0 # [m] + wait_and_see: + target_behaviors: ["MERGING", "DEVIATING"] # [-] + th_closest_distance: 10.0 # [m] # params for filtering objects that are in intersection intersection: diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp index 49599004e0952..079928a58bd9f 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp @@ -108,7 +108,7 @@ struct AvoidanceParameters bool enable_cancel_maneuver{false}; // enable avoidance for all parking vehicle - bool enable_avoidance_for_ambiguous_vehicle{false}; + std::string policy_ambiguous_vehicle{"ignore"}; // enable yield maneuver. bool enable_yield_maneuver{false}; @@ -192,7 +192,8 @@ struct AvoidanceParameters double object_check_min_road_shoulder_width{0.0}; // force avoidance - double closest_distance_to_wait_and_see_for_ambiguous_vehicle{0.0}; + std::vector wait_and_see_target_behaviors{"NONE", "MERGING", "DEVIATING"}; + double wait_and_see_th_closest_distance{0.0}; double time_threshold_for_ambiguous_vehicle{0.0}; double distance_threshold_for_ambiguous_vehicle{0.0}; diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/helper.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/helper.hpp index 8c46affbc64e3..bfeb942c82be3 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/helper.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/helper.hpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -325,10 +326,27 @@ class AvoidanceHelper const auto object = objects.front(); + // if the object is NOT ambiguous, this module doesn't wait operator approval if RTC is running + // as AUTO mode. if (!object.is_ambiguous) { return true; } + // check only front objects. + if (object.longitudinal < 0.0) { + return true; + } + + // if the policy is "manual", this module generates candidate path and waits approval. + if (parameters_->policy_ambiguous_vehicle == "manual") { + return false; + } + + // don't delay avoidance start position if it's not MERGING or DEVIATING vehicle. + if (!isWaitAndSeeTarget(object)) { + return true; + } + if (!object.avoid_margin.has_value()) { return true; } @@ -341,9 +359,32 @@ class AvoidanceHelper const auto constant_distance = getFrontConstantDistance(object); const auto avoidance_distance = getMinAvoidanceDistance(desire_shift_length); - return object.longitudinal < - prepare_distance + constant_distance + avoidance_distance + - parameters_->closest_distance_to_wait_and_see_for_ambiguous_vehicle; + return object.longitudinal < prepare_distance + constant_distance + avoidance_distance + + parameters_->wait_and_see_th_closest_distance; + } + + bool isWaitAndSeeTarget(const ObjectData & object) const + { + const auto & behaviors = parameters_->wait_and_see_target_behaviors; + if (object.behavior == ObjectData::Behavior::MERGING) { + return std::any_of(behaviors.begin(), behaviors.end(), [](const std::string & behavior) { + return behavior == "MERGING"; + }); + } + + if (object.behavior == ObjectData::Behavior::DEVIATING) { + return std::any_of(behaviors.begin(), behaviors.end(), [](const std::string & behavior) { + return behavior == "DEVIATING"; + }); + } + + if (object.behavior == ObjectData::Behavior::NONE) { + return std::any_of(behaviors.begin(), behaviors.end(), [](const std::string & behavior) { + return behavior == "NONE"; + }); + } + + return false; } static bool isAbsolutelyNotAvoidable(const ObjectData & object) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/parameter_helper.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/parameter_helper.hpp index 84cf7c4e33d26..0cea2a4e633c3 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/parameter_helper.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/parameter_helper.hpp @@ -137,9 +137,11 @@ AvoidanceParameters getParameter(rclcpp::Node * node) { const std::string ns = "avoidance.target_filtering.avoidance_for_ambiguous_vehicle."; - p.enable_avoidance_for_ambiguous_vehicle = getOrDeclareParameter(*node, ns + "enable"); - p.closest_distance_to_wait_and_see_for_ambiguous_vehicle = - getOrDeclareParameter(*node, ns + "closest_distance_to_wait_and_see"); + p.policy_ambiguous_vehicle = getOrDeclareParameter(*node, ns + "policy"); + p.wait_and_see_target_behaviors = + getOrDeclareParameter>(*node, ns + "wait_and_see.target_behaviors"); + p.wait_and_see_th_closest_distance = + getOrDeclareParameter(*node, ns + "wait_and_see.th_closest_distance"); p.time_threshold_for_ambiguous_vehicle = getOrDeclareParameter(*node, ns + "condition.th_stopped_time"); p.distance_threshold_for_ambiguous_vehicle = diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json index db3215fa8d238..246b96ec5440e 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json @@ -716,9 +716,10 @@ "avoidance_for_ambiguous_vehicle": { "type": "object", "properties": { - "enable": { - "type": "boolean", - "description": "Enable avoidance maneuver for ambiguous vehicles.", + "policy": { + "type": "string", + "enum": ["auto", "manual", "ignore"], + "description": "Ego behavior policy for ambiguous vehicle.", "default": "true" }, "closest_distance_to_wait_and_see": { @@ -778,14 +779,26 @@ }, "required": ["traffic_light", "crosswalk"], "additionalProperties": false + }, + "wait_and_see": { + "type": "object", + "properties": { + "target_behaviors": { + "type": "array", + "default": ["MERGING", "DEVIATING"], + "description": "This module doesn't avoid these behaviors vehicle until it gets closer than threshold." + }, + "th_closest_distance": { + "type": "number", + "default": 10.0, + "description": "Threshold to check whether the ego gets close enough the ambiguous vehicle." + } + }, + "required": ["target_behaviors", "th_closest_distance"], + "additionalProperties": false } }, - "required": [ - "enable", - "closest_distance_to_wait_and_see", - "condition", - "ignore_area" - ], + "required": ["policy", "condition", "ignore_area", "wait_and_see"], "additionalProperties": false }, "intersection": { diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/manager.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/manager.cpp index 2d02f33e19870..c5f338e91acbd 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/manager.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/manager.cpp @@ -132,10 +132,9 @@ void StaticObstacleAvoidanceModuleManager::updateModuleParams( { const std::string ns = "avoidance.avoidance.lateral.avoidance_for_ambiguous_vehicle."; - updateParam(parameters, ns + "enable", p->enable_avoidance_for_ambiguous_vehicle); + updateParam(parameters, ns + "policy", p->policy_ambiguous_vehicle); updateParam( - parameters, ns + "closest_distance_to_wait_and_see", - p->closest_distance_to_wait_and_see_for_ambiguous_vehicle); + parameters, ns + "wait_and_see.th_closest_distance", p->wait_and_see_th_closest_distance); updateParam( parameters, ns + "condition.th_stopped_time", p->time_threshold_for_ambiguous_vehicle); updateParam( diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp index ddc544553f30e..75eb6ab0fb62e 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp @@ -880,7 +880,7 @@ bool isSatisfiedWithVehicleCondition( // from here, filtering for ambiguous vehicle. - if (!parameters->enable_avoidance_for_ambiguous_vehicle) { + if (parameters->policy_ambiguous_vehicle == "ignore") { object.info = ObjectInfo::AMBIGUOUS_STOPPED_VEHICLE; return false; } @@ -889,6 +889,7 @@ bool isSatisfiedWithVehicleCondition( object.stop_time > parameters->time_threshold_for_ambiguous_vehicle; if (!stop_time_longer_than_threshold) { object.info = ObjectInfo::AMBIGUOUS_STOPPED_VEHICLE; + object.is_ambiguous = false; return false; } @@ -897,6 +898,7 @@ bool isSatisfiedWithVehicleCondition( parameters->distance_threshold_for_ambiguous_vehicle; if (is_moving_distance_longer_than_threshold) { object.info = ObjectInfo::AMBIGUOUS_STOPPED_VEHICLE; + object.is_ambiguous = false; return false; } @@ -907,22 +909,9 @@ bool isSatisfiedWithVehicleCondition( return true; } } else { - if (object.behavior == ObjectData::Behavior::MERGING) { - object.info = ObjectInfo::AMBIGUOUS_STOPPED_VEHICLE; - object.is_ambiguous = true; - return true; - } - - if (object.behavior == ObjectData::Behavior::DEVIATING) { - object.info = ObjectInfo::AMBIGUOUS_STOPPED_VEHICLE; - object.is_ambiguous = true; - return true; - } - - if (object.behavior == ObjectData::Behavior::NONE) { - object.is_ambiguous = false; - return true; - } + object.info = ObjectInfo::AMBIGUOUS_STOPPED_VEHICLE; + object.is_ambiguous = true; + return true; } object.info = ObjectInfo::IS_NOT_PARKING_OBJECT; From 49c30635e80f63ebc2c42e2a244bf4bafd0b7c64 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 10 Jul 2024 20:31:22 +0900 Subject: [PATCH 141/306] fix(lidar_apollo_segmentation_tvm): fix shadowVariable (#7938) fix:shadowVariable Signed-off-by: kobayu858 --- .../src/lidar_apollo_segmentation_tvm.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp b/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp index c83e4836c1dd0..32211bf84efec 100644 --- a/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp +++ b/perception/lidar_apollo_segmentation_tvm/src/lidar_apollo_segmentation_tvm.cpp @@ -202,10 +202,10 @@ std::shared_ptr ApolloLidarSegmentation::detec output->header = input.header; // move down pointcloud z_offset in z axis - for (std::size_t i = 0; i < output->feature_objects.size(); i++) { - sensor_msgs::msg::PointCloud2 transformed_cloud; - transformCloud(output->feature_objects.at(i).feature.cluster, transformed_cloud, -z_offset_); - output->feature_objects.at(i).feature.cluster = transformed_cloud; + for (auto & feature_object : output->feature_objects) { + sensor_msgs::msg::PointCloud2 updated_cloud; + transformCloud(feature_object.feature.cluster, updated_cloud, -z_offset_); + feature_object.feature.cluster = updated_cloud; } return output; From da0547c6bda82df6565db612703e2d29906aa772 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Thu, 11 Jul 2024 00:11:18 +0900 Subject: [PATCH 142/306] test(euclidean_cluster): add unit tests (#7735) * chore(euclidean_cluster): add unit tests Signed-off-by: badai-nguyen * fix: pre-commit Signed-off-by: badai-nguyen * fix: namespace update Signed-off-by: badai-nguyen --------- Signed-off-by: badai-nguyen --- perception/euclidean_cluster/CMakeLists.txt | 8 + perception/euclidean_cluster/package.xml | 3 + ...est_voxel_grid_based_euclidean_cluster.cpp | 173 ++++++++++++++++++ 3 files changed, 184 insertions(+) create mode 100644 perception/euclidean_cluster/test/test_voxel_grid_based_euclidean_cluster.cpp diff --git a/perception/euclidean_cluster/CMakeLists.txt b/perception/euclidean_cluster/CMakeLists.txt index dacbcf460a14a..d27390ae7707a 100644 --- a/perception/euclidean_cluster/CMakeLists.txt +++ b/perception/euclidean_cluster/CMakeLists.txt @@ -55,7 +55,15 @@ rclcpp_components_register_node(${PROJECT_NAME}_voxel_grid_node_core EXECUTABLE voxel_grid_based_euclidean_cluster_node ) +if(BUILD_TESTING) + find_package(ament_cmake_gtest REQUIRED) + ament_auto_add_gtest(test_voxel_grid_based_euclidean_cluster_fusion + test/test_voxel_grid_based_euclidean_cluster.cpp + ) +endif() + ament_auto_package(INSTALL_TO_SHARE launch config + test ) diff --git a/perception/euclidean_cluster/package.xml b/perception/euclidean_cluster/package.xml index 2644786ead061..45b5d05031c72 100644 --- a/perception/euclidean_cluster/package.xml +++ b/perception/euclidean_cluster/package.xml @@ -12,6 +12,7 @@ autoware_cmake autoware_perception_msgs + autoware_point_types autoware_universe_utils geometry_msgs libpcl-all-dev @@ -21,6 +22,8 @@ sensor_msgs tier4_perception_msgs + ament_cmake_gtest + ament_lint_auto autoware_lint_common diff --git a/perception/euclidean_cluster/test/test_voxel_grid_based_euclidean_cluster.cpp b/perception/euclidean_cluster/test/test_voxel_grid_based_euclidean_cluster.cpp new file mode 100644 index 0000000000000..7d2edbe0de0d7 --- /dev/null +++ b/perception/euclidean_cluster/test/test_voxel_grid_based_euclidean_cluster.cpp @@ -0,0 +1,173 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp" + +#include +#include + +#include +#include +#include + +#include + +using autoware_point_types::PointXYZI; +void setPointCloud2Fields(sensor_msgs::msg::PointCloud2 & pointcloud) +{ + pointcloud.fields.resize(4); + pointcloud.fields[0].name = "x"; + pointcloud.fields[1].name = "y"; + pointcloud.fields[2].name = "z"; + pointcloud.fields[3].name = "intensity"; + pointcloud.fields[0].offset = 0; + pointcloud.fields[1].offset = 4; + pointcloud.fields[2].offset = 8; + pointcloud.fields[3].offset = 12; + pointcloud.fields[0].datatype = sensor_msgs::msg::PointField::FLOAT32; + pointcloud.fields[1].datatype = sensor_msgs::msg::PointField::FLOAT32; + pointcloud.fields[2].datatype = sensor_msgs::msg::PointField::FLOAT32; + pointcloud.fields[3].datatype = sensor_msgs::msg::PointField::FLOAT32; + pointcloud.fields[0].count = 1; + pointcloud.fields[1].count = 1; + pointcloud.fields[2].count = 1; + pointcloud.fields[3].count = 1; + pointcloud.height = 1; + pointcloud.point_step = 16; + pointcloud.is_bigendian = false; + pointcloud.is_dense = true; + pointcloud.header.frame_id = "dummy_frame_id"; + pointcloud.header.stamp.sec = 0; + pointcloud.header.stamp.nanosec = 0; +} + +sensor_msgs::msg::PointCloud2 generateClusterWithinVoxel(const int nb_points) +{ + sensor_msgs::msg::PointCloud2 pointcloud; + setPointCloud2Fields(pointcloud); + pointcloud.data.resize(nb_points * pointcloud.point_step); + + // generate one cluster with specified number of points within 1 voxel + for (int i = 0; i < nb_points; ++i) { + PointXYZI point; + point.x = std::experimental::randint(0, 30) / 100.0; // point.x within 0.0 to 0.3 + point.y = std::experimental::randint(0, 30) / 100.0; // point.y within 0.0 to 0.3 + point.z = std::experimental::randint(0, 30) / 1.0; + point.intensity = 0.0; + memcpy(&pointcloud.data[i * pointcloud.point_step], &point, pointcloud.point_step); + } + pointcloud.width = nb_points; + pointcloud.row_step = pointcloud.point_step * nb_points; + return pointcloud; +} + +// Test case 1: Test case when the input pointcloud has only one cluster with points number equal to +// max_cluster_size +TEST(VoxelGridBasedEuclideanClusterTest, testcase1) +{ + int nb_generated_points = 100; + sensor_msgs::msg::PointCloud2 pointcloud = generateClusterWithinVoxel(nb_generated_points); + + const sensor_msgs::msg::PointCloud2::ConstSharedPtr pointcloud_msg = + std::make_shared(pointcloud); + tier4_perception_msgs::msg::DetectedObjectsWithFeature output; + std::shared_ptr cluster_; + float tolerance = 0.7; + float voxel_leaf_size = 0.3; + int min_points_number_per_voxel = 1; + int min_cluster_size = 1; + int max_cluster_size = 100; + bool use_height = false; + cluster_ = std::make_shared( + use_height, min_cluster_size, max_cluster_size, tolerance, voxel_leaf_size, + min_points_number_per_voxel); + if (cluster_->cluster(pointcloud_msg, output)) { + std::cout << "cluster success" << std::endl; + } else { + std::cout << "cluster failed" << std::endl; + } + std::cout << "number of output clusters " << output.feature_objects.size() << std::endl; + std::cout << "number points of first cluster: " << output.feature_objects[0].feature.cluster.width + << std::endl; + // the output clusters should has only one cluster with nb_generated_points points + EXPECT_EQ(output.feature_objects.size(), 1); + EXPECT_EQ(output.feature_objects[0].feature.cluster.width, nb_generated_points); +} + +// Test case 2: Test case when the input pointcloud has only one cluster with points number less +// than min_cluster_size +TEST(VoxelGridBasedEuclideanClusterTest, testcase2) +{ + int nb_generated_points = 1; + + sensor_msgs::msg::PointCloud2 pointcloud = generateClusterWithinVoxel(nb_generated_points); + + const sensor_msgs::msg::PointCloud2::ConstSharedPtr pointcloud_msg = + std::make_shared(pointcloud); + tier4_perception_msgs::msg::DetectedObjectsWithFeature output; + std::shared_ptr cluster_; + float tolerance = 0.7; + float voxel_leaf_size = 0.3; + int min_points_number_per_voxel = 1; + int min_cluster_size = 2; + int max_cluster_size = 100; + bool use_height = false; + cluster_ = std::make_shared( + use_height, min_cluster_size, max_cluster_size, tolerance, voxel_leaf_size, + min_points_number_per_voxel); + if (cluster_->cluster(pointcloud_msg, output)) { + std::cout << "cluster success" << std::endl; + } else { + std::cout << "cluster failed" << std::endl; + } + std::cout << "number of output clusters " << output.feature_objects.size() << std::endl; + // the output clusters should be empty + EXPECT_EQ(output.feature_objects.size(), 0); +} + +// Test case 3: Test case when the input pointcloud has two clusters with points number greater to +// max_cluster_size +TEST(VoxelGridBasedEuclideanClusterTest, testcase3) +{ + int nb_generated_points = 100; + sensor_msgs::msg::PointCloud2 pointcloud = generateClusterWithinVoxel(nb_generated_points); + + const sensor_msgs::msg::PointCloud2::ConstSharedPtr pointcloud_msg = + std::make_shared(pointcloud); + tier4_perception_msgs::msg::DetectedObjectsWithFeature output; + std::shared_ptr cluster_; + float tolerance = 0.7; + float voxel_leaf_size = 0.3; + int min_points_number_per_voxel = 1; + int min_cluster_size = 1; + int max_cluster_size = 99; // max_cluster_size is less than nb_generated_points + bool use_height = false; + cluster_ = std::make_shared( + use_height, min_cluster_size, max_cluster_size, tolerance, voxel_leaf_size, + min_points_number_per_voxel); + if (cluster_->cluster(pointcloud_msg, output)) { + std::cout << "cluster success" << std::endl; + } else { + std::cout << "cluster failed" << std::endl; + } + std::cout << "number of output clusters " << output.feature_objects.size() << std::endl; + // the output clusters should be emtpy + EXPECT_EQ(output.feature_objects.size(), 0); +} + +int main(int argc, char ** argv) +{ + testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} From 5ba8bc49a5e49f213e754d8bc06809e79e01aa1b Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 11 Jul 2024 09:48:50 +0900 Subject: [PATCH 143/306] fix(autoware_radar_object_tracker): fix shadowVariable (#7945) fix:shadowVariable Signed-off-by: kobayu858 --- .../src/association/ssp/successive_shortest_path.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/autoware_radar_object_tracker/src/association/ssp/successive_shortest_path.cpp b/perception/autoware_radar_object_tracker/src/association/ssp/successive_shortest_path.cpp index 7877fe5451d8d..d18e4f140e2ed 100644 --- a/perception/autoware_radar_object_tracker/src/association/ssp/successive_shortest_path.cpp +++ b/perception/autoware_radar_object_tracker/src/association/ssp/successive_shortest_path.cpp @@ -328,12 +328,12 @@ void SSP::maximizeLinearAssignment( #ifndef NDEBUG // Check if the potentials are feasible potentials - for (int v = 0; v < n_nodes; ++v) { - for (auto it_incident_edge = adjacency_list.at(v).cbegin(); - it_incident_edge != adjacency_list.at(v).cend(); ++it_incident_edge) { + for (int w = 0; w < n_nodes; ++w) { + for (auto it_incident_edge = adjacency_list.at(w).cbegin(); + it_incident_edge != adjacency_list.at(w).cend(); ++it_incident_edge) { if (it_incident_edge->capacity > 0) { double reduced_cost = - it_incident_edge->cost + potentials.at(v) - potentials.at(it_incident_edge->dst); + it_incident_edge->cost + potentials.at(w) - potentials.at(it_incident_edge->dst); assert(reduced_cost >= 0); } } From 2af1f1dccc845d090ee28a20fa40e78a79d1e9a9 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 11 Jul 2024 09:49:30 +0900 Subject: [PATCH 144/306] fix(tensorrt_yolox): fix shadowVariable (#7947) fix:shadowVariable Signed-off-by: kobayu858 --- perception/tensorrt_yolox/src/tensorrt_yolox.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/tensorrt_yolox/src/tensorrt_yolox.cpp b/perception/tensorrt_yolox/src/tensorrt_yolox.cpp index 94c795cfc2403..bb6975d7a1f21 100644 --- a/perception/tensorrt_yolox/src/tensorrt_yolox.cpp +++ b/perception/tensorrt_yolox/src/tensorrt_yolox.cpp @@ -130,12 +130,12 @@ std::vector get_seg_colormap(const std::string & filen cmap.name = name; colormapString.erase(0, npos + 1); while (!colormapString.empty()) { - size_t npos = colormapString.find_first_of(','); - if (npos != std::string::npos) { - substr = colormapString.substr(0, npos); + size_t inner_npos = colormapString.find_first_of(','); + if (inner_npos != std::string::npos) { + substr = colormapString.substr(0, inner_npos); unsigned char c = (unsigned char)std::stoi(trim(substr)); cmap.color.push_back(c); - colormapString.erase(0, npos + 1); + colormapString.erase(0, inner_npos + 1); } else { unsigned char c = (unsigned char)std::stoi(trim(colormapString)); cmap.color.push_back(c); From c401da500b1dba34374182bdbbac78723e0347f8 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 11 Jul 2024 09:50:16 +0900 Subject: [PATCH 145/306] fix(tracking_object_merger): fix shadowVariable (#7948) fix:shadowVariable Signed-off-by: kobayu858 --- .../src/association/solver/successive_shortest_path.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/tracking_object_merger/src/association/solver/successive_shortest_path.cpp b/perception/tracking_object_merger/src/association/solver/successive_shortest_path.cpp index 7be715b24bd5f..7d792c157d356 100644 --- a/perception/tracking_object_merger/src/association/solver/successive_shortest_path.cpp +++ b/perception/tracking_object_merger/src/association/solver/successive_shortest_path.cpp @@ -328,12 +328,12 @@ void SSP::maximizeLinearAssignment( #ifndef NDEBUG // Check if the potentials are feasible potentials - for (int v = 0; v < n_nodes; ++v) { - for (auto it_incident_edge = adjacency_list.at(v).cbegin(); - it_incident_edge != adjacency_list.at(v).cend(); ++it_incident_edge) { + for (int w = 0; w < n_nodes; ++w) { + for (auto it_incident_edge = adjacency_list.at(w).cbegin(); + it_incident_edge != adjacency_list.at(w).cend(); ++it_incident_edge) { if (it_incident_edge->capacity > 0) { double reduced_cost = - it_incident_edge->cost + potentials.at(v) - potentials.at(it_incident_edge->dst); + it_incident_edge->cost + potentials.at(w) - potentials.at(it_incident_edge->dst); assert(reduced_cost >= 0); } } From 997db55631306187b3842c8aab0ad4fa5a1c081c Mon Sep 17 00:00:00 2001 From: Amadeusz Szymko Date: Thu, 11 Jul 2024 11:09:24 +0900 Subject: [PATCH 146/306] fix(lidar_transfusion): install lib (#7953) Signed-off-by: Amadeusz Szymko --- perception/lidar_transfusion/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/perception/lidar_transfusion/CMakeLists.txt b/perception/lidar_transfusion/CMakeLists.txt index 677a835e5b04e..15c89beb15d3e 100644 --- a/perception/lidar_transfusion/CMakeLists.txt +++ b/perception/lidar_transfusion/CMakeLists.txt @@ -134,6 +134,11 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) EXECUTABLE lidar_transfusion_node ) + install( + TARGETS transfusion_cuda_lib + DESTINATION lib + ) + if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() From 56c7bc687b13e9971aeefacdc930dbd9c27e98d9 Mon Sep 17 00:00:00 2001 From: SHtokuda <165623782+shtokuda@users.noreply.github.com> Date: Thu, 11 Jul 2024 11:28:18 +0900 Subject: [PATCH 147/306] fix(autoware_external_cmd_converter): fix check_topic_state (#7921) * fix(autoware_external_cmd_converter): fix check_topic_state Signed-off-by: shtokuda * style(pre-commit): autofix * Update vehicle/autoware_external_cmd_converter/src/node.cpp Co-authored-by: Shumpei Wakabayashi <42209144+shmpwk@users.noreply.github.com> * style(pre-commit): autofix --------- Signed-off-by: shtokuda Co-authored-by: shtokuda Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Shumpei Wakabayashi <42209144+shmpwk@users.noreply.github.com> --- .../autoware_external_cmd_converter/src/node.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/vehicle/autoware_external_cmd_converter/src/node.cpp b/vehicle/autoware_external_cmd_converter/src/node.cpp index cbff8ab5ef2ce..22fc1c319a4e3 100644 --- a/vehicle/autoware_external_cmd_converter/src/node.cpp +++ b/vehicle/autoware_external_cmd_converter/src/node.cpp @@ -179,6 +179,9 @@ void ExternalCmdConverterNode::check_topic_status( { using diagnostic_msgs::msg::DiagnosticStatus; DiagnosticStatus status; + + current_gate_mode_ = gate_mode_sub_.takeData(); + if (!check_emergency_stop_topic_timeout()) { status.level = DiagnosticStatus::ERROR; status.message = "emergency stop topic is timeout"; @@ -195,6 +198,14 @@ void ExternalCmdConverterNode::check_topic_status( bool ExternalCmdConverterNode::check_emergency_stop_topic_timeout() { + if (!current_gate_mode_) { + return true; + } + + if (current_gate_mode_->data == tier4_control_msgs::msg::GateMode::AUTO) { + latest_emergency_stop_heartbeat_received_time_ = nullptr; + } + if (!latest_emergency_stop_heartbeat_received_time_) { return wait_for_first_topic_; } @@ -205,8 +216,6 @@ bool ExternalCmdConverterNode::check_emergency_stop_topic_timeout() bool ExternalCmdConverterNode::check_remote_topic_rate() { - current_gate_mode_ = gate_mode_sub_.takeData(); - if (!current_gate_mode_) { return true; } From d5f68ac611055ea4e776afc347d6dd238bf64881 Mon Sep 17 00:00:00 2001 From: Mitsuhiro Sakamoto <50359861+mitukou1109@users.noreply.github.com> Date: Thu, 11 Jul 2024 13:08:28 +0900 Subject: [PATCH 148/306] feat(obstacle_cruise_planner): prevent chattering when using point cloud (#7861) * prevent chattering of stop planning Signed-off-by: mitukou1109 * Update planning/autoware_obstacle_cruise_planner/src/node.cpp Co-authored-by: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> * fix stop position oscillation Signed-off-by: mitukou1109 --------- Signed-off-by: mitukou1109 Co-authored-by: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> --- .../autoware/obstacle_cruise_planner/node.hpp | 13 +++-- .../src/node.cpp | 47 +++++++++++++++---- 2 files changed, 46 insertions(+), 14 deletions(-) diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/node.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/node.hpp index b96605f57b943..d4094ff08c3f0 100644 --- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/node.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/node.hpp @@ -192,10 +192,13 @@ class ObstacleCruisePlannerNode : public rclcpp::Node // planner std::unique_ptr planner_ptr_{nullptr}; - // previous obstacles - std::vector prev_stop_obstacles_; - std::vector prev_cruise_obstacles_; - std::vector prev_slow_down_obstacles_; + // previous PredictedObject-based obstacles + std::vector prev_stop_object_obstacles_; + std::vector prev_cruise_object_obstacles_; + std::vector prev_slow_down_object_obstacles_; + + // PointCloud-based stop obstacle history + std::vector stop_pc_obstacle_history_; // behavior determination parameter struct BehaviorDeterminationParam @@ -303,7 +306,7 @@ class ObstacleCruisePlannerNode : public rclcpp::Node bool enable_slow_down_planning_{false}; bool use_pointcloud_{false}; - std::vector prev_closest_stop_obstacles_{}; + std::vector prev_closest_stop_object_obstacles_{}; std::unique_ptr logger_configure_; diff --git a/planning/autoware_obstacle_cruise_planner/src/node.cpp b/planning/autoware_obstacle_cruise_planner/src/node.cpp index ec0b70e4e1b2d..2734ee8866c6e 100644 --- a/planning/autoware_obstacle_cruise_planner/src/node.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/node.cpp @@ -597,7 +597,7 @@ void ObstacleCruisePlannerNode::onTrajectory(const Trajectory::ConstSharedPtr ms concatenate(cruise_obstacles, cruise_object_obstacles); concatenate(slow_down_obstacles, slow_down_object_obstacles); } - if (pointcloud_ptr && !pointcloud_ptr->data.empty()) { + if (pointcloud_ptr) { const auto target_obstacles = convertToObstacles(ego_odom, *pointcloud_ptr, traj_points, msg->header); @@ -822,7 +822,7 @@ std::vector ObstacleCruisePlannerNode::convertToObstacles( transform_stamped = std::nullopt; } - if (transform_stamped) { + if (!pointcloud.data.empty() && transform_stamped) { // 1. transform pointcloud PointCloud::Ptr pointcloud_ptr(new PointCloud); pcl::fromROSMsg(pointcloud, *pointcloud_ptr); @@ -1033,9 +1033,9 @@ ObstacleCruisePlannerNode::determineEgoBehaviorAgainstPredictedObjectObstacles( checkConsistency(objects.header.stamp, objects, stop_obstacles); // update previous obstacles - prev_stop_obstacles_ = stop_obstacles; - prev_cruise_obstacles_ = cruise_obstacles; - prev_slow_down_obstacles_ = slow_down_obstacles; + prev_stop_object_obstacles_ = stop_obstacles; + prev_cruise_object_obstacles_ = cruise_obstacles; + prev_slow_down_object_obstacles_ = slow_down_obstacles; const double calculation_time = stop_watch_.toc(__func__); RCLCPP_INFO_EXPRESSION( @@ -1052,6 +1052,8 @@ ObstacleCruisePlannerNode::determineEgoBehaviorAgainstPointCloudObstacles( { stop_watch_.tic(__func__); + const auto & p = behavior_determination_param_; + // calculated decimated trajectory points and trajectory polygon const auto decimated_traj_points = decimateTrajectoryPoints(odometry, traj_points); const auto decimated_traj_polys = @@ -1078,6 +1080,32 @@ ObstacleCruisePlannerNode::determineEgoBehaviorAgainstPointCloudObstacles( } } + std::vector past_stop_obstacles; + for (auto itr = stop_pc_obstacle_history_.begin(); itr != stop_pc_obstacle_history_.end();) { + const double elapsed_time = (rclcpp::Time(odometry.header.stamp) - itr->stamp).seconds(); + if (elapsed_time >= p.stop_obstacle_hold_time_threshold) { + itr = stop_pc_obstacle_history_.erase(itr); + continue; + } + + const auto lat_dist_from_obstacle_to_traj = + autoware::motion_utils::calcLateralOffset(traj_points, itr->collision_point); + const auto min_lat_dist_to_traj_poly = + std::abs(lat_dist_from_obstacle_to_traj) - vehicle_info_.vehicle_width_m; + + if (min_lat_dist_to_traj_poly < p.max_lat_margin_for_stop_against_unknown) { + auto stop_obstacle = *itr; + stop_obstacle.dist_to_collide_on_decimated_traj = autoware::motion_utils::calcSignedArcLength( + decimated_traj_points, 0, stop_obstacle.collision_point); + past_stop_obstacles.push_back(stop_obstacle); + } + + ++itr; + } + + concatenate(stop_pc_obstacle_history_, stop_obstacles); + concatenate(stop_obstacles, past_stop_obstacles); + const double calculation_time = stop_watch_.toc(__func__); RCLCPP_INFO_EXPRESSION( rclcpp::get_logger("ObstacleCruisePlanner"), enable_calculation_time_info_, " %s := %f [ms]", @@ -1308,7 +1336,7 @@ ObstacleCruisePlannerNode::createCollisionPointsForInsideCruiseObstacle( // const bool is_prev_obstacle_stop = getObstacleFromUuid(prev_stop_obstacles_, // obstacle.uuid).has_value(); const bool is_prev_obstacle_cruise = - getObstacleFromUuid(prev_cruise_obstacles_, obstacle.uuid).has_value(); + getObstacleFromUuid(prev_cruise_object_obstacles_, obstacle.uuid).has_value(); if (is_prev_obstacle_cruise) { if (obstacle_tangent_vel < p.obstacle_velocity_threshold_from_cruise_to_stop) { @@ -1555,7 +1583,7 @@ std::optional ObstacleCruisePlannerNode::createSlowDownObstacl slow_down_condition_counter_.addCurrentUuid(obstacle.uuid); const bool is_prev_obstacle_slow_down = - getObstacleFromUuid(prev_slow_down_obstacles_, obstacle.uuid).has_value(); + getObstacleFromUuid(prev_slow_down_object_obstacles_, obstacle.uuid).has_value(); if (!enable_slow_down_planning_ || !isSlowDownObstacle(obstacle.classification.label)) { return std::nullopt; @@ -1694,7 +1722,7 @@ void ObstacleCruisePlannerNode::checkConsistency( const rclcpp::Time & current_time, const PredictedObjects & predicted_objects, std::vector & stop_obstacles) { - for (const auto & prev_closest_stop_obstacle : prev_closest_stop_obstacles_) { + for (const auto & prev_closest_stop_obstacle : prev_closest_stop_object_obstacles_) { const auto predicted_object_itr = std::find_if( predicted_objects.objects.begin(), predicted_objects.objects.end(), [&prev_closest_stop_obstacle](const PredictedObject & po) { @@ -1724,7 +1752,8 @@ void ObstacleCruisePlannerNode::checkConsistency( } } - prev_closest_stop_obstacles_ = obstacle_cruise_utils::getClosestStopObstacles(stop_obstacles); + prev_closest_stop_object_obstacles_ = + obstacle_cruise_utils::getClosestStopObstacles(stop_obstacles); } bool ObstacleCruisePlannerNode::isObstacleCrossing( From cb6af80add25a98540a8692ce71ed3c5e8b935e6 Mon Sep 17 00:00:00 2001 From: Dmitrii Koldaev <39071246+dkoldaev@users.noreply.github.com> Date: Thu, 11 Jul 2024 14:13:54 +0900 Subject: [PATCH 149/306] feat(duplicated_node_checker): add duplicate nodes to ignore (#7959) * feat: add duplicate nodes to ignore Signed-off-by: Dmitrii Koldaev * remove talker Signed-off-by: Dmitrii Koldaev * newline Signed-off-by: Dmitrii Koldaev * commments Signed-off-by: Dmitrii Koldaev * pre-commit and sign Signed-off-by: Dmitrii Koldaev * rviz->rviz2 Signed-off-by: Dmitrii Koldaev --------- Signed-off-by: Dmitrii Koldaev Co-authored-by: Dmitrii Koldaev --- .../config/duplicated_node_checker.param.yaml | 2 ++ .../duplicated_node_checker/duplicated_node_checker_core.hpp | 4 ++++ .../src/duplicated_node_checker_core.cpp | 5 +++++ 3 files changed, 11 insertions(+) diff --git a/system/duplicated_node_checker/config/duplicated_node_checker.param.yaml b/system/duplicated_node_checker/config/duplicated_node_checker.param.yaml index 96dce7eb360e4..412c59e66e2c9 100644 --- a/system/duplicated_node_checker/config/duplicated_node_checker.param.yaml +++ b/system/duplicated_node_checker/config/duplicated_node_checker.param.yaml @@ -2,3 +2,5 @@ ros__parameters: update_rate: 10.0 add_duplicated_node_names_to_msg: true # if true, duplicated node names are added to msg + nodes_to_ignore: # List of nodes to ignore when checking for duplicates + - /rviz2 diff --git a/system/duplicated_node_checker/include/duplicated_node_checker/duplicated_node_checker_core.hpp b/system/duplicated_node_checker/include/duplicated_node_checker/duplicated_node_checker_core.hpp index 9d806754f3c20..66e125de666b7 100644 --- a/system/duplicated_node_checker/include/duplicated_node_checker/duplicated_node_checker_core.hpp +++ b/system/duplicated_node_checker/include/duplicated_node_checker/duplicated_node_checker_core.hpp @@ -33,6 +33,9 @@ class DuplicatedNodeChecker : public rclcpp::Node std::unordered_set unique_names; std::vector identical_names; for (auto name : input_name_lists) { + if (nodes_to_ignore_.count(name) != 0) { + continue; + } if (unique_names.find(name) != unique_names.end()) { identical_names.push_back(name); } else { @@ -49,6 +52,7 @@ class DuplicatedNodeChecker : public rclcpp::Node diagnostic_updater::Updater updater_{this}; rclcpp::TimerBase::SharedPtr timer_; bool add_duplicated_node_names_to_msg_; + std::unordered_set nodes_to_ignore_; }; } // namespace duplicated_node_checker diff --git a/system/duplicated_node_checker/src/duplicated_node_checker_core.cpp b/system/duplicated_node_checker/src/duplicated_node_checker_core.cpp index 384c8fdc46c5f..c9bc07cffde72 100644 --- a/system/duplicated_node_checker/src/duplicated_node_checker_core.cpp +++ b/system/duplicated_node_checker/src/duplicated_node_checker_core.cpp @@ -29,6 +29,11 @@ DuplicatedNodeChecker::DuplicatedNodeChecker(const rclcpp::NodeOptions & node_op { double update_rate = declare_parameter("update_rate"); add_duplicated_node_names_to_msg_ = declare_parameter("add_duplicated_node_names_to_msg"); + + std::vector nodes_to_ignore_vector = + declare_parameter>("nodes_to_ignore"); + nodes_to_ignore_.insert(nodes_to_ignore_vector.begin(), nodes_to_ignore_vector.end()); + updater_.setHardwareID("duplicated_node_checker"); updater_.add("duplicated_node_checker", this, &DuplicatedNodeChecker::produceDiagnostics); From 99a245efddc9ad277f80d9228fdfb7aadb1a9680 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Thu, 11 Jul 2024 15:24:06 +0900 Subject: [PATCH 150/306] perf(dynamic_obstacle_stop): construct rtree nodes in place (#7753) Signed-off-by: Maxime CLEMENT --- .../src/footprint.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/footprint.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/footprint.cpp index 73189e732b312..8f59160a56f2a 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/footprint.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/footprint.cpp @@ -79,7 +79,7 @@ void make_ego_footprint_rtree(EgoData & ego_data, const PlannerParam & params) for (auto i = 0UL; i < ego_data.trajectory_footprints.size(); ++i) { const auto box = boost::geometry::return_envelope( ego_data.trajectory_footprints[i]); - rtree_nodes.push_back(std::make_pair(box, i)); + rtree_nodes.emplace_back(box, i); } ego_data.rtree = Rtree(rtree_nodes); } From 34123c5c38fce4adefe60de07b5bde1433f7f1bc Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 11 Jul 2024 15:46:57 +0900 Subject: [PATCH 151/306] fix(ci): ignore only-hpp-package in cppcheck-differential (#7961) * fix(ci): ignore only-hpp-package in cppcheck-differential Signed-off-by: veqcc * test Signed-off-by: veqcc * test Signed-off-by: veqcc --------- Signed-off-by: veqcc --- .github/workflows/cppcheck-differential.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cppcheck-differential.yaml b/.github/workflows/cppcheck-differential.yaml index 63f15cb9da319..dc4fed1084bc0 100644 --- a/.github/workflows/cppcheck-differential.yaml +++ b/.github/workflows/cppcheck-differential.yaml @@ -58,7 +58,7 @@ jobs: run: | filtered_paths="" for dir in ${{ steps.get-full-paths.outputs.full-paths }}; do - if [ -d "$dir" ] && find "$dir" -name "*.cpp" -o -name "*.hpp" | grep -q .; then + if [ -d "$dir" ] && find "$dir" -name "*.cpp" | grep -q .; then filtered_paths="$filtered_paths $dir" fi done From ca4579f573f9babdb6ccf24844e59bb2aaf3fa76 Mon Sep 17 00:00:00 2001 From: Satoshi Tanaka <16330533+scepter914@users.noreply.github.com> Date: Thu, 11 Jul 2024 16:13:29 +0900 Subject: [PATCH 152/306] chore(perception_utils): delete maintainer (#7899) Signed-off-by: scepter914 --- common/perception_utils/package.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/common/perception_utils/package.xml b/common/perception_utils/package.xml index 9d5fbf40a4e89..a6bfbc42090fe 100644 --- a/common/perception_utils/package.xml +++ b/common/perception_utils/package.xml @@ -4,7 +4,6 @@ perception_utils 0.1.0 The perception_utils package - Satoshi Tanaka Shunsuke Miura Yoshi Ri Apache License 2.0 From ec0e7e61bc241ec333ef527feb1a58698ff57d1f Mon Sep 17 00:00:00 2001 From: Koichi98 <45482193+Koichi98@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:06:12 +0900 Subject: [PATCH 153/306] fix(tensorrt_yolox): fix cstyleCast to reinterpret_cast (#7873) * fix(tensorrt_yolox): fix cstyleCast to reinterpret_cast Signed-off-by: Koichi Imai * style(pre-commit): autofix * fix(tensorrt_yolox): fix cstyleCast to reinterpret_cast Signed-off-by: Koichi Imai * style(pre-commit): autofix --------- Signed-off-by: Koichi Imai Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- perception/tensorrt_yolox/src/tensorrt_yolox.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/perception/tensorrt_yolox/src/tensorrt_yolox.cpp b/perception/tensorrt_yolox/src/tensorrt_yolox.cpp index bb6975d7a1f21..25f762e2a4ec8 100644 --- a/perception/tensorrt_yolox/src/tensorrt_yolox.cpp +++ b/perception/tensorrt_yolox/src/tensorrt_yolox.cpp @@ -1205,8 +1205,8 @@ cv::Mat TrtYoloX::getMaskImageGpu(float * d_prob, nvinfer1::Dims dims, int out_w cv::Mat mask = cv::Mat::zeros(out_h, out_w, CV_8UC1); int index = b * out_w * out_h; argmax_gpu( - (unsigned char *)argmax_buf_d_.get() + index, d_prob, out_w, out_h, width, height, classes, 1, - *stream_); + reinterpret_cast(argmax_buf_d_.get()) + index, d_prob, out_w, out_h, width, + height, classes, 1, *stream_); CHECK_CUDA_ERROR(cudaMemcpyAsync( argmax_buf_h_.get(), argmax_buf_d_.get(), sizeof(unsigned char) * 1 * out_w * out_h, cudaMemcpyDeviceToHost, *stream_)); From 6f2fc3aac57cda3fa75e146b58683fd775f6c8b0 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:14:26 +0900 Subject: [PATCH 154/306] fix(autoware_behavior_path_planner_common): fix shadowVariable (#7965) fix:shadowVariable Signed-off-by: kobayu858 --- .../autoware_behavior_path_planner_common/src/utils/utils.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/utils.cpp index b7955da9a44f1..aa16f1bb23b79 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/utils.cpp @@ -1268,8 +1268,8 @@ lanelet::ConstLanelets getCurrentLanesFromPath( const auto & p = planner_data->parameters; std::set lane_ids; - for (const auto & p : path.points) { - for (const auto & id : p.lane_ids) { + for (const auto & point : path.points) { + for (const auto & id : point.lane_ids) { lane_ids.insert(id); } } From 11282b666fe47af2ff84e00762ea5108313299ef Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:15:20 +0900 Subject: [PATCH 155/306] fix(autoware_behavior_path_sampling_planner_module): fix shadowVariable (#7966) * fix:shadowVariable Signed-off-by: kobayu858 * refactor:clang format Signed-off-by: kobayu858 * fix:shadowVariable Signed-off-by: kobayu858 * refactor:CodeSence Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../src/manager.cpp | 2 -- .../src/sampling_planner_module.cpp | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/src/manager.cpp b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/src/manager.cpp index af8a538f894cc..b2b86433002cc 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/src/manager.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/src/manager.cpp @@ -81,8 +81,6 @@ void SamplingPlannerModuleManager::updateModuleParams( auto & p = parameters_; - [[maybe_unused]] const std::string ns = name_ + "."; - { std::string ns{"constraints.hard"}; updateParam(parameters, ns + ".max_curvature", p->max_curvature); diff --git a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/src/sampling_planner_module.cpp b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/src/sampling_planner_module.cpp index 526a761e6957a..3990a2fbf5475 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/src/sampling_planner_module.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_sampling_planner_module/src/sampling_planner_module.cpp @@ -553,8 +553,8 @@ BehaviorModuleOutput SamplingPlannerModule::plan() prepareSamplingParameters(future_state, reference_spline, *internal_params_); auto extension_frenet_paths = autoware::frenet_planner::generatePaths( reference_spline, frenet_reuse_state, extension_sampling_parameters); - for (auto & p : extension_frenet_paths) { - if (!p.points.empty()) frenet_paths.push_back(reused_path.extend(p)); + for (auto & path : extension_frenet_paths) { + if (!path.points.empty()) frenet_paths.push_back(reused_path.extend(path)); } } } else { From 91ba9a5b7d82652a9a7d2d12136c9c9607a31386 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:39:49 +0900 Subject: [PATCH 156/306] fix(autoware_behavior_path_lane_change_module): fix shadowVariable (#7964) fix:shadowVariable Signed-off-by: kobayu858 --- .../src/scene.cpp | 32 +++++++++---------- .../src/utils/utils.cpp | 8 ++--- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp index f3e05eca1e92d..8cf67f8cfc66f 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp @@ -1445,7 +1445,7 @@ bool NormalLaneChange::getLaneChangePaths( RCLCPP_DEBUG(logger_, " - sampling num for lat_acc: %lu", sample_lat_acc.size()); for (const auto & lateral_acc : sample_lat_acc) { - const auto debug_print = [&](const auto & s) { + const auto debug_print_lat = [&](const auto & s) { RCLCPP_DEBUG_STREAM( logger_, " - " << s << " : prep_time = " << prepare_duration << ", lon_acc = " << sampled_longitudinal_acc << ", lat_acc = " << lateral_acc); @@ -1467,7 +1467,7 @@ bool NormalLaneChange::getLaneChangePaths( prepare_segment, current_velocity, terminal_lane_changing_velocity); if (lane_changing_length + prepare_length > dist_to_end_of_current_lanes) { - debug_print("Reject: length of lane changing path is longer than length to goal!!"); + debug_print_lat("Reject: length of lane changing path is longer than length to goal!!"); continue; } @@ -1486,7 +1486,7 @@ bool NormalLaneChange::getLaneChangePaths( s_start + lane_changing_length + finish_judge_buffer + backward_buffer + next_lane_change_buffer > s_goal) { - debug_print("Reject: length of lane changing path is longer than length to goal!!"); + debug_print_lat("Reject: length of lane changing path is longer than length to goal!!"); continue; } } @@ -1496,7 +1496,7 @@ bool NormalLaneChange::getLaneChangePaths( initial_lane_changing_velocity, next_lane_change_buffer); if (target_segment.points.empty()) { - debug_print("Reject: target segment is empty!! something wrong..."); + debug_print_lat("Reject: target segment is empty!! something wrong..."); continue; } @@ -1527,7 +1527,7 @@ bool NormalLaneChange::getLaneChangePaths( lane_change_info.terminal_lane_changing_velocity = terminal_lane_changing_velocity; if (!is_valid_start_point) { - debug_print( + debug_print_lat( "Reject: lane changing points are not inside of the target preferred lanes or its " "neighbors"); continue; @@ -1541,7 +1541,7 @@ bool NormalLaneChange::getLaneChangePaths( next_lane_change_buffer); if (target_lane_reference_path.points.empty()) { - debug_print("Reject: target_lane_reference_path is empty!!"); + debug_print_lat("Reject: target_lane_reference_path is empty!!"); continue; } @@ -1553,12 +1553,12 @@ bool NormalLaneChange::getLaneChangePaths( sorted_lane_ids); if (!candidate_path) { - debug_print("Reject: failed to generate candidate path!!"); + debug_print_lat("Reject: failed to generate candidate path!!"); continue; } if (!hasEnoughLength(*candidate_path, current_lanes, target_lanes, direction)) { - debug_print("Reject: invalid candidate path!!"); + debug_print_lat("Reject: invalid candidate path!!"); continue; } @@ -1566,7 +1566,7 @@ bool NormalLaneChange::getLaneChangePaths( lane_change_parameters_->regulate_on_crosswalk && !hasEnoughLengthToCrosswalk(*candidate_path, current_lanes)) { if (getStopTime() < lane_change_parameters_->stop_time_threshold) { - debug_print("Reject: including crosswalk!!"); + debug_print_lat("Reject: including crosswalk!!"); continue; } RCLCPP_INFO_THROTTLE( @@ -1577,7 +1577,7 @@ bool NormalLaneChange::getLaneChangePaths( lane_change_parameters_->regulate_on_intersection && !hasEnoughLengthToIntersection(*candidate_path, current_lanes)) { if (getStopTime() < lane_change_parameters_->stop_time_threshold) { - debug_print("Reject: including intersection!!"); + debug_print_lat("Reject: including intersection!!"); continue; } RCLCPP_WARN_STREAM( @@ -1587,14 +1587,14 @@ bool NormalLaneChange::getLaneChangePaths( if ( lane_change_parameters_->regulate_on_traffic_light && !hasEnoughLengthToTrafficLight(*candidate_path, current_lanes)) { - debug_print("Reject: regulate on traffic light!!"); + debug_print_lat("Reject: regulate on traffic light!!"); continue; } if (utils::traffic_light::isStoppedAtRedTrafficLightWithinDistance( lane_change_info.current_lanes, candidate_path.value().path, planner_data_, lane_change_info.length.sum())) { - debug_print("Ego is stopping near traffic light. Do not allow lane change"); + debug_print_lat("Ego is stopping near traffic light. Do not allow lane change"); continue; } candidate_paths->push_back(*candidate_path); @@ -1604,14 +1604,14 @@ bool NormalLaneChange::getLaneChangePaths( route_handler, *candidate_path, filtered_objects.target_lane, lane_change_buffer, is_goal_in_route, *lane_change_parameters_, lane_change_debug_.collision_check_objects)) { - debug_print( + debug_print_lat( "Reject: parking vehicle exists in the target lane, and the ego is not in stuck. Skip " "lane change."); return false; } if (!check_safety) { - debug_print("ACCEPT!!!: it is valid (and safety check is skipped)."); + debug_print_lat("ACCEPT!!!: it is valid (and safety check is skipped)."); return false; } @@ -1619,11 +1619,11 @@ bool NormalLaneChange::getLaneChangePaths( *candidate_path, target_objects, rss_params, lane_change_debug_.collision_check_objects); if (is_safe) { - debug_print("ACCEPT!!!: it is valid and safe!"); + debug_print_lat("ACCEPT!!!: it is valid and safe!"); return true; } - debug_print("Reject: sampled path is not safe."); + debug_print_lat("Reject: sampled path is not safe."); } } } diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp index ad789975cbcd7..ead047f839f47 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp @@ -888,7 +888,7 @@ bool isParkedObject( const auto most_left_lanelet_candidates = route_handler.getLaneletMapPtr()->laneletLayer.findUsages(most_left_road_lanelet.leftBound()); lanelet::ConstLanelet most_left_lanelet = most_left_road_lanelet; - const lanelet::Attribute sub_type = + const lanelet::Attribute most_left_sub_type = most_left_lanelet.attribute(lanelet::AttributeName::Subtype); for (const auto & ll : most_left_lanelet_candidates) { @@ -898,7 +898,7 @@ bool isParkedObject( } } bound = most_left_lanelet.leftBound2d().basicLineString(); - if (sub_type.value() != "road_shoulder") { + if (most_left_sub_type.value() != "road_shoulder") { center_to_bound_buffer = object_check_min_road_shoulder_width; } } else { @@ -909,7 +909,7 @@ bool isParkedObject( most_right_road_lanelet.rightBound()); lanelet::ConstLanelet most_right_lanelet = most_right_road_lanelet; - const lanelet::Attribute sub_type = + const lanelet::Attribute most_right_sub_type = most_right_lanelet.attribute(lanelet::AttributeName::Subtype); for (const auto & ll : most_right_lanelet_candidates) { @@ -919,7 +919,7 @@ bool isParkedObject( } } bound = most_right_lanelet.rightBound2d().basicLineString(); - if (sub_type.value() != "road_shoulder") { + if (most_right_sub_type.value() != "road_shoulder") { center_to_bound_buffer = object_check_min_road_shoulder_width; } } From 5ce1d3af52fe624d4f438275378c1c667eacec52 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 11 Jul 2024 17:53:30 +0900 Subject: [PATCH 157/306] fix(probabilistic_occupancy_grid_map): fix shadowVariable (#7942) * fix:shadowVariable Signed-off-by: kobayu858 * refactor: use range-based for loop Signed-off-by: kobayu858 * style: rename variable Signed-off-by: kobayu858 * style: rename variable Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../lib/costmap_2d/occupancy_grid_map_fixed.cpp | 7 +++---- .../lib/costmap_2d/occupancy_grid_map_projective.cpp | 7 +++---- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp index f25009d47bdcc..dffbda18d0c8a 100644 --- a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp @@ -201,11 +201,10 @@ void OccupancyGridMapFixedBlindSpot::updateWithPointCloud( } // Third step: Overwrite occupied cell - for (size_t bin_index = 0; bin_index < obstacle_pointcloud_angle_bins.size(); ++bin_index) { - auto & obstacle_pointcloud_angle_bin = obstacle_pointcloud_angle_bins.at(bin_index); + for (auto & obstacle_pointcloud_angle_bin : obstacle_pointcloud_angle_bins) { for (size_t dist_index = 0; dist_index < obstacle_pointcloud_angle_bin.size(); ++dist_index) { - const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); - setCellValue(source.wx, source.wy, cost_value::LETHAL_OBSTACLE); + const auto & obstacle_point = obstacle_pointcloud_angle_bin.at(dist_index); + setCellValue(obstacle_point.wx, obstacle_point.wy, cost_value::LETHAL_OBSTACLE); if (dist_index + 1 == obstacle_pointcloud_angle_bin.size()) { continue; diff --git a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp index a2400fb3c81b2..39224bc7e3a69 100644 --- a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp @@ -261,11 +261,10 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( if (pub_debug_grid_) converter.addLayerFromCostmap2D(*this, "added_unknown", debug_grid_); // Third step: Overwrite occupied cell - for (size_t bin_index = 0; bin_index < obstacle_pointcloud_angle_bins.size(); ++bin_index) { - auto & obstacle_pointcloud_angle_bin = obstacle_pointcloud_angle_bins.at(bin_index); + for (auto & obstacle_pointcloud_angle_bin : obstacle_pointcloud_angle_bins) { for (size_t dist_index = 0; dist_index < obstacle_pointcloud_angle_bin.size(); ++dist_index) { - const auto & source = obstacle_pointcloud_angle_bin.at(dist_index); - setCellValue(source.wx, source.wy, cost_value::LETHAL_OBSTACLE); + const auto & obstacle_point = obstacle_pointcloud_angle_bin.at(dist_index); + setCellValue(obstacle_point.wx, obstacle_point.wy, cost_value::LETHAL_OBSTACLE); if (dist_index + 1 == obstacle_pointcloud_angle_bin.size()) { continue; From 03152b8e9029a6b1e4a4cf885b374ef11a368a62 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Thu, 11 Jul 2024 18:38:06 +0900 Subject: [PATCH 158/306] feat(cruise_planner,planning_evaluator): add cruise and slow down diags (#7960) * add cruise and slow down diags to cruise planner Signed-off-by: Daniel Sanchez * add cruise types Signed-off-by: Daniel Sanchez * adjust planning eval Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .../planning_evaluator_node.hpp | 4 +- .../src/planning_evaluator_node.cpp | 16 +- .../common_structs.hpp | 5 + .../planner_interface.hpp | 8 + .../src/node.cpp | 1 + .../optimization_based_planner.cpp | 2 + .../pid_based_planner/pid_based_planner.cpp | 1 + .../src/planner_interface.cpp | 171 ++++++++++-------- 8 files changed, 130 insertions(+), 78 deletions(-) diff --git a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp index 6925cb15e8fad..e15427c59ce06 100644 --- a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp +++ b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp @@ -181,7 +181,9 @@ class PlanningEvaluatorNode : public rclcpp::Node rclcpp::TimerBase::SharedPtr timer_; // queue for diagnostics and time stamp std::deque> diag_queue_; - const std::vector target_functions_ = {"obstacle_cruise_planner"}; + const std::vector target_functions_ = { + "obstacle_cruise_planner_stop", "obstacle_cruise_planner_slow_down", + "obstacle_cruise_planner_cruise"}; std::optional prev_acc_stamped_{std::nullopt}; }; } // namespace planning_diagnostics diff --git a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp index ae3416b9cba8f..e02367407f4ae 100644 --- a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp +++ b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp @@ -122,7 +122,21 @@ DiagnosticStatus PlanningEvaluatorNode::generateDiagnosticEvaluationStatus( }); const bool found = it != diag.values.end(); status.level = (found) ? status.OK : status.ERROR; - status.values.push_back((found) ? *it : diagnostic_msgs::msg::KeyValue{}); + + auto get_key_value = [&]() { + if (!found) { + return diagnostic_msgs::msg::KeyValue{}; + } + if (it->value.find("none") != std::string::npos) { + return *it; + } + diagnostic_msgs::msg::KeyValue key_value; + key_value.key = "decision"; + key_value.value = "deceleration"; + return key_value; + }; + + status.values.push_back(get_key_value()); return status; } diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp index fc8a0a96ade42..f2a475c494aba 100644 --- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/common_structs.hpp @@ -25,6 +25,8 @@ #include +#include + #include #include #include @@ -286,6 +288,9 @@ struct DebugData MarkerArray cruise_wall_marker; MarkerArray slow_down_wall_marker; std::vector detection_polygons; + std::optional stop_reason_diag{std::nullopt}; + std::optional slow_down_reason_diag{std::nullopt}; + std::optional cruise_reason_diag{std::nullopt}; }; struct EgoNearestParam diff --git a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp index 0b54542cbea85..099d80306bb4e 100644 --- a/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp +++ b/planning/autoware_obstacle_cruise_planner/include/autoware/obstacle_cruise_planner/planner_interface.hpp @@ -95,6 +95,14 @@ class PlannerInterface const std::vector & slow_down_obstacles, std::optional & vel_limit); + DiagnosticStatus makeEmptyDiagnostic(const std::string & reason); + DiagnosticStatus makeDiagnostic( + const std::string & reason, const std::optional & planner_data = std::nullopt, + const std::optional & stop_pose = std::nullopt, + const std::optional & stop_obstacle = std::nullopt); + void publishDiagnostics(const rclcpp::Time & current_time); + void clearDiagnostics(); + void onParam(const std::vector & parameters) { updateCommonParam(parameters); diff --git a/planning/autoware_obstacle_cruise_planner/src/node.cpp b/planning/autoware_obstacle_cruise_planner/src/node.cpp index 2734ee8866c6e..210577d92ef93 100644 --- a/planning/autoware_obstacle_cruise_planner/src/node.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/node.cpp @@ -636,6 +636,7 @@ void ObstacleCruisePlannerNode::onTrajectory(const Trajectory::ConstSharedPtr ms // 8. Publish debug data published_time_publisher_->publish_if_subscribed(trajectory_pub_, output_traj.header.stamp); + planner_ptr_->publishDiagnostics(now()); publishDebugMarker(); publishDebugInfo(); diff --git a/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp index b3a0fc014c410..899cc66cb4331 100644 --- a/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/optimization_based_planner/optimization_based_planner.cpp @@ -199,6 +199,7 @@ std::vector OptimizationBasedPlanner::generateCruiseTrajectory( output.at(i).longitudinal_velocity_mps = 0.0; } prev_output_ = output; + debug_data_ptr_->cruise_reason_diag = makeDiagnostic("cruise", planner_data); return output; } else if (opt_position.size() == 1) { RCLCPP_DEBUG( @@ -255,6 +256,7 @@ std::vector OptimizationBasedPlanner::generateCruiseTrajectory( // Insert Closest Stop Point autoware::motion_utils::insertStopPoint(0, closest_stop_dist, output); + debug_data_ptr_->cruise_reason_diag = makeDiagnostic("cruise", planner_data); prev_output_ = output; return output; } diff --git a/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp b/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp index d0736c6158a7a..a021e87e6199e 100644 --- a/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/pid_based_planner/pid_based_planner.cpp @@ -323,6 +323,7 @@ std::vector PIDBasedPlanner::planCruise( // cruise obstacle debug_data_ptr_->obstacles_to_cruise.push_back(cruise_obstacle_info->obstacle); + debug_data_ptr_->cruise_reason_diag = makeDiagnostic("cruise", planner_data); } // do cruise planning diff --git a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp index c531c4fefac95..0b9a9eaa9d58c 100644 --- a/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp +++ b/planning/autoware_obstacle_cruise_planner/src/planner_interface.cpp @@ -25,6 +25,7 @@ #include #include +#include #include namespace @@ -106,78 +107,6 @@ VelocityFactorArray makeVelocityFactorArray( return velocity_factor_array; } -DiagnosticArray makeEmptyStopReasonDiagnosticArray(const rclcpp::Time & current_time) -{ - // Create status - DiagnosticStatus status; - status.level = status.OK; - status.name = "obstacle_cruise_planner"; - diagnostic_msgs::msg::KeyValue key_value; - { - // Decision - key_value.key = "decision"; - key_value.value = "none"; - status.values.push_back(key_value); - } - // create array - DiagnosticArray diagnostics; - diagnostics.header.stamp = current_time; - diagnostics.header.frame_id = "map"; - diagnostics.status.push_back(status); - return diagnostics; -} - -DiagnosticArray makeStopReasonDiagnosticArray( - const PlannerData & planner_data, const geometry_msgs::msg::Pose & stop_pose, - const StopObstacle & stop_obstacle) -{ - // Create status - DiagnosticStatus status; - status.level = status.OK; - status.name = "obstacle_cruise_planner"; - diagnostic_msgs::msg::KeyValue key_value; - { - // Decision - key_value.key = "decision"; - key_value.value = "stop"; - status.values.push_back(key_value); - } - - { // Stop info - key_value.key = "stop_position"; - const auto & p = stop_pose.position; - key_value.value = - "{" + std::to_string(p.x) + ", " + std::to_string(p.y) + ", " + std::to_string(p.z) + "}"; - status.values.push_back(key_value); - key_value.key = "stop_orientation"; - const auto & o = stop_pose.orientation; - key_value.value = "{" + std::to_string(o.w) + ", " + std::to_string(o.x) + ", " + - std::to_string(o.y) + ", " + std::to_string(o.z) + "}"; - status.values.push_back(key_value); - const auto dist_to_stop_pose = autoware::motion_utils::calcSignedArcLength( - planner_data.traj_points, planner_data.ego_pose.position, stop_pose.position); - key_value.key = "distance_to_stop_pose"; - key_value.value = std::to_string(dist_to_stop_pose); - status.values.push_back(key_value); - } - - { - // Obstacle info - const auto & p = stop_obstacle.collision_point; - key_value.key = "collision_point"; - key_value.value = - "{" + std::to_string(p.x) + ", " + std::to_string(p.y) + ", " + std::to_string(p.z) + "}"; - status.values.push_back(key_value); - } - - // create array - DiagnosticArray diagnostics; - diagnostics.header.stamp = planner_data.current_time; - diagnostics.header.frame_id = "map"; - diagnostics.status.push_back(status); - return diagnostics; -} - double calcMinimumDistanceToStop( const double initial_vel, const double max_acc, const double min_acc) { @@ -319,7 +248,6 @@ std::vector PlannerInterface::generateStopTrajectory( if (stop_obstacles.empty()) { stop_reasons_pub_->publish(makeEmptyStopReasonArray(planner_data.current_time)); velocity_factors_pub_->publish(makeVelocityFactorArray(planner_data.current_time)); - diagnostics_pub_->publish(makeEmptyStopReasonDiagnosticArray(planner_data.current_time)); // delete marker const auto markers = autoware::motion_utils::createDeletedStopVirtualWallMarker(planner_data.current_time, 0); @@ -474,11 +402,11 @@ std::vector PlannerInterface::generateStopTrajectory( const auto stop_pose = output_traj_points.at(*zero_vel_idx).pose; const auto stop_reasons_msg = makeStopReasonArray(planner_data, stop_pose, *determined_stop_obstacle); - const auto stop_reason_diagnostic_array = - makeStopReasonDiagnosticArray(planner_data, stop_pose, *determined_stop_obstacle); stop_reasons_pub_->publish(stop_reasons_msg); velocity_factors_pub_->publish(makeVelocityFactorArray(planner_data.current_time, stop_pose)); - diagnostics_pub_->publish(stop_reason_diagnostic_array); + // Store stop reason debug data + debug_data_ptr_->stop_reason_diag = + makeDiagnostic("stop", planner_data, stop_pose, *determined_stop_obstacle); // Publish if ego vehicle will over run against the stop point with a limit acceleration const bool will_over_run = determined_zero_vel_dist.value() > @@ -747,7 +675,11 @@ std::vector PlannerInterface::generateSlowDownTrajectory( markers, &debug_data_ptr_->slow_down_debug_wall_marker); } + // Add debug data debug_data_ptr_->obstacles_to_slow_down.push_back(obstacle); + if (!debug_data_ptr_->slow_down_reason_diag.has_value()) { + debug_data_ptr_->slow_down_reason_diag = makeDiagnostic("slow_down", planner_data); + } // update prev_slow_down_output_ new_prev_slow_down_output.push_back(SlowDownOutput{ @@ -904,3 +836,90 @@ PlannerInterface::calculateDistanceToSlowDownWithConstraints( return std::make_tuple( filtered_dist_to_slow_down_start, filtered_dist_to_slow_down_end, feasible_slow_down_vel); } + +DiagnosticStatus PlannerInterface::makeEmptyDiagnostic(const std::string & reason) +{ + // Create status + DiagnosticStatus status; + status.level = status.OK; + status.name = "obstacle_cruise_planner_" + reason; + diagnostic_msgs::msg::KeyValue key_value; + { + // Decision + key_value.key = "decision"; + key_value.value = "none"; + status.values.push_back(key_value); + } + + return status; +} + +DiagnosticStatus PlannerInterface::makeDiagnostic( + const std::string & reason, const std::optional & planner_data, + const std::optional & stop_pose, + const std::optional & stop_obstacle) +{ + // Create status + DiagnosticStatus status; + status.level = status.OK; + status.name = "obstacle_cruise_planner_" + reason; + diagnostic_msgs::msg::KeyValue key_value; + { + // Decision + key_value.key = "decision"; + key_value.value = reason; + status.values.push_back(key_value); + } + + if (stop_pose.has_value() && planner_data.has_value()) { // Stop info + key_value.key = "stop_position"; + const auto & p = stop_pose.value().position; + key_value.value = + "{" + std::to_string(p.x) + ", " + std::to_string(p.y) + ", " + std::to_string(p.z) + "}"; + status.values.push_back(key_value); + key_value.key = "stop_orientation"; + const auto & o = stop_pose.value().orientation; + key_value.value = "{" + std::to_string(o.w) + ", " + std::to_string(o.x) + ", " + + std::to_string(o.y) + ", " + std::to_string(o.z) + "}"; + status.values.push_back(key_value); + const auto dist_to_stop_pose = autoware::motion_utils::calcSignedArcLength( + planner_data.value().traj_points, planner_data.value().ego_pose.position, + stop_pose.value().position); + key_value.key = "distance_to_stop_pose"; + key_value.value = std::to_string(dist_to_stop_pose); + status.values.push_back(key_value); + } + + if (stop_obstacle.has_value()) { + // Obstacle info + const auto & p = stop_obstacle.value().collision_point; + key_value.key = "collision_point"; + key_value.value = + "{" + std::to_string(p.x) + ", " + std::to_string(p.y) + ", " + std::to_string(p.z) + "}"; + status.values.push_back(key_value); + } + + return status; +} + +void PlannerInterface::publishDiagnostics(const rclcpp::Time & current_time) +{ + // create array + DiagnosticArray diagnostics; + diagnostics.header.stamp = current_time; + diagnostics.header.frame_id = "map"; + const auto & d = debug_data_ptr_; + diagnostics.status = { + (d->stop_reason_diag) ? d->stop_reason_diag.value() : makeEmptyDiagnostic("stop"), + (d->slow_down_reason_diag) ? *(d->slow_down_reason_diag) : makeEmptyDiagnostic("slow_down"), + (d->cruise_reason_diag) ? d->cruise_reason_diag.value() : makeEmptyDiagnostic("cruise")}; + diagnostics_pub_->publish(diagnostics); + clearDiagnostics(); +} + +void PlannerInterface::clearDiagnostics() +{ + debug_data_ptr_->stop_reason_diag = std::nullopt; + debug_data_ptr_->slow_down_reason_diag = std::nullopt; + debug_data_ptr_->cruise_reason_diag = std::nullopt; +} From 6add86f6a3dd5f7be3c236ff35c3393add15d519 Mon Sep 17 00:00:00 2001 From: Yuntianyi Chen Date: Thu, 11 Jul 2024 21:57:50 +0800 Subject: [PATCH 159/306] refactor(dummy_infrastructure): rework parameters (#5275) Signed-off-by: Yuntianyi Chen --- system/dummy_infrastructure/CMakeLists.txt | 4 +- system/dummy_infrastructure/README.md | 3 +- .../config/dummy_infrastructure.param.yaml | 10 +-- .../launch/dummy_infrastructure.launch.xml | 1 + .../dummy_infrastructure_node.schema.json | 65 +++++++++++++++++++ .../dummy_infrastructure_node.cpp | 12 ++-- 6 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 system/dummy_infrastructure/schema/dummy_infrastructure_node.schema.json diff --git a/system/dummy_infrastructure/CMakeLists.txt b/system/dummy_infrastructure/CMakeLists.txt index cfe326d7bb53b..5d3d39d02365d 100644 --- a/system/dummy_infrastructure/CMakeLists.txt +++ b/system/dummy_infrastructure/CMakeLists.txt @@ -15,6 +15,6 @@ rclcpp_components_register_node(dummy_infrastructure_node_component ament_auto_package( INSTALL_TO_SHARE - config - launch + launch + config ) diff --git a/system/dummy_infrastructure/README.md b/system/dummy_infrastructure/README.md index 2f3196189a1b3..d032bfa1a7e3d 100644 --- a/system/dummy_infrastructure/README.md +++ b/system/dummy_infrastructure/README.md @@ -29,8 +29,9 @@ ros2 run rqt_reconfigure rqt_reconfigure | Name | Type | Default Value | Explanation | | ------------------- | ------ | ------------- | ------------------------------------------------- | -| `update_rate` | int | `10` | Timer callback period [Hz] | +| `update_rate` | double | `10.0` | Timer callback period [Hz] | | `use_first_command` | bool | `true` | Consider instrument id or not | +| `use_command_state` | bool | `false` | Consider command state or not | | `instrument_id` | string | `` | Used as command id | | `approval` | bool | `false` | set approval filed to ros param | | `is_finalized` | bool | `false` | Stop at stop_line if finalization isn't completed | diff --git a/system/dummy_infrastructure/config/dummy_infrastructure.param.yaml b/system/dummy_infrastructure/config/dummy_infrastructure.param.yaml index 50dc36193776b..83976798d30b2 100644 --- a/system/dummy_infrastructure/config/dummy_infrastructure.param.yaml +++ b/system/dummy_infrastructure/config/dummy_infrastructure.param.yaml @@ -1,8 +1,8 @@ /**: ros__parameters: update_rate_hz: 10.0 - use_first_command: false - use_command_state: true - instrument_id: '0' - approval: true - is_finalized: true + use_first_command: true + use_command_state: false + instrument_id: "" + approval: false + is_finalized: false diff --git a/system/dummy_infrastructure/launch/dummy_infrastructure.launch.xml b/system/dummy_infrastructure/launch/dummy_infrastructure.launch.xml index 751575e343fa6..bc45abdebec70 100644 --- a/system/dummy_infrastructure/launch/dummy_infrastructure.launch.xml +++ b/system/dummy_infrastructure/launch/dummy_infrastructure.launch.xml @@ -1,3 +1,4 @@ + diff --git a/system/dummy_infrastructure/schema/dummy_infrastructure_node.schema.json b/system/dummy_infrastructure/schema/dummy_infrastructure_node.schema.json new file mode 100644 index 0000000000000..697ec01d31a64 --- /dev/null +++ b/system/dummy_infrastructure/schema/dummy_infrastructure_node.schema.json @@ -0,0 +1,65 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Dummy Infrastructure Node", + "type": "object", + "definitions": { + "dummy_infrastructure": { + "type": "object", + "properties": { + "update_rate_hz": { + "type": "number", + "default": "10.0", + "description": "Timer callback period [Hz]" + }, + "use_first_command": { + "type": "boolean", + "default": "true", + "description": "Consider instrument id or not" + }, + "use_command_state": { + "type": "boolean", + "default": "false", + "description": "Consider command state or not" + }, + "instrument_id": { + "type": "string", + "default": "", + "description": "Used as command id" + }, + "approval": { + "type": "boolean", + "default": "false", + "description": "set approval filed to ros param" + }, + "is_finalized": { + "type": "boolean", + "default": "false", + "description": "Stop at stop_line if finalization isn't completed" + } + }, + "required": [ + "update_rate_hz", + "use_first_command", + "use_command_state", + "instrument_id", + "approval", + "is_finalized" + ], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/dummy_infrastructure" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/system/dummy_infrastructure/src/dummy_infrastructure_node/dummy_infrastructure_node.cpp b/system/dummy_infrastructure/src/dummy_infrastructure_node/dummy_infrastructure_node.cpp index f24ce4587de0b..485d85c926268 100644 --- a/system/dummy_infrastructure/src/dummy_infrastructure_node/dummy_infrastructure_node.cpp +++ b/system/dummy_infrastructure/src/dummy_infrastructure_node/dummy_infrastructure_node.cpp @@ -89,12 +89,12 @@ DummyInfrastructureNode::DummyInfrastructureNode(const rclcpp::NodeOptions & nod this->add_on_set_parameters_callback(std::bind(&DummyInfrastructureNode::onSetParam, this, _1)); // Parameter - node_param_.update_rate_hz = declare_parameter("update_rate_hz", 10.0); - node_param_.use_first_command = declare_parameter("use_first_command", true); - node_param_.use_command_state = declare_parameter("use_command_state", false); - node_param_.instrument_id = declare_parameter("instrument_id", ""); - node_param_.approval = declare_parameter("approval", false); - node_param_.is_finalized = declare_parameter("is_finalized", false); + node_param_.update_rate_hz = declare_parameter("update_rate_hz"); + node_param_.use_first_command = declare_parameter("use_first_command"); + node_param_.use_command_state = declare_parameter("use_command_state"); + node_param_.instrument_id = declare_parameter("instrument_id"); + node_param_.approval = declare_parameter("approval"); + node_param_.is_finalized = declare_parameter("is_finalized"); // Subscriber sub_command_array_ = create_subscription( From c28ed07e0eb3db91467bb7fad274381e76e2ccdf Mon Sep 17 00:00:00 2001 From: Koichi98 <45482193+Koichi98@users.noreply.github.com> Date: Fri, 12 Jul 2024 10:17:30 +0900 Subject: [PATCH 160/306] chore(cppcheck): delete cstyleCast from .cppcheck_suppressions (#7978) * chore(cppcheck): delete cstyleCast from .cppcheck_suppressions Signed-off-by: Koichi Imai * chore(cppcheck): clean .cppcheck_suppressions Signed-off-by: Koichi Imai --------- Signed-off-by: Koichi Imai --- .cppcheck_suppressions | 2 -- 1 file changed, 2 deletions(-) diff --git a/.cppcheck_suppressions b/.cppcheck_suppressions index 7c921dac7db4c..0b484ad372448 100644 --- a/.cppcheck_suppressions +++ b/.cppcheck_suppressions @@ -3,8 +3,6 @@ checkersReport constParameterReference constVariableReference -// cspell: ignore cstyle -cstyleCast funcArgNamesDifferent functionConst functionStatic From d58f1dc8d8550f2fcc899bbc94c8ee7b43f736d6 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 12 Jul 2024 11:48:02 +0900 Subject: [PATCH 161/306] fix(autoware_behavior_velocity_intersection_module): fix shadowVariable (#7976) Signed-off-by: kobayu858 --- .../src/scene_intersection.cpp | 1 - .../src/scene_intersection_prepare_data.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp index ac157fb3ab6dc..9f6935e6d7e7b 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection.cpp @@ -392,7 +392,6 @@ DecisionResult IntersectionModule::modifyPathVelocityDetail( if (!has_traffic_light_) { if (fromEgoDist(occlusion_wo_tl_pass_judge_line_idx) < 0) { if (has_collision) { - const auto closest_idx = intersection_stoplines.closest_idx; const std::string evasive_diag = generateEgoRiskEvasiveDiagnosis( *path, closest_idx, time_distance_array, too_late_detect_objects, misjudge_objects); return OverPassJudge{ diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp index a4c4e1b41688f..92a8fc57079df 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_intersection_module/src/scene_intersection_prepare_data.cpp @@ -689,8 +689,8 @@ IntersectionLanelets IntersectionModule::generateObjectiveLanelets( routing_graph_ptr, ll, length, ego_lanelets); for (const auto & ls : lanelet_sequences) { for (const auto & l : ls) { - const auto & inserted = detection_ids.insert(l.id()); - if (inserted.second) detection_and_preceding_lanelets.push_back(l); + const auto & inner_inserted = detection_ids.insert(l.id()); + if (inner_inserted.second) detection_and_preceding_lanelets.push_back(l); } } } @@ -710,8 +710,8 @@ IntersectionLanelets IntersectionModule::generateObjectiveLanelets( routing_graph_ptr, ll, length, ego_lanelets); for (const auto & ls : lanelet_sequences) { for (const auto & l : ls) { - const auto & inserted = detection_ids.insert(l.id()); - if (inserted.second) occlusion_detection_and_preceding_lanelets.push_back(l); + const auto & inner_inserted = detection_ids.insert(l.id()); + if (inner_inserted.second) occlusion_detection_and_preceding_lanelets.push_back(l); } } } From a0af377108c91602f3ee45f0ad466ec7694b3535 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:19:53 +0900 Subject: [PATCH 162/306] fix(autoware_motion_velocity_obstacle_velocity_limiter_module): fix shadowVariable (#7977) * fix:shadowVariable Signed-off-by: kobayu858 * fix:shadowVariable Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../src/trajectory_preprocessing.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/trajectory_preprocessing.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/trajectory_preprocessing.cpp index f4b1304d67e5e..f56b50635c96e 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/trajectory_preprocessing.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/trajectory_preprocessing.cpp @@ -71,7 +71,7 @@ void calculateSteeringAngles(TrajectoryPoints & trajectory, const double wheel_b auto prev_point = trajectory.front(); auto prev_heading = tf2::getYaw(prev_point.pose.orientation); for (auto i = 1ul; i < trajectory.size(); ++i) { - const auto & prev_point = trajectory[i - 1]; + prev_point = trajectory[i - 1]; auto & point = trajectory[i]; const auto dt = autoware::universe_utils::calcDistance2d(prev_point, point) / prev_point.longitudinal_velocity_mps; From 69a8f6933c2f22a4a10e469e956ace46a0e7b397 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 12 Jul 2024 13:23:35 +0900 Subject: [PATCH 163/306] fix(system_monitor): fix shadowVariable (#7981) fix:shadowVariable Signed-off-by: kobayu858 --- system/system_monitor/src/hdd_monitor/hdd_monitor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/system_monitor/src/hdd_monitor/hdd_monitor.cpp b/system/system_monitor/src/hdd_monitor/hdd_monitor.cpp index 85a88d2430bce..50ac4363da609 100644 --- a/system/system_monitor/src/hdd_monitor/hdd_monitor.cpp +++ b/system/system_monitor/src/hdd_monitor/hdd_monitor.cpp @@ -684,8 +684,8 @@ void HddMonitor::updateHddInfoList() // Restore HDD information list try { std::istringstream iss(buf); - boost::archive::text_iarchive oa(iss); - oa >> hdd_info_list_; + boost::archive::text_iarchive ia(iss); + ia >> hdd_info_list_; } catch (const std::exception & e) { connect_diag_.summary(DiagStatus::ERROR, "recv error"); connect_diag_.add("recv", e.what()); From 5f0eaa467c2c6b115f36d23935e3fe053acd2540 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Fri, 12 Jul 2024 13:36:08 +0900 Subject: [PATCH 164/306] feat(processing_time_checker): add a new package (#7957) * feat(processing_time_checker): add a new package Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * update README and schema.json Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../launch/simulator.launch.xml | 2 +- .../launch/system.launch.xml | 8 ++ .../CMakeLists.txt | 20 +++ .../README.md | 36 ++++++ .../config/processing_time_checker.param.yaml | 37 ++++++ .../launch/processing_time_checker.launch.xml | 7 + .../package.xml | 26 ++++ .../processing_time_checker.schema.json | 38 ++++++ .../src/processing_time_checker.cpp | 122 ++++++++++++++++++ .../src/processing_time_checker.hpp | 53 ++++++++ 10 files changed, 348 insertions(+), 1 deletion(-) create mode 100644 system/autoware_processing_time_checker/CMakeLists.txt create mode 100644 system/autoware_processing_time_checker/README.md create mode 100644 system/autoware_processing_time_checker/config/processing_time_checker.param.yaml create mode 100644 system/autoware_processing_time_checker/launch/processing_time_checker.launch.xml create mode 100644 system/autoware_processing_time_checker/package.xml create mode 100644 system/autoware_processing_time_checker/schema/processing_time_checker.schema.json create mode 100644 system/autoware_processing_time_checker/src/processing_time_checker.cpp create mode 100644 system/autoware_processing_time_checker/src/processing_time_checker.hpp diff --git a/launch/tier4_simulator_launch/launch/simulator.launch.xml b/launch/tier4_simulator_launch/launch/simulator.launch.xml index 7dc33e0e82ea9..bf43fde85e0a2 100644 --- a/launch/tier4_simulator_launch/launch/simulator.launch.xml +++ b/launch/tier4_simulator_launch/launch/simulator.launch.xml @@ -148,7 +148,7 @@ - + diff --git a/launch/tier4_system_launch/launch/system.launch.xml b/launch/tier4_system_launch/launch/system.launch.xml index 55c4403b65923..d11d00c43d55b 100644 --- a/launch/tier4_system_launch/launch/system.launch.xml +++ b/launch/tier4_system_launch/launch/system.launch.xml @@ -4,6 +4,7 @@ + @@ -64,6 +65,13 @@ + + + + + + + diff --git a/system/autoware_processing_time_checker/CMakeLists.txt b/system/autoware_processing_time_checker/CMakeLists.txt new file mode 100644 index 0000000000000..d9b3acb9abacf --- /dev/null +++ b/system/autoware_processing_time_checker/CMakeLists.txt @@ -0,0 +1,20 @@ +cmake_minimum_required(VERSION 3.14) +project(autoware_processing_time_checker) + +find_package(autoware_cmake REQUIRED) +autoware_package() +find_package(rclcpp REQUIRED) + +ament_auto_add_library(${PROJECT_NAME} SHARED + src/processing_time_checker.cpp +) + +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::processing_time_checker::ProcessingTimeChecker" + EXECUTABLE processing_time_checker_node +) + +ament_auto_package(INSTALL_TO_SHARE + launch + config +) diff --git a/system/autoware_processing_time_checker/README.md b/system/autoware_processing_time_checker/README.md new file mode 100644 index 0000000000000..db2dd8d041e61 --- /dev/null +++ b/system/autoware_processing_time_checker/README.md @@ -0,0 +1,36 @@ +# Processing Time Checker + +## Purpose + +This node checks whether the processing time of each module is valid or not, and send a diagnostic. +NOTE: Currently, there is no validation feature, and "OK" is always assigned in the diagnostic. + +### Standalone Startup + +```bash +ros2 launch autoware_processing_time_checker processing_time_checker.launch.xml +``` + +## Inner-workings / Algorithms + +## Inputs / Outputs + +### Input + +| Name | Type | Description | +| ------------------------- | --------------------------------- | ------------------------------ | +| `/.../processing_time_ms` | `tier4_debug_msgs/Float64Stamped` | processing time of each module | + +### Output + +| Name | Type | Description | +| ----------------------------------------- | --------------------------------- | ---------------------------------- | +| `/system/processing_time_checker/metrics` | `diagnostic_msgs/DiagnosticArray` | processing time of all the modules | + +## Parameters + +{{ json_to_markdown("system/autoware_processing_time_checker/schema/processing_time_checker.schema.json") }} + +## Assumptions / Known limits + +TBD. diff --git a/system/autoware_processing_time_checker/config/processing_time_checker.param.yaml b/system/autoware_processing_time_checker/config/processing_time_checker.param.yaml new file mode 100644 index 0000000000000..84e7d79079dae --- /dev/null +++ b/system/autoware_processing_time_checker/config/processing_time_checker.param.yaml @@ -0,0 +1,37 @@ +/**: + ros__parameters: + update_rate: 10.0 + processing_time_topic_name_list: + - /control/trajectory_follower/controller_node_exe/lateral/debug/processing_time_ms + - /control/trajectory_follower/controller_node_exe/longitudinal/debug/processing_time_ms + - /control/trajectory_follower/lane_departure_checker_node/debug/processing_time_ms + - /perception/object_recognition/prediction/map_based_prediction/debug/processing_time_ms + - /perception/object_recognition/tracking/multi_object_tracker/debug/processing_time_ms + - /planning/planning_validator/debug/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/avoidance_by_lane_change/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/dynamic_obstacle_avoidance/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/goal_planner/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lane_change_left/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/lane_change_right/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/side_shift/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/start_planner/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/static_obstacle_avoidance/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_path_planner/debug/total_time/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/blind_spot/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/crosswalk/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/detection_area/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/intersection/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/merge_from_private/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/no_stopping_area/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/run_out/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/stop_line/processing_time_ms + - /planning/scenario_planning/lane_driving/behavior_planning/behavior_velocity_planner/debug/walkway/processing_time_ms + - /planning/scenario_planning/lane_driving/motion_planning/elastic_band_smoother/debug/processing_time_ms + - /planning/scenario_planning/lane_driving/motion_planning/motion_velocity_planner/debug/dynamic_obstacle_stop/processing_time_ms + - /planning/scenario_planning/lane_driving/motion_planning/motion_velocity_planner/debug/obstacle_velocity_limiter/processing_time_ms + - /planning/scenario_planning/lane_driving/motion_planning/motion_velocity_planner/debug/out_of_lane/processing_time_ms + - /planning/scenario_planning/lane_driving/motion_planning/motion_velocity_planner/debug/processing_time_ms + - /planning/scenario_planning/lane_driving/motion_planning/obstacle_cruise_planner/debug/processing_time_ms + - /planning/scenario_planning/lane_driving/motion_planning/path_optimizer/debug/processing_time_ms + - /planning/scenario_planning/velocity_smoother/debug/processing_time_ms + - /simulation/shape_estimation/debug/processing_time_ms diff --git a/system/autoware_processing_time_checker/launch/processing_time_checker.launch.xml b/system/autoware_processing_time_checker/launch/processing_time_checker.launch.xml new file mode 100644 index 0000000000000..1e9eb6a3d03e1 --- /dev/null +++ b/system/autoware_processing_time_checker/launch/processing_time_checker.launch.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/system/autoware_processing_time_checker/package.xml b/system/autoware_processing_time_checker/package.xml new file mode 100644 index 0000000000000..52f6fe6c2c27d --- /dev/null +++ b/system/autoware_processing_time_checker/package.xml @@ -0,0 +1,26 @@ + + + + autoware_processing_time_checker + 1.0.0 + A package to find out nodes with common names + Takayuki Murooka + Kosuke Takeuchi + + Apache 2.0 + + ament_cmake + autoware_cmake + + diagnostic_updater + rclcpp + rclcpp_components + tier4_debug_msgs + + ament_lint_auto + ament_lint_common + + + ament_cmake + + diff --git a/system/autoware_processing_time_checker/schema/processing_time_checker.schema.json b/system/autoware_processing_time_checker/schema/processing_time_checker.schema.json new file mode 100644 index 0000000000000..152cedb60f8ab --- /dev/null +++ b/system/autoware_processing_time_checker/schema/processing_time_checker.schema.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Processing Time Checker", + "type": "object", + "definitions": { + "autoware_processing_time_checker": { + "type": "object", + "properties": { + "update_rate": { + "type": "number", + "default": 10, + "exclusiveMinimum": 2, + "description": "The scanning and update frequency of the checker." + }, + "processing_time_topic_name_list": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The topic name list of the processing time." + } + }, + "required": ["update_rate", "processing_time_topic_name_list"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/autoware_processing_time_checker" + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/system/autoware_processing_time_checker/src/processing_time_checker.cpp b/system/autoware_processing_time_checker/src/processing_time_checker.cpp new file mode 100644 index 0000000000000..fec7a16134915 --- /dev/null +++ b/system/autoware_processing_time_checker/src/processing_time_checker.cpp @@ -0,0 +1,122 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "processing_time_checker.hpp" + +#include + +#include +#include +#include + +namespace autoware::processing_time_checker +{ + +namespace +{ +std::string remove_last_name(const std::string & str) +{ + return str.substr(0, str.find_last_of("/")); +} + +std::string get_last_name(const std::string & str) +{ + return str.substr(str.find_last_of("/") + 1); +} +} // namespace + +ProcessingTimeChecker::ProcessingTimeChecker(const rclcpp::NodeOptions & node_options) +: Node("processing_time_checker", node_options) +{ + const double update_rate = declare_parameter("update_rate"); + const auto processing_time_topic_name_list = + declare_parameter>("processing_time_topic_name_list"); + + for (const auto & processing_time_topic_name : processing_time_topic_name_list) { + std::optional module_name{std::nullopt}; + + // extract module name from topic name + auto tmp_topic_name = processing_time_topic_name; + for (size_t i = 0; i < 4; ++i) { // 4 is enouh for the search depth + tmp_topic_name = remove_last_name(tmp_topic_name); + const auto module_name_candidate = get_last_name(tmp_topic_name); + // clang-format off + if ( + module_name_candidate != "processing_time_ms" && module_name_candidate != "debug" && + module_name_candidate != "total_time") + { + module_name = module_name_candidate; + break; + } + // clang-format on + } + + // register module name + if (module_name) { + module_name_map_.insert_or_assign(processing_time_topic_name, *module_name); + } else { + throw std::invalid_argument("The format of the processing time topic name is not correct."); + } + } + + // create subscribers + for (const auto & processing_time_topic_name : processing_time_topic_name_list) { + const auto & module_name = module_name_map_.at(processing_time_topic_name); + + // clang-format off + processing_time_subscribers_.push_back( + create_subscription( + processing_time_topic_name, 1, + [this, &module_name]([[maybe_unused]] const Float64Stamped & msg) { + processing_time_map_.insert_or_assign(module_name, msg.data); + })); + // clang-format on + } + + diag_pub_ = create_publisher("~/metrics", 1); + + const auto period_ns = rclcpp::Rate(update_rate).period(); + timer_ = rclcpp::create_timer( + this, get_clock(), period_ns, std::bind(&ProcessingTimeChecker::on_timer, this)); +} + +void ProcessingTimeChecker::on_timer() +{ + // create diagnostic status + DiagnosticStatus status; + status.level = status.OK; + status.name = "processing_time"; + for (const auto & processing_time_iterator : processing_time_map_) { + const auto processing_time_topic_name = processing_time_iterator.first; + const double processing_time = processing_time_iterator.second; + + // generate diagnostic status + diagnostic_msgs::msg::KeyValue key_value; + key_value.key = processing_time_topic_name; + key_value.value = std::to_string(processing_time); + status.values.push_back(key_value); + } + + // create diagnostic array + DiagnosticArray diag_msg; + diag_msg.header.stamp = now(); + diag_msg.status.push_back(status); + + // publish + diag_pub_->publish(diag_msg); +} +} // namespace autoware::processing_time_checker + +#include +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::processing_time_checker::ProcessingTimeChecker) diff --git a/system/autoware_processing_time_checker/src/processing_time_checker.hpp b/system/autoware_processing_time_checker/src/processing_time_checker.hpp new file mode 100644 index 0000000000000..eba6f2c0642e6 --- /dev/null +++ b/system/autoware_processing_time_checker/src/processing_time_checker.hpp @@ -0,0 +1,53 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef PROCESSING_TIME_CHECKER_HPP_ +#define PROCESSING_TIME_CHECKER_HPP_ + +#include + +#include "diagnostic_msgs/msg/diagnostic_array.hpp" +#include "tier4_debug_msgs/msg/float64_stamped.hpp" + +#include +#include +#include + +namespace autoware::processing_time_checker +{ +using diagnostic_msgs::msg::DiagnosticArray; +using diagnostic_msgs::msg::DiagnosticStatus; +using tier4_debug_msgs::msg::Float64Stamped; + +class ProcessingTimeChecker : public rclcpp::Node +{ +public: + explicit ProcessingTimeChecker(const rclcpp::NodeOptions & node_options); + +private: + void on_timer(); + + rclcpp::TimerBase::SharedPtr timer_; + + rclcpp::Publisher::SharedPtr diag_pub_; + std::vector::SharedPtr> processing_time_subscribers_; + + // topic name - module name + std::unordered_map module_name_map_{}; + // module name - processing time + std::unordered_map processing_time_map_{}; +}; +} // namespace autoware::processing_time_checker + +#endif // PROCESSING_TIME_CHECKER_HPP_ From 9bf6643fa1e23381fe8fb63d4126ff7a69ca4e04 Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Fri, 12 Jul 2024 14:01:33 +0900 Subject: [PATCH 165/306] docs(localization_error_monitor): fix input description of localization_error_monitor (#7993) Fixed input of localization_error_monitor Signed-off-by: Shintaro Sakoda --- localization/localization_error_monitor/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/localization/localization_error_monitor/README.md b/localization/localization_error_monitor/README.md index 7912ad843ef19..8dc82f09f3d07 100644 --- a/localization/localization_error_monitor/README.md +++ b/localization/localization_error_monitor/README.md @@ -16,9 +16,9 @@ The package monitors the following two values: ### Input -| Name | Type | Description | -| --------------------- | ----------------------------------------------- | ------------------- | -| `input/pose_with_cov` | `geometry_msgs::msg::PoseWithCovarianceStamped` | localization result | +| Name | Type | Description | +| ------------ | ------------------------- | ------------------- | +| `input/odom` | `nav_msgs::msg::Odometry` | localization result | ### Output From dcc375042b73aef430e2c1e4c9b3f64b1bc81176 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 12 Jul 2024 16:15:12 +0900 Subject: [PATCH 166/306] fix(system_error_monitor): fix shadowVariable (#7979) * fix:shadowVariable Signed-off-by: kobayu858 * fix:shadowVariable Signed-off-by: kobayu858 * fix:syntax error Signed-off-by: kobayu858 * refactor:clang format Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../system_error_monitor/src/system_error_monitor_core.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/system/system_error_monitor/src/system_error_monitor_core.cpp b/system/system_error_monitor/src/system_error_monitor_core.cpp index 1daa4624ec934..ef892bd01ff50 100644 --- a/system/system_error_monitor/src/system_error_monitor_core.cpp +++ b/system/system_error_monitor/src/system_error_monitor_core.cpp @@ -270,13 +270,12 @@ AutowareErrorMonitor::AutowareErrorMonitor(const rclcpp::NodeOptions & options) void AutowareErrorMonitor::loadRequiredModules(const std::string & key) { - const auto param_key = std::string("required_modules.") + key; - const uint64_t depth = 3; - const auto param_names = this->list_parameters({param_key}, depth).names; + const auto param_names = + this->list_parameters({std::string("required_modules.") + key}, depth).names; if (param_names.empty()) { - throw std::runtime_error(fmt::format("no parameter found: {}", param_key)); + throw std::runtime_error(fmt::format("no parameter found: required_modules.{}", key)); } // Load module names from parameter key From 7eb2e2dbefd25afd8d5dd678f97197f972ab8ec2 Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Fri, 12 Jul 2024 16:26:25 +0900 Subject: [PATCH 167/306] chore(autoware_universe_utils): update document (#7907) * update readme Signed-off-by: Y.Hisaki * refactoring Signed-off-by: Y.Hisaki * remove string reporter Signed-off-by: Y.Hisaki * fix readme.md Signed-off-by: Y.Hisaki * change node name of example Signed-off-by: Y.Hisaki * update readme Signed-off-by: Y.Hisaki --------- Signed-off-by: Y.Hisaki --- common/autoware_universe_utils/README.md | 223 ++++++------------ .../examples/example_scoped_time_track.cpp | 61 ----- .../examples/example_time_keeper.cpp | 78 +++--- .../universe_utils/system/time_keeper.hpp | 16 +- .../src/system/time_keeper.cpp | 14 +- 5 files changed, 127 insertions(+), 265 deletions(-) delete mode 100644 common/autoware_universe_utils/examples/example_scoped_time_track.cpp diff --git a/common/autoware_universe_utils/README.md b/common/autoware_universe_utils/README.md index 2d24f84423299..cd5e366c520fc 100644 --- a/common/autoware_universe_utils/README.md +++ b/common/autoware_universe_utils/README.md @@ -49,56 +49,80 @@ explicit TimeKeeper(Reporters... reporters); - Ends tracking the processing time of a function. - `func_name`: Name of the function to end tracking. +##### Note + +- It's possible to start and end time measurements using `start_track` and `end_track` as shown below: + + ```cpp + time_keeper.start_track("example_function"); + // Your function code here + time_keeper.end_track("example_function"); + ``` + +- For safety and to ensure proper tracking, it is recommended to use `ScopedTimeTrack`. + ##### Example ```cpp -#include "autoware/universe_utils/system/time_keeper.hpp" - #include +#include + +#include #include #include +#include + +class ExampleNode : public rclcpp::Node +{ +public: + ExampleNode() : Node("time_keeper_example") + { + publisher_ = + create_publisher("processing_time", 1); + + time_keeper_ = std::make_shared(publisher_, &std::cerr); + // You can also add a reporter later by add_reporter. + // time_keeper_->add_reporter(publisher_); + // time_keeper_->add_reporter(&std::cerr); + + timer_ = create_wall_timer(std::chrono::seconds(1), std::bind(&ExampleNode::func_a, this)); + } + +private: + std::shared_ptr time_keeper_; + rclcpp::Publisher::SharedPtr publisher_; + rclcpp::Publisher::SharedPtr publisher_str_; + rclcpp::TimerBase::SharedPtr timer_; + + void func_a() + { + // Start constructing ProcessingTimeTree (because func_a is the root function) + autoware::universe_utils::ScopedTimeTrack st("func_a", *time_keeper_); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + func_b(); + // End constructing ProcessingTimeTree. After this, the tree will be reported (publishing + // message and outputting to std::cerr) + } + + void func_b() + { + autoware::universe_utils::ScopedTimeTrack st("func_b", *time_keeper_); + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + func_c(); + } + + void func_c() + { + autoware::universe_utils::ScopedTimeTrack st("func_c", *time_keeper_); + std::this_thread::sleep_for(std::chrono::milliseconds(3)); + } +}; int main(int argc, char ** argv) { rclcpp::init(argc, argv); - auto node = std::make_shared("time_keeper_example"); - - auto time_keeper = std::make_shared(); - - time_keeper->add_reporter(&std::cout); - - auto publisher = - node->create_publisher("processing_time", 10); - - time_keeper->add_reporter(publisher); - - auto publisher_str = node->create_publisher("processing_time_str", 10); - - time_keeper->add_reporter(publisher_str); - - auto funcA = [&time_keeper]() { - time_keeper->start_track("funcA"); - std::this_thread::sleep_for(std::chrono::seconds(1)); - time_keeper->end_track("funcA"); - }; - - auto funcB = [&time_keeper, &funcA]() { - time_keeper->start_track("funcB"); - std::this_thread::sleep_for(std::chrono::seconds(2)); - funcA(); - time_keeper->end_track("funcB"); - }; - - auto funcC = [&time_keeper, &funcB]() { - time_keeper->start_track("funcC"); - std::this_thread::sleep_for(std::chrono::seconds(3)); - funcB(); - time_keeper->end_track("funcC"); - }; - - funcC(); - + auto node = std::make_shared(); rclcpp::spin(node); rclcpp::shutdown(); return 0; @@ -109,38 +133,28 @@ int main(int argc, char ** argv) ```text ========================== - funcC (6000.7ms) - └── funcB (3000.44ms) - └── funcA (1000.19ms) + func_a (6.382ms) + └── func_b (5.243ms) + └── func_c (3.146ms) ``` - Output (`ros2 topic echo /processing_time`) ```text + --- nodes: - id: 1 - name: funcC - processing_time: 6000.659 + name: func_a + processing_time: 6.397 parent_id: 0 - id: 2 - name: funcB - processing_time: 3000.415 + name: func_b + processing_time: 5.263 parent_id: 1 - id: 3 - name: funcA - processing_time: 1000.181 + name: func_c + processing_time: 3.129 parent_id: 2 - --- - ``` - -- Output (`ros2 topic echo /processing_time_str --field data`) - - ```text - funcC (6000.67ms) - └── funcB (3000.42ms) - └── funcA (1000.19ms) - - --- ``` #### `autoware::universe_utils::ScopedTimeTrack` @@ -165,94 +179,3 @@ ScopedTimeTrack(const std::string & func_name, TimeKeeper & time_keeper); ``` - Destroys the `ScopedTimeTrack` object, ending the tracking of the function. - -##### Example - -```cpp -#include "autoware/universe_utils/system/time_keeper.hpp" - -#include - -#include -#include - -int main(int argc, char ** argv) -{ - rclcpp::init(argc, argv); - auto node = std::make_shared("scoped_time_track_example"); - - auto time_keeper = std::make_shared(); - - time_keeper->add_reporter(&std::cout); - - auto publisher = - node->create_publisher("processing_time", 10); - - time_keeper->add_reporter(publisher); - - auto publisher_str = node->create_publisher("processing_time_str", 10); - - time_keeper->add_reporter(publisher_str); - - auto funcA = [&time_keeper]() { - autoware::universe_utils::ScopedTimeTrack st("funcA", *time_keeper); - std::this_thread::sleep_for(std::chrono::seconds(1)); - }; - - auto funcB = [&time_keeper, &funcA]() { - autoware::universe_utils::ScopedTimeTrack st("funcB", *time_keeper); - std::this_thread::sleep_for(std::chrono::seconds(2)); - funcA(); - }; - - auto funcC = [&time_keeper, &funcB]() { - autoware::universe_utils::ScopedTimeTrack st("funcC", *time_keeper); - std::this_thread::sleep_for(std::chrono::seconds(3)); - funcB(); - }; - - funcC(); - - rclcpp::spin(node); - rclcpp::shutdown(); - return 0; -} -``` - -- Output (console) - - ```text - ========================== - funcC (6000.7ms) - └── funcB (3000.44ms) - └── funcA (1000.19ms) - ``` - -- Output (`ros2 topic echo /processing_time`) - - ```text - nodes: - - id: 1 - name: funcC - processing_time: 6000.659 - parent_id: 0 - - id: 2 - name: funcB - processing_time: 3000.415 - parent_id: 1 - - id: 3 - name: funcA - processing_time: 1000.181 - parent_id: 2 - --- - ``` - -- Output (`ros2 topic echo /processing_time_str --field data`) - - ```text - funcC (6000.67ms) - └── funcB (3000.42ms) - └── funcA (1000.19ms) - - --- - ``` diff --git a/common/autoware_universe_utils/examples/example_scoped_time_track.cpp b/common/autoware_universe_utils/examples/example_scoped_time_track.cpp deleted file mode 100644 index 010cc58aba8ae..0000000000000 --- a/common/autoware_universe_utils/examples/example_scoped_time_track.cpp +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2024 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -#include "autoware/universe_utils/system/time_keeper.hpp" - -#include - -#include -#include - -int main(int argc, char ** argv) -{ - rclcpp::init(argc, argv); - auto node = std::make_shared("scoped_time_track_example"); - - auto time_keeper = std::make_shared(); - - time_keeper->add_reporter(&std::cout); - - auto publisher = - node->create_publisher("processing_time", 10); - - time_keeper->add_reporter(publisher); - - auto publisher_str = node->create_publisher("processing_time_str", 10); - - time_keeper->add_reporter(publisher_str); - - auto funcA = [&time_keeper]() { - autoware::universe_utils::ScopedTimeTrack st("funcA", *time_keeper); - std::this_thread::sleep_for(std::chrono::seconds(1)); - }; - - auto funcB = [&time_keeper, &funcA]() { - autoware::universe_utils::ScopedTimeTrack st("funcB", *time_keeper); - std::this_thread::sleep_for(std::chrono::seconds(2)); - funcA(); - }; - - auto funcC = [&time_keeper, &funcB]() { - autoware::universe_utils::ScopedTimeTrack st("funcC", *time_keeper); - std::this_thread::sleep_for(std::chrono::seconds(3)); - funcB(); - }; - - funcC(); - - rclcpp::spin(node); - rclcpp::shutdown(); - return 0; -} diff --git a/common/autoware_universe_utils/examples/example_time_keeper.cpp b/common/autoware_universe_utils/examples/example_time_keeper.cpp index 3f6037e68daac..c50aa1e1a8342 100644 --- a/common/autoware_universe_utils/examples/example_time_keeper.cpp +++ b/common/autoware_universe_utils/examples/example_time_keeper.cpp @@ -15,49 +15,63 @@ #include +#include + +#include #include #include +#include -int main(int argc, char ** argv) +class ExampleNode : public rclcpp::Node { - rclcpp::init(argc, argv); - auto node = std::make_shared("time_keeper_example"); - - auto time_keeper = std::make_shared(); - - time_keeper->add_reporter(&std::cout); +public: + ExampleNode() : Node("time_keeper_example") + { + publisher_ = + create_publisher("processing_time", 1); - auto publisher = - node->create_publisher("processing_time", 10); + time_keeper_ = std::make_shared(publisher_, &std::cerr); + // You can also add a reporter later by add_reporter. + // time_keeper_->add_reporter(publisher_); + // time_keeper_->add_reporter(&std::cerr); - time_keeper->add_reporter(publisher); + timer_ = create_wall_timer(std::chrono::seconds(1), std::bind(&ExampleNode::func_a, this)); + } - auto publisher_str = node->create_publisher("processing_time_str", 10); +private: + std::shared_ptr time_keeper_; + rclcpp::Publisher::SharedPtr publisher_; + rclcpp::Publisher::SharedPtr publisher_str_; + rclcpp::TimerBase::SharedPtr timer_; - time_keeper->add_reporter(publisher_str); + void func_a() + { + // Start constructing ProcessingTimeTree (because func_a is the root function) + autoware::universe_utils::ScopedTimeTrack st("func_a", *time_keeper_); + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + func_b(); + // End constructing ProcessingTimeTree. After this, the tree will be reported (publishing + // message and outputting to std::cerr) + } - auto funcA = [&time_keeper]() { - time_keeper->start_track("funcA"); - std::this_thread::sleep_for(std::chrono::seconds(1)); - time_keeper->end_track("funcA"); - }; + void func_b() + { + autoware::universe_utils::ScopedTimeTrack st("func_b", *time_keeper_); + std::this_thread::sleep_for(std::chrono::milliseconds(2)); + func_c(); + } - auto funcB = [&time_keeper, &funcA]() { - time_keeper->start_track("funcB"); - std::this_thread::sleep_for(std::chrono::seconds(2)); - funcA(); - time_keeper->end_track("funcB"); - }; - - auto funcC = [&time_keeper, &funcB]() { - time_keeper->start_track("funcC"); - std::this_thread::sleep_for(std::chrono::seconds(3)); - funcB(); - time_keeper->end_track("funcC"); - }; - - funcC(); + void func_c() + { + autoware::universe_utils::ScopedTimeTrack st("func_c", *time_keeper_); + std::this_thread::sleep_for(std::chrono::milliseconds(3)); + } +}; +int main(int argc, char ** argv) +{ + rclcpp::init(argc, argv); + auto node = std::make_shared(); rclcpp::spin(node); rclcpp::shutdown(); return 0; diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp index 96070f0f30b77..c635138416aa5 100644 --- a/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp +++ b/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp @@ -17,14 +17,11 @@ #include "autoware/universe_utils/system/stop_watch.hpp" #include -#include #include #include #include -#include - #include #include #include @@ -134,14 +131,6 @@ class TimeKeeper */ void add_reporter(rclcpp::Publisher::SharedPtr publisher); - /** - * @brief Add a reporter to publish processing times to an rclcpp publisher with - * std_msgs::msg::String - * - * @param publisher Shared pointer to the rclcpp publisher - */ - void add_reporter(rclcpp::Publisher::SharedPtr publisher); - /** * @brief Start tracking the processing time of a function * @@ -187,6 +176,11 @@ class ScopedTimeTrack */ ScopedTimeTrack(const std::string & func_name, TimeKeeper & time_keeper); + ScopedTimeTrack(const ScopedTimeTrack &) = delete; + ScopedTimeTrack & operator=(const ScopedTimeTrack &) = delete; + ScopedTimeTrack(ScopedTimeTrack &&) = delete; + ScopedTimeTrack & operator=(ScopedTimeTrack &&) = delete; + /** * @brief Destroy the ScopedTimeTrack object, ending the tracking of the function */ diff --git a/common/autoware_universe_utils/src/system/time_keeper.cpp b/common/autoware_universe_utils/src/system/time_keeper.cpp index 58bed6677227c..429f063dfc62e 100644 --- a/common/autoware_universe_utils/src/system/time_keeper.cpp +++ b/common/autoware_universe_utils/src/system/time_keeper.cpp @@ -14,7 +14,8 @@ #include "autoware/universe_utils/system/time_keeper.hpp" -#include +#include + #include namespace autoware::universe_utils @@ -67,7 +68,7 @@ tier4_debug_msgs::msg::ProcessingTimeTree ProcessingTimeNode::to_msg() const tier4_debug_msgs::msg::ProcessingTimeNode time_node_msg; time_node_msg.name = node.name_; time_node_msg.processing_time = node.processing_time_; - time_node_msg.id = tree_msg.nodes.size() + 1; + time_node_msg.id = static_cast(tree_msg.nodes.size() + 1); time_node_msg.parent_id = parent_id; tree_msg.nodes.emplace_back(time_node_msg); @@ -112,15 +113,6 @@ void TimeKeeper::add_reporter(rclcpp::Publisher::SharedPtr }); } -void TimeKeeper::add_reporter(rclcpp::Publisher::SharedPtr publisher) -{ - reporters_.emplace_back([publisher](const std::shared_ptr & node) { - std_msgs::msg::String msg; - msg.data = node->to_string(); - publisher->publish(msg); - }); -} - void TimeKeeper::start_track(const std::string & func_name) { if (current_time_node_ == nullptr) { From 0dba04c97122c8056dcf72f219512f440cd7e9da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=2E=20Fatih=20C=C4=B1r=C4=B1t?= Date: Fri, 12 Jul 2024 12:14:50 +0300 Subject: [PATCH 168/306] ci(build-and-test-differential): limit ccache size for cuda builds (#7980) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: M. Fatih Cırıt --- .github/workflows/build-and-test-differential.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/build-and-test-differential.yaml b/.github/workflows/build-and-test-differential.yaml index a95a070d19bd4..287769d0708ac 100644 --- a/.github/workflows/build-and-test-differential.yaml +++ b/.github/workflows/build-and-test-differential.yaml @@ -70,6 +70,14 @@ jobs: restore-keys: | ccache-main-${{ runner.arch }}-${{ matrix.rosdistro }}- + # Limit ccache size only for CUDA builds to avoid running out of disk space + - name: Limit ccache size + if: ${{ matrix.container-suffix == '-cuda' }} + run: | + rm -f "${CCACHE_DIR}/ccache.conf" + echo -e "# Set maximum cache size\nmax_size = 1MB" >> "${CCACHE_DIR}/ccache.conf" + shell: bash + - name: Show ccache stats before build run: du -sh ${CCACHE_DIR} && ccache -s shell: bash From 4738b7fce2468b045494b00e085257d398a6f673 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 12 Jul 2024 18:46:52 +0900 Subject: [PATCH 169/306] fix(autoware_stop_filter): fix funcArgNamesDifferent (#8008) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- localization/autoware_stop_filter/src/stop_filter.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localization/autoware_stop_filter/src/stop_filter.hpp b/localization/autoware_stop_filter/src/stop_filter.hpp index ce6e67f0b7265..b6d56b5f77059 100644 --- a/localization/autoware_stop_filter/src/stop_filter.hpp +++ b/localization/autoware_stop_filter/src/stop_filter.hpp @@ -39,7 +39,7 @@ namespace autoware::stop_filter class StopFilter : public rclcpp::Node { public: - explicit StopFilter(const rclcpp::NodeOptions & options); + explicit StopFilter(const rclcpp::NodeOptions & node_options); private: rclcpp::Publisher::SharedPtr pub_odom_; //!< @brief odom publisher From af96de212b25fd23148a16c1b5d5f147bb0d2fa7 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 12 Jul 2024 19:16:12 +0900 Subject: [PATCH 170/306] fix(detection_by_tracker): fix funcArgNamesDifferent (#8010) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../detection_by_tracker/src/detection_by_tracker_node.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/perception/detection_by_tracker/src/detection_by_tracker_node.hpp b/perception/detection_by_tracker/src/detection_by_tracker_node.hpp index 9c974d72cfdca..f0ed51dd1938e 100644 --- a/perception/detection_by_tracker/src/detection_by_tracker_node.hpp +++ b/perception/detection_by_tracker/src/detection_by_tracker_node.hpp @@ -85,7 +85,7 @@ class DetectionByTracker : public rclcpp::Node void divideUnderSegmentedObjects( const autoware_perception_msgs::msg::DetectedObjects & tracked_objects, - const tier4_perception_msgs::msg::DetectedObjectsWithFeature & in_objects, + const tier4_perception_msgs::msg::DetectedObjectsWithFeature & in_cluster_objects, autoware_perception_msgs::msg::DetectedObjects & out_no_found_tracked_objects, tier4_perception_msgs::msg::DetectedObjectsWithFeature & out_objects); @@ -96,7 +96,7 @@ class DetectionByTracker : public rclcpp::Node void mergeOverSegmentedObjects( const autoware_perception_msgs::msg::DetectedObjects & tracked_objects, - const tier4_perception_msgs::msg::DetectedObjectsWithFeature & in_objects, + const tier4_perception_msgs::msg::DetectedObjectsWithFeature & in_cluster_objects, autoware_perception_msgs::msg::DetectedObjects & out_no_found_tracked_objects, tier4_perception_msgs::msg::DetectedObjectsWithFeature & out_objects); }; From f2f7aabd5558d39ea5bd617b91e79c315c96734b Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Fri, 12 Jul 2024 20:06:30 +0900 Subject: [PATCH 171/306] feat(autoware_behavior_path_planner_common,autoware_behavior_path_lane_change_module): add time_keeper to bpp (#8004) * feat(autoware_behavior_path_planner_common,autoware_behavior_path_lane_change_module): add time_keeper to bpp Signed-off-by: Y.Hisaki * update Signed-off-by: Y.Hisaki --------- Signed-off-by: Y.Hisaki --- .../interface.hpp | 2 ++ .../utils/base_class.hpp | 11 ++++++++++- .../src/interface.cpp | 6 ++++++ .../src/scene.cpp | 17 +++++++++++++++++ .../behavior_path_planner/planner_manager.hpp | 2 ++ .../interface/scene_module_interface.hpp | 8 +++++++- .../scene_module_manager_interface.hpp | 5 +++++ 7 files changed, 49 insertions(+), 2 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp index 9c014b77a7e82..bd309dd35a260 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/interface.hpp @@ -23,6 +23,7 @@ #include "autoware/behavior_path_planner_common/turn_signal_decider.hpp" #include "autoware/behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" +#include #include #include @@ -108,6 +109,7 @@ class LaneChangeInterface : public SceneModuleInterface const double start_distance, const double finish_distance, const bool safe, const uint8_t & state) { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); for (const auto & [module_name, ptr] : rtc_interface_ptr_map_) { if (ptr) { ptr->updateCooperateStatus( diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp index 9df19c4de6834..cbd3a81827948 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp @@ -23,6 +23,7 @@ #include "autoware/behavior_path_planner_common/utils/path_shifter/path_shifter.hpp" #include "autoware/universe_utils/system/stop_watch.hpp" +#include #include #include @@ -53,7 +54,8 @@ class LaneChangeBase : lane_change_parameters_{std::move(parameters)}, common_data_ptr_{std::make_shared()}, direction_{direction}, - type_{type} + type_{type}, + time_keeper_(std::make_shared()) { } @@ -167,6 +169,11 @@ class LaneChangeBase common_data_ptr_->direction = direction_; } + void setTimeKeeper(const std::shared_ptr & time_keeper) + { + time_keeper_ = time_keeper; + } + void toNormalState() { current_lane_change_state_ = LaneChangeStates::Normal; } void toStopState() { current_lane_change_state_ = LaneChangeStates::Stop; } @@ -252,6 +259,8 @@ class LaneChangeBase rclcpp::Logger logger_ = utils::lane_change::getLogger(getModuleTypeStr()); mutable rclcpp::Clock clock_{RCL_ROS_TIME}; + + mutable std::shared_ptr time_keeper_; }; } // namespace autoware::behavior_path_planner #endif // AUTOWARE__BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__BASE_CLASS_HPP_ diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp index 0a5b31f9e32d2..b55b41828081e 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp @@ -21,6 +21,7 @@ #include "autoware/behavior_path_planner_common/marker_utils/utils.hpp" #include +#include #include #include @@ -43,6 +44,7 @@ LaneChangeInterface::LaneChangeInterface( module_type_{std::move(module_type)}, prev_approved_path_{std::make_unique()} { + module_type_->setTimeKeeper(getTimeKeeper()); steering_factor_interface_ptr_ = std::make_unique(&node, name); logger_ = utils::lane_change::getLogger(module_type_->getModuleTypeStr()); } @@ -71,6 +73,7 @@ bool LaneChangeInterface::isExecutionReady() const void LaneChangeInterface::updateData() { + universe_utils::ScopedTimeTrack st(__func__, *getTimeKeeper()); module_type_->setPreviousModuleOutput(getPreviousModuleOutput()); module_type_->updateSpecialData(); @@ -94,6 +97,7 @@ void LaneChangeInterface::postProcess() BehaviorModuleOutput LaneChangeInterface::plan() { + universe_utils::ScopedTimeTrack st(__func__, *getTimeKeeper()); resetPathCandidate(); resetPathReference(); @@ -165,6 +169,7 @@ BehaviorModuleOutput LaneChangeInterface::planWaitingApproval() CandidateOutput LaneChangeInterface::planCandidate() const { + universe_utils::ScopedTimeTrack st(__func__, *getTimeKeeper()); const auto selected_path = module_type_->getLaneChangePath(); if (selected_path.path.points.empty()) { @@ -340,6 +345,7 @@ MarkerArray LaneChangeInterface::getModuleVirtualWall() void LaneChangeInterface::updateSteeringFactorPtr(const BehaviorModuleOutput & output) { + universe_utils::ScopedTimeTrack st(__func__, *getTimeKeeper()); const auto steering_factor_direction = std::invoke([&]() { if (module_type_->getDirection() == Direction::LEFT) { return SteeringFactor::LEFT; diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp index 8cf67f8cfc66f..8636ff7d9dae7 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp @@ -23,6 +23,7 @@ #include "autoware/behavior_path_planner_common/utils/utils.hpp" #include +#include #include #include @@ -55,6 +56,7 @@ NormalLaneChange::NormalLaneChange( void NormalLaneChange::updateLaneChangeStatus() { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); updateStopTime(); const auto [found_valid_path, found_safe_path] = getSafePath(status_.lane_change_path); @@ -263,6 +265,7 @@ BehaviorModuleOutput NormalLaneChange::getTerminalLaneChangePath() const BehaviorModuleOutput NormalLaneChange::generateOutput() { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); if (!status_.is_valid_path) { RCLCPP_DEBUG(logger_, "No valid path found. Returning previous module's path as output."); return prev_module_output_; @@ -308,6 +311,7 @@ BehaviorModuleOutput NormalLaneChange::generateOutput() void NormalLaneChange::extendOutputDrivableArea(BehaviorModuleOutput & output) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & dp = planner_data_->drivable_area_expansion_parameters; const auto drivable_lanes = utils::lane_change::generateDrivableLanes( @@ -327,6 +331,7 @@ void NormalLaneChange::extendOutputDrivableArea(BehaviorModuleOutput & output) c void NormalLaneChange::insertStopPoint( const lanelet::ConstLanelets & lanelets, PathWithLaneId & path) { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); if (lanelets.empty()) { return; } @@ -468,6 +473,7 @@ void NormalLaneChange::insertStopPoint( PathWithLaneId NormalLaneChange::getReferencePath() const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); lanelet::ConstLanelet closest_lanelet; if (!lanelet::utils::query::getClosestLanelet( status_.lane_change_path.info.target_lanes, getEgoPose(), &closest_lanelet)) { @@ -482,6 +488,7 @@ PathWithLaneId NormalLaneChange::getReferencePath() const std::optional NormalLaneChange::extendPath() { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto path = status_.lane_change_path.path; const auto lc_start_point = status_.lane_change_path.info.lane_changing_start.position; @@ -560,6 +567,7 @@ void NormalLaneChange::resetParameters() TurnSignalInfo NormalLaneChange::updateOutputTurnSignal() const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & pose = getEgoPose(); const auto & current_lanes = status_.current_lanes; const auto & shift_line = status_.lane_change_path.info.shift_line; @@ -584,6 +592,7 @@ lanelet::ConstLanelets NormalLaneChange::getCurrentLanes() const lanelet::ConstLanelets NormalLaneChange::getLaneChangeLanes( const lanelet::ConstLanelets & current_lanes, Direction direction) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); if (current_lanes.empty()) { return {}; } @@ -1832,6 +1841,7 @@ PathSafetyStatus NormalLaneChange::evaluateApprovedPathWithUnsafeHysteresis( bool NormalLaneChange::isValidPath(const PathWithLaneId & path) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & route_handler = planner_data_->route_handler; const auto & dp = planner_data_->drivable_area_expansion_parameters; @@ -1869,6 +1879,7 @@ bool NormalLaneChange::isValidPath(const PathWithLaneId & path) const bool NormalLaneChange::isRequiredStop(const bool is_object_coming_from_rear) { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto threshold = lane_change_parameters_->backward_length_buffer_for_end_of_lane; if ( isNearEndOfCurrentLanes(status_.current_lanes, status_.target_lanes, threshold) && @@ -1882,6 +1893,7 @@ bool NormalLaneChange::isRequiredStop(const bool is_object_coming_from_rear) bool NormalLaneChange::calcAbortPath() { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & route_handler = getRouteHandler(); const auto & common_param = getCommonParam(); const auto current_velocity = @@ -2025,6 +2037,7 @@ PathSafetyStatus NormalLaneChange::isLaneChangePathSafe( const utils::path_safety_checker::RSSparams & rss_params, CollisionCheckDebugMap & debug_data) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); PathSafetyStatus path_safety_status; if (collision_check_objects.empty()) { @@ -2108,6 +2121,7 @@ PathSafetyStatus NormalLaneChange::isLaneChangePathSafe( bool NormalLaneChange::isVehicleStuck( const lanelet::ConstLanelets & current_lanes, const double obstacle_check_distance) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); // Ego is still moving, not in stuck if (std::abs(getEgoVelocity()) > lane_change_parameters_->stop_velocity_threshold) { RCLCPP_DEBUG(logger_, "Ego is still moving, not in stuck"); @@ -2163,6 +2177,7 @@ bool NormalLaneChange::isVehicleStuck( double NormalLaneChange::get_max_velocity_for_safety_check() const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto external_velocity_limit_ptr = planner_data_->external_limit_max_velocity; if (external_velocity_limit_ptr) { return std::min( @@ -2174,6 +2189,7 @@ double NormalLaneChange::get_max_velocity_for_safety_check() const bool NormalLaneChange::isVehicleStuck(const lanelet::ConstLanelets & current_lanes) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); if (current_lanes.empty()) { lane_change_debug_.is_stuck = false; return false; // can not check @@ -2208,6 +2224,7 @@ void NormalLaneChange::setStopPose(const Pose & stop_pose) void NormalLaneChange::updateStopTime() { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto current_vel = getEgoVelocity(); if (std::abs(current_vel) > lane_change_parameters_->stop_velocity_threshold) { diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp index a76284b70b7d8..3a9aa9cafbcca 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp @@ -21,6 +21,7 @@ #include "autoware/universe_utils/ros/debug_publisher.hpp" #include "autoware/universe_utils/system/stop_watch.hpp" +#include #include #include @@ -277,6 +278,7 @@ class PlannerManager const SceneModulePtr & module_ptr, const std::shared_ptr & planner_data, const BehaviorModuleOutput & previous_module_output) const { + universe_utils::ScopedTimeTrack st(module_ptr->name() + "=>run", *module_ptr->getTimeKeeper()); stop_watch_.tic(module_ptr->name()); module_ptr->setData(planner_data); diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp index d11c3181526d2..95eb82e0b4c23 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -97,7 +98,8 @@ class SceneModuleInterface objects_of_interest_marker_interface_ptr_map_( std::move(objects_of_interest_marker_interface_ptr_map)), steering_factor_interface_ptr_( - std::make_unique(&node, utils::convertToSnakeCase(name))) + std::make_unique(&node, utils::convertToSnakeCase(name))), + time_keeper_(std::make_shared()) { for (const auto & [module_name, ptr] : rtc_interface_ptr_map_) { uuid_map_.emplace(module_name, generateUUID()); @@ -244,6 +246,8 @@ class SceneModuleInterface previous_module_output_ = previous_module_output; } + std::shared_ptr getTimeKeeper() const { return time_keeper_; } + /** * @brief set planner data */ @@ -641,6 +645,8 @@ class SceneModuleInterface mutable MarkerArray debug_marker_; mutable MarkerArray drivable_lanes_marker_; + + mutable std::shared_ptr time_keeper_; }; } // namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_manager_interface.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_manager_interface.hpp index fab9a6ba45113..c9adf4d60c21f 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_manager_interface.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_manager_interface.hpp @@ -85,6 +85,7 @@ class SceneModuleManagerInterface observer.lock()->setData(planner_data_); observer.lock()->setPreviousModuleOutput(previous_module_output); + observer.lock()->getTimeKeeper()->add_reporter(this->pub_processing_time_); observer.lock()->onEntry(); observers_.push_back(observer); @@ -318,6 +319,8 @@ class SceneModuleManagerInterface pub_debug_marker_ = node->create_publisher("~/debug/" + name_, 20); pub_virtual_wall_ = node->create_publisher("~/virtual_wall/" + name_, 20); pub_drivable_lanes_ = node->create_publisher("~/drivable_lanes/" + name_, 20); + pub_processing_time_ = node->create_publisher( + "~/processing_time/" + name_, 20); } // misc @@ -338,6 +341,8 @@ class SceneModuleManagerInterface rclcpp::Publisher::SharedPtr pub_drivable_lanes_; + rclcpp::Publisher::SharedPtr pub_processing_time_; + std::string name_; std::shared_ptr planner_data_; From 2dfa8ff3f3457078becad34815f422cb43a236a8 Mon Sep 17 00:00:00 2001 From: Zulfaqar Azmi <93502286+zulfaqar-azmi-t4@users.noreply.github.com> Date: Fri, 12 Jul 2024 22:32:34 +0900 Subject: [PATCH 172/306] refactor(lane_change): update lanes and its polygons only when it's updated (#7989) * refactor(lane_change): compute lanes and polygon only when updated Signed-off-by: Zulfaqar Azmi * Revert accidental changesd This reverts commit cbfd9ae8a88b2d6c3b27b35c9a08bb824ecd5011. Signed-off-by: Zulfaqar Azmi * fix spell check Signed-off-by: Zulfaqar Azmi * Make a common getter for current lanes Signed-off-by: Zulfaqar Azmi * add target lanes getter Signed-off-by: Zulfaqar Azmi * some minor function refactoring Signed-off-by: Zulfaqar Azmi --------- Signed-off-by: Zulfaqar Azmi --- .../src/scene.cpp | 4 +- .../scene.hpp | 13 +- .../utils/base_class.hpp | 19 +- .../utils/data_structs.hpp | 40 ++-- .../utils/path.hpp | 24 +- .../utils/utils.hpp | 22 +- .../src/interface.cpp | 3 +- .../src/scene.cpp | 217 ++++++++++-------- .../src/utils/utils.cpp | 76 ++++-- 9 files changed, 246 insertions(+), 172 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp index 501554b0a2b02..1a2e4439d4b7d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_avoidance_by_lane_change_module/src/scene.cpp @@ -134,7 +134,7 @@ AvoidancePlanningData AvoidanceByLaneChange::calcAvoidancePlanningData( const auto resample_interval = avoidance_parameters_->resample_interval_for_planning; data.reference_path = utils::resamplePathWithSpline(data.reference_path_rough, resample_interval); - data.current_lanelets = getCurrentLanes(); + data.current_lanelets = get_current_lanes(); fillAvoidanceTargetObjects(data, debug); @@ -274,7 +274,7 @@ double AvoidanceByLaneChange::calcMinAvoidanceLength(const ObjectData & nearest_ double AvoidanceByLaneChange::calcMinimumLaneChangeLength() const { - const auto current_lanes = getCurrentLanes(); + const auto current_lanes = get_current_lanes(); if (current_lanes.empty()) { RCLCPP_DEBUG(logger_, "no empty lanes"); return std::numeric_limits::infinity(); diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp index be62492b7c2cc..dad96d5f7371a 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/scene.hpp @@ -51,6 +51,8 @@ class NormalLaneChange : public LaneChangeBase NormalLaneChange & operator=(NormalLaneChange &&) = delete; ~NormalLaneChange() override = default; + void update_lanes(const bool is_approved) final; + void updateLaneChangeStatus() override; std::pair getSafePath(LaneChangePath & safe_path) const override; @@ -105,8 +107,6 @@ class NormalLaneChange : public LaneChangeBase TurnSignalInfo get_current_turn_signal_info() override; protected: - lanelet::ConstLanelets getCurrentLanes() const override; - lanelet::ConstLanelets getLaneChangeLanes( const lanelet::ConstLanelets & current_lanes, Direction direction) const override; @@ -124,9 +124,7 @@ class NormalLaneChange : public LaneChangeBase const LaneChangeLanesFilteredObjects & predicted_objects, const lanelet::ConstLanelets & current_lanes) const; - LaneChangeLanesFilteredObjects filterObjects( - const lanelet::ConstLanelets & current_lanes, - const lanelet::ConstLanelets & target_lanes) const; + LaneChangeLanesFilteredObjects filterObjects() const; void filterOncomingObjects(PredictedObjects & objects) const; @@ -203,6 +201,11 @@ class NormalLaneChange : public LaneChangeBase double getStopTime() const { return stop_time_; } + const lanelet::ConstLanelets & get_target_lanes() const + { + return common_data_ptr_->lanes_ptr->target; + } + double stop_time_{0.0}; }; } // namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp index cbd3a81827948..c1cc14d98a7c7 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/base_class.hpp @@ -65,6 +65,8 @@ class LaneChangeBase LaneChangeBase & operator=(LaneChangeBase &&) = delete; virtual ~LaneChangeBase() = default; + virtual void update_lanes(const bool is_approved) = 0; + virtual void updateLaneChangeStatus() = 0; virtual std::pair getSafePath(LaneChangePath & safe_path) const = 0; @@ -139,6 +141,11 @@ class LaneChangeBase const Twist & getEgoTwist() const { return planner_data_->self_odometry->twist.twist; } + const lanelet::ConstLanelets & get_current_lanes() const + { + return common_data_ptr_->lanes_ptr->current; + } + const BehaviorPathPlannerParameters & getCommonParam() const { return planner_data_->parameters; } LaneChangeParameters getLaneChangeParam() const { return *lane_change_parameters_; } @@ -163,9 +170,19 @@ class LaneChangeBase common_data_ptr_->bpp_param_ptr = std::make_shared(data->parameters); } + + if (!common_data_ptr_->lanes_ptr) { + common_data_ptr_->lanes_ptr = std::make_shared(); + } + + if (!common_data_ptr_->lanes_polygon_ptr) { + common_data_ptr_->lanes_polygon_ptr = std::make_shared(); + } + common_data_ptr_->self_odometry_ptr = data->self_odometry; common_data_ptr_->route_handler_ptr = data->route_handler; common_data_ptr_->lc_param_ptr = lane_change_parameters_; + common_data_ptr_->lc_type = type_; common_data_ptr_->direction = direction_; } @@ -211,8 +228,6 @@ class LaneChangeBase virtual TurnSignalInfo get_current_turn_signal_info() = 0; protected: - virtual lanelet::ConstLanelets getCurrentLanes() const = 0; - virtual int getNumToPreferredLane(const lanelet::ConstLanelet & lane) const = 0; virtual PathWithLaneId getPrepareSegment( diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp index 2fdf7c6b550a3..1bb4dfdeb59dc 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/data_structs.hpp @@ -183,6 +183,13 @@ struct PhaseInfo } }; +struct Lanes +{ + lanelet::ConstLanelets current; + lanelet::ConstLanelets target; + std::vector preceding_target; +}; + struct Info { PhaseInfo longitudinal_acceleration{0.0, 0.0}; @@ -190,9 +197,6 @@ struct Info PhaseInfo duration{0.0, 0.0}; PhaseInfo length{0.0, 0.0}; - lanelet::ConstLanelets current_lanes{}; - lanelet::ConstLanelets target_lanes{}; - Pose lane_changing_start{}; Pose lane_changing_end{}; @@ -225,23 +229,26 @@ struct LanesPolygon { std::optional current; std::optional target; - std::vector target_backward; + std::optional expanded_target; + lanelet::BasicPolygon2d target_neighbor; + std::vector preceding_target; }; -struct Lanes -{ - lanelet::ConstLanelets current; - lanelet::ConstLanelets target; - std::vector preceding_target; -}; +using RouteHandlerPtr = std::shared_ptr; +using BppParamPtr = std::shared_ptr; +using LCParamPtr = std::shared_ptr; +using LanesPtr = std::shared_ptr; +using LanesPolygonPtr = std::shared_ptr; struct CommonData { - std::shared_ptr route_handler_ptr; + RouteHandlerPtr route_handler_ptr; Odometry::ConstSharedPtr self_odometry_ptr; - std::shared_ptr bpp_param_ptr; - std::shared_ptr lc_param_ptr; - Lanes lanes; + BppParamPtr bpp_param_ptr; + LCParamPtr lc_param_ptr; + LanesPtr lanes_ptr; + LanesPolygonPtr lanes_polygon_ptr; + ModuleType lc_type; Direction direction; [[nodiscard]] Pose get_ego_pose() const { return self_odometry_ptr->pose.pose; } @@ -259,12 +266,7 @@ struct CommonData return std::hypot(x, y); } }; - -using RouteHandlerPtr = std::shared_ptr; -using BppParamPtr = std::shared_ptr; -using LCParamPtr = std::shared_ptr; using CommonDataPtr = std::shared_ptr; -using LanesPtr = std::shared_ptr; } // namespace autoware::behavior_path_planner::lane_change namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp index 97b5c621deea5..5623f03a22eb3 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/path.hpp @@ -23,31 +23,31 @@ #include -namespace autoware::behavior_path_planner +namespace autoware::behavior_path_planner::lane_change { using autoware::behavior_path_planner::TurnSignalInfo; using tier4_planning_msgs::msg::PathWithLaneId; -struct LaneChangePath +struct Path { PathWithLaneId path{}; ShiftedPath shifted_path{}; - LaneChangeInfo info; - bool is_safe{false}; + Info info{}; }; -using LaneChangePaths = std::vector; -struct LaneChangeStatus +struct Status { - PathWithLaneId lane_follow_path{}; - LaneChangePath lane_change_path{}; - lanelet::ConstLanelets current_lanes{}; - lanelet::ConstLanelets target_lanes{}; - std::vector lane_follow_lane_ids{}; - std::vector lane_change_lane_ids{}; + Path lane_change_path{}; bool is_safe{false}; bool is_valid_path{false}; double start_distance{0.0}; }; +} // namespace autoware::behavior_path_planner::lane_change + +namespace autoware::behavior_path_planner +{ +using LaneChangePath = lane_change::Path; +using LaneChangePaths = std::vector; +using LaneChangeStatus = lane_change::Status; } // namespace autoware::behavior_path_planner #endif // AUTOWARE__BEHAVIOR_PATH_LANE_CHANGE_MODULE__UTILS__PATH_HPP_ diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/utils.hpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/utils.hpp index e25b67bdb73d8..17eaceb055fc1 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/utils.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/include/autoware/behavior_path_lane_change_module/utils/utils.hpp @@ -48,6 +48,7 @@ using autoware::universe_utils::Polygon2d; using autoware_perception_msgs::msg::PredictedObject; using autoware_perception_msgs::msg::PredictedObjects; using autoware_perception_msgs::msg::PredictedPath; +using behavior_path_planner::lane_change::CommonDataPtr; using behavior_path_planner::lane_change::LanesPolygon; using behavior_path_planner::lane_change::PathSafetyStatus; using geometry_msgs::msg::Point; @@ -114,8 +115,9 @@ bool isPathInLanelets( const lanelet::ConstLanelets & target_lanes); std::optional constructCandidatePath( - const LaneChangeInfo & lane_change_info, const PathWithLaneId & prepare_segment, - const PathWithLaneId & target_segment, const PathWithLaneId & target_lane_reference_path, + const CommonDataPtr & common_data_ptr, const LaneChangeInfo & lane_change_info, + const PathWithLaneId & prepare_segment, const PathWithLaneId & target_segment, + const PathWithLaneId & target_lane_reference_path, const std::vector> & sorted_lane_ids); ShiftLine getLaneChangingShiftLine( @@ -177,10 +179,9 @@ bool isParkedObject( const double ratio_threshold); bool passParkedObject( - const RouteHandler & route_handler, const LaneChangePath & lane_change_path, + const CommonDataPtr & common_data_ptr, const LaneChangePath & lane_change_path, const std::vector & objects, const double minimum_lane_change_length, - const bool is_goal_in_route, const LaneChangeParameters & lane_change_parameters, - CollisionCheckDebugMap & object_debug); + const bool is_goal_in_route, CollisionCheckDebugMap & object_debug); std::optional getLeadingStaticObjectIdx( const RouteHandler & route_handler, const LaneChangePath & lane_change_path, @@ -195,7 +196,8 @@ ExtendedPredictedObject transform( const LaneChangeParameters & lane_change_parameters, const bool check_at_prepare_phase); bool isCollidedPolygonsInLanelet( - const std::vector & collided_polygons, const lanelet::ConstLanelets & lanes); + const std::vector & collided_polygons, + const std::optional & lanes_polygon); /** * @brief Generates expanded lanelets based on the given direction and offsets. @@ -295,9 +297,11 @@ double calcPhaseLength( const double velocity, const double maximum_velocity, const double acceleration, const double time); -LanesPolygon createLanesPolygon( - const lanelet::ConstLanelets & current_lanes, const lanelet::ConstLanelets & target_lanes, - const std::vector & target_backward_lanes); +LanesPolygon create_lanes_polygon(const CommonDataPtr & common_data_ptr); + +bool is_same_lane_with_prev_iteration( + const CommonDataPtr & common_data_ptr, const lanelet::ConstLanelets & current_lanes, + const lanelet::ConstLanelets & target_lanes); } // namespace autoware::behavior_path_planner::utils::lane_change namespace autoware::behavior_path_planner::utils::lane_change::debug diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp index b55b41828081e..4823cb0bfec22 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/interface.cpp @@ -75,6 +75,7 @@ void LaneChangeInterface::updateData() { universe_utils::ScopedTimeTrack st(__func__, *getTimeKeeper()); module_type_->setPreviousModuleOutput(getPreviousModuleOutput()); + module_type_->update_lanes(getCurrentStatus() == ModuleStatus::RUNNING); module_type_->updateSpecialData(); if (isWaitingApproval() || module_type_->isAbortState()) { @@ -136,7 +137,7 @@ BehaviorModuleOutput LaneChangeInterface::planWaitingApproval() *prev_approved_path_ = getPreviousModuleOutput().path; BehaviorModuleOutput out = getPreviousModuleOutput(); - module_type_->insertStopPoint(module_type_->getLaneChangeStatus().current_lanes, out.path); + module_type_->insertStopPoint(module_type_->get_current_lanes(), out.path); out.turn_signal_info = module_type_->get_current_turn_signal_info(); const auto & lane_change_debug = module_type_->getDebugData(); diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp index 8636ff7d9dae7..4dfba64615504 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/scene.cpp @@ -41,7 +41,7 @@ namespace autoware::behavior_path_planner { using autoware::motion_utils::calcSignedArcLength; using utils::lane_change::calcMinimumLaneChangeLength; -using utils::lane_change::createLanesPolygon; +using utils::lane_change::create_lanes_polygon; using utils::path_safety_checker::isPolygonOverlapLanelet; using utils::traffic_light::getDistanceToNextTrafficLight; @@ -54,6 +54,42 @@ NormalLaneChange::NormalLaneChange( stop_watch_.tic("stop_time"); } +void NormalLaneChange::update_lanes(const bool is_approved) +{ + if (is_approved) { + return; + } + + const auto current_lanes = + utils::getCurrentLanesFromPath(prev_module_output_.path, planner_data_); + + if (current_lanes.empty()) { + return; + } + + const auto target_lanes = getLaneChangeLanes(current_lanes, direction_); + if (target_lanes.empty()) { + return; + } + + const auto is_same_lanes_with_prev_iteration = + utils::lane_change::is_same_lane_with_prev_iteration( + common_data_ptr_, current_lanes, target_lanes); + + if (is_same_lanes_with_prev_iteration) { + return; + } + + common_data_ptr_->lanes_ptr->current = current_lanes; + common_data_ptr_->lanes_ptr->target = target_lanes; + + common_data_ptr_->lanes_ptr->preceding_target = utils::getPrecedingLanelets( + *common_data_ptr_->route_handler_ptr, get_target_lanes(), common_data_ptr_->get_ego_pose(), + common_data_ptr_->lc_param_ptr->backward_lane_length); + + *common_data_ptr_->lanes_polygon_ptr = create_lanes_polygon(common_data_ptr_); +} + void NormalLaneChange::updateLaneChangeStatus() { universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); @@ -61,34 +97,23 @@ void NormalLaneChange::updateLaneChangeStatus() const auto [found_valid_path, found_safe_path] = getSafePath(status_.lane_change_path); // Update status - status_.current_lanes = status_.lane_change_path.info.current_lanes; - status_.target_lanes = status_.lane_change_path.info.target_lanes; status_.is_valid_path = found_valid_path; status_.is_safe = found_safe_path; - status_.lane_follow_lane_ids = utils::getIds(status_.current_lanes); - status_.lane_change_lane_ids = utils::getIds(status_.target_lanes); - const auto arclength_start = - lanelet::utils::getArcCoordinates(status_.target_lanes, getEgoPose()); + const auto arclength_start = lanelet::utils::getArcCoordinates(get_target_lanes(), getEgoPose()); status_.start_distance = arclength_start.length; status_.lane_change_path.path.header = getRouteHeader(); } std::pair NormalLaneChange::getSafePath(LaneChangePath & safe_path) const { - const auto current_lanes = getCurrentLanes(); - - if (current_lanes.empty()) { - return {false, false}; - } + const auto & current_lanes = get_current_lanes(); + const auto & target_lanes = get_target_lanes(); - const auto target_lanes = getLaneChangeLanes(current_lanes, direction_); - - if (target_lanes.empty()) { + if (current_lanes.empty() || target_lanes.empty()) { return {false, false}; } - // find candidate paths LaneChangePaths valid_paths{}; const bool is_stuck = isVehicleStuck(current_lanes); bool found_safe_path = getLaneChangePaths( @@ -104,8 +129,6 @@ std::pair NormalLaneChange::getSafePath(LaneChangePath & safe_path) lane_change_debug_.valid_paths = valid_paths; if (valid_paths.empty()) { - safe_path.info.current_lanes = current_lanes; - safe_path.info.target_lanes = target_lanes; return {false, false}; } @@ -121,21 +144,22 @@ std::pair NormalLaneChange::getSafePath(LaneChangePath & safe_path) bool NormalLaneChange::isLaneChangeRequired() { - status_.current_lanes = getCurrentLanes(); + const auto current_lanes = + utils::getCurrentLanesFromPath(prev_module_output_.path, planner_data_); - if (status_.current_lanes.empty()) { + if (current_lanes.empty()) { return false; } - status_.target_lanes = getLaneChangeLanes(status_.current_lanes, direction_); + const auto target_lanes = getLaneChangeLanes(current_lanes, direction_); - return !status_.target_lanes.empty(); + return !target_lanes.empty(); } bool NormalLaneChange::isStoppedAtRedTrafficLight() const { return utils::traffic_light::isStoppedAtRedTrafficLightWithinDistance( - status_.current_lanes, status_.lane_change_path.path, planner_data_, + get_current_lanes(), status_.lane_change_path.path, planner_data_, status_.lane_change_path.info.length.sum()); } @@ -143,7 +167,7 @@ TurnSignalInfo NormalLaneChange::get_current_turn_signal_info() { const auto original_turn_signal_info = prev_module_output_.turn_signal_info; - const auto & current_lanes = getLaneChangeStatus().current_lanes; + const auto & current_lanes = get_current_lanes(); const auto is_valid = getLaneChangeStatus().is_valid_path; const auto & lane_change_path = getLaneChangeStatus().lane_change_path; const auto & lane_change_param = getLaneChangeParam(); @@ -236,7 +260,7 @@ BehaviorModuleOutput NormalLaneChange::getTerminalLaneChangePath() const return output; } - const auto current_lanes = getCurrentLanes(); + const auto & current_lanes = get_current_lanes(); if (current_lanes.empty()) { RCLCPP_DEBUG(logger_, "Current lanes not found. Returning previous module's path as output."); return prev_module_output_; @@ -274,7 +298,7 @@ BehaviorModuleOutput NormalLaneChange::generateOutput() auto output = prev_module_output_; if (isAbortState() && abort_path_) { output.path = abort_path_->path; - insertStopPoint(status_.current_lanes, output.path); + insertStopPoint(get_current_lanes(), output.path); } else { output.path = getLaneChangePath().path; @@ -294,7 +318,7 @@ BehaviorModuleOutput NormalLaneChange::generateOutput() const auto stop_point = utils::insertStopPoint(stop_dist + current_dist, output.path); setStopPose(stop_point.point.pose); } else { - insertStopPoint(status_.target_lanes, output.path); + insertStopPoint(get_target_lanes(), output.path); } } @@ -315,7 +339,7 @@ void NormalLaneChange::extendOutputDrivableArea(BehaviorModuleOutput & output) c const auto & dp = planner_data_->drivable_area_expansion_parameters; const auto drivable_lanes = utils::lane_change::generateDrivableLanes( - *getRouteHandler(), status_.current_lanes, status_.target_lanes); + *getRouteHandler(), get_current_lanes(), get_target_lanes()); const auto shorten_lanes = utils::cutOverlappedLanes(output.path, drivable_lanes); const auto expanded_lanes = utils::expandLanelets( shorten_lanes, dp.drivable_area_left_bound_offset, dp.drivable_area_right_bound_offset, @@ -361,15 +385,14 @@ void NormalLaneChange::insertStopPoint( } const double stop_point_buffer = lane_change_parameters_->backward_length_buffer_for_end_of_lane; - const auto target_objects = filterObjects(status_.current_lanes, status_.target_lanes); + const auto target_objects = filterObjects(); double stopping_distance = distance_to_terminal - lane_change_buffer - stop_point_buffer; const auto is_valid_start_point = std::invoke([&]() -> bool { auto lc_start_point = lanelet::utils::conversion::toLaneletPoint( status_.lane_change_path.info.lane_changing_start.position); - const auto target_neighbor_preferred_lane_poly_2d = - utils::lane_change::getTargetNeighborLanesPolygon( - *route_handler, status_.current_lanes, type_); + const auto & target_neighbor_preferred_lane_poly_2d = + common_data_ptr_->lanes_polygon_ptr->target_neighbor; return boost::geometry::covered_by( lanelet::traits::to2D(lc_start_point), target_neighbor_preferred_lane_poly_2d); }); @@ -449,7 +472,7 @@ void NormalLaneChange::insertStopPoint( // target_objects includes objects out of target lanes, so filter them out if (!boost::geometry::intersects( autoware::universe_utils::toPolygon2d(o.initial_pose.pose, o.shape).outer(), - lanelet::utils::combineLaneletsShape(status_.target_lanes) + lanelet::utils::combineLaneletsShape(get_target_lanes()) .polygon2d() .basicPolygon())) { return false; @@ -476,7 +499,7 @@ PathWithLaneId NormalLaneChange::getReferencePath() const universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); lanelet::ConstLanelet closest_lanelet; if (!lanelet::utils::query::getClosestLanelet( - status_.lane_change_path.info.target_lanes, getEgoPose(), &closest_lanelet)) { + get_target_lanes(), getEgoPose(), &closest_lanelet)) { return prev_module_output_.reference_path; } const auto reference_path = utils::getCenterLinePathFromLanelet(closest_lanelet, planner_data_); @@ -498,7 +521,7 @@ std::optional NormalLaneChange::extendPath() return std::nullopt; } - auto & target_lanes = status_.target_lanes; + auto & target_lanes = common_data_ptr_->lanes_ptr->target; const auto target_lane_length = lanelet::utils::getLaneletLength2d(target_lanes); const auto dist_in_target = lanelet::utils::getArcCoordinates(target_lanes, getEgoPose()); @@ -569,7 +592,7 @@ TurnSignalInfo NormalLaneChange::updateOutputTurnSignal() const { universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & pose = getEgoPose(); - const auto & current_lanes = status_.current_lanes; + const auto & current_lanes = get_current_lanes(); const auto & shift_line = status_.lane_change_path.info.shift_line; const auto & shift_path = status_.lane_change_path.shifted_path; const auto current_shift_length = lanelet::utils::getArcCoordinates(current_lanes, pose).distance; @@ -584,11 +607,6 @@ TurnSignalInfo NormalLaneChange::updateOutputTurnSignal() const return new_signal; } -lanelet::ConstLanelets NormalLaneChange::getCurrentLanes() const -{ - return utils::getCurrentLanesFromPath(prev_module_output_.path, planner_data_); -} - lanelet::ConstLanelets NormalLaneChange::getLaneChangeLanes( const lanelet::ConstLanelets & current_lanes, Direction direction) const { @@ -666,8 +684,9 @@ bool NormalLaneChange::hasFinishedLaneChange() const { const auto & current_pose = getEgoPose(); const auto & lane_change_end = status_.lane_change_path.info.shift_line.end; - const double dist_to_lane_change_end = utils::getSignedDistance( - current_pose, lane_change_end, status_.lane_change_path.info.target_lanes); + const auto & target_lanes = get_target_lanes(); + const double dist_to_lane_change_end = + utils::getSignedDistance(current_pose, lane_change_end, get_target_lanes()); double finish_judge_buffer = lane_change_parameters_->lane_change_finish_judge_buffer; // If ego velocity is low, relax finish judge buffer @@ -685,7 +704,7 @@ bool NormalLaneChange::hasFinishedLaneChange() const return false; } - const auto arc_length = lanelet::utils::getArcCoordinates(status_.target_lanes, current_pose); + const auto arc_length = lanelet::utils::getArcCoordinates(target_lanes, current_pose); const auto reach_target_lane = std::abs(arc_length.distance) < lane_change_parameters_->finish_judge_lateral_threshold; @@ -702,7 +721,7 @@ bool NormalLaneChange::isAbleToReturnCurrentLane() const } if (!utils::isEgoWithinOriginalLane( - status_.current_lanes, getEgoPose(), planner_data_->parameters, + get_current_lanes(), getEgoPose(), planner_data_->parameters, lane_change_parameters_->cancel.overhang_tolerance)) { lane_change_debug_.is_able_to_return_to_current_lane = false; return false; @@ -723,7 +742,7 @@ bool NormalLaneChange::isAbleToReturnCurrentLane() const if (dist > estimated_travel_dist) { const auto & estimated_pose = status_.lane_change_path.path.points.at(idx + 1).point.pose; auto is_ego_within_original_lane = utils::isEgoWithinOriginalLane( - status_.current_lanes, estimated_pose, planner_data_->parameters, + get_current_lanes(), estimated_pose, planner_data_->parameters, lane_change_parameters_->cancel.overhang_tolerance); lane_change_debug_.is_able_to_return_to_current_lane = is_ego_within_original_lane; return is_ego_within_original_lane; @@ -762,7 +781,7 @@ bool NormalLaneChange::isAbleToStopSafely() const if (dist > stop_dist) { const auto & estimated_pose = status_.lane_change_path.path.points.at(idx + 1).point.pose; return utils::isEgoWithinOriginalLane( - status_.current_lanes, estimated_pose, planner_data_->parameters); + get_current_lanes(), estimated_pose, planner_data_->parameters); } } return true; @@ -962,8 +981,7 @@ ExtendedPredictedObjects NormalLaneChange::getTargetObjects( return target_objects; } -LaneChangeLanesFilteredObjects NormalLaneChange::filterObjects( - const lanelet::ConstLanelets & current_lanes, const lanelet::ConstLanelets & target_lanes) const +LaneChangeLanesFilteredObjects NormalLaneChange::filterObjects() const { const auto & current_pose = getEgoPose(); const auto & route_handler = getRouteHandler(); @@ -982,6 +1000,12 @@ LaneChangeLanesFilteredObjects NormalLaneChange::filterObjects( return {}; } + const auto & current_lanes = get_current_lanes(); + + if (current_lanes.empty()) { + return {}; + } + filterAheadTerminalObjects(objects, current_lanes); if (objects.objects.empty()) { @@ -992,6 +1016,12 @@ LaneChangeLanesFilteredObjects NormalLaneChange::filterObjects( std::vector current_lane_objects; std::vector other_lane_objects; + const auto & target_lanes = get_target_lanes(); + + if (target_lanes.empty()) { + return {}; + } + filterObjectsByLanelets( objects, current_lanes, target_lanes, current_lane_objects, target_lane_objects, other_lane_objects); @@ -1132,9 +1162,7 @@ void NormalLaneChange::filterObjectsByLanelets( }; // get backward lanes - const auto backward_length = lane_change_parameters_->backward_lane_length; - const auto target_backward_lanes = - utils::getPrecedingLanelets(*route_handler, target_lanes, current_pose, backward_length); + const auto & target_backward_lanes = common_data_ptr_->lanes_ptr->preceding_target; { lane_change_debug_.current_lanes = current_lanes; @@ -1151,12 +1179,7 @@ void NormalLaneChange::filterObjectsByLanelets( }); } - const auto expanded_target_lanes = utils::lane_change::generateExpandedLanelets( - target_lanes, direction_, lane_change_parameters_->lane_expansion_left_offset, - lane_change_parameters_->lane_expansion_right_offset); - - const auto lanes_polygon = - createLanesPolygon(current_lanes, expanded_target_lanes, target_backward_lanes); + const auto & lanes_polygon = *common_data_ptr_->lanes_polygon_ptr; const auto dist_ego_to_current_lanes_center = lanelet::utils::getLateralDistanceToClosestLanelet(current_lanes, current_pose); @@ -1176,7 +1199,7 @@ void NormalLaneChange::filterObjectsByLanelets( return std::abs(lateral) > (common_parameters.vehicle_width / 2); }); - if (check_optional_polygon(object, lanes_polygon.target) && is_lateral_far) { + if (check_optional_polygon(object, lanes_polygon.expanded_target) && is_lateral_far) { target_lane_objects.push_back(object); continue; } @@ -1186,7 +1209,7 @@ void NormalLaneChange::filterObjectsByLanelets( return isPolygonOverlapLanelet(object, target_backward_polygon); }; return std::any_of( - lanes_polygon.target_backward.begin(), lanes_polygon.target_backward.end(), + lanes_polygon.preceding_target.begin(), lanes_polygon.preceding_target.end(), check_backward_polygon); }); @@ -1376,14 +1399,14 @@ bool NormalLaneChange::getLaneChangePaths( const auto sorted_lane_ids = utils::lane_change::getSortedLaneIds(route_handler, getEgoPose(), current_lanes, target_lanes); - const auto target_neighbor_preferred_lane_poly_2d = - utils::lane_change::getTargetNeighborLanesPolygon(route_handler, current_lanes, type_); + const auto & target_neighbor_preferred_lane_poly_2d = + common_data_ptr_->lanes_polygon_ptr->target_neighbor; if (target_neighbor_preferred_lane_poly_2d.empty()) { RCLCPP_WARN(logger_, "target_neighbor_preferred_lane_poly_2d is empty. Not expected."); return false; } - const auto filtered_objects = filterObjects(current_lanes, target_lanes); + const auto filtered_objects = filterObjects(); const auto target_objects = getTargetObjects(filtered_objects, current_lanes); const auto prepare_durations = calcPrepareDuration(current_lanes, target_lanes); @@ -1513,9 +1536,7 @@ bool NormalLaneChange::getLaneChangePaths( prepare_segment.points.back().point.pose.position.x, prepare_segment.points.back().point.pose.position.y); - const auto target_lane_polygon = lanelet::utils::getPolygonFromArcLength( - target_lanes, 0, std::numeric_limits::max()); - const auto target_lane_poly_2d = lanelet::utils::to2D(target_lane_polygon).basicPolygon(); + const auto target_lane_poly_2d = common_data_ptr_->lanes_polygon_ptr->target.value(); const auto is_valid_start_point = boost::geometry::covered_by(lc_start_point, target_neighbor_preferred_lane_poly_2d) || @@ -1528,8 +1549,6 @@ bool NormalLaneChange::getLaneChangePaths( lane_change_info.velocity = LaneChangePhaseInfo{prepare_velocity, initial_lane_changing_velocity}; lane_change_info.length = LaneChangePhaseInfo{prepare_length, lane_changing_length}; - lane_change_info.current_lanes = current_lanes; - lane_change_info.target_lanes = target_lanes; lane_change_info.lane_changing_start = prepare_segment.points.back().point.pose; lane_change_info.lane_changing_end = target_segment.points.front().point.pose; lane_change_info.lateral_acceleration = lateral_acc; @@ -1558,8 +1577,8 @@ bool NormalLaneChange::getLaneChangePaths( prepare_segment, target_segment, target_lane_reference_path, shift_length); const auto candidate_path = utils::lane_change::constructCandidatePath( - lane_change_info, prepare_segment, target_segment, target_lane_reference_path, - sorted_lane_ids); + common_data_ptr_, lane_change_info, prepare_segment, target_segment, + target_lane_reference_path, sorted_lane_ids); if (!candidate_path) { debug_print_lat("Reject: failed to generate candidate path!!"); @@ -1601,7 +1620,7 @@ bool NormalLaneChange::getLaneChangePaths( } if (utils::traffic_light::isStoppedAtRedTrafficLightWithinDistance( - lane_change_info.current_lanes, candidate_path.value().path, planner_data_, + get_current_lanes(), candidate_path.value().path, planner_data_, lane_change_info.length.sum())) { debug_print_lat("Ego is stopping near traffic light. Do not allow lane change"); continue; @@ -1609,10 +1628,10 @@ bool NormalLaneChange::getLaneChangePaths( candidate_paths->push_back(*candidate_path); if ( - !is_stuck && utils::lane_change::passParkedObject( - route_handler, *candidate_path, filtered_objects.target_lane, - lane_change_buffer, is_goal_in_route, *lane_change_parameters_, - lane_change_debug_.collision_check_objects)) { + !is_stuck && + utils::lane_change::passParkedObject( + common_data_ptr_, *candidate_path, filtered_objects.target_lane, lane_change_buffer, + is_goal_in_route, lane_change_debug_.collision_check_objects)) { debug_print_lat( "Reject: parking vehicle exists in the target lane, and the ego is not in stuck. Skip " "lane change."); @@ -1670,7 +1689,7 @@ std::optional NormalLaneChange::calcTerminalLaneChangePath( utils::lane_change::getSortedLaneIds(route_handler, getEgoPose(), current_lanes, target_lanes); const auto target_neighbor_preferred_lane_poly_2d = - utils::lane_change::getTargetNeighborLanesPolygon(route_handler, current_lanes, type_); + common_data_ptr_->lanes_polygon_ptr->target_neighbor; if (target_neighbor_preferred_lane_poly_2d.empty()) { RCLCPP_WARN(logger_, "target_neighbor_preferred_lane_poly_2d is empty. Not expected."); return {}; @@ -1725,9 +1744,7 @@ std::optional NormalLaneChange::calcTerminalLaneChangePath( const lanelet::BasicPoint2d lc_start_point( lane_changing_start_pose->position.x, lane_changing_start_pose->position.y); - const auto target_lane_polygon = - lanelet::utils::getPolygonFromArcLength(target_lanes, 0, std::numeric_limits::max()); - const auto target_lane_poly_2d = lanelet::utils::to2D(target_lane_polygon).basicPolygon(); + const auto & target_lane_poly_2d = common_data_ptr_->lanes_polygon_ptr->target.value(); const auto is_valid_start_point = boost::geometry::covered_by(lc_start_point, target_neighbor_preferred_lane_poly_2d) || @@ -1739,8 +1756,6 @@ std::optional NormalLaneChange::calcTerminalLaneChangePath( lane_change_info.velocity = LaneChangePhaseInfo{minimum_lane_changing_velocity, minimum_lane_changing_velocity}; lane_change_info.length = LaneChangePhaseInfo{0.0, lane_change_buffer}; - lane_change_info.current_lanes = current_lanes; - lane_change_info.target_lanes = target_lanes; lane_change_info.lane_changing_start = lane_changing_start_pose.value(); lane_change_info.lane_changing_end = target_segment.points.front().point.pose; lane_change_info.lateral_acceleration = max_lateral_acc; @@ -1780,8 +1795,8 @@ std::optional NormalLaneChange::calcTerminalLaneChangePath( reference_segment.points.back().point.longitudinal_velocity_mps = minimum_lane_changing_velocity; const auto terminal_lane_change_path = utils::lane_change::constructCandidatePath( - lane_change_info, reference_segment, target_segment, target_lane_reference_path, - sorted_lane_ids); + common_data_ptr_, lane_change_info, reference_segment, target_segment, + target_lane_reference_path, sorted_lane_ids); return terminal_lane_change_path; } @@ -1789,10 +1804,14 @@ std::optional NormalLaneChange::calcTerminalLaneChangePath( PathSafetyStatus NormalLaneChange::isApprovedPathSafe() const { const auto & path = status_.lane_change_path; - const auto & current_lanes = status_.current_lanes; - const auto & target_lanes = status_.target_lanes; + const auto & current_lanes = get_current_lanes(); + const auto & target_lanes = get_target_lanes(); + + if (current_lanes.empty() || target_lanes.empty()) { + return {true, true}; + } - const auto filtered_objects = filterObjects(current_lanes, target_lanes); + const auto filtered_objects = filterObjects(); const auto target_objects = getTargetObjects(filtered_objects, current_lanes); CollisionCheckDebugMap debug_data; @@ -1847,8 +1866,8 @@ bool NormalLaneChange::isValidPath(const PathWithLaneId & path) const // check lane departure const auto drivable_lanes = utils::lane_change::generateDrivableLanes( - *route_handler, utils::extendLanes(route_handler, status_.current_lanes), - utils::extendLanes(route_handler, status_.target_lanes)); + *route_handler, utils::extendLanes(route_handler, get_current_lanes()), + utils::extendLanes(route_handler, get_target_lanes())); const auto expanded_lanes = utils::expandLanelets( drivable_lanes, dp.drivable_area_left_bound_offset, dp.drivable_area_right_bound_offset, dp.drivable_area_types_to_skip); @@ -1882,7 +1901,7 @@ bool NormalLaneChange::isRequiredStop(const bool is_object_coming_from_rear) universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto threshold = lane_change_parameters_->backward_length_buffer_for_end_of_lane; if ( - isNearEndOfCurrentLanes(status_.current_lanes, status_.target_lanes, threshold) && + isNearEndOfCurrentLanes(get_current_lanes(), get_target_lanes(), threshold) && isAbleToStopSafely() && is_object_coming_from_rear) { current_lane_change_state_ = LaneChangeStates::Stop; return true; @@ -1900,16 +1919,16 @@ bool NormalLaneChange::calcAbortPath() std::max(lane_change_parameters_->minimum_lane_changing_velocity, getEgoVelocity()); const auto current_pose = getEgoPose(); const auto & selected_path = status_.lane_change_path; - const auto reference_lanelets = selected_path.info.current_lanes; const auto ego_nearest_dist_threshold = common_param.ego_nearest_dist_threshold; const auto ego_nearest_yaw_threshold = common_param.ego_nearest_yaw_threshold; const auto direction = getDirection(); const auto minimum_lane_change_length = utils::lane_change::calcMinimumLaneChangeLength( - route_handler, selected_path.info.current_lanes.back(), *lane_change_parameters_, direction); + route_handler, get_current_lanes().back(), *lane_change_parameters_, direction); const auto & lane_changing_path = selected_path.path; + const auto & reference_lanelets = get_current_lanes(); const auto lane_changing_end_pose_idx = std::invoke([&]() { constexpr double s_start = 0.0; const double s_end = std::max( @@ -1998,7 +2017,7 @@ bool NormalLaneChange::calcAbortPath() auto reference_lane_segment = prev_module_output_.path; { // const auto terminal_path = - // calcTerminalLaneChangePath(reference_lanelets, selected_path.info.target_lanes); + // calcTerminalLaneChangePath(reference_lanelets, get_target_lanes()); // if (terminal_path) { // reference_lane_segment = terminal_path->path; // } @@ -2063,12 +2082,8 @@ PathSafetyStatus NormalLaneChange::isLaneChangePathSafe( const auto debug_predicted_path = utils::path_safety_checker::convertToPredictedPath(ego_predicted_path, time_resolution); - const auto current_lanes = getCurrentLanes(); - - const auto expanded_target_lanes = utils::lane_change::generateExpandedLanelets( - lane_change_path.info.target_lanes, direction_, - lane_change_parameters_->lane_expansion_left_offset, - lane_change_parameters_->lane_expansion_right_offset); + const auto & current_lanes_polygon = common_data_ptr_->lanes_polygon_ptr->current; + const auto & expanded_target_polygon = common_data_ptr_->lanes_polygon_ptr->expanded_target; constexpr double collision_check_yaw_diff_threshold{M_PI}; @@ -2089,10 +2104,10 @@ PathSafetyStatus NormalLaneChange::isLaneChangePathSafe( continue; } - const auto collision_in_current_lanes = utils::lane_change::isCollidedPolygonsInLanelet( - collided_polygons, lane_change_path.info.current_lanes); + const auto collision_in_current_lanes = + utils::lane_change::isCollidedPolygonsInLanelet(collided_polygons, current_lanes_polygon); const auto collision_in_target_lanes = - utils::lane_change::isCollidedPolygonsInLanelet(collided_polygons, expanded_target_lanes); + utils::lane_change::isCollidedPolygonsInLanelet(collided_polygons, expanded_target_polygon); if (!collision_in_current_lanes && !collision_in_target_lanes) { utils::path_safety_checker::updateCollisionCheckDebugMap( diff --git a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp index ead047f839f47..5f13aa3192113 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_lane_change_module/src/utils/utils.cpp @@ -330,13 +330,12 @@ bool isPathInLanelets( } std::optional constructCandidatePath( - const LaneChangeInfo & lane_change_info, const PathWithLaneId & prepare_segment, - const PathWithLaneId & target_segment, const PathWithLaneId & target_lane_reference_path, + const CommonDataPtr & common_data_ptr, const LaneChangeInfo & lane_change_info, + const PathWithLaneId & prepare_segment, const PathWithLaneId & target_segment, + const PathWithLaneId & target_lane_reference_path, const std::vector> & sorted_lane_ids) { const auto & shift_line = lane_change_info.shift_line; - const auto & original_lanes = lane_change_info.current_lanes; - const auto & target_lanes = lane_change_info.target_lanes; const auto terminal_lane_changing_velocity = lane_change_info.terminal_lane_changing_velocity; const auto longitudinal_acceleration = lane_change_info.longitudinal_acceleration; const auto lane_change_velocity = lane_change_info.velocity; @@ -393,9 +392,11 @@ std::optional constructCandidatePath( const bool enable_path_check_in_lanelet = false; // check candidate path is in lanelet + const auto & current_lanes = common_data_ptr->lanes_ptr->current; + const auto & target_lanes = common_data_ptr->lanes_ptr->target; if ( enable_path_check_in_lanelet && - !isPathInLanelets(shifted_path.path, original_lanes, target_lanes)) { + !isPathInLanelets(shifted_path.path, current_lanes, target_lanes)) { return std::nullopt; } @@ -968,17 +969,18 @@ bool isParkedObject( } bool passParkedObject( - const RouteHandler & route_handler, const LaneChangePath & lane_change_path, + const CommonDataPtr & common_data_ptr, const LaneChangePath & lane_change_path, const std::vector & objects, const double minimum_lane_change_length, - const bool is_goal_in_route, const LaneChangeParameters & lane_change_parameters, - CollisionCheckDebugMap & object_debug) + const bool is_goal_in_route, CollisionCheckDebugMap & object_debug) { + const auto route_handler = *common_data_ptr->route_handler_ptr; + const auto lane_change_parameters = *common_data_ptr->lc_param_ptr; const auto & object_check_min_road_shoulder_width = lane_change_parameters.object_check_min_road_shoulder_width; const auto & object_shiftable_ratio_threshold = lane_change_parameters.object_shiftable_ratio_threshold; const auto & path = lane_change_path.path; - const auto & current_lanes = lane_change_path.info.current_lanes; + const auto & current_lanes = common_data_ptr->lanes_ptr->current; const auto current_lane_path = route_handler.getCenterLinePath(current_lanes, 0.0, std::numeric_limits::max()); @@ -1135,10 +1137,9 @@ ExtendedPredictedObject transform( } bool isCollidedPolygonsInLanelet( - const std::vector & collided_polygons, const lanelet::ConstLanelets & lanes) + const std::vector & collided_polygons, + const std::optional & lanes_polygon) { - const auto lanes_polygon = createPolygon(lanes, 0.0, std::numeric_limits::max()); - const auto is_in_lanes = [&](const auto & collided_polygon) { return lanes_polygon && boost::geometry::intersects(lanes_polygon.value(), collided_polygon); }; @@ -1207,27 +1208,60 @@ double calcPhaseLength( return std::min(length_with_acceleration, length_with_max_velocity); } -LanesPolygon createLanesPolygon( - const lanelet::ConstLanelets & current_lanes, const lanelet::ConstLanelets & target_lanes, - const std::vector & target_backward_lanes) +LanesPolygon create_lanes_polygon(const CommonDataPtr & common_data_ptr) { + const auto & lanes = common_data_ptr->lanes_ptr; LanesPolygon lanes_polygon; lanes_polygon.current = - utils::lane_change::createPolygon(current_lanes, 0.0, std::numeric_limits::max()); + utils::lane_change::createPolygon(lanes->current, 0.0, std::numeric_limits::max()); lanes_polygon.target = - utils::lane_change::createPolygon(target_lanes, 0.0, std::numeric_limits::max()); + utils::lane_change::createPolygon(lanes->target, 0.0, std::numeric_limits::max()); + + const auto & lc_param_ptr = common_data_ptr->lc_param_ptr; + const auto expanded_target_lanes = utils::lane_change::generateExpandedLanelets( + lanes->target, common_data_ptr->direction, lc_param_ptr->lane_expansion_left_offset, + lc_param_ptr->lane_expansion_right_offset); + lanes_polygon.expanded_target = utils::lane_change::createPolygon( + expanded_target_lanes, 0.0, std::numeric_limits::max()); + + const auto & route_handler = *common_data_ptr->route_handler_ptr; + lanes_polygon.target_neighbor = + getTargetNeighborLanesPolygon(route_handler, lanes->current, common_data_ptr->lc_type); - for (const auto & target_backward_lane : target_backward_lanes) { - auto lane_polygon = utils::lane_change::createPolygon( - target_backward_lane, 0.0, std::numeric_limits::max()); + lanes_polygon.preceding_target.reserve(lanes->preceding_target.size()); + for (const auto & preceding_lane : lanes->preceding_target) { + auto lane_polygon = + utils::lane_change::createPolygon(preceding_lane, 0.0, std::numeric_limits::max()); if (lane_polygon) { - lanes_polygon.target_backward.push_back(*lane_polygon); + lanes_polygon.preceding_target.push_back(*lane_polygon); } } return lanes_polygon; } + +bool is_same_lane_with_prev_iteration( + const CommonDataPtr & common_data_ptr, const lanelet::ConstLanelets & current_lanes, + const lanelet::ConstLanelets & target_lanes) +{ + if (current_lanes.empty() || target_lanes.empty()) { + return false; + } + const auto & prev_current_lanes = common_data_ptr->lanes_ptr->current; + const auto & prev_target_lanes = common_data_ptr->lanes_ptr->target; + if (prev_current_lanes.empty() || prev_target_lanes.empty()) { + return false; + } + + if ( + (prev_current_lanes.front().id() != current_lanes.front().id()) || + (prev_current_lanes.back().id() != prev_current_lanes.back().id())) { + return false; + } + return (prev_target_lanes.front().id() == target_lanes.front().id()) && + (prev_target_lanes.back().id() == prev_target_lanes.back().id()); +} } // namespace autoware::behavior_path_planner::utils::lane_change namespace autoware::behavior_path_planner::utils::lane_change::debug From 479cddac49c8fb0e9e0342cf198b445f5e33fd95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mehmet=20Emin=20BA=C5=9EO=C4=9ELU?= Date: Fri, 12 Jul 2024 19:48:41 +0300 Subject: [PATCH 173/306] feat(system): create a package to monitor component containers (#7094) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mehmet Emin BAÅžOÄžLU --- .../autoware_component_monitor/CMakeLists.txt | 31 +++ system/autoware_component_monitor/README.md | 84 +++++++++ .../config/component_monitor.param.yaml | 3 + .../launch/component_monitor.launch.xml | 9 + system/autoware_component_monitor/package.xml | 25 +++ .../schema/component_monitor.schema.json | 30 +++ .../src/component_monitor_node.cpp | 177 ++++++++++++++++++ .../src/component_monitor_node.hpp | 102 ++++++++++ .../src/unit_conversions.hpp | 68 +++++++ .../test/test_unit_conversions.cpp | 57 ++++++ 10 files changed, 586 insertions(+) create mode 100644 system/autoware_component_monitor/CMakeLists.txt create mode 100644 system/autoware_component_monitor/README.md create mode 100644 system/autoware_component_monitor/config/component_monitor.param.yaml create mode 100644 system/autoware_component_monitor/launch/component_monitor.launch.xml create mode 100644 system/autoware_component_monitor/package.xml create mode 100644 system/autoware_component_monitor/schema/component_monitor.schema.json create mode 100644 system/autoware_component_monitor/src/component_monitor_node.cpp create mode 100644 system/autoware_component_monitor/src/component_monitor_node.hpp create mode 100644 system/autoware_component_monitor/src/unit_conversions.hpp create mode 100644 system/autoware_component_monitor/test/test_unit_conversions.cpp diff --git a/system/autoware_component_monitor/CMakeLists.txt b/system/autoware_component_monitor/CMakeLists.txt new file mode 100644 index 0000000000000..674b079a90563 --- /dev/null +++ b/system/autoware_component_monitor/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.8) +project(autoware_component_monitor) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +find_package(Boost REQUIRED COMPONENTS + filesystem +) + +ament_auto_add_library(${PROJECT_NAME} SHARED + src/component_monitor_node.cpp +) +target_link_libraries(${PROJECT_NAME} ${Boost_LIBRARIES}) + +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::component_monitor::ComponentMonitor" + EXECUTABLE ${PROJECT_NAME}_node +) + +if(BUILD_TESTING) + ament_add_ros_isolated_gtest(test_unit_conversions test/test_unit_conversions.cpp) + target_link_libraries(test_unit_conversions ${PROJECT_NAME}) + target_include_directories(test_unit_conversions PRIVATE src) +endif() + +ament_auto_package( + INSTALL_TO_SHARE + config + launch +) diff --git a/system/autoware_component_monitor/README.md b/system/autoware_component_monitor/README.md new file mode 100644 index 0000000000000..c255c420c048e --- /dev/null +++ b/system/autoware_component_monitor/README.md @@ -0,0 +1,84 @@ +# autoware_component_monitor + +The `autoware_component_monitor` package allows monitoring system usage of component containers. +The composable node inside the package is attached to a component container, and it publishes CPU and memory usage of +the container. + +## Inputs / Outputs + +### Input + +None. + +### Output + +| Name | Type | Description | +| -------------------------- | -------------------------------------------------- | ---------------------- | +| `~/component_system_usage` | `autoware_internal_msgs::msg::ResourceUsageReport` | CPU, Memory usage etc. | + +## Parameters + +### Core Parameters + +{{ json_to_markdown("system/autoware_component_monitor/schema/component_monitor.schema.json") }} + +## How to use + +Add it as a composable node in your launch file: + +```xml + + + + + ... + + + + + + + + ... + + +``` + +### Quick testing + +You can test the package by running the following command: + +```bash +ros2 component load autoware_component_monitor autoware::component_monitor::ComponentMonitor -p publish_rate:=10.0 --node-namespace + +# Example usage +ros2 component load /pointcloud_container autoware_component_monitor autoware::component_monitor::ComponentMonitor -p publish_rate:=10.0 --node-namespace /pointcloud_container +``` + +## How it works + +The package uses the `top` command under the hood. +`top -b -n 1 -E k -p PID` command is run at 10 Hz to get the system usage of the process. + +- `-b` activates the batch mode. By default, `top` doesn't exit and prints to stdout periodically. Batch mode allows + exiting the program. +- `-n` number of times should `top` prints the system usage in batch mode. +- `-p` specifies the PID of the process to monitor. +- `-E k` changes the memory unit in the summary section to KiB. + +Here is a sample output: + +```text +top - 13:57:26 up 3:14, 1 user, load average: 1,09, 1,10, 1,04 +Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie +%Cpu(s): 0,0 us, 0,8 sy, 0,0 ni, 99,2 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st +KiB Mem : 65532208 total, 35117428 free, 17669824 used, 12744956 buff/cache +KiB Swap: 39062524 total, 39062524 free, 0 used. 45520816 avail Mem + + PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND + 3352 meb 20 0 2905940 1,2g 39292 S 0,0 2,0 23:24.01 awesome +``` + +We get 5th, 8th fields from the last line, which are RES, %CPU respectively. diff --git a/system/autoware_component_monitor/config/component_monitor.param.yaml b/system/autoware_component_monitor/config/component_monitor.param.yaml new file mode 100644 index 0000000000000..62cf278921460 --- /dev/null +++ b/system/autoware_component_monitor/config/component_monitor.param.yaml @@ -0,0 +1,3 @@ +/**: + ros__parameters: + publish_rate: 5.0 # Hz diff --git a/system/autoware_component_monitor/launch/component_monitor.launch.xml b/system/autoware_component_monitor/launch/component_monitor.launch.xml new file mode 100644 index 0000000000000..1b2a77eddab93 --- /dev/null +++ b/system/autoware_component_monitor/launch/component_monitor.launch.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/system/autoware_component_monitor/package.xml b/system/autoware_component_monitor/package.xml new file mode 100644 index 0000000000000..640e1f2dc2517 --- /dev/null +++ b/system/autoware_component_monitor/package.xml @@ -0,0 +1,25 @@ + + + + autoware_component_monitor + 0.0.0 + A ROS 2 package to monitor system usage of component containers. + Mehmet Emin BaÅŸoÄŸlu + Apache-2.0 + + ament_cmake_auto + autoware_cmake + + autoware_internal_msgs + libboost-filesystem-dev + rclcpp + rclcpp_components + + ament_cmake_ros + ament_lint_auto + autoware_lint_common + + + ament_cmake + + diff --git a/system/autoware_component_monitor/schema/component_monitor.schema.json b/system/autoware_component_monitor/schema/component_monitor.schema.json new file mode 100644 index 0000000000000..f0edf5add718e --- /dev/null +++ b/system/autoware_component_monitor/schema/component_monitor.schema.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for the Component Monitor node", + "type": "object", + "definitions": { + "component_monitor": { + "type": "object", + "properties": { + "publish_rate": { + "type": "number", + "default": "5.0", + "description": "Publish rate in Hz" + } + }, + "required": ["publish_rate"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/component_monitor" + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/system/autoware_component_monitor/src/component_monitor_node.cpp b/system/autoware_component_monitor/src/component_monitor_node.cpp new file mode 100644 index 0000000000000..3c5d6b6667725 --- /dev/null +++ b/system/autoware_component_monitor/src/component_monitor_node.cpp @@ -0,0 +1,177 @@ +// Copyright 2024 The Autoware Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "component_monitor_node.hpp" + +#include "unit_conversions.hpp" + +#include + +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace autoware::component_monitor +{ +ComponentMonitor::ComponentMonitor(const rclcpp::NodeOptions & node_options) +: Node("component_monitor", node_options), publish_rate_(declare_parameter("publish_rate")) +{ + usage_pub_ = + create_publisher("~/component_system_usage", rclcpp::SensorDataQoS()); + + // Make sure top ins installed and is in path + const auto path_top = boost::process::search_path("top"); + if (path_top.empty()) { + RCLCPP_ERROR_STREAM(get_logger(), "Couldn't find 'top' in path."); + rclcpp::shutdown(); + } + + // Get the PID of the current process + int pid = getpid(); + + environment_ = boost::this_process::environment(); + environment_["LC_NUMERIC"] = "en_US.UTF-8"; + + on_timer_tick_wrapped_ = std::bind(&ComponentMonitor::on_timer_tick, this, pid); + + timer_ = rclcpp::create_timer( + this, get_clock(), rclcpp::Rate(publish_rate_).period(), on_timer_tick_wrapped_); +} + +void ComponentMonitor::on_timer_tick(const int pid) const +{ + if (usage_pub_->get_subscription_count() == 0) return; + + try { + auto usage_msg = pid_to_report(pid); + usage_msg.header.stamp = this->now(); + usage_msg.pid = pid; + usage_pub_->publish(usage_msg); + } catch (std::exception & e) { + RCLCPP_ERROR(get_logger(), "%s", e.what()); + } catch (...) { + RCLCPP_ERROR(get_logger(), "An unknown error occurred."); + } +} + +ComponentMonitor::ResourceUsageReport ComponentMonitor::pid_to_report(const pid_t & pid) const +{ + const auto std_out = run_system_command("top -b -n 1 -E k -p " + std::to_string(pid)); + + const auto fields = parse_lines_into_words(std_out); + + ResourceUsageReport report; + report.cpu_cores_utilized = std::stof(fields.back().at(8)) / 100.0f; + report.total_memory_bytes = unit_conversions::kib_to_bytes(std::stoul(fields.at(3).at(3))); + report.free_memory_bytes = unit_conversions::kib_to_bytes(std::stoul(fields.at(3).at(5))); + report.process_memory_bytes = parse_memory_res(fields.back().at(5)); + + return report; +} + +std::stringstream ComponentMonitor::run_system_command(const std::string & cmd) const +{ + int out_fd[2]; + if (pipe2(out_fd, O_CLOEXEC) != 0) { + RCLCPP_ERROR_STREAM(get_logger(), "Error setting flags on out_fd"); + } + boost::process::pipe out_pipe{out_fd[0], out_fd[1]}; + boost::process::ipstream is_out{std::move(out_pipe)}; + + int err_fd[2]; + if (pipe2(err_fd, O_CLOEXEC) != 0) { + RCLCPP_ERROR_STREAM(get_logger(), "Error setting flags on err_fd"); + } + boost::process::pipe err_pipe{err_fd[0], err_fd[1]}; + boost::process::ipstream is_err{std::move(err_pipe)}; + + boost::process::child c( + cmd, environment_, boost::process::std_out > is_out, boost::process::std_err > is_err); + c.wait(); + + if (c.exit_code() != 0) { + std::ostringstream os; + is_err >> os.rdbuf(); + RCLCPP_ERROR_STREAM(get_logger(), "Error running command: " << os.str()); + } + + std::stringstream sstream; + sstream << is_out.rdbuf(); + return sstream; +} + +ComponentMonitor::VecVecStr ComponentMonitor::parse_lines_into_words( + const std::stringstream & std_out) +{ + VecVecStr fields; + std::string line; + std::istringstream input{std_out.str()}; + + while (std::getline(input, line)) { + std::istringstream iss_line{line}; + std::string word; + std::vector words; + + while (iss_line >> word) { + words.push_back(word); + } + + fields.push_back(words); + } + + return fields; +} + +std::uint64_t ComponentMonitor::parse_memory_res(const std::string & mem_res) +{ + // example 1: 12.3g + // example 2: 123 (without suffix, just bytes) + static const std::unordered_map> unit_map{ + {'k', unit_conversions::kib_to_bytes}, {'m', unit_conversions::mib_to_bytes}, + {'g', unit_conversions::gib_to_bytes}, {'t', unit_conversions::tib_to_bytes}, + {'p', unit_conversions::pib_to_bytes}, {'e', unit_conversions::eib_to_bytes}}; + + if (std::isdigit(mem_res.back())) { + return std::stoull(mem_res); // Handle plain bytes without any suffix + } + + // Extract the numeric part and the unit suffix + double value = std::stod(mem_res.substr(0, mem_res.size() - 1)); + char suffix = mem_res.back(); + + // Find the appropriate function from the map + auto it = unit_map.find(suffix); + if (it != unit_map.end()) { + const auto & conversion_function = it->second; + return conversion_function(value); + } + + // Throw an exception or handle the error as needed if the suffix is not recognized + throw std::runtime_error("Unsupported unit suffix: " + std::string(1, suffix)); +} + +} // namespace autoware::component_monitor + +#include +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::component_monitor::ComponentMonitor) diff --git a/system/autoware_component_monitor/src/component_monitor_node.hpp b/system/autoware_component_monitor/src/component_monitor_node.hpp new file mode 100644 index 0000000000000..70a486eb8209b --- /dev/null +++ b/system/autoware_component_monitor/src/component_monitor_node.hpp @@ -0,0 +1,102 @@ +// Copyright 2024 The Autoware Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef COMPONENT_MONITOR_NODE_HPP_ +#define COMPONENT_MONITOR_NODE_HPP_ + +#include + +#include + +#include + +#include +#include +#include +#include + +namespace autoware::component_monitor +{ +class ComponentMonitor : public rclcpp::Node +{ +public: + explicit ComponentMonitor(const rclcpp::NodeOptions & node_options); + +private: + using ResourceUsageReport = autoware_internal_msgs::msg::ResourceUsageReport; + using VecVecStr = std::vector>; + + const double publish_rate_; + + std::function on_timer_tick_wrapped_; + + rclcpp::Publisher::SharedPtr usage_pub_; + rclcpp::TimerBase::SharedPtr timer_; + + boost::process::native_environment environment_; + + void on_timer_tick(int pid) const; + + /** + * @brief Get system usage of the component. + * + * @details The output of top -b -n 1 -E k -p PID` is like below: + * + * top - 13:57:26 up 3:14, 1 user, load average: 1,09, 1,10, 1,04 + * Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie + * %Cpu(s): 0,0 us, 0,8 sy, 0,0 ni, 99,2 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st + * KiB Mem : 65532208 total, 35117428 free, 17669824 used, 12744956 buff/cache + * KiB Swap: 39062524 total, 39062524 free, 0 used. 45520816 avail Mem + * + * PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND + * 3352 meb 20 0 2905940 1,2g 39292 S 0,0 2,0 23:24.01 awesome + * + * We get 5th and 8th fields, which are RES, %CPU, respectively. + */ + ResourceUsageReport pid_to_report(const pid_t & pid) const; + + /** + * @brief Run a terminal command and return the standard output. + * + * @param cmd The terminal command to run + * @return The standard output of the command + */ + std::stringstream run_system_command(const std::string & cmd) const; + + /** + * @brief Parses text from a stringstream into separated words by line. + * + * @param std_out Reference to the input stringstream. + * @return Nested vector with each inner vector containing words from one line. + */ + static VecVecStr parse_lines_into_words(const std::stringstream & std_out); + + /** + * @brief Parses a memory resource string and converts it to bytes. + * + * This function handles memory size strings with suffixes to denote + * the units (e.g., "k" for kibibytes, "m" for mebibytes, etc.). + * If the string has no suffix, it is interpreted as plain bytes. + * + * @param mem_res A string representing the memory resource with a unit suffix or just bytes. + * @return uint64_t The memory size in bytes. + * + * @exception std::runtime_error Thrown if the suffix is not recognized. + */ + static std::uint64_t parse_memory_res(const std::string & mem_res); +}; + +} // namespace autoware::component_monitor + +#endif // COMPONENT_MONITOR_NODE_HPP_ diff --git a/system/autoware_component_monitor/src/unit_conversions.hpp b/system/autoware_component_monitor/src/unit_conversions.hpp new file mode 100644 index 0000000000000..c8f3fa02da519 --- /dev/null +++ b/system/autoware_component_monitor/src/unit_conversions.hpp @@ -0,0 +1,68 @@ +// Copyright 2024 The Autoware Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef UNIT_CONVERSIONS_HPP_ +#define UNIT_CONVERSIONS_HPP_ + +#include +#include + +namespace autoware::component_monitor::unit_conversions +{ +template +std::uint64_t kib_to_bytes(T kibibytes) +{ + static_assert(std::is_arithmetic::value, "Template parameter must be a numeric type"); + return static_cast(kibibytes * 1024); +} + +template +std::uint64_t mib_to_bytes(T mebibytes) +{ + static_assert(std::is_arithmetic::value, "Template parameter must be a numeric type"); + return static_cast(mebibytes * 1024 * 1024); +} + +template +std::uint64_t gib_to_bytes(T gibibytes) +{ + static_assert(std::is_arithmetic::value, "Template parameter must be a numeric type"); + return static_cast(gibibytes * 1024ULL * 1024ULL * 1024ULL); +} + +template +std::uint64_t tib_to_bytes(T tebibytes) +{ + static_assert(std::is_arithmetic::value, "Template parameter must be a numeric type"); + return static_cast(tebibytes * 1024ULL * 1024ULL * 1024ULL * 1024ULL); +} + +template +std::uint64_t pib_to_bytes(T pebibytes) +{ + static_assert(std::is_arithmetic::value, "Template parameter must be a numeric type"); + return static_cast(pebibytes * 1024ULL * 1024ULL * 1024ULL * 1024ULL * 1024ULL); +} + +template +std::uint64_t eib_to_bytes(T exbibytes) +{ + static_assert(std::is_arithmetic::value, "Template parameter must be a numeric type"); + return static_cast( + exbibytes * 1024ULL * 1024ULL * 1024ULL * 1024ULL * 1024ULL * 1024ULL); +} + +} // namespace autoware::component_monitor::unit_conversions + +#endif // UNIT_CONVERSIONS_HPP_ diff --git a/system/autoware_component_monitor/test/test_unit_conversions.cpp b/system/autoware_component_monitor/test/test_unit_conversions.cpp new file mode 100644 index 0000000000000..e8104ff31b80e --- /dev/null +++ b/system/autoware_component_monitor/test/test_unit_conversions.cpp @@ -0,0 +1,57 @@ +// Copyright 2024 The Autoware Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "unit_conversions.hpp" + +#include + +namespace autoware::component_monitor::unit_conversions +{ +TEST(UnitConversions, kib_to_bytes) +{ + EXPECT_EQ(kib_to_bytes(1), 1024U); + EXPECT_EQ(kib_to_bytes(0), 0U); + EXPECT_EQ(kib_to_bytes(10), 10240U); +} +TEST(UnitConversions, mib_to_bytes) +{ + EXPECT_EQ(mib_to_bytes(1), 1048576U); + EXPECT_EQ(mib_to_bytes(0), 0U); + EXPECT_EQ(mib_to_bytes(10), 10485760U); +} +TEST(UnitConversions, gib_to_bytes) +{ + EXPECT_EQ(gib_to_bytes(1), 1073741824U); + EXPECT_EQ(gib_to_bytes(0), 0U); + EXPECT_EQ(gib_to_bytes(10), 10737418240U); +} +TEST(UnitConversions, tib_to_bytes) +{ + EXPECT_EQ(tib_to_bytes(1), 1099511627776U); + EXPECT_EQ(tib_to_bytes(0), 0U); + EXPECT_EQ(tib_to_bytes(10), 10995116277760U); +} +TEST(UnitConversions, pib_to_bytes) +{ + EXPECT_EQ(pib_to_bytes(1), 1125899906842624U); + EXPECT_EQ(pib_to_bytes(0), 0U); + EXPECT_EQ(pib_to_bytes(10), 11258999068426240U); +} +TEST(UnitConversions, eib_to_bytes) +{ + EXPECT_EQ(eib_to_bytes(1), 1152921504606846976U); + EXPECT_EQ(eib_to_bytes(0), 0U); + EXPECT_EQ(eib_to_bytes(10), 11529215046068469760U); +} +} // namespace autoware::component_monitor::unit_conversions From d6fca861430378fedb43dc45da0d2624f5cfaa6f Mon Sep 17 00:00:00 2001 From: "awf-autoware-bot[bot]" <94889083+awf-autoware-bot[bot]@users.noreply.github.com> Date: Fri, 12 Jul 2024 17:03:09 +0000 Subject: [PATCH 174/306] chore: update CODEOWNERS (#7926) Signed-off-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions --- .github/CODEOWNERS | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 48e4a9921bb9b..a59a5d9ac224e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -25,7 +25,7 @@ common/kalman_filter/** koji.minoda@tier4.jp takeshi.ishita@tier4.jp yukihiro.sa common/object_recognition_utils/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp takayuki.murooka@tier4.jp yoshi.ri@tier4.jp common/osqp_interface/** fumiya.watanabe@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp common/path_distance_calculator/** isamu.takagi@tier4.jp -common/perception_utils/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp +common/perception_utils/** shunsuke.miura@tier4.jp yoshi.ri@tier4.jp common/polar_grid/** yukihiro.saito@tier4.jp common/qp_interface/** fumiya.watanabe@tier4.jp maxime.clement@tier4.jp satoshi.ota@tier4.jp takayuki.murooka@tier4.jp common/signal_processing/** ali.boyali@tier4.jp fumiya.watanabe@tier4.jp kyoichi.sugahara@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp @@ -45,7 +45,7 @@ common/time_utils/** christopherj.ho@gmail.com shumpei.wakabayashi@tier4.jp tomo common/traffic_light_recognition_marker_publisher/** shumpei.wakabayashi@tier4.jp takeshi.miura@tier4.jp tomoya.kimura@tier4.jp common/traffic_light_utils/** kotaro.uetake@tier4.jp satoshi.ota@tier4.jp shunsuke.miura@tier4.jp common/tvm_utility/** ambroise.vincent@arm.com xinyu.wang@tier4.jp -control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp kyoichi.sugahara@tier4.jp +control/autoware_autonomous_emergency_braking/** daniel.sanchez@tier4.jp kyoichi.sugahara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp tomoya.kimura@tier4.jp control/autoware_control_validator/** kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp control/autoware_external_cmd_selector/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/autoware_joy_controller/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp @@ -63,6 +63,7 @@ control/control_performance_analysis/** berkay@leodrive.ai fumiya.watanabe@tier4 control/obstacle_collision_checker/** fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp control/predicted_path_checker/** berkay@leodrive.ai evaluator/autoware_control_evaluator/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp +evaluator/autoware_evaluator_utils/** daniel.sanchez@tier4.jp takayuki.murooka@tier4.jp evaluator/autoware_planning_evaluator/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp evaluator/diagnostic_converter/** kyoichi.sugahara@tier4.jp maxime.clement@tier4.jp takamasa.horibe@tier4.jp evaluator/kinematic_evaluator/** dominik.jargot@robotec.ai fumiya.watanabe@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp @@ -70,9 +71,9 @@ evaluator/localization_evaluator/** dominik.jargot@robotec.ai koji.minoda@tier4. evaluator/perception_online_evaluator/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp kotaro.uetake@tier4.jp kyoichi.sugahara@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp launch/tier4_autoware_api_launch/** isamu.takagi@tier4.jp ryohsuke.mitsudome@tier4.jp launch/tier4_control_launch/** takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp -launch/tier4_localization_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -launch/tier4_map_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -launch/tier4_perception_launch/** shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +launch/tier4_localization_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +launch/tier4_map_launch/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +launch/tier4_perception_launch/** shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp launch/tier4_planning_launch/** fumiya.watanabe@tier4.jp kosuke.takeuchi@tier4.jp kyoichi.sugahara@tier4.jp makoto.kurihara@tier4.jp mamoru.sobue@tier4.jp satoshi.ota@tier4.jp shumpei.wakabayashi@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomohito.ando@tier4.jp tomoya.kimura@tier4.jp zhe.shen@tier4.jp zulfaqar.azmi@tier4.jp launch/tier4_sensing_launch/** yukihiro.saito@tier4.jp launch/tier4_simulator_launch/** keisuke.shima@tier4.jp taiki.tanaka@tier4.jp takamasa.horibe@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp @@ -81,30 +82,36 @@ launch/tier4_vehicle_launch/** yukihiro.saito@tier4.jp localization/autoware_landmark_based_localizer/autoware_ar_tag_based_localizer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/autoware_landmark_based_localizer/autoware_landmark_manager/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/autoware_pose_covariance_modifier/** melike@leodrive.ai -localization/autoware_stop_filter/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -localization/ekf_localizer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp takamasa.horibe@tier4.jp takeshi.ishita@tier4.jp yamato.ando@tier4.jp -localization/geo_pose_projector/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +localization/autoware_stop_filter/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +localization/ekf_localizer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp takamasa.horibe@tier4.jp takeshi.ishita@tier4.jp yamato.ando@tier4.jp +localization/geo_pose_projector/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/gyro_odometer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -localization/localization_error_monitor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +localization/localization_error_monitor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/localization_util/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -localization/ndt_scan_matcher/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +localization/ndt_scan_matcher/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/pose2twist/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/pose_estimator_arbiter/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/pose_initializer/** anh.nguyen.2@tier4.jp isamu.takagi@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/pose_instability_detector/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -localization/twist2accel/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +localization/twist2accel/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/yabloc/yabloc_common/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/yabloc/yabloc_image_processing/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -localization/yabloc/yabloc_monitor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +localization/yabloc/yabloc_monitor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/yabloc/yabloc_particle_filter/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp localization/yabloc/yabloc_pose_initializer/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp map/map_height_fitter/** anh.nguyen.2@tier4.jp isamu.takagi@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -map/map_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp -map/map_projection_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +map/map_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +map/map_projection_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp map/map_tf_generator/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp map/util/lanelet2_map_preprocessor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp perception/autoware_crosswalk_traffic_light_estimator/** satoshi.ota@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp perception/autoware_map_based_prediction/** kotaro.uetake@tier4.jp kyoichi.sugahara@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yoshi.ri@tier4.jp +perception/autoware_object_range_splitter/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +perception/autoware_object_velocity_splitter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp +perception/autoware_radar_crossing_objects_noise_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp +perception/autoware_radar_fusion_to_detected_object/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp +perception/autoware_radar_object_clustering/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp +perception/autoware_radar_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/bytetrack/** manato.hirabayashi@tier4.jp yoshi.ri@tier4.jp perception/cluster_merger/** dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp perception/compare_map_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp yukihiro.saito@tier4.jp @@ -122,14 +129,8 @@ perception/lidar_centerpoint/** kenzo.lobos@tier4.jp koji.minoda@tier4.jp perception/lidar_transfusion/** amadeusz.szymko.2@tier4.jp kenzo.lobos@tier4.jp satoshi.tanaka@tier4.jp perception/multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp -perception/autoware_object_range_splitter/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp -perception/autoware_object_velocity_splitter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp perception/occupancy_grid_map_outlier_filter/** abrahammonrroy@yahoo.com yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/probabilistic_occupancy_grid_map/** mamoru.sobue@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp -perception/autoware_radar_crossing_objects_noise_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp -perception/autoware_radar_fusion_to_detected_object/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp -perception/autoware_radar_object_clustering/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp -perception/autoware_radar_object_tracker/** satoshi.tanaka@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/radar_tracks_msgs_converter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp perception/raindrop_cluster_filter/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/shape_estimation/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp @@ -200,10 +201,10 @@ planning/sampling_based_planner/autoware_bezier_sampler/** maxime.clement@tier4. planning/sampling_based_planner/autoware_frenet_planner/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_path_sampler/** maxime.clement@tier4.jp planning/sampling_based_planner/autoware_sampler_common/** maxime.clement@tier4.jp -sensing/gnss_poser/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp koji.minoda@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +sensing/gnss_poser/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp sensing/image_diagnostics/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp sensing/image_transport_decompressor/** kenzo.lobos@tier4.jp yukihiro.saito@tier4.jp -sensing/imu_corrector/** koji.minoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp +sensing/imu_corrector/** taiki.yamada@tier4.jp yamato.ando@tier4.jp sensing/livox/autoware_livox_tag_filter/** kenzo.lobos@tier4.jp ryohsuke.mitsudome@tier4.jp sensing/pointcloud_preprocessor/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp david.wong@tier4.jp kenzo.lobos@tier4.jp kyoichi.sugahara@tier4.jp melike@leodrive.ai shunsuke.miura@tier4.jp yihsiang.fang@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp sensing/radar_scan_to_pointcloud2/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp From 4f3013fda7fd8287ba607d76cf06de1f5cc8e44f Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sat, 13 Jul 2024 14:27:11 +0900 Subject: [PATCH 175/306] feat(velocity_smoother): add time_keeper (#8026) Signed-off-by: Takayuki Murooka --- .../autoware/velocity_smoother/node.hpp | 5 +++ .../analytical_jerk_constrained_smoother.hpp | 6 +++- .../smoother/jerk_filtered_smoother.hpp | 5 ++- .../smoother/l2_pseudo_jerk_smoother.hpp | 5 ++- .../smoother/linf_pseudo_jerk_smoother.hpp | 5 ++- .../smoother/smoother_base.hpp | 6 +++- .../autoware_velocity_smoother/src/node.cpp | 35 ++++++++++++++++--- .../analytical_jerk_constrained_smoother.cpp | 5 +-- .../src/smoother/jerk_filtered_smoother.cpp | 20 ++++++++++- .../src/smoother/l2_pseudo_jerk_smoother.cpp | 4 ++- .../smoother/linf_pseudo_jerk_smoother.cpp | 4 ++- .../src/smoother/smoother_base.cpp | 8 ++++- 12 files changed, 93 insertions(+), 15 deletions(-) diff --git a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/node.hpp b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/node.hpp index 0dd18615be5ef..26918cce24549 100644 --- a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/node.hpp +++ b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/node.hpp @@ -23,6 +23,7 @@ #include "autoware/universe_utils/ros/polling_subscriber.hpp" #include "autoware/universe_utils/ros/self_pose_listener.hpp" #include "autoware/universe_utils/system/stop_watch.hpp" +#include "autoware/universe_utils/system/time_keeper.hpp" #include "autoware/velocity_smoother/resample.hpp" #include "autoware/velocity_smoother/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.hpp" #include "autoware/velocity_smoother/smoother/jerk_filtered_smoother.hpp" @@ -260,6 +261,8 @@ class VelocitySmootherNode : public rclcpp::Node rclcpp::Publisher::SharedPtr debug_closest_jerk_; rclcpp::Publisher::SharedPtr debug_calculation_time_; rclcpp::Publisher::SharedPtr debug_closest_max_velocity_; + rclcpp::Publisher::SharedPtr + debug_processing_time_detail_; // For Jerk Filtered Algorithm Debug rclcpp::Publisher::SharedPtr pub_forward_filtered_trajectory_; @@ -275,6 +278,8 @@ class VelocitySmootherNode : public rclcpp::Node std::unique_ptr logger_configure_; std::unique_ptr published_time_publisher_; + + mutable std::shared_ptr time_keeper_{nullptr}; }; } // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.hpp b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.hpp index 42d5a520c9e44..bbc3828bb1b15 100644 --- a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.hpp +++ b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.hpp @@ -16,6 +16,7 @@ #define AUTOWARE__VELOCITY_SMOOTHER__SMOOTHER__ANALYTICAL_JERK_CONSTRAINED_SMOOTHER__ANALYTICAL_JERK_CONSTRAINED_SMOOTHER_HPP_ // NOLINT #include "autoware/motion_utils/trajectory/trajectory.hpp" +#include "autoware/universe_utils/system/time_keeper.hpp" #include "autoware/velocity_smoother/smoother/analytical_jerk_constrained_smoother/velocity_planning_utils.hpp" #include "autoware/velocity_smoother/smoother/smoother_base.hpp" #include "rclcpp/rclcpp.hpp" @@ -24,6 +25,7 @@ #include "autoware_planning_msgs/msg/trajectory_point.hpp" #include "geometry_msgs/msg/pose.hpp" +#include #include #include #include @@ -65,7 +67,9 @@ class AnalyticalJerkConstrainedSmoother : public SmootherBase } backward; }; - explicit AnalyticalJerkConstrainedSmoother(rclcpp::Node & node); + explicit AnalyticalJerkConstrainedSmoother( + rclcpp::Node & node, const std::shared_ptr time_keeper = + std::make_shared()); bool apply( const double initial_vel, const double initial_acc, const TrajectoryPoints & input, diff --git a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/jerk_filtered_smoother.hpp b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/jerk_filtered_smoother.hpp index 14d0d8ab7ff84..06a6f2da7f30a 100644 --- a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/jerk_filtered_smoother.hpp +++ b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/jerk_filtered_smoother.hpp @@ -17,6 +17,7 @@ #include "autoware/motion_utils/trajectory/trajectory.hpp" #include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/system/time_keeper.hpp" #include "autoware/velocity_smoother/smoother/smoother_base.hpp" #include "osqp_interface/osqp_interface.hpp" @@ -24,6 +25,7 @@ #include "boost/optional.hpp" +#include #include namespace autoware::velocity_smoother @@ -40,7 +42,8 @@ class JerkFilteredSmoother : public SmootherBase double jerk_filter_ds; }; - explicit JerkFilteredSmoother(rclcpp::Node & node); + explicit JerkFilteredSmoother( + rclcpp::Node & node, const std::shared_ptr time_keeper); bool apply( const double initial_vel, const double initial_acc, const TrajectoryPoints & input, diff --git a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/l2_pseudo_jerk_smoother.hpp b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/l2_pseudo_jerk_smoother.hpp index 1e2918d8e313b..a2a07ec6909aa 100644 --- a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/l2_pseudo_jerk_smoother.hpp +++ b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/l2_pseudo_jerk_smoother.hpp @@ -17,6 +17,7 @@ #include "autoware/motion_utils/trajectory/trajectory.hpp" #include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/system/time_keeper.hpp" #include "autoware/velocity_smoother/smoother/smoother_base.hpp" #include "osqp_interface/osqp_interface.hpp" @@ -24,6 +25,7 @@ #include "boost/optional.hpp" +#include #include namespace autoware::velocity_smoother @@ -38,7 +40,8 @@ class L2PseudoJerkSmoother : public SmootherBase double over_a_weight; }; - explicit L2PseudoJerkSmoother(rclcpp::Node & node); + explicit L2PseudoJerkSmoother( + rclcpp::Node & node, const std::shared_ptr time_keeper); bool apply( const double initial_vel, const double initial_acc, const TrajectoryPoints & input, diff --git a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/linf_pseudo_jerk_smoother.hpp b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/linf_pseudo_jerk_smoother.hpp index b88cd26eb4467..7c46a53431608 100644 --- a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/linf_pseudo_jerk_smoother.hpp +++ b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/linf_pseudo_jerk_smoother.hpp @@ -17,6 +17,7 @@ #include "autoware/motion_utils/trajectory/trajectory.hpp" #include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/system/time_keeper.hpp" #include "autoware/velocity_smoother/smoother/smoother_base.hpp" #include "osqp_interface/osqp_interface.hpp" @@ -24,6 +25,7 @@ #include "boost/optional.hpp" +#include #include namespace autoware::velocity_smoother @@ -38,7 +40,8 @@ class LinfPseudoJerkSmoother : public SmootherBase double over_a_weight; }; - explicit LinfPseudoJerkSmoother(rclcpp::Node & node); + explicit LinfPseudoJerkSmoother( + rclcpp::Node & node, const std::shared_ptr time_keeper); bool apply( const double initial_vel, const double initial_acc, const TrajectoryPoints & input, diff --git a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/smoother_base.hpp b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/smoother_base.hpp index be7baf694d361..6671eaa3eabe7 100644 --- a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/smoother_base.hpp +++ b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/smoother/smoother_base.hpp @@ -15,12 +15,14 @@ #ifndef AUTOWARE__VELOCITY_SMOOTHER__SMOOTHER__SMOOTHER_BASE_HPP_ #define AUTOWARE__VELOCITY_SMOOTHER__SMOOTHER__SMOOTHER_BASE_HPP_ +#include "autoware/universe_utils/system/time_keeper.hpp" #include "autoware/velocity_smoother/resample.hpp" #include "rclcpp/rclcpp.hpp" #include "autoware_planning_msgs/msg/trajectory_point.hpp" #include +#include #include namespace autoware::velocity_smoother @@ -54,7 +56,8 @@ class SmootherBase resampling::ResampleParam resample_param; }; - explicit SmootherBase(rclcpp::Node & node); + explicit SmootherBase( + rclcpp::Node & node, const std::shared_ptr time_keeper); virtual ~SmootherBase() = default; virtual bool apply( const double initial_vel, const double initial_acc, const TrajectoryPoints & input, @@ -85,6 +88,7 @@ class SmootherBase protected: BaseParam base_param_; + mutable std::shared_ptr time_keeper_{nullptr}; }; } // namespace autoware::velocity_smoother diff --git a/planning/autoware_velocity_smoother/src/node.cpp b/planning/autoware_velocity_smoother/src/node.cpp index b881b68798cdc..ca7526e9adf3b 100644 --- a/planning/autoware_velocity_smoother/src/node.cpp +++ b/planning/autoware_velocity_smoother/src/node.cpp @@ -46,6 +46,13 @@ VelocitySmootherNode::VelocitySmootherNode(const rclcpp::NodeOptions & node_opti initCommonParam(); over_stop_velocity_warn_thr_ = declare_parameter("over_stop_velocity_warn_thr"); + // create time_keeper and its publisher + // NOTE: This has to be called before setupSmoother to pass the time_keeper to the smoother. + debug_processing_time_detail_ = create_publisher( + "~/debug/processing_time_detail_ms", 1); + time_keeper_ = + std::make_shared(debug_processing_time_detail_); + // create smoother setupSmoother(wheelbase_); @@ -99,7 +106,7 @@ void VelocitySmootherNode::setupSmoother(const double wheelbase) { switch (node_param_.algorithm_type) { case AlgorithmType::JERK_FILTERED: { - smoother_ = std::make_shared(*this); + smoother_ = std::make_shared(*this, time_keeper_); // Set Publisher for jerk filtered algorithm pub_forward_filtered_trajectory_ = @@ -113,15 +120,15 @@ void VelocitySmootherNode::setupSmoother(const double wheelbase) break; } case AlgorithmType::L2: { - smoother_ = std::make_shared(*this); + smoother_ = std::make_shared(*this, time_keeper_); break; } case AlgorithmType::LINF: { - smoother_ = std::make_shared(*this); + smoother_ = std::make_shared(*this, time_keeper_); break; } case AlgorithmType::ANALYTICAL: { - smoother_ = std::make_shared(*this); + smoother_ = std::make_shared(*this, time_keeper_); break; } default: @@ -309,6 +316,8 @@ void VelocitySmootherNode::publishTrajectory(const TrajectoryPoints & trajectory void VelocitySmootherNode::calcExternalVelocityLimit() { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + if (!external_velocity_limit_ptr_) { return; } @@ -414,6 +423,8 @@ bool VelocitySmootherNode::checkData() const void VelocitySmootherNode::onCurrentTrajectory(const Trajectory::ConstSharedPtr msg) { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + RCLCPP_DEBUG(get_logger(), "========================= run start ========================="); stop_watch_.tic(); @@ -502,6 +513,8 @@ void VelocitySmootherNode::onCurrentTrajectory(const Trajectory::ConstSharedPtr void VelocitySmootherNode::updateDataForExternalVelocityLimit() { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + if (prev_output_.empty()) { return; } @@ -519,6 +532,8 @@ void VelocitySmootherNode::updateDataForExternalVelocityLimit() TrajectoryPoints VelocitySmootherNode::calcTrajectoryVelocity( const TrajectoryPoints & traj_input) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + TrajectoryPoints output{}; // velocity is optimized by qp solver // Extract trajectory around self-position with desired forward-backward length @@ -566,6 +581,8 @@ bool VelocitySmootherNode::smoothVelocity( const TrajectoryPoints & input, const size_t input_closest, TrajectoryPoints & traj_smoothed) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + if (input.empty()) { return false; // cannot apply smoothing } @@ -672,6 +689,8 @@ bool VelocitySmootherNode::smoothVelocity( void VelocitySmootherNode::insertBehindVelocity( const size_t output_closest, const InitializeType type, TrajectoryPoints & output) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + const bool keep_closest_vel_for_behind = (type == InitializeType::EGO_VELOCITY || type == InitializeType::LARGE_DEVIATION_REPLAN || type == InitializeType::ENGAGING); @@ -734,6 +753,8 @@ void VelocitySmootherNode::publishStopDistance(const TrajectoryPoints & trajecto std::pair VelocitySmootherNode::calcInitialMotion( const TrajectoryPoints & input_traj, const size_t input_closest) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + const double vehicle_speed = std::fabs(current_odometry_ptr_->twist.twist.linear.x); const double vehicle_acceleration = current_acceleration_ptr_->accel.accel.linear.x; const double target_vel = std::fabs(input_traj.at(input_closest).longitudinal_velocity_mps); @@ -817,6 +838,8 @@ std::pair VelocitySmootherNode::ca void VelocitySmootherNode::overwriteStopPoint( const TrajectoryPoints & input, TrajectoryPoints & output) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + const auto stop_idx = autoware::motion_utils::searchZeroVelocityIndex(input); if (!stop_idx) { return; @@ -863,6 +886,8 @@ void VelocitySmootherNode::overwriteStopPoint( void VelocitySmootherNode::applyExternalVelocityLimit(TrajectoryPoints & traj) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + if (traj.size() < 1) { return; } @@ -902,6 +927,8 @@ void VelocitySmootherNode::applyExternalVelocityLimit(TrajectoryPoints & traj) c void VelocitySmootherNode::applyStopApproachingVelocity(TrajectoryPoints & traj) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + const auto stop_idx = autoware::motion_utils::searchZeroVelocityIndex(traj); if (!stop_idx) { return; // no stop point. diff --git a/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp b/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp index 7f263fdea5e36..3906222454d35 100644 --- a/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp @@ -66,8 +66,9 @@ bool applyMaxVelocity( namespace autoware::velocity_smoother { -AnalyticalJerkConstrainedSmoother::AnalyticalJerkConstrainedSmoother(rclcpp::Node & node) -: SmootherBase(node) +AnalyticalJerkConstrainedSmoother::AnalyticalJerkConstrainedSmoother( + rclcpp::Node & node, const std::shared_ptr time_keeper) +: SmootherBase(node, time_keeper) { auto & p = smoother_param_; p.resample.ds_resample = node.declare_parameter("resample.ds_resample"); diff --git a/planning/autoware_velocity_smoother/src/smoother/jerk_filtered_smoother.cpp b/planning/autoware_velocity_smoother/src/smoother/jerk_filtered_smoother.cpp index cab8e49a3b45d..d458c688d060c 100644 --- a/planning/autoware_velocity_smoother/src/smoother/jerk_filtered_smoother.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/jerk_filtered_smoother.cpp @@ -29,7 +29,9 @@ namespace autoware::velocity_smoother { -JerkFilteredSmoother::JerkFilteredSmoother(rclcpp::Node & node) : SmootherBase(node) +JerkFilteredSmoother::JerkFilteredSmoother( + rclcpp::Node & node, const std::shared_ptr time_keeper) +: SmootherBase(node, time_keeper) { auto & p = smoother_param_; p.jerk_weight = node.declare_parameter("jerk_weight"); @@ -59,6 +61,8 @@ bool JerkFilteredSmoother::apply( const double v0, const double a0, const TrajectoryPoints & input, TrajectoryPoints & output, std::vector & debug_trajectories) { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + output = input; if (input.empty()) { @@ -102,6 +106,8 @@ bool JerkFilteredSmoother::apply( const auto initial_traj_pose = filtered.front().pose; const auto resample = [&](const auto & trajectory) { + autoware::universe_utils::ScopedTimeTrack st("resample", *time_keeper_); + return resampling::resampleTrajectory( trajectory, v0, initial_traj_pose, std::numeric_limits::max(), std::numeric_limits::max(), base_param_.resample_param); @@ -152,6 +158,7 @@ bool JerkFilteredSmoother::apply( v_max_arr.at(i) = opt_resampled_trajectory.at(i).longitudinal_velocity_mps; } + time_keeper_->start_track("initOptimization"); /* * x = [ * b[0], b[1], ..., b[N], : 0~N @@ -290,9 +297,12 @@ bool JerkFilteredSmoother::apply( lower_bound[constr_idx] = a0; ++constr_idx; } + time_keeper_->end_track("initOptimization"); // execute optimization + time_keeper_->start_track("optimize"); const auto result = qp_solver_.optimize(P, A, q, lower_bound, upper_bound); + time_keeper_->end_track("optimize"); const std::vector optval = std::get<0>(result); const int status_val = std::get<3>(result); if (status_val != 1) { @@ -356,6 +366,8 @@ TrajectoryPoints JerkFilteredSmoother::forwardJerkFilter( const double v0, const double a0, const double a_max, const double a_start, const double j_max, const TrajectoryPoints & input) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + auto applyLimits = [&input, &a_start](double & v, double & a, size_t i) { double v_lim = input.at(i).longitudinal_velocity_mps; static constexpr double ep = 1.0e-5; @@ -408,6 +420,8 @@ TrajectoryPoints JerkFilteredSmoother::backwardJerkFilter( const double v0, const double a0, const double a_min, const double a_stop, const double j_min, const TrajectoryPoints & input) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + auto input_rev = input; std::reverse(input_rev.begin(), input_rev.end()); auto filtered = forwardJerkFilter( @@ -423,6 +437,8 @@ TrajectoryPoints JerkFilteredSmoother::mergeFilteredTrajectory( const double v0, const double a0, const double a_min, const double j_min, const TrajectoryPoints & forward_filtered, const TrajectoryPoints & backward_filtered) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + TrajectoryPoints merged; merged = forward_filtered; @@ -475,6 +491,8 @@ TrajectoryPoints JerkFilteredSmoother::resampleTrajectory( const geometry_msgs::msg::Pose & current_pose, const double nearest_dist_threshold, const double nearest_yaw_threshold) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + return resampling::resampleTrajectory( input, current_pose, nearest_dist_threshold, nearest_yaw_threshold, base_param_.resample_param, smoother_param_.jerk_filter_ds); diff --git a/planning/autoware_velocity_smoother/src/smoother/l2_pseudo_jerk_smoother.cpp b/planning/autoware_velocity_smoother/src/smoother/l2_pseudo_jerk_smoother.cpp index b489c994b0495..f379b217187c9 100644 --- a/planning/autoware_velocity_smoother/src/smoother/l2_pseudo_jerk_smoother.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/l2_pseudo_jerk_smoother.cpp @@ -25,7 +25,9 @@ namespace autoware::velocity_smoother { -L2PseudoJerkSmoother::L2PseudoJerkSmoother(rclcpp::Node & node) : SmootherBase(node) +L2PseudoJerkSmoother::L2PseudoJerkSmoother( + rclcpp::Node & node, const std::shared_ptr time_keeper) +: SmootherBase(node, time_keeper) { auto & p = smoother_param_; p.pseudo_jerk_weight = node.declare_parameter("pseudo_jerk_weight"); diff --git a/planning/autoware_velocity_smoother/src/smoother/linf_pseudo_jerk_smoother.cpp b/planning/autoware_velocity_smoother/src/smoother/linf_pseudo_jerk_smoother.cpp index cb8451dba8302..2ab3d6dd80dfc 100644 --- a/planning/autoware_velocity_smoother/src/smoother/linf_pseudo_jerk_smoother.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/linf_pseudo_jerk_smoother.cpp @@ -25,7 +25,9 @@ namespace autoware::velocity_smoother { -LinfPseudoJerkSmoother::LinfPseudoJerkSmoother(rclcpp::Node & node) : SmootherBase(node) +LinfPseudoJerkSmoother::LinfPseudoJerkSmoother( + rclcpp::Node & node, const std::shared_ptr time_keeper) +: SmootherBase(node, time_keeper) { auto & p = smoother_param_; p.pseudo_jerk_weight = node.declare_parameter("pseudo_jerk_weight"); diff --git a/planning/autoware_velocity_smoother/src/smoother/smoother_base.cpp b/planning/autoware_velocity_smoother/src/smoother/smoother_base.cpp index 700cf45b7eb9d..46faf10fe4a62 100644 --- a/planning/autoware_velocity_smoother/src/smoother/smoother_base.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/smoother_base.cpp @@ -60,7 +60,9 @@ TrajectoryPoints applyPreProcess( } } // namespace -SmootherBase::SmootherBase(rclcpp::Node & node) +SmootherBase::SmootherBase( + rclcpp::Node & node, const std::shared_ptr time_keeper) +: time_keeper_(time_keeper) { auto & p = base_param_; p.max_accel = node.declare_parameter("normal.max_acc"); @@ -130,6 +132,8 @@ TrajectoryPoints SmootherBase::applyLateralAccelerationFilter( [[maybe_unused]] const double a0, [[maybe_unused]] const bool enable_smooth_limit, const bool use_resampling, const double input_points_interval) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + if (input.size() < 3) { return input; // cannot calculate lateral acc. do nothing. } @@ -198,6 +202,8 @@ TrajectoryPoints SmootherBase::applySteeringRateLimit( const TrajectoryPoints & input, const bool use_resampling, const double input_points_interval) const { + autoware::universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + if (input.size() < 3) { return input; // cannot calculate the desired velocity. do nothing. } From ea5c06cedb49ae2887ddce9e5223539b1f1235bc Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Sat, 13 Jul 2024 14:56:46 +0900 Subject: [PATCH 176/306] refactor(qp_interface): clean up the code (#8029) * refactor qp_interface Signed-off-by: Takayuki Murooka * variable names: m_XXX -> XXX_ Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../qp_interface/osqp_csc_matrix_conv.hpp | 10 +- .../include/qp_interface/osqp_interface.hpp | 42 ++-- .../include/qp_interface/proxqp_interface.hpp | 18 +- .../include/qp_interface/qp_interface.hpp | 18 +- .../qp_interface/src/osqp_csc_matrix_conv.cpp | 10 +- common/qp_interface/src/osqp_interface.cpp | 236 +++++++++--------- common/qp_interface/src/proxqp_interface.cpp | 84 +++++-- common/qp_interface/src/qp_interface.cpp | 8 +- .../test/test_csc_matrix_conv.cpp | 210 ++++++++-------- .../qp_interface/test/test_osqp_interface.cpp | 64 ++--- .../test/test_proxqp_interface.cpp | 21 +- 11 files changed, 377 insertions(+), 344 deletions(-) diff --git a/common/qp_interface/include/qp_interface/osqp_csc_matrix_conv.hpp b/common/qp_interface/include/qp_interface/osqp_csc_matrix_conv.hpp index 74ec4c1282f46..8ec7280cfc100 100644 --- a/common/qp_interface/include/qp_interface/osqp_csc_matrix_conv.hpp +++ b/common/qp_interface/include/qp_interface/osqp_csc_matrix_conv.hpp @@ -21,17 +21,17 @@ #include -namespace qp +namespace autoware::common { /// \brief Compressed-Column-Sparse Matrix struct CSC_Matrix { /// Vector of non-zero values. Ex: [4,1,1,2] - std::vector m_vals; + std::vector vals_; /// Vector of row index corresponding to values. Ex: [0, 1, 0, 1] (Eigen: 'inner') - std::vector m_row_idxs; + std::vector row_idxs_; /// Vector of 'val' indices where each column starts. Ex: [0, 2, 4] (Eigen: 'outer') - std::vector m_col_idxs; + std::vector col_idxs_; }; /// \brief Calculate CSC matrix from Eigen matrix @@ -41,6 +41,6 @@ CSC_Matrix calCSCMatrixTrapezoidal(const Eigen::MatrixXd & mat); /// \brief Print the given CSC matrix to the standard output void printCSCMatrix(const CSC_Matrix & csc_mat); -} // namespace qp +} // namespace autoware::common #endif // QP_INTERFACE__OSQP_CSC_MATRIX_CONV_HPP_ diff --git a/common/qp_interface/include/qp_interface/osqp_interface.hpp b/common/qp_interface/include/qp_interface/osqp_interface.hpp index ef2c3bd17c89e..14c03a91d8fa1 100644 --- a/common/qp_interface/include/qp_interface/osqp_interface.hpp +++ b/common/qp_interface/include/qp_interface/osqp_interface.hpp @@ -24,9 +24,9 @@ #include #include -namespace qp +namespace autoware::common { -constexpr c_float INF = 1e30; +constexpr c_float OSQP_INF = 1e30; class OSQPInterface : public QPInterface { @@ -34,7 +34,9 @@ class OSQPInterface : public QPInterface /// \brief Constructor without problem formulation OSQPInterface( const bool enable_warm_start = false, - const c_float eps_abs = std::numeric_limits::epsilon(), const bool polish = true); + const c_float eps_abs = std::numeric_limits::epsilon(), + const c_float eps_rel = std::numeric_limits::epsilon(), const bool polish = true, + const bool verbose = false); /// \brief Constructor with problem setup /// \param P: (n,n) matrix defining relations between parameters. /// \param A: (m,n) matrix defining parameter constraints relative to the lower and upper bound. @@ -60,8 +62,10 @@ class OSQPInterface : public QPInterface CSC_Matrix P, CSC_Matrix A, const std::vector & q, const std::vector & l, const std::vector & u); - int getIteration() const override; - int getStatus() const override; + int getIterationNumber() const override; + bool isSolved() const override; + std::string getStatus() const override; + int getPolishStatus() const; std::vector getDualSolution() const; @@ -96,20 +100,18 @@ class OSQPInterface : public QPInterface void updateCheckTermination(const int check_termination); /// \brief Get the number of iteration taken to solve the problem - inline int64_t getTakenIter() const { return static_cast(m_latest_work_info.iter); } + inline int64_t getTakenIter() const { return static_cast(latest_work_info_.iter); } /// \brief Get the status message for the latest problem solved inline std::string getStatusMessage() const { - return static_cast(m_latest_work_info.status); + return static_cast(latest_work_info_.status); } /// \brief Get the runtime of the latest problem solved - inline double getRunTime() const { return m_latest_work_info.run_time; } + inline double getRunTime() const { return latest_work_info_.run_time; } /// \brief Get the objective value the latest problem solved - inline double getObjVal() const { return m_latest_work_info.obj_val; } + inline double getObjVal() const { return latest_work_info_.obj_val; } /// \brief Returns flag asserting interface condition (Healthy condition: 0). - inline int64_t getExitFlag() const { return m_exitflag; } - - void logUnsolvedStatus(const std::string & prefix_message = "") const; + inline int64_t getExitFlag() const { return exitflag_; } // Setter functions for warm start bool setWarmStart( @@ -118,17 +120,17 @@ class OSQPInterface : public QPInterface bool setDualVariables(const std::vector & dual_variables); private: - std::unique_ptr> m_work; - std::unique_ptr m_settings; - std::unique_ptr m_data; + std::unique_ptr> work_; + std::unique_ptr settings_; + std::unique_ptr data_; // store last work info since work is cleaned up at every execution to prevent memory leak. - OSQPInfo m_latest_work_info; + OSQPInfo latest_work_info_; // Number of parameters to optimize - int64_t m_param_n; + int64_t param_n_; // Flag to check if the current work exists - bool m_work_initialized = false; + bool work__initialized = false; // Exitflag - int64_t m_exitflag; + int64_t exitflag_; void initializeProblemImpl( const Eigen::MatrixXd & P, const Eigen::MatrixXd & A, const std::vector & q, @@ -140,6 +142,6 @@ class OSQPInterface : public QPInterface std::vector optimizeImpl() override; }; -} // namespace qp +} // namespace autoware::common #endif // QP_INTERFACE__OSQP_INTERFACE_HPP_ diff --git a/common/qp_interface/include/qp_interface/proxqp_interface.hpp b/common/qp_interface/include/qp_interface/proxqp_interface.hpp index a940262d5f6da..f75fb3da5954c 100644 --- a/common/qp_interface/include/qp_interface/proxqp_interface.hpp +++ b/common/qp_interface/include/qp_interface/proxqp_interface.hpp @@ -22,27 +22,29 @@ #include #include +#include #include -namespace qp +namespace autoware::common { class ProxQPInterface : public QPInterface { public: explicit ProxQPInterface( - const bool enable_warm_start = false, - const double eps_abs = std::numeric_limits::epsilon()); + const bool enable_warm_start, const double eps_abs, const double eps_rel, + const bool verbose = false); - int getIteration() const override; - int getStatus() const override; + int getIterationNumber() const override; + bool isSolved() const override; + std::string getStatus() const override; void updateEpsAbs(const double eps_abs) override; void updateEpsRel(const double eps_rel) override; void updateVerbose(const bool verbose) override; private: - proxsuite::proxqp::Settings m_settings; - std::shared_ptr> m_qp_ptr; + proxsuite::proxqp::Settings settings_{}; + std::shared_ptr> qp_ptr_{nullptr}; void initializeProblemImpl( const Eigen::MatrixXd & P, const Eigen::MatrixXd & A, const std::vector & q, @@ -50,6 +52,6 @@ class ProxQPInterface : public QPInterface std::vector optimizeImpl() override; }; -} // namespace qp +} // namespace autoware::common #endif // QP_INTERFACE__PROXQP_INTERFACE_HPP_ diff --git a/common/qp_interface/include/qp_interface/qp_interface.hpp b/common/qp_interface/include/qp_interface/qp_interface.hpp index 026c0fe413b71..85e2d103cde7a 100644 --- a/common/qp_interface/include/qp_interface/qp_interface.hpp +++ b/common/qp_interface/include/qp_interface/qp_interface.hpp @@ -18,28 +18,30 @@ #include #include +#include #include -namespace qp +namespace autoware::common { class QPInterface { public: - explicit QPInterface(const bool enable_warm_start) : m_enable_warm_start(enable_warm_start) {} + explicit QPInterface(const bool enable_warm_start) : enable_warm_start_(enable_warm_start) {} std::vector optimize( const Eigen::MatrixXd & P, const Eigen::MatrixXd & A, const std::vector & q, const std::vector & l, const std::vector & u); - virtual int getIteration() const = 0; - virtual int getStatus() const = 0; + virtual bool isSolved() const = 0; + virtual int getIterationNumber() const = 0; + virtual std::string getStatus() const = 0; virtual void updateEpsAbs([[maybe_unused]] const double eps_abs) = 0; virtual void updateEpsRel([[maybe_unused]] const double eps_rel) = 0; virtual void updateVerbose([[maybe_unused]] const bool verbose) {} protected: - bool m_enable_warm_start; + bool enable_warm_start_{false}; void initializeProblem( const Eigen::MatrixXd & P, const Eigen::MatrixXd & A, const std::vector & q, @@ -51,9 +53,9 @@ class QPInterface virtual std::vector optimizeImpl() = 0; - std::optional m_variables_num; - std::optional m_constraints_num; + std::optional variables_num_{std::nullopt}; + std::optional constraints_num_{std::nullopt}; }; -} // namespace qp +} // namespace autoware::common #endif // QP_INTERFACE__QP_INTERFACE_HPP_ diff --git a/common/qp_interface/src/osqp_csc_matrix_conv.cpp b/common/qp_interface/src/osqp_csc_matrix_conv.cpp index 0faf7586463fd..77a481f442000 100644 --- a/common/qp_interface/src/osqp_csc_matrix_conv.cpp +++ b/common/qp_interface/src/osqp_csc_matrix_conv.cpp @@ -21,7 +21,7 @@ #include #include -namespace qp +namespace autoware::common { CSC_Matrix calCSCMatrix(const Eigen::MatrixXd & mat) { @@ -114,21 +114,21 @@ CSC_Matrix calCSCMatrixTrapezoidal(const Eigen::MatrixXd & mat) void printCSCMatrix(const CSC_Matrix & csc_mat) { std::cout << "["; - for (const c_float & val : csc_mat.m_vals) { + for (const c_float & val : csc_mat.vals_) { std::cout << val << ", "; } std::cout << "]\n"; std::cout << "["; - for (const c_int & row : csc_mat.m_row_idxs) { + for (const c_int & row : csc_mat.row_idxs_) { std::cout << row << ", "; } std::cout << "]\n"; std::cout << "["; - for (const c_int & col : csc_mat.m_col_idxs) { + for (const c_int & col : csc_mat.col_idxs_) { std::cout << col << ", "; } std::cout << "]\n"; } -} // namespace qp +} // namespace autoware::common diff --git a/common/qp_interface/src/osqp_interface.cpp b/common/qp_interface/src/osqp_interface.cpp index 81d2ffeeaaed5..0e8cb7e13988a 100644 --- a/common/qp_interface/src/osqp_interface.cpp +++ b/common/qp_interface/src/osqp_interface.cpp @@ -18,27 +18,29 @@ #include -namespace qp -{ -OSQPInterface::OSQPInterface(const bool enable_warm_start, const c_float eps_abs, const bool polish) -: QPInterface(enable_warm_start), m_work{nullptr, OSQPWorkspaceDeleter} -{ - m_settings = std::make_unique(); - m_data = std::make_unique(); - - if (m_settings) { - osqp_set_default_settings(m_settings.get()); - m_settings->alpha = 1.6; // Change alpha parameter - m_settings->eps_rel = 1.0E-4; - m_settings->eps_abs = eps_abs; - m_settings->eps_prim_inf = 1.0E-4; - m_settings->eps_dual_inf = 1.0E-4; - m_settings->warm_start = true; - m_settings->max_iter = 4000; - m_settings->verbose = false; - m_settings->polish = polish; +namespace autoware::common +{ +OSQPInterface::OSQPInterface( + const bool enable_warm_start, const c_float eps_abs, const c_float eps_rel, const bool polish, + const bool verbose) +: QPInterface(enable_warm_start), work_{nullptr, OSQPWorkspaceDeleter} +{ + settings_ = std::make_unique(); + data_ = std::make_unique(); + + if (settings_) { + osqp_set_default_settings(settings_.get()); + settings_->alpha = 1.6; // Change alpha parameter + settings_->eps_rel = eps_rel; + settings_->eps_abs = eps_abs; + settings_->eps_prim_inf = 1.0E-4; + settings_->eps_dual_inf = 1.0E-4; + settings_->warm_start = true; + settings_->max_iter = 4000; + settings_->verbose = verbose; + settings_->polish = polish; } - m_exitflag = 0; + exitflag_ = 0; } OSQPInterface::OSQPInterface( @@ -61,8 +63,8 @@ OSQPInterface::OSQPInterface( OSQPInterface::~OSQPInterface() { - if (m_data->P) free(m_data->P); - if (m_data->A) free(m_data->A); + if (data_->P) free(data_->P); + if (data_->A) free(data_->A); } void OSQPInterface::initializeProblemImpl( @@ -89,30 +91,30 @@ void OSQPInterface::initializeCSCProblemImpl( /********************** * OBJECTIVE FUNCTION **********************/ - m_param_n = static_cast(q.size()); - m_data->m = static_cast(l.size()); + param_n_ = static_cast(q.size()); + data_->m = static_cast(l.size()); /***************** * POPULATE DATA *****************/ - m_data->n = m_param_n; - if (m_data->P) free(m_data->P); - m_data->P = csc_matrix( - m_data->n, m_data->n, static_cast(P_csc.m_vals.size()), P_csc.m_vals.data(), - P_csc.m_row_idxs.data(), P_csc.m_col_idxs.data()); - m_data->q = q_dyn; - if (m_data->A) free(m_data->A); - m_data->A = csc_matrix( - m_data->m, m_data->n, static_cast(A_csc.m_vals.size()), A_csc.m_vals.data(), - A_csc.m_row_idxs.data(), A_csc.m_col_idxs.data()); - m_data->l = l_dyn; - m_data->u = u_dyn; + data_->n = param_n_; + if (data_->P) free(data_->P); + data_->P = csc_matrix( + data_->n, data_->n, static_cast(P_csc.vals_.size()), P_csc.vals_.data(), + P_csc.row_idxs_.data(), P_csc.col_idxs_.data()); + data_->q = q_dyn; + if (data_->A) free(data_->A); + data_->A = csc_matrix( + data_->m, data_->n, static_cast(A_csc.vals_.size()), A_csc.vals_.data(), + A_csc.row_idxs_.data(), A_csc.col_idxs_.data()); + data_->l = l_dyn; + data_->u = u_dyn; // Setup workspace OSQPWorkspace * workspace; - m_exitflag = osqp_setup(&workspace, m_data.get(), m_settings.get()); - m_work.reset(workspace); - m_work_initialized = true; + exitflag_ = osqp_setup(&workspace, data_.get(), settings_.get()); + work_.reset(workspace); + work__initialized = true; } void OSQPInterface::OSQPWorkspaceDeleter(OSQPWorkspace * ptr) noexcept @@ -124,67 +126,67 @@ void OSQPInterface::OSQPWorkspaceDeleter(OSQPWorkspace * ptr) noexcept void OSQPInterface::updateEpsAbs(const double eps_abs) { - m_settings->eps_abs = eps_abs; // for default setting - if (m_work_initialized) { - osqp_update_eps_abs(m_work.get(), eps_abs); // for current work + settings_->eps_abs = eps_abs; // for default setting + if (work__initialized) { + osqp_update_eps_abs(work_.get(), eps_abs); // for current work } } void OSQPInterface::updateEpsRel(const double eps_rel) { - m_settings->eps_rel = eps_rel; // for default setting - if (m_work_initialized) { - osqp_update_eps_rel(m_work.get(), eps_rel); // for current work + settings_->eps_rel = eps_rel; // for default setting + if (work__initialized) { + osqp_update_eps_rel(work_.get(), eps_rel); // for current work } } void OSQPInterface::updateMaxIter(const int max_iter) { - m_settings->max_iter = max_iter; // for default setting - if (m_work_initialized) { - osqp_update_max_iter(m_work.get(), max_iter); // for current work + settings_->max_iter = max_iter; // for default setting + if (work__initialized) { + osqp_update_max_iter(work_.get(), max_iter); // for current work } } void OSQPInterface::updateVerbose(const bool is_verbose) { - m_settings->verbose = is_verbose; // for default setting - if (m_work_initialized) { - osqp_update_verbose(m_work.get(), is_verbose); // for current work + settings_->verbose = is_verbose; // for default setting + if (work__initialized) { + osqp_update_verbose(work_.get(), is_verbose); // for current work } } void OSQPInterface::updateRhoInterval(const int rho_interval) { - m_settings->adaptive_rho_interval = rho_interval; // for default setting + settings_->adaptive_rho_interval = rho_interval; // for default setting } void OSQPInterface::updateRho(const double rho) { - m_settings->rho = rho; - if (m_work_initialized) { - osqp_update_rho(m_work.get(), rho); + settings_->rho = rho; + if (work__initialized) { + osqp_update_rho(work_.get(), rho); } } void OSQPInterface::updateAlpha(const double alpha) { - m_settings->alpha = alpha; - if (m_work_initialized) { - osqp_update_alpha(m_work.get(), alpha); + settings_->alpha = alpha; + if (work__initialized) { + osqp_update_alpha(work_.get(), alpha); } } void OSQPInterface::updateScaling(const int scaling) { - m_settings->scaling = scaling; + settings_->scaling = scaling; } void OSQPInterface::updatePolish(const bool polish) { - m_settings->polish = polish; - if (m_work_initialized) { - osqp_update_polish(m_work.get(), polish); + settings_->polish = polish; + if (work__initialized) { + osqp_update_polish(work_.get(), polish); } } @@ -195,9 +197,9 @@ void OSQPInterface::updatePolishRefinementIteration(const int polish_refine_iter return; } - m_settings->polish_refine_iter = polish_refine_iter; - if (m_work_initialized) { - osqp_update_polish_refine_iter(m_work.get(), polish_refine_iter); + settings_->polish_refine_iter = polish_refine_iter; + if (work__initialized) { + osqp_update_polish_refine_iter(work_.get(), polish_refine_iter); } } @@ -208,9 +210,9 @@ void OSQPInterface::updateCheckTermination(const int check_termination) return; } - m_settings->check_termination = check_termination; - if (m_work_initialized) { - osqp_update_check_termination(m_work.get(), check_termination); + settings_->check_termination = check_termination; + if (work__initialized) { + osqp_update_check_termination(work_.get(), check_termination); } } @@ -222,11 +224,11 @@ bool OSQPInterface::setWarmStart( bool OSQPInterface::setPrimalVariables(const std::vector & primal_variables) { - if (!m_work_initialized) { + if (!work__initialized) { return false; } - const auto result = osqp_warm_start_x(m_work.get(), primal_variables.data()); + const auto result = osqp_warm_start_x(work_.get(), primal_variables.data()); if (result != 0) { std::cerr << "Failed to set primal variables for warm start" << std::endl; return false; @@ -237,11 +239,11 @@ bool OSQPInterface::setPrimalVariables(const std::vector & primal_variab bool OSQPInterface::setDualVariables(const std::vector & dual_variables) { - if (!m_work_initialized) { + if (!work__initialized) { return false; } - const auto result = osqp_warm_start_y(m_work.get(), dual_variables.data()); + const auto result = osqp_warm_start_y(work_.get(), dual_variables.data()); if (result != 0) { std::cerr << "Failed to set dual variables for warm start" << std::endl; return false; @@ -250,27 +252,6 @@ bool OSQPInterface::setDualVariables(const std::vector & dual_variables) return true; } -void OSQPInterface::logUnsolvedStatus(const std::string & prefix_message) const -{ - const int status = getStatus(); - if (status == 1) { - // No need to log since optimization was solved. - return; - } - - // create message - std::string output_message = ""; - if (prefix_message != "") { - output_message = prefix_message + " "; - } - - const auto status_message = getStatusMessage(); - output_message += "Optimization failed due to " + status_message; - - // log with warning - RCLCPP_WARN(rclcpp::get_logger("osqp_interface"), output_message.c_str()); -} - void OSQPInterface::updateP(const Eigen::MatrixXd & P_new) { /* @@ -283,14 +264,12 @@ void OSQPInterface::updateP(const Eigen::MatrixXd & P_new) c_int P_elem_N = P_sparse.nonZeros(); */ CSC_Matrix P_csc = calCSCMatrixTrapezoidal(P_new); - osqp_update_P( - m_work.get(), P_csc.m_vals.data(), OSQP_NULL, static_cast(P_csc.m_vals.size())); + osqp_update_P(work_.get(), P_csc.vals_.data(), OSQP_NULL, static_cast(P_csc.vals_.size())); } void OSQPInterface::updateCscP(const CSC_Matrix & P_csc) { - osqp_update_P( - m_work.get(), P_csc.m_vals.data(), OSQP_NULL, static_cast(P_csc.m_vals.size())); + osqp_update_P(work_.get(), P_csc.vals_.data(), OSQP_NULL, static_cast(P_csc.vals_.size())); } void OSQPInterface::updateA(const Eigen::MatrixXd & A_new) @@ -303,36 +282,34 @@ void OSQPInterface::updateA(const Eigen::MatrixXd & A_new) c_int A_elem_N = A_sparse.nonZeros(); */ CSC_Matrix A_csc = calCSCMatrix(A_new); - osqp_update_A( - m_work.get(), A_csc.m_vals.data(), OSQP_NULL, static_cast(A_csc.m_vals.size())); + osqp_update_A(work_.get(), A_csc.vals_.data(), OSQP_NULL, static_cast(A_csc.vals_.size())); return; } void OSQPInterface::updateCscA(const CSC_Matrix & A_csc) { - osqp_update_A( - m_work.get(), A_csc.m_vals.data(), OSQP_NULL, static_cast(A_csc.m_vals.size())); + osqp_update_A(work_.get(), A_csc.vals_.data(), OSQP_NULL, static_cast(A_csc.vals_.size())); } void OSQPInterface::updateQ(const std::vector & q_new) { std::vector q_tmp(q_new.begin(), q_new.end()); double * q_dyn = q_tmp.data(); - osqp_update_lin_cost(m_work.get(), q_dyn); + osqp_update_lin_cost(work_.get(), q_dyn); } void OSQPInterface::updateL(const std::vector & l_new) { std::vector l_tmp(l_new.begin(), l_new.end()); double * l_dyn = l_tmp.data(); - osqp_update_lower_bound(m_work.get(), l_dyn); + osqp_update_lower_bound(work_.get(), l_dyn); } void OSQPInterface::updateU(const std::vector & u_new) { std::vector u_tmp(u_new.begin(), u_new.end()); double * u_dyn = u_tmp.data(); - osqp_update_upper_bound(m_work.get(), u_dyn); + osqp_update_upper_bound(work_.get(), u_dyn); } void OSQPInterface::updateBounds( @@ -342,45 +319,50 @@ void OSQPInterface::updateBounds( std::vector u_tmp(u_new.begin(), u_new.end()); double * l_dyn = l_tmp.data(); double * u_dyn = u_tmp.data(); - osqp_update_bounds(m_work.get(), l_dyn, u_dyn); + osqp_update_bounds(work_.get(), l_dyn, u_dyn); +} + +int OSQPInterface::getIterationNumber() const +{ + return work_->info->iter; } -int OSQPInterface::getIteration() const +std::string OSQPInterface::getStatus() const { - return m_work->info->iter; + return "OSQP_SOLVED"; } -int OSQPInterface::getStatus() const +bool OSQPInterface::isSolved() const { - return static_cast(m_latest_work_info.status_val); + return latest_work_info_.status_val == 1; } int OSQPInterface::getPolishStatus() const { - return static_cast(m_latest_work_info.status_polish); + return static_cast(latest_work_info_.status_polish); } std::vector OSQPInterface::getDualSolution() const { - double * sol_y = m_work->solution->y; - std::vector dual_solution(sol_y, sol_y + m_data->m); + double * sol_y = work_->solution->y; + std::vector dual_solution(sol_y, sol_y + data_->m); return dual_solution; } std::vector OSQPInterface::optimizeImpl() { - osqp_solve(m_work.get()); + osqp_solve(work_.get()); - double * sol_x = m_work->solution->x; - double * sol_y = m_work->solution->y; - std::vector sol_primal(sol_x, sol_x + m_param_n); - std::vector sol_lagrange_multiplier(sol_y, sol_y + m_data->m); + double * sol_x = work_->solution->x; + double * sol_y = work_->solution->y; + std::vector sol_primal(sol_x, sol_x + param_n_); + std::vector sol_lagrange_multiplier(sol_y, sol_y + data_->m); - m_latest_work_info = *(m_work->info); + latest_work_info_ = *(work_->info); - if (!m_enable_warm_start) { - m_work.reset(); - m_work_initialized = false; + if (!enable_warm_start_) { + work_.reset(); + work__initialized = false; } return sol_primal; @@ -393,7 +375,17 @@ std::vector OSQPInterface::optimize( initializeCSCProblemImpl(P, A, q, l, u); const auto result = optimizeImpl(); + // show polish status if not successful + const int status_polish = static_cast(latest_work_info_.status_polish); + if (status_polish != 1) { + const auto msg = status_polish == 0 ? "unperformed" + : status_polish == -1 ? "unsuccessful" + : "unknown"; + std::cerr << "osqp polish process failed : " << msg << ". The result may be inaccurate" + << std::endl; + } + return result; } -} // namespace qp +} // namespace autoware::common diff --git a/common/qp_interface/src/proxqp_interface.cpp b/common/qp_interface/src/proxqp_interface.cpp index bf1f0229e1e21..507f3858cbf1b 100644 --- a/common/qp_interface/src/proxqp_interface.cpp +++ b/common/qp_interface/src/proxqp_interface.cpp @@ -14,12 +14,17 @@ #include "qp_interface/proxqp_interface.hpp" -namespace qp +namespace autoware::common { -ProxQPInterface::ProxQPInterface(const bool enable_warm_start, const double eps_abs) +using proxsuite::proxqp::QPSolverOutput; + +ProxQPInterface::ProxQPInterface( + const bool enable_warm_start, const double eps_abs, const double eps_rel, const bool verbose) : QPInterface(enable_warm_start) { - m_settings.eps_abs = eps_abs; + settings_.eps_abs = eps_abs; + settings_.eps_rel = eps_rel; + settings_.verbose = verbose; } void ProxQPInterface::initializeProblemImpl( @@ -31,28 +36,28 @@ void ProxQPInterface::initializeProblemImpl( const bool enable_warm_start = [&]() { if ( - !m_enable_warm_start // Warm start is designated - || !m_qp_ptr // QP pointer is initialized + !enable_warm_start_ // Warm start is designated + || !qp_ptr_ // QP pointer is initialized // The number of variables is the same as the previous one. - || !m_variables_num || - *m_variables_num != variables_num + || !variables_num_ || + *variables_num_ != variables_num // The number of constraints is the same as the previous one - || !m_constraints_num || *m_constraints_num != constraints_num) { + || !constraints_num_ || *constraints_num_ != constraints_num) { return false; } return true; }(); if (!enable_warm_start) { - m_qp_ptr = std::make_shared>( + qp_ptr_ = std::make_shared>( variables_num, 0, constraints_num); } - m_settings.initial_guess = + settings_.initial_guess = enable_warm_start ? proxsuite::proxqp::InitialGuessStatus::WARM_START_WITH_PREVIOUS_RESULT : proxsuite::proxqp::InitialGuessStatus::NO_INITIAL_GUESS; - m_qp_ptr->settings = m_settings; + qp_ptr_->settings = settings_; Eigen::SparseMatrix P_sparse(variables_num, constraints_num); P_sparse = P.sparseView(); @@ -69,53 +74,78 @@ void ProxQPInterface::initializeProblemImpl( Eigen::Map(u_std_vec.data(), u_std_vec.size()); if (enable_warm_start) { - m_qp_ptr->update( + qp_ptr_->update( P_sparse, eigen_q, proxsuite::nullopt, proxsuite::nullopt, A.sparseView(), eigen_l, eigen_u); } else { - m_qp_ptr->init( + qp_ptr_->init( P_sparse, eigen_q, proxsuite::nullopt, proxsuite::nullopt, A.sparseView(), eigen_l, eigen_u); } } void ProxQPInterface::updateEpsAbs(const double eps_abs) { - m_settings.eps_abs = eps_abs; + settings_.eps_abs = eps_abs; } void ProxQPInterface::updateEpsRel(const double eps_rel) { - m_settings.eps_rel = eps_rel; + settings_.eps_rel = eps_rel; } void ProxQPInterface::updateVerbose(const bool is_verbose) { - m_settings.verbose = is_verbose; + settings_.verbose = is_verbose; } -int ProxQPInterface::getIteration() const +bool ProxQPInterface::isSolved() const { - if (m_qp_ptr) { - return m_qp_ptr->results.info.iter; + if (qp_ptr_) { + return qp_ptr_->results.info.status == QPSolverOutput::PROXQP_SOLVED; } - return 0; + return false; } -int ProxQPInterface::getStatus() const +int ProxQPInterface::getIterationNumber() const { - if (m_qp_ptr) { - return static_cast(m_qp_ptr->results.info.status); + if (qp_ptr_) { + return qp_ptr_->results.info.iter; } return 0; } +std::string ProxQPInterface::getStatus() const +{ + if (qp_ptr_) { + if (qp_ptr_->results.info.status == QPSolverOutput::PROXQP_SOLVED) { + return "PROXQP_SOLVED"; + } + if (qp_ptr_->results.info.status == QPSolverOutput::PROXQP_MAX_ITER_REACHED) { + return "PROXQP_MAX_ITER_REACHED"; + } + if (qp_ptr_->results.info.status == QPSolverOutput::PROXQP_PRIMAL_INFEASIBLE) { + return "PROXQP_PRIMAL_INFEASIBLE"; + } + // if (qp_ptr_->results.info.status == QPSolverOutput::PROXQP_SOLVED_CLOSEST_PRIMAL_FEASIBLE) { + // return "PROXQP_SOLVED_CLOSEST_PRIMAL_FEASIBLE"; + // } + if (qp_ptr_->results.info.status == QPSolverOutput::PROXQP_DUAL_INFEASIBLE) { + return "PROXQP_DUAL_INFEASIBLE"; + } + if (qp_ptr_->results.info.status == QPSolverOutput::PROXQP_NOT_RUN) { + return "PROXQP_NOT_RUN"; + } + } + return "None"; +} + std::vector ProxQPInterface::optimizeImpl() { - m_qp_ptr->solve(); + qp_ptr_->solve(); std::vector result; - for (Eigen::Index i = 0; i < m_qp_ptr->results.x.size(); ++i) { - result.push_back(m_qp_ptr->results.x[i]); + for (Eigen::Index i = 0; i < qp_ptr_->results.x.size(); ++i) { + result.push_back(qp_ptr_->results.x[i]); } return result; } -} // namespace qp +} // namespace autoware::common diff --git a/common/qp_interface/src/qp_interface.cpp b/common/qp_interface/src/qp_interface.cpp index e7a69bac0c67c..afd26132d7769 100644 --- a/common/qp_interface/src/qp_interface.cpp +++ b/common/qp_interface/src/qp_interface.cpp @@ -18,7 +18,7 @@ #include #include -namespace qp +namespace autoware::common { void QPInterface::initializeProblem( const Eigen::MatrixXd & P, const Eigen::MatrixXd & A, const std::vector & q, @@ -54,8 +54,8 @@ void QPInterface::initializeProblem( initializeProblemImpl(P, A, q, l, u); - m_variables_num = q.size(); - m_constraints_num = l.size(); + variables_num_ = q.size(); + constraints_num_ = l.size(); } std::vector QPInterface::optimize( @@ -67,4 +67,4 @@ std::vector QPInterface::optimize( return result; } -} // namespace qp +} // namespace autoware::common diff --git a/common/qp_interface/test/test_csc_matrix_conv.cpp b/common/qp_interface/test/test_csc_matrix_conv.cpp index fc604d762d2c4..a6bd5e3df0be1 100644 --- a/common/qp_interface/test/test_csc_matrix_conv.cpp +++ b/common/qp_interface/test/test_csc_matrix_conv.cpp @@ -23,42 +23,42 @@ TEST(TestCscMatrixConv, Nominal) { - using qp::calCSCMatrix; - using qp::CSC_Matrix; + using autoware::common::calCSCMatrix; + using autoware::common::CSC_Matrix; Eigen::MatrixXd rect1(1, 2); rect1 << 0.0, 1.0; const CSC_Matrix rect_m1 = calCSCMatrix(rect1); - ASSERT_EQ(rect_m1.m_vals.size(), size_t(1)); - EXPECT_EQ(rect_m1.m_vals[0], 1.0); - ASSERT_EQ(rect_m1.m_row_idxs.size(), size_t(1)); - EXPECT_EQ(rect_m1.m_row_idxs[0], c_int(0)); - ASSERT_EQ(rect_m1.m_col_idxs.size(), size_t(3)); // nb of columns + 1 - EXPECT_EQ(rect_m1.m_col_idxs[0], c_int(0)); - EXPECT_EQ(rect_m1.m_col_idxs[1], c_int(0)); - EXPECT_EQ(rect_m1.m_col_idxs[2], c_int(1)); + ASSERT_EQ(rect_m1.vals_.size(), size_t(1)); + EXPECT_EQ(rect_m1.vals_[0], 1.0); + ASSERT_EQ(rect_m1.row_idxs_.size(), size_t(1)); + EXPECT_EQ(rect_m1.row_idxs_[0], c_int(0)); + ASSERT_EQ(rect_m1.col_idxs_.size(), size_t(3)); // nb of columns + 1 + EXPECT_EQ(rect_m1.col_idxs_[0], c_int(0)); + EXPECT_EQ(rect_m1.col_idxs_[1], c_int(0)); + EXPECT_EQ(rect_m1.col_idxs_[2], c_int(1)); Eigen::MatrixXd rect2(2, 4); rect2 << 1.0, 0.0, 3.0, 0.0, 0.0, 6.0, 7.0, 0.0; const CSC_Matrix rect_m2 = calCSCMatrix(rect2); - ASSERT_EQ(rect_m2.m_vals.size(), size_t(4)); - EXPECT_EQ(rect_m2.m_vals[0], 1.0); - EXPECT_EQ(rect_m2.m_vals[1], 6.0); - EXPECT_EQ(rect_m2.m_vals[2], 3.0); - EXPECT_EQ(rect_m2.m_vals[3], 7.0); - ASSERT_EQ(rect_m2.m_row_idxs.size(), size_t(4)); - EXPECT_EQ(rect_m2.m_row_idxs[0], c_int(0)); - EXPECT_EQ(rect_m2.m_row_idxs[1], c_int(1)); - EXPECT_EQ(rect_m2.m_row_idxs[2], c_int(0)); - EXPECT_EQ(rect_m2.m_row_idxs[3], c_int(1)); - ASSERT_EQ(rect_m2.m_col_idxs.size(), size_t(5)); // nb of columns + 1 - EXPECT_EQ(rect_m2.m_col_idxs[0], c_int(0)); - EXPECT_EQ(rect_m2.m_col_idxs[1], c_int(1)); - EXPECT_EQ(rect_m2.m_col_idxs[2], c_int(2)); - EXPECT_EQ(rect_m2.m_col_idxs[3], c_int(4)); - EXPECT_EQ(rect_m2.m_col_idxs[4], c_int(4)); + ASSERT_EQ(rect_m2.vals_.size(), size_t(4)); + EXPECT_EQ(rect_m2.vals_[0], 1.0); + EXPECT_EQ(rect_m2.vals_[1], 6.0); + EXPECT_EQ(rect_m2.vals_[2], 3.0); + EXPECT_EQ(rect_m2.vals_[3], 7.0); + ASSERT_EQ(rect_m2.row_idxs_.size(), size_t(4)); + EXPECT_EQ(rect_m2.row_idxs_[0], c_int(0)); + EXPECT_EQ(rect_m2.row_idxs_[1], c_int(1)); + EXPECT_EQ(rect_m2.row_idxs_[2], c_int(0)); + EXPECT_EQ(rect_m2.row_idxs_[3], c_int(1)); + ASSERT_EQ(rect_m2.col_idxs_.size(), size_t(5)); // nb of columns + 1 + EXPECT_EQ(rect_m2.col_idxs_[0], c_int(0)); + EXPECT_EQ(rect_m2.col_idxs_[1], c_int(1)); + EXPECT_EQ(rect_m2.col_idxs_[2], c_int(2)); + EXPECT_EQ(rect_m2.col_idxs_[3], c_int(4)); + EXPECT_EQ(rect_m2.col_idxs_[4], c_int(4)); // Example from http://netlib.org/linalg/html_templates/node92.html Eigen::MatrixXd square2(6, 6); @@ -66,59 +66,59 @@ TEST(TestCscMatrixConv, Nominal) 0.0, 3.0, 0.0, 8.0, 7.0, 5.0, 0.0, 0.0, 8.0, 0.0, 9.0, 9.0, 13.0, 0.0, 4.0, 0.0, 0.0, 2.0, -1.0; const CSC_Matrix square_m2 = calCSCMatrix(square2); - ASSERT_EQ(square_m2.m_vals.size(), size_t(19)); - EXPECT_EQ(square_m2.m_vals[0], 10.0); - EXPECT_EQ(square_m2.m_vals[1], 3.0); - EXPECT_EQ(square_m2.m_vals[2], 3.0); - EXPECT_EQ(square_m2.m_vals[3], 9.0); - EXPECT_EQ(square_m2.m_vals[4], 7.0); - EXPECT_EQ(square_m2.m_vals[5], 8.0); - EXPECT_EQ(square_m2.m_vals[6], 4.0); - EXPECT_EQ(square_m2.m_vals[7], 8.0); - EXPECT_EQ(square_m2.m_vals[8], 8.0); - EXPECT_EQ(square_m2.m_vals[9], 7.0); - EXPECT_EQ(square_m2.m_vals[10], 7.0); - EXPECT_EQ(square_m2.m_vals[11], 9.0); - EXPECT_EQ(square_m2.m_vals[12], -2.0); - EXPECT_EQ(square_m2.m_vals[13], 5.0); - EXPECT_EQ(square_m2.m_vals[14], 9.0); - EXPECT_EQ(square_m2.m_vals[15], 2.0); - EXPECT_EQ(square_m2.m_vals[16], 3.0); - EXPECT_EQ(square_m2.m_vals[17], 13.0); - EXPECT_EQ(square_m2.m_vals[18], -1.0); - ASSERT_EQ(square_m2.m_row_idxs.size(), size_t(19)); - EXPECT_EQ(square_m2.m_row_idxs[0], c_int(0)); - EXPECT_EQ(square_m2.m_row_idxs[1], c_int(1)); - EXPECT_EQ(square_m2.m_row_idxs[2], c_int(3)); - EXPECT_EQ(square_m2.m_row_idxs[3], c_int(1)); - EXPECT_EQ(square_m2.m_row_idxs[4], c_int(2)); - EXPECT_EQ(square_m2.m_row_idxs[5], c_int(4)); - EXPECT_EQ(square_m2.m_row_idxs[6], c_int(5)); - EXPECT_EQ(square_m2.m_row_idxs[7], c_int(2)); - EXPECT_EQ(square_m2.m_row_idxs[8], c_int(3)); - EXPECT_EQ(square_m2.m_row_idxs[9], c_int(2)); - EXPECT_EQ(square_m2.m_row_idxs[10], c_int(3)); - EXPECT_EQ(square_m2.m_row_idxs[11], c_int(4)); - EXPECT_EQ(square_m2.m_row_idxs[12], c_int(0)); - EXPECT_EQ(square_m2.m_row_idxs[13], c_int(3)); - EXPECT_EQ(square_m2.m_row_idxs[14], c_int(4)); - EXPECT_EQ(square_m2.m_row_idxs[15], c_int(5)); - EXPECT_EQ(square_m2.m_row_idxs[16], c_int(1)); - EXPECT_EQ(square_m2.m_row_idxs[17], c_int(4)); - EXPECT_EQ(square_m2.m_row_idxs[18], c_int(5)); - ASSERT_EQ(square_m2.m_col_idxs.size(), size_t(7)); // nb of columns + 1 - EXPECT_EQ(square_m2.m_col_idxs[0], c_int(0)); - EXPECT_EQ(square_m2.m_col_idxs[1], c_int(3)); - EXPECT_EQ(square_m2.m_col_idxs[2], c_int(7)); - EXPECT_EQ(square_m2.m_col_idxs[3], c_int(9)); - EXPECT_EQ(square_m2.m_col_idxs[4], c_int(12)); - EXPECT_EQ(square_m2.m_col_idxs[5], c_int(16)); - EXPECT_EQ(square_m2.m_col_idxs[6], c_int(19)); + ASSERT_EQ(square_m2.vals_.size(), size_t(19)); + EXPECT_EQ(square_m2.vals_[0], 10.0); + EXPECT_EQ(square_m2.vals_[1], 3.0); + EXPECT_EQ(square_m2.vals_[2], 3.0); + EXPECT_EQ(square_m2.vals_[3], 9.0); + EXPECT_EQ(square_m2.vals_[4], 7.0); + EXPECT_EQ(square_m2.vals_[5], 8.0); + EXPECT_EQ(square_m2.vals_[6], 4.0); + EXPECT_EQ(square_m2.vals_[7], 8.0); + EXPECT_EQ(square_m2.vals_[8], 8.0); + EXPECT_EQ(square_m2.vals_[9], 7.0); + EXPECT_EQ(square_m2.vals_[10], 7.0); + EXPECT_EQ(square_m2.vals_[11], 9.0); + EXPECT_EQ(square_m2.vals_[12], -2.0); + EXPECT_EQ(square_m2.vals_[13], 5.0); + EXPECT_EQ(square_m2.vals_[14], 9.0); + EXPECT_EQ(square_m2.vals_[15], 2.0); + EXPECT_EQ(square_m2.vals_[16], 3.0); + EXPECT_EQ(square_m2.vals_[17], 13.0); + EXPECT_EQ(square_m2.vals_[18], -1.0); + ASSERT_EQ(square_m2.row_idxs_.size(), size_t(19)); + EXPECT_EQ(square_m2.row_idxs_[0], c_int(0)); + EXPECT_EQ(square_m2.row_idxs_[1], c_int(1)); + EXPECT_EQ(square_m2.row_idxs_[2], c_int(3)); + EXPECT_EQ(square_m2.row_idxs_[3], c_int(1)); + EXPECT_EQ(square_m2.row_idxs_[4], c_int(2)); + EXPECT_EQ(square_m2.row_idxs_[5], c_int(4)); + EXPECT_EQ(square_m2.row_idxs_[6], c_int(5)); + EXPECT_EQ(square_m2.row_idxs_[7], c_int(2)); + EXPECT_EQ(square_m2.row_idxs_[8], c_int(3)); + EXPECT_EQ(square_m2.row_idxs_[9], c_int(2)); + EXPECT_EQ(square_m2.row_idxs_[10], c_int(3)); + EXPECT_EQ(square_m2.row_idxs_[11], c_int(4)); + EXPECT_EQ(square_m2.row_idxs_[12], c_int(0)); + EXPECT_EQ(square_m2.row_idxs_[13], c_int(3)); + EXPECT_EQ(square_m2.row_idxs_[14], c_int(4)); + EXPECT_EQ(square_m2.row_idxs_[15], c_int(5)); + EXPECT_EQ(square_m2.row_idxs_[16], c_int(1)); + EXPECT_EQ(square_m2.row_idxs_[17], c_int(4)); + EXPECT_EQ(square_m2.row_idxs_[18], c_int(5)); + ASSERT_EQ(square_m2.col_idxs_.size(), size_t(7)); // nb of columns + 1 + EXPECT_EQ(square_m2.col_idxs_[0], c_int(0)); + EXPECT_EQ(square_m2.col_idxs_[1], c_int(3)); + EXPECT_EQ(square_m2.col_idxs_[2], c_int(7)); + EXPECT_EQ(square_m2.col_idxs_[3], c_int(9)); + EXPECT_EQ(square_m2.col_idxs_[4], c_int(12)); + EXPECT_EQ(square_m2.col_idxs_[5], c_int(16)); + EXPECT_EQ(square_m2.col_idxs_[6], c_int(19)); } TEST(TestCscMatrixConv, Trapezoidal) { - using qp::calCSCMatrixTrapezoidal; - using qp::CSC_Matrix; + using autoware::common::calCSCMatrixTrapezoidal; + using autoware::common::CSC_Matrix; Eigen::MatrixXd square1(2, 2); Eigen::MatrixXd square2(3, 3); @@ -129,33 +129,33 @@ TEST(TestCscMatrixConv, Trapezoidal) const CSC_Matrix square_m1 = calCSCMatrixTrapezoidal(square1); // Trapezoidal: skip the lower left triangle (2.0 in this example) - ASSERT_EQ(square_m1.m_vals.size(), size_t(3)); - EXPECT_EQ(square_m1.m_vals[0], 1.0); - EXPECT_EQ(square_m1.m_vals[1], 2.0); - EXPECT_EQ(square_m1.m_vals[2], 4.0); - ASSERT_EQ(square_m1.m_row_idxs.size(), size_t(3)); - EXPECT_EQ(square_m1.m_row_idxs[0], c_int(0)); - EXPECT_EQ(square_m1.m_row_idxs[1], c_int(0)); - EXPECT_EQ(square_m1.m_row_idxs[2], c_int(1)); - ASSERT_EQ(square_m1.m_col_idxs.size(), size_t(3)); - EXPECT_EQ(square_m1.m_col_idxs[0], c_int(0)); - EXPECT_EQ(square_m1.m_col_idxs[1], c_int(1)); - EXPECT_EQ(square_m1.m_col_idxs[2], c_int(3)); + ASSERT_EQ(square_m1.vals_.size(), size_t(3)); + EXPECT_EQ(square_m1.vals_[0], 1.0); + EXPECT_EQ(square_m1.vals_[1], 2.0); + EXPECT_EQ(square_m1.vals_[2], 4.0); + ASSERT_EQ(square_m1.row_idxs_.size(), size_t(3)); + EXPECT_EQ(square_m1.row_idxs_[0], c_int(0)); + EXPECT_EQ(square_m1.row_idxs_[1], c_int(0)); + EXPECT_EQ(square_m1.row_idxs_[2], c_int(1)); + ASSERT_EQ(square_m1.col_idxs_.size(), size_t(3)); + EXPECT_EQ(square_m1.col_idxs_[0], c_int(0)); + EXPECT_EQ(square_m1.col_idxs_[1], c_int(1)); + EXPECT_EQ(square_m1.col_idxs_[2], c_int(3)); const CSC_Matrix square_m2 = calCSCMatrixTrapezoidal(square2); - ASSERT_EQ(square_m2.m_vals.size(), size_t(3)); - EXPECT_EQ(square_m2.m_vals[0], 2.0); - EXPECT_EQ(square_m2.m_vals[1], 5.0); - EXPECT_EQ(square_m2.m_vals[2], 6.0); - ASSERT_EQ(square_m2.m_row_idxs.size(), size_t(3)); - EXPECT_EQ(square_m2.m_row_idxs[0], c_int(0)); - EXPECT_EQ(square_m2.m_row_idxs[1], c_int(1)); - EXPECT_EQ(square_m2.m_row_idxs[2], c_int(1)); - ASSERT_EQ(square_m2.m_col_idxs.size(), size_t(4)); - EXPECT_EQ(square_m2.m_col_idxs[0], c_int(0)); - EXPECT_EQ(square_m2.m_col_idxs[1], c_int(0)); - EXPECT_EQ(square_m2.m_col_idxs[2], c_int(2)); - EXPECT_EQ(square_m2.m_col_idxs[3], c_int(3)); + ASSERT_EQ(square_m2.vals_.size(), size_t(3)); + EXPECT_EQ(square_m2.vals_[0], 2.0); + EXPECT_EQ(square_m2.vals_[1], 5.0); + EXPECT_EQ(square_m2.vals_[2], 6.0); + ASSERT_EQ(square_m2.row_idxs_.size(), size_t(3)); + EXPECT_EQ(square_m2.row_idxs_[0], c_int(0)); + EXPECT_EQ(square_m2.row_idxs_[1], c_int(1)); + EXPECT_EQ(square_m2.row_idxs_[2], c_int(1)); + ASSERT_EQ(square_m2.col_idxs_.size(), size_t(4)); + EXPECT_EQ(square_m2.col_idxs_[0], c_int(0)); + EXPECT_EQ(square_m2.col_idxs_[1], c_int(0)); + EXPECT_EQ(square_m2.col_idxs_[2], c_int(2)); + EXPECT_EQ(square_m2.col_idxs_[3], c_int(3)); try { const CSC_Matrix rect_m1 = calCSCMatrixTrapezoidal(rect1); @@ -166,10 +166,10 @@ TEST(TestCscMatrixConv, Trapezoidal) } TEST(TestCscMatrixConv, Print) { - using qp::calCSCMatrix; - using qp::calCSCMatrixTrapezoidal; - using qp::CSC_Matrix; - using qp::printCSCMatrix; + using autoware::common::calCSCMatrix; + using autoware::common::calCSCMatrixTrapezoidal; + using autoware::common::CSC_Matrix; + using autoware::common::printCSCMatrix; Eigen::MatrixXd square1(2, 2); Eigen::MatrixXd rect1(1, 2); square1 << 1.0, 2.0, 2.0, 4.0; diff --git a/common/qp_interface/test/test_osqp_interface.cpp b/common/qp_interface/test/test_osqp_interface.cpp index 5ce1f0eb064a1..9a02dd4b00934 100644 --- a/common/qp_interface/test/test_osqp_interface.cpp +++ b/common/qp_interface/test/test_osqp_interface.cpp @@ -39,44 +39,44 @@ namespace TEST(TestOsqpInterface, BasicQp) { - using qp::calCSCMatrix; - using qp::calCSCMatrixTrapezoidal; - using qp::CSC_Matrix; + using autoware::common::calCSCMatrix; + using autoware::common::calCSCMatrixTrapezoidal; + using autoware::common::CSC_Matrix; - auto check_result = []( - const auto & solution, const int solution_status, const int polish_status) { - EXPECT_EQ(solution_status, 1); - EXPECT_EQ(polish_status, 1); + auto check_result = + [](const auto & solution, const std::string & status, const int polish_status) { + EXPECT_EQ(status, "OSQP_SOLVED"); + EXPECT_EQ(polish_status, 1); - static const auto ep = 1.0e-8; + static const auto ep = 1.0e-8; - ASSERT_EQ(solution.size(), size_t(2)); - EXPECT_NEAR(solution[0], 0.3, ep); - EXPECT_NEAR(solution[1], 0.7, ep); - }; + ASSERT_EQ(solution.size(), size_t(2)); + EXPECT_NEAR(solution[0], 0.3, ep); + EXPECT_NEAR(solution[1], 0.7, ep); + }; const Eigen::MatrixXd P = (Eigen::MatrixXd(2, 2) << 4, 1, 1, 2).finished(); const Eigen::MatrixXd A = (Eigen::MatrixXd(4, 2) << 1, 1, 1, 0, 0, 1, 0, 1).finished(); const std::vector q = {1.0, 1.0}; - const std::vector l = {1.0, 0.0, 0.0, -qp::INF}; - const std::vector u = {1.0, 0.7, 0.7, qp::INF}; + const std::vector l = {1.0, 0.0, 0.0, -autoware::common::OSQP_INF}; + const std::vector u = {1.0, 0.7, 0.7, autoware::common::OSQP_INF}; { // Define problem during optimization - qp::OSQPInterface osqp(false, 1e-6); + autoware::common::OSQPInterface osqp(false, 1e-6); const auto solution = osqp.QPInterface::optimize(P, A, q, l, u); - const auto solution_status = osqp.getStatus(); + const auto status = osqp.getStatus(); const auto polish_status = osqp.getPolishStatus(); - check_result(solution, solution_status, polish_status); + check_result(solution, status, polish_status); } { // Define problem during initialization - qp::OSQPInterface osqp(false, 1e-6); + autoware::common::OSQPInterface osqp(false, 1e-6); const auto solution = osqp.QPInterface::optimize(P, A, q, l, u); - const auto solution_status = osqp.getStatus(); + const auto status = osqp.getStatus(); const auto polish_status = osqp.getPolishStatus(); - check_result(solution, solution_status, polish_status); + check_result(solution, status, polish_status); } { @@ -87,7 +87,7 @@ TEST(TestOsqpInterface, BasicQp) std::vector q_ini(2, 0.0); std::vector l_ini(4, 0.0); std::vector u_ini(4, 0.0); - qp::OSQPInterface osqp(false, 1e-6); + autoware::common::OSQPInterface osqp(false, 1e-6); osqp.QPInterface::optimize(P_ini, A_ini, q_ini, l_ini, u_ini); } @@ -95,12 +95,12 @@ TEST(TestOsqpInterface, BasicQp) // Define problem during initialization with csc matrix CSC_Matrix P_csc = calCSCMatrixTrapezoidal(P); CSC_Matrix A_csc = calCSCMatrix(A); - qp::OSQPInterface osqp(false, 1e-6); + autoware::common::OSQPInterface osqp(false, 1e-6); const auto solution = osqp.optimize(P_csc, A_csc, q, l, u); - const auto solution_status = osqp.getStatus(); + const auto status = osqp.getStatus(); const auto polish_status = osqp.getPolishStatus(); - check_result(solution, solution_status, polish_status); + check_result(solution, status, polish_status); } { @@ -111,7 +111,7 @@ TEST(TestOsqpInterface, BasicQp) std::vector q_ini(2, 0.0); std::vector l_ini(4, 0.0); std::vector u_ini(4, 0.0); - qp::OSQPInterface osqp(false, 1e-6); + autoware::common::OSQPInterface osqp(false, 1e-6); osqp.optimize(P_ini_csc, A_ini_csc, q_ini, l_ini, u_ini); // Redefine problem before optimization @@ -119,9 +119,9 @@ TEST(TestOsqpInterface, BasicQp) CSC_Matrix A_csc = calCSCMatrix(A); const auto solution = osqp.optimize(P_csc, A_csc, q, l, u); - const auto solution_status = osqp.getStatus(); + const auto status = osqp.getStatus(); const auto polish_status = osqp.getPolishStatus(); - check_result(solution, solution_status, polish_status); + check_result(solution, status, polish_status); } // add warm startup @@ -132,7 +132,7 @@ TEST(TestOsqpInterface, BasicQp) std::vector q_ini(2, 0.0); std::vector l_ini(4, 0.0); std::vector u_ini(4, 0.0); - qp::OSQPInterface osqp(true, 1e-6); // enable warm start + autoware::common::OSQPInterface osqp(true, 1e-6); // enable warm start osqp.optimize(P_ini_csc, A_ini_csc, q_ini, l_ini, u_ini); // Redefine problem before optimization @@ -140,9 +140,9 @@ TEST(TestOsqpInterface, BasicQp) CSC_Matrix A_csc = calCSCMatrix(A); { const auto solution = osqp.optimize(P_csc, A_csc, q, l, u); - const auto solution_status = osqp.getStatus(); + const auto status = osqp.getStatus(); const auto polish_status = osqp.getPolishStatus(); - check_result(solution, solution_status, polish_status); + check_result(solution, status, polish_status); osqp.updateCheckTermination(1); const auto primal_val = solution; @@ -155,9 +155,9 @@ TEST(TestOsqpInterface, BasicQp) { const auto solution = osqp.optimize(P_csc, A_csc, q, l, u); - const auto solution_status = osqp.getStatus(); + const auto status = osqp.getStatus(); const auto polish_status = osqp.getPolishStatus(); - check_result(solution, solution_status, polish_status); + check_result(solution, status, polish_status); } // NOTE: This should be true, but currently optimize function reset the workspace, which diff --git a/common/qp_interface/test/test_proxqp_interface.cpp b/common/qp_interface/test/test_proxqp_interface.cpp index c28678e5c872a..a8b1bb29dafa0 100644 --- a/common/qp_interface/test/test_proxqp_interface.cpp +++ b/common/qp_interface/test/test_proxqp_interface.cpp @@ -40,7 +40,9 @@ namespace TEST(TestProxqpInterface, BasicQp) { - auto check_result = [](const auto & solution) { + auto check_result = [](const auto & solution, const std::string & status) { + EXPECT_EQ(status, "PROXQP_SOLVED"); + static const auto ep = 1.0e-8; ASSERT_EQ(solution.size(), size_t(2)); EXPECT_NEAR(solution[0], 0.3, ep); @@ -55,23 +57,26 @@ TEST(TestProxqpInterface, BasicQp) { // Define problem during optimization - qp::ProxQPInterface proxqp(false, 1e-9); + autoware::common::ProxQPInterface proxqp(false, 1e-9, 1e-9, false); const auto solution = proxqp.QPInterface::optimize(P, A, q, l, u); - check_result(solution); + const auto status = proxqp.getStatus(); + check_result(solution, status); } { // Define problem during optimization with warm start - qp::ProxQPInterface proxqp(true, 1e-9); + autoware::common::ProxQPInterface proxqp(true, 1e-9, 1e-9, false); { const auto solution = proxqp.QPInterface::optimize(P, A, q, l, u); - check_result(solution); - EXPECT_NE(proxqp.getIteration(), 1); + const auto status = proxqp.getStatus(); + check_result(solution, status); + EXPECT_NE(proxqp.getIterationNumber(), 1); } { const auto solution = proxqp.QPInterface::optimize(P, A, q, l, u); - check_result(solution); - EXPECT_EQ(proxqp.getIteration(), 0); + const auto status = proxqp.getStatus(); + check_result(solution, status); + EXPECT_EQ(proxqp.getIterationNumber(), 0); } } } From 924a37575612129f9038b4f86162f2f11b314186 Mon Sep 17 00:00:00 2001 From: Kyoichi Sugahara Date: Tue, 16 Jul 2024 11:39:40 +0900 Subject: [PATCH 177/306] feat(autoware_behavior_path_planner): prevent infinite loop in approving scene module process (#7881) * prevent infinite loop Signed-off-by: kyoichi-sugahara * calculate max_iteration_num from number of scene modules Signed-off-by: kyoichi-sugahara * add doxygen explanation for calculateMaxIterationNum Signed-off-by: kyoichi-sugahara --------- Signed-off-by: kyoichi-sugahara --- .../config/behavior_path_planner.param.yaml | 1 - .../behavior_path_planner/planner_manager.hpp | 23 +++++++++-- .../src/behavior_path_planner_node.cpp | 7 ++-- .../src/planner_manager.cpp | 40 +++++++++++++++---- 4 files changed, 56 insertions(+), 15 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/config/behavior_path_planner.param.yaml b/planning/behavior_path_planner/autoware_behavior_path_planner/config/behavior_path_planner.param.yaml index e5c3a76fd1c45..7d5249dea689f 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/config/behavior_path_planner.param.yaml +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/config/behavior_path_planner.param.yaml @@ -1,6 +1,5 @@ /**: ros__parameters: - max_iteration_num: 100 traffic_light_signal_timeout: 1.0 planning_hz: 10.0 backward_path_length: 5.0 diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp index 3a9aa9cafbcca..0876d44b477a9 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/planner_manager.hpp @@ -97,7 +97,7 @@ struct SceneModuleStatus class PlannerManager { public: - PlannerManager(rclcpp::Node & node, const size_t max_iteration_num); + explicit PlannerManager(rclcpp::Node & node); /** * @brief run all candidate and approved modules. @@ -112,6 +112,17 @@ class PlannerManager */ void launchScenePlugin(rclcpp::Node & node, const std::string & name); + /** + * @brief calculate max iteration numbers. + * Let N be the number of scene modules. The maximum number of iterations executed in a loop is N, + * but after that, if there are any modules that have succeeded or failed, the approve_modules of + * all modules are cleared, and the loop is executed for N-1 modules. As this process repeats, it + * becomes N + (N-1) + (N-2) + … + 1, therefore the maximum number of iterations is N(N+1)/2. + * @param number of scene module + * + */ + void calculateMaxIterationNum(const size_t scene_module_num); + /** * @brief unregister managers. * @param node. @@ -398,11 +409,13 @@ class PlannerManager * @brief run all modules in approved_module_ptrs_ and get a planning result as * approved_modules_output. * @param planner data. + * @param deleted modules. * @return valid planning result. * @details in this function, expired modules (ModuleStatus::FAILURE or ModuleStatus::SUCCESS) are - * removed from approved_module_ptrs_. + * removed from approved_module_ptrs_ and added to deleted_modules. */ - BehaviorModuleOutput runApprovedModules(const std::shared_ptr & data); + BehaviorModuleOutput runApprovedModules( + const std::shared_ptr & data, std::vector & deleted_modules); /** * @brief select a module that should be execute at first. @@ -422,10 +435,12 @@ class PlannerManager /** * @brief get all modules that make execution request. * @param decided (=approved) path. + * @param deleted modules. * @return request modules. */ std::vector getRequestModules( - const BehaviorModuleOutput & previous_module_output) const; + const BehaviorModuleOutput & previous_module_output, + const std::vector & deleted_modules) const; /** * @brief checks whether a path of trajectory has forward driving direction diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/src/behavior_path_planner_node.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner/src/behavior_path_planner_node.cpp index 0e586211bc9ee..e92fe937708b8 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/src/behavior_path_planner_node.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/src/behavior_path_planner_node.cpp @@ -70,16 +70,18 @@ BehaviorPathPlannerNode::BehaviorPathPlannerNode(const rclcpp::NodeOptions & nod const std::lock_guard lock(mutex_manager_); // for planner_manager_ - const auto & p = planner_data_->parameters; - planner_manager_ = std::make_shared(*this, p.max_iteration_num); + planner_manager_ = std::make_shared(*this); + size_t scene_module_num = 0; for (const auto & name : declare_parameter>("launch_modules")) { // workaround: Since ROS 2 can't get empty list, launcher set [''] on the parameter. if (name == "") { break; } planner_manager_->launchScenePlugin(*this, name); + scene_module_num++; } + planner_manager_->calculateMaxIterationNum(scene_module_num); for (const auto & manager : planner_manager_->getSceneModuleManagers()) { path_candidate_publishers_.emplace( @@ -147,7 +149,6 @@ BehaviorPathPlannerParameters BehaviorPathPlannerNode::getCommonParam() { BehaviorPathPlannerParameters p{}; - p.max_iteration_num = declare_parameter("max_iteration_num"); p.traffic_light_signal_timeout = declare_parameter("traffic_light_signal_timeout"); // vehicle info diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/src/planner_manager.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner/src/planner_manager.cpp index 05dcc2163d14a..5278ea8e76981 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/src/planner_manager.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/src/planner_manager.cpp @@ -30,13 +30,12 @@ namespace autoware::behavior_path_planner { -PlannerManager::PlannerManager(rclcpp::Node & node, const size_t max_iteration_num) +PlannerManager::PlannerManager(rclcpp::Node & node) : plugin_loader_( "autoware_behavior_path_planner", "autoware::behavior_path_planner::SceneModuleManagerInterface"), logger_(node.get_logger().get_child("planner_manager")), - clock_(*node.get_clock()), - max_iteration_num_{max_iteration_num} + clock_(*node.get_clock()) { processing_time_.emplace("total_time", 0.0); debug_publisher_ptr_ = std::make_unique(&node, "~/debug"); @@ -66,6 +65,11 @@ void PlannerManager::launchScenePlugin(rclcpp::Node & node, const std::string & } } +void PlannerManager::calculateMaxIterationNum(const size_t scene_module_num) +{ + max_iteration_num_ = scene_module_num * (scene_module_num + 1) / 2; +} + void PlannerManager::removeScenePlugin(rclcpp::Node & node, const std::string & name) { auto it = std::remove_if(manager_ptrs_.begin(), manager_ptrs_.end(), [&](const auto plugin) { @@ -127,17 +131,19 @@ BehaviorModuleOutput PlannerManager::run(const std::shared_ptr & da "Ego is out of route, no module is running. Skip running scene modules."); return output; } + std::vector + deleted_modules; // store the scene modules deleted from approved modules for (size_t itr_num = 1;; ++itr_num) { /** * STEP1: get approved modules' output */ - auto approved_modules_output = runApprovedModules(data); + auto approved_modules_output = runApprovedModules(data, deleted_modules); /** * STEP2: check modules that need to be launched */ - const auto request_modules = getRequestModules(approved_modules_output); + const auto request_modules = getRequestModules(approved_modules_output, deleted_modules); /** * STEP3: if there is no module that need to be launched, return approved modules' output @@ -250,7 +256,8 @@ void PlannerManager::generateCombinedDrivableArea( } std::vector PlannerManager::getRequestModules( - const BehaviorModuleOutput & previous_module_output) const + const BehaviorModuleOutput & previous_module_output, + const std::vector & deleted_modules) const { if (previous_module_output.path.points.empty()) { RCLCPP_ERROR_STREAM( @@ -268,6 +275,18 @@ std::vector PlannerManager::getRequestModules( for (const auto & manager_ptr : manager_ptrs_) { stop_watch_.tic(manager_ptr->name()); + /** + * skip the module that is already deleted. + */ + { + const auto name = manager_ptr->name(); + const auto find_deleted_module = [&name](const auto & m) { return m->name() == name; }; + const auto itr = + std::find_if(deleted_modules.begin(), deleted_modules.end(), find_deleted_module); + if (itr != deleted_modules.end()) { + continue; + } + } /** * determine the execution capability of modules based on existing approved modules. @@ -655,7 +674,8 @@ std::pair PlannerManager::runRequestModule return std::make_pair(module_ptr, results.at(module_ptr->name())); } -BehaviorModuleOutput PlannerManager::runApprovedModules(const std::shared_ptr & data) +BehaviorModuleOutput PlannerManager::runApprovedModules( + const std::shared_ptr & data, std::vector & deleted_modules) { std::unordered_map results; BehaviorModuleOutput output = getReferencePath(data); @@ -771,6 +791,9 @@ BehaviorModuleOutput PlannerManager::runApprovedModules(const std::shared_ptrgetCurrentStatus() == ModuleStatus::FAILURE; }); + if (itr != approved_module_ptrs_.end()) { + deleted_modules.push_back(*itr); + } std::for_each(itr, approved_module_ptrs_.end(), [this](auto & m) { debug_info_.emplace_back(m, Action::DELETE, "From Approved"); @@ -842,6 +865,9 @@ BehaviorModuleOutput PlannerManager::runApprovedModules(const std::shared_ptr Date: Tue, 16 Jul 2024 13:34:39 +0900 Subject: [PATCH 178/306] feat(static_obstacle_avoidance): show markers when system requests operator support (#7994) Signed-off-by: satoshi-ota --- .../debug.hpp | 3 + .../src/debug.cpp | 73 ++++++++++++++++++- .../src/scene.cpp | 5 ++ 3 files changed, 80 insertions(+), 1 deletion(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/debug.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/debug.hpp index 63985e574f3b2..b205838896038 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/debug.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/debug.hpp @@ -47,6 +47,9 @@ MarkerArray createTargetObjectsMarkerArray(const ObjectDataArray & objects, cons MarkerArray createOtherObjectsMarkerArray( const ObjectDataArray & objects, const ObjectInfo & info, const bool verbose); +MarkerArray createAmbiguousObjectsMarkerArray( + const ObjectDataArray & objects, const Pose & ego_pose, const std::string & policy); + MarkerArray createStopTargetObjectMarkerArray(const AvoidancePlanningData & data); MarkerArray createDebugMarkerArray( diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp index e1f8bd4ad2734..fb4e5c7b9a25e 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/debug.cpp @@ -456,7 +456,7 @@ MarkerArray createOtherObjectsMarkerArray( appendMarkerArray( createObjectsCubeMarkerArray( filtered_objects, "others_" + ns + "_cube", createMarkerScale(3.0, 1.5, 1.5), - createMarkerColor(0.0, 1.0, 0.0, 0.8)), + createMarkerColor(0.5, 0.5, 0.5, 0.8)), &msg); appendMarkerArray( createObjectInfoMarkerArray(filtered_objects, "others_" + ns + "_info", verbose), &msg); @@ -466,6 +466,77 @@ MarkerArray createOtherObjectsMarkerArray( return msg; } +MarkerArray createAmbiguousObjectsMarkerArray( + const ObjectDataArray & objects, const Pose & ego_pose, const std::string & policy) +{ + MarkerArray msg; + + if (policy != "manual") { + return msg; + } + + for (const auto & object : objects) { + if (!object.is_ambiguous || !object.is_avoidable) { + continue; + } + + { + auto marker = createDefaultMarker( + "map", rclcpp::Clock{RCL_ROS_TIME}.now(), "ambiguous_target", 0L, Marker::ARROW, + createMarkerScale(0.5, 1.0, 1.0), createMarkerColor(1.0, 1.0, 0.0, 0.999)); + + Point src, dst; + src = object.getPosition(); + src.z += 4.0; + dst = object.getPosition(); + dst.z += 2.0; + + marker.points.push_back(src); + marker.points.push_back(dst); + marker.id = uuidToInt32(object.object.object_id); + + msg.markers.push_back(marker); + } + + { + auto marker = createDefaultMarker( + "map", rclcpp::Clock{RCL_ROS_TIME}.now(), "ambiguous_target_text", 0L, + Marker::TEXT_VIEW_FACING, createMarkerScale(0.5, 0.5, 0.5), + createMarkerColor(1.0, 1.0, 0.0, 1.0)); + + marker.id = uuidToInt32(object.object.object_id); + marker.pose = object.getPose(); + marker.pose.position.z += 4.5; + std::ostringstream string_stream; + string_stream << "SHOULD AVOID?"; + marker.text = string_stream.str(); + marker.color = createMarkerColor(1.0, 1.0, 0.0, 0.999); + marker.scale = createMarkerScale(0.8, 0.8, 0.8); + msg.markers.push_back(marker); + } + + { + auto marker = createDefaultMarker( + "map", rclcpp::Clock{RCL_ROS_TIME}.now(), "request_text", 0L, Marker::TEXT_VIEW_FACING, + createMarkerScale(0.5, 0.5, 0.5), createMarkerColor(1.0, 1.0, 0.0, 1.0)); + + marker.id = uuidToInt32(object.object.object_id); + marker.pose = ego_pose; + marker.pose.position.z += 2.0; + std::ostringstream string_stream; + string_stream << "SYSTEM REQUESTS OPERATOR SUPPORT."; + marker.text = string_stream.str(); + marker.color = createMarkerColor(1.0, 1.0, 0.0, 0.999); + marker.scale = createMarkerScale(0.8, 0.8, 0.8); + msg.markers.push_back(marker); + } + + return msg; + } + + return msg; +} + MarkerArray createStopTargetObjectMarkerArray(const AvoidancePlanningData & data) { MarkerArray msg; diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp index 641ae9547b712..b4a3bba0ee508 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp @@ -1386,6 +1386,7 @@ void StaticObstacleAvoidanceModule::updateRTCData() void StaticObstacleAvoidanceModule::updateInfoMarker(const AvoidancePlanningData & data) const { + using utils::static_obstacle_avoidance::createAmbiguousObjectsMarkerArray; using utils::static_obstacle_avoidance::createStopTargetObjectMarkerArray; using utils::static_obstacle_avoidance::createTargetObjectsMarkerArray; @@ -1393,6 +1394,10 @@ void StaticObstacleAvoidanceModule::updateInfoMarker(const AvoidancePlanningData appendMarkerArray( createTargetObjectsMarkerArray(data.target_objects, "target_objects"), &info_marker_); appendMarkerArray(createStopTargetObjectMarkerArray(data), &info_marker_); + appendMarkerArray( + createAmbiguousObjectsMarkerArray( + data.target_objects, getEgoPose(), parameters_->policy_ambiguous_vehicle), + &info_marker_); } void StaticObstacleAvoidanceModule::updateDebugMarker( From 69cad9fd4bb52ab8357fdcbac94a7ad4eb910377 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 14:27:26 +0900 Subject: [PATCH 179/306] fix(object_merger): fix funcArgNamesDifferent (#8012) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../object_merger/src/object_association_merger_node.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/perception/object_merger/src/object_association_merger_node.hpp b/perception/object_merger/src/object_association_merger_node.hpp index d5b5a1ae018a6..d11f58bc5a857 100644 --- a/perception/object_merger/src/object_association_merger_node.hpp +++ b/perception/object_merger/src/object_association_merger_node.hpp @@ -55,8 +55,8 @@ class ObjectAssociationMergerNode : public rclcpp::Node private: void objectsCallback( - const autoware_perception_msgs::msg::DetectedObjects::ConstSharedPtr & input_object0_msg, - const autoware_perception_msgs::msg::DetectedObjects::ConstSharedPtr & input_object1_msg); + const autoware_perception_msgs::msg::DetectedObjects::ConstSharedPtr & input_objects0_msg, + const autoware_perception_msgs::msg::DetectedObjects::ConstSharedPtr & input_objects1_msg); tf2_ros::Buffer tf_buffer_; tf2_ros::TransformListener tf_listener_; From 201cf20f683145123663f91f56daa64acfff44df Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 14:28:28 +0900 Subject: [PATCH 180/306] fix(autoware_radar_object_tracker): fix funcArgNamesDifferent (#8015) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../src/radar_object_tracker_node.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/autoware_radar_object_tracker/src/radar_object_tracker_node.hpp b/perception/autoware_radar_object_tracker/src/radar_object_tracker_node.hpp index aaba15bbad05d..224fa10e45c32 100644 --- a/perception/autoware_radar_object_tracker/src/radar_object_tracker_node.hpp +++ b/perception/autoware_radar_object_tracker/src/radar_object_tracker_node.hpp @@ -80,7 +80,7 @@ class RadarObjectTrackerNode : public rclcpp::Node void onMeasurement( const autoware_perception_msgs::msg::DetectedObjects::ConstSharedPtr input_objects_msg); void onTimer(); - void onMap(const LaneletMapBin::ConstSharedPtr map_msg); + void onMap(const LaneletMapBin::ConstSharedPtr msg); std::string world_frame_id_; // tracking frame std::string tracker_config_directory_; From 9f4a033f9b48742faa33b0feaf5ad25689d0ea78 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 14:28:43 +0900 Subject: [PATCH 181/306] fix(tracking_object_merger): fix funcArgNamesDifferent (#8016) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../src/decorative_tracker_merger_node.hpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/perception/tracking_object_merger/src/decorative_tracker_merger_node.hpp b/perception/tracking_object_merger/src/decorative_tracker_merger_node.hpp index ae19f51876490..e0ef193b8306b 100644 --- a/perception/tracking_object_merger/src/decorative_tracker_merger_node.hpp +++ b/perception/tracking_object_merger/src/decorative_tracker_merger_node.hpp @@ -58,20 +58,20 @@ class DecorativeTrackerMergerNode : public rclcpp::Node std::unordered_map> & data_association_map); void mainObjectsCallback( - const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & input_object_msg); + const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & main_objects); void subObjectsCallback( - const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & input_object_msg); + const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & msg); bool decorativeMerger( - const MEASUREMENT_STATE input_index, - const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & input_object_msg); + const MEASUREMENT_STATE input_sensor, + const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & input_objects_msg); autoware_perception_msgs::msg::TrackedObjects predictFutureState( const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & input_object_msg, const std_msgs::msg::Header & header); std::optional interpolateObjectState( - const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & input_object_msg1, - const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & input_object_msg2, - const std_msgs::msg::Header & header); + const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & former_msg, + const autoware_perception_msgs::msg::TrackedObjects::ConstSharedPtr & latter_msg, + const std_msgs::msg::Header & output_header); TrackedObjects getTrackedObjects(const std_msgs::msg::Header & header); TrackerState createNewTracker( const MEASUREMENT_STATE input_index, rclcpp::Time current_time, From 91a81957ba144526032af761365c72ead82c133f Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 14:29:05 +0900 Subject: [PATCH 182/306] fix(autoware_mission_planner): fix funcArgNamesDifferent (#8017) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../src/lanelet2_plugins/default_planner.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp b/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp index 60c2a53b82123..19e28ee2abfc7 100644 --- a/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp +++ b/planning/autoware_mission_planner/src/lanelet2_plugins/default_planner.hpp @@ -52,7 +52,7 @@ class DefaultPlanner : public mission_planner::PlannerPlugin void clearRoute() override; MarkerArray visualize(const LaneletRoute & route) const override; MarkerArray visualize_debug_footprint( - autoware::universe_utils::LinearRing2d goal_footprint_) const; + autoware::universe_utils::LinearRing2d goal_footprint) const; autoware::vehicle_info_utils::VehicleInfo vehicle_info_; private: From 356ece26ba939cdcbef8ac0c4574d455696d455f Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 14:31:45 +0900 Subject: [PATCH 183/306] fix(autoware_motion_velocity_dynamic_obstacle_stop_module): fix funcArgNamesDifferent (#8024) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../src/collision.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/collision.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/collision.hpp index 00e87c69d53fa..63ed073a0983d 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/collision.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_dynamic_obstacle_stop_module/src/collision.hpp @@ -40,7 +40,7 @@ std::optional find_closest_collision_point( std::vector find_collisions( const EgoData & ego_data, const std::vector & objects, - const autoware::universe_utils::MultiPolygon2d & obstacle_forward_footprints); + const autoware::universe_utils::MultiPolygon2d & object_forward_footprints); } // namespace autoware::motion_velocity_planner::dynamic_obstacle_stop From 3b984e71c8fd65820da67ebb59c32a6ae86a941e Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 16 Jul 2024 14:34:57 +0900 Subject: [PATCH 184/306] fix(static_obstacle_avoidance): fix issues in target filtiering logic (#7954) * fix: unknown filtering flow Signed-off-by: satoshi-ota * fix: relax target filtering logic for object which is in freespace Signed-off-by: satoshi-ota * docs: update flowchart Signed-off-by: satoshi-ota * fix: check stopped time in freespace Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../README.md | 21 +++++++++ .../static_obstacle_avoidance.param.yaml | 4 ++ .../data_structs.hpp | 3 ++ .../parameter_helper.hpp | 6 +++ .../static_obstacle_avoidance.schema.json | 22 ++++++++- .../src/manager.cpp | 6 +++ .../src/utils.cpp | 46 +++++++++++++++++-- 7 files changed, 103 insertions(+), 5 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md index 8e20cf2c9f660..036692c1c6b89 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/README.md @@ -401,6 +401,15 @@ else (\n no) #00FFB1 :IGNORE; stop endif +if(Is UNKNOWN objects?) then (yes) +if(isSatisfiedWithUnknownTypeObjectCodition) then (yes) +#FF006C :AVOID; +stop +else (\n no) +#00FFB1 :IGNORE; +stop +endif +else (\n no) if(Is vehicle type?) then (yes) if(isSatisfiedWithVehicleCodition()) then (yes) else (\n no) @@ -618,6 +627,18 @@ title Filter vehicle which is obviously an avoidance target start partition isObviousAvoidanceTarget() { +if(Is object within freespace?) then (yes) +if(Is object on ego lane?) then (no) +if(Is object stopping longer than threshold?) then (yes) +#FF006C :return true; +stop +else (\n no) +endif +else (\n yes) +endif +else (\n no) +endif + if(Is object within intersection?) then (yes) else (\n no) if(Is object parallel to ego lane? AND Is object a parked vehicle?) then (yes) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/config/static_obstacle_avoidance.param.yaml b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/config/static_obstacle_avoidance.param.yaml index 6bd5e0faf1938..0e60e3216361d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/config/static_obstacle_avoidance.param.yaml +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/config/static_obstacle_avoidance.param.yaml @@ -160,6 +160,10 @@ intersection: yaw_deviation: 0.349 # [rad] (default 20.0deg) + freespace: + condition: + th_stopped_time: 5.0 # [-] + # For safety check safety_check: # safety check target type diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp index 079928a58bd9f..4e14dc4886768 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/data_structs.hpp @@ -191,6 +191,9 @@ struct AvoidanceParameters // minimum road shoulder width. maybe 0.5 [m] double object_check_min_road_shoulder_width{0.0}; + // time threshold for vehicle in freespace. + double freespace_condition_th_stopped_time{0.0}; + // force avoidance std::vector wait_and_see_target_behaviors{"NONE", "MERGING", "DEVIATING"}; double wait_and_see_th_closest_distance{0.0}; diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/parameter_helper.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/parameter_helper.hpp index 0cea2a4e633c3..56ac3d7f4f1bb 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/parameter_helper.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/parameter_helper.hpp @@ -154,6 +154,12 @@ AvoidanceParameters getParameter(rclcpp::Node * node) getOrDeclareParameter(*node, ns + "ignore_area.crosswalk.behind_distance"); } + { + const std::string ns = "avoidance.target_filtering.freespace."; + p.freespace_condition_th_stopped_time = + getOrDeclareParameter(*node, ns + "condition.th_stopped_time"); + } + { const std::string ns = "avoidance.target_filtering.detection_area."; p.use_static_detection_area = getOrDeclareParameter(*node, ns + "static"); diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json index 246b96ec5440e..38a91ac39525b 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/schema/static_obstacle_avoidance.schema.json @@ -812,6 +812,25 @@ }, "required": ["yaw_deviation"], "additionalProperties": false + }, + "freespace": { + "type": "object", + "properties": { + "condition": { + "type": "object", + "properties": { + "th_stopped_time": { + "type": "number", + "description": "This module delays avoidance maneuver to see vehicle behavior in freespace.", + "default": 5.0 + } + }, + "required": ["th_stopped_time"], + "additionalProperties": false + } + }, + "required": ["condition"], + "additionalProperties": false } }, "required": [ @@ -823,7 +842,8 @@ "merging_vehicle", "parked_vehicle", "avoidance_for_ambiguous_vehicle", - "intersection" + "intersection", + "freespace" ], "additionalProperties": false }, diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/manager.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/manager.cpp index c5f338e91acbd..5655696ff086d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/manager.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/manager.cpp @@ -150,6 +150,12 @@ void StaticObstacleAvoidanceModuleManager::updateModuleParams( p->object_ignore_section_crosswalk_behind_distance); } + { + const std::string ns = "avoidance.target_filtering.freespace."; + updateParam( + parameters, ns + "condition.th_stopped_time", p->freespace_condition_th_stopped_time); + } + { const std::string ns = "avoidance.target_filtering.intersection."; updateParam(parameters, ns + "yaw_deviation", p->object_check_yaw_deviation); diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp index 75eb6ab0fb62e..ca1ee624a54d5 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp @@ -339,6 +339,32 @@ bool isWithinIntersection( lanelet::utils::to2D(polygon.basicPolygon())); } +bool isWithinFreespace( + const ObjectData & object, const std::shared_ptr & route_handler) +{ + auto polygons = lanelet::utils::query::getAllParkingLots(route_handler->getLaneletMapPtr()); + if (polygons.empty()) { + return false; + } + + std::sort(polygons.begin(), polygons.end(), [&object](const auto & a, const auto & b) { + const double a_distance = boost::geometry::distance( + lanelet::utils::to2D(a).basicPolygon(), + lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object.getPosition())) + .basicPoint()); + const double b_distance = boost::geometry::distance( + lanelet::utils::to2D(b).basicPolygon(), + lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object.getPosition())) + .basicPoint()); + return a_distance < b_distance; + }); + + return boost::geometry::within( + lanelet::utils::to2D(lanelet::utils::conversion::toLaneletPoint(object.getPosition())) + .basicPoint(), + lanelet::utils::to2D(polygons.front().basicPolygon())); +} + bool isOnEgoLane(const ObjectData & object, const std::shared_ptr & route_handler) { if (boost::geometry::within( @@ -708,6 +734,14 @@ bool isObviousAvoidanceTarget( [[maybe_unused]] const std::shared_ptr & planner_data, [[maybe_unused]] const std::shared_ptr & parameters) { + if (isWithinFreespace(object, planner_data->route_handler)) { + if (!object.is_on_ego_lane) { + if (object.stop_time > parameters->freespace_condition_th_stopped_time) { + return true; + } + } + } + if (!object.is_within_intersection) { if (object.is_parked && object.behavior == ObjectData::Behavior::NONE) { RCLCPP_DEBUG(rclcpp::get_logger(logger_namespace), "object is obvious parked vehicle."); @@ -1842,17 +1876,19 @@ void filterTargetObjects( utils::static_obstacle_avoidance::calcEnvelopeOverhangDistance(o, data.reference_path); o.to_road_shoulder_distance = filtering_utils::getRoadShoulderDistance(o, data, planner_data); - // TODO(Satoshi Ota) parametrize stop time threshold if need. - constexpr double STOP_TIME_THRESHOLD = 3.0; // [s] if (filtering_utils::isUnknownTypeObject(o)) { + // TARGET: UNKNOWN + + // TODO(Satoshi Ota) parametrize stop time threshold if need. + constexpr double STOP_TIME_THRESHOLD = 3.0; // [s] if (o.stop_time < STOP_TIME_THRESHOLD) { o.info = ObjectInfo::UNSTABLE_OBJECT; data.other_objects.push_back(o); continue; } - } + } else if (filtering_utils::isVehicleTypeObject(o)) { + // TARGET: CAR, TRUCK, BUS, TRAILER, MOTORCYCLE - if (filtering_utils::isVehicleTypeObject(o)) { o.is_within_intersection = filtering_utils::isWithinIntersection(o, planner_data->route_handler); o.is_parked = @@ -1869,6 +1905,8 @@ void filterTargetObjects( continue; } } else { + // TARGET: PEDESTRIAN, BICYCLE + o.is_within_intersection = filtering_utils::isWithinIntersection(o, planner_data->route_handler); o.is_parked = false; From 4f1f5ead43ec6453e4f88af200d4256326978298 Mon Sep 17 00:00:00 2001 From: Anh Nguyen Date: Tue, 16 Jul 2024 14:08:52 +0700 Subject: [PATCH 185/306] feat(ndt_scan_matcher): warn if the lidar scan has gone out of the range of the loaded map (#7612) * Warn if the initial NDT pose of the lidar has gone out of the map range Signed-off-by: Anh Nguyen * style(pre-commit): autofix * Testing Signed-off-by: Anh Nguyen * style(pre-commit): autofix * Add mutex and a secondary last_update_position to map_update_module to avoid race condition when checking map range Signed-off-by: Anh Nguyen * style(pre-commit): autofix * Remove last_update_pos_ and use mutex for last_update_position_ Signed-off-by: Anh Nguyen * style(pre-commit): autofix --------- Signed-off-by: Anh Nguyen Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../ndt_scan_matcher/map_update_module.hpp | 5 +++ .../src/map_update_module.cpp | 38 ++++++++++++++++++- .../src/ndt_scan_matcher_core.cpp | 12 ++++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/map_update_module.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/map_update_module.hpp index ac913b128b5f1..e09ff5c782e7d 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/map_update_module.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/map_update_module.hpp @@ -52,6 +52,8 @@ class MapUpdateModule rclcpp::Node * node, std::mutex * ndt_ptr_mutex, NdtPtrType & ndt_ptr, HyperParameters::DynamicMapLoading param); + bool out_of_map_range(const geometry_msgs::msg::Point & position); + private: friend class NDTScanMatcher; @@ -62,6 +64,7 @@ class MapUpdateModule [[nodiscard]] bool should_update_map( const geometry_msgs::msg::Point & position, std::unique_ptr & diagnostics_ptr); + void update_map( const geometry_msgs::msg::Point & position, std::unique_ptr & diagnostics_ptr); @@ -88,6 +91,8 @@ class MapUpdateModule // Indicate if there is a prefetch thread waiting for being collected NdtPtrType secondary_ndt_ptr_; bool need_rebuild_; + // Keep the last_update_position_ unchanged while checking map range + std::mutex last_update_position_mtx_; }; #endif // NDT_SCAN_MATCHER__MAP_UPDATE_MODULE_HPP_ diff --git a/localization/ndt_scan_matcher/src/map_update_module.cpp b/localization/ndt_scan_matcher/src/map_update_module.cpp index 32e5a0f2a7c3c..012c72e6b3a46 100644 --- a/localization/ndt_scan_matcher/src/map_update_module.cpp +++ b/localization/ndt_scan_matcher/src/map_update_module.cpp @@ -82,7 +82,11 @@ void MapUpdateModule::callback_timer( bool MapUpdateModule::should_update_map( const geometry_msgs::msg::Point & position, std::unique_ptr & diagnostics_ptr) { + last_update_position_mtx_.lock(); + if (last_update_position_ == std::nullopt) { + last_update_position_mtx_.unlock(); + need_rebuild_ = true; return true; } @@ -91,6 +95,8 @@ bool MapUpdateModule::should_update_map( const double dy = position.y - last_update_position_.value().y; const double distance = std::hypot(dx, dy); + last_update_position_mtx_.unlock(); + // check distance_last_update_position_to_current_position diagnostics_ptr->add_key_value("distance_last_update_position_to_current_position", distance); if (distance + param_.lidar_radius > param_.map_radius) { @@ -107,6 +113,27 @@ bool MapUpdateModule::should_update_map( return distance > param_.update_distance; } +bool MapUpdateModule::out_of_map_range(const geometry_msgs::msg::Point & position) +{ + last_update_position_mtx_.lock(); + + if (last_update_position_ == std::nullopt) { + last_update_position_mtx_.unlock(); + + return true; + } + + const double dx = position.x - last_update_position_.value().x; + const double dy = position.y - last_update_position_.value().y; + + last_update_position_mtx_.unlock(); + + const double distance = std::hypot(dx, dy); + + // check distance_last_update_position_to_current_position + return (distance + param_.lidar_radius > param_.map_radius); +} + void MapUpdateModule::update_map( const geometry_msgs::msg::Point & position, std::unique_ptr & diagnostics_ptr) { @@ -140,8 +167,12 @@ void MapUpdateModule::update_map( diagnostics_ptr->update_level_and_message( diagnostic_msgs::msg::DiagnosticStatus::ERROR, message.str()); RCLCPP_ERROR_STREAM_THROTTLE(logger_, *clock_, 1000, message.str()); - last_update_position_ = position; ndt_ptr_mutex_->unlock(); + + last_update_position_mtx_.lock(); + last_update_position_ = position; + last_update_position_mtx_.unlock(); + return; } @@ -159,7 +190,10 @@ void MapUpdateModule::update_map( // check is_updated_map diagnostics_ptr->add_key_value("is_updated_map", updated); if (!updated) { + last_update_position_mtx_.lock(); last_update_position_ = position; + last_update_position_mtx_.unlock(); + return; } @@ -179,7 +213,9 @@ void MapUpdateModule::update_map( *secondary_ndt_ptr_ = *ndt_ptr_; // Memorize the position of the last update + last_update_position_mtx_.lock(); last_update_position_ = position; + last_update_position_mtx_.unlock(); // Publish the new ndt maps publish_partial_pcd_map(); diff --git a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp index 6d34f666b997b..b394a8f863ceb 100644 --- a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp +++ b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp @@ -440,6 +440,18 @@ bool NDTScanMatcher::callback_sensor_points_main( add_regularization_pose(sensor_ros_time); } + // Warn if the lidar has gone out of the map range + if (map_update_module_->out_of_map_range( + interpolation_result.interpolated_pose.pose.pose.position)) { + std::stringstream msg; + + msg << "Lidar has gone out of the map range"; + diagnostics_scan_points_->update_level_and_message( + diagnostic_msgs::msg::DiagnosticStatus::WARN, msg.str()); + + RCLCPP_WARN_STREAM_THROTTLE(this->get_logger(), *this->get_clock(), 1000, msg.str()); + } + // check is_set_map_points const bool is_set_map_points = (ndt_ptr_->getInputTarget() != nullptr); diagnostics_scan_points_->add_key_value("is_set_map_points", is_set_map_points); From dc9ded6138ef28563c55aaec4943719a928ec79f Mon Sep 17 00:00:00 2001 From: taisa1 <38522559+taisa1@users.noreply.github.com> Date: Tue, 16 Jul 2024 16:32:32 +0900 Subject: [PATCH 186/306] perf(probabilistic_occupancy_grid_map): performance tuning for pointcloud based occupancy grid map (#7687) * perf: performance tuning Signed-off-by: taisa1 * fix: remove unnecessary change Signed-off-by: taisa1 * chore: edit comments Signed-off-by: taisa1 * fix: change the way of offset initialization Signed-off-by: taisa1 * fix: compile error and name Signed-off-by: taisa1 * fix: take common parts as func Signed-off-by: taisa1 * refactor: change variable name Signed-off-by: taisa1 * refactor: add some blank lines Signed-off-by: taisa1 * fix: made unapplied change Signed-off-by: taisa1 * fix: compile error Signed-off-by: taisa1 * refactor: simplified conditions Signed-off-by: taisa1 * fix: apply changes to projective Signed-off-by: taisa1 * fix: remove reserve from projective Signed-off-by: taisa1 * refactor: reduce too many arguments Signed-off-by: taisa1 * refactor: delete angle_increment Signed-off-by: taisa1 * fix: reflect review Signed-off-by: taisa1 * fix: build error Signed-off-by: taisa1 --------- Signed-off-by: taisa1 Co-authored-by: atsushi yano <55824710+atsushi421@users.noreply.github.com> --- .../costmap_2d/occupancy_grid_map_base.hpp | 43 ++++++++ .../costmap_2d/occupancy_grid_map_fixed.hpp | 1 + .../occupancy_grid_map_projective.hpp | 1 + .../utils/utils.hpp | 2 + .../costmap_2d/occupancy_grid_map_base.cpp | 28 ++++- .../costmap_2d/occupancy_grid_map_fixed.cpp | 103 ++++++++++++------ .../occupancy_grid_map_projective.cpp | 94 ++++++++++------ .../lib/utils/utils.cpp | 7 ++ ...intcloud_based_occupancy_grid_map_node.cpp | 55 ++++++---- 9 files changed, 240 insertions(+), 94 deletions(-) diff --git a/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp index 2b2057af9cc12..09ad0a4d554a1 100644 --- a/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_base.hpp @@ -52,8 +52,10 @@ #ifndef AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_BASE_HPP_ #define AUTOWARE__PROBABILISTIC_OCCUPANCY_GRID_MAP__COSTMAP_2D__OCCUPANCY_GRID_MAP_BASE_HPP_ +#include #include #include +#include #include #include @@ -85,11 +87,52 @@ class OccupancyGridMapInterface : public nav2_costmap_2d::Costmap2D virtual void initRosParam(rclcpp::Node & node) = 0; + void setHeightLimit(const double min_height, const double max_height); + + double min_height_; + double max_height_; + + void setFieldOffsets(const PointCloud2 & input_raw, const PointCloud2 & input_obstacle); + + int x_offset_raw_; + int y_offset_raw_; + int z_offset_raw_; + int x_offset_obstacle_; + int y_offset_obstacle_; + int z_offset_obstacle_; + bool offset_initialized_; + + const double min_angle_ = autoware::universe_utils::deg2rad(-180.0); + const double max_angle_ = autoware::universe_utils::deg2rad(180.0); + const double angle_increment_inv_ = 1.0 / autoware::universe_utils::deg2rad(0.1); + + Eigen::Matrix4f mat_map_, mat_scan_; + + bool isPointValid(const Eigen::Vector4f & pt) const + { + // Apply height filter and exclude invalid points + return min_height_ < pt[2] && pt[2] < max_height_ && std::isfinite(pt[0]) && + std::isfinite(pt[1]) && std::isfinite(pt[2]); + } + // Transform pt to (pt_map, pt_scan), then calculate angle_bin_index and range + void transformPointAndCalculate( + const Eigen::Vector4f & pt, Eigen::Vector4f & pt_map, int & angle_bin_index, + double & range) const + { + pt_map = mat_map_ * pt; + Eigen::Vector4f pt_scan(mat_scan_ * pt_map); + const double angle = atan2(pt_scan[1], pt_scan[0]); + angle_bin_index = (angle - min_angle_) * angle_increment_inv_; + range = std::sqrt(pt_scan[1] * pt_scan[1] + pt_scan[0] * pt_scan[0]); + } + private: bool worldToMap(double wx, double wy, unsigned int & mx, unsigned int & my) const; rclcpp::Logger logger_{rclcpp::get_logger("pointcloud_based_occupancy_grid_map")}; rclcpp::Clock clock_{RCL_ROS_TIME}; + + double resolution_inv_; }; } // namespace costmap_2d diff --git a/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp index 9dfd8b8689123..3301fd1987bd3 100644 --- a/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_fixed.hpp @@ -36,6 +36,7 @@ class OccupancyGridMapFixedBlindSpot : public OccupancyGridMapInterface using OccupancyGridMapInterface::raytrace; using OccupancyGridMapInterface::setCellValue; + using OccupancyGridMapInterface::setFieldOffsets; using OccupancyGridMapInterface::updateOrigin; void initRosParam(rclcpp::Node & node) override; diff --git a/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_projective.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_projective.hpp index 1f0f92d933ff3..7569a60b36466 100644 --- a/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_projective.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/costmap_2d/occupancy_grid_map_projective.hpp @@ -40,6 +40,7 @@ class OccupancyGridMapProjectiveBlindSpot : public OccupancyGridMapInterface using OccupancyGridMapInterface::raytrace; using OccupancyGridMapInterface::setCellValue; + using OccupancyGridMapInterface::setFieldOffsets; using OccupancyGridMapInterface::updateOrigin; void initRosParam(rclcpp::Node & node) override; diff --git a/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/utils/utils.hpp b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/utils/utils.hpp index 50b470d904ef6..a8288d2720f48 100644 --- a/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/utils/utils.hpp +++ b/perception/probabilistic_occupancy_grid_map/include/autoware/probabilistic_occupancy_grid_map/utils/utils.hpp @@ -97,6 +97,8 @@ void transformPointcloud( const sensor_msgs::msg::PointCloud2 & input, const geometry_msgs::msg::Pose & pose, sensor_msgs::msg::PointCloud2 & output); +Eigen::Matrix4f getTransformMatrix(const geometry_msgs::msg::Pose & pose); + bool cropPointcloudByHeight( const sensor_msgs::msg::PointCloud2 & input, const tf2_ros::Buffer & tf2, const std::string & target_frame, const float min_height, const float max_height, diff --git a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_base.cpp b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_base.cpp index 5e9b5598c8f63..39855ec36260c 100644 --- a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_base.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_base.cpp @@ -80,17 +80,21 @@ OccupancyGridMapInterface::OccupancyGridMapInterface( const unsigned int cells_size_x, const unsigned int cells_size_y, const float resolution) : Costmap2D(cells_size_x, cells_size_y, resolution, 0.f, 0.f, cost_value::NO_INFORMATION) { + min_height_ = -std::numeric_limits::infinity(); + max_height_ = std::numeric_limits::infinity(); + resolution_inv_ = 1.0 / resolution_; + offset_initialized_ = false; } -bool OccupancyGridMapInterface::worldToMap( +inline bool OccupancyGridMapInterface::worldToMap( double wx, double wy, unsigned int & mx, unsigned int & my) const { if (wx < origin_x_ || wy < origin_y_) { return false; } - mx = static_cast(std::floor((wx - origin_x_) / resolution_)); - my = static_cast(std::floor((wy - origin_y_) / resolution_)); + mx = static_cast(std::floor((wx - origin_x_) * resolution_inv_)); + my = static_cast(std::floor((wy - origin_y_) * resolution_inv_)); if (mx < size_x_ && my < size_y_) { return true; @@ -232,5 +236,23 @@ void OccupancyGridMapInterface::raytrace( raytraceLine(marker, x0, y0, x1, y1, cell_raytrace_range); } +void OccupancyGridMapInterface::setHeightLimit(const double min_height, const double max_height) +{ + min_height_ = min_height; + max_height_ = max_height; +} + +void OccupancyGridMapInterface::setFieldOffsets( + const PointCloud2 & input_raw, const PointCloud2 & input_obstacle) +{ + x_offset_raw_ = input_raw.fields[pcl::getFieldIndex(input_raw, "x")].offset; + y_offset_raw_ = input_raw.fields[pcl::getFieldIndex(input_raw, "y")].offset; + z_offset_raw_ = input_raw.fields[pcl::getFieldIndex(input_raw, "z")].offset; + x_offset_obstacle_ = input_obstacle.fields[pcl::getFieldIndex(input_obstacle, "x")].offset; + y_offset_obstacle_ = input_obstacle.fields[pcl::getFieldIndex(input_obstacle, "y")].offset; + z_offset_obstacle_ = input_obstacle.fields[pcl::getFieldIndex(input_obstacle, "z")].offset; + offset_initialized_ = true; +} + } // namespace costmap_2d } // namespace autoware::occupancy_grid_map diff --git a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp index dffbda18d0c8a..c8af97fcf3ba0 100644 --- a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_fixed.cpp @@ -58,21 +58,20 @@ void OccupancyGridMapFixedBlindSpot::updateWithPointCloud( const PointCloud2 & raw_pointcloud, const PointCloud2 & obstacle_pointcloud, const Pose & robot_pose, const Pose & scan_origin) { - constexpr double min_angle = autoware::universe_utils::deg2rad(-180.0); - constexpr double max_angle = autoware::universe_utils::deg2rad(180.0); - constexpr double angle_increment = autoware::universe_utils::deg2rad(0.1); - const size_t angle_bin_size = ((max_angle - min_angle) / angle_increment) + size_t(1 /*margin*/); - - // Transform from base_link to map frame - PointCloud2 map_raw_pointcloud, map_obstacle_pointcloud; // point cloud in map frame - utils::transformPointcloud(raw_pointcloud, robot_pose, map_raw_pointcloud); - utils::transformPointcloud(obstacle_pointcloud, robot_pose, map_obstacle_pointcloud); - - // Transform from map frame to scan frame - PointCloud2 scan_raw_pointcloud, scan_obstacle_pointcloud; // point cloud in scan frame + const size_t angle_bin_size = + ((max_angle_ - min_angle_) * angle_increment_inv_) + size_t(1 /*margin*/); + + // Transform Matrix from base_link to map frame + mat_map_ = utils::getTransformMatrix(robot_pose); + const auto scan2map_pose = utils::getInversePose(scan_origin); // scan -> map transform pose - utils::transformPointcloud(map_raw_pointcloud, scan2map_pose, scan_raw_pointcloud); - utils::transformPointcloud(map_obstacle_pointcloud, scan2map_pose, scan_obstacle_pointcloud); + + // Transform Matrix from map frame to scan frame + mat_scan_ = utils::getTransformMatrix(scan2map_pose); + + if (!offset_initialized_) { + setFieldOffsets(raw_pointcloud, obstacle_pointcloud); + } // Create angle bins and sort by distance struct BinInfo @@ -86,41 +85,73 @@ void OccupancyGridMapFixedBlindSpot::updateWithPointCloud( double wx; double wy; }; - std::vector> obstacle_pointcloud_angle_bins; - std::vector> raw_pointcloud_angle_bins; - obstacle_pointcloud_angle_bins.resize(angle_bin_size); - raw_pointcloud_angle_bins.resize(angle_bin_size); - for (PointCloud2ConstIterator iter_x(scan_raw_pointcloud, "x"), - iter_y(scan_raw_pointcloud, "y"), iter_wx(map_raw_pointcloud, "x"), - iter_wy(map_raw_pointcloud, "y"); - iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_wx, ++iter_wy) { - const double angle = atan2(*iter_y, *iter_x); - const int angle_bin_index = (angle - min_angle) / angle_increment; - raw_pointcloud_angle_bins.at(angle_bin_index) - .push_back(BinInfo(std::hypot(*iter_y, *iter_x), *iter_wx, *iter_wy)); + + std::vector> obstacle_pointcloud_angle_bins(angle_bin_size); + std::vector> raw_pointcloud_angle_bins(angle_bin_size); + + const size_t raw_pointcloud_size = raw_pointcloud.width * raw_pointcloud.height; + const size_t obstacle_pointcloud_size = obstacle_pointcloud.width * obstacle_pointcloud.height; + + // Reserve a certain amount of memory in advance for performance reasons + const size_t raw_reserve_size = raw_pointcloud_size / angle_bin_size; + const size_t obstacle_reserve_size = obstacle_pointcloud_size / angle_bin_size; + for (size_t i = 0; i < angle_bin_size; i++) { + raw_pointcloud_angle_bins[i].reserve(raw_reserve_size); + obstacle_pointcloud_angle_bins[i].reserve(obstacle_reserve_size); + } + + // Updated every loop inside transformPointAndCalculate() + Eigen::Vector4f pt_map; + int angle_bin_index; + double range; + + size_t global_offset = 0; + for (size_t i = 0; i < raw_pointcloud_size; ++i) { + Eigen::Vector4f pt( + *reinterpret_cast(&raw_pointcloud.data[global_offset + x_offset_raw_]), + *reinterpret_cast(&raw_pointcloud.data[global_offset + y_offset_raw_]), + *reinterpret_cast(&raw_pointcloud.data[global_offset + z_offset_raw_]), 1); + global_offset += raw_pointcloud.point_step; + if (!isPointValid(pt)) { + continue; + } + transformPointAndCalculate(pt, pt_map, angle_bin_index, range); + + raw_pointcloud_angle_bins.at(angle_bin_index).emplace_back(range, pt_map[0], pt_map[1]); } + for (auto & raw_pointcloud_angle_bin : raw_pointcloud_angle_bins) { std::sort(raw_pointcloud_angle_bin.begin(), raw_pointcloud_angle_bin.end(), [](auto a, auto b) { return a.range < b.range; }); } - // create and sort bin for obstacle pointcloud - for (PointCloud2ConstIterator iter_x(scan_obstacle_pointcloud, "x"), - iter_y(scan_obstacle_pointcloud, "y"), iter_wx(map_obstacle_pointcloud, "x"), - iter_wy(map_obstacle_pointcloud, "y"); - iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_wx, ++iter_wy) { - const double angle = atan2(*iter_y, *iter_x); - const int angle_bin_index = (angle - min_angle) / angle_increment; - const double range = std::hypot(*iter_y, *iter_x); + + // Create obstacle angle bins and sort points by range + global_offset = 0; + for (size_t i = 0; i < obstacle_pointcloud_size; ++i) { + Eigen::Vector4f pt( + *reinterpret_cast( + &obstacle_pointcloud.data[global_offset + x_offset_obstacle_]), + *reinterpret_cast( + &obstacle_pointcloud.data[global_offset + y_offset_obstacle_]), + *reinterpret_cast( + &obstacle_pointcloud.data[global_offset + z_offset_obstacle_]), + 1); + global_offset += obstacle_pointcloud.point_step; + if (!isPointValid(pt)) { + continue; + } + transformPointAndCalculate(pt, pt_map, angle_bin_index, range); + // Ignore obstacle points exceed the range of the raw points if (raw_pointcloud_angle_bins.at(angle_bin_index).empty()) { continue; // No raw point in this angle bin } else if (range > raw_pointcloud_angle_bins.at(angle_bin_index).back().range) { continue; // Obstacle point exceeds the range of the raw points } - obstacle_pointcloud_angle_bins.at(angle_bin_index) - .push_back(BinInfo(range, *iter_wx, *iter_wy)); + obstacle_pointcloud_angle_bins.at(angle_bin_index).emplace_back(range, pt_map[0], pt_map[1]); } + for (auto & obstacle_pointcloud_angle_bin : obstacle_pointcloud_angle_bins) { std::sort( obstacle_pointcloud_angle_bin.begin(), obstacle_pointcloud_angle_bin.end(), diff --git a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp index 39224bc7e3a69..f5f2c70ae6dfc 100644 --- a/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/costmap_2d/occupancy_grid_map_projective.cpp @@ -59,21 +59,20 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( const PointCloud2 & raw_pointcloud, const PointCloud2 & obstacle_pointcloud, const Pose & robot_pose, const Pose & scan_origin) { - constexpr double min_angle = autoware::universe_utils::deg2rad(-180.0); - constexpr double max_angle = autoware::universe_utils::deg2rad(180.0); - constexpr double angle_increment = autoware::universe_utils::deg2rad(0.1); - const size_t angle_bin_size = ((max_angle - min_angle) / angle_increment) + size_t(1 /*margin*/); + const size_t angle_bin_size = + ((max_angle_ - min_angle_) * angle_increment_inv_) + size_t(1 /*margin*/); // Transform from base_link to map frame - PointCloud2 map_raw_pointcloud, map_obstacle_pointcloud; // point cloud in map frame - utils::transformPointcloud(raw_pointcloud, robot_pose, map_raw_pointcloud); - utils::transformPointcloud(obstacle_pointcloud, robot_pose, map_obstacle_pointcloud); + mat_map_ = utils::getTransformMatrix(robot_pose); - // Transform from map frame to scan frame - PointCloud2 scan_raw_pointcloud, scan_obstacle_pointcloud; // point cloud in scan frame const auto scan2map_pose = utils::getInversePose(scan_origin); // scan -> map transform pose - utils::transformPointcloud(map_raw_pointcloud, scan2map_pose, scan_raw_pointcloud); - utils::transformPointcloud(map_obstacle_pointcloud, scan2map_pose, scan_obstacle_pointcloud); + + // Transform from map frame to scan frame + mat_scan_ = utils::getTransformMatrix(scan2map_pose); + + if (!offset_initialized_) { + setFieldOffsets(raw_pointcloud, obstacle_pointcloud); + } // Create angle bins and sort points by range struct BinInfo3D @@ -100,57 +99,82 @@ void OccupancyGridMapProjectiveBlindSpot::updateWithPointCloud( double projected_wy; }; - std::vector> obstacle_pointcloud_angle_bins; - std::vector> raw_pointcloud_angle_bins; - obstacle_pointcloud_angle_bins.resize(angle_bin_size); - raw_pointcloud_angle_bins.resize(angle_bin_size); - for (PointCloud2ConstIterator iter_x(scan_raw_pointcloud, "x"), - iter_y(scan_raw_pointcloud, "y"), iter_wx(map_raw_pointcloud, "x"), - iter_wy(map_raw_pointcloud, "y"), iter_wz(map_raw_pointcloud, "z"); - iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_wx, ++iter_wy, ++iter_wz) { - const double angle = atan2(*iter_y, *iter_x); - const int angle_bin_index = (angle - min_angle) / angle_increment; + std::vector> obstacle_pointcloud_angle_bins(angle_bin_size); + std::vector> raw_pointcloud_angle_bins(angle_bin_size); + + const size_t raw_pointcloud_size = raw_pointcloud.width * raw_pointcloud.height; + const size_t obstacle_pointcloud_size = obstacle_pointcloud.width * obstacle_pointcloud.height; + + // Updated every loop inside transformPointAndCalculate() + Eigen::Vector4f pt_map; + int angle_bin_index; + double range; + + size_t global_offset = 0; + for (size_t i = 0; i < raw_pointcloud_size; i++) { + Eigen::Vector4f pt( + *reinterpret_cast(&raw_pointcloud.data[global_offset + x_offset_raw_]), + *reinterpret_cast(&raw_pointcloud.data[global_offset + y_offset_raw_]), + *reinterpret_cast(&raw_pointcloud.data[global_offset + z_offset_raw_]), 1); + global_offset += raw_pointcloud.point_step; + if (!isPointValid(pt)) { + continue; + } + transformPointAndCalculate(pt, pt_map, angle_bin_index, range); + raw_pointcloud_angle_bins.at(angle_bin_index) - .emplace_back(std::hypot(*iter_y, *iter_x), *iter_wx, *iter_wy, *iter_wz); + .emplace_back(range, pt_map[0], pt_map[1], pt_map[2]); } + for (auto & raw_pointcloud_angle_bin : raw_pointcloud_angle_bins) { std::sort(raw_pointcloud_angle_bin.begin(), raw_pointcloud_angle_bin.end(), [](auto a, auto b) { return a.range < b.range; }); } + // Create obstacle angle bins and sort points by range - for (PointCloud2ConstIterator iter_x(scan_obstacle_pointcloud, "x"), - iter_y(scan_obstacle_pointcloud, "y"), iter_z(scan_obstacle_pointcloud, "z"), - iter_wx(map_obstacle_pointcloud, "x"), iter_wy(map_obstacle_pointcloud, "y"), - iter_wz(map_obstacle_pointcloud, "z"); - iter_x != iter_x.end(); ++iter_x, ++iter_y, ++iter_z, ++iter_wx, ++iter_wy, ++iter_wz) { + global_offset = 0; + for (size_t i = 0; i < obstacle_pointcloud_size; i++) { + Eigen::Vector4f pt( + *reinterpret_cast( + &obstacle_pointcloud.data[global_offset + x_offset_obstacle_]), + *reinterpret_cast( + &obstacle_pointcloud.data[global_offset + y_offset_obstacle_]), + *reinterpret_cast( + &obstacle_pointcloud.data[global_offset + z_offset_obstacle_]), + 1); + global_offset += obstacle_pointcloud.point_step; + if (!isPointValid(pt)) { + continue; + } + transformPointAndCalculate(pt, pt_map, angle_bin_index, range); const double scan_z = scan_origin.position.z - robot_pose.position.z; - const double obstacle_z = (*iter_wz) - robot_pose.position.z; + const double obstacle_z = (pt_map[2]) - robot_pose.position.z; const double dz = scan_z - obstacle_z; - const double angle = atan2(*iter_y, *iter_x); - const int angle_bin_index = (angle - min_angle) / angle_increment; - const double range = std::hypot(*iter_x, *iter_y); + // Ignore obstacle points exceed the range of the raw points if (raw_pointcloud_angle_bins.at(angle_bin_index).empty()) { continue; // No raw point in this angle bin } else if (range > raw_pointcloud_angle_bins.at(angle_bin_index).back().range) { continue; // Obstacle point exceeds the range of the raw points } + if (dz > projection_dz_threshold_) { const double ratio = obstacle_z / dz; const double projection_length = range * ratio; - const double projected_wx = (*iter_wx) + ((*iter_wx) - scan_origin.position.x) * ratio; - const double projected_wy = (*iter_wy) + ((*iter_wy) - scan_origin.position.y) * ratio; + const double projected_wx = (pt_map[0]) + ((pt_map[0]) - scan_origin.position.x) * ratio; + const double projected_wy = (pt_map[1]) + ((pt_map[1]) - scan_origin.position.y) * ratio; obstacle_pointcloud_angle_bins.at(angle_bin_index) .emplace_back( - range, *iter_wx, *iter_wy, *iter_wz, projection_length, projected_wx, projected_wy); + range, pt_map[0], pt_map[1], pt_map[2], projection_length, projected_wx, projected_wy); } else { obstacle_pointcloud_angle_bins.at(angle_bin_index) .emplace_back( - range, *iter_wx, *iter_wy, *iter_wz, std::numeric_limits::infinity(), + range, pt_map[0], pt_map[1], pt_map[2], std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity()); } } + for (auto & obstacle_pointcloud_angle_bin : obstacle_pointcloud_angle_bins) { std::sort( obstacle_pointcloud_angle_bin.begin(), obstacle_pointcloud_angle_bin.end(), diff --git a/perception/probabilistic_occupancy_grid_map/lib/utils/utils.cpp b/perception/probabilistic_occupancy_grid_map/lib/utils/utils.cpp index e8c2cdb2617df..902de2148cffe 100644 --- a/perception/probabilistic_occupancy_grid_map/lib/utils/utils.cpp +++ b/perception/probabilistic_occupancy_grid_map/lib/utils/utils.cpp @@ -60,6 +60,13 @@ void transformPointcloud( output.header.frame_id = ""; } +Eigen::Matrix4f getTransformMatrix(const geometry_msgs::msg::Pose & pose) +{ + auto transform = autoware::universe_utils::pose2transform(pose); + Eigen::Matrix4f tf_matrix = tf2::transformToEigen(transform).matrix().cast(); + return tf_matrix; +} + bool cropPointcloudByHeight( const sensor_msgs::msg::PointCloud2 & input, const tf2_ros::Buffer & tf2, const std::string & target_frame, const float min_height, const float max_height, diff --git a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp b/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp index 3fe75263b3f28..0d772e73c1ad8 100644 --- a/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp +++ b/perception/probabilistic_occupancy_grid_map/src/pointcloud_based_occupancy_grid_map/pointcloud_based_occupancy_grid_map_node.cpp @@ -37,6 +37,7 @@ #endif #include +#include #include #include @@ -141,33 +142,46 @@ void PointcloudBasedOccupancyGridMapNode::onPointcloudWithObstacleAndRaw( scan_origin_frame_ = input_raw_msg->header.frame_id; } - // Apply height filter - PointCloud2 cropped_obstacle_pc{}; - PointCloud2 cropped_raw_pc{}; + PointCloud2 trans_input_raw{}, trans_input_obstacle{}; + bool is_raw_transformed = false; + bool is_obstacle_transformed = false; + + // Prepare for applying height filter if (use_height_filter_) { - if (!utils::cropPointcloudByHeight( - *input_obstacle_msg, *tf2_, base_link_frame_, min_height_, max_height_, - cropped_obstacle_pc)) { - return; + // Make sure that the frame is base_link + if (input_raw_msg->header.frame_id != base_link_frame_) { + if (!utils::transformPointcloud(*input_raw_msg, *tf2_, base_link_frame_, trans_input_raw)) { + return; + } + is_raw_transformed = true; } - if (!utils::cropPointcloudByHeight( - *input_raw_msg, *tf2_, base_link_frame_, min_height_, max_height_, cropped_raw_pc)) { - return; + if (input_obstacle_msg->header.frame_id != base_link_frame_) { + if (!utils::transformPointcloud( + *input_obstacle_msg, *tf2_, base_link_frame_, trans_input_obstacle)) { + return; + } + is_obstacle_transformed = true; } + occupancy_grid_map_ptr_->setHeightLimit(min_height_, max_height_); + } else { + occupancy_grid_map_ptr_->setHeightLimit( + -std::numeric_limits::infinity(), std::numeric_limits::infinity()); } - const PointCloud2 & filtered_obstacle_pc = - use_height_filter_ ? cropped_obstacle_pc : *input_obstacle_msg; - const PointCloud2 & filtered_raw_pc = use_height_filter_ ? cropped_raw_pc : *input_raw_msg; + + const PointCloud2::ConstSharedPtr input_raw_use = + is_raw_transformed ? std::make_shared(trans_input_raw) : input_raw_msg; + const PointCloud2::ConstSharedPtr input_obstacle_use = + is_obstacle_transformed ? std::make_shared(trans_input_obstacle) + : input_obstacle_msg; // Filter obstacle pointcloud by raw pointcloud - PointCloud2 filtered_obstacle_pc_common{}; + PointCloud2 input_obstacle_pc_common{}; + bool use_input_obstacle_pc_common = false; if (filter_obstacle_pointcloud_by_raw_pointcloud_) { - if (!utils::extractCommonPointCloud( - filtered_obstacle_pc, filtered_raw_pc, filtered_obstacle_pc_common)) { - filtered_obstacle_pc_common = filtered_obstacle_pc; + if (utils::extractCommonPointCloud( + *input_obstacle_use, *input_raw_use, input_obstacle_pc_common)) { + use_input_obstacle_pc_common = true; } - } else { - filtered_obstacle_pc_common = filtered_obstacle_pc; } // Get from map to sensor frame pose @@ -191,7 +205,8 @@ void PointcloudBasedOccupancyGridMapNode::onPointcloudWithObstacleAndRaw( gridmap_origin.position.x - occupancy_grid_map_ptr_->getSizeInMetersX() / 2, gridmap_origin.position.y - occupancy_grid_map_ptr_->getSizeInMetersY() / 2); occupancy_grid_map_ptr_->updateWithPointCloud( - filtered_raw_pc, filtered_obstacle_pc_common, robot_pose, scan_origin); + *input_raw_use, (use_input_obstacle_pc_common ? input_obstacle_pc_common : *input_obstacle_use), + robot_pose, scan_origin); if (enable_single_frame_mode_) { // publish From ad54f239c9e67af82c5bcd6592bb7d3f54750ebc Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 16:50:29 +0900 Subject: [PATCH 187/306] fix(predicted_path_checker): fix constParameterReference (#8038) fix:constParameterReference Signed-off-by: kobayu858 --- .../include/predicted_path_checker/utils.hpp | 2 +- .../src/predicted_path_checker_node/utils.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/control/predicted_path_checker/include/predicted_path_checker/utils.hpp b/control/predicted_path_checker/include/predicted_path_checker/utils.hpp index 6f5c0e5cdb883..77d6df2021c8f 100644 --- a/control/predicted_path_checker/include/predicted_path_checker/utils.hpp +++ b/control/predicted_path_checker/include/predicted_path_checker/utils.hpp @@ -65,7 +65,7 @@ TrajectoryPoint calcInterpolatedPoint( std::pair findStopPoint( TrajectoryPoints & predicted_trajectory_array, const size_t collision_idx, - const double stop_margin, autoware::vehicle_info_utils::VehicleInfo & vehicle_info); + const double stop_margin, const autoware::vehicle_info_utils::VehicleInfo & vehicle_info); bool isInBrakeDistance( const TrajectoryPoints & trajectory, const size_t stop_idx, const double relative_velocity, diff --git a/control/predicted_path_checker/src/predicted_path_checker_node/utils.cpp b/control/predicted_path_checker/src/predicted_path_checker_node/utils.cpp index d750f3aa07248..48640b21b6064 100644 --- a/control/predicted_path_checker/src/predicted_path_checker_node/utils.cpp +++ b/control/predicted_path_checker/src/predicted_path_checker_node/utils.cpp @@ -148,7 +148,7 @@ TrajectoryPoint calcInterpolatedPoint( std::pair findStopPoint( TrajectoryPoints & trajectory_array, const size_t collision_idx, const double stop_margin, - autoware::vehicle_info_utils::VehicleInfo & vehicle_info) + const autoware::vehicle_info_utils::VehicleInfo & vehicle_info) { // It returns the stop point and segment of the point on trajectory. From 5704fad74444e9dfa884e1c72e0c2990e3c1ad76 Mon Sep 17 00:00:00 2001 From: Koichi98 <45482193+Koichi98@users.noreply.github.com> Date: Tue, 16 Jul 2024 18:06:43 +0900 Subject: [PATCH 188/306] fix(image_projection_based_fusion): fix invalidPointerCast (#7927) * fix(image_projection_based_fusion): fix invalidPointerCast add cppcheck-suppress for reinterpret_cast Signed-off-by: Koichi Imai Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../src/pointpainting_fusion/node.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp index ffeb47d3123a3..5289fc27f9d1c 100644 --- a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp @@ -322,9 +322,11 @@ dc | dc dc dc dc ||zc| int stride = p_step * i; unsigned char * data = &painted_pointcloud_msg.data[0]; unsigned char * output = &painted_pointcloud_msg.data[0]; + // cppcheck-suppress-begin invalidPointerCast float p_x = *reinterpret_cast(&data[stride + x_offset]); float p_y = *reinterpret_cast(&data[stride + y_offset]); float p_z = *reinterpret_cast(&data[stride + z_offset]); + // cppcheck-suppress-end invalidPointerCast point_lidar << p_x, p_y, p_z; point_camera = lidar2cam_affine * point_lidar; p_x = point_camera.x(); @@ -345,6 +347,7 @@ dc | dc dc dc dc ||zc| int label2d = feature_object.object.classification.front().label; if (!isUnknown(label2d) && isInsideBbox(projected_point.x(), projected_point.y(), roi, p_z)) { data = &painted_pointcloud_msg.data[0]; + // cppcheck-suppress invalidPointerCast auto p_class = reinterpret_cast(&output[stride + class_offset]); for (const auto & cls : isClassTable_) { // add up the class values if the point belongs to multiple classes From b3d76708094ee9d76c11e4985499c8a8f279e3df Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Tue, 16 Jul 2024 19:30:24 +0900 Subject: [PATCH 189/306] feat(static_obstacle_avoidance): integrate time keeper to major functions (#8044) Signed-off-by: satoshi-ota --- .../src/scene.cpp | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp index b4a3bba0ee508..b5b9378618a60 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp @@ -24,6 +24,7 @@ #include "autoware/behavior_path_static_obstacle_avoidance_module/debug.hpp" #include "autoware/behavior_path_static_obstacle_avoidance_module/utils.hpp" +#include #include #include @@ -194,6 +195,7 @@ bool StaticObstacleAvoidanceModule::canTransitSuccessState() void StaticObstacleAvoidanceModule::fillFundamentalData( AvoidancePlanningData & data, DebugData & debug) { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); // reference pose data.reference_pose = utils::getUnshiftedEgoPose(getEgoPose(), helper_->getPreviousSplineShiftPath()); @@ -314,6 +316,7 @@ void StaticObstacleAvoidanceModule::fillFundamentalData( void StaticObstacleAvoidanceModule::fillAvoidanceTargetObjects( AvoidancePlanningData & data, DebugData & debug) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); using utils::static_obstacle_avoidance::filterTargetObjects; using utils::static_obstacle_avoidance::separateObjectsByPath; using utils::static_obstacle_avoidance::updateRoadShoulderDistance; @@ -368,6 +371,7 @@ void StaticObstacleAvoidanceModule::fillAvoidanceTargetObjects( void StaticObstacleAvoidanceModule::fillAvoidanceTargetData(ObjectDataArray & objects) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); using utils::static_obstacle_avoidance::fillAvoidanceNecessity; using utils::static_obstacle_avoidance::fillObjectStoppableJudge; @@ -384,6 +388,7 @@ void StaticObstacleAvoidanceModule::fillAvoidanceTargetData(ObjectDataArray & ob ObjectData StaticObstacleAvoidanceModule::createObjectData( const AvoidancePlanningData & data, const PredictedObject & object) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); using boost::geometry::return_centroid; const auto & path_points = data.reference_path.points; @@ -425,6 +430,7 @@ ObjectData StaticObstacleAvoidanceModule::createObjectData( bool StaticObstacleAvoidanceModule::canYieldManeuver(const AvoidancePlanningData & data) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); // transit yield maneuver only when the avoidance maneuver is not initiated. if (helper_->isShifted()) { RCLCPP_DEBUG(getLogger(), "avoidance maneuver already initiated."); @@ -478,6 +484,7 @@ bool StaticObstacleAvoidanceModule::canYieldManeuver(const AvoidancePlanningData void StaticObstacleAvoidanceModule::fillShiftLine( AvoidancePlanningData & data, DebugData & debug) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); auto path_shifter = path_shifter_; /** @@ -530,6 +537,7 @@ void StaticObstacleAvoidanceModule::fillShiftLine( void StaticObstacleAvoidanceModule::fillEgoStatus( AvoidancePlanningData & data, [[maybe_unused]] DebugData & debug) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); data.state = getCurrentModuleState(data); /** @@ -624,6 +632,7 @@ void StaticObstacleAvoidanceModule::fillEgoStatus( void StaticObstacleAvoidanceModule::fillDebugData( const AvoidancePlanningData & data, [[maybe_unused]] DebugData & debug) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); if (!data.stop_target_object) { return; } @@ -704,6 +713,7 @@ void StaticObstacleAvoidanceModule::updateEgoBehavior( bool StaticObstacleAvoidanceModule::isSafePath( ShiftedPath & shifted_path, [[maybe_unused]] DebugData & debug) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & p = planner_data_->parameters; if (!parameters_->enable_safety_check) { @@ -812,6 +822,7 @@ bool StaticObstacleAvoidanceModule::isSafePath( PathWithLaneId StaticObstacleAvoidanceModule::extendBackwardLength( const PathWithLaneId & original_path) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto previous_path = helper_->getPreviousReferencePath(); const auto longest_dist_to_shift_point = [&]() { @@ -874,6 +885,7 @@ PathWithLaneId StaticObstacleAvoidanceModule::extendBackwardLength( BehaviorModuleOutput StaticObstacleAvoidanceModule::plan() { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & data = avoid_data_; resetPathCandidate(); @@ -1031,6 +1043,7 @@ BehaviorModuleOutput StaticObstacleAvoidanceModule::plan() CandidateOutput StaticObstacleAvoidanceModule::planCandidate() const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & data = avoid_data_; CandidateOutput output; @@ -1070,6 +1083,7 @@ CandidateOutput StaticObstacleAvoidanceModule::planCandidate() const BehaviorModuleOutput StaticObstacleAvoidanceModule::planWaitingApproval() { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); BehaviorModuleOutput out = plan(); if (path_shifter_.getShiftLines().empty()) { @@ -1126,6 +1140,7 @@ void StaticObstacleAvoidanceModule::updatePathShifter(const AvoidLineArray & shi void StaticObstacleAvoidanceModule::addNewShiftLines( PathShifter & path_shifter, const AvoidLineArray & new_shift_lines) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); ShiftLineArray future = utils::static_obstacle_avoidance::toShiftLineArray(new_shift_lines); size_t min_start_idx = std::numeric_limits::max(); @@ -1192,6 +1207,7 @@ void StaticObstacleAvoidanceModule::addNewShiftLines( bool StaticObstacleAvoidanceModule::isValidShiftLine( const AvoidLineArray & shift_lines, const PathShifter & shifter) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); if (shift_lines.empty()) { return true; } @@ -1267,6 +1283,7 @@ bool StaticObstacleAvoidanceModule::isValidShiftLine( void StaticObstacleAvoidanceModule::updateData() { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); using utils::static_obstacle_avoidance::toShiftedPath; helper_->setData(planner_data_); @@ -1351,6 +1368,7 @@ void StaticObstacleAvoidanceModule::initRTCStatus() void StaticObstacleAvoidanceModule::updateRTCData() { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & data = avoid_data_; updateRegisteredRTCStatus(helper_->getPreviousSplineShiftPath().path); @@ -1386,6 +1404,7 @@ void StaticObstacleAvoidanceModule::updateRTCData() void StaticObstacleAvoidanceModule::updateInfoMarker(const AvoidancePlanningData & data) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); using utils::static_obstacle_avoidance::createAmbiguousObjectsMarkerArray; using utils::static_obstacle_avoidance::createStopTargetObjectMarkerArray; using utils::static_obstacle_avoidance::createTargetObjectsMarkerArray; @@ -1403,6 +1422,7 @@ void StaticObstacleAvoidanceModule::updateInfoMarker(const AvoidancePlanningData void StaticObstacleAvoidanceModule::updateDebugMarker( const AvoidancePlanningData & data, const PathShifter & shifter, const DebugData & debug) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); debug_marker_.markers.clear(); debug_marker_ = utils::static_obstacle_avoidance::createDebugMarkerArray(data, shifter, debug, parameters_); @@ -1427,6 +1447,7 @@ void StaticObstacleAvoidanceModule::updateAvoidanceDebugData( double StaticObstacleAvoidanceModule::calcDistanceToStopLine(const ObjectData & object) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & p = parameters_; const auto & vehicle_width = planner_data_->parameters.vehicle_width; @@ -1468,6 +1489,7 @@ double StaticObstacleAvoidanceModule::calcDistanceToStopLine(const ObjectData & void StaticObstacleAvoidanceModule::insertReturnDeadLine( const bool use_constraints_for_decel, ShiftedPath & shifted_path) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & data = avoid_data_; if (data.to_return_point > planner_data_->parameters.forward_path_length) { @@ -1545,6 +1567,7 @@ void StaticObstacleAvoidanceModule::insertReturnDeadLine( void StaticObstacleAvoidanceModule::insertWaitPoint( const bool use_constraints_for_decel, ShiftedPath & shifted_path) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & data = avoid_data_; // If avoidance path is NOT valid, don't insert any stop points. @@ -1593,6 +1616,7 @@ void StaticObstacleAvoidanceModule::insertWaitPoint( void StaticObstacleAvoidanceModule::insertStopPoint( const bool use_constraints_for_decel, ShiftedPath & shifted_path) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & data = avoid_data_; if (data.safe) { @@ -1640,6 +1664,7 @@ void StaticObstacleAvoidanceModule::insertStopPoint( void StaticObstacleAvoidanceModule::insertPrepareVelocity(ShiftedPath & shifted_path) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & data = avoid_data_; // If avoidance path is NOT safe, don't insert any slow down sections. @@ -1752,6 +1777,7 @@ void StaticObstacleAvoidanceModule::insertPrepareVelocity(ShiftedPath & shifted_ void StaticObstacleAvoidanceModule::insertAvoidanceVelocity(ShiftedPath & shifted_path) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); const auto & data = avoid_data_; // do nothing if no shift line is approved. From 270e75766995d96532a416560b90bef19fc48573 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:43:23 +0900 Subject: [PATCH 190/306] fix(autoware_behavior_velocity_run_out_module): fix constParameterReference (#8050) fix:constParameterReference Signed-off-by: kobayu858 --- .../autoware_behavior_velocity_run_out_module/src/utils.cpp | 2 +- .../autoware_behavior_velocity_run_out_module/src/utils.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.cpp index 537d647883ad4..4f03dadc0555a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.cpp @@ -166,7 +166,7 @@ void insertPathVelocityFromIndex( } } -std::optional findFirstStopPointIdx(PathPointsWithLaneId & path_points) +std::optional findFirstStopPointIdx(const PathPointsWithLaneId & path_points) { for (size_t i = 0; i < path_points.size(); i++) { const auto vel = path_points.at(i).point.longitudinal_velocity_mps; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.hpp index 5f5b7206551ef..f96d9f966265f 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_run_out_module/src/utils.hpp @@ -235,7 +235,7 @@ void insertPathVelocityFromIndexLimited( void insertPathVelocityFromIndex( const size_t & start_idx, const float velocity_mps, PathPointsWithLaneId & path_points); -std::optional findFirstStopPointIdx(PathPointsWithLaneId & path_points); +std::optional findFirstStopPointIdx(const PathPointsWithLaneId & path_points); LineString2d createLineString2d(const lanelet::BasicPolygon2d & poly); From 171a110e1ebd1b7052e4e20e5e66013df264bec0 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:43:47 +0900 Subject: [PATCH 191/306] fix(autoware_motion_velocity_out_of_lane_module): fix constParameterReference (#8051) fix:constParameterReference Signed-off-by: kobayu858 --- .../src/lanelets_selection.cpp | 2 +- .../src/lanelets_selection.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.cpp b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.cpp index bfa38e544227f..d04ae920a7d6a 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.cpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.cpp @@ -36,7 +36,7 @@ lanelet::ConstLanelets consecutive_lanelets( } lanelet::ConstLanelets get_missing_lane_change_lanelets( - lanelet::ConstLanelets & trajectory_lanelets, + const lanelet::ConstLanelets & trajectory_lanelets, const std::shared_ptr route_handler) { lanelet::ConstLanelets missing_lane_change_lanelets; diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.hpp index 8618d808d7d40..94023ae08ad99 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_out_of_lane_module/src/lanelets_selection.hpp @@ -51,7 +51,7 @@ lanelet::ConstLanelets calculate_trajectory_lanelets( /// @return lanelets that may be overlapped by a lane change (and are not already in /// trajectory_lanelets) lanelet::ConstLanelets get_missing_lane_change_lanelets( - lanelet::ConstLanelets & trajectory_lanelets, + const lanelet::ConstLanelets & trajectory_lanelets, const std::shared_ptr route_handler); /// @brief calculate lanelets that should be ignored /// @param [in] ego_data data about the ego vehicle From 17fa28c84b04a06ed2076c98cb9f785093a793c1 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:44:18 +0900 Subject: [PATCH 192/306] fix(autoware_behavior_path_planner_common): fix constParameterReference (#8045) fix:constParameterReference Signed-off-by: kobayu858 --- .../utils/parking_departure/utils.hpp | 2 +- .../src/utils/parking_departure/utils.cpp | 2 +- .../src/utils/path_shifter/path_shifter.cpp | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/utils/parking_departure/utils.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/utils/parking_departure/utils.hpp index e5066932df88e..d34bfeb535f19 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/utils/parking_departure/utils.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/utils/parking_departure/utils.hpp @@ -54,7 +54,7 @@ void modifyVelocityByDirection( const double acceleration); void updatePathProperty( - std::shared_ptr & ego_predicted_path_params, + const std::shared_ptr & ego_predicted_path_params, const std::pair & pairs_terminal_velocity_and_accel); void initializeCollisionCheckDebugMap(CollisionCheckDebugMap & collision_check_debug_map); diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/parking_departure/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/parking_departure/utils.cpp index 7ca11e7d7fd20..4301742a18fa7 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/parking_departure/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/parking_departure/utils.cpp @@ -86,7 +86,7 @@ void modifyVelocityByDirection( } void updatePathProperty( - std::shared_ptr & ego_predicted_path_params, + const std::shared_ptr & ego_predicted_path_params, const std::pair & pairs_terminal_velocity_and_accel) { // If acceleration is close to 0, the ego predicted path will be too short, so a minimum value is diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_shifter/path_shifter.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_shifter/path_shifter.cpp index f88efa49f10ff..8a6c899b4bd6d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_shifter/path_shifter.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/src/utils/path_shifter/path_shifter.cpp @@ -501,7 +501,7 @@ void PathShifter::removeBehindShiftLineAndSetBaseOffset(const size_t nearest_idx if (!removed_shift_lines.empty()) { const auto last_removed_sl = std::max_element( removed_shift_lines.begin(), removed_shift_lines.end(), - [](auto & a, auto & b) { return a.end_idx > b.end_idx; }); + [](const auto & a, const auto & b) { return a.end_idx > b.end_idx; }); new_base_offset = last_removed_sl->end_shift_length; } @@ -630,7 +630,7 @@ double PathShifter::getLastShiftLength() const const auto furthest = std::max_element( shift_lines_.begin(), shift_lines_.end(), - [](auto & a, auto & b) { return a.end_idx < b.end_idx; }); + [](const auto & a, const auto & b) { return a.end_idx < b.end_idx; }); return furthest->end_shift_length; } @@ -643,7 +643,7 @@ std::optional PathShifter::getLastShiftLine() const const auto furthest = std::max_element( shift_lines_.begin(), shift_lines_.end(), - [](auto & a, auto & b) { return a.end_idx > b.end_idx; }); + [](const auto & a, const auto & b) { return a.end_idx > b.end_idx; }); return *furthest; } From 4d4b32b88367ea42420914b4cb24f10515419d0f Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:47:20 +0900 Subject: [PATCH 193/306] fix(autoware_behavior_velocity_crosswalk_module): fix shadowVariable (#7974) * fix:shadowVariable Signed-off-by: kobayu858 * fix:shadowVariable Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../src/scene_crosswalk.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp index 786828d72dcb3..1e6658987f522 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp @@ -382,7 +382,6 @@ std::optional CrosswalkModule::checkStopForCrosswalkUsers( // Check if ego moves forward enough to ignore yield. const auto & p = planner_param_; if (!path_intersects.empty()) { - const double base_link2front = planner_data_->vehicle_info_.max_longitudinal_offset_m; const double dist_ego2crosswalk = calcSignedArcLength(ego_path.points, ego_pos, path_intersects.front()); const auto braking_distance_opt = From e247419f4973fe3caa6bf03d680b06015e6f0f7b Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Tue, 16 Jul 2024 20:48:08 +0900 Subject: [PATCH 194/306] fix(autoware_motion_velocity_obstacle_velocity_limiter_module): fix funcArgNamesDifferent (#8025) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../src/occupancy_grid_utils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/occupancy_grid_utils.hpp b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/occupancy_grid_utils.hpp index f1d5b69714772..4acdfa7945fb1 100644 --- a/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/occupancy_grid_utils.hpp +++ b/planning/motion_velocity_planner/autoware_motion_velocity_obstacle_velocity_limiter_module/src/occupancy_grid_utils.hpp @@ -28,7 +28,7 @@ namespace autoware::motion_velocity_planner::obstacle_velocity_limiter /// @brief mask gridmap cells that are inside the given polygons /// @param[in, out] grid_map the grid map to modify /// @param[in] polygons the polygons to mask from the grid map -void maskPolygons(grid_map::GridMap & grid_map, const ObstacleMasks & masks); +void maskPolygons(grid_map::GridMap & grid_map, const ObstacleMasks & obstacle_masks); /// @brief apply a threshold to the grid map /// @param[in, out] grid_map the grid map to modify From 092e7369136fc4593c64f3428653d1de1822d556 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Tue, 16 Jul 2024 21:40:02 +0900 Subject: [PATCH 195/306] refactor(cluster_merger): add package name prefix of autoware_ (#8001) Signed-off-by: badai-nguyen --- .github/CODEOWNERS | 2 +- .../detection/detector/camera_lidar_detector.launch.xml | 2 +- launch/tier4_perception_launch/package.xml | 2 +- .../CMakeLists.txt | 2 +- .../{cluster_merger => autoware_cluster_merger}/README.md | 4 ++-- .../config/cluster_merger.param.yaml | 0 .../launch/cluster_merger.launch.xml | 4 ++-- .../{cluster_merger => autoware_cluster_merger}/package.xml | 2 +- .../src/cluster_merger_node.cpp | 0 .../src/cluster_merger_node.hpp | 0 10 files changed, 9 insertions(+), 9 deletions(-) rename perception/{cluster_merger => autoware_cluster_merger}/CMakeLists.txt (94%) rename perception/{cluster_merger => autoware_cluster_merger}/README.md (94%) rename perception/{cluster_merger => autoware_cluster_merger}/config/cluster_merger.param.yaml (100%) rename perception/{cluster_merger => autoware_cluster_merger}/launch/cluster_merger.launch.xml (67%) rename perception/{cluster_merger => autoware_cluster_merger}/package.xml (96%) rename perception/{cluster_merger => autoware_cluster_merger}/src/cluster_merger_node.cpp (100%) rename perception/{cluster_merger => autoware_cluster_merger}/src/cluster_merger_node.hpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index a59a5d9ac224e..c9eb36def90b8 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -113,7 +113,7 @@ perception/autoware_radar_fusion_to_detected_object/** satoshi.tanaka@tier4.jp s perception/autoware_radar_object_clustering/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp perception/autoware_radar_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/bytetrack/** manato.hirabayashi@tier4.jp yoshi.ri@tier4.jp -perception/cluster_merger/** dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp +perception/autoware_cluster_merger/** dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp perception/compare_map_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp yukihiro.saito@tier4.jp perception/detected_object_feature_remover/** tomoya.kimura@tier4.jp perception/detected_object_validation/** dai.nguyen@tier4.jp shintaro.tomie@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml index fba0144e6cee1..7dc697f0e8532 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml @@ -158,7 +158,7 @@ - + diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index 349472ed5f8d3..69d28f8577358 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -13,6 +13,7 @@ ament_cmake_auto autoware_cmake + autoware_cluster_merger autoware_crosswalk_traffic_light_estimator autoware_map_based_prediction autoware_object_range_splitter @@ -21,7 +22,6 @@ autoware_radar_fusion_to_detected_object autoware_radar_object_clustering autoware_radar_object_tracker - cluster_merger compare_map_segmentation detected_object_feature_remover detected_object_validation diff --git a/perception/cluster_merger/CMakeLists.txt b/perception/autoware_cluster_merger/CMakeLists.txt similarity index 94% rename from perception/cluster_merger/CMakeLists.txt rename to perception/autoware_cluster_merger/CMakeLists.txt index 773cea6383f41..ce666be317d6c 100644 --- a/perception/cluster_merger/CMakeLists.txt +++ b/perception/autoware_cluster_merger/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(cluster_merger) +project(autoware_cluster_merger) # find dependencies find_package(autoware_cmake REQUIRED) diff --git a/perception/cluster_merger/README.md b/perception/autoware_cluster_merger/README.md similarity index 94% rename from perception/cluster_merger/README.md rename to perception/autoware_cluster_merger/README.md index 6b719a1e5a480..771e6eb0342f0 100644 --- a/perception/cluster_merger/README.md +++ b/perception/autoware_cluster_merger/README.md @@ -1,8 +1,8 @@ -# cluster merger +# autoware cluster merger ## Purpose -cluster_merger is a package for merging pointcloud clusters as detected objects with feature type. +autoware_cluster_merger is a package for merging pointcloud clusters as detected objects with feature type. ## Inner-working / Algorithms diff --git a/perception/cluster_merger/config/cluster_merger.param.yaml b/perception/autoware_cluster_merger/config/cluster_merger.param.yaml similarity index 100% rename from perception/cluster_merger/config/cluster_merger.param.yaml rename to perception/autoware_cluster_merger/config/cluster_merger.param.yaml diff --git a/perception/cluster_merger/launch/cluster_merger.launch.xml b/perception/autoware_cluster_merger/launch/cluster_merger.launch.xml similarity index 67% rename from perception/cluster_merger/launch/cluster_merger.launch.xml rename to perception/autoware_cluster_merger/launch/cluster_merger.launch.xml index f0f90efe051a0..40bdf643fbecf 100644 --- a/perception/cluster_merger/launch/cluster_merger.launch.xml +++ b/perception/autoware_cluster_merger/launch/cluster_merger.launch.xml @@ -3,9 +3,9 @@ - + - + diff --git a/perception/cluster_merger/package.xml b/perception/autoware_cluster_merger/package.xml similarity index 96% rename from perception/cluster_merger/package.xml rename to perception/autoware_cluster_merger/package.xml index 17455dc27b6cc..41bcdb27b1387 100644 --- a/perception/cluster_merger/package.xml +++ b/perception/autoware_cluster_merger/package.xml @@ -1,7 +1,7 @@ - cluster_merger + autoware_cluster_merger 0.1.0 The ROS 2 cluster merger package Yukihiro Saito diff --git a/perception/cluster_merger/src/cluster_merger_node.cpp b/perception/autoware_cluster_merger/src/cluster_merger_node.cpp similarity index 100% rename from perception/cluster_merger/src/cluster_merger_node.cpp rename to perception/autoware_cluster_merger/src/cluster_merger_node.cpp diff --git a/perception/cluster_merger/src/cluster_merger_node.hpp b/perception/autoware_cluster_merger/src/cluster_merger_node.hpp similarity index 100% rename from perception/cluster_merger/src/cluster_merger_node.hpp rename to perception/autoware_cluster_merger/src/cluster_merger_node.hpp From 7ac93ef95b0b7e9fdc753abdee8788b79716c451 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Tue, 16 Jul 2024 23:11:00 +0900 Subject: [PATCH 196/306] refactor(raindrop_cluster_filter): add package name prefix of autoware_ (#8000) * refactor(raindrop_cluster_filter): add package name prefix of autoware_ Signed-off-by: badai-nguyen * fix: typo Signed-off-by: badai-nguyen --------- Signed-off-by: badai-nguyen --- .github/CODEOWNERS | 2 +- .../detection/detector/camera_lidar_detector.launch.xml | 2 +- launch/tier4_perception_launch/package.xml | 2 +- .../CMakeLists.txt | 2 +- .../config/low_intensity_cluster_filter.param.yaml | 0 .../launch/low_intensity_cluster_filter.launch.xml | 4 ++-- .../package.xml | 2 +- .../raindrop_cluster_filter.md | 0 .../src/low_intensity_cluster_filter_node.cpp | 0 .../src/low_intensity_cluster_filter_node.hpp | 0 10 files changed, 7 insertions(+), 7 deletions(-) rename perception/{raindrop_cluster_filter => autoware_raindrop_cluster_filter}/CMakeLists.txt (94%) rename perception/{raindrop_cluster_filter => autoware_raindrop_cluster_filter}/config/low_intensity_cluster_filter.param.yaml (100%) rename perception/{raindrop_cluster_filter => autoware_raindrop_cluster_filter}/launch/low_intensity_cluster_filter.launch.xml (71%) rename perception/{raindrop_cluster_filter => autoware_raindrop_cluster_filter}/package.xml (96%) rename perception/{raindrop_cluster_filter => autoware_raindrop_cluster_filter}/raindrop_cluster_filter.md (100%) rename perception/{raindrop_cluster_filter => autoware_raindrop_cluster_filter}/src/low_intensity_cluster_filter_node.cpp (100%) rename perception/{raindrop_cluster_filter => autoware_raindrop_cluster_filter}/src/low_intensity_cluster_filter_node.hpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c9eb36def90b8..5f404100345f3 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -132,7 +132,7 @@ perception/object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.sait perception/occupancy_grid_map_outlier_filter/** abrahammonrroy@yahoo.com yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/probabilistic_occupancy_grid_map/** mamoru.sobue@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/radar_tracks_msgs_converter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp -perception/raindrop_cluster_filter/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +perception/autoware_raindrop_cluster_filter/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/shape_estimation/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/simple_object_merger/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp perception/tensorrt_classifier/** kotaro.uetake@tier4.jp shunsuke.miura@tier4.jp diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml index 7dc697f0e8532..9256e90ec3e35 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml @@ -213,7 +213,7 @@ - + diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index 69d28f8577358..e9208c1cc2ffe 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -22,6 +22,7 @@ autoware_radar_fusion_to_detected_object autoware_radar_object_clustering autoware_radar_object_tracker + autoware_raindrop_cluster_filter compare_map_segmentation detected_object_feature_remover detected_object_validation @@ -38,7 +39,6 @@ pointcloud_preprocessor pointcloud_to_laserscan probabilistic_occupancy_grid_map - raindrop_cluster_filter shape_estimation topic_tools tracking_object_merger diff --git a/perception/raindrop_cluster_filter/CMakeLists.txt b/perception/autoware_raindrop_cluster_filter/CMakeLists.txt similarity index 94% rename from perception/raindrop_cluster_filter/CMakeLists.txt rename to perception/autoware_raindrop_cluster_filter/CMakeLists.txt index 17eef97cc2f52..cc58bd4a80c12 100644 --- a/perception/raindrop_cluster_filter/CMakeLists.txt +++ b/perception/autoware_raindrop_cluster_filter/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(raindrop_cluster_filter) +project(autoware_raindrop_cluster_filter) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) diff --git a/perception/raindrop_cluster_filter/config/low_intensity_cluster_filter.param.yaml b/perception/autoware_raindrop_cluster_filter/config/low_intensity_cluster_filter.param.yaml similarity index 100% rename from perception/raindrop_cluster_filter/config/low_intensity_cluster_filter.param.yaml rename to perception/autoware_raindrop_cluster_filter/config/low_intensity_cluster_filter.param.yaml diff --git a/perception/raindrop_cluster_filter/launch/low_intensity_cluster_filter.launch.xml b/perception/autoware_raindrop_cluster_filter/launch/low_intensity_cluster_filter.launch.xml similarity index 71% rename from perception/raindrop_cluster_filter/launch/low_intensity_cluster_filter.launch.xml rename to perception/autoware_raindrop_cluster_filter/launch/low_intensity_cluster_filter.launch.xml index 9af4ad47055f9..36d8664579070 100644 --- a/perception/raindrop_cluster_filter/launch/low_intensity_cluster_filter.launch.xml +++ b/perception/autoware_raindrop_cluster_filter/launch/low_intensity_cluster_filter.launch.xml @@ -3,9 +3,9 @@ - + - + diff --git a/perception/raindrop_cluster_filter/package.xml b/perception/autoware_raindrop_cluster_filter/package.xml similarity index 96% rename from perception/raindrop_cluster_filter/package.xml rename to perception/autoware_raindrop_cluster_filter/package.xml index a660e42dd91ce..eea7dda76d4aa 100644 --- a/perception/raindrop_cluster_filter/package.xml +++ b/perception/autoware_raindrop_cluster_filter/package.xml @@ -1,7 +1,7 @@ - raindrop_cluster_filter + autoware_raindrop_cluster_filter 0.1.0 The ROS 2 filter cluster package Yukihiro Saito diff --git a/perception/raindrop_cluster_filter/raindrop_cluster_filter.md b/perception/autoware_raindrop_cluster_filter/raindrop_cluster_filter.md similarity index 100% rename from perception/raindrop_cluster_filter/raindrop_cluster_filter.md rename to perception/autoware_raindrop_cluster_filter/raindrop_cluster_filter.md diff --git a/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp b/perception/autoware_raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp similarity index 100% rename from perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp rename to perception/autoware_raindrop_cluster_filter/src/low_intensity_cluster_filter_node.cpp diff --git a/perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp b/perception/autoware_raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp similarity index 100% rename from perception/raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp rename to perception/autoware_raindrop_cluster_filter/src/low_intensity_cluster_filter_node.hpp From 455742b46c14628f84f063f7eee5823ec89d5349 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:22:57 +0900 Subject: [PATCH 197/306] refactor(detection_by_tracker): add package name prefix of autoware_ (#7998) Signed-off-by: badai-nguyen --- .github/CODEOWNERS | 2 +- .../detector/tracker_based_detector.launch.xml | 4 ++-- launch/tier4_perception_launch/package.xml | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 6 +++--- .../config/detection_by_tracker.param.yaml | 0 .../image/purpose.svg | 0 .../image/segmentation_fail.png | Bin .../launch/detection_by_tracker.launch.xml | 4 ++-- .../package.xml | 4 ++-- .../schema/detection_by_tracker.schema.json | 0 .../src/debugger/debugger.hpp | 0 .../src/detection_by_tracker_node.cpp | 0 .../src/detection_by_tracker_node.hpp | 0 .../src/tracker/tracker_handler.cpp | 0 .../src/tracker/tracker_handler.hpp | 0 .../src/utils/utils.hpp | 0 17 files changed, 12 insertions(+), 12 deletions(-) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/CMakeLists.txt (95%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/README.md (92%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/config/detection_by_tracker.param.yaml (100%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/image/purpose.svg (100%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/image/segmentation_fail.png (100%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/launch/detection_by_tracker.launch.xml (75%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/package.xml (90%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/schema/detection_by_tracker.schema.json (100%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/src/debugger/debugger.hpp (100%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/src/detection_by_tracker_node.cpp (100%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/src/detection_by_tracker_node.hpp (100%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/src/tracker/tracker_handler.cpp (100%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/src/tracker/tracker_handler.hpp (100%) rename perception/{detection_by_tracker => autoware_detection_by_tracker}/src/utils/utils.hpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5f404100345f3..47ddd77bdf68e 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -117,7 +117,7 @@ perception/autoware_cluster_merger/** dai.nguyen@tier4.jp shunsuke.miura@tier4.j perception/compare_map_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp yukihiro.saito@tier4.jp perception/detected_object_feature_remover/** tomoya.kimura@tier4.jp perception/detected_object_validation/** dai.nguyen@tier4.jp shintaro.tomie@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp -perception/detection_by_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +perception/autoware_detection_by_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/elevation_map_loader/** kosuke.takeuchi@tier4.jp shintaro.tomie@tier4.jp taichi.higashide@tier4.jp perception/euclidean_cluster/** dai.nguyen@tier4.jp yukihiro.saito@tier4.jp perception/ground_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/tracker_based_detector.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/tracker_based_detector.launch.xml index b85d4b02847b3..681febf1c5551 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/tracker_based_detector.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/tracker_based_detector.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index e9208c1cc2ffe..db2968f735a37 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -15,6 +15,7 @@ autoware_cluster_merger autoware_crosswalk_traffic_light_estimator + autoware_detection_by_tracker autoware_map_based_prediction autoware_object_range_splitter autoware_object_velocity_splitter @@ -26,7 +27,6 @@ compare_map_segmentation detected_object_feature_remover detected_object_validation - detection_by_tracker elevation_map_loader euclidean_cluster ground_segmentation diff --git a/perception/detection_by_tracker/CMakeLists.txt b/perception/autoware_detection_by_tracker/CMakeLists.txt similarity index 95% rename from perception/detection_by_tracker/CMakeLists.txt rename to perception/autoware_detection_by_tracker/CMakeLists.txt index c019b2be77587..695e284459cc1 100644 --- a/perception/detection_by_tracker/CMakeLists.txt +++ b/perception/autoware_detection_by_tracker/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(detection_by_tracker) +project(autoware_detection_by_tracker) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/perception/detection_by_tracker/README.md b/perception/autoware_detection_by_tracker/README.md similarity index 92% rename from perception/detection_by_tracker/README.md rename to perception/autoware_detection_by_tracker/README.md index 9c54c4fa7f4af..44cb287872f39 100644 --- a/perception/detection_by_tracker/README.md +++ b/perception/autoware_detection_by_tracker/README.md @@ -1,16 +1,16 @@ -# detection_by_tracker +# autoware_detection_by_tracker ## Purpose This package feeds back the tracked objects to the detection module to keep it stable and keep detecting objects. ![purpose](image/purpose.svg) -The detection by tracker takes as input an unknown object containing a cluster of points and a tracker. +The autoware detection by tracker takes as input an unknown object containing a cluster of points and a tracker. The unknown object is optimized to fit the size of the tracker so that it can continue to be detected. ## Inner-workings / Algorithms -The detection by tracker receives an unknown object containing a point cloud and a tracker, where the unknown object is mainly shape-fitted using euclidean clustering. +The autoware detection by tracker receives an unknown object containing a point cloud and a tracker, where the unknown object is mainly shape-fitted using euclidean clustering. Shape fitting using euclidean clustering and other methods has a problem called under segmentation and over segmentation. [![segmentation_fail](image/segmentation_fail.png)](https://www.researchgate.net/figure/Examples-of-an-undersegmentation-error-top-and-an-oversegmentation-error-bottom-Each_fig1_304533062) diff --git a/perception/detection_by_tracker/config/detection_by_tracker.param.yaml b/perception/autoware_detection_by_tracker/config/detection_by_tracker.param.yaml similarity index 100% rename from perception/detection_by_tracker/config/detection_by_tracker.param.yaml rename to perception/autoware_detection_by_tracker/config/detection_by_tracker.param.yaml diff --git a/perception/detection_by_tracker/image/purpose.svg b/perception/autoware_detection_by_tracker/image/purpose.svg similarity index 100% rename from perception/detection_by_tracker/image/purpose.svg rename to perception/autoware_detection_by_tracker/image/purpose.svg diff --git a/perception/detection_by_tracker/image/segmentation_fail.png b/perception/autoware_detection_by_tracker/image/segmentation_fail.png similarity index 100% rename from perception/detection_by_tracker/image/segmentation_fail.png rename to perception/autoware_detection_by_tracker/image/segmentation_fail.png diff --git a/perception/detection_by_tracker/launch/detection_by_tracker.launch.xml b/perception/autoware_detection_by_tracker/launch/detection_by_tracker.launch.xml similarity index 75% rename from perception/detection_by_tracker/launch/detection_by_tracker.launch.xml rename to perception/autoware_detection_by_tracker/launch/detection_by_tracker.launch.xml index 3fba5cb58f8f3..932f08862dca2 100644 --- a/perception/detection_by_tracker/launch/detection_by_tracker.launch.xml +++ b/perception/autoware_detection_by_tracker/launch/detection_by_tracker.launch.xml @@ -3,8 +3,8 @@ - - + + diff --git a/perception/detection_by_tracker/package.xml b/perception/autoware_detection_by_tracker/package.xml similarity index 90% rename from perception/detection_by_tracker/package.xml rename to perception/autoware_detection_by_tracker/package.xml index 50bd876ce0605..837dfae1e2ef9 100644 --- a/perception/detection_by_tracker/package.xml +++ b/perception/autoware_detection_by_tracker/package.xml @@ -1,9 +1,9 @@ - detection_by_tracker + autoware_detection_by_tracker 1.0.0 - The ROS 2 detection_by_tracker package + The ROS 2 autoware_detection_by_tracker package Yukihiro Saito Yoshi Ri Taekjin Lee diff --git a/perception/detection_by_tracker/schema/detection_by_tracker.schema.json b/perception/autoware_detection_by_tracker/schema/detection_by_tracker.schema.json similarity index 100% rename from perception/detection_by_tracker/schema/detection_by_tracker.schema.json rename to perception/autoware_detection_by_tracker/schema/detection_by_tracker.schema.json diff --git a/perception/detection_by_tracker/src/debugger/debugger.hpp b/perception/autoware_detection_by_tracker/src/debugger/debugger.hpp similarity index 100% rename from perception/detection_by_tracker/src/debugger/debugger.hpp rename to perception/autoware_detection_by_tracker/src/debugger/debugger.hpp diff --git a/perception/detection_by_tracker/src/detection_by_tracker_node.cpp b/perception/autoware_detection_by_tracker/src/detection_by_tracker_node.cpp similarity index 100% rename from perception/detection_by_tracker/src/detection_by_tracker_node.cpp rename to perception/autoware_detection_by_tracker/src/detection_by_tracker_node.cpp diff --git a/perception/detection_by_tracker/src/detection_by_tracker_node.hpp b/perception/autoware_detection_by_tracker/src/detection_by_tracker_node.hpp similarity index 100% rename from perception/detection_by_tracker/src/detection_by_tracker_node.hpp rename to perception/autoware_detection_by_tracker/src/detection_by_tracker_node.hpp diff --git a/perception/detection_by_tracker/src/tracker/tracker_handler.cpp b/perception/autoware_detection_by_tracker/src/tracker/tracker_handler.cpp similarity index 100% rename from perception/detection_by_tracker/src/tracker/tracker_handler.cpp rename to perception/autoware_detection_by_tracker/src/tracker/tracker_handler.cpp diff --git a/perception/detection_by_tracker/src/tracker/tracker_handler.hpp b/perception/autoware_detection_by_tracker/src/tracker/tracker_handler.hpp similarity index 100% rename from perception/detection_by_tracker/src/tracker/tracker_handler.hpp rename to perception/autoware_detection_by_tracker/src/tracker/tracker_handler.hpp diff --git a/perception/detection_by_tracker/src/utils/utils.hpp b/perception/autoware_detection_by_tracker/src/utils/utils.hpp similarity index 100% rename from perception/detection_by_tracker/src/utils/utils.hpp rename to perception/autoware_detection_by_tracker/src/utils/utils.hpp From 5c5574777e29ac873c6c8ed230ffeae3b5fe81ab Mon Sep 17 00:00:00 2001 From: Koichi98 <45482193+Koichi98@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:27:54 +0900 Subject: [PATCH 198/306] chore(cppcheck): delete invalidPointerCast from .cppcheck_suppressions (#8047) chore(cppcheck):delete invalidPointerCast from .cppcheck_suppressions Signed-off-by: Koichi Imai --- .cppcheck_suppressions | 1 - 1 file changed, 1 deletion(-) diff --git a/.cppcheck_suppressions b/.cppcheck_suppressions index 0b484ad372448..7cfb5a52a82dd 100644 --- a/.cppcheck_suppressions +++ b/.cppcheck_suppressions @@ -6,7 +6,6 @@ constVariableReference funcArgNamesDifferent functionConst functionStatic -invalidPointerCast knownConditionTrueFalse missingInclude missingIncludeSystem From afea8fefff6bf9f4969a53c20019f8ccb9b751c3 Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:42:16 +0900 Subject: [PATCH 199/306] fix(steer_offset_estimator): fix link to json schema in README (#7655) Signed-off-by: Maxime CLEMENT --- vehicle/autoware_steer_offset_estimator/Readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vehicle/autoware_steer_offset_estimator/Readme.md b/vehicle/autoware_steer_offset_estimator/Readme.md index 164d411e31050..2cd6bd2aabe2a 100644 --- a/vehicle/autoware_steer_offset_estimator/Readme.md +++ b/vehicle/autoware_steer_offset_estimator/Readme.md @@ -46,7 +46,7 @@ ros2 bag play --clock ## Parameters -{{ json_to_markdown("vehicle/steer_offset_estimator/schema/steer_offset_estimator.schema.json") }} +{{ json_to_markdown("vehicle/autoware_steer_offset_estimator/schema/steer_offset_estimator.schema.json") }} ## Diagnostics From b4215bf342d90545faff0005a388d9ea46132dee Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 17 Jul 2024 12:53:03 +0900 Subject: [PATCH 200/306] fix(autoware_universe_utils): fix constVariableReference (#7883) fix:constVariableReference Signed-off-by: kobayu858 --- common/object_recognition_utils/src/conversion.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/object_recognition_utils/src/conversion.cpp b/common/object_recognition_utils/src/conversion.cpp index c8b8e6585f5a7..ac65b35c6809a 100644 --- a/common/object_recognition_utils/src/conversion.cpp +++ b/common/object_recognition_utils/src/conversion.cpp @@ -46,7 +46,7 @@ DetectedObjects toDetectedObjects(const TrackedObjects & tracked_objects) autoware_perception_msgs::msg::DetectedObjects detected_objects; detected_objects.header = tracked_objects.header; - for (auto & tracked_object : tracked_objects.objects) { + for (const auto & tracked_object : tracked_objects.objects) { detected_objects.objects.push_back(toDetectedObject(tracked_object)); } return detected_objects; @@ -74,7 +74,7 @@ TrackedObjects toTrackedObjects(const DetectedObjects & detected_objects) TrackedObjects tracked_objects; tracked_objects.header = detected_objects.header; - for (auto & detected_object : detected_objects.objects) { + for (const auto & detected_object : detected_objects.objects) { tracked_objects.objects.push_back(toTrackedObject(detected_object)); } return tracked_objects; From 607ba261167da116dac7c7a73ec2a494b867a6c2 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 17 Jul 2024 13:05:32 +0900 Subject: [PATCH 201/306] fix(learning_based_vehicle_model): fix constVariableReference (#8061) fix:constVariableReference Signed-off-by: kobayu858 --- .../src/model_connections_helpers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simulator/learning_based_vehicle_model/src/model_connections_helpers.cpp b/simulator/learning_based_vehicle_model/src/model_connections_helpers.cpp index bbd8bf7ffb546..b13f6497d2dea 100644 --- a/simulator/learning_based_vehicle_model/src/model_connections_helpers.cpp +++ b/simulator/learning_based_vehicle_model/src/model_connections_helpers.cpp @@ -32,7 +32,7 @@ std::vector createConnectionsMap( std::vector connection_map; // index in "connection_map" is index in "connection_names_2" and value in "connection_map" is // index in "connection_names_1" - for (const auto & name_2 : connection_names_2) { + for (const auto * const name_2 : connection_names_2) { int mapped_idx = -1; // -1 means that we cannot create a connection between some signals for (std::size_t NAME_1_IDX = 0; NAME_1_IDX < connection_names_1.size(); NAME_1_IDX++) { if (strcmp(name_2, connection_names_1[NAME_1_IDX]) == 0) { // 0 means strings are the same From df6d2d1cceec831e918ba3dbafcb20b9cf1e8630 Mon Sep 17 00:00:00 2001 From: danielsanchezaran Date: Wed, 17 Jul 2024 16:25:44 +0900 Subject: [PATCH 202/306] fix(mrm_handler): add check for autonomous mode and do some refactoring (#8067) * add check for autonomous mode and do some refactoring Signed-off-by: Daniel Sanchez * add comments Signed-off-by: Daniel Sanchez * fix comment Signed-off-by: Daniel Sanchez --------- Signed-off-by: Daniel Sanchez --- .../src/mrm_handler/mrm_handler_core.cpp | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp b/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp index f2531a0556a0d..12497256fce67 100644 --- a/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp +++ b/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp @@ -82,28 +82,29 @@ void MrmHandler::onOperationModeAvailability( const tier4_system_msgs::msg::OperationModeAvailability::ConstSharedPtr msg) { stamp_operation_mode_availability_ = this->now(); + operation_mode_availability_ = msg; + const bool skip_emergency_holding_check = + !param_.use_emergency_holding || is_emergency_holding_ || !isOperationModeAutonomous(); - if (!param_.use_emergency_holding) { - operation_mode_availability_ = msg; + if (skip_emergency_holding_check) { return; } - if (!is_emergency_holding_) { - if (msg->autonomous) { - stamp_autonomous_become_unavailable_.reset(); - } else { - if (!stamp_autonomous_become_unavailable_.has_value()) { - stamp_autonomous_become_unavailable_.emplace(this->now()); - } else { - const auto emergency_duration = - (this->now() - stamp_autonomous_become_unavailable_.value()).seconds(); - if (emergency_duration > param_.timeout_emergency_recovery) { - is_emergency_holding_ = true; - } - } - } + if (msg->autonomous) { + stamp_autonomous_become_unavailable_.reset(); + return; } - operation_mode_availability_ = msg; + + // If no timestamp is available, the ego autonomous mode just became unavailable and the current + // time is recorded. + stamp_autonomous_become_unavailable_ = (!stamp_autonomous_become_unavailable_.has_value()) + ? this->now() + : stamp_autonomous_become_unavailable_; + + // Check if autonomous mode unavailable time is larger than timeout threshold. + const auto emergency_duration = + (this->now() - stamp_autonomous_become_unavailable_.value()).seconds(); + is_emergency_holding_ = (emergency_duration > param_.timeout_emergency_recovery); } void MrmHandler::publishHazardCmd() From 6645b936b5f33140c26b8b1acd1c9613183112f8 Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Wed, 17 Jul 2024 16:35:37 +0900 Subject: [PATCH 203/306] feat(autoware_behavior_velocity_planner_common,autoware_behavior_velocity_stop_line_module): add time_keeper to bvp (#8070) Signed-off-by: Y.Hisaki --- .../scene_module_interface.hpp | 14 ++++++++++++++ .../src/scene_module_interface.cpp | 13 ++++++++++++- .../src/scene.cpp | 10 +++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp index b09f00ce367dc..29f3794516ef5 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/include/autoware/behavior_velocity_planner_common/scene_module_interface.hpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -42,6 +43,7 @@ #include // Debug +#include #include #include @@ -106,6 +108,13 @@ class SceneModuleInterface infrastructure_command_ = command; } + void setTimeKeeper(const std::shared_ptr & time_keeper) + { + time_keeper_ = time_keeper; + } + + std::shared_ptr getTimeKeeper() { return time_keeper_; } + std::optional getFirstStopPathPointIndex() { return first_stop_path_point_index_; } void setActivation(const bool activated) { activated_ = activated; } @@ -132,6 +141,7 @@ class SceneModuleInterface std::optional first_stop_path_point_index_; autoware::motion_utils::VelocityFactorInterface velocity_factor_; std::vector objects_of_interest_; + mutable std::shared_ptr time_keeper_; void setSafe(const bool safe) { @@ -215,6 +225,10 @@ class SceneModuleManagerInterface pub_infrastructure_commands_; std::shared_ptr processing_time_publisher_; + + rclcpp::Publisher::SharedPtr pub_processing_time_detail_; + + std::shared_ptr time_keeper_; }; class SceneModuleManagerInterfaceWithRTC : public SceneModuleManagerInterface diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp index a0f30cd3e33cb..350bc439a4a41 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_planner_common/src/scene_module_interface.cpp @@ -17,9 +17,11 @@ #include #include #include +#include #include #include +#include namespace autoware::behavior_velocity_planner { @@ -33,7 +35,8 @@ SceneModuleInterface::SceneModuleInterface( safe_(false), distance_(std::numeric_limits::lowest()), logger_(logger), - clock_(clock) + clock_(clock), + time_keeper_(std::shared_ptr()) { } @@ -71,6 +74,11 @@ SceneModuleManagerInterface::SceneModuleManagerInterface( "~/output/infrastructure_commands", 1); processing_time_publisher_ = std::make_shared(&node, "~/debug"); + + pub_processing_time_detail_ = node.create_publisher( + "~/debug/processing_time_detail_ms/" + std::string(module_name), 1); + + time_keeper_ = std::make_shared(pub_processing_time_detail_); } size_t SceneModuleManagerInterface::findEgoSegmentIndex( @@ -94,6 +102,8 @@ void SceneModuleManagerInterface::updateSceneModuleInstances( void SceneModuleManagerInterface::modifyPathVelocity( tier4_planning_msgs::msg::PathWithLaneId * path) { + universe_utils::ScopedTimeTrack st( + "SceneModuleManagerInterface::modifyPathVelocity", *time_keeper_); StopWatch stop_watch; stop_watch.tic("Total"); visualization_msgs::msg::MarkerArray debug_marker_array; @@ -177,6 +187,7 @@ void SceneModuleManagerInterface::registerModule( RCLCPP_DEBUG( logger_, "register task: module = %s, id = %lu", getModuleName(), scene_module->getModuleId()); registered_module_id_set_.emplace(scene_module->getModuleId()); + scene_module->setTimeKeeper(time_keeper_); scene_modules_.insert(scene_module); } diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/src/scene.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/src/scene.cpp index 04ea5ca872098..c5079452f5ada 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/src/scene.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_stop_line_module/src/scene.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include #include @@ -40,6 +41,8 @@ StopLineModule::StopLineModule( bool StopLineModule::modifyPathVelocity(PathWithLaneId * path, StopReason * stop_reason) { + universe_utils::ScopedTimeTrack st( + std::string(__func__) + " (lane_id:=" + std::to_string(module_id_) + ")", *getTimeKeeper()); debug_data_ = DebugData(); if (path->points.empty()) return true; const auto base_link2front = planner_data_->vehicle_info_.max_longitudinal_offset_m; @@ -50,11 +53,12 @@ bool StopLineModule::modifyPathVelocity(PathWithLaneId * path, StopReason * stop const LineString2d stop_line = planning_utils::extendLine( stop_line_[0], stop_line_[1], planner_data_->stop_line_extend_length); + time_keeper_->start_track("createTargetPoint"); // Calculate stop pose and insert index const auto stop_point = arc_lane_utils::createTargetPoint( *path, stop_line, planner_param_.stop_margin, planner_data_->vehicle_info_.max_longitudinal_offset_m); - + time_keeper_->end_track("createTargetPoint"); // If no collision found, do nothing if (!stop_point) { RCLCPP_DEBUG_THROTTLE(logger_, *clock_, 5000 /* ms */, "is no collision"); @@ -70,12 +74,16 @@ bool StopLineModule::modifyPathVelocity(PathWithLaneId * path, StopReason * stop * |----------------------------| * s---ego----------x--|--------g */ + time_keeper_->start_track( + "calcSegmentIndexFromPointIndex & findEgoSegmentIndex & calcSignedArcLength"); const size_t stop_line_seg_idx = planning_utils::calcSegmentIndexFromPointIndex( path->points, stop_pose.position, stop_point_idx); const size_t current_seg_idx = findEgoSegmentIndex(path->points); const double signed_arc_dist_to_stop_point = autoware::motion_utils::calcSignedArcLength( path->points, planner_data_->current_odometry->pose.position, current_seg_idx, stop_pose.position, stop_line_seg_idx); + time_keeper_->end_track( + "calcSegmentIndexFromPointIndex & findEgoSegmentIndex & calcSignedArcLength"); switch (state_) { case State::APPROACH: { // Insert stop pose From c20f984c2dfc3030743a6049540ca3e176d05e45 Mon Sep 17 00:00:00 2001 From: Kenzo Lobos Tsunekawa Date: Wed, 17 Jul 2024 17:10:04 +0900 Subject: [PATCH 204/306] fix: ml detector buffer capacity and parameterization (#7936) * fix: increased the buffer capacity in ML-based detectors (1M -> 2M due to new models) but parameterized to users can adapt it to their use cases Signed-off-by: Kenzo Lobos-Tsunekawa * chore: added schema parts Signed-off-by: Kenzo Lobos-Tsunekawa * chore: points are countable ! Signed-off-by: Kenzo Lobos-Tsunekawa --------- Signed-off-by: Kenzo Lobos-Tsunekawa --- .../config/pointpainting.param.yaml | 1 + .../pointpainting_fusion/pointpainting_trt.hpp | 1 - .../src/pointpainting_fusion/node.cpp | 7 ++++--- .../lidar_centerpoint/config/centerpoint.param.yaml | 1 + .../config/centerpoint_tiny.param.yaml | 1 + .../lidar_centerpoint/centerpoint_config.hpp | 13 ++++++++----- .../include/lidar_centerpoint/centerpoint_trt.hpp | 2 -- .../lidar_centerpoint/lib/centerpoint_trt.cpp | 4 ++-- .../lib/preprocess/voxel_generator.cpp | 2 +- .../schema/centerpoint.schemal.json | 6 ++++++ perception/lidar_centerpoint/src/node.cpp | 7 ++++--- .../lidar_transfusion/config/transfusion.param.yaml | 1 + .../lidar_transfusion/transfusion_config.hpp | 12 +++++++----- .../schema/transfusion.schema.json | 6 ++++++ .../src/lidar_transfusion_node.cpp | 9 ++++++--- 15 files changed, 48 insertions(+), 25 deletions(-) diff --git a/perception/image_projection_based_fusion/config/pointpainting.param.yaml b/perception/image_projection_based_fusion/config/pointpainting.param.yaml index 30136bc8f47d0..9227e4fa9319a 100644 --- a/perception/image_projection_based_fusion/config/pointpainting.param.yaml +++ b/perception/image_projection_based_fusion/config/pointpainting.param.yaml @@ -5,6 +5,7 @@ head_onnx_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).onnx" head_engine_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).engine" trt_precision: fp16 + cloud_capacity: 2000000 post_process_params: # post-process params circle_nms_dist_threshold: 0.3 diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp b/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp index d28d9eb31216d..c8318f79bbeed 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp +++ b/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp @@ -23,7 +23,6 @@ namespace image_projection_based_fusion { -static constexpr size_t CAPACITY_POINT = 1000000; class PointPaintingTRT : public centerpoint::CenterPointTRT { public: diff --git a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp index 5289fc27f9d1c..6947331d6bcfa 100644 --- a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp @@ -103,6 +103,7 @@ PointPaintingFusionNode::PointPaintingFusionNode(const rclcpp::NodeOptions & opt this->declare_parameter("densification_params.num_past_frames"); // network param const std::string trt_precision = this->declare_parameter("trt_precision"); + const std::size_t cloud_capacity = this->declare_parameter("cloud_capacity"); const std::string encoder_onnx_path = this->declare_parameter("encoder_onnx_path"); const std::string encoder_engine_path = this->declare_parameter("encoder_engine_path"); @@ -181,9 +182,9 @@ PointPaintingFusionNode::PointPaintingFusionNode(const rclcpp::NodeOptions & opt centerpoint::DensificationParam densification_param( densification_world_frame_id, densification_num_past_frames); centerpoint::CenterPointConfig config( - class_names_.size(), point_feature_size, max_voxel_size, pointcloud_range, voxel_size, - downsample_factor, encoder_in_feature_size, score_threshold, circle_nms_dist_threshold, - yaw_norm_thresholds, has_variance_); + class_names_.size(), point_feature_size, cloud_capacity, max_voxel_size, pointcloud_range, + voxel_size, downsample_factor, encoder_in_feature_size, score_threshold, + circle_nms_dist_threshold, yaw_norm_thresholds, has_variance_); // create detector detector_ptr_ = std::make_unique( diff --git a/perception/lidar_centerpoint/config/centerpoint.param.yaml b/perception/lidar_centerpoint/config/centerpoint.param.yaml index 17ed9a447cdb8..53d77e8d1c42c 100644 --- a/perception/lidar_centerpoint/config/centerpoint.param.yaml +++ b/perception/lidar_centerpoint/config/centerpoint.param.yaml @@ -6,6 +6,7 @@ head_onnx_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).onnx" head_engine_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).engine" trt_precision: fp16 + cloud_capacity: 2000000 post_process_params: # post-process params circle_nms_dist_threshold: 0.5 diff --git a/perception/lidar_centerpoint/config/centerpoint_tiny.param.yaml b/perception/lidar_centerpoint/config/centerpoint_tiny.param.yaml index 17ed9a447cdb8..53d77e8d1c42c 100644 --- a/perception/lidar_centerpoint/config/centerpoint_tiny.param.yaml +++ b/perception/lidar_centerpoint/config/centerpoint_tiny.param.yaml @@ -6,6 +6,7 @@ head_onnx_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).onnx" head_engine_path: "$(var model_path)/pts_backbone_neck_head_$(var model_name).engine" trt_precision: fp16 + cloud_capacity: 2000000 post_process_params: # post-process params circle_nms_dist_threshold: 0.5 diff --git a/perception/lidar_centerpoint/include/lidar_centerpoint/centerpoint_config.hpp b/perception/lidar_centerpoint/include/lidar_centerpoint/centerpoint_config.hpp index 19fdbe7a8b9c2..7b560cf46e2e3 100644 --- a/perception/lidar_centerpoint/include/lidar_centerpoint/centerpoint_config.hpp +++ b/perception/lidar_centerpoint/include/lidar_centerpoint/centerpoint_config.hpp @@ -24,14 +24,16 @@ class CenterPointConfig { public: explicit CenterPointConfig( - const std::size_t class_size, const float point_feature_size, const std::size_t max_voxel_size, - const std::vector & point_cloud_range, const std::vector & voxel_size, - const std::size_t downsample_factor, const std::size_t encoder_in_feature_size, - const float score_threshold, const float circle_nms_dist_threshold, - const std::vector yaw_norm_thresholds, const bool has_variance) + const std::size_t class_size, const float point_feature_size, const std::size_t cloud_capacity, + const std::size_t max_voxel_size, const std::vector & point_cloud_range, + const std::vector & voxel_size, const std::size_t downsample_factor, + const std::size_t encoder_in_feature_size, const float score_threshold, + const float circle_nms_dist_threshold, const std::vector yaw_norm_thresholds, + const bool has_variance) { class_size_ = class_size; point_feature_size_ = point_feature_size; + cloud_capacity_ = cloud_capacity; max_voxel_size_ = max_voxel_size; if (point_cloud_range.size() == 6) { range_min_x_ = static_cast(point_cloud_range[0]); @@ -85,6 +87,7 @@ class CenterPointConfig }; // input params + std::size_t cloud_capacity_{}; std::size_t class_size_{3}; const std::size_t point_dim_size_{3}; // x, y and z std::size_t point_feature_size_{4}; // x, y, z and time-lag diff --git a/perception/lidar_centerpoint/include/lidar_centerpoint/centerpoint_trt.hpp b/perception/lidar_centerpoint/include/lidar_centerpoint/centerpoint_trt.hpp index 55157f70fcfc3..52ae86951c7cf 100644 --- a/perception/lidar_centerpoint/include/lidar_centerpoint/centerpoint_trt.hpp +++ b/perception/lidar_centerpoint/include/lidar_centerpoint/centerpoint_trt.hpp @@ -31,8 +31,6 @@ namespace centerpoint { -static constexpr size_t CAPACITY_POINT = 1000000; - class NetworkParam { public: diff --git a/perception/lidar_centerpoint/lib/centerpoint_trt.cpp b/perception/lidar_centerpoint/lib/centerpoint_trt.cpp index 6f379167b0e71..5040028d1bd94 100644 --- a/perception/lidar_centerpoint/lib/centerpoint_trt.cpp +++ b/perception/lidar_centerpoint/lib/centerpoint_trt.cpp @@ -85,7 +85,7 @@ void CenterPointTRT::initPtr() mask_size_ = config_.grid_size_x_ * config_.grid_size_y_; // host - points_.resize(CAPACITY_POINT * config_.point_feature_size_); + points_.resize(config_.cloud_capacity_ * config_.point_feature_size_); // device voxels_d_ = cuda::make_unique(voxels_size_); @@ -100,7 +100,7 @@ void CenterPointTRT::initPtr() head_out_dim_d_ = cuda::make_unique(grid_xy_size * config_.head_out_dim_size_); head_out_rot_d_ = cuda::make_unique(grid_xy_size * config_.head_out_rot_size_); head_out_vel_d_ = cuda::make_unique(grid_xy_size * config_.head_out_vel_size_); - points_d_ = cuda::make_unique(CAPACITY_POINT * config_.point_feature_size_); + points_d_ = cuda::make_unique(config_.cloud_capacity_ * config_.point_feature_size_); voxels_buffer_d_ = cuda::make_unique(voxels_buffer_size_); mask_d_ = cuda::make_unique(mask_size_); num_voxels_d_ = cuda::make_unique(1); diff --git a/perception/lidar_centerpoint/lib/preprocess/voxel_generator.cpp b/perception/lidar_centerpoint/lib/preprocess/voxel_generator.cpp index e90474fa07327..8e91c3b0b36cc 100644 --- a/perception/lidar_centerpoint/lib/preprocess/voxel_generator.cpp +++ b/perception/lidar_centerpoint/lib/preprocess/voxel_generator.cpp @@ -61,7 +61,7 @@ std::size_t VoxelGenerator::generateSweepPoints(float * points_d, cudaStream_t s float time_lag = static_cast( pd_ptr_->getCurrentTimestamp() - rclcpp::Time(pc_cache_iter->header.stamp).seconds()); - if (point_counter + sweep_num_points > CAPACITY_POINT) { + if (point_counter + sweep_num_points > config_.cloud_capacity_) { RCLCPP_WARN_STREAM( rclcpp::get_logger("lidar_centerpoint"), "Requested number of points exceeds the maximum capacity. Current points = " diff --git a/perception/lidar_centerpoint/schema/centerpoint.schemal.json b/perception/lidar_centerpoint/schema/centerpoint.schemal.json index b11c115cc2466..c3268f0e90d9b 100644 --- a/perception/lidar_centerpoint/schema/centerpoint.schemal.json +++ b/perception/lidar_centerpoint/schema/centerpoint.schemal.json @@ -12,6 +12,12 @@ "default": "fp16", "enum": ["fp32", "fp16"] }, + "cloud_capacity": { + "type": "integer", + "description": "Capacity of the point cloud buffer (should be set to at least the maximum theoretical number of points).", + "default": 2000000, + "minimum": 1 + }, "post_process_params": { "type": "object", "properties": { diff --git a/perception/lidar_centerpoint/src/node.cpp b/perception/lidar_centerpoint/src/node.cpp index 8bf62e3e0168b..53554d0a3becf 100644 --- a/perception/lidar_centerpoint/src/node.cpp +++ b/perception/lidar_centerpoint/src/node.cpp @@ -50,6 +50,7 @@ LidarCenterPointNode::LidarCenterPointNode(const rclcpp::NodeOptions & node_opti const int densification_num_past_frames = this->declare_parameter("densification_params.num_past_frames"); const std::string trt_precision = this->declare_parameter("trt_precision"); + const std::size_t cloud_capacity = this->declare_parameter("cloud_capacity"); const std::string encoder_onnx_path = this->declare_parameter("encoder_onnx_path"); const std::string encoder_engine_path = this->declare_parameter("encoder_engine_path"); @@ -104,9 +105,9 @@ LidarCenterPointNode::LidarCenterPointNode(const rclcpp::NodeOptions & node_opti "The size of voxel_size != 3: use the default parameters."); } CenterPointConfig config( - class_names_.size(), point_feature_size, max_voxel_size, point_cloud_range, voxel_size, - downsample_factor, encoder_in_feature_size, score_threshold, circle_nms_dist_threshold, - yaw_norm_thresholds, has_variance_); + class_names_.size(), point_feature_size, cloud_capacity, max_voxel_size, point_cloud_range, + voxel_size, downsample_factor, encoder_in_feature_size, score_threshold, + circle_nms_dist_threshold, yaw_norm_thresholds, has_variance_); detector_ptr_ = std::make_unique(encoder_param, head_param, densification_param, config); diff --git a/perception/lidar_transfusion/config/transfusion.param.yaml b/perception/lidar_transfusion/config/transfusion.param.yaml index 2c6680fe50af1..af1f63c335501 100644 --- a/perception/lidar_transfusion/config/transfusion.param.yaml +++ b/perception/lidar_transfusion/config/transfusion.param.yaml @@ -3,6 +3,7 @@ # network class_names: ["CAR", "TRUCK", "BUS", "BICYCLE", "PEDESTRIAN"] trt_precision: fp16 + cloud_capacity: 2000000 voxels_num: [5000, 30000, 60000] # [min, opt, max] point_cloud_range: [-92.16, -92.16, -3.0, 92.16, 92.16, 7.0] # [x_min, y_min, z_min, x_max, y_max, z_max] voxel_size: [0.24, 0.24, 10.0] # [x, y, z] diff --git a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp b/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp index 0ad3ab2231f50..0d0148d2f6c17 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp +++ b/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp @@ -25,11 +25,13 @@ class TransfusionConfig { public: TransfusionConfig( - const std::vector & voxels_num, const std::vector & point_cloud_range, - const std::vector & voxel_size, const int num_proposals, - const float circle_nms_dist_threshold, const std::vector & yaw_norm_thresholds, - const float score_threshold) + const std::size_t cloud_capacity, const std::vector & voxels_num, + const std::vector & point_cloud_range, const std::vector & voxel_size, + const std::size_t num_proposals, const float circle_nms_dist_threshold, + const std::vector & yaw_norm_thresholds, const float score_threshold) { + cloud_capacity_ = cloud_capacity; + if (voxels_num.size() == 3) { max_voxels_ = voxels_num[2]; @@ -86,7 +88,7 @@ class TransfusionConfig } ///// INPUT PARAMETERS ///// - const std::size_t cloud_capacity_{1000000}; + std::size_t cloud_capacity_{}; ///// KERNEL PARAMETERS ///// const std::size_t threads_for_voxel_{256}; // threads number for a block const std::size_t points_per_voxel_{20}; diff --git a/perception/lidar_transfusion/schema/transfusion.schema.json b/perception/lidar_transfusion/schema/transfusion.schema.json index 7debc0edda6fb..b37de5a97e7c0 100644 --- a/perception/lidar_transfusion/schema/transfusion.schema.json +++ b/perception/lidar_transfusion/schema/transfusion.schema.json @@ -21,6 +21,12 @@ "default": "fp16", "enum": ["fp16", "fp32"] }, + "cloud_capacity": { + "type": "integer", + "description": "Capacity of the point cloud buffer (should be set to at least the maximum theoretical number of points).", + "default": 2000000, + "minimum": 1 + }, "voxels_num": { "type": "array", "items": { diff --git a/perception/lidar_transfusion/src/lidar_transfusion_node.cpp b/perception/lidar_transfusion/src/lidar_transfusion_node.cpp index 7f5833e60d6d0..a07e385208748 100644 --- a/perception/lidar_transfusion/src/lidar_transfusion_node.cpp +++ b/perception/lidar_transfusion/src/lidar_transfusion_node.cpp @@ -27,11 +27,14 @@ LidarTransfusionNode::LidarTransfusionNode(const rclcpp::NodeOptions & options) class_names_ = this->declare_parameter>("class_names", descriptor); const std::string trt_precision = this->declare_parameter("trt_precision", descriptor); + const std::size_t cloud_capacity = + this->declare_parameter("cloud_capacity", descriptor); const auto voxels_num = this->declare_parameter>("voxels_num", descriptor); const auto point_cloud_range = this->declare_parameter>("point_cloud_range", descriptor); const auto voxel_size = this->declare_parameter>("voxel_size", descriptor); - const int num_proposals = (this->declare_parameter("num_proposals", descriptor)); + const std::size_t num_proposals = + this->declare_parameter("num_proposals", descriptor); const std::string onnx_path = this->declare_parameter("onnx_path", descriptor); const std::string engine_path = this->declare_parameter("engine_path", descriptor); @@ -74,8 +77,8 @@ LidarTransfusionNode::LidarTransfusionNode(const rclcpp::NodeOptions & options) DensificationParam densification_param( densification_world_frame_id, densification_num_past_frames); TransfusionConfig config( - voxels_num, point_cloud_range, voxel_size, num_proposals, circle_nms_dist_threshold, - yaw_norm_thresholds, score_threshold); + cloud_capacity, voxels_num, point_cloud_range, voxel_size, num_proposals, + circle_nms_dist_threshold, yaw_norm_thresholds, score_threshold); const auto allow_remapping_by_area_matrix = this->declare_parameter>("allow_remapping_by_area_matrix", descriptor); From dad3ec4a19d64072f4a7b2540c8ddcd8052ae5d1 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:33:56 +0900 Subject: [PATCH 205/306] fix(multi_object_tracker): fix shadowVariable (#8074) fix:shadowVariable Signed-off-by: kobayu858 --- .../lib/association/successive_shortest_path/ssp.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp b/perception/multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp index d20992c7d183b..84333fe8a1ff6 100644 --- a/perception/multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp +++ b/perception/multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp @@ -330,12 +330,12 @@ void SSP::maximizeLinearAssignment( #ifndef NDEBUG // Check if the potentials are feasible potentials - for (int v = 0; v < n_nodes; ++v) { - for (auto it_incident_edge = adjacency_list.at(v).cbegin(); - it_incident_edge != adjacency_list.at(v).cend(); ++it_incident_edge) { + for (int j = 0; j < n_nodes; ++j) { + for (auto it_incident_edge = adjacency_list.at(j).cbegin(); + it_incident_edge != adjacency_list.at(j).cend(); ++it_incident_edge) { if (it_incident_edge->capacity > 0) { double reduced_cost = - it_incident_edge->cost + potentials.at(v) - potentials.at(it_incident_edge->dst); + it_incident_edge->cost + potentials.at(j) - potentials.at(it_incident_edge->dst); assert(reduced_cost >= 0); } } From 762013c18b3171b1b4ec445feb335d9b13706143 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:48:55 +0900 Subject: [PATCH 206/306] fix(detected_object_validation): fix constParameterReference (#8075) fix:constParameterReference Signed-off-by: kobayu858 --- .../src/obstacle_pointcloud/obstacle_pointcloud_validator.cpp | 2 +- .../src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.cpp b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.cpp index 3fe527935c485..c5ecce714735b 100644 --- a/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.cpp +++ b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.cpp @@ -38,7 +38,7 @@ namespace bg = boost::geometry; using Shape = autoware_perception_msgs::msg::Shape; using Polygon2d = autoware::universe_utils::Polygon2d; -Validator::Validator(PointsNumThresholdParam & points_num_threshold_param) +Validator::Validator(const PointsNumThresholdParam & points_num_threshold_param) { points_num_threshold_param_.min_points_num = points_num_threshold_param.min_points_num; points_num_threshold_param_.max_points_num = points_num_threshold_param.max_points_num; diff --git a/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp index 19b42ecf9055b..54129ff7fedf7 100644 --- a/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp +++ b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp @@ -64,7 +64,7 @@ class Validator pcl::PointCloud::Ptr cropped_pointcloud_; public: - explicit Validator(PointsNumThresholdParam & points_num_threshold_param); + explicit Validator(const PointsNumThresholdParam & points_num_threshold_param); inline pcl::PointCloud::Ptr getDebugPointCloudWithinObject() { return cropped_pointcloud_; From 90978b2d367a5e9affb041ff8b4850df18398ea9 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Wed, 17 Jul 2024 20:28:19 +0900 Subject: [PATCH 207/306] perf(dynamic_obstacle_avoidance): decrease the computation time with time_keeper (#7986) * decrease computation cost Signed-off-by: Takayuki Murooka * remove TODO Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../scene.hpp | 24 +- .../src/scene.cpp | 299 +++++++++++------- 2 files changed, 200 insertions(+), 123 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/include/autoware/behavior_path_dynamic_obstacle_avoidance_module/scene.hpp b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/include/autoware/behavior_path_dynamic_obstacle_avoidance_module/scene.hpp index 6ea15a9309c3c..8f19613b50e6d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/include/autoware/behavior_path_dynamic_obstacle_avoidance_module/scene.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/include/autoware/behavior_path_dynamic_obstacle_avoidance_module/scene.hpp @@ -16,7 +16,6 @@ #define AUTOWARE__BEHAVIOR_PATH_DYNAMIC_OBSTACLE_AVOIDANCE_MODULE__SCENE_HPP_ #include "autoware/behavior_path_planner_common/interface/scene_module_interface.hpp" -#include "autoware/universe_utils/system/stop_watch.hpp" #include #include @@ -206,20 +205,20 @@ class DynamicObstacleAvoidanceModule : public SceneModuleInterface std::optional lat_offset_to_avoid{std::nullopt}; bool is_collision_left{false}; bool should_be_avoided{false}; - std::vector ref_path_points_for_obj_poly; + std::vector ref_points_for_obj_poly; LatFeasiblePaths ego_lat_feasible_paths; // add additional information (not update to the latest data) void update( const MinMaxValue & arg_lon_offset_to_avoid, const MinMaxValue & arg_lat_offset_to_avoid, const bool arg_is_collision_left, const bool arg_should_be_avoided, - const std::vector & arg_ref_path_points_for_obj_poly) + const std::vector & arg_ref_points_for_obj_poly) { lon_offset_to_avoid = arg_lon_offset_to_avoid; lat_offset_to_avoid = arg_lat_offset_to_avoid; is_collision_left = arg_is_collision_left; should_be_avoided = arg_should_be_avoided; - ref_path_points_for_obj_poly = arg_ref_path_points_for_obj_poly; + ref_points_for_obj_poly = arg_ref_points_for_obj_poly; } }; @@ -317,12 +316,12 @@ class DynamicObstacleAvoidanceModule : public SceneModuleInterface const std::string & uuid, const MinMaxValue & lon_offset_to_avoid, const MinMaxValue & lat_offset_to_avoid, const bool is_collision_left, const bool should_be_avoided, - const std::vector & ref_path_points_for_obj_poly) + const std::vector & ref_points_for_obj_poly) { if (object_map_.count(uuid) != 0) { object_map_.at(uuid).update( lon_offset_to_avoid, lat_offset_to_avoid, is_collision_left, should_be_avoided, - ref_path_points_for_obj_poly); + ref_points_for_obj_poly); } } @@ -409,24 +408,25 @@ class DynamicObstacleAvoidanceModule : public SceneModuleInterface std::optional> calcCollisionSection( const std::vector & ego_path, const PredictedPath & obj_path) const; LatLonOffset getLateralLongitudinalOffset( - const std::vector & ego_path, const geometry_msgs::msg::Pose & obj_pose, + const std::vector & ego_points, + const geometry_msgs::msg::Pose & obj_pose, const size_t obj_seg_idx, const autoware_perception_msgs::msg::Shape & obj_shape) const; double calcValidLengthToAvoid( const PredictedPath & obj_path, const geometry_msgs::msg::Pose & obj_pose, const autoware_perception_msgs::msg::Shape & obj_shape, const bool is_object_same_direction) const; MinMaxValue calcMinMaxLongitudinalOffsetToAvoid( - const std::vector & ref_path_points_for_obj_poly, + const std::vector & ref_points_for_obj_poly, const geometry_msgs::msg::Pose & obj_pose, const Polygon2d & obj_points, const double obj_vel, const PredictedPath & obj_path, const autoware_perception_msgs::msg::Shape & obj_shape, const TimeWhileCollision & time_while_collision) const; std::optional calcMinMaxLateralOffsetToAvoidRegulatedObject( - const std::vector & ref_path_points_for_obj_poly, + const std::vector & ref_points_for_obj_poly, const Polygon2d & obj_points, const geometry_msgs::msg::Point & obj_pos, const double obj_vel, const bool is_collision_left, const double obj_normal_vel, const std::optional & prev_object) const; std::optional calcMinMaxLateralOffsetToAvoidUnregulatedObject( - const std::vector & ref_path_points_for_obj_poly, + const std::vector & ref_points_for_obj_poly, const std::optional & prev_object, const DynamicAvoidanceObject & object) const; std::pair getAdjacentLanes( @@ -454,10 +454,6 @@ class DynamicObstacleAvoidanceModule : public SceneModuleInterface std::shared_ptr parameters_; TargetObjectsManager target_objects_manager_; - - mutable autoware::universe_utils::StopWatch< - std::chrono::milliseconds, std::chrono::microseconds, std::chrono::steady_clock> - stop_watch_; }; } // namespace autoware::behavior_path_planner diff --git a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/src/scene.cpp index 7fa9ed012b2b9..4d8cdef20a67a 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_dynamic_obstacle_avoidance_module/src/scene.cpp @@ -113,11 +113,11 @@ std::optional getObjectFromUuid(const std::vector & objects, const std::st } std::pair projectObstacleVelocityToTrajectory( - const std::vector & path_points, const PredictedObject & object) + const std::vector & path_points, const PredictedObject & object, + const size_t obj_idx) { const auto & obj_pose = object.kinematics.initial_pose_with_covariance.pose; const double obj_yaw = tf2::getYaw(obj_pose.orientation); - const size_t obj_idx = autoware::motion_utils::findNearestIndex(path_points, obj_pose.position); const double path_yaw = tf2::getYaw(path_points.at(obj_idx).point.pose.orientation); const Eigen::Rotation2Dd R_ego_to_obstacle(obj_yaw - path_yaw); @@ -170,12 +170,9 @@ double calcObstacleWidth(const autoware_perception_msgs::msg::Shape & shape) double calcDiffAngleAgainstPath( const std::vector & path_points, - const geometry_msgs::msg::Pose & target_pose) + const geometry_msgs::msg::Pose & target_pose, const size_t target_idx) { - const size_t nearest_idx = - autoware::motion_utils::findNearestIndex(path_points, target_pose.position); - const double traj_yaw = tf2::getYaw(path_points.at(nearest_idx).point.pose.orientation); - + const double traj_yaw = tf2::getYaw(path_points.at(target_idx).point.pose.orientation); const double target_yaw = tf2::getYaw(target_pose.orientation); const double diff_yaw = autoware::universe_utils::normalizeRadian(target_yaw - traj_yaw); @@ -202,32 +199,30 @@ double calcDiffAngleAgainstPath( } double calcDistanceToPath( - const std::vector & path_points, - const geometry_msgs::msg::Point & target_pos) + const std::vector & points, + const geometry_msgs::msg::Point & target_pos, const size_t target_idx) { - const size_t target_idx = autoware::motion_utils::findNearestIndex(path_points, target_pos); - if (target_idx == 0 || target_idx == path_points.size() - 1) { - const double target_yaw = tf2::getYaw(path_points.at(target_idx).point.pose.orientation); - const double angle_to_target_pos = autoware::universe_utils::calcAzimuthAngle( - path_points.at(target_idx).point.pose.position, target_pos); + if (target_idx == 0 || target_idx == points.size() - 1) { + const double target_yaw = tf2::getYaw(points.at(target_idx).orientation); + const double angle_to_target_pos = + autoware::universe_utils::calcAzimuthAngle(points.at(target_idx).position, target_pos); const double diff_yaw = autoware::universe_utils::normalizeRadian(angle_to_target_pos - target_yaw); if ( (target_idx == 0 && (diff_yaw < -M_PI_2 || M_PI_2 < diff_yaw)) || - (target_idx == path_points.size() - 1 && (-M_PI_2 < diff_yaw && diff_yaw < M_PI_2))) { - return autoware::universe_utils::calcDistance2d(path_points.at(target_idx), target_pos); + (target_idx == points.size() - 1 && (-M_PI_2 < diff_yaw && diff_yaw < M_PI_2))) { + return autoware::universe_utils::calcDistance2d(points.at(target_idx), target_pos); } } - return std::abs(autoware::motion_utils::calcLateralOffset(path_points, target_pos)); + return std::abs(autoware::motion_utils::calcLateralOffset(points, target_pos)); } bool isLeft( const std::vector & path_points, - const geometry_msgs::msg::Point & target_pos) + const geometry_msgs::msg::Point & target_pos, const size_t target_idx) { - const size_t target_idx = autoware::motion_utils::findNearestIndex(path_points, target_pos); const double target_yaw = tf2::getYaw(path_points.at(target_idx).point.pose.orientation); const double angle_to_target_pos = autoware::universe_utils::calcAzimuthAngle( path_points.at(target_idx).point.pose.position, target_pos); @@ -303,6 +298,32 @@ std::vector convertToPoints( } return points; } + +// NOTE: Giving PathPointWithLaneId to autoware_motion_utils functions +// cost a lot. Instead, using Pose is much faster (around x10). +std::vector toGeometryPoints( + const std::vector & path_points) +{ + std::vector geom_points; + for (const auto & path_point : path_points) { + geom_points.push_back(path_point.point.pose); + } + return geom_points; +} + +size_t getNearestIndexFromSegmentIndex( + const std::vector & points, const size_t seg_idx, + const geometry_msgs::msg::Point & target_pos) +{ + const double first_dist = + autoware::universe_utils::calcDistance2d(points.at(seg_idx), target_pos); + const double second_dist = + autoware::universe_utils::calcDistance2d(points.at(seg_idx + 1), target_pos); + if (first_dist < second_dist) { + return seg_idx; + } + return seg_idx + 1; +} } // namespace DynamicObstacleAvoidanceModule::DynamicObstacleAvoidanceModule( @@ -351,7 +372,7 @@ bool DynamicObstacleAvoidanceModule::isExecutionReady() const void DynamicObstacleAvoidanceModule::updateData() { - // stop_watch_.tic(std::string(__func__)); + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); info_marker_.markers.clear(); debug_marker_.markers.clear(); @@ -377,11 +398,6 @@ void DynamicObstacleAvoidanceModule::updateData() target_objects_.push_back(target_object_candidate); } } - - // const double calculation_time = stop_watch_.toc(std::string(__func__)); - // RCLCPP_INFO_STREAM_EXPRESSION( - // getLogger(), parameters_->enable_debug_info, __func__ << ":=" << calculation_time << " - // [ms]"); } bool DynamicObstacleAvoidanceModule::canTransitSuccessState() @@ -391,8 +407,6 @@ bool DynamicObstacleAvoidanceModule::canTransitSuccessState() BehaviorModuleOutput DynamicObstacleAvoidanceModule::plan() { - // stop_watch_.tic(std::string(__func__)); - const auto & input_path = getPreviousModuleOutput().path; if (input_path.points.empty()) { throw std::runtime_error("input path is empty"); @@ -440,11 +454,6 @@ BehaviorModuleOutput DynamicObstacleAvoidanceModule::plan() output.turn_signal_info = getPreviousModuleOutput().turn_signal_info; output.modified_goal = getPreviousModuleOutput().modified_goal; - // const double calculation_time = stop_watch_.toc(std::string(__func__)); - // RCLCPP_INFO_STREAM_EXPRESSION( - // getLogger(), parameters_->enable_debug_info, __func__ << ":=" << calculation_time << " - // [ms]"); - return output; } @@ -494,7 +503,10 @@ ObjectType DynamicObstacleAvoidanceModule::getObjectType(const uint8_t label) co void DynamicObstacleAvoidanceModule::registerRegulatedObjects( const std::vector & prev_objects) { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + const auto input_path = getPreviousModuleOutput().path; + const auto input_points = toGeometryPoints(input_path.points); // for efficient computation const auto & predicted_objects = planner_data_->dynamic_object->objects; for (const auto & predicted_object : predicted_objects) { @@ -508,6 +520,10 @@ void DynamicObstacleAvoidanceModule::registerRegulatedObjects( predicted_object.kinematics.predicted_paths.begin(), predicted_object.kinematics.predicted_paths.end(), [](const PredictedPath & a, const PredictedPath & b) { return a.confidence < b.confidence; }); + const size_t obj_seg_idx = + autoware::motion_utils::findNearestSegmentIndex(input_points, obj_pose.position); + const size_t obj_idx = + getNearestIndexFromSegmentIndex(input_points, obj_seg_idx, obj_pose.position); // 1.a. check label if (getObjectType(predicted_object.classification.front().label) != ObjectType::REGULATED) { @@ -516,7 +532,7 @@ void DynamicObstacleAvoidanceModule::registerRegulatedObjects( // 1.b. check obstacle velocity const auto [obj_tangent_vel, obj_normal_vel] = - projectObstacleVelocityToTrajectory(input_path.points, predicted_object); + projectObstacleVelocityToTrajectory(input_path.points, predicted_object, obj_idx); if ( std::abs(obj_tangent_vel) < parameters_->min_obstacle_vel || parameters_->max_obstacle_vel < std::abs(obj_tangent_vel)) { @@ -524,7 +540,7 @@ void DynamicObstacleAvoidanceModule::registerRegulatedObjects( } // 1.c. check if object is not crossing ego's path - const double obj_angle = calcDiffAngleAgainstPath(input_path.points, obj_pose); + const double obj_angle = calcDiffAngleAgainstPath(input_path.points, obj_pose, obj_idx); const double max_crossing_object_angle = 0.0 <= obj_tangent_vel ? parameters_->max_overtaking_crossing_object_angle : parameters_->max_oncoming_crossing_object_angle; @@ -544,7 +560,7 @@ void DynamicObstacleAvoidanceModule::registerRegulatedObjects( } // 1.e. check if object lateral offset to ego's path is small enough - const double obj_dist_to_path = calcDistanceToPath(input_path.points, obj_pose.position); + const double obj_dist_to_path = calcDistanceToPath(input_points, obj_pose.position, obj_idx); const bool is_object_far_from_path = isObjectFarFromPath(predicted_object, obj_dist_to_path); if (is_object_far_from_path) { RCLCPP_INFO_EXPRESSION( @@ -582,7 +598,10 @@ void DynamicObstacleAvoidanceModule::registerRegulatedObjects( void DynamicObstacleAvoidanceModule::registerUnregulatedObjects( const std::vector & prev_objects) { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + const auto input_path = getPreviousModuleOutput().path; + const auto input_points = toGeometryPoints(input_path.points); // for efficient computation const auto & predicted_objects = planner_data_->dynamic_object->objects; for (const auto & predicted_object : predicted_objects) { @@ -596,6 +615,10 @@ void DynamicObstacleAvoidanceModule::registerUnregulatedObjects( predicted_object.kinematics.predicted_paths.begin(), predicted_object.kinematics.predicted_paths.end(), [](const PredictedPath & a, const PredictedPath & b) { return a.confidence < b.confidence; }); + const size_t obj_seg_idx = + autoware::motion_utils::findNearestSegmentIndex(input_points, obj_pose.position); + const size_t obj_idx = + getNearestIndexFromSegmentIndex(input_points, obj_seg_idx, obj_pose.position); // 1.a. Check if the obstacle is labeled as pedestrians, bicycle or similar. if (getObjectType(predicted_object.classification.front().label) != ObjectType::UNREGULATED) { @@ -604,7 +627,7 @@ void DynamicObstacleAvoidanceModule::registerUnregulatedObjects( // 1.b. Check if the object's velocity is within the module's coverage range. const auto [obj_tangent_vel, obj_normal_vel] = - projectObstacleVelocityToTrajectory(input_path.points, predicted_object); + projectObstacleVelocityToTrajectory(input_path.points, predicted_object, obj_idx); if ( obj_vel_norm < parameters_->min_obstacle_vel || obj_vel_norm > parameters_->max_obstacle_vel) { @@ -626,7 +649,7 @@ void DynamicObstacleAvoidanceModule::registerUnregulatedObjects( // 1.f. calculate the object is on ego's path or not const double dist_obj_center_to_path = - std::abs(autoware::motion_utils::calcLateralOffset(input_path.points, obj_pose.position)); + std::abs(autoware::motion_utils::calcLateralOffset(input_points, obj_pose.position)); const bool is_object_on_ego_path = dist_obj_center_to_path < planner_data_->parameters.vehicle_width / 2.0 + parameters_->min_obj_lat_offset_to_ego_path; @@ -656,7 +679,10 @@ void DynamicObstacleAvoidanceModule::registerUnregulatedObjects( void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstRegulatedObjects( const std::vector & prev_objects) { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + const auto & input_path = getPreviousModuleOutput().path; + const auto input_points = toGeometryPoints(input_path.points); // for efficient computation for (const auto & object : target_objects_manager_.getValidObjects()) { if (getObjectType(object.label) != ObjectType::REGULATED) { @@ -668,11 +694,15 @@ void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstRegulatedObje const auto obj_path = *std::max_element( object.predicted_paths.begin(), object.predicted_paths.end(), [](const PredictedPath & a, const PredictedPath & b) { return a.confidence < b.confidence; }); + const size_t obj_seg_idx = + autoware::motion_utils::findNearestSegmentIndex(input_points, object.pose.position); + const size_t obj_idx = + getNearestIndexFromSegmentIndex(input_points, obj_seg_idx, object.pose.position); - const auto & ref_path_points_for_obj_poly = input_path.points; + const auto & ref_points_for_obj_poly = input_points; // 2.a. check if object is not to be followed by ego - const double obj_angle = calcDiffAngleAgainstPath(input_path.points, object.pose); + const double obj_angle = calcDiffAngleAgainstPath(input_path.points, object.pose, obj_idx); const bool is_object_aligned_to_path = std::abs(obj_angle) < parameters_->max_front_object_angle || M_PI - parameters_->max_front_object_angle < std::abs(obj_angle); @@ -686,9 +716,9 @@ void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstRegulatedObje } // 2.b. calculate which side object exists against ego's path - const bool is_object_left = isLeft(input_path.points, object.pose.position); + const bool is_object_left = isLeft(input_path.points, object.pose.position, obj_idx); const auto lat_lon_offset = - getLateralLongitudinalOffset(input_path.points, object.pose, object.shape); + getLateralLongitudinalOffset(input_points, object.pose, obj_seg_idx, object.shape); // 2.c. check if object will not cut in const bool will_object_cut_in = @@ -759,7 +789,10 @@ void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstRegulatedObje } const auto future_obj_pose = object_recognition_utils::calcInterpolatedPose(obj_path, time_to_collision); - return future_obj_pose ? isLeft(input_path.points, future_obj_pose->position) + const size_t future_obj_idx = + autoware::motion_utils::findNearestIndex(input_path.points, future_obj_pose->position); + + return future_obj_pose ? isLeft(input_path.points, future_obj_pose->position, future_obj_idx) : is_object_left; }(); @@ -790,10 +823,10 @@ void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstRegulatedObje // "ego_path_base" const auto obj_points = autoware::universe_utils::toPolygon2d(object.pose, object.shape); const auto lon_offset_to_avoid = calcMinMaxLongitudinalOffsetToAvoid( - ref_path_points_for_obj_poly, object.pose, obj_points, object.vel, obj_path, object.shape, + ref_points_for_obj_poly, object.pose, obj_points, object.vel, obj_path, object.shape, time_while_collision); const auto lat_offset_to_avoid = calcMinMaxLateralOffsetToAvoidRegulatedObject( - ref_path_points_for_obj_poly, obj_points, object.pose.position, object.vel, is_collision_left, + ref_points_for_obj_poly, obj_points, object.pose.position, object.vel, is_collision_left, object.lat_vel, prev_object); if (!lat_offset_to_avoid) { @@ -808,7 +841,7 @@ void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstRegulatedObje const bool should_be_avoided = true; target_objects_manager_.updateObjectVariables( obj_uuid, lon_offset_to_avoid, *lat_offset_to_avoid, is_collision_left, should_be_avoided, - ref_path_points_for_obj_poly); + ref_points_for_obj_poly); } // prev_input_ref_path_points_ = input_ref_path_points; } @@ -816,23 +849,31 @@ void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstRegulatedObje void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstUnregulatedObjects( const std::vector & prev_objects) { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + const auto & input_path = getPreviousModuleOutput().path; + const auto input_points = toGeometryPoints(input_path.points); // for efficient computation + const size_t ego_seg_idx = planner_data_->findEgoSegmentIndex(input_path.points); for (const auto & object : target_objects_manager_.getValidObjects()) { if (getObjectType(object.label) != ObjectType::UNREGULATED) { continue; } + const size_t obj_seg_idx = + autoware::motion_utils::findNearestSegmentIndex(input_points, object.pose.position); const auto obj_uuid = object.uuid; - const auto & ref_path_points_for_obj_poly = input_path.points; + const auto & ref_points_for_obj_poly = input_points; // 2.g. check if the ego is not ahead of the object. + time_keeper_->start_track("getLateralLongitudinalOffset"); const auto lat_lon_offset = - getLateralLongitudinalOffset(input_path.points, object.pose, object.shape); + getLateralLongitudinalOffset(input_points, object.pose, obj_seg_idx, object.shape); + time_keeper_->end_track("getLateralLongitudinalOffset"); + const double signed_dist_ego_to_obj = [&]() { - const size_t ego_seg_idx = planner_data_->findEgoSegmentIndex(input_path.points); const double lon_offset_ego_to_obj = autoware::motion_utils::calcSignedArcLength( - input_path.points, getEgoPose().position, ego_seg_idx, lat_lon_offset.nearest_idx); + input_points, getEgoPose().position, ego_seg_idx, lat_lon_offset.nearest_idx); if (0 < lon_offset_ego_to_obj) { return std::max( 0.0, lon_offset_ego_to_obj - planner_data_->parameters.front_overhang + @@ -854,7 +895,7 @@ void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstUnregulatedOb // 2.h. calculate longitudinal and lateral offset to avoid to generate object polygon by // "ego_path_base" const auto lat_offset_to_avoid = calcMinMaxLateralOffsetToAvoidUnregulatedObject( - ref_path_points_for_obj_poly, getObstacleFromUuid(prev_objects, obj_uuid), object); + ref_points_for_obj_poly, getObstacleFromUuid(prev_objects, obj_uuid), object); if (!lat_offset_to_avoid) { RCLCPP_INFO_EXPRESSION( getLogger(), parameters_->enable_debug_info, @@ -870,7 +911,7 @@ void DynamicObstacleAvoidanceModule::determineWhetherToAvoidAgainstUnregulatedOb const bool should_be_avoided = true; target_objects_manager_.updateObjectVariables( obj_uuid, lon_offset_to_avoid, *lat_offset_to_avoid, is_collision_left, should_be_avoided, - ref_path_points_for_obj_poly); + ref_points_for_obj_poly); } } @@ -1186,30 +1227,54 @@ DynamicObstacleAvoidanceModule::getAdjacentLanes( DynamicObstacleAvoidanceModule::LatLonOffset DynamicObstacleAvoidanceModule::getLateralLongitudinalOffset( - const std::vector & ego_path, const geometry_msgs::msg::Pose & obj_pose, + const std::vector & ego_points, + const geometry_msgs::msg::Pose & obj_pose, const size_t obj_seg_idx, const autoware_perception_msgs::msg::Shape & obj_shape) const { - const size_t obj_seg_idx = - autoware::motion_utils::findNearestSegmentIndex(ego_path, obj_pose.position); - const auto obj_points = autoware::universe_utils::toPolygon2d(obj_pose, obj_shape); - // TODO(murooka) calculation is not so accurate. std::vector obj_lat_offset_vec; std::vector obj_lon_offset_vec; - for (size_t i = 0; i < obj_points.outer().size(); ++i) { - const auto geom_obj_point = toGeometryPoint(obj_points.outer().at(i)); - const size_t obj_point_seg_idx = - autoware::motion_utils::findNearestSegmentIndex(ego_path, geom_obj_point); + if (obj_shape.type == autoware_perception_msgs::msg::Shape::CYLINDER) { + // NOTE: efficient calculation for the CYLINDER object. + const double radius = obj_shape.dimensions.x / 2.0; // calculate lateral offset - const double obj_point_lat_offset = - autoware::motion_utils::calcLateralOffset(ego_path, geom_obj_point, obj_point_seg_idx); - obj_lat_offset_vec.push_back(obj_point_lat_offset); + const double obj_lat_offset = + autoware::motion_utils::calcLateralOffset(ego_points, obj_pose.position, obj_seg_idx); + double obj_max_lat_offset = obj_lat_offset + radius; + if (obj_max_lat_offset * obj_lat_offset < 0) { + obj_max_lat_offset = 0.0; + } + double obj_min_lat_offset = obj_lat_offset - radius; + if (obj_min_lat_offset * obj_lat_offset < 0) { + obj_min_lat_offset = 0.0; + } + + obj_lat_offset_vec.push_back(obj_max_lat_offset); + obj_lat_offset_vec.push_back(obj_min_lat_offset); // calculate longitudinal offset - const double lon_offset = autoware::motion_utils::calcLongitudinalOffsetToSegment( - ego_path, obj_seg_idx, geom_obj_point); - obj_lon_offset_vec.push_back(lon_offset); + const double obj_lon_offset = autoware::motion_utils::calcLongitudinalOffsetToSegment( + ego_points, obj_seg_idx, obj_pose.position); + obj_lon_offset_vec.push_back(obj_lon_offset - radius); + obj_lon_offset_vec.push_back(obj_lon_offset + radius); + } else { + const auto obj_points = autoware::universe_utils::toPolygon2d(obj_pose, obj_shape); + for (size_t i = 0; i < obj_points.outer().size(); ++i) { + const auto geom_obj_point = toGeometryPoint(obj_points.outer().at(i)); + const size_t obj_point_seg_idx = + autoware::motion_utils::findNearestSegmentIndex(ego_points, geom_obj_point); + + // calculate lateral offset + const double obj_point_lat_offset = + autoware::motion_utils::calcLateralOffset(ego_points, geom_obj_point, obj_point_seg_idx); + obj_lat_offset_vec.push_back(obj_point_lat_offset); + + // calculate longitudinal offset + const double lon_offset = autoware::motion_utils::calcLongitudinalOffsetToSegment( + ego_points, obj_seg_idx, geom_obj_point); + obj_lon_offset_vec.push_back(lon_offset); + } } const auto obj_lat_min_max_offset = getMinMaxValues(obj_lat_offset_vec); @@ -1221,13 +1286,13 @@ DynamicObstacleAvoidanceModule::getLateralLongitudinalOffset( } MinMaxValue DynamicObstacleAvoidanceModule::calcMinMaxLongitudinalOffsetToAvoid( - const std::vector & ref_path_points_for_obj_poly, + const std::vector & ref_points_for_obj_poly, const geometry_msgs::msg::Pose & obj_pose, const Polygon2d & obj_points, const double obj_vel, const PredictedPath & obj_path, const autoware_perception_msgs::msg::Shape & obj_shape, const TimeWhileCollision & time_while_collision) const { - const size_t obj_seg_idx = autoware::motion_utils::findNearestSegmentIndex( - ref_path_points_for_obj_poly, obj_pose.position); + const size_t obj_seg_idx = + autoware::motion_utils::findNearestSegmentIndex(ref_points_for_obj_poly, obj_pose.position); // calculate min/max longitudinal offset from object to path const auto obj_lon_offset = [&]() { @@ -1235,7 +1300,7 @@ MinMaxValue DynamicObstacleAvoidanceModule::calcMinMaxLongitudinalOffsetToAvoid( for (size_t i = 0; i < obj_points.outer().size(); ++i) { const auto geom_obj_point = toGeometryPoint(obj_points.outer().at(i)); const double lon_offset = autoware::motion_utils::calcLongitudinalOffsetToSegment( - ref_path_points_for_obj_poly, obj_seg_idx, geom_obj_point); + ref_points_for_obj_poly, obj_seg_idx, geom_obj_point); obj_lon_offset_vec.push_back(lon_offset); } @@ -1388,22 +1453,21 @@ double DynamicObstacleAvoidanceModule::calcValidLengthToAvoid( // min value denotes near side, max value denotes far side std::optional DynamicObstacleAvoidanceModule::calcMinMaxLateralOffsetToAvoidRegulatedObject( - const std::vector & ref_path_points_for_obj_poly, + const std::vector & ref_points_for_obj_poly, const Polygon2d & obj_points, const geometry_msgs::msg::Point & obj_pos, const double obj_vel, const bool is_collision_left, const double obj_normal_vel, const std::optional & prev_object) const { const bool enable_lowpass_filter = [&]() { if ( - !prev_object || prev_object->ref_path_points_for_obj_poly.size() < 2 || - ref_path_points_for_obj_poly.size() < 2) { + !prev_object || prev_object->ref_points_for_obj_poly.size() < 2 || + ref_points_for_obj_poly.size() < 2) { return true; } const size_t obj_point_idx = - autoware::motion_utils::findNearestIndex(ref_path_points_for_obj_poly, obj_pos); + autoware::motion_utils::findNearestIndex(ref_points_for_obj_poly, obj_pos); const double paths_lat_diff = std::abs(autoware::motion_utils::calcLateralOffset( - prev_object->ref_path_points_for_obj_poly, - ref_path_points_for_obj_poly.at(obj_point_idx).point.pose.position)); + prev_object->ref_points_for_obj_poly, ref_points_for_obj_poly.at(obj_point_idx).position)); constexpr double min_paths_lat_diff = 0.3; if (paths_lat_diff < min_paths_lat_diff) { @@ -1419,10 +1483,10 @@ DynamicObstacleAvoidanceModule::calcMinMaxLateralOffsetToAvoidRegulatedObject( std::vector obj_lat_abs_offset_vec; for (size_t i = 0; i < obj_points.outer().size(); ++i) { const auto geom_obj_point = toGeometryPoint(obj_points.outer().at(i)); - const size_t obj_point_seg_idx = autoware::motion_utils::findNearestSegmentIndex( - ref_path_points_for_obj_poly, geom_obj_point); + const size_t obj_point_seg_idx = + autoware::motion_utils::findNearestSegmentIndex(ref_points_for_obj_poly, geom_obj_point); const double obj_point_lat_offset = autoware::motion_utils::calcLateralOffset( - ref_path_points_for_obj_poly, geom_obj_point, obj_point_seg_idx); + ref_points_for_obj_poly, geom_obj_point, obj_point_seg_idx); obj_lat_abs_offset_vec.push_back(obj_point_lat_offset); } return getMinMaxValues(obj_lat_abs_offset_vec); @@ -1483,21 +1547,28 @@ DynamicObstacleAvoidanceModule::calcMinMaxLateralOffsetToAvoidRegulatedObject( // min value denotes near side, max value denotes far side std::optional DynamicObstacleAvoidanceModule::calcMinMaxLateralOffsetToAvoidUnregulatedObject( - const std::vector & ref_path_points_for_obj_poly, + const std::vector & ref_points_for_obj_poly, const std::optional & prev_object, const DynamicAvoidanceObject & object) const { + universe_utils::ScopedTimeTrack st(__func__, *time_keeper_); + + time_keeper_->start_track("findNearestSegmentIndex of object position"); + const size_t obj_seg_idx = + autoware::motion_utils::findNearestSegmentIndex(ref_points_for_obj_poly, object.pose.position); + time_keeper_->end_track("findNearestSegmentIndex of object position"); + const size_t obj_point_idx = + getNearestIndexFromSegmentIndex(ref_points_for_obj_poly, obj_seg_idx, object.pose.position); + const bool enable_lowpass_filter = [&]() { + universe_utils::ScopedTimeTrack st("calc enable_lowpass_filter", *time_keeper_); if ( - !prev_object || prev_object->ref_path_points_for_obj_poly.size() < 2 || - ref_path_points_for_obj_poly.size() < 2) { + !prev_object || prev_object->ref_points_for_obj_poly.size() < 2 || + ref_points_for_obj_poly.size() < 2) { return true; } - const size_t obj_point_idx = - autoware::motion_utils::findNearestIndex(ref_path_points_for_obj_poly, object.pose.position); const double paths_lat_diff = std::abs(autoware::motion_utils::calcLateralOffset( - prev_object->ref_path_points_for_obj_poly, - ref_path_points_for_obj_poly.at(obj_point_idx).point.pose.position)); + prev_object->ref_points_for_obj_poly, ref_points_for_obj_poly.at(obj_point_idx).position)); constexpr double min_paths_lat_diff = 0.3; if (paths_lat_diff < min_paths_lat_diff) { @@ -1509,15 +1580,33 @@ DynamicObstacleAvoidanceModule::calcMinMaxLateralOffsetToAvoidUnregulatedObject( }(); const auto obj_occupancy_region = [&]() { - const auto obj_points = autoware::universe_utils::toPolygon2d(object.pose, object.shape); + universe_utils::ScopedTimeTrack st("calc obj_occupancy_region", *time_keeper_); std::vector lat_pos_vec; - for (size_t i = 0; i < obj_points.outer().size(); ++i) { - const auto geom_obj_point = toGeometryPoint(obj_points.outer().at(i)); - const double obj_point_lat_offset = autoware::motion_utils::calcLateralOffset( - ref_path_points_for_obj_poly, geom_obj_point, - autoware::motion_utils::findNearestSegmentIndex( - ref_path_points_for_obj_poly, geom_obj_point)); - lat_pos_vec.push_back(obj_point_lat_offset); + if (object.shape.type == autoware_perception_msgs::msg::Shape::CYLINDER) { + // NOTE: efficient calculation for the CYLINDER object. + const double radius = object.shape.dimensions.x / 2.0; + + const double obj_lat_offset = autoware::motion_utils::calcLateralOffset( + ref_points_for_obj_poly, object.pose.position, obj_seg_idx); + const double obj_min_lat_offset = [&]() { + if (std::abs(obj_lat_offset) < radius) { + return 0.0; + } + if (0.0 < obj_lat_offset) { + return obj_lat_offset - radius; + } + return obj_lat_offset + radius; + }(); + lat_pos_vec.push_back(obj_min_lat_offset); + } else { + const auto obj_points = autoware::universe_utils::toPolygon2d(object.pose, object.shape); + for (size_t i = 0; i < obj_points.outer().size(); ++i) { + const auto geom_obj_point = toGeometryPoint(obj_points.outer().at(i)); + const double obj_point_lat_offset = autoware::motion_utils::calcLateralOffset( + ref_points_for_obj_poly, geom_obj_point, + autoware::motion_utils::findNearestSegmentIndex(ref_points_for_obj_poly, geom_obj_point)); + lat_pos_vec.push_back(obj_point_lat_offset); + } } const auto current_pos_area = getMinMaxValues(lat_pos_vec); return combineMinMaxValues(current_pos_area, current_pos_area + object.lat_vel * 3.0); @@ -1574,19 +1663,19 @@ DynamicObstacleAvoidanceModule::calcEgoPathBasedDynamicObstaclePolygon( return std::nullopt; } - auto ref_path_points_for_obj_poly = object.ref_path_points_for_obj_poly; + auto ref_points_for_obj_poly = object.ref_points_for_obj_poly; - const size_t obj_seg_idx = autoware::motion_utils::findNearestSegmentIndex( - ref_path_points_for_obj_poly, object.pose.position); + const size_t obj_seg_idx = + autoware::motion_utils::findNearestSegmentIndex(ref_points_for_obj_poly, object.pose.position); // const auto obj_points = autoware::universe_utils::toPolygon2d(object.pose, object.shape); const auto lon_bound_start_idx_opt = autoware::motion_utils::insertTargetPoint( - obj_seg_idx, object.lon_offset_to_avoid->min_value, ref_path_points_for_obj_poly); + obj_seg_idx, object.lon_offset_to_avoid->min_value, ref_points_for_obj_poly); const size_t updated_obj_seg_idx = (lon_bound_start_idx_opt && lon_bound_start_idx_opt.value() <= obj_seg_idx) ? obj_seg_idx + 1 : obj_seg_idx; const auto lon_bound_end_idx_opt = autoware::motion_utils::insertTargetPoint( - updated_obj_seg_idx, object.lon_offset_to_avoid->max_value, ref_path_points_for_obj_poly); + updated_obj_seg_idx, object.lon_offset_to_avoid->max_value, ref_points_for_obj_poly); if (!lon_bound_start_idx_opt && !lon_bound_end_idx_opt) { // NOTE: The obstacle is longitudinally out of the ego's trajectory. @@ -1596,15 +1685,14 @@ DynamicObstacleAvoidanceModule::calcEgoPathBasedDynamicObstaclePolygon( lon_bound_start_idx_opt ? lon_bound_start_idx_opt.value() : static_cast(0); const size_t lon_bound_end_idx = lon_bound_end_idx_opt ? lon_bound_end_idx_opt.value() - : static_cast(ref_path_points_for_obj_poly.size() - 1); + : static_cast(ref_points_for_obj_poly.size() - 1); // create inner bound points std::vector obj_inner_bound_poses; for (size_t i = lon_bound_start_idx; i <= lon_bound_end_idx; ++i) { // NOTE: object.lat_offset_to_avoid->min_value is not the minimum value but the inner value. obj_inner_bound_poses.push_back(autoware::universe_utils::calcOffsetPose( - ref_path_points_for_obj_poly.at(i).point.pose, 0.0, object.lat_offset_to_avoid->min_value, - 0.0)); + ref_points_for_obj_poly.at(i), 0.0, object.lat_offset_to_avoid->min_value, 0.0)); } // calculate start index laterally feasible for ego to shift considering maximum lateral jerk and @@ -1797,9 +1885,6 @@ DynamicObstacleAvoidanceModule::EgoPathReservePoly DynamicObstacleAvoidanceModule::calcEgoPathReservePoly(const PathWithLaneId & ego_path) const { // This function require almost 0.5 ms. Should be refactored in the future - // double calculation_time; - // stop_watch_.tic(std::string(__func__)); - namespace strategy = boost::geometry::strategy::buffer; assert(!ego_path.points.empty()); @@ -1862,10 +1947,6 @@ DynamicObstacleAvoidanceModule::calcEgoPathReservePoly(const PathWithLaneId & eg strategy::distance_asymmetric(0.0, vehicle_half_width), motion_saturated_outer_paths.left_path); - // calculation_time = stop_watch_.toc(std::string(__func__)); - // RCLCPP_INFO_STREAM_EXPRESSION( - // getLogger(), parameters_->enable_debug_info, __func__ << ":=" << calculation_time << "[ms]"); - return {left_avoid_poly, right_avoid_poly}; } From d8490f7365b53d878cfc7b4e9b363dac2bc0b74b Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Thu, 18 Jul 2024 10:14:21 +0900 Subject: [PATCH 208/306] feat(mrm_handler): input gear command (#8080) * feat(mrm_handler): input gear command Signed-off-by: veqcc * style(pre-commit): autofix * fix minor Signed-off-by: veqcc --------- Signed-off-by: veqcc Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../include/mrm_handler/mrm_handler_core.hpp | 3 +- .../mrm_handler/launch/mrm_handler.launch.xml | 2 ++ .../src/mrm_handler/mrm_handler_core.cpp | 31 +++++++------------ 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/system/mrm_handler/include/mrm_handler/mrm_handler_core.hpp b/system/mrm_handler/include/mrm_handler/mrm_handler_core.hpp index 7d7deb8c4a504..f73d0df4153ce 100644 --- a/system/mrm_handler/include/mrm_handler/mrm_handler_core.hpp +++ b/system/mrm_handler/include/mrm_handler/mrm_handler_core.hpp @@ -86,6 +86,8 @@ class MrmHandler : public rclcpp::Node autoware::universe_utils::InterProcessPollingSubscriber< autoware_adapi_v1_msgs::msg::OperationModeState> sub_operation_mode_state_{this, "~/input/api/operation_mode/state"}; + autoware::universe_utils::InterProcessPollingSubscriber + sub_gear_cmd_{this, "~/input/gear"}; tier4_system_msgs::msg::OperationModeAvailability::ConstSharedPtr operation_mode_availability_; @@ -146,7 +148,6 @@ class MrmHandler : public rclcpp::Node void handleFailedRequest(); autoware_adapi_v1_msgs::msg::MrmState::_behavior_type getCurrentMrmBehavior(); bool isStopped(); - bool isDrivingBackwards(); bool isEmergency() const; bool isControlModeAutonomous(); bool isOperationModeAutonomous(); diff --git a/system/mrm_handler/launch/mrm_handler.launch.xml b/system/mrm_handler/launch/mrm_handler.launch.xml index 7e761157956df..c99b22e10ad77 100644 --- a/system/mrm_handler/launch/mrm_handler.launch.xml +++ b/system/mrm_handler/launch/mrm_handler.launch.xml @@ -7,6 +7,7 @@ + @@ -26,6 +27,7 @@ + diff --git a/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp b/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp index 12497256fce67..0fc0cb29ecf21 100644 --- a/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp +++ b/system/mrm_handler/src/mrm_handler/mrm_handler_core.cpp @@ -131,19 +131,20 @@ void MrmHandler::publishGearCmd() { using autoware_vehicle_msgs::msg::GearCommand; GearCommand msg; - msg.stamp = this->now(); - const auto command = [&]() { - // If stopped and use_parking is not true, send the last gear command - if (isStopped()) - return (param_.use_parking_after_stopped) ? GearCommand::PARK : last_gear_command_; - return (isDrivingBackwards()) ? GearCommand::REVERSE : GearCommand::DRIVE; - }(); - - msg.command = command; - last_gear_command_ = msg.command; + + if (isEmergency()) { + // gear command is created within mrm_handler + msg.command = + (param_.use_parking_after_stopped && isStopped()) ? GearCommand::PARK : last_gear_command_; + } else { + // use the same gear as the input gear + auto gear = sub_gear_cmd_.takeData(); + msg.command = (gear == nullptr) ? last_gear_command_ : gear->command; + last_gear_command_ = msg.command; + } + pub_gear_cmd_->publish(msg); - return; } void MrmHandler::publishMrmState() @@ -525,14 +526,6 @@ bool MrmHandler::isStopped() return (std::abs(odom->twist.twist.linear.x) < th_stopped_velocity); } -bool MrmHandler::isDrivingBackwards() -{ - auto odom = sub_odom_.takeData(); - if (odom == nullptr) return false; - constexpr auto th_moving_backwards = -0.001; - return odom->twist.twist.linear.x < th_moving_backwards; -} - bool MrmHandler::isEmergency() const { return !operation_mode_availability_->autonomous || is_emergency_holding_ || From 8e5a6c12c21473fbe6201ff98c582f565385403e Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:29:35 +0900 Subject: [PATCH 209/306] fix(autoware_pure_pursuit): fix shadowVariable (#7932) * fix:shadowVariable Signed-off-by: kobayu858 * refactor: using range-based for loop Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../src/autoware_pure_pursuit_core/interpolate.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/control/autoware_pure_pursuit/src/autoware_pure_pursuit_core/interpolate.cpp b/control/autoware_pure_pursuit/src/autoware_pure_pursuit_core/interpolate.cpp index 62f5f7a5737c9..3a79b1f01a804 100644 --- a/control/autoware_pure_pursuit/src/autoware_pure_pursuit_core/interpolate.cpp +++ b/control/autoware_pure_pursuit/src/autoware_pure_pursuit_core/interpolate.cpp @@ -229,8 +229,8 @@ bool SplineInterpolate::interpolate( generateSpline(base_value); // interpolate by spline with normalized index - for (int i = 0; i < static_cast(normalized_idx.size()); ++i) { - return_value.push_back(getValue(normalized_idx[i])); + for (const auto & index : normalized_idx) { + return_value.push_back(getValue(index)); } return true; } From a6d85124344486e6c1981becd4e32b9e09ad0a95 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:30:12 +0900 Subject: [PATCH 210/306] fix(autoware_map_based_prediction): fix shadowVariable (#7934) fix:shadowVariable Signed-off-by: kobayu858 --- .../src/map_based_prediction_node.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp index 4f223d5c99bd6..478e8d6f72dd3 100644 --- a/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp +++ b/perception/autoware_map_based_prediction/src/map_based_prediction_node.cpp @@ -1017,7 +1017,6 @@ void MapBasedPredictionNode::objectsCallback(const TrackedObjects::ConstSharedPt std::unordered_set predicted_crosswalk_users_ids; for (const auto & object : in_objects->objects) { - std::string object_id = autoware::universe_utils::toHexString(object.object_id); TrackedObject transformed_object = object; // transform object frame if it's based on map frame From c5400baa4a9e74180e12278d7e7b8becbe97a454 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:30:52 +0900 Subject: [PATCH 211/306] fix(autoware_velocity_smoother): fix shadowVariablefix:shadowVariable (#7950) fix:shadowVariable Signed-off-by: kobayu858 --- .../analytical_jerk_constrained_smoother.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp b/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp index 3906222454d35..3a6bc736c96ab 100644 --- a/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp +++ b/planning/autoware_velocity_smoother/src/smoother/analytical_jerk_constrained_smoother/analytical_jerk_constrained_smoother.cpp @@ -374,14 +374,14 @@ TrajectoryPoints AnalyticalJerkConstrainedSmoother::applyLateralAccelerationFilt for (size_t i = 0; i < output.size(); ++i) { for (const auto & lat_acc_filtered_range : latacc_filtered_ranges) { - const size_t start_index = std::get<0>(lat_acc_filtered_range); - const size_t end_index = std::get<1>(lat_acc_filtered_range); - const double min_latacc_velocity = std::get<2>(lat_acc_filtered_range); + const size_t filtered_start_index = std::get<0>(lat_acc_filtered_range); + const size_t filtered_end_index = std::get<1>(lat_acc_filtered_range); + const double filtered_min_latacc_velocity = std::get<2>(lat_acc_filtered_range); if ( - start_index <= i && i <= end_index && + filtered_start_index <= i && i <= filtered_end_index && smoother_param_.latacc.enable_constant_velocity_while_turning) { - output.at(i).longitudinal_velocity_mps = min_latacc_velocity; + output.at(i).longitudinal_velocity_mps = filtered_min_latacc_velocity; break; } } @@ -415,15 +415,15 @@ bool AnalyticalJerkConstrainedSmoother::searchDecelTargetIndices( } if (!tmp_indices.empty()) { - for (unsigned int i = 0; i < tmp_indices.size() - 1; ++i) { + for (unsigned int j = 0; j < tmp_indices.size() - 1; ++j) { const size_t index_err = 10; if ( - (tmp_indices.at(i + 1).first - tmp_indices.at(i).first < index_err) && - (tmp_indices.at(i + 1).second < tmp_indices.at(i).second)) { + (tmp_indices.at(j + 1).first - tmp_indices.at(j).first < index_err) && + (tmp_indices.at(j + 1).second < tmp_indices.at(j).second)) { continue; } - decel_target_indices.emplace_back(tmp_indices.at(i).first, tmp_indices.at(i).second); + decel_target_indices.emplace_back(tmp_indices.at(j).first, tmp_indices.at(j).second); } } if (!tmp_indices.empty()) { From 2d6d8fd5b1114816481e71bb3ee7bd05c4a41d16 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:43:38 +0900 Subject: [PATCH 212/306] fix(autoware_behavior_path_goal_planner_module): fix shadowVariable (#7962) fix:shadowVariable Signed-off-by: kobayu858 --- .../src/freespace_pull_over.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/freespace_pull_over.cpp b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/freespace_pull_over.cpp index ee35790ee2ab1..1f79f330be676 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/freespace_pull_over.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_goal_planner_module/src/freespace_pull_over.cpp @@ -122,8 +122,8 @@ std::optional FreespacePullOver::plan(const Pose & goal_pose) partial_paths, pairs_terminal_velocity_and_accel, velocity_, 0); // Check if driving forward for each path, return empty if not - for (auto & path : partial_paths) { - if (!autoware::motion_utils::isDrivingForward(path.points)) { + for (auto & partial_path : partial_paths) { + if (!autoware::motion_utils::isDrivingForward(partial_path.points)) { return {}; } } From 3ee038412d3debeb2c250d4da45a6ccb0a646ec6 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:44:49 +0900 Subject: [PATCH 213/306] fix(tensorrt_common): fix constParameterReference (#8037) * fix:constParameterReference Signed-off-by: kobayu858 * fix:constParameterReference Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../tensorrt_common/include/tensorrt_common/simple_profiler.hpp | 2 +- common/tensorrt_common/src/simple_profiler.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/tensorrt_common/include/tensorrt_common/simple_profiler.hpp b/common/tensorrt_common/include/tensorrt_common/simple_profiler.hpp index 31af5fc9657d9..b89950b86ee19 100644 --- a/common/tensorrt_common/include/tensorrt_common/simple_profiler.hpp +++ b/common/tensorrt_common/include/tensorrt_common/simple_profiler.hpp @@ -58,7 +58,7 @@ class SimpleProfiler : public nvinfer1::IProfiler void setProfDict(nvinfer1::ILayer * layer) noexcept; - friend std::ostream & operator<<(std::ostream & out, SimpleProfiler & value); + friend std::ostream & operator<<(std::ostream & out, const SimpleProfiler & value); private: std::string m_name; diff --git a/common/tensorrt_common/src/simple_profiler.cpp b/common/tensorrt_common/src/simple_profiler.cpp index 00aa3220b7714..fbad1b6a40cc3 100644 --- a/common/tensorrt_common/src/simple_profiler.cpp +++ b/common/tensorrt_common/src/simple_profiler.cpp @@ -78,7 +78,7 @@ void SimpleProfiler::setProfDict(nvinfer1::ILayer * layer) noexcept } } -std::ostream & operator<<(std::ostream & out, SimpleProfiler & value) +std::ostream & operator<<(std::ostream & out, const SimpleProfiler & value) { out << "========== " << value.m_name << " profile ==========" << std::endl; float totalTime = 0; From 5b3aef434afabdbdf99a114ff28568e6dfa6aad2 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:45:18 +0900 Subject: [PATCH 214/306] fix(ground_segmentation): fix constParameterReference (#8039) * fix:constParameterReference Signed-off-by: kobayu858 * fix: clang format Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../ground_segmentation/src/ray_ground_filter/node.cpp | 5 +++-- .../ground_segmentation/src/ray_ground_filter/node.hpp | 5 +++-- .../ground_segmentation/src/scan_ground_filter/node.cpp | 6 +++--- .../ground_segmentation/src/scan_ground_filter/node.hpp | 9 ++++++--- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/perception/ground_segmentation/src/ray_ground_filter/node.cpp b/perception/ground_segmentation/src/ray_ground_filter/node.cpp index c75972d3c4f14..f07db15615739 100644 --- a/perception/ground_segmentation/src/ray_ground_filter/node.cpp +++ b/perception/ground_segmentation/src/ray_ground_filter/node.cpp @@ -259,7 +259,8 @@ void RayGroundFilterComponent::ClassifyPointCloud( // } void RayGroundFilterComponent::initializePointCloud2( - const PointCloud2::ConstSharedPtr & in_cloud_ptr, PointCloud2::SharedPtr & out_cloud_msg_ptr) + const PointCloud2::ConstSharedPtr & in_cloud_ptr, + const PointCloud2::SharedPtr & out_cloud_msg_ptr) { out_cloud_msg_ptr->header = in_cloud_ptr->header; out_cloud_msg_ptr->height = in_cloud_ptr->height; @@ -271,7 +272,7 @@ void RayGroundFilterComponent::initializePointCloud2( } void RayGroundFilterComponent::ExtractPointsIndices( - const PointCloud2::ConstSharedPtr in_cloud_ptr, pcl::PointIndices & in_indices, + const PointCloud2::ConstSharedPtr in_cloud_ptr, const pcl::PointIndices & in_indices, PointCloud2::SharedPtr ground_cloud_msg_ptr, PointCloud2::SharedPtr no_ground_cloud_msg_ptr) { initializePointCloud2(in_cloud_ptr, ground_cloud_msg_ptr); diff --git a/perception/ground_segmentation/src/ray_ground_filter/node.hpp b/perception/ground_segmentation/src/ray_ground_filter/node.hpp index 8bb17cdaf8a09..d3be2e60c4262 100644 --- a/perception/ground_segmentation/src/ray_ground_filter/node.hpp +++ b/perception/ground_segmentation/src/ray_ground_filter/node.hpp @@ -185,7 +185,7 @@ class RayGroundFilterComponent : public pointcloud_preprocessor::Filter * @param out_removed_indices_cloud_ptr Resulting PointCloud with the indices removed */ void ExtractPointsIndices( - const PointCloud2::ConstSharedPtr in_cloud_ptr, pcl::PointIndices & in_indices, + const PointCloud2::ConstSharedPtr in_cloud_ptr, const pcl::PointIndices & in_indices, PointCloud2::SharedPtr out_only_indices_cloud_ptr, PointCloud2::SharedPtr out_removed_indices_cloud_ptr); @@ -194,7 +194,8 @@ class RayGroundFilterComponent : public pointcloud_preprocessor::Filter void setVehicleFootprint( const double min_x, const double max_x, const double min_y, const double max_y); void initializePointCloud2( - const PointCloud2::ConstSharedPtr & in_cloud_ptr, PointCloud2::SharedPtr & out_cloud_msg_ptr); + const PointCloud2::ConstSharedPtr & in_cloud_ptr, + const PointCloud2::SharedPtr & out_cloud_msg_ptr); /** \brief Parameter service callback result : needed to be hold */ OnSetParametersCallbackHandle::SharedPtr set_param_res_; diff --git a/perception/ground_segmentation/src/scan_ground_filter/node.cpp b/perception/ground_segmentation/src/scan_ground_filter/node.cpp index dd867c3cfba0e..01116c5bdce5f 100644 --- a/perception/ground_segmentation/src/scan_ground_filter/node.cpp +++ b/perception/ground_segmentation/src/scan_ground_filter/node.cpp @@ -245,7 +245,7 @@ void ScanGroundFilterComponent::initializeFirstGndGrids( } void ScanGroundFilterComponent::checkContinuousGndGrid( - PointData & p, pcl::PointXYZ & p_orig_point, const std::vector & gnd_grids_list) + PointData & p, const pcl::PointXYZ & p_orig_point, const std::vector & gnd_grids_list) { float next_gnd_z = 0.0f; float curr_gnd_slope_ratio = 0.0f; @@ -287,7 +287,7 @@ void ScanGroundFilterComponent::checkContinuousGndGrid( } void ScanGroundFilterComponent::checkDiscontinuousGndGrid( - PointData & p, pcl::PointXYZ & p_orig_point, const std::vector & gnd_grids_list) + PointData & p, const pcl::PointXYZ & p_orig_point, const std::vector & gnd_grids_list) { float tmp_delta_max_z = p_orig_point.z - gnd_grids_list.back().max_height; float tmp_delta_avg_z = p_orig_point.z - gnd_grids_list.back().avg_height; @@ -305,7 +305,7 @@ void ScanGroundFilterComponent::checkDiscontinuousGndGrid( } void ScanGroundFilterComponent::checkBreakGndGrid( - PointData & p, pcl::PointXYZ & p_orig_point, const std::vector & gnd_grids_list) + PointData & p, const pcl::PointXYZ & p_orig_point, const std::vector & gnd_grids_list) { float tmp_delta_avg_z = p_orig_point.z - gnd_grids_list.back().avg_height; float tmp_delta_radius = p.radius - gnd_grids_list.back().radius; diff --git a/perception/ground_segmentation/src/scan_ground_filter/node.hpp b/perception/ground_segmentation/src/scan_ground_filter/node.hpp index 6de1d1b7ad09f..67a844eee75c5 100644 --- a/perception/ground_segmentation/src/scan_ground_filter/node.hpp +++ b/perception/ground_segmentation/src/scan_ground_filter/node.hpp @@ -240,11 +240,14 @@ class ScanGroundFilterComponent : public pointcloud_preprocessor::Filter const float h, const float r, const uint16_t id, std::vector & gnd_grids); void checkContinuousGndGrid( - PointData & p, pcl::PointXYZ & p_orig_point, const std::vector & gnd_grids_list); + PointData & p, const pcl::PointXYZ & p_orig_point, + const std::vector & gnd_grids_list); void checkDiscontinuousGndGrid( - PointData & p, pcl::PointXYZ & p_orig_point, const std::vector & gnd_grids_list); + PointData & p, const pcl::PointXYZ & p_orig_point, + const std::vector & gnd_grids_list); void checkBreakGndGrid( - PointData & p, pcl::PointXYZ & p_orig_point, const std::vector & gnd_grids_list); + PointData & p, const pcl::PointXYZ & p_orig_point, + const std::vector & gnd_grids_list); void classifyPointCloud( const PointCloud2ConstPtr & in_cloud_ptr, std::vector & in_radial_ordered_clouds, From 2339398dd4e4b97c79e1ee59aa6b7147b66157fd Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:46:58 +0900 Subject: [PATCH 215/306] fix(detected_object_validation): fix funcArgNamesDifferent (#8078) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp index 54129ff7fedf7..801a693905f93 100644 --- a/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp +++ b/perception/detected_object_validation/src/obstacle_pointcloud/obstacle_pointcloud_validator.hpp @@ -107,7 +107,7 @@ class Validator2D : public Validator const autoware_perception_msgs::msg::DetectedObject & object) override; std::optional getPointCloudWithinObject( const autoware_perception_msgs::msg::DetectedObject & object, - const pcl::PointCloud::Ptr neighbor_pointcloud); + const pcl::PointCloud::Ptr pointcloud); }; class Validator3D : public Validator { From b4e7c5386aeea1e36eb3c08612c2e192823be734 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Thu, 18 Jul 2024 10:48:19 +0900 Subject: [PATCH 216/306] fix(compare_map_segmentation): fix funcArgNamesDifferent (#8077) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../src/voxel_grid_map_loader/voxel_grid_map_loader.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.hpp b/perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.hpp index bc54519a95e47..b13f2e537ee55 100644 --- a/perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.hpp +++ b/perception/compare_map_segmentation/src/voxel_grid_map_loader/voxel_grid_map_loader.hpp @@ -196,7 +196,7 @@ class VoxelGridDynamicMapLoader : public VoxelGridMapLoader rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, std::string * tf_map_input_frame, std::mutex * mutex, rclcpp::CallbackGroup::SharedPtr main_callback_group); - void onEstimatedPoseCallback(nav_msgs::msg::Odometry::ConstSharedPtr pose); + void onEstimatedPoseCallback(nav_msgs::msg::Odometry::ConstSharedPtr msg); void timer_callback(); bool should_update_map() const; From b4484781503209866cfe28ee12b2e84288cd9ab1 Mon Sep 17 00:00:00 2001 From: RyuYamamoto Date: Thu, 18 Jul 2024 11:17:02 +0900 Subject: [PATCH 217/306] refactor(localization_util): move diagnostics_module (#8035) refactor(localization_util): move diagnostics_module from ndt_scan_matcher to localization_util --- localization/localization_util/CMakeLists.txt | 1 + .../include/localization_util}/diagnostics_module.hpp | 6 +++--- .../src/diagnostics_module.cpp | 2 +- localization/ndt_scan_matcher/CMakeLists.txt | 1 - .../include/ndt_scan_matcher/map_update_module.hpp | 2 +- .../include/ndt_scan_matcher/ndt_scan_matcher_core.hpp | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) rename localization/{ndt_scan_matcher/include/ndt_scan_matcher => localization_util/include/localization_util}/diagnostics_module.hpp (92%) rename localization/{ndt_scan_matcher => localization_util}/src/diagnostics_module.cpp (98%) diff --git a/localization/localization_util/CMakeLists.txt b/localization/localization_util/CMakeLists.txt index ebf2b6dc10878..2e4d4b321ec54 100644 --- a/localization/localization_util/CMakeLists.txt +++ b/localization/localization_util/CMakeLists.txt @@ -6,6 +6,7 @@ autoware_package() ament_auto_add_library(localization_util SHARED src/util_func.cpp + src/diagnostics_module.cpp src/smart_pose_buffer.cpp src/tree_structured_parzen_estimator.cpp src/covariance_ellipse.cpp diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp b/localization/localization_util/include/localization_util/diagnostics_module.hpp similarity index 92% rename from localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp rename to localization/localization_util/include/localization_util/diagnostics_module.hpp index 6dfea386abaf8..0ec52cfe814af 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/diagnostics_module.hpp +++ b/localization/localization_util/include/localization_util/diagnostics_module.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef NDT_SCAN_MATCHER__DIAGNOSTICS_MODULE_HPP_ -#define NDT_SCAN_MATCHER__DIAGNOSTICS_MODULE_HPP_ +#ifndef LOCALIZATION_UTIL__DIAGNOSTICS_MODULE_HPP_ +#define LOCALIZATION_UTIL__DIAGNOSTICS_MODULE_HPP_ #include @@ -57,4 +57,4 @@ void DiagnosticsModule::add_key_value(const std::string & key, const std::string template <> void DiagnosticsModule::add_key_value(const std::string & key, const bool & value); -#endif // NDT_SCAN_MATCHER__DIAGNOSTICS_MODULE_HPP_ +#endif // LOCALIZATION_UTIL__DIAGNOSTICS_MODULE_HPP_ diff --git a/localization/ndt_scan_matcher/src/diagnostics_module.cpp b/localization/localization_util/src/diagnostics_module.cpp similarity index 98% rename from localization/ndt_scan_matcher/src/diagnostics_module.cpp rename to localization/localization_util/src/diagnostics_module.cpp index 805ee676c5e04..fb9e122a71e24 100644 --- a/localization/ndt_scan_matcher/src/diagnostics_module.cpp +++ b/localization/localization_util/src/diagnostics_module.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "ndt_scan_matcher/diagnostics_module.hpp" +#include "localization_util/diagnostics_module.hpp" #include diff --git a/localization/ndt_scan_matcher/CMakeLists.txt b/localization/ndt_scan_matcher/CMakeLists.txt index 5e4db9571c404..c2ede4da2f543 100644 --- a/localization/ndt_scan_matcher/CMakeLists.txt +++ b/localization/ndt_scan_matcher/CMakeLists.txt @@ -26,7 +26,6 @@ find_package(PCL REQUIRED COMPONENTS common io registration) include_directories(${PCL_INCLUDE_DIRS}) ament_auto_add_library(${PROJECT_NAME} SHARED - src/diagnostics_module.cpp src/map_update_module.cpp src/ndt_scan_matcher_core.cpp src/particle.cpp diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/map_update_module.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/map_update_module.hpp index e09ff5c782e7d..ddc5e32f782f7 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/map_update_module.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/map_update_module.hpp @@ -15,8 +15,8 @@ #ifndef NDT_SCAN_MATCHER__MAP_UPDATE_MODULE_HPP_ #define NDT_SCAN_MATCHER__MAP_UPDATE_MODULE_HPP_ +#include "localization_util/diagnostics_module.hpp" #include "localization_util/util_func.hpp" -#include "ndt_scan_matcher/diagnostics_module.hpp" #include "ndt_scan_matcher/hyper_parameters.hpp" #include "ndt_scan_matcher/particle.hpp" diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp index 119c3534cab16..92df806605357 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/ndt_scan_matcher_core.hpp @@ -17,8 +17,8 @@ #define FMT_HEADER_ONLY +#include "localization_util/diagnostics_module.hpp" #include "localization_util/smart_pose_buffer.hpp" -#include "ndt_scan_matcher/diagnostics_module.hpp" #include "ndt_scan_matcher/hyper_parameters.hpp" #include "ndt_scan_matcher/map_update_module.hpp" From 7cc17dff076b8b925e7a011586ac2187c63013dd Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Thu, 18 Jul 2024 11:19:14 +0900 Subject: [PATCH 218/306] feat(control_validator)!: add velocity check (#7806) * add velocity check --------- Signed-off-by: Yuki Takagi --- control/autoware_control_validator/README.md | 17 +++++--- .../config/control_validator.param.yaml | 3 +- .../control_validator/control_validator.hpp | 12 +++++- .../msg/ControlValidatorStatus.msg | 3 ++ .../src/control_validator.cpp | 41 +++++++++++++++++-- 5 files changed, 65 insertions(+), 11 deletions(-) diff --git a/control/autoware_control_validator/README.md b/control/autoware_control_validator/README.md index 9c4a9be0732a5..850eefb706c9a 100644 --- a/control/autoware_control_validator/README.md +++ b/control/autoware_control_validator/README.md @@ -6,14 +6,17 @@ The `control_validator` is a module that checks the validity of the output of th ## Supported features -The following features are supported for the validation and can have thresholds set by parameters: +The following features are supported for the validation and can have thresholds set by parameters. +The listed features below does not always correspond to the latest implementation. +| Description | Arguments | Diagnostic equation | Implemented function name | +| ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | :--------------------------------: | ------------------------------- | +| Inverse velocity: Measured velocity has a different sign from the target velocity. | measured velocity $v$, target velocity $\hat{v}$, and threshold velocity parameter $k$ | $v\hat{v}<0,~\|v\|>k $ | `checkValidVelocityDeviation()` | +| Overspeed: Measured speed exceeds target speed significantly. | measured velocity $v$, target velocity $\hat{v}$, and threshold ratio parameter $r$ | $\| v \| > (1 + r) \| \hat{v} \| $ | `checkValidVelocityDeviation()` | - **Deviation check between reference trajectory and predicted trajectory** : invalid when the largest deviation between the predicted trajectory and reference trajectory is greater than the given threshold. ![trajectory_deviation](./image/trajectory_deviation.drawio.svg) -Other features are to be implemented. - ## Inputs/Outputs ### Inputs @@ -53,6 +56,8 @@ The following parameters can be set for the `control_validator`: The input trajectory is detected as invalid if the index exceeds the following thresholds. -| Name | Type | Description | Default value | -| :---------------------------------- | :----- | :---------------------------------------------------------------------------------------------------------- | :------------ | -| `thresholds.max_distance_deviation` | double | invalid threshold of the max distance deviation between the predicted path and the reference trajectory [m] | 1.0 | +| Name | Type | Description | Default value | +| :----------------------------------- | :----- | :---------------------------------------------------------------------------------------------------------- | :------------ | +| `thresholds.max_distance_deviation` | double | invalid threshold of the max distance deviation between the predicted path and the reference trajectory [m] | 1.0 | +| `thresholds.max_reverse_velocity` | double | threshold velocity to valid the vehicle velocity [m/s] | WIP | +| `thresholds.max_over_velocity_ratio` | double | threshold ratio to valid the vehicle velocity [*] | WIP | diff --git a/control/autoware_control_validator/config/control_validator.param.yaml b/control/autoware_control_validator/config/control_validator.param.yaml index 12709b18b7932..fdac1d15b58b2 100644 --- a/control/autoware_control_validator/config/control_validator.param.yaml +++ b/control/autoware_control_validator/config/control_validator.param.yaml @@ -1,6 +1,5 @@ /**: ros__parameters: - # If the number of consecutive invalid trajectory exceeds this threshold, the Diag will be set to ERROR. # (For example, threshold = 1 means, even if the trajectory is invalid, Diag will not be ERROR if # the next trajectory is valid.) @@ -10,3 +9,5 @@ thresholds: max_distance_deviation: 1.0 + max_reverse_velocity: 0.2 + max_over_velocity_ratio: 0.1 diff --git a/control/autoware_control_validator/include/autoware/control_validator/control_validator.hpp b/control/autoware_control_validator/include/autoware/control_validator/control_validator.hpp index ecb46aee123e3..515f1c4cec339 100644 --- a/control/autoware_control_validator/include/autoware/control_validator/control_validator.hpp +++ b/control/autoware_control_validator/include/autoware/control_validator/control_validator.hpp @@ -42,6 +42,8 @@ using nav_msgs::msg::Odometry; struct ValidationParams { double max_distance_deviation_threshold; + double max_reverse_velocity_threshold; + double max_over_velocity_ratio_threshold; }; class ControlValidator : public rclcpp::Node @@ -52,6 +54,8 @@ class ControlValidator : public rclcpp::Node void onPredictedTrajectory(const Trajectory::ConstSharedPtr msg); bool checkValidMaxDistanceDeviation(const Trajectory & predicted_trajectory); + bool checkValidVelocityDeviation( + const Trajectory & reference_trajectory, const Odometry & kinematics); private: void setupDiag(); @@ -60,7 +64,9 @@ class ControlValidator : public rclcpp::Node bool isDataReady(); - void validate(const Trajectory & trajectory); + void validate( + const Trajectory & predicted_trajectory, const Trajectory & reference_trajectory, + const Odometry & kinematics); void publishPredictedTrajectory(); void publishDebugInfo(); @@ -85,6 +91,10 @@ class ControlValidator : public rclcpp::Node ControlValidatorStatus validation_status_; ValidationParams validation_params_; // for thresholds + // ego nearest index search + double ego_nearest_dist_threshold_; + double ego_nearest_yaw_threshold_; + autoware::vehicle_info_utils::VehicleInfo vehicle_info_; bool isAllValid(const ControlValidatorStatus & status); diff --git a/control/autoware_control_validator/msg/ControlValidatorStatus.msg b/control/autoware_control_validator/msg/ControlValidatorStatus.msg index 242bede4ece89..c7dbdbb048e4e 100644 --- a/control/autoware_control_validator/msg/ControlValidatorStatus.msg +++ b/control/autoware_control_validator/msg/ControlValidatorStatus.msg @@ -2,8 +2,11 @@ builtin_interfaces/Time stamp # states bool is_valid_max_distance_deviation +bool is_valid_velocity_deviation # values float64 max_distance_deviation +float64 desired_velocity +float64 current_velocity int64 invalid_count diff --git a/control/autoware_control_validator/src/control_validator.cpp b/control/autoware_control_validator/src/control_validator.cpp index 4c8ca3c831824..d2106daf19f81 100644 --- a/control/autoware_control_validator/src/control_validator.cpp +++ b/control/autoware_control_validator/src/control_validator.cpp @@ -15,6 +15,8 @@ #include "autoware/control_validator/control_validator.hpp" #include "autoware/control_validator/utils.hpp" +#include "autoware/motion_utils/trajectory/interpolation.hpp" +#include "autoware/motion_utils/trajectory/trajectory.hpp" #include #include @@ -51,6 +53,8 @@ void ControlValidator::setupParameters() auto & p = validation_params_; const std::string t = "thresholds."; p.max_distance_deviation_threshold = declare_parameter(t + "max_distance_deviation"); + p.max_reverse_velocity_threshold = declare_parameter(t + "reverse_velocity"); + p.max_over_velocity_ratio_threshold = declare_parameter(t + "over_velocity_ratio"); } try { @@ -88,6 +92,11 @@ void ControlValidator::setupDiag() stat, validation_status_.is_valid_max_distance_deviation, "control output is deviated from trajectory"); }); + d.add(ns + "velocity_deviation", [&](auto & stat) { + setStatus( + stat, validation_status_.is_valid_velocity_deviation, + "current velocity is deviated from the desired velocity"); + }); } bool ControlValidator::isDataReady() @@ -119,7 +128,7 @@ void ControlValidator::onPredictedTrajectory(const Trajectory::ConstSharedPtr ms debug_pose_publisher_->clearMarkers(); - validate(*current_predicted_trajectory_); + validate(*current_predicted_trajectory_, *current_reference_trajectory_, *current_kinematics_); diag_updater_.force_update(); @@ -142,7 +151,9 @@ void ControlValidator::publishDebugInfo() debug_pose_publisher_->publish(); } -void ControlValidator::validate(const Trajectory & predicted_trajectory) +void ControlValidator::validate( + const Trajectory & predicted_trajectory, const Trajectory & reference_trajectory, + const Odometry & kinematics) { if (predicted_trajectory.points.size() < 2) { RCLCPP_ERROR_THROTTLE( @@ -154,6 +165,7 @@ void ControlValidator::validate(const Trajectory & predicted_trajectory) auto & s = validation_status_; s.is_valid_max_distance_deviation = checkValidMaxDistanceDeviation(predicted_trajectory); + s.is_valid_velocity_deviation = checkValidVelocityDeviation(reference_trajectory, kinematics); s.invalid_count = isAllValid(s) ? 0 : s.invalid_count + 1; } @@ -170,9 +182,32 @@ bool ControlValidator::checkValidMaxDistanceDeviation(const Trajectory & predict return true; } +bool ControlValidator::checkValidVelocityDeviation( + const Trajectory & reference_trajectory, const Odometry & kinematics) +{ + const double current_vel = kinematics.twist.twist.linear.x; + if (reference_trajectory.points.size() < 2) return true; + const double desired_vel = + autoware::motion_utils::calcInterpolatedPoint(reference_trajectory, kinematics.pose.pose) + .longitudinal_velocity_mps; + + validation_status_.current_velocity = current_vel; + validation_status_.desired_velocity = desired_vel; + + const bool is_over_velocity = + std::abs(current_vel) > + std::abs(desired_vel) * (1.0 + validation_params_.max_over_velocity_ratio_threshold) + + validation_params_.max_reverse_velocity_threshold; + const bool is_reverse_velocity = + std::signbit(current_vel * desired_vel) && + std::abs(current_vel) > validation_params_.max_reverse_velocity_threshold; + + return !(is_over_velocity || is_reverse_velocity); +} + bool ControlValidator::isAllValid(const ControlValidatorStatus & s) { - return s.is_valid_max_distance_deviation; + return s.is_valid_max_distance_deviation && s.is_valid_velocity_deviation; } void ControlValidator::displayStatus() From d646492c84185ca9331ac0c941097b001af10c20 Mon Sep 17 00:00:00 2001 From: Takayuki Murooka Date: Thu, 18 Jul 2024 11:32:43 +0900 Subject: [PATCH 219/306] refactor(crosswalk): clean up the structure and create a brief flowchart (#7868) * refactor(crosswalk): clean up the structure and create a brief flowchart Signed-off-by: Takayuki Murooka * update Signed-off-by: Takayuki Murooka * fix Signed-off-by: Takayuki Murooka * static stop pose -> default stop pose Signed-off-by: Takayuki Murooka --------- Signed-off-by: Takayuki Murooka --- .../README.md | 35 +++ .../util.hpp | 7 +- .../src/scene_crosswalk.cpp | 251 +++++++++--------- .../src/scene_crosswalk.hpp | 33 ++- .../src/util.cpp | 43 +-- .../src/scene_walkway.cpp | 42 ++- .../src/scene_walkway.hpp | 4 +- 7 files changed, 234 insertions(+), 181 deletions(-) diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md index 60601299daf8b..3cf62b92bb659 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/README.md @@ -8,6 +8,41 @@ This module judges whether the ego should stop in front of the crosswalk in orde ![crosswalk_module](docs/crosswalk_module.svg){width=1100} +## Flowchart + +```plantuml +@startuml +skinparam monochrome true + +title modifyPathVelocity +start +:getPathEndPointsOnCrosswalk; +group apply slow down + :applySlowDownByLanleet2Map; + :applySlowDownByOcclusion; +end group +group calculate stop pose + :getDefaultStopPose; + :resamplePath; + :checkStopForCrosswalkUsers; + :checkStopForStuckVehicles; +end group +group apply stop + :getNearestStopFactor; + :setSafe; + :setDistanceToStop; + + if (isActivated() is True?) then (yes) + :planGo; + else (no) + :planStop; + endif +end group + +stop +@enduml +``` + ## Features ### Yield the Way to the Pedestrians diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/include/autoware/behavior_velocity_crosswalk_module/util.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/include/autoware/behavior_velocity_crosswalk_module/util.hpp index bcf31eadcc35f..260ba58fd7d93 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/include/autoware/behavior_velocity_crosswalk_module/util.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/include/autoware/behavior_velocity_crosswalk_module/util.hpp @@ -97,13 +97,14 @@ std::set getCrosswalkIdSetOnPath( bool checkRegulatoryElementExistence(const lanelet::LaneletMapPtr & lanelet_map_ptr); -std::vector getPolygonIntersects( +std::optional> +getPathEndPointsOnCrosswalk( const PathWithLaneId & ego_path, const lanelet::BasicPolygon2d & polygon, - const geometry_msgs::msg::Point & ego_pos, const size_t max_num); + const geometry_msgs::msg::Point & ego_pos); std::vector getLinestringIntersects( const PathWithLaneId & ego_path, const lanelet::BasicLineString2d & linestring, - const geometry_msgs::msg::Point & ego_pos, const size_t max_num); + const geometry_msgs::msg::Point & ego_pos); std::optional getStopLineFromMap( const lanelet::Id lane_id, const lanelet::LaneletMapPtr & lanelet_map_ptr, diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp index 1e6658987f522..4308ce5d054ff 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.cpp @@ -114,18 +114,20 @@ void sortCrosswalksByDistance( lanelet::ConstLanelets & crosswalks) { const auto compare = [&](const lanelet::ConstLanelet & l1, const lanelet::ConstLanelet & l2) { - const auto l1_intersects = - getPolygonIntersects(ego_path, l1.polygon2d().basicPolygon(), ego_pos, 2); - const auto l2_intersects = - getPolygonIntersects(ego_path, l2.polygon2d().basicPolygon(), ego_pos, 2); + const auto l1_end_points_on_crosswalk = + getPathEndPointsOnCrosswalk(ego_path, l1.polygon2d().basicPolygon(), ego_pos); + const auto l2_end_points_on_crosswalk = + getPathEndPointsOnCrosswalk(ego_path, l2.polygon2d().basicPolygon(), ego_pos); - if (l1_intersects.empty() || l2_intersects.empty()) { + if (!l1_end_points_on_crosswalk || !l2_end_points_on_crosswalk) { return true; } - const auto dist_l1 = calcSignedArcLength(ego_path.points, size_t(0), l1_intersects.front()); + const auto dist_l1 = + calcSignedArcLength(ego_path.points, size_t(0), l1_end_points_on_crosswalk->first); - const auto dist_l2 = calcSignedArcLength(ego_path.points, size_t(0), l2_intersects.front()); + const auto dist_l2 = + calcSignedArcLength(ego_path.points, size_t(0), l2_end_points_on_crosswalk->first); return dist_l1 < dist_l2; }; @@ -225,67 +227,23 @@ bool CrosswalkModule::modifyPathVelocity(PathWithLaneId * path, StopReason * sto recordTime(1); // Calculate intersection between path and crosswalks - const auto path_intersects = - getPolygonIntersects(*path, crosswalk_.polygon2d().basicPolygon(), ego_pos, 2); + const auto path_end_points_on_crosswalk = + getPathEndPointsOnCrosswalk(*path, crosswalk_.polygon2d().basicPolygon(), ego_pos); + if (!path_end_points_on_crosswalk) { + return {}; + } + const auto & first_path_point_on_crosswalk = path_end_points_on_crosswalk->first; + const auto & last_path_point_on_crosswalk = path_end_points_on_crosswalk->second; // Apply safety slow down speed if defined in Lanelet2 map - if (crosswalk_.hasAttribute("safety_slow_down_speed")) { - applySafetySlowDownSpeed( - *path, path_intersects, - static_cast(crosswalk_.attribute("safety_slow_down_speed").asDouble().get())); - } - // Apply safety slow down speed if the crosswalk is occluded - const auto now = clock_->now(); - const auto cmp_with_time_buffer = [&](const auto & t, const auto cmp_fn) { - return t && cmp_fn((now - *t).seconds(), planner_param_.occlusion_time_buffer); - }; - const auto crosswalk_has_traffic_light = - !crosswalk_.regulatoryElementsAs().empty(); - const auto is_crosswalk_ignored = - (planner_param_.occlusion_ignore_with_traffic_light && crosswalk_has_traffic_light) || - crosswalk_.hasAttribute("skip_occluded_slowdown"); - if (planner_param_.occlusion_enable && !path_intersects.empty() && !is_crosswalk_ignored) { - const auto dist_ego_to_crosswalk = - calcSignedArcLength(path->points, ego_pos, path_intersects.front()); - const auto detection_range = - planner_data_->vehicle_info_.max_lateral_offset_m + - calculate_detection_range( - planner_param_.occlusion_occluded_object_velocity, dist_ego_to_crosswalk, - planner_data_->current_velocity->twist.linear.x); - const auto is_ego_on_the_crosswalk = - dist_ego_to_crosswalk <= planner_data_->vehicle_info_.max_longitudinal_offset_m; - if (!is_ego_on_the_crosswalk) { - if (is_crosswalk_occluded( - crosswalk_, *planner_data_->occupancy_grid, path_intersects.front(), detection_range, - objects_ptr->objects, planner_param_)) { - if (!current_initial_occlusion_time_) current_initial_occlusion_time_ = now; - if (cmp_with_time_buffer(current_initial_occlusion_time_, std::greater_equal{})) - most_recent_occlusion_time_ = now; - } else if (!cmp_with_time_buffer(most_recent_occlusion_time_, std::greater{})) { - current_initial_occlusion_time_.reset(); - } + applySlowDownByLanelet2Map(*path, first_path_point_on_crosswalk, last_path_point_on_crosswalk); - if (cmp_with_time_buffer(most_recent_occlusion_time_, std::less_equal{})) { - const auto target_velocity = calcTargetVelocity(path_intersects.front(), *path); - applySafetySlowDownSpeed( - *path, path_intersects, - std::max(target_velocity, planner_param_.occlusion_slow_down_velocity)); - debug_data_.virtual_wall_suffix = " (occluded)"; - } else { - most_recent_occlusion_time_.reset(); - } - } - } + // Apply safety slow down speed if the crosswalk is occluded + applySlowDownByOcclusion(*path, first_path_point_on_crosswalk, last_path_point_on_crosswalk); recordTime(2); // Calculate stop point with margin - const auto p_stop_line = getStopPointWithMargin(*path, path_intersects); - - std::optional default_stop_pose = std::nullopt; - if (p_stop_line.has_value()) { - default_stop_pose = - calcLongitudinalOffsetPose(path->points, p_stop_line->first, p_stop_line->second); - } + const auto default_stop_pose = getDefaultStopPose(*path, first_path_point_on_crosswalk); // Resample path sparsely for less computation cost constexpr double resample_interval = 4.0; @@ -294,11 +252,13 @@ bool CrosswalkModule::modifyPathVelocity(PathWithLaneId * path, StopReason * sto // Decide to stop for crosswalk users const auto stop_factor_for_crosswalk_users = checkStopForCrosswalkUsers( - *path, sparse_resample_path, p_stop_line, path_intersects, default_stop_pose); + *path, sparse_resample_path, first_path_point_on_crosswalk, last_path_point_on_crosswalk, + default_stop_pose); // Decide to stop for stuck vehicle const auto stop_factor_for_stuck_vehicles = checkStopForStuckVehicles( - sparse_resample_path, objects_ptr->objects, path_intersects, default_stop_pose); + sparse_resample_path, objects_ptr->objects, first_path_point_on_crosswalk, + last_path_point_on_crosswalk, default_stop_pose); // Get nearest stop factor const auto nearest_stop_factor = @@ -328,35 +288,32 @@ bool CrosswalkModule::modifyPathVelocity(PathWithLaneId * path, StopReason * sto } // NOTE: The stop point will be the returned point with the margin. -std::optional> CrosswalkModule::getStopPointWithMargin( +std::optional CrosswalkModule::getDefaultStopPose( const PathWithLaneId & ego_path, - const std::vector & path_intersects) const + const geometry_msgs::msg::Point & first_path_point_on_crosswalk) const { const auto & ego_pos = planner_data_->current_odometry->pose.position; const auto & base_link2front = planner_data_->vehicle_info_.max_longitudinal_offset_m; // If stop lines are found in the LL2 map. for (const auto & stop_line : stop_lines_) { - const auto p_stop_lines = getLinestringIntersects( - ego_path, lanelet::utils::to2D(stop_line).basicLineString(), ego_pos, 2); + const auto p_stop_lines = + getLinestringIntersects(ego_path, lanelet::utils::to2D(stop_line).basicLineString(), ego_pos); if (!p_stop_lines.empty()) { - return std::make_pair(p_stop_lines.front(), -base_link2front); + return calcLongitudinalOffsetPose(ego_path.points, p_stop_lines.front(), -base_link2front); } } // If stop lines are not found in the LL2 map. - if (!path_intersects.empty()) { - return std::make_pair( - path_intersects.front(), -planner_param_.stop_distance_from_crosswalk - base_link2front); - } - - return {}; + return calcLongitudinalOffsetPose( + ego_path.points, first_path_point_on_crosswalk, + -planner_param_.stop_distance_from_crosswalk - base_link2front); } std::optional CrosswalkModule::checkStopForCrosswalkUsers( const PathWithLaneId & ego_path, const PathWithLaneId & sparse_resample_path, - const std::optional> & p_stop_line, - const std::vector & path_intersects, + const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk, const std::optional & default_stop_pose) { const auto & ego_pos = planner_data_->current_odometry->pose.position; @@ -367,10 +324,11 @@ std::optional CrosswalkModule::checkStopForCrosswalkUsers( findEgoPassageDirectionAlongPath(sparse_resample_path); const auto base_link2front = planner_data_->vehicle_info_.max_longitudinal_offset_m; const auto dist_ego_to_stop = - calcSignedArcLength(ego_path.points, ego_pos, p_stop_line->first) + p_stop_line->second; + calcSignedArcLength(ego_path.points, ego_pos, default_stop_pose->position); // Calculate attention range for crosswalk - const auto crosswalk_attention_range = getAttentionRange(sparse_resample_path, path_intersects); + const auto crosswalk_attention_range = getAttentionRange( + sparse_resample_path, first_path_point_on_crosswalk, last_path_point_on_crosswalk); // Get attention area, which is ego's footprints on the crosswalk const auto attention_area = getAttentionArea(sparse_resample_path, crosswalk_attention_range); @@ -381,19 +339,15 @@ std::optional CrosswalkModule::checkStopForCrosswalkUsers( // Check if ego moves forward enough to ignore yield. const auto & p = planner_param_; - if (!path_intersects.empty()) { - const double dist_ego2crosswalk = - calcSignedArcLength(ego_path.points, ego_pos, path_intersects.front()); - const auto braking_distance_opt = - autoware::motion_utils::calcDecelDistWithJerkAndAccConstraints( - ego_vel, 0.0, ego_acc, p.min_acc_for_no_stop_decision, p.max_jerk_for_no_stop_decision, - p.min_jerk_for_no_stop_decision); - const double braking_distance = braking_distance_opt ? *braking_distance_opt : 0.0; - if ( - dist_ego2crosswalk - base_link2front - braking_distance < - p.max_offset_to_crosswalk_for_yield) { - return {}; - } + const double dist_ego2crosswalk = + calcSignedArcLength(ego_path.points, ego_pos, first_path_point_on_crosswalk); + const auto braking_distance_opt = autoware::motion_utils::calcDecelDistWithJerkAndAccConstraints( + ego_vel, 0.0, ego_acc, p.min_acc_for_no_stop_decision, p.max_jerk_for_no_stop_decision, + p.min_jerk_for_no_stop_decision); + const double braking_distance = braking_distance_opt ? *braking_distance_opt : 0.0; + if ( + dist_ego2crosswalk - base_link2front - braking_distance < p.max_offset_to_crosswalk_for_yield) { + return {}; } // Check pedestrian for stop @@ -461,20 +415,17 @@ std::optional CrosswalkModule::checkStopForCrosswalkUsers( } std::pair CrosswalkModule::getAttentionRange( - const PathWithLaneId & ego_path, const std::vector & path_intersects) + const PathWithLaneId & ego_path, const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk) { stop_watch_.tic(__func__); - if (path_intersects.size() < 2) { - return std::make_pair(0.0, 0.0); - } - const auto & ego_pos = planner_data_->current_odometry->pose.position; const auto near_attention_range = - calcSignedArcLength(ego_path.points, ego_pos, path_intersects.front()) - + calcSignedArcLength(ego_path.points, ego_pos, first_path_point_on_crosswalk) - planner_param_.crosswalk_attention_range; const auto far_attention_range = - calcSignedArcLength(ego_path.points, ego_pos, path_intersects.back()) + + calcSignedArcLength(ego_path.points, ego_pos, last_path_point_on_crosswalk) + planner_param_.crosswalk_attention_range; const auto [clamped_near_attention_range, clamped_far_attention_range] = @@ -598,14 +549,14 @@ std::pair CrosswalkModule::clampAttentionRangeByNeighborCrosswal auto reverse_ego_path = ego_path; std::reverse(reverse_ego_path.points.begin(), reverse_ego_path.points.end()); - const auto prev_crosswalk_intersects = getPolygonIntersects( - reverse_ego_path, prev_crosswalk->polygon2d().basicPolygon(), ego_pos, 2); - if (prev_crosswalk_intersects.empty()) { + const auto path_end_points_on_prev_crosswalk = getPathEndPointsOnCrosswalk( + reverse_ego_path, prev_crosswalk->polygon2d().basicPolygon(), ego_pos); + if (!path_end_points_on_prev_crosswalk) { return near_attention_range; } const auto dist_to_prev_crosswalk = - calcSignedArcLength(ego_path.points, ego_pos, prev_crosswalk_intersects.front()); + calcSignedArcLength(ego_path.points, ego_pos, path_end_points_on_prev_crosswalk->first); return std::max(near_attention_range, dist_to_prev_crosswalk); }(); @@ -613,15 +564,14 @@ std::pair CrosswalkModule::clampAttentionRangeByNeighborCrosswal if (!next_crosswalk) { return far_attention_range; } - const auto next_crosswalk_intersects = - getPolygonIntersects(ego_path, next_crosswalk->polygon2d().basicPolygon(), ego_pos, 2); - - if (next_crosswalk_intersects.empty()) { + const auto path_end_points_on_next_crosswalk = + getPathEndPointsOnCrosswalk(ego_path, next_crosswalk->polygon2d().basicPolygon(), ego_pos); + if (!path_end_points_on_next_crosswalk) { return far_attention_range; } const auto dist_to_next_crosswalk = - calcSignedArcLength(ego_path.points, ego_pos, next_crosswalk_intersects.front()); + calcSignedArcLength(ego_path.points, ego_pos, path_end_points_on_next_crosswalk->first); return std::min(far_attention_range, dist_to_next_crosswalk); }(); @@ -829,14 +779,11 @@ CollisionPoint CrosswalkModule::createCollisionPoint( return collision_point; } -void CrosswalkModule::applySafetySlowDownSpeed( - PathWithLaneId & output, const std::vector & path_intersects, +void CrosswalkModule::applySlowDown( + PathWithLaneId & output, const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk, const float safety_slow_down_speed) { - if (path_intersects.empty()) { - return; - } - const auto & ego_pos = planner_data_->current_odometry->pose.position; const auto ego_path = output; std::optional slowdown_pose{std::nullopt}; @@ -850,7 +797,8 @@ void CrosswalkModule::applySafetySlowDownSpeed( const double safety_slow_margin = planner_data_->vehicle_info_.max_longitudinal_offset_m + safety_slow_down_distance; const double safety_slow_point_range = - calcSignedArcLength(ego_path.points, ego_pos, path_intersects.front()) - safety_slow_margin; + calcSignedArcLength(ego_path.points, ego_pos, first_path_point_on_crosswalk) - + safety_slow_margin; const auto & p_safety_slow = calcLongitudinalOffsetPoint(ego_path.points, ego_pos, safety_slow_point_range); @@ -867,7 +815,7 @@ void CrosswalkModule::applySafetySlowDownSpeed( } else { // the range until to the point where ego will start accelerate const double safety_slow_end_point_range = - calcSignedArcLength(ego_path.points, ego_pos, path_intersects.back()); + calcSignedArcLength(ego_path.points, ego_pos, last_path_point_on_crosswalk); if (0.0 < safety_slow_end_point_range) { // insert constant ego speed until the end of the crosswalk @@ -884,6 +832,68 @@ void CrosswalkModule::applySafetySlowDownSpeed( VelocityFactor::APPROACHING); } +void CrosswalkModule::applySlowDownByLanelet2Map( + PathWithLaneId & output, const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk) +{ + if (!crosswalk_.hasAttribute("safety_slow_down_speed")) { + return; + } + applySlowDown( + output, first_path_point_on_crosswalk, last_path_point_on_crosswalk, + static_cast(crosswalk_.attribute("safety_slow_down_speed").asDouble().get())); +} + +void CrosswalkModule::applySlowDownByOcclusion( + PathWithLaneId & output, const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk) +{ + const auto & ego_pos = planner_data_->current_odometry->pose.position; + const auto objects_ptr = planner_data_->predicted_objects; + + const auto now = clock_->now(); + const auto cmp_with_time_buffer = [&](const auto & t, const auto cmp_fn) { + return t && cmp_fn((now - *t).seconds(), planner_param_.occlusion_time_buffer); + }; + const auto crosswalk_has_traffic_light = + !crosswalk_.regulatoryElementsAs().empty(); + const auto is_crosswalk_ignored = + (planner_param_.occlusion_ignore_with_traffic_light && crosswalk_has_traffic_light) || + crosswalk_.hasAttribute("skip_occluded_slowdown"); + if (planner_param_.occlusion_enable && !is_crosswalk_ignored) { + const auto dist_ego_to_crosswalk = + calcSignedArcLength(output.points, ego_pos, first_path_point_on_crosswalk); + const auto detection_range = + planner_data_->vehicle_info_.max_lateral_offset_m + + calculate_detection_range( + planner_param_.occlusion_occluded_object_velocity, dist_ego_to_crosswalk, + planner_data_->current_velocity->twist.linear.x); + const auto is_ego_on_the_crosswalk = + dist_ego_to_crosswalk <= planner_data_->vehicle_info_.max_longitudinal_offset_m; + if (!is_ego_on_the_crosswalk) { + if (is_crosswalk_occluded( + crosswalk_, *planner_data_->occupancy_grid, first_path_point_on_crosswalk, + detection_range, objects_ptr->objects, planner_param_)) { + if (!current_initial_occlusion_time_) current_initial_occlusion_time_ = now; + if (cmp_with_time_buffer(current_initial_occlusion_time_, std::greater_equal{})) + most_recent_occlusion_time_ = now; + } else if (!cmp_with_time_buffer(most_recent_occlusion_time_, std::greater{})) { + current_initial_occlusion_time_.reset(); + } + + if (cmp_with_time_buffer(most_recent_occlusion_time_, std::less_equal{})) { + const auto target_velocity = calcTargetVelocity(first_path_point_on_crosswalk, output); + applySlowDown( + output, first_path_point_on_crosswalk, last_path_point_on_crosswalk, + std::max(target_velocity, planner_param_.occlusion_slow_down_velocity)); + debug_data_.virtual_wall_suffix = " (occluded)"; + } else { + most_recent_occlusion_time_.reset(); + } + } + } +} + Polygon2d CrosswalkModule::getAttentionArea( const PathWithLaneId & sparse_resample_path, const std::pair & crosswalk_attention_range) const @@ -926,12 +936,13 @@ Polygon2d CrosswalkModule::getAttentionArea( std::optional CrosswalkModule::checkStopForStuckVehicles( const PathWithLaneId & ego_path, const std::vector & objects, - const std::vector & path_intersects, + const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk, const std::optional & stop_pose) { const auto & p = planner_param_; - if (path_intersects.size() < 2 || !stop_pose) { + if (!stop_pose) { return {}; } @@ -963,10 +974,10 @@ std::optional CrosswalkModule::checkStopForStuckVehicles( // check if STOP is required const double crosswalk_front_to_obj_rear = - calcSignedArcLength(ego_path.points, path_intersects.front(), obj_pose.position) - + calcSignedArcLength(ego_path.points, first_path_point_on_crosswalk, obj_pose.position) - object.shape.dimensions.x / 2.0; const double crosswalk_back_to_obj_rear = - calcSignedArcLength(ego_path.points, path_intersects.back(), obj_pose.position) - + calcSignedArcLength(ego_path.points, last_path_point_on_crosswalk, obj_pose.position) - object.shape.dimensions.x / 2.0; const double required_space_length = planner_data_->vehicle_info_.vehicle_length_m + planner_param_.required_clearance; diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp index b7dc2fea16794..ebb9d715ccd6a 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/scene_crosswalk.hpp @@ -331,23 +331,33 @@ class CrosswalkModule : public SceneModuleInterface private: // main functions - void applySafetySlowDownSpeed( - PathWithLaneId & output, const std::vector & path_intersects, - const float speed); + void applySlowDown( + PathWithLaneId & output, const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk, + const float safety_slow_down_speed); - std::optional> getStopPointWithMargin( + void applySlowDownByLanelet2Map( + PathWithLaneId & output, const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk); + + void applySlowDownByOcclusion( + PathWithLaneId & output, const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk); + + std::optional getDefaultStopPose( const PathWithLaneId & ego_path, - const std::vector & path_intersects) const; + const geometry_msgs::msg::Point & first_path_point_on_crosswalk) const; std::optional checkStopForCrosswalkUsers( const PathWithLaneId & ego_path, const PathWithLaneId & sparse_resample_path, - const std::optional> & p_stop_line, - const std::vector & path_intersects, + const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk, const std::optional & default_stop_pose); std::optional checkStopForStuckVehicles( const PathWithLaneId & ego_path, const std::vector & objects, - const std::vector & path_intersects, + const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk, const std::optional & stop_pose); std::optional findEgoPassageDirectionAlongPath( @@ -378,7 +388,8 @@ class CrosswalkModule : public SceneModuleInterface // minor functions std::pair getAttentionRange( const PathWithLaneId & ego_path, - const std::vector & path_intersects); + const geometry_msgs::msg::Point & first_path_point_on_crosswalk, + const geometry_msgs::msg::Point & last_path_point_on_crosswalk); void insertDecelPointWithDebugInfo( const geometry_msgs::msg::Point & stop_point, const float target_velocity, @@ -401,10 +412,6 @@ class CrosswalkModule : public SceneModuleInterface const PathWithLaneId & sparse_resample_path, const std::pair & crosswalk_attention_range) const; - bool isStuckVehicle( - const PathWithLaneId & ego_path, const std::vector & objects, - const std::vector & path_intersects) const; - void updateObjectState( const double dist_ego_to_stop, const PathWithLaneId & sparse_resample_path, const std::pair & crosswalk_attention_range, const Polygon2d & attention_area); diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/util.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/util.cpp index 6389637ca1526..755a32b08e024 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/util.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_crosswalk_module/src/util.cpp @@ -111,14 +111,19 @@ bool checkRegulatoryElementExistence(const lanelet::LaneletMapPtr & lanelet_map_ return !lanelet::utils::query::crosswalks(all_lanelets).empty(); } -std::vector getPolygonIntersects( +/** + * @brief Calculate path end (= first and last) points on the crosswalk + * + * @return first and last path points on the crosswalk + */ +std::optional> +getPathEndPointsOnCrosswalk( const PathWithLaneId & ego_path, const lanelet::BasicPolygon2d & polygon, - const geometry_msgs::msg::Point & ego_pos, - const size_t max_num = std::numeric_limits::max()) + const geometry_msgs::msg::Point & ego_pos) { std::vector intersects{}; - bool found_max_num = false; + bool has_collision_twice = false; for (size_t i = 0; i < ego_path.points.size() - 1; ++i) { const auto & p_back = ego_path.points.at(i).point.pose.position; const auto & p_front = ego_path.points.at(i + 1).point.pose.position; @@ -129,13 +134,13 @@ std::vector getPolygonIntersects( for (const auto & p : tmp_intersects) { intersects.push_back(p); - if (intersects.size() == max_num) { - found_max_num = true; + if (intersects.size() == 2) { + has_collision_twice = true; break; } } - if (found_max_num) { + if (has_collision_twice) { break; } } @@ -152,22 +157,24 @@ std::vector getPolygonIntersects( std::sort(intersects.begin(), intersects.end(), compare); - // convert autoware::universe_utils::Point2d to geometry::msg::Point - std::vector geometry_points; - for (const auto & p : intersects) { - geometry_points.push_back(createPoint(p.x(), p.y(), ego_pos.z)); + if (intersects.empty()) { + return std::nullopt; } - return geometry_points; + + const auto & front_intersects = intersects.front(); + const auto & back_intersects = intersects.back(); + return std::make_pair( + createPoint(front_intersects.x(), front_intersects.y(), ego_pos.z), + createPoint(back_intersects.x(), back_intersects.y(), ego_pos.z)); } std::vector getLinestringIntersects( const PathWithLaneId & ego_path, const lanelet::BasicLineString2d & linestring, - const geometry_msgs::msg::Point & ego_pos, - const size_t max_num = std::numeric_limits::max()) + const geometry_msgs::msg::Point & ego_pos) { std::vector intersects{}; - bool found_max_num = false; + bool has_collision_twice = false; for (size_t i = 0; i < ego_path.points.size() - 1; ++i) { const auto & p_back = ego_path.points.at(i).point.pose.position; const auto & p_front = ego_path.points.at(i + 1).point.pose.position; @@ -178,13 +185,13 @@ std::vector getLinestringIntersects( for (const auto & p : tmp_intersects) { intersects.push_back(p); - if (intersects.size() == max_num) { - found_max_num = true; + if (intersects.size() == 2) { + has_collision_twice = true; break; } } - if (found_max_num) { + if (has_collision_twice) { break; } } diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/scene_walkway.cpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/scene_walkway.cpp index 5a64daa0f95fc..765732969951d 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/scene_walkway.cpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/scene_walkway.cpp @@ -54,14 +54,14 @@ WalkwayModule::WalkwayModule( } } -std::optional> WalkwayModule::getStopLine( +std::pair WalkwayModule::getStopLine( const PathWithLaneId & ego_path, bool & exist_stopline_in_map, - const std::vector & path_intersects) const + const geometry_msgs::msg::Point & first_path_point_on_walkway) const { const auto & ego_pos = planner_data_->current_odometry->pose.position; for (const auto & stop_line : stop_lines_) { - const auto p_stop_lines = getLinestringIntersects( - ego_path, lanelet::utils::to2D(stop_line).basicLineString(), ego_pos, 2); + const auto p_stop_lines = + getLinestringIntersects(ego_path, lanelet::utils::to2D(stop_line).basicLineString(), ego_pos); if (p_stop_lines.empty()) { continue; } @@ -73,18 +73,12 @@ std::optional> WalkwayModule::getSt return std::make_pair(dist_ego_to_stop, p_stop_lines.front()); } - { - exist_stopline_in_map = false; + exist_stopline_in_map = false; - if (!path_intersects.empty()) { - const auto p_stop_line = path_intersects.front(); - const auto dist_ego_to_stop = calcSignedArcLength(ego_path.points, ego_pos, p_stop_line) - - planner_param_.stop_distance_from_crosswalk; - return std::make_pair(dist_ego_to_stop, p_stop_line); - } - } - - return {}; + const auto p_stop_line = first_path_point_on_walkway; + const auto dist_ego_to_stop = calcSignedArcLength(ego_path.points, ego_pos, p_stop_line) - + planner_param_.stop_distance_from_crosswalk; + return std::make_pair(dist_ego_to_stop, p_stop_line); } bool WalkwayModule::modifyPathVelocity(PathWithLaneId * path, StopReason * stop_reason) @@ -97,21 +91,19 @@ bool WalkwayModule::modifyPathVelocity(PathWithLaneId * path, StopReason * stop_ const auto input = *path; const auto & ego_pos = planner_data_->current_odometry->pose.position; - const auto path_intersects = - getPolygonIntersects(input, walkway_.polygon2d().basicPolygon(), ego_pos, 2); - - if (path_intersects.empty()) { + const auto path_end_points_on_walkway = + getPathEndPointsOnCrosswalk(input, walkway_.polygon2d().basicPolygon(), ego_pos); + if (!path_end_points_on_walkway) { return false; } + const auto & first_path_point_on_walkway = path_end_points_on_walkway->first; + if (state_ == State::APPROACH) { bool exist_stopline_in_map; - const auto p_stop_line = getStopLine(input, exist_stopline_in_map, path_intersects); - if (!p_stop_line) { - return false; - } + const auto p_stop_line = getStopLine(input, exist_stopline_in_map, first_path_point_on_walkway); - const auto & p_stop = p_stop_line->second; + const auto & p_stop = p_stop_line.second; const auto stop_distance_from_crosswalk = exist_stopline_in_map ? 0.0 : planner_param_.stop_distance_from_crosswalk; const auto margin = stop_distance_from_crosswalk + base_link2front; @@ -129,7 +121,7 @@ bool WalkwayModule::modifyPathVelocity(PathWithLaneId * path, StopReason * stop_ /* get stop point and stop factor */ StopFactor stop_factor; stop_factor.stop_pose = stop_pose.value(); - stop_factor.stop_factor_points.push_back(path_intersects.front()); + stop_factor.stop_factor_points.push_back(path_end_points_on_walkway->first); planning_utils::appendStopReason(stop_factor, stop_reason); velocity_factor_.set( path->points, planner_data_->current_odometry->pose, stop_pose.value(), diff --git a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp index 0099de46e1598..a400f57451d2e 100644 --- a/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp +++ b/planning/behavior_velocity_planner/autoware_behavior_velocity_walkway_module/src/scene_walkway.hpp @@ -54,9 +54,9 @@ class WalkwayModule : public SceneModuleInterface private: const int64_t module_id_; - [[nodiscard]] std::optional> getStopLine( + [[nodiscard]] std::pair getStopLine( const PathWithLaneId & ego_path, bool & exist_stopline_in_map, - const std::vector & path_intersects) const; + const geometry_msgs::msg::Point & first_path_point_on_walkway) const; enum class State { APPROACH, STOP, SURPASSED }; From d8055a52ac41310d0373568a73d25c9197dbde68 Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Thu, 18 Jul 2024 12:08:13 +0900 Subject: [PATCH 220/306] feat(autoware_universe_utils): add comment function to time_keeper (#7991) * update readme Signed-off-by: Y.Hisaki * refactoring Signed-off-by: Y.Hisaki * remove string reporter Signed-off-by: Y.Hisaki * fix readme.md Signed-off-by: Y.Hisaki * feat(autoware_universe_utils): add comment function to time_keeper Signed-off-by: Y.Hisaki * remove comment from scoped time track Signed-off-by: Y.Hisaki * modify readme Signed-off-by: Y.Hisaki --------- Signed-off-by: Y.Hisaki --- common/autoware_universe_utils/README.md | 26 ++++++++++++++----- .../examples/example_time_keeper.cpp | 3 +++ .../universe_utils/system/time_keeper.hpp | 15 +++++++++++ .../src/system/time_keeper.cpp | 21 ++++++++++++++- 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/common/autoware_universe_utils/README.md b/common/autoware_universe_utils/README.md index cd5e366c520fc..d49fced367908 100644 --- a/common/autoware_universe_utils/README.md +++ b/common/autoware_universe_utils/README.md @@ -46,9 +46,14 @@ explicit TimeKeeper(Reporters... reporters); - `func_name`: Name of the function to be tracked. - `void end_track(const std::string & func_name);` + - Ends tracking the processing time of a function. - `func_name`: Name of the function to end tracking. +- `void comment(const std::string & comment);` + - Adds a comment to the current function being tracked. + - `comment`: Comment to be added. + ##### Note - It's possible to start and end time measurements using `start_track` and `end_track` as shown below: @@ -86,7 +91,8 @@ public: // time_keeper_->add_reporter(publisher_); // time_keeper_->add_reporter(&std::cerr); - timer_ = create_wall_timer(std::chrono::seconds(1), std::bind(&ExampleNode::func_a, this)); + timer_ = + create_wall_timer(std::chrono::seconds(1), std::bind(&ExampleNode::func_a, this)); } private: @@ -100,6 +106,7 @@ private: // Start constructing ProcessingTimeTree (because func_a is the root function) autoware::universe_utils::ScopedTimeTrack st("func_a", *time_keeper_); std::this_thread::sleep_for(std::chrono::milliseconds(1)); + time_keeper_->comment("This is a comment for func_a"); func_b(); // End constructing ProcessingTimeTree. After this, the tree will be reported (publishing // message and outputting to std::cerr) @@ -109,6 +116,7 @@ private: { autoware::universe_utils::ScopedTimeTrack st("func_b", *time_keeper_); std::this_thread::sleep_for(std::chrono::milliseconds(2)); + time_keeper_->comment("This is a comment for func_b"); func_c(); } @@ -116,6 +124,7 @@ private: { autoware::universe_utils::ScopedTimeTrack st("func_c", *time_keeper_); std::this_thread::sleep_for(std::chrono::milliseconds(3)); + time_keeper_->comment("This is a comment for func_c"); } }; @@ -133,9 +142,9 @@ int main(int argc, char ** argv) ```text ========================== - func_a (6.382ms) - └── func_b (5.243ms) - └── func_c (3.146ms) + func_a (6.243ms) : This is a comment for func_a + └── func_b (5.116ms) : This is a comment for func_b + └── func_c (3.055ms) : This is a comment for func_c ``` - Output (`ros2 topic echo /processing_time`) @@ -145,16 +154,19 @@ int main(int argc, char ** argv) nodes: - id: 1 name: func_a - processing_time: 6.397 + processing_time: 6.366 parent_id: 0 + comment: This is a comment for func_a - id: 2 name: func_b - processing_time: 5.263 + processing_time: 5.237 parent_id: 1 + comment: This is a comment for func_b - id: 3 name: func_c - processing_time: 3.129 + processing_time: 3.156 parent_id: 2 + comment: This is a comment for func_c ``` #### `autoware::universe_utils::ScopedTimeTrack` diff --git a/common/autoware_universe_utils/examples/example_time_keeper.cpp b/common/autoware_universe_utils/examples/example_time_keeper.cpp index c50aa1e1a8342..12f0b4f31e897 100644 --- a/common/autoware_universe_utils/examples/example_time_keeper.cpp +++ b/common/autoware_universe_utils/examples/example_time_keeper.cpp @@ -49,6 +49,7 @@ class ExampleNode : public rclcpp::Node // Start constructing ProcessingTimeTree (because func_a is the root function) autoware::universe_utils::ScopedTimeTrack st("func_a", *time_keeper_); std::this_thread::sleep_for(std::chrono::milliseconds(1)); + time_keeper_->comment("This is a comment for func_a"); func_b(); // End constructing ProcessingTimeTree. After this, the tree will be reported (publishing // message and outputting to std::cerr) @@ -58,6 +59,7 @@ class ExampleNode : public rclcpp::Node { autoware::universe_utils::ScopedTimeTrack st("func_b", *time_keeper_); std::this_thread::sleep_for(std::chrono::milliseconds(2)); + time_keeper_->comment("This is a comment for func_b"); func_c(); } @@ -65,6 +67,7 @@ class ExampleNode : public rclcpp::Node { autoware::universe_utils::ScopedTimeTrack st("func_c", *time_keeper_); std::this_thread::sleep_for(std::chrono::milliseconds(3)); + time_keeper_->comment("This is a comment for func_c"); } }; diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp index c635138416aa5..d846c610bf1e2 100644 --- a/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp +++ b/common/autoware_universe_utils/include/autoware/universe_utils/system/time_keeper.hpp @@ -86,6 +86,13 @@ class ProcessingTimeNode : public std::enable_shared_from_this parent_node_{nullptr}; //!< Shared pointer to the parent node std::vector> child_nodes_; //!< Vector of shared pointers to the child nodes @@ -145,6 +153,13 @@ class TimeKeeper */ void end_track(const std::string & func_name); + /** + * @brief Comment the current time node + * + * @param comment Comment to be added to the current time node + */ + void comment(const std::string & comment); + private: /** * @brief Report the processing times to all registered reporters diff --git a/common/autoware_universe_utils/src/system/time_keeper.cpp b/common/autoware_universe_utils/src/system/time_keeper.cpp index 429f063dfc62e..88038575c70f5 100644 --- a/common/autoware_universe_utils/src/system/time_keeper.cpp +++ b/common/autoware_universe_utils/src/system/time_keeper.cpp @@ -43,7 +43,11 @@ std::string ProcessingTimeNode::to_string() const if (!is_root) { oss << prefix << (is_last ? "└── " : "├── "); } - oss << node.name_ << " (" << node.processing_time_ << "ms)\n"; + if (!node.comment_.empty()) { + oss << node.name_ << " (" << node.processing_time_ << "ms) : " << node.comment_ << "\n"; + } else { + oss << node.name_ << " (" << node.processing_time_ << "ms)\n"; + } for (size_t i = 0; i < node.child_nodes_.size(); ++i) { const auto & child = node.child_nodes_[i]; construct_string( @@ -70,6 +74,7 @@ tier4_debug_msgs::msg::ProcessingTimeTree ProcessingTimeNode::to_msg() const time_node_msg.processing_time = node.processing_time_; time_node_msg.id = static_cast(tree_msg.nodes.size() + 1); time_node_msg.parent_id = parent_id; + time_node_msg.comment = node.comment_; tree_msg.nodes.emplace_back(time_node_msg); for (const auto & child : node.child_nodes_) { @@ -93,6 +98,12 @@ void ProcessingTimeNode::set_time(const double processing_time) { processing_time_ = processing_time; } + +void ProcessingTimeNode::set_comment(const std::string & comment) +{ + comment_ = comment; +} + std::string ProcessingTimeNode::get_name() const { return name_; @@ -124,6 +135,14 @@ void TimeKeeper::start_track(const std::string & func_name) stop_watch_.tic(func_name); } +void TimeKeeper::comment(const std::string & comment) +{ + if (current_time_node_ == nullptr) { + throw std::runtime_error("You must call start_track() first, but comment() is called"); + } + current_time_node_->set_comment(comment); +} + void TimeKeeper::end_track(const std::string & func_name) { if (current_time_node_->get_name() != func_name) { From bbcb8582a21b770f7160da493e91e657ea66229f Mon Sep 17 00:00:00 2001 From: Maxime CLEMENT <78338830+maxime-clem@users.noreply.github.com> Date: Thu, 18 Jul 2024 13:34:20 +0900 Subject: [PATCH 221/306] feat(universe_utils): add GJK implementation for 2D convex polygon collision check (#7853) Signed-off-by: Maxime CLEMENT --- common/autoware_universe_utils/CMakeLists.txt | 2 + .../universe_utils/geometry/geometry.hpp | 8 +- .../universe_utils/geometry/gjk_2d.hpp | 29 ++++ .../geometry/random_convex_polygon.hpp | 29 ++++ .../src/geometry/geometry.cpp | 9 +- .../src/geometry/gjk_2d.cpp | 150 +++++++++++++++++ .../src/geometry/random_convex_polygon.cpp | 109 +++++++++++++ .../test/src/geometry/test_geometry.cpp | 153 +++++++++++++++++- 8 files changed, 486 insertions(+), 3 deletions(-) create mode 100644 common/autoware_universe_utils/include/autoware/universe_utils/geometry/gjk_2d.hpp create mode 100644 common/autoware_universe_utils/include/autoware/universe_utils/geometry/random_convex_polygon.hpp create mode 100644 common/autoware_universe_utils/src/geometry/gjk_2d.cpp create mode 100644 common/autoware_universe_utils/src/geometry/random_convex_polygon.cpp diff --git a/common/autoware_universe_utils/CMakeLists.txt b/common/autoware_universe_utils/CMakeLists.txt index 2fdeef2119ab8..526ffd8dcc83a 100644 --- a/common/autoware_universe_utils/CMakeLists.txt +++ b/common/autoware_universe_utils/CMakeLists.txt @@ -14,6 +14,8 @@ ament_auto_add_library(autoware_universe_utils SHARED src/geometry/geometry.cpp src/geometry/pose_deviation.cpp src/geometry/boost_polygon_utils.cpp + src/geometry/random_convex_polygon.cpp + src/geometry/gjk_2d.cpp src/math/sin_table.cpp src/math/trigonometry.cpp src/ros/msg_operation.cpp diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/geometry/geometry.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/geometry/geometry.hpp index e6dd57c9d3fed..e6d0363846b20 100644 --- a/common/autoware_universe_utils/include/autoware/universe_utils/geometry/geometry.hpp +++ b/common/autoware_universe_utils/include/autoware/universe_utils/geometry/geometry.hpp @@ -1,4 +1,4 @@ -// Copyright 2020 Tier IV, Inc. +// Copyright 2020-2024 Tier IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -577,6 +577,12 @@ std::optional intersect( const geometry_msgs::msg::Point & p1, const geometry_msgs::msg::Point & p2, const geometry_msgs::msg::Point & p3, const geometry_msgs::msg::Point & p4); +/** + * @brief Check if 2 convex polygons intersect using the GJK algorithm + * @details much faster than boost::geometry::intersects() + */ +bool intersects_convex(const Polygon2d & convex_polygon1, const Polygon2d & convex_polygon2); + } // namespace autoware::universe_utils #endif // AUTOWARE__UNIVERSE_UTILS__GEOMETRY__GEOMETRY_HPP_ diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/geometry/gjk_2d.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/geometry/gjk_2d.hpp new file mode 100644 index 0000000000000..7c432013215c8 --- /dev/null +++ b/common/autoware_universe_utils/include/autoware/universe_utils/geometry/gjk_2d.hpp @@ -0,0 +1,29 @@ +// Copyright 2024 Tier IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef AUTOWARE__UNIVERSE_UTILS__GEOMETRY__GJK_2D_HPP_ +#define AUTOWARE__UNIVERSE_UTILS__GEOMETRY__GJK_2D_HPP_ + +#include "autoware/universe_utils/geometry/boost_geometry.hpp" + +namespace autoware::universe_utils::gjk +{ +/** + * @brief Check if 2 convex polygons intersect using the GJK algorithm + * @details much faster than boost::geometry::overlaps() but limited to convex polygons + */ +bool intersects(const Polygon2d & convex_polygon1, const Polygon2d & convex_polygon2); +} // namespace autoware::universe_utils::gjk + +#endif // AUTOWARE__UNIVERSE_UTILS__GEOMETRY__GJK_2D_HPP_ diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/geometry/random_convex_polygon.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/geometry/random_convex_polygon.hpp new file mode 100644 index 0000000000000..e28c4836b1a48 --- /dev/null +++ b/common/autoware_universe_utils/include/autoware/universe_utils/geometry/random_convex_polygon.hpp @@ -0,0 +1,29 @@ +// Copyright 2024 Tier IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef AUTOWARE__UNIVERSE_UTILS__GEOMETRY__RANDOM_CONVEX_POLYGON_HPP_ +#define AUTOWARE__UNIVERSE_UTILS__GEOMETRY__RANDOM_CONVEX_POLYGON_HPP_ + +#include + +namespace autoware::universe_utils +{ +/// @brief generate a random convex polygon +/// @param vertices number of vertices for the desired polygon +/// @param max points will be generated in the range [-max,max] +/// @details algorithm from https://cglab.ca/~sander/misc/ConvexGeneration/convex.html +Polygon2d random_convex_polygon(const size_t vertices, const double max); +} // namespace autoware::universe_utils + +#endif // AUTOWARE__UNIVERSE_UTILS__GEOMETRY__RANDOM_CONVEX_POLYGON_HPP_ diff --git a/common/autoware_universe_utils/src/geometry/geometry.cpp b/common/autoware_universe_utils/src/geometry/geometry.cpp index b0f5756fc2d94..5fda8eb3f4ca4 100644 --- a/common/autoware_universe_utils/src/geometry/geometry.cpp +++ b/common/autoware_universe_utils/src/geometry/geometry.cpp @@ -1,4 +1,4 @@ -// Copyright 2023 TIER IV, Inc. +// Copyright 2023-2024 TIER IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -14,6 +14,8 @@ #include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/geometry/gjk_2d.hpp" + #include #include @@ -383,4 +385,9 @@ std::optional intersect( return intersect_point; } +bool intersects_convex(const Polygon2d & convex_polygon1, const Polygon2d & convex_polygon2) +{ + return gjk::intersects(convex_polygon1, convex_polygon2); +} + } // namespace autoware::universe_utils diff --git a/common/autoware_universe_utils/src/geometry/gjk_2d.cpp b/common/autoware_universe_utils/src/geometry/gjk_2d.cpp new file mode 100644 index 0000000000000..86d5592fc4779 --- /dev/null +++ b/common/autoware_universe_utils/src/geometry/gjk_2d.cpp @@ -0,0 +1,150 @@ +// Copyright 2024 Tier IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "autoware/universe_utils/geometry/gjk_2d.hpp" + +#include "autoware/universe_utils/geometry/boost_geometry.hpp" + +#include + +namespace autoware::universe_utils::gjk +{ + +namespace +{ +/// @brief structure with all variables updated during the GJK loop +/// @details for performance we only want to reserve their space in memory once +struct SimplexSearch +{ + // current triangle simplex + Point2d a; + Point2d b; + Point2d c; + Point2d co; // vector from C to the origin + Point2d ca; // vector from C to A + Point2d cb; // vector from C to B + Point2d ca_perpendicular; // perpendicular to CA + Point2d cb_perpendicular; // perpendicular to CB + Point2d direction; // current search direction +}; + +/// @brief calculate the dot product between 2 points +double dot_product(const Point2d & p1, const Point2d & p2) +{ + return p1.x() * p2.x() + p1.y() * p2.y(); +} + +/// @brief calculate the index of the furthest polygon vertex in the given direction +size_t furthest_vertex_idx(const Polygon2d & poly, const Point2d & direction) +{ + auto furthest_distance = dot_product(poly.outer()[0], direction); + size_t furthest_idx = 0UL; + for (auto i = 1UL; i < poly.outer().size(); ++i) { + const auto distance = dot_product(poly.outer()[i], direction); + if (distance > furthest_distance) { + furthest_distance = distance; + furthest_idx = i; + } + } + return furthest_idx; +} + +/// @brief calculate the next Minkowski difference vertex in the given direction +Point2d support_vertex(const Polygon2d & poly1, const Polygon2d & poly2, const Point2d & direction) +{ + const auto opposite_direction = Point2d(-direction.x(), -direction.y()); + const auto idx1 = furthest_vertex_idx(poly1, direction); + const auto idx2 = furthest_vertex_idx(poly2, opposite_direction); + return Point2d( + poly1.outer()[idx1].x() - poly2.outer()[idx2].x(), + poly1.outer()[idx1].y() - poly2.outer()[idx2].y()); +} + +/// @brief return true if both points are in the same direction +bool same_direction(const Point2d & p1, const Point2d & p2) +{ + return dot_product(p1, p2) > 0.0; +} + +/// @brief return the triple cross product of the given points +Point2d cross_product(const Point2d & p1, const Point2d & p2, const Point2d & p3) +{ + const auto tmp = p1.x() * p2.y() - p1.y() * p2.x(); + return Point2d(-p3.y() * tmp, p3.x() * tmp); +} + +/// @brief update the search simplex and search direction to try to surround the origin +bool update_search_simplex_and_direction(SimplexSearch & search) +{ + bool continue_search = false; + search.co.x() = -search.c.x(); + search.co.y() = -search.c.y(); + search.ca.x() = search.a.x() - search.c.x(); + search.ca.y() = search.a.y() - search.c.y(); + search.cb.x() = search.b.x() - search.c.x(); + search.cb.y() = search.b.y() - search.c.y(); + search.ca_perpendicular = cross_product(search.cb, search.ca, search.ca); + search.cb_perpendicular = cross_product(search.ca, search.cb, search.cb); + if (same_direction(search.ca_perpendicular, search.co)) { + search.b.x() = search.c.x(); + search.b.y() = search.c.y(); + search.direction.x() = search.ca_perpendicular.x(); + search.direction.y() = search.ca_perpendicular.y(); + continue_search = true; + } else if (same_direction(search.cb_perpendicular, search.co)) { + search.a.x() = search.c.x(); + search.a.y() = search.c.y(); + search.direction.x() = search.cb_perpendicular.x(); + search.direction.y() = search.cb_perpendicular.y(); + continue_search = true; + } + return continue_search; +} +} // namespace + +/// @brief return true if the two given polygons intersect +/// @details if the intersection area is 0 (e.g., only one point or one edge intersect), the return +/// value is false +bool intersects(const Polygon2d & convex_polygon1, const Polygon2d & convex_polygon2) +{ + if (convex_polygon1.outer().empty() || convex_polygon2.outer().empty()) { + return false; + } + if (boost::geometry::equals(convex_polygon1, convex_polygon2)) { + return true; + } + + SimplexSearch search; + search.direction = {1.0, 0.0}; + search.a = support_vertex(convex_polygon1, convex_polygon2, search.direction); + search.direction = {-search.a.x(), -search.a.y()}; + search.b = support_vertex(convex_polygon1, convex_polygon2, search.direction); + if (dot_product(search.b, search.direction) <= 0.0) { // the Minkowski difference does not cross + // the origin + return false; // no collision + } + Point2d ab = {search.b.x() - search.a.x(), search.b.y() - search.a.y()}; + Point2d ao = {-search.a.x(), -search.a.y()}; + search.direction = cross_product(ab, ao, ab); + bool continue_search = true; + while (continue_search) { + search.c = support_vertex(convex_polygon1, convex_polygon2, search.direction); + if (!same_direction(search.c, search.direction)) { // no more vertex in the search direction + return false; // no collision + } + continue_search = update_search_simplex_and_direction(search); + } + return true; +} +} // namespace autoware::universe_utils::gjk diff --git a/common/autoware_universe_utils/src/geometry/random_convex_polygon.cpp b/common/autoware_universe_utils/src/geometry/random_convex_polygon.cpp new file mode 100644 index 0000000000000..d857956806554 --- /dev/null +++ b/common/autoware_universe_utils/src/geometry/random_convex_polygon.cpp @@ -0,0 +1,109 @@ +// Copyright 2024 Tier IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "autoware/universe_utils/geometry/random_convex_polygon.hpp" + +#include + +#include +#include +#include + +namespace autoware::universe_utils +{ +namespace +{ +struct VectorsWithMin +{ + std::vector vectors; + double min; +}; + +VectorsWithMin prepare_coordinate_vectors( + const size_t nb_vertices, std::uniform_real_distribution & random_double, + std::uniform_int_distribution & random_bool, std::default_random_engine & random_engine) +{ + std::vector v; + for (auto i = 0UL; i < nb_vertices; ++i) { + v.push_back(random_double(random_engine)); + } + std::sort(v.begin(), v.end()); + const auto min_v = v.front(); + const auto max_v = v.back(); + std::vector v1; + v1.push_back(min_v); + std::vector v2; + v2.push_back(min_v); + for (auto i = 1UL; i + 1 < v.size(); ++i) { + if (random_bool(random_engine) == 0) { + v1.push_back((v[i])); + } else { + v2.push_back((v[i])); + } + } + v1.push_back(max_v); + v2.push_back(max_v); + std::vector diffs; + for (auto i = 0UL; i + 1 < v1.size(); ++i) { + diffs.push_back(v1[i + 1] - v1[i]); + } + for (auto i = 0UL; i + 1 < v2.size(); ++i) { + diffs.push_back(v2[i] - v2[i + 1]); + } + VectorsWithMin vectors; + vectors.vectors = diffs; + vectors.min = min_v; + return vectors; +} +} // namespace +Polygon2d random_convex_polygon(const size_t vertices, const double max) +{ + std::random_device r; + std::default_random_engine random_engine(r()); + std::uniform_real_distribution uniform_dist(-max, max); + std::uniform_int_distribution random_bool(0, 1); + auto xs = prepare_coordinate_vectors(vertices, uniform_dist, random_bool, random_engine); + auto ys = prepare_coordinate_vectors(vertices, uniform_dist, random_bool, random_engine); + std::shuffle(ys.vectors.begin(), ys.vectors.end(), random_engine); + LinearRing2d vectors; + for (auto i = 0UL; i < xs.vectors.size(); ++i) { + vectors.emplace_back(xs.vectors[i], ys.vectors[i]); + } + std::sort(vectors.begin(), vectors.end(), [](const Point2d & p1, const Point2d & p2) { + return std::atan2(p1.y(), p1.x()) < std::atan2(p2.y(), p2.x()); + }); + auto min_x = max; + auto min_y = max; + auto x = 0.0; + auto y = 0.0; + LinearRing2d points; + for (const auto & p : vectors) { + points.emplace_back(x, y); + x += p.x(); + y += p.y(); + min_x = std::min(p.x(), min_x); + min_y = std::min(p.y(), min_y); + } + const auto shift_x = min_x - xs.min; + const auto shift_y = min_y - ys.min; + for (auto & p : points) { + p.x() += shift_x; + p.y() += shift_y; + } + Polygon2d poly; + poly.outer() = points; + boost::geometry::correct(poly); + return poly; +} +} // namespace autoware::universe_utils diff --git a/common/autoware_universe_utils/test/src/geometry/test_geometry.cpp b/common/autoware_universe_utils/test/src/geometry/test_geometry.cpp index 194cd7d503d12..b014d12dbd985 100644 --- a/common/autoware_universe_utils/test/src/geometry/test_geometry.cpp +++ b/common/autoware_universe_utils/test/src/geometry/test_geometry.cpp @@ -1,4 +1,4 @@ -// Copyright 2020 Tier IV, Inc. +// Copyright 2020-2024 Tier IV, Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,13 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "autoware/universe_utils/geometry/boost_geometry.hpp" #include "autoware/universe_utils/geometry/geometry.hpp" +#include "autoware/universe_utils/geometry/random_convex_polygon.hpp" #include "autoware/universe_utils/math/unit_conversion.hpp" +#include "autoware/universe_utils/system/stop_watch.hpp" #include +#include +#include + #include +#include #include constexpr double epsilon = 1e-6; @@ -1829,3 +1836,147 @@ TEST(geometry, intersect) EXPECT_NEAR(result->z, 0.0, epsilon); } } + +TEST(geometry, intersectPolygon) +{ + { // 2 triangles with intersection + autoware::universe_utils::Polygon2d poly1; + autoware::universe_utils::Polygon2d poly2; + poly1.outer().emplace_back(0, 2); + poly1.outer().emplace_back(2, 2); + poly1.outer().emplace_back(2, 0); + poly2.outer().emplace_back(1, 1); + poly2.outer().emplace_back(1, 0); + poly2.outer().emplace_back(0, 1); + boost::geometry::correct(poly1); + boost::geometry::correct(poly2); + EXPECT_TRUE(autoware::universe_utils::intersects_convex(poly1, poly2)); + } + { // 2 triangles with no intersection (but they share an edge) + autoware::universe_utils::Polygon2d poly1; + autoware::universe_utils::Polygon2d poly2; + poly1.outer().emplace_back(0, 2); + poly1.outer().emplace_back(2, 2); + poly1.outer().emplace_back(0, 0); + poly2.outer().emplace_back(0, 0); + poly2.outer().emplace_back(2, 0); + poly2.outer().emplace_back(2, 2); + boost::geometry::correct(poly1); + boost::geometry::correct(poly2); + EXPECT_FALSE(autoware::universe_utils::intersects_convex(poly1, poly2)); + } + { // 2 triangles with no intersection (but they share a point) + autoware::universe_utils::Polygon2d poly1; + autoware::universe_utils::Polygon2d poly2; + poly1.outer().emplace_back(0, 2); + poly1.outer().emplace_back(2, 2); + poly1.outer().emplace_back(0, 0); + poly2.outer().emplace_back(4, 4); + poly2.outer().emplace_back(4, 2); + poly2.outer().emplace_back(2, 2); + boost::geometry::correct(poly1); + boost::geometry::correct(poly2); + EXPECT_FALSE(autoware::universe_utils::intersects_convex(poly1, poly2)); + } + { // 2 triangles sharing a point and then with very small intersection + autoware::universe_utils::Polygon2d poly1; + autoware::universe_utils::Polygon2d poly2; + poly1.outer().emplace_back(0, 0); + poly1.outer().emplace_back(2, 2); + poly1.outer().emplace_back(4, 0); + poly2.outer().emplace_back(0, 4); + poly2.outer().emplace_back(2, 2); + poly2.outer().emplace_back(4, 4); + boost::geometry::correct(poly1); + boost::geometry::correct(poly2); + EXPECT_FALSE(autoware::universe_utils::intersects_convex(poly1, poly2)); + poly1.outer()[1].y() += 1e-12; + EXPECT_TRUE(autoware::universe_utils::intersects_convex(poly1, poly2)); + } + { // 2 triangles with no intersection and no touching + autoware::universe_utils::Polygon2d poly1; + autoware::universe_utils::Polygon2d poly2; + poly1.outer().emplace_back(0, 2); + poly1.outer().emplace_back(2, 2); + poly1.outer().emplace_back(0, 0); + poly2.outer().emplace_back(4, 4); + poly2.outer().emplace_back(5, 5); + poly2.outer().emplace_back(3, 5); + boost::geometry::correct(poly1); + boost::geometry::correct(poly2); + EXPECT_FALSE(autoware::universe_utils::intersects_convex(poly1, poly2)); + } + { // triangle and quadrilateral with intersection + autoware::universe_utils::Polygon2d poly1; + autoware::universe_utils::Polygon2d poly2; + poly1.outer().emplace_back(4, 11); + poly1.outer().emplace_back(4, 5); + poly1.outer().emplace_back(9, 9); + poly2.outer().emplace_back(5, 7); + poly2.outer().emplace_back(7, 3); + poly2.outer().emplace_back(10, 2); + poly2.outer().emplace_back(12, 7); + boost::geometry::correct(poly1); + boost::geometry::correct(poly2); + EXPECT_TRUE(autoware::universe_utils::intersects_convex(poly1, poly2)); + } +} + +TEST(geometry, intersectPolygonRand) +{ + std::vector polygons; + constexpr auto polygons_nb = 500; + constexpr auto max_vertices = 10; + constexpr auto max_values = 1000; + + autoware::universe_utils::StopWatch sw; + for (auto vertices = 3UL; vertices < max_vertices; ++vertices) { + double ground_truth_intersect_ns = 0.0; + double ground_truth_no_intersect_ns = 0.0; + double gjk_intersect_ns = 0.0; + double gjk_no_intersect_ns = 0.0; + int intersect_count = 0; + polygons.clear(); + for (auto i = 0; i < polygons_nb; ++i) { + polygons.push_back(autoware::universe_utils::random_convex_polygon(vertices, max_values)); + } + for (auto i = 0UL; i < polygons.size(); ++i) { + for (auto j = 0UL; j < polygons.size(); ++j) { + sw.tic(); + const auto ground_truth = boost::geometry::intersects(polygons[i], polygons[j]); + if (ground_truth) { + ++intersect_count; + ground_truth_intersect_ns += sw.toc(); + } else { + ground_truth_no_intersect_ns += sw.toc(); + } + sw.tic(); + const auto gjk = autoware::universe_utils::intersects_convex(polygons[i], polygons[j]); + if (gjk) { + gjk_intersect_ns += sw.toc(); + } else { + gjk_no_intersect_ns += sw.toc(); + } + if (ground_truth != gjk) { + std::cout << "Failed for the 2 polygons: "; + std::cout << boost::geometry::wkt(polygons[i]) << boost::geometry::wkt(polygons[j]) + << std::endl; + } + EXPECT_EQ(ground_truth, gjk); + } + } + std::printf( + "polygons_nb = %d, vertices = %ld, %d / %d pairs with intersects\n", polygons_nb, vertices, + intersect_count, polygons_nb * polygons_nb); + std::printf( + "\tIntersect:\n\t\tBoost::geometry = %2.2f ms\n\t\tGJK = %2.2f ms\n", + ground_truth_intersect_ns / 1e6, gjk_intersect_ns / 1e6); + std::printf( + "\tNo Intersect:\n\t\tBoost::geometry = %2.2f ms\n\t\tGJK = %2.2f ms\n", + ground_truth_no_intersect_ns / 1e6, gjk_no_intersect_ns / 1e6); + std::printf( + "\tTotal:\n\t\tBoost::geometry = %2.2f ms\n\t\tGJK = %2.2f ms\n", + (ground_truth_no_intersect_ns + ground_truth_intersect_ns) / 1e6, + (gjk_no_intersect_ns + gjk_intersect_ns) / 1e6); + } +} From da77c3e2272a4dc8c07a7f52f8f138c08fe03ef3 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Thu, 18 Jul 2024 14:33:21 +0900 Subject: [PATCH 222/306] refactor(image_projection_based_fusion): fix namespace and directory structure (#7990) * refactor: add autoware on namespace Signed-off-by: Taekjin LEE * refactor: move headers under autoware Signed-off-by: Taekjin LEE refactor: move image_projection_based_fusion headers under autoware namespace * fix: remove unused dependencies Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- .../CMakeLists.txt | 10 ++++---- .../debugger.hpp | 10 ++++---- .../fusion_node.hpp | 12 +++++----- .../pointpainting_fusion/node.hpp | 18 +++++++-------- .../pointcloud_densification.hpp | 11 +++++---- .../pointpainting_trt.hpp | 12 +++++----- .../preprocess_kernel.hpp | 10 ++++---- .../pointpainting_fusion/voxel_generator.hpp | 12 +++++----- .../roi_cluster_fusion/node.hpp | 12 +++++----- .../roi_detected_object_fusion/node.hpp | 14 +++++------ .../roi_pointcloud_fusion/node.hpp | 14 +++++------ .../segmentation_pointcloud_fusion/node.hpp | 14 +++++------ .../utils/geometry.hpp | 10 ++++---- .../utils/utils.hpp | 12 +++++----- .../launch/pointpainting_fusion.launch.xml | 2 +- .../image_projection_based_fusion/package.xml | 3 --- .../src/debugger.cpp | 6 ++--- .../src/fusion_node.cpp | 6 ++--- .../src/pointpainting_fusion/node.cpp | 12 +++++----- .../pointcloud_densification.cpp | 6 ++--- .../pointpainting_trt.cpp | 8 +++---- .../pointpainting_fusion/preprocess_kernel.cu | 6 ++--- .../pointpainting_fusion/voxel_generator.cpp | 6 ++--- .../src/roi_cluster_fusion/node.cpp | 12 +++++----- .../src/roi_detected_object_fusion/node.cpp | 13 ++++++----- .../src/roi_pointcloud_fusion/node.cpp | 12 +++++----- .../segmentation_pointcloud_fusion/node.cpp | 13 ++++++----- .../src/utils/geometry.cpp | 6 ++--- .../src/utils/utils.cpp | 6 ++--- .../test/test_calc_iou_functions.cpp | 8 +++---- .../test/test_geometry.cpp | 23 ++++++++++--------- .../test/test_pointpainting_fusion.cpp | 10 ++++---- .../test/test_utils.cpp | 10 ++++---- 33 files changed, 170 insertions(+), 169 deletions(-) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/debugger.hpp (86%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/fusion_node.hpp (93%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/pointpainting_fusion/node.hpp (80%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/pointpainting_fusion/pointcloud_densification.hpp (82%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp (72%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/pointpainting_fusion/preprocess_kernel.hpp (81%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp (73%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/roi_cluster_fusion/node.hpp (84%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/roi_detected_object_fusion/node.hpp (82%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp (77%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp (82%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/utils/geometry.hpp (87%) rename perception/image_projection_based_fusion/include/{ => autoware}/image_projection_based_fusion/utils/utils.hpp (89%) mode change 100755 => 100644 perception/image_projection_based_fusion/src/pointpainting_fusion/voxel_generator.cpp diff --git a/perception/image_projection_based_fusion/CMakeLists.txt b/perception/image_projection_based_fusion/CMakeLists.txt index 6be7defe422c3..48c285eeb3d88 100644 --- a/perception/image_projection_based_fusion/CMakeLists.txt +++ b/perception/image_projection_based_fusion/CMakeLists.txt @@ -32,22 +32,22 @@ target_link_libraries(${PROJECT_NAME} ) rclcpp_components_register_node(${PROJECT_NAME} - PLUGIN "image_projection_based_fusion::RoiDetectedObjectFusionNode" + PLUGIN "autoware::image_projection_based_fusion::RoiDetectedObjectFusionNode" EXECUTABLE roi_detected_object_fusion_node ) rclcpp_components_register_node(${PROJECT_NAME} - PLUGIN "image_projection_based_fusion::RoiClusterFusionNode" + PLUGIN "autoware::image_projection_based_fusion::RoiClusterFusionNode" EXECUTABLE roi_cluster_fusion_node ) rclcpp_components_register_node(${PROJECT_NAME} - PLUGIN "image_projection_based_fusion::SegmentPointCloudFusionNode" + PLUGIN "autoware::image_projection_based_fusion::SegmentPointCloudFusionNode" EXECUTABLE segmentation_pointcloud_fusion_node ) rclcpp_components_register_node(${PROJECT_NAME} - PLUGIN "image_projection_based_fusion::RoiPointCloudFusionNode" + PLUGIN "autoware::image_projection_based_fusion::RoiPointCloudFusionNode" EXECUTABLE roi_pointcloud_fusion_node ) @@ -149,7 +149,7 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) ) rclcpp_components_register_node(pointpainting_lib - PLUGIN "image_projection_based_fusion::PointPaintingFusionNode" + PLUGIN "autoware::image_projection_based_fusion::PointPaintingFusionNode" EXECUTABLE pointpainting_fusion_node ) diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/debugger.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/debugger.hpp similarity index 86% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/debugger.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/debugger.hpp index e4b1913effed5..ba7f8b6ca3496 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/debugger.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/debugger.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__DEBUGGER_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__DEBUGGER_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__DEBUGGER_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__DEBUGGER_HPP_ #define EIGEN_MPL2_ONLY @@ -31,7 +31,7 @@ #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { using sensor_msgs::msg::RegionOfInterest; @@ -66,6 +66,6 @@ class Debugger std::size_t image_buffer_size_; }; -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__DEBUGGER_HPP_ +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__DEBUGGER_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/fusion_node.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp similarity index 93% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/fusion_node.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp index df8bf66433300..d4e498212ac36 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/fusion_node.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/fusion_node.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__FUSION_NODE_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__FUSION_NODE_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__FUSION_NODE_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__FUSION_NODE_HPP_ +#include #include #include -#include #include #include @@ -44,7 +44,7 @@ #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { using autoware_perception_msgs::msg::DetectedObject; using autoware_perception_msgs::msg::DetectedObjects; @@ -142,6 +142,6 @@ class FusionNode : public rclcpp::Node std::unique_ptr debug_publisher_; }; -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__FUSION_NODE_HPP_ +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__FUSION_NODE_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/node.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp similarity index 80% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/node.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp index 756cb4224bc20..964624614ec57 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/node.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__NODE_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__NODE_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__NODE_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__NODE_HPP_ -#include "image_projection_based_fusion/fusion_node.hpp" -#include "image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp" +#include "autoware/image_projection_based_fusion/fusion_node.hpp" +#include "autoware/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp" #include "lidar_centerpoint/postprocess/non_maximum_suppression.hpp" -#include -#include +#include +#include #include #include @@ -29,7 +29,7 @@ #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { using Label = autoware_perception_msgs::msg::ObjectClassification; @@ -78,5 +78,5 @@ class PointPaintingFusionNode bool out_of_scope(const DetectedObjects & obj); }; -} // namespace image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__NODE_HPP_ +} // namespace autoware::image_projection_based_fusion +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__NODE_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointcloud_densification.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/pointcloud_densification.hpp similarity index 82% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointcloud_densification.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/pointcloud_densification.hpp index 03609eb18e689..845db88467c15 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointcloud_densification.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/pointcloud_densification.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTCLOUD_DENSIFICATION_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTCLOUD_DENSIFICATION_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTCLOUD_DENSIFICATION_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTCLOUD_DENSIFICATION_HPP_ #include #include @@ -29,7 +29,7 @@ #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { struct PointCloudWithTransform { @@ -67,6 +67,7 @@ class PointCloudDensification std::list pointcloud_cache_; }; -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTCLOUD_DENSIFICATION_HPP_ +// NOLINTNEXTLINE(whitespace/line_length) +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTCLOUD_DENSIFICATION_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp similarity index 72% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp index c8318f79bbeed..daf925c2ff9f3 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTPAINTING_TRT_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTPAINTING_TRT_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTPAINTING_TRT_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTPAINTING_TRT_HPP_ -#include +#include #include #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { class PointPaintingTRT : public centerpoint::CenterPointTRT { @@ -40,6 +40,6 @@ class PointPaintingTRT : public centerpoint::CenterPointTRT std::unique_ptr vg_ptr_pp_{nullptr}; }; -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTPAINTING_TRT_HPP_ +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__POINTPAINTING_TRT_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/preprocess_kernel.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/preprocess_kernel.hpp similarity index 81% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/preprocess_kernel.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/preprocess_kernel.hpp index 897609fa3d86d..70a9fbb4a2244 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/preprocess_kernel.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/preprocess_kernel.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__PREPROCESS_KERNEL_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__PREPROCESS_KERNEL_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__PREPROCESS_KERNEL_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__PREPROCESS_KERNEL_HPP_ #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { cudaError_t generateVoxels_random_launch( const float * points, size_t points_size, float min_x_range, float max_x_range, float min_y_range, @@ -38,6 +38,6 @@ cudaError_t generateFeatures_launch( const float range_min_y, const float range_min_z, float * features, const std::size_t encoder_in_feature_size, cudaStream_t stream); -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__PREPROCESS_KERNEL_HPP_ +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__PREPROCESS_KERNEL_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp similarity index 73% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp index 4cdca8e49ac7e..f303a98824ece 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ -#include +#include #include #include @@ -23,7 +23,7 @@ #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { class VoxelGenerator @@ -45,6 +45,6 @@ class VoxelGenerator std::array grid_size_; std::array recip_voxel_size_; }; -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/roi_cluster_fusion/node.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_cluster_fusion/node.hpp similarity index 84% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/roi_cluster_fusion/node.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_cluster_fusion/node.hpp index b9471f2f3b78e..abececee35c25 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/roi_cluster_fusion/node.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_cluster_fusion/node.hpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__ROI_CLUSTER_FUSION__NODE_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__ROI_CLUSTER_FUSION__NODE_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__ROI_CLUSTER_FUSION__NODE_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__ROI_CLUSTER_FUSION__NODE_HPP_ -#include "image_projection_based_fusion/fusion_node.hpp" +#include "autoware/image_projection_based_fusion/fusion_node.hpp" #include #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { const std::map IOU_MODE_MAP{{"iou", 0}, {"iou_x", 1}, {"iou_y", 2}}; @@ -61,6 +61,6 @@ class RoiClusterFusionNode // bool CheckUnknown(const DetectedObjectsWithFeature & obj); }; -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__ROI_CLUSTER_FUSION__NODE_HPP_ +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__ROI_CLUSTER_FUSION__NODE_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/roi_detected_object_fusion/node.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_detected_object_fusion/node.hpp similarity index 82% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/roi_detected_object_fusion/node.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_detected_object_fusion/node.hpp index d61ced593de78..ea15a2df5efe2 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/roi_detected_object_fusion/node.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_detected_object_fusion/node.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__ROI_DETECTED_OBJECT_FUSION__NODE_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__ROI_DETECTED_OBJECT_FUSION__NODE_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__ROI_DETECTED_OBJECT_FUSION__NODE_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__ROI_DETECTED_OBJECT_FUSION__NODE_HPP_ +#include "autoware/image_projection_based_fusion/fusion_node.hpp" #include "autoware/universe_utils/ros/debug_publisher.hpp" -#include "image_projection_based_fusion/fusion_node.hpp" -#include +#include #include "autoware_perception_msgs/msg/object_classification.hpp" @@ -26,7 +26,7 @@ #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { using sensor_msgs::msg::RegionOfInterest; @@ -74,6 +74,6 @@ class RoiDetectedObjectFusionNode ignored_object_flags_map_; }; -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__ROI_DETECTED_OBJECT_FUSION__NODE_HPP_ +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__ROI_DETECTED_OBJECT_FUSION__NODE_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp similarity index 77% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp index 4d4fd8d2dac42..c7cad2b5a64d0 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp @@ -12,16 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__ROI_POINTCLOUD_FUSION__NODE_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__ROI_POINTCLOUD_FUSION__NODE_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__ROI_POINTCLOUD_FUSION__NODE_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__ROI_POINTCLOUD_FUSION__NODE_HPP_ -#include "image_projection_based_fusion/fusion_node.hpp" +#include "autoware/image_projection_based_fusion/fusion_node.hpp" -#include +#include #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { class RoiPointCloudFusionNode : public FusionNode @@ -52,5 +52,5 @@ class RoiPointCloudFusionNode bool out_of_scope(const DetectedObjectWithFeature & obj); }; -} // namespace image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__ROI_POINTCLOUD_FUSION__NODE_HPP_ +} // namespace autoware::image_projection_based_fusion +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__ROI_POINTCLOUD_FUSION__NODE_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp similarity index 82% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp index 89b33775f7898..c57d455300125 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp @@ -12,12 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__SEGMENTATION_POINTCLOUD_FUSION__NODE_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__SEGMENTATION_POINTCLOUD_FUSION__NODE_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__SEGMENTATION_POINTCLOUD_FUSION__NODE_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__SEGMENTATION_POINTCLOUD_FUSION__NODE_HPP_ -#include "image_projection_based_fusion/fusion_node.hpp" +#include "autoware/image_projection_based_fusion/fusion_node.hpp" -#include +#include #include #include @@ -29,7 +29,7 @@ #include #endif -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { class SegmentPointCloudFusionNode : public FusionNode { @@ -66,5 +66,5 @@ class SegmentPointCloudFusionNode : public FusionNode -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { using autoware_perception_msgs::msg::Shape; @@ -66,6 +66,6 @@ bool is_inside( void sanitizeROI(sensor_msgs::msg::RegionOfInterest & roi, const int width, const int height); -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__UTILS__GEOMETRY_HPP_ +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__UTILS__GEOMETRY_HPP_ diff --git a/perception/image_projection_based_fusion/include/image_projection_based_fusion/utils/utils.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/utils/utils.hpp similarity index 89% rename from perception/image_projection_based_fusion/include/image_projection_based_fusion/utils/utils.hpp rename to perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/utils/utils.hpp index 107e0d6c179a8..702b085dd31d7 100644 --- a/perception/image_projection_based_fusion/include/image_projection_based_fusion/utils/utils.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/utils/utils.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef IMAGE_PROJECTION_BASED_FUSION__UTILS__UTILS_HPP_ -#define IMAGE_PROJECTION_BASED_FUSION__UTILS__UTILS_HPP_ +#ifndef AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__UTILS__UTILS_HPP_ +#define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__UTILS__UTILS_HPP_ #define EIGEN_MPL2_ONLY @@ -32,7 +32,7 @@ #include #endif -#include "image_projection_based_fusion/fusion_node.hpp" +#include "autoware/image_projection_based_fusion/fusion_node.hpp" #include #include @@ -51,7 +51,7 @@ #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { using PointCloud = pcl::PointCloud; @@ -92,6 +92,6 @@ void addShapeAndKinematic( const pcl::PointCloud & cluster, tier4_perception_msgs::msg::DetectedObjectWithFeature & feature_obj); -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion -#endif // IMAGE_PROJECTION_BASED_FUSION__UTILS__UTILS_HPP_ +#endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__UTILS__UTILS_HPP_ diff --git a/perception/image_projection_based_fusion/launch/pointpainting_fusion.launch.xml b/perception/image_projection_based_fusion/launch/pointpainting_fusion.launch.xml index d2f803f13d376..ed583c7a46b0a 100644 --- a/perception/image_projection_based_fusion/launch/pointpainting_fusion.launch.xml +++ b/perception/image_projection_based_fusion/launch/pointpainting_fusion.launch.xml @@ -45,7 +45,7 @@ - + diff --git a/perception/image_projection_based_fusion/package.xml b/perception/image_projection_based_fusion/package.xml index 00ffdc8fd5528..f7a95ae4c70d6 100644 --- a/perception/image_projection_based_fusion/package.xml +++ b/perception/image_projection_based_fusion/package.xml @@ -26,12 +26,9 @@ lidar_centerpoint message_filters object_recognition_utils - pcl_conversions - pcl_ros rclcpp rclcpp_components sensor_msgs - tf2 tf2_eigen tf2_ros tf2_sensor_msgs diff --git a/perception/image_projection_based_fusion/src/debugger.cpp b/perception/image_projection_based_fusion/src/debugger.cpp index a51c23a77aac6..90952f3f6a8f5 100644 --- a/perception/image_projection_based_fusion/src/debugger.cpp +++ b/perception/image_projection_based_fusion/src/debugger.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/debugger.hpp" +#include "autoware/image_projection_based_fusion/debugger.hpp" #if __has_include() #include @@ -36,7 +36,7 @@ void drawRoiOnImage( } // namespace -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { Debugger::Debugger( rclcpp::Node * node_ptr, const std::size_t image_num, const std::size_t image_buffer_size, @@ -154,4 +154,4 @@ void Debugger::publishImage(const std::size_t image_id, const rclcpp::Time & sta } } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion diff --git a/perception/image_projection_based_fusion/src/fusion_node.cpp b/perception/image_projection_based_fusion/src/fusion_node.cpp index 20273fd1de547..6cc4a0c23adcc 100644 --- a/perception/image_projection_based_fusion/src/fusion_node.cpp +++ b/perception/image_projection_based_fusion/src/fusion_node.cpp @@ -14,7 +14,7 @@ #define EIGEN_MPL2_ONLY -#include "image_projection_based_fusion/fusion_node.hpp" +#include "autoware/image_projection_based_fusion/fusion_node.hpp" #include #include @@ -37,7 +37,7 @@ // static int publish_counter = 0; static double processing_time_ms = 0; -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { template @@ -437,4 +437,4 @@ template class FusionNode< template class FusionNode; template class FusionNode; template class FusionNode; -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion diff --git a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp index 6947331d6bcfa..af6901f8988b3 100644 --- a/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/pointpainting_fusion/node.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/pointpainting_fusion/node.hpp" +#include "autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp" #include "autoware_point_types/types.hpp" +#include +#include #include #include -#include -#include #include #include #include @@ -42,7 +42,7 @@ Eigen::Affine3f _transformToEigen(const geometry_msgs::msg::Transform & t) } // namespace -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { inline bool isVehicle(int label2d) @@ -418,7 +418,7 @@ bool PointPaintingFusionNode::out_of_scope(__attribute__((unused)) const Detecte { return false; } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion #include -RCLCPP_COMPONENTS_REGISTER_NODE(image_projection_based_fusion::PointPaintingFusionNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::image_projection_based_fusion::PointPaintingFusionNode) diff --git a/perception/image_projection_based_fusion/src/pointpainting_fusion/pointcloud_densification.cpp b/perception/image_projection_based_fusion/src/pointpainting_fusion/pointcloud_densification.cpp index 9edf6a73cd59b..291baa392ecbc 100644 --- a/perception/image_projection_based_fusion/src/pointpainting_fusion/pointcloud_densification.cpp +++ b/perception/image_projection_based_fusion/src/pointpainting_fusion/pointcloud_densification.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/pointpainting_fusion/pointcloud_densification.hpp" +#include "autoware/image_projection_based_fusion/pointpainting_fusion/pointcloud_densification.hpp" #include @@ -54,7 +54,7 @@ Eigen::Affine3f transformToEigen(const geometry_msgs::msg::Transform & t) } // namespace -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { PointCloudDensification::PointCloudDensification(const centerpoint::DensificationParam & param) : param_(param) @@ -100,4 +100,4 @@ void PointCloudDensification::dequeue() } } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion diff --git a/perception/image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp b/perception/image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp index c1e431ed83c99..59c747c8f1cfa 100644 --- a/perception/image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp +++ b/perception/image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp" +#include "autoware/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp" +#include #include -#include #include #include @@ -24,7 +24,7 @@ #include #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { PointPaintingTRT::PointPaintingTRT( const centerpoint::NetworkParam & encoder_param, const centerpoint::NetworkParam & head_param, @@ -81,4 +81,4 @@ bool PointPaintingTRT::preprocess( return true; } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion diff --git a/perception/image_projection_based_fusion/src/pointpainting_fusion/preprocess_kernel.cu b/perception/image_projection_based_fusion/src/pointpainting_fusion/preprocess_kernel.cu index 68e08ac61a569..82ab7e954fad1 100644 --- a/perception/image_projection_based_fusion/src/pointpainting_fusion/preprocess_kernel.cu +++ b/perception/image_projection_based_fusion/src/pointpainting_fusion/preprocess_kernel.cu @@ -28,7 +28,7 @@ * limitations under the License. */ -#include "image_projection_based_fusion/pointpainting_fusion/preprocess_kernel.hpp" +#include "autoware/image_projection_based_fusion/pointpainting_fusion/preprocess_kernel.hpp" #include // #include @@ -55,7 +55,7 @@ std::size_t divup(const std::size_t a, const std::size_t b) } // namespace -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { __global__ void generateVoxels_random_kernel( const float * points, size_t points_size, float min_x_range, float max_x_range, float min_y_range, @@ -269,4 +269,4 @@ cudaError_t generateFeatures_launch( return cudaGetLastError(); } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion diff --git a/perception/image_projection_based_fusion/src/pointpainting_fusion/voxel_generator.cpp b/perception/image_projection_based_fusion/src/pointpainting_fusion/voxel_generator.cpp old mode 100755 new mode 100644 index cb3fc33d3e022..b0c6d0f888b08 --- a/perception/image_projection_based_fusion/src/pointpainting_fusion/voxel_generator.cpp +++ b/perception/image_projection_based_fusion/src/pointpainting_fusion/voxel_generator.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp" +#include "autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp" #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { VoxelGenerator::VoxelGenerator( @@ -83,4 +83,4 @@ size_t VoxelGenerator::generateSweepPoints(std::vector & points) return point_counter; } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion diff --git a/perception/image_projection_based_fusion/src/roi_cluster_fusion/node.cpp b/perception/image_projection_based_fusion/src/roi_cluster_fusion/node.cpp index 51987cbbcab84..d4d5de3cfd381 100644 --- a/perception/image_projection_based_fusion/src/roi_cluster_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/roi_cluster_fusion/node.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/roi_cluster_fusion/node.hpp" +#include "autoware/image_projection_based_fusion/roi_cluster_fusion/node.hpp" -#include -#include +#include +#include #include #include @@ -28,7 +28,7 @@ #include #endif -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { RoiClusterFusionNode::RoiClusterFusionNode(const rclcpp::NodeOptions & options) @@ -290,7 +290,7 @@ double RoiClusterFusionNode::cal_iou_by_mode( } } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion #include -RCLCPP_COMPONENTS_REGISTER_NODE(image_projection_based_fusion::RoiClusterFusionNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::image_projection_based_fusion::RoiClusterFusionNode) diff --git a/perception/image_projection_based_fusion/src/roi_detected_object_fusion/node.cpp b/perception/image_projection_based_fusion/src/roi_detected_object_fusion/node.cpp index 7d85ecb2f9200..e2197c148bcf9 100644 --- a/perception/image_projection_based_fusion/src/roi_detected_object_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/roi_detected_object_fusion/node.cpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/roi_detected_object_fusion/node.hpp" +#include "autoware/image_projection_based_fusion/roi_detected_object_fusion/node.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" -#include -#include +#include +#include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { RoiDetectedObjectFusionNode::RoiDetectedObjectFusionNode(const rclcpp::NodeOptions & options) @@ -324,7 +324,8 @@ void RoiDetectedObjectFusionNode::publish(const DetectedObjects & output_msg) ignored_object_flags_map_.erase(timestamp_nsec); } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion #include -RCLCPP_COMPONENTS_REGISTER_NODE(image_projection_based_fusion::RoiDetectedObjectFusionNode) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::image_projection_based_fusion::RoiDetectedObjectFusionNode) diff --git a/perception/image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp b/perception/image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp index 904e66cb53298..40406d6e420b7 100644 --- a/perception/image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/roi_pointcloud_fusion/node.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/roi_pointcloud_fusion/node.hpp" +#include "autoware/image_projection_based_fusion/roi_pointcloud_fusion/node.hpp" -#include "image_projection_based_fusion/utils/geometry.hpp" -#include "image_projection_based_fusion/utils/utils.hpp" +#include "autoware/image_projection_based_fusion/utils/geometry.hpp" +#include "autoware/image_projection_based_fusion/utils/utils.hpp" #ifdef ROS_DISTRO_GALACTIC #include @@ -27,7 +27,7 @@ #include "autoware/euclidean_cluster/utils.hpp" -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { RoiPointCloudFusionNode::RoiPointCloudFusionNode(const rclcpp::NodeOptions & options) : FusionNode( @@ -174,7 +174,7 @@ bool RoiPointCloudFusionNode::out_of_scope(__attribute__((unused)) { return false; } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion #include -RCLCPP_COMPONENTS_REGISTER_NODE(image_projection_based_fusion::RoiPointCloudFusionNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::image_projection_based_fusion::RoiPointCloudFusionNode) diff --git a/perception/image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp b/perception/image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp index 9a983252af436..5c93fa6c2fd1b 100644 --- a/perception/image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp +++ b/perception/image_projection_based_fusion/src/segmentation_pointcloud_fusion/node.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp" +#include "autoware/image_projection_based_fusion/segmentation_pointcloud_fusion/node.hpp" -#include "image_projection_based_fusion/utils/geometry.hpp" -#include "image_projection_based_fusion/utils/utils.hpp" +#include "autoware/image_projection_based_fusion/utils/geometry.hpp" +#include "autoware/image_projection_based_fusion/utils/utils.hpp" #ifdef ROS_DISTRO_GALACTIC #include @@ -25,7 +25,7 @@ #include #endif -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { SegmentPointCloudFusionNode::SegmentPointCloudFusionNode(const rclcpp::NodeOptions & options) : FusionNode("segmentation_pointcloud_fusion", options) @@ -155,7 +155,8 @@ bool SegmentPointCloudFusionNode::out_of_scope(__attribute__((unused)) { return false; } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion #include -RCLCPP_COMPONENTS_REGISTER_NODE(image_projection_based_fusion::SegmentPointCloudFusionNode) +RCLCPP_COMPONENTS_REGISTER_NODE( + autoware::image_projection_based_fusion::SegmentPointCloudFusionNode) diff --git a/perception/image_projection_based_fusion/src/utils/geometry.cpp b/perception/image_projection_based_fusion/src/utils/geometry.cpp index 29198280ec7b2..4bea6ac0fe713 100644 --- a/perception/image_projection_based_fusion/src/utils/geometry.cpp +++ b/perception/image_projection_based_fusion/src/utils/geometry.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/utils/geometry.hpp" +#include "autoware/image_projection_based_fusion/utils/geometry.hpp" #include -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { double calcIoU( @@ -204,4 +204,4 @@ void sanitizeROI(sensor_msgs::msg::RegionOfInterest & roi, const int width_, con } } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion diff --git a/perception/image_projection_based_fusion/src/utils/utils.cpp b/perception/image_projection_based_fusion/src/utils/utils.cpp index aeec2886a801a..0432242417e19 100644 --- a/perception/image_projection_based_fusion/src/utils/utils.cpp +++ b/perception/image_projection_based_fusion/src/utils/utils.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/utils/utils.hpp" +#include "autoware/image_projection_based_fusion/utils/utils.hpp" -namespace image_projection_based_fusion +namespace autoware::image_projection_based_fusion { Eigen::Vector2d calcRawImageProjectedPoint( const image_geometry::PinholeCameraModel & pinhole_camera_model, const cv::Point3d & point3d) @@ -277,4 +277,4 @@ pcl::PointXYZ getClosestPoint(const pcl::PointCloud & cluster) return closest_point; } -} // namespace image_projection_based_fusion +} // namespace autoware::image_projection_based_fusion diff --git a/perception/image_projection_based_fusion/test/test_calc_iou_functions.cpp b/perception/image_projection_based_fusion/test/test_calc_iou_functions.cpp index 1cddef44c0bac..8f2cf87d47bf2 100644 --- a/perception/image_projection_based_fusion/test/test_calc_iou_functions.cpp +++ b/perception/image_projection_based_fusion/test/test_calc_iou_functions.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/utils/geometry.hpp" +#include "autoware/image_projection_based_fusion/utils/geometry.hpp" #include -using image_projection_based_fusion::calcIoU; -using image_projection_based_fusion::calcIoUX; -using image_projection_based_fusion::calcIoUY; +using autoware::image_projection_based_fusion::calcIoU; +using autoware::image_projection_based_fusion::calcIoUX; +using autoware::image_projection_based_fusion::calcIoUY; TEST(GeometryTest, CalcIoU) { diff --git a/perception/image_projection_based_fusion/test/test_geometry.cpp b/perception/image_projection_based_fusion/test/test_geometry.cpp index eae5f7cef728c..cf3778e7a0c84 100644 --- a/perception/image_projection_based_fusion/test/test_geometry.cpp +++ b/perception/image_projection_based_fusion/test/test_geometry.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "image_projection_based_fusion/utils/geometry.hpp" +#include "autoware/image_projection_based_fusion/utils/geometry.hpp" #include @@ -37,7 +37,7 @@ TEST(objectToVertices, test_objectToVertices) shape.dimensions.z = 8.0; std::vector vertices; - image_projection_based_fusion::objectToVertices(pose, shape, vertices); + autoware::image_projection_based_fusion::objectToVertices(pose, shape, vertices); EXPECT_FALSE(vertices.empty()); EXPECT_NEAR(vertices.at(0).x(), 1.2320508075688772935274, 1e-6); @@ -57,7 +57,7 @@ TEST(objectToVertices, test_objectToVertices) shape.dimensions.z = 8.0; std::vector vertices; - image_projection_based_fusion::objectToVertices(pose, shape, vertices); + autoware::image_projection_based_fusion::objectToVertices(pose, shape, vertices); EXPECT_FALSE(vertices.empty()); EXPECT_NEAR(vertices.at(0).x(), 2.732050807568877293528, 1e-6); @@ -74,7 +74,7 @@ TEST(objectToVertices, test_objectToVertices) shape.type = 2; std::vector vertices; - image_projection_based_fusion::objectToVertices(pose, shape, vertices); + autoware::image_projection_based_fusion::objectToVertices(pose, shape, vertices); EXPECT_TRUE(vertices.empty()); } @@ -93,7 +93,8 @@ TEST(transformPoints, test_transformPoints) Eigen::Affine3d affine_transform = rotation * translation; std::vector output_points; - image_projection_based_fusion::transformPoints(input_points, affine_transform, output_points); + autoware::image_projection_based_fusion::transformPoints( + input_points, affine_transform, output_points); EXPECT_FALSE(output_points.empty()); EXPECT_NEAR(output_points.at(0).x(), 0.7071067811865475244008, 1e-6); @@ -118,7 +119,7 @@ TEST(is_inside, test_is_inside) inner.width = 299; const bool inside_flag = - image_projection_based_fusion::is_inside(outer, inner, outer_offset_scale); + autoware::image_projection_based_fusion::is_inside(outer, inner, outer_offset_scale); EXPECT_TRUE(inside_flag); } @@ -130,7 +131,7 @@ TEST(is_inside, test_is_inside) inner.y_offset = 39; const bool inside_flag = - image_projection_based_fusion::is_inside(outer, inner, outer_offset_scale); + autoware::image_projection_based_fusion::is_inside(outer, inner, outer_offset_scale); EXPECT_FALSE(inside_flag); } @@ -144,7 +145,7 @@ TEST(is_inside, test_is_inside) inner.width = 301; const bool inside_flag = - image_projection_based_fusion::is_inside(outer, inner, outer_offset_scale); + autoware::image_projection_based_fusion::is_inside(outer, inner, outer_offset_scale); EXPECT_FALSE(inside_flag); } @@ -162,7 +163,7 @@ TEST(sanitizeROI, test_sanitizeROI) int height = 400; // image height int width = 300; // image width - image_projection_based_fusion::sanitizeROI(roi, width, height); + autoware::image_projection_based_fusion::sanitizeROI(roi, width, height); EXPECT_EQ(roi.height, 200); EXPECT_EQ(roi.width, 100); @@ -176,7 +177,7 @@ TEST(sanitizeROI, test_sanitizeROI) int height = 100; int width = 50; - image_projection_based_fusion::sanitizeROI(roi, width, height); + autoware::image_projection_based_fusion::sanitizeROI(roi, width, height); EXPECT_EQ(roi.height, 0); EXPECT_EQ(roi.width, 0); @@ -192,7 +193,7 @@ TEST(sanitizeROI, test_sanitizeROI) int height = 100; int width = 50; - image_projection_based_fusion::sanitizeROI(roi, width, height); + autoware::image_projection_based_fusion::sanitizeROI(roi, width, height); EXPECT_EQ(roi.height, 80); EXPECT_EQ(roi.width, 40); diff --git a/perception/image_projection_based_fusion/test/test_pointpainting_fusion.cpp b/perception/image_projection_based_fusion/test/test_pointpainting_fusion.cpp index 1c69273667997..6c7a692f48576 100644 --- a/perception/image_projection_based_fusion/test/test_pointpainting_fusion.cpp +++ b/perception/image_projection_based_fusion/test/test_pointpainting_fusion.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include @@ -30,27 +30,27 @@ sensor_msgs::msg::RegionOfInterest createRoi( TEST(isInsideBboxTest, Inside) { const sensor_msgs::msg::RegionOfInterest roi = createRoi(20, 20, 10, 10); - bool result = image_projection_based_fusion::isInsideBbox(25.0, 25.0, roi, 1.0); + bool result = autoware::image_projection_based_fusion::isInsideBbox(25.0, 25.0, roi, 1.0); EXPECT_TRUE(result); } TEST(isInsideBboxTest, Border) { const sensor_msgs::msg::RegionOfInterest roi = createRoi(20, 20, 10, 10); - bool result = image_projection_based_fusion::isInsideBbox(20.0, 30.0, roi, 1.0); + bool result = autoware::image_projection_based_fusion::isInsideBbox(20.0, 30.0, roi, 1.0); EXPECT_TRUE(result); } TEST(isInsideBboxTest, Outside) { const sensor_msgs::msg::RegionOfInterest roi = createRoi(20, 20, 10, 10); - bool result = image_projection_based_fusion::isInsideBbox(15.0, 15.0, roi, 1.0); + bool result = autoware::image_projection_based_fusion::isInsideBbox(15.0, 15.0, roi, 1.0); EXPECT_FALSE(result); } TEST(isInsideBboxTest, Zero) { const sensor_msgs::msg::RegionOfInterest roi = createRoi(0, 0, 0, 0); - bool result = image_projection_based_fusion::isInsideBbox(0.0, 0.0, roi, 1.0); + bool result = autoware::image_projection_based_fusion::isInsideBbox(0.0, 0.0, roi, 1.0); EXPECT_TRUE(result); } diff --git a/perception/image_projection_based_fusion/test/test_utils.cpp b/perception/image_projection_based_fusion/test/test_utils.cpp index e578ce1987cc3..5fbd313d75dfe 100644 --- a/perception/image_projection_based_fusion/test/test_utils.cpp +++ b/perception/image_projection_based_fusion/test/test_utils.cpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include #include -#include #include @@ -65,7 +65,7 @@ TEST(UtilsTest, closest_cluster_empty_cluster_test_case1) double cluster_2d_tolerance = 0.5; int min_cluster_size = 3; sensor_msgs::msg::PointCloud2 output_cluster; - image_projection_based_fusion::closest_cluster( + autoware::image_projection_based_fusion::closest_cluster( pointcloud, cluster_2d_tolerance, min_cluster_size, center, output_cluster); EXPECT_EQ(output_cluster.data.size(), std::size_t(0)); } @@ -96,7 +96,7 @@ TEST(UtilsTest, closest_cluster_test_case2) double cluster_2d_tolerance = 0.5; int min_cluster_size = 3; sensor_msgs::msg::PointCloud2 output_cluster; - image_projection_based_fusion::closest_cluster( + autoware::image_projection_based_fusion::closest_cluster( pointcloud, cluster_2d_tolerance, min_cluster_size, center, output_cluster); EXPECT_EQ(output_cluster.data.size(), dummy_x.size() * pointcloud.point_step); } @@ -127,7 +127,7 @@ TEST(UtilsTest, closest_cluster_test_case3) double cluster_2d_tolerance = 0.5; int min_cluster_size = 3; sensor_msgs::msg::PointCloud2 output_cluster; - image_projection_based_fusion::closest_cluster( + autoware::image_projection_based_fusion::closest_cluster( pointcloud, cluster_2d_tolerance, min_cluster_size, center, output_cluster); EXPECT_EQ(output_cluster.data.size(), 3 * pointcloud.point_step); } @@ -158,7 +158,7 @@ TEST(UtilsTest, closest_cluster_test_case4) double cluster_2d_tolerance = 0.5; int min_cluster_size = 3; sensor_msgs::msg::PointCloud2 output_cluster; - image_projection_based_fusion::closest_cluster( + autoware::image_projection_based_fusion::closest_cluster( pointcloud, cluster_2d_tolerance, min_cluster_size, center, output_cluster); EXPECT_EQ(output_cluster.data.size(), 6 * pointcloud.point_step); } From db98b6bc2be1140992184e38455be67f5afc02ed Mon Sep 17 00:00:00 2001 From: Boyang <144167190+tby-udel@users.noreply.github.com> Date: Thu, 18 Jul 2024 01:33:57 -0400 Subject: [PATCH 223/306] refactor(multi_object_tracker): rework parameters (#7333) * Refractored the parameters, build the schema file, updated the readme file. Signed-off-by: Boyang * style(pre-commit): autofix --------- Signed-off-by: Boyang Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- perception/multi_object_tracker/README.md | 39 ++---- .../data_association_matrix.schema.json | 74 +++++++++++ .../schema/input_channels.schema.json | 80 ++++++++++++ .../multi_object_tracker_node.schema.json | 116 ++++++++++++++++++ .../schema/simulation_tracker.schema.json | 62 ++++++++++ 5 files changed, 339 insertions(+), 32 deletions(-) create mode 100644 perception/multi_object_tracker/schema/data_association_matrix.schema.json create mode 100644 perception/multi_object_tracker/schema/input_channels.schema.json create mode 100644 perception/multi_object_tracker/schema/multi_object_tracker_node.schema.json create mode 100644 perception/multi_object_tracker/schema/simulation_tracker.schema.json diff --git a/perception/multi_object_tracker/README.md b/perception/multi_object_tracker/README.md index b5d965e1232ed..447c74d9b3450 100644 --- a/perception/multi_object_tracker/README.md +++ b/perception/multi_object_tracker/README.md @@ -65,41 +65,16 @@ Multiple inputs are pre-defined in the input channel parameters (described below ### Input Channel parameters -Available input channels are defined in [input_channels.param.yaml](config/input_channels.param.yaml). - -| Name | Type | Description | -| --------------------------------- | ------------------------------------------------ | ------------------------------------- | -| `` | | the name of channel | -| `.topic` | `autoware_perception_msgs::msg::DetectedObjects` | detected objects | -| `.can_spawn_new_tracker` | `bool` | a switch allow to spawn a new tracker | -| `.optional.name` | `std::string` | channel name for analysis | -| `.optional.short_name` | `std::string` | short name for visualization | +{{ json_to_markdown("perception/multi_object_tracker/schema/input_channels.schema.json") }} ### Core Parameters -Node parameters are defined in [multi_object_tracker_node.param.yaml](config/multi_object_tracker_node.param.yaml) and association parameters are defined in [data_association_matrix.param.yaml](config/data_association_matrix.param.yaml). - -#### Node parameters - -| Name | Type | Description | -| --------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------- | -| `***_tracker` | string | EKF tracker name for each class | -| `world_frame_id` | double | object kinematics definition frame | -| `enable_delay_compensation` | bool | if True, tracker use timers to schedule publishers and use prediction step to extrapolate object state at desired timestamp | -| `publish_rate` | double | Timer frequency to output with delay compensation | -| `publish_processing_time` | bool | enable to publish debug message of process time information | -| `publish_tentative_objects` | bool | enable to publish tentative tracked objects, which have lower confidence | -| `publish_debug_markers` | bool | enable to publish debug markers, which indicates association of multi-inputs, existence probability of each detection | - -#### Association parameters - -| Name | Type | Description | -| ------------------- | ------ | ------------------------------------------- | -| `can_assign_matrix` | double | Assignment table for data association | -| `max_dist_matrix` | double | Maximum distance table for data association | -| `max_area_matrix` | double | Maximum area table for data association | -| `min_area_matrix` | double | Minimum area table for data association | -| `max_rad_matrix` | double | Maximum angle table for data association | +{{ json_to_markdown("perception/multi_object_tracker/schema/multi_object_tracker_node.schema.json") }} +{{ json_to_markdown("perception/multi_object_tracker/schema/data_association_matrix.schema.json") }} + +#### Simulation parameters + +{{ json_to_markdown("perception/multi_object_tracker/schema/simulation_tracker.schema.json") }} ## Assumptions / Known limits diff --git a/perception/multi_object_tracker/schema/data_association_matrix.schema.json b/perception/multi_object_tracker/schema/data_association_matrix.schema.json new file mode 100644 index 0000000000000..daf9d9f957b7c --- /dev/null +++ b/perception/multi_object_tracker/schema/data_association_matrix.schema.json @@ -0,0 +1,74 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Data Association Matrix", + "type": "object", + "definitions": { + "data_association_matrix": { + "type": "object", + "properties": { + "can_assign_matrix": { + "type": "array", + "description": "Assignment table for data association.", + "items": { + "type": "integer" + } + }, + "max_dist_matrix": { + "type": "array", + "description": "Maximum distance table for data association.", + "items": { + "type": "number" + } + }, + "max_area_matrix": { + "type": "array", + "description": "Maximum area table for data association.", + "items": { + "type": "number" + } + }, + "min_area_matrix": { + "type": "array", + "description": "Minimum area table for data association.", + "items": { + "type": "number" + } + }, + "max_rad_matrix": { + "type": "array", + "description": "Maximum angle table for data association.", + "items": { + "type": "number" + } + }, + "min_iou_matrix": { + "type": "array", + "description": "A matrix that represents the minimum Intersection over Union (IoU) limit allowed for assignment.", + "items": { + "type": "number" + } + } + }, + "required": [ + "can_assign_matrix", + "max_dist_matrix", + "max_area_matrix", + "min_area_matrix", + "max_rad_matrix", + "min_iou_matrix" + ] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/data_association_matrix" + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/perception/multi_object_tracker/schema/input_channels.schema.json b/perception/multi_object_tracker/schema/input_channels.schema.json new file mode 100644 index 0000000000000..3c3da4d3f70a0 --- /dev/null +++ b/perception/multi_object_tracker/schema/input_channels.schema.json @@ -0,0 +1,80 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Input Channels", + "type": "object", + "definitions": { + "input_channel": { + "type": "object", + "properties": { + "topic": { + "type": "string", + "description": "The ROS topic name for the input channel." + }, + "can_spawn_new_tracker": { + "type": "boolean", + "description": "Indicates if the input channel can spawn new trackers." + }, + "optional": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the input channel." + }, + "short_name": { + "type": "string", + "description": "The short name of the input channel." + } + } + } + }, + "required": ["topic", "can_spawn_new_tracker"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "type": "object", + "properties": { + "input_channels": { + "type": "object", + "properties": { + "detected_objects": { "$ref": "#/definitions/input_channel" }, + "lidar_clustering": { "$ref": "#/definitions/input_channel" }, + "lidar_centerpoint": { "$ref": "#/definitions/input_channel" }, + "lidar_centerpoint_validated": { "$ref": "#/definitions/input_channel" }, + "lidar_apollo": { "$ref": "#/definitions/input_channel" }, + "lidar_apollo_validated": { "$ref": "#/definitions/input_channel" }, + "lidar_pointpainitng": { "$ref": "#/definitions/input_channel" }, + "lidar_pointpainting_validated": { "$ref": "#/definitions/input_channel" }, + "camera_lidar_fusion": { "$ref": "#/definitions/input_channel" }, + "detection_by_tracker": { "$ref": "#/definitions/input_channel" }, + "radar": { "$ref": "#/definitions/input_channel" }, + "radar_far": { "$ref": "#/definitions/input_channel" } + }, + "required": [ + "detected_objects", + "lidar_clustering", + "lidar_centerpoint", + "lidar_centerpoint_validated", + "lidar_apollo", + "lidar_apollo_validated", + "lidar_pointpainitng", + "lidar_pointpainting_validated", + "camera_lidar_fusion", + "detection_by_tracker", + "radar", + "radar_far" + ] + } + }, + "required": ["input_channels"] + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/perception/multi_object_tracker/schema/multi_object_tracker_node.schema.json b/perception/multi_object_tracker/schema/multi_object_tracker_node.schema.json new file mode 100644 index 0000000000000..a40eb12d99b38 --- /dev/null +++ b/perception/multi_object_tracker/schema/multi_object_tracker_node.schema.json @@ -0,0 +1,116 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Multi Object Tracker Node", + "type": "object", + "definitions": { + "multi_object_tracker_node": { + "type": "object", + "properties": { + "car_tracker": { + "type": "string", + "description": "Tracker model for car class.", + "default": "multi_vehicle_tracker" + }, + "truck_tracker": { + "type": "string", + "description": "Tracker model for truck class.", + "default": "multi_vehicle_tracker" + }, + "bus_tracker": { + "type": "string", + "description": "Tracker model for bus class.", + "default": "multi_vehicle_tracker" + }, + "trailer_tracker": { + "type": "string", + "description": "Tracker model for trailer class.", + "default": "multi_vehicle_tracker" + }, + "pedestrian_tracker": { + "type": "string", + "description": "Tracker model for pedestrian class.", + "default": "pedestrian_and_bicycle_tracker" + }, + "bicycle_tracker": { + "type": "string", + "description": "Tracker model for bicycle class.", + "default": "pedestrian_and_bicycle_tracker" + }, + "motorcycle_tracker": { + "type": "string", + "description": "Tracker model for motorcycle class.", + "default": "pedestrian_and_bicycle_tracker" + }, + "publish_rate": { + "type": "number", + "description": "Timer frequency to output with delay compensation.", + "default": 10.0 + }, + "world_frame_id": { + "type": "string", + "description": "Object kinematics definition frame.", + "default": "map" + }, + "enable_delay_compensation": { + "type": "boolean", + "description": "If True, tracker use timers to schedule publishers and use prediction step to extrapolate object state at desired timestamp.", + "default": false + }, + "publish_processing_time": { + "type": "boolean", + "description": "Enable to publish debug message of process time information.", + "default": false + }, + "publish_tentative_objects": { + "type": "boolean", + "description": "Enable to publish tentative tracked objects, which have lower confidence.", + "default": false + }, + "publish_debug_markers": { + "type": "boolean", + "description": "Enable to publish debug markers, which indicates association of multi-inputs, existence probability of each detection.", + "default": false + }, + "diagnostics_warn_delay": { + "type": "number", + "description": "Delay threshold for warning diagnostics in seconds.", + "default": 0.5 + }, + "diagnostics_error_delay": { + "type": "number", + "description": "Delay threshold for error diagnostics in seconds.", + "default": 1.0 + } + }, + "required": [ + "car_tracker", + "truck_tracker", + "bus_tracker", + "trailer_tracker", + "pedestrian_tracker", + "bicycle_tracker", + "motorcycle_tracker", + "publish_rate", + "world_frame_id", + "enable_delay_compensation", + "publish_processing_time", + "publish_tentative_objects", + "publish_debug_markers", + "diagnostics_warn_delay", + "diagnostics_error_delay" + ] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/multi_object_tracker_node" + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/perception/multi_object_tracker/schema/simulation_tracker.schema.json b/perception/multi_object_tracker/schema/simulation_tracker.schema.json new file mode 100644 index 0000000000000..88a4cf41bad08 --- /dev/null +++ b/perception/multi_object_tracker/schema/simulation_tracker.schema.json @@ -0,0 +1,62 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Simulation Tracker Node", + "type": "object", + "definitions": { + "simulation_tracker_node": { + "type": "object", + "properties": { + "car_tracker": { + "type": "string", + "description": "Tracker model for car class.", + "default": "pass_through_tracker" + }, + "truck_tracker": { + "type": "string", + "description": "Tracker model for truck class.", + "default": "pass_through_tracker" + }, + "bus_tracker": { + "type": "string", + "description": "Tracker model for bus class.", + "default": "pass_through_tracker" + }, + "pedestrian_tracker": { + "type": "string", + "description": "Tracker model for pedestrian class.", + "default": "pass_through_tracker" + }, + "bicycle_tracker": { + "type": "string", + "description": "Tracker model for bicycle class.", + "default": "pass_through_tracker" + }, + "motorcycle_tracker": { + "type": "string", + "description": "Tracker model for motorcycle class.", + "default": "pass_through_tracker" + } + }, + "required": [ + "car_tracker", + "truck_tracker", + "bus_tracker", + "pedestrian_tracker", + "bicycle_tracker", + "motorcycle_tracker" + ] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/simulation_tracker_node" + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} From 940d7545a480de97a03884f5c602d420e1c980d6 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:49:25 +0900 Subject: [PATCH 224/306] fix(static_obstacle_avoidance): avoid object behind unavoidance object if unavoidable is not on the path (#8066) Signed-off-by: satoshi-ota --- .../src/shift_line_generator.cpp | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp index c3a67eb074d73..5e58466fa4229 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/shift_line_generator.cpp @@ -239,10 +239,18 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline( const auto is_forward_object = [](const auto & object) { return object.longitudinal > 0.0; }; + const auto is_on_path = [this](const auto & object) { + const auto [overhang, point] = object.overhang_points.front(); + return std::abs(overhang) < 0.5 * data_->parameters.vehicle_width; + }; + const auto is_valid_shift_line = [](const auto & s) { return s.start_longitudinal > 0.0 && s.start_longitudinal < s.end_longitudinal; }; + ObjectDataArray unavoidable_objects; + + // target objects are sorted by longitudinal distance. AvoidOutlines outlines; for (auto & o : data.target_objects) { if (!o.avoid_margin.has_value()) { @@ -253,22 +261,22 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline( } else { o.info = ObjectInfo::INSUFFICIENT_DRIVABLE_SPACE; } - if (o.avoid_required && is_forward_object(o)) { + if (o.avoid_required && is_forward_object(o) && is_on_path(o)) { break; } else { + unavoidable_objects.push_back(o); continue; } } - const auto is_object_on_right = utils::static_obstacle_avoidance::isOnRight(o); const auto desire_shift_length = - helper_->getShiftLength(o, is_object_on_right, o.avoid_margin.value()); - if (utils::static_obstacle_avoidance::isSameDirectionShift( - is_object_on_right, desire_shift_length)) { + helper_->getShiftLength(o, isOnRight(o), o.avoid_margin.value()); + if (utils::static_obstacle_avoidance::isSameDirectionShift(isOnRight(o), desire_shift_length)) { o.info = ObjectInfo::SAME_DIRECTION_SHIFT; - if (o.avoid_required && is_forward_object(o)) { + if (o.avoid_required && is_forward_object(o) && is_on_path(o)) { break; } else { + unavoidable_objects.push_back(o); continue; } } @@ -276,13 +284,25 @@ AvoidOutlines ShiftLineGenerator::generateAvoidOutline( // calculate feasible shift length based on behavior policy const auto feasible_shift_profile = get_shift_profile(o, desire_shift_length); if (!feasible_shift_profile.has_value()) { - if (o.avoid_required && is_forward_object(o)) { + if (o.avoid_required && is_forward_object(o) && is_on_path(o)) { break; } else { + unavoidable_objects.push_back(o); continue; } } + // If there is an object that cannot be avoided, this module only avoids object on the same side + // as unavoidable object. + if (!unavoidable_objects.empty()) { + if (isOnRight(unavoidable_objects.front()) && !isOnRight(o)) { + break; + } + if (!isOnRight(unavoidable_objects.front()) && isOnRight(o)) { + break; + } + } + // use absolute dist for return-to-center, relative dist from current for avoiding. const auto feasible_return_distance = helper_->getMaxAvoidanceDistance(feasible_shift_profile.value().first); From 698acc3e9cf3c8f902c038b7393584fa965a6971 Mon Sep 17 00:00:00 2001 From: Boyang <144167190+tby-udel@users.noreply.github.com> Date: Thu, 18 Jul 2024 08:46:12 -0400 Subject: [PATCH 225/306] refactor(probabilistic_occupancy_grid_map): rework parameters (#7339) * refactor(probabilistic_occupancy_grid_map): rework parameters Signed-off-by: Boyang * style(pre-commit): autofix * Solved the CI's complainment Signed-off-by: Boyang --------- Signed-off-by: Boyang Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../README.md | 60 +---- ...rid_map_param.yaml => grid_map.param.yaml} | 0 .../binary_bayes_filter_updater.schema.json | 61 ++++++ .../schema/grid_map.schema.json | 76 +++++++ ...rscan_based_occupancy_grid_map.schema.json | 94 ++++++++ ...cloud_based_occupancy_grid_map.schema.json | 207 ++++++++++++++++++ ...cloud_based_occupancy_grid_map.schema.json | 150 +++++++++++++ ...chronized_grid_map_fusion_node.schema.json | 105 +++++++++ 8 files changed, 701 insertions(+), 52 deletions(-) rename perception/probabilistic_occupancy_grid_map/config/{grid_map_param.yaml => grid_map.param.yaml} (100%) create mode 100644 perception/probabilistic_occupancy_grid_map/schema/binary_bayes_filter_updater.schema.json create mode 100644 perception/probabilistic_occupancy_grid_map/schema/grid_map.schema.json create mode 100644 perception/probabilistic_occupancy_grid_map/schema/laserscan_based_occupancy_grid_map.schema.json create mode 100644 perception/probabilistic_occupancy_grid_map/schema/multi_lidar_pointcloud_based_occupancy_grid_map.schema.json create mode 100644 perception/probabilistic_occupancy_grid_map/schema/pointcloud_based_occupancy_grid_map.schema.json create mode 100644 perception/probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json diff --git a/perception/probabilistic_occupancy_grid_map/README.md b/perception/probabilistic_occupancy_grid_map/README.md index 97d66bf9f648c..4200836181276 100644 --- a/perception/probabilistic_occupancy_grid_map/README.md +++ b/perception/probabilistic_occupancy_grid_map/README.md @@ -19,58 +19,14 @@ You may need to choose `scan_origin_frame` and `gridmap_origin_frame` which mean ![image_for_frame_parameter_visualization](./image/gridmap_frame_settings.drawio.svg) -### Each config parameters - -Config parameters are managed in `config/*.yaml` and here shows its outline. - -- Pointcloud based occupancy grid map - -| Ros param name | Default value | -| -------------------------------------------- | ------------- | -| map_frame | "map" | -| base_link_frame | "base_link" | -| scan_origin_frame | "base_link" | -| gridmap_origin_frame | "base_link" | -| use_height_filter | true | -| enable_single_frame_mode | false | -| filter_obstacle_pointcloud_by_raw_pointcloud | false | -| map_length | 150.0 [m] | -| map_resolution | 0.5 [m] | -| use_projection | false | -| projection_dz_threshold | 0.01 | -| obstacle_separation_threshold | 1.0 | -| input_obstacle_pointcloud | true | -| input_obstacle_and_raw_pointcloud | true | - -- Laserscan based occupancy grid map - -| Ros param name | Default value | -| ------------------------ | ------------- | -| map_length | 150 [m] | -| map_width | 150 [m] | -| map_resolution | 0.5 [m] | -| use_height_filter | true | -| enable_single_frame_mode | false | -| map_frame | "map" | -| base_link_frame | "base_link" | -| scan_origin_frame | "base_link" | -| gridmap_origin_frame | "base_link" | - -## Other parameters - -Additional argument is shown below: - -| Name | Default | Description | -| ----------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------- | -| `use_multithread` | `false` | whether to use multithread | -| `use_intra_process` | `false` | | -| `map_origin` | `` | parameter to override `map_origin_frame` which means grid map origin | -| `scan_origin` | `` | parameter to override `scan_origin_frame` which means scanning center | -| `output` | `occupancy_grid` | output name | -| `use_pointcloud_container` | `false` | | -| `container_name` | `occupancy_grid_map_container` | | -| `input_obstacle_pointcloud` | `false` | only for laserscan based method. If true, the node subscribe obstacle pointcloud | -| `input_obstacle_and_raw_pointcloud` | `true` | only for laserscan based method. If true, the node subscribe both obstacle and raw pointcloud | +### Parameters + +{{ json_to_markdown("perception/probabilistic_occupancy_grid_map/schema/binary_bayes_filter_updater.schema.json") }} +{{ json_to_markdown("perception/probabilistic_occupancy_grid_map/schema/grid_map.schema.json") }} +{{ json_to_markdown("perception/probabilistic_occupancy_grid_map/schema/laserscan_based_occupancy_grid_map.schema.json") }} +{{ json_to_markdown("perception/probabilistic_occupancy_grid_map/schema/multi_lidar_pointcloud_based_occupancy_grid_map.schema.json") }} +{{ json_to_markdown("perception/probabilistic_occupancy_grid_map/schema/pointcloud_based_occupancy_grid_map.schema.json") }} +{{ json_to_markdown("perception/probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json") }} ### Downsample input pointcloud(Optional) diff --git a/perception/probabilistic_occupancy_grid_map/config/grid_map_param.yaml b/perception/probabilistic_occupancy_grid_map/config/grid_map.param.yaml similarity index 100% rename from perception/probabilistic_occupancy_grid_map/config/grid_map_param.yaml rename to perception/probabilistic_occupancy_grid_map/config/grid_map.param.yaml diff --git a/perception/probabilistic_occupancy_grid_map/schema/binary_bayes_filter_updater.schema.json b/perception/probabilistic_occupancy_grid_map/schema/binary_bayes_filter_updater.schema.json new file mode 100644 index 0000000000000..d087095ce980b --- /dev/null +++ b/perception/probabilistic_occupancy_grid_map/schema/binary_bayes_filter_updater.schema.json @@ -0,0 +1,61 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Binary Bayes Filter Updater", + "type": "object", + "definitions": { + "binary_bayes_filter_updater": { + "type": "object", + "properties": { + "probability_matrix": { + "type": "object", + "properties": { + "occupied_to_occupied": { + "type": "number", + "description": "Probability of transitioning from occupied to occupied state.", + "default": 0.95 + }, + "occupied_to_free": { + "type": "number", + "description": "Probability of transitioning from occupied to free state.", + "default": 0.05 + }, + "free_to_occupied": { + "type": "number", + "description": "Probability of transitioning from free to occupied state.", + "default": 0.2 + }, + "free_to_free": { + "type": "number", + "description": "Probability of transitioning from free to free state.", + "default": 0.8 + } + }, + "required": [ + "occupied_to_occupied", + "occupied_to_free", + "free_to_occupied", + "free_to_free" + ] + }, + "v_ratio": { + "type": "number", + "description": "Ratio of the variance used in the filter.", + "default": 0.1 + } + }, + "required": ["probability_matrix", "v_ratio"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/binary_bayes_filter_updater" + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/perception/probabilistic_occupancy_grid_map/schema/grid_map.schema.json b/perception/probabilistic_occupancy_grid_map/schema/grid_map.schema.json new file mode 100644 index 0000000000000..e874431ec2601 --- /dev/null +++ b/perception/probabilistic_occupancy_grid_map/schema/grid_map.schema.json @@ -0,0 +1,76 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Grid Map", + "type": "object", + "definitions": { + "visualization_params": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The type of grid map visualization.", + "default": "occupancy_grid" + }, + "params": { + "type": "object", + "properties": { + "layer": { + "type": "string", + "description": "The layer of the grid map visualization.", + "default": "filled_free_to_farthest" + }, + "data_min": { + "type": "number", + "description": "The minimum data value for the visualization.", + "default": 0.0 + }, + "data_max": { + "type": "number", + "description": "The maximum data value for the visualization.", + "default": 100.0 + } + }, + "required": ["layer", "data_min", "data_max"] + } + }, + "required": ["type", "params"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "type": "object", + "properties": { + "grid_map_topic": { + "type": "string", + "description": "The topic name for the grid map.", + "default": "/perception/occupancy_grid_map/occupancy_grid_map_node/debug/grid_map" + }, + "grid_map_visualizations": { + "type": "array", + "description": "List of grid map visualizations.", + "items": { + "type": "string" + }, + "default": ["grid_1st_step", "grid_2nd_step", "grid_3rd_step"] + }, + "grid_1st_step": { "$ref": "#/definitions/visualization_params" }, + "grid_2nd_step": { "$ref": "#/definitions/visualization_params" }, + "grid_3rd_step": { "$ref": "#/definitions/visualization_params" } + }, + "required": [ + "grid_map_topic", + "grid_map_visualizations", + "grid_1st_step", + "grid_2nd_step", + "grid_3rd_step" + ] + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/perception/probabilistic_occupancy_grid_map/schema/laserscan_based_occupancy_grid_map.schema.json b/perception/probabilistic_occupancy_grid_map/schema/laserscan_based_occupancy_grid_map.schema.json new file mode 100644 index 0000000000000..2b6befd1ae1fd --- /dev/null +++ b/perception/probabilistic_occupancy_grid_map/schema/laserscan_based_occupancy_grid_map.schema.json @@ -0,0 +1,94 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Laserscan Based Occupancy Grid Map", + "type": "object", + "definitions": { + "height_filter_params": { + "type": "object", + "properties": { + "use_height_filter": { + "type": "boolean", + "description": "Flag to use height filter.", + "default": true + }, + "min_height": { + "type": "number", + "description": "Minimum height for the height filter.", + "default": -1.0 + }, + "max_height": { + "type": "number", + "description": "Maximum height for the height filter.", + "default": 2.0 + } + }, + "required": ["use_height_filter", "min_height", "max_height"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "type": "object", + "properties": { + "map_frame": { + "type": "string", + "description": "The frame ID of the map.", + "default": "map" + }, + "base_link_frame": { + "type": "string", + "description": "The frame ID of the base link.", + "default": "base_link" + }, + "gridmap_origin_frame": { + "type": "string", + "description": "The frame ID of the grid map origin.", + "default": "base_link" + }, + "scan_origin_frame": { + "type": "string", + "description": "The frame ID of the scan origin.", + "default": "base_link" + }, + "height_filter": { "$ref": "#/definitions/height_filter_params" }, + "enable_single_frame_mode": { + "type": "boolean", + "description": "Flag to enable single frame mode.", + "default": false + }, + "map_length": { + "type": "number", + "description": "The length of the map.", + "default": 150.0 + }, + "map_width": { + "type": "number", + "description": "The width of the map.", + "default": 150.0 + }, + "map_resolution": { + "type": "number", + "description": "The resolution of the map.", + "default": 0.5 + } + }, + "required": [ + "map_frame", + "base_link_frame", + "gridmap_origin_frame", + "scan_origin_frame", + "height_filter", + "enable_single_frame_mode", + "map_length", + "map_width", + "map_resolution" + ] + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/perception/probabilistic_occupancy_grid_map/schema/multi_lidar_pointcloud_based_occupancy_grid_map.schema.json b/perception/probabilistic_occupancy_grid_map/schema/multi_lidar_pointcloud_based_occupancy_grid_map.schema.json new file mode 100644 index 0000000000000..e522e486e88cc --- /dev/null +++ b/perception/probabilistic_occupancy_grid_map/schema/multi_lidar_pointcloud_based_occupancy_grid_map.schema.json @@ -0,0 +1,207 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Multi Lidar Pointcloud Based Occupancy Grid Map", + "type": "object", + "definitions": { + "height_filter_params": { + "type": "object", + "properties": { + "use_height_filter": { + "type": "boolean", + "description": "Flag to use height filter.", + "default": true + }, + "min_height": { + "type": "number", + "description": "Minimum height for the height filter.", + "default": -1.0 + }, + "max_height": { + "type": "number", + "description": "Maximum height for the height filter.", + "default": 2.0 + } + }, + "required": ["use_height_filter", "min_height", "max_height"] + }, + "occupancy_grid_map_fixed_blind_spot_params": { + "type": "object", + "properties": { + "distance_margin": { + "type": "number", + "description": "Distance margin for the fixed blind spot.", + "default": 1.0 + } + }, + "required": ["distance_margin"] + }, + "occupancy_grid_map_projective_blind_spot_params": { + "type": "object", + "properties": { + "projection_dz_threshold": { + "type": "number", + "description": "Projection dz threshold to avoid null division.", + "default": 0.01 + }, + "obstacle_separation_threshold": { + "type": "number", + "description": "Threshold to fill the interval between obstacles with unknown.", + "default": 1.0 + }, + "pub_debug_grid": { + "type": "boolean", + "description": "Flag to publish the debug grid.", + "default": false + } + }, + "required": ["projection_dz_threshold", "obstacle_separation_threshold", "pub_debug_grid"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "type": "object", + "properties": { + "shared_config": { + "type": "object", + "properties": { + "map_frame": { + "type": "string", + "description": "The frame ID of the map.", + "default": "map" + }, + "base_link_frame": { + "type": "string", + "description": "The frame ID of the base link.", + "default": "base_link" + }, + "gridmap_origin_frame": { + "type": "string", + "description": "The frame ID of the grid map origin.", + "default": "base_link" + }, + "map_resolution": { + "type": "number", + "description": "The resolution of the map.", + "default": 0.5 + }, + "map_length_x": { + "type": "number", + "description": "The length of the map in the x direction.", + "default": 150.0 + }, + "map_length_y": { + "type": "number", + "description": "The length of the map in the y direction.", + "default": 150.0 + } + }, + "required": [ + "map_frame", + "base_link_frame", + "gridmap_origin_frame", + "map_resolution", + "map_length_x", + "map_length_y" + ] + }, + "downsample_input_pointcloud": { + "type": "boolean", + "description": "Flag to downsample the input pointcloud.", + "default": true + }, + "downsample_voxel_size": { + "type": "number", + "description": "The voxel size for downsampling.", + "default": 0.25 + }, + "ogm_creation_config": { + "type": "object", + "properties": { + "height_filter": { "$ref": "#/definitions/height_filter_params" }, + "enable_single_frame_mode": { + "type": "boolean", + "description": "Flag to enable single frame mode.", + "default": true + }, + "filter_obstacle_pointcloud_by_raw_pointcloud": { + "type": "boolean", + "description": "Flag to filter obstacle pointcloud by raw pointcloud.", + "default": false + }, + "grid_map_type": { + "type": "string", + "description": "Type of the grid map.", + "default": "OccupancyGridMapFixedBlindSpot" + }, + "OccupancyGridMapFixedBlindSpot": { + "$ref": "#/definitions/occupancy_grid_map_fixed_blind_spot_params" + }, + "OccupancyGridMapProjectiveBlindSpot": { + "$ref": "#/definitions/occupancy_grid_map_projective_blind_spot_params" + } + }, + "required": [ + "height_filter", + "enable_single_frame_mode", + "filter_obstacle_pointcloud_by_raw_pointcloud", + "grid_map_type" + ] + }, + "fusion_config": { + "type": "object", + "properties": { + "raw_pointcloud_topics": { + "type": "array", + "description": "List of raw pointcloud topics.", + "items": { + "type": "string" + } + }, + "fusion_input_ogm_topics": { + "type": "array", + "description": "List of fusion input occupancy grid map topics.", + "items": { + "type": "string" + } + }, + "input_ogm_reliabilities": { + "type": "array", + "description": "Reliability of each sensor for fusion.", + "items": { + "type": "number", + "minimum": 0.0, + "maximum": 1.0 + } + }, + "fusion_method": { + "type": "string", + "description": "Method for occupancy grid map fusion.", + "enum": ["overwrite", "log-odds", "dempster-shafer"], + "default": "overwrite" + } + }, + "required": [ + "raw_pointcloud_topics", + "fusion_input_ogm_topics", + "input_ogm_reliabilities", + "fusion_method" + ] + } + }, + "required": [ + "shared_config", + "downsample_input_pointcloud", + "downsample_voxel_size", + "ogm_creation_config", + "fusion_config" + ] + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/perception/probabilistic_occupancy_grid_map/schema/pointcloud_based_occupancy_grid_map.schema.json b/perception/probabilistic_occupancy_grid_map/schema/pointcloud_based_occupancy_grid_map.schema.json new file mode 100644 index 0000000000000..e79c094820ec4 --- /dev/null +++ b/perception/probabilistic_occupancy_grid_map/schema/pointcloud_based_occupancy_grid_map.schema.json @@ -0,0 +1,150 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Pointcloud Based Occupancy Grid Map", + "type": "object", + "definitions": { + "height_filter_params": { + "type": "object", + "properties": { + "use_height_filter": { + "type": "boolean", + "description": "Flag to use height filter.", + "default": true + }, + "min_height": { + "type": "number", + "description": "Minimum height for the height filter.", + "default": -1.0 + }, + "max_height": { + "type": "number", + "description": "Maximum height for the height filter.", + "default": 2.0 + } + }, + "required": ["use_height_filter", "min_height", "max_height"] + }, + "occupancy_grid_map_fixed_blind_spot_params": { + "type": "object", + "properties": { + "distance_margin": { + "type": "number", + "description": "Distance margin for the fixed blind spot.", + "default": 1.0 + } + }, + "required": ["distance_margin"] + }, + "occupancy_grid_map_projective_blind_spot_params": { + "type": "object", + "properties": { + "projection_dz_threshold": { + "type": "number", + "description": "Projection dz threshold to avoid null division.", + "default": 0.01 + }, + "obstacle_separation_threshold": { + "type": "number", + "description": "Threshold to fill the interval between obstacles with unknown.", + "default": 1.0 + }, + "pub_debug_grid": { + "type": "boolean", + "description": "Flag to publish the debug grid.", + "default": false + } + }, + "required": ["projection_dz_threshold", "obstacle_separation_threshold", "pub_debug_grid"] + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "type": "object", + "properties": { + "map_length": { + "type": "number", + "description": "The length of the map.", + "default": 150.0 + }, + "map_resolution": { + "type": "number", + "description": "The resolution of the map.", + "default": 0.5 + }, + "height_filter": { "$ref": "#/definitions/height_filter_params" }, + "downsample_input_pointcloud": { + "type": "boolean", + "description": "Flag to downsample the input pointcloud.", + "default": true + }, + "downsample_voxel_size": { + "type": "number", + "description": "The voxel size for downsampling.", + "default": 0.25 + }, + "enable_single_frame_mode": { + "type": "boolean", + "description": "Flag to enable single frame mode.", + "default": false + }, + "filter_obstacle_pointcloud_by_raw_pointcloud": { + "type": "boolean", + "description": "Flag to filter obstacle pointcloud by raw pointcloud.", + "default": false + }, + "map_frame": { + "type": "string", + "description": "The frame ID of the map.", + "default": "map" + }, + "base_link_frame": { + "type": "string", + "description": "The frame ID of the base link.", + "default": "base_link" + }, + "gridmap_origin_frame": { + "type": "string", + "description": "The frame ID of the grid map origin.", + "default": "base_link" + }, + "scan_origin_frame": { + "type": "string", + "description": "The frame ID of the scan origin.", + "default": "base_link" + }, + "grid_map_type": { + "type": "string", + "description": "Type of the grid map.", + "default": "OccupancyGridMapFixedBlindSpot" + }, + "OccupancyGridMapFixedBlindSpot": { + "$ref": "#/definitions/occupancy_grid_map_fixed_blind_spot_params" + }, + "OccupancyGridMapProjectiveBlindSpot": { + "$ref": "#/definitions/occupancy_grid_map_projective_blind_spot_params" + } + }, + "required": [ + "map_length", + "map_resolution", + "height_filter", + "downsample_input_pointcloud", + "downsample_voxel_size", + "enable_single_frame_mode", + "filter_obstacle_pointcloud_by_raw_pointcloud", + "map_frame", + "base_link_frame", + "gridmap_origin_frame", + "scan_origin_frame", + "grid_map_type" + ] + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} diff --git a/perception/probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json b/perception/probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json new file mode 100644 index 0000000000000..14f4305f55de8 --- /dev/null +++ b/perception/probabilistic_occupancy_grid_map/schema/synchronized_grid_map_fusion_node.schema.json @@ -0,0 +1,105 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameters for Synchronized Grid Map Fusion Node", + "type": "object", + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "type": "object", + "properties": { + "fusion_input_ogm_topics": { + "type": "array", + "description": "List of fusion input occupancy grid map topics.", + "items": { + "type": "string" + }, + "default": ["topic1", "topic2"] + }, + "input_ogm_reliabilities": { + "type": "array", + "description": "Reliability of each sensor for fusion.", + "items": { + "type": "number", + "minimum": 0.0, + "maximum": 1.0 + }, + "default": [0.8, 0.2] + }, + "fusion_method": { + "type": "string", + "description": "Method for occupancy grid map fusion.", + "enum": ["overwrite", "log-odds", "dempster-shafer"], + "default": "overwrite" + }, + "match_threshold_sec": { + "type": "number", + "description": "Time threshold for matching in seconds.", + "default": 0.01 + }, + "timeout_sec": { + "type": "number", + "description": "Timeout for synchronization in seconds.", + "default": 0.1 + }, + "input_offset_sec": { + "type": "array", + "description": "Offset for each input in seconds.", + "items": { + "type": "number" + }, + "default": [0.0, 0.0] + }, + "map_frame_": { + "type": "string", + "description": "The frame ID of the map.", + "default": "map" + }, + "base_link_frame_": { + "type": "string", + "description": "The frame ID of the base link.", + "default": "base_link" + }, + "grid_map_origin_frame_": { + "type": "string", + "description": "The frame ID of the grid map origin.", + "default": "base_link" + }, + "fusion_map_length_x": { + "type": "number", + "description": "The length of the fusion map in the x direction.", + "default": 100.0 + }, + "fusion_map_length_y": { + "type": "number", + "description": "The length of the fusion map in the y direction.", + "default": 100.0 + }, + "fusion_map_resolution": { + "type": "number", + "description": "The resolution of the fusion map.", + "default": 0.5 + } + }, + "required": [ + "fusion_input_ogm_topics", + "input_ogm_reliabilities", + "fusion_method", + "match_threshold_sec", + "timeout_sec", + "input_offset_sec", + "map_frame_", + "base_link_frame_", + "grid_map_origin_frame_", + "fusion_map_length_x", + "fusion_map_length_y", + "fusion_map_resolution" + ] + } + }, + "required": ["ros__parameters"] + } + }, + "required": ["/**"] +} From f62c01b48d5e9d5c3f3a4f06fd776e7b7441c946 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez <33620+esteve@users.noreply.github.com> Date: Fri, 19 Jul 2024 03:00:07 +0200 Subject: [PATCH 226/306] refactor(autoware_object_merger): move headers to src and rename package (#7804) Signed-off-by: Esteve Fernandez --- .github/CODEOWNERS | 2 +- .../detection/merger/camera_lidar_merger.launch.xml | 8 ++++---- .../merger/camera_lidar_radar_merger.launch.xml | 10 +++++----- .../detection/merger/lidar_merger.launch.xml | 8 ++++---- launch/tier4_perception_launch/package.xml | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/data_association_matrix.param.yaml | 0 .../config/object_association_merger.param.yaml | 0 .../config/overlapped_judge.param.yaml | 0 .../object_merger}/association/data_association.hpp | 8 ++++---- .../object_merger}/association/solver/gnn_solver.hpp | 12 ++++++------ .../association/solver/gnn_solver_interface.hpp | 6 +++--- .../object_merger}/association/solver/mu_ssp.hpp | 8 ++++---- .../object_merger}/association/solver/ssp.hpp | 8 ++++---- .../object_association_merger_node.hpp | 8 ++++---- .../launch/object_association_merger.launch.xml | 8 ++++---- .../package.xml | 4 ++-- .../schema/data_association_matrix.schema.json | 0 .../schema/object_association_merger.schema.json | 0 .../schema/overlapped_judge.schema.json | 0 .../src/association/data_association.cpp | 4 ++-- .../solver/mu_successive_shortest_path_wrapper.cpp | 2 +- .../association/solver/successive_shortest_path.cpp | 2 +- .../src/object_association_merger_node.cpp | 2 +- 25 files changed, 52 insertions(+), 52 deletions(-) rename perception/{object_merger => autoware_object_merger}/CMakeLists.txt (96%) rename perception/{object_merger => autoware_object_merger}/README.md (100%) rename perception/{object_merger => autoware_object_merger}/config/data_association_matrix.param.yaml (100%) rename perception/{object_merger => autoware_object_merger}/config/object_association_merger.param.yaml (100%) rename perception/{object_merger => autoware_object_merger}/config/overlapped_judge.param.yaml (100%) rename perception/{object_merger/include/autoware_object_merger => autoware_object_merger/include/autoware/object_merger}/association/data_association.hpp (86%) rename perception/{object_merger/include/autoware_object_merger => autoware_object_merger/include/autoware/object_merger}/association/solver/gnn_solver.hpp (60%) rename perception/{object_merger/include/autoware_object_merger => autoware_object_merger/include/autoware/object_merger}/association/solver/gnn_solver_interface.hpp (81%) rename perception/{object_merger/include/autoware_object_merger => autoware_object_merger/include/autoware/object_merger}/association/solver/mu_ssp.hpp (79%) rename perception/{object_merger/include/autoware_object_merger => autoware_object_merger/include/autoware/object_merger}/association/solver/ssp.hpp (80%) rename perception/{object_merger/src => autoware_object_merger/include/autoware/object_merger}/object_association_merger_node.hpp (92%) rename perception/{object_merger => autoware_object_merger}/launch/object_association_merger.launch.xml (74%) rename perception/{object_merger => autoware_object_merger}/package.xml (91%) rename perception/{object_merger => autoware_object_merger}/schema/data_association_matrix.schema.json (100%) rename perception/{object_merger => autoware_object_merger}/schema/object_association_merger.schema.json (100%) rename perception/{object_merger => autoware_object_merger}/schema/overlapped_judge.schema.json (100%) rename perception/{object_merger => autoware_object_merger}/src/association/data_association.cpp (98%) rename perception/{object_merger => autoware_object_merger}/src/association/solver/mu_successive_shortest_path_wrapper.cpp (95%) rename perception/{object_merger => autoware_object_merger}/src/association/solver/successive_shortest_path.cpp (99%) rename perception/{object_merger => autoware_object_merger}/src/object_association_merger_node.cpp (99%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 47ddd77bdf68e..0233fee04513c 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -106,6 +106,7 @@ map/map_tf_generator/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro map/util/lanelet2_map_preprocessor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp perception/autoware_crosswalk_traffic_light_estimator/** satoshi.ota@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp perception/autoware_map_based_prediction/** kotaro.uetake@tier4.jp kyoichi.sugahara@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yoshi.ri@tier4.jp +perception/autoware_object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/autoware_object_range_splitter/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/autoware_object_velocity_splitter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp perception/autoware_radar_crossing_objects_noise_filter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp @@ -128,7 +129,6 @@ perception/lidar_apollo_segmentation_tvm_nodes/** ambroise.vincent@arm.com yoshi perception/lidar_centerpoint/** kenzo.lobos@tier4.jp koji.minoda@tier4.jp perception/lidar_transfusion/** amadeusz.szymko.2@tier4.jp kenzo.lobos@tier4.jp satoshi.tanaka@tier4.jp perception/multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp -perception/object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/occupancy_grid_map_outlier_filter/** abrahammonrroy@yahoo.com yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/probabilistic_occupancy_grid_map/** mamoru.sobue@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/radar_tracks_msgs_converter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_merger.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_merger.launch.xml index d4a9e40f29d97..14e256cc2fd06 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_merger.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_merger.launch.xml @@ -1,8 +1,8 @@ - - + + @@ -119,7 +119,7 @@ - + @@ -131,7 +131,7 @@ - + diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_radar_merger.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_radar_merger.launch.xml index 5bd2c36955b55..c62ffb06ecd42 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_radar_merger.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/merger/camera_lidar_radar_merger.launch.xml @@ -1,8 +1,8 @@ - - + + @@ -142,7 +142,7 @@ - + @@ -154,7 +154,7 @@ - + @@ -177,7 +177,7 @@ - + diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/merger/lidar_merger.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/merger/lidar_merger.launch.xml index c82de41a28b50..b9bb765cb1b16 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/merger/lidar_merger.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/merger/lidar_merger.launch.xml @@ -1,8 +1,8 @@ - - + + @@ -57,7 +57,7 @@ - + @@ -69,7 +69,7 @@ - + diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index db2968f735a37..a240d3e0576e3 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -17,6 +17,7 @@ autoware_crosswalk_traffic_light_estimator autoware_detection_by_tracker autoware_map_based_prediction + autoware_object_merger autoware_object_range_splitter autoware_object_velocity_splitter autoware_radar_crossing_objects_noise_filter @@ -34,7 +35,6 @@ image_transport_decompressor lidar_apollo_instance_segmentation multi_object_tracker - object_merger occupancy_grid_map_outlier_filter pointcloud_preprocessor pointcloud_to_laserscan diff --git a/perception/object_merger/CMakeLists.txt b/perception/autoware_object_merger/CMakeLists.txt similarity index 96% rename from perception/object_merger/CMakeLists.txt rename to perception/autoware_object_merger/CMakeLists.txt index 2d9b490945caf..3a2e85c4060ea 100644 --- a/perception/object_merger/CMakeLists.txt +++ b/perception/autoware_object_merger/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(object_merger) +project(autoware_object_merger) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/perception/object_merger/README.md b/perception/autoware_object_merger/README.md similarity index 100% rename from perception/object_merger/README.md rename to perception/autoware_object_merger/README.md diff --git a/perception/object_merger/config/data_association_matrix.param.yaml b/perception/autoware_object_merger/config/data_association_matrix.param.yaml similarity index 100% rename from perception/object_merger/config/data_association_matrix.param.yaml rename to perception/autoware_object_merger/config/data_association_matrix.param.yaml diff --git a/perception/object_merger/config/object_association_merger.param.yaml b/perception/autoware_object_merger/config/object_association_merger.param.yaml similarity index 100% rename from perception/object_merger/config/object_association_merger.param.yaml rename to perception/autoware_object_merger/config/object_association_merger.param.yaml diff --git a/perception/object_merger/config/overlapped_judge.param.yaml b/perception/autoware_object_merger/config/overlapped_judge.param.yaml similarity index 100% rename from perception/object_merger/config/overlapped_judge.param.yaml rename to perception/autoware_object_merger/config/overlapped_judge.param.yaml diff --git a/perception/object_merger/include/autoware_object_merger/association/data_association.hpp b/perception/autoware_object_merger/include/autoware/object_merger/association/data_association.hpp similarity index 86% rename from perception/object_merger/include/autoware_object_merger/association/data_association.hpp rename to perception/autoware_object_merger/include/autoware/object_merger/association/data_association.hpp index 8433e8f7af537..16e154c83842b 100644 --- a/perception/object_merger/include/autoware_object_merger/association/data_association.hpp +++ b/perception/autoware_object_merger/include/autoware/object_merger/association/data_association.hpp @@ -16,12 +16,12 @@ // Author: v1.0 Yukihiro Saito // -#ifndef AUTOWARE_OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ -#define AUTOWARE_OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ +#ifndef AUTOWARE__OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ +#define AUTOWARE__OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ #define EIGEN_MPL2_ONLY -#include "autoware_object_merger/association/solver/gnn_solver.hpp" +#include "autoware/object_merger/association/solver/gnn_solver.hpp" #include #include @@ -62,4 +62,4 @@ class DataAssociation } // namespace autoware::object_merger -#endif // AUTOWARE_OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ +#endif // AUTOWARE__OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ diff --git a/perception/object_merger/include/autoware_object_merger/association/solver/gnn_solver.hpp b/perception/autoware_object_merger/include/autoware/object_merger/association/solver/gnn_solver.hpp similarity index 60% rename from perception/object_merger/include/autoware_object_merger/association/solver/gnn_solver.hpp rename to perception/autoware_object_merger/include/autoware/object_merger/association/solver/gnn_solver.hpp index 6421dd6108a4a..14078451612ec 100644 --- a/perception/object_merger/include/autoware_object_merger/association/solver/gnn_solver.hpp +++ b/perception/autoware_object_merger/include/autoware/object_merger/association/solver/gnn_solver.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ -#define AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ +#ifndef AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ +#define AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ -#include "autoware_object_merger/association/solver/gnn_solver_interface.hpp" -#include "autoware_object_merger/association/solver/mu_ssp.hpp" -#include "autoware_object_merger/association/solver/ssp.hpp" +#include "autoware/object_merger/association/solver/gnn_solver_interface.hpp" +#include "autoware/object_merger/association/solver/mu_ssp.hpp" +#include "autoware/object_merger/association/solver/ssp.hpp" -#endif // AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ +#endif // AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ diff --git a/perception/object_merger/include/autoware_object_merger/association/solver/gnn_solver_interface.hpp b/perception/autoware_object_merger/include/autoware/object_merger/association/solver/gnn_solver_interface.hpp similarity index 81% rename from perception/object_merger/include/autoware_object_merger/association/solver/gnn_solver_interface.hpp rename to perception/autoware_object_merger/include/autoware/object_merger/association/solver/gnn_solver_interface.hpp index 6a0702f056ba7..75f45b6eb5f3b 100644 --- a/perception/object_merger/include/autoware_object_merger/association/solver/gnn_solver_interface.hpp +++ b/perception/autoware_object_merger/include/autoware/object_merger/association/solver/gnn_solver_interface.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ -#define AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ +#ifndef AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ +#define AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ #include #include @@ -32,4 +32,4 @@ class GnnSolverInterface }; } // namespace autoware::object_merger::gnn_solver -#endif // AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ +#endif // AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ diff --git a/perception/object_merger/include/autoware_object_merger/association/solver/mu_ssp.hpp b/perception/autoware_object_merger/include/autoware/object_merger/association/solver/mu_ssp.hpp similarity index 79% rename from perception/object_merger/include/autoware_object_merger/association/solver/mu_ssp.hpp rename to perception/autoware_object_merger/include/autoware/object_merger/association/solver/mu_ssp.hpp index 364e9306112a7..4d8075874cbca 100644 --- a/perception/object_merger/include/autoware_object_merger/association/solver/mu_ssp.hpp +++ b/perception/autoware_object_merger/include/autoware/object_merger/association/solver/mu_ssp.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ -#define AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ +#ifndef AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ +#define AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ -#include "autoware_object_merger/association/solver/gnn_solver_interface.hpp" +#include "autoware/object_merger/association/solver/gnn_solver_interface.hpp" #include #include @@ -34,4 +34,4 @@ class MuSSP : public GnnSolverInterface }; } // namespace autoware::object_merger::gnn_solver -#endif // AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ +#endif // AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ diff --git a/perception/object_merger/include/autoware_object_merger/association/solver/ssp.hpp b/perception/autoware_object_merger/include/autoware/object_merger/association/solver/ssp.hpp similarity index 80% rename from perception/object_merger/include/autoware_object_merger/association/solver/ssp.hpp rename to perception/autoware_object_merger/include/autoware/object_merger/association/solver/ssp.hpp index 41bf390829ade..94563981de011 100644 --- a/perception/object_merger/include/autoware_object_merger/association/solver/ssp.hpp +++ b/perception/autoware_object_merger/include/autoware/object_merger/association/solver/ssp.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ -#define AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ +#ifndef AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ +#define AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ -#include "autoware_object_merger/association/solver/gnn_solver_interface.hpp" +#include "autoware/object_merger/association/solver/gnn_solver_interface.hpp" #include #include @@ -34,4 +34,4 @@ class SSP : public GnnSolverInterface }; } // namespace autoware::object_merger::gnn_solver -#endif // AUTOWARE_OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ +#endif // AUTOWARE__OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ diff --git a/perception/object_merger/src/object_association_merger_node.hpp b/perception/autoware_object_merger/include/autoware/object_merger/object_association_merger_node.hpp similarity index 92% rename from perception/object_merger/src/object_association_merger_node.hpp rename to perception/autoware_object_merger/include/autoware/object_merger/object_association_merger_node.hpp index d11f58bc5a857..81fa34803d6cc 100644 --- a/perception/object_merger/src/object_association_merger_node.hpp +++ b/perception/autoware_object_merger/include/autoware/object_merger/object_association_merger_node.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef OBJECT_ASSOCIATION_MERGER_NODE_HPP_ -#define OBJECT_ASSOCIATION_MERGER_NODE_HPP_ +#ifndef AUTOWARE__OBJECT_MERGER__OBJECT_ASSOCIATION_MERGER_NODE_HPP_ +#define AUTOWARE__OBJECT_MERGER__OBJECT_ASSOCIATION_MERGER_NODE_HPP_ +#include "autoware/object_merger/association/data_association.hpp" #include "autoware/universe_utils/ros/debug_publisher.hpp" #include "autoware/universe_utils/ros/published_time_publisher.hpp" #include "autoware/universe_utils/system/stop_watch.hpp" -#include "autoware_object_merger/association/data_association.hpp" #include @@ -91,4 +91,4 @@ class ObjectAssociationMergerNode : public rclcpp::Node }; } // namespace autoware::object_merger -#endif // OBJECT_ASSOCIATION_MERGER_NODE_HPP_ +#endif // AUTOWARE__OBJECT_MERGER__OBJECT_ASSOCIATION_MERGER_NODE_HPP_ diff --git a/perception/object_merger/launch/object_association_merger.launch.xml b/perception/autoware_object_merger/launch/object_association_merger.launch.xml similarity index 74% rename from perception/object_merger/launch/object_association_merger.launch.xml rename to perception/autoware_object_merger/launch/object_association_merger.launch.xml index b26788bb04667..f3c0e8bd5a829 100644 --- a/perception/object_merger/launch/object_association_merger.launch.xml +++ b/perception/autoware_object_merger/launch/object_association_merger.launch.xml @@ -4,11 +4,11 @@ - - - + + + - + diff --git a/perception/object_merger/package.xml b/perception/autoware_object_merger/package.xml similarity index 91% rename from perception/object_merger/package.xml rename to perception/autoware_object_merger/package.xml index 5ca261b3ddf0e..e87ef8d81b01b 100644 --- a/perception/object_merger/package.xml +++ b/perception/autoware_object_merger/package.xml @@ -1,9 +1,9 @@ - object_merger + autoware_object_merger 0.1.0 - The object_merger package + The autoware_object_merger package Yukihiro Saito Yoshi Ri Taekjin Lee diff --git a/perception/object_merger/schema/data_association_matrix.schema.json b/perception/autoware_object_merger/schema/data_association_matrix.schema.json similarity index 100% rename from perception/object_merger/schema/data_association_matrix.schema.json rename to perception/autoware_object_merger/schema/data_association_matrix.schema.json diff --git a/perception/object_merger/schema/object_association_merger.schema.json b/perception/autoware_object_merger/schema/object_association_merger.schema.json similarity index 100% rename from perception/object_merger/schema/object_association_merger.schema.json rename to perception/autoware_object_merger/schema/object_association_merger.schema.json diff --git a/perception/object_merger/schema/overlapped_judge.schema.json b/perception/autoware_object_merger/schema/overlapped_judge.schema.json similarity index 100% rename from perception/object_merger/schema/overlapped_judge.schema.json rename to perception/autoware_object_merger/schema/overlapped_judge.schema.json diff --git a/perception/object_merger/src/association/data_association.cpp b/perception/autoware_object_merger/src/association/data_association.cpp similarity index 98% rename from perception/object_merger/src/association/data_association.cpp rename to perception/autoware_object_merger/src/association/data_association.cpp index e317ac63d9831..8b40178b592f8 100644 --- a/perception/object_merger/src/association/data_association.cpp +++ b/perception/autoware_object_merger/src/association/data_association.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware_object_merger/association/data_association.hpp" +#include "autoware/object_merger/association/data_association.hpp" +#include "autoware/object_merger/association/solver/gnn_solver.hpp" #include "autoware/universe_utils/geometry/geometry.hpp" -#include "autoware_object_merger/association/solver/gnn_solver.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include diff --git a/perception/object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp b/perception/autoware_object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp similarity index 95% rename from perception/object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp rename to perception/autoware_object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp index 6a5dd6473da1f..f852cfb62d419 100644 --- a/perception/object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp +++ b/perception/autoware_object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware_object_merger/association/solver/mu_ssp.hpp" +#include "autoware/object_merger/association/solver/mu_ssp.hpp" #include diff --git a/perception/object_merger/src/association/solver/successive_shortest_path.cpp b/perception/autoware_object_merger/src/association/solver/successive_shortest_path.cpp similarity index 99% rename from perception/object_merger/src/association/solver/successive_shortest_path.cpp rename to perception/autoware_object_merger/src/association/solver/successive_shortest_path.cpp index e384f12d60051..b97db07d05469 100644 --- a/perception/object_merger/src/association/solver/successive_shortest_path.cpp +++ b/perception/autoware_object_merger/src/association/solver/successive_shortest_path.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware_object_merger/association/solver/ssp.hpp" +#include "autoware/object_merger/association/solver/ssp.hpp" #include #include diff --git a/perception/object_merger/src/object_association_merger_node.cpp b/perception/autoware_object_merger/src/object_association_merger_node.cpp similarity index 99% rename from perception/object_merger/src/object_association_merger_node.cpp rename to perception/autoware_object_merger/src/object_association_merger_node.cpp index 321f1a8da8d9e..a1021df1d555f 100644 --- a/perception/object_merger/src/object_association_merger_node.cpp +++ b/perception/autoware_object_merger/src/object_association_merger_node.cpp @@ -14,7 +14,7 @@ #define EIGEN_MPL2_ONLY -#include "object_association_merger_node.hpp" +#include "autoware/object_merger/object_association_merger_node.hpp" #include "autoware/universe_utils/geometry/geometry.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" From d2f973384d1cf8019f511c44df7a5c11383eeac6 Mon Sep 17 00:00:00 2001 From: Boyang <144167190+tby-udel@users.noreply.github.com> Date: Thu, 18 Jul 2024 21:03:42 -0400 Subject: [PATCH 227/306] refactor(tensorrt_yolox): rework parameters (#7338) --- perception/tensorrt_yolox/README.md | 40 +--------- .../config/yolox_s_plus_opt.param.yaml | 2 + .../config/yolox_tiny.param.yaml | 8 +- .../src/tensorrt_yolox_node.cpp | 77 +++++-------------- 4 files changed, 27 insertions(+), 100 deletions(-) diff --git a/perception/tensorrt_yolox/README.md b/perception/tensorrt_yolox/README.md index af88e73cc04a6..c97fe74a324e7 100644 --- a/perception/tensorrt_yolox/README.md +++ b/perception/tensorrt_yolox/README.md @@ -31,44 +31,8 @@ Zheng Ge, Songtao Liu, Feng Wang, Zeming Li, Jian Sun, "YOLOX: Exceeding YOLO Se ## Parameters -### Core Parameters - -| Name | Type | Default Value | Description | -| ----------------- | ----- | ------------- | -------------------------------------------------------------------------------------- | -| `score_threshold` | float | 0.3 | If the objectness score is less than this value, the object is ignored in yolox layer. | -| `nms_threshold` | float | 0.7 | The IoU threshold for NMS method | - -**NOTE:** These two parameters are only valid for "plain" model (described later). - -### Node Parameters - -| Name | Type | Default Value | Description | -| -------------------------------------- | ------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `model_path` | string | "" | The onnx file name for yolox model | -| `model_name` | string | "" | The yolox model name:
"yolox-sPlus-T4-960x960-pseudo-finetune" for detection only, could reduce resource and processing_time
"yolox-sPlus-opt-pseudoV2-T4-960x960-T4-seg16cls" for multi-task including semantic segmentation | -| `label_path` | string | "" | The label file with label names for detected objects written on it | -| `precision` | string | "fp16" | The inference mode: "fp32", "fp16", "int8" | -| `build_only` | bool | false | shutdown node after TensorRT engine file is built | -| `calibration_algorithm` | string | "MinMax" | Calibration algorithm to be used for quantization when precision==int8. Valid value is one of: Entropy",("Legacy" \| "Percentile"), "MinMax"] | -| `dla_core_id` | int | -1 | If positive ID value is specified, the node assign inference task to the DLA core | -| `quantize_first_layer` | bool | false | If true, set the operating precision for the first (input) layer to be fp16. This option is valid only when precision==int8 | -| `quantize_last_layer` | bool | false | If true, set the operating precision for the last (output) layer to be fp16. This option is valid only when precision==int8 | -| `profile_per_layer` | bool | false | If true, profiler function will be enabled. Since the profile function may affect execution speed, it is recommended to set this flag true only for development purpose. | -| `clip_value` | double | 0.0 | If positive value is specified, the value of each layer output will be clipped between [0.0, clip_value]. This option is valid only when precision==int8 and used to manually specify the dynamic range instead of using any calibration | -| `preprocess_on_gpu` | bool | true | If true, pre-processing is performed on GPU | -| `calibration_image_list_path` | string | "" | Path to a file which contains path to images. Those images will be used for int8 quantization. | -| `yolox_s_plus_opt_param_path` | string | "" | Path to parameter file | -| `is_publish_color_mask` | bool | false | If true, publish color mask for result visualization | -| `is_roi_overlap_segment` | bool | true | If true, overlay detected object roi onto semantic segmentation to avoid over-filtering pointcloud especially small size objects | -| `overlap_roi_score_threshold` | float | 0.3 | minimum existence_probability of detected roi considered to replace segmentation | -| `roi_overlay_segment_label.UNKNOWN` | bool | true | If true, unknown objects roi will be overlaid onto sematic segmentation mask. | -| `roi_overlay_segment_label.CAR` | bool | false | If true, car objects roi will be overlaid onto sematic segmentation mask. | -| `roi_overlay_segment_label.TRUCK` | bool | false | If true, truck objects roi will be overlaid onto sematic segmentation mask. | -| `roi_overlay_segment_label.BUS` | bool | false | If true, bus objects roi will be overlaid onto sematic segmentation mask. | -| `roi_overlay_segment_label.MOTORCYCLE` | bool | true | If true, motorcycle objects roi will be overlaid onto sematic segmentation mask. | -| `roi_overlay_segment_label.BICYCLE` | bool | true | If true, bicycle objects roi will be overlaid onto sematic segmentation mask. | -| `roi_overlay_segment_label.PEDESTRIAN` | bool | true | If true, pedestrian objects roi will be overlaid onto sematic segmentation mask. | -| `roi_overlay_segment_label.ANIMAL` | bool | true | If true, animal objects roi will be overlaid onto sematic segmentation mask. | +{{ json_to_markdown("perception/tensorrt_yolox/schema/yolox_s_plus_opt.schema.json") }} +{{ json_to_markdown("perception/tensorrt_yolox/schema/yolox_tiny.schema.json") }} ## Assumptions / Known limits diff --git a/perception/tensorrt_yolox/config/yolox_s_plus_opt.param.yaml b/perception/tensorrt_yolox/config/yolox_s_plus_opt.param.yaml index 57c1b40c44a4d..d963074e51840 100644 --- a/perception/tensorrt_yolox/config/yolox_s_plus_opt.param.yaml +++ b/perception/tensorrt_yolox/config/yolox_s_plus_opt.param.yaml @@ -1,6 +1,7 @@ # cspell: ignore semseg /**: ros__parameters: + # refine segmentation mask by overlay roi class # disable when sematic segmentation accuracy is good enough is_roi_overlap_segment: true @@ -26,6 +27,7 @@ color_map_path: "$(var data_path)/tensorrt_yolox/semseg_color_map.csv" score_threshold: 0.35 nms_threshold: 0.7 + precision: "int8" # Operation precision to be used on inference. Valid value is one of: [fp32, fp16, int8]. calibration_algorithm: "Entropy" # Calibration algorithm to be used for quantization when precision==int8. Valid value is one of: [Entropy, (Legacy | Percentile), MinMax]. dla_core_id: -1 # If positive ID value is specified, the node assign inference task to the DLA core. diff --git a/perception/tensorrt_yolox/config/yolox_tiny.param.yaml b/perception/tensorrt_yolox/config/yolox_tiny.param.yaml index e45742a7afb95..051aa22f52d7d 100644 --- a/perception/tensorrt_yolox/config/yolox_tiny.param.yaml +++ b/perception/tensorrt_yolox/config/yolox_tiny.param.yaml @@ -1,9 +1,9 @@ /**: ros__parameters: - model_path: "$(var data_path)/tensorrt_yolox/$(var model_name).onnx" - label_path: "$(var data_path)/tensorrt_yolox/label.txt" - score_threshold: 0.35 - nms_threshold: 0.7 + model_path: "$(var data_path)/tensorrt_yolox/$(var model_name).onnx" # The onnx file name for YOLOX model. + label_path: "$(var data_path)/tensorrt_yolox/label.txt" # The label file path for YOLOX model. + score_threshold: 0.35 # Objects with a score lower than this value will be ignored. This threshold will be ignored if specified model contains EfficientNMS_TRT module in it. + nms_threshold: 0.7 # Detection results will be ignored if IoU over this value. This threshold will be ignored if specified model contains EfficientNMS_TRT module in it. precision: "fp16" # Operation precision to be used on inference. Valid value is one of: [fp32, fp16, int8]. calibration_algorithm: "MinMax" # Calibration algorithm to be used for quantization when precision==int8. Valid value is one of: [Entropy, (Legacy | Percentile), MinMax]. dla_core_id: -1 # If positive ID value is specified, the node assign inference task to the DLA core. diff --git a/perception/tensorrt_yolox/src/tensorrt_yolox_node.cpp b/perception/tensorrt_yolox/src/tensorrt_yolox_node.cpp index c13384918bd9c..f1189b53c23bf 100644 --- a/perception/tensorrt_yolox/src/tensorrt_yolox_node.cpp +++ b/perception/tensorrt_yolox/src/tensorrt_yolox_node.cpp @@ -40,64 +40,25 @@ TrtYoloXNode::TrtYoloXNode(const rclcpp::NodeOptions & node_options) using std::placeholders::_1; using std::chrono_literals::operator""ms; - auto declare_parameter_with_description = - [this](std::string name, auto default_val, std::string description = "") { - auto param_desc = rcl_interfaces::msg::ParameterDescriptor{}; - param_desc.description = description; - return this->declare_parameter(name, default_val, param_desc); - }; - - std::string model_path = - declare_parameter_with_description("model_path", "", "The onnx file name for YOLOX model"); - std::string label_path = declare_parameter_with_description( - "label_path", "", - "The label file that consists of label name texts for detected object categories"); - std::string precision = declare_parameter_with_description( - "precision", "fp32", - "operation precision to be used on inference. Valid value is one of: [fp32, fp16, int8]"); - float score_threshold = declare_parameter_with_description( - "score_threshold", 0.3, - ("Objects with a score lower than this value will be ignored. " - "This threshold will be ignored if specified model contains EfficientNMS_TRT module in it")); - float nms_threshold = declare_parameter_with_description( - "nms_threshold", 0.7, - ("Detection results will be ignored if IoU over this value. " - "This threshold will be ignored if specified model contains EfficientNMS_TRT module in it")); - std::string calibration_algorithm = declare_parameter_with_description( - "calibration_algorithm", "MinMax", - ("Calibration algorithm to be used for quantization when precision==int8. " - "Valid value is one of: [Entropy, (Legacy | Percentile), MinMax]")); - int dla_core_id = declare_parameter_with_description( - "dla_core_id", -1, - "If positive ID value is specified, the node assign inference task to the DLA core"); - bool quantize_first_layer = declare_parameter_with_description( - "quantize_first_layer", false, - ("If true, set the operating precision for the first (input) layer to be fp16. " - "This option is valid only when precision==int8")); - bool quantize_last_layer = declare_parameter_with_description( - "quantize_last_layer", false, - ("If true, set the operating precision for the last (output) layer to be fp16. " - "This option is valid only when precision==int8")); - bool profile_per_layer = declare_parameter_with_description( - "profile_per_layer", false, - ("If true, profiler function will be enabled. " - "Since the profile function may affect execution speed, it is recommended " - "to set this flag true only for development purpose.")); - double clip_value = declare_parameter_with_description( - "clip_value", 0.0, - ("If positive value is specified, " - "the value of each layer output will be clipped between [0.0, clip_value]. " - "This option is valid only when precision==int8 and used to manually specify " - "the dynamic range instead of using any calibration")); - bool preprocess_on_gpu = declare_parameter_with_description( - "preprocess_on_gpu", true, "If true, pre-processing is performed on GPU"); - std::string calibration_image_list_path = declare_parameter_with_description( - "calibration_image_list_path", "", - ("Path to a file which contains path to images." - "Those images will be used for int8 quantization.")); - - std::string color_map_path = declare_parameter_with_description( - "color_map_path", "", ("Path to a file which contains path to color map.")); + const std::string model_path = this->declare_parameter("model_path"); + const std::string label_path = this->declare_parameter("label_path"); + const std::string precision = this->declare_parameter("precision"); + const float score_threshold = + static_cast(this->declare_parameter("score_threshold")); + const float nms_threshold = static_cast(this->declare_parameter("nms_threshold")); + const std::string calibration_algorithm = + this->declare_parameter("calibration_algorithm"); + const int dla_core_id = this->declare_parameter("dla_core_id"); + const bool quantize_first_layer = this->declare_parameter("quantize_first_layer"); + const bool quantize_last_layer = this->declare_parameter("quantize_last_layer"); + const bool profile_per_layer = this->declare_parameter("profile_per_layer"); + const double clip_value = this->declare_parameter("clip_value"); + const bool preprocess_on_gpu = this->declare_parameter("preprocess_on_gpu"); + const std::string calibration_image_list_path = + this->declare_parameter("calibration_image_list_path"); + + std::string color_map_path = this->declare_parameter("color_map_path"); + if (!readLabelFile(label_path)) { RCLCPP_ERROR(this->get_logger(), "Could not find label file"); rclcpp::shutdown(); From 422e92b9900ad02e26cee0ec8b225f7ad10efda1 Mon Sep 17 00:00:00 2001 From: Esteve Fernandez <33620+esteve@users.noreply.github.com> Date: Fri, 19 Jul 2024 03:16:06 +0200 Subject: [PATCH 228/306] refactor(autoware_tracking_object_merger): move headers to include/autoware and rename package (#7809) Signed-off-by: Esteve Fernandez --- .github/CODEOWNERS | 2 +- .../object_recognition/tracking/tracking.launch.xml | 2 +- launch/tier4_perception_launch/package.xml | 3 ++- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/data_association_matrix.param.yaml | 0 .../config/decorative_tracker_merger.param.yaml | 0 .../decorative_tracker_merger_policy.param.yaml | 0 .../image/decorative_tracker_merger.drawio.svg | 0 .../image/time_sync.drawio.svg | 0 .../image/tracklet_management.drawio.svg | 0 .../association/data_association.hpp | 10 +++++----- .../association/solver/gnn_solver.hpp | 12 ++++++------ .../association/solver/gnn_solver_interface.hpp | 6 +++--- .../association/solver/mu_ssp.hpp | 8 ++++---- .../association/solver/ssp.hpp | 8 ++++---- .../decorative_tracker_merger_node.hpp | 12 ++++++------ .../tracking_object_merger}/utils/tracker_state.hpp | 6 +++--- .../autoware/tracking_object_merger}/utils/utils.hpp | 6 +++--- .../launch/decorative_tracker_merger.launch.xml | 8 ++++---- .../package.xml | 2 +- .../src/association/data_association.cpp | 6 +++--- .../solver/mu_successive_shortest_path_wrapper.cpp | 2 +- .../association/solver/successive_shortest_path.cpp | 2 +- .../src/decorative_tracker_merger_node.cpp | 6 +++--- .../src/utils/tracker_state.cpp | 4 ++-- .../src/utils/utils.cpp | 2 +- 27 files changed, 55 insertions(+), 54 deletions(-) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/CMakeLists.txt (95%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/README.md (100%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/config/data_association_matrix.param.yaml (100%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/config/decorative_tracker_merger.param.yaml (100%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/config/decorative_tracker_merger_policy.param.yaml (100%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/image/decorative_tracker_merger.drawio.svg (100%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/image/time_sync.drawio.svg (100%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/image/tracklet_management.drawio.svg (100%) rename perception/{tracking_object_merger/include/autoware_tracking_object_merger => autoware_tracking_object_merger/include/autoware/tracking_object_merger}/association/data_association.hpp (86%) rename perception/{tracking_object_merger/include/autoware_tracking_object_merger => autoware_tracking_object_merger/include/autoware/tracking_object_merger}/association/solver/gnn_solver.hpp (59%) rename perception/{tracking_object_merger/include/autoware_tracking_object_merger => autoware_tracking_object_merger/include/autoware/tracking_object_merger}/association/solver/gnn_solver_interface.hpp (79%) rename perception/{tracking_object_merger/include/autoware_tracking_object_merger => autoware_tracking_object_merger/include/autoware/tracking_object_merger}/association/solver/mu_ssp.hpp (78%) rename perception/{tracking_object_merger/include/autoware_tracking_object_merger => autoware_tracking_object_merger/include/autoware/tracking_object_merger}/association/solver/ssp.hpp (79%) rename perception/{tracking_object_merger/src => autoware_tracking_object_merger/include/autoware/tracking_object_merger}/decorative_tracker_merger_node.hpp (92%) rename perception/{tracking_object_merger/include/autoware_tracking_object_merger => autoware_tracking_object_merger/include/autoware/tracking_object_merger}/utils/tracker_state.hpp (96%) rename perception/{tracking_object_merger/include/autoware_tracking_object_merger => autoware_tracking_object_merger/include/autoware/tracking_object_merger}/utils/utils.hpp (94%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/launch/decorative_tracker_merger.launch.xml (52%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/package.xml (96%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/src/association/data_association.cpp (97%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/src/association/solver/mu_successive_shortest_path_wrapper.cpp (95%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/src/association/solver/successive_shortest_path.cpp (99%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/src/decorative_tracker_merger_node.cpp (98%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/src/utils/tracker_state.cpp (98%) rename perception/{tracking_object_merger => autoware_tracking_object_merger}/src/utils/utils.cpp (99%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0233fee04513c..c31b7d3c0051b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -113,6 +113,7 @@ perception/autoware_radar_crossing_objects_noise_filter/** satoshi.tanaka@tier4. perception/autoware_radar_fusion_to_detected_object/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp perception/autoware_radar_object_clustering/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp perception/autoware_radar_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +perception/autoware_tracking_object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/bytetrack/** manato.hirabayashi@tier4.jp yoshi.ri@tier4.jp perception/autoware_cluster_merger/** dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yukihiro.saito@tier4.jp perception/compare_map_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp yukihiro.saito@tier4.jp @@ -137,7 +138,6 @@ perception/shape_estimation/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/simple_object_merger/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp perception/tensorrt_classifier/** kotaro.uetake@tier4.jp shunsuke.miura@tier4.jp perception/tensorrt_yolox/** dan.umeda@tier4.jp manato.hirabayashi@tier4.jp -perception/tracking_object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/traffic_light_arbiter/** kenzo.lobos@tier4.jp shunsuke.miura@tier4.jp perception/traffic_light_classifier/** shunsuke.miura@tier4.jp tao.zhong@tier4.jp yukihiro.saito@tier4.jp perception/traffic_light_fine_detector/** shintaro.tomie@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp diff --git a/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml index 580436411a895..83eeeef42c36f 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml @@ -55,7 +55,7 @@
- + diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index a240d3e0576e3..0be8367052650 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -25,6 +25,8 @@ autoware_radar_object_clustering autoware_radar_object_tracker autoware_raindrop_cluster_filter + autoware_tracking_object_merger + cluster_merger compare_map_segmentation detected_object_feature_remover detected_object_validation @@ -41,7 +43,6 @@ probabilistic_occupancy_grid_map shape_estimation topic_tools - tracking_object_merger traffic_light_arbiter traffic_light_classifier traffic_light_fine_detector diff --git a/perception/tracking_object_merger/CMakeLists.txt b/perception/autoware_tracking_object_merger/CMakeLists.txt similarity index 95% rename from perception/tracking_object_merger/CMakeLists.txt rename to perception/autoware_tracking_object_merger/CMakeLists.txt index 7e7c698365922..9b17ee0546879 100644 --- a/perception/tracking_object_merger/CMakeLists.txt +++ b/perception/autoware_tracking_object_merger/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(tracking_object_merger VERSION 1.0.0) +project(autoware_tracking_object_merger VERSION 1.0.0) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic -Werror -Wconversion) diff --git a/perception/tracking_object_merger/README.md b/perception/autoware_tracking_object_merger/README.md similarity index 100% rename from perception/tracking_object_merger/README.md rename to perception/autoware_tracking_object_merger/README.md diff --git a/perception/tracking_object_merger/config/data_association_matrix.param.yaml b/perception/autoware_tracking_object_merger/config/data_association_matrix.param.yaml similarity index 100% rename from perception/tracking_object_merger/config/data_association_matrix.param.yaml rename to perception/autoware_tracking_object_merger/config/data_association_matrix.param.yaml diff --git a/perception/tracking_object_merger/config/decorative_tracker_merger.param.yaml b/perception/autoware_tracking_object_merger/config/decorative_tracker_merger.param.yaml similarity index 100% rename from perception/tracking_object_merger/config/decorative_tracker_merger.param.yaml rename to perception/autoware_tracking_object_merger/config/decorative_tracker_merger.param.yaml diff --git a/perception/tracking_object_merger/config/decorative_tracker_merger_policy.param.yaml b/perception/autoware_tracking_object_merger/config/decorative_tracker_merger_policy.param.yaml similarity index 100% rename from perception/tracking_object_merger/config/decorative_tracker_merger_policy.param.yaml rename to perception/autoware_tracking_object_merger/config/decorative_tracker_merger_policy.param.yaml diff --git a/perception/tracking_object_merger/image/decorative_tracker_merger.drawio.svg b/perception/autoware_tracking_object_merger/image/decorative_tracker_merger.drawio.svg similarity index 100% rename from perception/tracking_object_merger/image/decorative_tracker_merger.drawio.svg rename to perception/autoware_tracking_object_merger/image/decorative_tracker_merger.drawio.svg diff --git a/perception/tracking_object_merger/image/time_sync.drawio.svg b/perception/autoware_tracking_object_merger/image/time_sync.drawio.svg similarity index 100% rename from perception/tracking_object_merger/image/time_sync.drawio.svg rename to perception/autoware_tracking_object_merger/image/time_sync.drawio.svg diff --git a/perception/tracking_object_merger/image/tracklet_management.drawio.svg b/perception/autoware_tracking_object_merger/image/tracklet_management.drawio.svg similarity index 100% rename from perception/tracking_object_merger/image/tracklet_management.drawio.svg rename to perception/autoware_tracking_object_merger/image/tracklet_management.drawio.svg diff --git a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/data_association.hpp b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/data_association.hpp similarity index 86% rename from perception/tracking_object_merger/include/autoware_tracking_object_merger/association/data_association.hpp rename to perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/data_association.hpp index a272e42a74e80..af4a65869eca5 100644 --- a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/data_association.hpp +++ b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/data_association.hpp @@ -16,13 +16,13 @@ // Author: v1.0 Yukihiro Saito // -#ifndef AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ -#define AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ +#ifndef AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ +#define AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ #define EIGEN_MPL2_ONLY -#include "autoware_tracking_object_merger/association/solver/gnn_solver.hpp" -#include "autoware_tracking_object_merger/utils/tracker_state.hpp" +#include "autoware/tracking_object_merger/association/solver/gnn_solver.hpp" +#include "autoware/tracking_object_merger/utils/tracker_state.hpp" #include #include @@ -72,4 +72,4 @@ class DataAssociation } // namespace autoware::tracking_object_merger -#endif // AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ +#endif // AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__DATA_ASSOCIATION_HPP_ diff --git a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/gnn_solver.hpp b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/gnn_solver.hpp similarity index 59% rename from perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/gnn_solver.hpp rename to perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/gnn_solver.hpp index 4cea0e3cbe96f..64a18d878f7c3 100644 --- a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/gnn_solver.hpp +++ b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/gnn_solver.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ -#define AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ +#ifndef AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ +#define AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ -#include "autoware_tracking_object_merger/association/solver/gnn_solver_interface.hpp" -#include "autoware_tracking_object_merger/association/solver/mu_ssp.hpp" -#include "autoware_tracking_object_merger/association/solver/ssp.hpp" +#include "autoware/tracking_object_merger/association/solver/gnn_solver_interface.hpp" +#include "autoware/tracking_object_merger/association/solver/mu_ssp.hpp" +#include "autoware/tracking_object_merger/association/solver/ssp.hpp" -#endif // AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ +#endif // AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_HPP_ diff --git a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/gnn_solver_interface.hpp b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/gnn_solver_interface.hpp similarity index 79% rename from perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/gnn_solver_interface.hpp rename to perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/gnn_solver_interface.hpp index d751075773a09..732ed5cd87041 100644 --- a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/gnn_solver_interface.hpp +++ b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/gnn_solver_interface.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ -#define AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ +#ifndef AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ +#define AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ #include #include @@ -32,4 +32,4 @@ class GnnSolverInterface }; } // namespace autoware::tracking_object_merger::gnn_solver -#endif // AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ +#endif // AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__GNN_SOLVER_INTERFACE_HPP_ diff --git a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/mu_ssp.hpp b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/mu_ssp.hpp similarity index 78% rename from perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/mu_ssp.hpp rename to perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/mu_ssp.hpp index 47c23bc8eb1b1..b219c1ac441eb 100644 --- a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/mu_ssp.hpp +++ b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/mu_ssp.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ -#define AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ +#ifndef AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ +#define AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ -#include "autoware_tracking_object_merger/association/solver/gnn_solver_interface.hpp" +#include "autoware/tracking_object_merger/association/solver/gnn_solver_interface.hpp" #include #include @@ -34,4 +34,4 @@ class MuSSP : public GnnSolverInterface }; } // namespace autoware::tracking_object_merger::gnn_solver -#endif // AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ +#endif // AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__MU_SSP_HPP_ diff --git a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/ssp.hpp b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/ssp.hpp similarity index 79% rename from perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/ssp.hpp rename to perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/ssp.hpp index bcfac73f3e43b..03311e4e43694 100644 --- a/perception/tracking_object_merger/include/autoware_tracking_object_merger/association/solver/ssp.hpp +++ b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/association/solver/ssp.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ -#define AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ +#ifndef AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ +#define AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ -#include "autoware_tracking_object_merger/association/solver/gnn_solver_interface.hpp" +#include "autoware/tracking_object_merger/association/solver/gnn_solver_interface.hpp" #include #include @@ -34,4 +34,4 @@ class SSP : public GnnSolverInterface }; } // namespace autoware::tracking_object_merger::gnn_solver -#endif // AUTOWARE_TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ +#endif // AUTOWARE__TRACKING_OBJECT_MERGER__ASSOCIATION__SOLVER__SSP_HPP_ diff --git a/perception/tracking_object_merger/src/decorative_tracker_merger_node.hpp b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/decorative_tracker_merger_node.hpp similarity index 92% rename from perception/tracking_object_merger/src/decorative_tracker_merger_node.hpp rename to perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/decorative_tracker_merger_node.hpp index e0ef193b8306b..f091959396574 100644 --- a/perception/tracking_object_merger/src/decorative_tracker_merger_node.hpp +++ b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/decorative_tracker_merger_node.hpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef DECORATIVE_TRACKER_MERGER_NODE_HPP_ -#define DECORATIVE_TRACKER_MERGER_NODE_HPP_ +#ifndef AUTOWARE__TRACKING_OBJECT_MERGER__DECORATIVE_TRACKER_MERGER_NODE_HPP_ +#define AUTOWARE__TRACKING_OBJECT_MERGER__DECORATIVE_TRACKER_MERGER_NODE_HPP_ +#include "autoware/tracking_object_merger/association/data_association.hpp" +#include "autoware/tracking_object_merger/utils/tracker_state.hpp" +#include "autoware/tracking_object_merger/utils/utils.hpp" #include "autoware/universe_utils/ros/debug_publisher.hpp" #include "autoware/universe_utils/ros/published_time_publisher.hpp" #include "autoware/universe_utils/system/stop_watch.hpp" -#include "autoware_tracking_object_merger/association/data_association.hpp" -#include "autoware_tracking_object_merger/utils/tracker_state.hpp" -#include "autoware_tracking_object_merger/utils/utils.hpp" #include @@ -133,4 +133,4 @@ class DecorativeTrackerMergerNode : public rclcpp::Node } // namespace autoware::tracking_object_merger -#endif // DECORATIVE_TRACKER_MERGER_NODE_HPP_ +#endif // AUTOWARE__TRACKING_OBJECT_MERGER__DECORATIVE_TRACKER_MERGER_NODE_HPP_ diff --git a/perception/tracking_object_merger/include/autoware_tracking_object_merger/utils/tracker_state.hpp b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/utils/tracker_state.hpp similarity index 96% rename from perception/tracking_object_merger/include/autoware_tracking_object_merger/utils/tracker_state.hpp rename to perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/utils/tracker_state.hpp index ed1f69191b652..5f1ab36f1265e 100644 --- a/perception/tracking_object_merger/include/autoware_tracking_object_merger/utils/tracker_state.hpp +++ b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/utils/tracker_state.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef AUTOWARE_TRACKING_OBJECT_MERGER__UTILS__TRACKER_STATE_HPP_ -#define AUTOWARE_TRACKING_OBJECT_MERGER__UTILS__TRACKER_STATE_HPP_ +#ifndef AUTOWARE__TRACKING_OBJECT_MERGER__UTILS__TRACKER_STATE_HPP_ +#define AUTOWARE__TRACKING_OBJECT_MERGER__UTILS__TRACKER_STATE_HPP_ #include #include @@ -149,4 +149,4 @@ TrackedObjects getTrackedObjectsFromTrackerStates( std::vector & tracker_states, const rclcpp::Time & time); } // namespace autoware::tracking_object_merger -#endif // AUTOWARE_TRACKING_OBJECT_MERGER__UTILS__TRACKER_STATE_HPP_ +#endif // AUTOWARE__TRACKING_OBJECT_MERGER__UTILS__TRACKER_STATE_HPP_ diff --git a/perception/tracking_object_merger/include/autoware_tracking_object_merger/utils/utils.hpp b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/utils/utils.hpp similarity index 94% rename from perception/tracking_object_merger/include/autoware_tracking_object_merger/utils/utils.hpp rename to perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/utils/utils.hpp index eb288c4e853ad..17a385da7cb41 100644 --- a/perception/tracking_object_merger/include/autoware_tracking_object_merger/utils/utils.hpp +++ b/perception/autoware_tracking_object_merger/include/autoware/tracking_object_merger/utils/utils.hpp @@ -14,8 +14,8 @@ // // -#ifndef AUTOWARE_TRACKING_OBJECT_MERGER__UTILS__UTILS_HPP_ -#define AUTOWARE_TRACKING_OBJECT_MERGER__UTILS__UTILS_HPP_ +#ifndef AUTOWARE__TRACKING_OBJECT_MERGER__UTILS__UTILS_HPP_ +#define AUTOWARE__TRACKING_OBJECT_MERGER__UTILS__UTILS_HPP_ #include "autoware/universe_utils/geometry/geometry.hpp" @@ -100,4 +100,4 @@ void updateWholeTrackedObject(TrackedObject & main_obj, const TrackedObject & su } // namespace autoware::tracking_object_merger -#endif // AUTOWARE_TRACKING_OBJECT_MERGER__UTILS__UTILS_HPP_ +#endif // AUTOWARE__TRACKING_OBJECT_MERGER__UTILS__UTILS_HPP_ diff --git a/perception/tracking_object_merger/launch/decorative_tracker_merger.launch.xml b/perception/autoware_tracking_object_merger/launch/decorative_tracker_merger.launch.xml similarity index 52% rename from perception/tracking_object_merger/launch/decorative_tracker_merger.launch.xml rename to perception/autoware_tracking_object_merger/launch/decorative_tracker_merger.launch.xml index 2cc2a69e295e6..cd609a0fa612a 100644 --- a/perception/tracking_object_merger/launch/decorative_tracker_merger.launch.xml +++ b/perception/autoware_tracking_object_merger/launch/decorative_tracker_merger.launch.xml @@ -3,11 +3,11 @@ - - - + + + - + diff --git a/perception/tracking_object_merger/package.xml b/perception/autoware_tracking_object_merger/package.xml similarity index 96% rename from perception/tracking_object_merger/package.xml rename to perception/autoware_tracking_object_merger/package.xml index cc23578773fe2..321016ac0ff48 100644 --- a/perception/tracking_object_merger/package.xml +++ b/perception/autoware_tracking_object_merger/package.xml @@ -1,7 +1,7 @@ - tracking_object_merger + autoware_tracking_object_merger 0.0.0 merge tracking object Yukihiro Saito diff --git a/perception/tracking_object_merger/src/association/data_association.cpp b/perception/autoware_tracking_object_merger/src/association/data_association.cpp similarity index 97% rename from perception/tracking_object_merger/src/association/data_association.cpp rename to perception/autoware_tracking_object_merger/src/association/data_association.cpp index 046fcf5986469..119c95c86daf8 100644 --- a/perception/tracking_object_merger/src/association/data_association.cpp +++ b/perception/autoware_tracking_object_merger/src/association/data_association.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware_tracking_object_merger/association/data_association.hpp" +#include "autoware/tracking_object_merger/association/data_association.hpp" +#include "autoware/tracking_object_merger/association/solver/gnn_solver.hpp" +#include "autoware/tracking_object_merger/utils/utils.hpp" #include "autoware/universe_utils/geometry/geometry.hpp" -#include "autoware_tracking_object_merger/association/solver/gnn_solver.hpp" -#include "autoware_tracking_object_merger/utils/utils.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include diff --git a/perception/tracking_object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp b/perception/autoware_tracking_object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp similarity index 95% rename from perception/tracking_object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp rename to perception/autoware_tracking_object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp index d2db6eba068ec..7899d7e1a7898 100644 --- a/perception/tracking_object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp +++ b/perception/autoware_tracking_object_merger/src/association/solver/mu_successive_shortest_path_wrapper.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware_tracking_object_merger/association/solver/mu_ssp.hpp" +#include "autoware/tracking_object_merger/association/solver/mu_ssp.hpp" #include diff --git a/perception/tracking_object_merger/src/association/solver/successive_shortest_path.cpp b/perception/autoware_tracking_object_merger/src/association/solver/successive_shortest_path.cpp similarity index 99% rename from perception/tracking_object_merger/src/association/solver/successive_shortest_path.cpp rename to perception/autoware_tracking_object_merger/src/association/solver/successive_shortest_path.cpp index 7d792c157d356..e56901e479eac 100644 --- a/perception/tracking_object_merger/src/association/solver/successive_shortest_path.cpp +++ b/perception/autoware_tracking_object_merger/src/association/solver/successive_shortest_path.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware_tracking_object_merger/association/solver/ssp.hpp" +#include "autoware/tracking_object_merger/association/solver/ssp.hpp" #include #include diff --git a/perception/tracking_object_merger/src/decorative_tracker_merger_node.cpp b/perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp similarity index 98% rename from perception/tracking_object_merger/src/decorative_tracker_merger_node.cpp rename to perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp index 6f65941c0a747..187fb6e1d462e 100644 --- a/perception/tracking_object_merger/src/decorative_tracker_merger_node.cpp +++ b/perception/autoware_tracking_object_merger/src/decorative_tracker_merger_node.cpp @@ -14,10 +14,10 @@ #define EIGEN_MPL2_ONLY -#include "decorative_tracker_merger_node.hpp" +#include "autoware/tracking_object_merger/decorative_tracker_merger_node.hpp" -#include "autoware_tracking_object_merger/association/solver/ssp.hpp" -#include "autoware_tracking_object_merger/utils/utils.hpp" +#include "autoware/tracking_object_merger/association/solver/ssp.hpp" +#include "autoware/tracking_object_merger/utils/utils.hpp" #include "object_recognition_utils/object_recognition_utils.hpp" #include diff --git a/perception/tracking_object_merger/src/utils/tracker_state.cpp b/perception/autoware_tracking_object_merger/src/utils/tracker_state.cpp similarity index 98% rename from perception/tracking_object_merger/src/utils/tracker_state.cpp rename to perception/autoware_tracking_object_merger/src/utils/tracker_state.cpp index 54b1d73c375a5..eabbd72364129 100644 --- a/perception/tracking_object_merger/src/utils/tracker_state.cpp +++ b/perception/autoware_tracking_object_merger/src/utils/tracker_state.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware_tracking_object_merger/utils/tracker_state.hpp" +#include "autoware/tracking_object_merger/utils/tracker_state.hpp" -#include "autoware_tracking_object_merger/utils/utils.hpp" +#include "autoware/tracking_object_merger/utils/utils.hpp" namespace autoware::tracking_object_merger { diff --git a/perception/tracking_object_merger/src/utils/utils.cpp b/perception/autoware_tracking_object_merger/src/utils/utils.cpp similarity index 99% rename from perception/tracking_object_merger/src/utils/utils.cpp rename to perception/autoware_tracking_object_merger/src/utils/utils.cpp index 1ae705aa38f15..3a24cc0f8321d 100644 --- a/perception/tracking_object_merger/src/utils/utils.cpp +++ b/perception/autoware_tracking_object_merger/src/utils/utils.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "autoware_tracking_object_merger/utils/utils.hpp" +#include "autoware/tracking_object_merger/utils/utils.hpp" #include "autoware_perception_msgs/msg/shape.hpp" #include "autoware_perception_msgs/msg/tracked_object.hpp" From d58afb318080f22e1f0094560ce3a85868214347 Mon Sep 17 00:00:00 2001 From: Ryuta Kambe Date: Fri, 19 Jul 2024 10:25:53 +0900 Subject: [PATCH 229/306] fix(mrm_handler, emergency_handler): remove unnecessary depend (#8099) * fix(mrm_handler): remove unnecessary depends Signed-off-by: veqcc * fix(emergency_handler): remove unnecessary depends Signed-off-by: veqcc --------- Signed-off-by: veqcc --- system/emergency_handler/package.xml | 2 -- system/mrm_handler/package.xml | 4 ---- 2 files changed, 6 deletions(-) diff --git a/system/emergency_handler/package.xml b/system/emergency_handler/package.xml index 099e8a77d191e..e16c1b60a5be0 100644 --- a/system/emergency_handler/package.xml +++ b/system/emergency_handler/package.xml @@ -20,8 +20,6 @@ nav_msgs rclcpp rclcpp_components - std_msgs - std_srvs tier4_system_msgs ament_lint_auto diff --git a/system/mrm_handler/package.xml b/system/mrm_handler/package.xml index a2c3397296db3..6e08b261f09c0 100644 --- a/system/mrm_handler/package.xml +++ b/system/mrm_handler/package.xml @@ -13,15 +13,11 @@ autoware_cmake autoware_adapi_v1_msgs - autoware_control_msgs - autoware_system_msgs autoware_universe_utils autoware_vehicle_msgs nav_msgs rclcpp rclcpp_components - std_msgs - std_srvs tier4_system_msgs ament_lint_auto From 26af438b1d3a8edb5a9396cfd6e66db6a774d320 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Fri, 19 Jul 2024 10:51:35 +0900 Subject: [PATCH 230/306] refactor(multi_object_tracker)!: add package name prefix of autoware_ (#8083) * refactor: rename multi_object_tracker package to autoware_multi_object_tracker Signed-off-by: Taekjin LEE * style(pre-commit): autofix --------- Signed-off-by: Taekjin LEE Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/CODEOWNERS | 2 +- .../object_recognition/tracking/tracking.launch.xml | 4 ++-- launch/tier4_perception_launch/package.xml | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../config/data_association_matrix.param.yaml | 0 .../config/input_channels.param.yaml | 0 .../config/multi_object_tracker_node.param.yaml | 0 .../config/simulation_tracker.param.yaml | 0 .../image/anchor_point.drawio.svg | 0 .../image/kinematic_bicycle_model.png | Bin .../image/multi_object_tracker_overview.svg | 0 .../image/mussp_evaluation1.png | Bin .../image/mussp_evaluation2.png | Bin .../image/nearest_corner_or_side.drawio.svg | 0 .../association/association.hpp | 0 .../association/solver/gnn_solver.hpp | 0 .../association/solver/gnn_solver_interface.hpp | 0 .../association/solver/mu_ssp.hpp | 0 .../multi_object_tracker/association/solver/ssp.hpp | 0 .../tracker/model/bicycle_tracker.hpp | 0 .../tracker/model/big_vehicle_tracker.hpp | 0 .../tracker/model/multiple_vehicle_tracker.hpp | 0 .../tracker/model/normal_vehicle_tracker.hpp | 0 .../tracker/model/pass_through_tracker.hpp | 0 .../model/pedestrian_and_bicycle_tracker.hpp | 0 .../tracker/model/pedestrian_tracker.hpp | 0 .../tracker/model/tracker_base.hpp | 0 .../tracker/model/unknown_tracker.hpp | 0 .../tracker/motion_model/bicycle_motion_model.hpp | 0 .../tracker/motion_model/ctrv_motion_model.hpp | 0 .../tracker/motion_model/cv_motion_model.hpp | 0 .../tracker/motion_model/motion_model_base.hpp | 0 .../tracker/object_model/object_model.hpp | 0 .../multi_object_tracker/tracker/tracker.hpp | 0 .../autoware/multi_object_tracker/utils/utils.hpp | 0 .../launch/multi_object_tracker.launch.xml | 8 ++++---- .../lib/association/association.cpp | 0 .../mu_successive_shortest_path/mu_ssp.cpp | 0 .../association/successive_shortest_path/ssp.cpp | 0 .../lib/tracker/model/bicycle_tracker.cpp | 0 .../lib/tracker/model/big_vehicle_tracker.cpp | 0 .../lib/tracker/model/multiple_vehicle_tracker.cpp | 0 .../lib/tracker/model/normal_vehicle_tracker.cpp | 0 .../lib/tracker/model/pass_through_tracker.cpp | 0 .../model/pedestrian_and_bicycle_tracker.cpp | 0 .../lib/tracker/model/pedestrian_tracker.cpp | 0 .../lib/tracker/model/tracker_base.cpp | 0 .../lib/tracker/model/unknown_tracker.cpp | 0 .../tracker/motion_model/bicycle_motion_model.cpp | 0 .../lib/tracker/motion_model/ctrv_motion_model.cpp | 0 .../lib/tracker/motion_model/cv_motion_model.cpp | 0 .../lib/tracker/motion_model/motion_model_base.cpp | 0 .../models.md | 0 .../package.xml | 4 ++-- .../src/debugger/debug_object.cpp | 0 .../src/debugger/debug_object.hpp | 0 .../src/debugger/debugger.cpp | 0 .../src/debugger/debugger.hpp | 0 .../src/multi_object_tracker_node.cpp | 0 .../src/multi_object_tracker_node.hpp | 0 .../src/processor/input_manager.cpp | 0 .../src/processor/input_manager.hpp | 0 .../src/processor/processor.cpp | 0 .../src/processor/processor.hpp | 0 .../autoware_radar_object_clustering/README.md | 2 +- 66 files changed, 12 insertions(+), 12 deletions(-) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/CMakeLists.txt (97%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/README.md (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/config/data_association_matrix.param.yaml (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/config/input_channels.param.yaml (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/config/multi_object_tracker_node.param.yaml (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/config/simulation_tracker.param.yaml (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/image/anchor_point.drawio.svg (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/image/kinematic_bicycle_model.png (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/image/multi_object_tracker_overview.svg (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/image/mussp_evaluation1.png (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/image/mussp_evaluation2.png (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/image/nearest_corner_or_side.drawio.svg (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/association/association.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/association/solver/gnn_solver.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/association/solver/mu_ssp.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/association/solver/ssp.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/model/pass_through_tracker.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/model/tracker_base.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/model/unknown_tracker.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/object_model/object_model.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/tracker/tracker.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/include/autoware/multi_object_tracker/utils/utils.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/launch/multi_object_tracker.launch.xml (52%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/association/association.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/association/mu_successive_shortest_path/mu_ssp.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/association/successive_shortest_path/ssp.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/model/bicycle_tracker.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/model/big_vehicle_tracker.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/model/multiple_vehicle_tracker.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/model/normal_vehicle_tracker.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/model/pass_through_tracker.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/model/pedestrian_and_bicycle_tracker.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/model/pedestrian_tracker.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/model/tracker_base.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/model/unknown_tracker.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/motion_model/bicycle_motion_model.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/motion_model/ctrv_motion_model.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/motion_model/cv_motion_model.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/lib/tracker/motion_model/motion_model_base.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/models.md (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/package.xml (90%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/debugger/debug_object.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/debugger/debug_object.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/debugger/debugger.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/debugger/debugger.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/multi_object_tracker_node.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/multi_object_tracker_node.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/processor/input_manager.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/processor/input_manager.hpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/processor/processor.cpp (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/src/processor/processor.hpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c31b7d3c0051b..7c8c123a4ade1 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -129,7 +129,7 @@ perception/lidar_apollo_segmentation_tvm/** ambroise.vincent@arm.com yoshi.ri@ti perception/lidar_apollo_segmentation_tvm_nodes/** ambroise.vincent@arm.com yoshi.ri@tier4.jp perception/lidar_centerpoint/** kenzo.lobos@tier4.jp koji.minoda@tier4.jp perception/lidar_transfusion/** amadeusz.szymko.2@tier4.jp kenzo.lobos@tier4.jp satoshi.tanaka@tier4.jp -perception/multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp +perception/autoware_multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/occupancy_grid_map_outlier_filter/** abrahammonrroy@yahoo.com yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/probabilistic_occupancy_grid_map/** mamoru.sobue@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/radar_tracks_msgs_converter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp diff --git a/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml index 83eeeef42c36f..cc9fe78b748a4 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/tracking/tracking.launch.xml @@ -35,7 +35,7 @@ - + @@ -89,7 +89,7 @@
- + diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index 0be8367052650..c247bd9bbf339 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -17,6 +17,7 @@ autoware_crosswalk_traffic_light_estimator autoware_detection_by_tracker autoware_map_based_prediction + autoware_multi_object_tracker autoware_object_merger autoware_object_range_splitter autoware_object_velocity_splitter @@ -36,7 +37,6 @@ image_projection_based_fusion image_transport_decompressor lidar_apollo_instance_segmentation - multi_object_tracker occupancy_grid_map_outlier_filter pointcloud_preprocessor pointcloud_to_laserscan diff --git a/perception/multi_object_tracker/CMakeLists.txt b/perception/autoware_multi_object_tracker/CMakeLists.txt similarity index 97% rename from perception/multi_object_tracker/CMakeLists.txt rename to perception/autoware_multi_object_tracker/CMakeLists.txt index 370e5bb0b9161..fe4546cc9bc60 100644 --- a/perception/multi_object_tracker/CMakeLists.txt +++ b/perception/autoware_multi_object_tracker/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(multi_object_tracker) +project(autoware_multi_object_tracker) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/perception/multi_object_tracker/README.md b/perception/autoware_multi_object_tracker/README.md similarity index 100% rename from perception/multi_object_tracker/README.md rename to perception/autoware_multi_object_tracker/README.md diff --git a/perception/multi_object_tracker/config/data_association_matrix.param.yaml b/perception/autoware_multi_object_tracker/config/data_association_matrix.param.yaml similarity index 100% rename from perception/multi_object_tracker/config/data_association_matrix.param.yaml rename to perception/autoware_multi_object_tracker/config/data_association_matrix.param.yaml diff --git a/perception/multi_object_tracker/config/input_channels.param.yaml b/perception/autoware_multi_object_tracker/config/input_channels.param.yaml similarity index 100% rename from perception/multi_object_tracker/config/input_channels.param.yaml rename to perception/autoware_multi_object_tracker/config/input_channels.param.yaml diff --git a/perception/multi_object_tracker/config/multi_object_tracker_node.param.yaml b/perception/autoware_multi_object_tracker/config/multi_object_tracker_node.param.yaml similarity index 100% rename from perception/multi_object_tracker/config/multi_object_tracker_node.param.yaml rename to perception/autoware_multi_object_tracker/config/multi_object_tracker_node.param.yaml diff --git a/perception/multi_object_tracker/config/simulation_tracker.param.yaml b/perception/autoware_multi_object_tracker/config/simulation_tracker.param.yaml similarity index 100% rename from perception/multi_object_tracker/config/simulation_tracker.param.yaml rename to perception/autoware_multi_object_tracker/config/simulation_tracker.param.yaml diff --git a/perception/multi_object_tracker/image/anchor_point.drawio.svg b/perception/autoware_multi_object_tracker/image/anchor_point.drawio.svg similarity index 100% rename from perception/multi_object_tracker/image/anchor_point.drawio.svg rename to perception/autoware_multi_object_tracker/image/anchor_point.drawio.svg diff --git a/perception/multi_object_tracker/image/kinematic_bicycle_model.png b/perception/autoware_multi_object_tracker/image/kinematic_bicycle_model.png similarity index 100% rename from perception/multi_object_tracker/image/kinematic_bicycle_model.png rename to perception/autoware_multi_object_tracker/image/kinematic_bicycle_model.png diff --git a/perception/multi_object_tracker/image/multi_object_tracker_overview.svg b/perception/autoware_multi_object_tracker/image/multi_object_tracker_overview.svg similarity index 100% rename from perception/multi_object_tracker/image/multi_object_tracker_overview.svg rename to perception/autoware_multi_object_tracker/image/multi_object_tracker_overview.svg diff --git a/perception/multi_object_tracker/image/mussp_evaluation1.png b/perception/autoware_multi_object_tracker/image/mussp_evaluation1.png similarity index 100% rename from perception/multi_object_tracker/image/mussp_evaluation1.png rename to perception/autoware_multi_object_tracker/image/mussp_evaluation1.png diff --git a/perception/multi_object_tracker/image/mussp_evaluation2.png b/perception/autoware_multi_object_tracker/image/mussp_evaluation2.png similarity index 100% rename from perception/multi_object_tracker/image/mussp_evaluation2.png rename to perception/autoware_multi_object_tracker/image/mussp_evaluation2.png diff --git a/perception/multi_object_tracker/image/nearest_corner_or_side.drawio.svg b/perception/autoware_multi_object_tracker/image/nearest_corner_or_side.drawio.svg similarity index 100% rename from perception/multi_object_tracker/image/nearest_corner_or_side.drawio.svg rename to perception/autoware_multi_object_tracker/image/nearest_corner_or_side.drawio.svg diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/association.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/association.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/association/association.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/association.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/solver/gnn_solver_interface.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/mu_ssp.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/solver/mu_ssp.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/mu_ssp.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/solver/mu_ssp.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/ssp.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/solver/ssp.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/association/solver/ssp.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/association/solver/ssp.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/bicycle_tracker.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/big_vehicle_tracker.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/multiple_vehicle_tracker.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/normal_vehicle_tracker.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pass_through_tracker.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pass_through_tracker.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pass_through_tracker.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pass_through_tracker.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_and_bicycle_tracker.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/pedestrian_tracker.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/tracker_base.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/tracker_base.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/tracker_base.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/tracker_base.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/unknown_tracker.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/unknown_tracker.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/unknown_tracker.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/model/unknown_tracker.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/bicycle_motion_model.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/ctrv_motion_model.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/cv_motion_model.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/motion_model/motion_model_base.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/object_model/object_model.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/object_model/object_model.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/object_model/object_model.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/object_model/object_model.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/tracker.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/tracker.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/tracker/tracker.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/tracker/tracker.hpp diff --git a/perception/multi_object_tracker/include/autoware/multi_object_tracker/utils/utils.hpp b/perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/utils/utils.hpp similarity index 100% rename from perception/multi_object_tracker/include/autoware/multi_object_tracker/utils/utils.hpp rename to perception/autoware_multi_object_tracker/include/autoware/multi_object_tracker/utils/utils.hpp diff --git a/perception/multi_object_tracker/launch/multi_object_tracker.launch.xml b/perception/autoware_multi_object_tracker/launch/multi_object_tracker.launch.xml similarity index 52% rename from perception/multi_object_tracker/launch/multi_object_tracker.launch.xml rename to perception/autoware_multi_object_tracker/launch/multi_object_tracker.launch.xml index b00ccd8fa623e..db76e181a6afa 100644 --- a/perception/multi_object_tracker/launch/multi_object_tracker.launch.xml +++ b/perception/autoware_multi_object_tracker/launch/multi_object_tracker.launch.xml @@ -2,11 +2,11 @@ - - - + + + - + diff --git a/perception/multi_object_tracker/lib/association/association.cpp b/perception/autoware_multi_object_tracker/lib/association/association.cpp similarity index 100% rename from perception/multi_object_tracker/lib/association/association.cpp rename to perception/autoware_multi_object_tracker/lib/association/association.cpp diff --git a/perception/multi_object_tracker/lib/association/mu_successive_shortest_path/mu_ssp.cpp b/perception/autoware_multi_object_tracker/lib/association/mu_successive_shortest_path/mu_ssp.cpp similarity index 100% rename from perception/multi_object_tracker/lib/association/mu_successive_shortest_path/mu_ssp.cpp rename to perception/autoware_multi_object_tracker/lib/association/mu_successive_shortest_path/mu_ssp.cpp diff --git a/perception/multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp b/perception/autoware_multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp similarity index 100% rename from perception/multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp rename to perception/autoware_multi_object_tracker/lib/association/successive_shortest_path/ssp.cpp diff --git a/perception/multi_object_tracker/lib/tracker/model/bicycle_tracker.cpp b/perception/autoware_multi_object_tracker/lib/tracker/model/bicycle_tracker.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/model/bicycle_tracker.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/model/bicycle_tracker.cpp diff --git a/perception/multi_object_tracker/lib/tracker/model/big_vehicle_tracker.cpp b/perception/autoware_multi_object_tracker/lib/tracker/model/big_vehicle_tracker.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/model/big_vehicle_tracker.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/model/big_vehicle_tracker.cpp diff --git a/perception/multi_object_tracker/lib/tracker/model/multiple_vehicle_tracker.cpp b/perception/autoware_multi_object_tracker/lib/tracker/model/multiple_vehicle_tracker.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/model/multiple_vehicle_tracker.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/model/multiple_vehicle_tracker.cpp diff --git a/perception/multi_object_tracker/lib/tracker/model/normal_vehicle_tracker.cpp b/perception/autoware_multi_object_tracker/lib/tracker/model/normal_vehicle_tracker.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/model/normal_vehicle_tracker.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/model/normal_vehicle_tracker.cpp diff --git a/perception/multi_object_tracker/lib/tracker/model/pass_through_tracker.cpp b/perception/autoware_multi_object_tracker/lib/tracker/model/pass_through_tracker.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/model/pass_through_tracker.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/model/pass_through_tracker.cpp diff --git a/perception/multi_object_tracker/lib/tracker/model/pedestrian_and_bicycle_tracker.cpp b/perception/autoware_multi_object_tracker/lib/tracker/model/pedestrian_and_bicycle_tracker.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/model/pedestrian_and_bicycle_tracker.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/model/pedestrian_and_bicycle_tracker.cpp diff --git a/perception/multi_object_tracker/lib/tracker/model/pedestrian_tracker.cpp b/perception/autoware_multi_object_tracker/lib/tracker/model/pedestrian_tracker.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/model/pedestrian_tracker.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/model/pedestrian_tracker.cpp diff --git a/perception/multi_object_tracker/lib/tracker/model/tracker_base.cpp b/perception/autoware_multi_object_tracker/lib/tracker/model/tracker_base.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/model/tracker_base.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/model/tracker_base.cpp diff --git a/perception/multi_object_tracker/lib/tracker/model/unknown_tracker.cpp b/perception/autoware_multi_object_tracker/lib/tracker/model/unknown_tracker.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/model/unknown_tracker.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/model/unknown_tracker.cpp diff --git a/perception/multi_object_tracker/lib/tracker/motion_model/bicycle_motion_model.cpp b/perception/autoware_multi_object_tracker/lib/tracker/motion_model/bicycle_motion_model.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/motion_model/bicycle_motion_model.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/motion_model/bicycle_motion_model.cpp diff --git a/perception/multi_object_tracker/lib/tracker/motion_model/ctrv_motion_model.cpp b/perception/autoware_multi_object_tracker/lib/tracker/motion_model/ctrv_motion_model.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/motion_model/ctrv_motion_model.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/motion_model/ctrv_motion_model.cpp diff --git a/perception/multi_object_tracker/lib/tracker/motion_model/cv_motion_model.cpp b/perception/autoware_multi_object_tracker/lib/tracker/motion_model/cv_motion_model.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/motion_model/cv_motion_model.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/motion_model/cv_motion_model.cpp diff --git a/perception/multi_object_tracker/lib/tracker/motion_model/motion_model_base.cpp b/perception/autoware_multi_object_tracker/lib/tracker/motion_model/motion_model_base.cpp similarity index 100% rename from perception/multi_object_tracker/lib/tracker/motion_model/motion_model_base.cpp rename to perception/autoware_multi_object_tracker/lib/tracker/motion_model/motion_model_base.cpp diff --git a/perception/multi_object_tracker/models.md b/perception/autoware_multi_object_tracker/models.md similarity index 100% rename from perception/multi_object_tracker/models.md rename to perception/autoware_multi_object_tracker/models.md diff --git a/perception/multi_object_tracker/package.xml b/perception/autoware_multi_object_tracker/package.xml similarity index 90% rename from perception/multi_object_tracker/package.xml rename to perception/autoware_multi_object_tracker/package.xml index 67f56273e79c5..3d941239976ea 100644 --- a/perception/multi_object_tracker/package.xml +++ b/perception/autoware_multi_object_tracker/package.xml @@ -1,9 +1,9 @@ - multi_object_tracker + autoware_multi_object_tracker 1.0.0 - The ROS 2 multi_object_tracker package + The ROS 2 autoware_multi_object_tracker package Yukihiro Saito Yoshi Ri Taekjin Lee diff --git a/perception/multi_object_tracker/src/debugger/debug_object.cpp b/perception/autoware_multi_object_tracker/src/debugger/debug_object.cpp similarity index 100% rename from perception/multi_object_tracker/src/debugger/debug_object.cpp rename to perception/autoware_multi_object_tracker/src/debugger/debug_object.cpp diff --git a/perception/multi_object_tracker/src/debugger/debug_object.hpp b/perception/autoware_multi_object_tracker/src/debugger/debug_object.hpp similarity index 100% rename from perception/multi_object_tracker/src/debugger/debug_object.hpp rename to perception/autoware_multi_object_tracker/src/debugger/debug_object.hpp diff --git a/perception/multi_object_tracker/src/debugger/debugger.cpp b/perception/autoware_multi_object_tracker/src/debugger/debugger.cpp similarity index 100% rename from perception/multi_object_tracker/src/debugger/debugger.cpp rename to perception/autoware_multi_object_tracker/src/debugger/debugger.cpp diff --git a/perception/multi_object_tracker/src/debugger/debugger.hpp b/perception/autoware_multi_object_tracker/src/debugger/debugger.hpp similarity index 100% rename from perception/multi_object_tracker/src/debugger/debugger.hpp rename to perception/autoware_multi_object_tracker/src/debugger/debugger.hpp diff --git a/perception/multi_object_tracker/src/multi_object_tracker_node.cpp b/perception/autoware_multi_object_tracker/src/multi_object_tracker_node.cpp similarity index 100% rename from perception/multi_object_tracker/src/multi_object_tracker_node.cpp rename to perception/autoware_multi_object_tracker/src/multi_object_tracker_node.cpp diff --git a/perception/multi_object_tracker/src/multi_object_tracker_node.hpp b/perception/autoware_multi_object_tracker/src/multi_object_tracker_node.hpp similarity index 100% rename from perception/multi_object_tracker/src/multi_object_tracker_node.hpp rename to perception/autoware_multi_object_tracker/src/multi_object_tracker_node.hpp diff --git a/perception/multi_object_tracker/src/processor/input_manager.cpp b/perception/autoware_multi_object_tracker/src/processor/input_manager.cpp similarity index 100% rename from perception/multi_object_tracker/src/processor/input_manager.cpp rename to perception/autoware_multi_object_tracker/src/processor/input_manager.cpp diff --git a/perception/multi_object_tracker/src/processor/input_manager.hpp b/perception/autoware_multi_object_tracker/src/processor/input_manager.hpp similarity index 100% rename from perception/multi_object_tracker/src/processor/input_manager.hpp rename to perception/autoware_multi_object_tracker/src/processor/input_manager.hpp diff --git a/perception/multi_object_tracker/src/processor/processor.cpp b/perception/autoware_multi_object_tracker/src/processor/processor.cpp similarity index 100% rename from perception/multi_object_tracker/src/processor/processor.cpp rename to perception/autoware_multi_object_tracker/src/processor/processor.cpp diff --git a/perception/multi_object_tracker/src/processor/processor.hpp b/perception/autoware_multi_object_tracker/src/processor/processor.hpp similarity index 100% rename from perception/multi_object_tracker/src/processor/processor.hpp rename to perception/autoware_multi_object_tracker/src/processor/processor.hpp diff --git a/perception/autoware_radar_object_clustering/README.md b/perception/autoware_radar_object_clustering/README.md index 5fbb4df81a115..bb792185299ab 100644 --- a/perception/autoware_radar_object_clustering/README.md +++ b/perception/autoware_radar_object_clustering/README.md @@ -44,7 +44,7 @@ When the size information from radar outputs lack accuracy, `is_fixed_size` para If the parameter is true, the size of a clustered object is overwritten by the label set by `size_x`, `size_y`, and `size_z` parameters. If this package use for faraway dynamic object detection with radar, the parameter is recommended to set to `size_x`, `size_y`, `size_z`, as average of vehicle size. -Note that to use for [multi_objects_tracker](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/multi_object_tracker), the size parameters need to exceed `min_area_matrix` parameters of it. +Note that to use for [multi_objects_tracker](https://github.com/autowarefoundation/autoware.universe/tree/main/perception/autoware_multi_object_tracker), the size parameters need to exceed `min_area_matrix` parameters of it. ### Limitation From a4dda766f40e1b3e64071fd9915e2e550aeb0ec4 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:05:33 +0900 Subject: [PATCH 231/306] fix(detected_object_validation): fix shadowVariable (#7935) fix:shadowVariable Signed-off-by: kobayu858 --- .../occupancy_grid_map/occupancy_grid_map_validator.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.cpp b/perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.cpp index ce900f30f4255..c082b4b0f03f1 100644 --- a/perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.cpp +++ b/perception/detected_object_validation/src/occupancy_grid_map/occupancy_grid_map_validator.cpp @@ -163,11 +163,11 @@ void OccupancyGridBasedValidator::showDebugImage( auto mask = getMask(ros_occ_grid, object); const float mean = mask ? cv::mean(occ_grid, mask.value())[0] * 0.01 : 1.0; if (mean_threshold_ < mean) { - auto mask = getMask(ros_occ_grid, object, passed_objects_image); - if (mask) passed_objects_image = mask.value(); + auto passed_mask = getMask(ros_occ_grid, object, passed_objects_image); + if (passed_mask) passed_objects_image = passed_mask.value(); } else { - auto mask = getMask(ros_occ_grid, object, removed_objects_image); - if (mask) removed_objects_image = mask.value(); + auto removed_mask = getMask(ros_occ_grid, object, removed_objects_image); + if (removed_mask) removed_objects_image = removed_mask.value(); } } } From 98d95b967f427944733c07e98e0ec6d48e15a047 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:06:00 +0900 Subject: [PATCH 232/306] fix(perception_online_evaluator): fix shadowVariable (#7933) * fix:shadowVariable Signed-off-by: kobayu858 * fix:clang-format Signed-off-by: kobayu858 * fix:shadowVariable Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../src/perception_online_evaluator_node.cpp | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git a/evaluator/perception_online_evaluator/src/perception_online_evaluator_node.cpp b/evaluator/perception_online_evaluator/src/perception_online_evaluator_node.cpp index 63d635af4ffdf..a577fd359563c 100644 --- a/evaluator/perception_online_evaluator/src/perception_online_evaluator_node.cpp +++ b/evaluator/perception_online_evaluator/src/perception_online_evaluator_node.cpp @@ -247,32 +247,33 @@ rcl_interfaces::msg::SetParametersResult PerceptionOnlineEvaluatorNode::onParame updateParam(parameters, "objects_count_window_seconds", p->objects_count_window_seconds); // update parameters for each object class - const auto update_object_param = [&p, ¶meters]( - const auto & semantic, const std::string & ns) { - auto & config = p->object_parameters.at(semantic); - updateParam(parameters, ns + "check_lateral_deviation", config.check_lateral_deviation); - updateParam(parameters, ns + "check_yaw_deviation", config.check_yaw_deviation); - updateParam( - parameters, ns + "check_predicted_path_deviation", config.check_predicted_path_deviation); - updateParam(parameters, ns + "check_yaw_rate", config.check_yaw_rate); - updateParam( - parameters, ns + "check_total_objects_count", config.check_total_objects_count); - updateParam( - parameters, ns + "check_average_objects_count", config.check_average_objects_count); - updateParam( - parameters, ns + "check_interval_average_objects_count", - config.check_interval_average_objects_count); - }; - const std::string ns = "target_object."; - update_object_param(ObjectClassification::MOTORCYCLE, ns + "motorcycle."); - update_object_param(ObjectClassification::CAR, ns + "car."); - update_object_param(ObjectClassification::TRUCK, ns + "truck."); - update_object_param(ObjectClassification::TRAILER, ns + "trailer."); - update_object_param(ObjectClassification::BUS, ns + "bus."); - update_object_param(ObjectClassification::PEDESTRIAN, ns + "pedestrian."); - update_object_param(ObjectClassification::BICYCLE, ns + "bicycle."); - update_object_param(ObjectClassification::UNKNOWN, ns + "unknown."); - + { + const auto update_object_param = [&p, ¶meters]( + const auto & semantic, const std::string & ns) { + auto & config = p->object_parameters.at(semantic); + updateParam(parameters, ns + "check_lateral_deviation", config.check_lateral_deviation); + updateParam(parameters, ns + "check_yaw_deviation", config.check_yaw_deviation); + updateParam( + parameters, ns + "check_predicted_path_deviation", config.check_predicted_path_deviation); + updateParam(parameters, ns + "check_yaw_rate", config.check_yaw_rate); + updateParam( + parameters, ns + "check_total_objects_count", config.check_total_objects_count); + updateParam( + parameters, ns + "check_average_objects_count", config.check_average_objects_count); + updateParam( + parameters, ns + "check_interval_average_objects_count", + config.check_interval_average_objects_count); + }; + const std::string ns = "target_object."; + update_object_param(ObjectClassification::MOTORCYCLE, ns + "motorcycle."); + update_object_param(ObjectClassification::CAR, ns + "car."); + update_object_param(ObjectClassification::TRUCK, ns + "truck."); + update_object_param(ObjectClassification::TRAILER, ns + "trailer."); + update_object_param(ObjectClassification::BUS, ns + "bus."); + update_object_param(ObjectClassification::PEDESTRIAN, ns + "pedestrian."); + update_object_param(ObjectClassification::BICYCLE, ns + "bicycle."); + update_object_param(ObjectClassification::UNKNOWN, ns + "unknown."); + } // update debug marker parameters { const std::string ns = "debug_marker."; From d84075ff9e64fa16b0e2352cc72b589ad9e8a528 Mon Sep 17 00:00:00 2001 From: Masato Saeki <78376491+MasatoSaeki@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:49:28 +0900 Subject: [PATCH 233/306] fix(tier4_perception_launch): delete unnecessary dependency (#8101) delete cluster merger Signed-off-by: MasatoSaeki --- launch/tier4_perception_launch/package.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index c247bd9bbf339..0584376a2e80a 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -27,7 +27,6 @@ autoware_radar_object_tracker autoware_raindrop_cluster_filter autoware_tracking_object_merger - cluster_merger compare_map_segmentation detected_object_feature_remover detected_object_validation From 9e77db330ca1a5035b2f1f6091bdf2d4645e74c2 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:50:18 +0900 Subject: [PATCH 234/306] fix(traffic_light_map_based_detector): fix constVariableReference (#8057) fix:constVariableReference Signed-off-by: kobayu858 --- perception/traffic_light_map_based_detector/src/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/traffic_light_map_based_detector/src/node.cpp b/perception/traffic_light_map_based_detector/src/node.cpp index 7d241d71ce185..c1fbd4a4ad4f2 100644 --- a/perception/traffic_light_map_based_detector/src/node.cpp +++ b/perception/traffic_light_map_based_detector/src/node.cpp @@ -187,7 +187,7 @@ bool MapBasedDetector::getTransform( geometry_msgs::msg::TransformStamped transform = tf_buffer_.lookupTransform("map", frame_id, t, rclcpp::Duration::from_seconds(0.2)); tf2::fromMsg(transform.transform, tf); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { return false; } return true; From 5c050ad7088fade9d9b21abcf15a1e3300fe90a6 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:55:53 +0900 Subject: [PATCH 235/306] fix(traffic_light_multi_camera_fusion): fix constVariableReference (#8058) fix:constVariableReference Signed-off-by: kobayu858 --- perception/traffic_light_multi_camera_fusion/src/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/traffic_light_multi_camera_fusion/src/node.cpp b/perception/traffic_light_multi_camera_fusion/src/node.cpp index 607aabdefa3cc..0e10fec3dbb87 100644 --- a/perception/traffic_light_multi_camera_fusion/src/node.cpp +++ b/perception/traffic_light_multi_camera_fusion/src/node.cpp @@ -293,7 +293,7 @@ void MultiCameraFusion::groupFusion( std::map & grouped_record_map) { grouped_record_map.clear(); - for (auto & p : fused_record_map) { + for (const auto & p : fused_record_map) { IdType roi_id = p.second.roi.traffic_light_id; /* this should not happen From 917d7e2bd9f681ab18e4c13ffc1459ce91ee36c8 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:56:26 +0900 Subject: [PATCH 236/306] fix(autoware_crosswalk_traffic_light_estimator): fix constVariableReference (#8055) fix:constVariableReference Signed-off-by: kobayu858 --- .../autoware_crosswalk_traffic_light_estimator/src/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp index 068cfc02a6aae..5d9f06c3432b5 100644 --- a/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp +++ b/perception/autoware_crosswalk_traffic_light_estimator/src/node.cpp @@ -209,7 +209,7 @@ void CrosswalkTrafficLightEstimatorNode::updateLastDetectedSignal( } std::vector erase_id_list; - for (auto & last_traffic_signal : last_detect_color_) { + for (const auto & last_traffic_signal : last_detect_color_) { const auto & id = last_traffic_signal.second.first.traffic_light_group_id; if (traffic_light_id_map.count(id) == 0) { From a2bd8b2202f5bee46f9c5adfbfcff19831c3a60c Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:56:48 +0900 Subject: [PATCH 237/306] fix(autoware_radar_fusion_to_detected_object): fix constParameterReference (#8040) fix:constParameterReference Signed-off-by: kobayu858 --- .../src/include/radar_fusion_to_detected_object.hpp | 4 ++-- .../src/radar_fusion_to_detected_object.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/autoware_radar_fusion_to_detected_object/src/include/radar_fusion_to_detected_object.hpp b/perception/autoware_radar_fusion_to_detected_object/src/include/radar_fusion_to_detected_object.hpp index 545b7d7e41b2a..b82b915898f53 100644 --- a/perception/autoware_radar_fusion_to_detected_object/src/include/radar_fusion_to_detected_object.hpp +++ b/perception/autoware_radar_fusion_to_detected_object/src/include/radar_fusion_to_detected_object.hpp @@ -99,9 +99,9 @@ class RadarFusionToDetectedObject // std::vector splitObject( // const DetectedObject & object, const std::shared_ptr> & radars); TwistWithCovariance estimateTwist( - const DetectedObject & object, std::shared_ptr> & radars); + const DetectedObject & object, const std::shared_ptr> & radars); bool isQualified( - const DetectedObject & object, std::shared_ptr> & radars); + const DetectedObject & object, const std::shared_ptr> & radars); TwistWithCovariance convertDopplerToTwist( const DetectedObject & object, const TwistWithCovariance & twist_with_covariance); bool isYawCorrect( diff --git a/perception/autoware_radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp b/perception/autoware_radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp index 0fb87c0f88ba0..bc96ac780fd0a 100644 --- a/perception/autoware_radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp +++ b/perception/autoware_radar_fusion_to_detected_object/src/radar_fusion_to_detected_object.cpp @@ -205,7 +205,7 @@ RadarFusionToDetectedObject::filterRadarWithinObject( // (Target value is amplitude if using radar pointcloud. Target value is probability if using radar // objects). TwistWithCovariance RadarFusionToDetectedObject::estimateTwist( - const DetectedObject & object, std::shared_ptr> & radars) + const DetectedObject & object, const std::shared_ptr> & radars) { if (!radars || (*radars).empty()) { TwistWithCovariance output{}; @@ -298,7 +298,7 @@ TwistWithCovariance RadarFusionToDetectedObject::estimateTwist( // Judge whether low confidence objects that do not have some radar points/objects or not. bool RadarFusionToDetectedObject::isQualified( - const DetectedObject & object, std::shared_ptr> & radars) + const DetectedObject & object, const std::shared_ptr> & radars) { if (object.existence_probability > param_.threshold_probability) { return true; From 08512d1d001d124bc8f6ce2aa0ca90323ebab21d Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 11:57:31 +0900 Subject: [PATCH 238/306] fix(autoware_behavior_path_static_obstacle_avoidance_module): fix constParameterReference (#8046) fix:constParameterReference Signed-off-by: kobayu858 --- .../behavior_path_static_obstacle_avoidance_module/utils.hpp | 2 +- .../src/utils.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/utils.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/utils.hpp index a3b1b7e10b885..600c352123833 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/utils.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/utils.hpp @@ -43,7 +43,7 @@ double calcShiftLength( const bool & is_object_on_right, const double & overhang_dist, const double & avoid_margin); bool isWithinLanes( - const lanelet::ConstLanelets & lanelets, std::shared_ptr & planner_data); + const lanelet::ConstLanelets & lanelets, const std::shared_ptr & planner_data); bool isShiftNecessary(const bool & is_object_on_right, const double & shift_length); diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp index ca1ee624a54d5..40373f00d4620 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/utils.cpp @@ -886,7 +886,7 @@ bool isSatisfiedWithNonVehicleCondition( } ObjectData::Behavior getObjectBehavior( - ObjectData & object, const std::shared_ptr & parameters) + const ObjectData & object, const std::shared_ptr & parameters) { if (isParallelToEgoLane(object, parameters->object_check_yaw_deviation)) { return ObjectData::Behavior::NONE; @@ -1101,7 +1101,7 @@ double calcShiftLength( } bool isWithinLanes( - const lanelet::ConstLanelets & lanelets, std::shared_ptr & planner_data) + const lanelet::ConstLanelets & lanelets, const std::shared_ptr & planner_data) { const auto & rh = planner_data->route_handler; const auto & ego_pose = planner_data->self_odometry->pose.pose; From cfb74c7ef1c3970acfcc2bae7ecec1a974983da3 Mon Sep 17 00:00:00 2001 From: Go Sakayori Date: Fri, 19 Jul 2024 12:56:25 +0900 Subject: [PATCH 239/306] feat(static_obstacle_avoidance): enable force execution under unsafe conditions (#8094) * add force execution for static obstacle avoidance Signed-off-by: Go Sakayori * fix Signed-off-by: Go Sakayori * erase unused function in RTC interface Signed-off-by: Go Sakayori * refactor with lamda function Signed-off-by: Go Sakayori * fix rtc_interface Signed-off-by: Go Sakayori * add warn throtthle and move code block Signed-off-by: Go Sakayori * fix Signed-off-by: Go Sakayori --------- Signed-off-by: Go Sakayori Signed-off-by: Go Sakayori --- .../autoware/rtc_interface/rtc_interface.hpp | 1 + .../src/rtc_interface.cpp | 23 +++++++++++ .../scene.hpp | 23 +++++++++-- .../src/scene.cpp | 39 +++++++++++++++++++ 4 files changed, 82 insertions(+), 4 deletions(-) diff --git a/planning/autoware_rtc_interface/include/autoware/rtc_interface/rtc_interface.hpp b/planning/autoware_rtc_interface/include/autoware/rtc_interface/rtc_interface.hpp index 62f9a55c75455..d34c890ab1ce1 100644 --- a/planning/autoware_rtc_interface/include/autoware/rtc_interface/rtc_interface.hpp +++ b/planning/autoware_rtc_interface/include/autoware/rtc_interface/rtc_interface.hpp @@ -59,6 +59,7 @@ class RTCInterface void removeExpiredCooperateStatus(); void clearCooperateStatus(); bool isActivated(const UUID & uuid) const; + bool isForceActivated(const UUID & uuid) const; bool isRegistered(const UUID & uuid) const; bool isRTCEnabled(const UUID & uuid) const; void lockCommandUpdate(); diff --git a/planning/autoware_rtc_interface/src/rtc_interface.cpp b/planning/autoware_rtc_interface/src/rtc_interface.cpp index 985e38b64f2bd..a426b198ef56f 100644 --- a/planning/autoware_rtc_interface/src/rtc_interface.cpp +++ b/planning/autoware_rtc_interface/src/rtc_interface.cpp @@ -317,6 +317,29 @@ bool RTCInterface::isActivated(const UUID & uuid) const return false; } +bool RTCInterface::isForceActivated(const UUID & uuid) const +{ + std::lock_guard lock(mutex_); + const auto itr = std::find_if( + registered_status_.statuses.begin(), registered_status_.statuses.end(), + [uuid](const auto & s) { return s.uuid == uuid; }); + + if (itr != registered_status_.statuses.end()) { + if (itr->state.type != State::WAITING_FOR_EXECUTION && itr->state.type != State::RUNNING) { + return false; + } + if (itr->command_status.type == Command::ACTIVATE && !itr->safe) { + return true; + } else { + return false; + } + } + + RCLCPP_WARN_STREAM( + getLogger(), "[isForceActivated] uuid : " << to_string(uuid) << " is not found" << std::endl); + return false; +} + bool RTCInterface::isRegistered(const UUID & uuid) const { std::lock_guard lock(mutex_); diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/scene.hpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/scene.hpp index 34d06a46d9ac8..87a4c91792649 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/scene.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/include/autoware/behavior_path_static_obstacle_avoidance_module/scene.hpp @@ -118,8 +118,16 @@ class StaticObstacleAvoidanceModule : public SceneModuleInterface const double start_distance = autoware::motion_utils::calcSignedArcLength( path.points, ego_idx, left_shift.start_pose.position); const double finish_distance = start_distance + left_shift.relative_longitudinal; - rtc_interface_ptr_map_.at("left")->updateCooperateStatus( - left_shift.uuid, true, State::RUNNING, start_distance, finish_distance, clock_->now()); + + // If force activated keep safety to false + if (rtc_interface_ptr_map_.at("left")->isForceActivated(left_shift.uuid)) { + rtc_interface_ptr_map_.at("left")->updateCooperateStatus( + left_shift.uuid, false, State::RUNNING, start_distance, finish_distance, clock_->now()); + } else { + rtc_interface_ptr_map_.at("left")->updateCooperateStatus( + left_shift.uuid, true, State::RUNNING, start_distance, finish_distance, clock_->now()); + } + if (finish_distance > -1.0e-03) { steering_factor_interface_ptr_->updateSteeringFactor( {left_shift.start_pose, left_shift.finish_pose}, {start_distance, finish_distance}, @@ -131,8 +139,15 @@ class StaticObstacleAvoidanceModule : public SceneModuleInterface const double start_distance = autoware::motion_utils::calcSignedArcLength( path.points, ego_idx, right_shift.start_pose.position); const double finish_distance = start_distance + right_shift.relative_longitudinal; - rtc_interface_ptr_map_.at("right")->updateCooperateStatus( - right_shift.uuid, true, State::RUNNING, start_distance, finish_distance, clock_->now()); + + if (rtc_interface_ptr_map_.at("right")->isForceActivated(right_shift.uuid)) { + rtc_interface_ptr_map_.at("right")->updateCooperateStatus( + right_shift.uuid, false, State::RUNNING, start_distance, finish_distance, clock_->now()); + } else { + rtc_interface_ptr_map_.at("right")->updateCooperateStatus( + right_shift.uuid, true, State::RUNNING, start_distance, finish_distance, clock_->now()); + } + if (finish_distance > -1.0e-03) { steering_factor_interface_ptr_->updateSteeringFactor( {right_shift.start_pose, right_shift.finish_pose}, {start_distance, finish_distance}, diff --git a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp index b5b9378618a60..d1b78dbd6a00a 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_static_obstacle_avoidance_module/src/scene.cpp @@ -579,6 +579,45 @@ void StaticObstacleAvoidanceModule::fillEgoStatus( return; } + auto candidate_sl_force_activated = [&](const std::string & direction) { + // If statement to avoid unnecessary warning occurring from isForceActivated function + if (candidate_uuid_ == uuid_map_.at(direction)) { + if (rtc_interface_ptr_map_.at(direction)->isForceActivated(candidate_uuid_)) { + return true; + } + } + return false; + }; + + auto registered_sl_force_activated = + [&](const std::string & direction, const RegisteredShiftLineArray shift_line_array) { + return std::any_of( + shift_line_array.begin(), shift_line_array.end(), [&](const auto & shift_line) { + return rtc_interface_ptr_map_.at(direction)->isForceActivated(shift_line.uuid); + }); + }; + + /** + * Check if the candidate avoidance path is force activated + */ + if (candidate_sl_force_activated("left") || candidate_sl_force_activated("right")) { + data.yield_required = false; + data.safe_shift_line = data.new_shift_line; + return; + } + + /** + * Check if any registered shift line is force activated + */ + if ( + registered_sl_force_activated("left", left_shift_array_) || + registered_sl_force_activated("right", right_shift_array_)) { + data.yield_required = false; + data.safe_shift_line = data.new_shift_line; + RCLCPP_WARN_THROTTLE(getLogger(), *clock_, 5000, "unsafe but force executed"); + return; + } + /** * If the yield maneuver is disabled, use unapproved_new_sl for avoidance path generation even if * the shift line is unsafe. From 25c33d370ae1554918f7f3537bda29c39d54b044 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Fri, 19 Jul 2024 13:05:09 +0900 Subject: [PATCH 240/306] refactor(traffic_light_occlusion_predictor): fix namespace and directory structure (#7971) refactor: add autoware on the namespace Signed-off-by: Taekjin LEE --- .../CMakeLists.txt | 10 +++---- .../src/{nodelet.cpp => node.cpp} | 29 ++++++++++--------- .../nodelet.hpp => src/node.hpp} | 17 ++++++----- .../src/occlusion_predictor.cpp | 11 +++---- .../occlusion_predictor.hpp | 10 +++---- 5 files changed, 40 insertions(+), 37 deletions(-) rename perception/traffic_light_occlusion_predictor/src/{nodelet.cpp => node.cpp} (92%) rename perception/traffic_light_occlusion_predictor/{include/traffic_light_occlusion_predictor/nodelet.hpp => src/node.hpp} (88%) rename perception/traffic_light_occlusion_predictor/{include/traffic_light_occlusion_predictor => src}/occlusion_predictor.hpp (92%) diff --git a/perception/traffic_light_occlusion_predictor/CMakeLists.txt b/perception/traffic_light_occlusion_predictor/CMakeLists.txt index 481561ed92be8..61d8d97b815e6 100644 --- a/perception/traffic_light_occlusion_predictor/CMakeLists.txt +++ b/perception/traffic_light_occlusion_predictor/CMakeLists.txt @@ -13,18 +13,18 @@ include_directories( ${PCL_INCLUDE_DIRS} ) -ament_auto_add_library(traffic_light_occlusion_predictor SHARED - src/nodelet.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/node.cpp src/occlusion_predictor.cpp ) -rclcpp_components_register_node(traffic_light_occlusion_predictor - PLUGIN "traffic_light::TrafficLightOcclusionPredictorNodelet" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::traffic_light::TrafficLightOcclusionPredictorNode" EXECUTABLE traffic_light_occlusion_predictor_node ) link_directories(${PCL_LIBRARY_DIRS}) -target_link_libraries(traffic_light_occlusion_predictor ${PCL_LIBRARIES}) +target_link_libraries(${PROJECT_NAME} ${PCL_LIBRARIES}) ament_auto_package(INSTALL_TO_SHARE config diff --git a/perception/traffic_light_occlusion_predictor/src/nodelet.cpp b/perception/traffic_light_occlusion_predictor/src/node.cpp similarity index 92% rename from perception/traffic_light_occlusion_predictor/src/nodelet.cpp rename to perception/traffic_light_occlusion_predictor/src/node.cpp index bc668c6af6c3c..8bc11fdea2aad 100644 --- a/perception/traffic_light_occlusion_predictor/src/nodelet.cpp +++ b/perception/traffic_light_occlusion_predictor/src/node.cpp @@ -12,8 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_occlusion_predictor/nodelet.hpp" +#define EIGEN_MPL2_ONLY + +#include "node.hpp" +#include +#include #include #include #include @@ -30,16 +34,13 @@ #include #include #include +#include #include -#define EIGEN_MPL2_ONLY -#include -#include - -namespace traffic_light +namespace autoware::traffic_light { -TrafficLightOcclusionPredictorNodelet::TrafficLightOcclusionPredictorNodelet( +TrafficLightOcclusionPredictorNode::TrafficLightOcclusionPredictorNode( const rclcpp::NodeOptions & node_options) : Node("traffic_light_occlusion_predictor_node", node_options), tf_buffer_(this->get_clock()), @@ -53,7 +54,7 @@ TrafficLightOcclusionPredictorNodelet::TrafficLightOcclusionPredictorNodelet( // subscribers map_sub_ = create_subscription( "~/input/vector_map", rclcpp::QoS{1}.transient_local(), - std::bind(&TrafficLightOcclusionPredictorNodelet::mapCallback, this, _1)); + std::bind(&TrafficLightOcclusionPredictorNode::mapCallback, this, _1)); // publishers signal_pub_ = @@ -79,7 +80,7 @@ TrafficLightOcclusionPredictorNodelet::TrafficLightOcclusionPredictorNodelet( synchronizer_ = std::make_shared( this, topics, qos, std::bind( - &TrafficLightOcclusionPredictorNodelet::syncCallback, this, _1, _2, _3, _4, + &TrafficLightOcclusionPredictorNode::syncCallback, this, _1, _2, _3, _4, tier4_perception_msgs::msg::TrafficLightRoi::CAR_TRAFFIC_LIGHT), config_.max_image_cloud_delay, config_.max_wait_t); @@ -89,14 +90,14 @@ TrafficLightOcclusionPredictorNodelet::TrafficLightOcclusionPredictorNodelet( synchronizer_ped_ = std::make_shared( this, topics_ped, qos_ped, std::bind( - &TrafficLightOcclusionPredictorNodelet::syncCallback, this, _1, _2, _3, _4, + &TrafficLightOcclusionPredictorNode::syncCallback, this, _1, _2, _3, _4, tier4_perception_msgs::msg::TrafficLightRoi::PEDESTRIAN_TRAFFIC_LIGHT), config_.max_image_cloud_delay, config_.max_wait_t); subscribed_.resize(2, false); } -void TrafficLightOcclusionPredictorNodelet::mapCallback( +void TrafficLightOcclusionPredictorNode::mapCallback( const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr input_msg) { traffic_light_position_map_.clear(); @@ -121,7 +122,7 @@ void TrafficLightOcclusionPredictorNodelet::mapCallback( } } -void TrafficLightOcclusionPredictorNodelet::syncCallback( +void TrafficLightOcclusionPredictorNode::syncCallback( const tier4_perception_msgs::msg::TrafficLightArray::ConstSharedPtr in_signal_msg, const tier4_perception_msgs::msg::TrafficLightRoiArray::ConstSharedPtr in_roi_msg, const sensor_msgs::msg::CameraInfo::ConstSharedPtr in_cam_info_msg, @@ -184,7 +185,7 @@ void TrafficLightOcclusionPredictorNodelet::syncCallback( std::fill(subscribed_.begin(), subscribed_.end(), false); } } -} // namespace traffic_light +} // namespace autoware::traffic_light #include -RCLCPP_COMPONENTS_REGISTER_NODE(traffic_light::TrafficLightOcclusionPredictorNodelet) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::traffic_light::TrafficLightOcclusionPredictorNode) diff --git a/perception/traffic_light_occlusion_predictor/include/traffic_light_occlusion_predictor/nodelet.hpp b/perception/traffic_light_occlusion_predictor/src/node.hpp similarity index 88% rename from perception/traffic_light_occlusion_predictor/include/traffic_light_occlusion_predictor/nodelet.hpp rename to perception/traffic_light_occlusion_predictor/src/node.hpp index 3cd270adf9383..5ee4876a6abbf 100644 --- a/perception/traffic_light_occlusion_predictor/include/traffic_light_occlusion_predictor/nodelet.hpp +++ b/perception/traffic_light_occlusion_predictor/src/node.hpp @@ -12,12 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_OCCLUSION_PREDICTOR__NODELET_HPP_ -#define TRAFFIC_LIGHT_OCCLUSION_PREDICTOR__NODELET_HPP_ +#ifndef NODE_HPP_ +#define NODE_HPP_ + +#include "occlusion_predictor.hpp" #include #include -#include #include #include @@ -44,12 +45,12 @@ #include #include -namespace traffic_light +namespace autoware::traffic_light { -class TrafficLightOcclusionPredictorNodelet : public rclcpp::Node +class TrafficLightOcclusionPredictorNode : public rclcpp::Node { public: - explicit TrafficLightOcclusionPredictorNodelet(const rclcpp::NodeOptions & node_options); + explicit TrafficLightOcclusionPredictorNode(const rclcpp::NodeOptions & node_options); private: struct Config @@ -108,5 +109,5 @@ class TrafficLightOcclusionPredictorNodelet : public rclcpp::Node std::vector occlusion_ratios_; tier4_perception_msgs::msg::TrafficLightArray out_msg_; }; -} // namespace traffic_light -#endif // TRAFFIC_LIGHT_OCCLUSION_PREDICTOR__NODELET_HPP_ +} // namespace autoware::traffic_light +#endif // NODE_HPP_ diff --git a/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.cpp b/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.cpp index 40e50aabf3c17..74878ba0b93af 100644 --- a/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.cpp +++ b/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.cpp @@ -13,14 +13,15 @@ // limitations under the License. // -#include "traffic_light_occlusion_predictor/occlusion_predictor.hpp" +#include "occlusion_predictor.hpp" +#include namespace { -traffic_light::Ray point2ray(const pcl::PointXYZ & pt) +autoware::traffic_light::Ray point2ray(const pcl::PointXYZ & pt) { - traffic_light::Ray ray; + autoware::traffic_light::Ray ray; ray.dist = std::sqrt(pt.x * pt.x + pt.y * pt.y + pt.z * pt.z); ray.elevation = RAD2DEG(std::atan2(pt.y, std::hypot(pt.x, pt.z))); ray.azimuth = RAD2DEG(std::atan2(pt.x, pt.z)); @@ -29,7 +30,7 @@ traffic_light::Ray point2ray(const pcl::PointXYZ & pt) } // namespace -namespace traffic_light +namespace autoware::traffic_light { CloudOcclusionPredictor::CloudOcclusionPredictor( @@ -253,4 +254,4 @@ uint32_t CloudOcclusionPredictor::predict( return 100 * occluded_num / tl_sample_cloud.size(); } -} // namespace traffic_light +} // namespace autoware::traffic_light diff --git a/perception/traffic_light_occlusion_predictor/include/traffic_light_occlusion_predictor/occlusion_predictor.hpp b/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.hpp similarity index 92% rename from perception/traffic_light_occlusion_predictor/include/traffic_light_occlusion_predictor/occlusion_predictor.hpp rename to perception/traffic_light_occlusion_predictor/src/occlusion_predictor.hpp index 066f438a9544f..435ee478eea22 100644 --- a/perception/traffic_light_occlusion_predictor/include/traffic_light_occlusion_predictor/occlusion_predictor.hpp +++ b/perception/traffic_light_occlusion_predictor/src/occlusion_predictor.hpp @@ -13,8 +13,8 @@ // limitations under the License. // -#ifndef TRAFFIC_LIGHT_OCCLUSION_PREDICTOR__OCCLUSION_PREDICTOR_HPP_ -#define TRAFFIC_LIGHT_OCCLUSION_PREDICTOR__OCCLUSION_PREDICTOR_HPP_ +#ifndef OCCLUSION_PREDICTOR_HPP_ +#define OCCLUSION_PREDICTOR_HPP_ #include #include @@ -43,7 +43,7 @@ #include #include -namespace traffic_light +namespace autoware::traffic_light { struct Ray @@ -93,6 +93,6 @@ class CloudOcclusionPredictor float elevation_occlusion_resolution_deg_; }; -} // namespace traffic_light +} // namespace autoware::traffic_light -#endif // TRAFFIC_LIGHT_OCCLUSION_PREDICTOR__OCCLUSION_PREDICTOR_HPP_ +#endif // OCCLUSION_PREDICTOR_HPP_ From 6e6fc7737eb2eb5af4c40f8afd04d22f8f5e3263 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 13:42:21 +0900 Subject: [PATCH 241/306] fix(autoware_surround_obstacle_checker): fix funcArgNamesDifferent (#8020) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- planning/autoware_surround_obstacle_checker/src/node.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/autoware_surround_obstacle_checker/src/node.hpp b/planning/autoware_surround_obstacle_checker/src/node.hpp index e0bcf771948ca..b559e159a78ec 100644 --- a/planning/autoware_surround_obstacle_checker/src/node.hpp +++ b/planning/autoware_surround_obstacle_checker/src/node.hpp @@ -103,7 +103,7 @@ class SurroundObstacleCheckerNode : public rclcpp::Node const std::string & source, const std::string & target, const rclcpp::Time & stamp, double duration_sec) const; - bool isStopRequired(const bool is_obstacle_found, const bool is_stopped); + bool isStopRequired(const bool is_obstacle_found, const bool is_vehicle_stopped); // ros mutable tf2_ros::Buffer tf_buffer_{get_clock()}; From 553a3b5165d8ed6e2c3a21432bfa0cdf67446f6d Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 13:44:27 +0900 Subject: [PATCH 242/306] fix(autoware_surround_obstacle_checker): fix constVariableReference (#8059) fix:constVariableReference Signed-off-by: kobayu858 --- planning/autoware_surround_obstacle_checker/src/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/autoware_surround_obstacle_checker/src/node.cpp b/planning/autoware_surround_obstacle_checker/src/node.cpp index 9c899c2226497..cac609f882272 100644 --- a/planning/autoware_surround_obstacle_checker/src/node.cpp +++ b/planning/autoware_surround_obstacle_checker/src/node.cpp @@ -506,7 +506,7 @@ std::optional SurroundObstacleCheckerNode: try { transform_stamped = tf_buffer_.lookupTransform(source, target, stamp, tf2::durationFromSec(duration_sec)); - } catch (tf2::TransformException & ex) { + } catch (const tf2::TransformException & ex) { return {}; } From 55ade4b36dcc59178b97d0fa234e9a5da01c8c97 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Fri, 19 Jul 2024 15:58:01 +0900 Subject: [PATCH 243/306] refactor(multi_object_tracker): bring parameter schema to new package folder (#8105) refactor: bring parameter schema to new package folder Signed-off-by: Taekjin LEE --- .../schema/data_association_matrix.schema.json | 0 .../schema/input_channels.schema.json | 0 .../schema/multi_object_tracker_node.schema.json | 0 .../schema/simulation_tracker.schema.json | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/schema/data_association_matrix.schema.json (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/schema/input_channels.schema.json (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/schema/multi_object_tracker_node.schema.json (100%) rename perception/{multi_object_tracker => autoware_multi_object_tracker}/schema/simulation_tracker.schema.json (100%) diff --git a/perception/multi_object_tracker/schema/data_association_matrix.schema.json b/perception/autoware_multi_object_tracker/schema/data_association_matrix.schema.json similarity index 100% rename from perception/multi_object_tracker/schema/data_association_matrix.schema.json rename to perception/autoware_multi_object_tracker/schema/data_association_matrix.schema.json diff --git a/perception/multi_object_tracker/schema/input_channels.schema.json b/perception/autoware_multi_object_tracker/schema/input_channels.schema.json similarity index 100% rename from perception/multi_object_tracker/schema/input_channels.schema.json rename to perception/autoware_multi_object_tracker/schema/input_channels.schema.json diff --git a/perception/multi_object_tracker/schema/multi_object_tracker_node.schema.json b/perception/autoware_multi_object_tracker/schema/multi_object_tracker_node.schema.json similarity index 100% rename from perception/multi_object_tracker/schema/multi_object_tracker_node.schema.json rename to perception/autoware_multi_object_tracker/schema/multi_object_tracker_node.schema.json diff --git a/perception/multi_object_tracker/schema/simulation_tracker.schema.json b/perception/autoware_multi_object_tracker/schema/simulation_tracker.schema.json similarity index 100% rename from perception/multi_object_tracker/schema/simulation_tracker.schema.json rename to perception/autoware_multi_object_tracker/schema/simulation_tracker.schema.json From 0c1297029eebf7aa678f4fdb720b584044a1bba7 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:31:38 +0900 Subject: [PATCH 244/306] fix(control_validator): fix param names and doc (#8104) * fix Signed-off-by: Yuki Takagi --- control/autoware_control_validator/README.md | 9 +++++---- .../autoware_control_validator/src/control_validator.cpp | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/control/autoware_control_validator/README.md b/control/autoware_control_validator/README.md index 850eefb706c9a..2ace3a403c073 100644 --- a/control/autoware_control_validator/README.md +++ b/control/autoware_control_validator/README.md @@ -8,10 +8,11 @@ The `control_validator` is a module that checks the validity of the output of th The following features are supported for the validation and can have thresholds set by parameters. The listed features below does not always correspond to the latest implementation. -| Description | Arguments | Diagnostic equation | Implemented function name | -| ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | :--------------------------------: | ------------------------------- | -| Inverse velocity: Measured velocity has a different sign from the target velocity. | measured velocity $v$, target velocity $\hat{v}$, and threshold velocity parameter $k$ | $v\hat{v}<0,~\|v\|>k $ | `checkValidVelocityDeviation()` | -| Overspeed: Measured speed exceeds target speed significantly. | measured velocity $v$, target velocity $\hat{v}$, and threshold ratio parameter $r$ | $\| v \| > (1 + r) \| \hat{v} \| $ | `checkValidVelocityDeviation()` | + +| Description | Arguments | Diagnostic equation | Implemented function name | +| ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | :-----------------------------------------------: | ------------------------------- | +| Inverse velocity: Measured velocity has a different sign from the target velocity. | measured velocity $v$, target velocity $\hat{v}$, and threshold velocity parameter $k$ | $v \hat{v} < 0, \quad \lvert v \rvert > k$ | `checkValidVelocityDeviation()` | +| Overspeed: Measured speed exceeds target speed significantly. | measured velocity $v$, target velocity $\hat{v}$, and threshold ratio parameter $r$ | $\lvert v \rvert > (1 + r) \lvert \hat{v} \rvert$ | `checkValidVelocityDeviation()` | - **Deviation check between reference trajectory and predicted trajectory** : invalid when the largest deviation between the predicted trajectory and reference trajectory is greater than the given threshold. diff --git a/control/autoware_control_validator/src/control_validator.cpp b/control/autoware_control_validator/src/control_validator.cpp index d2106daf19f81..e5696e3c87afb 100644 --- a/control/autoware_control_validator/src/control_validator.cpp +++ b/control/autoware_control_validator/src/control_validator.cpp @@ -53,8 +53,8 @@ void ControlValidator::setupParameters() auto & p = validation_params_; const std::string t = "thresholds."; p.max_distance_deviation_threshold = declare_parameter(t + "max_distance_deviation"); - p.max_reverse_velocity_threshold = declare_parameter(t + "reverse_velocity"); - p.max_over_velocity_ratio_threshold = declare_parameter(t + "over_velocity_ratio"); + p.max_reverse_velocity_threshold = declare_parameter(t + "max_reverse_velocity"); + p.max_over_velocity_ratio_threshold = declare_parameter(t + "max_over_velocity_ratio"); } try { From b908b66ea874b27197480fdf3b859eca49f9f71d Mon Sep 17 00:00:00 2001 From: Giovanni Muhammad Raditya Date: Fri, 19 Jul 2024 16:32:12 +0900 Subject: [PATCH 245/306] feat(carla_autoware): add interface to easily use CARLA with Autoware (#6859) Signed-off-by: mraditya01 Signed-off-by: Maxime CLEMENT Co-authored-by: Minsu Kim --- .../autoware_carla_interface/CMakeLists.txt | 31 + simulator/autoware_carla_interface/README.md | 161 ++++ .../calibration_maps/accel_map.csv | 7 + .../calibration_maps/brake_map.csv | 10 + .../calibration_maps/steer_map.csv | 4 + .../config/objects.json | 62 ++ .../raw_vehicle_cmd_converter.param.yaml | 28 + .../autoware_carla_interface.launch.xml | 50 + .../autoware_carla_interface/package.xml | 29 + .../resource/carla_autoware | 0 simulator/autoware_carla_interface/setup.cfg | 4 + simulator/autoware_carla_interface/setup.py | 33 + .../carla_autoware.py | 195 ++++ .../src/autoware_carla_interface/carla_ros.py | 486 ++++++++++ .../modules/carla_data_provider.py | 867 ++++++++++++++++++ .../modules/carla_utils.py | 109 +++ .../modules/carla_wrapper.py | 231 +++++ 17 files changed, 2307 insertions(+) create mode 100644 simulator/autoware_carla_interface/CMakeLists.txt create mode 100644 simulator/autoware_carla_interface/README.md create mode 100644 simulator/autoware_carla_interface/calibration_maps/accel_map.csv create mode 100644 simulator/autoware_carla_interface/calibration_maps/brake_map.csv create mode 100644 simulator/autoware_carla_interface/calibration_maps/steer_map.csv create mode 100644 simulator/autoware_carla_interface/config/objects.json create mode 100644 simulator/autoware_carla_interface/config/raw_vehicle_cmd_converter.param.yaml create mode 100644 simulator/autoware_carla_interface/launch/autoware_carla_interface.launch.xml create mode 100644 simulator/autoware_carla_interface/package.xml create mode 100644 simulator/autoware_carla_interface/resource/carla_autoware create mode 100644 simulator/autoware_carla_interface/setup.cfg create mode 100644 simulator/autoware_carla_interface/setup.py create mode 100644 simulator/autoware_carla_interface/src/autoware_carla_interface/carla_autoware.py create mode 100644 simulator/autoware_carla_interface/src/autoware_carla_interface/carla_ros.py create mode 100644 simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_data_provider.py create mode 100644 simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_utils.py create mode 100644 simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_wrapper.py diff --git a/simulator/autoware_carla_interface/CMakeLists.txt b/simulator/autoware_carla_interface/CMakeLists.txt new file mode 100644 index 0000000000000..d643b9dad45fe --- /dev/null +++ b/simulator/autoware_carla_interface/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.8) +project(autoware_carla_interface) + +find_package(autoware_cmake REQUIRED) +autoware_package() + +find_package( + catkin REQUIRED COMPONENTS std_msgs) + + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +ament_export_dependencies(rclpy) + +find_package(ros_environment REQUIRED) +set(ROS_VERSION $ENV{ROS_VERSION}) + + +# Install launch files. +install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}/) + + +ament_auto_package( + launch + resource + config + src +) +ament_package() diff --git a/simulator/autoware_carla_interface/README.md b/simulator/autoware_carla_interface/README.md new file mode 100644 index 0000000000000..a44cb4708b5c3 --- /dev/null +++ b/simulator/autoware_carla_interface/README.md @@ -0,0 +1,161 @@ +# autoware_carla_interface + +## ROS 2/Autoware.universe bridge for CARLA simulator + +Thanks to for ROS 2 Humble support for CARLA Communication. +This ros package enables communication between Autoware and CARLA for autonomous driving simulation. + +## Supported Environment + +| ubuntu | ros | carla | autoware | +| :----: | :----: | :----: | :------: | +| 22.04 | humble | 0.9.15 | Main | + +## Setup + +### Install + +- [CARLA Installation](https://carla.readthedocs.io/en/latest/start_quickstart/) +- [Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) +- [Python Package for CARLA 0.9.15 ROS 2 Humble communication](https://github.com/gezp/carla_ros/releases/tag/carla-0.9.15-ubuntu-22.04) + + - Install the wheel using pip. + - OR add the egg file to the `PYTHONPATH`. + +1. Download maps (y-axis inverted version) to arbitrary location +2. Change names and create the map folder (example: Town01) inside `autoware_map`. (`point_cloud/Town01.pcd` -> `autoware_map/Town01/pointcloud_map.pcd`, `vector_maps/lanelet2/Town01.osm`-> `autoware_map/Town01/lanelet2_map.osm`) +3. Create `map_projector_info.yaml` on the folder and add `projector_type: local` on the first line. + +### Build + +```bash +colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release +``` + +### Run + +1. Run carla, change map, spawn object if you need + + + ```bash + cd CARLA + ./CarlaUE4.sh -prefernvidia -quality-level=Low -RenderOffScreen + ``` + +2. Run ros nodes + + ```bash + ros2 launch autoware_launch e2e_simulator.launch.xml map_path:=$HOME/autoware_map/Town01 vehicle_model:=sample_vehicle sensor_model:=awsim_sensor_kit simulator_type:=carla carla_map:=Town01 + ``` + +3. Set initial pose (Init by GNSS) +4. Set goal position +5. Wait for planning +6. Engage + +## Inner-workings / Algorithms + +The `InitializeInterface` class is key to setting up both the CARLA world and the ego vehicle. It fetches configuration parameters through the `autoware_carla_interface.launch.xml`. + +The main simulation loop runs within the `carla_ros2_interface` class. This loop ticks simulation time inside the CARLA simulator at `fixed_delta_seconds` time, where data is received and published as ROS 2 messages at frequencies defined in `self.sensor_frequencies`. + +Ego vehicle commands from Autoware are processed through the `autoware_raw_vehicle_cmd_converter`, which calibrates these commands for CARLA. The calibrated commands are then fed directly into CARLA control via `CarlaDataProvider`. + +### Configurable Parameters for World Loading + +All the key parameters can be configured in `autoware_carla_interface.launch.xml`. + +| Name | Type | Default Value | Description | +| ------------------------- | ------ | --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `host` | string | "localhost" | Hostname for the CARLA server | +| `port` | int | "2000" | Port number for the CARLA server | +| `timeout` | int | 20 | Timeout for the CARLA client | +| `ego_vehicle_role_name` | string | "ego_vehicle" | Role name for the ego vehicle | +| `vehicle_type` | string | "vehicle.toyota.prius" | Blueprint ID of the vehicle to spawn. The Blueprint ID of vehicles can be found in [CARLA Blueprint ID](https://carla.readthedocs.io/en/latest/catalogue_vehicles/) | +| `spawn_point` | string | None | Coordinates for spawning the ego vehicle (None is random). Format = [x, y, z, roll, pitch, yaw] | +| `carla_map` | string | "Town01" | Name of the map to load in CARLA | +| `sync_mode` | bool | True | Boolean flag to set synchronous mode in CARLA | +| `fixed_delta_seconds` | double | 0.05 | Time step for the simulation (related to client FPS) | +| `objects_definition_file` | string | "$(find-pkg-share autoware_carla_interface)/objects.json" | Sensor parameters file that are used for spawning sensor in CARLA | +| `use_traffic_manager` | bool | True | Boolean flag to set traffic manager in CARLA | +| `max_real_delta_seconds` | double | 0.05 | Parameter to limit the simulation speed below `fixed_delta_seconds` | +| `config_file` | string | "$(find-pkg-share autoware_carla_interface)/raw_vehicle_cmd_converter.param.yaml" | Control mapping file to be used in `autoware_raw_vehicle_cmd_converter`. Current control are calibrated based on `vehicle.toyota.prius` Blueprints ID in CARLA. Changing the vehicle type may need a recalibration. | + +### Configurable Parameters for Sensors + +Below parameters can be configured in `carla_ros.py`. + +| Name | Type | Default Value | Description | +| ------------------------- | ---- | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `self.sensor_frequencies` | dict | {"top": 11, "left": 11, "right": 11, "camera": 11, "imu": 50, "status": 50, "pose": 2} | (line 67) Calculates the time interval since the last publication and checks if this interval meets the minimum required to not exceed the desired frequency. It will only affect ROS publishing frequency not CARLA sensor tick. | + +- CARLA sensor parameters can be configured in `config/objects.json`. + - For more details regarding the parameters that can be modified in CARLA are explained in [Carla Ref Sensor](https://carla.readthedocs.io/en/latest/ref_sensors/). + +### World Loading + +The `carla_ros.py` sets up the CARLA world: + +1. **Client Connection**: + + ```python + client = carla.Client(self.local_host, self.port) + client.set_timeout(self.timeout) + ``` + +2. **Load the Map**: + + Map loaded in CARLA world with map according to `carla_map` parameter. + + ```python + client.load_world(self.map_name) + self.world = client.get_world() + ``` + +3. **Spawn Ego Vehicle**: + + Vehicle are spawn according to `vehicle_type`, `spawn_point`, and `agent_role_name` parameter. + + ```python + spawn_point = carla.Transform() + point_items = self.spawn_point.split(",") + if len(point_items) == 6: + spawn_point.location.x = float(point_items[0]) + spawn_point.location.y = float(point_items[1]) + spawn_point.location.z = float(point_items[2]) + 2 + spawn_point.rotation.roll = float(point_items[3]) + spawn_point.rotation.pitch = float(point_items[4]) + spawn_point.rotation.yaw = float(point_items[5]) + CarlaDataProvider.request_new_actor(self.vehicle_type, spawn_point, self.agent_role_name) + ``` + +## Traffic Light Recognition + +The maps provided by the Carla Simulator ([Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/)) currently lack proper traffic light components for Autoware and have different latitude and longitude coordinates compared to the pointcloud map. To enable traffic light recognition, follow the steps below to modify the maps. + +- Options to Modify the Map + + - A. Create a New Map from Scratch + - Use the [Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/) to create a new map. + + - B. Modify the Existing Carla Lanelet2 Maps + - Adjust the longitude and latitude of the [Carla Lanelet2 Maps](https://bitbucket.org/carla-simulator/autoware-contents/src/master/maps/) to align with the PCD (origin). + - Use this [tool](https://github.com/mraditya01/offset_lanelet2/tree/main) to modify the coordinates. + - Snap Lanelet with PCD and add the traffic lights using the [Tier4 Vector Map Builder](https://tools.tier4.jp/feature/vector_map_builder_ll2/). + +- When using the Tier4 Vector Map Builder, you must convert the PCD format from `binary_compressed` to `ascii`. You can use `pcl_tools` for this conversion. +- For reference, an example of Town01 with added traffic lights at one intersection can be downloaded [here](https://drive.google.com/drive/folders/1QFU0p3C8NW71sT5wwdnCKXoZFQJzXfTG?usp=sharing). + +## Tips + +- Misalignment might occurs during initialization, pressing `init by gnss` button should fix it. +- Changing the `fixed_delta_seconds` can increase the simulation tick (default 0.05 s), some sensors params in `objects.json` need to be adjusted when it is changed (example: LIDAR rotation frequency have to match the FPS). + +## Known Issues and Future Works + +- Testing on procedural map (Adv Digital Twin). + - Currently unable to test it due to failing in the creation of the Adv digital twin map. +- Automatic sensor configuration of the CARLA sensors from the Autoware sensor kit. + - Sensor currently not automatically configured to have the same location as the Autoware Sensor kit. The current work around is to create a new frame of each sensors with (0, 0, 0, 0, 0, 0) coordinate relative to base_link and attach each sensor on the new frame (`autoware_carla_interface.launch.xml` Line 28). This work around is very limited and restrictive, as when the sensor_kit is changed the sensor location will be wrongly attached. +- Traffic light recognition. + - Currently the HDmap of CARLA did not have information regarding the traffic light which is necessary for Autoware to conduct traffic light recognition. diff --git a/simulator/autoware_carla_interface/calibration_maps/accel_map.csv b/simulator/autoware_carla_interface/calibration_maps/accel_map.csv new file mode 100644 index 0000000000000..18718c31df87e --- /dev/null +++ b/simulator/autoware_carla_interface/calibration_maps/accel_map.csv @@ -0,0 +1,7 @@ +default,0,1.39,2.78,4.17,5.56,6.94,8.33,9.72,11.11,12.5,13.89 +0,0.090,-0.204,-0.490,-0.490,-0.491,-0.492,-0.493,-0.494,-0.495,-0.496,-0.500 +0.100,0.167,0.166,-0.093,-0.243,-0.244,-0.245,-0.246,-0.247,-0.248,-0.249,-0.280 +0.200,0.941,0.464,0.186,0.004,-0.100,-0.101,-0.102,-0.103,-0.104,-0.105,-0.106 +0.300,1.747,1.332,0.779,0.778,0.777,0.776,0.775,0.774,0.720,0.640,0.580 +0.400,2.650,2.480,2.300,2.130,1.950,1.750,1.580,1.450,1.320,1.200,1.100 +0.500,3.300,3.250,3.120,2.920,2.680,2.350,2.170,1.980,1.880,1.730,1.610 diff --git a/simulator/autoware_carla_interface/calibration_maps/brake_map.csv b/simulator/autoware_carla_interface/calibration_maps/brake_map.csv new file mode 100644 index 0000000000000..62b18b45bd415 --- /dev/null +++ b/simulator/autoware_carla_interface/calibration_maps/brake_map.csv @@ -0,0 +1,10 @@ +default,0,1.39,2.78,4.17,5.56,6.94,8.33,9.72,11.11,12.5,13.89 +0,0.090,-0.204,-0.490,-0.490,-0.491,-0.492,-0.493,-0.494,-0.495,-0.496,-0.500 +0.100,0.089,-0.226,-0.535,-0.536,-0.537,-0.538,-0.539,-0.540,-0.541,-0.542,-0.543 +0.200,-0.380,-0.414,-0.746,-0.800,-0.820,-0.850,-0.870,-0.890,-0.910,-0.940,-0.960 +0.300,-1.000,-1.040,-1.480,-1.550,-1.570,-1.590,-1.610,-1.630,-1.631,-1.632,-1.633 +0.400,-1.480,-1.500,-1.850,-2.050,-2.100,-2.101,-2.102,-2.103,-2.104,-2.105,-2.106 +0.500,-1.490,-1.510,-1.860,-2.060,-2.110,-2.111,-2.112,-2.113,-2.114,-2.115,-2.116 +0.600,-1.500,-1.520,-1.870,-2.070,-2.120,-2.121,-2.122,-2.123,-2.124,-2.125,-2.126 +0.700,-1.510,-1.530,-1.880,-2.080,-2.130,-2.131,-2.132,-2.133,-2.134,-2.135,-2.136 +0.800,-2.180,-2.200,-2.700,-2.800,-2.900,-2.950,-2.951,-2.952,-2.953,-2.954,-2.955 diff --git a/simulator/autoware_carla_interface/calibration_maps/steer_map.csv b/simulator/autoware_carla_interface/calibration_maps/steer_map.csv new file mode 100644 index 0000000000000..077efb9f9e200 --- /dev/null +++ b/simulator/autoware_carla_interface/calibration_maps/steer_map.csv @@ -0,0 +1,4 @@ +default,-10,0,10 +-1,-0.9,-0.9,-0.9 +0,0,0,0 +1,0.9,0.9,0.9 diff --git a/simulator/autoware_carla_interface/config/objects.json b/simulator/autoware_carla_interface/config/objects.json new file mode 100644 index 0000000000000..7103118937548 --- /dev/null +++ b/simulator/autoware_carla_interface/config/objects.json @@ -0,0 +1,62 @@ +{ + "sensors": [ + { + "type": "sensor.camera.rgb", + "id": "rgb_front", + "spawn_point": { + "x": 0.7, + "y": 0.0, + "z": 1.6, + "roll": 0.0, + "pitch": 0.0, + "yaw": 0.0 + }, + "image_size_x": 1920, + "image_size_y": 1080, + "fov": 90.0 + }, + { + "type": "sensor.lidar.ray_cast", + "id": "top", + "spawn_point": { + "x": 0.0, + "y": 0.0, + "z": 3.1, + "roll": 0.0, + "pitch": 0.0, + "yaw": 0.0 + }, + "range": 100, + "channels": 64, + "points_per_second": 300000, + "upper_fov": 10.0, + "lower_fov": -30.0, + "rotation_frequency": 20, + "noise_stddev": 0.0 + }, + { + "type": "sensor.other.gnss", + "id": "gnss", + "spawn_point": { + "x": 0.0, + "y": 0.0, + "z": 1.6, + "roll": 0.0, + "pitch": 0.0, + "yaw": 0.0 + } + }, + { + "type": "sensor.other.imu", + "id": "imu", + "spawn_point": { + "x": 0.0, + "y": 0.0, + "z": 1.6, + "roll": 0.0, + "pitch": 0.0, + "yaw": 0.0 + } + } + ] +} diff --git a/simulator/autoware_carla_interface/config/raw_vehicle_cmd_converter.param.yaml b/simulator/autoware_carla_interface/config/raw_vehicle_cmd_converter.param.yaml new file mode 100644 index 0000000000000..cb604bc686075 --- /dev/null +++ b/simulator/autoware_carla_interface/config/raw_vehicle_cmd_converter.param.yaml @@ -0,0 +1,28 @@ +/**: + ros__parameters: + csv_path_accel_map: $(find-pkg-share autoware_carla_interface)/accel_map.csv + csv_path_brake_map: $(find-pkg-share autoware_carla_interface)/brake_map.csv + csv_path_steer_map: $(find-pkg-share autoware_carla_interface)/steer_map.csv + convert_accel_cmd: true + convert_brake_cmd: true + convert_steer_cmd: false + use_steer_ff: true + use_steer_fb: true + is_debugging: false + max_throttle: 0.4 + max_brake: 0.8 + max_steer: 1.0 + min_steer: -1.0 + steer_pid: + kp: 150.0 + ki: 15.0 + kd: 0.0 + max: 8.0 + min: -8.0 + max_p: 8.0 + min_p: -8.0 + max_i: 8.0 + min_i: -8.0 + max_d: 0.0 + min_d: 0.0 + invalid_integration_decay: 0.97 diff --git a/simulator/autoware_carla_interface/launch/autoware_carla_interface.launch.xml b/simulator/autoware_carla_interface/launch/autoware_carla_interface.launch.xml new file mode 100644 index 0000000000000..bdef2563777fc --- /dev/null +++ b/simulator/autoware_carla_interface/launch/autoware_carla_interface.launch.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/simulator/autoware_carla_interface/package.xml b/simulator/autoware_carla_interface/package.xml new file mode 100644 index 0000000000000..136138a0101b0 --- /dev/null +++ b/simulator/autoware_carla_interface/package.xml @@ -0,0 +1,29 @@ + + + autoware_carla_interface + 0.0.0 + The carla autoware bridge package + Muhammad Raditya GIOVANNI + Maxime CLEMENT + Apache License 2.0 + + std_msgs + autoware_perception_msgs + autoware_vehicle_msgs + geometry_msgs + rclpy + sensor_msgs + sensor_msgs_py + tf2 + tf2_ros + tier4_vehicle_msgs + + ament_cmake + + ament_lint_auto + ament_lint_common + + + ament_python + + diff --git a/simulator/autoware_carla_interface/resource/carla_autoware b/simulator/autoware_carla_interface/resource/carla_autoware new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/simulator/autoware_carla_interface/setup.cfg b/simulator/autoware_carla_interface/setup.cfg new file mode 100644 index 0000000000000..c749fdbef61a2 --- /dev/null +++ b/simulator/autoware_carla_interface/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/autoware_carla_interface +[install] +install_scripts=$base/lib/autoware_carla_interface diff --git a/simulator/autoware_carla_interface/setup.py b/simulator/autoware_carla_interface/setup.py new file mode 100644 index 0000000000000..f4bf37db01fb9 --- /dev/null +++ b/simulator/autoware_carla_interface/setup.py @@ -0,0 +1,33 @@ +from glob import glob +import os + +from setuptools import setup + +ROS_VERSION = int(os.environ["ROS_VERSION"]) + +package_name = "autoware_carla_interface" + +setup( + name=package_name, + version="0.0.0", + packages=[package_name], + data_files=[ + ("share/" + package_name, glob("config/*")), + ("share/" + package_name, glob("calibration_maps/*.csv")), + ("share/" + package_name, ["package.xml"]), + (os.path.join("share", package_name), glob("launch/autoware_carla_interface.launch.xml")), + ], + install_requires=["setuptools"], + zip_safe=True, + maintainer="Muhammad Raditya GIOVANNI, Maxime CLEMENT", + maintainer_email="mradityagio@gmail.com, maxime.clement@tier4.jp", + description="CARLA ROS 2 bridge for AUTOWARE", + license="Apache License 2.0", + tests_require=["pytest"], + entry_points={ + "console_scripts": [ + "autoware_carla_interface = autoware_carla_interface.carla_autoware:main" + ], + }, + package_dir={"": "src"}, +) diff --git a/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_autoware.py b/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_autoware.py new file mode 100644 index 0000000000000..b9c72d6c137d9 --- /dev/null +++ b/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_autoware.py @@ -0,0 +1,195 @@ +# Copyright 2024 Tier IV, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.sr/bin/env python + +import random +import signal +import time + +import carla + +from .carla_ros import carla_ros2_interface +from .modules.carla_data_provider import CarlaDataProvider +from .modules.carla_data_provider import GameTime +from .modules.carla_wrapper import SensorReceivedNoData +from .modules.carla_wrapper import SensorWrapper + + +class SensorLoop(object): + def __init__(self): + self.start_game_time = None + self.start_system_time = None + self.sensor = None + self.ego_actor = None + self.running = False + self.timestamp_last_run = 0.0 + self.timeout = 20.0 + + def _stop_loop(self): + self.running = False + + def _tick_sensor(self, timestamp): + if self.timestamp_last_run < timestamp.elapsed_seconds and self.running: + self.timestamp_last_run = timestamp.elapsed_seconds + GameTime.on_carla_tick(timestamp) + CarlaDataProvider.on_carla_tick() + try: + ego_action = self.sensor() + except SensorReceivedNoData as e: + raise RuntimeError(e) + self.ego_actor.apply_control(ego_action) + if self.running: + CarlaDataProvider.get_world().tick() + + +class InitializeInterface(object): + def __init__(self): + self.interface = carla_ros2_interface() + self.param_ = self.interface.get_param() + self.world = None + self.sensor_wrapper = None + self.ego_actor = None + self.prev_tick_wall_time = 0.0 + + # Parameter for Initializing Carla World + self.local_host = self.param_["host"] + self.port = self.param_["port"] + self.timeout = self.param_["timeout"] + self.sync_mode = self.param_["sync_mode"] + self.fixed_delta_seconds = self.param_["fixed_delta_seconds"] + self.carla_map = self.param_["carla_map"] + self.agent_role_name = self.param_["ego_vehicle_role_name"] + self.vehicle_type = self.param_["vehicle_type"] + self.spawn_point = self.param_["spawn_point"] + self.use_traffic_manager = self.param_["use_traffic_manager"] + self.max_real_delta_seconds = self.param_["max_real_delta_seconds"] + + def load_world(self): + client = carla.Client(self.local_host, self.port) + client.set_timeout(self.timeout) + client.load_world(self.carla_map) + self.world = client.get_world() + settings = self.world.get_settings() + settings.fixed_delta_seconds = self.fixed_delta_seconds + settings.synchronous_mode = self.sync_mode + self.world.apply_settings(settings) + CarlaDataProvider.set_world(self.world) + CarlaDataProvider.set_client(client) + spawn_point = carla.Transform() + point_items = self.spawn_point.split(",") + randomize = False + if len(point_items) == 6: + spawn_point.location.x = float(point_items[0]) + spawn_point.location.y = float(point_items[1]) + spawn_point.location.z = ( + float(point_items[2]) + 2 + ) # +2 is used so the car did not stuck on the road when spawned. + spawn_point.rotation.roll = float(point_items[3]) + spawn_point.rotation.pitch = float(point_items[4]) + spawn_point.rotation.yaw = float(point_items[5]) + else: + randomize = True + self.ego_actor = CarlaDataProvider.request_new_actor( + self.vehicle_type, spawn_point, self.agent_role_name, random_location=randomize + ) + self.interface.ego_actor = self.ego_actor # TODO improve design + self.interface.physics_control = self.ego_actor.get_physics_control() + + self.sensor_wrapper = SensorWrapper(self.interface) + self.sensor_wrapper.setup_sensors(self.ego_actor, False) + ########################################################################################################################################################## + # TRAFFIC MANAGER + ########################################################################################################################################################## + # cspell:ignore trafficmanager + if self.use_traffic_manager: + traffic_manager = client.get_trafficmanager() + traffic_manager.set_synchronous_mode(True) + traffic_manager.set_random_device_seed(0) + random.seed(0) + spawn_points_tm = self.world.get_map().get_spawn_points() + for i, spawn_point in enumerate(spawn_points_tm): + self.world.debug.draw_string(spawn_point.location, str(i), life_time=10) + models = [ + "dodge", + "audi", + "model3", + "mini", + "mustang", + "lincoln", + "prius", + "nissan", + "crown", + "impala", + ] + blueprints = [] + for vehicle in self.world.get_blueprint_library().filter("*vehicle*"): + if any(model in vehicle.id for model in models): + blueprints.append(vehicle) + max_vehicles = 30 + max_vehicles = min([max_vehicles, len(spawn_points_tm)]) + vehicles = [] + for i, spawn_point in enumerate(random.sample(spawn_points_tm, max_vehicles)): + temp = self.world.try_spawn_actor(random.choice(blueprints), spawn_point) + if temp is not None: + vehicles.append(temp) + + for vehicle in vehicles: + vehicle.set_autopilot(True) + + def run_bridge(self): + self.bridge_loop = SensorLoop() + self.bridge_loop.sensor = self.sensor_wrapper + self.bridge_loop.ego_actor = self.ego_actor + self.bridge_loop.start_system_time = time.time() + self.bridge_loop.start_game_time = GameTime.get_time() + self.bridge_loop.running = True + while self.bridge_loop.running: + timestamp = None + world = CarlaDataProvider.get_world() + if world: + snapshot = world.get_snapshot() + if snapshot: + timestamp = snapshot.timestamp + if timestamp: + delta_step = time.time() - self.prev_tick_wall_time + if delta_step <= self.max_real_delta_seconds: + # Add a wait to match the max_real_delta_seconds + time.sleep(self.max_real_delta_seconds - delta_step) + self.prev_tick_wall_time = time.time() + self.bridge_loop._tick_sensor(timestamp) + + def _stop_loop(self, sign, frame): + self.bridge_loop._stop_loop() + + def _cleanup(self): + self.sensor_wrapper.cleanup() + CarlaDataProvider.cleanup() + if self.ego_actor: + self.ego_actor.destroy() + self.ego_actor = None + + if self.interface: + self.interface.shutdown() + self.interface = None + + +def main(): + carla_bridge = InitializeInterface() + carla_bridge.load_world() + signal.signal(signal.SIGINT, carla_bridge._stop_loop) + carla_bridge.run_bridge() + carla_bridge._cleanup() + + +if __name__ == "__main__": + main() diff --git a/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_ros.py b/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_ros.py new file mode 100644 index 0000000000000..a4f8dee7af1a0 --- /dev/null +++ b/simulator/autoware_carla_interface/src/autoware_carla_interface/carla_ros.py @@ -0,0 +1,486 @@ +# Copyright 2024 Tier IV, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.sr/bin/env python + +import json +import math +import threading + +from autoware_vehicle_msgs.msg import ControlModeReport +from autoware_vehicle_msgs.msg import GearReport +from autoware_vehicle_msgs.msg import SteeringReport +from autoware_vehicle_msgs.msg import VelocityReport +from builtin_interfaces.msg import Time +import carla +from cv_bridge import CvBridge +from geometry_msgs.msg import Pose +from geometry_msgs.msg import PoseWithCovarianceStamped +import numpy +import rclpy +from rosgraph_msgs.msg import Clock +from sensor_msgs.msg import CameraInfo +from sensor_msgs.msg import Image +from sensor_msgs.msg import Imu +from sensor_msgs.msg import PointCloud2 +from sensor_msgs.msg import PointField +from std_msgs.msg import Header +from tier4_vehicle_msgs.msg import ActuationCommandStamped +from tier4_vehicle_msgs.msg import ActuationStatusStamped +from transforms3d.euler import euler2quat + +from .modules.carla_data_provider import GameTime +from .modules.carla_data_provider import datetime +from .modules.carla_utils import carla_location_to_ros_point +from .modules.carla_utils import carla_rotation_to_ros_quaternion +from .modules.carla_utils import create_cloud +from .modules.carla_utils import ros_pose_to_carla_transform +from .modules.carla_wrapper import SensorInterface + + +class carla_ros2_interface(object): + def __init__(self): + self.sensor_interface = SensorInterface() + self.timestamp = None + self.ego_actor = None + self.physics_control = None + self.channels = 0 + self.id_to_sensor_type_map = {} + self.id_to_camera_info_map = {} + self.cv_bridge = CvBridge() + self.first_ = True + self.pub_lidar = {} + self.sensor_frequencies = { + "top": 11, + "left": 11, + "right": 11, + "camera": 11, + "imu": 50, + "status": 50, + "pose": 2, + } + self.publish_prev_times = { + sensor: datetime.datetime.now() for sensor in self.sensor_frequencies + } + + # initialize ros2 node + rclpy.init(args=None) + self.ros2_node = rclpy.create_node("carla_ros2_interface") + self.parameters = { + "host": rclpy.Parameter.Type.STRING, + "port": rclpy.Parameter.Type.INTEGER, + "sync_mode": rclpy.Parameter.Type.BOOL, + "timeout": rclpy.Parameter.Type.INTEGER, + "fixed_delta_seconds": rclpy.Parameter.Type.DOUBLE, + "carla_map": rclpy.Parameter.Type.STRING, + "ego_vehicle_role_name": rclpy.Parameter.Type.STRING, + "spawn_point": rclpy.Parameter.Type.STRING, + "vehicle_type": rclpy.Parameter.Type.STRING, + "objects_definition_file": rclpy.Parameter.Type.STRING, + "use_traffic_manager": rclpy.Parameter.Type.BOOL, + "max_real_delta_seconds": rclpy.Parameter.Type.DOUBLE, + } + self.param_values = {} + for param_name, param_type in self.parameters.items(): + self.ros2_node.declare_parameter(param_name, param_type) + self.param_values[param_name] = self.ros2_node.get_parameter(param_name).value + + # Publish clock + self.clock_publisher = self.ros2_node.create_publisher(Clock, "/clock", 10) + obj_clock = Clock() + obj_clock.clock = Time(sec=0) + self.clock_publisher.publish(obj_clock) + + # Sensor Config (Edit your sensor here) + self.sensors = json.load(open(self.param_values["objects_definition_file"])) + + # Subscribing Autoware Control messages and converting to CARLA control + self.sub_control = self.ros2_node.create_subscription( + ActuationCommandStamped, "/control/command/actuation_cmd", self.control_callback, 1 + ) + + self.sub_vehicle_initialpose = self.ros2_node.create_subscription( + PoseWithCovarianceStamped, "initialpose", self.initialpose_callback, 1 + ) + + self.current_control = carla.VehicleControl() + + # Direct data publishing from CARLA for Autoware + self.pub_pose_with_cov = self.ros2_node.create_publisher( + PoseWithCovarianceStamped, "/sensing/gnss/pose_with_covariance", 1 + ) + self.pub_vel_state = self.ros2_node.create_publisher( + VelocityReport, "/vehicle/status/velocity_status", 1 + ) + self.pub_steering_state = self.ros2_node.create_publisher( + SteeringReport, "/vehicle/status/steering_status", 1 + ) + self.pub_ctrl_mode = self.ros2_node.create_publisher( + ControlModeReport, "/vehicle/status/control_mode", 1 + ) + self.pub_gear_state = self.ros2_node.create_publisher( + GearReport, "/vehicle/status/gear_status", 1 + ) + self.pub_actuation_status = self.ros2_node.create_publisher( + ActuationStatusStamped, "/vehicle/status/actuation_status", 1 + ) + + # Create Publisher for each Physical Sensors + for sensor in self.sensors["sensors"]: + self.id_to_sensor_type_map[sensor["id"]] = sensor["type"] + if sensor["type"] == "sensor.camera.rgb": + self.pub_camera = self.ros2_node.create_publisher( + Image, "/sensing/camera/traffic_light/image_raw", 1 + ) + self.pub_camera_info = self.ros2_node.create_publisher( + CameraInfo, "/sensing/camera/traffic_light/camera_info", 1 + ) + elif sensor["type"] == "sensor.lidar.ray_cast": + if sensor["id"] in self.sensor_frequencies: + self.pub_lidar[sensor["id"]] = self.ros2_node.create_publisher( + PointCloud2, f'/sensing/lidar/{sensor["id"]}/pointcloud', 10 + ) + else: + self.ros2_node.get_logger().info( + "Please use Top, Right, or Left as the LIDAR ID" + ) + elif sensor["type"] == "sensor.other.imu": + self.pub_imu = self.ros2_node.create_publisher( + Imu, "/sensing/imu/tamagawa/imu_raw", 1 + ) + else: + self.ros2_node.get_logger().info(f'No Publisher for {sensor["type"]} Sensor') + pass + + self.spin_thread = threading.Thread(target=rclpy.spin, args=(self.ros2_node,)) + self.spin_thread.start() + + def __call__(self): + input_data = self.sensor_interface.get_data() + timestamp = GameTime.get_time() + control = self.run_step(input_data, timestamp) + return control + + def get_param(self): + return self.param_values + + def checkFrequency(self, sensor): + time_delta = ( + datetime.datetime.now() - self.publish_prev_times[sensor] + ).microseconds / 1000000.0 + if 1.0 / time_delta >= self.sensor_frequencies[sensor]: + return True + return False + + def get_msg_header(self, frame_id): + """Obtain and modify ROS message header.""" + header = Header() + header.frame_id = frame_id + seconds = int(self.timestamp) + nanoseconds = int((self.timestamp - int(self.timestamp)) * 1000000000.0) + header.stamp = Time(sec=seconds, nanosec=nanoseconds) + return header + + def lidar(self, carla_lidar_measurement, id_): + """Transform the received lidar measurement into a ROS point cloud message.""" + if self.checkFrequency(id_): + return + self.publish_prev_times[id_] = datetime.datetime.now() + + header = self.get_msg_header(frame_id="velodyne_top_changed") + fields = [ + PointField(name="x", offset=0, datatype=PointField.FLOAT32, count=1), + PointField(name="y", offset=4, datatype=PointField.FLOAT32, count=1), + PointField(name="z", offset=8, datatype=PointField.FLOAT32, count=1), + PointField(name="intensity", offset=12, datatype=PointField.UINT8, count=1), + PointField(name="return_type", offset=13, datatype=PointField.UINT8, count=1), + PointField(name="channel", offset=14, datatype=PointField.UINT16, count=1), + ] + + lidar_data = numpy.frombuffer( + carla_lidar_measurement.raw_data, dtype=numpy.float32 + ).reshape(-1, 4) + intensity = lidar_data[:, 3] + intensity = ( + numpy.clip(intensity, 0, 1) * 255 + ) # CARLA lidar intensity values are between 0 and 1 + intensity = intensity.astype(numpy.uint8).reshape(-1, 1) + + return_type = numpy.zeros((lidar_data.shape[0], 1), dtype=numpy.uint8) + channel = numpy.empty((0, 1), dtype=numpy.uint16) + self.channels = self.sensors["sensors"] + + for i in range(self.channels[1]["channels"]): + current_ring_points_count = carla_lidar_measurement.get_point_count(i) + channel = numpy.vstack( + (channel, numpy.full((current_ring_points_count, 1), i, dtype=numpy.uint16)) + ) + + lidar_data = numpy.hstack((lidar_data[:, :3], intensity, return_type, channel)) + lidar_data[:, 1] *= -1 + + dtype = [ + ("x", "f4"), + ("y", "f4"), + ("z", "f4"), + ("intensity", "u1"), + ("return_type", "u1"), + ("channel", "u2"), + ] + + structured_lidar_data = numpy.zeros(lidar_data.shape[0], dtype=dtype) + structured_lidar_data["x"] = lidar_data[:, 0] + structured_lidar_data["y"] = lidar_data[:, 1] + structured_lidar_data["z"] = lidar_data[:, 2] + structured_lidar_data["intensity"] = lidar_data[:, 3].astype(numpy.uint8) + structured_lidar_data["return_type"] = lidar_data[:, 4].astype(numpy.uint8) + structured_lidar_data["channel"] = lidar_data[:, 5].astype(numpy.uint16) + + point_cloud_msg = create_cloud(header, fields, structured_lidar_data) + self.pub_lidar[id_].publish(point_cloud_msg) + + def initialpose_callback(self, data): + """Transform RVIZ initial pose to CARLA.""" + pose = data.pose.pose + pose.position.z += 2.0 + carla_pose_transform = ros_pose_to_carla_transform(pose) + if self.ego_actor is not None: + self.ego_actor.set_transform(carla_pose_transform) + else: + print("Can't find Ego Vehicle") + + def pose(self): + """Transform odometry data to Pose and publish Pose with Covariance message.""" + if self.checkFrequency("pose"): + return + self.publish_prev_times["pose"] = datetime.datetime.now() + + header = self.get_msg_header(frame_id="map") + out_pose_with_cov = PoseWithCovarianceStamped() + pose_carla = Pose() + pose_carla.position = carla_location_to_ros_point(self.ego_actor.get_transform().location) + pose_carla.orientation = carla_rotation_to_ros_quaternion( + self.ego_actor.get_transform().rotation + ) + out_pose_with_cov.header = header + out_pose_with_cov.pose.pose = pose_carla + out_pose_with_cov.pose.covariance = [ + 0.1, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.1, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + 0.0, + ] + self.pub_pose_with_cov.publish(out_pose_with_cov) + + def _build_camera_info(self, camera_actor): + """Build camera info.""" + camera_info = CameraInfo() + camera_info.width = camera_actor.width + camera_info.height = camera_actor.height + camera_info.distortion_model = "plumb_bob" + cx = camera_info.width / 2.0 + cy = camera_info.height / 2.0 + fx = camera_info.width / (2.0 * math.tan(camera_actor.fov * math.pi / 360.0)) + fy = fx + camera_info.k = [fx, 0.0, cx, 0.0, fy, cy, 0.0, 0.0, 1.0] + camera_info.d = [0.0, 0.0, 0.0, 0.0, 0.0] + camera_info.r = [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0] + camera_info.p = [fx, 0.0, cx, 0.0, 0.0, fy, cy, 0.0, 0.0, 0.0, 1.0, 0.0] + self._camera_info = camera_info + + def camera(self, carla_camera_data): + """Transform the received carla camera data into a ROS image and info message and publish.""" + while self.first_: + self._camera_info_ = self._build_camera_info(carla_camera_data) + self.first_ = False + + if self.checkFrequency("camera"): + return + self.publish_prev_times["camera"] = datetime.datetime.now() + + image_data_array = numpy.ndarray( + shape=(carla_camera_data.height, carla_camera_data.width, 4), + dtype=numpy.uint8, + buffer=carla_camera_data.raw_data, + ) + # cspell:ignore interp bgra + img_msg = self.cv_bridge.cv2_to_imgmsg(image_data_array, encoding="bgra8") + img_msg.header = self.get_msg_header( + frame_id="traffic_light_left_camera/camera_optical_link" + ) + cam_info = self._camera_info + cam_info.header = img_msg.header + self.pub_camera_info.publish(cam_info) + self.pub_camera.publish(img_msg) + + def imu(self, carla_imu_measurement): + """Transform a received imu measurement into a ROS Imu message and publish Imu message.""" + if self.checkFrequency("imu"): + return + self.publish_prev_times["imu"] = datetime.datetime.now() + + imu_msg = Imu() + imu_msg.header = self.get_msg_header(frame_id="tamagawa/imu_link_changed") + imu_msg.angular_velocity.x = -carla_imu_measurement.gyroscope.x + imu_msg.angular_velocity.y = carla_imu_measurement.gyroscope.y + imu_msg.angular_velocity.z = -carla_imu_measurement.gyroscope.z + + imu_msg.linear_acceleration.x = carla_imu_measurement.accelerometer.x + imu_msg.linear_acceleration.y = -carla_imu_measurement.accelerometer.y + imu_msg.linear_acceleration.z = carla_imu_measurement.accelerometer.z + + roll = math.radians(carla_imu_measurement.transform.rotation.roll) + pitch = -math.radians(carla_imu_measurement.transform.rotation.pitch) + yaw = -math.radians(carla_imu_measurement.transform.rotation.yaw) + + quat = euler2quat(roll, pitch, yaw) + imu_msg.orientation.w = quat[0] + imu_msg.orientation.x = quat[1] + imu_msg.orientation.y = quat[2] + imu_msg.orientation.z = quat[3] + + self.pub_imu.publish(imu_msg) + + def control_callback(self, in_cmd): + """Convert and publish CARLA Ego Vehicle Control to AUTOWARE.""" + out_cmd = carla.VehicleControl() + out_cmd.throttle = in_cmd.actuation.accel_cmd + # convert base on steer curve of the vehicle + steer_curve = self.physics_control.steering_curve + current_vel = self.ego_actor.get_velocity() + max_steer_ratio = numpy.interp( + abs(current_vel.x), [v.x for v in steer_curve], [v.y for v in steer_curve] + ) + out_cmd.steer = ( + -in_cmd.actuation.steer_cmd + * max_steer_ratio + * math.radians(self.physics_control.wheels[0].max_steer_angle) + ) + out_cmd.brake = in_cmd.actuation.brake_cmd + self.current_control = out_cmd + + def ego_status(self): + """Publish ego vehicle status.""" + if self.checkFrequency("status"): + return + + self.publish_prev_times["status"] = datetime.datetime.now() + + # convert velocity from cartesian to ego frame + trans_mat = numpy.array(self.ego_actor.get_transform().get_matrix()).reshape(4, 4) + rot_mat = trans_mat[0:3, 0:3] + inv_rot_mat = rot_mat.T + vel_vec = numpy.array( + [ + self.ego_actor.get_velocity().x, + self.ego_actor.get_velocity().y, + self.ego_actor.get_velocity().z, + ] + ).reshape(3, 1) + ego_velocity = (inv_rot_mat @ vel_vec).T[0] + + out_vel_state = VelocityReport() + out_steering_state = SteeringReport() + out_ctrl_mode = ControlModeReport() + out_gear_state = GearReport() + out_actuation_status = ActuationStatusStamped() + + out_vel_state.header = self.get_msg_header(frame_id="base_link") + out_vel_state.longitudinal_velocity = ego_velocity[0] + out_vel_state.lateral_velocity = ego_velocity[1] + out_vel_state.heading_rate = ( + self.ego_actor.get_transform().transform_vector(self.ego_actor.get_angular_velocity()).z + ) + + out_steering_state.stamp = out_vel_state.header.stamp + out_steering_state.steering_tire_angle = -math.radians( + self.ego_actor.get_wheel_steer_angle(carla.VehicleWheelLocation.FL_Wheel) + ) + + out_gear_state.stamp = out_vel_state.header.stamp + out_gear_state.report = GearReport.DRIVE + + out_ctrl_mode.stamp = out_vel_state.header.stamp + out_ctrl_mode.mode = ControlModeReport.AUTONOMOUS + + control = self.ego_actor.get_control() + out_actuation_status.header = self.get_msg_header(frame_id="base_link") + out_actuation_status.status.accel_status = control.throttle + out_actuation_status.status.brake_status = control.brake + out_actuation_status.status.steer_status = -control.steer + + self.pub_actuation_status.publish(out_actuation_status) + self.pub_vel_state.publish(out_vel_state) + self.pub_steering_state.publish(out_steering_state) + self.pub_ctrl_mode.publish(out_ctrl_mode) + self.pub_gear_state.publish(out_gear_state) + + def run_step(self, input_data, timestamp): + self.timestamp = timestamp + seconds = int(self.timestamp) + nanoseconds = int((self.timestamp - int(self.timestamp)) * 1000000000.0) + obj_clock = Clock() + obj_clock.clock = Time(sec=seconds, nanosec=nanoseconds) + self.clock_publisher.publish(obj_clock) + + # publish data of all sensors + for key, data in input_data.items(): + sensor_type = self.id_to_sensor_type_map[key] + if sensor_type == "sensor.camera.rgb": + self.camera(data[1]) + elif sensor_type == "sensor.other.gnss": + self.pose() + elif sensor_type == "sensor.lidar.ray_cast": + self.lidar(data[1], key) + elif sensor_type == "sensor.other.imu": + self.imu(data[1]) + else: + self.ros2_node.get_logger().info("No Publisher for [{key}] Sensor") + + # Publish ego vehicle status + self.ego_status() + return self.current_control + + def shutdown(self): + self.ros2_node.destroy_node() diff --git a/simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_data_provider.py b/simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_data_provider.py new file mode 100644 index 0000000000000..7d6608585f582 --- /dev/null +++ b/simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_data_provider.py @@ -0,0 +1,867 @@ +# Copyright 2024 Tier IV, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.sr/bin/env python + +"""Modified CARLA Data Provider from CARLA scenario runner.""" + +from __future__ import print_function + +import datetime +import math +import re +import threading + +import carla +from numpy import random +from six import iteritems + + +def calculate_velocity(actor): + """Calculate the velocity of a actor.""" + velocity_squared = actor.get_velocity().x ** 2 + velocity_squared += actor.get_velocity().y ** 2 + return math.sqrt(velocity_squared) + + +class CarlaDataProvider(object): # pylint: disable=too-many-public-methods + _actor_velocity_map = {} + _actor_location_map = {} + _actor_transform_map = {} + _traffic_light_map = {} + _carla_actor_pool = {} + _global_osc_parameters = {} + _client = None + _world = None + _map = None + _sync_flag = False + _spawn_points = None + _spawn_index = 0 + _blueprint_library = None + _all_actors = None + _ego_vehicle_route = None + _traffic_manager_port = 8000 + _random_seed = 2000 + _rng = random.RandomState(_random_seed) + _local_planner = None + _runtime_init_flag = False + _lock = threading.Lock() + + @staticmethod + def set_local_planner(plan): + CarlaDataProvider._local_planner = plan + + @staticmethod + def get_local_planner(): + return CarlaDataProvider._local_planner + + @staticmethod + def register_actor(actor, transform=None): + """Add new actor to dictionaries.""" + with CarlaDataProvider._lock: + if actor in CarlaDataProvider._actor_velocity_map: + raise KeyError( + "Vehicle '{}' already registered. Cannot register twice!".format(actor.id) + ) + else: + CarlaDataProvider._actor_velocity_map[actor] = 0.0 + if actor in CarlaDataProvider._actor_location_map: + raise KeyError( + "Vehicle '{}' already registered. Cannot register twice!".format(actor.id) + ) + elif transform: + CarlaDataProvider._actor_location_map[actor] = transform.location + else: + CarlaDataProvider._actor_location_map[actor] = None + + if actor in CarlaDataProvider._actor_transform_map: + raise KeyError( + "Vehicle '{}' already registered. Cannot register twice!".format(actor.id) + ) + else: + CarlaDataProvider._actor_transform_map[actor] = transform + + @staticmethod + def update_osc_global_params(parameters): + """Updates/initializes global osc parameters.""" + CarlaDataProvider._global_osc_parameters.update(parameters) + + @staticmethod + def get_osc_global_param_value(ref): + """Return updated global osc parameter value.""" + return CarlaDataProvider._global_osc_parameters.get(ref.replace("$", "")) + + @staticmethod + def register_actors(actors, transforms=None): + """Add new set of actors to dictionaries.""" + if transforms is None: + transforms = [None] * len(actors) + + for actor, transform in zip(actors, transforms): + CarlaDataProvider.register_actor(actor, transform) + + @staticmethod + def on_carla_tick(): + with CarlaDataProvider._lock: + for actor in CarlaDataProvider._actor_velocity_map: + if actor is not None and actor.is_alive: + CarlaDataProvider._actor_velocity_map[actor] = calculate_velocity(actor) + + for actor in CarlaDataProvider._actor_location_map: + if actor is not None and actor.is_alive: + CarlaDataProvider._actor_location_map[actor] = actor.get_location() + + for actor in CarlaDataProvider._actor_transform_map: + if actor is not None and actor.is_alive: + CarlaDataProvider._actor_transform_map[actor] = actor.get_transform() + + world = CarlaDataProvider._world + if world is None: + print("WARNING: CarlaDataProvider couldn't find the world") + + CarlaDataProvider._all_actors = None + + @staticmethod + def get_velocity(actor): + """Return the absolute velocity for the given actor.""" + for key in CarlaDataProvider._actor_velocity_map: + if key.id == actor.id: + return CarlaDataProvider._actor_velocity_map[key] + + # We are intentionally not throwing here + # This may cause exception loops in py_trees + print("{}.get_velocity: {} not found!".format(__name__, actor)) + return 0.0 + + @staticmethod + def get_location(actor): + """Return the location for the given actor.""" + for key in CarlaDataProvider._actor_location_map: + if key.id == actor.id: + return CarlaDataProvider._actor_location_map[key] + + # We are intentionally not throwing here + # This may cause exception loops in py_trees + print("{}.get_location: {} not found!".format(__name__, actor)) + return None + + @staticmethod + def get_transform(actor): + """Return the transform for the given actor.""" + for key in CarlaDataProvider._actor_transform_map: + if key.id == actor.id: + # The velocity location information is the entire behavior tree updated every tick + # The ego vehicle is created before the behavior tree tick, so exception handling needs to be added + if CarlaDataProvider._actor_transform_map[key] is None: + return actor.get_transform() + return CarlaDataProvider._actor_transform_map[key] + + # We are intentionally not throwing here + # This may cause exception loops in py_trees + print("{}.get_transform: {} not found!".format(__name__, actor)) + return None + + @staticmethod + def get_random_seed(): + """Return the random seed.""" + return CarlaDataProvider._rng + + @staticmethod + def set_client(client): + """Set the CARLA client.""" + CarlaDataProvider._client = client + + @staticmethod + def get_client(): + """Get the CARLA client.""" + return CarlaDataProvider._client + + @staticmethod + def set_world(world): + """Set the world and world settings.""" + CarlaDataProvider._world = world + CarlaDataProvider._sync_flag = world.get_settings().synchronous_mode + CarlaDataProvider._map = world.get_map() + CarlaDataProvider._blueprint_library = world.get_blueprint_library() + CarlaDataProvider.generate_spawn_points() + CarlaDataProvider.prepare_map() + + @staticmethod + def get_world(): + """Return world.""" + return CarlaDataProvider._world + + @staticmethod + def get_map(world=None): + """Get the current map.""" + if CarlaDataProvider._map is None: + if world is None: + if CarlaDataProvider._world is None: + raise ValueError("class member 'world'' not initialized yet") + else: + CarlaDataProvider._map = CarlaDataProvider._world.get_map() + else: + CarlaDataProvider._map = world.get_map() + + return CarlaDataProvider._map + + @staticmethod + def get_all_actors(): + """Return all the world actors.""" + if CarlaDataProvider._all_actors: + return CarlaDataProvider._all_actors + + CarlaDataProvider._all_actors = CarlaDataProvider._world.get_actors() + return CarlaDataProvider._all_actors + + @staticmethod + def set_runtime_init_mode(flag): + """Set the runtime init mode.""" + CarlaDataProvider._runtime_init_flag = flag + + @staticmethod + def is_runtime_init_mode(): + """Return true if runtime init mode is used.""" + return CarlaDataProvider._runtime_init_flag + + @staticmethod + def find_weather_presets(): + """Get weather presets from CARLA.""" + rgx = re.compile(".+?(?:(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|$)") + + def format_name(x): + return " ".join(m.group(0) for m in rgx.finditer(x)) + + presets = [x for x in dir(carla.WeatherParameters) if re.match("[A-Z].+", x)] + return [(getattr(carla.WeatherParameters, x), format_name(x)) for x in presets] + + @staticmethod + def prepare_map(): + """Set the current map and loads all traffic lights for this map to_traffic_light_map.""" + if CarlaDataProvider._map is None: + CarlaDataProvider._map = CarlaDataProvider._world.get_map() + + # Parse all traffic lights + CarlaDataProvider._traffic_light_map.clear() + for traffic_light in CarlaDataProvider._world.get_actors().filter("*traffic_light*"): + if traffic_light not in list(CarlaDataProvider._traffic_light_map): + CarlaDataProvider._traffic_light_map[traffic_light] = traffic_light.get_transform() + else: + raise KeyError( + "Traffic light '{}' already registered. Cannot register twice!".format( + traffic_light.id + ) + ) + + @staticmethod + def generate_spawn_points(): + """Generate spawn points for the current map.""" + spawn_points = list(CarlaDataProvider.get_map(CarlaDataProvider._world).get_spawn_points()) + CarlaDataProvider._rng.shuffle(spawn_points) + CarlaDataProvider._spawn_points = spawn_points + CarlaDataProvider._spawn_index = 0 + + @staticmethod + def check_road_length(wp, length: float): + waypoint_separation = 5 + + cur_len = 0 + road_id, lane_id = wp.road_id, wp.lane_id + while True: + wps = wp.next(waypoint_separation) + # The same road_id and lane_id,judged to be in the same section to be tested + next_wp = None + for p in wps: + if p.road_id == road_id and p.lane_id == lane_id: + next_wp = p + break + if next_wp is None: + break + cur_len += waypoint_separation + if cur_len >= length: + return True + wp = next_wp + return False + + @staticmethod + def get_road_lanes(wp): + if wp.is_junction: + return [] + # find the most left lane's waypoint + + lane_id_set = set() + pre_left = wp + while wp and wp.lane_type == carla.LaneType.Driving: + if wp.lane_id in lane_id_set: + break + lane_id_set.add(wp.lane_id) + + # carla bug: get_left_lane Return error,and never Return none. It's a infinite loop. + pre_left = wp + wp = wp.get_left_lane() + + # # Store data from the left lane to the right lane + # # list, key=laneid, value=waypoint + lane_list = [] + lane_id_set.clear() + wp = pre_left + while wp and wp.lane_type == carla.LaneType.Driving: + if wp.lane_id in lane_id_set: + break + lane_id_set.add(wp.lane_id) + + lane_list.append(wp) + + # carla bug: Return error, never return none, endless loop + wp = wp.get_right_lane() + + return lane_list + + @staticmethod + def get_road_lane_cnt(wp): + lanes = CarlaDataProvider.get_road_lanes(wp) + return len(lanes) + + @staticmethod + def get_waypoint_by_laneid(lane_num: int): + if CarlaDataProvider._spawn_points is None: + CarlaDataProvider.generate_spawn_points() + + if CarlaDataProvider._spawn_index >= len(CarlaDataProvider._spawn_points): + print("No more spawn points to use") + return None + else: + pos = CarlaDataProvider._spawn_points[ + CarlaDataProvider._spawn_index + ] # pylint: disable=unsubscriptable-object + CarlaDataProvider._spawn_index += 1 + wp = CarlaDataProvider.get_map().get_waypoint( + pos.location, project_to_road=True, lane_type=carla.LaneType.Driving + ) + + road_lanes = CarlaDataProvider.get_road_lanes(wp) + + lane = int(float(lane_num)) + if lane > len(road_lanes): + return None + else: + return road_lanes[lane - 1] + + # cspell:ignore rolename + @staticmethod + def create_blueprint( + model, rolename="scenario", color=None, actor_category="car", attribute_filter=None + ): + """Set up the blueprint of an actor given its model and other relevant parameters.""" + + def check_attribute_value(blueprint, name, value): + """Check if the blueprint has that attribute with that value.""" + if not blueprint.has_attribute(name): + return False + + attribute_type = blueprint.get_attribute(key).type + if attribute_type == carla.ActorAttributeType.Bool: + return blueprint.get_attribute(name).as_bool() == value + elif attribute_type == carla.ActorAttributeType.Int: + return blueprint.get_attribute(name).as_int() == value + elif attribute_type == carla.ActorAttributeType.Float: + return blueprint.get_attribute(name).as_float() == value + elif attribute_type == carla.ActorAttributeType.String: + return blueprint.get_attribute(name).as_str() == value + + return False + + # cspell:ignore carlacola carlamotors + _actor_blueprint_categories = { + "car": "vehicle.tesla.model3", + "van": "vehicle.volkswagen.t2", + "truck": "vehicle.carlamotors.carlacola", + "trailer": "", + "semitrailer": "", + "bus": "vehicle.volkswagen.t2", + "motorbike": "vehicle.kawasaki.ninja", + "bicycle": "vehicle.diamondback.century", + "train": "", + "tram": "", + "pedestrian": "walker.pedestrian.0001", + } + + # Set the model + try: + blueprints = CarlaDataProvider._blueprint_library.filter(model) + if attribute_filter is not None: + for key, value in attribute_filter.items(): + blueprints = [x for x in blueprints if check_attribute_value(x, key, value)] + + blueprint = CarlaDataProvider._rng.choice(blueprints) + except ValueError: + # The model is not part of the blueprint library. Let's take a default one for the given category + bp_filter = "vehicle.*" + new_model = _actor_blueprint_categories[actor_category] + if new_model != "": + bp_filter = new_model + print( + "WARNING: Actor model {} not available. Using instead {}".format(model, new_model) + ) + blueprint = CarlaDataProvider._rng.choice( + CarlaDataProvider._blueprint_library.filter(bp_filter) + ) + + # Set the color + if color: + if not blueprint.has_attribute("color"): + print( + "WARNING: Cannot set Color ({}) for actor {} due to missing blueprint attribute".format( + color, blueprint.id + ) + ) + else: + default_color_rgba = blueprint.get_attribute("color").as_color() + default_color = "({}, {}, {})".format( + default_color_rgba.r, default_color_rgba.g, default_color_rgba.b + ) + try: + blueprint.set_attribute("color", color) + except ValueError: + # Color can't be set for this vehicle + print( + "WARNING: Color ({}) cannot be set for actor {}. Using instead: ({})".format( + color, blueprint.id, default_color + ) + ) + blueprint.set_attribute("color", default_color) + else: + if blueprint.has_attribute("color") and rolename != "hero": + color = CarlaDataProvider._rng.choice( + blueprint.get_attribute("color").recommended_values + ) + blueprint.set_attribute("color", color) + + # Make pedestrians mortal + if blueprint.has_attribute("is_invincible"): + blueprint.set_attribute("is_invincible", "false") + + # Set the rolename + if blueprint.has_attribute("role_name"): + blueprint.set_attribute("role_name", rolename) + + return blueprint + + @staticmethod + def handle_actor_batch(batch, tick=True): + """Forward a CARLA command batch to spawn actors to CARLA, and gather the responses.""" + sync_mode = CarlaDataProvider.is_sync_mode() + actors = [] + + if CarlaDataProvider._client: + responses = CarlaDataProvider._client.apply_batch_sync(batch, sync_mode and tick) + else: + raise ValueError("class member 'client'' not initialized yet") + + # Wait (or not) for the actors to be spawned properly before we do anything + if not tick: + pass + elif CarlaDataProvider.is_runtime_init_mode(): + CarlaDataProvider._world.wait_for_tick() + elif sync_mode: + CarlaDataProvider._world.tick() + else: + CarlaDataProvider._world.wait_for_tick() + + actor_ids = [r.actor_id for r in responses if not r.error] + for r in responses: + if r.error: + print("WARNING: Not all actors were spawned") + break + actors = list(CarlaDataProvider._world.get_actors(actor_ids)) + return actors + + @staticmethod + def request_new_actor( + model, + spawn_point, + rolename="scenario", + autopilot=False, + random_location=False, + color=None, + actor_category="car", + attribute_filter=None, + tick=True, + ): + """Create a new actor, returning it if successful (None otherwise).""" + blueprint = CarlaDataProvider.create_blueprint( + model, rolename, color, actor_category, attribute_filter + ) + + if random_location: + actor = None + while not actor: + spawn_point = CarlaDataProvider._rng.choice(CarlaDataProvider._spawn_points) + actor = CarlaDataProvider._world.try_spawn_actor(blueprint, spawn_point) + + else: + # For non prop models, slightly lift the actor to avoid collisions with the ground + z_offset = 0.2 if "prop" not in model else 0 + + # DO NOT USE spawn_point directly, as this will modify spawn_point permanently + _spawn_point = carla.Transform(carla.Location(), spawn_point.rotation) + _spawn_point.location.x = spawn_point.location.x + _spawn_point.location.y = spawn_point.location.y + _spawn_point.location.z = spawn_point.location.z + z_offset + actor = CarlaDataProvider._world.try_spawn_actor(blueprint, _spawn_point) + + if actor is None: + print( + "WARNING: Cannot spawn actor {} at position {}".format(model, spawn_point.location) + ) + return None + + # De/activate the autopilot of the actor if it belongs to vehicle + if autopilot: + if isinstance(actor, carla.Vehicle): + actor.set_autopilot(autopilot, CarlaDataProvider._traffic_manager_port) + else: + print("WARNING: Tried to set the autopilot of a non vehicle actor") + + # Wait for the actor to be spawned properly before we do anything + if not tick: + pass + elif CarlaDataProvider.is_runtime_init_mode(): + CarlaDataProvider._world.wait_for_tick() + elif CarlaDataProvider.is_sync_mode(): + CarlaDataProvider._world.tick() + else: + CarlaDataProvider._world.wait_for_tick() + + if actor is None: + return None + + CarlaDataProvider._carla_actor_pool[actor.id] = actor + CarlaDataProvider.register_actor(actor, spawn_point) + return actor + + @staticmethod + def request_new_actors(actor_list, attribute_filter=None, tick=True): + """Series of actor in batch. If this was successful, the new actors are returned, None otherwise.""" + SpawnActor = carla.command.SpawnActor # pylint: disable=invalid-name + PhysicsCommand = carla.command.SetSimulatePhysics # pylint: disable=invalid-name + FutureActor = carla.command.FutureActor # pylint: disable=invalid-name + ApplyTransform = carla.command.ApplyTransform # pylint: disable=invalid-name + SetAutopilot = carla.command.SetAutopilot # pylint: disable=invalid-name + SetVehicleLightState = carla.command.SetVehicleLightState # pylint: disable=invalid-name + + batch = [] + actors = [] + + CarlaDataProvider.generate_spawn_points() + + for actor in actor_list: + # Get the blueprint + blueprint = CarlaDataProvider.create_blueprint( + actor.model, actor.rolename, actor.color, actor.category, attribute_filter + ) + + # Get the spawn point + transform = actor.transform + if not transform: + continue + if actor.random_location: + if CarlaDataProvider._spawn_index >= len(CarlaDataProvider._spawn_points): + print("No more spawn points to use") + break + else: + _spawn_point = CarlaDataProvider._spawn_points[ + CarlaDataProvider._spawn_index + ] # pylint: disable=unsubscriptable-object + CarlaDataProvider._spawn_index += 1 + + else: + _spawn_point = carla.Transform() + _spawn_point.rotation = transform.rotation + _spawn_point.location.x = transform.location.x + _spawn_point.location.y = transform.location.y + if blueprint.has_tag("walker"): + # On imported OpenDRIVE maps, spawning of pedestrians can fail. + # By increasing the z-value the chances of success are increased. + map_name = CarlaDataProvider._map.name.split("/")[-1] + if not map_name.startswith("OpenDrive"): + _spawn_point.location.z = transform.location.z + 0.2 + else: + _spawn_point.location.z = transform.location.z + 0.8 + else: + _spawn_point.location.z = transform.location.z + 0.2 + + # Get the command + command = SpawnActor(blueprint, _spawn_point) + command.then( + SetAutopilot(FutureActor, actor.autopilot, CarlaDataProvider._traffic_manager_port) + ) + + if ( + actor.args is not None + and "physics" in actor.args + and actor.args["physics"] == "off" + ): + command.then(ApplyTransform(FutureActor, _spawn_point)).then( + PhysicsCommand(FutureActor, False) + ) + elif actor.category == "misc": + command.then(PhysicsCommand(FutureActor, True)) + if actor.args is not None and "lights" in actor.args and actor.args["lights"] == "on": + command.then(SetVehicleLightState(FutureActor, carla.VehicleLightState.All)) + + batch.append(command) + + actors = CarlaDataProvider.handle_actor_batch(batch, tick) + + if not actors: + return None + + for actor in actors: + if actor is None: + continue + CarlaDataProvider._carla_actor_pool[actor.id] = actor + CarlaDataProvider.register_actor(actor, _spawn_point) + + return actors + + @staticmethod + def request_new_batch_actors( + model, + amount, + spawn_points, + autopilot=False, + random_location=False, + rolename="scenario", + attribute_filter=None, + tick=True, + ): + SpawnActor = carla.command.SpawnActor # pylint: disable=invalid-name + SetAutopilot = carla.command.SetAutopilot # pylint: disable=invalid-name + FutureActor = carla.command.FutureActor # pylint: disable=invalid-name + + CarlaDataProvider.generate_spawn_points() + + batch = [] + + for i in range(amount): + # Get vehicle by model + blueprint = CarlaDataProvider.create_blueprint( + model, rolename, attribute_filter=attribute_filter + ) + + if random_location: + if CarlaDataProvider._spawn_index >= len(CarlaDataProvider._spawn_points): + print( + "No more spawn points to use. Spawned {} actors out of {}".format( + i + 1, amount + ) + ) + break + else: + spawn_point = CarlaDataProvider._spawn_points[ + CarlaDataProvider._spawn_index + ] # pylint: disable=unsubscriptable-object + CarlaDataProvider._spawn_index += 1 + else: + try: + spawn_point = spawn_points[i] + except IndexError: + print("The amount of spawn points is lower than the amount of vehicles spawned") + break + + if spawn_point: + batch.append( + SpawnActor(blueprint, spawn_point).then( + SetAutopilot( + FutureActor, autopilot, CarlaDataProvider._traffic_manager_port + ) + ) + ) + + actors = CarlaDataProvider.handle_actor_batch(batch, tick) + for actor in actors: + if actor is None: + continue + CarlaDataProvider._carla_actor_pool[actor.id] = actor + CarlaDataProvider.register_actor(actor, spawn_point) + + return actors + + @staticmethod + def get_actors(): + """Return list of actors and their ids.""" + return iteritems(CarlaDataProvider._carla_actor_pool) + + @staticmethod + def actor_id_exists(actor_id): + """Check if a certain id is still at the simulation.""" + if actor_id in CarlaDataProvider._carla_actor_pool: + return True + + return False + + @staticmethod + def get_hero_actor(): + """Get the actor object of the hero actor if it exists, Return none otherwise.""" + for actor_id in CarlaDataProvider._carla_actor_pool: + if CarlaDataProvider._carla_actor_pool[actor_id].attributes["role_name"] == "hero": + return CarlaDataProvider._carla_actor_pool[actor_id] + return None + + @staticmethod + def get_actor_by_id(actor_id): + """Get an actor from the pool by using its ID. If the actor does not exist, None is returned.""" + print(CarlaDataProvider._carla_actor_pool) + if actor_id in CarlaDataProvider._carla_actor_pool: + return CarlaDataProvider._carla_actor_pool[actor_id] + + print("Non-existing actor id {}".format(actor_id)) + return None + + @staticmethod + def get_actor_by_name(role_name: str): + for actor_id in CarlaDataProvider._carla_actor_pool: + if CarlaDataProvider._carla_actor_pool[actor_id].attributes["role_name"] == role_name: + return CarlaDataProvider._carla_actor_pool[actor_id] + print(f"Non-existing actor name {role_name}") + return None + + @staticmethod + def remove_actor_by_id(actor_id): + """Remove an actor from the pool using its ID.""" + if actor_id in CarlaDataProvider._carla_actor_pool: + CarlaDataProvider._carla_actor_pool[actor_id].destroy() + CarlaDataProvider._carla_actor_pool[actor_id] = None + CarlaDataProvider._carla_actor_pool.pop(actor_id) + else: + print("Trying to remove a non-existing actor id {}".format(actor_id)) + + @staticmethod + def is_sync_mode(): + """Return true if synchronous mode is used.""" + return CarlaDataProvider._sync_flag + + @staticmethod + def remove_actors_in_surrounding(location, distance): + """Remove all actors from the pool that are closer than distance to the provided location.""" + for actor_id in CarlaDataProvider._carla_actor_pool.copy(): + if ( + CarlaDataProvider._carla_actor_pool[actor_id].get_location().distance(location) + < distance + ): + CarlaDataProvider._carla_actor_pool[actor_id].destroy() + CarlaDataProvider._carla_actor_pool.pop(actor_id) + + # Remove all keys with None values + CarlaDataProvider._carla_actor_pool = dict( + {k: v for k, v in CarlaDataProvider._carla_actor_pool.items() if v} + ) + + @staticmethod + def get_traffic_manager_port(): + """Get the port of the traffic manager.""" + return CarlaDataProvider._traffic_manager_port + + @staticmethod + def set_traffic_manager_port(tm_port): + """Set the port to use for the traffic manager.""" + CarlaDataProvider._traffic_manager_port = tm_port + + @staticmethod + def cleanup(): + """Cleanup and remove all entries from all dictionaries.""" + DestroyActor = carla.command.DestroyActor # pylint: disable=invalid-name + batch = [] + + for actor_id in CarlaDataProvider._carla_actor_pool.copy(): + actor = CarlaDataProvider._carla_actor_pool[actor_id] + if actor is not None and actor.is_alive: + batch.append(DestroyActor(actor)) + + if CarlaDataProvider._client: + try: + CarlaDataProvider._client.apply_batch_sync(batch) + except RuntimeError as e: + if "time-out" in str(e): + pass + else: + raise e + + CarlaDataProvider._actor_velocity_map.clear() + CarlaDataProvider._actor_location_map.clear() + CarlaDataProvider._actor_transform_map.clear() + CarlaDataProvider._traffic_light_map.clear() + CarlaDataProvider._map = None + CarlaDataProvider._world = None + CarlaDataProvider._sync_flag = False + CarlaDataProvider._ego_vehicle_route = None + CarlaDataProvider._all_actors = None + CarlaDataProvider._carla_actor_pool = {} + CarlaDataProvider._client = None + CarlaDataProvider._spawn_points = None + CarlaDataProvider._spawn_index = 0 + CarlaDataProvider._rng = random.RandomState(CarlaDataProvider._random_seed) + CarlaDataProvider._runtime_init_flag = False + + @property + def world(self): + return self._world + + +class GameTime(object): + """Provides access to the CARLA game time.""" + + _current_game_time = 0.0 # Elapsed game time after starting this Timer + _carla_time = 0.0 + _last_frame = 0 + _platform_timestamp = 0 + _init = False + + @staticmethod + def on_carla_tick(timestamp): + """Handle the callback receiving the CARLA time. Update time only when the frame is more recent than the last frame.""" + if GameTime._last_frame < timestamp.frame: + frames = timestamp.frame - GameTime._last_frame if GameTime._init else 1 + GameTime._current_game_time += timestamp.delta_seconds * frames + GameTime._last_frame = timestamp.frame + GameTime._platform_timestamp = datetime.datetime.now() + GameTime._init = True + GameTime._carla_time = timestamp.elapsed_seconds + + @staticmethod + def restart(): + """Reset game timer to 0.""" + GameTime._current_game_time = 0.0 + GameTime._carla_time = 0.0 + GameTime._last_frame = 0 + GameTime._init = False + + @staticmethod + def get_time(): + """Return elapsed game time.""" + return GameTime._current_game_time + + @staticmethod + def get_carla_time(): + """Return elapsed game time.""" + return GameTime._carla_time + + @staticmethod + def get_wall_clock_time(): + """Return elapsed game time.""" + return GameTime._platform_timestamp + + @staticmethod + def get_frame(): + """Return elapsed game time.""" + return GameTime._last_frame diff --git a/simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_utils.py b/simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_utils.py new file mode 100644 index 0000000000000..72eb176515f73 --- /dev/null +++ b/simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_utils.py @@ -0,0 +1,109 @@ +import ctypes +import math +import struct +import sys + +import carla +from geometry_msgs.msg import Point +from geometry_msgs.msg import Quaternion +from sensor_msgs.msg import PointCloud2 +from sensor_msgs.msg import PointField +from transforms3d.euler import euler2quat +from transforms3d.euler import quat2euler + + +def _get_struct_fmt(is_bigendian, fields, field_names=None): + _DATATYPES = {} + _DATATYPES[PointField.INT8] = ("b", 1) + _DATATYPES[PointField.UINT8] = ("B", 1) + _DATATYPES[PointField.INT16] = ("h", 2) + _DATATYPES[PointField.UINT16] = ("H", 2) + _DATATYPES[PointField.INT32] = ("i", 4) + _DATATYPES[PointField.UINT32] = ("I", 4) + _DATATYPES[PointField.FLOAT32] = ("f", 4) + _DATATYPES[PointField.FLOAT64] = ("d", 8) + + fmt = ">" if is_bigendian else "<" + + offset = 0 + for field in ( + f + for f in sorted(fields, key=lambda f: f.offset) + if field_names is None or f.name in field_names + ): + if offset < field.offset: + fmt += "x" * (field.offset - offset) + offset = field.offset + if field.datatype not in _DATATYPES: + print("Skipping unknown PointField datatype [{}]" % field.datatype, file=sys.stderr) + else: + datatype_fmt, datatype_length = _DATATYPES[field.datatype] + fmt += field.count * datatype_fmt + offset += field.count * datatype_length + + return fmt + + +def create_cloud(header, fields, points): + """Create a L{sensor_msgs.msg.PointCloud2} message with different datatype (Modified create_cloud function).""" + cloud_struct = struct.Struct(_get_struct_fmt(False, fields)) + + buff = ctypes.create_string_buffer(cloud_struct.size * len(points)) + + point_step, pack_into = cloud_struct.size, cloud_struct.pack_into + offset = 0 + for p in points: + pack_into(buff, offset, *p) + offset += point_step + + return PointCloud2( + header=header, + height=1, + width=len(points), + is_dense=False, + is_bigendian=False, + fields=fields, + point_step=cloud_struct.size, + row_step=cloud_struct.size * len(points), + data=buff.raw, + ) + + +def carla_location_to_ros_point(carla_location): + """Convert a carla location to a ROS point.""" + ros_point = Point() + ros_point.x = carla_location.x + ros_point.y = -carla_location.y + ros_point.z = carla_location.z + + return ros_point + + +def carla_rotation_to_ros_quaternion(carla_rotation): + """Convert a carla rotation to a ROS quaternion.""" + roll = math.radians(carla_rotation.roll) + pitch = -math.radians(carla_rotation.pitch) + yaw = -math.radians(carla_rotation.yaw) + quat = euler2quat(roll, pitch, yaw) + ros_quaternion = Quaternion(w=quat[0], x=quat[1], y=quat[2], z=quat[3]) + + return ros_quaternion + + +def ros_quaternion_to_carla_rotation(ros_quaternion): + """Convert ROS quaternion to carla rotation.""" + roll, pitch, yaw = quat2euler( + [ros_quaternion.w, ros_quaternion.x, ros_quaternion.y, ros_quaternion.z] + ) + + return carla.Rotation( + roll=math.degrees(roll), pitch=-math.degrees(pitch), yaw=-math.degrees(yaw) + ) + + +def ros_pose_to_carla_transform(ros_pose): + """Convert ROS pose to carla transform.""" + return carla.Transform( + carla.Location(ros_pose.position.x, -ros_pose.position.y, ros_pose.position.z), + ros_quaternion_to_carla_rotation(ros_pose.orientation), + ) diff --git a/simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_wrapper.py b/simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_wrapper.py new file mode 100644 index 0000000000000..ed036a47ea9fe --- /dev/null +++ b/simulator/autoware_carla_interface/src/autoware_carla_interface/modules/carla_wrapper.py @@ -0,0 +1,231 @@ +# Copyright 2024 Tier IV, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License.sr/bin/env python + +from __future__ import print_function + +import logging +from queue import Empty +from queue import Queue + +import carla +import numpy as np + +from .carla_data_provider import CarlaDataProvider + + +# Sensor Wrapper for Agent +class SensorReceivedNoData(Exception): + """Exceptions when no data received from the sensors.""" + + +class GenericMeasurement(object): + def __init__(self, data, frame): + self.data = data + self.frame = frame + + +class CallBack(object): + def __init__(self, tag, sensor, data_provider): + self._tag = tag + self._data_provider = data_provider + + self._data_provider.register_sensor(tag, sensor) + + def __call__(self, data): + if isinstance(data, carla.Image): + self._parse_image_cb(data, self._tag) + elif isinstance(data, carla.LidarMeasurement): + self._parse_lidar_cb(data, self._tag) + elif isinstance(data, carla.GnssMeasurement): + self._parse_gnss_cb(data, self._tag) + elif isinstance(data, carla.IMUMeasurement): + self._parse_imu_cb(data, self._tag) + elif isinstance(data, GenericMeasurement): + self._parse_pseudo_sensor(data, self._tag) + else: + logging.error("No callback method for this sensor.") + + # Parsing CARLA physical Sensors + def _parse_image_cb(self, image, tag): + self._data_provider.update_sensor(tag, image, image.frame) + + def _parse_lidar_cb(self, lidar_data, tag): + self._data_provider.update_sensor(tag, lidar_data, lidar_data.frame) + + def _parse_imu_cb(self, imu_data, tag): + self._data_provider.update_sensor(tag, imu_data, imu_data.frame) + + def _parse_gnss_cb(self, gnss_data, tag): + array = np.array( + [gnss_data.latitude, gnss_data.longitude, gnss_data.altitude], dtype=np.float64 + ) + self._data_provider.update_sensor(tag, array, gnss_data.frame) + + def _parse_pseudo_sensor(self, package, tag): + self._data_provider.update_sensor(tag, package.data, package.frame) + + +class SensorInterface(object): + def __init__(self): + self._sensors_objects = {} + self._new_data_buffers = Queue() + self._queue_timeout = 10 + self.tag = "" + + def register_sensor(self, tag, sensor): + self.tag = tag + if tag in self._sensors_objects: + raise ValueError(f"Duplicated sensor tag [{tag}]") + + self._sensors_objects[tag] = sensor + + def update_sensor(self, tag, data, timestamp): + if tag not in self._sensors_objects: + raise ValueError(f"Sensor with tag [{tag}] has not been created") + + self._new_data_buffers.put((tag, timestamp, data)) + + def get_data(self): + try: + data_dict = {} + while len(data_dict.keys()) < len(self._sensors_objects.keys()): + sensor_data = self._new_data_buffers.get(True, self._queue_timeout) + data_dict[sensor_data[0]] = (sensor_data[1], sensor_data[2]) + except Empty: + raise SensorReceivedNoData( + f"Sensor with tag [{self.tag}] took too long to send its data" + ) + + return data_dict + + +# Sensor Wrapper + + +class SensorWrapper(object): + _agent = None + _sensors_list = [] + + def __init__(self, agent): + self._agent = agent + + def __call__(self): + return self._agent() + + def setup_sensors(self, vehicle, debug_mode=False): + """Create and attach the sensor defined in objects.json.""" + bp_library = CarlaDataProvider.get_world().get_blueprint_library() + + for sensor_spec in self._agent.sensors["sensors"]: + bp = bp_library.find(str(sensor_spec["type"])) + + if sensor_spec["type"].startswith("sensor.camera"): + bp.set_attribute("image_size_x", str(sensor_spec["image_size_x"])) + bp.set_attribute("image_size_y", str(sensor_spec["image_size_y"])) + bp.set_attribute("fov", str(sensor_spec["fov"])) + sensor_location = carla.Location( + x=sensor_spec["spawn_point"]["x"], + y=sensor_spec["spawn_point"]["y"], + z=sensor_spec["spawn_point"]["z"], + ) + sensor_rotation = carla.Rotation( + pitch=sensor_spec["spawn_point"]["pitch"], + roll=sensor_spec["spawn_point"]["roll"], + yaw=sensor_spec["spawn_point"]["yaw"], + ) + + elif sensor_spec["type"].startswith("sensor.lidar"): + bp.set_attribute("range", str(sensor_spec["range"])) + bp.set_attribute("rotation_frequency", str(sensor_spec["rotation_frequency"])) + bp.set_attribute("channels", str(sensor_spec["channels"])) + bp.set_attribute("upper_fov", str(sensor_spec["upper_fov"])) + bp.set_attribute("lower_fov", str(sensor_spec["lower_fov"])) + bp.set_attribute("points_per_second", str(sensor_spec["points_per_second"])) + sensor_location = carla.Location( + x=sensor_spec["spawn_point"]["x"], + y=sensor_spec["spawn_point"]["y"], + z=sensor_spec["spawn_point"]["z"], + ) + sensor_rotation = carla.Rotation( + pitch=sensor_spec["spawn_point"]["pitch"], + roll=sensor_spec["spawn_point"]["roll"], + yaw=sensor_spec["spawn_point"]["yaw"], + ) + + elif sensor_spec["type"].startswith("sensor.other.gnss"): + bp.set_attribute("noise_alt_stddev", str(0.0)) + bp.set_attribute("noise_lat_stddev", str(0.0)) + bp.set_attribute("noise_lon_stddev", str(0.0)) + bp.set_attribute("noise_alt_bias", str(0.0)) + bp.set_attribute("noise_lat_bias", str(0.0)) + bp.set_attribute("noise_lon_bias", str(0.0)) + sensor_location = carla.Location( + x=sensor_spec["spawn_point"]["x"], + y=sensor_spec["spawn_point"]["y"], + z=sensor_spec["spawn_point"]["z"], + ) + sensor_rotation = carla.Rotation( + pitch=sensor_spec["spawn_point"]["pitch"], + roll=sensor_spec["spawn_point"]["roll"], + yaw=sensor_spec["spawn_point"]["yaw"], + ) + + elif sensor_spec["type"].startswith("sensor.other.imu"): + bp.set_attribute("noise_accel_stddev_x", str(0.0)) + bp.set_attribute("noise_accel_stddev_y", str(0.0)) + bp.set_attribute("noise_accel_stddev_z", str(0.0)) + bp.set_attribute("noise_gyro_stddev_x", str(0.0)) + bp.set_attribute("noise_gyro_stddev_y", str(0.0)) + bp.set_attribute("noise_gyro_stddev_z", str(0.0)) + sensor_location = carla.Location( + x=sensor_spec["spawn_point"]["x"], + y=sensor_spec["spawn_point"]["y"], + z=sensor_spec["spawn_point"]["z"], + ) + sensor_rotation = carla.Rotation( + pitch=sensor_spec["spawn_point"]["pitch"], + roll=sensor_spec["spawn_point"]["roll"], + yaw=sensor_spec["spawn_point"]["yaw"], + ) + + elif sensor_spec["type"].startswith("sensor.pseudo.*"): + sensor_location = carla.Location( + x=sensor_spec["spawn_point"]["x"], + y=sensor_spec["spawn_point"]["y"], + z=sensor_spec["spawn_point"]["z"], + ) + sensor_rotation = carla.Rotation( + pitch=sensor_spec["spawn_point"]["pitch"] + 0.001, + roll=sensor_spec["spawn_point"]["roll"] - 0.015, + yaw=sensor_spec["spawn_point"]["yaw"] + 0.0364, + ) + + # create sensor + sensor_transform = carla.Transform(sensor_location, sensor_rotation) + sensor = CarlaDataProvider.get_world().spawn_actor(bp, sensor_transform, vehicle) + # setup callback + sensor.listen(CallBack(sensor_spec["id"], sensor, self._agent.sensor_interface)) + self._sensors_list.append(sensor) + + # Tick once to spawn the sensors + CarlaDataProvider.get_world().tick() + + def cleanup(self): + """Cleanup sensors.""" + for i, _ in enumerate(self._sensors_list): + if self._sensors_list[i] is not None: + self._sensors_list[i].stop() + self._sensors_list[i].destroy() + self._sensors_list[i] = None + self._sensors_list = [] From ef1eac36df57d5f25ddaab03995e5d7e3bef345c Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Fri, 19 Jul 2024 16:34:50 +0900 Subject: [PATCH 246/306] feat(simple_planning_simulator): add actuation command simulator (#8065) * feat(simple_planning_simulator): add actuation command simulator Signed-off-by: kosuke55 tmp Signed-off-by: kosuke55 add * remove unused functions Signed-off-by: kosuke55 * common map Signed-off-by: kosuke55 * pre-commit Signed-off-by: kosuke55 * update readme Signed-off-by: kosuke55 * add test Signed-off-by: kosuke55 install test dir Signed-off-by: kosuke55 fix test * pre-commit Signed-off-by: kosuke55 * clean up test for for scalability parameter Signed-off-by: Takamasa Horibe * fix typo Signed-off-by: kosuke55 --------- Signed-off-by: kosuke55 Signed-off-by: Takamasa Horibe Co-authored-by: Takamasa Horibe --- .../launch/simulator.launch.xml | 2 + .../simple_planning_simulator/CMakeLists.txt | 3 +- simulator/simple_planning_simulator/README.md | 17 ++ .../data/actuation_cmd_map/accel_map.csv | 7 + .../data/actuation_cmd_map/brake_map.csv | 10 + .../data/actuation_cmd_map/steer_map.csv | 14 + .../simple_planning_simulator_core.hpp | 21 +- .../utils/csv_loader.hpp | 3 +- .../vehicle_model/sim_model.hpp | 1 + .../vehicle_model/sim_model_actuation_cmd.hpp | 209 ++++++++++++++ .../sim_model_delay_steer_map_acc_geared.hpp | 4 +- .../simple_planning_simulator.launch.py | 53 +++- .../simple_planning_simulator_core.cpp | 89 +++++- .../utils/csv_loader.cpp | 12 +- .../vehicle_model/sim_model_actuation_cmd.cpp | 259 ++++++++++++++++++ .../test/actuation_cmd_map/accel_map.csv | 6 + .../test/actuation_cmd_map/brake_map.csv | 10 + .../test/actuation_cmd_map/steer_map.csv | 4 + .../test/test_simple_planning_simulator.cpp | 173 ++++++++++-- 19 files changed, 843 insertions(+), 54 deletions(-) create mode 100644 simulator/simple_planning_simulator/data/actuation_cmd_map/accel_map.csv create mode 100644 simulator/simple_planning_simulator/data/actuation_cmd_map/brake_map.csv create mode 100644 simulator/simple_planning_simulator/data/actuation_cmd_map/steer_map.csv create mode 100644 simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.hpp create mode 100644 simulator/simple_planning_simulator/src/simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.cpp create mode 100644 simulator/simple_planning_simulator/test/actuation_cmd_map/accel_map.csv create mode 100644 simulator/simple_planning_simulator/test/actuation_cmd_map/brake_map.csv create mode 100644 simulator/simple_planning_simulator/test/actuation_cmd_map/steer_map.csv diff --git a/launch/tier4_simulator_launch/launch/simulator.launch.xml b/launch/tier4_simulator_launch/launch/simulator.launch.xml index bf43fde85e0a2..04d91293a7877 100644 --- a/launch/tier4_simulator_launch/launch/simulator.launch.xml +++ b/launch/tier4_simulator_launch/launch/simulator.launch.xml @@ -13,6 +13,7 @@ + @@ -159,6 +160,7 @@ +
diff --git a/simulator/simple_planning_simulator/CMakeLists.txt b/simulator/simple_planning_simulator/CMakeLists.txt index 376553aa62917..07e7e6b5ad169 100644 --- a/simulator/simple_planning_simulator/CMakeLists.txt +++ b/simulator/simple_planning_simulator/CMakeLists.txt @@ -21,6 +21,7 @@ ament_auto_add_library(${PROJECT_NAME} SHARED src/simple_planning_simulator/vehicle_model/sim_model_delay_steer_acc_geared.cpp src/simple_planning_simulator/vehicle_model/sim_model_delay_steer_acc_geared_wo_fall_guard.cpp src/simple_planning_simulator/vehicle_model/sim_model_delay_steer_map_acc_geared.cpp + src/simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.cpp src/simple_planning_simulator/utils/csv_loader.cpp ) target_include_directories(${PROJECT_NAME} PUBLIC ${Python3_INCLUDE_DIRS} ${learning_based_vehicle_model_INCLUDE_DIRS}) @@ -41,4 +42,4 @@ if(BUILD_TESTING) ) endif() -ament_auto_package(INSTALL_TO_SHARE param launch) +ament_auto_package(INSTALL_TO_SHARE param data launch test) diff --git a/simulator/simple_planning_simulator/README.md b/simulator/simple_planning_simulator/README.md index c3d02da64b882..d44264035ecc4 100644 --- a/simulator/simple_planning_simulator/README.md +++ b/simulator/simple_planning_simulator/README.md @@ -65,6 +65,7 @@ The purpose of this simulator is for the integration test of planning and contro - `DELAY_STEER_ACC_GEARED_WO_FALL_GUARD` - `DELAY_STEER_MAP_ACC_GEARED`: applies 1D dynamics and time delay to the steering and acceleration commands. The simulated acceleration is determined by a value converted through the provided acceleration map. This model is valuable for an accurate simulation with acceleration deviations in a real vehicle. - `LEARNED_STEER_VEL`: launches learned python models. More about this [here](../learning_based_vehicle_model). +- `ACTUATION_CMD`: A simulator model that receives `ACTUATION_CMD`. In this case, the `raw_vehicle_cmd_converter` is also launched. The `IDEAL` model moves ideally as commanded, while the `DELAY` model moves based on a 1st-order with time delay model. The `STEER` means the model receives the steer command. The `VEL` means the model receives the target velocity command, while the `ACC` model receives the target acceleration command. The `GEARED` suffix means that the motion will consider the gear command: the vehicle moves only one direction following the gear. @@ -122,6 +123,22 @@ default, 0.00, 1.39, 2.78, 4.17, 5.56, 6.94, 8.33, 9.72, 11.11, 12.50, 1 ![acceleration_map](./media/acceleration_map.svg) +##### ACTUATION_CMD model + +The simple_planning_simulator usually operates by receiving Control commands, but when the `ACTUATION_CMD` model is selected, it receives Actuation commands instead of Control commands. This model can simulate the motion using the vehicle command that is actually sent to the real vehicle. Therefore, when this model is selected, the `raw_vehicle_cmd_converter` is also launched. + +The parameters used in the ACTUATION_CMD are as follows. + +| Name | Type | Description | unit | +| :------------------ | :----- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--- | +| accel_time_delay | double | dead time for the acceleration input | [s] | +| accel_time_constant | double | time constant of the 1st-order acceleration dynamics | [s] | +| brake_time_delay | double | dead time for the brake input | [s] | +| brake_time_constant | double | time constant of the 1st-order brake dynamics | [s] | +| convert_accel_cmd | bool | If true, it is assumed that the command is received converted to an accel actuation value, and it is converted back to acceleration value inside the simulator. | [-] | +| convert_brake_cmd | bool | If true, it is assumed that the command is received converted to a brake actuation value, and it is converted back to acceleration value inside the simulator. | [-] | +| convert_steer_cmd | bool | If true, it is assumed that the command is received converted to a steer actuation value, and it is converted back to steer rate value inside the simulator. | [-] | + _Note_: The steering/velocity/acceleration dynamics is modeled by a first order system with a deadtime in a _delay_ model. The definition of the _time constant_ is the time it takes for the step response to rise up to 63% of its final value. The _deadtime_ is a delay in the response to a control input. diff --git a/simulator/simple_planning_simulator/data/actuation_cmd_map/accel_map.csv b/simulator/simple_planning_simulator/data/actuation_cmd_map/accel_map.csv new file mode 100644 index 0000000000000..32e639cad3373 --- /dev/null +++ b/simulator/simple_planning_simulator/data/actuation_cmd_map/accel_map.csv @@ -0,0 +1,7 @@ +default,0.0, 1.39, 2.78, 4.17, 5.56, 6.94, 8.33, 9.72, 11.11, 12.50, 13.89 +0,0.3,-0.05,-0.3,-0.39,-0.4,-0.41,-0.42,-0.44,-0.46,-0.48,-0.5 +0.1,0.6,0.42,0.24,0.18,0.12,0.05,-0.08,-0.16,-0.2,-0.24,-0.28 +0.2,1.15,0.98,0.78,0.6,0.48,0.34,0.26,0.2,0.1,0.05,-0.03 +0.3,1.75,1.6,1.42,1.3,1.14,1,0.9,0.8,0.72,0.64,0.58 +0.4,2.65,2.48,2.3,2.13,1.95,1.75,1.58,1.45,1.32,1.2,1.1 +0.5,3.3,3.25,3.12,2.92,2.68,2.35,2.17,1.98,1.88,1.73,1.61 diff --git a/simulator/simple_planning_simulator/data/actuation_cmd_map/brake_map.csv b/simulator/simple_planning_simulator/data/actuation_cmd_map/brake_map.csv new file mode 100644 index 0000000000000..adf2c80950bb1 --- /dev/null +++ b/simulator/simple_planning_simulator/data/actuation_cmd_map/brake_map.csv @@ -0,0 +1,10 @@ +default,0.0, 1.39, 2.78, 4.17, 5.56, 6.94, 8.33, 9.72, 11.11, 12.50, 13.89 +0,0.3,-0.05,-0.3,-0.39,-0.4,-0.41,-0.42,-0.44,-0.46,-0.48,-0.5 +0.1,0.29,-0.06,-0.31,-0.4,-0.41,-0.42,-0.43,-0.45,-0.47,-0.49,-0.51 +0.2,-0.38,-0.4,-0.72,-0.8,-0.82,-0.85,-0.87,-0.89,-0.91,-0.94,-0.96 +0.3,-1,-1.04,-1.48,-1.55,-1.57,-1.59,-1.61,-1.63,-1.631,-1.632,-1.633 +0.4,-1.48,-1.5,-1.85,-2.05,-2.1,-2.101,-2.102,-2.103,-2.104,-2.105,-2.106 +0.5,-1.49,-1.51,-1.86,-2.06,-2.11,-2.111,-2.112,-2.113,-2.114,-2.115,-2.116 +0.6,-1.5,-1.52,-1.87,-2.07,-2.12,-2.121,-2.122,-2.123,-2.124,-2.125,-2.126 +0.7,-1.51,-1.53,-1.88,-2.08,-2.13,-2.131,-2.132,-2.133,-2.134,-2.135,-2.136 +0.8,-2.18,-2.2,-2.7,-2.8,-2.9,-2.95,-2.951,-2.952,-2.953,-2.954,-2.955 diff --git a/simulator/simple_planning_simulator/data/actuation_cmd_map/steer_map.csv b/simulator/simple_planning_simulator/data/actuation_cmd_map/steer_map.csv new file mode 100644 index 0000000000000..3da0e0cd54f2d --- /dev/null +++ b/simulator/simple_planning_simulator/data/actuation_cmd_map/steer_map.csv @@ -0,0 +1,14 @@ +default,-0.6,-0.5,-0.4,-0.3,-0.2,-0.1,0,0.1,0.2,0.3,0.4,0.5,0.6 +-12,-0.29,-0.3234236132,-0.3468991362,-0.37274847,-0.4288688461,-0.4696573,-0.4781014157,-0.49,-0.51,-0.52,-0.53,-0.54,-0.55 +-10,-0.2,-0.2451308686,-0.2667782734,-0.3090752469,-0.3575200568,-0.3874868999,-0.4041493831,-0.42,-0.43,-0.44,-0.45,-0.46,-0.47 +-8,-0.1,-0.1586739777,-0.2020698818,-0.2317654357,-0.2778998646,-0.3029839842,-0.3188172953,-0.32,-0.33,-0.34,-0.35,-0.36,-0.37 +-6,-0.0404761584,-0.0806574159,-0.1208386734,-0.1559621241,-0.1888907059,-0.210790018,-0.2322336736,-0.24,-0.25,-0.26,-0.27,-0.28,-0.29 +-4,0.01,-0.01428569928,-0.04,-0.06805018099,-0.09718925222,-0.1189509092,-0.1361293637,-0.14,-0.153044463,-0.1688321844,-0.18,-0.2,-0.22 +-2,0.06,0.05,0.03,0.01,-0.006091655083,-0.03546033903,-0.05319488695,-0.06097627388,-0.07576251508,-0.09165178816,-0.1,-0.12,-0.14 +0,0.11,0.09,0.07,0.05,0.03,0.01,-0.0004106386541,-0.01,-0.03,-0.05,-0.07,-0.09,-0.11 +2,0.15,0.13,0.11,0.09,0.07812978496,0.06023545297,0.04386326928,0.02314813566,0.003779338416,-0.01390526686,-0.0324840879,-0.05106290894,-0.06964172998 +4,0.24,0.22,0.2,0.1839795042,0.1649754952,0.1455879759,0.1274837062,0.1020632549,0.0861964856,0.06971503353,0.04541294018,0.01308869356,-0.01923555307 +6,0.33,0.31,0.29,0.274963497,0.2447295892,0.2337353319,0.2126138313,0.1767700907,0.1578757866,0.1440584148,0.1136331403,0.0827443595,0.05185557872 +8,0.43,0.41,0.39,0.3714915121,0.3299578073,0.3156403746,0.2997845963,0.2500495071,0.2339668568,0.2153133621,0.1815127859,0.156071251,0.1306297162 +10,0.5,0.49,0.48,0.4629455165,0.4210353203,0.3977027236,0.3865034288,0.3250957262,0.312237913,0.2885123051,0.2474220915,0.2123900615,0.1773580315 +12,0.56,0.54,0.53,0.5151036525,0.5046070554,0.4897214196,0.4687756354,0.4036994672,0.3812674227,0.3496883008,0.32482655,0.2783538423,0.2318811345 diff --git a/simulator/simple_planning_simulator/include/simple_planning_simulator/simple_planning_simulator_core.hpp b/simulator/simple_planning_simulator/include/simple_planning_simulator/simple_planning_simulator_core.hpp index 86e4346770f0c..0ed603960a6c5 100644 --- a/simulator/simple_planning_simulator/include/simple_planning_simulator/simple_planning_simulator_core.hpp +++ b/simulator/simple_planning_simulator/include/simple_planning_simulator/simple_planning_simulator_core.hpp @@ -44,6 +44,7 @@ #include "nav_msgs/msg/odometry.hpp" #include "sensor_msgs/msg/imu.hpp" #include "tier4_external_api_msgs/srv/initialize_pose.hpp" +#include "tier4_vehicle_msgs/msg/actuation_command_stamped.hpp" #include #include @@ -52,6 +53,7 @@ #include #include #include +#include #include namespace simulation @@ -83,6 +85,7 @@ using geometry_msgs::msg::TwistStamped; using nav_msgs::msg::Odometry; using sensor_msgs::msg::Imu; using tier4_external_api_msgs::srv::InitializePose; +using tier4_vehicle_msgs::msg::ActuationCommandStamped; class DeltaTime { @@ -115,6 +118,8 @@ class MeasurementNoiseGenerator std::shared_ptr> steer_dist_; }; +using InputCommand = std::variant; + class PLANNING_SIMULATOR_PUBLIC SimplePlanningSimulator : public rclcpp::Node { public: @@ -138,7 +143,6 @@ class PLANNING_SIMULATOR_PUBLIC SimplePlanningSimulator : public rclcpp::Node rclcpp::Subscription::SharedPtr sub_manual_gear_cmd_; rclcpp::Subscription::SharedPtr sub_turn_indicators_cmd_; rclcpp::Subscription::SharedPtr sub_hazard_lights_cmd_; - rclcpp::Subscription::SharedPtr sub_ackermann_cmd_; rclcpp::Subscription::SharedPtr sub_manual_ackermann_cmd_; rclcpp::Subscription::SharedPtr sub_map_; rclcpp::Subscription::SharedPtr sub_init_pose_; @@ -146,6 +150,10 @@ class PLANNING_SIMULATOR_PUBLIC SimplePlanningSimulator : public rclcpp::Node rclcpp::Subscription::SharedPtr sub_trajectory_; rclcpp::Subscription::SharedPtr sub_engage_; + // todo + rclcpp::Subscription::SharedPtr sub_ackermann_cmd_; + rclcpp::Subscription::SharedPtr sub_actuation_cmd_; + rclcpp::Service::SharedPtr srv_mode_req_; rclcpp::CallbackGroup::SharedPtr group_api_service_; @@ -189,6 +197,8 @@ class PLANNING_SIMULATOR_PUBLIC SimplePlanningSimulator : public rclcpp::Node bool is_initialized_ = false; //!< @brief flag to check the initial position is set bool add_measurement_noise_ = false; //!< @brief flag to add measurement noise + InputCommand current_input_command_{}; + DeltaTime delta_time_{}; //!< @brief to calculate delta time MeasurementNoiseGenerator measurement_noise_{}; //!< @brief for measurement noise @@ -206,15 +216,20 @@ class PLANNING_SIMULATOR_PUBLIC SimplePlanningSimulator : public rclcpp::Node DELAY_STEER_VEL = 5, DELAY_STEER_MAP_ACC_GEARED = 6, LEARNED_STEER_VEL = 7, - DELAY_STEER_ACC_GEARED_WO_FALL_GUARD = 8 + DELAY_STEER_ACC_GEARED_WO_FALL_GUARD = 8, + ACTUATION_CMD = 9 } vehicle_model_type_; //!< @brief vehicle model type to decide the model dynamics std::shared_ptr vehicle_model_ptr_; //!< @brief vehicle model pointer + void set_input(const InputCommand & cmd, const double acc_by_slope); + /** * @brief set input steering, velocity, and acceleration of the vehicle model */ void set_input(const Control & cmd, const double acc_by_slope); + void set_input(const ActuationCommandStamped & cmd, const double acc_by_slope); + /** * @brief set current_vehicle_state_ with received message */ @@ -295,7 +310,7 @@ class PLANNING_SIMULATOR_PUBLIC SimplePlanningSimulator : public rclcpp::Node /** * @brief initialize vehicle_model_ptr */ - void initialize_vehicle_model(); + void initialize_vehicle_model(const std::string & vehicle_model_type_str); /** * @brief add measurement noise diff --git a/simulator/simple_planning_simulator/include/simple_planning_simulator/utils/csv_loader.hpp b/simulator/simple_planning_simulator/include/simple_planning_simulator/utils/csv_loader.hpp index fc71837541b83..a8851640fb62b 100644 --- a/simulator/simple_planning_simulator/include/simple_planning_simulator/utils/csv_loader.hpp +++ b/simulator/simple_planning_simulator/include/simple_planning_simulator/utils/csv_loader.hpp @@ -34,8 +34,7 @@ class CSVLoader static Map getMap(const Table & table); static std::vector getRowIndex(const Table & table); static std::vector getColumnIndex(const Table & table); - static double clampValue( - const double val, const std::vector & ranges, const std::string & name); + static double clampValue(const double val, const std::vector & ranges); private: std::string csv_path_; diff --git a/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model.hpp b/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model.hpp index 2d38ef31498b6..52c3825ae1888 100644 --- a/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model.hpp +++ b/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model.hpp @@ -15,6 +15,7 @@ #ifndef SIMPLE_PLANNING_SIMULATOR__VEHICLE_MODEL__SIM_MODEL_HPP_ #define SIMPLE_PLANNING_SIMULATOR__VEHICLE_MODEL__SIM_MODEL_HPP_ +#include "simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.hpp" #include "simple_planning_simulator/vehicle_model/sim_model_delay_steer_acc.hpp" #include "simple_planning_simulator/vehicle_model/sim_model_delay_steer_acc_geared.hpp" #include "simple_planning_simulator/vehicle_model/sim_model_delay_steer_acc_geared_wo_fall_guard.hpp" diff --git a/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.hpp b/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.hpp new file mode 100644 index 0000000000000..1385a509b8dca --- /dev/null +++ b/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.hpp @@ -0,0 +1,209 @@ +// Copyright 2024 The Autoware Foundation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef SIMPLE_PLANNING_SIMULATOR__VEHICLE_MODEL__SIM_MODEL_ACTUATION_CMD_HPP_ +#define SIMPLE_PLANNING_SIMULATOR__VEHICLE_MODEL__SIM_MODEL_ACTUATION_CMD_HPP_ + +#include "eigen3/Eigen/Core" +#include "eigen3/Eigen/LU" +#include "interpolation/linear_interpolation.hpp" +#include "simple_planning_simulator/utils/csv_loader.hpp" +#include "simple_planning_simulator/vehicle_model/sim_model_interface.hpp" + +#include +#include +#include +#include +#include + +/** + * @class ActuationMap + * @brief class to convert actuation command + */ +class ActuationMap +{ +public: + /** + * @brief read actuation map from csv file + * @param [in] csv_path path to csv file + * @param [in] validation flag to validate data + * @return true if success to read + */ + bool readActuationMapFromCSV(const std::string & csv_path, const bool validation = false); + double getControlCommand(const double actuation, const double state) const; + +private: + std::vector state_index_; // e.g. velocity, steering + std::vector actuation_index_; + std::vector> actuation_map_; +}; + +/** + * @class SimModelActuationCmd + * @brief class to handle vehicle model with actuation command + */ +class SimModelActuationCmd : public SimModelInterface +{ +public: + /** + * @brief constructor + * @param [in] vx_lim velocity limit [m/s] + * @param [in] steer_lim steering limit [rad] + * @param [in] vx_rate_lim acceleration limit [m/ss] + * @param [in] steer_rate_lim steering angular velocity limit [rad/ss] + * @param [in] wheelbase vehicle wheelbase length [m] + * @param [in] dt delta time information to set input buffer for delay + * @param [in] accel_delay time delay for accel command [s] + * @param [in] acc_time_constant time constant for 1D model of accel dynamics + * @param [in] brake_delay time delay for brake command [s] + * @param [in] brake_time_constant time constant for 1D model of brake dynamics + * @param [in] steer_delay time delay for steering command [s] + * @param [in] steer_time_constant time constant for 1D model of steering dynamics + * @param [in] steer_bias steering bias [rad] + * @param [in] convert_accel_cmd flag to convert accel command + * @param [in] convert_brake_cmd flag to convert brake command + * @param [in] convert_steer_cmd flag to convert steer command + * @param [in] accel_map_path path to csv file for accel conversion map + * @param [in] brake_map_path path to csv file for brake conversion map + * @param [in] steer_map_path path to csv file for steer conversion map + */ + SimModelActuationCmd( + double vx_lim, double steer_lim, double vx_rate_lim, double steer_rate_lim, double wheelbase, + double dt, double accel_delay, double accel_time_constant, double brake_delay, + double brake_time_constant, double steer_delay, double steer_time_constant, double steer_bias, + bool convert_accel_cmd, bool convert_brake_cmd, bool convert_steer_cmd, + std::string accel_map_path, std::string brake_map_path, std::string steer_map_path); + + /** + * @brief default destructor + */ + ~SimModelActuationCmd() = default; + + ActuationMap accel_map_; + ActuationMap brake_map_; + ActuationMap steer_map_; + + bool convert_accel_cmd_; + bool convert_brake_cmd_; + bool convert_steer_cmd_; + +private: + const double MIN_TIME_CONSTANT; //!< @brief minimum time constant + + enum IDX { + X = 0, + Y, + YAW, + VX, + STEER, + ACCX, + }; + enum IDX_U { + ACCEL_DES = 0, + BRAKE_DES, + SLOPE_ACCX, + STEER_DES, + GEAR, + }; + + const double vx_lim_; //!< @brief velocity limit [m/s] + const double vx_rate_lim_; //!< @brief acceleration limit [m/ss] + const double steer_lim_; //!< @brief steering limit [rad] + const double steer_rate_lim_; //!< @brief steering angular velocity limit [rad/s] + const double wheelbase_; //!< @brief vehicle wheelbase length [m] + + std::deque accel_input_queue_; //!< @brief buffer for accel command + std::deque brake_input_queue_; //!< @brief buffer for brake command + std::deque steer_input_queue_; //!< @brief buffer for steering command + const double accel_delay_; //!< @brief time delay for accel command [s] + const double accel_time_constant_; //!< @brief time constant for accel dynamics + const double brake_delay_; //!< @brief time delay for brake command [s] + const double brake_time_constant_; //!< @brief time constant for brake dynamics + const double steer_delay_; //!< @brief time delay for steering command [s] + const double steer_time_constant_; //!< @brief time constant for steering dynamics + const double steer_bias_; //!< @brief steering angle bias [rad] + const std::string path_; //!< @brief conversion map path + + /** + * @brief set queue buffer for input command + * @param [in] dt delta time + */ + void initializeInputQueue(const double & dt); + + /** + * @brief get vehicle position x + */ + double getX() override; + + /** + * @brief get vehicle position y + */ + double getY() override; + + /** + * @brief get vehicle angle yaw + */ + double getYaw() override; + + /** + * @brief get vehicle velocity vx + */ + double getVx() override; + + /** + * @brief get vehicle lateral velocity + */ + double getVy() override; + + /** + * @brief get vehicle longitudinal acceleration + */ + double getAx() override; + + /** + * @brief get vehicle angular-velocity wz + */ + double getWz() override; + + /** + * @brief get vehicle steering angle + */ + double getSteer() override; + + /** + * @brief update vehicle states + * @param [in] dt delta time [s] + */ + void update(const double & dt) override; + + /** + * @brief calculate derivative of states with time delay steering model + * @param [in] state current model state + * @param [in] input input vector to model + */ + Eigen::VectorXd calcModel(const Eigen::VectorXd & state, const Eigen::VectorXd & input) override; + + /** + * @brief update state considering current gear + * @param [in] state current state + * @param [in] prev_state previous state + * @param [in] gear current gear (defined in autoware_msgs/GearCommand) + * @param [in] dt delta time to update state + */ + void updateStateWithGear( + Eigen::VectorXd & state, const Eigen::VectorXd & prev_state, const uint8_t gear, + const double dt); +}; + +#endif // SIMPLE_PLANNING_SIMULATOR__VEHICLE_MODEL__SIM_MODEL_ACTUATION_CMD_HPP_ diff --git a/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_delay_steer_map_acc_geared.hpp b/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_delay_steer_map_acc_geared.hpp index b83a831341ac1..ea0653c879727 100644 --- a/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_delay_steer_map_acc_geared.hpp +++ b/simulator/simple_planning_simulator/include/simple_planning_simulator/vehicle_model/sim_model_delay_steer_map_acc_geared.hpp @@ -53,7 +53,7 @@ class AccelerationMap double getAcceleration(const double acc_des, const double vel) const { std::vector interpolated_acc_vec; - const double clamped_vel = CSVLoader::clampValue(vel, vel_index_, "acc: vel"); + const double clamped_vel = CSVLoader::clampValue(vel, vel_index_); // (throttle, vel, acc) map => (throttle, acc) map by fixing vel for (const auto & acc_vec : acceleration_map_) { @@ -62,7 +62,7 @@ class AccelerationMap // calculate throttle // When the desired acceleration is smaller than the throttle area, return min acc // When the desired acceleration is greater than the throttle area, return max acc - const double clamped_acc = CSVLoader::clampValue(acc_des, acc_index_, "acceleration: acc"); + const double clamped_acc = CSVLoader::clampValue(acc_des, acc_index_); const double acc = interpolation::lerp(acc_index_, interpolated_acc_vec, clamped_acc); return acc; diff --git a/simulator/simple_planning_simulator/launch/simple_planning_simulator.launch.py b/simulator/simple_planning_simulator/launch/simple_planning_simulator.launch.py index fd01f42928947..afdbeb120e2d3 100644 --- a/simulator/simple_planning_simulator/launch/simple_planning_simulator.launch.py +++ b/simulator/simple_planning_simulator/launch/simple_planning_simulator.launch.py @@ -14,11 +14,13 @@ import launch from launch.actions import DeclareLaunchArgument +from launch.actions import IncludeLaunchDescription from launch.actions import OpaqueFunction from launch.substitutions import LaunchConfiguration from launch_ros.actions import Node import launch_ros.parameter_descriptions from launch_ros.substitutions import FindPackageShare +from launch_xml.launch_description_sources import XMLLaunchDescriptionSource import yaml @@ -57,6 +59,7 @@ def launch_setup(context, *args, **kwargs): ("input/vector_map", "/map/vector_map"), ("input/initialpose", "/initialpose3d"), ("input/ackermann_control_command", "/control/command/control_cmd"), + ("input/actuation_command", "/control/command/actuation_cmd"), ("input/manual_ackermann_control_command", "/vehicle/command/manual_control_cmd"), ("input/gear_command", "/control/command/gear_cmd"), ("input/manual_gear_command", "/vehicle/command/manual_gear_command"), @@ -77,7 +80,35 @@ def launch_setup(context, *args, **kwargs): ], ) - return [simple_planning_simulator_node] + # Determine if we should launch raw_vehicle_cmd_converter based on the vehicle_model_type + with open(simulator_model_param_path, "r") as f: + simulator_model_param_yaml = yaml.safe_load(f) + launch_vehicle_cmd_converter = ( + simulator_model_param_yaml["/**"]["ros__parameters"].get("vehicle_model_type") + == "ACTUATION_CMD" + ) + + # launch_vehicle_cmd_converter = False # tmp + + # 1) Launch only simple_planning_simulator_node + if not launch_vehicle_cmd_converter: + return [simple_planning_simulator_node] + # 2) Launch raw_vehicle_cmd_converter too + # vehicle_launch_pkg = LaunchConfiguration("vehicle_model").perform(context) + "_launch" + raw_vehicle_converter_node = IncludeLaunchDescription( + XMLLaunchDescriptionSource( + [ + FindPackageShare("autoware_raw_vehicle_cmd_converter"), + "/launch/raw_vehicle_converter.launch.xml", + ] + ), + launch_arguments={ + "config_file": LaunchConfiguration("raw_vehicle_cmd_converter_param_path").perform( + context + ), + }.items(), + ) + return [simple_planning_simulator_node, raw_vehicle_converter_node] def generate_launch_description(): @@ -123,4 +154,24 @@ def add_launch_arg(name: str, default_value=None, description=None): ], ) + # If you use the simulator of the actuation_cmd, you need to start the raw_vehicle_cmd_converter, and the following are optional parameters. + # Please specify the parameter for that. + # The default is the one from autoware_raw_vehicle_cmd_converter, but if you want to use a specific vehicle, please specify the one from {vehicle_model}_launch. + add_launch_arg( + "raw_vehicle_cmd_converter_param_path", + [ + FindPackageShare("autoware_raw_vehicle_cmd_converter"), + "/config/raw_vehicle_cmd_converter.param.yaml", + ], + ) + # NOTE: This is an argument that is not defined in the universe. + # If you use `{vehicle_model}_launch`, you may need to pass `csv_accel_brake_map_path`. + add_launch_arg( + "csv_accel_brake_map_path", + [ + FindPackageShare("autoware_raw_vehicle_cmd_converter"), + "/data/default", + ], + ) + return launch.LaunchDescription(launch_arguments + [OpaqueFunction(function=launch_setup)]) diff --git a/simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp b/simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp index 71771feaf78e7..3095e060a71bf 100644 --- a/simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp +++ b/simulator/simple_planning_simulator/src/simple_planning_simulator/simple_planning_simulator_core.cpp @@ -115,9 +115,6 @@ SimplePlanningSimulator::SimplePlanningSimulator(const rclcpp::NodeOptions & opt "input/initialpose", QoS{1}, std::bind(&SimplePlanningSimulator::on_initialpose, this, _1)); sub_init_twist_ = create_subscription( "input/initialtwist", QoS{1}, std::bind(&SimplePlanningSimulator::on_initialtwist, this, _1)); - sub_ackermann_cmd_ = create_subscription( - "input/ackermann_control_command", QoS{1}, - [this](const Control::ConstSharedPtr msg) { current_ackermann_cmd_ = *msg; }); sub_manual_ackermann_cmd_ = create_subscription( "input/manual_ackermann_control_command", QoS{1}, [this](const Control::ConstSharedPtr msg) { current_manual_ackermann_cmd_ = *msg; }); @@ -144,6 +141,23 @@ SimplePlanningSimulator::SimplePlanningSimulator(const rclcpp::NodeOptions & opt sub_engage_ = create_subscription( "input/engage", rclcpp::QoS{1}, std::bind(&SimplePlanningSimulator::on_engage, this, _1)); + // Determine input command type based on vehicle_model_type + // NOTE: + // Initial value must be set to current_input_command_ with the correct type. + // If not, the vehicle_model will not be updated, and it will die when publishing the state. + const auto vehicle_model_type_str = declare_parameter("vehicle_model_type", "IDEAL_STEER_VEL"); + if (vehicle_model_type_str == "ACTUATION_CMD") { + current_input_command_ = ActuationCommandStamped(); + sub_actuation_cmd_ = create_subscription( + "input/actuation_command", QoS{1}, + [this](const ActuationCommandStamped::ConstSharedPtr msg) { current_input_command_ = *msg; }); + } else { // default command type is ACKERMANN + current_input_command_ = Control(); + sub_ackermann_cmd_ = create_subscription( + "input/ackermann_control_command", QoS{1}, + [this](const Control::ConstSharedPtr msg) { current_input_command_ = *msg; }); + } + pub_control_mode_report_ = create_publisher("output/control_mode_report", QoS{1}); pub_gear_report_ = create_publisher("output/gear_report", QoS{1}); @@ -175,7 +189,7 @@ SimplePlanningSimulator::SimplePlanningSimulator(const rclcpp::NodeOptions & opt rmw_qos_profile_services_default, group_api_service_); // set vehicle model type - initialize_vehicle_model(); + initialize_vehicle_model(vehicle_model_type_str); // set initialize source const auto initialize_source = declare_parameter("initialize_source", "INITIAL_POSE_TOPIC"); @@ -211,12 +225,8 @@ SimplePlanningSimulator::SimplePlanningSimulator(const rclcpp::NodeOptions & opt current_manual_gear_cmd_.command = GearCommand::PARK; } -void SimplePlanningSimulator::initialize_vehicle_model() +void SimplePlanningSimulator::initialize_vehicle_model(const std::string & vehicle_model_type_str) { - const auto vehicle_model_type_str = declare_parameter("vehicle_model_type", "IDEAL_STEER_VEL"); - - RCLCPP_DEBUG(this->get_logger(), "vehicle_model_type = %s", vehicle_model_type_str.c_str()); - const double vel_lim = declare_parameter("vel_lim", 50.0); const double vel_rate_lim = declare_parameter("vel_rate_lim", 7.0); const double steer_lim = declare_parameter("steer_lim", 1.0); @@ -296,7 +306,30 @@ void SimplePlanningSimulator::initialize_vehicle_model() vehicle_model_ptr_ = std::make_shared( timer_sampling_time_ms_ / 1000.0, model_module_paths, model_param_paths, model_class_names); - + } else if (vehicle_model_type_str == "ACTUATION_CMD") { + vehicle_model_type_ = VehicleModelType::ACTUATION_CMD; + + // time delay + const double accel_time_delay = declare_parameter("accel_time_delay"); + const double accel_time_constant = declare_parameter("accel_time_constant"); + const double brake_time_delay = declare_parameter("brake_time_delay"); + const double brake_time_constant = declare_parameter("brake_time_constant"); + + // command conversion flag + const bool convert_accel_cmd = declare_parameter("convert_accel_cmd"); + const bool convert_brake_cmd = declare_parameter("convert_brake_cmd"); + const bool convert_steer_cmd = declare_parameter("convert_steer_cmd"); + + // actuation conversion map + const std::string accel_map_path = declare_parameter("accel_map_path"); + const std::string brake_map_path = declare_parameter("brake_map_path"); + const std::string steer_map_path = declare_parameter("steer_map_path"); + + vehicle_model_ptr_ = std::make_shared( + vel_lim, steer_lim, vel_rate_lim, steer_rate_lim, wheelbase, timer_sampling_time_ms_ / 1000.0, + accel_time_delay, accel_time_constant, brake_time_delay, brake_time_constant, + steer_time_delay, steer_time_constant, steer_bias, convert_accel_cmd, convert_brake_cmd, + convert_steer_cmd, accel_map_path, brake_map_path, steer_map_path); } else { throw std::invalid_argument("Invalid vehicle_model_type: " + vehicle_model_type_str); } @@ -378,7 +411,7 @@ void SimplePlanningSimulator::on_timer() if (current_control_mode_.mode == ControlModeReport::AUTONOMOUS) { vehicle_model_ptr_->setGear(current_gear_cmd_.command); - set_input(current_ackermann_cmd_, acc_by_slope); + set_input(current_input_command_, acc_by_slope); } else { vehicle_model_ptr_->setGear(current_manual_gear_cmd_.command); set_input(current_manual_ackermann_cmd_, acc_by_slope); @@ -473,6 +506,37 @@ void SimplePlanningSimulator::on_set_pose( response->status = tier4_api_utils::response_success(); } +void SimplePlanningSimulator::set_input(const InputCommand & cmd, const double acc_by_slope) +{ + std::visit( + [this, acc_by_slope](auto && arg) { + using T = std::decay_t; + if constexpr (std::is_same_v) { + set_input(arg, acc_by_slope); + } else if constexpr (std::is_same_v) { + set_input(arg, acc_by_slope); + } else { + throw std::invalid_argument("Invalid input command type"); + } + }, + cmd); +} + +void SimplePlanningSimulator::set_input( + const ActuationCommandStamped & cmd, const double acc_by_slope) +{ + const auto accel = cmd.actuation.accel_cmd; + const auto brake = cmd.actuation.brake_cmd; + const auto steer = cmd.actuation.steer_cmd; + const auto gear = vehicle_model_ptr_->getGear(); + + Eigen::VectorXd input(vehicle_model_ptr_->getDimU()); + input << accel, brake, acc_by_slope, steer, gear; + + // VehicleModelType::ACTUATION_COMMAND + vehicle_model_ptr_->setInput(input); +} + void SimplePlanningSimulator::set_input(const Control & cmd, const double acc_by_slope) { const auto steer = cmd.lateral.steering_tire_angle; @@ -612,7 +676,8 @@ void SimplePlanningSimulator::set_initial_state(const Pose & pose, const Twist & vehicle_model_type_ == VehicleModelType::DELAY_STEER_ACC || vehicle_model_type_ == VehicleModelType::DELAY_STEER_ACC_GEARED || vehicle_model_type_ == VehicleModelType::DELAY_STEER_ACC_GEARED_WO_FALL_GUARD || - vehicle_model_type_ == VehicleModelType::DELAY_STEER_MAP_ACC_GEARED) { + vehicle_model_type_ == VehicleModelType::DELAY_STEER_MAP_ACC_GEARED || + vehicle_model_type_ == VehicleModelType::ACTUATION_CMD) { state << x, y, yaw, vx, steer, accx; } vehicle_model_ptr_->setState(state); diff --git a/simulator/simple_planning_simulator/src/simple_planning_simulator/utils/csv_loader.cpp b/simulator/simple_planning_simulator/src/simple_planning_simulator/utils/csv_loader.cpp index c9eb7a5a237fb..1189477a4f45b 100644 --- a/simulator/simple_planning_simulator/src/simple_planning_simulator/utils/csv_loader.cpp +++ b/simulator/simple_planning_simulator/src/simple_planning_simulator/utils/csv_loader.cpp @@ -26,6 +26,8 @@ CSVLoader::CSVLoader(const std::string & csv_path) bool CSVLoader::readCSV(Table & result, const char delim) { + // NOTE: Table[i][j] represents the element in the i-th row and j-th column + std::ifstream ifs(csv_path_); if (!ifs.is_open()) { std::cerr << "Cannot open " << csv_path_.c_str() << std::endl; @@ -119,6 +121,8 @@ Map CSVLoader::getMap(const Table & table) std::vector CSVLoader::getRowIndex(const Table & table) { + // NOTE: table[0][i] represents the element in the 0-th row and i-th column + // This means that we are getting the index of each column in the 0-th row std::vector index = {}; for (size_t i = 1; i < table[0].size(); i++) { index.push_back(std::stod(table[0][i])); @@ -128,6 +132,8 @@ std::vector CSVLoader::getRowIndex(const Table & table) std::vector CSVLoader::getColumnIndex(const Table & table) { + // NOTE: table[i][0] represents the element in the i-th row and 0-th column + // This means that we are getting the index of each row in the 0-th column std::vector index = {}; for (size_t i = 1; i < table.size(); i++) { index.push_back(std::stod(table[i][0])); @@ -135,15 +141,11 @@ std::vector CSVLoader::getColumnIndex(const Table & table) return index; } -double CSVLoader::clampValue( - const double val, const std::vector & ranges, const std::string & name) +double CSVLoader::clampValue(const double val, const std::vector & ranges) { const double max_value = *std::max_element(ranges.begin(), ranges.end()); const double min_value = *std::min_element(ranges.begin(), ranges.end()); if (val < min_value || max_value < val) { - std::cerr << "Input " << name << ": " << val - << " is out of range. use closest value. Please update the conversion map" - << std::endl; return std::min(std::max(val, min_value), max_value); } return val; diff --git a/simulator/simple_planning_simulator/src/simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.cpp b/simulator/simple_planning_simulator/src/simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.cpp new file mode 100644 index 0000000000000..16eb6e86d778c --- /dev/null +++ b/simulator/simple_planning_simulator/src/simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.cpp @@ -0,0 +1,259 @@ +// Copyright 2024 The Autoware Foundation. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "simple_planning_simulator/vehicle_model/sim_model_actuation_cmd.hpp" + +#include "autoware_vehicle_msgs/msg/gear_command.hpp" + +#include + +bool ActuationMap::readActuationMapFromCSV(const std::string & csv_path, const bool validation) +{ + CSVLoader csv(csv_path); + std::vector> table; + + if (!csv.readCSV(table)) { + return false; + } + + state_index_ = CSVLoader::getRowIndex(table); + actuation_index_ = CSVLoader::getColumnIndex(table); + actuation_map_ = CSVLoader::getMap(table); + if (validation && !CSVLoader::validateMap(actuation_map_, true)) { + return false; + } + return true; +} + +double ActuationMap::getControlCommand(const double actuation, const double state) const +{ + std::vector interpolated_control_vec{}; + const double clamped_state = CSVLoader::clampValue(state, state_index_); + + for (std::vector control_command_values : actuation_map_) { + interpolated_control_vec.push_back( + interpolation::lerp(state_index_, control_command_values, clamped_state)); + } + + const double clamped_actuation = CSVLoader::clampValue(actuation, actuation_index_); + return interpolation::lerp(actuation_index_, interpolated_control_vec, clamped_actuation); +} + +SimModelActuationCmd::SimModelActuationCmd( + double vx_lim, double steer_lim, double vx_rate_lim, double steer_rate_lim, double wheelbase, + double dt, double accel_delay, double accel_time_constant, double brake_delay, + double brake_time_constant, double steer_delay, double steer_time_constant, double steer_bias, + bool convert_accel_cmd, bool convert_brake_cmd, bool convert_steer_cmd, + std::string accel_map_path, std::string brake_map_path, std::string steer_map_path) +: SimModelInterface(6 /* dim x */, 5 /* dim u */), + MIN_TIME_CONSTANT(0.03), + vx_lim_(vx_lim), + vx_rate_lim_(vx_rate_lim), + steer_lim_(steer_lim), + steer_rate_lim_(steer_rate_lim), + wheelbase_(wheelbase), + accel_delay_(accel_delay), + accel_time_constant_(std::max(accel_time_constant, MIN_TIME_CONSTANT)), + brake_delay_(brake_delay), + brake_time_constant_(std::max(brake_time_constant, MIN_TIME_CONSTANT)), + steer_delay_(steer_delay), + steer_time_constant_(std::max(steer_time_constant, MIN_TIME_CONSTANT)), + steer_bias_(steer_bias) +{ + initializeInputQueue(dt); + convert_accel_cmd_ = convert_accel_cmd && accel_map_.readActuationMapFromCSV(accel_map_path); + convert_brake_cmd_ = convert_brake_cmd && brake_map_.readActuationMapFromCSV(brake_map_path); + convert_steer_cmd_ = convert_steer_cmd && steer_map_.readActuationMapFromCSV(steer_map_path); +} + +double SimModelActuationCmd::getX() +{ + return state_(IDX::X); +} +double SimModelActuationCmd::getY() +{ + return state_(IDX::Y); +} +double SimModelActuationCmd::getYaw() +{ + return state_(IDX::YAW); +} +double SimModelActuationCmd::getVx() +{ + return state_(IDX::VX); +} +double SimModelActuationCmd::getVy() +{ + return 0.0; +} +double SimModelActuationCmd::getAx() +{ + return state_(IDX::ACCX); +} +double SimModelActuationCmd::getWz() +{ + return state_(IDX::VX) * std::tan(state_(IDX::STEER)) / wheelbase_; +} +double SimModelActuationCmd::getSteer() +{ + return state_(IDX::STEER) + steer_bias_; +} +void SimModelActuationCmd::update(const double & dt) +{ + Eigen::VectorXd delayed_input = Eigen::VectorXd::Zero(dim_u_); + + accel_input_queue_.push_back(input_(IDX_U::ACCEL_DES)); + delayed_input(IDX_U::ACCEL_DES) = accel_input_queue_.front(); + accel_input_queue_.pop_front(); + + brake_input_queue_.push_back(input_(IDX_U::BRAKE_DES)); + delayed_input(IDX_U::BRAKE_DES) = brake_input_queue_.front(); + brake_input_queue_.pop_front(); + + steer_input_queue_.push_back(input_(IDX_U::STEER_DES)); + delayed_input(IDX_U::STEER_DES) = steer_input_queue_.front(); + steer_input_queue_.pop_front(); + + delayed_input(IDX_U::GEAR) = input_(IDX_U::GEAR); + delayed_input(IDX_U::SLOPE_ACCX) = input_(IDX_U::SLOPE_ACCX); + + const auto prev_state = state_; + updateRungeKutta(dt, delayed_input); + + // take velocity limit explicitly + state_(IDX::VX) = std::max(-vx_lim_, std::min(state_(IDX::VX), vx_lim_)); + + // consider gear + // update position and velocity first, and then acceleration is calculated naturally + updateStateWithGear(state_, prev_state, gear_, dt); +} + +void SimModelActuationCmd::initializeInputQueue(const double & dt) +{ + const size_t accel_input_queue_size = static_cast(round(accel_delay_ / dt)); + accel_input_queue_.resize(accel_input_queue_size); + std::fill(accel_input_queue_.begin(), accel_input_queue_.end(), 0.0); + + const size_t brake_input_queue_size = static_cast(round(brake_delay_ / dt)); + brake_input_queue_.resize(brake_input_queue_size); + std::fill(brake_input_queue_.begin(), brake_input_queue_.end(), 0.0); + + const size_t steer_input_queue_size = static_cast(round(steer_delay_ / dt)); + steer_input_queue_.resize(steer_input_queue_size); + std::fill(steer_input_queue_.begin(), steer_input_queue_.end(), 0.0); +} + +Eigen::VectorXd SimModelActuationCmd::calcModel( + const Eigen::VectorXd & state, const Eigen::VectorXd & input) +{ + using autoware_vehicle_msgs::msg::GearCommand; + + const double vel = std::clamp(state(IDX::VX), -vx_lim_, vx_lim_); + const double yaw = state(IDX::YAW); + const double steer = state(IDX::STEER); + + const double accel = input(IDX_U::ACCEL_DES); + const double brake = input(IDX_U::BRAKE_DES); + const auto gear = input(IDX_U::GEAR); + + // 1) calculate acceleration by accel and brake command + const double acc_des = std::clamp( + std::invoke([&]() -> double { + // Select the non-zero value between accel and brake and calculate the acceleration + if (convert_accel_cmd_ && accel > 0.0) { + // convert accel command to acceleration + return accel_map_.getControlCommand(accel, vel); + } else if (convert_brake_cmd_ && brake > 0.0) { + // convert brake command to acceleration + return brake_map_.getControlCommand(brake, vel); + } else { + // if conversion is disabled, accel command is directly used as acceleration + return accel; + } + }), + -vx_rate_lim_, vx_rate_lim_); + // add slope acceleration considering the gear state + const double acc_by_slope = input(IDX_U::SLOPE_ACCX); + const double acc = std::invoke([&]() -> double { + if (gear == GearCommand::NONE || gear == GearCommand::PARK) { + return 0.0; + } else if (gear == GearCommand::REVERSE || gear == GearCommand::REVERSE_2) { + return -acc_des + acc_by_slope; + } + return acc_des + acc_by_slope; + }); + const double acc_time_constant = accel > 0.0 ? accel_time_constant_ : brake_time_constant_; + + // 2) calculate steering rate by steer command + const double steer_rate = std::clamp( + std::invoke([&]() -> double { + // if conversion is enabled, calculate steering rate from steer command + if (convert_steer_cmd_) { + // convert steer command to steer rate + return steer_map_.getControlCommand(input(IDX_U::STEER_DES), steer) / steer_time_constant_; + } + // otherwise, steer command is desired steering angle, so calculate steering rate from the + // difference between the desired steering angle and the current steering angle. + const double steer_des = std::clamp(input(IDX_U::STEER_DES), -steer_lim_, steer_lim_); + return -(getSteer() - steer_des) / steer_time_constant_; + }), + -steer_rate_lim_, steer_rate_lim_); + + Eigen::VectorXd d_state = Eigen::VectorXd::Zero(dim_x_); + d_state(IDX::X) = vel * cos(yaw); + d_state(IDX::Y) = vel * sin(yaw); + d_state(IDX::YAW) = vel * std::tan(steer) / wheelbase_; + d_state(IDX::VX) = acc; + d_state(IDX::STEER) = steer_rate; + d_state(IDX::ACCX) = -(acc - acc_des) / acc_time_constant; + + return d_state; +} + +void SimModelActuationCmd::updateStateWithGear( + Eigen::VectorXd & state, const Eigen::VectorXd & prev_state, const uint8_t gear, const double dt) +{ + using autoware_vehicle_msgs::msg::GearCommand; + if ( + gear == GearCommand::DRIVE || gear == GearCommand::DRIVE_2 || gear == GearCommand::DRIVE_3 || + gear == GearCommand::DRIVE_4 || gear == GearCommand::DRIVE_5 || gear == GearCommand::DRIVE_6 || + gear == GearCommand::DRIVE_7 || gear == GearCommand::DRIVE_8 || gear == GearCommand::DRIVE_9 || + gear == GearCommand::DRIVE_10 || gear == GearCommand::DRIVE_11 || + gear == GearCommand::DRIVE_12 || gear == GearCommand::DRIVE_13 || + gear == GearCommand::DRIVE_14 || gear == GearCommand::DRIVE_15 || + gear == GearCommand::DRIVE_16 || gear == GearCommand::DRIVE_17 || + gear == GearCommand::DRIVE_18 || gear == GearCommand::LOW || gear == GearCommand::LOW_2) { + if (state(IDX::VX) < 0.0) { + state(IDX::VX) = 0.0; + state(IDX::X) = prev_state(IDX::X); + state(IDX::Y) = prev_state(IDX::Y); + state(IDX::YAW) = prev_state(IDX::YAW); + state(IDX::ACCX) = (state(IDX::VX) - prev_state(IDX::VX)) / std::max(dt, 1.0e-5); + } + } else if (gear == GearCommand::REVERSE || gear == GearCommand::REVERSE_2) { + if (state(IDX::VX) > 0.0) { + state(IDX::VX) = 0.0; + state(IDX::X) = prev_state(IDX::X); + state(IDX::Y) = prev_state(IDX::Y); + state(IDX::YAW) = prev_state(IDX::YAW); + state(IDX::ACCX) = (state(IDX::VX) - prev_state(IDX::VX)) / std::max(dt, 1.0e-5); + } + } else { // including 'gear == GearCommand::PARK' + state(IDX::VX) = 0.0; + state(IDX::X) = prev_state(IDX::X); + state(IDX::Y) = prev_state(IDX::Y); + state(IDX::YAW) = prev_state(IDX::YAW); + state(IDX::ACCX) = (state(IDX::VX) - prev_state(IDX::VX)) / std::max(dt, 1.0e-5); + } +} diff --git a/simulator/simple_planning_simulator/test/actuation_cmd_map/accel_map.csv b/simulator/simple_planning_simulator/test/actuation_cmd_map/accel_map.csv new file mode 100644 index 0000000000000..8b83ecf68d628 --- /dev/null +++ b/simulator/simple_planning_simulator/test/actuation_cmd_map/accel_map.csv @@ -0,0 +1,6 @@ +default,0.0,13.89 +0, 3.0, 2.9 +0.3, 4.0, 3.9 +0.5, 5.0, 4.9 +0.7, 8.0, 7.9 +1.0, 10.0, 9.9 diff --git a/simulator/simple_planning_simulator/test/actuation_cmd_map/brake_map.csv b/simulator/simple_planning_simulator/test/actuation_cmd_map/brake_map.csv new file mode 100644 index 0000000000000..adf2c80950bb1 --- /dev/null +++ b/simulator/simple_planning_simulator/test/actuation_cmd_map/brake_map.csv @@ -0,0 +1,10 @@ +default,0.0, 1.39, 2.78, 4.17, 5.56, 6.94, 8.33, 9.72, 11.11, 12.50, 13.89 +0,0.3,-0.05,-0.3,-0.39,-0.4,-0.41,-0.42,-0.44,-0.46,-0.48,-0.5 +0.1,0.29,-0.06,-0.31,-0.4,-0.41,-0.42,-0.43,-0.45,-0.47,-0.49,-0.51 +0.2,-0.38,-0.4,-0.72,-0.8,-0.82,-0.85,-0.87,-0.89,-0.91,-0.94,-0.96 +0.3,-1,-1.04,-1.48,-1.55,-1.57,-1.59,-1.61,-1.63,-1.631,-1.632,-1.633 +0.4,-1.48,-1.5,-1.85,-2.05,-2.1,-2.101,-2.102,-2.103,-2.104,-2.105,-2.106 +0.5,-1.49,-1.51,-1.86,-2.06,-2.11,-2.111,-2.112,-2.113,-2.114,-2.115,-2.116 +0.6,-1.5,-1.52,-1.87,-2.07,-2.12,-2.121,-2.122,-2.123,-2.124,-2.125,-2.126 +0.7,-1.51,-1.53,-1.88,-2.08,-2.13,-2.131,-2.132,-2.133,-2.134,-2.135,-2.136 +0.8,-2.18,-2.2,-2.7,-2.8,-2.9,-2.95,-2.951,-2.952,-2.953,-2.954,-2.955 diff --git a/simulator/simple_planning_simulator/test/actuation_cmd_map/steer_map.csv b/simulator/simple_planning_simulator/test/actuation_cmd_map/steer_map.csv new file mode 100644 index 0000000000000..7adb0f6a9e583 --- /dev/null +++ b/simulator/simple_planning_simulator/test/actuation_cmd_map/steer_map.csv @@ -0,0 +1,4 @@ +default,-0.6,0,0.6 +-10,-0.03,-0.03,-0.03 +0,0.0,0.0,0.0 +10,0.03,0.03,0.03 diff --git a/simulator/simple_planning_simulator/test/test_simple_planning_simulator.cpp b/simulator/simple_planning_simulator/test/test_simple_planning_simulator.cpp index c61237f83e5bd..73762150f8e1d 100644 --- a/simulator/simple_planning_simulator/test/test_simple_planning_simulator.cpp +++ b/simulator/simple_planning_simulator/test/test_simple_planning_simulator.cpp @@ -12,10 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "ament_index_cpp/get_package_share_directory.hpp" #include "gtest/gtest.h" #include "simple_planning_simulator/simple_planning_simulator_core.hpp" #include "tf2/utils.h" +#include "tier4_vehicle_msgs/msg/actuation_command_stamped.hpp" + #ifdef ROS_DISTRO_GALACTIC #include "tf2_geometry_msgs/tf2_geometry_msgs.h" #else @@ -28,7 +31,9 @@ using autoware_control_msgs::msg::Control; using autoware_vehicle_msgs::msg::GearCommand; using geometry_msgs::msg::PoseWithCovarianceStamped; using nav_msgs::msg::Odometry; +using tier4_vehicle_msgs::msg::ActuationCommandStamped; +using simulation::simple_planning_simulator::InputCommand; using simulation::simple_planning_simulator::SimplePlanningSimulator; std::string toStrInfo(const Odometry & o) @@ -42,6 +47,23 @@ std::string toStrInfo(const Odometry & o) return ss.str(); } +enum class CommandType { Ackermann, Actuation }; + +struct Ackermann +{ + double steer = 0.0; + double steer_rate = 0.0; + double vel = 0.0; + double acc = 0.0; + double jerk = 0.0; +}; +struct Actuation +{ + double steer = 0.0; + double accel = 0.0; + double brake = 0.0; +}; + class PubSubNode : public rclcpp::Node { public: @@ -52,6 +74,8 @@ class PubSubNode : public rclcpp::Node [this](const Odometry::ConstSharedPtr msg) { current_odom_ = msg; }); pub_ackermann_command_ = create_publisher("input/ackermann_control_command", rclcpp::QoS{1}); + pub_actuation_command_ = + create_publisher("input/actuation_command", rclcpp::QoS{1}); pub_initialpose_ = create_publisher("input/initialpose", rclcpp::QoS{1}); pub_gear_cmd_ = create_publisher("input/gear_command", rclcpp::QoS{1}); @@ -59,6 +83,7 @@ class PubSubNode : public rclcpp::Node rclcpp::Subscription::SharedPtr current_odom_sub_; rclcpp::Publisher::SharedPtr pub_ackermann_command_; + rclcpp::Publisher::SharedPtr pub_actuation_command_; rclcpp::Publisher::SharedPtr pub_gear_cmd_; rclcpp::Publisher::SharedPtr pub_initialpose_; @@ -74,19 +99,35 @@ class PubSubNode : public rclcpp::Node * @param [in] acc [m/s²] acceleration * @param [in] jerk [m/s3] jerk */ -Control cmdGen( - const builtin_interfaces::msg::Time & t, double steer, double steer_rate, double vel, double acc, - double jerk) +Control ackermannCmdGen(const builtin_interfaces::msg::Time & t, const Ackermann & ackermann_cmd) { Control cmd; cmd.stamp = t; cmd.lateral.stamp = t; - cmd.lateral.steering_tire_angle = steer; - cmd.lateral.steering_tire_rotation_rate = steer_rate; + cmd.lateral.steering_tire_angle = ackermann_cmd.steer; + cmd.lateral.steering_tire_rotation_rate = ackermann_cmd.steer_rate; cmd.longitudinal.stamp = t; - cmd.longitudinal.velocity = vel; - cmd.longitudinal.acceleration = acc; - cmd.longitudinal.jerk = jerk; + cmd.longitudinal.velocity = ackermann_cmd.vel; + cmd.longitudinal.acceleration = ackermann_cmd.acc; + cmd.longitudinal.jerk = ackermann_cmd.jerk; + return cmd; +} + +/** + * @brief Generate an ActuationCommandStamped message + * @param [in] t timestamp + * @param [in] accel_cmd accel actuation command + * @param [in] brake_cmd brake actuation command + * @param [in] steer_cmd steer actuation command + */ +ActuationCommandStamped actuationCmdGen( + const builtin_interfaces::msg::Time & t, const Actuation & actuation_cmd) +{ + ActuationCommandStamped cmd; + cmd.header.stamp = t; + cmd.actuation.accel_cmd = actuation_cmd.accel; + cmd.actuation.brake_cmd = actuation_cmd.brake; + cmd.actuation.steer_cmd = actuation_cmd.steer; return cmd; } @@ -120,14 +161,17 @@ void sendGear( /** * @brief publish the given command message - * @param [in] cmd command to publish + * @param [in] cmd_orig command to publish * @param [in] sim_node pointer to the simulation node * @param [in] pub_sub_node pointer to the node used for communication */ -void sendCommand( - const Control & cmd, rclcpp::Node::SharedPtr sim_node, std::shared_ptr pub_sub_node) +void sendAckermannCommand( + const Control & cmd_orig, rclcpp::Node::SharedPtr sim_node, + std::shared_ptr pub_sub_node) { + auto cmd = cmd_orig; for (int i = 0; i < 150; ++i) { + cmd.stamp = sim_node->now(); pub_sub_node->pub_ackermann_command_->publish(cmd); rclcpp::spin_some(sim_node); rclcpp::spin_some(pub_sub_node); @@ -135,6 +179,34 @@ void sendCommand( } } +void sendActuationCommand( + const ActuationCommandStamped & cmd_orig, rclcpp::Node::SharedPtr sim_node, + std::shared_ptr pub_sub_node) +{ + auto cmd = cmd_orig; + for (int i = 0; i < 150; ++i) { + cmd.header.stamp = sim_node->now(); + pub_sub_node->pub_actuation_command_->publish(cmd); + rclcpp::spin_some(sim_node); + rclcpp::spin_some(pub_sub_node); + std::this_thread::sleep_for(std::chrono::milliseconds{10LL}); + } +} + +void sendCommand( + const CommandType & cmd_type, rclcpp::Node::SharedPtr sim_node, + std::shared_ptr pub_sub_node, const builtin_interfaces::msg::Time & t, + const Ackermann & ackermann_cmd, const Actuation & actuation_cmd) +{ + if (cmd_type == CommandType::Ackermann) { + sendAckermannCommand(ackermannCmdGen(t, ackermann_cmd), sim_node, pub_sub_node); + } else if (cmd_type == CommandType::Actuation) { + sendActuationCommand(actuationCmdGen(t, actuation_cmd), sim_node, pub_sub_node); + } else { + throw std::invalid_argument("command type is unexpected."); + } +} + // Check which direction the vehicle is heading on the baselink coordinates. // y // | @@ -195,7 +267,8 @@ void declareVehicleInfoParams(rclcpp::NodeOptions & node_options) // Send a control command and run the simulation. // Then check if the vehicle is moving in the desired direction. -class TestSimplePlanningSimulator : public ::testing::TestWithParam +class TestSimplePlanningSimulator +: public ::testing::TestWithParam> { }; @@ -203,7 +276,9 @@ TEST_P(TestSimplePlanningSimulator, TestIdealSteerVel) { rclcpp::init(0, nullptr); - const auto vehicle_model_type = GetParam(); + const auto params = GetParam(); + const auto command_type = std::get<0>(params); + const auto vehicle_model_type = std::get<1>(params); std::cout << "\n\n vehicle model = " << vehicle_model_type << std::endl << std::endl; rclcpp::NodeOptions node_options; @@ -211,6 +286,21 @@ TEST_P(TestSimplePlanningSimulator, TestIdealSteerVel) node_options.append_parameter_override("vehicle_model_type", vehicle_model_type); node_options.append_parameter_override("initial_engage_state", true); node_options.append_parameter_override("add_measurement_noise", false); + node_options.append_parameter_override("accel_time_delay", 0.2); + node_options.append_parameter_override("accel_time_constant", 0.2); + node_options.append_parameter_override("brake_time_delay", 0.2); + node_options.append_parameter_override("brake_time_constant", 0.2); + node_options.append_parameter_override("convert_accel_cmd", true); + node_options.append_parameter_override("convert_brake_cmd", true); + node_options.append_parameter_override("convert_steer_cmd", true); + const auto share_dir = ament_index_cpp::get_package_share_directory("simple_planning_simulator"); + const auto accel_map_path = share_dir + "/test/actuation_cmd_map/accel_map.csv"; + const auto brake_map_path = share_dir + "/test/actuation_cmd_map/brake_map.csv"; + const auto steer_map_path = share_dir + "/test/actuation_cmd_map/steer_map.csv"; + node_options.append_parameter_override("accel_map_path", accel_map_path); + node_options.append_parameter_override("brake_map_path", brake_map_path); + node_options.append_parameter_override("steer_map_path", steer_map_path); + declareVehicleInfoParams(node_options); const auto sim_node = std::make_shared(node_options); @@ -220,15 +310,31 @@ TEST_P(TestSimplePlanningSimulator, TestIdealSteerVel) const double target_acc = 5.0f; const double target_steer = 0.2f; + // NOTE: As the value of the actuation map is known, roughly determine whether it is + // acceleration or braking, and whether it turns left or right, and generate an actuation + // command. So do not change the map. If it is necessary, you need to change this parameters as + // well. + const double target_steer_actuation = 10.0f; + const double target_accel_actuation = 0.5f; + // const double target_brake_actuation = 0.5f; // unused for now. + auto _resetInitialpose = [&]() { resetInitialpose(sim_node, pub_sub_node); }; auto _sendFwdGear = [&]() { sendGear(GearCommand::DRIVE, sim_node, pub_sub_node); }; auto _sendBwdGear = [&]() { sendGear(GearCommand::REVERSE, sim_node, pub_sub_node); }; - auto _sendCommand = [&](const auto & _cmd) { sendCommand(_cmd, sim_node, pub_sub_node); }; + auto _sendCommand = [&](auto ackermann_cmd, auto actuation_cmd) { + const auto t = sim_node->now(); + sendCommand(command_type, sim_node, pub_sub_node, t, ackermann_cmd, actuation_cmd); + }; // check pub-sub connections { size_t expected = 1; - EXPECT_EQ(pub_sub_node->pub_ackermann_command_->get_subscription_count(), expected); + // actuation or ackermann must be subscribed + const auto sub_command_count = + (command_type == CommandType::Actuation) + ? pub_sub_node->pub_actuation_command_->get_subscription_count() + : pub_sub_node->pub_ackermann_command_->get_subscription_count(); + EXPECT_EQ(sub_command_count, expected); EXPECT_EQ(pub_sub_node->pub_gear_cmd_->get_subscription_count(), expected); EXPECT_EQ(pub_sub_node->pub_initialpose_->get_subscription_count(), expected); EXPECT_EQ(pub_sub_node->current_odom_sub_->get_publisher_count(), expected); @@ -241,39 +347,50 @@ TEST_P(TestSimplePlanningSimulator, TestIdealSteerVel) // go forward _resetInitialpose(); _sendFwdGear(); - _sendCommand(cmdGen(sim_node->now(), 0.0f, 0.0f, target_vel, target_acc, 0.0f)); + _sendCommand( + Ackermann{0.0f, 0.0f, target_vel, target_acc, 0.0f}, + Actuation{0.0f, target_accel_actuation, 0.0f}); isOnForward(*(pub_sub_node->current_odom_), init_state); // go backward // NOTE: positive acceleration with reverse gear drives the vehicle backward. _resetInitialpose(); _sendBwdGear(); - _sendCommand(cmdGen(sim_node->now(), 0.0f, 0.0f, -target_vel, target_acc, 0.0f)); + _sendCommand( + Ackermann{0.0f, 0.0f, -target_vel, target_acc, 0.0f}, + Actuation{0.0f, target_accel_actuation, 0.0f}); isOnBackward(*(pub_sub_node->current_odom_), init_state); // go forward left _resetInitialpose(); _sendFwdGear(); - _sendCommand(cmdGen(sim_node->now(), target_steer, 0.0f, target_vel, target_acc, 0.0f)); + _sendCommand( + Ackermann{target_steer, 0.0f, target_vel, target_acc, 0.0f}, + Actuation{target_steer_actuation, target_accel_actuation, 0.0f}); isOnForwardLeft(*(pub_sub_node->current_odom_), init_state); // go backward right // NOTE: positive acceleration with reverse gear drives the vehicle backward. _resetInitialpose(); _sendBwdGear(); - _sendCommand(cmdGen(sim_node->now(), -target_steer, 0.0f, -target_vel, target_acc, 0.0f)); + _sendCommand( + Ackermann{-target_steer, 0.0f, -target_vel, target_acc, 0.0f}, + Actuation{-target_steer_actuation, target_accel_actuation, 0.0f}); isOnBackwardRight(*(pub_sub_node->current_odom_), init_state); rclcpp::shutdown(); } -// clang-format off -const std::string VEHICLE_MODEL_LIST[] = { // NOLINT - "IDEAL_STEER_VEL", "IDEAL_STEER_ACC", "IDEAL_STEER_ACC_GEARED", - "DELAY_STEER_VEL", "DELAY_STEER_ACC", "DELAY_STEER_ACC_GEARED", - "DELAY_STEER_ACC_GEARED_WO_FALL_GUARD" -}; -// clang-format on - INSTANTIATE_TEST_SUITE_P( - TestForEachVehicleModel, TestSimplePlanningSimulator, ::testing::ValuesIn(VEHICLE_MODEL_LIST)); + TestForEachVehicleModelTrue, TestSimplePlanningSimulator, + ::testing::Values( + /* Ackermann type */ + std::make_tuple(CommandType::Ackermann, "IDEAL_STEER_VEL"), + std::make_tuple(CommandType::Ackermann, "IDEAL_STEER_ACC"), + std::make_tuple(CommandType::Ackermann, "IDEAL_STEER_ACC_GEARED"), + std::make_tuple(CommandType::Ackermann, "DELAY_STEER_VEL"), + std::make_tuple(CommandType::Ackermann, "DELAY_STEER_ACC"), + std::make_tuple(CommandType::Ackermann, "DELAY_STEER_ACC_GEARED"), + std::make_tuple(CommandType::Ackermann, "DELAY_STEER_ACC_GEARED_WO_FALL_GUARD"), + /* Actuation type */ + std::make_tuple(CommandType::Actuation, "ACTUATION_CMD"))); From 57a8977ca5c431215859369401adbdcc969bff25 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:58:53 +0900 Subject: [PATCH 247/306] fix(autoware_operation_mode_transition_manager): fix funcArgNamesDifferent (#7997) fix: funcArgNamesDifferent_con-1 Signed-off-by: kobayu858 --- control/autoware_operation_mode_transition_manager/src/node.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/control/autoware_operation_mode_transition_manager/src/node.hpp b/control/autoware_operation_mode_transition_manager/src/node.hpp index d69d79f9640d8..d9b8eaebc4ead 100644 --- a/control/autoware_operation_mode_transition_manager/src/node.hpp +++ b/control/autoware_operation_mode_transition_manager/src/node.hpp @@ -59,7 +59,7 @@ class OperationModeTransitionManager : public rclcpp::Node void onTimer(); void publishData(); void changeControlMode(ControlModeCommandType mode); - void changeOperationMode(std::optional mode); + void changeOperationMode(std::optional request_mode); void cancelTransition(); void processTransition(); From b9f41c28d54a88249412bd5d864370db422f81bc Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:59:21 +0900 Subject: [PATCH 248/306] fix(autoware_static_centerline_generator): fix funcArgNamesDifferent (#8019) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- planning/autoware_static_centerline_generator/src/utils.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/planning/autoware_static_centerline_generator/src/utils.hpp b/planning/autoware_static_centerline_generator/src/utils.hpp index e7fd51b30e658..be60f6249e93f 100644 --- a/planning/autoware_static_centerline_generator/src/utils.hpp +++ b/planning/autoware_static_centerline_generator/src/utils.hpp @@ -39,8 +39,8 @@ geometry_msgs::msg::Pose get_center_pose( PathWithLaneId get_path_with_lane_id( const RouteHandler & route_handler, const lanelet::ConstLanelets lanelets, - const geometry_msgs::msg::Pose & start_pose, const double nearest_ego_dist_threshold, - const double nearest_ego_yaw_threshold); + const geometry_msgs::msg::Pose & start_pose, const double ego_nearest_dist_threshold, + const double ego_nearest_yaw_threshold); void update_centerline( lanelet::LaneletMapPtr lanelet_map_ptr, const lanelet::ConstLanelets & lanelets, From 500aa27d8bc7f6029ccb8e839434cc5194024aad Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 16:59:49 +0900 Subject: [PATCH 249/306] fix(pointcloud_preprocessor): fix constParameterReference (#8053) fix:constParameterReference Signed-off-by: kobayu858 --- .../concatenate_data/concatenate_and_time_sync_nodelet.cpp | 6 +++--- .../src/concatenate_data/concatenate_pointclouds.cpp | 6 +++--- .../src/time_synchronizer/time_synchronizer_nodelet.cpp | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index 62c41bd5252fa..65f9da28406d1 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -503,17 +503,17 @@ void PointCloudConcatenateDataSynchronizerComponent::convertToXYZIRCCloud( output_modifier.reserve(input_ptr->width); bool has_valid_intensity = - std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](const auto & field) { return field.name == "intensity" && field.datatype == sensor_msgs::msg::PointField::UINT8; }); bool has_valid_return_type = - std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](const auto & field) { return field.name == "return_type" && field.datatype == sensor_msgs::msg::PointField::UINT8; }); bool has_valid_channel = - std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](const auto & field) { return field.name == "channel" && field.datatype == sensor_msgs::msg::PointField::UINT16; }); diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp index a54ec123c154f..225c3bb6e60f7 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp @@ -338,17 +338,17 @@ void PointCloudConcatenationComponent::convertToXYZIRCCloud( output_modifier.reserve(input_ptr->width); bool has_valid_intensity = - std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](const auto & field) { return field.name == "intensity" && field.datatype == sensor_msgs::msg::PointField::UINT8; }); bool has_valid_return_type = - std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](const auto & field) { return field.name == "return_type" && field.datatype == sensor_msgs::msg::PointField::UINT8; }); bool has_valid_channel = - std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](const auto & field) { return field.name == "channel" && field.datatype == sensor_msgs::msg::PointField::UINT16; }); diff --git a/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp b/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp index 7816e9d4b325a..11a5021191dc3 100644 --- a/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp @@ -441,17 +441,17 @@ void PointCloudDataSynchronizerComponent::convertToXYZIRCCloud( output_modifier.reserve(input_ptr->width); bool has_valid_intensity = - std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](const auto & field) { return field.name == "intensity" && field.datatype == sensor_msgs::msg::PointField::UINT8; }); bool has_valid_return_type = - std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](const auto & field) { return field.name == "return_type" && field.datatype == sensor_msgs::msg::PointField::UINT8; }); bool has_valid_channel = - std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](auto & field) { + std::any_of(input_ptr->fields.begin(), input_ptr->fields.end(), [](const auto & field) { return field.name == "channel" && field.datatype == sensor_msgs::msg::PointField::UINT16; }); From 3eaf97481edaa29143bf86327ac9ebaf4a96cbf1 Mon Sep 17 00:00:00 2001 From: Yukinari Hisaki <42021302+yhisaki@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:15:22 +0900 Subject: [PATCH 250/306] refactor(autoware_universe_utils): changed the API to be more intuitive and added documentation (#7443) * refactor(tier4_autoware_utils): Changed the API to be more intuitive and added documentation. Signed-off-by: Y.Hisaki * use raw shared ptr in PollingPolicy::NEWEST Signed-off-by: Y.Hisaki * update Signed-off-by: Y.Hisaki * fix Signed-off-by: Y.Hisaki * Update evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp Co-authored-by: danielsanchezaran Signed-off-by: Y.Hisaki --------- Signed-off-by: Y.Hisaki Co-authored-by: danielsanchezaran --- .../examples/example_polling_subscriber.cpp | 87 ++++++ .../universe_utils/ros/polling_subscriber.hpp | 275 ++++++++++++------ .../lane_departure_checker_node.hpp | 5 +- .../lane_departure_checker_node.cpp | 2 +- .../control_evaluator_node.hpp | 10 +- .../src/control_evaluator_node.cpp | 4 +- .../planning_evaluator_node.hpp | 10 +- .../src/planning_evaluator_node.cpp | 4 +- .../autoware/scenario_selector/node.hpp | 7 +- .../autoware/velocity_smoother/node.hpp | 3 +- .../autoware_velocity_smoother/src/node.cpp | 2 +- .../behavior_path_planner_node.hpp | 10 +- .../src/behavior_path_planner_node.cpp | 4 +- 13 files changed, 303 insertions(+), 120 deletions(-) create mode 100644 common/autoware_universe_utils/examples/example_polling_subscriber.cpp diff --git a/common/autoware_universe_utils/examples/example_polling_subscriber.cpp b/common/autoware_universe_utils/examples/example_polling_subscriber.cpp new file mode 100644 index 0000000000000..d078da6df43af --- /dev/null +++ b/common/autoware_universe_utils/examples/example_polling_subscriber.cpp @@ -0,0 +1,87 @@ +// Copyright 2024 TIER IV, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "autoware/universe_utils/ros/polling_subscriber.hpp" + +#include + +#include + +// PublisherNode class definition +class PublisherNode : public rclcpp::Node +{ +public: + PublisherNode() : Node("publisher_node") + { + publisher_ = this->create_publisher("topic", 10); + timer_ = this->create_wall_timer( + std::chrono::milliseconds(100), std::bind(&PublisherNode::publish_message, this)); + } + +private: + void publish_message() + { + auto message = std_msgs::msg::String(); + message.data = "Hello from publisher node"; + publisher_->publish(message); + } + + rclcpp::Publisher::SharedPtr publisher_; + rclcpp::TimerBase::SharedPtr timer_; +}; + +// SubscriberNode class definition +class SubscriberNode : public rclcpp::Node +{ +public: + SubscriberNode() : Node("subscriber_node") + { + subscription_ = autoware::universe_utils::InterProcessPollingSubscriber< + std_msgs::msg::String>::create_subscription(this, "topic"); + + timer_ = this->create_wall_timer( + std::chrono::milliseconds(500), std::bind(&SubscriberNode::timer_callback, this)); + } + +private: + void timer_callback() const + { + auto msg = subscription_->takeData(); + if (msg) { + RCLCPP_INFO(this->get_logger(), "I heard: '%s'", msg->data.c_str()); + } + } + + autoware::universe_utils::InterProcessPollingSubscriber::SharedPtr + subscription_; + + rclcpp::TimerBase::SharedPtr timer_; +}; + +int main(int argc, char * argv[]) +{ + rclcpp::init(argc, argv); + + auto publisher_node = std::make_shared(); + auto subscriber_node = std::make_shared(); + + rclcpp::executors::MultiThreadedExecutor executor; + executor.add_node(publisher_node); + executor.add_node(subscriber_node); + + executor.spin(); + + rclcpp::shutdown(); + return 0; +} diff --git a/common/autoware_universe_utils/include/autoware/universe_utils/ros/polling_subscriber.hpp b/common/autoware_universe_utils/include/autoware/universe_utils/ros/polling_subscriber.hpp index 1b7ea0bd69951..682c6763196c7 100644 --- a/common/autoware_universe_utils/include/autoware/universe_utils/ros/polling_subscriber.hpp +++ b/common/autoware_universe_utils/include/autoware/universe_utils/ros/polling_subscriber.hpp @@ -11,7 +11,6 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. - #ifndef AUTOWARE__UNIVERSE_UTILS__ROS__POLLING_SUBSCRIBER_HPP_ #define AUTOWARE__UNIVERSE_UTILS__ROS__POLLING_SUBSCRIBER_HPP_ @@ -20,12 +19,15 @@ #include #include #include -#include #include namespace autoware::universe_utils { +/** + * @brief Creates a SensorDataQoS profile with a single depth. + * @return rclcpp::SensorDataQoS The QoS profile with depth set to 1. + */ inline rclcpp::SensorDataQoS SingleDepthSensorQoS() { rclcpp::SensorDataQoS qos; @@ -33,132 +35,219 @@ inline rclcpp::SensorDataQoS SingleDepthSensorQoS() return qos; } -template -class InterProcessPollingSubscriber; - -template -class InterProcessPollingSubscriber::type> +namespace polling_policy { -public: - using SharedPtr = - std::shared_ptr::type>>; - static SharedPtr create_subscription( - rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{1}) - { - return std::make_shared>(node, topic_name, qos); - } +/** + * @brief Polling policy that keeps the latest received message. + * + * This policy retains the latest received message and provides it when requested. If a new message + * is received, it overwrites the previously stored message. + * + * @tparam MessageT The message type. + */ +template +class Latest +{ private: - typename rclcpp::Subscription::SharedPtr subscriber_; - typename T::SharedPtr data_; - -public: - explicit InterProcessPollingSubscriber( - rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{1}) + typename MessageT::ConstSharedPtr data_{nullptr}; ///< Data pointer to store the latest data + +protected: + /** + * @brief Check the QoS settings for the subscription. + * + * @param qos The QoS profile to check. + * @throws std::invalid_argument If the QoS depth is not 1. + */ + void checkQoS(const rclcpp::QoS & qos) { - auto noexec_callback_group = - node->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive, false); - auto noexec_subscription_options = rclcpp::SubscriptionOptions(); - noexec_subscription_options.callback_group = noexec_callback_group; - - subscriber_ = node->create_subscription( - topic_name, qos, - [node]([[maybe_unused]] const typename T::ConstSharedPtr msg) { assert(false); }, - noexec_subscription_options); if (qos.get_rmw_qos_profile().depth > 1) { throw std::invalid_argument( "InterProcessPollingSubscriber will be used with depth > 1, which may cause inefficient " "serialization while updateLatestData()"); } - }; - /* - * @brief take and return the latest data from DDS queue if such data existed, otherwise return - * previous taken data("stale" data) - * @note if you want to ignore "stale" data, you should use takeNewData() - * instead - */ - typename T::ConstSharedPtr takeData() - { - auto new_data = std::make_shared(); - rclcpp::MessageInfo message_info; - const bool success = subscriber_->take(*new_data, message_info); - if (success) { - data_ = new_data; - } + } - return data_; - }; +public: + /** + * @brief Retrieve the latest data. If no new data has been received, the previously received data + * + * @return typename MessageT::ConstSharedPtr The latest data. + */ + typename MessageT::ConstSharedPtr takeData(); +}; - /* - * @brief take and return the latest data from DDS queue if such data existed, otherwise return - * nullptr instead - * @note this API allows you to avoid redundant computation on the taken data which is unchanged - * since the previous cycle +/** + * @brief Polling policy that keeps the newest received message. + * + * @tparam MessageT The message type. + */ +template +class Newest +{ +protected: + /** + * @brief Check the QoS settings for the subscription. + * + * @param qos The QoS profile to check. + * @throws std::invalid_argument If the QoS depth is not 1. */ - typename T::ConstSharedPtr takeNewData() + void checkQoS(const rclcpp::QoS & qos) { - auto new_data = std::make_shared(); - rclcpp::MessageInfo message_info; - const bool success = subscriber_->take(*new_data, message_info); - if (success) { - data_ = new_data; - return data_; - } else { - return nullptr; + if (qos.get_rmw_qos_profile().depth > 1) { + throw std::invalid_argument( + "InterProcessPollingSubscriber will be used with depth > 1, which may cause inefficient " + "serialization while updateLatestData()"); } } + +public: + /** + * @brief Retrieve the newest data. If no new data has been received, nullptr is returned. + * + * @return typename MessageT::ConstSharedPtr The newest data. + */ + typename MessageT::ConstSharedPtr takeData(); }; -template -class InterProcessPollingSubscriber= 2)>::type> +/** + * @brief Polling policy that keeps all received messages. + * + * @tparam MessageT The message type. + */ +template +class All { +protected: + /** + * @brief Check the QoS settings for the subscription. + * + * @param qos The QoS profile to check. + */ + void checkQoS(const rclcpp::QoS &) {} + public: - using SharedPtr = - std::shared_ptr= 2)>::type>>; - static SharedPtr create_subscription( - rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{N}) - { - return std::make_shared>(node, topic_name, qos); - } + /** + * @brief Retrieve all data. + * + * @return std::vector The list of all received data. + */ + std::vector takeData(); +}; + +} // namespace polling_policy + +/** + * @brief Subscriber class that uses a specified polling policy. + * + * @tparam MessageT The message type. + * @tparam PollingPolicy The polling policy to use. + */ +template class PollingPolicy = polling_policy::Latest> +class InterProcessPollingSubscriber : public PollingPolicy +{ + friend PollingPolicy; private: - typename rclcpp::Subscription::SharedPtr subscriber_; + typename rclcpp::Subscription::SharedPtr subscriber_; ///< Subscription object public: + using SharedPtr = std::shared_ptr>; + + /** + * @brief Construct a new InterProcessPollingSubscriber object. + * + * @param node The node to attach the subscriber to. + * @param topic_name The topic name to subscribe to. + * @param qos The QoS profile to use for the subscription. + */ explicit InterProcessPollingSubscriber( - rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{N}) + rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{1}) { + this->checkQoS(qos); + auto noexec_callback_group = node->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive, false); + auto noexec_subscription_options = rclcpp::SubscriptionOptions(); noexec_subscription_options.callback_group = noexec_callback_group; - subscriber_ = node->create_subscription( + subscriber_ = node->create_subscription( topic_name, qos, - [node]([[maybe_unused]] const typename T::ConstSharedPtr msg) { assert(false); }, + [node]([[maybe_unused]] const typename MessageT::ConstSharedPtr msg) { assert(false); }, noexec_subscription_options); - if (qos.get_rmw_qos_profile().depth < N) { - throw std::invalid_argument( - "InterProcessPollingSubscriber will be used with depth == " + std::to_string(N) + - ", which may cause inefficient serialization while updateLatestData()"); - } - }; - std::vector takeData() + } + + /** + * @brief Create a subscription. + * + * @param node The node to attach the subscriber to. + * @param topic_name The topic name to subscribe to. + * @param qos The QoS profile to use for the subscription. + * @return SharedPtr The created subscription. + */ + static SharedPtr create_subscription( + rclcpp::Node * node, const std::string & topic_name, const rclcpp::QoS & qos = rclcpp::QoS{1}) { - std::vector data; - rclcpp::MessageInfo message_info; - for (int i = 0; i < N; ++i) { - auto datum = std::make_shared(); - if (subscriber_->take(*datum, message_info)) { - data.push_back(datum); - } else { - break; - } - } - return data; - }; + return std::make_shared>( + node, topic_name, qos); + } + + typename rclcpp::Subscription::SharedPtr subscriber() { return subscriber_; } }; +namespace polling_policy +{ + +template +typename MessageT::ConstSharedPtr Latest::takeData() +{ + auto & subscriber = + static_cast *>(this)->subscriber_; + auto new_data = std::make_shared(); + rclcpp::MessageInfo message_info; + const bool success = subscriber->take(*new_data, message_info); + if (success) { + data_ = new_data; + } + + return data_; +} + +template +typename MessageT::ConstSharedPtr Newest::takeData() +{ + auto & subscriber = + static_cast *>(this)->subscriber_; + auto new_data = std::make_shared(); + rclcpp::MessageInfo message_info; + const bool success = subscriber->take(*new_data, message_info); + if (success) { + return new_data; + } + return nullptr; +} + +template +std::vector All::takeData() +{ + auto & subscriber = + static_cast *>(this)->subscriber_; + std::vector data; + rclcpp::MessageInfo message_info; + for (;;) { + auto datum = std::make_shared(); + if (subscriber->take(*datum, message_info)) { + data.push_back(datum); + } else { + break; + } + } + return data; +} + +} // namespace polling_policy + } // namespace autoware::universe_utils #endif // AUTOWARE__UNIVERSE_UTILS__ROS__POLLING_SUBSCRIBER_HPP_ diff --git a/control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/lane_departure_checker_node.hpp b/control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/lane_departure_checker_node.hpp index 876797a58df25..5364938102bf6 100644 --- a/control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/lane_departure_checker_node.hpp +++ b/control/autoware_lane_departure_checker/include/autoware/lane_departure_checker/lane_departure_checker_node.hpp @@ -69,8 +69,9 @@ class LaneDepartureCheckerNode : public rclcpp::Node // Subscriber autoware::universe_utils::InterProcessPollingSubscriber sub_odom_{ this, "~/input/odometry"}; - autoware::universe_utils::InterProcessPollingSubscriber sub_lanelet_map_bin_{ - this, "~/input/lanelet_map_bin", rclcpp::QoS{1}.transient_local()}; + autoware::universe_utils::InterProcessPollingSubscriber< + LaneletMapBin, autoware::universe_utils::polling_policy::Newest> + sub_lanelet_map_bin_{this, "~/input/lanelet_map_bin", rclcpp::QoS{1}.transient_local()}; autoware::universe_utils::InterProcessPollingSubscriber sub_route_{ this, "~/input/route"}; autoware::universe_utils::InterProcessPollingSubscriber sub_reference_trajectory_{ diff --git a/control/autoware_lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp b/control/autoware_lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp index 27b636f07d4ef..c079f014cfdee 100644 --- a/control/autoware_lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp +++ b/control/autoware_lane_departure_checker/src/lane_departure_checker_node/lane_departure_checker_node.cpp @@ -261,7 +261,7 @@ void LaneDepartureCheckerNode::onTimer() reference_trajectory_ = sub_reference_trajectory_.takeData(); predicted_trajectory_ = sub_predicted_trajectory_.takeData(); - const auto lanelet_map_bin_msg = sub_lanelet_map_bin_.takeNewData(); + const auto lanelet_map_bin_msg = sub_lanelet_map_bin_.takeData(); if (lanelet_map_bin_msg) { lanelet_map_ = std::make_shared(); lanelet::utils::conversion::fromBinMsg( diff --git a/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp b/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp index 614f1d66b9e0d..e2437e614d211 100644 --- a/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp +++ b/evaluator/autoware_control_evaluator/include/autoware/control_evaluator/control_evaluator_node.hpp @@ -79,10 +79,12 @@ class ControlEvaluatorNode : public rclcpp::Node this, "~/input/acceleration"}; autoware::universe_utils::InterProcessPollingSubscriber traj_sub_{ this, "~/input/trajectory"}; - autoware::universe_utils::InterProcessPollingSubscriber route_subscriber_{ - this, "~/input/route", rclcpp::QoS{1}.transient_local()}; - autoware::universe_utils::InterProcessPollingSubscriber vector_map_subscriber_{ - this, "~/input/vector_map", rclcpp::QoS{1}.transient_local()}; + autoware::universe_utils::InterProcessPollingSubscriber< + LaneletRoute, autoware::universe_utils::polling_policy::Newest> + route_subscriber_{this, "~/input/route", rclcpp::QoS{1}.transient_local()}; + autoware::universe_utils::InterProcessPollingSubscriber< + LaneletMapBin, autoware::universe_utils::polling_policy::Newest> + vector_map_subscriber_{this, "~/input/vector_map", rclcpp::QoS{1}.transient_local()}; rclcpp::Publisher::SharedPtr metrics_pub_; diff --git a/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp b/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp index 47706ed56cd7a..c14878a3c6f7e 100644 --- a/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp +++ b/evaluator/autoware_control_evaluator/src/control_evaluator_node.cpp @@ -47,7 +47,7 @@ void ControlEvaluatorNode::getRouteData() { // route { - const auto msg = route_subscriber_.takeNewData(); + const auto msg = route_subscriber_.takeData(); if (msg) { if (msg->segments.empty()) { RCLCPP_ERROR(get_logger(), "input route is empty. ignored"); @@ -59,7 +59,7 @@ void ControlEvaluatorNode::getRouteData() // map { - const auto msg = vector_map_subscriber_.takeNewData(); + const auto msg = vector_map_subscriber_.takeData(); if (msg) { route_handler_.setMap(*msg); } diff --git a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp index e15427c59ce06..05db3a261ce04 100644 --- a/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp +++ b/evaluator/autoware_planning_evaluator/include/autoware/planning_evaluator/planning_evaluator_node.hpp @@ -154,10 +154,12 @@ class PlanningEvaluatorNode : public rclcpp::Node this, "~/input/modified_goal"}; autoware::universe_utils::InterProcessPollingSubscriber odometry_sub_{ this, "~/input/odometry"}; - autoware::universe_utils::InterProcessPollingSubscriber route_subscriber_{ - this, "~/input/route", rclcpp::QoS{1}.transient_local()}; - autoware::universe_utils::InterProcessPollingSubscriber vector_map_subscriber_{ - this, "~/input/vector_map", rclcpp::QoS{1}.transient_local()}; + autoware::universe_utils::InterProcessPollingSubscriber< + LaneletRoute, autoware::universe_utils::polling_policy::Newest> + route_subscriber_{this, "~/input/route", rclcpp::QoS{1}.transient_local()}; + autoware::universe_utils::InterProcessPollingSubscriber< + LaneletMapBin, autoware::universe_utils::polling_policy::Newest> + vector_map_subscriber_{this, "~/input/vector_map", rclcpp::QoS{1}.transient_local()}; autoware::universe_utils::InterProcessPollingSubscriber accel_sub_{ this, "~/input/acceleration"}; diff --git a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp index e02367407f4ae..d378d55dd2a46 100644 --- a/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp +++ b/evaluator/autoware_planning_evaluator/src/planning_evaluator_node.cpp @@ -144,7 +144,7 @@ void PlanningEvaluatorNode::getRouteData() { // route { - const auto msg = route_subscriber_.takeNewData(); + const auto msg = route_subscriber_.takeData(); if (msg) { if (msg->segments.empty()) { RCLCPP_ERROR(get_logger(), "input route is empty. ignored"); @@ -156,7 +156,7 @@ void PlanningEvaluatorNode::getRouteData() // map { - const auto msg = vector_map_subscriber_.takeNewData(); + const auto msg = vector_map_subscriber_.takeData(); if (msg) { route_handler_.setMap(*msg); } diff --git a/planning/autoware_scenario_selector/include/autoware/scenario_selector/node.hpp b/planning/autoware_scenario_selector/include/autoware/scenario_selector/node.hpp index 557c0c871583d..0189bf554676b 100644 --- a/planning/autoware_scenario_selector/include/autoware/scenario_selector/node.hpp +++ b/planning/autoware_scenario_selector/include/autoware/scenario_selector/node.hpp @@ -73,13 +73,12 @@ class ScenarioSelectorNode : public rclcpp::Node rclcpp::Subscription::SharedPtr sub_lanelet_map_; rclcpp::Subscription::SharedPtr sub_route_; - autoware::universe_utils::InterProcessPollingSubscriber::SharedPtr - sub_odom_; + universe_utils::InterProcessPollingSubscriber< + nav_msgs::msg::Odometry, autoware::universe_utils::polling_policy::All>::SharedPtr sub_odom_; rclcpp::Subscription::SharedPtr sub_lane_driving_trajectory_; rclcpp::Subscription::SharedPtr sub_parking_trajectory_; - autoware::universe_utils::InterProcessPollingSubscriber::SharedPtr - sub_parking_state_; + universe_utils::InterProcessPollingSubscriber::SharedPtr sub_parking_state_; rclcpp::Publisher::SharedPtr pub_trajectory_; rclcpp::Publisher::SharedPtr pub_scenario_; diff --git a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/node.hpp b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/node.hpp index 26918cce24549..5d76f1d8e4edf 100644 --- a/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/node.hpp +++ b/planning/autoware_velocity_smoother/include/autoware/velocity_smoother/node.hpp @@ -93,7 +93,8 @@ class VelocitySmootherNode : public rclcpp::Node this, "/localization/kinematic_state"}; autoware::universe_utils::InterProcessPollingSubscriber sub_current_acceleration_{this, "~/input/acceleration"}; - autoware::universe_utils::InterProcessPollingSubscriber + autoware::universe_utils::InterProcessPollingSubscriber< + VelocityLimit, universe_utils::polling_policy::Newest> sub_external_velocity_limit_{this, "~/input/external_velocity_limit_mps"}; autoware::universe_utils::InterProcessPollingSubscriber sub_operation_mode_{ this, "~/input/operation_mode_state"}; diff --git a/planning/autoware_velocity_smoother/src/node.cpp b/planning/autoware_velocity_smoother/src/node.cpp index ca7526e9adf3b..0249cfa70b496 100644 --- a/planning/autoware_velocity_smoother/src/node.cpp +++ b/planning/autoware_velocity_smoother/src/node.cpp @@ -433,7 +433,7 @@ void VelocitySmootherNode::onCurrentTrajectory(const Trajectory::ConstSharedPtr // receive data current_odometry_ptr_ = sub_current_odometry_.takeData(); current_acceleration_ptr_ = sub_current_acceleration_.takeData(); - external_velocity_limit_ptr_ = sub_external_velocity_limit_.takeNewData(); + external_velocity_limit_ptr_ = sub_external_velocity_limit_.takeData(); const auto operation_mode_ptr = sub_operation_mode_.takeData(); if (operation_mode_ptr) { operation_mode_ = *operation_mode_ptr; diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/behavior_path_planner_node.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/behavior_path_planner_node.hpp index 3c62cc241b323..11f9d9f140214 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/behavior_path_planner_node.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/include/autoware/behavior_path_planner/behavior_path_planner_node.hpp @@ -88,10 +88,12 @@ class BehaviorPathPlannerNode : public rclcpp::Node private: // subscriber - autoware::universe_utils::InterProcessPollingSubscriber route_subscriber_{ - this, "~/input/route", rclcpp::QoS{1}.transient_local()}; - autoware::universe_utils::InterProcessPollingSubscriber vector_map_subscriber_{ - this, "~/input/vector_map", rclcpp::QoS{1}.transient_local()}; + autoware::universe_utils::InterProcessPollingSubscriber< + LaneletRoute, universe_utils::polling_policy::Newest> + route_subscriber_{this, "~/input/route", rclcpp::QoS{1}.transient_local()}; + autoware::universe_utils::InterProcessPollingSubscriber< + LaneletMapBin, universe_utils::polling_policy::Newest> + vector_map_subscriber_{this, "~/input/vector_map", rclcpp::QoS{1}.transient_local()}; autoware::universe_utils::InterProcessPollingSubscriber velocity_subscriber_{ this, "~/input/odometry"}; autoware::universe_utils::InterProcessPollingSubscriber diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner/src/behavior_path_planner_node.cpp b/planning/behavior_path_planner/autoware_behavior_path_planner/src/behavior_path_planner_node.cpp index e92fe937708b8..3d5ade9faf927 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner/src/behavior_path_planner_node.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner/src/behavior_path_planner_node.cpp @@ -218,7 +218,7 @@ void BehaviorPathPlannerNode::takeData() { // route { - const auto msg = route_subscriber_.takeNewData(); + const auto msg = route_subscriber_.takeData(); if (msg) { if (msg->segments.empty()) { RCLCPP_ERROR(get_logger(), "input route is empty. ignored"); @@ -230,7 +230,7 @@ void BehaviorPathPlannerNode::takeData() } // map { - const auto msg = vector_map_subscriber_.takeNewData(); + const auto msg = vector_map_subscriber_.takeData(); if (msg) { map_ptr_ = msg; has_received_map_ = true; From c0d83bd7708f0096ad6033265516f1f7dcdb996f Mon Sep 17 00:00:00 2001 From: SakodaShintaro Date: Fri, 19 Jul 2024 17:18:24 +0900 Subject: [PATCH 251/306] feat(ndt_scan_matcher): add scale_factor to covariance_estimation (#8108) Added scale_factor to ndt_scan_matcher.covariance_estimation Signed-off-by: Shintaro Sakoda --- .../config/ndt_scan_matcher.param.yaml | 3 +++ .../include/ndt_scan_matcher/hyper_parameters.hpp | 3 +++ .../schema/sub/covariance_covariance_estimation.json | 10 +++++++++- .../ndt_scan_matcher/src/ndt_scan_matcher_core.cpp | 6 ++++-- 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/localization/ndt_scan_matcher/config/ndt_scan_matcher.param.yaml b/localization/ndt_scan_matcher/config/ndt_scan_matcher.param.yaml index 616cb108baf4a..9e2cacab4d1fc 100644 --- a/localization/ndt_scan_matcher/config/ndt_scan_matcher.param.yaml +++ b/localization/ndt_scan_matcher/config/ndt_scan_matcher.param.yaml @@ -119,6 +119,9 @@ # In MULTI_NDT_SCORE, the parameter that adjusts the estimated 2D covariance temperature: 0.1 + # Scale value for adjusting the estimated covariance by a constant multiplication + scale_factor: 1.0 + dynamic_map_loading: # Dynamic map loading distance diff --git a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp index d6bd975c36bf3..5374e598ba68f 100644 --- a/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp +++ b/localization/ndt_scan_matcher/include/ndt_scan_matcher/hyper_parameters.hpp @@ -91,6 +91,7 @@ struct HyperParameters std::vector initial_pose_offset_model_x{}; std::vector initial_pose_offset_model_y{}; double temperature{}; + double scale_factor{}; } covariance_estimation{}; } covariance{}; @@ -178,6 +179,8 @@ struct HyperParameters } covariance.covariance_estimation.temperature = node->declare_parameter("covariance.covariance_estimation.temperature"); + covariance.covariance_estimation.scale_factor = + node->declare_parameter("covariance.covariance_estimation.scale_factor"); dynamic_map_loading.update_distance = node->declare_parameter("dynamic_map_loading.update_distance"); diff --git a/localization/ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json b/localization/ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json index cbee3b5da72aa..81350f3d2db37 100644 --- a/localization/ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json +++ b/localization/ndt_scan_matcher/schema/sub/covariance_covariance_estimation.json @@ -27,13 +27,21 @@ "description": "In MULTI_NDT_SCORE, the parameter that adjusts the estimated 2D covariance", "default": 0.1, "exclusiveMinimum": 0 + }, + "scale_factor": { + "type": "number", + "description": "Scale value for adjusting the estimated covariance by a constant multiplication", + "default": 1.0, + "exclusiveMinimum": 0 } }, "required": [ "covariance_estimation_type", "initial_pose_offset_model_x", - "initial_pose_offset_model_y" + "initial_pose_offset_model_y", + "temperature", + "scale_factor" ], "additionalProperties": false } diff --git a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp index b394a8f863ceb..097fbfa838339 100644 --- a/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp +++ b/localization/ndt_scan_matcher/src/ndt_scan_matcher_core.cpp @@ -584,8 +584,10 @@ bool NDTScanMatcher::callback_sensor_points_main( CovarianceEstimationType::FIXED_VALUE) { const Eigen::Matrix2d estimated_covariance_2d = estimate_covariance(ndt_result, initial_pose_matrix, sensor_ros_time); - const Eigen::Matrix2d estimated_covariance_2d_adj = - pclomp::adjust_diagonal_covariance(estimated_covariance_2d, ndt_result.pose, 0.0225, 0.0225); + const Eigen::Matrix2d estimated_covariance_2d_scaled = + estimated_covariance_2d * param_.covariance.covariance_estimation.scale_factor; + const Eigen::Matrix2d estimated_covariance_2d_adj = pclomp::adjust_diagonal_covariance( + estimated_covariance_2d_scaled, ndt_result.pose, 0.0225, 0.0225); ndt_covariance[0 + 6 * 0] = estimated_covariance_2d_adj(0, 0); ndt_covariance[1 + 6 * 1] = estimated_covariance_2d_adj(1, 1); ndt_covariance[1 + 6 * 0] = estimated_covariance_2d_adj(1, 0); From 1a29e63727787926e96d197d3b5d9212f74512b0 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:34:16 +0900 Subject: [PATCH 252/306] fix(multi_object_tracker): fix funcArgNamesDifferent (#8079) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../autoware_multi_object_tracker/src/processor/processor.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perception/autoware_multi_object_tracker/src/processor/processor.hpp b/perception/autoware_multi_object_tracker/src/processor/processor.hpp index 5eac113b3974c..851a0f6a26717 100644 --- a/perception/autoware_multi_object_tracker/src/processor/processor.hpp +++ b/perception/autoware_multi_object_tracker/src/processor/processor.hpp @@ -41,7 +41,7 @@ class TrackerProcessor // tracker processes void predict(const rclcpp::Time & time); void update( - const autoware_perception_msgs::msg::DetectedObjects & transformed_objects, + const autoware_perception_msgs::msg::DetectedObjects & detected_objects, const geometry_msgs::msg::Transform & self_transform, const std::unordered_map & direct_assignment, const uint & channel_index); void spawn( From ce60ace6520c0713e6b88dfdb5e74bca727045c0 Mon Sep 17 00:00:00 2001 From: Satoshi OTA <44889564+satoshi-ota@users.noreply.github.com> Date: Fri, 19 Jul 2024 17:42:38 +0900 Subject: [PATCH 253/306] fix(bpp, rtc_interface): fix state transition (#7743) * fix(rtc_interface): check rtc state Signed-off-by: satoshi-ota * fix(bpp_interface): check rtc state Signed-off-by: satoshi-ota * feat(rtc_interface): print Signed-off-by: satoshi-ota --------- Signed-off-by: satoshi-ota --- .../autoware/rtc_interface/rtc_interface.hpp | 2 + .../src/rtc_interface.cpp | 68 +++++++++++++++++-- .../interface/scene_module_interface.hpp | 14 +++- 3 files changed, 75 insertions(+), 9 deletions(-) diff --git a/planning/autoware_rtc_interface/include/autoware/rtc_interface/rtc_interface.hpp b/planning/autoware_rtc_interface/include/autoware/rtc_interface/rtc_interface.hpp index d34c890ab1ce1..be9b2cfc1ccf6 100644 --- a/planning/autoware_rtc_interface/include/autoware/rtc_interface/rtc_interface.hpp +++ b/planning/autoware_rtc_interface/include/autoware/rtc_interface/rtc_interface.hpp @@ -62,8 +62,10 @@ class RTCInterface bool isForceActivated(const UUID & uuid) const; bool isRegistered(const UUID & uuid) const; bool isRTCEnabled(const UUID & uuid) const; + bool isTerminated(const UUID & uuid) const; void lockCommandUpdate(); void unlockCommandUpdate(); + void print() const; private: void onCooperateCommandService( diff --git a/planning/autoware_rtc_interface/src/rtc_interface.cpp b/planning/autoware_rtc_interface/src/rtc_interface.cpp index a426b198ef56f..7dcdc4d5984a6 100644 --- a/planning/autoware_rtc_interface/src/rtc_interface.cpp +++ b/planning/autoware_rtc_interface/src/rtc_interface.cpp @@ -20,7 +20,7 @@ namespace { using tier4_rtc_msgs::msg::Module; -std::string to_string(const unique_identifier_msgs::msg::UUID & uuid) +std::string uuid_to_string(const unique_identifier_msgs::msg::UUID & uuid) { std::stringstream ss; for (auto i = 0; i < 16; ++i) { @@ -29,6 +29,34 @@ std::string to_string(const unique_identifier_msgs::msg::UUID & uuid) return ss.str(); } +std::string command_to_string(const uint8_t type) +{ + if (type == tier4_rtc_msgs::msg::Command::ACTIVATE) { + return "ACTIVATE"; + } else if (type == tier4_rtc_msgs::msg::Command::DEACTIVATE) { + return "DEACTIVATE"; + } + + throw std::domain_error("invalid rtc command."); +} + +std::string state_to_string(const uint8_t type) +{ + if (type == tier4_rtc_msgs::msg::State::WAITING_FOR_EXECUTION) { + return "WAITING_FOR_EXECUTION"; + } else if (type == tier4_rtc_msgs::msg::State::RUNNING) { + return "RUNNING"; + } else if (type == tier4_rtc_msgs::msg::State::ABORTING) { + return "ABORTING"; + } else if (type == tier4_rtc_msgs::msg::State::SUCCEEDED) { + return "SUCCEEDED"; + } else if (type == tier4_rtc_msgs::msg::State::FAILED) { + return "FAILED"; + } + + throw std::domain_error("invalid rtc state."); +} + Module getModuleType(const std::string & module_name) { Module module; @@ -158,14 +186,14 @@ std::vector RTCInterface::validateCooperateCommands( } else { RCLCPP_WARN_STREAM( getLogger(), "[validateCooperateCommands] uuid : " - << to_string(command.uuid) + << uuid_to_string(command.uuid) << " state is not WAITING_FOR_EXECUTION or RUNNING. state : " << itr->state.type << std::endl); response.success = false; } } else { RCLCPP_WARN_STREAM( - getLogger(), "[validateCooperateCommands] uuid : " << to_string(command.uuid) + getLogger(), "[validateCooperateCommands] uuid : " << uuid_to_string(command.uuid) << " is not found." << std::endl); response.success = false; } @@ -262,7 +290,7 @@ void RTCInterface::removeCooperateStatus(const UUID & uuid) RCLCPP_WARN_STREAM( getLogger(), - "[removeCooperateStatus] uuid : " << to_string(uuid) << " is not found." << std::endl); + "[removeCooperateStatus] uuid : " << uuid_to_string(uuid) << " is not found." << std::endl); } void RTCInterface::removeStoredCommand(const UUID & uuid) @@ -313,7 +341,7 @@ bool RTCInterface::isActivated(const UUID & uuid) const } RCLCPP_WARN_STREAM( - getLogger(), "[isActivated] uuid : " << to_string(uuid) << " is not found." << std::endl); + getLogger(), "[isActivated] uuid : " << uuid_to_string(uuid) << " is not found." << std::endl); return false; } @@ -361,7 +389,23 @@ bool RTCInterface::isRTCEnabled(const UUID & uuid) const } RCLCPP_WARN_STREAM( - getLogger(), "[isRTCEnabled] uuid : " << to_string(uuid) << " is not found." << std::endl); + getLogger(), "[isRTCEnabled] uuid : " << uuid_to_string(uuid) << " is not found." << std::endl); + return is_auto_mode_enabled_; +} + +bool RTCInterface::isTerminated(const UUID & uuid) const +{ + std::lock_guard lock(mutex_); + const auto itr = std::find_if( + registered_status_.statuses.begin(), registered_status_.statuses.end(), + [uuid](auto & s) { return s.uuid == uuid; }); + + if (itr != registered_status_.statuses.end()) { + return itr->state.type == State::SUCCEEDED || itr->state.type == State::FAILED; + } + + RCLCPP_WARN_STREAM( + getLogger(), "[isTerminated] uuid : " << uuid_to_string(uuid) << " is not found." << std::endl); return is_auto_mode_enabled_; } @@ -386,4 +430,16 @@ bool RTCInterface::isLocked() const return is_locked_; } +void RTCInterface::print() const +{ + RCLCPP_INFO_STREAM(getLogger(), "---print rtc cooperate statuses---" << std::endl); + for (const auto status : registered_status_.statuses) { + RCLCPP_INFO_STREAM( + getLogger(), "uuid:" << uuid_to_string(status.uuid) + << " command:" << command_to_string(status.command_status.type) + << std::boolalpha << " safe:" << status.safe + << " state:" << state_to_string(status.state.type) << std::endl); + } +} + } // namespace autoware::rtc_interface diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp index 95eb82e0b4c23..c4a05d171654d 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp @@ -335,8 +335,15 @@ class SceneModuleInterface { return std::any_of( rtc_interface_ptr_map_.begin(), rtc_interface_ptr_map_.end(), [&](const auto & rtc) { - return rtc.second->isRegistered(uuid_map_.at(rtc.first)) && - rtc.second->isActivated(uuid_map_.at(rtc.first)); + if (!rtc.second->isRegistered(uuid_map_.at(rtc.first))) { + return false; + } + + if (rtc.second->isTerminated(uuid_map_.at(rtc.first))) { + return true; + } + + return rtc.second->isActivated(uuid_map_.at(rtc.first)); }); } @@ -345,7 +352,8 @@ class SceneModuleInterface return std::any_of( rtc_interface_ptr_map_.begin(), rtc_interface_ptr_map_.end(), [&](const auto & rtc) { return rtc.second->isRegistered(uuid_map_.at(rtc.first)) && - !rtc.second->isActivated(uuid_map_.at(rtc.first)); + !rtc.second->isActivated(uuid_map_.at(rtc.first)) && + !rtc.second->isTerminated(uuid_map_.at(rtc.first)); }); } From fd362ca91dd9f76764b21ab7a1a91fb5100f1e3c Mon Sep 17 00:00:00 2001 From: Go Sakayori Date: Fri, 19 Jul 2024 18:47:47 +0900 Subject: [PATCH 254/306] fix(rtc_interface): fix build error (#8111) * fix Signed-off-by: Go Sakayori * fix format Signed-off-by: Go Sakayori --------- Signed-off-by: Go Sakayori Signed-off-by: Go Sakayori --- planning/autoware_rtc_interface/src/rtc_interface.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/planning/autoware_rtc_interface/src/rtc_interface.cpp b/planning/autoware_rtc_interface/src/rtc_interface.cpp index 7dcdc4d5984a6..1352ec10557f9 100644 --- a/planning/autoware_rtc_interface/src/rtc_interface.cpp +++ b/planning/autoware_rtc_interface/src/rtc_interface.cpp @@ -364,7 +364,8 @@ bool RTCInterface::isForceActivated(const UUID & uuid) const } RCLCPP_WARN_STREAM( - getLogger(), "[isForceActivated] uuid : " << to_string(uuid) << " is not found" << std::endl); + getLogger(), + "[isForceActivated] uuid : " << uuid_to_string(uuid) << " is not found" << std::endl); return false; } From 9745930ca6dabe36de356871e57be276b7d672ef Mon Sep 17 00:00:00 2001 From: Ariiees Date: Fri, 19 Jul 2024 10:35:52 -0400 Subject: [PATCH 255/306] change launch file name to **_node.launch.xml Signed-off-by: Ariiees --- ...r.launch.xml => approximate_downsample_filter_node.launch.xml} | 0 ...ckage_diag.launch.xml => blockage_diagnostics_node.launch.xml} | 0 ...lter.launch.xml => dual_return_outlier_filter_node.launch.xml} | 0 ..._map_filter.launch.xml => lanelet2_map_filter_node.launch.xml} | 0 ... => pickup_based_voxel_grid_downsample_filter_node.launch.xml} | 0 ...umulator.launch.xml => pointcloud_accumulator_node.launch.xml} | 0 ...launch.xml => radius_search_2d_outlier_filter_node.launch.xml} | 0 ...filter.launch.xml => random_downsample_filter_node.launch.xml} | 0 ...lier_filter.launch.xml => ring_outlier_filter_node.launch.xml} | 0 ..._filter.launch.xml => ring_passthrough_filter_node.launch.xml} | 0 ...r.launch.xml => vector_map_inside_area_filter_node.launch.xml} | 0 ...er.launch.xml => voxel_grid_downsample_filter_node.launch.xml} | 0 ...ilter.launch.xml => voxel_grid_outlier_filter_node.launch.xml} | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename sensing/pointcloud_preprocessor/launch/{approximate_downsample_filter.launch.xml => approximate_downsample_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{blockage_diag.launch.xml => blockage_diagnostics_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{dual_return_outlier_filter.launch.xml => dual_return_outlier_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{lanelet2_map_filter.launch.xml => lanelet2_map_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{pickup_based_voxel_grid_downsample_filter.launch.xml => pickup_based_voxel_grid_downsample_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{pointcloud_accumulator.launch.xml => pointcloud_accumulator_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{radius_search_2d_outlier_filter.launch.xml => radius_search_2d_outlier_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{random_downsample_filter.launch.xml => random_downsample_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{ring_outlier_filter.launch.xml => ring_outlier_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{ring_passthrough_filter.launch.xml => ring_passthrough_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{vector_map_inside_area_filter.launch.xml => vector_map_inside_area_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{voxel_grid_downsample_filter.launch.xml => voxel_grid_downsample_filter_node.launch.xml} (100%) rename sensing/pointcloud_preprocessor/launch/{voxel_grid_outlier_filter.launch.xml => voxel_grid_outlier_filter_node.launch.xml} (100%) diff --git a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml b/sensing/pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/blockage_diag.launch.xml rename to sensing/pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/lanelet2_map_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml rename to sensing/pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/random_downsample_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml rename to sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml From 1565da9eb943dfed3ec615b9c3de28e96b0b9266 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 19 Jul 2024 14:40:25 +0000 Subject: [PATCH 256/306] style(pre-commit): autofix --- .../launch/crop_box_filter.launch.xml | 2 +- .../schema/filter.schema.json | 10 +-- .../schema/pointcloud_accumulator.schema.json | 73 +++++++++---------- .../random_downsample_filter.schema.json | 12 +-- .../schema/ring_outlier_filter.schema.json | 20 ++--- 5 files changed, 58 insertions(+), 59 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml index 67d23a150b6ee..e0a312e1b489b 100644 --- a/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml @@ -12,4 +12,4 @@
-
\ No newline at end of file +
diff --git a/sensing/pointcloud_preprocessor/schema/filter.schema.json b/sensing/pointcloud_preprocessor/schema/filter.schema.json index f73d721bbffc5..8e0a6605933b8 100644 --- a/sensing/pointcloud_preprocessor/schema/filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/filter.schema.json @@ -16,11 +16,11 @@ "description": "output frame id", "default": "" }, - "max_queue_size": { - "type": "integer", - "minimum": 0, - "description": "max queue size of input/output topics", - "default": 5 + "max_queue_size": { + "type": "integer", + "minimum": 0, + "description": "max queue size of input/output topics", + "default": 5 }, "use_indices": { "type": "boolean", diff --git a/sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json b/sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json index 305e36f21a7b3..79d21c5a15458 100644 --- a/sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json +++ b/sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json @@ -1,39 +1,38 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Parameter for pointcloud accumulator", - "type": "object", - "definitions": { - "pointcloud_accumulator": { - "type": "object", - "properties": { - "accumulation_time_sec": { - "type": "number", - "description": "accumulation period [s]", - "default": "2.0" - }, - "pointcloud_buffer_size": { - "type": "integer", - "description": "buffer size", - "default": "50" - } + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Parameter for pointcloud accumulator", + "type": "object", + "definitions": { + "pointcloud_accumulator": { + "type": "object", + "properties": { + "accumulation_time_sec": { + "type": "number", + "description": "accumulation period [s]", + "default": "2.0" }, - "required": ["accumulation_time_sec", "pointcloud_buffer_size"], - "additionalProperties": false - } - }, - "properties": { - "/**": { - "type": "object", - "properties": { - "ros__parameters": { - "$ref": "#/definitions/approximate_downsample_filter" - } - }, - "required": ["ros__parameters"], - "additionalProperties": false - } - }, - "required": ["/**"], - "additionalProperties": false - } - \ No newline at end of file + "pointcloud_buffer_size": { + "type": "integer", + "description": "buffer size", + "default": "50" + } + }, + "required": ["accumulation_time_sec", "pointcloud_buffer_size"], + "additionalProperties": false + } + }, + "properties": { + "/**": { + "type": "object", + "properties": { + "ros__parameters": { + "$ref": "#/definitions/approximate_downsample_filter" + } + }, + "required": ["ros__parameters"], + "additionalProperties": false + } + }, + "required": ["/**"], + "additionalProperties": false +} diff --git a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json index 59cfa72d2e215..f243c0eeb2aa5 100644 --- a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json @@ -6,12 +6,12 @@ "random_downsample_filter": { "type": "object", "properties": { - "sample_num": { - "type": "integer", - "minimum": 0, - "description": "number of indices to be sampled", - "default": "1500" - } + "sample_num": { + "type": "integer", + "minimum": 0, + "description": "number of indices to be sampled", + "default": "1500" + } }, "required": ["sample_num"], "additionalProperties": false diff --git a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json index b7931986b47d3..06386f2fda251 100644 --- a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json +++ b/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json @@ -22,17 +22,17 @@ "default": "4" }, "max_rings_num": { - "type": "integer", - "minimum": 1, - "description": "max_rings_num", - "default": "128" + "type": "integer", + "minimum": 1, + "description": "max_rings_num", + "default": "128" + }, + "max_points_num_per_ring": { + "type": "integer", + "minimum": 0, + "description": "Set this value large enough such that HFoV / resolution < max_points_num_per_ring", + "default": "4000" }, - "max_points_num_per_ring": { - "type": "integer", - "minimum": 0, - "description": "Set this value large enough such that HFoV / resolution < max_points_num_per_ring", - "default": "4000" - }, "publish_outlier_pointcloud": { "type": "boolean", "description": "Flag to publish outlier pointcloud and visibility score. Due to performance concerns, please set to false during experiments.", From 065904499e9c74ee443104121b82489d79845f4c Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 10:57:22 +0900 Subject: [PATCH 257/306] Update sensing/pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml --- .../config/concatenate_and_time_sync.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml index f347021aa0f65..a3a6d4c585d99 100644 --- a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml +++ b/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml @@ -1,6 +1,5 @@ /**: ros__parameters: - ## Paramters in concatenate_and_time_sync_nodelet.cpp input_twist_topic_type: "twist" output_frame: "" input_topics: [""] From 33f4f056b3a0208bc793b937855d41d3e344b703 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 10:57:33 +0900 Subject: [PATCH 258/306] Update sensing/pointcloud_preprocessor/config/filter.param.yaml --- sensing/pointcloud_preprocessor/config/filter.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/config/filter.param.yaml b/sensing/pointcloud_preprocessor/config/filter.param.yaml index 2d856406cb19b..abd396892239e 100644 --- a/sensing/pointcloud_preprocessor/config/filter.param.yaml +++ b/sensing/pointcloud_preprocessor/config/filter.param.yaml @@ -1,6 +1,5 @@ /**: ros__parameters: - ## Paramters in filter.cpp input_frame: "" output_frame: "" max_queue_size: 5 From 9fdc3a0c50465de319df542a8cb6eaf445853ce0 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 10:57:40 +0900 Subject: [PATCH 259/306] Update sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml --- .../pointcloud_preprocessor/config/crop_box_filter.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml b/sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml index 24c3a677ba580..4ec29e8f66137 100644 --- a/sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml +++ b/sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml @@ -1,6 +1,5 @@ /**: ros__parameters: - ## Paramters in crop_box_filter_nodelet.cpp min_x: -1.0 min_y: -1.0 min_z: -1.0 From 26ee702237a75b455dcdbb4b68f327ae0d58c6f0 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 10:57:51 +0900 Subject: [PATCH 260/306] Update sensing/pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml --- .../config/concatenate_pointclouds.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml index 944fae4f9a734..318d37a38d132 100644 --- a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml +++ b/sensing/pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml @@ -1,6 +1,5 @@ /**: ros__parameters: - ## Paramters in concatenate_pointclouds.cpp output_frame: "" input_topics: [""] max_queue_size: 5 From 8cb2c4c4fa3758428ba0a3a6008647e37bf399e8 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 10:57:58 +0900 Subject: [PATCH 261/306] Update sensing/pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml --- .../config/approximate_downsample_filter.param.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml b/sensing/pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml index 4ff82bec2989e..239e47f09632b 100644 --- a/sensing/pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml +++ b/sensing/pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml @@ -1,6 +1,5 @@ /**: ros__parameters: - ## Paramters in approximate_downsample_filter_nodelet.cpp voxel_size_x: 0.3 voxel_size_y: 0.3 voxel_size_z: 0.1 From 358a0fb6ba60afa58299f9d112c695f1f41108b0 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:11:50 +0900 Subject: [PATCH 262/306] Update sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml --- .../launch/ring_passthrough_filter_node.launch.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml index e09883a2c1378..c18a26f036d9f 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml @@ -1,7 +1,6 @@ - From c98531c383e648401eefa4125484fb0d2c3b2103 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:12:11 +0900 Subject: [PATCH 263/306] Update sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml --- .../launch/approximate_downsample_filter_node.launch.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml index 200b2cea44f69..95b1ded06e366 100644 --- a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml @@ -1,16 +1,16 @@ - + + + - - From 0183a6003a0456220584212b00203c4459b2ffed Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:13:01 +0900 Subject: [PATCH 264/306] Update sensing/pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml --- .../launch/pointcloud_accumulator_node.launch.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml index eebb98ffc575c..1269b1bdf4c99 100644 --- a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml @@ -1,16 +1,16 @@ - + + + - - From 1e11dc98fa4087459d7a9aa08ff41bacddd486c6 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:13:11 +0900 Subject: [PATCH 265/306] Update sensing/pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml --- .../launch/ring_outlier_filter_node.launch.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml index 16f2b714379ce..545808e2787b4 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml @@ -1,16 +1,16 @@ - - + + + + - - From 632ef63ff682e50f826a2cc7b9c06f7165ce2dee Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:13:23 +0900 Subject: [PATCH 266/306] Update sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml --- .../launch/voxel_grid_downsample_filter_node.launch.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml index 6a98f85b8edd9..886de87f333f0 100644 --- a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml @@ -1,16 +1,16 @@ - + + + - - From 2c8e75c196d777ec71df0bcf2bdfe03a0e0edae8 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:13:31 +0900 Subject: [PATCH 267/306] Update sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp --- .../src/downsample_filter/random_downsample_filter_nodelet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp index 87933efb77c31..8fafb0bf0d2e9 100644 --- a/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp @@ -58,7 +58,7 @@ RandomDownsampleFilterComponent::RandomDownsampleFilterComponent( { // set initial parameters { - sample_num_ = declare_parameter("sample_num"); + sample_num_ = declare_parameter("sample_num"); } using std::placeholders::_1; From c4565d0649c51009c3cc5aa58f9f2a083be69c4f Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:13:43 +0900 Subject: [PATCH 268/306] Update sensing/pointcloud_preprocessor/src/filter.cpp --- sensing/pointcloud_preprocessor/src/filter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/src/filter.cpp b/sensing/pointcloud_preprocessor/src/filter.cpp index eaadd1da2c064..cfe09e613fcf2 100644 --- a/sensing/pointcloud_preprocessor/src/filter.cpp +++ b/sensing/pointcloud_preprocessor/src/filter.cpp @@ -72,7 +72,7 @@ pointcloud_preprocessor::Filter::Filter( { tf_input_frame_ = declare_parameter("input_frame"); tf_output_frame_ = declare_parameter("output_frame"); - max_queue_size_ = declare_parameter("max_queue_size"); + max_queue_size_ = declare_parameter("max_queue_size"); // ---[ Optional parameters use_indices_ = declare_parameter("use_indices"); From df90d1b5c434b2860126b1c88f88bb965c43ee13 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:13:53 +0900 Subject: [PATCH 269/306] Update sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp --- .../pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp index ef46d45d8f3ed..0e023c6c8d4ec 100644 --- a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp @@ -24,7 +24,7 @@ PointcloudAccumulatorComponent::PointcloudAccumulatorComponent(const rclcpp::Nod // set initial parameters { accumulation_time_sec_ = declare_parameter("accumulation_time_sec"); - pointcloud_buffer_.set_capacity(declare_parameter("pointcloud_buffer_size")); + pointcloud_buffer_.set_capacity(declare_parameter("pointcloud_buffer_size")); } using std::placeholders::_1; From 5475663f98c05fc483d6d363416dfd0d13449116 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:14:01 +0900 Subject: [PATCH 270/306] Update sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp --- .../src/crop_box_filter/crop_box_filter_nodelet.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp index 0e73d91f78133..b39ce5702d19e 100644 --- a/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp @@ -73,12 +73,12 @@ CropBoxFilterComponent::CropBoxFilterComponent(const rclcpp::NodeOptions & optio // set initial parameters { auto & p = param_; - p.min_x = declare_parameter("min_x"); - p.min_y = declare_parameter("min_y"); - p.min_z = declare_parameter("min_z"); - p.max_x = declare_parameter("max_x"); - p.max_y = declare_parameter("max_y"); - p.max_z = declare_parameter("max_z"); + p.min_x = declare_parameter("min_x"); + p.min_y = declare_parameter("min_y"); + p.min_z = declare_parameter("min_z"); + p.max_x = declare_parameter("max_x"); + p.max_y = declare_parameter("max_y"); + p.max_z = declare_parameter("max_z"); p.negative = declare_parameter("negative"); if (tf_input_frame_.empty()) { throw std::invalid_argument("Crop box requires non-empty input_frame"); From fd22fdfa47fd2ccdc63662f1f778be6a48c98fd6 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:14:12 +0900 Subject: [PATCH 271/306] Update sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp --- .../src/concatenate_data/concatenate_pointclouds.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp index 225c3bb6e60f7..d54451be43fc7 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp @@ -66,7 +66,7 @@ PointCloudConcatenationComponent::PointCloudConcatenationComponent( } // Optional parameters - maximum_queue_size_ = declare_parameter("max_queue_size"); + maximum_queue_size_ = declare_parameter("max_queue_size"); /** input pointclouds should be */ timeout_sec_ = declare_parameter("timeout_sec"); From 38df75cac83fbf5f922474822a4a55e9210037fe Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:14:22 +0900 Subject: [PATCH 272/306] Update sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp --- .../src/concatenate_data/concatenate_and_time_sync_nodelet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index 65f9da28406d1..f7d70eb06e447 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -104,7 +104,7 @@ PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchro } // Optional parameters - maximum_queue_size_ = declare_parameter("max_queue_size"); + maximum_queue_size_ = declare_parameter("max_queue_size"); timeout_sec_ = declare_parameter("timeout_sec"); input_offset_ = declare_parameter>("input_offset"); From c0d9719b84a35599fcb673caa30b6abca60b8499 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:14:32 +0900 Subject: [PATCH 273/306] Update sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml --- .../launch/voxel_grid_outlier_filter_node.launch.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml index 240786771f0de..c093aa8a3b300 100644 --- a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml @@ -1,16 +1,16 @@ - - + + + + - - From 08361473861696abd864a71a6f029c6ce69fd2b5 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:14:45 +0900 Subject: [PATCH 274/306] Update sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml --- .../launch/vector_map_inside_area_filter_node.launch.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml index 638c8d924844f..710b8175608bf 100644 --- a/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml @@ -1,12 +1,12 @@ - + - - + + From eee94bf3dbf7c7ba5e57f91b8ff39ccb8bd79024 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:15:14 +0900 Subject: [PATCH 275/306] Update sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml --- ...ickup_based_voxel_grid_downsample_filter_node.launch.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml index 83f46e2a4c482..88ed0d9d73c8c 100644 --- a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml @@ -1,16 +1,16 @@ - + + + - - From dcfdba6a8a1a414791df7649ada773601aa47ed5 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:15:29 +0900 Subject: [PATCH 276/306] Update sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml --- .../radius_search_2d_outlier_filter_node.launch.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml index b15b4bb12e37d..38fa110716a15 100644 --- a/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml @@ -1,16 +1,16 @@ - - + + + + - - From eae8e2c7a7cfe7dac0abfe97c61c60d734ea0591 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:16:55 +0900 Subject: [PATCH 277/306] Update sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp --- .../src/concatenate_data/concatenate_and_time_sync_nodelet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index f7d70eb06e447..5c65b4dceadf7 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -117,7 +117,7 @@ PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchro publish_synchronized_pointcloud_ = declare_parameter("publish_synchronized_pointcloud"); keep_input_frame_in_synchronized_pointcloud_ = declare_parameter("keep_input_frame_in_synchronized_pointcloud"); - synchronized_pointcloud_postfix_ = declare_parameter("synchronized_pointcloud_postfix"); + synchronized_pointcloud_postfix_ = declare_parameter("synchronized_pointcloud_postfix"); } // Initialize not_subscribed_topic_names_ From d494fa84b02572b4db40b1e250f139db017e5062 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:17:52 +0900 Subject: [PATCH 278/306] Update sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml --- .../launch/crop_box_filter.launch.xml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml index e0a312e1b489b..62aaf94ea7587 100644 --- a/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml @@ -1,15 +1,16 @@ + - - + + + + - -
From 90bd743f82c2efd9c33efb2776356f3b40646365 Mon Sep 17 00:00:00 2001 From: Tomohito ANDO Date: Fri, 19 Jul 2024 23:46:34 +0900 Subject: [PATCH 279/306] fix(autoware_overlay_rviz_plugin): topic type of traffic light (#8098) * fix(autoware_overlay_rviz_plugin): topic type of traffic light Signed-off-by: Tomohito Ando * style(pre-commit): autofix --------- Signed-off-by: Tomohito Ando Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../include/signal_display.hpp | 5 ++-- .../include/traffic_display.hpp | 5 ++-- .../src/signal_display.cpp | 24 +++++++++---------- .../src/traffic_display.cpp | 6 ++--- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/include/signal_display.hpp b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/include/signal_display.hpp index 5f5c9cee2da43..1e79505ea97c3 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/include/signal_display.hpp +++ b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/include/signal_display.hpp @@ -103,8 +103,7 @@ private Q_SLOTS: turn_signals_sub_; rclcpp::Subscription::SharedPtr hazard_lights_sub_; - rclcpp::Subscription::SharedPtr - traffic_sub_; + rclcpp::Subscription::SharedPtr traffic_sub_; rclcpp::Subscription::SharedPtr speed_limit_sub_; std::mutex property_mutex_; @@ -118,7 +117,7 @@ private Q_SLOTS: const autoware_vehicle_msgs::msg::HazardLightsReport::ConstSharedPtr & msg); void updateSpeedLimitData(const tier4_planning_msgs::msg::VelocityLimit::ConstSharedPtr msg); void updateTrafficLightData( - const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr msg); + const autoware_perception_msgs::msg::TrafficLightGroup::ConstSharedPtr msg); void drawWidget(QImage & hud); }; } // namespace autoware_overlay_rviz_plugin diff --git a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/include/traffic_display.hpp b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/include/traffic_display.hpp index fd15f542021f1..01545bcea6f4e 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/include/traffic_display.hpp +++ b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/include/traffic_display.hpp @@ -25,7 +25,6 @@ #include #include -#include #include #include @@ -40,8 +39,8 @@ class TrafficDisplay TrafficDisplay(); void drawTrafficLightIndicator(QPainter & painter, const QRectF & backgroundRect); void updateTrafficLightData( - const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr & msg); - autoware_perception_msgs::msg::TrafficLightGroupArray current_traffic_; + const autoware_perception_msgs::msg::TrafficLightGroup::ConstSharedPtr & msg); + autoware_perception_msgs::msg::TrafficLightGroup current_traffic_; private: QImage traffic_light_image_; diff --git a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/src/signal_display.cpp b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/src/signal_display.cpp index 1fd33a95fb34d..c61a6b47853ba 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/src/signal_display.cpp +++ b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/src/signal_display.cpp @@ -112,9 +112,10 @@ void SignalDisplay::onInitialize() speed_limit_topic_property_->initialize(rviz_ros_node); traffic_topic_property_ = std::make_unique( - "Traffic Topic", "/perception/traffic_light_recognition/traffic_signals", - "autoware_perception_msgs/msgs/msg/TrafficLightGroupArray", "Topic for Traffic Light Data", - this, SLOT(topic_updated_traffic())); + "Traffic Topic", + "/planning/scenario_planning/lane_driving/behavior_planning/debug/traffic_signal", + "autoware_perception_msgs/msgs/msg/TrafficLightGroup", "Topic for Traffic Light Data", this, + SLOT(topic_updated_traffic())); traffic_topic_property_->initialize(rviz_ros_node); } @@ -192,7 +193,7 @@ void SignalDisplay::onDisable() } void SignalDisplay::updateTrafficLightData( - const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr msg) + const autoware_perception_msgs::msg::TrafficLightGroup::ConstSharedPtr msg) { std::lock_guard lock(property_mutex_); @@ -458,14 +459,13 @@ void SignalDisplay::topic_updated_traffic() // resubscribe to the topic traffic_sub_.reset(); auto rviz_ros_node = context_->getRosNodeAbstraction().lock(); - traffic_sub_ = - rviz_ros_node->get_raw_node() - ->create_subscription( - traffic_topic_property_->getTopicStd(), - rclcpp::QoS(rclcpp::KeepLast(10)).durability_volatile().reliable(), - [this](const autoware_perception_msgs::msg::TrafficLightGroupArray::SharedPtr msg) { - updateTrafficLightData(msg); - }); + traffic_sub_ = rviz_ros_node->get_raw_node() + ->create_subscription( + traffic_topic_property_->getTopicStd(), + rclcpp::QoS(rclcpp::KeepLast(10)).durability_volatile().reliable(), + [this](const autoware_perception_msgs::msg::TrafficLightGroup::SharedPtr msg) { + updateTrafficLightData(msg); + }); } } // namespace autoware_overlay_rviz_plugin diff --git a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/src/traffic_display.cpp b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/src/traffic_display.cpp index 2dc9c23583a52..c3f79f40e2ecd 100644 --- a/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/src/traffic_display.cpp +++ b/common/autoware_overlay_rviz_plugin/autoware_overlay_rviz_plugin/src/traffic_display.cpp @@ -48,7 +48,7 @@ TrafficDisplay::TrafficDisplay() } void TrafficDisplay::updateTrafficLightData( - const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr & msg) + const autoware_perception_msgs::msg::TrafficLightGroup::ConstSharedPtr & msg) { current_traffic_ = *msg; } @@ -68,8 +68,8 @@ void TrafficDisplay::drawTrafficLightIndicator(QPainter & painter, const QRectF backgroundRect.top() + circleRect.height() / 2)); painter.drawEllipse(circleRect); - if (!current_traffic_.traffic_light_groups.empty()) { - switch (current_traffic_.traffic_light_groups[0].elements[0].color) { + if (!current_traffic_.elements.empty()) { + switch (current_traffic_.elements[0].color) { case 1: painter.setBrush(QBrush(tl_red_)); painter.drawEllipse(circleRect); From f4dab6ce458e6a848253e14082b540e51c53cd02 Mon Sep 17 00:00:00 2001 From: Kosuke Takeuchi Date: Sun, 21 Jul 2024 13:18:58 +0900 Subject: [PATCH 280/306] feat(start_planner): check current_pose and estimated_stop_pose for isPreventingRearVehicleFromPassingThrough (#8112) --- .../data_structs.hpp | 3 ++ .../start_planner_module.hpp | 23 +++++++++ .../src/start_planner_module.cpp | 48 +++++++++++++++++-- 3 files changed, 69 insertions(+), 5 deletions(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/data_structs.hpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/data_structs.hpp index 6eea3e3576732..ebdb0869545ca 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/data_structs.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/data_structs.hpp @@ -90,6 +90,9 @@ struct StartPlannerDebugData std::vector start_pose_candidates; size_t selected_start_pose_candidate_index; double margin_for_start_pose_candidate; + + // for isPreventingRearVehicleFromPassingThrough + std::optional estimated_stop_pose; }; struct StartPlannerParameters diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/start_planner_module.hpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/start_planner_module.hpp index b07d6497463ef..bb70ae2638056 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/start_planner_module.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/include/autoware/behavior_path_start_planner_module/start_planner_module.hpp @@ -229,8 +229,31 @@ class StartPlannerModule : public SceneModuleInterface bool isModuleRunning() const; bool isCurrentPoseOnMiddleOfTheRoad() const; + + /** + * @brief Check if the ego vehicle is preventing the rear vehicle from passing through. + * + * This function just call isPreventingRearVehicleFromPassingThrough(const Pose & ego_pose) with + * two poses. If rear vehicle is obstructed by ego vehicle at either of the two poses, it returns + * true. + * + * @return true if the ego vehicle is preventing the rear vehicle from passing through with the + * current pose or the pose if it stops. + */ bool isPreventingRearVehicleFromPassingThrough() const; + /** + * @brief Check if the ego vehicle is preventing the rear vehicle from passing through. + * + * This function measures the distance to the lane boundary from the current pose and the pose if +it stops, and determines whether there is enough space for the rear vehicle to pass through. If + * it is obstructing at either of the two poses, it returns true. + * + * @return true if the ego vehicle is preventing the rear vehicle from passing through with given +ego pose. + */ + bool isPreventingRearVehicleFromPassingThrough(const Pose & ego_pose) const; + bool isCloseToOriginalStartPose() const; bool hasArrivedAtGoal() const; bool isMoving() const; diff --git a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp index 9b94d3505c405..909a9574faa43 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp +++ b/planning/behavior_path_planner/autoware_behavior_path_start_planner_module/src/start_planner_module.cpp @@ -368,7 +368,35 @@ bool StartPlannerModule::isCurrentPoseOnMiddleOfTheRoad() const bool StartPlannerModule::isPreventingRearVehicleFromPassingThrough() const { + // prepare poses for preventing check + // - current_pose + // - estimated_stop_pose (The position assumed when stopped with the minimum stop distance, + // although it is NOT actually stopped) const auto & current_pose = planner_data_->self_odometry->pose.pose; + std::vector preventing_check_pose{current_pose}; + const auto min_stop_distance = + autoware::behavior_path_planner::utils::parking_departure::calcFeasibleDecelDistance( + planner_data_, parameters_->maximum_deceleration_for_stop, parameters_->maximum_jerk_for_stop, + 0.0); + debug_data_.estimated_stop_pose.reset(); // debug + if (min_stop_distance.has_value()) { + const auto current_path = getCurrentPath(); + const auto estimated_stop_pose = calcLongitudinalOffsetPose( + current_path.points, current_pose.position, min_stop_distance.value()); + if (estimated_stop_pose.has_value()) { + preventing_check_pose.push_back(estimated_stop_pose.value()); + debug_data_.estimated_stop_pose = estimated_stop_pose.value(); // debug + } + } + + // check if any of the preventing check poses are preventing rear vehicle from passing through + return std::any_of( + preventing_check_pose.begin(), preventing_check_pose.end(), + [&](const auto & pose) { return isPreventingRearVehicleFromPassingThrough(pose); }); +} + +bool StartPlannerModule::isPreventingRearVehicleFromPassingThrough(const Pose & ego_pose) const +{ const auto & dynamic_object = planner_data_->dynamic_object; const auto & route_handler = planner_data_->route_handler; const Pose start_pose = planner_data_->route_handler->getOriginalStartPose(); @@ -414,8 +442,8 @@ bool StartPlannerModule::isPreventingRearVehicleFromPassingThrough() const geometry_msgs::msg::Pose & ego_overhang_point_as_pose, const bool ego_is_merging_from_the_left) -> std::optional> { const auto local_vehicle_footprint = vehicle_info_.createFootprint(); - const auto vehicle_footprint = transformVector( - local_vehicle_footprint, autoware::universe_utils::pose2transform(current_pose)); + const auto vehicle_footprint = + transformVector(local_vehicle_footprint, autoware::universe_utils::pose2transform(ego_pose)); double smallest_lateral_gap_between_ego_and_border = std::numeric_limits::max(); double corresponding_lateral_gap_with_other_lane_bound = std::numeric_limits::max(); @@ -481,7 +509,7 @@ bool StartPlannerModule::isPreventingRearVehicleFromPassingThrough() const // Check backwards just in case the Vehicle behind ego is in a different lanelet constexpr double backwards_length = 200.0; const auto prev_lanes = autoware::behavior_path_planner::utils::getBackwardLanelets( - *route_handler, target_lanes, current_pose, backwards_length); + *route_handler, target_lanes, ego_pose, backwards_length); // return all the relevant lanelets lanelet::ConstLanelets relevant_lanelets{closest_lanelet_const}; relevant_lanelets.insert(relevant_lanelets.end(), prev_lanes.begin(), prev_lanes.end()); @@ -491,7 +519,7 @@ bool StartPlannerModule::isPreventingRearVehicleFromPassingThrough() const // filtering objects with velocity, position and class const auto filtered_objects = utils::path_safety_checker::filterObjects( - dynamic_object, route_handler, relevant_lanelets.value(), current_pose.position, + dynamic_object, route_handler, relevant_lanelets.value(), ego_pose.position, objects_filtering_params_); if (filtered_objects.objects.empty()) return false; @@ -508,7 +536,7 @@ bool StartPlannerModule::isPreventingRearVehicleFromPassingThrough() const target_objects_on_lane.on_current_lane.begin(), target_objects_on_lane.on_current_lane.end(), [&](const auto & o) { const auto arc_length = autoware::motion_utils::calcSignedArcLength( - centerline_path.points, current_pose.position, o.initial_pose.pose.position); + centerline_path.points, ego_pose.position, o.initial_pose.pose.position); if (arc_length > 0.0) return; if (std::abs(arc_length) >= std::abs(arc_length_to_closet_object)) return; arc_length_to_closet_object = arc_length; @@ -1719,6 +1747,16 @@ void StartPlannerModule::setDebugData() info_marker_); add(showPolygon(debug_data_.collision_check, "ego_and_target_polygon_relation"), info_marker_); + // visualize estimated_stop_pose for isPreventingRearVehicleFromPassingThrough() + if (debug_data_.estimated_stop_pose.has_value()) { + auto footprint_marker = createDefaultMarker( + "map", rclcpp::Clock{RCL_ROS_TIME}.now(), "estimated_stop_pose", 0, Marker::LINE_STRIP, + createMarkerScale(0.2, 0.2, 0.2), purple_color); + footprint_marker.lifetime = rclcpp::Duration::from_seconds(1.5); + addFootprintMarker(footprint_marker, debug_data_.estimated_stop_pose.value(), vehicle_info_); + debug_marker_.markers.push_back(footprint_marker); + } + // set objects of interest for (const auto & [uuid, data] : debug_data_.collision_check) { const auto color = data.is_safe ? ColorName::GREEN : ColorName::RED; From 3904ab94eb67e88b9c512c81b3cb95d2a4fd2a87 Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Mon, 22 Jul 2024 08:04:56 +0900 Subject: [PATCH 281/306] fix(diagnostic_graph_aggregator): fix constVariableReference (#8062) * fix:constVariableReference Signed-off-by: kobayu858 * fix:constVariableReference Signed-off-by: kobayu858 * fix:constVariableReference Signed-off-by: kobayu858 * fix:constVariableReference Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- .../diagnostic_graph_aggregator/src/common/graph/config.cpp | 6 +++--- .../diagnostic_graph_aggregator/src/common/graph/loader.cpp | 2 +- .../diagnostic_graph_aggregator/src/common/graph/units.cpp | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/system/diagnostic_graph_aggregator/src/common/graph/config.cpp b/system/diagnostic_graph_aggregator/src/common/graph/config.cpp index 496c95722002a..6dab6f7d2f511 100644 --- a/system/diagnostic_graph_aggregator/src/common/graph/config.cpp +++ b/system/diagnostic_graph_aggregator/src/common/graph/config.cpp @@ -264,9 +264,9 @@ void topological_sort(FileConfig & config) for (const auto & unit : config.units) units.push_back(unit.get()); // Count degrees of each unit. - for (const auto & unit : units) { - if (const auto & link = unit->item) ++degrees[link->child]; - for (const auto & link : unit->list) ++degrees[link->child]; + for (const auto * const unit : units) { + if (const auto * const link = unit->item) ++degrees[link->child]; + for (const auto * const link : unit->list) ++degrees[link->child]; } // Find initial units that are zero degrees. diff --git a/system/diagnostic_graph_aggregator/src/common/graph/loader.cpp b/system/diagnostic_graph_aggregator/src/common/graph/loader.cpp index 74636adab7415..e4d2e470a0d32 100644 --- a/system/diagnostic_graph_aggregator/src/common/graph/loader.cpp +++ b/system/diagnostic_graph_aggregator/src/common/graph/loader.cpp @@ -59,7 +59,7 @@ UnitLink * UnitLoader::child() const std::vector UnitLoader::children() const { std::vector result; - for (const auto & config : config_->list) { + for (auto * const config : config_->list) { result.push_back(links_.config_links.at(config)); } return result; diff --git a/system/diagnostic_graph_aggregator/src/common/graph/units.cpp b/system/diagnostic_graph_aggregator/src/common/graph/units.cpp index d9cbdbaa64400..5ebd603964add 100644 --- a/system/diagnostic_graph_aggregator/src/common/graph/units.cpp +++ b/system/diagnostic_graph_aggregator/src/common/graph/units.cpp @@ -145,7 +145,7 @@ MaxUnit::MaxUnit(const UnitLoader & unit) : NodeUnit(unit) void MaxUnit::update_status() { DiagnosticLevel level = DiagnosticStatus::OK; - for (const auto & link : links_) { + for (const auto * const link : links_) { level = std::max(level, link->child()->level()); } status_.level = std::min(level, DiagnosticStatus::ERROR); @@ -155,7 +155,7 @@ void ShortCircuitMaxUnit::update_status() { // TODO(Takagi, Isamu): update link flags. DiagnosticLevel level = DiagnosticStatus::OK; - for (const auto & link : links_) { + for (const auto * const link : links_) { level = std::max(level, link->child()->level()); } status_.level = std::min(level, DiagnosticStatus::ERROR); @@ -171,7 +171,7 @@ void MinUnit::update_status() DiagnosticLevel level = DiagnosticStatus::OK; if (!links_.empty()) { level = DiagnosticStatus::STALE; - for (const auto & link : links_) { + for (const auto * const link : links_) { level = std::min(level, link->child()->level()); } } From d2a3d2ba25b99d39b5e6571caa31309351c117ba Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Mon, 22 Jul 2024 08:14:34 +0900 Subject: [PATCH 282/306] fix(autoware_pose_covariance_modifier): fix funcArgNamesDifferent (#8007) fix:funcArgNamesDifferent Signed-off-by: kobayu858 --- .../src/include/pose_covariance_modifier.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localization/autoware_pose_covariance_modifier/src/include/pose_covariance_modifier.hpp b/localization/autoware_pose_covariance_modifier/src/include/pose_covariance_modifier.hpp index ffafe41269468..3a253d785e8a7 100644 --- a/localization/autoware_pose_covariance_modifier/src/include/pose_covariance_modifier.hpp +++ b/localization/autoware_pose_covariance_modifier/src/include/pose_covariance_modifier.hpp @@ -65,7 +65,7 @@ class PoseCovarianceModifierNode : public rclcpp::Node rclcpp::Publisher::SharedPtr pub_double_gnss_position_stddev_; void callback_gnss_pose_with_cov( - const geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr & msg); + const geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr & msg_pose_with_cov_in); void callback_ndt_pose_with_cov( const geometry_msgs::msg::PoseWithCovarianceStamped::ConstSharedPtr & msg_pose_with_cov_in); From 3e5c7a1f638929859dfbeb05edbb1b79d3bfb56f Mon Sep 17 00:00:00 2001 From: kobayu858 <129580202+kobayu858@users.noreply.github.com> Date: Mon, 22 Jul 2024 08:15:10 +0900 Subject: [PATCH 283/306] fix(reaction_analyzer): fix constVariableReference (#8063) * fix:constVariableReference Signed-off-by: kobayu858 * fix:constVariableReference Signed-off-by: kobayu858 * fix:constVariableReference Signed-off-by: kobayu858 * fix:suppression constVariableReference Signed-off-by: kobayu858 --------- Signed-off-by: kobayu858 --- tools/reaction_analyzer/src/subscriber.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/reaction_analyzer/src/subscriber.cpp b/tools/reaction_analyzer/src/subscriber.cpp index 02d7a3872953a..a5d1be613ee5a 100644 --- a/tools/reaction_analyzer/src/subscriber.cpp +++ b/tools/reaction_analyzer/src/subscriber.cpp @@ -272,6 +272,7 @@ void SubscriberBase::on_trajectory( if (zero_vel_idx) { RCLCPP_INFO(node_->get_logger(), "%s reacted without published time", node_name.c_str()); // set header time + // cppcheck-suppress constVariableReference auto & buffer = std::get(variant); buffer->header.stamp = msg_ptr->header.stamp; buffer->published_stamp = msg_ptr->header.stamp; @@ -363,6 +364,7 @@ void SubscriberBase::on_pointcloud( if (search_pointcloud_near_pose(pcl_pointcloud, entity_pose_, entity_search_radius_)) { RCLCPP_INFO(node_->get_logger(), "%s reacted without published time", node_name.c_str()); // set header time + // cppcheck-suppress constVariableReference auto & buffer = std::get(variant); buffer->header.stamp = msg_ptr->header.stamp; buffer->published_stamp = msg_ptr->header.stamp; @@ -440,6 +442,7 @@ void SubscriberBase::on_predicted_objects( if (search_predicted_objects_near_pose(*msg_ptr, entity_pose_, entity_search_radius_)) { RCLCPP_INFO(node_->get_logger(), "%s reacted without published time", node_name.c_str()); // set header time + // cppcheck-suppress constVariableReference auto & buffer = std::get(variant); buffer->header.stamp = msg_ptr->header.stamp; buffer->published_stamp = msg_ptr->header.stamp; @@ -520,6 +523,7 @@ void SubscriberBase::on_detected_objects( if (search_detected_objects_near_pose(output_objs, entity_pose_, entity_search_radius_)) { RCLCPP_INFO(node_->get_logger(), "%s reacted without published time", node_name.c_str()); // set header time + // cppcheck-suppress constVariableReference auto & buffer = std::get(variant); buffer->header.stamp = msg_ptr->header.stamp; buffer->published_stamp = msg_ptr->header.stamp; From 80ed1957dd025633f4669db60cdb652400c2fc89 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 22 Jul 2024 09:28:03 +0900 Subject: [PATCH 284/306] refactor(traffic_light_map_based_detector): fix namespace and directory structure (#7969) refactor: add autoware on the namespace Signed-off-by: Taekjin LEE --- .../CMakeLists.txt | 8 ++++---- .../traffic_light_map_based_detector/package.xml | 1 - ...=> traffic_light_map_based_detector_node.cpp} | 16 ++++++++-------- .../traffic_light_map_based_detector_node.hpp} | 10 +++++----- 4 files changed, 17 insertions(+), 18 deletions(-) rename perception/traffic_light_map_based_detector/src/{node.cpp => traffic_light_map_based_detector_node.cpp} (99%) rename perception/traffic_light_map_based_detector/{include/traffic_light_map_based_detector/node.hpp => src/traffic_light_map_based_detector_node.hpp} (97%) diff --git a/perception/traffic_light_map_based_detector/CMakeLists.txt b/perception/traffic_light_map_based_detector/CMakeLists.txt index 75a4bf9064782..d3c1f1548937c 100644 --- a/perception/traffic_light_map_based_detector/CMakeLists.txt +++ b/perception/traffic_light_map_based_detector/CMakeLists.txt @@ -11,12 +11,12 @@ include_directories( ${EIGEN3_INCLUDE_DIR} ) -ament_auto_add_library(traffic_light_map_based_detector SHARED - src/node.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/traffic_light_map_based_detector_node.cpp ) -rclcpp_components_register_node(traffic_light_map_based_detector - PLUGIN "traffic_light::MapBasedDetector" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::traffic_light::MapBasedDetector" EXECUTABLE traffic_light_map_based_detector_node ) diff --git a/perception/traffic_light_map_based_detector/package.xml b/perception/traffic_light_map_based_detector/package.xml index 7553b136d791a..c25773acd8914 100644 --- a/perception/traffic_light_map_based_detector/package.xml +++ b/perception/traffic_light_map_based_detector/package.xml @@ -15,7 +15,6 @@ autoware_lanelet2_extension autoware_map_msgs - autoware_planning_msgs autoware_universe_utils geometry_msgs image_geometry diff --git a/perception/traffic_light_map_based_detector/src/node.cpp b/perception/traffic_light_map_based_detector/src/traffic_light_map_based_detector_node.cpp similarity index 99% rename from perception/traffic_light_map_based_detector/src/node.cpp rename to perception/traffic_light_map_based_detector/src/traffic_light_map_based_detector_node.cpp index c1fbd4a4ad4f2..d133fe0b443d1 100644 --- a/perception/traffic_light_map_based_detector/src/node.cpp +++ b/perception/traffic_light_map_based_detector/src/traffic_light_map_based_detector_node.cpp @@ -12,8 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_map_based_detector/node.hpp" +#define EIGEN_MPL2_ONLY + +#include "traffic_light_map_based_detector_node.hpp" +#include +#include #include #include #include @@ -27,10 +31,6 @@ #include #include -#define EIGEN_MPL2_ONLY -#include -#include - #ifdef ROS_DISTRO_GALACTIC #include #else @@ -118,7 +118,7 @@ tf2::Vector3 getTrafficLightCenter(const lanelet::ConstLineString3d & traffic_li } // namespace -namespace traffic_light +namespace autoware::traffic_light { MapBasedDetector::MapBasedDetector(const rclcpp::NodeOptions & node_options) : Node("traffic_light_map_based_detector", node_options), @@ -605,7 +605,7 @@ void MapBasedDetector::publishVisibleTrafficLights( } pub->publish(output_msg); } -} // namespace traffic_light +} // namespace autoware::traffic_light #include -RCLCPP_COMPONENTS_REGISTER_NODE(traffic_light::MapBasedDetector) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::traffic_light::MapBasedDetector) diff --git a/perception/traffic_light_map_based_detector/include/traffic_light_map_based_detector/node.hpp b/perception/traffic_light_map_based_detector/src/traffic_light_map_based_detector_node.hpp similarity index 97% rename from perception/traffic_light_map_based_detector/include/traffic_light_map_based_detector/node.hpp rename to perception/traffic_light_map_based_detector/src/traffic_light_map_based_detector_node.hpp index 3aeba4c4a913a..6a2d00874fda0 100644 --- a/perception/traffic_light_map_based_detector/include/traffic_light_map_based_detector/node.hpp +++ b/perception/traffic_light_map_based_detector/src/traffic_light_map_based_detector_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_MAP_BASED_DETECTOR__NODE_HPP_ -#define TRAFFIC_LIGHT_MAP_BASED_DETECTOR__NODE_HPP_ +#ifndef TRAFFIC_LIGHT_MAP_BASED_DETECTOR_NODE_HPP_ +#define TRAFFIC_LIGHT_MAP_BASED_DETECTOR_NODE_HPP_ #include #include @@ -44,7 +44,7 @@ #include #include -namespace traffic_light +namespace autoware::traffic_light { class MapBasedDetector : public rclcpp::Node { @@ -196,5 +196,5 @@ class MapBasedDetector : public rclcpp::Node const std::vector & visible_traffic_lights, const rclcpp::Publisher::SharedPtr pub); }; -} // namespace traffic_light -#endif // TRAFFIC_LIGHT_MAP_BASED_DETECTOR__NODE_HPP_ +} // namespace autoware::traffic_light +#endif // TRAFFIC_LIGHT_MAP_BASED_DETECTOR_NODE_HPP_ From 852a921b9660c8efb58696a6b146bfdcf9a9fb31 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 22 Jul 2024 09:29:00 +0900 Subject: [PATCH 285/306] refactor(traffic_light_multi_camera_fusion): fix namespace and directory structure (#7972) refactor: add autoware on the namespace Signed-off-by: Taekjin LEE --- .../CMakeLists.txt | 8 ++++---- ...=> traffic_light_multi_camera_fusion_node.cpp} | 15 +++++++++------ .../traffic_light_multi_camera_fusion_node.hpp} | 10 +++++----- 3 files changed, 18 insertions(+), 15 deletions(-) rename perception/traffic_light_multi_camera_fusion/src/{node.cpp => traffic_light_multi_camera_fusion_node.cpp} (96%) rename perception/traffic_light_multi_camera_fusion/{include/traffic_light_multi_camera_fusion/node.hpp => src/traffic_light_multi_camera_fusion_node.hpp} (95%) diff --git a/perception/traffic_light_multi_camera_fusion/CMakeLists.txt b/perception/traffic_light_multi_camera_fusion/CMakeLists.txt index 5765ebf58fd45..a99a37aebdedc 100644 --- a/perception/traffic_light_multi_camera_fusion/CMakeLists.txt +++ b/perception/traffic_light_multi_camera_fusion/CMakeLists.txt @@ -8,12 +8,12 @@ include_directories( SYSTEM ) -ament_auto_add_library(traffic_light_multi_camera_fusion SHARED - src/node.cpp +ament_auto_add_library(${PROJECT_NAME} SHARED + src/traffic_light_multi_camera_fusion_node.cpp ) -rclcpp_components_register_node(traffic_light_multi_camera_fusion - PLUGIN "traffic_light::MultiCameraFusion" +rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::traffic_light::MultiCameraFusion" EXECUTABLE traffic_light_multi_camera_fusion_node ) diff --git a/perception/traffic_light_multi_camera_fusion/src/node.cpp b/perception/traffic_light_multi_camera_fusion/src/traffic_light_multi_camera_fusion_node.cpp similarity index 96% rename from perception/traffic_light_multi_camera_fusion/src/node.cpp rename to perception/traffic_light_multi_camera_fusion/src/traffic_light_multi_camera_fusion_node.cpp index 0e10fec3dbb87..70841b936af37 100644 --- a/perception/traffic_light_multi_camera_fusion/src/node.cpp +++ b/perception/traffic_light_multi_camera_fusion/src/traffic_light_multi_camera_fusion_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_multi_camera_fusion/node.hpp" +#include "traffic_light_multi_camera_fusion_node.hpp" #include #include @@ -20,6 +20,7 @@ #include #include #include +#include #include namespace @@ -39,7 +40,7 @@ bool isUnknown(const tier4_perception_msgs::msg::TrafficLight & signal) * @param record fusion record * @return 0 if traffic light is truncated, otherwise 1 */ -int calVisibleScore(const traffic_light::FusionRecord & record) +int calVisibleScore(const autoware::traffic_light::FusionRecord & record) { const uint32_t boundary = 5; uint32_t x1 = record.roi.roi.x_offset; @@ -55,7 +56,9 @@ int calVisibleScore(const traffic_light::FusionRecord & record) } } -int compareRecord(const traffic_light::FusionRecord & r1, const traffic_light::FusionRecord & r2) +int compareRecord( + const autoware::traffic_light::FusionRecord & r1, + const autoware::traffic_light::FusionRecord & r2) { /* if both records are from the same sensor but different stamp, trust the latest one @@ -133,7 +136,7 @@ autoware_perception_msgs::msg::TrafficLightElement convert( } // namespace -namespace traffic_light +namespace autoware::traffic_light { MultiCameraFusion::MultiCameraFusion(const rclcpp::NodeOptions & node_options) @@ -319,7 +322,7 @@ void MultiCameraFusion::groupFusion( } } -} // namespace traffic_light +} // namespace autoware::traffic_light #include -RCLCPP_COMPONENTS_REGISTER_NODE(traffic_light::MultiCameraFusion) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::traffic_light::MultiCameraFusion) diff --git a/perception/traffic_light_multi_camera_fusion/include/traffic_light_multi_camera_fusion/node.hpp b/perception/traffic_light_multi_camera_fusion/src/traffic_light_multi_camera_fusion_node.hpp similarity index 95% rename from perception/traffic_light_multi_camera_fusion/include/traffic_light_multi_camera_fusion/node.hpp rename to perception/traffic_light_multi_camera_fusion/src/traffic_light_multi_camera_fusion_node.hpp index 4389b5d3c1aa1..23bc59c26b293 100644 --- a/perception/traffic_light_multi_camera_fusion/include/traffic_light_multi_camera_fusion/node.hpp +++ b/perception/traffic_light_multi_camera_fusion/src/traffic_light_multi_camera_fusion_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_MULTI_CAMERA_FUSION__NODE_HPP_ -#define TRAFFIC_LIGHT_MULTI_CAMERA_FUSION__NODE_HPP_ +#ifndef TRAFFIC_LIGHT_MULTI_CAMERA_FUSION_NODE_HPP_ +#define TRAFFIC_LIGHT_MULTI_CAMERA_FUSION_NODE_HPP_ #include @@ -36,7 +36,7 @@ #include #include -namespace traffic_light +namespace autoware::traffic_light { namespace mf = message_filters; @@ -125,5 +125,5 @@ class MultiCameraFusion : public rclcpp::Node */ double message_lifespan_; }; -} // namespace traffic_light -#endif // TRAFFIC_LIGHT_MULTI_CAMERA_FUSION__NODE_HPP_ +} // namespace autoware::traffic_light +#endif // TRAFFIC_LIGHT_MULTI_CAMERA_FUSION_NODE_HPP_ From 1d23cbc98d23bbf0c22fac59b0e60819cb5849be Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 22 Jul 2024 09:35:32 +0900 Subject: [PATCH 286/306] refactor(traffic_light_classifier): fix namespace and directory structure (#7970) * refactor: update namespace for traffic light classifier code Signed-off-by: Taekjin LEE * refactor: directory structure Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- .../traffic_light_node_container.launch.py | 4 +-- .../traffic_light_classifier/CMakeLists.txt | 28 +++++++++---------- .../classifier}/classifier_interface.hpp | 10 +++---- .../src/{ => classifier}/cnn_classifier.cpp | 7 +++-- .../classifier}/cnn_classifier.hpp | 12 ++++---- .../src/{ => classifier}/color_classifier.cpp | 6 ++-- .../classifier}/color_classifier.hpp | 12 ++++---- .../src/single_image_debug_inference_node.cpp | 12 ++++---- ....cpp => traffic_light_classifier_node.cpp} | 8 +++--- .../traffic_light_classifier_node.hpp} | 16 +++++------ 10 files changed, 58 insertions(+), 57 deletions(-) rename perception/traffic_light_classifier/{include/traffic_light_classifier => src/classifier}/classifier_interface.hpp (79%) rename perception/traffic_light_classifier/src/{ => classifier}/cnn_classifier.cpp (98%) rename perception/traffic_light_classifier/{include/traffic_light_classifier => src/classifier}/cnn_classifier.hpp (94%) rename perception/traffic_light_classifier/src/{ => classifier}/color_classifier.cpp (99%) rename perception/traffic_light_classifier/{include/traffic_light_classifier => src/classifier}/color_classifier.hpp (88%) rename perception/traffic_light_classifier/src/{nodelet.cpp => traffic_light_classifier_node.cpp} (96%) rename perception/traffic_light_classifier/{include/traffic_light_classifier/nodelet.hpp => src/traffic_light_classifier_node.hpp} (88%) diff --git a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py index e467aba5d4e98..6e77fa71cd553 100644 --- a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py +++ b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py @@ -56,7 +56,7 @@ def create_parameter_dict(*args): composable_node_descriptions=[ ComposableNode( package="traffic_light_classifier", - plugin="traffic_light::TrafficLightClassifierNodelet", + plugin="autoware::traffic_light::TrafficLightClassifierNodelet", name="car_traffic_light_classifier", namespace="classification", parameters=[car_traffic_light_classifier_model_param], @@ -71,7 +71,7 @@ def create_parameter_dict(*args): ), ComposableNode( package="traffic_light_classifier", - plugin="traffic_light::TrafficLightClassifierNodelet", + plugin="autoware::traffic_light::TrafficLightClassifierNodelet", name="pedestrian_traffic_light_classifier", namespace="classification", parameters=[pedestrian_traffic_light_classifier_model_param], diff --git a/perception/traffic_light_classifier/CMakeLists.txt b/perception/traffic_light_classifier/CMakeLists.txt index a81dc6ab1e6ce..c6c33da839c49 100644 --- a/perception/traffic_light_classifier/CMakeLists.txt +++ b/perception/traffic_light_classifier/CMakeLists.txt @@ -79,9 +79,9 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) ) ament_auto_add_library(traffic_light_classifier_nodelet SHARED - src/color_classifier.cpp - src/cnn_classifier.cpp - src/nodelet.cpp + src/classifier/color_classifier.cpp + src/classifier/cnn_classifier.cpp + src/traffic_light_classifier_node.cpp ) target_link_libraries(traffic_light_classifier_nodelet ${OpenCV_LIBRARIES} @@ -94,14 +94,14 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) stdc++fs ) rclcpp_components_register_node(traffic_light_classifier_nodelet - PLUGIN "traffic_light::TrafficLightClassifierNodelet" + PLUGIN "autoware::traffic_light::TrafficLightClassifierNodelet" EXECUTABLE traffic_light_classifier_node ) ament_auto_add_library(single_image_debug_inference_node SHARED - src/cnn_classifier.cpp - src/color_classifier.cpp - src/nodelet.cpp + src/classifier/cnn_classifier.cpp + src/classifier/color_classifier.cpp + src/traffic_light_classifier_node.cpp src/single_image_debug_inference_node.cpp ) target_link_libraries(single_image_debug_inference_node @@ -117,7 +117,7 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) opencv_highgui ) rclcpp_components_register_node(single_image_debug_inference_node - PLUGIN "traffic_light::SingleImageDebugInferenceNode" + PLUGIN "autoware::traffic_light::SingleImageDebugInferenceNode" EXECUTABLE single_image_debug_inference ) @@ -133,16 +133,16 @@ else() ${OpenCV_INCLUDE_DIRS} ) - ament_auto_add_library(traffic_light_classifier_nodelet SHARED - src/color_classifier.cpp - src/nodelet.cpp + ament_auto_add_library(${PROJECT_NAME} SHARED + src/classifier/color_classifier.cpp + src/traffic_light_classifier_node.cpp ) - target_link_libraries(traffic_light_classifier_nodelet + target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES} ) - rclcpp_components_register_node(traffic_light_classifier_nodelet - PLUGIN "traffic_light::TrafficLightClassifierNodelet" + rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::traffic_light::TrafficLightClassifierNodelet" EXECUTABLE traffic_light_classifier_node ) diff --git a/perception/traffic_light_classifier/include/traffic_light_classifier/classifier_interface.hpp b/perception/traffic_light_classifier/src/classifier/classifier_interface.hpp similarity index 79% rename from perception/traffic_light_classifier/include/traffic_light_classifier/classifier_interface.hpp rename to perception/traffic_light_classifier/src/classifier/classifier_interface.hpp index 563850da9d2f4..cff5828a5b00f 100644 --- a/perception/traffic_light_classifier/include/traffic_light_classifier/classifier_interface.hpp +++ b/perception/traffic_light_classifier/src/classifier/classifier_interface.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_CLASSIFIER__CLASSIFIER_INTERFACE_HPP_ -#define TRAFFIC_LIGHT_CLASSIFIER__CLASSIFIER_INTERFACE_HPP_ +#ifndef CLASSIFIER__CLASSIFIER_INTERFACE_HPP_ +#define CLASSIFIER__CLASSIFIER_INTERFACE_HPP_ #include #include @@ -22,7 +22,7 @@ #include -namespace traffic_light +namespace autoware::traffic_light { class ClassifierInterface { @@ -31,6 +31,6 @@ class ClassifierInterface const std::vector & input_image, tier4_perception_msgs::msg::TrafficLightArray & traffic_signals) = 0; }; -} // namespace traffic_light +} // namespace autoware::traffic_light -#endif // TRAFFIC_LIGHT_CLASSIFIER__CLASSIFIER_INTERFACE_HPP_ +#endif // CLASSIFIER__CLASSIFIER_INTERFACE_HPP_ diff --git a/perception/traffic_light_classifier/src/cnn_classifier.cpp b/perception/traffic_light_classifier/src/classifier/cnn_classifier.cpp similarity index 98% rename from perception/traffic_light_classifier/src/cnn_classifier.cpp rename to perception/traffic_light_classifier/src/classifier/cnn_classifier.cpp index d6ba81041c6f8..4b83fea4371e2 100644 --- a/perception/traffic_light_classifier/src/cnn_classifier.cpp +++ b/perception/traffic_light_classifier/src/classifier/cnn_classifier.cpp @@ -12,18 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_classifier/cnn_classifier.hpp" +#include "cnn_classifier.hpp" #include #include #include +#include #include #include #include -namespace traffic_light +namespace autoware::traffic_light { CNNClassifier::CNNClassifier(rclcpp::Node * node_ptr) : node_ptr_(node_ptr) { @@ -207,4 +208,4 @@ bool CNNClassifier::isColorLabel(const std::string label) return false; } -} // namespace traffic_light +} // namespace autoware::traffic_light diff --git a/perception/traffic_light_classifier/include/traffic_light_classifier/cnn_classifier.hpp b/perception/traffic_light_classifier/src/classifier/cnn_classifier.hpp similarity index 94% rename from perception/traffic_light_classifier/include/traffic_light_classifier/cnn_classifier.hpp rename to perception/traffic_light_classifier/src/classifier/cnn_classifier.hpp index 545a080763ef4..4b9eea31cfe07 100644 --- a/perception/traffic_light_classifier/include/traffic_light_classifier/cnn_classifier.hpp +++ b/perception/traffic_light_classifier/src/classifier/cnn_classifier.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_CLASSIFIER__CNN_CLASSIFIER_HPP_ -#define TRAFFIC_LIGHT_CLASSIFIER__CNN_CLASSIFIER_HPP_ +#ifndef CLASSIFIER__CNN_CLASSIFIER_HPP_ +#define CLASSIFIER__CNN_CLASSIFIER_HPP_ -#include "traffic_light_classifier/classifier_interface.hpp" +#include "classifier_interface.hpp" #include #include @@ -41,7 +41,7 @@ #include #include -namespace traffic_light +namespace autoware::traffic_light { using cuda_utils::CudaUniquePtr; @@ -118,6 +118,6 @@ class CNNClassifier : public ClassifierInterface std::vector std_; }; -} // namespace traffic_light +} // namespace autoware::traffic_light -#endif // TRAFFIC_LIGHT_CLASSIFIER__CNN_CLASSIFIER_HPP_ +#endif // CLASSIFIER__CNN_CLASSIFIER_HPP_ diff --git a/perception/traffic_light_classifier/src/color_classifier.cpp b/perception/traffic_light_classifier/src/classifier/color_classifier.cpp similarity index 99% rename from perception/traffic_light_classifier/src/color_classifier.cpp rename to perception/traffic_light_classifier/src/classifier/color_classifier.cpp index 604568b585a63..6f9800683aa27 100644 --- a/perception/traffic_light_classifier/src/color_classifier.cpp +++ b/perception/traffic_light_classifier/src/classifier/color_classifier.cpp @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_classifier/color_classifier.hpp" +#include "color_classifier.hpp" #include @@ -19,7 +19,7 @@ #include #include -namespace traffic_light +namespace autoware::traffic_light { ColorClassifier::ColorClassifier(rclcpp::Node * node_ptr) : node_ptr_(node_ptr) { @@ -255,4 +255,4 @@ rcl_interfaces::msg::SetParametersResult ColorClassifier::parametersCallback( return result; } -} // namespace traffic_light +} // namespace autoware::traffic_light diff --git a/perception/traffic_light_classifier/include/traffic_light_classifier/color_classifier.hpp b/perception/traffic_light_classifier/src/classifier/color_classifier.hpp similarity index 88% rename from perception/traffic_light_classifier/include/traffic_light_classifier/color_classifier.hpp rename to perception/traffic_light_classifier/src/classifier/color_classifier.hpp index 38f2d7f6a48db..6e11a6f6f3d84 100644 --- a/perception/traffic_light_classifier/include/traffic_light_classifier/color_classifier.hpp +++ b/perception/traffic_light_classifier/src/classifier/color_classifier.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_CLASSIFIER__COLOR_CLASSIFIER_HPP_ -#define TRAFFIC_LIGHT_CLASSIFIER__COLOR_CLASSIFIER_HPP_ +#ifndef CLASSIFIER__COLOR_CLASSIFIER_HPP_ +#define CLASSIFIER__COLOR_CLASSIFIER_HPP_ -#include "traffic_light_classifier/classifier_interface.hpp" +#include "classifier_interface.hpp" #include #include @@ -32,7 +32,7 @@ #include -namespace traffic_light +namespace autoware::traffic_light { struct HSVConfig { @@ -93,6 +93,6 @@ class ColorClassifier : public ClassifierInterface cv::Scalar max_hsv_red_; }; -} // namespace traffic_light +} // namespace autoware::traffic_light -#endif // TRAFFIC_LIGHT_CLASSIFIER__COLOR_CLASSIFIER_HPP_ +#endif // CLASSIFIER__COLOR_CLASSIFIER_HPP_ diff --git a/perception/traffic_light_classifier/src/single_image_debug_inference_node.cpp b/perception/traffic_light_classifier/src/single_image_debug_inference_node.cpp index f6f963086bdd7..245dc069af163 100644 --- a/perception/traffic_light_classifier/src/single_image_debug_inference_node.cpp +++ b/perception/traffic_light_classifier/src/single_image_debug_inference_node.cpp @@ -15,11 +15,11 @@ #include #if ENABLE_GPU -#include +#include "classifier/cnn_classifier.hpp" #endif -#include -#include +#include "classifier/color_classifier.hpp" +#include "traffic_light_classifier_node.hpp" #include #include @@ -60,7 +60,7 @@ std::string toString(const uint8_t state) } } // namespace -namespace traffic_light +namespace autoware::traffic_light { class SingleImageDebugInferenceNode : public rclcpp::Node { @@ -159,7 +159,7 @@ class SingleImageDebugInferenceNode : public rclcpp::Node cv::Mat image_; std::unique_ptr classifier_ptr_; }; -} // namespace traffic_light +} // namespace autoware::traffic_light #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(traffic_light::SingleImageDebugInferenceNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::traffic_light::SingleImageDebugInferenceNode) diff --git a/perception/traffic_light_classifier/src/nodelet.cpp b/perception/traffic_light_classifier/src/traffic_light_classifier_node.cpp similarity index 96% rename from perception/traffic_light_classifier/src/nodelet.cpp rename to perception/traffic_light_classifier/src/traffic_light_classifier_node.cpp index 6378a98fdc8cc..b42ded4cbffa3 100644 --- a/perception/traffic_light_classifier/src/nodelet.cpp +++ b/perception/traffic_light_classifier/src/traffic_light_classifier_node.cpp @@ -11,7 +11,7 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_classifier/nodelet.hpp" +#include "traffic_light_classifier_node.hpp" #include @@ -20,7 +20,7 @@ #include #include -namespace traffic_light +namespace autoware::traffic_light { TrafficLightClassifierNodelet::TrafficLightClassifierNodelet(const rclcpp::NodeOptions & options) : Node("traffic_light_classifier_node", options) @@ -169,8 +169,8 @@ bool TrafficLightClassifierNodelet::is_harsh_backlight(const cv::Mat & img) cons return backlight_threshold_ <= intensity; } -} // namespace traffic_light +} // namespace autoware::traffic_light #include -RCLCPP_COMPONENTS_REGISTER_NODE(traffic_light::TrafficLightClassifierNodelet) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::traffic_light::TrafficLightClassifierNodelet) diff --git a/perception/traffic_light_classifier/include/traffic_light_classifier/nodelet.hpp b/perception/traffic_light_classifier/src/traffic_light_classifier_node.hpp similarity index 88% rename from perception/traffic_light_classifier/include/traffic_light_classifier/nodelet.hpp rename to perception/traffic_light_classifier/src/traffic_light_classifier_node.hpp index d48dd8aba3b95..d86880744929f 100644 --- a/perception/traffic_light_classifier/include/traffic_light_classifier/nodelet.hpp +++ b/perception/traffic_light_classifier/src/traffic_light_classifier_node.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_CLASSIFIER__NODELET_HPP_ -#define TRAFFIC_LIGHT_CLASSIFIER__NODELET_HPP_ +#ifndef TRAFFIC_LIGHT_CLASSIFIER_NODE_HPP_ +#define TRAFFIC_LIGHT_CLASSIFIER_NODE_HPP_ -#include "traffic_light_classifier/classifier_interface.hpp" +#include "classifier/classifier_interface.hpp" #include #include @@ -43,15 +43,15 @@ #include #if ENABLE_GPU -#include "traffic_light_classifier/cnn_classifier.hpp" +#include "classifier/cnn_classifier.hpp" #endif -#include "traffic_light_classifier/color_classifier.hpp" +#include "classifier/color_classifier.hpp" #include #include -namespace traffic_light +namespace autoware::traffic_light { class TrafficLightClassifierNodelet : public rclcpp::Node { @@ -93,6 +93,6 @@ class TrafficLightClassifierNodelet : public rclcpp::Node bool is_harsh_backlight(const cv::Mat & img) const; }; -} // namespace traffic_light +} // namespace autoware::traffic_light -#endif // TRAFFIC_LIGHT_CLASSIFIER__NODELET_HPP_ +#endif // TRAFFIC_LIGHT_CLASSIFIER_NODE_HPP_ From dec06c520a2d1cd530ecb0e289168fb88bc1dfe3 Mon Sep 17 00:00:00 2001 From: Masato Saeki <78376491+MasatoSaeki@users.noreply.github.com> Date: Mon, 22 Jul 2024 11:00:30 +0900 Subject: [PATCH 287/306] refactor(tensorrt_classifier)!: fix namespace and directory structure (#8009) * add prefix into Signed-off-by: MasatoSaeki * add prefix in CODEOWNERS Signed-off-by: MasatoSaeki * remove invalid author Signed-off-by: MasatoSaeki * style(pre-commit): autofix * add prefix Signed-off-by: MasatoSaeki * style(pre-commit): autofix * ci Signed-off-by: MasatoSaeki * for ci Signed-off-by: MasatoSaeki --------- Signed-off-by: MasatoSaeki Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/CODEOWNERS | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 0 .../tensorrt_classifier/calibrator.hpp | 10 ++++---- .../tensorrt_classifier/preprocess.h | 6 ++--- .../tensorrt_classifier.hpp | 10 ++++---- .../package.xml | 3 +-- .../src/preprocess.cu | 2 +- .../src/tensorrt_classifier.cpp | 23 ++++++++++--------- .../traffic_light_classifier/package.xml | 2 +- .../src/classifier/cnn_classifier.cpp | 2 +- .../src/classifier/cnn_classifier.hpp | 4 ++-- 12 files changed, 33 insertions(+), 33 deletions(-) rename perception/{tensorrt_classifier => autoware_tensorrt_classifier}/CMakeLists.txt (97%) rename perception/{tensorrt_classifier => autoware_tensorrt_classifier}/README.md (100%) rename perception/{tensorrt_classifier/include => autoware_tensorrt_classifier/include/autoware}/tensorrt_classifier/calibrator.hpp (98%) rename perception/{tensorrt_classifier/include => autoware_tensorrt_classifier/include/autoware}/tensorrt_classifier/preprocess.h (97%) rename perception/{tensorrt_classifier/include => autoware_tensorrt_classifier/include/autoware}/tensorrt_classifier/tensorrt_classifier.hpp (93%) rename perception/{tensorrt_classifier => autoware_tensorrt_classifier}/package.xml (91%) rename perception/{tensorrt_classifier => autoware_tensorrt_classifier}/src/preprocess.cu (99%) rename perception/{tensorrt_classifier => autoware_tensorrt_classifier}/src/tensorrt_classifier.cpp (94%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 7c8c123a4ade1..4bf5355c24fd0 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -136,7 +136,7 @@ perception/radar_tracks_msgs_converter/** satoshi.tanaka@tier4.jp shunsuke.miura perception/autoware_raindrop_cluster_filter/** dai.nguyen@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/shape_estimation/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/simple_object_merger/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp -perception/tensorrt_classifier/** kotaro.uetake@tier4.jp shunsuke.miura@tier4.jp +perception/autoware_tensorrt_classifier/** kotaro.uetake@tier4.jp shunsuke.miura@tier4.jp perception/tensorrt_yolox/** dan.umeda@tier4.jp manato.hirabayashi@tier4.jp perception/traffic_light_arbiter/** kenzo.lobos@tier4.jp shunsuke.miura@tier4.jp perception/traffic_light_classifier/** shunsuke.miura@tier4.jp tao.zhong@tier4.jp yukihiro.saito@tier4.jp diff --git a/perception/tensorrt_classifier/CMakeLists.txt b/perception/autoware_tensorrt_classifier/CMakeLists.txt similarity index 97% rename from perception/tensorrt_classifier/CMakeLists.txt rename to perception/autoware_tensorrt_classifier/CMakeLists.txt index 9f879a2c0c56d..88747a1e9240c 100644 --- a/perception/tensorrt_classifier/CMakeLists.txt +++ b/perception/autoware_tensorrt_classifier/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.5) -project(tensorrt_classifier) +project(autoware_tensorrt_classifier) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -O3 -Wno-write-strings -fopenmp -Wall") diff --git a/perception/tensorrt_classifier/README.md b/perception/autoware_tensorrt_classifier/README.md similarity index 100% rename from perception/tensorrt_classifier/README.md rename to perception/autoware_tensorrt_classifier/README.md diff --git a/perception/tensorrt_classifier/include/tensorrt_classifier/calibrator.hpp b/perception/autoware_tensorrt_classifier/include/autoware/tensorrt_classifier/calibrator.hpp similarity index 98% rename from perception/tensorrt_classifier/include/tensorrt_classifier/calibrator.hpp rename to perception/autoware_tensorrt_classifier/include/autoware/tensorrt_classifier/calibrator.hpp index b4d687c3c4fd9..088297f5bf796 100644 --- a/perception/tensorrt_classifier/include/tensorrt_classifier/calibrator.hpp +++ b/perception/autoware_tensorrt_classifier/include/autoware/tensorrt_classifier/calibrator.hpp @@ -34,8 +34,8 @@ * DEALINGS IN THE SOFTWARE. */ -#ifndef TENSORRT_CLASSIFIER__CALIBRATOR_HPP_ -#define TENSORRT_CLASSIFIER__CALIBRATOR_HPP_ +#ifndef AUTOWARE__TENSORRT_CLASSIFIER__CALIBRATOR_HPP_ +#define AUTOWARE__TENSORRT_CLASSIFIER__CALIBRATOR_HPP_ #include "cuda_utils/cuda_check_error.hpp" #include "cuda_utils/cuda_unique_ptr.hpp" @@ -52,7 +52,7 @@ #include #include -namespace tensorrt_classifier +namespace autoware::tensorrt_classifier { class ImageStream { @@ -524,6 +524,6 @@ class Int8MinMaxCalibrator : public nvinfer1::IInt8MinMaxCalibrator // std for preprocessing std::vector m_std; }; -} // namespace tensorrt_classifier +} // namespace autoware::tensorrt_classifier -#endif // TENSORRT_CLASSIFIER__CALIBRATOR_HPP_ +#endif // AUTOWARE__TENSORRT_CLASSIFIER__CALIBRATOR_HPP_ diff --git a/perception/tensorrt_classifier/include/tensorrt_classifier/preprocess.h b/perception/autoware_tensorrt_classifier/include/autoware/tensorrt_classifier/preprocess.h similarity index 97% rename from perception/tensorrt_classifier/include/tensorrt_classifier/preprocess.h rename to perception/autoware_tensorrt_classifier/include/autoware/tensorrt_classifier/preprocess.h index 55295a57ad5b8..51f4e973ba7ca 100644 --- a/perception/tensorrt_classifier/include/tensorrt_classifier/preprocess.h +++ b/perception/autoware_tensorrt_classifier/include/autoware/tensorrt_classifier/preprocess.h @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TENSORRT_CLASSIFIER__PREPROCESS_H_ -#define TENSORRT_CLASSIFIER__PREPROCESS_H_ +#ifndef AUTOWARE__TENSORRT_CLASSIFIER__PREPROCESS_H_ +#define AUTOWARE__TENSORRT_CLASSIFIER__PREPROCESS_H_ #include #include @@ -178,4 +178,4 @@ extern void multi_scale_resize_bilinear_letterbox_nhwc_to_nchw32_batch_gpu( float * dst, unsigned char * src, int d_w, int d_h, int d_c, Roi * d_roi, int s_w, int s_h, int s_c, int batch, float norm, cudaStream_t stream); -#endif // TENSORRT_CLASSIFIER__PREPROCESS_H_ +#endif // AUTOWARE__TENSORRT_CLASSIFIER__PREPROCESS_H_ diff --git a/perception/tensorrt_classifier/include/tensorrt_classifier/tensorrt_classifier.hpp b/perception/autoware_tensorrt_classifier/include/autoware/tensorrt_classifier/tensorrt_classifier.hpp similarity index 93% rename from perception/tensorrt_classifier/include/tensorrt_classifier/tensorrt_classifier.hpp rename to perception/autoware_tensorrt_classifier/include/autoware/tensorrt_classifier/tensorrt_classifier.hpp index d95ee52e8fae9..9fb1beaac39de 100644 --- a/perception/tensorrt_classifier/include/tensorrt_classifier/tensorrt_classifier.hpp +++ b/perception/autoware_tensorrt_classifier/include/autoware/tensorrt_classifier/tensorrt_classifier.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TENSORRT_CLASSIFIER__TENSORRT_CLASSIFIER_HPP_ -#define TENSORRT_CLASSIFIER__TENSORRT_CLASSIFIER_HPP_ +#ifndef AUTOWARE__TENSORRT_CLASSIFIER__TENSORRT_CLASSIFIER_HPP_ +#define AUTOWARE__TENSORRT_CLASSIFIER__TENSORRT_CLASSIFIER_HPP_ #include #include @@ -25,7 +25,7 @@ #include #include -namespace tensorrt_classifier +namespace autoware::tensorrt_classifier { using cuda_utils::CudaUniquePtr; using cuda_utils::CudaUniquePtrHost; @@ -129,6 +129,6 @@ class TrtClassifier int batch_size_; CudaUniquePtrHost out_prob_h_; }; -} // namespace tensorrt_classifier +} // namespace autoware::tensorrt_classifier -#endif // TENSORRT_CLASSIFIER__TENSORRT_CLASSIFIER_HPP_ +#endif // AUTOWARE__TENSORRT_CLASSIFIER__TENSORRT_CLASSIFIER_HPP_ diff --git a/perception/tensorrt_classifier/package.xml b/perception/autoware_tensorrt_classifier/package.xml similarity index 91% rename from perception/tensorrt_classifier/package.xml rename to perception/autoware_tensorrt_classifier/package.xml index 439318c147e76..e41625886d8ae 100644 --- a/perception/tensorrt_classifier/package.xml +++ b/perception/autoware_tensorrt_classifier/package.xml @@ -1,11 +1,10 @@ - tensorrt_classifier + autoware_tensorrt_classifier 0.0.1 tensorrt classifier wrapper Dan Umeda - Mingyu Li Kotaro Uetake Shunsuke Miura diff --git a/perception/tensorrt_classifier/src/preprocess.cu b/perception/autoware_tensorrt_classifier/src/preprocess.cu similarity index 99% rename from perception/tensorrt_classifier/src/preprocess.cu rename to perception/autoware_tensorrt_classifier/src/preprocess.cu index fd3d758c2c280..07976281faafb 100644 --- a/perception/tensorrt_classifier/src/preprocess.cu +++ b/perception/autoware_tensorrt_classifier/src/preprocess.cu @@ -11,9 +11,9 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +#include #include #include -#include #include diff --git a/perception/tensorrt_classifier/src/tensorrt_classifier.cpp b/perception/autoware_tensorrt_classifier/src/tensorrt_classifier.cpp similarity index 94% rename from perception/tensorrt_classifier/src/tensorrt_classifier.cpp rename to perception/autoware_tensorrt_classifier/src/tensorrt_classifier.cpp index b7c4ce99fa2e9..a327e6395b2eb 100644 --- a/perception/tensorrt_classifier/src/tensorrt_classifier.cpp +++ b/perception/autoware_tensorrt_classifier/src/tensorrt_classifier.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include -#include +#include +#include +#include #include -#include #include #include @@ -95,7 +95,7 @@ std::vector loadImageList(const std::string & filename, const std:: return fileList; } -namespace tensorrt_classifier +namespace autoware::tensorrt_classifier { TrtClassifier::TrtClassifier( const std::string & model_path, const std::string & precision, @@ -120,7 +120,8 @@ TrtClassifier::TrtClassifier( if (calibration_image_list_path != "") { calibration_images = loadImageList(calibration_image_list_path, ""); } - tensorrt_classifier::ImageStream stream(max_batch_size, input_dims, calibration_images); + autoware::tensorrt_classifier::ImageStream stream( + max_batch_size, input_dims, calibration_images); fs::path calibration_table{model_path}; std::string calibName = ""; std::string ext = ""; @@ -140,17 +141,17 @@ TrtClassifier::TrtClassifier( std::unique_ptr calibrator; if (build_config.calib_type_str == "Entropy") { - calibrator.reset( - new tensorrt_classifier::Int8EntropyCalibrator(stream, calibration_table, mean_, std_)); + calibrator.reset(new autoware::tensorrt_classifier::Int8EntropyCalibrator( + stream, calibration_table, mean_, std_)); } else if ( build_config.calib_type_str == "Legacy" || build_config.calib_type_str == "Percentile") { double quantile = 0.999999; double cutoff = 0.999999; - calibrator.reset(new tensorrt_classifier::Int8LegacyCalibrator( + calibrator.reset(new autoware::tensorrt_classifier::Int8LegacyCalibrator( stream, calibration_table, histogram_table, mean_, std_, true, quantile, cutoff)); } else { - calibrator.reset( - new tensorrt_classifier::Int8MinMaxCalibrator(stream, calibration_table, mean_, std_)); + calibrator.reset(new autoware::tensorrt_classifier::Int8MinMaxCalibrator( + stream, calibration_table, mean_, std_)); } trt_common_ = std::make_unique( model_path, precision, std::move(calibrator), batch_config, max_workspace_size, build_config); @@ -384,4 +385,4 @@ bool TrtClassifier::feedforwardAndDecode( } return true; } -} // namespace tensorrt_classifier +} // namespace autoware::tensorrt_classifier diff --git a/perception/traffic_light_classifier/package.xml b/perception/traffic_light_classifier/package.xml index 9e460e8ad1a1d..aa48eff993132 100644 --- a/perception/traffic_light_classifier/package.xml +++ b/perception/traffic_light_classifier/package.xml @@ -14,6 +14,7 @@ autoware_cmake + autoware_tensorrt_classifier cuda_utils cv_bridge image_transport @@ -22,7 +23,6 @@ rclcpp rclcpp_components sensor_msgs - tensorrt_classifier tensorrt_common tier4_perception_msgs diff --git a/perception/traffic_light_classifier/src/classifier/cnn_classifier.cpp b/perception/traffic_light_classifier/src/classifier/cnn_classifier.cpp index 4b83fea4371e2..6e3ae34297510 100644 --- a/perception/traffic_light_classifier/src/classifier/cnn_classifier.cpp +++ b/perception/traffic_light_classifier/src/classifier/cnn_classifier.cpp @@ -56,7 +56,7 @@ CNNClassifier::CNNClassifier(rclcpp::Node * node_ptr) : node_ptr_(node_ptr) batch_size_ = input_dim.d[0]; tensorrt_common::BatchConfig batch_config{batch_size_, batch_size_, batch_size_}; - classifier_ = std::make_unique( + classifier_ = std::make_unique( model_file_path, precision, batch_config, mean_, std_); if (node_ptr_->declare_parameter("build_only", false)) { RCLCPP_INFO(node_ptr_->get_logger(), "TensorRT engine is built and shutdown node."); diff --git a/perception/traffic_light_classifier/src/classifier/cnn_classifier.hpp b/perception/traffic_light_classifier/src/classifier/cnn_classifier.hpp index 4b9eea31cfe07..348c9cb81728f 100644 --- a/perception/traffic_light_classifier/src/classifier/cnn_classifier.hpp +++ b/perception/traffic_light_classifier/src/classifier/cnn_classifier.hpp @@ -17,6 +17,7 @@ #include "classifier_interface.hpp" +#include #include #include #include @@ -24,7 +25,6 @@ #include #include #include -#include #include #include @@ -111,7 +111,7 @@ class CNNClassifier : public ClassifierInterface rclcpp::Node * node_ptr_; int batch_size_; - std::unique_ptr classifier_; + std::unique_ptr classifier_; image_transport::Publisher image_pub_; std::vector labels_; std::vector mean_; From bc9ea531841c32064dc984c938edfaff86159aa7 Mon Sep 17 00:00:00 2001 From: badai nguyen <94814556+badai-nguyen@users.noreply.github.com> Date: Mon, 22 Jul 2024 12:15:37 +0900 Subject: [PATCH 288/306] refactor(euclidean_cluster): add package name prefix of autoware_ (#8003) * refactor(euclidean_cluster): add package name prefix of autoware_ Signed-off-by: badai-nguyen * style(pre-commit): autofix --------- Signed-off-by: badai-nguyen Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/CODEOWNERS | 2 +- .../detection/detector/camera_lidar_detector.launch.xml | 2 +- .../detection/detector/lidar_rule_detector.launch.xml | 2 +- launch/tier4_perception_launch/package.xml | 2 +- perception/autoware_detection_by_tracker/package.xml | 2 +- .../CMakeLists.txt | 2 +- .../README.md | 4 ++-- .../config/euclidean_cluster.param.yaml | 0 .../config/voxel_grid_based_euclidean_cluster.param.yaml | 0 .../include/autoware/euclidean_cluster/euclidean_cluster.hpp | 0 .../euclidean_cluster/euclidean_cluster_interface.hpp | 0 .../include/autoware/euclidean_cluster/utils.hpp | 0 .../euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp | 0 .../launch/euclidean_cluster.launch.py | 2 +- .../launch/euclidean_cluster.launch.xml | 4 ++-- .../launch/voxel_grid_based_euclidean_cluster.launch.py | 2 +- .../launch/voxel_grid_based_euclidean_cluster.launch.xml | 4 ++-- .../lib/euclidean_cluster.cpp | 0 .../lib/utils.cpp | 0 .../lib/voxel_grid_based_euclidean_cluster.cpp | 0 .../package.xml | 4 ++-- .../src/euclidean_cluster_node.cpp | 0 .../src/euclidean_cluster_node.hpp | 0 .../src/voxel_grid_based_euclidean_cluster_node.cpp | 0 .../src/voxel_grid_based_euclidean_cluster_node.hpp | 0 .../test/test_voxel_grid_based_euclidean_cluster.cpp | 0 perception/image_projection_based_fusion/package.xml | 2 +- 27 files changed, 17 insertions(+), 17 deletions(-) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/CMakeLists.txt (97%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/README.md (97%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/config/euclidean_cluster.param.yaml (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/config/voxel_grid_based_euclidean_cluster.param.yaml (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/include/autoware/euclidean_cluster/euclidean_cluster.hpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/include/autoware/euclidean_cluster/euclidean_cluster_interface.hpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/include/autoware/euclidean_cluster/utils.hpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/include/autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/launch/euclidean_cluster.launch.py (99%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/launch/euclidean_cluster.launch.xml (80%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/launch/voxel_grid_based_euclidean_cluster.launch.py (99%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/launch/voxel_grid_based_euclidean_cluster.launch.xml (82%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/lib/euclidean_cluster.cpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/lib/utils.cpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/lib/voxel_grid_based_euclidean_cluster.cpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/package.xml (90%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/src/euclidean_cluster_node.cpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/src/euclidean_cluster_node.hpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/src/voxel_grid_based_euclidean_cluster_node.cpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/src/voxel_grid_based_euclidean_cluster_node.hpp (100%) rename perception/{euclidean_cluster => autoware_euclidean_cluster}/test/test_voxel_grid_based_euclidean_cluster.cpp (100%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4bf5355c24fd0..5f7e43f74adba 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -121,7 +121,7 @@ perception/detected_object_feature_remover/** tomoya.kimura@tier4.jp perception/detected_object_validation/** dai.nguyen@tier4.jp shintaro.tomie@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/autoware_detection_by_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/elevation_map_loader/** kosuke.takeuchi@tier4.jp shintaro.tomie@tier4.jp taichi.higashide@tier4.jp -perception/euclidean_cluster/** dai.nguyen@tier4.jp yukihiro.saito@tier4.jp +perception/eucliautoware_euclidean_clusterdean_cluster/** dai.nguyen@tier4.jp yukihiro.saito@tier4.jp perception/ground_segmentation/** abrahammonrroy@yahoo.com dai.nguyen@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/image_projection_based_fusion/** dai.nguyen@tier4.jp koji.minoda@tier4.jp kotaro.uetake@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/lidar_apollo_instance_segmentation/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml index 9256e90ec3e35..73e0e34611fb3 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/camera_lidar_detector.launch.xml @@ -112,7 +112,7 @@ - + diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_rule_detector.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_rule_detector.launch.xml index 38ee946201f7e..f737d280e039f 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_rule_detector.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_rule_detector.launch.xml @@ -10,7 +10,7 @@ - + diff --git a/launch/tier4_perception_launch/package.xml b/launch/tier4_perception_launch/package.xml index 0584376a2e80a..340ac7448b96d 100644 --- a/launch/tier4_perception_launch/package.xml +++ b/launch/tier4_perception_launch/package.xml @@ -16,6 +16,7 @@ autoware_cluster_merger autoware_crosswalk_traffic_light_estimator autoware_detection_by_tracker + autoware_euclidean_cluster autoware_map_based_prediction autoware_multi_object_tracker autoware_object_merger @@ -31,7 +32,6 @@ detected_object_feature_remover detected_object_validation elevation_map_loader - euclidean_cluster ground_segmentation image_projection_based_fusion image_transport_decompressor diff --git a/perception/autoware_detection_by_tracker/package.xml b/perception/autoware_detection_by_tracker/package.xml index 837dfae1e2ef9..dd5a719e70270 100644 --- a/perception/autoware_detection_by_tracker/package.xml +++ b/perception/autoware_detection_by_tracker/package.xml @@ -13,9 +13,9 @@ autoware_cmake eigen3_cmake_module + autoware_euclidean_cluster autoware_universe_utils eigen - euclidean_cluster object_recognition_utils rclcpp rclcpp_components diff --git a/perception/euclidean_cluster/CMakeLists.txt b/perception/autoware_euclidean_cluster/CMakeLists.txt similarity index 97% rename from perception/euclidean_cluster/CMakeLists.txt rename to perception/autoware_euclidean_cluster/CMakeLists.txt index d27390ae7707a..55f664489a4d9 100644 --- a/perception/euclidean_cluster/CMakeLists.txt +++ b/perception/autoware_euclidean_cluster/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(euclidean_cluster) +project(autoware_euclidean_cluster) find_package(autoware_cmake REQUIRED) autoware_package() diff --git a/perception/euclidean_cluster/README.md b/perception/autoware_euclidean_cluster/README.md similarity index 97% rename from perception/euclidean_cluster/README.md rename to perception/autoware_euclidean_cluster/README.md index b57204c84cc3b..349d4211ee8e9 100644 --- a/perception/euclidean_cluster/README.md +++ b/perception/autoware_euclidean_cluster/README.md @@ -1,8 +1,8 @@ -# euclidean_cluster +# autoware_euclidean_cluster ## Purpose -euclidean_cluster is a package for clustering points into smaller parts to classify objects. +autoware_euclidean_cluster is a package for clustering points into smaller parts to classify objects. This package has two clustering methods: `euclidean_cluster` and `voxel_grid_based_euclidean_cluster`. diff --git a/perception/euclidean_cluster/config/euclidean_cluster.param.yaml b/perception/autoware_euclidean_cluster/config/euclidean_cluster.param.yaml similarity index 100% rename from perception/euclidean_cluster/config/euclidean_cluster.param.yaml rename to perception/autoware_euclidean_cluster/config/euclidean_cluster.param.yaml diff --git a/perception/euclidean_cluster/config/voxel_grid_based_euclidean_cluster.param.yaml b/perception/autoware_euclidean_cluster/config/voxel_grid_based_euclidean_cluster.param.yaml similarity index 100% rename from perception/euclidean_cluster/config/voxel_grid_based_euclidean_cluster.param.yaml rename to perception/autoware_euclidean_cluster/config/voxel_grid_based_euclidean_cluster.param.yaml diff --git a/perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster.hpp b/perception/autoware_euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster.hpp similarity index 100% rename from perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster.hpp rename to perception/autoware_euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster.hpp diff --git a/perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster_interface.hpp b/perception/autoware_euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster_interface.hpp similarity index 100% rename from perception/euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster_interface.hpp rename to perception/autoware_euclidean_cluster/include/autoware/euclidean_cluster/euclidean_cluster_interface.hpp diff --git a/perception/euclidean_cluster/include/autoware/euclidean_cluster/utils.hpp b/perception/autoware_euclidean_cluster/include/autoware/euclidean_cluster/utils.hpp similarity index 100% rename from perception/euclidean_cluster/include/autoware/euclidean_cluster/utils.hpp rename to perception/autoware_euclidean_cluster/include/autoware/euclidean_cluster/utils.hpp diff --git a/perception/euclidean_cluster/include/autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp b/perception/autoware_euclidean_cluster/include/autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp similarity index 100% rename from perception/euclidean_cluster/include/autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp rename to perception/autoware_euclidean_cluster/include/autoware/euclidean_cluster/voxel_grid_based_euclidean_cluster.hpp diff --git a/perception/euclidean_cluster/launch/euclidean_cluster.launch.py b/perception/autoware_euclidean_cluster/launch/euclidean_cluster.launch.py similarity index 99% rename from perception/euclidean_cluster/launch/euclidean_cluster.launch.py rename to perception/autoware_euclidean_cluster/launch/euclidean_cluster.launch.py index 053438a4352b0..9420abe214ecc 100644 --- a/perception/euclidean_cluster/launch/euclidean_cluster.launch.py +++ b/perception/autoware_euclidean_cluster/launch/euclidean_cluster.launch.py @@ -33,7 +33,7 @@ def load_composable_node_param(param_path): return yaml.safe_load(f)["/**"]["ros__parameters"] ns = "" - pkg = "euclidean_cluster" + pkg = "autoware_euclidean_cluster" low_height_cropbox_filter_component = ComposableNode( package="pointcloud_preprocessor", diff --git a/perception/euclidean_cluster/launch/euclidean_cluster.launch.xml b/perception/autoware_euclidean_cluster/launch/euclidean_cluster.launch.xml similarity index 80% rename from perception/euclidean_cluster/launch/euclidean_cluster.launch.xml rename to perception/autoware_euclidean_cluster/launch/euclidean_cluster.launch.xml index f4deeccf7b76c..22d62c4df375a 100644 --- a/perception/euclidean_cluster/launch/euclidean_cluster.launch.xml +++ b/perception/autoware_euclidean_cluster/launch/euclidean_cluster.launch.xml @@ -4,11 +4,11 @@ - + - + diff --git a/perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py b/perception/autoware_euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py similarity index 99% rename from perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py rename to perception/autoware_euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py index 0b502b1c43d67..cbc2401ede5b7 100644 --- a/perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py +++ b/perception/autoware_euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.py @@ -32,7 +32,7 @@ def load_composable_node_param(param_path): return yaml.safe_load(f)["/**"]["ros__parameters"] ns = "" - pkg = "euclidean_cluster" + pkg = "autoware_euclidean_cluster" low_height_cropbox_filter_component = ComposableNode( package="pointcloud_preprocessor", diff --git a/perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.xml b/perception/autoware_euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.xml similarity index 82% rename from perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.xml rename to perception/autoware_euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.xml index 3a7c685d8f449..c9ece95e9a606 100644 --- a/perception/euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.xml +++ b/perception/autoware_euclidean_cluster/launch/voxel_grid_based_euclidean_cluster.launch.xml @@ -4,11 +4,11 @@ - + - + diff --git a/perception/euclidean_cluster/lib/euclidean_cluster.cpp b/perception/autoware_euclidean_cluster/lib/euclidean_cluster.cpp similarity index 100% rename from perception/euclidean_cluster/lib/euclidean_cluster.cpp rename to perception/autoware_euclidean_cluster/lib/euclidean_cluster.cpp diff --git a/perception/euclidean_cluster/lib/utils.cpp b/perception/autoware_euclidean_cluster/lib/utils.cpp similarity index 100% rename from perception/euclidean_cluster/lib/utils.cpp rename to perception/autoware_euclidean_cluster/lib/utils.cpp diff --git a/perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp b/perception/autoware_euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp similarity index 100% rename from perception/euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp rename to perception/autoware_euclidean_cluster/lib/voxel_grid_based_euclidean_cluster.cpp diff --git a/perception/euclidean_cluster/package.xml b/perception/autoware_euclidean_cluster/package.xml similarity index 90% rename from perception/euclidean_cluster/package.xml rename to perception/autoware_euclidean_cluster/package.xml index 45b5d05031c72..076406bd3980a 100644 --- a/perception/euclidean_cluster/package.xml +++ b/perception/autoware_euclidean_cluster/package.xml @@ -1,9 +1,9 @@ - euclidean_cluster + autoware_euclidean_cluster 0.1.0 - The euclidean_cluster package + The autoware_euclidean_cluster package Yukihiro Saito Dai Nguyen Apache License 2.0 diff --git a/perception/euclidean_cluster/src/euclidean_cluster_node.cpp b/perception/autoware_euclidean_cluster/src/euclidean_cluster_node.cpp similarity index 100% rename from perception/euclidean_cluster/src/euclidean_cluster_node.cpp rename to perception/autoware_euclidean_cluster/src/euclidean_cluster_node.cpp diff --git a/perception/euclidean_cluster/src/euclidean_cluster_node.hpp b/perception/autoware_euclidean_cluster/src/euclidean_cluster_node.hpp similarity index 100% rename from perception/euclidean_cluster/src/euclidean_cluster_node.hpp rename to perception/autoware_euclidean_cluster/src/euclidean_cluster_node.hpp diff --git a/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.cpp b/perception/autoware_euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.cpp similarity index 100% rename from perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.cpp rename to perception/autoware_euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.cpp diff --git a/perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.hpp b/perception/autoware_euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.hpp similarity index 100% rename from perception/euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.hpp rename to perception/autoware_euclidean_cluster/src/voxel_grid_based_euclidean_cluster_node.hpp diff --git a/perception/euclidean_cluster/test/test_voxel_grid_based_euclidean_cluster.cpp b/perception/autoware_euclidean_cluster/test/test_voxel_grid_based_euclidean_cluster.cpp similarity index 100% rename from perception/euclidean_cluster/test/test_voxel_grid_based_euclidean_cluster.cpp rename to perception/autoware_euclidean_cluster/test/test_voxel_grid_based_euclidean_cluster.cpp diff --git a/perception/image_projection_based_fusion/package.xml b/perception/image_projection_based_fusion/package.xml index f7a95ae4c70d6..924e4c2b446b6 100644 --- a/perception/image_projection_based_fusion/package.xml +++ b/perception/image_projection_based_fusion/package.xml @@ -16,11 +16,11 @@ ament_cmake_auto autoware_cmake + autoware_euclidean_cluster autoware_perception_msgs autoware_point_types autoware_universe_utils cv_bridge - euclidean_cluster image_geometry image_transport lidar_centerpoint From 25892a74715798ea713cb4a9b60c2f15e232668b Mon Sep 17 00:00:00 2001 From: Masaki Baba Date: Mon, 22 Jul 2024 13:26:05 +0900 Subject: [PATCH 289/306] fix(detected_object_validation): use search for searching intersected lanelet (#8109) * refactor: use search method of lanelet Signed-off-by: a-maumau * rm unuse and mod args Signed-off-by: a-maumau * style(pre-commit): autofix --------- Signed-off-by: a-maumau Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../src/lanelet_filter/lanelet_filter.cpp | 58 ++++++++++++------- .../src/lanelet_filter/lanelet_filter.hpp | 8 +-- 2 files changed, 38 insertions(+), 28 deletions(-) diff --git a/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.cpp b/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.cpp index 09440fedc1764..6437134bc98a5 100644 --- a/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.cpp +++ b/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.cpp @@ -23,6 +23,8 @@ #include #include +#include +#include #include namespace autoware::detected_object_validation @@ -76,9 +78,6 @@ void ObjectLaneletFilterNode::mapCallback( lanelet_frame_id_ = map_msg->header.frame_id; lanelet_map_ptr_ = std::make_shared(); lanelet::utils::conversion::fromBinMsg(*map_msg, lanelet_map_ptr_); - const lanelet::ConstLanelets all_lanelets = lanelet::utils::query::laneletLayer(lanelet_map_ptr_); - road_lanelets_ = lanelet::utils::query::roadLanelets(all_lanelets); - shoulder_lanelets_ = lanelet::utils::query::shoulderLanelets(all_lanelets); } void ObjectLaneletFilterNode::objectCallback( @@ -103,19 +102,15 @@ void ObjectLaneletFilterNode::objectCallback( // calculate convex hull const auto convex_hull = getConvexHull(transformed_objects); + // get intersected lanelets - lanelet::ConstLanelets intersected_road_lanelets = - getIntersectedLanelets(convex_hull, road_lanelets_); - lanelet::ConstLanelets intersected_shoulder_lanelets = - getIntersectedLanelets(convex_hull, shoulder_lanelets_); + lanelet::ConstLanelets intersected_lanelets = getIntersectedLanelets(convex_hull); // filtering process for (size_t index = 0; index < transformed_objects.objects.size(); ++index) { const auto & transformed_object = transformed_objects.objects.at(index); const auto & input_object = input_msg->objects.at(index); - filterObject( - transformed_object, input_object, intersected_road_lanelets, intersected_shoulder_lanelets, - output_object_msg); + filterObject(transformed_object, input_object, intersected_lanelets, output_object_msg); } object_pub_->publish(output_object_msg); published_time_publisher_->publish_if_subscribed(object_pub_, output_object_msg.header.stamp); @@ -133,8 +128,7 @@ void ObjectLaneletFilterNode::objectCallback( bool ObjectLaneletFilterNode::filterObject( const autoware_perception_msgs::msg::DetectedObject & transformed_object, const autoware_perception_msgs::msg::DetectedObject & input_object, - const lanelet::ConstLanelets & intersected_road_lanelets, - const lanelet::ConstLanelets & intersected_shoulder_lanelets, + const lanelet::ConstLanelets & intersected_lanelets, autoware_perception_msgs::msg::DetectedObjects & output_object_msg) { const auto & label = transformed_object.classification.front().label; @@ -143,8 +137,7 @@ bool ObjectLaneletFilterNode::filterObject( // 1. is polygon overlap with road lanelets or shoulder lanelets if (filter_settings_.polygon_overlap_filter) { const bool is_polygon_overlap = - isObjectOverlapLanelets(transformed_object, intersected_road_lanelets) || - isObjectOverlapLanelets(transformed_object, intersected_shoulder_lanelets); + isObjectOverlapLanelets(transformed_object, intersected_lanelets); filter_pass = filter_pass && is_polygon_overlap; } @@ -154,8 +147,7 @@ bool ObjectLaneletFilterNode::filterObject( autoware_perception_msgs::msg::TrackedObjectKinematics::UNAVAILABLE; if (filter_settings_.lanelet_direction_filter && !orientation_not_available) { const bool is_same_direction = - isSameDirectionWithLanelets(intersected_road_lanelets, transformed_object) || - isSameDirectionWithLanelets(intersected_shoulder_lanelets, transformed_object); + isSameDirectionWithLanelets(intersected_lanelets, transformed_object); filter_pass = filter_pass && is_same_direction; } @@ -214,18 +206,40 @@ LinearRing2d ObjectLaneletFilterNode::getConvexHull( return convex_hull; } +// fetch the intersected candidate lanelets with bounding box and then +// check the intersections among the lanelets and the convex hull lanelet::ConstLanelets ObjectLaneletFilterNode::getIntersectedLanelets( - const LinearRing2d & convex_hull, const lanelet::ConstLanelets & road_lanelets) + const LinearRing2d & convex_hull) { + namespace bg = boost::geometry; + lanelet::ConstLanelets intersected_lanelets; - // WARNING: This implementation currently iterate all lanelets, which could degrade performance - // when handling large sized map. - for (const auto & road_lanelet : road_lanelets) { - if (boost::geometry::intersects(convex_hull, road_lanelet.polygon2d().basicPolygon())) { - intersected_lanelets.emplace_back(road_lanelet); + // convert convex_hull to a 2D bounding box for searching in the LaneletMap + bg::model::box> bbox2d_convex_hull; + bg::envelope(convex_hull, bbox2d_convex_hull); + lanelet::BoundingBox2d bbox2d( + lanelet::BasicPoint2d( + bg::get(bbox2d_convex_hull), + bg::get(bbox2d_convex_hull)), + lanelet::BasicPoint2d( + bg::get(bbox2d_convex_hull), + bg::get(bbox2d_convex_hull))); + + lanelet::Lanelets candidates_lanelets = lanelet_map_ptr_->laneletLayer.search(bbox2d); + for (const auto & lanelet : candidates_lanelets) { + // only check the road lanelets and road shoulder lanelets + if ( + lanelet.hasAttribute(lanelet::AttributeName::Subtype) && + (lanelet.attribute(lanelet::AttributeName::Subtype).value() == + lanelet::AttributeValueString::Road || + lanelet.attribute(lanelet::AttributeName::Subtype).value() == "road_shoulder")) { + if (boost::geometry::intersects(convex_hull, lanelet.polygon2d().basicPolygon())) { + intersected_lanelets.emplace_back(lanelet); + } } } + return intersected_lanelets; } diff --git a/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.hpp b/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.hpp index 25d78a160c246..3f7a53d0319be 100644 --- a/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.hpp +++ b/perception/detected_object_validation/src/lanelet_filter/lanelet_filter.hpp @@ -57,8 +57,6 @@ class ObjectLaneletFilterNode : public rclcpp::Node std::unique_ptr debug_publisher_{nullptr}; lanelet::LaneletMapPtr lanelet_map_ptr_; - lanelet::ConstLanelets road_lanelets_; - lanelet::ConstLanelets shoulder_lanelets_; std::string lanelet_frame_id_; tf2_ros::Buffer tf_buffer_; @@ -76,12 +74,10 @@ class ObjectLaneletFilterNode : public rclcpp::Node bool filterObject( const autoware_perception_msgs::msg::DetectedObject & transformed_object, const autoware_perception_msgs::msg::DetectedObject & input_object, - const lanelet::ConstLanelets & intersected_road_lanelets, - const lanelet::ConstLanelets & intersected_shoulder_lanelets, + const lanelet::ConstLanelets & intersected_lanelets, autoware_perception_msgs::msg::DetectedObjects & output_object_msg); LinearRing2d getConvexHull(const autoware_perception_msgs::msg::DetectedObjects &); - lanelet::ConstLanelets getIntersectedLanelets( - const LinearRing2d &, const lanelet::ConstLanelets &); + lanelet::ConstLanelets getIntersectedLanelets(const LinearRing2d &); bool isObjectOverlapLanelets( const autoware_perception_msgs::msg::DetectedObject & object, const lanelet::ConstLanelets & intersected_lanelets); From fa6b895446b547cd1b115f80bdc4c2e7f0857d69 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 22 Jul 2024 13:44:59 +0900 Subject: [PATCH 290/306] fix(autoware_multi_object_tracker): missing parameter schema path fix (#8120) fix: missing parameter schema path fix Signed-off-by: Taekjin LEE --- perception/autoware_multi_object_tracker/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/perception/autoware_multi_object_tracker/README.md b/perception/autoware_multi_object_tracker/README.md index 447c74d9b3450..afb1598645733 100644 --- a/perception/autoware_multi_object_tracker/README.md +++ b/perception/autoware_multi_object_tracker/README.md @@ -65,16 +65,16 @@ Multiple inputs are pre-defined in the input channel parameters (described below ### Input Channel parameters -{{ json_to_markdown("perception/multi_object_tracker/schema/input_channels.schema.json") }} +{{ json_to_markdown("perception/autoware_multi_object_tracker/schema/input_channels.schema.json") }} ### Core Parameters -{{ json_to_markdown("perception/multi_object_tracker/schema/multi_object_tracker_node.schema.json") }} -{{ json_to_markdown("perception/multi_object_tracker/schema/data_association_matrix.schema.json") }} +{{ json_to_markdown("perception/autoware_multi_object_tracker/schema/multi_object_tracker_node.schema.json") }} +{{ json_to_markdown("perception/autoware_multi_object_tracker/schema/data_association_matrix.schema.json") }} #### Simulation parameters -{{ json_to_markdown("perception/multi_object_tracker/schema/simulation_tracker.schema.json") }} +{{ json_to_markdown("perception/autoware_multi_object_tracker/schema/simulation_tracker.schema.json") }} ## Assumptions / Known limits From 719a5823d2c16d2b9015c8be8eea74e9348603c2 Mon Sep 17 00:00:00 2001 From: Yuki TAKAGI <141538661+yuki-takagi-66@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:54:18 +0900 Subject: [PATCH 291/306] refactor(vehicle_cmd_gate)!: delete rate limit skipping function for vehicle departure (#7720) * delete a fucntion block. More appropriate function can be achieved by the parameter settings. * add notation to readme --------- Signed-off-by: Yuki Takagi --- control/autoware_vehicle_cmd_gate/README.md | 4 ++++ .../config/vehicle_cmd_gate.param.yaml | 16 ++++++++-------- .../src/vehicle_cmd_gate.cpp | 18 ------------------ 3 files changed, 12 insertions(+), 26 deletions(-) diff --git a/control/autoware_vehicle_cmd_gate/README.md b/control/autoware_vehicle_cmd_gate/README.md index 2d6f5c5f949af..e46db3c06cfeb 100644 --- a/control/autoware_vehicle_cmd_gate/README.md +++ b/control/autoware_vehicle_cmd_gate/README.md @@ -78,6 +78,10 @@ The limitation values are calculated based on the 1D interpolation of the limita Notation: this filter is not designed to enhance ride comfort. Its main purpose is to detect and remove abnormal values in the control outputs during the final stages of Autoware. If this filter is frequently active, it implies the control module may need tuning. If you're aiming to smoothen the signal via a low-pass filter or similar techniques, that should be handled in the control module. When the filter is activated, the topic `~/is_filter_activated` is published. +Notation 2: If you use vehicles in which the driving force is controlled by the accelerator/brake pedal, the jerk limit, denoting the pedal rate limit, must be sufficiently relaxed at low speeds. +Otherwise, quick pedal changes at start/stop will not be possible, resulting in slow starts and creep down on hills. +This functionality for starting/stopping was embedded in the source code but was removed because it was complex and could be achieved by parameters. + ## Assumptions / Known limits The parameter `check_external_emergency_heartbeat` (true by default) enables an emergency stop request from external modules. diff --git a/control/autoware_vehicle_cmd_gate/config/vehicle_cmd_gate.param.yaml b/control/autoware_vehicle_cmd_gate/config/vehicle_cmd_gate.param.yaml index 54c87f45b6a96..74affea696893 100644 --- a/control/autoware_vehicle_cmd_gate/config/vehicle_cmd_gate.param.yaml +++ b/control/autoware_vehicle_cmd_gate/config/vehicle_cmd_gate.param.yaml @@ -16,14 +16,14 @@ stop_check_duration: 1.0 nominal: vel_lim: 25.0 - reference_speed_points: [20.0, 30.0] - steer_lim: [1.0, 0.8] - steer_rate_lim: [1.0, 0.8] - lon_acc_lim: [5.0, 4.0] - lon_jerk_lim: [5.0, 4.0] - lat_acc_lim: [5.0, 4.0] - lat_jerk_lim: [7.0, 6.0] - actual_steer_diff_lim: [1.0, 0.8] + reference_speed_points: [0.1, 0.3, 20.0, 30.0] + steer_lim: [1.0, 1.0, 1.0, 0.8] + steer_rate_lim: [1.0, 1.0, 1.0, 0.8] + lon_acc_lim: [5.0, 5.0, 5.0, 4.0] + lon_jerk_lim: [80.0, 5.0, 5.0, 4.0] # The first element is required for quick pedal changes when stopping and starting. + lat_acc_lim: [5.0, 5.0, 5.0, 4.0] + lat_jerk_lim: [7.0, 7.0, 7.0, 6.0] + actual_steer_diff_lim: [1.0, 1.0, 1.0, 0.8] on_transition: vel_lim: 50.0 reference_speed_points: [20.0, 30.0] diff --git a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp index 87e79f59bc356..dd6e2f0f54aea 100644 --- a/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp +++ b/control/autoware_vehicle_cmd_gate/src/vehicle_cmd_gate.cpp @@ -607,7 +607,6 @@ Control VehicleCmdGate::filterControlCommand(const Control & in) const auto mode = current_operation_mode_; const auto current_status_cmd = getActualStatusAsCommand(); const auto ego_is_stopped = vehicle_stop_checker_->isVehicleStopped(stop_check_duration_); - const auto input_cmd_is_stopping = in.longitudinal.acceleration < 0.0; filter_.setCurrentSpeed(current_kinematics_.twist.twist.linear.x); filter_on_transition_.setCurrentSpeed(current_kinematics_.twist.twist.linear.x); @@ -618,23 +617,6 @@ Control VehicleCmdGate::filterControlCommand(const Control & in) if (mode.is_in_transition) { filter_on_transition_.filterAll(dt, current_steer_, out, is_filter_activated); } else { - // When ego is stopped and the input command is not stopping, - // use the higher of actual vehicle longitudinal state - // and previous longitudinal command for the filtering - // this is to prevent the jerk limits being applied and causing - // a delay when restarting the vehicle. - - if (ego_is_stopped && !input_cmd_is_stopping) { - auto prev_cmd = filter_.getPrevCmd(); - prev_cmd.longitudinal.acceleration = - std::max(prev_cmd.longitudinal.acceleration, current_status_cmd.longitudinal.acceleration); - // consider reverse driving - prev_cmd.longitudinal.velocity = std::fabs(prev_cmd.longitudinal.velocity) > - std::fabs(current_status_cmd.longitudinal.velocity) - ? prev_cmd.longitudinal.velocity - : current_status_cmd.longitudinal.velocity; - filter_.setPrevCmd(prev_cmd); - } filter_.filterAll(dt, current_steer_, out, is_filter_activated); } From 98c8dd9a327514bd0f1e54f93b2486941884116c Mon Sep 17 00:00:00 2001 From: Go Sakayori Date: Mon, 22 Jul 2024 13:56:02 +0900 Subject: [PATCH 292/306] fix(bpp): fix approved request search (#8119) fix existApprovedRequest condition Signed-off-by: Go Sakayori --- .../interface/scene_module_interface.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp index c4a05d171654d..09e1382799f01 100644 --- a/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp +++ b/planning/behavior_path_planner/autoware_behavior_path_planner_common/include/autoware/behavior_path_planner_common/interface/scene_module_interface.hpp @@ -340,7 +340,7 @@ class SceneModuleInterface } if (rtc.second->isTerminated(uuid_map_.at(rtc.first))) { - return true; + return false; } return rtc.second->isActivated(uuid_map_.at(rtc.first)); From b9267dbc6b83dc0d1b2755958df781929587075a Mon Sep 17 00:00:00 2001 From: Masato Saeki <78376491+MasatoSaeki@users.noreply.github.com> Date: Mon, 22 Jul 2024 13:57:32 +0900 Subject: [PATCH 293/306] refactor(lidar_transfusion)!: fix namespace and directory structure (#8022) * add prefix Signed-off-by: MasatoSaeki * add prefix in code owner Signed-off-by: MasatoSaeki * style(pre-commit): autofix * fix launcher Signed-off-by: MasatoSaeki --------- Signed-off-by: MasatoSaeki Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Amadeusz Szymko Co-authored-by: Kenzo Lobos Tsunekawa --- .github/CODEOWNERS | 4 +-- .../detector/lidar_dnn_detector.launch.xml | 4 +-- .../CMakeLists.txt | 32 +++++++++---------- .../README.md | 16 +++++----- .../detection_class_remapper.param.yaml | 0 .../config/transfusion.param.yaml | 0 .../lidar_transfusion/cuda_utils.hpp | 6 ++-- .../detection_class_remapper.hpp | 10 +++--- .../lidar_transfusion_node.hpp | 20 ++++++------ .../lidar_transfusion/network/network_trt.hpp | 14 ++++---- .../postprocess/circle_nms_kernel.hpp | 12 +++---- .../postprocess/non_maximum_suppression.hpp | 12 +++---- .../postprocess/postprocess_kernel.hpp | 14 ++++---- .../preprocess/pointcloud_densification.hpp | 12 +++---- .../preprocess/preprocess_kernel.hpp | 16 +++++----- .../preprocess/voxel_generator.hpp | 20 ++++++------ .../autoware}/lidar_transfusion/ros_utils.hpp | 12 +++---- .../lidar_transfusion/transfusion_config.hpp | 10 +++--- .../lidar_transfusion/transfusion_trt.hpp | 28 ++++++++-------- .../autoware}/lidar_transfusion/utils.hpp | 10 +++--- .../lidar_transfusion/visibility_control.hpp | 6 ++-- .../launch/lidar_transfusion.launch.xml | 8 ++--- .../lib/detection_class_remapper.cpp | 6 ++-- .../lib/network/network_trt.cpp | 6 ++-- .../lib/postprocess/circle_nms_kernel.cu | 10 +++--- .../postprocess/non_maximum_suppression.cpp | 6 ++-- .../lib/postprocess/postprocess_kernel.cu | 8 ++--- .../preprocess/pointcloud_densification.cpp | 6 ++-- .../lib/preprocess/preprocess_kernel.cu | 8 ++--- .../lib/preprocess/voxel_generator.cpp | 8 ++--- .../lib/ros_utils.cpp | 6 ++-- .../lib/transfusion_trt.cpp | 10 +++--- .../package.xml | 2 +- .../detection_class_remapper.schema.json | 0 .../schema/transfusion.schema.json | 0 .../src/lidar_transfusion_node.cpp | 10 +++--- .../test/test_detection_class_remapper.cpp | 4 +-- .../test/test_nms.cpp | 13 ++++---- .../test/test_postprocess_kernel.cpp | 4 +-- .../test/test_postprocess_kernel.hpp | 8 ++--- .../test/test_preprocess_kernel.cpp | 8 ++--- .../test/test_preprocess_kernel.hpp | 8 ++--- .../test/test_ros_utils.cpp | 26 +++++++-------- .../test/test_voxel_generator.cpp | 8 ++--- .../test/test_voxel_generator.hpp | 6 ++-- 45 files changed, 219 insertions(+), 218 deletions(-) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/CMakeLists.txt (88%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/README.md (84%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/config/detection_class_remapper.param.yaml (100%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/config/transfusion.param.yaml (100%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/cuda_utils.hpp (96%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/detection_class_remapper.hpp (82%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/lidar_transfusion_node.hpp (78%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/network/network_trt.hpp (86%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/postprocess/circle_nms_kernel.hpp (72%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/postprocess/non_maximum_suppression.hpp (83%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/postprocess/postprocess_kernel.hpp (74%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/preprocess/pointcloud_densification.hpp (88%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/preprocess/preprocess_kernel.hpp (83%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/preprocess/voxel_generator.hpp (76%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/ros_utils.hpp (93%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/transfusion_config.hpp (95%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/transfusion_trt.hpp (80%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/utils.hpp (84%) rename perception/{lidar_transfusion/include => autoware_lidar_transfusion/include/autoware}/lidar_transfusion/visibility_control.hpp (89%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/launch/lidar_transfusion.launch.xml (79%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/detection_class_remapper.cpp (94%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/network/network_trt.cpp (98%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/postprocess/circle_nms_kernel.cu (94%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/postprocess/non_maximum_suppression.cpp (95%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/postprocess/postprocess_kernel.cu (95%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/preprocess/pointcloud_densification.cpp (95%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/preprocess/preprocess_kernel.cu (97%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/preprocess/voxel_generator.cpp (95%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/ros_utils.cpp (95%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/lib/transfusion_trt.cpp (96%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/package.xml (96%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/schema/detection_class_remapper.schema.json (100%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/schema/transfusion.schema.json (100%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/src/lidar_transfusion_node.cpp (96%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/test/test_detection_class_remapper.cpp (96%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/test/test_nms.cpp (92%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/test/test_postprocess_kernel.cpp (99%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/test/test_postprocess_kernel.hpp (85%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/test/test_preprocess_kernel.cpp (97%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/test/test_preprocess_kernel.hpp (87%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/test/test_ros_utils.cpp (79%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/test/test_voxel_generator.cpp (98%) rename perception/{lidar_transfusion => autoware_lidar_transfusion}/test/test_voxel_generator.hpp (92%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5f7e43f74adba..30b5982d0dd25 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -105,7 +105,9 @@ map/map_projection_loader/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp mas map/map_tf_generator/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp map/util/lanelet2_map_preprocessor/** anh.nguyen.2@tier4.jp kento.yabuuchi.2@tier4.jp masahiro.sakamoto@tier4.jp ryu.yamamoto@tier4.jp shintaro.sakoda@tier4.jp taiki.yamada@tier4.jp yamato.ando@tier4.jp perception/autoware_crosswalk_traffic_light_estimator/** satoshi.ota@tier4.jp shunsuke.miura@tier4.jp tao.zhong@tier4.jp +perception/autoware_lidar_transfusion/** amadeusz.szymko.2@tier4.jp kenzo.lobos@tier4.jp satoshi.tanaka@tier4.jp perception/autoware_map_based_prediction/** kotaro.uetake@tier4.jp kyoichi.sugahara@tier4.jp takayuki.murooka@tier4.jp tomoya.kimura@tier4.jp yoshi.ri@tier4.jp +perception/autoware_multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/autoware_object_merger/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/autoware_object_range_splitter/** yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/autoware_object_velocity_splitter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp yoshi.ri@tier4.jp @@ -128,8 +130,6 @@ perception/lidar_apollo_instance_segmentation/** yoshi.ri@tier4.jp yukihiro.sait perception/lidar_apollo_segmentation_tvm/** ambroise.vincent@arm.com yoshi.ri@tier4.jp perception/lidar_apollo_segmentation_tvm_nodes/** ambroise.vincent@arm.com yoshi.ri@tier4.jp perception/lidar_centerpoint/** kenzo.lobos@tier4.jp koji.minoda@tier4.jp -perception/lidar_transfusion/** amadeusz.szymko.2@tier4.jp kenzo.lobos@tier4.jp satoshi.tanaka@tier4.jp -perception/autoware_multi_object_tracker/** taekjin.lee@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/occupancy_grid_map_outlier_filter/** abrahammonrroy@yahoo.com yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/probabilistic_occupancy_grid_map/** mamoru.sobue@tier4.jp yoshi.ri@tier4.jp yukihiro.saito@tier4.jp perception/radar_tracks_msgs_converter/** satoshi.tanaka@tier4.jp shunsuke.miura@tier4.jp taekjin.lee@tier4.jp yoshi.ri@tier4.jp diff --git a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_dnn_detector.launch.xml b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_dnn_detector.launch.xml index 98e8ec7c8ed4b..f13edf5e52dff 100644 --- a/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_dnn_detector.launch.xml +++ b/launch/tier4_perception_launch/launch/object_recognition/detection/detector/lidar_dnn_detector.launch.xml @@ -17,10 +17,10 @@ - + - + diff --git a/perception/lidar_transfusion/CMakeLists.txt b/perception/autoware_lidar_transfusion/CMakeLists.txt similarity index 88% rename from perception/lidar_transfusion/CMakeLists.txt rename to perception/autoware_lidar_transfusion/CMakeLists.txt index 15c89beb15d3e..c3a56f883fbe5 100644 --- a/perception/lidar_transfusion/CMakeLists.txt +++ b/perception/autoware_lidar_transfusion/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.14) -project(lidar_transfusion) +project(autoware_lidar_transfusion) find_package(autoware_cmake REQUIRED) autoware_package() @@ -82,7 +82,7 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) set(CUDA_NVCC_FLAGS "-g -G") endif() - ament_auto_add_library(transfusion_lib SHARED + ament_auto_add_library(${PROJECT_NAME}_lib SHARED lib/detection_class_remapper.cpp lib/network/network_trt.cpp lib/postprocess/non_maximum_suppression.cpp @@ -92,23 +92,23 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) lib/transfusion_trt.cpp ) - cuda_add_library(transfusion_cuda_lib SHARED + cuda_add_library(${PROJECT_NAME}_cuda_lib SHARED lib/postprocess/circle_nms_kernel.cu lib/postprocess/postprocess_kernel.cu lib/preprocess/preprocess_kernel.cu ) - target_link_libraries(transfusion_lib + target_link_libraries(${PROJECT_NAME}_lib ${NVINFER} ${NVONNXPARSER} ${CUDA_LIBRARIES} ${CUBLAS_LIBRARIES} ${CUDA_curand_LIBRARY} ${CUDNN_LIBRARY} - transfusion_cuda_lib + ${PROJECT_NAME}_cuda_lib ) - target_include_directories(transfusion_lib + target_include_directories(${PROJECT_NAME}_lib PUBLIC $ $ @@ -116,26 +116,26 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) # To suppress unknown-pragmas error. The root-cause is CUB library in CUDA 11.6. # This issue was fixed by https://github.com/NVIDIA/cub/commit/7d608bf1dc14553e2fb219eabeed80b76621b6fe - target_include_directories(transfusion_lib + target_include_directories(${PROJECT_NAME}_lib SYSTEM PUBLIC ${CUDA_INCLUDE_DIRS} ) - ament_auto_add_library(lidar_transfusion_component SHARED + ament_auto_add_library(${PROJECT_NAME}_component SHARED src/lidar_transfusion_node.cpp ) - target_link_libraries(lidar_transfusion_component - transfusion_lib + target_link_libraries(${PROJECT_NAME}_component + ${PROJECT_NAME}_lib ) - rclcpp_components_register_node(lidar_transfusion_component - PLUGIN "lidar_transfusion::LidarTransfusionNode" - EXECUTABLE lidar_transfusion_node + rclcpp_components_register_node(${PROJECT_NAME}_component + PLUGIN "autoware::lidar_transfusion::LidarTransfusionNode" + EXECUTABLE ${PROJECT_NAME}_node ) install( - TARGETS transfusion_cuda_lib + TARGETS ${PROJECT_NAME}_cuda_lib DESTINATION lib ) @@ -168,7 +168,7 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) # ${test_preprocess_kernel_SOURCE_DIR} # ) # target_link_libraries(test_preprocess_kernel - # transfusion_cuda_lib + # ${PROJECT_NAME}_cuda_lib # gtest # gtest_main # ) @@ -185,7 +185,7 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) # ${test_postprocess_kernel_SOURCE_DIR} # ) # target_link_libraries(test_postprocess_kernel - # transfusion_cuda_lib + # ${PROJECT_NAME}_cuda_lib # gtest # gtest_main # ) diff --git a/perception/lidar_transfusion/README.md b/perception/autoware_lidar_transfusion/README.md similarity index 84% rename from perception/lidar_transfusion/README.md rename to perception/autoware_lidar_transfusion/README.md index 6745cc1f7d219..4a55babbcba9f 100644 --- a/perception/lidar_transfusion/README.md +++ b/perception/autoware_lidar_transfusion/README.md @@ -1,8 +1,8 @@ -# lidar_transfusion +# autoware_lidar_transfusion ## Purpose -The `lidar_transfusion` package is used for 3D object detection based on lidar data (x, y, z, intensity). +The `autoware_lidar_transfusion` package is used for 3D object detection based on lidar data (x, y, z, intensity). ## Inner-workings / Algorithms @@ -34,27 +34,27 @@ We trained the models using . ### TransFusion -{{ json_to_markdown("perception/lidar_transfusion/schema/transfusion.schema.json") }} +{{ json_to_markdown("perception/autoware_lidar_transfusion/schema/transfusion.schema.json") }} ### Detection class remapper -{{ json_to_markdown("perception/lidar_transfusion/schema/detection_class_remapper.schema.json") }} +{{ json_to_markdown("perception/autoware_lidar_transfusion/schema/detection_class_remapper.schema.json") }} ### The `build_only` option -The `lidar_transfusion` node has `build_only` option to build the TensorRT engine file from the ONNX file. +The `autoware_lidar_transfusion` node has `build_only` option to build the TensorRT engine file from the ONNX file. Although it is preferred to move all the ROS parameters in `.param.yaml` file in Autoware Universe, the `build_only` option is not moved to the `.param.yaml` file for now, because it may be used as a flag to execute the build as a pre-task. You can execute with the following command: ```bash -ros2 launch lidar_transfusion lidar_transfusion.launch.xml build_only:=true +ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml build_only:=true ``` ### The `log_level` option -The default logging severity level for `lidar_transfusion` is `info`. For debugging purposes, the developer may decrease severity level using `log_level` parameter: +The default logging severity level for `autoware_lidar_transfusion` is `info`. For debugging purposes, the developer may decrease severity level using `log_level` parameter: ```bash -ros2 launch lidar_transfusion lidar_transfusion.launch.xml log_level:=debug +ros2 launch autoware_lidar_transfusion lidar_transfusion.launch.xml log_level:=debug ``` ## Assumptions / Known limits diff --git a/perception/lidar_transfusion/config/detection_class_remapper.param.yaml b/perception/autoware_lidar_transfusion/config/detection_class_remapper.param.yaml similarity index 100% rename from perception/lidar_transfusion/config/detection_class_remapper.param.yaml rename to perception/autoware_lidar_transfusion/config/detection_class_remapper.param.yaml diff --git a/perception/lidar_transfusion/config/transfusion.param.yaml b/perception/autoware_lidar_transfusion/config/transfusion.param.yaml similarity index 100% rename from perception/lidar_transfusion/config/transfusion.param.yaml rename to perception/autoware_lidar_transfusion/config/transfusion.param.yaml diff --git a/perception/lidar_transfusion/include/lidar_transfusion/cuda_utils.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/cuda_utils.hpp similarity index 96% rename from perception/lidar_transfusion/include/lidar_transfusion/cuda_utils.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/cuda_utils.hpp index 5c25a936d5392..17a7c7ee9c165 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/cuda_utils.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/cuda_utils.hpp @@ -39,8 +39,8 @@ * https://creativecommons.org/publicdomain/zero/1.0/deed.en */ -#ifndef LIDAR_TRANSFUSION__CUDA_UTILS_HPP_ -#define LIDAR_TRANSFUSION__CUDA_UTILS_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__CUDA_UTILS_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__CUDA_UTILS_HPP_ #include @@ -123,4 +123,4 @@ void clear_async(T * ptr, size_t num_elem, cudaStream_t stream) } // namespace cuda -#endif // LIDAR_TRANSFUSION__CUDA_UTILS_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__CUDA_UTILS_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/detection_class_remapper.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/detection_class_remapper.hpp similarity index 82% rename from perception/lidar_transfusion/include/lidar_transfusion/detection_class_remapper.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/detection_class_remapper.hpp index ace7dc5ff3405..6095472affe92 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/detection_class_remapper.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/detection_class_remapper.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__DETECTION_CLASS_REMAPPER_HPP_ -#define LIDAR_TRANSFUSION__DETECTION_CLASS_REMAPPER_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__DETECTION_CLASS_REMAPPER_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__DETECTION_CLASS_REMAPPER_HPP_ #include @@ -24,7 +24,7 @@ #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class DetectionClassRemapper @@ -42,6 +42,6 @@ class DetectionClassRemapper int num_labels_; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__DETECTION_CLASS_REMAPPER_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__DETECTION_CLASS_REMAPPER_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/lidar_transfusion_node.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/lidar_transfusion_node.hpp similarity index 78% rename from perception/lidar_transfusion/include/lidar_transfusion/lidar_transfusion_node.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/lidar_transfusion_node.hpp index a82013fac6ce7..e19d2d49af998 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/lidar_transfusion_node.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/lidar_transfusion_node.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__LIDAR_TRANSFUSION_NODE_HPP_ -#define LIDAR_TRANSFUSION__LIDAR_TRANSFUSION_NODE_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__LIDAR_TRANSFUSION_NODE_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__LIDAR_TRANSFUSION_NODE_HPP_ -#include "lidar_transfusion/detection_class_remapper.hpp" -#include "lidar_transfusion/postprocess/non_maximum_suppression.hpp" -#include "lidar_transfusion/preprocess/pointcloud_densification.hpp" -#include "lidar_transfusion/transfusion_trt.hpp" -#include "lidar_transfusion/visibility_control.hpp" +#include "autoware/lidar_transfusion/detection_class_remapper.hpp" +#include "autoware/lidar_transfusion/postprocess/non_maximum_suppression.hpp" +#include "autoware/lidar_transfusion/preprocess/pointcloud_densification.hpp" +#include "autoware/lidar_transfusion/transfusion_trt.hpp" +#include "autoware/lidar_transfusion/visibility_control.hpp" #include #include @@ -36,7 +36,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class LIDAR_TRANSFUSION_PUBLIC LidarTransfusionNode : public rclcpp::Node @@ -68,6 +68,6 @@ class LIDAR_TRANSFUSION_PUBLIC LidarTransfusionNode : public rclcpp::Node std::unique_ptr debug_publisher_ptr_{nullptr}; std::unique_ptr published_time_pub_{nullptr}; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__LIDAR_TRANSFUSION_NODE_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__LIDAR_TRANSFUSION_NODE_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/network/network_trt.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/network/network_trt.hpp similarity index 86% rename from perception/lidar_transfusion/include/lidar_transfusion/network/network_trt.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/network/network_trt.hpp index 3f8f32e346b0a..d237361a436e2 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/network/network_trt.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/network/network_trt.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__NETWORK__NETWORK_TRT_HPP_ -#define LIDAR_TRANSFUSION__NETWORK__NETWORK_TRT_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__NETWORK__NETWORK_TRT_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__NETWORK__NETWORK_TRT_HPP_ -#include "lidar_transfusion/transfusion_config.hpp" -#include "lidar_transfusion/utils.hpp" +#include "autoware/lidar_transfusion/transfusion_config.hpp" +#include "autoware/lidar_transfusion/utils.hpp" #include @@ -29,7 +29,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { struct ProfileDimension @@ -82,6 +82,6 @@ class NetworkTRT std::array in_profile_dims_; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__NETWORK__NETWORK_TRT_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__NETWORK__NETWORK_TRT_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/postprocess/circle_nms_kernel.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/postprocess/circle_nms_kernel.hpp similarity index 72% rename from perception/lidar_transfusion/include/lidar_transfusion/postprocess/circle_nms_kernel.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/postprocess/circle_nms_kernel.hpp index e231482652b98..653bc281c7086 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/postprocess/circle_nms_kernel.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/postprocess/circle_nms_kernel.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__POSTPROCESS__CIRCLE_NMS_KERNEL_HPP_ -#define LIDAR_TRANSFUSION__POSTPROCESS__CIRCLE_NMS_KERNEL_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__POSTPROCESS__CIRCLE_NMS_KERNEL_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__POSTPROCESS__CIRCLE_NMS_KERNEL_HPP_ -#include "lidar_transfusion/utils.hpp" +#include "autoware/lidar_transfusion/utils.hpp" #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { // Non-maximum suppression (NMS) uses the distance on the xy plane instead of // intersection over union (IoU) to suppress overlapped objects. @@ -27,6 +27,6 @@ std::size_t circleNMS( thrust::device_vector & boxes3d, const float distance_threshold, thrust::device_vector & keep_mask, cudaStream_t stream); -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__POSTPROCESS__CIRCLE_NMS_KERNEL_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__POSTPROCESS__CIRCLE_NMS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/postprocess/non_maximum_suppression.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/postprocess/non_maximum_suppression.hpp similarity index 83% rename from perception/lidar_transfusion/include/lidar_transfusion/postprocess/non_maximum_suppression.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/postprocess/non_maximum_suppression.hpp index daf2cc7c1fac1..9f07d2448fcae 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/postprocess/non_maximum_suppression.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/postprocess/non_maximum_suppression.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__POSTPROCESS__NON_MAXIMUM_SUPPRESSION_HPP_ -#define LIDAR_TRANSFUSION__POSTPROCESS__NON_MAXIMUM_SUPPRESSION_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__POSTPROCESS__NON_MAXIMUM_SUPPRESSION_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__POSTPROCESS__NON_MAXIMUM_SUPPRESSION_HPP_ -#include "lidar_transfusion/ros_utils.hpp" +#include "autoware/lidar_transfusion/ros_utils.hpp" #include @@ -24,7 +24,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { using autoware_perception_msgs::msg::DetectedObject; @@ -75,6 +75,6 @@ class NonMaximumSuppression std::vector target_class_mask_{}; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__POSTPROCESS__NON_MAXIMUM_SUPPRESSION_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__POSTPROCESS__NON_MAXIMUM_SUPPRESSION_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/postprocess/postprocess_kernel.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/postprocess/postprocess_kernel.hpp similarity index 74% rename from perception/lidar_transfusion/include/lidar_transfusion/postprocess/postprocess_kernel.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/postprocess/postprocess_kernel.hpp index 01435424aa248..ed677bc84b867 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/postprocess/postprocess_kernel.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/postprocess/postprocess_kernel.hpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__POSTPROCESS__POSTPROCESS_KERNEL_HPP_ -#define LIDAR_TRANSFUSION__POSTPROCESS__POSTPROCESS_KERNEL_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__POSTPROCESS__POSTPROCESS_KERNEL_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__POSTPROCESS__POSTPROCESS_KERNEL_HPP_ -#include "lidar_transfusion/transfusion_config.hpp" -#include "lidar_transfusion/utils.hpp" +#include "autoware/lidar_transfusion/transfusion_config.hpp" +#include "autoware/lidar_transfusion/utils.hpp" #include #include @@ -24,7 +24,7 @@ #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class PostprocessCuda @@ -45,6 +45,6 @@ class PostprocessCuda thrust::device_vector yaw_norm_thresholds_d_; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__POSTPROCESS__POSTPROCESS_KERNEL_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__POSTPROCESS__POSTPROCESS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/preprocess/pointcloud_densification.hpp similarity index 88% rename from perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/preprocess/pointcloud_densification.hpp index 6ac0a6544389f..2d03978497f72 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/pointcloud_densification.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/preprocess/pointcloud_densification.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__PREPROCESS__POINTCLOUD_DENSIFICATION_HPP_ -#define LIDAR_TRANSFUSION__PREPROCESS__POINTCLOUD_DENSIFICATION_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__PREPROCESS__POINTCLOUD_DENSIFICATION_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__PREPROCESS__POINTCLOUD_DENSIFICATION_HPP_ -#include "lidar_transfusion/cuda_utils.hpp" +#include "autoware/lidar_transfusion/cuda_utils.hpp" #include #include @@ -29,7 +29,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class DensificationParam @@ -96,6 +96,6 @@ class PointCloudDensification cudaStream_t stream_; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__PREPROCESS__POINTCLOUD_DENSIFICATION_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__PREPROCESS__POINTCLOUD_DENSIFICATION_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/preprocess/preprocess_kernel.hpp similarity index 83% rename from perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/preprocess/preprocess_kernel.hpp index 592f09c2d288a..1f5fe3ae3907f 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/preprocess_kernel.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/preprocess/preprocess_kernel.hpp @@ -28,16 +28,16 @@ * limitations under the License. */ -#ifndef LIDAR_TRANSFUSION__PREPROCESS__PREPROCESS_KERNEL_HPP_ -#define LIDAR_TRANSFUSION__PREPROCESS__PREPROCESS_KERNEL_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__PREPROCESS__PREPROCESS_KERNEL_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__PREPROCESS__PREPROCESS_KERNEL_HPP_ -#include "lidar_transfusion/cuda_utils.hpp" -#include "lidar_transfusion/transfusion_config.hpp" -#include "lidar_transfusion/utils.hpp" +#include "autoware/lidar_transfusion/cuda_utils.hpp" +#include "autoware/lidar_transfusion/transfusion_config.hpp" +#include "autoware/lidar_transfusion/utils.hpp" #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class PreprocessCuda @@ -68,6 +68,6 @@ class PreprocessCuda unsigned int mask_size_; unsigned int voxels_size_; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__PREPROCESS__PREPROCESS_KERNEL_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__PREPROCESS__PREPROCESS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/preprocess/voxel_generator.hpp similarity index 76% rename from perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/preprocess/voxel_generator.hpp index f0d253ee28755..19bd8c14787de 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/preprocess/voxel_generator.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/preprocess/voxel_generator.hpp @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__PREPROCESS__VOXEL_GENERATOR_HPP_ -#define LIDAR_TRANSFUSION__PREPROCESS__VOXEL_GENERATOR_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__PREPROCESS__VOXEL_GENERATOR_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__PREPROCESS__VOXEL_GENERATOR_HPP_ -#include "lidar_transfusion/cuda_utils.hpp" -#include "lidar_transfusion/preprocess/pointcloud_densification.hpp" -#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" -#include "lidar_transfusion/ros_utils.hpp" -#include "lidar_transfusion/transfusion_config.hpp" +#include "autoware/lidar_transfusion/cuda_utils.hpp" +#include "autoware/lidar_transfusion/preprocess/pointcloud_densification.hpp" +#include "autoware/lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include "autoware/lidar_transfusion/ros_utils.hpp" +#include "autoware/lidar_transfusion/transfusion_config.hpp" #ifdef ROS_DISTRO_GALACTIC #include @@ -36,7 +36,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { constexpr size_t AFF_MAT_SIZE = 16; // 4x4 matrix constexpr size_t MAX_CLOUD_STEP_SIZE = sizeof(autoware_point_types::PointXYZIRCAEDT); @@ -67,6 +67,6 @@ class VoxelGenerator bool is_initialized_{false}; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__PREPROCESS__VOXEL_GENERATOR_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__PREPROCESS__VOXEL_GENERATOR_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/ros_utils.hpp similarity index 93% rename from perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/ros_utils.hpp index cbfc4e87b1610..37b364ecf8a9d 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/ros_utils.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/ros_utils.hpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__ROS_UTILS_HPP_ -#define LIDAR_TRANSFUSION__ROS_UTILS_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__ROS_UTILS_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__ROS_UTILS_HPP_ -#include "lidar_transfusion/utils.hpp" +#include "autoware/lidar_transfusion/utils.hpp" #include @@ -41,7 +41,7 @@ CHECK_OFFSET(offset, structure, field); \ CHECK_TYPE(type, structure, field) -namespace lidar_transfusion +namespace autoware::lidar_transfusion { using sensor_msgs::msg::PointField; @@ -102,6 +102,6 @@ void box3DToDetectedObject( uint8_t getSemanticType(const std::string & class_name); -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__ROS_UTILS_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__ROS_UTILS_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/transfusion_config.hpp similarity index 95% rename from perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/transfusion_config.hpp index 0d0148d2f6c17..363ee17a0d6e0 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_config.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/transfusion_config.hpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__TRANSFUSION_CONFIG_HPP_ -#define LIDAR_TRANSFUSION__TRANSFUSION_CONFIG_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__TRANSFUSION_CONFIG_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__TRANSFUSION_CONFIG_HPP_ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class TransfusionConfig @@ -165,6 +165,6 @@ class TransfusionConfig std::size_t max_coors_dim_size_{num_point_values_}; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__TRANSFUSION_CONFIG_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__TRANSFUSION_CONFIG_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_trt.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/transfusion_trt.hpp similarity index 80% rename from perception/lidar_transfusion/include/lidar_transfusion/transfusion_trt.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/transfusion_trt.hpp index 0a9ea413dc30d..4ba3474fc1d72 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/transfusion_trt.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/transfusion_trt.hpp @@ -12,17 +12,17 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__TRANSFUSION_TRT_HPP_ -#define LIDAR_TRANSFUSION__TRANSFUSION_TRT_HPP_ - -#include "lidar_transfusion/cuda_utils.hpp" -#include "lidar_transfusion/network/network_trt.hpp" -#include "lidar_transfusion/postprocess/postprocess_kernel.hpp" -#include "lidar_transfusion/preprocess/pointcloud_densification.hpp" -#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" -#include "lidar_transfusion/preprocess/voxel_generator.hpp" -#include "lidar_transfusion/utils.hpp" -#include "lidar_transfusion/visibility_control.hpp" +#ifndef AUTOWARE__LIDAR_TRANSFUSION__TRANSFUSION_TRT_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__TRANSFUSION_TRT_HPP_ + +#include "autoware/lidar_transfusion/cuda_utils.hpp" +#include "autoware/lidar_transfusion/network/network_trt.hpp" +#include "autoware/lidar_transfusion/postprocess/postprocess_kernel.hpp" +#include "autoware/lidar_transfusion/preprocess/pointcloud_densification.hpp" +#include "autoware/lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include "autoware/lidar_transfusion/preprocess/voxel_generator.hpp" +#include "autoware/lidar_transfusion/utils.hpp" +#include "autoware/lidar_transfusion/visibility_control.hpp" #include @@ -37,7 +37,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class NetworkParam @@ -109,6 +109,6 @@ class LIDAR_TRANSFUSION_PUBLIC TransfusionTRT cuda::unique_ptr dir_cls_output_d_{nullptr}; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__TRANSFUSION_TRT_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__TRANSFUSION_TRT_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/utils.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/utils.hpp similarity index 84% rename from perception/lidar_transfusion/include/lidar_transfusion/utils.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/utils.hpp index cc40e55851738..feea2216c5f78 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/utils.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/utils.hpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__UTILS_HPP_ -#define LIDAR_TRANSFUSION__UTILS_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__UTILS_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__UTILS_HPP_ #include #include #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { struct Box3D @@ -52,6 +52,6 @@ unsigned int divup(const T1 a, const T2 b) return (a + b - 1) / b; } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion -#endif // LIDAR_TRANSFUSION__UTILS_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__UTILS_HPP_ diff --git a/perception/lidar_transfusion/include/lidar_transfusion/visibility_control.hpp b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/visibility_control.hpp similarity index 89% rename from perception/lidar_transfusion/include/lidar_transfusion/visibility_control.hpp rename to perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/visibility_control.hpp index aeab20906628a..fe8bea1ae1403 100644 --- a/perception/lidar_transfusion/include/lidar_transfusion/visibility_control.hpp +++ b/perception/autoware_lidar_transfusion/include/autoware/lidar_transfusion/visibility_control.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef LIDAR_TRANSFUSION__VISIBILITY_CONTROL_HPP_ -#define LIDAR_TRANSFUSION__VISIBILITY_CONTROL_HPP_ +#ifndef AUTOWARE__LIDAR_TRANSFUSION__VISIBILITY_CONTROL_HPP_ +#define AUTOWARE__LIDAR_TRANSFUSION__VISIBILITY_CONTROL_HPP_ //////////////////////////////////////////////////////////////////////////////// #if defined(__WIN32) @@ -34,4 +34,4 @@ #error "Unsupported Build Configuration" #endif -#endif // LIDAR_TRANSFUSION__VISIBILITY_CONTROL_HPP_ +#endif // AUTOWARE__LIDAR_TRANSFUSION__VISIBILITY_CONTROL_HPP_ diff --git a/perception/lidar_transfusion/launch/lidar_transfusion.launch.xml b/perception/autoware_lidar_transfusion/launch/lidar_transfusion.launch.xml similarity index 79% rename from perception/lidar_transfusion/launch/lidar_transfusion.launch.xml rename to perception/autoware_lidar_transfusion/launch/lidar_transfusion.launch.xml index 492eb8c4d59b7..c14802dcddc55 100644 --- a/perception/lidar_transfusion/launch/lidar_transfusion.launch.xml +++ b/perception/autoware_lidar_transfusion/launch/lidar_transfusion.launch.xml @@ -4,8 +4,8 @@ - - + + @@ -14,7 +14,7 @@ - + @@ -26,7 +26,7 @@ - + diff --git a/perception/lidar_transfusion/lib/detection_class_remapper.cpp b/perception/autoware_lidar_transfusion/lib/detection_class_remapper.cpp similarity index 94% rename from perception/lidar_transfusion/lib/detection_class_remapper.cpp rename to perception/autoware_lidar_transfusion/lib/detection_class_remapper.cpp index e093637402448..08bdc65e666de 100644 --- a/perception/lidar_transfusion/lib/detection_class_remapper.cpp +++ b/perception/autoware_lidar_transfusion/lib/detection_class_remapper.cpp @@ -12,9 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { void DetectionClassRemapper::setParameters( @@ -68,4 +68,4 @@ void DetectionClassRemapper::mapClasses(autoware_perception_msgs::msg::DetectedO } } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/lib/network/network_trt.cpp b/perception/autoware_lidar_transfusion/lib/network/network_trt.cpp similarity index 98% rename from perception/lidar_transfusion/lib/network/network_trt.cpp rename to perception/autoware_lidar_transfusion/lib/network/network_trt.cpp index a36890facceec..3eacf005cff4e 100644 --- a/perception/lidar_transfusion/lib/network/network_trt.cpp +++ b/perception/autoware_lidar_transfusion/lib/network/network_trt.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/network/network_trt.hpp" +#include "autoware/lidar_transfusion/network/network_trt.hpp" #include @@ -20,7 +20,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { std::ostream & operator<<(std::ostream & os, const ProfileDimension & profile) @@ -329,4 +329,4 @@ nvinfer1::Dims NetworkTRT::validateTensorShape(NetworkIO name, const std::vector return tensor_shape; } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/lib/postprocess/circle_nms_kernel.cu b/perception/autoware_lidar_transfusion/lib/postprocess/circle_nms_kernel.cu similarity index 94% rename from perception/lidar_transfusion/lib/postprocess/circle_nms_kernel.cu rename to perception/autoware_lidar_transfusion/lib/postprocess/circle_nms_kernel.cu index dcb60831825bb..2328ca53af530 100644 --- a/perception/lidar_transfusion/lib/postprocess/circle_nms_kernel.cu +++ b/perception/autoware_lidar_transfusion/lib/postprocess/circle_nms_kernel.cu @@ -21,9 +21,9 @@ Written by Shaoshuai Shi All Rights Reserved 2019-2020. */ -#include "lidar_transfusion/cuda_utils.hpp" -#include "lidar_transfusion/postprocess/circle_nms_kernel.hpp" -#include "lidar_transfusion/utils.hpp" +#include "autoware/lidar_transfusion/cuda_utils.hpp" +#include "autoware/lidar_transfusion/postprocess/circle_nms_kernel.hpp" +#include "autoware/lidar_transfusion/utils.hpp" #include @@ -32,7 +32,7 @@ namespace const std::size_t THREADS_PER_BLOCK_NMS = 16; } // namespace -namespace lidar_transfusion +namespace autoware::lidar_transfusion { __device__ inline float dist2dPow(const Box3D * a, const Box3D * b) @@ -141,4 +141,4 @@ std::size_t circleNMS( return num_to_keep; } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp b/perception/autoware_lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp similarity index 95% rename from perception/lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp rename to perception/autoware_lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp index dd12c52970d38..6e563f706e3b2 100644 --- a/perception/lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp +++ b/perception/autoware_lidar_transfusion/lib/postprocess/non_maximum_suppression.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/postprocess/non_maximum_suppression.hpp" +#include "autoware/lidar_transfusion/postprocess/non_maximum_suppression.hpp" #include #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { void NonMaximumSuppression::setParameters(const NMSParams & params) @@ -101,4 +101,4 @@ std::vector NonMaximumSuppression::apply( return output_objects; } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/lib/postprocess/postprocess_kernel.cu b/perception/autoware_lidar_transfusion/lib/postprocess/postprocess_kernel.cu similarity index 95% rename from perception/lidar_transfusion/lib/postprocess/postprocess_kernel.cu rename to perception/autoware_lidar_transfusion/lib/postprocess/postprocess_kernel.cu index bca23e9961b40..fbdb89d59b3d1 100644 --- a/perception/lidar_transfusion/lib/postprocess/postprocess_kernel.cu +++ b/perception/autoware_lidar_transfusion/lib/postprocess/postprocess_kernel.cu @@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/postprocess/circle_nms_kernel.hpp" -#include "lidar_transfusion/postprocess/postprocess_kernel.hpp" +#include "autoware/lidar_transfusion/postprocess/circle_nms_kernel.hpp" +#include "autoware/lidar_transfusion/postprocess/postprocess_kernel.hpp" #include #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { const size_t THREADS_PER_BLOCK = 256; @@ -142,4 +142,4 @@ cudaError_t PostprocessCuda::generateDetectedBoxes3D_launch( return cudaGetLastError(); } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp b/perception/autoware_lidar_transfusion/lib/preprocess/pointcloud_densification.cpp similarity index 95% rename from perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp rename to perception/autoware_lidar_transfusion/lib/preprocess/pointcloud_densification.cpp index c13423f2d24d8..17491ede058b4 100644 --- a/perception/lidar_transfusion/lib/preprocess/pointcloud_densification.cpp +++ b/perception/autoware_lidar_transfusion/lib/preprocess/pointcloud_densification.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/preprocess/pointcloud_densification.hpp" +#include "autoware/lidar_transfusion/preprocess/pointcloud_densification.hpp" #include @@ -55,7 +55,7 @@ Eigen::Affine3f transformToEigen(const geometry_msgs::msg::Transform & t) } // namespace -namespace lidar_transfusion +namespace autoware::lidar_transfusion { PointCloudDensification::PointCloudDensification( @@ -113,4 +113,4 @@ void PointCloudDensification::dequeue() } } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu b/perception/autoware_lidar_transfusion/lib/preprocess/preprocess_kernel.cu similarity index 97% rename from perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu rename to perception/autoware_lidar_transfusion/lib/preprocess/preprocess_kernel.cu index 48bb4eb9332a8..1b18b3dbcc006 100644 --- a/perception/lidar_transfusion/lib/preprocess/preprocess_kernel.cu +++ b/perception/autoware_lidar_transfusion/lib/preprocess/preprocess_kernel.cu @@ -28,12 +28,12 @@ * limitations under the License. */ -#include "lidar_transfusion/cuda_utils.hpp" -#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include "autoware/lidar_transfusion/cuda_utils.hpp" +#include "autoware/lidar_transfusion/preprocess/preprocess_kernel.hpp" #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { PreprocessCuda::PreprocessCuda(const TransfusionConfig & config, cudaStream_t & stream) @@ -218,4 +218,4 @@ cudaError_t PreprocessCuda::generateSweepPoints_launch( return err; } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp b/perception/autoware_lidar_transfusion/lib/preprocess/voxel_generator.cpp similarity index 95% rename from perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp rename to perception/autoware_lidar_transfusion/lib/preprocess/voxel_generator.cpp index cb8bac984aef3..203a556d9057a 100644 --- a/perception/lidar_transfusion/lib/preprocess/voxel_generator.cpp +++ b/perception/autoware_lidar_transfusion/lib/preprocess/voxel_generator.cpp @@ -12,15 +12,15 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/preprocess/voxel_generator.hpp" +#include "autoware/lidar_transfusion/preprocess/voxel_generator.hpp" -#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include "autoware/lidar_transfusion/preprocess/preprocess_kernel.hpp" #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { VoxelGenerator::VoxelGenerator( @@ -120,4 +120,4 @@ std::tuple VoxelGenerator::getFiel } throw std::runtime_error("Missing field: " + field_name); } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/lib/ros_utils.cpp b/perception/autoware_lidar_transfusion/lib/ros_utils.cpp similarity index 95% rename from perception/lidar_transfusion/lib/ros_utils.cpp rename to perception/autoware_lidar_transfusion/lib/ros_utils.cpp index ef5c45c339b64..dce4028759de5 100644 --- a/perception/lidar_transfusion/lib/ros_utils.cpp +++ b/perception/autoware_lidar_transfusion/lib/ros_utils.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/ros_utils.hpp" +#include "autoware/lidar_transfusion/ros_utils.hpp" #include #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { using Label = autoware_perception_msgs::msg::ObjectClassification; @@ -80,4 +80,4 @@ uint8_t getSemanticType(const std::string & class_name) } } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/lib/transfusion_trt.cpp b/perception/autoware_lidar_transfusion/lib/transfusion_trt.cpp similarity index 96% rename from perception/lidar_transfusion/lib/transfusion_trt.cpp rename to perception/autoware_lidar_transfusion/lib/transfusion_trt.cpp index d940b83c12cb4..94760d4d91720 100644 --- a/perception/lidar_transfusion/lib/transfusion_trt.cpp +++ b/perception/autoware_lidar_transfusion/lib/transfusion_trt.cpp @@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/transfusion_trt.hpp" +#include "autoware/lidar_transfusion/transfusion_trt.hpp" -#include "lidar_transfusion/preprocess/preprocess_kernel.hpp" -#include "lidar_transfusion/transfusion_config.hpp" +#include "autoware/lidar_transfusion/preprocess/preprocess_kernel.hpp" +#include "autoware/lidar_transfusion/transfusion_config.hpp" #include @@ -24,7 +24,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { TransfusionTRT::TransfusionTRT( @@ -203,4 +203,4 @@ bool TransfusionTRT::postprocess(std::vector & det_boxes3d) return true; } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion diff --git a/perception/lidar_transfusion/package.xml b/perception/autoware_lidar_transfusion/package.xml similarity index 96% rename from perception/lidar_transfusion/package.xml rename to perception/autoware_lidar_transfusion/package.xml index 3b495025b1c34..834afba1221ad 100644 --- a/perception/lidar_transfusion/package.xml +++ b/perception/autoware_lidar_transfusion/package.xml @@ -1,7 +1,7 @@ - lidar_transfusion + autoware_lidar_transfusion 1.0.0 The lidar_transfusion package Amadeusz Szymko diff --git a/perception/lidar_transfusion/schema/detection_class_remapper.schema.json b/perception/autoware_lidar_transfusion/schema/detection_class_remapper.schema.json similarity index 100% rename from perception/lidar_transfusion/schema/detection_class_remapper.schema.json rename to perception/autoware_lidar_transfusion/schema/detection_class_remapper.schema.json diff --git a/perception/lidar_transfusion/schema/transfusion.schema.json b/perception/autoware_lidar_transfusion/schema/transfusion.schema.json similarity index 100% rename from perception/lidar_transfusion/schema/transfusion.schema.json rename to perception/autoware_lidar_transfusion/schema/transfusion.schema.json diff --git a/perception/lidar_transfusion/src/lidar_transfusion_node.cpp b/perception/autoware_lidar_transfusion/src/lidar_transfusion_node.cpp similarity index 96% rename from perception/lidar_transfusion/src/lidar_transfusion_node.cpp rename to perception/autoware_lidar_transfusion/src/lidar_transfusion_node.cpp index a07e385208748..fae1cc97404da 100644 --- a/perception/lidar_transfusion/src/lidar_transfusion_node.cpp +++ b/perception/autoware_lidar_transfusion/src/lidar_transfusion_node.cpp @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/lidar_transfusion_node.hpp" +#include "autoware/lidar_transfusion/lidar_transfusion_node.hpp" -#include "lidar_transfusion/utils.hpp" +#include "autoware/lidar_transfusion/utils.hpp" -namespace lidar_transfusion +namespace autoware::lidar_transfusion { LidarTransfusionNode::LidarTransfusionNode(const rclcpp::NodeOptions & options) @@ -175,8 +175,8 @@ void LidarTransfusionNode::cloudCallback(const sensor_msgs::msg::PointCloud2::Co } } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion #include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(lidar_transfusion::LidarTransfusionNode) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::lidar_transfusion::LidarTransfusionNode) diff --git a/perception/lidar_transfusion/test/test_detection_class_remapper.cpp b/perception/autoware_lidar_transfusion/test/test_detection_class_remapper.cpp similarity index 96% rename from perception/lidar_transfusion/test/test_detection_class_remapper.cpp rename to perception/autoware_lidar_transfusion/test/test_detection_class_remapper.cpp index 6e7f896e44d2c..a9b5c8e83fbf7 100644 --- a/perception/lidar_transfusion/test/test_detection_class_remapper.cpp +++ b/perception/autoware_lidar_transfusion/test/test_detection_class_remapper.cpp @@ -12,13 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include +#include #include TEST(DetectionClassRemapperTest, MapClasses) { - lidar_transfusion::DetectionClassRemapper remapper; + autoware::lidar_transfusion::DetectionClassRemapper remapper; // Set up the parameters for the remapper // Labels: CAR, TRUCK, TRAILER diff --git a/perception/lidar_transfusion/test/test_nms.cpp b/perception/autoware_lidar_transfusion/test/test_nms.cpp similarity index 92% rename from perception/lidar_transfusion/test/test_nms.cpp rename to perception/autoware_lidar_transfusion/test/test_nms.cpp index b6f0ec8c31684..654cb56078c57 100644 --- a/perception/lidar_transfusion/test/test_nms.cpp +++ b/perception/autoware_lidar_transfusion/test/test_nms.cpp @@ -12,21 +12,21 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/postprocess/non_maximum_suppression.hpp" +#include "autoware/lidar_transfusion/postprocess/non_maximum_suppression.hpp" #include TEST(NonMaximumSuppressionTest, Apply) { - lidar_transfusion::NonMaximumSuppression nms; - lidar_transfusion::NMSParams params; + autoware::lidar_transfusion::NonMaximumSuppression nms; + autoware::lidar_transfusion::NMSParams params; params.search_distance_2d_ = 1.0; params.iou_threshold_ = 0.2; - params.nms_type_ = lidar_transfusion::NMS_TYPE::IoU_BEV; + params.nms_type_ = autoware::lidar_transfusion::NMS_TYPE::IoU_BEV; params.target_class_names_ = {"CAR"}; nms.setParameters(params); - std::vector input_objects(4); + std::vector input_objects(4); // Object 1 autoware_perception_msgs::msg::ObjectClassification obj1_classification; @@ -88,7 +88,8 @@ TEST(NonMaximumSuppressionTest, Apply) input_objects[3].shape.dimensions.x = 0.5; input_objects[3].shape.dimensions.y = 0.5; - std::vector output_objects = nms.apply(input_objects); + std::vector output_objects = + nms.apply(input_objects); // Assert the expected number of output objects EXPECT_EQ(output_objects.size(), 3); diff --git a/perception/lidar_transfusion/test/test_postprocess_kernel.cpp b/perception/autoware_lidar_transfusion/test/test_postprocess_kernel.cpp similarity index 99% rename from perception/lidar_transfusion/test/test_postprocess_kernel.cpp rename to perception/autoware_lidar_transfusion/test/test_postprocess_kernel.cpp index 1e01db5a8b3d7..85c408b93f4ca 100644 --- a/perception/lidar_transfusion/test/test_postprocess_kernel.cpp +++ b/perception/autoware_lidar_transfusion/test/test_postprocess_kernel.cpp @@ -19,7 +19,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { void PostprocessKernelTest::SetUp() @@ -290,7 +290,7 @@ TEST_F(PostprocessKernelTest, CircleNMSTest) EXPECT_EQ(1, det_boxes3d.size()); } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion int main(int argc, char ** argv) { diff --git a/perception/lidar_transfusion/test/test_postprocess_kernel.hpp b/perception/autoware_lidar_transfusion/test/test_postprocess_kernel.hpp similarity index 85% rename from perception/lidar_transfusion/test/test_postprocess_kernel.hpp rename to perception/autoware_lidar_transfusion/test/test_postprocess_kernel.hpp index 60fa7882ecc11..104f42ad9e75d 100644 --- a/perception/lidar_transfusion/test/test_postprocess_kernel.hpp +++ b/perception/autoware_lidar_transfusion/test/test_postprocess_kernel.hpp @@ -15,14 +15,14 @@ #ifndef TEST_POSTPROCESS_KERNEL_HPP_ #define TEST_POSTPROCESS_KERNEL_HPP_ -#include -#include +#include +#include #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class PostprocessKernelTest : public testing::Test @@ -43,6 +43,6 @@ class PostprocessKernelTest : public testing::Test cuda::unique_ptr dir_cls_output_d_{nullptr}; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion #endif // TEST_POSTPROCESS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/test/test_preprocess_kernel.cpp b/perception/autoware_lidar_transfusion/test/test_preprocess_kernel.cpp similarity index 97% rename from perception/lidar_transfusion/test/test_preprocess_kernel.cpp rename to perception/autoware_lidar_transfusion/test/test_preprocess_kernel.cpp index c1c2a824f0f53..1dbbf27d4a127 100644 --- a/perception/lidar_transfusion/test/test_preprocess_kernel.cpp +++ b/perception/autoware_lidar_transfusion/test/test_preprocess_kernel.cpp @@ -14,9 +14,9 @@ #include "test_preprocess_kernel.hpp" -#include "lidar_transfusion/cuda_utils.hpp" +#include "autoware/lidar_transfusion/cuda_utils.hpp" -#include +#include #include #include @@ -25,7 +25,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { void PreprocessKernelTest::SetUp() @@ -256,7 +256,7 @@ TEST_F(PreprocessKernelTest, VoxelOverflowTest) EXPECT_EQ(config_ptr_->max_voxels_, params_input); } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion int main(int argc, char ** argv) { diff --git a/perception/lidar_transfusion/test/test_preprocess_kernel.hpp b/perception/autoware_lidar_transfusion/test/test_preprocess_kernel.hpp similarity index 87% rename from perception/lidar_transfusion/test/test_preprocess_kernel.hpp rename to perception/autoware_lidar_transfusion/test/test_preprocess_kernel.hpp index 024fae5eae4b1..260e4261c3c42 100644 --- a/perception/lidar_transfusion/test/test_preprocess_kernel.hpp +++ b/perception/autoware_lidar_transfusion/test/test_preprocess_kernel.hpp @@ -15,14 +15,14 @@ #ifndef TEST_PREPROCESS_KERNEL_HPP_ #define TEST_PREPROCESS_KERNEL_HPP_ -#include -#include +#include +#include #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class PreprocessKernelTest : public testing::Test @@ -45,6 +45,6 @@ class PreprocessKernelTest : public testing::Test cuda::unique_ptr voxel_idxs_d_{nullptr}; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion #endif // TEST_PREPROCESS_KERNEL_HPP_ diff --git a/perception/lidar_transfusion/test/test_ros_utils.cpp b/perception/autoware_lidar_transfusion/test/test_ros_utils.cpp similarity index 79% rename from perception/lidar_transfusion/test/test_ros_utils.cpp rename to perception/autoware_lidar_transfusion/test/test_ros_utils.cpp index 15541e6353b42..ac9c4ca0378cb 100644 --- a/perception/lidar_transfusion/test/test_ros_utils.cpp +++ b/perception/autoware_lidar_transfusion/test/test_ros_utils.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "lidar_transfusion/ros_utils.hpp" +#include "autoware/lidar_transfusion/ros_utils.hpp" #include @@ -23,7 +23,7 @@ TEST(TestSuite, box3DToDetectedObject) // Test case 1: Test with valid label { - lidar_transfusion::Box3D box3d; + autoware::lidar_transfusion::Box3D box3d; box3d.label = 0; // CAR box3d.score = 0.8f; box3d.x = 1.0; @@ -35,7 +35,7 @@ TEST(TestSuite, box3DToDetectedObject) box3d.yaw = 0.5; autoware_perception_msgs::msg::DetectedObject obj; - lidar_transfusion::box3DToDetectedObject(box3d, class_names, obj); + autoware::lidar_transfusion::box3DToDetectedObject(box3d, class_names, obj); EXPECT_FLOAT_EQ(obj.existence_probability, 0.8f); EXPECT_EQ( @@ -53,12 +53,12 @@ TEST(TestSuite, box3DToDetectedObject) // Test case 2: Test with invalid label { - lidar_transfusion::Box3D box3d; + autoware::lidar_transfusion::Box3D box3d; box3d.score = 0.5f; box3d.label = 10; // Invalid autoware_perception_msgs::msg::DetectedObject obj; - lidar_transfusion::box3DToDetectedObject(box3d, class_names, obj); + autoware::lidar_transfusion::box3DToDetectedObject(box3d, class_names, obj); EXPECT_FLOAT_EQ(obj.existence_probability, 0.5f); EXPECT_EQ( @@ -72,28 +72,28 @@ TEST(TestSuite, box3DToDetectedObject) TEST(TestSuite, getSemanticType) { EXPECT_EQ( - lidar_transfusion::getSemanticType("CAR"), + autoware::lidar_transfusion::getSemanticType("CAR"), autoware_perception_msgs::msg::ObjectClassification::CAR); EXPECT_EQ( - lidar_transfusion::getSemanticType("TRUCK"), + autoware::lidar_transfusion::getSemanticType("TRUCK"), autoware_perception_msgs::msg::ObjectClassification::TRUCK); EXPECT_EQ( - lidar_transfusion::getSemanticType("BUS"), + autoware::lidar_transfusion::getSemanticType("BUS"), autoware_perception_msgs::msg::ObjectClassification::BUS); EXPECT_EQ( - lidar_transfusion::getSemanticType("TRAILER"), + autoware::lidar_transfusion::getSemanticType("TRAILER"), autoware_perception_msgs::msg::ObjectClassification::TRAILER); EXPECT_EQ( - lidar_transfusion::getSemanticType("MOTORCYCLE"), + autoware::lidar_transfusion::getSemanticType("MOTORCYCLE"), autoware_perception_msgs::msg::ObjectClassification::MOTORCYCLE); EXPECT_EQ( - lidar_transfusion::getSemanticType("BICYCLE"), + autoware::lidar_transfusion::getSemanticType("BICYCLE"), autoware_perception_msgs::msg::ObjectClassification::BICYCLE); EXPECT_EQ( - lidar_transfusion::getSemanticType("PEDESTRIAN"), + autoware::lidar_transfusion::getSemanticType("PEDESTRIAN"), autoware_perception_msgs::msg::ObjectClassification::PEDESTRIAN); EXPECT_EQ( - lidar_transfusion::getSemanticType("UNKNOWN"), + autoware::lidar_transfusion::getSemanticType("UNKNOWN"), autoware_perception_msgs::msg::ObjectClassification::UNKNOWN); } diff --git a/perception/lidar_transfusion/test/test_voxel_generator.cpp b/perception/autoware_lidar_transfusion/test/test_voxel_generator.cpp similarity index 98% rename from perception/lidar_transfusion/test/test_voxel_generator.cpp rename to perception/autoware_lidar_transfusion/test/test_voxel_generator.cpp index 2673a341b3721..d8d7db1302761 100644 --- a/perception/lidar_transfusion/test/test_voxel_generator.cpp +++ b/perception/autoware_lidar_transfusion/test/test_voxel_generator.cpp @@ -14,15 +14,15 @@ #include "test_voxel_generator.hpp" +#include "autoware/lidar_transfusion/transfusion_config.hpp" +#include "autoware/lidar_transfusion/utils.hpp" #include "gtest/gtest.h" -#include "lidar_transfusion/transfusion_config.hpp" -#include "lidar_transfusion/utils.hpp" #include #include "sensor_msgs/point_cloud2_iterator.hpp" -namespace lidar_transfusion +namespace autoware::lidar_transfusion { void VoxelGeneratorTest::SetUp() @@ -274,7 +274,7 @@ TEST_F(VoxelGeneratorTest, TwoFrames) EXPECT_TRUE(std::isnan(points[i])); } } -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion int main(int argc, char ** argv) { diff --git a/perception/lidar_transfusion/test/test_voxel_generator.hpp b/perception/autoware_lidar_transfusion/test/test_voxel_generator.hpp similarity index 92% rename from perception/lidar_transfusion/test/test_voxel_generator.hpp rename to perception/autoware_lidar_transfusion/test/test_voxel_generator.hpp index eccbe6412d183..641a42322a302 100644 --- a/perception/lidar_transfusion/test/test_voxel_generator.hpp +++ b/perception/autoware_lidar_transfusion/test/test_voxel_generator.hpp @@ -15,7 +15,7 @@ #ifndef TEST_VOXEL_GENERATOR_HPP_ #define TEST_VOXEL_GENERATOR_HPP_ -#include +#include #include #include @@ -26,7 +26,7 @@ #include #include -namespace lidar_transfusion +namespace autoware::lidar_transfusion { class VoxelGeneratorTest : public testing::Test @@ -60,6 +60,6 @@ class VoxelGeneratorTest : public testing::Test cudaStream_t stream_{}; }; -} // namespace lidar_transfusion +} // namespace autoware::lidar_transfusion #endif // TEST_VOXEL_GENERATOR_HPP_ From 19998adfeb48a8f7d7acf983f0cf938a2b050f87 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 22 Jul 2024 14:12:30 +0900 Subject: [PATCH 294/306] refactor(traffic_light_fine_detector): fix namespace and directory structure (#7973) * refactor: add autoware on the namespace Signed-off-by: Taekjin LEE * refactor: rename nodelet to node Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- .../traffic_light_node_container.launch.py | 2 +- .../CMakeLists.txt | 12 +++---- ...p => traffic_light_fine_detector_node.cpp} | 34 +++++++++---------- .../traffic_light_fine_detector_node.hpp} | 16 ++++----- 4 files changed, 31 insertions(+), 33 deletions(-) rename perception/traffic_light_fine_detector/src/{nodelet.cpp => traffic_light_fine_detector_node.cpp} (93%) rename perception/traffic_light_fine_detector/{include/traffic_light_fine_detector/nodelet.hpp => src/traffic_light_fine_detector_node.hpp} (93%) diff --git a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py index 6e77fa71cd553..ddf825921e468 100644 --- a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py +++ b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py @@ -137,7 +137,7 @@ def create_parameter_dict(*args): composable_node_descriptions=[ ComposableNode( package="traffic_light_fine_detector", - plugin="traffic_light::TrafficLightFineDetectorNodelet", + plugin="autoware::traffic_light::TrafficLightFineDetectorNode", name="traffic_light_fine_detector", namespace="detection", parameters=[fine_detector_model_param], diff --git a/perception/traffic_light_fine_detector/CMakeLists.txt b/perception/traffic_light_fine_detector/CMakeLists.txt index fe9fa2ffcaa8b..6b7e421d8d0a9 100644 --- a/perception/traffic_light_fine_detector/CMakeLists.txt +++ b/perception/traffic_light_fine_detector/CMakeLists.txt @@ -75,15 +75,15 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) ${CUDA_INCLUDE_DIRS} ) - ament_auto_add_library(traffic_light_fine_detector_nodelet SHARED - src/nodelet.cpp + ament_auto_add_library(${PROJECT_NAME} SHARED + src/traffic_light_fine_detector_node.cpp ) - target_include_directories(traffic_light_fine_detector_nodelet PUBLIC + target_include_directories(${PROJECT_NAME} PUBLIC lib/include ) - target_link_libraries(traffic_light_fine_detector_nodelet + target_link_libraries(${PROJECT_NAME} ${NVINFER} ${NVONNXPARSER} ${NVINFER_PLUGIN} @@ -94,8 +94,8 @@ if(TRT_AVAIL AND CUDA_AVAIL AND CUDNN_AVAIL) stdc++fs ) - rclcpp_components_register_node(traffic_light_fine_detector_nodelet - PLUGIN "traffic_light::TrafficLightFineDetectorNodelet" + rclcpp_components_register_node(${PROJECT_NAME} + PLUGIN "autoware::traffic_light::TrafficLightFineDetectorNode" EXECUTABLE traffic_light_fine_detector_node ) diff --git a/perception/traffic_light_fine_detector/src/nodelet.cpp b/perception/traffic_light_fine_detector/src/traffic_light_fine_detector_node.cpp similarity index 93% rename from perception/traffic_light_fine_detector/src/nodelet.cpp rename to perception/traffic_light_fine_detector/src/traffic_light_fine_detector_node.cpp index 8037dc5472fbe..d22a3f2074a7b 100644 --- a/perception/traffic_light_fine_detector/src/nodelet.cpp +++ b/perception/traffic_light_fine_detector/src/traffic_light_fine_detector_node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_fine_detector/nodelet.hpp" +#include "traffic_light_fine_detector_node.hpp" #if (defined(_MSC_VER) or (defined(__GNUC__) and (7 <= __GNUC_MAJOR__))) #include @@ -22,6 +22,7 @@ namespace fs = ::std::filesystem; namespace fs = ::std::experimental::filesystem; #endif +#include #include #include #include @@ -46,15 +47,14 @@ float calWeightedIou( } // namespace -namespace traffic_light +namespace autoware::traffic_light { inline std::vector toFloatVector(const std::vector double_vector) { return std::vector(double_vector.begin(), double_vector.end()); } -TrafficLightFineDetectorNodelet::TrafficLightFineDetectorNodelet( - const rclcpp::NodeOptions & options) +TrafficLightFineDetectorNode::TrafficLightFineDetectorNode(const rclcpp::NodeOptions & options) : Node("traffic_light_fine_detector_node", options) { int num_class = 2; @@ -95,7 +95,7 @@ TrafficLightFineDetectorNodelet::TrafficLightFineDetectorNodelet( using std::chrono_literals::operator""ms; timer_ = rclcpp::create_timer( - this, get_clock(), 100ms, std::bind(&TrafficLightFineDetectorNodelet::connectCb, this)); + this, get_clock(), 100ms, std::bind(&TrafficLightFineDetectorNode::connectCb, this)); std::lock_guard lock(connect_mutex_); output_roi_pub_ = this->create_publisher("~/output/rois", 1); @@ -105,11 +105,10 @@ TrafficLightFineDetectorNodelet::TrafficLightFineDetectorNodelet( approximate_sync_.reset( new ApproximateSync(ApproximateSyncPolicy(10), image_sub_, rough_roi_sub_, expect_roi_sub_)); approximate_sync_->registerCallback( - std::bind(&TrafficLightFineDetectorNodelet::callback, this, _1, _2, _3)); + std::bind(&TrafficLightFineDetectorNode::callback, this, _1, _2, _3)); } else { sync_.reset(new Sync(SyncPolicy(10), image_sub_, rough_roi_sub_, expect_roi_sub_)); - sync_->registerCallback( - std::bind(&TrafficLightFineDetectorNodelet::callback, this, _1, _2, _3)); + sync_->registerCallback(std::bind(&TrafficLightFineDetectorNode::callback, this, _1, _2, _3)); } if (declare_parameter("build_only", false)) { @@ -118,7 +117,7 @@ TrafficLightFineDetectorNodelet::TrafficLightFineDetectorNodelet( } } -void TrafficLightFineDetectorNodelet::connectCb() +void TrafficLightFineDetectorNode::connectCb() { std::lock_guard lock(connect_mutex_); if (output_roi_pub_->get_subscription_count() == 0) { @@ -132,7 +131,7 @@ void TrafficLightFineDetectorNodelet::connectCb() } } -void TrafficLightFineDetectorNodelet::callback( +void TrafficLightFineDetectorNode::callback( const sensor_msgs::msg::Image::ConstSharedPtr in_image_msg, const TrafficLightRoiArray::ConstSharedPtr rough_roi_msg, const TrafficLightRoiArray::ConstSharedPtr expect_roi_msg) @@ -213,7 +212,7 @@ void TrafficLightFineDetectorNodelet::callback( exe_time_pub_->publish(exe_time_msg); } -float TrafficLightFineDetectorNodelet::evalMatchScore( +float TrafficLightFineDetectorNode::evalMatchScore( std::map & id2expectRoi, std::map & id2detections, std::map & id2bestDetection) @@ -236,7 +235,7 @@ float TrafficLightFineDetectorNodelet::evalMatchScore( return score_sum; } -void TrafficLightFineDetectorNodelet::detectionMatch( +void TrafficLightFineDetectorNode::detectionMatch( std::map & id2expectRoi, std::map & id2detections, TrafficLightRoiArray & out_rois) { @@ -298,7 +297,7 @@ void TrafficLightFineDetectorNodelet::detectionMatch( } } -bool TrafficLightFineDetectorNodelet::rosMsg2CvMat( +bool TrafficLightFineDetectorNode::rosMsg2CvMat( const sensor_msgs::msg::Image::ConstSharedPtr image_msg, cv::Mat & image, std::string encode) { try { @@ -313,8 +312,7 @@ bool TrafficLightFineDetectorNodelet::rosMsg2CvMat( return true; } -bool TrafficLightFineDetectorNodelet::fitInFrame( - cv::Point & lt, cv::Point & rb, const cv::Size & size) +bool TrafficLightFineDetectorNode::fitInFrame(cv::Point & lt, cv::Point & rb, const cv::Size & size) { const int width = static_cast(size.width); const int height = static_cast(size.height); @@ -334,7 +332,7 @@ bool TrafficLightFineDetectorNodelet::fitInFrame( return true; } -bool TrafficLightFineDetectorNodelet::readLabelFile( +bool TrafficLightFineDetectorNode::readLabelFile( const std::string & filepath, std::vector & tlr_label_id_, int & num_class) { std::ifstream labelsFile(filepath); @@ -354,7 +352,7 @@ bool TrafficLightFineDetectorNodelet::readLabelFile( return tlr_label_id_.size() != 0; } -} // namespace traffic_light +} // namespace autoware::traffic_light #include -RCLCPP_COMPONENTS_REGISTER_NODE(traffic_light::TrafficLightFineDetectorNodelet) +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::traffic_light::TrafficLightFineDetectorNode) diff --git a/perception/traffic_light_fine_detector/include/traffic_light_fine_detector/nodelet.hpp b/perception/traffic_light_fine_detector/src/traffic_light_fine_detector_node.hpp similarity index 93% rename from perception/traffic_light_fine_detector/include/traffic_light_fine_detector/nodelet.hpp rename to perception/traffic_light_fine_detector/src/traffic_light_fine_detector_node.hpp index 5c89c76a11833..a5ae22946e9ab 100644 --- a/perception/traffic_light_fine_detector/include/traffic_light_fine_detector/nodelet.hpp +++ b/perception/traffic_light_fine_detector/src/traffic_light_fine_detector_node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_FINE_DETECTOR__NODELET_HPP_ -#define TRAFFIC_LIGHT_FINE_DETECTOR__NODELET_HPP_ +#ifndef TRAFFIC_LIGHT_FINE_DETECTOR_NODE_HPP_ +#define TRAFFIC_LIGHT_FINE_DETECTOR_NODE_HPP_ #include #include @@ -50,15 +50,15 @@ typedef struct Detection float x, y, w, h, prob; } Detection; -namespace traffic_light +namespace autoware::traffic_light { -class TrafficLightFineDetectorNodelet : public rclcpp::Node +class TrafficLightFineDetectorNode : public rclcpp::Node { using TrafficLightRoi = tier4_perception_msgs::msg::TrafficLightRoi; using TrafficLightRoiArray = tier4_perception_msgs::msg::TrafficLightRoiArray; public: - explicit TrafficLightFineDetectorNodelet(const rclcpp::NodeOptions & options); + explicit TrafficLightFineDetectorNode(const rclcpp::NodeOptions & options); void connectCb(); /** * @brief main process function. @@ -168,8 +168,8 @@ class TrafficLightFineDetectorNodelet : public rclcpp::Node int batch_size_; std::unique_ptr trt_yolox_; -}; // TrafficLightFineDetectorNodelet +}; // TrafficLightFineDetectorNode -} // namespace traffic_light +} // namespace autoware::traffic_light -#endif // TRAFFIC_LIGHT_FINE_DETECTOR__NODELET_HPP_ +#endif // TRAFFIC_LIGHT_FINE_DETECTOR_NODE_HPP_ From 3974d8fcebe59b6cd1c4af50633710d6eac003c4 Mon Sep 17 00:00:00 2001 From: Taekjin LEE Date: Mon, 22 Jul 2024 14:12:53 +0900 Subject: [PATCH 295/306] refactor(traffic_light_visualization): fix namespace and directory structure (#7968) * feat: namespace fix and directory structure Signed-off-by: Taekjin LEE * chore: Remove main.cpp and implement node by template Signed-off-by: Taekjin LEE --------- Signed-off-by: Taekjin LEE --- .../traffic_light_node_container.launch.py | 2 +- .../CMakeLists.txt | 18 +++++---- .../src/traffic_light_map_visualizer/main.cpp | 29 --------------- .../src/traffic_light_map_visualizer/node.cpp | 17 +++++---- .../traffic_light_map_visualizer/node.hpp | 12 +++--- .../{nodelet.cpp => node.cpp} | 37 +++++++++---------- .../traffic_light_roi_visualizer/node.hpp} | 14 +++---- .../shape_draw.cpp | 6 ++- .../shape_draw.hpp | 4 ++ 9 files changed, 62 insertions(+), 77 deletions(-) delete mode 100644 perception/traffic_light_visualization/src/traffic_light_map_visualizer/main.cpp rename perception/traffic_light_visualization/{include/traffic_light_visualization => src}/traffic_light_map_visualizer/node.hpp (81%) rename perception/traffic_light_visualization/src/traffic_light_roi_visualizer/{nodelet.cpp => node.cpp} (87%) rename perception/traffic_light_visualization/{include/traffic_light_visualization/traffic_light_roi_visualizer/nodelet.hpp => src/traffic_light_roi_visualizer/node.hpp} (92%) rename perception/traffic_light_visualization/{include/traffic_light_visualization => src}/traffic_light_roi_visualizer/shape_draw.hpp (94%) diff --git a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py index ddf825921e468..a412e1b265978 100644 --- a/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py +++ b/launch/tier4_perception_launch/launch/traffic_light_recognition/traffic_light_node_container.launch.py @@ -86,7 +86,7 @@ def create_parameter_dict(*args): ), ComposableNode( package="traffic_light_visualization", - plugin="traffic_light::TrafficLightRoiVisualizerNodelet", + plugin="autoware::traffic_light::TrafficLightRoiVisualizerNode", name="traffic_light_roi_visualizer", parameters=[create_parameter_dict("enable_fine_detection")], remappings=[ diff --git a/perception/traffic_light_visualization/CMakeLists.txt b/perception/traffic_light_visualization/CMakeLists.txt index 08f6b48cabbd9..24ee442676a9e 100644 --- a/perception/traffic_light_visualization/CMakeLists.txt +++ b/perception/traffic_light_visualization/CMakeLists.txt @@ -6,23 +6,27 @@ autoware_package() find_package(OpenCV REQUIRED) -ament_auto_add_library(traffic_light_roi_visualizer_nodelet SHARED - src/traffic_light_roi_visualizer/nodelet.cpp +ament_auto_add_library(traffic_light_roi_visualizer SHARED + src/traffic_light_roi_visualizer/node.cpp src/traffic_light_roi_visualizer/shape_draw.cpp ) -target_link_libraries(traffic_light_roi_visualizer_nodelet +target_link_libraries(traffic_light_roi_visualizer ${OpenCV_LIBRARIES} ) -rclcpp_components_register_node(traffic_light_roi_visualizer_nodelet - PLUGIN "traffic_light::TrafficLightRoiVisualizerNodelet" +rclcpp_components_register_node(traffic_light_roi_visualizer + PLUGIN "autoware::traffic_light::TrafficLightRoiVisualizerNode" EXECUTABLE traffic_light_visualization_node ) -ament_auto_add_executable(traffic_light_map_visualizer_node +ament_auto_add_library(traffic_light_map_visualizer SHARED src/traffic_light_map_visualizer/node.cpp - src/traffic_light_map_visualizer/main.cpp +) + +rclcpp_components_register_node(traffic_light_map_visualizer + PLUGIN "autoware::traffic_light::TrafficLightMapVisualizerNode" + EXECUTABLE traffic_light_map_visualizer_node ) # Copy the assets directory to the installation directory diff --git a/perception/traffic_light_visualization/src/traffic_light_map_visualizer/main.cpp b/perception/traffic_light_visualization/src/traffic_light_map_visualizer/main.cpp deleted file mode 100644 index 62d416457c6f0..0000000000000 --- a/perception/traffic_light_visualization/src/traffic_light_map_visualizer/main.cpp +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#include "traffic_light_visualization/traffic_light_map_visualizer/node.hpp" - -#include - -#include - -int main(int argc, char ** argv) -{ - rclcpp::init(argc, argv); - rclcpp::NodeOptions node_options; - auto node = std::make_shared( - "traffic_light_map_visualizer_node", node_options); - rclcpp::spin(node); - return 0; -} diff --git a/perception/traffic_light_visualization/src/traffic_light_map_visualizer/node.cpp b/perception/traffic_light_visualization/src/traffic_light_map_visualizer/node.cpp index 95944a29d6092..90b73e643ae8e 100644 --- a/perception/traffic_light_visualization/src/traffic_light_map_visualizer/node.cpp +++ b/perception/traffic_light_visualization/src/traffic_light_map_visualizer/node.cpp @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_visualization/traffic_light_map_visualizer/node.hpp" +#include "node.hpp" #include #include @@ -26,8 +26,6 @@ #include #include -using std::placeholders::_1; - namespace { [[maybe_unused]] void setColor( @@ -105,12 +103,14 @@ void lightAsMarker( } } // namespace -namespace traffic_light +namespace autoware::traffic_light { TrafficLightMapVisualizerNode::TrafficLightMapVisualizerNode( - const std::string & node_name, const rclcpp::NodeOptions & node_options) -: rclcpp::Node(node_name, node_options) + const rclcpp::NodeOptions & node_options) +: rclcpp::Node("traffic_light_map_visualizer_node", node_options) { + using std::placeholders::_1; + light_marker_pub_ = create_publisher("~/output/traffic_light", 1); tl_state_sub_ = create_subscription( @@ -209,4 +209,7 @@ void TrafficLightMapVisualizerNode::binMapCallback( lanelet::ConstLanelets all_lanelets = lanelet::utils::query::laneletLayer(viz_lanelet_map); aw_tl_reg_elems_ = lanelet::utils::query::autowareTrafficLights(all_lanelets); } -} // namespace traffic_light +} // namespace autoware::traffic_light + +#include +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::traffic_light::TrafficLightMapVisualizerNode) diff --git a/perception/traffic_light_visualization/include/traffic_light_visualization/traffic_light_map_visualizer/node.hpp b/perception/traffic_light_visualization/src/traffic_light_map_visualizer/node.hpp similarity index 81% rename from perception/traffic_light_visualization/include/traffic_light_visualization/traffic_light_map_visualizer/node.hpp rename to perception/traffic_light_visualization/src/traffic_light_map_visualizer/node.hpp index 2cf9a98aea443..61b5204b57592 100644 --- a/perception/traffic_light_visualization/include/traffic_light_visualization/traffic_light_map_visualizer/node.hpp +++ b/perception/traffic_light_visualization/src/traffic_light_map_visualizer/node.hpp @@ -12,8 +12,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_VISUALIZATION__TRAFFIC_LIGHT_MAP_VISUALIZER__NODE_HPP_ -#define TRAFFIC_LIGHT_VISUALIZATION__TRAFFIC_LIGHT_MAP_VISUALIZER__NODE_HPP_ +#ifndef TRAFFIC_LIGHT_MAP_VISUALIZER__NODE_HPP_ +#define TRAFFIC_LIGHT_MAP_VISUALIZER__NODE_HPP_ #include #include @@ -26,12 +26,12 @@ #include #include -namespace traffic_light +namespace autoware::traffic_light { class TrafficLightMapVisualizerNode : public rclcpp::Node { public: - TrafficLightMapVisualizerNode(const std::string & node_name, const rclcpp::NodeOptions & options); + explicit TrafficLightMapVisualizerNode(const rclcpp::NodeOptions & options); ~TrafficLightMapVisualizerNode() = default; void trafficSignalsCallback( const autoware_perception_msgs::msg::TrafficLightGroupArray::ConstSharedPtr @@ -47,6 +47,6 @@ class TrafficLightMapVisualizerNode : public rclcpp::Node std::vector aw_tl_reg_elems_; }; -} // namespace traffic_light +} // namespace autoware::traffic_light -#endif // TRAFFIC_LIGHT_VISUALIZATION__TRAFFIC_LIGHT_MAP_VISUALIZER__NODE_HPP_ +#endif // TRAFFIC_LIGHT_MAP_VISUALIZER__NODE_HPP_ diff --git a/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/nodelet.cpp b/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/node.cpp similarity index 87% rename from perception/traffic_light_visualization/src/traffic_light_roi_visualizer/nodelet.cpp rename to perception/traffic_light_visualization/src/traffic_light_roi_visualizer/node.cpp index df097e64ecd36..74eac71873909 100644 --- a/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/nodelet.cpp +++ b/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/node.cpp @@ -12,21 +12,19 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_visualization/traffic_light_roi_visualizer/nodelet.hpp" // NOLINT(whitespace/line_length) +#include "node.hpp" -#include "traffic_light_visualization/traffic_light_roi_visualizer/shape_draw.hpp" // NOLINT(whitespace/line_length) +#include "shape_draw.hpp" #include -#include #include #include #include -namespace traffic_light +namespace autoware::traffic_light { -TrafficLightRoiVisualizerNodelet::TrafficLightRoiVisualizerNodelet( - const rclcpp::NodeOptions & options) +TrafficLightRoiVisualizerNode::TrafficLightRoiVisualizerNode(const rclcpp::NodeOptions & options) : Node("traffic_light_roi_visualizer_node", options) { using std::placeholders::_1; @@ -39,22 +37,22 @@ TrafficLightRoiVisualizerNodelet::TrafficLightRoiVisualizerNodelet( sync_with_rough_roi_.reset(new SyncWithRoughRoi( SyncPolicyWithRoughRoi(10), image_sub_, roi_sub_, rough_roi_sub_, traffic_signals_sub_)); sync_with_rough_roi_->registerCallback( - std::bind(&TrafficLightRoiVisualizerNodelet::imageRoughRoiCallback, this, _1, _2, _3, _4)); + std::bind(&TrafficLightRoiVisualizerNode::imageRoughRoiCallback, this, _1, _2, _3, _4)); } else { sync_.reset(new Sync(SyncPolicy(10), image_sub_, roi_sub_, traffic_signals_sub_)); sync_->registerCallback( - std::bind(&TrafficLightRoiVisualizerNodelet::imageRoiCallback, this, _1, _2, _3)); + std::bind(&TrafficLightRoiVisualizerNode::imageRoiCallback, this, _1, _2, _3)); } using std::chrono_literals::operator""ms; timer_ = rclcpp::create_timer( - this, get_clock(), 100ms, std::bind(&TrafficLightRoiVisualizerNodelet::connectCb, this)); + this, get_clock(), 100ms, std::bind(&TrafficLightRoiVisualizerNode::connectCb, this)); image_pub_ = image_transport::create_publisher(this, "~/output/image", rclcpp::QoS{1}.get_rmw_qos_profile()); } -void TrafficLightRoiVisualizerNodelet::connectCb() +void TrafficLightRoiVisualizerNode::connectCb() { if (image_pub_.getNumSubscribers() == 0) { image_sub_.unsubscribe(); @@ -74,7 +72,7 @@ void TrafficLightRoiVisualizerNodelet::connectCb() } } -bool TrafficLightRoiVisualizerNodelet::createRect( +bool TrafficLightRoiVisualizerNode::createRect( cv::Mat & image, const tier4_perception_msgs::msg::TrafficLightRoi & tl_roi, const cv::Scalar & color) { @@ -89,7 +87,7 @@ bool TrafficLightRoiVisualizerNodelet::createRect( return true; } -bool TrafficLightRoiVisualizerNodelet::createRect( +bool TrafficLightRoiVisualizerNode::createRect( cv::Mat & image, const tier4_perception_msgs::msg::TrafficLightRoi & tl_roi, const ClassificationResult & result) { @@ -111,13 +109,13 @@ bool TrafficLightRoiVisualizerNodelet::createRect( std::string shape_name = extractShapeName(result.label); - drawTrafficLightShape( + visualization::drawTrafficLightShape( image, shape_name, cv::Point(tl_roi.roi.x_offset, tl_roi.roi.y_offset), color, 16, result.prob); return true; } -void TrafficLightRoiVisualizerNodelet::imageRoiCallback( +void TrafficLightRoiVisualizerNode::imageRoiCallback( const sensor_msgs::msg::Image::ConstSharedPtr & input_image_msg, const tier4_perception_msgs::msg::TrafficLightRoiArray::ConstSharedPtr & input_tl_roi_msg, [[maybe_unused]] const tier4_perception_msgs::msg::TrafficLightArray::ConstSharedPtr & @@ -148,7 +146,7 @@ void TrafficLightRoiVisualizerNodelet::imageRoiCallback( image_pub_.publish(cv_ptr->toImageMsg()); } -bool TrafficLightRoiVisualizerNodelet::getClassificationResult( +bool TrafficLightRoiVisualizerNode::getClassificationResult( int id, const tier4_perception_msgs::msg::TrafficLightArray & traffic_signals, ClassificationResult & result) { @@ -171,7 +169,7 @@ bool TrafficLightRoiVisualizerNodelet::getClassificationResult( return has_correspond_traffic_signal; } -bool TrafficLightRoiVisualizerNodelet::getRoiFromId( +bool TrafficLightRoiVisualizerNode::getRoiFromId( int id, const tier4_perception_msgs::msg::TrafficLightRoiArray::ConstSharedPtr & rois, tier4_perception_msgs::msg::TrafficLightRoi & correspond_roi) { @@ -184,7 +182,7 @@ bool TrafficLightRoiVisualizerNodelet::getRoiFromId( return false; } -void TrafficLightRoiVisualizerNodelet::imageRoughRoiCallback( +void TrafficLightRoiVisualizerNode::imageRoughRoiCallback( const sensor_msgs::msg::Image::ConstSharedPtr & input_image_msg, const tier4_perception_msgs::msg::TrafficLightRoiArray::ConstSharedPtr & input_tl_roi_msg, const tier4_perception_msgs::msg::TrafficLightRoiArray::ConstSharedPtr & input_tl_rough_roi_msg, @@ -225,6 +223,7 @@ void TrafficLightRoiVisualizerNodelet::imageRoughRoiCallback( image_pub_.publish(cv_ptr->toImageMsg()); } -} // namespace traffic_light +} // namespace autoware::traffic_light -RCLCPP_COMPONENTS_REGISTER_NODE(traffic_light::TrafficLightRoiVisualizerNodelet) +#include +RCLCPP_COMPONENTS_REGISTER_NODE(autoware::traffic_light::TrafficLightRoiVisualizerNode) diff --git a/perception/traffic_light_visualization/include/traffic_light_visualization/traffic_light_roi_visualizer/nodelet.hpp b/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/node.hpp similarity index 92% rename from perception/traffic_light_visualization/include/traffic_light_visualization/traffic_light_roi_visualizer/nodelet.hpp rename to perception/traffic_light_visualization/src/traffic_light_roi_visualizer/node.hpp index f7ac7471e21ef..ac16d760adaab 100644 --- a/perception/traffic_light_visualization/include/traffic_light_visualization/traffic_light_roi_visualizer/nodelet.hpp +++ b/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/node.hpp @@ -11,8 +11,8 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#ifndef TRAFFIC_LIGHT_VISUALIZATION__TRAFFIC_LIGHT_ROI_VISUALIZER__NODELET_HPP_ -#define TRAFFIC_LIGHT_VISUALIZATION__TRAFFIC_LIGHT_ROI_VISUALIZER__NODELET_HPP_ +#ifndef TRAFFIC_LIGHT_ROI_VISUALIZER__NODE_HPP_ +#define TRAFFIC_LIGHT_ROI_VISUALIZER__NODE_HPP_ #include #include @@ -38,7 +38,7 @@ #include #include -namespace traffic_light +namespace autoware::traffic_light { struct ClassificationResult { @@ -46,10 +46,10 @@ struct ClassificationResult std::string label; }; -class TrafficLightRoiVisualizerNodelet : public rclcpp::Node +class TrafficLightRoiVisualizerNode : public rclcpp::Node { public: - explicit TrafficLightRoiVisualizerNodelet(const rclcpp::NodeOptions & options); + explicit TrafficLightRoiVisualizerNode(const rclcpp::NodeOptions & options); void connectCb(); void imageRoiCallback( @@ -138,6 +138,6 @@ class TrafficLightRoiVisualizerNodelet : public rclcpp::Node bool enable_fine_detection_; }; -} // namespace traffic_light +} // namespace autoware::traffic_light -#endif // TRAFFIC_LIGHT_VISUALIZATION__TRAFFIC_LIGHT_ROI_VISUALIZER__NODELET_HPP_ +#endif // TRAFFIC_LIGHT_ROI_VISUALIZER__NODE_HPP_ diff --git a/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/shape_draw.cpp b/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/shape_draw.cpp index 91a00a940885c..4ee49eca10624 100644 --- a/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/shape_draw.cpp +++ b/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/shape_draw.cpp @@ -11,12 +11,14 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -#include "traffic_light_visualization/traffic_light_roi_visualizer/shape_draw.hpp" +#include "shape_draw.hpp" #include "opencv2/core/types.hpp" #include "opencv2/highgui.hpp" #include "opencv2/imgproc.hpp" +namespace autoware::traffic_light::visualization +{ void drawShape( const DrawFunctionParams & params, const std::string & filename, bool flipHorizontally, bool flipVertically, int x_offset, int y_offset, double scale_factor) @@ -171,3 +173,5 @@ void drawTrafficLightShape( std::cerr << "Unknown shape: " << shape << std::endl; } } + +} // namespace autoware::traffic_light::visualization diff --git a/perception/traffic_light_visualization/include/traffic_light_visualization/traffic_light_roi_visualizer/shape_draw.hpp b/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/shape_draw.hpp similarity index 94% rename from perception/traffic_light_visualization/include/traffic_light_visualization/traffic_light_roi_visualizer/shape_draw.hpp rename to perception/traffic_light_visualization/src/traffic_light_roi_visualizer/shape_draw.hpp index 7f83104edf48e..150d78f767ee3 100644 --- a/perception/traffic_light_visualization/include/traffic_light_visualization/traffic_light_roi_visualizer/shape_draw.hpp +++ b/perception/traffic_light_visualization/src/traffic_light_roi_visualizer/shape_draw.hpp @@ -23,6 +23,8 @@ #include #include +namespace autoware::traffic_light::visualization +{ struct DrawFunctionParams { cv::Mat & image; @@ -49,3 +51,5 @@ void drawUnknown(const DrawFunctionParams & params); void drawTrafficLightShape( cv::Mat & image, const std::string & shape, const cv::Point & position, const cv::Scalar & color, int size, float probability); + +} // namespace autoware::traffic_light::visualization From eb1559492ec7fd4a7d4cfd1111b1bc094fc435da Mon Sep 17 00:00:00 2001 From: Go Sakayori Date: Mon, 22 Jul 2024 14:16:55 +0900 Subject: [PATCH 296/306] chore(velocity_smoother): add maintainer (#8121) add maintainer Signed-off-by: Go Sakayori --- planning/autoware_velocity_smoother/package.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/planning/autoware_velocity_smoother/package.xml b/planning/autoware_velocity_smoother/package.xml index 997f7b16e5652..62a08f60ac4e6 100644 --- a/planning/autoware_velocity_smoother/package.xml +++ b/planning/autoware_velocity_smoother/package.xml @@ -9,6 +9,7 @@ Takamasa Horibe Makoto Kurihara Satoshi Ota + Go Sakayori Apache License 2.0 Takamasa Horibe From d9e984d15cb84da422777769f5402e287e08ec13 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:26:17 +0900 Subject: [PATCH 297/306] Update sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml --- .../launch/ring_passthrough_filter_node.launch.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml index c18a26f036d9f..5a84381cb78dd 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml @@ -11,7 +11,5 @@ - -
From 288c038fefe4ca2a37895e94f4e774f98dbc9f30 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:26:25 +0900 Subject: [PATCH 298/306] Update sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml --- .../launch/ring_passthrough_filter_node.launch.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml index 5a84381cb78dd..2fba9bf61c13b 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml @@ -6,6 +6,8 @@ + + From b6f1776994f9bea628dada24568279f3afae0178 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 05:31:41 +0000 Subject: [PATCH 299/306] style(pre-commit): autofix --- .../launch/approximate_downsample_filter_node.launch.xml | 2 +- .../pickup_based_voxel_grid_downsample_filter_node.launch.xml | 2 +- .../launch/voxel_grid_downsample_filter_node.launch.xml | 2 +- .../launch/voxel_grid_outlier_filter_node.launch.xml | 2 +- .../src/concatenate_data/concatenate_and_time_sync_nodelet.cpp | 3 ++- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml index 95b1ded06e366..23ae90281b306 100644 --- a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml @@ -7,7 +7,7 @@ - + diff --git a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml index 88ed0d9d73c8c..b606c1eb0d3fd 100644 --- a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml @@ -7,7 +7,7 @@ - + diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml index 886de87f333f0..c9faf2f855b32 100644 --- a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml @@ -7,7 +7,7 @@ - + diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml index c093aa8a3b300..a1afda22c9e3c 100644 --- a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml @@ -7,7 +7,7 @@ - + diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index 5c65b4dceadf7..3c11290b605c8 100644 --- a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -117,7 +117,8 @@ PointCloudConcatenateDataSynchronizerComponent::PointCloudConcatenateDataSynchro publish_synchronized_pointcloud_ = declare_parameter("publish_synchronized_pointcloud"); keep_input_frame_in_synchronized_pointcloud_ = declare_parameter("keep_input_frame_in_synchronized_pointcloud"); - synchronized_pointcloud_postfix_ = declare_parameter("synchronized_pointcloud_postfix"); + synchronized_pointcloud_postfix_ = + declare_parameter("synchronized_pointcloud_postfix"); } // Initialize not_subscribed_topic_names_ From f4bed156d2c49367f9174701b57f3317225652d5 Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:54:39 +0900 Subject: [PATCH 300/306] Update sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp --- .../src/outlier_filter/ring_outlier_filter_nodelet.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp index 3182c6fc6a075..c76ee57b58b7d 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp @@ -50,8 +50,8 @@ RingOutlierFilterComponent::RingOutlierFilterComponent(const rclcpp::NodeOptions distance_ratio_ = declare_parameter("distance_ratio"); object_length_threshold_ = declare_parameter("object_length_threshold"); num_points_threshold_ = declare_parameter("num_points_threshold"); - max_rings_num_ = declare_parameter("max_rings_num"); - max_points_num_per_ring_ = declare_parameter("max_points_num_per_ring"); + max_rings_num_ = declare_parameter("max_rings_num"); + max_points_num_per_ring_ = declare_parameter("max_points_num_per_ring"); publish_outlier_pointcloud_ = declare_parameter("publish_outlier_pointcloud"); min_azimuth_deg_ = declare_parameter("min_azimuth_deg"); From 1f3a0bf5e1db180527ffe3691e7bda6c64a7f15a Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:54:46 +0900 Subject: [PATCH 301/306] Update sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp --- .../outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp b/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp index f12945f68b7dc..1f82605f6a3e6 100644 --- a/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp +++ b/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp @@ -28,7 +28,7 @@ RadiusSearch2DOutlierFilterComponent::RadiusSearch2DOutlierFilterComponent( { // set initial parameters { - min_neighbors_ = declare_parameter("min_neighbors"); + min_neighbors_ = declare_parameter("min_neighbors"); search_radius_ = declare_parameter("search_radius"); } From 58627c3e51b16af9dfef94af87f019502950243e Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 14:59:00 +0900 Subject: [PATCH 302/306] Update sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml --- .../pointcloud_preprocessor/launch/crop_box_filter.launch.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml b/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml index 62aaf94ea7587..c699c92e22866 100644 --- a/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml @@ -1,4 +1,4 @@ -
+ From 2c2d1a61b7fb74d4e2f66feaaa93af2a032d0fcc Mon Sep 17 00:00:00 2001 From: "Yi-Hsiang Fang (Vivid)" <146902905+vividf@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:07:07 +0900 Subject: [PATCH 303/306] Update sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml --- .../launch/ring_passthrough_filter_node.launch.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml index 2fba9bf61c13b..966e1ef42d8a8 100644 --- a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml +++ b/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml @@ -10,7 +10,6 @@ -
From 1f1b6e48b94254c134b660e173e2396e5471d2c8 Mon Sep 17 00:00:00 2001 From: Ariiees Date: Tue, 23 Jul 2024 15:24:45 -0400 Subject: [PATCH 304/306] reset to old version Signed-off-by: Ariiees --- .../CMakeLists.txt | 0 .../README.md | 0 .../config/approximate_downsample_filter.param.yaml | 0 .../config/blockage_diagnostics.param.yaml | 0 .../config/concatenate_and_time_sync.param.yaml | 0 .../config/concatenate_pointclouds.param.yaml | 0 .../config/crop_box_filter.param.yaml | 0 .../config/distortion_corrector.param.yaml | 0 .../config/distortion_corrector_node.param.yaml | 0 .../config/dual_return_outlier_filter.param.yaml | 0 .../config/filter.param.yaml | 0 .../config/lanelet2_map_filter.param.yaml | 0 .../config/passthrough_filter_unit16.param.yaml | 0 ...up_based_voxel_grid_downsample_filter.param.yaml | 0 .../config/pointcloud_accumulator.param.yaml | 0 .../config/processing_time_ms.xml | 0 .../radius_search_2d_outlier_filter.param.yaml | 0 .../config/random_downsample_filter.param.yaml | 0 .../config/ring_outlier_filter.param.yaml | 0 .../config/time_synchronizer.param.yaml | 0 .../config/vector_map_inside_area_filter.param.yaml | 0 .../config/voxel_grid_downsample_filter.param.yaml | 0 .../config/voxel_grid_outlier_filter.param.yaml | 0 .../docs/blockage_diag.md | 0 .../docs/concatenate-data.md | 0 .../docs/crop-box-filter.md | 0 .../docs/distortion-corrector.md | 0 .../docs/downsample-filter.md | 0 .../docs/dual-return-outlier-filter.md | 0 .../docs/image/blockage_diag.png | Bin .../docs/image/blockage_diag_flowchart.drawio.svg | 0 .../docs/image/concatenate_data.drawio.svg | 0 .../docs/image/distortion_corrector.jpg | Bin ...tlier_filter-dual_return_ROI_setting_options.png | Bin .../outlier_filter-dual_return_detail.drawio.svg | 0 .../outlier_filter-dual_return_overall.drawio.svg | 0 .../outlier_filter-radius_search_2d.drawio.svg | 0 .../image/outlier_filter-return_type.drawio.svg | 0 .../docs/image/outlier_filter-ring.drawio.svg | 0 .../docs/image/outlier_filter-voxel_grid.drawio.svg | 0 .../image/pointcloud_preprocess_pipeline.drawio.png | Bin .../vector_map_inside_area_filter_overview.svg | 0 .../docs/outlier-filter.md | 0 .../docs/passthrough-filter.md | 0 .../docs/pointcloud-accumulator.md | 0 .../docs/radius-search-2d-outlier-filter.md | 0 .../docs/ring-outlier-filter.md | 0 .../docs/vector-map-filter.md | 0 .../docs/vector-map-inside-area-filter.md | 0 .../docs/voxel-grid-outlier-filter.md | 0 .../blockage_diag/blockage_diag_nodelet.hpp | 0 .../concatenate_and_time_sync_nodelet.hpp | 0 .../concatenate_data/concatenate_pointclouds.hpp | 0 .../crop_box_filter/crop_box_filter_nodelet.hpp | 0 .../distortion_corrector/distortion_corrector.hpp | 0 .../distortion_corrector_node.hpp | 0 .../approximate_downsample_filter_nodelet.hpp | 0 .../faster_voxel_grid_downsample_filter.hpp | 0 .../pickup_based_voxel_grid_downsample_filter.hpp | 0 .../random_downsample_filter_nodelet.hpp | 0 .../voxel_grid_downsample_filter_nodelet.hpp | 0 .../include/pointcloud_preprocessor/filter.hpp | 0 .../dual_return_outlier_filter_nodelet.hpp | 0 .../radius_search_2d_outlier_filter_nodelet.hpp | 0 .../outlier_filter/ring_outlier_filter_nodelet.hpp | 0 .../voxel_grid_outlier_filter_nodelet.hpp | 0 .../passthrough_filter_nodelet.hpp | 0 .../passthrough_filter_uint16_nodelet.hpp | 0 .../passthrough_filter/passthrough_uint16.hpp | 0 .../pointcloud_accumulator_nodelet.hpp | 0 .../polygon_remover/polygon_remover.hpp | 0 .../time_synchronizer/time_synchronizer_nodelet.hpp | 0 .../pointcloud_preprocessor/transform_info.hpp | 0 .../pointcloud_preprocessor/utility/geometry.hpp | 0 .../pointcloud_preprocessor/utility/memory.hpp | 0 .../lanelet2_map_filter_nodelet.hpp | 0 .../vector_map_inside_area_filter.hpp | 0 .../approximate_downsample_filter_node.launch.xml | 0 .../launch/blockage_diagnostics_node.launch.xml | 0 .../launch/crop_box_filter.launch.xml | 0 .../launch/distortion_corrector_node.launch.xml | 0 .../dual_return_outlier_filter_node.launch.xml | 0 .../launch/lanelet2_map_filter_node.launch.xml | 0 ...sed_voxel_grid_downsample_filter_node.launch.xml | 0 .../launch/pointcloud_accumulator_node.launch.xml | 0 .../launch/polygon_remover.launch.py | 0 .../launch/preprocessor.launch.py | 0 .../launch/preprocessor.launch.xml | 0 .../radius_search_2d_outlier_filter_node.launch.xml | 0 .../launch/random_downsample_filter_node.launch.xml | 0 .../launch/ring_outlier_filter_node.launch.xml | 0 .../launch/ring_passthrough_filter_node.launch.xml | 0 .../vector_map_inside_area_filter_node.launch.xml | 0 .../voxel_grid_downsample_filter_node.launch.xml | 0 .../voxel_grid_outlier_filter_node.launch.xml | 0 .../package.xml | 0 .../approximate_downsample_filter.schema.json | 0 .../schema/blockage_diag.schema.json | 0 .../schema/crop_box_filter.schema.json | 0 .../schema/distortion_corrector_node.schema.json | 0 .../schema/dual_return_outlier_filter.schema.json | 0 .../schema/filter.schema.json | 0 .../schema/lanelet2_map_filter.schema.json | 0 .../schema/passthrough_filter.schema.json | 0 ...p_based_voxel_grid_downsample_filter.schema.json | 0 .../schema/pointcloud_accumulator.schema.json | 0 .../schema/random_downsample_filter.schema.json | 0 .../schema/ring_outlier_filter.schema.json | 0 .../vector_map_inside_area_filter.schema.json | 0 .../schema/voxel_grid_downsample_filter.schema.json | 0 .../schema/voxel_grid_outlier_filter.schema.json | 0 .../src/blockage_diag/blockage_diag_nodelet.cpp | 0 .../concatenate_and_time_sync_nodelet.cpp | 0 .../concatenate_data/concatenate_pointclouds.cpp | 0 .../src/crop_box_filter/crop_box_filter_nodelet.cpp | 0 .../distortion_corrector/distortion_corrector.cpp | 0 .../distortion_corrector_node.cpp | 0 .../approximate_downsample_filter_nodelet.cpp | 0 .../faster_voxel_grid_downsample_filter.cpp | 0 .../pickup_based_voxel_grid_downsample_filter.cpp | 0 .../random_downsample_filter_nodelet.cpp | 0 .../src/downsample_filter/robin_hood.h | 0 .../voxel_grid_downsample_filter_nodelet.cpp | 0 .../src/filter.cpp | 0 .../dual_return_outlier_filter_nodelet.cpp | 0 .../radius_search_2d_outlier_filter_nodelet.cpp | 0 .../outlier_filter/ring_outlier_filter_nodelet.cpp | 0 .../voxel_grid_outlier_filter_nodelet.cpp | 0 .../passthrough_filter_nodelet.cpp | 0 .../passthrough_filter_uint16_nodelet.cpp | 0 .../src/passthrough_filter/passthrough_uint16.cpp | 0 .../pointcloud_accumulator_nodelet.cpp | 0 .../src/polygon_remover/polygon_remover.cpp | 0 .../time_synchronizer/time_synchronizer_nodelet.cpp | 0 .../src/utility/geometry.cpp | 0 .../src/utility/memory.cpp | 0 .../lanelet2_map_filter_nodelet.cpp | 0 .../vector_map_inside_area_filter.cpp | 0 .../test/test_distortion_corrector_node.cpp | 0 .../test/test_utilities.cpp | 0 140 files changed, 0 insertions(+), 0 deletions(-) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/CMakeLists.txt (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/README.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/approximate_downsample_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/blockage_diagnostics.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/concatenate_and_time_sync.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/concatenate_pointclouds.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/crop_box_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/distortion_corrector.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/distortion_corrector_node.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/dual_return_outlier_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/lanelet2_map_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/passthrough_filter_unit16.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/pickup_based_voxel_grid_downsample_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/pointcloud_accumulator.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/processing_time_ms.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/radius_search_2d_outlier_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/random_downsample_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/ring_outlier_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/time_synchronizer.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/vector_map_inside_area_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/voxel_grid_downsample_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/config/voxel_grid_outlier_filter.param.yaml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/blockage_diag.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/concatenate-data.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/crop-box-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/distortion-corrector.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/downsample-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/dual-return-outlier-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/blockage_diag.png (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/blockage_diag_flowchart.drawio.svg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/concatenate_data.drawio.svg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/distortion_corrector.jpg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/outlier_filter-dual_return_ROI_setting_options.png (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/outlier_filter-dual_return_detail.drawio.svg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/outlier_filter-dual_return_overall.drawio.svg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/outlier_filter-radius_search_2d.drawio.svg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/outlier_filter-return_type.drawio.svg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/outlier_filter-ring.drawio.svg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/outlier_filter-voxel_grid.drawio.svg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/pointcloud_preprocess_pipeline.drawio.png (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/image/vector_map_inside_area_filter_overview.svg (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/outlier-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/passthrough-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/pointcloud-accumulator.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/radius-search-2d-outlier-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/ring-outlier-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/vector-map-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/vector-map-inside-area-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/docs/voxel-grid-outlier-filter.md (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/blockage_diag/blockage_diag_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/downsample_filter/pickup_based_voxel_grid_downsample_filter.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/filter.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/transform_info.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/utility/geometry.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/utility/memory.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/approximate_downsample_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/blockage_diagnostics_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/crop_box_filter.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/distortion_corrector_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/dual_return_outlier_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/lanelet2_map_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/pointcloud_accumulator_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/polygon_remover.launch.py (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/preprocessor.launch.py (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/preprocessor.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/radius_search_2d_outlier_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/random_downsample_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/ring_outlier_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/ring_passthrough_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/vector_map_inside_area_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/voxel_grid_downsample_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/launch/voxel_grid_outlier_filter_node.launch.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/package.xml (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/approximate_downsample_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/blockage_diag.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/crop_box_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/distortion_corrector_node.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/dual_return_outlier_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/lanelet2_map_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/passthrough_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/pickup_based_voxel_grid_downsample_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/pointcloud_accumulator.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/random_downsample_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/ring_outlier_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/vector_map_inside_area_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/voxel_grid_downsample_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/schema/voxel_grid_outlier_filter.schema.json (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/blockage_diag/blockage_diag_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/concatenate_data/concatenate_pointclouds.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/crop_box_filter/crop_box_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/distortion_corrector/distortion_corrector.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/distortion_corrector/distortion_corrector_node.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/downsample_filter/approximate_downsample_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/downsample_filter/pickup_based_voxel_grid_downsample_filter.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/downsample_filter/random_downsample_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/downsample_filter/robin_hood.h (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/filter.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/outlier_filter/ring_outlier_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/passthrough_filter/passthrough_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/passthrough_filter/passthrough_uint16.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/polygon_remover/polygon_remover.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/time_synchronizer/time_synchronizer_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/utility/geometry.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/utility/memory.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/src/vector_map_filter/vector_map_inside_area_filter.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/test/test_distortion_corrector_node.cpp (100%) rename sensing/{pointcloud_preprocessor => autoware_pointcloud_preprocessor}/test/test_utilities.cpp (100%) diff --git a/sensing/pointcloud_preprocessor/CMakeLists.txt b/sensing/autoware_pointcloud_preprocessor/CMakeLists.txt similarity index 100% rename from sensing/pointcloud_preprocessor/CMakeLists.txt rename to sensing/autoware_pointcloud_preprocessor/CMakeLists.txt diff --git a/sensing/pointcloud_preprocessor/README.md b/sensing/autoware_pointcloud_preprocessor/README.md similarity index 100% rename from sensing/pointcloud_preprocessor/README.md rename to sensing/autoware_pointcloud_preprocessor/README.md diff --git a/sensing/pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/approximate_downsample_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/blockage_diagnostics.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/blockage_diagnostics.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/blockage_diagnostics.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/blockage_diagnostics.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/concatenate_and_time_sync.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/concatenate_pointclouds.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/crop_box_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/crop_box_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/crop_box_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/distortion_corrector.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/distortion_corrector.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/distortion_corrector.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/distortion_corrector.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/distortion_corrector_node.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/distortion_corrector_node.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/distortion_corrector_node.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/distortion_corrector_node.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/dual_return_outlier_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/dual_return_outlier_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/dual_return_outlier_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/dual_return_outlier_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/lanelet2_map_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/lanelet2_map_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/lanelet2_map_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/lanelet2_map_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/passthrough_filter_unit16.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/passthrough_filter_unit16.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/passthrough_filter_unit16.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/passthrough_filter_unit16.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/pickup_based_voxel_grid_downsample_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/pointcloud_accumulator.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/pointcloud_accumulator.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/pointcloud_accumulator.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/pointcloud_accumulator.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/processing_time_ms.xml b/sensing/autoware_pointcloud_preprocessor/config/processing_time_ms.xml similarity index 100% rename from sensing/pointcloud_preprocessor/config/processing_time_ms.xml rename to sensing/autoware_pointcloud_preprocessor/config/processing_time_ms.xml diff --git a/sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/radius_search_2d_outlier_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/radius_search_2d_outlier_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/radius_search_2d_outlier_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/random_downsample_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/random_downsample_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/random_downsample_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/random_downsample_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/ring_outlier_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/ring_outlier_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/ring_outlier_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/ring_outlier_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/time_synchronizer.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/time_synchronizer.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/time_synchronizer.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/time_synchronizer.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/vector_map_inside_area_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/vector_map_inside_area_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/vector_map_inside_area_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/voxel_grid_downsample_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/voxel_grid_downsample_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/voxel_grid_downsample_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/voxel_grid_outlier_filter.param.yaml similarity index 100% rename from sensing/pointcloud_preprocessor/config/voxel_grid_outlier_filter.param.yaml rename to sensing/autoware_pointcloud_preprocessor/config/voxel_grid_outlier_filter.param.yaml diff --git a/sensing/pointcloud_preprocessor/docs/blockage_diag.md b/sensing/autoware_pointcloud_preprocessor/docs/blockage_diag.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/blockage_diag.md rename to sensing/autoware_pointcloud_preprocessor/docs/blockage_diag.md diff --git a/sensing/pointcloud_preprocessor/docs/concatenate-data.md b/sensing/autoware_pointcloud_preprocessor/docs/concatenate-data.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/concatenate-data.md rename to sensing/autoware_pointcloud_preprocessor/docs/concatenate-data.md diff --git a/sensing/pointcloud_preprocessor/docs/crop-box-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/crop-box-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/crop-box-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/crop-box-filter.md diff --git a/sensing/pointcloud_preprocessor/docs/distortion-corrector.md b/sensing/autoware_pointcloud_preprocessor/docs/distortion-corrector.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/distortion-corrector.md rename to sensing/autoware_pointcloud_preprocessor/docs/distortion-corrector.md diff --git a/sensing/pointcloud_preprocessor/docs/downsample-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/downsample-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md diff --git a/sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/dual-return-outlier-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/dual-return-outlier-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/dual-return-outlier-filter.md diff --git a/sensing/pointcloud_preprocessor/docs/image/blockage_diag.png b/sensing/autoware_pointcloud_preprocessor/docs/image/blockage_diag.png similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/blockage_diag.png rename to sensing/autoware_pointcloud_preprocessor/docs/image/blockage_diag.png diff --git a/sensing/pointcloud_preprocessor/docs/image/blockage_diag_flowchart.drawio.svg b/sensing/autoware_pointcloud_preprocessor/docs/image/blockage_diag_flowchart.drawio.svg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/blockage_diag_flowchart.drawio.svg rename to sensing/autoware_pointcloud_preprocessor/docs/image/blockage_diag_flowchart.drawio.svg diff --git a/sensing/pointcloud_preprocessor/docs/image/concatenate_data.drawio.svg b/sensing/autoware_pointcloud_preprocessor/docs/image/concatenate_data.drawio.svg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/concatenate_data.drawio.svg rename to sensing/autoware_pointcloud_preprocessor/docs/image/concatenate_data.drawio.svg diff --git a/sensing/pointcloud_preprocessor/docs/image/distortion_corrector.jpg b/sensing/autoware_pointcloud_preprocessor/docs/image/distortion_corrector.jpg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/distortion_corrector.jpg rename to sensing/autoware_pointcloud_preprocessor/docs/image/distortion_corrector.jpg diff --git a/sensing/pointcloud_preprocessor/docs/image/outlier_filter-dual_return_ROI_setting_options.png b/sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-dual_return_ROI_setting_options.png similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/outlier_filter-dual_return_ROI_setting_options.png rename to sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-dual_return_ROI_setting_options.png diff --git a/sensing/pointcloud_preprocessor/docs/image/outlier_filter-dual_return_detail.drawio.svg b/sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-dual_return_detail.drawio.svg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/outlier_filter-dual_return_detail.drawio.svg rename to sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-dual_return_detail.drawio.svg diff --git a/sensing/pointcloud_preprocessor/docs/image/outlier_filter-dual_return_overall.drawio.svg b/sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-dual_return_overall.drawio.svg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/outlier_filter-dual_return_overall.drawio.svg rename to sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-dual_return_overall.drawio.svg diff --git a/sensing/pointcloud_preprocessor/docs/image/outlier_filter-radius_search_2d.drawio.svg b/sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-radius_search_2d.drawio.svg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/outlier_filter-radius_search_2d.drawio.svg rename to sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-radius_search_2d.drawio.svg diff --git a/sensing/pointcloud_preprocessor/docs/image/outlier_filter-return_type.drawio.svg b/sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-return_type.drawio.svg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/outlier_filter-return_type.drawio.svg rename to sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-return_type.drawio.svg diff --git a/sensing/pointcloud_preprocessor/docs/image/outlier_filter-ring.drawio.svg b/sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-ring.drawio.svg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/outlier_filter-ring.drawio.svg rename to sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-ring.drawio.svg diff --git a/sensing/pointcloud_preprocessor/docs/image/outlier_filter-voxel_grid.drawio.svg b/sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-voxel_grid.drawio.svg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/outlier_filter-voxel_grid.drawio.svg rename to sensing/autoware_pointcloud_preprocessor/docs/image/outlier_filter-voxel_grid.drawio.svg diff --git a/sensing/pointcloud_preprocessor/docs/image/pointcloud_preprocess_pipeline.drawio.png b/sensing/autoware_pointcloud_preprocessor/docs/image/pointcloud_preprocess_pipeline.drawio.png similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/pointcloud_preprocess_pipeline.drawio.png rename to sensing/autoware_pointcloud_preprocessor/docs/image/pointcloud_preprocess_pipeline.drawio.png diff --git a/sensing/pointcloud_preprocessor/docs/image/vector_map_inside_area_filter_overview.svg b/sensing/autoware_pointcloud_preprocessor/docs/image/vector_map_inside_area_filter_overview.svg similarity index 100% rename from sensing/pointcloud_preprocessor/docs/image/vector_map_inside_area_filter_overview.svg rename to sensing/autoware_pointcloud_preprocessor/docs/image/vector_map_inside_area_filter_overview.svg diff --git a/sensing/pointcloud_preprocessor/docs/outlier-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/outlier-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/outlier-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/outlier-filter.md diff --git a/sensing/pointcloud_preprocessor/docs/passthrough-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/passthrough-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md diff --git a/sensing/pointcloud_preprocessor/docs/pointcloud-accumulator.md b/sensing/autoware_pointcloud_preprocessor/docs/pointcloud-accumulator.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/pointcloud-accumulator.md rename to sensing/autoware_pointcloud_preprocessor/docs/pointcloud-accumulator.md diff --git a/sensing/pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md diff --git a/sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/ring-outlier-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/ring-outlier-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/ring-outlier-filter.md diff --git a/sensing/pointcloud_preprocessor/docs/vector-map-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/vector-map-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/vector-map-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/vector-map-filter.md diff --git a/sensing/pointcloud_preprocessor/docs/vector-map-inside-area-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/vector-map-inside-area-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/vector-map-inside-area-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/vector-map-inside-area-filter.md diff --git a/sensing/pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md similarity index 100% rename from sensing/pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md rename to sensing/autoware_pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/blockage_diag/blockage_diag_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/blockage_diag/blockage_diag_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/blockage_diag/blockage_diag_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/blockage_diag/blockage_diag_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/pickup_based_voxel_grid_downsample_filter.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/pickup_based_voxel_grid_downsample_filter.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/pickup_based_voxel_grid_downsample_filter.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/pickup_based_voxel_grid_downsample_filter.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/filter.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/filter.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/filter.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/filter.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/transform_info.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/transform_info.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/transform_info.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/transform_info.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp diff --git a/sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp similarity index 100% rename from sensing/pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp rename to sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp diff --git a/sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/crop_box_filter.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/crop_box_filter.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/crop_box_filter.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/distortion_corrector_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/distortion_corrector_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/distortion_corrector_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/distortion_corrector_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/lanelet2_map_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/lanelet2_map_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/lanelet2_map_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/lanelet2_map_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py b/sensing/autoware_pointcloud_preprocessor/launch/polygon_remover.launch.py similarity index 100% rename from sensing/pointcloud_preprocessor/launch/polygon_remover.launch.py rename to sensing/autoware_pointcloud_preprocessor/launch/polygon_remover.launch.py diff --git a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.py b/sensing/autoware_pointcloud_preprocessor/launch/preprocessor.launch.py similarity index 100% rename from sensing/pointcloud_preprocessor/launch/preprocessor.launch.py rename to sensing/autoware_pointcloud_preprocessor/launch/preprocessor.launch.py diff --git a/sensing/pointcloud_preprocessor/launch/preprocessor.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/preprocessor.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/preprocessor.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/preprocessor.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml similarity index 100% rename from sensing/pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml diff --git a/sensing/pointcloud_preprocessor/package.xml b/sensing/autoware_pointcloud_preprocessor/package.xml similarity index 100% rename from sensing/pointcloud_preprocessor/package.xml rename to sensing/autoware_pointcloud_preprocessor/package.xml diff --git a/sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/blockage_diag.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/blockage_diag.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/crop_box_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/crop_box_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/distortion_corrector_node.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/distortion_corrector_node.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/distortion_corrector_node.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/distortion_corrector_node.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/passthrough_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/passthrough_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/random_downsample_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/random_downsample_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/ring_outlier_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/ring_outlier_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/vector_map_inside_area_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/vector_map_inside_area_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/vector_map_inside_area_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/vector_map_inside_area_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json b/sensing/autoware_pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json similarity index 100% rename from sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json rename to sensing/autoware_pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json diff --git a/sensing/pointcloud_preprocessor/src/blockage_diag/blockage_diag_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/blockage_diag/blockage_diag_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/blockage_diag/blockage_diag_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/blockage_diag/blockage_diag_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp b/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp rename to sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp diff --git a/sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/crop_box_filter/crop_box_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp b/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp rename to sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp diff --git a/sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp b/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp rename to sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/approximate_downsample_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/downsample_filter/approximate_downsample_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/downsample_filter/approximate_downsample_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/downsample_filter/approximate_downsample_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp b/sensing/autoware_pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp rename to sensing/autoware_pointcloud_preprocessor/src/downsample_filter/faster_voxel_grid_downsample_filter.cpp diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/pickup_based_voxel_grid_downsample_filter.cpp b/sensing/autoware_pointcloud_preprocessor/src/downsample_filter/pickup_based_voxel_grid_downsample_filter.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/downsample_filter/pickup_based_voxel_grid_downsample_filter.cpp rename to sensing/autoware_pointcloud_preprocessor/src/downsample_filter/pickup_based_voxel_grid_downsample_filter.cpp diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/downsample_filter/random_downsample_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/robin_hood.h b/sensing/autoware_pointcloud_preprocessor/src/downsample_filter/robin_hood.h similarity index 100% rename from sensing/pointcloud_preprocessor/src/downsample_filter/robin_hood.h rename to sensing/autoware_pointcloud_preprocessor/src/downsample_filter/robin_hood.h diff --git a/sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/downsample_filter/voxel_grid_downsample_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/filter.cpp b/sensing/autoware_pointcloud_preprocessor/src/filter.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/filter.cpp rename to sensing/autoware_pointcloud_preprocessor/src/filter.cpp diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/outlier_filter/dual_return_outlier_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/outlier_filter/radius_search_2d_outlier_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/outlier_filter/ring_outlier_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/outlier_filter/voxel_grid_outlier_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/passthrough_filter/passthrough_filter_uint16_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_uint16.cpp b/sensing/autoware_pointcloud_preprocessor/src/passthrough_filter/passthrough_uint16.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/passthrough_filter/passthrough_uint16.cpp rename to sensing/autoware_pointcloud_preprocessor/src/passthrough_filter/passthrough_uint16.cpp diff --git a/sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/pointcloud_accumulator/pointcloud_accumulator_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/polygon_remover/polygon_remover.cpp b/sensing/autoware_pointcloud_preprocessor/src/polygon_remover/polygon_remover.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/polygon_remover/polygon_remover.cpp rename to sensing/autoware_pointcloud_preprocessor/src/polygon_remover/polygon_remover.cpp diff --git a/sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/time_synchronizer/time_synchronizer_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/utility/geometry.cpp b/sensing/autoware_pointcloud_preprocessor/src/utility/geometry.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/utility/geometry.cpp rename to sensing/autoware_pointcloud_preprocessor/src/utility/geometry.cpp diff --git a/sensing/pointcloud_preprocessor/src/utility/memory.cpp b/sensing/autoware_pointcloud_preprocessor/src/utility/memory.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/utility/memory.cpp rename to sensing/autoware_pointcloud_preprocessor/src/utility/memory.cpp diff --git a/sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp rename to sensing/autoware_pointcloud_preprocessor/src/vector_map_filter/lanelet2_map_filter_nodelet.cpp diff --git a/sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp b/sensing/autoware_pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp rename to sensing/autoware_pointcloud_preprocessor/src/vector_map_filter/vector_map_inside_area_filter.cpp diff --git a/sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp b/sensing/autoware_pointcloud_preprocessor/test/test_distortion_corrector_node.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/test/test_distortion_corrector_node.cpp rename to sensing/autoware_pointcloud_preprocessor/test/test_distortion_corrector_node.cpp diff --git a/sensing/pointcloud_preprocessor/test/test_utilities.cpp b/sensing/autoware_pointcloud_preprocessor/test/test_utilities.cpp similarity index 100% rename from sensing/pointcloud_preprocessor/test/test_utilities.cpp rename to sensing/autoware_pointcloud_preprocessor/test/test_utilities.cpp From 698732e73613e48dbff68400043a458056441c7d Mon Sep 17 00:00:00 2001 From: Ariiees Date: Wed, 24 Jul 2024 01:38:31 -0400 Subject: [PATCH 305/306] rework the comments after merge the main Signed-off-by: Ariiees --- .../blockage_diagnostics_param_file.yaml | 20 - .../config/distortion_corrector.param.yaml | 5 - .../docs/blockage_diag.md | 21 +- .../docs/crop-box-filter.md | 11 +- .../docs/distortion-corrector.md | 8 - .../docs/downsample-filter.md | 30 +- .../docs/dual-return-outlier-filter.md | 26 +- .../docs/passthrough-filter.md | 10 +- .../docs/pointcloud-accumulator.md | 7 +- .../docs/radius-search-2d-outlier-filter.md | 7 +- .../docs/ring-outlier-filter.md | 17 +- .../docs/vector-map-filter.md | 7 +- .../docs/vector-map-inside-area-filter.md | 8 +- .../docs/voxel-grid-outlier-filter.md | 9 +- .../blockage_diag/blockage_diag_nodelet.hpp | 108 ---- .../concatenate_and_time_sync_nodelet.hpp | 196 -------- .../concatenate_pointclouds.hpp | 181 ------- .../crop_box_filter_nodelet.hpp | 107 ---- .../distortion_corrector.hpp | 175 ------- .../distortion_corrector_node.hpp | 76 --- .../approximate_downsample_filter_nodelet.hpp | 87 ---- .../faster_voxel_grid_downsample_filter.hpp | 99 ---- ...kup_based_voxel_grid_downsample_filter.hpp | 65 --- .../random_downsample_filter_nodelet.hpp | 85 ---- .../voxel_grid_downsample_filter_nodelet.hpp | 95 ---- .../pointcloud_preprocessor/filter.hpp | 307 ------------ .../dual_return_outlier_filter_nodelet.hpp | 98 ---- ...adius_search_2d_outlier_filter_nodelet.hpp | 59 --- .../ring_outlier_filter_nodelet.hpp | 111 ---- .../voxel_grid_outlier_filter_nodelet.hpp | 53 -- .../passthrough_filter_nodelet.hpp | 80 --- .../passthrough_filter_uint16_nodelet.hpp | 50 -- .../passthrough_filter/passthrough_uint16.hpp | 474 ------------------ .../pointcloud_accumulator_nodelet.hpp | 50 -- .../polygon_remover/polygon_remover.hpp | 70 --- .../time_synchronizer_nodelet.hpp | 191 ------- .../transform_info.hpp | 43 -- .../utility/geometry.hpp | 97 ---- .../utility/memory.hpp | 40 -- .../lanelet2_map_filter_nodelet.hpp | 100 ---- .../vector_map_inside_area_filter.hpp | 61 --- ... approximate_downsample_filter.launch.xml} | 0 .../blockage_diagnostics_node.launch.xml | 12 - ...dual_return_outlier_filter_node.launch.xml | 24 - ...nch.xml => lanelet2_map_filter.launch.xml} | 0 ...d_voxel_grid_downsample_filter.launch.xml} | 0 ....xml => pointcloud_accumulator.launch.xml} | 0 ...adius_search_2d_outlier_filter.launch.xml} | 0 .../random_downsample_filter_node.launch.xml | 21 - ...nch.xml => ring_outlier_filter.launch.xml} | 0 .../ring_passthrough_filter_node.launch.xml | 21 - ... vector_map_inside_area_filter.launch.xml} | 0 ...> voxel_grid_downsample_filter.launch.xml} | 0 ...l => voxel_grid_outlier_filter.launch.xml} | 0 54 files changed, 14 insertions(+), 3408 deletions(-) delete mode 100644 sensing/autoware_pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml delete mode 100644 sensing/autoware_pointcloud_preprocessor/config/distortion_corrector.param.yaml delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/blockage_diag/blockage_diag_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/pickup_based_voxel_grid_downsample_filter.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/filter.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/transform_info.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp delete mode 100644 sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp rename sensing/autoware_pointcloud_preprocessor/launch/{approximate_downsample_filter_node.launch.xml => approximate_downsample_filter.launch.xml} (100%) delete mode 100644 sensing/autoware_pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml delete mode 100644 sensing/autoware_pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml rename sensing/autoware_pointcloud_preprocessor/launch/{lanelet2_map_filter_node.launch.xml => lanelet2_map_filter.launch.xml} (100%) rename sensing/autoware_pointcloud_preprocessor/launch/{pickup_based_voxel_grid_downsample_filter_node.launch.xml => pickup_based_voxel_grid_downsample_filter.launch.xml} (100%) rename sensing/autoware_pointcloud_preprocessor/launch/{pointcloud_accumulator_node.launch.xml => pointcloud_accumulator.launch.xml} (100%) rename sensing/autoware_pointcloud_preprocessor/launch/{radius_search_2d_outlier_filter_node.launch.xml => radius_search_2d_outlier_filter.launch.xml} (100%) delete mode 100644 sensing/autoware_pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml rename sensing/autoware_pointcloud_preprocessor/launch/{ring_outlier_filter_node.launch.xml => ring_outlier_filter.launch.xml} (100%) delete mode 100644 sensing/autoware_pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml rename sensing/autoware_pointcloud_preprocessor/launch/{vector_map_inside_area_filter_node.launch.xml => vector_map_inside_area_filter.launch.xml} (100%) rename sensing/autoware_pointcloud_preprocessor/launch/{voxel_grid_downsample_filter_node.launch.xml => voxel_grid_downsample_filter.launch.xml} (100%) rename sensing/autoware_pointcloud_preprocessor/launch/{voxel_grid_outlier_filter_node.launch.xml => voxel_grid_outlier_filter.launch.xml} (100%) diff --git a/sensing/autoware_pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml b/sensing/autoware_pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml deleted file mode 100644 index 75503a3caf159..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/config/blockage_diagnostics_param_file.yaml +++ /dev/null @@ -1,20 +0,0 @@ -/**: - ros__parameters: - blockage_ratio_threshold: 0.1 - blockage_count_threshold: 50 - blockage_buffering_frames: 2 - blockage_buffering_interval: 1 - enable_dust_diag: false - publish_debug_image: false - dust_ratio_threshold: 0.2 - dust_count_threshold: 10 - dust_kernel_size: 2 - dust_buffering_frames: 10 - dust_buffering_interval: 1 - max_distance_range: 200.0 - horizontal_resolution: 0.4 - blockage_kernel: 10 - angle_range: [0.0, 360.0] - vertical_bins: 40 - is_channel_order_top2down: true - horizontal_ring_id: 18 diff --git a/sensing/autoware_pointcloud_preprocessor/config/distortion_corrector.param.yaml b/sensing/autoware_pointcloud_preprocessor/config/distortion_corrector.param.yaml deleted file mode 100644 index 7d055c5bee45f..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/config/distortion_corrector.param.yaml +++ /dev/null @@ -1,5 +0,0 @@ -/**: - ros__parameters: - ## Paramters in distortion_corrector.cpp - time_stamp_field_name: "time_stamp" - use_imu: true diff --git a/sensing/autoware_pointcloud_preprocessor/docs/blockage_diag.md b/sensing/autoware_pointcloud_preprocessor/docs/blockage_diag.md index f01833651d8c0..a7e9ec3114882 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/blockage_diag.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/blockage_diag.md @@ -51,26 +51,7 @@ This implementation inherits `autoware::pointcloud_preprocessor::Filter` class, ## Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/blockage_diag.schema.json") }} - -| Name | Type | Description | -| ----------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- | -| `blockage_ratio_threshold` | float | The threshold of blockage area ratio.If the blockage value exceeds this threshold, the diagnostic state will be set to ERROR. | -| `blockage_count_threshold` | float | The threshold of number continuous blockage frames | -| `horizontal_ring_id` | int | The id of horizontal ring of the LiDAR | -| `angle_range` | vector | The effective range of LiDAR | -| `vertical_bins` | int | The LiDAR channel number | -| `is_channel_order_top2down` | bool | If the lidar channels are indexed from top to down | -| `blockage_buffering_frames` | int | The number of buffering about blockage detection [range:1-200] | -| `blockage_buffering_interval` | int | The interval of buffering about blockage detection | -| `dust_ratio_threshold` | float | The threshold of dusty area ratio | -| `dust_count_threshold` | int | The threshold of number continuous frames include dusty area | -| `blockage_kernel` | int | The kernel size of morphology processing the detected blockage area | -| `dust_kernel_size` | int | The kernel size of morphology processing in dusty area detection | -| `dust_buffering_frames` | int | The number of buffering about dusty area detection [range:1-200] | -| `dust_buffering_interval` | int | The interval of buffering about dusty area detection | -| `max_distance_range` | double | Maximum view range for the LiDAR | -| `horizontal_resolution` | double | The horizontal resolution of depth map image [deg/pixel] | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/blockage_diag.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/crop-box-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/crop-box-filter.md index 6b6fa0fe8b219..22778d79839bb 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/crop-box-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/crop-box-filter.md @@ -20,16 +20,7 @@ This implementation inherit `autoware::pointcloud_preprocessor::Filter` class, p ### Core Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/crop_box_filter.schema.json") }} - -| Name | Type | Default Value | Description | -| ------- | ------ | ------------- | ----------------------------------------- | -| `min_x` | double | -1.0 | x-coordinate minimum value for crop range | -| `max_x` | double | 1.0 | x-coordinate maximum value for crop range | -| `min_y` | double | -1.0 | y-coordinate minimum value for crop range | -| `max_y` | double | 1.0 | y-coordinate maximum value for crop range | -| `min_z` | double | -1.0 | z-coordinate minimum value for crop range | -| `max_z` | double | 1.0 | z-coordinate maximum value for crop range | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/crop_box_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/distortion-corrector.md b/sensing/autoware_pointcloud_preprocessor/docs/distortion-corrector.md index 3ec48b61940a3..ab5a07b5279bc 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/distortion-corrector.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/distortion-corrector.md @@ -36,20 +36,12 @@ Please note that the processing time difference between the two distortion metho ### Core Parameters -<<<<<<< HEAD -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/distortion_corrector_node.schema.json") }} -======= {{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/distortion_corrector_node.schema.json") }} ->>>>>>> original/main ## Launch ```bash -<<<<<<< HEAD -ros2 launch pointcloud_preprocessor distortion_corrector.launch.xml -======= ros2 launch autoware_pointcloud_preprocessor distortion_corrector.launch.xml ->>>>>>> original/main ``` ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md index 2b80039cf87d4..6c1204f013987 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/downsample-filter.md @@ -36,41 +36,19 @@ These implementations inherit `autoware::pointcloud_preprocessor::Filter` class, #### Approximate Downsample Filter -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json") }} - -| Name | Type | Default Value | Description | -| -------------- | ------ | ------------- | ---------------- | -| `voxel_size_x` | double | 0.3 | voxel size x [m] | -| `voxel_size_y` | double | 0.3 | voxel size y [m] | -| `voxel_size_z` | double | 0.1 | voxel size z [m] | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/approximate_downsample_filter.schema.json") }} ### Random Downsample Filter -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/random_downsample_filter.schema.json") }} - -| Name | Type | Default Value | Description | -| ------------ | ---- | ------------- | ------------------------------- | -| `sample_num` | int | 1500 | number of indices to be sampled | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/random_downsample_filter.schema.json") }} ### Voxel Grid Downsample Filter -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json") }} - -| Name | Type | Default Value | Description | -| -------------- | ------ | ------------- | ---------------- | -| `voxel_size_x` | double | 0.3 | voxel size x [m] | -| `voxel_size_y` | double | 0.3 | voxel size y [m] | -| `voxel_size_z` | double | 0.1 | voxel size z [m] | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/voxel_grid_downsample_filter.schema.json") }} ### Pickup Based Voxel Grid Downsample Filter -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json") }} - -| Name | Type | Default Value | Description | -| -------------- | ------ | ------------- | ---------------- | -| `voxel_size_x` | double | 1.0 | voxel size x [m] | -| `voxel_size_y` | double | 1.0 | voxel size y [m] | -| `voxel_size_z` | double | 1.0 | voxel size z [m] | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/pickup_based_voxel_grid_downsample_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/dual-return-outlier-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/dual-return-outlier-filter.md index 59661d71220ca..2a7d28ade0559 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/dual-return-outlier-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/dual-return-outlier-filter.md @@ -46,35 +46,11 @@ This implementation inherits `autoware::pointcloud_preprocessor::Filter` class, ### Node Parameters -<<<<<<< HEAD -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json") }} - -This implementation inherits `pointcloud_preprocessor::Filter` class, please refer [README](../README.md). -======= This implementation inherits `autoware::pointcloud_preprocessor::Filter` class, please refer [README](../README.md). ->>>>>>> original/main ### Core Parameters -| Name | Type | Description | -| ---------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------- | -| `vertical_bins` | int | The number of vertical bin for visibility histogram | -| `max_azimuth_diff` | float | Threshold for ring_outlier_filter | -| `weak_first_distance_ratio` | double | Threshold for ring_outlier_filter | -| `general_distance_ratio` | double | Threshold for ring_outlier_filter | -| `weak_first_local_noise_threshold` | int | The parameter for determining whether it is noise | -| `visibility_error_threshold` | float | When the percentage of white pixels in the binary histogram falls below this parameter the diagnostic status becomes ERR | -| `visibility_warn_threshold` | float | When the percentage of white pixels in the binary histogram falls below this parameter the diagnostic status becomes WARN | -| `roi_mode` | string | The name of ROI mode for switching | -| `min_azimuth_deg` | float | The left limit of azimuth for `Fixed_azimuth_ROI` mode | -| `max_azimuth_deg` | float | The right limit of azimuth for `Fixed_azimuth_ROI` mode | -| `max_distance` | float | The limit distance for for `Fixed_azimuth_ROI` mode | -| `x_max` | float | Maximum of x for `Fixed_xyz_ROI` mode | -| `x_min` | float | Minimum of x for `Fixed_xyz_ROI` mode | -| `y_max` | float | Maximum of y for `Fixed_xyz_ROI` mode | -| `y_min` | float | Minimum of y for `Fixed_xyz_ROI` mode | -| `z_max` | float | Maximum of z for `Fixed_xyz_ROI` mode | -| `z_min` | float | Minimum of z for `Fixed_xyz_ROI` mode | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/dual_return_outlier_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md index 6b9e129021e75..1b54ecad8a1be 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/passthrough-filter.md @@ -25,15 +25,7 @@ The `passthrough_filter` is a node that removes points on the outside of a range ### Core Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/passthrough_filter.schema.json") }} - -| Name | Type | Default Value | Description | -| ----------------------- | ------ | ------------- | ------------------------------------------------------ | -| `filter_limit_min` | int | 0 | minimum allowed field value | -| `filter_limit_max` | int | 127 | maximum allowed field value | -| `filter_field_name` | string | "ring" | filtering field name | -| `keep_organized` | bool | false | flag to keep indices structure | -| `filter_limit_negative` | bool | false | flag to return whether the data is inside limit or not | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/passthrough_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/pointcloud-accumulator.md b/sensing/autoware_pointcloud_preprocessor/docs/pointcloud-accumulator.md index a76df48803cbb..7925cecba75d0 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/pointcloud-accumulator.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/pointcloud-accumulator.md @@ -24,12 +24,7 @@ The `pointcloud_accumulator` is a node that accumulates pointclouds for a given ### Core Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json") }} - -| Name | Type | Default Value | Description | -| ------------------------ | ------ | ------------- | ----------------------- | -| `accumulation_time_sec` | double | 2.0 | accumulation period [s] | -| `pointcloud_buffer_size` | int | 50 | buffer size | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/pointcloud_accumulator.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md index 7ecbae3c2fe8e..17696017a1903 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/radius-search-2d-outlier-filter.md @@ -24,12 +24,7 @@ This implementation inherits `autoware::pointcloud_preprocessor::Filter` class, ### Core Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/radius_search_2d_outlier_filter.schema.json") }} - -| Name | Type | Description | -| --------------- | ------ | ------------------------------------------------------------------------------------------------------------------------ | -| `min_neighbors` | int | If points in the circle centered on reference point is less than `min_neighbors`, a reference point is judged as outlier | -| `search_radius` | double | Searching number of points included in `search_radius` | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/radius_search_2d_outlier_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/ring-outlier-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/ring-outlier-filter.md index a805a0bf397fe..2955cb47a0f81 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/ring-outlier-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/ring-outlier-filter.md @@ -56,22 +56,7 @@ This implementation inherits `autoware::pointcloud_preprocessor::Filter` class, ### Core Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/ring_outlier_filter.schema.json") }} - -| Name | Type | Default Value | Description | -| ---------------------------- | ------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------- | -| `distance_ratio` | double | 1.03 | | -| `object_length_threshold` | double | 0.1 | | -| `num_points_threshold` | int | 4 | | -| `max_rings_num` | uint_16 | 128 | | -| `max_points_num_per_ring` | size_t | 4000 | Set this value large enough such that `HFoV / resolution < max_points_num_per_ring` | -| `publish_outlier_pointcloud` | bool | false | Flag to publish outlier pointcloud and visibility score. Due to performance concerns, please set to false during experiments. | -| `min_azimuth_deg` | float | 0.0 | The left limit of azimuth for visibility score calculation | -| `max_azimuth_deg` | float | 360.0 | The right limit of azimuth for visibility score calculation | -| `max_distance` | float | 12.0 | The limit distance for visibility score calculation | -| `vertical_bins` | int | 128 | The number of vertical bin for visibility histogram | -| `horizontal_bins` | int | 36 | The number of horizontal bin for visibility histogram | -| `noise_threshold` | int | 2 | The threshold value for distinguishing noise from valid points in the frequency image | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/ring_outlier_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/vector-map-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/vector-map-filter.md index 52623e42c7f06..61be9921bbb5c 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/vector-map-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/vector-map-filter.md @@ -23,14 +23,9 @@ The `vector_map_filter` is a node that removes points on the outside of lane by ## Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json") }} - ### Core Parameters -| Name | Type | Default Value | Description | -| -------------- | ------ | ------------- | ----------- | -| `voxel_size_x` | double | 0.04 | voxel size | -| `voxel_size_y` | double | 0.04 | voxel size | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/lanelet2_map_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/vector-map-inside-area-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/vector-map-inside-area-filter.md index 8fe0bcfe0a902..fae421d44a29e 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/vector-map-inside-area-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/vector-map-inside-area-filter.md @@ -33,12 +33,6 @@ This implementation inherits `autoware::pointcloud_preprocessor::Filter` class, ### Core Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/vector_map_inside_area_filter.schema.json") }} - -| Name | Type | Description | -| -------------- | ------ | --------------------------- | -| `polygon_type` | string | polygon type to be filtered | -| `use_z` | bool | use z value for filtering | -| `z_threshold` | float | z threshold for filtering | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/vector_map_inside_area_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md b/sensing/autoware_pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md index d9c3f4f0679da..8d8cb0cde26df 100644 --- a/sensing/autoware_pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md +++ b/sensing/autoware_pointcloud_preprocessor/docs/voxel-grid-outlier-filter.md @@ -23,14 +23,7 @@ This implementation inherits `autoware::pointcloud_preprocessor::Filter` class, ### Core Parameters -{{ json_to_markdown("sensing/pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json") }} - -| Name | Type | Default Value | Description | -| ------------------------ | ------ | ------------- | ------------------------------------------ | -| `voxel_size_x` | double | 0.3 | the voxel size along x-axis [m] | -| `voxel_size_y` | double | 0.3 | the voxel size along y-axis [m] | -| `voxel_size_z` | double | 0.1 | the voxel size along z-axis [m] | -| `voxel_points_threshold` | int | 2 | the minimum number of points in each voxel | +{{ json_to_markdown("sensing/autoware_pointcloud_preprocessor/schema/voxel_grid_outlier_filter.schema.json") }} ## Assumptions / Known limits diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/blockage_diag/blockage_diag_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/blockage_diag/blockage_diag_nodelet.hpp deleted file mode 100644 index 18f6c3851866d..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/blockage_diag/blockage_diag_nodelet.hpp +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright 2022 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__BLOCKAGE_DIAG__BLOCKAGE_DIAG_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__BLOCKAGE_DIAG__BLOCKAGE_DIAG_NODELET_HPP_ - -#include "autoware/pointcloud_preprocessor/filter.hpp" - -#include -#include -#include -#include - -#include -#include -#include -#include - -#if __has_include() -#include -#else -#include -#endif - -#include - -#include -#include - -namespace autoware::pointcloud_preprocessor -{ -using diagnostic_updater::DiagnosticStatusWrapper; -using diagnostic_updater::Updater; - -class BlockageDiagComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - image_transport::Publisher lidar_depth_map_pub_; - image_transport::Publisher blockage_mask_pub_; - image_transport::Publisher single_frame_dust_mask_pub; - image_transport::Publisher multi_frame_dust_mask_pub; - image_transport::Publisher blockage_dust_merged_pub; - rclcpp::Publisher::SharedPtr ground_blockage_ratio_pub_; - rclcpp::Publisher::SharedPtr sky_blockage_ratio_pub_; - rclcpp::Publisher::SharedPtr ground_dust_ratio_pub_; - rclcpp::Publisher::SharedPtr blockage_type_pub_; - -private: - void onBlockageChecker(DiagnosticStatusWrapper & stat); - void dustChecker(DiagnosticStatusWrapper & stat); - Updater updater_{this}; - int vertical_bins_; - std::vector angle_range_deg_; - int horizontal_ring_id_; - float blockage_ratio_threshold_; - float dust_ratio_threshold_; - float ground_blockage_ratio_ = -1.0f; - float sky_blockage_ratio_ = -1.0f; - float ground_dust_ratio_ = -1.0f; - std::vector ground_blockage_range_deg_ = {0.0f, 0.0f}; - std::vector sky_blockage_range_deg_ = {0.0f, 0.0f}; - int blockage_kernel_ = 10; - int blockage_frame_count_ = 0; - int ground_blockage_count_ = 0; - int sky_blockage_count_ = 0; - int blockage_count_threshold_; - bool is_channel_order_top2down_; - int blockage_buffering_frames_; - int blockage_buffering_interval_; - bool enable_dust_diag_; - bool publish_debug_image_; - int dust_kernel_size_; - int dust_buffering_frames_; - int dust_buffering_interval_; - int dust_buffering_frame_counter_ = 0; - int dust_count_threshold_; - int dust_frame_count_ = 0; - double max_distance_range_{200.0}; - double horizontal_resolution_{0.4}; - boost::circular_buffer no_return_mask_buffer{1}; - boost::circular_buffer dust_mask_buffer{1}; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit BlockageDiagComponent(const rclcpp::NodeOptions & options); -}; - -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__BLOCKAGE_DIAG__BLOCKAGE_DIAG_NODELET_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp deleted file mode 100644 index 2443e45fe4c63..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp +++ /dev/null @@ -1,196 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/* - * Software License Agreement (BSD License) - * - * Copyright (c) 2009, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Willow Garage, Inc. 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 OWNER 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. - * - * $Id: concatenate_data.cpp 35231 2011-01-14 05:33:20Z rusu $ - * - */ - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__CONCATENATE_DATA__CONCATENATE_AND_TIME_SYNC_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__CONCATENATE_DATA__CONCATENATE_AND_TIME_SYNC_NODELET_HPP_ - -#include -#include -#include -#include -#include -#include -#include - -// ROS includes -#include "autoware_point_types/types.hpp" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace autoware::pointcloud_preprocessor -{ -using autoware_point_types::PointXYZIRC; -using point_cloud_msg_wrapper::PointCloud2Modifier; - -/** \brief @b PointCloudConcatenateDataSynchronizerComponent is a special form of data - * synchronizer: it listens for a set of input PointCloud messages on the same topic, - * checks their timestamps, and concatenates their fields together into a single - * PointCloud output message. - * \author Radu Bogdan Rusu - */ -class PointCloudConcatenateDataSynchronizerComponent : public rclcpp::Node -{ -public: - typedef sensor_msgs::msg::PointCloud2 PointCloud2; - - /** \brief constructor. */ - explicit PointCloudConcatenateDataSynchronizerComponent(const rclcpp::NodeOptions & node_options); - - /** \brief constructor. - * \param queue_size the maximum queue size - */ - PointCloudConcatenateDataSynchronizerComponent( - const rclcpp::NodeOptions & node_options, int queue_size); - - /** \brief Empty destructor. */ - virtual ~PointCloudConcatenateDataSynchronizerComponent() {} - -private: - /** \brief The output PointCloud publisher. */ - rclcpp::Publisher::SharedPtr pub_output_; - /** \brief Delay Compensated PointCloud publisher*/ - std::map::SharedPtr> - transformed_raw_pc_publisher_map_; - - /** \brief The maximum number of messages that we can store in the queue. */ - int maximum_queue_size_ = 3; - - double timeout_sec_ = 0.1; - - bool publish_synchronized_pointcloud_; - bool keep_input_frame_in_synchronized_pointcloud_; - std::string synchronized_pointcloud_postfix_; - - std::set not_subscribed_topic_names_; - - /** \brief A vector of subscriber. */ - std::vector::SharedPtr> filters_; - - rclcpp::Subscription::SharedPtr sub_twist_; - rclcpp::Subscription::SharedPtr sub_odom_; - - rclcpp::TimerBase::SharedPtr timer_; - diagnostic_updater::Updater updater_{this}; - - const std::string input_twist_topic_type_; - - /** \brief Output TF frame the concatenated points should be transformed to. */ - std::string output_frame_; - - /** \brief Input point cloud topics. */ - // XmlRpc::XmlRpcValue input_topics_; - std::vector input_topics_; - - /** \brief TF listener object. */ - std::shared_ptr tf2_buffer_; - std::shared_ptr tf2_listener_; - - std::deque twist_ptr_queue_; - - std::map cloud_stdmap_; - std::map cloud_stdmap_tmp_; - std::mutex mutex_; - - std::vector input_offset_; - std::map offset_map_; - - void transformPointCloud(const PointCloud2::ConstSharedPtr & in, PointCloud2::SharedPtr & out); - Eigen::Matrix4f computeTransformToAdjustForOldTimestamp( - const rclcpp::Time & old_stamp, const rclcpp::Time & new_stamp); - std::map combineClouds( - sensor_msgs::msg::PointCloud2::SharedPtr & concat_cloud_ptr); - void publish(); - - void convertToXYZIRCCloud( - const sensor_msgs::msg::PointCloud2::SharedPtr & input_ptr, - sensor_msgs::msg::PointCloud2::SharedPtr & output_ptr); - void setPeriod(const int64_t new_period); - void cloud_callback( - const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_ptr, - const std::string & topic_name); - void twist_callback(const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr input); - void odom_callback(const nav_msgs::msg::Odometry::ConstSharedPtr input); - void timer_callback(); - - void checkConcatStatus(diagnostic_updater::DiagnosticStatusWrapper & stat); - std::string replaceSyncTopicNamePostfix( - const std::string & original_topic_name, const std::string & postfix); - - /** \brief processing time publisher. **/ - std::unique_ptr> stop_watch_ptr_; - std::unique_ptr debug_publisher_; -}; - -} // namespace autoware::pointcloud_preprocessor - -// clang-format off -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__CONCATENATE_DATA__CONCATENATE_AND_TIME_SYNC_NODELET_HPP_ // NOLINT -// clang-format on diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp deleted file mode 100644 index 36b1910a4d798..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp +++ /dev/null @@ -1,181 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/* - * Software License Agreement (BSD License) - * - * Copyright (c) 2009, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Willow Garage, Inc. 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 OWNER 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. - * - * $Id: concatenate_data.cpp 35231 2011-01-14 05:33:20Z rusu $ - * - */ - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__CONCATENATE_DATA__CONCATENATE_POINTCLOUDS_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__CONCATENATE_DATA__CONCATENATE_POINTCLOUDS_HPP_ - -#include -#include -#include -#include -#include -#include -#include - -// ROS includes -#include "autoware_point_types/types.hpp" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace autoware::pointcloud_preprocessor -{ -using autoware_point_types::PointXYZIRC; -using point_cloud_msg_wrapper::PointCloud2Modifier; -/** \brief @b PointCloudConcatenationComponent is a special form of data - * synchronizer: it listens for a set of input PointCloud messages on the same topic, - * checks their timestamps, and concatenates their fields together into a single - * PointCloud output message. - * \author Radu Bogdan Rusu - */ -class PointCloudConcatenationComponent : public rclcpp::Node -{ -public: - typedef sensor_msgs::msg::PointCloud2 PointCloud2; - - /** \brief constructor. */ - explicit PointCloudConcatenationComponent(const rclcpp::NodeOptions & node_options); - - /** \brief constructor. - * \param queue_size the maximum queue size - */ - PointCloudConcatenationComponent(const rclcpp::NodeOptions & node_options, int queue_size); - - /** \brief Empty destructor. */ - virtual ~PointCloudConcatenationComponent() {} - -private: - /** \brief The output PointCloud publisher. */ - rclcpp::Publisher::SharedPtr pub_output_; - /** \brief Delay Compensated PointCloud publisher*/ - std::map::SharedPtr> - transformed_raw_pc_publisher_map_; - - /** \brief The maximum number of messages that we can store in the queue. */ - int maximum_queue_size_ = 3; - - double timeout_sec_ = 0.1; - - std::set not_subscribed_topic_names_; - - /** \brief A vector of subscriber. */ - std::vector::SharedPtr> filters_; - - rclcpp::Subscription::SharedPtr sub_twist_; - - rclcpp::TimerBase::SharedPtr timer_; - diagnostic_updater::Updater updater_{this}; - - /** \brief Output TF frame the concatenated points should be transformed to. */ - std::string output_frame_; - - /** \brief Input point cloud topics. */ - // XmlRpc::XmlRpcValue input_topics_; - std::vector input_topics_; - - /** \brief TF listener object. */ - std::shared_ptr tf2_buffer_; - std::shared_ptr tf2_listener_; - - std::deque twist_ptr_queue_; - - std::map cloud_stdmap_; - std::map cloud_stdmap_tmp_; - std::mutex mutex_; - - std::vector input_offset_; - std::map offset_map_; - - void transformPointCloud(const PointCloud2::ConstSharedPtr & in, PointCloud2::SharedPtr & out); - void transformPointCloud( - const PointCloud2::ConstSharedPtr & in, PointCloud2::SharedPtr & out, - const std::string & target_frame); - void checkSyncStatus(); - void combineClouds(sensor_msgs::msg::PointCloud2::SharedPtr & concat_cloud_ptr); - void publish(); - - void convertToXYZIRCCloud( - const sensor_msgs::msg::PointCloud2::SharedPtr & input_ptr, - sensor_msgs::msg::PointCloud2::SharedPtr & output_ptr); - void setPeriod(const int64_t new_period); - void cloud_callback( - const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_ptr, - const std::string & topic_name); - void timer_callback(); - - void checkConcatStatus(diagnostic_updater::DiagnosticStatusWrapper & stat); - - /** \brief processing time publisher. **/ - std::unique_ptr> stop_watch_ptr_; - std::unique_ptr debug_publisher_; -}; - -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__CONCATENATE_DATA__CONCATENATE_POINTCLOUDS_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp deleted file mode 100644 index 09b5c7fd5f5fa..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/crop_box_filter/crop_box_filter_nodelet.hpp +++ /dev/null @@ -1,107 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/* - * - * Software License Agreement (BSD License) - * - * Copyright (c) 2010, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Willow Garage, Inc. 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 OWNER 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. - * - * $Id: cropbox.cpp - * - */ - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__CROP_BOX_FILTER__CROP_BOX_FILTER_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__CROP_BOX_FILTER__CROP_BOX_FILTER_NODELET_HPP_ - -#include "autoware/pointcloud_preprocessor/filter.hpp" -#include "autoware/pointcloud_preprocessor/transform_info.hpp" - -#include - -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class CropBoxFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - - // TODO(sykwer): Temporary Implementation: Remove this interface when all the filter nodes conform - // to new API - virtual void faster_filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output, - const TransformInfo & transform_info); - - void publishCropBoxPolygon(); - -private: - struct CropBoxParam - { - float min_x; - float max_x; - float min_y; - float max_y; - float min_z; - float max_z; - bool negative{false}; - } param_; - - rclcpp::Publisher::SharedPtr crop_box_polygon_pub_; - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit CropBoxFilterComponent(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__CROP_BOX_FILTER__CROP_BOX_FILTER_NODELET_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp deleted file mode 100644 index e37329a9a4cc3..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// Copyright 2024 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_HPP_ -#define POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_HPP_ - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -#ifdef ROS_DISTRO_GALACTIC -#include -#else -#include -#endif - -#include -#include -#include - -#include -#include -#include - -namespace pointcloud_preprocessor -{ - -class DistortionCorrectorBase -{ -public: - virtual bool pointcloud_transform_exists() = 0; - virtual bool pointcloud_transform_needed() = 0; - virtual std::deque get_twist_queue() = 0; - virtual std::deque get_angular_velocity_queue() = 0; - - virtual void processTwistMessage( - const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) = 0; - virtual void processIMUMessage( - const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) = 0; - virtual void setPointCloudTransform( - const std::string & base_frame, const std::string & lidar_frame) = 0; - virtual void initialize() = 0; - virtual void undistortPointCloud(bool use_imu, sensor_msgs::msg::PointCloud2 & pointcloud) = 0; -}; - -template -class DistortionCorrector : public DistortionCorrectorBase -{ -protected: - geometry_msgs::msg::TransformStamped::SharedPtr geometry_imu_to_base_link_ptr_; - bool pointcloud_transform_needed_{false}; - bool pointcloud_transform_exists_{false}; - bool imu_transform_exists_{false}; - rclcpp::Node * node_; - tf2_ros::Buffer tf_buffer_; - tf2_ros::TransformListener tf_listener_; - - std::deque twist_queue_; - std::deque angular_velocity_queue_; - - void getIMUTransformation(const std::string & base_frame, const std::string & imu_frame); - void enqueueIMU(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg); - void getTwistAndIMUIterator( - bool use_imu, double first_point_time_stamp_sec, - std::deque::iterator & it_twist, - std::deque::iterator & it_imu); - void warnIfTimestampIsTooLate(bool is_twist_time_stamp_too_late, bool is_imu_time_stamp_too_late); - void undistortPoint( - sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, - sensor_msgs::PointCloud2Iterator & it_z, - std::deque::iterator & it_twist, - std::deque::iterator & it_imu, float const & time_offset, - const bool & is_twist_valid, const bool & is_imu_valid) - { - static_cast(this)->undistortPointImplementation( - it_x, it_y, it_z, it_twist, it_imu, time_offset, is_twist_valid, is_imu_valid); - }; - -public: - explicit DistortionCorrector(rclcpp::Node * node) - : node_(node), tf_buffer_(node_->get_clock()), tf_listener_(tf_buffer_) - { - } - bool pointcloud_transform_exists(); - bool pointcloud_transform_needed(); - std::deque get_twist_queue(); - std::deque get_angular_velocity_queue(); - void processTwistMessage( - const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) override; - - void processIMUMessage( - const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) override; - void undistortPointCloud(bool use_imu, sensor_msgs::msg::PointCloud2 & pointcloud) override; - bool isInputValid(sensor_msgs::msg::PointCloud2 & pointcloud); -}; - -class DistortionCorrector2D : public DistortionCorrector -{ -private: - // defined outside of for loop for performance reasons. - tf2::Quaternion baselink_quat_; - tf2::Transform baselink_tf_odom_; - tf2::Vector3 point_tf_; - tf2::Vector3 undistorted_point_tf_; - float theta_; - float x_; - float y_; - - // TF - tf2::Transform tf2_lidar_to_base_link_; - tf2::Transform tf2_base_link_to_lidar_; - -public: - explicit DistortionCorrector2D(rclcpp::Node * node) : DistortionCorrector(node) {} - void initialize() override; - void undistortPointImplementation( - sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, - sensor_msgs::PointCloud2Iterator & it_z, - std::deque::iterator & it_twist, - std::deque::iterator & it_imu, const float & time_offset, - const bool & is_twist_valid, const bool & is_imu_valid); - - void setPointCloudTransform( - const std::string & base_frame, const std::string & lidar_frame) override; -}; - -class DistortionCorrector3D : public DistortionCorrector -{ -private: - // defined outside of for loop for performance reasons. - Eigen::Vector4f point_eigen_; - Eigen::Vector4f undistorted_point_eigen_; - Eigen::Matrix4f transformation_matrix_; - Eigen::Matrix4f prev_transformation_matrix_; - - // TF - Eigen::Matrix4f eigen_lidar_to_base_link_; - Eigen::Matrix4f eigen_base_link_to_lidar_; - -public: - explicit DistortionCorrector3D(rclcpp::Node * node) : DistortionCorrector(node) {} - void initialize() override; - void undistortPointImplementation( - sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, - sensor_msgs::PointCloud2Iterator & it_z, - std::deque::iterator & it_twist, - std::deque::iterator & it_imu, const float & time_offset, - const bool & is_twist_valid, const bool & is_imu_valid); - void setPointCloudTransform( - const std::string & base_frame, const std::string & lidar_frame) override; -}; - -} // namespace pointcloud_preprocessor - -#endif // POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp deleted file mode 100644 index 78cdb80838678..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright 2024 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp -#ifndef POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ -#define POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ - -#include "pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" -======== -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ - -#include "autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp - -#include -#include -#include - -#include -#include -#include -#include - -#include -#include - -namespace autoware::pointcloud_preprocessor -{ -using rcl_interfaces::msg::SetParametersResult; -using sensor_msgs::msg::PointCloud2; - -class DistortionCorrectorComponent : public rclcpp::Node -{ -public: - explicit DistortionCorrectorComponent(const rclcpp::NodeOptions & options); - -private: - rclcpp::Subscription::SharedPtr twist_sub_; - rclcpp::Subscription::SharedPtr imu_sub_; - rclcpp::Subscription::SharedPtr pointcloud_sub_; - - rclcpp::Publisher::SharedPtr undistorted_pointcloud_pub_; - - std::unique_ptr> stop_watch_ptr_; - std::unique_ptr debug_publisher_; - - std::string base_frame_; - bool use_imu_; - bool use_3d_distortion_correction_; - - std::unique_ptr distortion_corrector_; - - void onPointCloud(PointCloud2::UniquePtr points_msg); - void onTwist(const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg); - void onImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg); -}; - -} // namespace autoware::pointcloud_preprocessor - -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp -#endif // POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ -======== -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp deleted file mode 100644 index d5d2750442a2f..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/approximate_downsample_filter_nodelet.hpp +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2020 Tier IV, Inc. All rights reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// -/* - * Software License Agreement (BSD License) - * - * Copyright (c) 2009, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Willow Garage, Inc. 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 OWNER 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. - * - * $Id: voxel_grid.cpp 35876 2011-02-09 01:04:36Z rusu $ - * - */ -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__APPROXIMATE_DOWNSAMPLE_FILTER_NODELET_HPP_ // NOLINT -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__APPROXIMATE_DOWNSAMPLE_FILTER_NODELET_HPP_ // NOLINT - -#include "autoware/pointcloud_preprocessor/filter.hpp" - -#include - -#include -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class ApproximateDownsampleFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output) override; - - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -private: - double voxel_size_x_; - double voxel_size_y_; - double voxel_size_z_; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit ApproximateDownsampleFilterComponent(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -// clang-format off -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__APPROXIMATE_DOWNSAMPLE_FILTER_NODELET_HPP_ // NOLINT -// clang-format on diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp deleted file mode 100644 index 89d6ea51a7283..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/faster_voxel_grid_downsample_filter.hpp +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include "autoware/pointcloud_preprocessor/transform_info.hpp" - -#include -#include -#include - -#include -#include - -namespace autoware::pointcloud_preprocessor -{ - -class FasterVoxelGridDownsampleFilter -{ - using PointCloud2 = sensor_msgs::msg::PointCloud2; - using PointCloud2ConstPtr = sensor_msgs::msg::PointCloud2::ConstSharedPtr; - -public: - FasterVoxelGridDownsampleFilter(); - void set_voxel_size(float voxel_size_x, float voxel_size_y, float voxel_size_z); - void set_field_offsets(const PointCloud2ConstPtr & input, const rclcpp::Logger & logger); - void filter( - const PointCloud2ConstPtr & input, PointCloud2 & output, const TransformInfo & transform_info, - const rclcpp::Logger & logger); - -private: - struct Centroid - { - float x; - float y; - float z; - float intensity; - uint32_t point_count_; - - Centroid() : x(0), y(0), z(0), intensity(0) {} - Centroid(float _x, float _y, float _z, float _intensity) - : x(_x), y(_y), z(_z), intensity(_intensity) - { - this->point_count_ = 1; - } - - void add_point(float _x, float _y, float _z, float _intensity) - { - this->x += _x; - this->y += _y; - this->z += _z; - this->intensity += _intensity; - this->point_count_++; - } - - Eigen::Vector4f calc_centroid() const - { - Eigen::Vector4f centroid( - (this->x / this->point_count_), (this->y / this->point_count_), - (this->z / this->point_count_), (this->intensity / this->point_count_)); - return centroid; - } - }; - - Eigen::Vector3f inverse_voxel_size_; - int x_offset_; - int y_offset_; - int z_offset_; - int intensity_index_; - int intensity_offset_; - bool offset_initialized_; - - Eigen::Vector4f get_point_from_global_offset( - const PointCloud2ConstPtr & input, size_t global_offset); - - bool get_min_max_voxel( - const PointCloud2ConstPtr & input, Eigen::Vector3i & min_voxel, Eigen::Vector3i & max_voxel); - - std::unordered_map calc_centroids_each_voxel( - const PointCloud2ConstPtr & input, const Eigen::Vector3i & max_voxel, - const Eigen::Vector3i & min_voxel); - - void copy_centroids_to_output( - std::unordered_map & voxel_centroid_map, PointCloud2 & output, - const TransformInfo & transform_info); -}; - -} // namespace autoware::pointcloud_preprocessor diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/pickup_based_voxel_grid_downsample_filter.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/pickup_based_voxel_grid_downsample_filter.hpp deleted file mode 100644 index 9a1f2780be11b..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/pickup_based_voxel_grid_downsample_filter.hpp +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__PICKUP_BASED_VOXEL_GRID_DOWNSAMPLE_FILTER_HPP_ // NOLINT -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__PICKUP_BASED_VOXEL_GRID_DOWNSAMPLE_FILTER_HPP_ // NOLINT - -#include "autoware/pointcloud_preprocessor/filter.hpp" - -#include - -#include -#include - -#include -#include -#include - -namespace autoware::pointcloud_preprocessor -{ -/** - * @class PickupBasedVoxelGridDownsampleFilterComponent - * @brief A filter component for downsampling point clouds using a voxel grid approach. - * - * This component reduces the number of points in a point cloud by grouping them into voxels - * and picking a representative point for each voxel. It's useful for reducing computational - * load when processing large point clouds. - */ -class PickupBasedVoxelGridDownsampleFilterComponent -: public autoware::pointcloud_preprocessor::Filter -{ -protected: - void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output) override; - -private: - float voxel_size_x_; ///< The size of the voxel in the x dimension. - float voxel_size_y_; ///< The size of the voxel in the y dimension. - float voxel_size_z_; ///< The size of the voxel in the z dimension. - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit PickupBasedVoxelGridDownsampleFilterComponent(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -// clang-format off -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__PICKUP_BASED_VOXEL_GRID_DOWNSAMPLE_FILTER_HPP_ // NOLINT -// clang-format on diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp deleted file mode 100644 index f820793fb86f8..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/random_downsample_filter_nodelet.hpp +++ /dev/null @@ -1,85 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/* - * Software License Agreement (BSD License) - * - * Copyright (c) 2009, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Willow Garage, Inc. 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 OWNER 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. - * - * $Id: voxel_grid.cpp 35876 2011-02-09 01:04:36Z rusu $ - * - */ - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__RANDOM_DOWNSAMPLE_FILTER_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__RANDOM_DOWNSAMPLE_FILTER_NODELET_HPP_ - -#include "autoware/pointcloud_preprocessor/filter.hpp" - -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class RandomDownsampleFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output) override; - -private: - size_t sample_num_; - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit RandomDownsampleFilterComponent(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -// clang-format off -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__RANDOM_DOWNSAMPLE_FILTER_NODELET_HPP_ // NOLINT -// clang-format on diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp deleted file mode 100644 index 1af2eb5b04552..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/downsample_filter/voxel_grid_downsample_filter_nodelet.hpp +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/* - * Software License Agreement (BSD License) - * - * Copyright (c) 2009, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Willow Garage, Inc. 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 OWNER 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. - * - * $Id: voxel_grid.cpp 35876 2011-02-09 01:04:36Z rusu $ - * - */ - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__VOXEL_GRID_DOWNSAMPLE_FILTER_NODELET_HPP_ // NOLINT -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__VOXEL_GRID_DOWNSAMPLE_FILTER_NODELET_HPP_ // NOLINT - -#include "autoware/pointcloud_preprocessor/filter.hpp" -#include "autoware/pointcloud_preprocessor/transform_info.hpp" - -#include -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class VoxelGridDownsampleFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output) override; - - // TODO(atsushi421): Temporary Implementation: Remove this interface when all the filter nodes - // conform to new API - virtual void faster_filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output, - const TransformInfo & transform_info); - -private: - float voxel_size_x_; - float voxel_size_y_; - float voxel_size_z_; - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit VoxelGridDownsampleFilterComponent(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -// clang-format off -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__DOWNSAMPLE_FILTER__VOXEL_GRID_DOWNSAMPLE_FILTER_NODELET_HPP_ // NOLINT -// clang-format on diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/filter.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/filter.hpp deleted file mode 100644 index a6e113412231a..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/filter.hpp +++ /dev/null @@ -1,307 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/* - * Software License Agreement (BSD License) - * - * Copyright (c) 2009, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Willow Garage, Inc. 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 OWNER 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. - * - * $Id: filter.h 35876 2011-02-09 01:04:36Z rusu $ - * - */ - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__FILTER_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__FILTER_HPP_ - -#include "autoware/pointcloud_preprocessor/transform_info.hpp" - -#include -#include -#include - -// PCL includes -#include - -#include -#include -// PCL includes -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Include TF -#include -#include -#include - -// Include tier4 autoware utils -#include -#include -#include - -namespace autoware::pointcloud_preprocessor -{ -namespace sync_policies = message_filters::sync_policies; - -/** \brief For parameter service callback */ -template -bool get_param(const std::vector & p, const std::string & name, T & value) -{ - auto it = std::find_if(p.cbegin(), p.cend(), [&name](const rclcpp::Parameter & parameter) { - return parameter.get_name() == name; - }); - if (it != p.cend()) { - value = it->template get_value(); - return true; - } - return false; -} - -/** \brief @b Filter represents the base filter class. Some generic 3D operations that are - * applicable to all filters are defined here as static methods. \author Radu Bogdan Rusu - */ -class Filter : public rclcpp::Node -{ -public: - using PointCloud2 = sensor_msgs::msg::PointCloud2; - using PointCloud2ConstPtr = sensor_msgs::msg::PointCloud2::ConstSharedPtr; - - using PointCloud = pcl::PointCloud; - using PointCloudPtr = PointCloud::Ptr; - using PointCloudConstPtr = PointCloud::ConstPtr; - - using PointIndices = pcl_msgs::msg::PointIndices; - using PointIndicesPtr = PointIndices::SharedPtr; - using PointIndicesConstPtr = PointIndices::ConstSharedPtr; - - using ModelCoefficients = pcl_msgs::msg::ModelCoefficients; - using ModelCoefficientsPtr = ModelCoefficients::SharedPtr; - using ModelCoefficientsConstPtr = ModelCoefficients::ConstSharedPtr; - - using IndicesPtr = pcl::IndicesPtr; - using IndicesConstPtr = pcl::IndicesConstPtr; - - using ExactTimeSyncPolicy = - message_filters::Synchronizer>; - using ApproximateTimeSyncPolicy = - message_filters::Synchronizer>; - - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit Filter( - const std::string & filter_name = "pointcloud_preprocessor_filter", - const rclcpp::NodeOptions & options = rclcpp::NodeOptions()); - -protected: - /** \brief The input PointCloud2 subscriber. */ - rclcpp::Subscription::SharedPtr sub_input_; - - /** \brief The output PointCloud2 publisher. */ - rclcpp::Publisher::SharedPtr pub_output_; - - /** \brief The message filter subscriber for PointCloud2. */ - message_filters::Subscriber sub_input_filter_; - - /** \brief The message filter subscriber for PointIndices. */ - message_filters::Subscriber sub_indices_filter_; - - /** \brief The desired user filter field name. */ - std::string filter_field_name_; - - /** \brief The minimum allowed filter value a point will be considered from. */ - double filter_limit_min_; - - /** \brief The maximum allowed filter value a point will be considered from. */ - double filter_limit_max_; - - /** \brief Set to true if we want to return the data outside (\a filter_limit_min_;\a - * filter_limit_max_). Default: false. */ - bool filter_limit_negative_; - - /** \brief The input TF frame the data should be transformed into, - * if input.header.frame_id is different. */ - std::string tf_input_frame_; - - /** \brief The original data input TF frame. */ - std::string tf_input_orig_frame_; - - /** \brief The output TF frame the data should be transformed into, - * if input.header.frame_id is different. */ - std::string tf_output_frame_; - - /** \brief Internal mutex. */ - std::mutex mutex_; - - /** \brief processing time publisher. **/ - std::unique_ptr> stop_watch_ptr_; - std::unique_ptr debug_publisher_; - std::unique_ptr published_time_publisher_; - - /** \brief Virtual abstract filter method. To be implemented by every child. - * \param input the input point cloud dataset. - * \param indices a pointer to the vector of point indices to use. - * \param output the resultant filtered PointCloud2 - */ - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output) = 0; - - // TODO(sykwer): Temporary Implementation: Remove this interface when all the filter nodes conform - // to new API. It's not pure virtual function so that a child class does not have to implement - // this function. - virtual void faster_filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output, - const TransformInfo & transform_info); // != 0 - - /** \brief Lazy transport subscribe routine. */ - virtual void subscribe(const std::string & filter_name); - virtual void subscribe(); - - /** \brief Lazy transport unsubscribe routine. */ - virtual void unsubscribe(); - - /** \brief Call the child filter () method, optionally transform the result, and publish it. - * \param input the input point cloud dataset. - * \param indices a pointer to the vector of point indices to use. - */ - void computePublish(const PointCloud2ConstPtr & input, const IndicesPtr & indices); - - ////////////////////// - // from PCLNodelet // - ////////////////////// - /** \brief Set to true if point indices are used. - * - * When receiving a point cloud, if use_indices_ is false, the entire - * point cloud is processed for the given operation. If use_indices_ is - * true, then the ~indices topic is read to get the vector of point - * indices specifying the subset of the point cloud that will be used for - * the operation. In the case where use_indices_ is true, the ~input and - * ~indices topics must be synchronised in time, either exact or within a - * specified jitter. See also @ref latched_indices_ and approximate_sync. - **/ - bool use_indices_ = false; - /** \brief Set to true if the indices topic is latched. - * - * If use_indices_ is true, the ~input and ~indices topics generally must - * be synchronised in time. By setting this flag to true, the most recent - * value from ~indices can be used instead of requiring a synchronised - * message. - **/ - bool latched_indices_ = false; - - /** \brief The maximum queue size (default: 3). */ - size_t max_queue_size_ = 3; - - /** \brief True if we use an approximate time synchronizer - * versus an exact one (false by default). */ - bool approximate_sync_ = false; - - std::shared_ptr tf_buffer_; - std::shared_ptr tf_listener_; - - inline bool isValid( - const PointCloud2ConstPtr & cloud, const std::string & /*topic_name*/ = "input") - { - if (cloud->width * cloud->height * cloud->point_step != cloud->data.size()) { - RCLCPP_WARN( - this->get_logger(), - "Invalid PointCloud (data = %zu, width = %d, height = %d, step = %d) with stamp %f, " - "and frame %s received!", - cloud->data.size(), cloud->width, cloud->height, cloud->point_step, - rclcpp::Time(cloud->header.stamp).seconds(), cloud->header.frame_id.c_str()); - return false; - } - return true; - } - - inline bool isValid( - const PointIndicesConstPtr & /*indices*/, const std::string & /*topic_name*/ = "indices") - { - return true; - } - - inline bool isValid( - const ModelCoefficientsConstPtr & /*model*/, const std::string & /*topic_name*/ = "model") - { - return true; - } - -private: - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_filter_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult filterParamCallback( - const std::vector & p); - - /** \brief Synchronized input, and indices.*/ - std::shared_ptr sync_input_indices_e_; - std::shared_ptr sync_input_indices_a_; - - /** \brief PointCloud2 + Indices data callback. */ - void input_indices_callback(const PointCloud2ConstPtr cloud, const PointIndicesConstPtr indices); - - /** \brief Get a matrix for conversion from the original frame to the target frame */ - bool calculate_transform_matrix( - const std::string & target_frame, const sensor_msgs::msg::PointCloud2 & from, - TransformInfo & transform_info /*output*/); - - bool _calculate_transform_matrix( - const std::string & target_frame, const sensor_msgs::msg::PointCloud2 & from, - const tf2_ros::Buffer & tf_buffer, Eigen::Matrix4f & eigen_transform /*output*/); - - bool convert_output_costly(std::unique_ptr & output); - - // TODO(sykwer): Temporary Implementation: Remove this interface when all the filter nodes conform - // to new API. - void faster_input_indices_callback( - const PointCloud2ConstPtr cloud, const PointIndicesConstPtr indices); - - void setupTF(); -}; -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__FILTER_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp deleted file mode 100644 index b8aba769b17a5..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/dual_return_outlier_filter_nodelet.hpp +++ /dev/null @@ -1,98 +0,0 @@ -// Copyright 2021 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__DUAL_RETURN_OUTLIER_FILTER_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__DUAL_RETURN_OUTLIER_FILTER_NODELET_HPP_ - -#include "autoware/pointcloud_preprocessor/filter.hpp" - -#include -#include -#include -#include - -#include -#include -#include - -#if __has_include() -#include -#else -#include -#endif -#include -#include - -#include -#include -#include - -namespace autoware::pointcloud_preprocessor -{ -using diagnostic_updater::DiagnosticStatusWrapper; -using diagnostic_updater::Updater; - -class DualReturnOutlierFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - image_transport::Publisher image_pub_; - rclcpp::Publisher::SharedPtr visibility_pub_; - rclcpp::Publisher::SharedPtr noise_cloud_pub_; - -private: - void onVisibilityChecker(DiagnosticStatusWrapper & stat); - Updater updater_{this}; - double visibility_ = -1.0f; - double weak_first_distance_ratio_; - double general_distance_ratio_; - int weak_first_local_noise_threshold_; - double visibility_error_threshold_; - double visibility_warn_threshold_; - int vertical_bins_; - float max_azimuth_diff_; - std::string roi_mode_; - float x_max_; - float x_min_; - float y_max_; - float y_min_; - float z_max_; - float z_min_; - - float min_azimuth_deg_; - float max_azimuth_deg_; - float max_distance_; - - std::unordered_map roi_mode_map_ = { - {"No_ROI", 0}, - {"Fixed_xyz_ROI", 1}, - {"Fixed_azimuth_ROI", 2}, - }; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit DualReturnOutlierFilterComponent(const rclcpp::NodeOptions & options); -}; - -} // namespace autoware::pointcloud_preprocessor - -// clang-format off -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__DUAL_RETURN_OUTLIER_FILTER_NODELET_HPP_ // NOLINT -// clang-format on diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp deleted file mode 100644 index ffb737b0b9b06..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/radius_search_2d_outlier_filter_nodelet.hpp +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__RADIUS_SEARCH_2D_OUTLIER_FILTER_NODELET_HPP_ // NOLINT -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__RADIUS_SEARCH_2D_OUTLIER_FILTER_NODELET_HPP_ // NOLINT - -#include "autoware/pointcloud_preprocessor/filter.hpp" - -#include - -#include -#include -#include -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class RadiusSearch2DOutlierFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - -private: - double search_radius_; - size_t min_neighbors_; - - // pcl::RadiusOutlierRemoval radius_outlier_removal_; - pcl::search::Search::Ptr kd_tree_; - // pcl::ExtractIndices extract_indices_; - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit RadiusSearch2DOutlierFilterComponent(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -// clang-format off -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__RADIUS_SEARCH_2D_OUTLIER_FILTER_NODELET_HPP_ // NOLINT -// clang-format on diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp deleted file mode 100644 index caedeac62b88a..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/ring_outlier_filter_nodelet.hpp +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__RING_OUTLIER_FILTER_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__RING_OUTLIER_FILTER_NODELET_HPP_ - -#include "autoware/pointcloud_preprocessor/filter.hpp" -#include "autoware/pointcloud_preprocessor/transform_info.hpp" -#include "autoware_point_types/types.hpp" - -#include -#include - -#if __has_include() -#include -#else -#include -#endif - -#include -#include -#include -#include - -namespace autoware::pointcloud_preprocessor -{ -using point_cloud_msg_wrapper::PointCloud2Modifier; - -class RingOutlierFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - using InputPointIndex = autoware_point_types::PointXYZIRCAEDTIndex; - using InputPointType = autoware_point_types::PointXYZIRCAEDT; - using OutputPointType = autoware_point_types::PointXYZIRC; - - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - - // TODO(sykwer): Temporary Implementation: Remove this interface when all the filter nodes conform - // to new API - virtual void faster_filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output, - const TransformInfo & transform_info); - - rclcpp::Publisher::SharedPtr visibility_pub_; - -private: - /** \brief publisher of excluded pointcloud for debug reason. **/ - rclcpp::Publisher::SharedPtr outlier_pointcloud_publisher_; - - double distance_ratio_; - double object_length_threshold_; - int num_points_threshold_; - uint16_t max_rings_num_; - size_t max_points_num_per_ring_; - bool publish_outlier_pointcloud_; - - // for visibility score - int noise_threshold_; - int vertical_bins_; - int horizontal_bins_; - - float min_azimuth_deg_; - float max_azimuth_deg_; - float max_distance_; - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - - bool isCluster( - const PointCloud2ConstPtr & input, std::pair data_idx_both_ends, int walk_size) - { - if (walk_size > num_points_threshold_) return true; - - auto first_point = - reinterpret_cast(&input->data[data_idx_both_ends.first]); - auto last_point = - reinterpret_cast(&input->data[data_idx_both_ends.second]); - - const auto x = first_point->x - last_point->x; - const auto y = first_point->y - last_point->y; - const auto z = first_point->z - last_point->z; - - return x * x + y * y + z * z >= object_length_threshold_ * object_length_threshold_; - } - - void setUpPointCloudFormat( - const PointCloud2ConstPtr & input, PointCloud2 & formatted_points, size_t points_size); - float calculateVisibilityScore(const PointCloud2 & input); - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit RingOutlierFilterComponent(const rclcpp::NodeOptions & options); -}; - -} // namespace autoware::pointcloud_preprocessor -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__RING_OUTLIER_FILTER_NODELET_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp deleted file mode 100644 index 4ec50c53c2393..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/outlier_filter/voxel_grid_outlier_filter_nodelet.hpp +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__VOXEL_GRID_OUTLIER_FILTER_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__VOXEL_GRID_OUTLIER_FILTER_NODELET_HPP_ - -#include "autoware/pointcloud_preprocessor/filter.hpp" - -#include -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class VoxelGridOutlierFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -private: - double voxel_size_x_; - double voxel_size_y_; - double voxel_size_z_; - int voxel_points_threshold_; - - pcl::VoxelGrid voxel_filter; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit VoxelGridOutlierFilterComponent(const rclcpp::NodeOptions & option); -}; -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__OUTLIER_FILTER__VOXEL_GRID_OUTLIER_FILTER_NODELET_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp deleted file mode 100644 index bbb2c0b113658..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_nodelet.hpp +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/* - * Software License Agreement (BSD License) - * - * Copyright (c) 2010, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Willow Garage, Inc. 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 OWNER 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. - * - * $Id: passthrough.cpp 36194 2011-02-23 07:49:21Z rusu $ - * - */ - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__PASSTHROUGH_FILTER__PASSTHROUGH_FILTER_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__PASSTHROUGH_FILTER__PASSTHROUGH_FILTER_NODELET_HPP_ - -#include "autoware/pointcloud_preprocessor/filter.hpp" - -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class PassThroughFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit PassThroughFilterComponent(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__PASSTHROUGH_FILTER__PASSTHROUGH_FILTER_NODELET_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp deleted file mode 100644 index 0ffb50dc65092..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_filter_uint16_nodelet.hpp +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__PASSTHROUGH_FILTER__PASSTHROUGH_FILTER_UINT16_NODELET_HPP_ // NOLINT -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__PASSTHROUGH_FILTER__PASSTHROUGH_FILTER_UINT16_NODELET_HPP_ // NOLINT - -#include "autoware/pointcloud_preprocessor/filter.hpp" -#include "autoware/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp" - -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class PassThroughFilterUInt16Component : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -private: - pcl::PassThroughUInt16 impl_; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit PassThroughFilterUInt16Component(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -// clang-format off -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__PASSTHROUGH_FILTER__PASSTHROUGH_FILTER_UINT16_NODELET_HPP_ // NOLINT -// clang-format on diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp deleted file mode 100644 index 7da891f20955b..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/passthrough_filter/passthrough_uint16.hpp +++ /dev/null @@ -1,474 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -/* - * Software License Agreement (BSD License) - * - * Point Cloud Library (PCL) - www.pointclouds.org - * Copyright (c) 2010-2012, Willow Garage, Inc. - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of the copyright holder(s) 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 OWNER 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. - * - * $Id$ - * - */ - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__PASSTHROUGH_FILTER__PASSTHROUGH_UINT16_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__PASSTHROUGH_FILTER__PASSTHROUGH_UINT16_HPP_ - -#include -#include - -#include -#include -#include - -namespace pcl -{ -// cspell: ignore ptfilter -/** \brief @b PassThroughUInt16 passes points in a cloud based on constraints for one particular - * field of the point type. \details Iterates through the entire input once, automatically filtering - * non-finite points and the points outside the interval specified by setFilterLimits(), which - * applies only to the field specified by setFilterFieldName().

Usage example: \code - * pcl::PassThroughUInt16 ptfilter (true); // Initializing with true will allow us to - * extract the removed indices ptfilter.setInputCloud (cloud_in); ptfilter.setFilterFieldName ("x"); - * ptfilter.setFilterLimits (0.0, 1000.0); - * ptfilter.filter (*indices_x); - * // The indices_x array indexes all points of cloud_in that have x between 0.0 and 1000.0 - * indices_rem = ptfilter.getRemovedIndices (); - * // The indices_rem array indexes all points of cloud_in that have x smaller than 0.0 or larger - * than 1000.0 - * // and also indexes all non-finite points of cloud_in - * ptfilter.setIndices (indices_x); - * ptfilter.setFilterFieldName ("z"); - * ptfilter.setFilterLimits (-10.0, 10.0); - * ptfilter.setNegative (true); - * ptfilter.filter (*indices_xz); - * // The indices_xz array indexes all points of cloud_in that have x between 0.0 and 1000.0 and z - * larger than 10.0 or smaller than -10.0 ptfilter.setIndices (indices_xz); - * ptfilter.setFilterFieldName ("intensity"); - * ptfilter.setFilterLimits (FLT_MIN, 0.5); - * ptfilter.setNegative (false); - * ptfilter.filter (*cloud_out); - * // The resulting cloud_out contains all points of cloud_in that are finite and have: - * // x between 0.0 and 1000.0, z larger than 10.0 or smaller than -10.0 and intensity smaller than - * 0.5. \endcode \author Radu Bogdan Rusu \ingroup filters - */ -template -class PassThroughUInt16 : public FilterIndices -{ -protected: - typedef typename FilterIndices::PointCloud PointCloud; - typedef typename PointCloud::Ptr PointCloudPtr; - typedef typename PointCloud::ConstPtr PointCloudConstPtr; - typedef typename pcl::traits::fieldList::type FieldList; - -public: - typedef pcl::shared_ptr> Ptr; - typedef pcl::shared_ptr> ConstPtr; - - /** \brief Constructor. - * \param[in] extract_removed_indices Set to true if you want to be able to extract the indices of - * points being removed (default = false). - */ - explicit PassThroughUInt16(bool extract_removed_indices = false) - : FilterIndices::FilterIndices(extract_removed_indices), - filter_field_name_(""), - filter_limit_min_(0), - filter_limit_max_(UINT16_MAX) - { - filter_name_ = "PassThroughUInt16"; - } - - /** \brief Provide the name of the field to be used for filtering data. - * \details In conjunction with setFilterLimits(), points having values outside this interval for - * this field will be discarded. \param[in] field_name The name of the field that will be used for - * filtering. - */ - inline void setFilterFieldName(const std::string & field_name) - { - filter_field_name_ = field_name; - } - - /** \brief Retrieve the name of the field to be used for filtering data. - * \return The name of the field that will be used for filtering. - */ - inline std::string const getFilterFieldName() { return filter_field_name_; } - - /** \brief Set the numerical limits for the field for filtering data. - * \details In conjunction with setFilterFieldName(), points having values outside this interval - * for this field will be discarded. \param[in] limit_min The minimum allowed field value (default - * = FLT_MIN). \param[in] limit_max The maximum allowed field value (default = FLT_MAX). - */ - inline void setFilterLimits(const std::uint16_t & limit_min, const std::uint16_t & limit_max) - { - filter_limit_min_ = limit_min; - filter_limit_max_ = limit_max; - } - - /** \brief Get the numerical limits for the field for filtering data. - * \param[out] limit_min The minimum allowed field value (default = FLT_MIN). - * \param[out] limit_max The maximum allowed field value (default = FLT_MAX). - */ - inline void getFilterLimits(std::uint16_t & limit_min, std::uint16_t & limit_max) - { - limit_min = filter_limit_min_; - limit_max = filter_limit_max_; - } - - /** \brief Set to true if we want to return the data outside the interval specified by - * setFilterLimits (min, max) Default: false. \warning This method will be removed in the future. - * Use setNegative() instead. \param[in] limit_negative return data inside the interval (false) or - * outside (true) - */ - inline void setFilterLimitsNegative(const bool limit_negative) { negative_ = limit_negative; } - - /** \brief Get whether the data outside the interval (min/max) is to be returned (true) or inside - * (false). \warning This method will be removed in the future. Use getNegative() instead. - * \param[out] limit_negative true if data \b outside the interval [min; max] is to be returned, - * false otherwise - */ - inline void getFilterLimitsNegative(bool & limit_negative) { limit_negative = negative_; } - - /** \brief Get whether the data outside the interval (min/max) is to be returned (true) or inside - * (false). \warning This method will be removed in the future. Use getNegative() instead. \return - * true if data \b outside the interval [min; max] is to be returned, false otherwise - */ - inline bool getFilterLimitsNegative() { return negative_; } - -protected: - using PCLBase::input_; - using PCLBase::indices_; - using Filter::filter_name_; - using Filter::getClassName; - using FilterIndices::negative_; - using FilterIndices::keep_organized_; - using FilterIndices::user_filter_value_; - using FilterIndices::extract_removed_indices_; - using FilterIndices::removed_indices_; - - /** \brief Filtered results are stored in a separate point cloud. - * \param[out] output The resultant point cloud. - */ - void applyFilter(PointCloud & output); - - /** \brief Filtered results are indexed by an indices array. - * \param[out] indices The resultant indices. - */ - void applyFilter(std::vector & indices) { applyFilterIndices(indices); } - - /** \brief Filtered results are indexed by an indices array. - * \param[out] indices The resultant indices. - */ - void applyFilterIndices(std::vector & indices); - -private: - /** \brief The name of the field that will be used for filtering. */ - std::string filter_field_name_; - - /** \brief The minimum allowed field value (default = FLT_MIN). */ - std::uint16_t filter_limit_min_; - - /** \brief The maximum allowed field value (default = FLT_MIN). */ - std::uint16_t filter_limit_max_; -}; - -//////////////////////////////////////////////////////////////////////////////////////////// -/** \brief PassThroughUInt16 uses the base Filter class methods to pass through all data that - * satisfies the user given constraints. \author Radu B. Rusu \ingroup filters - */ -template <> -class PCL_EXPORTS PassThroughUInt16 : public Filter -{ - typedef pcl::PCLPointCloud2 PCLPointCloud2; - typedef PCLPointCloud2::Ptr PCLPointCloud2Ptr; - typedef PCLPointCloud2::ConstPtr PCLPointCloud2ConstPtr; - - using Filter::removed_indices_; - using Filter::extract_removed_indices_; - -public: - /** \brief Constructor. */ - explicit PassThroughUInt16(bool extract_removed_indices = false) - : Filter::Filter(extract_removed_indices), - keep_organized_(false), - user_filter_value_(std::numeric_limits::quiet_NaN()), - filter_field_name_(""), - filter_limit_min_(0), - filter_limit_max_(UINT16_MAX), - filter_limit_negative_(false) - { - filter_name_ = "PassThroughUInt16"; - } - - /** \brief Set whether the filtered points should be kept and set to the - * value given through \a setUserFilterValue (default: NaN), or removed - * from the PointCloud, thus potentially breaking its organized - * structure. By default, points are removed. - * - * \param[in] val set to true whether the filtered points should be kept and - * set to a user given value (default: NaN) - */ - inline void setKeepOrganized(bool val) { keep_organized_ = val; } - - /** \brief Obtain the value of the internal \a keep_organized_ parameter. */ - inline bool getKeepOrganized() { return keep_organized_; } - - /** \brief Provide a value that the filtered points should be set to - * instead of removing them. Used in conjunction with \a - * setKeepOrganized (). - * \param[in] val the user given value that the filtered point dimensions should be set to - */ - inline void setUserFilterValue(float val) { user_filter_value_ = val; } - - /** \brief Provide the name of the field to be used for filtering data. In conjunction with \a - * setFilterLimits, points having values outside this interval will be discarded. \param[in] - * field_name the name of the field that contains values used for filtering - */ - inline void setFilterFieldName(const std::string & field_name) - { - filter_field_name_ = field_name; - } - - /** \brief Get the name of the field used for filtering. */ - inline std::string const getFilterFieldName() { return filter_field_name_; } - - /** \brief Set the field filter limits. All points having field values outside this interval will - * be discarded. \param[in] limit_min the minimum allowed field value \param[in] limit_max the - * maximum allowed field value - */ - inline void setFilterLimits(const std::uint16_t & limit_min, const std::uint16_t & limit_max) - { - filter_limit_min_ = limit_min; - filter_limit_max_ = limit_max; - } - - /** \brief Get the field filter limits (min/max) set by the user. The default values are -FLT_MAX, - * FLT_MAX. \param[out] limit_min the minimum allowed field value \param[out] limit_max the - * maximum allowed field value - */ - inline void getFilterLimits(std::uint16_t & limit_min, std::uint16_t & limit_max) - { - limit_min = filter_limit_min_; - limit_max = filter_limit_max_; - } - - /** \brief Set to true if we want to return the data outside the interval specified by - * setFilterLimits (min, max). Default: false. \param[in] limit_negative return data inside the - * interval (false) or outside (true) - */ - inline void setFilterLimitsNegative(const bool limit_negative) - { - filter_limit_negative_ = limit_negative; - } - - /** \brief Get whether the data outside the interval (min/max) is to be returned (true) or inside - * (false). \param[out] limit_negative true if data \b outside the interval [min; max] is to be - * returned, false otherwise - */ - inline void getFilterLimitsNegative(bool & limit_negative) - { - limit_negative = filter_limit_negative_; - } - - /** \brief Get whether the data outside the interval (min/max) is to be returned (true) or inside - * (false). \return true if data \b outside the interval [min; max] is to be returned, false - * otherwise - */ - inline bool getFilterLimitsNegative() { return filter_limit_negative_; } - -protected: - void applyFilter(PCLPointCloud2 & output); - -private: - /** \brief Keep the structure of the data organized, by setting the - * filtered points to a user given value (NaN by default). - */ - bool keep_organized_; - - /** \brief User given value to be set to any filtered point. Casted to - * the correct field type. - */ - float user_filter_value_; - - /** \brief The desired user filter field name. */ - std::string filter_field_name_; - - /** \brief The minimum allowed filter value a point will be considered from. */ - std::uint16_t filter_limit_min_; - - /** \brief The maximum allowed filter value a point will be considered from. */ - std::uint16_t filter_limit_max_; - - /** \brief Set to true if we want to return the data outside (\a filter_limit_min_;\a - * filter_limit_max_). Default: false. */ - bool filter_limit_negative_; -}; -} // namespace pcl - -template -void pcl::PassThroughUInt16::applyFilter(PointCloud & output) -{ - std::vector indices; - if (keep_organized_) { - bool temp = extract_removed_indices_; - extract_removed_indices_ = true; - applyFilterIndices(indices); - extract_removed_indices_ = temp; - - output = *input_; - for (int rii = 0; rii < static_cast(removed_indices_->size()); - ++rii) // rii = removed indices iterator - { - output.points[(*removed_indices_)[rii]].x = output.points[(*removed_indices_)[rii]].y = - output.points[(*removed_indices_)[rii]].z = user_filter_value_; - } - if (!std::isfinite(user_filter_value_)) { - output.is_dense = false; - } - } else { - output.is_dense = true; - applyFilterIndices(indices); - copyPointCloud(*input_, indices, output); - } -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -template -void pcl::PassThroughUInt16::applyFilterIndices(std::vector & indices) -{ - // The arrays to be used - indices.resize(indices_->size()); - removed_indices_->resize(indices_->size()); - int oii = 0, rii = 0; // oii = output indices iterator, rii = removed indices iterator - - // Has a field name been specified? - if (filter_field_name_.empty()) { - // Only filter for non-finite entries then - for (int iii = 0; iii < static_cast(indices_->size()); - ++iii) // iii = input indices iterator - { - // Non-finite entries are always passed to removed indices - if ( - !std::isfinite(input_->points[(*indices_)[iii]].x) || - !std::isfinite(input_->points[(*indices_)[iii]].y) || - !std::isfinite(input_->points[(*indices_)[iii]].z)) { - if (extract_removed_indices_) { - (*removed_indices_)[rii++] = (*indices_)[iii]; - } - continue; - } - indices[oii++] = (*indices_)[iii]; - } - } else { - // Attempt to get the field name's index - std::vector fields; - int distance_idx = pcl::getFieldIndex(filter_field_name_, fields); - if (distance_idx == -1) { - PCL_WARN( - "[pcl::%s::applyFilter] Unable to find field name in point type.\n", - getClassName().c_str()); - indices.clear(); - removed_indices_->clear(); - return; - } - - // Filter for non-finite entries and the specified field limits - for (int iii = 0; iii < static_cast(indices_->size()); - ++iii) // iii = input indices iterator - { - // Non-finite entries are always passed to removed indices - if ( - !std::isfinite(input_->points[(*indices_)[iii]].x) || - !std::isfinite(input_->points[(*indices_)[iii]].y) || - !std::isfinite(input_->points[(*indices_)[iii]].z)) { - if (extract_removed_indices_) { - (*removed_indices_)[rii++] = (*indices_)[iii]; - } - continue; - } - - // Get the field's value - const std::uint8_t * pt_data = - reinterpret_cast(&input_->points[(*indices_)[iii]]); - std::uint16_t field_value = 0; - memcpy(&field_value, pt_data + fields[distance_idx].offset, sizeof(std::uint16_t)); - - // Remove NAN/INF/-INF values. We expect passthrough to output clean valid data. - if (!std::isfinite(field_value)) { - if (extract_removed_indices_) { - (*removed_indices_)[rii++] = (*indices_)[iii]; - } - continue; - } - - // Outside of the field limits are passed to removed indices - if (!negative_ && (field_value < filter_limit_min_ || field_value > filter_limit_max_)) { - if (extract_removed_indices_) { - (*removed_indices_)[rii++] = (*indices_)[iii]; - } - continue; - } - - // Inside of the field limits are passed to removed indices if negative was set - if (negative_ && field_value >= filter_limit_min_ && field_value <= filter_limit_max_) { - if (extract_removed_indices_) { - (*removed_indices_)[rii++] = (*indices_)[iii]; - } - continue; - } - - // Otherwise it was a normal point for output (inlier) - indices[oii++] = (*indices_)[iii]; - } - } - - // Resize the output arrays - indices.resize(oii); - removed_indices_->resize(rii); -} - -#define PCL_INSTANTIATE_PassThroughUInt16(T) template class PCL_EXPORTS pcl::PassThroughUInt16; - -#ifdef PCL_NO_PRECOMPILE -#include -#endif - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__PASSTHROUGH_FILTER__PASSTHROUGH_UINT16_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp deleted file mode 100644 index 6646426a29b99..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/pointcloud_accumulator/pointcloud_accumulator_nodelet.hpp +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__POINTCLOUD_ACCUMULATOR__POINTCLOUD_ACCUMULATOR_NODELET_HPP_ // NOLINT -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__POINTCLOUD_ACCUMULATOR__POINTCLOUD_ACCUMULATOR_NODELET_HPP_ // NOLINT - -#include "autoware/pointcloud_preprocessor/filter.hpp" - -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class PointcloudAccumulatorComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); - -private: - double accumulation_time_sec_; - boost::circular_buffer pointcloud_buffer_; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit PointcloudAccumulatorComponent(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -// clang-format off -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__POINTCLOUD_ACCUMULATOR__POINTCLOUD_ACCUMULATOR_NODELET_HPP_ // NOLINT -// clang-format on diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp deleted file mode 100644 index f52f2f306c69b..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright 2022 The Autoware Contributors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__POLYGON_REMOVER__POLYGON_REMOVER_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__POLYGON_REMOVER__POLYGON_REMOVER_HPP_ - -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp -#include "pointcloud_preprocessor/filter.hpp" -#include "pointcloud_preprocessor/utility/geometry.hpp" -======== -#include "autoware/pointcloud_preprocessor/filter.hpp" -#include "autoware/pointcloud_preprocessor/utility/geometry.hpp" ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp - -#include -#include -#include - -#include -#include - -#include - -namespace autoware::pointcloud_preprocessor -{ -class PolygonRemoverComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - - void publishRemovedPolygon(); - - void update_polygon(const geometry_msgs::msg::Polygon::ConstSharedPtr & polygon_in); - static PolygonCgal polygon_geometry_to_cgal( - const geometry_msgs::msg::Polygon::ConstSharedPtr & polygon_in); - PointCloud2 remove_updated_polygon_from_cloud(const PointCloud2ConstPtr & cloud_in); - PointCloud2 remove_polygon_cgal_from_cloud( - const PointCloud2::ConstSharedPtr & cloud_in_ptr, const PolygonCgal & polyline_polygon); - -private: - rclcpp::Parameter param; - std::vector polygon_vertices_; - geometry_msgs::msg::Polygon::SharedPtr polygon_; - - bool polygon_is_initialized_; - bool will_visualize_; - PolygonCgal polygon_cgal_; - visualization_msgs::msg::Marker marker_; - - rclcpp::Publisher::SharedPtr pub_marker_ptr_; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit PolygonRemoverComponent(const rclcpp::NodeOptions & options); -}; -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__POLYGON_REMOVER__POLYGON_REMOVER_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp deleted file mode 100644 index 00704b20b85ef..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/time_synchronizer/time_synchronizer_nodelet.hpp +++ /dev/null @@ -1,191 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -/* - * Software License Agreement (BSD License) - * - * Copyright (c) 2009, Willow Garage, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of Willow Garage, Inc. 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 OWNER 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. - * - * $Id: TIME_SYNCHRONIZER.cpp 35231 2011-01-14 05:33:20Z rusu $ - * - */ - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__TIME_SYNCHRONIZER__TIME_SYNCHRONIZER_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__TIME_SYNCHRONIZER__TIME_SYNCHRONIZER_NODELET_HPP_ - -#include -#include -#include -#include -#include -#include -#include - -// ROS includes -#include "autoware_point_types/types.hpp" - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -namespace autoware::pointcloud_preprocessor -{ -using autoware_point_types::PointXYZIRC; -using point_cloud_msg_wrapper::PointCloud2Modifier; -// cspell:ignore Yoshi -/** \brief @b PointCloudDataSynchronizerComponent is a special form of data - * synchronizer: it listens for a set of input PointCloud messages on the same topic, - * checks their timestamps, and concatenates their fields together into a single - * PointCloud output message. - * \author Radu Bogdan Rusu - * \edited by Yoshi Ri - */ -class PointCloudDataSynchronizerComponent : public rclcpp::Node -{ -public: - typedef sensor_msgs::msg::PointCloud2 PointCloud2; - - /** \brief constructor. */ - explicit PointCloudDataSynchronizerComponent(const rclcpp::NodeOptions & node_options); - - /** \brief constructor. - * \param queue_size the maximum queue size - */ - PointCloudDataSynchronizerComponent(const rclcpp::NodeOptions & node_options, int queue_size); - - /** \brief Empty destructor. */ - virtual ~PointCloudDataSynchronizerComponent() {} - -private: - /** \brief Delay Compensated PointCloud publisher*/ - std::map::SharedPtr> - transformed_raw_pc_publisher_map_; - - /** \brief The maximum number of messages that we can store in the queue. */ - int maximum_queue_size_ = 3; - - double timeout_sec_ = 0.1; - - std::set not_subscribed_topic_names_; - - /** \brief A vector of subscriber. */ - std::vector::SharedPtr> filters_; - - rclcpp::Subscription::SharedPtr sub_twist_; - rclcpp::Subscription::SharedPtr sub_odom_; - - rclcpp::TimerBase::SharedPtr timer_; - diagnostic_updater::Updater updater_{this}; - - const std::string input_twist_topic_type_; - - /** \brief Output TF frame the concatenated points should be transformed to. */ - std::string output_frame_; - bool keep_input_frame_in_synchronized_pointcloud_; - - /** \brief Input point cloud topics. */ - // XmlRpc::XmlRpcValue input_topics_; - std::vector input_topics_; - - /** \brief TF listener object. */ - std::shared_ptr tf2_buffer_; - std::shared_ptr tf2_listener_; - - std::deque twist_ptr_queue_; - - std::map cloud_stdmap_; - std::map cloud_stdmap_tmp_; - std::mutex mutex_; - - std::vector input_offset_; - std::map offset_map_; - - void transformPointCloud(const PointCloud2::ConstSharedPtr & in, PointCloud2::SharedPtr & out); - void transformPointCloud( - const PointCloud2::ConstSharedPtr & in, PointCloud2::SharedPtr & out, - const std::string & target_frame); - Eigen::Matrix4f computeTransformToAdjustForOldTimestamp( - const rclcpp::Time & old_stamp, const rclcpp::Time & new_stamp); - std::map synchronizeClouds(); - void publish(); - - void convertToXYZIRCCloud( - const sensor_msgs::msg::PointCloud2::SharedPtr & input_ptr, - sensor_msgs::msg::PointCloud2::SharedPtr & output_ptr); - void setPeriod(const int64_t new_period); - void cloud_callback( - const sensor_msgs::msg::PointCloud2::ConstSharedPtr & input_ptr, - const std::string & topic_name); - void twist_callback(const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr input); - void odom_callback(const nav_msgs::msg::Odometry::ConstSharedPtr input); - void timer_callback(); - - void checkSyncStatus(diagnostic_updater::DiagnosticStatusWrapper & stat); - std::string replaceSyncTopicNamePostfix( - const std::string & original_topic_name, const std::string & postfix); - - /** \brief processing time publisher. **/ - std::unique_ptr> stop_watch_ptr_; - std::unique_ptr debug_publisher_; -}; - -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__TIME_SYNCHRONIZER__TIME_SYNCHRONIZER_NODELET_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/transform_info.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/transform_info.hpp deleted file mode 100644 index 9c4ba7c5ea7ea..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/transform_info.hpp +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright 2023 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#pragma once - -#include - -namespace autoware::pointcloud_preprocessor -{ - -/** - * This holds the coordinate transformation information of the point cloud. - * Usage example: - * \code - * if (transform_info.need_transform) { - * point = transform_info.eigen_transform * point; - * } - * \endcode - */ -struct TransformInfo -{ - TransformInfo() - { - eigen_transform = Eigen::Matrix4f::Identity(4, 4); - need_transform = false; - } - - Eigen::Matrix4f eigen_transform; - bool need_transform; -}; - -} // namespace autoware::pointcloud_preprocessor diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp deleted file mode 100644 index c019fd04f6c87..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp +++ /dev/null @@ -1,97 +0,0 @@ -// Copyright 2024 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp -#ifndef POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ -#define POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ -======== -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/utility/geometry.hpp - -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -using K = CGAL::Exact_predicates_inexact_constructions_kernel; -using PointCgal = K::Point_2; -using PolygonCgal = std::vector; - -namespace autoware::pointcloud_preprocessor::utils -{ -/** - * @brief convert ROS polygon to CGAL polygon - */ -void to_cgal_polygon(const geometry_msgs::msg::Polygon & polygon_in, PolygonCgal & polygon_out); - -/** - * @brief convert lanelet polygon to CGAL polygon - */ -void to_cgal_polygon(const lanelet::BasicPolygon2d & polygon_in, PolygonCgal & polygon_out); - -/** - * @brief remove points in the given polygon - */ -void remove_polygon_cgal_from_cloud( - const sensor_msgs::msg::PointCloud2 & cloud_in, const PolygonCgal & polyline_polygon, - sensor_msgs::msg::PointCloud2 & cloud_out, const std::optional & max_z = std::nullopt); - -/** - * @brief remove points in the given polygon - */ -void remove_polygon_cgal_from_cloud( - const pcl::PointCloud & cloud_in, const PolygonCgal & polyline_polygon, - pcl::PointCloud & cloud_out, const std::optional & max_z = std::nullopt); - -/** - * @brief remove points in the given polygons - */ -void remove_polygon_cgal_from_cloud( - const sensor_msgs::msg::PointCloud2 & cloud_in, - const std::vector & polyline_polygons, sensor_msgs::msg::PointCloud2 & cloud_out, - const std::optional & max_z = std::nullopt); - -/** - * @brief remove points in the given polygons - */ -void remove_polygon_cgal_from_cloud( - const pcl::PointCloud & cloud_in, - const std::vector & polyline_polygons, pcl::PointCloud & cloud_out, - const std::optional & max_z = std::nullopt); - -/** - * @brief return true if the given point is inside the at least one of the polygons - */ -bool point_within_cgal_polys( - const pcl::PointXYZ & point, const std::vector & polyline_polygons); - -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp -} // namespace pointcloud_preprocessor::utils - -#endif // POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ -======== -} // namespace autoware::pointcloud_preprocessor::utils - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/utility/geometry.hpp diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp deleted file mode 100644 index ef87a4f31457b..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/memory.hpp +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2024 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef POINTCLOUD_PREPROCESSOR__UTILITY__MEMORY_HPP_ -#define POINTCLOUD_PREPROCESSOR__UTILITY__MEMORY_HPP_ - -#include - -namespace pointcloud_preprocessor::utils -{ -/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZI. That is to - * say whether you can memcpy from the PointCloud2 data buffer to a PointXYZI */ -bool is_data_layout_compatible_with_point_xyzi(const sensor_msgs::msg::PointCloud2 & input); - -/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZIRC. That is - * to say whether you can memcpy from the PointCloud2 data buffer to a PointXYZIRC */ -bool is_data_layout_compatible_with_point_xyzirc(const sensor_msgs::msg::PointCloud2 & input); - -/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZIRADRT. That - * is to say whether you can memcpy from the PointCloud2 data buffer to a PointXYZIRADRT */ -bool is_data_layout_compatible_with_point_xyziradrt(const sensor_msgs::msg::PointCloud2 & input); - -/** \brief Return whether the input PointCloud2 data has the same layout than PointXYZIRCAEDT. That - * is to say whether you can memcpy from the PointCloud2 data buffer to a PointXYZIRCAEDT */ -bool is_data_layout_compatible_with_point_xyzircaedt(const sensor_msgs::msg::PointCloud2 & input); - -} // namespace pointcloud_preprocessor::utils - -#endif // POINTCLOUD_PREPROCESSOR__UTILITY__MEMORY_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp deleted file mode 100644 index 4ba773ed618ac..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/lanelet2_map_filter_nodelet.hpp +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright 2020 Tier IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__VECTOR_MAP_FILTER__LANELET2_MAP_FILTER_NODELET_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__VECTOR_MAP_FILTER__LANELET2_MAP_FILTER_NODELET_HPP_ - -#include -#include -#include -#include - -#include -#include - -#include -#include -#include - -#ifdef ROS_DISTRO_GALACTIC -#include -#else -#include -#endif - -#include - -#include -#include -#include -#include - -using autoware::universe_utils::LinearRing2d; -using autoware::universe_utils::MultiPoint2d; -using autoware::universe_utils::Point2d; - -namespace autoware::pointcloud_preprocessor -{ -class Lanelet2MapFilterComponent : public rclcpp::Node -{ - using PointCloud2 = sensor_msgs::msg::PointCloud2; - using PointCloud2Ptr = sensor_msgs::msg::PointCloud2::SharedPtr; - using PointCloud2ConstPtr = sensor_msgs::msg::PointCloud2::ConstSharedPtr; - -public: - explicit Lanelet2MapFilterComponent(const rclcpp::NodeOptions & options); - -private: - std::shared_ptr tf_buffer_; - std::shared_ptr tf_listener_; - - rclcpp::Subscription::SharedPtr map_sub_; - rclcpp::Subscription::SharedPtr pointcloud_sub_; - rclcpp::Publisher::SharedPtr filtered_pointcloud_pub_; - - lanelet::LaneletMapPtr lanelet_map_ptr_; - lanelet::ConstLanelets road_lanelets_; - - float voxel_size_x_; - float voxel_size_y_; - - void pointcloudCallback(const PointCloud2ConstPtr msg); - - void mapCallback(const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg); - - bool transformPointCloud( - const std::string & in_target_frame, const PointCloud2ConstPtr & in_cloud_ptr, - PointCloud2 * out_cloud_ptr); - - LinearRing2d getConvexHull(const pcl::PointCloud::Ptr & input_cloud); - - lanelet::ConstLanelets getIntersectedLanelets( - const LinearRing2d & convex_hull, const lanelet::ConstLanelets & road_lanelets_); - - pcl::PointCloud getLaneFilteredPointCloud( - const lanelet::ConstLanelets & joint_lanelets, - const pcl::PointCloud::Ptr & cloud); - - bool pointWithinLanelets(const Point2d & point, const lanelet::ConstLanelets & joint_lanelets); - - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); -}; - -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__VECTOR_MAP_FILTER__LANELET2_MAP_FILTER_NODELET_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp b/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp deleted file mode 100644 index 834de2c1782db..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2024 TIER IV, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__VECTOR_MAP_FILTER__VECTOR_MAP_INSIDE_AREA_FILTER_HPP_ -#define AUTOWARE__POINTCLOUD_PREPROCESSOR__VECTOR_MAP_FILTER__VECTOR_MAP_INSIDE_AREA_FILTER_HPP_ - -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp -#include "pointcloud_preprocessor/filter.hpp" -#include "pointcloud_preprocessor/utility/geometry.hpp" -======== -#include "autoware/pointcloud_preprocessor/filter.hpp" -#include "autoware/pointcloud_preprocessor/utility/geometry.hpp" ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp - -#include -#include -#include - -#include - -#include - -using autoware::universe_utils::MultiPoint2d; - -namespace autoware::pointcloud_preprocessor -{ -class VectorMapInsideAreaFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -private: - void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output) override; - - rclcpp::Subscription::SharedPtr map_sub_; - lanelet::ConstPolygons3d polygon_lanelets_; - - void mapCallback(const autoware_map_msgs::msg::LaneletMapBin::ConstSharedPtr msg); - - // parameter - std::string polygon_type_; - bool use_z_filter_ = false; - float z_threshold_; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit VectorMapInsideAreaFilterComponent(const rclcpp::NodeOptions & options); -}; - -} // namespace autoware::pointcloud_preprocessor - -#endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__VECTOR_MAP_FILTER__VECTOR_MAP_INSIDE_AREA_FILTER_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/launch/approximate_downsample_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/approximate_downsample_filter.launch.xml diff --git a/sensing/autoware_pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml deleted file mode 100644 index 6d1aa1f906828..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/launch/blockage_diagnostics_node.launch.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/sensing/autoware_pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml deleted file mode 100644 index 4afc4906f0b3a..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/launch/dual_return_outlier_filter_node.launch.xml - - - -======== - - - - - ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/launch/dual_return_outlier_filter.launch.xml - - - - - - - - diff --git a/sensing/autoware_pointcloud_preprocessor/launch/lanelet2_map_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/launch/lanelet2_map_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/lanelet2_map_filter.launch.xml diff --git a/sensing/autoware_pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/pickup_based_voxel_grid_downsample_filter.launch.xml diff --git a/sensing/autoware_pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/launch/pointcloud_accumulator_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/pointcloud_accumulator.launch.xml diff --git a/sensing/autoware_pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/launch/radius_search_2d_outlier_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/radius_search_2d_outlier_filter.launch.xml diff --git a/sensing/autoware_pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml deleted file mode 100644 index aa7c96156ae4c..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/launch/random_downsample_filter_node.launch.xml - - - -======== - - ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/launch/random_downsample_filter.launch.xml - - - - - - - - diff --git a/sensing/autoware_pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/launch/ring_outlier_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/ring_outlier_filter.launch.xml diff --git a/sensing/autoware_pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml deleted file mode 100644 index 5bffc6f3e0463..0000000000000 --- a/sensing/autoware_pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/launch/ring_passthrough_filter_node.launch.xml - - - - - -======== - - ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/launch/ring_passthrough_filter.launch.xml - - - - - - diff --git a/sensing/autoware_pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/launch/vector_map_inside_area_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/vector_map_inside_area_filter.launch.xml diff --git a/sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_downsample_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_downsample_filter.launch.xml diff --git a/sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml b/sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml similarity index 100% rename from sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_outlier_filter_node.launch.xml rename to sensing/autoware_pointcloud_preprocessor/launch/voxel_grid_outlier_filter.launch.xml From 7bd282f4cecae538a6236b7af07a87f988b787ad Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 24 Jul 2024 05:41:20 +0000 Subject: [PATCH 306/306] style(pre-commit): autofix --- .../autoware_detection_by_tracker/package.xml | 6 +- .../src/ransac_ground_filter/node.cpp | 17 +- .../src/ray_ground_filter/node.hpp | 49 +- .../src/scan_ground_filter/node.cpp | 11 +- .../src/scan_ground_filter/node.hpp | 11 +- .../docs/segmentation-pointcloud-fusion.md | 4 +- .../pointpainting_fusion/node.hpp | 85 +- .../pointpainting_fusion/voxel_generator.hpp | 55 +- .../package.xml | 6 +- .../src/pointpainting_fusion/node.cpp | 19 +- .../pointpainting_trt.cpp | 108 +-- .../autoware_shape_estimation/README.md | 4 +- .../node.hpp | 167 ++-- .../node.hpp | 88 ++- .../voxel_based_compare_map_filter/node.hpp | 49 +- .../node.hpp | 213 ++--- .../src/ransac_ground_filter/node.cpp | 17 +- .../src/ray_ground_filter/node.hpp | 49 +- .../src/scan_ground_filter/node.cpp | 11 +- .../src/scan_ground_filter/node.hpp | 11 +- .../pointpainting_fusion/node.hpp | 85 +- .../pointpainting_fusion/voxel_generator.hpp | 55 +- ...occupancy_grid_map_outlier_filter_node.hpp | 167 ++-- .../include/autoware/path_optimizer/node.hpp | 210 ++--- .../distortion_corrector_node.hpp | 69 +- .../polygon_remover/polygon_remover.hpp | 63 +- .../utility/geometry.hpp | 25 +- .../vector_map_inside_area_filter.hpp | 13 +- .../concatenate_and_time_sync_nodelet.cpp | 1 - .../concatenate_pointclouds.cpp | 1 - .../distortion_corrector.cpp | 737 +++++++++--------- .../distortion_corrector_node.cpp | 3 +- .../src/filter.cpp | 1 - .../test/test_distortion_corrector_node.cpp | 4 +- .../test/test_utilities.cpp | 4 +- 35 files changed, 1250 insertions(+), 1168 deletions(-) diff --git a/perception/autoware_detection_by_tracker/package.xml b/perception/autoware_detection_by_tracker/package.xml index c21ae605fcc4c..651dfadb05a0a 100644 --- a/perception/autoware_detection_by_tracker/package.xml +++ b/perception/autoware_detection_by_tracker/package.xml @@ -14,10 +14,7 @@ eigen3_cmake_module autoware_euclidean_cluster -<<<<<<< HEAD -======= autoware_shape_estimation ->>>>>>> original/main autoware_universe_utils eigen object_recognition_utils @@ -27,6 +24,9 @@ tf2_geometry_msgs tf2_ros tier4_perception_msgs +<<<<<<< HEAD +======= +>>>>>>> original/main ament_lint_auto autoware_lint_common diff --git a/perception/autoware_ground_segmentation/src/ransac_ground_filter/node.cpp b/perception/autoware_ground_segmentation/src/ransac_ground_filter/node.cpp index e62ff2e50316c..774c19e866357 100644 --- a/perception/autoware_ground_segmentation/src/ransac_ground_filter/node.cpp +++ b/perception/autoware_ground_segmentation/src/ransac_ground_filter/node.cpp @@ -80,13 +80,16 @@ PlaneBasis getPlaneBasis(const Eigen::Vector3d & plane_normal) return basis; } -<<<<<<<< HEAD:perception/ground_segmentation/src/ransac_ground_filter/node.cpp -using pointcloud_preprocessor::get_param; -======== -using autoware::pointcloud_preprocessor::get_param; ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/ransac_ground_filter/node.cpp - -RANSACGroundFilterComponent::RANSACGroundFilterComponent(const rclcpp::NodeOptions & options) +< < < < < < < < HEAD : perception / ground_segmentation / src / ransac_ground_filter / + node.cpp using pointcloud_preprocessor::get_param; +== == == == using autoware::pointcloud_preprocessor::get_param; +>>>>>>>> original / + main +: perception / + autoware_ground_segmentation / src / ransac_ground_filter / + node.cpp + + RANSACGroundFilterComponent::RANSACGroundFilterComponent(const rclcpp::NodeOptions & options) : Filter("RANSACGroundFilter", options) { base_frame_ = declare_parameter("base_frame", "base_link"); diff --git a/perception/autoware_ground_segmentation/src/ray_ground_filter/node.hpp b/perception/autoware_ground_segmentation/src/ray_ground_filter/node.hpp index f872a257b5a03..9a2a2d5081a93 100644 --- a/perception/autoware_ground_segmentation/src/ray_ground_filter/node.hpp +++ b/perception/autoware_ground_segmentation/src/ray_ground_filter/node.hpp @@ -58,13 +58,16 @@ #include #endif -<<<<<<<< HEAD:perception/ground_segmentation/src/ray_ground_filter/node.hpp +<<<<<<<< + HEAD : perception / ground_segmentation / src / ray_ground_filter / node.hpp #include "gencolors.hpp" #include "pointcloud_preprocessor/filter.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" #include "gencolors.hpp" ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/ray_ground_filter/node.hpp + >>>>>>>> original / + main : perception / autoware_ground_segmentation / src / ray_ground_filter / + node.hpp #include #include @@ -80,7 +83,7 @@ #include #include -namespace bg = boost::geometry; + namespace bg = boost::geometry; using Point = bg::model::d2::point_xy; using Polygon = bg::model::polygon; @@ -189,31 +192,33 @@ class RayGroundFilterComponent : public autoware::pointcloud_preprocessor::Filte * @param out_only_indices_cloud_ptr Resulting PointCloud with the indices kept * @param out_removed_indices_cloud_ptr Resulting PointCloud with the indices removed */ - void ExtractPointsIndices( - const PointCloud2::ConstSharedPtr in_cloud_ptr, const pcl::PointIndices & in_indices, -<<<<<<<< HEAD:perception/ground_segmentation/src/ray_ground_filter/node.hpp - PointCloud2::SharedPtr out_only_indices_cloud_ptr, - PointCloud2::SharedPtr out_removed_indices_cloud_ptr); + void ExtractPointsIndices(const PointCloud2::ConstSharedPtr in_cloud_ptr, + const pcl::PointIndices & in_indices, < < < < < < < < HEAD + : perception / ground_segmentation / src / ray_ground_filter / + node.hpp PointCloud2::SharedPtr out_only_indices_cloud_ptr, + PointCloud2::SharedPtr out_removed_indices_cloud_ptr); ======== PointCloud2::SharedPtr ground_cloud_msg_ptr, PointCloud2::SharedPtr no_ground_cloud_msg_ptr); ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/ray_ground_filter/node.hpp +>>>>>>>> original / main : perception / autoware_ground_segmentation / src / ray_ground_filter / + node.hpp - boost::optional calcPointVehicleIntersection(const Point & point); + boost::optional + calcPointVehicleIntersection(const Point & point); - void setVehicleFootprint( - const double min_x, const double max_x, const double min_y, const double max_y); - void initializePointCloud2( - const PointCloud2::ConstSharedPtr & in_cloud_ptr, - const PointCloud2::SharedPtr & out_cloud_msg_ptr); - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; +void setVehicleFootprint( + const double min_x, const double max_x, const double min_y, const double max_y); +void initializePointCloud2( + const PointCloud2::ConstSharedPtr & in_cloud_ptr, + const PointCloud2::SharedPtr & out_cloud_msg_ptr); +/** \brief Parameter service callback result : needed to be hold */ +OnSetParametersCallbackHandle::SharedPtr set_param_res_; - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); +/** \brief Parameter service callback */ +rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); public: - EIGEN_MAKE_ALIGNED_OPERATOR_NEW - explicit RayGroundFilterComponent(const rclcpp::NodeOptions & options); +EIGEN_MAKE_ALIGNED_OPERATOR_NEW +explicit RayGroundFilterComponent(const rclcpp::NodeOptions & options); }; } // namespace autoware::ground_segmentation diff --git a/perception/autoware_ground_segmentation/src/scan_ground_filter/node.cpp b/perception/autoware_ground_segmentation/src/scan_ground_filter/node.cpp index f79f261a17812..52fd0e71ca11d 100644 --- a/perception/autoware_ground_segmentation/src/scan_ground_filter/node.cpp +++ b/perception/autoware_ground_segmentation/src/scan_ground_filter/node.cpp @@ -32,12 +32,11 @@ using autoware::universe_utils::normalizeDegree; using autoware::universe_utils::normalizeRadian; using autoware::vehicle_info_utils::VehicleInfoUtils; -ScanGroundFilterComponent::ScanGroundFilterComponent(const rclcpp::NodeOptions & options) -<<<<<<<< HEAD:perception/ground_segmentation/src/scan_ground_filter/node.cpp -: pointcloud_preprocessor::Filter("ScanGroundFilter", options) -======== -: autoware::pointcloud_preprocessor::Filter("ScanGroundFilter", options) ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/scan_ground_filter/node.cpp +ScanGroundFilterComponent::ScanGroundFilterComponent(const rclcpp::NodeOptions & options)<<<<<<<< + HEAD : perception / ground_segmentation / src / scan_ground_filter / + node.cpp : pointcloud_preprocessor::Filter("ScanGroundFilter", options) == + == == == : autoware::pointcloud_preprocessor::Filter("ScanGroundFilter", options)>>>>>>>> original + / main : perception / autoware_ground_segmentation / src / scan_ground_filter / node.cpp { // set initial parameters { diff --git a/perception/autoware_ground_segmentation/src/scan_ground_filter/node.hpp b/perception/autoware_ground_segmentation/src/scan_ground_filter/node.hpp index f2ccd234ce2da..3f6ad785fa519 100644 --- a/perception/autoware_ground_segmentation/src/scan_ground_filter/node.hpp +++ b/perception/autoware_ground_segmentation/src/scan_ground_filter/node.hpp @@ -15,15 +15,18 @@ #ifndef SCAN_GROUND_FILTER__NODE_HPP_ #define SCAN_GROUND_FILTER__NODE_HPP_ -<<<<<<<< HEAD:perception/ground_segmentation/src/scan_ground_filter/node.hpp +<<<<<<<< + HEAD : perception / ground_segmentation / src / scan_ground_filter / node.hpp #include "autoware_vehicle_info_utils/vehicle_info.hpp" #include "pointcloud_preprocessor/filter.hpp" #include "pointcloud_preprocessor/transform_info.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" #include "autoware/pointcloud_preprocessor/transform_info.hpp" #include "autoware_vehicle_info_utils/vehicle_info.hpp" ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/scan_ground_filter/node.hpp + >>>>>>>> original / + main : perception / autoware_ground_segmentation / src / scan_ground_filter / + node.hpp #include @@ -44,7 +47,7 @@ #include #include -class ScanGroundFilterTest; + class ScanGroundFilterTest; namespace autoware::ground_segmentation { diff --git a/perception/autoware_image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md b/perception/autoware_image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md index 89a7fdbc1b40f..a67b13df99818 100644 --- a/perception/autoware_image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md +++ b/perception/autoware_image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md @@ -35,8 +35,10 @@ The node `segmentation_pointcloud_fusion` is a package for filtering pointcloud <<<<<<< HEAD:perception/image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md {{ json_to_markdown("perception/image_projection_based_fusion/schema/segmentation_pointcloud_fusion.schema.json") }} ======= + {{ json_to_markdown("perception/autoware_image_projection_based_fusion/schema/segmentation_pointcloud_fusion.schema.json") }} ->>>>>>> original/main:perception/autoware_image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md + +> > > > > > > original/main:perception/autoware_image_projection_based_fusion/docs/segmentation-pointcloud-fusion.md ## Assumptions / Known limits diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp index 589f8b3cefed2..5aa6bcf47def6 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp @@ -17,75 +17,80 @@ #include "autoware/image_projection_based_fusion/fusion_node.hpp" #include "autoware/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp" -<<<<<<<< HEAD:perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp +<<<<<<<< + HEAD : perception / image_projection_based_fusion / include / autoware / + image_projection_based_fusion / pointpainting_fusion / node.hpp #include "lidar_centerpoint/postprocess/non_maximum_suppression.hpp" #include #include #include #include -======== + == == == == #include "autoware/lidar_centerpoint/postprocess/non_maximum_suppression.hpp" #include #include #include #include ->>>>>>>> original/main:perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp + >>>>>>>> original / + main : perception / autoware_image_projection_based_fusion / include / autoware / + image_projection_based_fusion / pointpainting_fusion / + node.hpp #include #include #include #include -namespace autoware::image_projection_based_fusion + namespace autoware::image_projection_based_fusion { -using Label = autoware_perception_msgs::msg::ObjectClassification; + using Label = autoware_perception_msgs::msg::ObjectClassification; -inline bool isInsideBbox( - float proj_x, float proj_y, sensor_msgs::msg::RegionOfInterest roi, float zc) -{ - // z_c is scaling to normalize projection point - return proj_x >= roi.x_offset * zc && proj_x <= (roi.x_offset + roi.width) * zc && - proj_y >= roi.y_offset * zc && proj_y <= (roi.y_offset + roi.height) * zc; -} + inline bool isInsideBbox( + float proj_x, float proj_y, sensor_msgs::msg::RegionOfInterest roi, float zc) + { + // z_c is scaling to normalize projection point + return proj_x >= roi.x_offset * zc && proj_x <= (roi.x_offset + roi.width) * zc && + proj_y >= roi.y_offset * zc && proj_y <= (roi.y_offset + roi.height) * zc; + } -class PointPaintingFusionNode -: public FusionNode -{ -public: - explicit PointPaintingFusionNode(const rclcpp::NodeOptions & options); + class PointPaintingFusionNode + : public FusionNode + { + public: + explicit PointPaintingFusionNode(const rclcpp::NodeOptions & options); -protected: - void preprocess(sensor_msgs::msg::PointCloud2 & pointcloud_msg) override; + protected: + void preprocess(sensor_msgs::msg::PointCloud2 & pointcloud_msg) override; - void fuseOnSingleImage( - const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const std::size_t image_id, - const DetectedObjectsWithFeature & input_roi_msg, - const sensor_msgs::msg::CameraInfo & camera_info, - sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; + void fuseOnSingleImage( + const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const std::size_t image_id, + const DetectedObjectsWithFeature & input_roi_msg, + const sensor_msgs::msg::CameraInfo & camera_info, + sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; - void postprocess(sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; + void postprocess(sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; - rclcpp::Publisher::SharedPtr obj_pub_ptr_; + rclcpp::Publisher::SharedPtr obj_pub_ptr_; - std::vector tan_h_; // horizontal field of view + std::vector tan_h_; // horizontal field of view - int omp_num_threads_{1}; - float score_threshold_{0.0}; - std::vector class_names_; - std::map class_index_; - std::map> isClassTable_; - std::vector pointcloud_range; - bool has_variance_{false}; - bool has_twist_{false}; + int omp_num_threads_{1}; + float score_threshold_{0.0}; + std::vector class_names_; + std::map class_index_; + std::map> isClassTable_; + std::vector pointcloud_range; + bool has_variance_{false}; + bool has_twist_{false}; - autoware::lidar_centerpoint::NonMaximumSuppression iou_bev_nms_; - autoware::lidar_centerpoint::DetectionClassRemapper detection_class_remapper_; + autoware::lidar_centerpoint::NonMaximumSuppression iou_bev_nms_; + autoware::lidar_centerpoint::DetectionClassRemapper detection_class_remapper_; - std::unique_ptr detector_ptr_{nullptr}; + std::unique_ptr detector_ptr_{nullptr}; - bool out_of_scope(const DetectedObjects & obj); -}; + bool out_of_scope(const DetectedObjects & obj); + }; } // namespace autoware::image_projection_based_fusion #endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__NODE_HPP_ diff --git a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp index 63fb225649f21..ac960aefd0bdb 100644 --- a/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp +++ b/perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp @@ -16,41 +16,46 @@ #define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ #include -<<<<<<<< HEAD:perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp +<<<<<<<< + HEAD : perception / image_projection_based_fusion / include / autoware / + image_projection_based_fusion / pointpainting_fusion / voxel_generator.hpp #include #include -======== + == == == == #include #include ->>>>>>>> original/main:perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp + >>>>>>>> original / + main : perception / autoware_image_projection_based_fusion / include / autoware / + image_projection_based_fusion / pointpainting_fusion / + voxel_generator.hpp #include #include #include -namespace autoware::image_projection_based_fusion + namespace autoware::image_projection_based_fusion { - -class VoxelGenerator -{ -public: - explicit VoxelGenerator( - const autoware::lidar_centerpoint::DensificationParam & param, - const autoware::lidar_centerpoint::CenterPointConfig & config); - - bool enqueuePointCloud( - const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const tf2_ros::Buffer & tf_buffer); - - std::size_t generateSweepPoints(std::vector & points); - -protected: - std::unique_ptr pd_ptr_{nullptr}; - - autoware::lidar_centerpoint::CenterPointConfig config_; - std::array range_; - std::array grid_size_; - std::array recip_voxel_size_; -}; + class VoxelGenerator + { + public: + explicit VoxelGenerator( + const autoware::lidar_centerpoint::DensificationParam & param, + const autoware::lidar_centerpoint::CenterPointConfig & config); + + bool enqueuePointCloud( + const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, + const tf2_ros::Buffer & tf_buffer); + + std::size_t generateSweepPoints(std::vector & points); + + protected: + std::unique_ptr pd_ptr_{nullptr}; + + autoware::lidar_centerpoint::CenterPointConfig config_; + std::array range_; + std::array grid_size_; + std::array recip_voxel_size_; + }; } // namespace autoware::image_projection_based_fusion #endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ diff --git a/perception/autoware_image_projection_based_fusion/package.xml b/perception/autoware_image_projection_based_fusion/package.xml index 28dcdb2994738..10bab9bb0552e 100644 --- a/perception/autoware_image_projection_based_fusion/package.xml +++ b/perception/autoware_image_projection_based_fusion/package.xml @@ -17,10 +17,7 @@ autoware_cmake autoware_euclidean_cluster -<<<<<<< HEAD:perception/image_projection_based_fusion/package.xml -======= autoware_lidar_centerpoint ->>>>>>> original/main:perception/autoware_image_projection_based_fusion/package.xml autoware_perception_msgs autoware_point_types autoware_universe_utils @@ -36,6 +33,9 @@ tf2_ros tf2_sensor_msgs tier4_perception_msgs +<<<<<<< HEAD:perception/image_projection_based_fusion/package.xml +======= +>>>>>>> original/main:perception/autoware_image_projection_based_fusion/package.xml ament_cmake_gtest ament_lint_auto diff --git a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp index b8a3d45ada495..6fee65de42a72 100644 --- a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp +++ b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp @@ -25,29 +25,28 @@ #include #include #include -======= + ======= #include #include #include #include #include #include ->>>>>>> original/main:perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp + >>>>>>> original/main:perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/node.cpp #include #include #include -namespace -{ - -Eigen::Affine3f _transformToEigen(const geometry_msgs::msg::Transform & t) + namespace { - Eigen::Affine3f a; - a.matrix() = tf2::transformToEigen(t).matrix().cast(); - return a; -} + Eigen::Affine3f _transformToEigen(const geometry_msgs::msg::Transform & t) + { + Eigen::Affine3f a; + a.matrix() = tf2::transformToEigen(t).matrix().cast(); + return a; + } } // namespace diff --git a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp index 87f9279f83aac..a5c11c951b4e9 100644 --- a/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp +++ b/perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp @@ -19,74 +19,74 @@ #include #include #include -======= + ======= #include #include #include ->>>>>>> original/main:perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp + >>>>>>> original/main:perception/autoware_image_projection_based_fusion/src/pointpainting_fusion/pointpainting_trt.cpp #include #include #include #include -namespace autoware::image_projection_based_fusion + namespace autoware::image_projection_based_fusion { -PointPaintingTRT::PointPaintingTRT( - const autoware::lidar_centerpoint::NetworkParam & encoder_param, - const autoware::lidar_centerpoint::NetworkParam & head_param, - const autoware::lidar_centerpoint::DensificationParam & densification_param, - const autoware::lidar_centerpoint::CenterPointConfig & config) -: autoware::lidar_centerpoint::CenterPointTRT( - encoder_param, head_param, densification_param, config) -{ - vg_ptr_pp_ = - std::make_unique(densification_param, config_); -} - -bool PointPaintingTRT::preprocess( - const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const tf2_ros::Buffer & tf_buffer) -{ - bool is_success = vg_ptr_pp_->enqueuePointCloud(input_pointcloud_msg, tf_buffer); - if (!is_success) { - return false; + PointPaintingTRT::PointPaintingTRT( + const autoware::lidar_centerpoint::NetworkParam & encoder_param, + const autoware::lidar_centerpoint::NetworkParam & head_param, + const autoware::lidar_centerpoint::DensificationParam & densification_param, + const autoware::lidar_centerpoint::CenterPointConfig & config) + : autoware::lidar_centerpoint::CenterPointTRT( + encoder_param, head_param, densification_param, config) + { + vg_ptr_pp_ = + std::make_unique(densification_param, config_); } - const auto count = vg_ptr_pp_->generateSweepPoints(points_); - CHECK_CUDA_ERROR(cudaMemcpyAsync( - points_d_.get(), points_.data(), count * config_.point_feature_size_ * sizeof(float), - cudaMemcpyHostToDevice, stream_)); - CHECK_CUDA_ERROR(cudaMemsetAsync(num_voxels_d_.get(), 0, sizeof(unsigned int), stream_)); - CHECK_CUDA_ERROR(cudaMemsetAsync(voxels_buffer_d_.get(), 0, voxels_buffer_size_, stream_)); - CHECK_CUDA_ERROR(cudaMemsetAsync(mask_d_.get(), 0, mask_size_, stream_)); - CHECK_CUDA_ERROR(cudaMemsetAsync( - voxels_d_.get(), 0, - config_.max_voxel_size_ * config_.max_point_in_voxel_size_ * config_.point_feature_size_ * - sizeof(float), - stream_)); - CHECK_CUDA_ERROR(cudaMemsetAsync( - coordinates_d_.get(), 0, config_.max_voxel_size_ * config_.point_dim_size_ * sizeof(int), - stream_)); - CHECK_CUDA_ERROR(cudaMemsetAsync( - num_points_per_voxel_d_.get(), 0, config_.max_voxel_size_ * sizeof(float), stream_)); - CHECK_CUDA_ERROR(image_projection_based_fusion::generateVoxels_random_launch( - points_d_.get(), count, config_.range_min_x_, config_.range_max_x_, config_.range_min_y_, - config_.range_max_y_, config_.range_min_z_, config_.range_max_z_, config_.voxel_size_x_, - config_.voxel_size_y_, config_.voxel_size_z_, config_.grid_size_y_, config_.grid_size_x_, - mask_d_.get(), voxels_buffer_d_.get(), stream_)); + bool PointPaintingTRT::preprocess( + const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const tf2_ros::Buffer & tf_buffer) + { + bool is_success = vg_ptr_pp_->enqueuePointCloud(input_pointcloud_msg, tf_buffer); + if (!is_success) { + return false; + } + const auto count = vg_ptr_pp_->generateSweepPoints(points_); + CHECK_CUDA_ERROR(cudaMemcpyAsync( + points_d_.get(), points_.data(), count * config_.point_feature_size_ * sizeof(float), + cudaMemcpyHostToDevice, stream_)); + CHECK_CUDA_ERROR(cudaMemsetAsync(num_voxels_d_.get(), 0, sizeof(unsigned int), stream_)); + CHECK_CUDA_ERROR(cudaMemsetAsync(voxels_buffer_d_.get(), 0, voxels_buffer_size_, stream_)); + CHECK_CUDA_ERROR(cudaMemsetAsync(mask_d_.get(), 0, mask_size_, stream_)); + CHECK_CUDA_ERROR(cudaMemsetAsync( + voxels_d_.get(), 0, + config_.max_voxel_size_ * config_.max_point_in_voxel_size_ * config_.point_feature_size_ * + sizeof(float), + stream_)); + CHECK_CUDA_ERROR(cudaMemsetAsync( + coordinates_d_.get(), 0, config_.max_voxel_size_ * config_.point_dim_size_ * sizeof(int), + stream_)); + CHECK_CUDA_ERROR(cudaMemsetAsync( + num_points_per_voxel_d_.get(), 0, config_.max_voxel_size_ * sizeof(float), stream_)); - CHECK_CUDA_ERROR(image_projection_based_fusion::generateBaseFeatures_launch( - mask_d_.get(), voxels_buffer_d_.get(), config_.grid_size_y_, config_.grid_size_x_, - config_.max_voxel_size_, num_voxels_d_.get(), voxels_d_.get(), num_points_per_voxel_d_.get(), - coordinates_d_.get(), stream_)); + CHECK_CUDA_ERROR(image_projection_based_fusion::generateVoxels_random_launch( + points_d_.get(), count, config_.range_min_x_, config_.range_max_x_, config_.range_min_y_, + config_.range_max_y_, config_.range_min_z_, config_.range_max_z_, config_.voxel_size_x_, + config_.voxel_size_y_, config_.voxel_size_z_, config_.grid_size_y_, config_.grid_size_x_, + mask_d_.get(), voxels_buffer_d_.get(), stream_)); - CHECK_CUDA_ERROR(image_projection_based_fusion::generateFeatures_launch( - voxels_d_.get(), num_points_per_voxel_d_.get(), coordinates_d_.get(), num_voxels_d_.get(), - config_.max_voxel_size_, config_.voxel_size_x_, config_.voxel_size_y_, config_.voxel_size_z_, - config_.range_min_x_, config_.range_min_y_, config_.range_min_z_, encoder_in_features_d_.get(), - config_.encoder_in_feature_size_, stream_)); + CHECK_CUDA_ERROR(image_projection_based_fusion::generateBaseFeatures_launch( + mask_d_.get(), voxels_buffer_d_.get(), config_.grid_size_y_, config_.grid_size_x_, + config_.max_voxel_size_, num_voxels_d_.get(), voxels_d_.get(), num_points_per_voxel_d_.get(), + coordinates_d_.get(), stream_)); - return true; -} + CHECK_CUDA_ERROR(image_projection_based_fusion::generateFeatures_launch( + voxels_d_.get(), num_points_per_voxel_d_.get(), coordinates_d_.get(), num_voxels_d_.get(), + config_.max_voxel_size_, config_.voxel_size_x_, config_.voxel_size_y_, config_.voxel_size_z_, + config_.range_min_x_, config_.range_min_y_, config_.range_min_z_, + encoder_in_features_d_.get(), config_.encoder_in_feature_size_, stream_)); + + return true; + } } // namespace autoware::image_projection_based_fusion diff --git a/perception/autoware_shape_estimation/README.md b/perception/autoware_shape_estimation/README.md index cdbe48b028d87..7e6bf025c7d55 100644 --- a/perception/autoware_shape_estimation/README.md +++ b/perception/autoware_shape_estimation/README.md @@ -39,8 +39,10 @@ This node calculates a refined object shape (bounding box, cylinder, convex hull <<<<<<< HEAD:perception/shape_estimation/README.md {{ json_to_markdown("perception/autoware/shape_estimation/schema/shape_estimation.schema.json") }} ======= + {{ json_to_markdown("perception/autoware_shape_estimation/schema/shape_estimation.schema.json") }} ->>>>>>> original/main:perception/autoware_shape_estimation/README.md + +> > > > > > > original/main:perception/autoware_shape_estimation/README.md ## Assumptions / Known limits diff --git a/perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.hpp b/perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.hpp index e1c5b0d0eede7..3ff6dc3a32c7b 100644 --- a/perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.hpp +++ b/perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.hpp @@ -16,11 +16,14 @@ #define DISTANCE_BASED_COMPARE_MAP_FILTER__NODE_HPP_ #include "../voxel_grid_map_loader/voxel_grid_map_loader.hpp" -<<<<<<<< HEAD:perception/compare_map_segmentation/src/distance_based_compare_map_filter/node.hpp +<<<<<<<< + HEAD : perception / compare_map_segmentation / src / distance_based_compare_map_filter / node.hpp #include "pointcloud_preprocessor/filter.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" ->>>>>>>> original/main:perception/autoware_compare_map_segmentation/src/distance_based_compare_map_filter/node.hpp + >>>>>>>> original / + main : perception / autoware_compare_map_segmentation / src / distance_based_compare_map_filter / + node.hpp #include // for pcl::isFinite #include @@ -30,94 +33,94 @@ #include #include -namespace autoware::compare_map_segmentation + namespace autoware::compare_map_segmentation { + typedef typename pcl::Filter::PointCloud PointCloud; + typedef typename PointCloud::Ptr PointCloudPtr; + typedef typename PointCloud::ConstPtr PointCloudConstPtr; -typedef typename pcl::Filter::PointCloud PointCloud; -typedef typename PointCloud::Ptr PointCloudPtr; -typedef typename PointCloud::ConstPtr PointCloudConstPtr; - -class DistanceBasedStaticMapLoader : public VoxelGridStaticMapLoader -{ -private: - PointCloudConstPtr map_ptr_; - pcl::search::Search::Ptr tree_; - -public: - DistanceBasedStaticMapLoader( - rclcpp::Node * node, double leaf_size, std::string * tf_map_input_frame, std::mutex * mutex) - : VoxelGridStaticMapLoader(node, leaf_size, 1.0, tf_map_input_frame, mutex) + class DistanceBasedStaticMapLoader : public VoxelGridStaticMapLoader { - RCLCPP_INFO(logger_, "DistanceBasedStaticMapLoader initialized.\n"); - } - - void onMapCallback(const sensor_msgs::msg::PointCloud2::ConstSharedPtr map) override; - bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; -}; + private: + PointCloudConstPtr map_ptr_; + pcl::search::Search::Ptr tree_; + + public: + DistanceBasedStaticMapLoader( + rclcpp::Node * node, double leaf_size, std::string * tf_map_input_frame, std::mutex * mutex) + : VoxelGridStaticMapLoader(node, leaf_size, 1.0, tf_map_input_frame, mutex) + { + RCLCPP_INFO(logger_, "DistanceBasedStaticMapLoader initialized.\n"); + } -class DistanceBasedDynamicMapLoader : public VoxelGridDynamicMapLoader -{ -public: - DistanceBasedDynamicMapLoader( - rclcpp::Node * node, double leaf_size, std::string * tf_map_input_frame, std::mutex * mutex, - rclcpp::CallbackGroup::SharedPtr main_callback_group) - : VoxelGridDynamicMapLoader(node, leaf_size, 1.0, tf_map_input_frame, mutex, main_callback_group) - { - RCLCPP_INFO(logger_, "DistanceBasedDynamicMapLoader initialized.\n"); - } - bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; + void onMapCallback(const sensor_msgs::msg::PointCloud2::ConstSharedPtr map) override; + bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; + }; - inline void addMapCellAndFilter( - const autoware_map_msgs::msg::PointCloudMapCellWithID & map_cell_to_add) override + class DistanceBasedDynamicMapLoader : public VoxelGridDynamicMapLoader { - map_grid_size_x_ = map_cell_to_add.metadata.max_x - map_cell_to_add.metadata.min_x; - map_grid_size_y_ = map_cell_to_add.metadata.max_y - map_cell_to_add.metadata.min_y; - - pcl::PointCloud map_cell_pc_tmp; - pcl::fromROSMsg(map_cell_to_add.pointcloud, map_cell_pc_tmp); - - auto map_cell_voxel_input_tmp_ptr = - std::make_shared>(map_cell_pc_tmp); - - MapGridVoxelInfo current_voxel_grid_list_item; - current_voxel_grid_list_item.min_b_x = map_cell_to_add.metadata.min_x; - current_voxel_grid_list_item.min_b_y = map_cell_to_add.metadata.min_y; - current_voxel_grid_list_item.max_b_x = map_cell_to_add.metadata.max_x; - current_voxel_grid_list_item.max_b_y = map_cell_to_add.metadata.max_y; - - // add kdtree - pcl::search::Search::Ptr tree_tmp; - if (!tree_tmp) { - if (map_cell_voxel_input_tmp_ptr->isOrganized()) { - tree_tmp.reset(new pcl::search::OrganizedNeighbor()); - } else { - tree_tmp.reset(new pcl::search::KdTree(false)); - } + public: + DistanceBasedDynamicMapLoader( + rclcpp::Node * node, double leaf_size, std::string * tf_map_input_frame, std::mutex * mutex, + rclcpp::CallbackGroup::SharedPtr main_callback_group) + : VoxelGridDynamicMapLoader( + node, leaf_size, 1.0, tf_map_input_frame, mutex, main_callback_group) + { + RCLCPP_INFO(logger_, "DistanceBasedDynamicMapLoader initialized.\n"); } - tree_tmp->setInputCloud(map_cell_voxel_input_tmp_ptr); - current_voxel_grid_list_item.map_cell_kdtree = tree_tmp; + bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; + + inline void addMapCellAndFilter( + const autoware_map_msgs::msg::PointCloudMapCellWithID & map_cell_to_add) override + { + map_grid_size_x_ = map_cell_to_add.metadata.max_x - map_cell_to_add.metadata.min_x; + map_grid_size_y_ = map_cell_to_add.metadata.max_y - map_cell_to_add.metadata.min_y; + + pcl::PointCloud map_cell_pc_tmp; + pcl::fromROSMsg(map_cell_to_add.pointcloud, map_cell_pc_tmp); + + auto map_cell_voxel_input_tmp_ptr = + std::make_shared>(map_cell_pc_tmp); + + MapGridVoxelInfo current_voxel_grid_list_item; + current_voxel_grid_list_item.min_b_x = map_cell_to_add.metadata.min_x; + current_voxel_grid_list_item.min_b_y = map_cell_to_add.metadata.min_y; + current_voxel_grid_list_item.max_b_x = map_cell_to_add.metadata.max_x; + current_voxel_grid_list_item.max_b_y = map_cell_to_add.metadata.max_y; + + // add kdtree + pcl::search::Search::Ptr tree_tmp; + if (!tree_tmp) { + if (map_cell_voxel_input_tmp_ptr->isOrganized()) { + tree_tmp.reset(new pcl::search::OrganizedNeighbor()); + } else { + tree_tmp.reset(new pcl::search::KdTree(false)); + } + } + tree_tmp->setInputCloud(map_cell_voxel_input_tmp_ptr); + current_voxel_grid_list_item.map_cell_kdtree = tree_tmp; - // add - (*mutex_ptr_).lock(); - current_voxel_grid_dict_.insert({map_cell_to_add.cell_id, current_voxel_grid_list_item}); - (*mutex_ptr_).unlock(); - } -}; + // add + (*mutex_ptr_).lock(); + current_voxel_grid_dict_.insert({map_cell_to_add.cell_id, current_voxel_grid_list_item}); + (*mutex_ptr_).unlock(); + } + }; -class DistanceBasedCompareMapFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - -private: - double distance_threshold_; - std::unique_ptr distance_based_map_loader_; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit DistanceBasedCompareMapFilterComponent(const rclcpp::NodeOptions & options); -}; + class DistanceBasedCompareMapFilterComponent : public autoware::pointcloud_preprocessor::Filter + { + protected: + virtual void filter( + const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); + + private: + double distance_threshold_; + std::unique_ptr distance_based_map_loader_; + + public: + PCL_MAKE_ALIGNED_OPERATOR_NEW + explicit DistanceBasedCompareMapFilterComponent(const rclcpp::NodeOptions & options); + }; } // namespace autoware::compare_map_segmentation // clang-format off diff --git a/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.hpp b/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.hpp index a2e30a3192563..653f6bf821f69 100644 --- a/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.hpp +++ b/perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.hpp @@ -16,11 +16,16 @@ #define VOXEL_BASED_APPROXIMATE_COMPARE_MAP_FILTER__NODE_HPP_ // NOLINT #include "../voxel_grid_map_loader/voxel_grid_map_loader.hpp" -<<<<<<<< HEAD:perception/compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.hpp +<<<<<<<< + HEAD : perception / compare_map_segmentation / src / voxel_based_approximate_compare_map_filter / + node.hpp #include "pointcloud_preprocessor/filter.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" ->>>>>>>> original/main:perception/autoware_compare_map_segmentation/src/voxel_based_approximate_compare_map_filter/node.hpp + >>>>>>>> original / + main : perception / autoware_compare_map_segmentation / src / + voxel_based_approximate_compare_map_filter / + node.hpp #include #include @@ -29,52 +34,51 @@ #include #include -namespace autoware::compare_map_segmentation + namespace autoware::compare_map_segmentation { - -class VoxelBasedApproximateStaticMapLoader : public VoxelGridStaticMapLoader -{ -public: - explicit VoxelBasedApproximateStaticMapLoader( - rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, - std::string * tf_map_input_frame, std::mutex * mutex) - : VoxelGridStaticMapLoader(node, leaf_size, downsize_ratio_z_axis, tf_map_input_frame, mutex) + class VoxelBasedApproximateStaticMapLoader : public VoxelGridStaticMapLoader { - RCLCPP_INFO(logger_, "VoxelBasedApproximateStaticMapLoader initialized.\n"); - } - bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; -}; + public: + explicit VoxelBasedApproximateStaticMapLoader( + rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, + std::string * tf_map_input_frame, std::mutex * mutex) + : VoxelGridStaticMapLoader(node, leaf_size, downsize_ratio_z_axis, tf_map_input_frame, mutex) + { + RCLCPP_INFO(logger_, "VoxelBasedApproximateStaticMapLoader initialized.\n"); + } + bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; + }; -class VoxelBasedApproximateDynamicMapLoader : public VoxelGridDynamicMapLoader -{ -public: - VoxelBasedApproximateDynamicMapLoader( - rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, - std::string * tf_map_input_frame, std::mutex * mutex, - rclcpp::CallbackGroup::SharedPtr main_callback_group) - : VoxelGridDynamicMapLoader( - node, leaf_size, downsize_ratio_z_axis, tf_map_input_frame, mutex, main_callback_group) + class VoxelBasedApproximateDynamicMapLoader : public VoxelGridDynamicMapLoader { - RCLCPP_INFO(logger_, "VoxelBasedApproximateDynamicMapLoader initialized.\n"); - } - bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; -}; + public: + VoxelBasedApproximateDynamicMapLoader( + rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, + std::string * tf_map_input_frame, std::mutex * mutex, + rclcpp::CallbackGroup::SharedPtr main_callback_group) + : VoxelGridDynamicMapLoader( + node, leaf_size, downsize_ratio_z_axis, tf_map_input_frame, mutex, main_callback_group) + { + RCLCPP_INFO(logger_, "VoxelBasedApproximateDynamicMapLoader initialized.\n"); + } + bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; + }; -class VoxelBasedApproximateCompareMapFilterComponent -: public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); + class VoxelBasedApproximateCompareMapFilterComponent + : public autoware::pointcloud_preprocessor::Filter + { + protected: + virtual void filter( + const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); -private: - double distance_threshold_; - std::unique_ptr voxel_based_approximate_map_loader_; + private: + double distance_threshold_; + std::unique_ptr voxel_based_approximate_map_loader_; -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit VoxelBasedApproximateCompareMapFilterComponent(const rclcpp::NodeOptions & options); -}; + public: + PCL_MAKE_ALIGNED_OPERATOR_NEW + explicit VoxelBasedApproximateCompareMapFilterComponent(const rclcpp::NodeOptions & options); + }; } // namespace autoware::compare_map_segmentation // clang-format off diff --git a/perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.hpp b/perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.hpp index 5283fa98cfa24..db62669c87094 100644 --- a/perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.hpp +++ b/perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.hpp @@ -16,11 +16,14 @@ #define VOXEL_BASED_COMPARE_MAP_FILTER__NODE_HPP_ #include "../voxel_grid_map_loader/voxel_grid_map_loader.hpp" -<<<<<<<< HEAD:perception/compare_map_segmentation/src/voxel_based_compare_map_filter/node.hpp +<<<<<<<< + HEAD : perception / compare_map_segmentation / src / voxel_based_compare_map_filter / node.hpp #include "pointcloud_preprocessor/filter.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" ->>>>>>>> original/main:perception/autoware_compare_map_segmentation/src/voxel_based_compare_map_filter/node.hpp + >>>>>>>> original / + main : perception / autoware_compare_map_segmentation / src / voxel_based_compare_map_filter / + node.hpp #include #include @@ -28,27 +31,27 @@ #include #include -namespace autoware::compare_map_segmentation + namespace autoware::compare_map_segmentation { -class VoxelBasedCompareMapFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - -private: - // pcl::SegmentDifferences impl_; - std::unique_ptr voxel_grid_map_loader_; - rclcpp::Subscription::SharedPtr sub_map_; - double distance_threshold_; - bool set_map_in_voxel_grid_; - - bool dynamic_map_load_enable_; - -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit VoxelBasedCompareMapFilterComponent(const rclcpp::NodeOptions & options); -}; + class VoxelBasedCompareMapFilterComponent : public autoware::pointcloud_preprocessor::Filter + { + protected: + virtual void filter( + const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); + + private: + // pcl::SegmentDifferences impl_; + std::unique_ptr voxel_grid_map_loader_; + rclcpp::Subscription::SharedPtr sub_map_; + double distance_threshold_; + bool set_map_in_voxel_grid_; + + bool dynamic_map_load_enable_; + + public: + PCL_MAKE_ALIGNED_OPERATOR_NEW + explicit VoxelBasedCompareMapFilterComponent(const rclcpp::NodeOptions & options); + }; } // namespace autoware::compare_map_segmentation #endif // VOXEL_BASED_COMPARE_MAP_FILTER__NODE_HPP_ diff --git a/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.hpp b/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.hpp index 2f7c5c6efc40a..2199e5ccf476d 100644 --- a/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.hpp +++ b/perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.hpp @@ -16,11 +16,16 @@ #define VOXEL_DISTANCE_BASED_COMPARE_MAP_FILTER__NODE_HPP_ // NOLINT #include "../voxel_grid_map_loader/voxel_grid_map_loader.hpp" -<<<<<<<< HEAD:perception/compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.hpp +<<<<<<<< + HEAD : perception / compare_map_segmentation / src / voxel_distance_based_compare_map_filter / + node.hpp #include "pointcloud_preprocessor/filter.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" ->>>>>>>> original/main:perception/autoware_compare_map_segmentation/src/voxel_distance_based_compare_map_filter/node.hpp + >>>>>>>> original / + main : perception / autoware_compare_map_segmentation / src / + voxel_distance_based_compare_map_filter / + node.hpp #include #include @@ -31,118 +36,118 @@ #include #include -namespace autoware::compare_map_segmentation + namespace autoware::compare_map_segmentation { + typedef typename pcl::Filter::PointCloud PointCloud; + typedef typename PointCloud::Ptr PointCloudPtr; + typedef typename PointCloud::ConstPtr PointCloudConstPtr; -typedef typename pcl::Filter::PointCloud PointCloud; -typedef typename PointCloud::Ptr PointCloudPtr; -typedef typename PointCloud::ConstPtr PointCloudConstPtr; - -class VoxelDistanceBasedStaticMapLoader : public VoxelGridStaticMapLoader -{ -private: - PointCloudConstPtr map_ptr_; - pcl::search::Search::Ptr tree_; - -public: - explicit VoxelDistanceBasedStaticMapLoader( - rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, - std::string * tf_map_input_frame, std::mutex * mutex) - : VoxelGridStaticMapLoader(node, leaf_size, downsize_ratio_z_axis, tf_map_input_frame, mutex) - { - RCLCPP_INFO(logger_, "VoxelDistanceBasedStaticMapLoader initialized.\n"); - } - bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; - void onMapCallback(const sensor_msgs::msg::PointCloud2::ConstSharedPtr map) override; -}; - -class VoxelDistanceBasedDynamicMapLoader : public VoxelGridDynamicMapLoader -{ -protected: -private: - PointCloudConstPtr map_ptr_; - /* data */ -public: - explicit VoxelDistanceBasedDynamicMapLoader( - rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, - std::string * tf_map_input_frame, std::mutex * mutex, - rclcpp::CallbackGroup::SharedPtr main_callback_group) - : VoxelGridDynamicMapLoader( - node, leaf_size, downsize_ratio_z_axis, tf_map_input_frame, mutex, main_callback_group) + class VoxelDistanceBasedStaticMapLoader : public VoxelGridStaticMapLoader { - RCLCPP_INFO(logger_, "VoxelDistanceBasedDynamicMapLoader initialized.\n"); - } - bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; + private: + PointCloudConstPtr map_ptr_; + pcl::search::Search::Ptr tree_; + + public: + explicit VoxelDistanceBasedStaticMapLoader( + rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, + std::string * tf_map_input_frame, std::mutex * mutex) + : VoxelGridStaticMapLoader(node, leaf_size, downsize_ratio_z_axis, tf_map_input_frame, mutex) + { + RCLCPP_INFO(logger_, "VoxelDistanceBasedStaticMapLoader initialized.\n"); + } + bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; + void onMapCallback(const sensor_msgs::msg::PointCloud2::ConstSharedPtr map) override; + }; - inline void addMapCellAndFilter( - const autoware_map_msgs::msg::PointCloudMapCellWithID & map_cell_to_add) override + class VoxelDistanceBasedDynamicMapLoader : public VoxelGridDynamicMapLoader { - map_grid_size_x_ = map_cell_to_add.metadata.max_x - map_cell_to_add.metadata.min_x; - map_grid_size_y_ = map_cell_to_add.metadata.max_y - map_cell_to_add.metadata.min_y; - - pcl::PointCloud map_cell_pc_tmp; - pcl::fromROSMsg(map_cell_to_add.pointcloud, map_cell_pc_tmp); - - VoxelGridPointXYZ map_cell_voxel_grid_tmp; - PointCloudPtr map_cell_downsampled_pc_ptr_tmp; - - auto map_cell_voxel_input_tmp_ptr = - std::make_shared>(map_cell_pc_tmp); - map_cell_voxel_grid_tmp.setLeafSize(voxel_leaf_size_, voxel_leaf_size_, voxel_leaf_size_); - map_cell_downsampled_pc_ptr_tmp.reset(new pcl::PointCloud); - map_cell_voxel_grid_tmp.setInputCloud(map_cell_voxel_input_tmp_ptr); - map_cell_voxel_grid_tmp.setSaveLeafLayout(true); - map_cell_voxel_grid_tmp.filter(*map_cell_downsampled_pc_ptr_tmp); - - MapGridVoxelInfo current_voxel_grid_list_item; - current_voxel_grid_list_item.min_b_x = map_cell_to_add.metadata.min_x; - current_voxel_grid_list_item.min_b_y = map_cell_to_add.metadata.min_y; - current_voxel_grid_list_item.max_b_x = map_cell_to_add.metadata.max_x; - current_voxel_grid_list_item.max_b_y = map_cell_to_add.metadata.max_y; - - current_voxel_grid_list_item.map_cell_voxel_grid.set_voxel_grid( - &(map_cell_voxel_grid_tmp.leaf_layout_), map_cell_voxel_grid_tmp.get_min_b(), - map_cell_voxel_grid_tmp.get_max_b(), map_cell_voxel_grid_tmp.get_div_b(), - map_cell_voxel_grid_tmp.get_divb_mul(), map_cell_voxel_grid_tmp.get_inverse_leaf_size()); - - current_voxel_grid_list_item.map_cell_pc_ptr.reset(new pcl::PointCloud); - current_voxel_grid_list_item.map_cell_pc_ptr = std::move(map_cell_downsampled_pc_ptr_tmp); - - // add kdtree - pcl::search::Search::Ptr tree_tmp; - if (!tree_tmp) { - if (map_cell_voxel_input_tmp_ptr->isOrganized()) { - tree_tmp.reset(new pcl::search::OrganizedNeighbor()); - } else { - tree_tmp.reset(new pcl::search::KdTree(false)); - } + protected: + private: + PointCloudConstPtr map_ptr_; + /* data */ + public: + explicit VoxelDistanceBasedDynamicMapLoader( + rclcpp::Node * node, double leaf_size, double downsize_ratio_z_axis, + std::string * tf_map_input_frame, std::mutex * mutex, + rclcpp::CallbackGroup::SharedPtr main_callback_group) + : VoxelGridDynamicMapLoader( + node, leaf_size, downsize_ratio_z_axis, tf_map_input_frame, mutex, main_callback_group) + { + RCLCPP_INFO(logger_, "VoxelDistanceBasedDynamicMapLoader initialized.\n"); } - tree_tmp->setInputCloud(map_cell_voxel_input_tmp_ptr); - current_voxel_grid_list_item.map_cell_kdtree = tree_tmp; + bool is_close_to_map(const pcl::PointXYZ & point, const double distance_threshold) override; + + inline void addMapCellAndFilter( + const autoware_map_msgs::msg::PointCloudMapCellWithID & map_cell_to_add) override + { + map_grid_size_x_ = map_cell_to_add.metadata.max_x - map_cell_to_add.metadata.min_x; + map_grid_size_y_ = map_cell_to_add.metadata.max_y - map_cell_to_add.metadata.min_y; + + pcl::PointCloud map_cell_pc_tmp; + pcl::fromROSMsg(map_cell_to_add.pointcloud, map_cell_pc_tmp); + + VoxelGridPointXYZ map_cell_voxel_grid_tmp; + PointCloudPtr map_cell_downsampled_pc_ptr_tmp; + + auto map_cell_voxel_input_tmp_ptr = + std::make_shared>(map_cell_pc_tmp); + map_cell_voxel_grid_tmp.setLeafSize(voxel_leaf_size_, voxel_leaf_size_, voxel_leaf_size_); + map_cell_downsampled_pc_ptr_tmp.reset(new pcl::PointCloud); + map_cell_voxel_grid_tmp.setInputCloud(map_cell_voxel_input_tmp_ptr); + map_cell_voxel_grid_tmp.setSaveLeafLayout(true); + map_cell_voxel_grid_tmp.filter(*map_cell_downsampled_pc_ptr_tmp); + + MapGridVoxelInfo current_voxel_grid_list_item; + current_voxel_grid_list_item.min_b_x = map_cell_to_add.metadata.min_x; + current_voxel_grid_list_item.min_b_y = map_cell_to_add.metadata.min_y; + current_voxel_grid_list_item.max_b_x = map_cell_to_add.metadata.max_x; + current_voxel_grid_list_item.max_b_y = map_cell_to_add.metadata.max_y; + + current_voxel_grid_list_item.map_cell_voxel_grid.set_voxel_grid( + &(map_cell_voxel_grid_tmp.leaf_layout_), map_cell_voxel_grid_tmp.get_min_b(), + map_cell_voxel_grid_tmp.get_max_b(), map_cell_voxel_grid_tmp.get_div_b(), + map_cell_voxel_grid_tmp.get_divb_mul(), map_cell_voxel_grid_tmp.get_inverse_leaf_size()); + + current_voxel_grid_list_item.map_cell_pc_ptr.reset(new pcl::PointCloud); + current_voxel_grid_list_item.map_cell_pc_ptr = std::move(map_cell_downsampled_pc_ptr_tmp); + + // add kdtree + pcl::search::Search::Ptr tree_tmp; + if (!tree_tmp) { + if (map_cell_voxel_input_tmp_ptr->isOrganized()) { + tree_tmp.reset(new pcl::search::OrganizedNeighbor()); + } else { + tree_tmp.reset(new pcl::search::KdTree(false)); + } + } + tree_tmp->setInputCloud(map_cell_voxel_input_tmp_ptr); + current_voxel_grid_list_item.map_cell_kdtree = tree_tmp; - // add - (*mutex_ptr_).lock(); - current_voxel_grid_dict_.insert({map_cell_to_add.cell_id, current_voxel_grid_list_item}); - (*mutex_ptr_).unlock(); - } -}; + // add + (*mutex_ptr_).lock(); + current_voxel_grid_dict_.insert({map_cell_to_add.cell_id, current_voxel_grid_list_item}); + (*mutex_ptr_).unlock(); + } + }; -class VoxelDistanceBasedCompareMapFilterComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); + class VoxelDistanceBasedCompareMapFilterComponent + : public autoware::pointcloud_preprocessor::Filter + { + protected: + virtual void filter( + const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - void input_target_callback(const PointCloud2ConstPtr map); + void input_target_callback(const PointCloud2ConstPtr map); -private: - std::unique_ptr voxel_distance_based_map_loader_; - double distance_threshold_; + private: + std::unique_ptr voxel_distance_based_map_loader_; + double distance_threshold_; -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit VoxelDistanceBasedCompareMapFilterComponent(const rclcpp::NodeOptions & options); -}; + public: + PCL_MAKE_ALIGNED_OPERATOR_NEW + explicit VoxelDistanceBasedCompareMapFilterComponent(const rclcpp::NodeOptions & options); + }; } // namespace autoware::compare_map_segmentation // clang-format off diff --git a/perception/ground_segmentation/src/ransac_ground_filter/node.cpp b/perception/ground_segmentation/src/ransac_ground_filter/node.cpp index e62ff2e50316c..774c19e866357 100644 --- a/perception/ground_segmentation/src/ransac_ground_filter/node.cpp +++ b/perception/ground_segmentation/src/ransac_ground_filter/node.cpp @@ -80,13 +80,16 @@ PlaneBasis getPlaneBasis(const Eigen::Vector3d & plane_normal) return basis; } -<<<<<<<< HEAD:perception/ground_segmentation/src/ransac_ground_filter/node.cpp -using pointcloud_preprocessor::get_param; -======== -using autoware::pointcloud_preprocessor::get_param; ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/ransac_ground_filter/node.cpp - -RANSACGroundFilterComponent::RANSACGroundFilterComponent(const rclcpp::NodeOptions & options) +< < < < < < < < HEAD : perception / ground_segmentation / src / ransac_ground_filter / + node.cpp using pointcloud_preprocessor::get_param; +== == == == using autoware::pointcloud_preprocessor::get_param; +>>>>>>>> original / + main +: perception / + autoware_ground_segmentation / src / ransac_ground_filter / + node.cpp + + RANSACGroundFilterComponent::RANSACGroundFilterComponent(const rclcpp::NodeOptions & options) : Filter("RANSACGroundFilter", options) { base_frame_ = declare_parameter("base_frame", "base_link"); diff --git a/perception/ground_segmentation/src/ray_ground_filter/node.hpp b/perception/ground_segmentation/src/ray_ground_filter/node.hpp index f872a257b5a03..9a2a2d5081a93 100644 --- a/perception/ground_segmentation/src/ray_ground_filter/node.hpp +++ b/perception/ground_segmentation/src/ray_ground_filter/node.hpp @@ -58,13 +58,16 @@ #include #endif -<<<<<<<< HEAD:perception/ground_segmentation/src/ray_ground_filter/node.hpp +<<<<<<<< + HEAD : perception / ground_segmentation / src / ray_ground_filter / node.hpp #include "gencolors.hpp" #include "pointcloud_preprocessor/filter.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" #include "gencolors.hpp" ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/ray_ground_filter/node.hpp + >>>>>>>> original / + main : perception / autoware_ground_segmentation / src / ray_ground_filter / + node.hpp #include #include @@ -80,7 +83,7 @@ #include #include -namespace bg = boost::geometry; + namespace bg = boost::geometry; using Point = bg::model::d2::point_xy; using Polygon = bg::model::polygon; @@ -189,31 +192,33 @@ class RayGroundFilterComponent : public autoware::pointcloud_preprocessor::Filte * @param out_only_indices_cloud_ptr Resulting PointCloud with the indices kept * @param out_removed_indices_cloud_ptr Resulting PointCloud with the indices removed */ - void ExtractPointsIndices( - const PointCloud2::ConstSharedPtr in_cloud_ptr, const pcl::PointIndices & in_indices, -<<<<<<<< HEAD:perception/ground_segmentation/src/ray_ground_filter/node.hpp - PointCloud2::SharedPtr out_only_indices_cloud_ptr, - PointCloud2::SharedPtr out_removed_indices_cloud_ptr); + void ExtractPointsIndices(const PointCloud2::ConstSharedPtr in_cloud_ptr, + const pcl::PointIndices & in_indices, < < < < < < < < HEAD + : perception / ground_segmentation / src / ray_ground_filter / + node.hpp PointCloud2::SharedPtr out_only_indices_cloud_ptr, + PointCloud2::SharedPtr out_removed_indices_cloud_ptr); ======== PointCloud2::SharedPtr ground_cloud_msg_ptr, PointCloud2::SharedPtr no_ground_cloud_msg_ptr); ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/ray_ground_filter/node.hpp +>>>>>>>> original / main : perception / autoware_ground_segmentation / src / ray_ground_filter / + node.hpp - boost::optional calcPointVehicleIntersection(const Point & point); + boost::optional + calcPointVehicleIntersection(const Point & point); - void setVehicleFootprint( - const double min_x, const double max_x, const double min_y, const double max_y); - void initializePointCloud2( - const PointCloud2::ConstSharedPtr & in_cloud_ptr, - const PointCloud2::SharedPtr & out_cloud_msg_ptr); - /** \brief Parameter service callback result : needed to be hold */ - OnSetParametersCallbackHandle::SharedPtr set_param_res_; +void setVehicleFootprint( + const double min_x, const double max_x, const double min_y, const double max_y); +void initializePointCloud2( + const PointCloud2::ConstSharedPtr & in_cloud_ptr, + const PointCloud2::SharedPtr & out_cloud_msg_ptr); +/** \brief Parameter service callback result : needed to be hold */ +OnSetParametersCallbackHandle::SharedPtr set_param_res_; - /** \brief Parameter service callback */ - rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); +/** \brief Parameter service callback */ +rcl_interfaces::msg::SetParametersResult paramCallback(const std::vector & p); public: - EIGEN_MAKE_ALIGNED_OPERATOR_NEW - explicit RayGroundFilterComponent(const rclcpp::NodeOptions & options); +EIGEN_MAKE_ALIGNED_OPERATOR_NEW +explicit RayGroundFilterComponent(const rclcpp::NodeOptions & options); }; } // namespace autoware::ground_segmentation diff --git a/perception/ground_segmentation/src/scan_ground_filter/node.cpp b/perception/ground_segmentation/src/scan_ground_filter/node.cpp index f79f261a17812..52fd0e71ca11d 100644 --- a/perception/ground_segmentation/src/scan_ground_filter/node.cpp +++ b/perception/ground_segmentation/src/scan_ground_filter/node.cpp @@ -32,12 +32,11 @@ using autoware::universe_utils::normalizeDegree; using autoware::universe_utils::normalizeRadian; using autoware::vehicle_info_utils::VehicleInfoUtils; -ScanGroundFilterComponent::ScanGroundFilterComponent(const rclcpp::NodeOptions & options) -<<<<<<<< HEAD:perception/ground_segmentation/src/scan_ground_filter/node.cpp -: pointcloud_preprocessor::Filter("ScanGroundFilter", options) -======== -: autoware::pointcloud_preprocessor::Filter("ScanGroundFilter", options) ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/scan_ground_filter/node.cpp +ScanGroundFilterComponent::ScanGroundFilterComponent(const rclcpp::NodeOptions & options)<<<<<<<< + HEAD : perception / ground_segmentation / src / scan_ground_filter / + node.cpp : pointcloud_preprocessor::Filter("ScanGroundFilter", options) == + == == == : autoware::pointcloud_preprocessor::Filter("ScanGroundFilter", options)>>>>>>>> original + / main : perception / autoware_ground_segmentation / src / scan_ground_filter / node.cpp { // set initial parameters { diff --git a/perception/ground_segmentation/src/scan_ground_filter/node.hpp b/perception/ground_segmentation/src/scan_ground_filter/node.hpp index f2ccd234ce2da..3f6ad785fa519 100644 --- a/perception/ground_segmentation/src/scan_ground_filter/node.hpp +++ b/perception/ground_segmentation/src/scan_ground_filter/node.hpp @@ -15,15 +15,18 @@ #ifndef SCAN_GROUND_FILTER__NODE_HPP_ #define SCAN_GROUND_FILTER__NODE_HPP_ -<<<<<<<< HEAD:perception/ground_segmentation/src/scan_ground_filter/node.hpp +<<<<<<<< + HEAD : perception / ground_segmentation / src / scan_ground_filter / node.hpp #include "autoware_vehicle_info_utils/vehicle_info.hpp" #include "pointcloud_preprocessor/filter.hpp" #include "pointcloud_preprocessor/transform_info.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" #include "autoware/pointcloud_preprocessor/transform_info.hpp" #include "autoware_vehicle_info_utils/vehicle_info.hpp" ->>>>>>>> original/main:perception/autoware_ground_segmentation/src/scan_ground_filter/node.hpp + >>>>>>>> original / + main : perception / autoware_ground_segmentation / src / scan_ground_filter / + node.hpp #include @@ -44,7 +47,7 @@ #include #include -class ScanGroundFilterTest; + class ScanGroundFilterTest; namespace autoware::ground_segmentation { diff --git a/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp index 589f8b3cefed2..5aa6bcf47def6 100644 --- a/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp @@ -17,75 +17,80 @@ #include "autoware/image_projection_based_fusion/fusion_node.hpp" #include "autoware/image_projection_based_fusion/pointpainting_fusion/pointpainting_trt.hpp" -<<<<<<<< HEAD:perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp +<<<<<<<< + HEAD : perception / image_projection_based_fusion / include / autoware / + image_projection_based_fusion / pointpainting_fusion / node.hpp #include "lidar_centerpoint/postprocess/non_maximum_suppression.hpp" #include #include #include #include -======== + == == == == #include "autoware/lidar_centerpoint/postprocess/non_maximum_suppression.hpp" #include #include #include #include ->>>>>>>> original/main:perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/node.hpp + >>>>>>>> original / + main : perception / autoware_image_projection_based_fusion / include / autoware / + image_projection_based_fusion / pointpainting_fusion / + node.hpp #include #include #include #include -namespace autoware::image_projection_based_fusion + namespace autoware::image_projection_based_fusion { -using Label = autoware_perception_msgs::msg::ObjectClassification; + using Label = autoware_perception_msgs::msg::ObjectClassification; -inline bool isInsideBbox( - float proj_x, float proj_y, sensor_msgs::msg::RegionOfInterest roi, float zc) -{ - // z_c is scaling to normalize projection point - return proj_x >= roi.x_offset * zc && proj_x <= (roi.x_offset + roi.width) * zc && - proj_y >= roi.y_offset * zc && proj_y <= (roi.y_offset + roi.height) * zc; -} + inline bool isInsideBbox( + float proj_x, float proj_y, sensor_msgs::msg::RegionOfInterest roi, float zc) + { + // z_c is scaling to normalize projection point + return proj_x >= roi.x_offset * zc && proj_x <= (roi.x_offset + roi.width) * zc && + proj_y >= roi.y_offset * zc && proj_y <= (roi.y_offset + roi.height) * zc; + } -class PointPaintingFusionNode -: public FusionNode -{ -public: - explicit PointPaintingFusionNode(const rclcpp::NodeOptions & options); + class PointPaintingFusionNode + : public FusionNode + { + public: + explicit PointPaintingFusionNode(const rclcpp::NodeOptions & options); -protected: - void preprocess(sensor_msgs::msg::PointCloud2 & pointcloud_msg) override; + protected: + void preprocess(sensor_msgs::msg::PointCloud2 & pointcloud_msg) override; - void fuseOnSingleImage( - const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const std::size_t image_id, - const DetectedObjectsWithFeature & input_roi_msg, - const sensor_msgs::msg::CameraInfo & camera_info, - sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; + void fuseOnSingleImage( + const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const std::size_t image_id, + const DetectedObjectsWithFeature & input_roi_msg, + const sensor_msgs::msg::CameraInfo & camera_info, + sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; - void postprocess(sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; + void postprocess(sensor_msgs::msg::PointCloud2 & painted_pointcloud_msg) override; - rclcpp::Publisher::SharedPtr obj_pub_ptr_; + rclcpp::Publisher::SharedPtr obj_pub_ptr_; - std::vector tan_h_; // horizontal field of view + std::vector tan_h_; // horizontal field of view - int omp_num_threads_{1}; - float score_threshold_{0.0}; - std::vector class_names_; - std::map class_index_; - std::map> isClassTable_; - std::vector pointcloud_range; - bool has_variance_{false}; - bool has_twist_{false}; + int omp_num_threads_{1}; + float score_threshold_{0.0}; + std::vector class_names_; + std::map class_index_; + std::map> isClassTable_; + std::vector pointcloud_range; + bool has_variance_{false}; + bool has_twist_{false}; - autoware::lidar_centerpoint::NonMaximumSuppression iou_bev_nms_; - autoware::lidar_centerpoint::DetectionClassRemapper detection_class_remapper_; + autoware::lidar_centerpoint::NonMaximumSuppression iou_bev_nms_; + autoware::lidar_centerpoint::DetectionClassRemapper detection_class_remapper_; - std::unique_ptr detector_ptr_{nullptr}; + std::unique_ptr detector_ptr_{nullptr}; - bool out_of_scope(const DetectedObjects & obj); -}; + bool out_of_scope(const DetectedObjects & obj); + }; } // namespace autoware::image_projection_based_fusion #endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__NODE_HPP_ diff --git a/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp index 63fb225649f21..ac960aefd0bdb 100644 --- a/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp +++ b/perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp @@ -16,41 +16,46 @@ #define AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ #include -<<<<<<<< HEAD:perception/image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp +<<<<<<<< + HEAD : perception / image_projection_based_fusion / include / autoware / + image_projection_based_fusion / pointpainting_fusion / voxel_generator.hpp #include #include -======== + == == == == #include #include ->>>>>>>> original/main:perception/autoware_image_projection_based_fusion/include/autoware/image_projection_based_fusion/pointpainting_fusion/voxel_generator.hpp + >>>>>>>> original / + main : perception / autoware_image_projection_based_fusion / include / autoware / + image_projection_based_fusion / pointpainting_fusion / + voxel_generator.hpp #include #include #include -namespace autoware::image_projection_based_fusion + namespace autoware::image_projection_based_fusion { - -class VoxelGenerator -{ -public: - explicit VoxelGenerator( - const autoware::lidar_centerpoint::DensificationParam & param, - const autoware::lidar_centerpoint::CenterPointConfig & config); - - bool enqueuePointCloud( - const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, const tf2_ros::Buffer & tf_buffer); - - std::size_t generateSweepPoints(std::vector & points); - -protected: - std::unique_ptr pd_ptr_{nullptr}; - - autoware::lidar_centerpoint::CenterPointConfig config_; - std::array range_; - std::array grid_size_; - std::array recip_voxel_size_; -}; + class VoxelGenerator + { + public: + explicit VoxelGenerator( + const autoware::lidar_centerpoint::DensificationParam & param, + const autoware::lidar_centerpoint::CenterPointConfig & config); + + bool enqueuePointCloud( + const sensor_msgs::msg::PointCloud2 & input_pointcloud_msg, + const tf2_ros::Buffer & tf_buffer); + + std::size_t generateSweepPoints(std::vector & points); + + protected: + std::unique_ptr pd_ptr_{nullptr}; + + autoware::lidar_centerpoint::CenterPointConfig config_; + std::array range_; + std::array grid_size_; + std::array recip_voxel_size_; + }; } // namespace autoware::image_projection_based_fusion #endif // AUTOWARE__IMAGE_PROJECTION_BASED_FUSION__POINTPAINTING_FUSION__VOXEL_GENERATOR_HPP_ diff --git a/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.hpp b/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.hpp index 1e91eeb3732c4..4c0f5f0e4cdbf 100644 --- a/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.hpp +++ b/perception/occupancy_grid_map_outlier_filter/src/occupancy_grid_map_outlier_filter_node.hpp @@ -18,10 +18,10 @@ <<<<<<< HEAD #include "autoware/universe_utils/ros/published_time_publisher.hpp" #include "pointcloud_preprocessor/filter.hpp" -======= + ======= #include "autoware/pointcloud_preprocessor/filter.hpp" #include "autoware/universe_utils/ros/published_time_publisher.hpp" ->>>>>>> original/main + >>>>>>> original/main #include #include @@ -45,95 +45,96 @@ #include #include -namespace autoware::occupancy_grid_map_outlier_filter + namespace autoware::occupancy_grid_map_outlier_filter { -using geometry_msgs::msg::Pose; -using nav_msgs::msg::OccupancyGrid; -using sensor_msgs::msg::PointCloud2; -using std_msgs::msg::Header; + using geometry_msgs::msg::Pose; + using nav_msgs::msg::OccupancyGrid; + using sensor_msgs::msg::PointCloud2; + using std_msgs::msg::Header; -class RadiusSearch2dFilter -{ -public: - explicit RadiusSearch2dFilter(rclcpp::Node & node); - void filter( - const PointCloud2 & input, const Pose & pose, PointCloud2 & output, PointCloud2 & outlier); - void filter( - const PointCloud2 & high_conf_input, const PointCloud2 & low_conf_input, const Pose & pose, - PointCloud2 & output, PointCloud2 & outlier); - -private: - float search_radius_; - float min_points_and_distance_ratio_; - int min_points_; - int max_points_; - long unsigned int max_filter_points_nb_; - pcl::search::Search::Ptr kd_tree_; -}; - -class OccupancyGridMapOutlierFilterComponent : public rclcpp::Node -{ -public: - explicit OccupancyGridMapOutlierFilterComponent(const rclcpp::NodeOptions & options); - -private: - void onOccupancyGridMapAndPointCloud2( - const OccupancyGrid::ConstSharedPtr & input_occupancy_grid_map, - const PointCloud2::ConstSharedPtr & input_pointcloud); - void filterByOccupancyGridMap( - const OccupancyGrid & occupancy_grid_map, const PointCloud2 & pointcloud, - PointCloud2 & high_confidence, PointCloud2 & low_confidence, PointCloud2 & out_ogm); - void splitPointCloudFrontBack( - const PointCloud2::ConstSharedPtr & input_pc, PointCloud2 & front_pc, PointCloud2 & behind_pc); - void initializerPointCloud2(const PointCloud2 & input, PointCloud2 & output); - void finalizePointCloud2(const PointCloud2 & input, PointCloud2 & output); - void concatPointCloud2(PointCloud2 & output, const PointCloud2 & input); - -private: - class Debugger + class RadiusSearch2dFilter { public: - explicit Debugger(OccupancyGridMapOutlierFilterComponent & node); - void publishOutlier(const PointCloud2 & input, const Header & header); - void publishHighConfidence(const PointCloud2 & input, const Header & header); - void publishLowConfidence(const PointCloud2 & input, const Header & header); + explicit RadiusSearch2dFilter(rclcpp::Node & node); + void filter( + const PointCloud2 & input, const Pose & pose, PointCloud2 & output, PointCloud2 & outlier); + void filter( + const PointCloud2 & high_conf_input, const PointCloud2 & low_conf_input, const Pose & pose, + PointCloud2 & output, PointCloud2 & outlier); private: - void transformToBaseLink( - const PointCloud2 & input, const Header & header, PointCloud2 & output); - rclcpp::Publisher::SharedPtr outlier_pointcloud_pub_; - rclcpp::Publisher::SharedPtr low_confidence_pointcloud_pub_; - rclcpp::Publisher::SharedPtr high_confidence_pointcloud_pub_; - const OccupancyGridMapOutlierFilterComponent & node_; + float search_radius_; + float min_points_and_distance_ratio_; + int min_points_; + int max_points_; + long unsigned int max_filter_points_nb_; + pcl::search::Search::Ptr kd_tree_; }; -private: - // publishers and subscribers - rclcpp::Publisher::SharedPtr pointcloud_pub_; - message_filters::Subscriber occupancy_grid_map_sub_; - message_filters::Subscriber pointcloud_sub_; - using SyncPolicy = message_filters::sync_policies::ExactTime; - using Sync = message_filters::Synchronizer; - std::shared_ptr sync_ptr_; - - // tf - std::shared_ptr tf2_; - std::shared_ptr tf2_listener_; - - // 2d outlier filter - std::shared_ptr radius_search_2d_filter_ptr_; - - // Debugger - std::shared_ptr debugger_ptr_; - std::unique_ptr> stop_watch_ptr_; - std::unique_ptr debug_publisher_; - std::unique_ptr published_time_publisher_; - - // ROS Parameters - std::string map_frame_; - std::string base_link_frame_; - int cost_threshold_; -}; + class OccupancyGridMapOutlierFilterComponent : public rclcpp::Node + { + public: + explicit OccupancyGridMapOutlierFilterComponent(const rclcpp::NodeOptions & options); + + private: + void onOccupancyGridMapAndPointCloud2( + const OccupancyGrid::ConstSharedPtr & input_occupancy_grid_map, + const PointCloud2::ConstSharedPtr & input_pointcloud); + void filterByOccupancyGridMap( + const OccupancyGrid & occupancy_grid_map, const PointCloud2 & pointcloud, + PointCloud2 & high_confidence, PointCloud2 & low_confidence, PointCloud2 & out_ogm); + void splitPointCloudFrontBack( + const PointCloud2::ConstSharedPtr & input_pc, PointCloud2 & front_pc, + PointCloud2 & behind_pc); + void initializerPointCloud2(const PointCloud2 & input, PointCloud2 & output); + void finalizePointCloud2(const PointCloud2 & input, PointCloud2 & output); + void concatPointCloud2(PointCloud2 & output, const PointCloud2 & input); + + private: + class Debugger + { + public: + explicit Debugger(OccupancyGridMapOutlierFilterComponent & node); + void publishOutlier(const PointCloud2 & input, const Header & header); + void publishHighConfidence(const PointCloud2 & input, const Header & header); + void publishLowConfidence(const PointCloud2 & input, const Header & header); + + private: + void transformToBaseLink( + const PointCloud2 & input, const Header & header, PointCloud2 & output); + rclcpp::Publisher::SharedPtr outlier_pointcloud_pub_; + rclcpp::Publisher::SharedPtr low_confidence_pointcloud_pub_; + rclcpp::Publisher::SharedPtr high_confidence_pointcloud_pub_; + const OccupancyGridMapOutlierFilterComponent & node_; + }; + + private: + // publishers and subscribers + rclcpp::Publisher::SharedPtr pointcloud_pub_; + message_filters::Subscriber occupancy_grid_map_sub_; + message_filters::Subscriber pointcloud_sub_; + using SyncPolicy = message_filters::sync_policies::ExactTime; + using Sync = message_filters::Synchronizer; + std::shared_ptr sync_ptr_; + + // tf + std::shared_ptr tf2_; + std::shared_ptr tf2_listener_; + + // 2d outlier filter + std::shared_ptr radius_search_2d_filter_ptr_; + + // Debugger + std::shared_ptr debugger_ptr_; + std::unique_ptr> stop_watch_ptr_; + std::unique_ptr debug_publisher_; + std::unique_ptr published_time_publisher_; + + // ROS Parameters + std::string map_frame_; + std::string base_link_frame_; + int cost_threshold_; + }; } // namespace autoware::occupancy_grid_map_outlier_filter #endif // OCCUPANCY_GRID_MAP_OUTLIER_FILTER_NODE_HPP_ diff --git a/planning/autoware_path_optimizer/include/autoware/path_optimizer/node.hpp b/planning/autoware_path_optimizer/include/autoware/path_optimizer/node.hpp index ca0008e72c65f..d6c2b4dceab61 100644 --- a/planning/autoware_path_optimizer/include/autoware/path_optimizer/node.hpp +++ b/planning/autoware_path_optimizer/include/autoware/path_optimizer/node.hpp @@ -38,118 +38,118 @@ #include #include -namespace autoware::path_optimizer + namespace autoware::path_optimizer { -class PathOptimizer : public rclcpp::Node -{ -public: - explicit PathOptimizer(const rclcpp::NodeOptions & node_options); - - // NOTE: This is for the static_centerline_generator package which utilizes the following - // instance. - std::shared_ptr getMPTOptimizer() const { return mpt_optimizer_ptr_; } - - // private: -protected: // for the static_centerline_generator package - // TODO(murooka) move this node to common - class DrivingDirectionChecker + class PathOptimizer : public rclcpp::Node { public: - bool isDrivingForward(const std::vector & path_points) + explicit PathOptimizer(const rclcpp::NodeOptions & node_options); + + // NOTE: This is for the static_centerline_generator package which utilizes the following + // instance. + std::shared_ptr getMPTOptimizer() const { return mpt_optimizer_ptr_; } + + // private: + protected: // for the static_centerline_generator package + // TODO(murooka) move this node to common + class DrivingDirectionChecker { - const auto is_driving_forward = autoware::motion_utils::isDrivingForward(path_points); - is_driving_forward_ = is_driving_forward ? is_driving_forward.value() : is_driving_forward_; - return is_driving_forward_; - } + public: + bool isDrivingForward(const std::vector & path_points) + { + const auto is_driving_forward = autoware::motion_utils::isDrivingForward(path_points); + is_driving_forward_ = is_driving_forward ? is_driving_forward.value() : is_driving_forward_; + return is_driving_forward_; + } + + private: + bool is_driving_forward_{true}; + }; + DrivingDirectionChecker driving_direction_checker_{}; + + // argument variables + autoware::vehicle_info_utils::VehicleInfo vehicle_info_{}; + mutable std::shared_ptr debug_data_ptr_{nullptr}; + mutable std::shared_ptr time_keeper_{nullptr}; + + // flags for some functions + bool enable_pub_debug_marker_; + bool enable_pub_extra_debug_marker_; + bool enable_debug_info_; + bool enable_outside_drivable_area_stop_; + bool enable_skip_optimization_; + bool enable_reset_prev_optimization_; + bool use_footprint_polygon_for_outside_drivable_area_check_; + + // core algorithms + std::shared_ptr replan_checker_ptr_{nullptr}; + std::shared_ptr mpt_optimizer_ptr_{nullptr}; + + // parameters + TrajectoryParam traj_param_{}; + EgoNearestParam ego_nearest_param_{}; + + // interface publisher + rclcpp::Publisher::SharedPtr traj_pub_; + rclcpp::Publisher::SharedPtr virtual_wall_pub_; + + // interface subscriber + rclcpp::Subscription::SharedPtr path_sub_; + autoware::universe_utils::InterProcessPollingSubscriber ego_odom_sub_{ + this, "~/input/odometry"}; + + // debug publisher + rclcpp::Publisher::SharedPtr debug_extended_traj_pub_; + rclcpp::Publisher::SharedPtr debug_markers_pub_; + rclcpp::Publisher::SharedPtr debug_calculation_time_str_pub_; + rclcpp::Publisher::SharedPtr debug_calculation_time_float_pub_; + rclcpp::Publisher::SharedPtr + debug_processing_time_detail_pub_; + + // parameter callback + rcl_interfaces::msg::SetParametersResult onParam( + const std::vector & parameters); + OnSetParametersCallbackHandle::SharedPtr set_param_res_; + + // subscriber callback function + void onPath(const Path::ConstSharedPtr path_ptr); + + // reset functions + void initializePlanning(); + void resetPreviousData(); + + // main functions + bool checkInputPath(const Path & path, rclcpp::Clock clock) const; + PlannerData createPlannerData( + const Path & path, const Odometry::ConstSharedPtr ego_odom_ptr) const; + std::vector generateOptimizedTrajectory(const PlannerData & planner_data); + std::vector extendTrajectory( + const std::vector & traj_points, + const std::vector & optimized_points) const; + void publishDebugData(const Header & header) const; + + // functions in generateOptimizedTrajectory + std::vector optimizeTrajectory(const PlannerData & planner_data); + std::vector getPrevOptimizedTrajectory( + const std::vector & traj_points) const; + void applyInputVelocity( + std::vector & output_traj_points, + const std::vector & input_traj_points, + const geometry_msgs::msg::Pose & ego_pose) const; + void insertZeroVelocityOutsideDrivableArea( + const PlannerData & planner_data, std::vector & traj_points) const; + void publishVirtualWall(const geometry_msgs::msg::Pose & stop_pose) const; + void publishDebugMarkerOfOptimization(const std::vector & traj_points) const; private: - bool is_driving_forward_{true}; + double vehicle_stop_margin_outside_drivable_area_; + + std::unique_ptr logger_configure_; + + std::unique_ptr published_time_publisher_; + + autoware::universe_utils::StopWatch stop_watch_; }; - DrivingDirectionChecker driving_direction_checker_{}; - - // argument variables - autoware::vehicle_info_utils::VehicleInfo vehicle_info_{}; - mutable std::shared_ptr debug_data_ptr_{nullptr}; - mutable std::shared_ptr time_keeper_{nullptr}; - - // flags for some functions - bool enable_pub_debug_marker_; - bool enable_pub_extra_debug_marker_; - bool enable_debug_info_; - bool enable_outside_drivable_area_stop_; - bool enable_skip_optimization_; - bool enable_reset_prev_optimization_; - bool use_footprint_polygon_for_outside_drivable_area_check_; - - // core algorithms - std::shared_ptr replan_checker_ptr_{nullptr}; - std::shared_ptr mpt_optimizer_ptr_{nullptr}; - - // parameters - TrajectoryParam traj_param_{}; - EgoNearestParam ego_nearest_param_{}; - - // interface publisher - rclcpp::Publisher::SharedPtr traj_pub_; - rclcpp::Publisher::SharedPtr virtual_wall_pub_; - - // interface subscriber - rclcpp::Subscription::SharedPtr path_sub_; - autoware::universe_utils::InterProcessPollingSubscriber ego_odom_sub_{ - this, "~/input/odometry"}; - - // debug publisher - rclcpp::Publisher::SharedPtr debug_extended_traj_pub_; - rclcpp::Publisher::SharedPtr debug_markers_pub_; - rclcpp::Publisher::SharedPtr debug_calculation_time_str_pub_; - rclcpp::Publisher::SharedPtr debug_calculation_time_float_pub_; - rclcpp::Publisher::SharedPtr - debug_processing_time_detail_pub_; - - // parameter callback - rcl_interfaces::msg::SetParametersResult onParam( - const std::vector & parameters); - OnSetParametersCallbackHandle::SharedPtr set_param_res_; - - // subscriber callback function - void onPath(const Path::ConstSharedPtr path_ptr); - - // reset functions - void initializePlanning(); - void resetPreviousData(); - - // main functions - bool checkInputPath(const Path & path, rclcpp::Clock clock) const; - PlannerData createPlannerData( - const Path & path, const Odometry::ConstSharedPtr ego_odom_ptr) const; - std::vector generateOptimizedTrajectory(const PlannerData & planner_data); - std::vector extendTrajectory( - const std::vector & traj_points, - const std::vector & optimized_points) const; - void publishDebugData(const Header & header) const; - - // functions in generateOptimizedTrajectory - std::vector optimizeTrajectory(const PlannerData & planner_data); - std::vector getPrevOptimizedTrajectory( - const std::vector & traj_points) const; - void applyInputVelocity( - std::vector & output_traj_points, - const std::vector & input_traj_points, - const geometry_msgs::msg::Pose & ego_pose) const; - void insertZeroVelocityOutsideDrivableArea( - const PlannerData & planner_data, std::vector & traj_points) const; - void publishVirtualWall(const geometry_msgs::msg::Pose & stop_pose) const; - void publishDebugMarkerOfOptimization(const std::vector & traj_points) const; - -private: - double vehicle_stop_margin_outside_drivable_area_; - - std::unique_ptr logger_configure_; - - std::unique_ptr published_time_publisher_; - - autoware::universe_utils::StopWatch stop_watch_; -}; } // namespace autoware::path_optimizer #endif // AUTOWARE__PATH_OPTIMIZER__NODE_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp b/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp index 78cdb80838678..e772bed6ecea4 100644 --- a/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp +++ b/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp @@ -12,17 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp -#ifndef POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ -#define POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ +<<<<<<<< + HEAD : sensing / autoware_pointcloud_preprocessor / include / pointcloud_preprocessor / + distortion_corrector / distortion_corrector_node.hpp +#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ +#define AUTOWARE__POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ #include "pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" -======== + == == == == #ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ #define AUTOWARE__POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ #include "autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp + >>>>>>>> original / + main : sensing / autoware_pointcloud_preprocessor / include / autoware / pointcloud_preprocessor / + distortion_corrector / + distortion_corrector_node.hpp #include #include @@ -36,41 +41,45 @@ #include #include -namespace autoware::pointcloud_preprocessor + namespace autoware::pointcloud_preprocessor { -using rcl_interfaces::msg::SetParametersResult; -using sensor_msgs::msg::PointCloud2; + using rcl_interfaces::msg::SetParametersResult; + using sensor_msgs::msg::PointCloud2; -class DistortionCorrectorComponent : public rclcpp::Node -{ -public: - explicit DistortionCorrectorComponent(const rclcpp::NodeOptions & options); + class DistortionCorrectorComponent : public rclcpp::Node + { + public: + explicit DistortionCorrectorComponent(const rclcpp::NodeOptions & options); -private: - rclcpp::Subscription::SharedPtr twist_sub_; - rclcpp::Subscription::SharedPtr imu_sub_; - rclcpp::Subscription::SharedPtr pointcloud_sub_; + private: + rclcpp::Subscription::SharedPtr twist_sub_; + rclcpp::Subscription::SharedPtr imu_sub_; + rclcpp::Subscription::SharedPtr pointcloud_sub_; - rclcpp::Publisher::SharedPtr undistorted_pointcloud_pub_; + rclcpp::Publisher::SharedPtr undistorted_pointcloud_pub_; - std::unique_ptr> stop_watch_ptr_; - std::unique_ptr debug_publisher_; + std::unique_ptr> stop_watch_ptr_; + std::unique_ptr debug_publisher_; - std::string base_frame_; - bool use_imu_; - bool use_3d_distortion_correction_; + std::string base_frame_; + bool use_imu_; + bool use_3d_distortion_correction_; - std::unique_ptr distortion_corrector_; + std::unique_ptr distortion_corrector_; - void onPointCloud(PointCloud2::UniquePtr points_msg); - void onTwist(const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg); - void onImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg); -}; + void onPointCloud(PointCloud2::UniquePtr points_msg); + void onTwist(const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg); + void onImu(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg); + }; } // namespace autoware::pointcloud_preprocessor -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp +<<<<<<<< + HEAD : sensing / autoware_pointcloud_preprocessor / include / pointcloud_preprocessor / + distortion_corrector / distortion_corrector_node.hpp #endif // POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ -======== + == == == == #endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__DISTORTION_CORRECTOR__DISTORTION_CORRECTOR_NODE_HPP_ ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp + >>>>>>>> original / + main : sensing / autoware_pointcloud_preprocessor / include / autoware / pointcloud_preprocessor / + distortion_corrector / distortion_corrector_node.hpp diff --git a/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp b/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp index f52f2f306c69b..a2451a6d29600 100644 --- a/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp +++ b/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp @@ -15,13 +15,18 @@ #ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__POLYGON_REMOVER__POLYGON_REMOVER_HPP_ #define AUTOWARE__POINTCLOUD_PREPROCESSOR__POLYGON_REMOVER__POLYGON_REMOVER_HPP_ -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp +<<<<<<<< + HEAD : sensing / autoware_pointcloud_preprocessor / include / pointcloud_preprocessor / + polygon_remover / polygon_remover.hpp #include "pointcloud_preprocessor/filter.hpp" #include "pointcloud_preprocessor/utility/geometry.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" #include "autoware/pointcloud_preprocessor/utility/geometry.hpp" ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/polygon_remover/polygon_remover.hpp + >>>>>>>> original / + main : sensing / autoware_pointcloud_preprocessor / include / autoware / pointcloud_preprocessor / + polygon_remover / + polygon_remover.hpp #include #include @@ -32,39 +37,39 @@ #include -namespace autoware::pointcloud_preprocessor + namespace autoware::pointcloud_preprocessor { -class PolygonRemoverComponent : public autoware::pointcloud_preprocessor::Filter -{ -protected: - virtual void filter( - const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); + class PolygonRemoverComponent : public autoware::pointcloud_preprocessor::Filter + { + protected: + virtual void filter( + const PointCloud2ConstPtr & input, const IndicesPtr & indices, PointCloud2 & output); - void publishRemovedPolygon(); + void publishRemovedPolygon(); - void update_polygon(const geometry_msgs::msg::Polygon::ConstSharedPtr & polygon_in); - static PolygonCgal polygon_geometry_to_cgal( - const geometry_msgs::msg::Polygon::ConstSharedPtr & polygon_in); - PointCloud2 remove_updated_polygon_from_cloud(const PointCloud2ConstPtr & cloud_in); - PointCloud2 remove_polygon_cgal_from_cloud( - const PointCloud2::ConstSharedPtr & cloud_in_ptr, const PolygonCgal & polyline_polygon); + void update_polygon(const geometry_msgs::msg::Polygon::ConstSharedPtr & polygon_in); + static PolygonCgal polygon_geometry_to_cgal( + const geometry_msgs::msg::Polygon::ConstSharedPtr & polygon_in); + PointCloud2 remove_updated_polygon_from_cloud(const PointCloud2ConstPtr & cloud_in); + PointCloud2 remove_polygon_cgal_from_cloud( + const PointCloud2::ConstSharedPtr & cloud_in_ptr, const PolygonCgal & polyline_polygon); -private: - rclcpp::Parameter param; - std::vector polygon_vertices_; - geometry_msgs::msg::Polygon::SharedPtr polygon_; + private: + rclcpp::Parameter param; + std::vector polygon_vertices_; + geometry_msgs::msg::Polygon::SharedPtr polygon_; - bool polygon_is_initialized_; - bool will_visualize_; - PolygonCgal polygon_cgal_; - visualization_msgs::msg::Marker marker_; + bool polygon_is_initialized_; + bool will_visualize_; + PolygonCgal polygon_cgal_; + visualization_msgs::msg::Marker marker_; - rclcpp::Publisher::SharedPtr pub_marker_ptr_; + rclcpp::Publisher::SharedPtr pub_marker_ptr_; -public: - PCL_MAKE_ALIGNED_OPERATOR_NEW - explicit PolygonRemoverComponent(const rclcpp::NodeOptions & options); -}; + public: + PCL_MAKE_ALIGNED_OPERATOR_NEW + explicit PolygonRemoverComponent(const rclcpp::NodeOptions & options); + }; } // namespace autoware::pointcloud_preprocessor #endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__POLYGON_REMOVER__POLYGON_REMOVER_HPP_ diff --git a/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/utility/geometry.hpp b/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/utility/geometry.hpp index c019fd04f6c87..7f31d6ae9e019 100644 --- a/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/utility/geometry.hpp +++ b/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/utility/geometry.hpp @@ -12,13 +12,18 @@ // See the License for the specific language governing permissions and // limitations under the License. -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp -#ifndef POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ -#define POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ -======== +<<<<<<<< + HEAD : sensing / autoware_pointcloud_preprocessor / include / pointcloud_preprocessor / utility / + geometry.hpp #ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ #define AUTOWARE__POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/utility/geometry.hpp + == == == == +#ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ +#define AUTOWARE__POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ + >>>>>>>> original / + main : sensing / autoware_pointcloud_preprocessor / include / autoware / pointcloud_preprocessor / + utility / + geometry.hpp #include #include @@ -34,7 +39,7 @@ #include #include -using K = CGAL::Exact_predicates_inexact_constructions_kernel; + using K = CGAL::Exact_predicates_inexact_constructions_kernel; using PointCgal = K::Point_2; using PolygonCgal = std::vector; @@ -86,12 +91,14 @@ void remove_polygon_cgal_from_cloud( bool point_within_cgal_polys( const pcl::PointXYZ & point, const std::vector & polyline_polygons); -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/utility/geometry.hpp +< < < < < < < < HEAD : sensing / autoware_pointcloud_preprocessor / include / + pointcloud_preprocessor / utility / geometry.hpp } // namespace pointcloud_preprocessor::utils #endif // POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ -======== +== == == == } // namespace autoware::pointcloud_preprocessor::utils #endif // AUTOWARE__POINTCLOUD_PREPROCESSOR__UTILITY__GEOMETRY_HPP_ ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/utility/geometry.hpp +>>>>>>>> original / main : sensing / autoware_pointcloud_preprocessor / include / autoware / + pointcloud_preprocessor / utility / geometry.hpp diff --git a/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp b/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp index 834de2c1782db..143185afe48a7 100644 --- a/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp +++ b/sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp @@ -15,13 +15,18 @@ #ifndef AUTOWARE__POINTCLOUD_PREPROCESSOR__VECTOR_MAP_FILTER__VECTOR_MAP_INSIDE_AREA_FILTER_HPP_ #define AUTOWARE__POINTCLOUD_PREPROCESSOR__VECTOR_MAP_FILTER__VECTOR_MAP_INSIDE_AREA_FILTER_HPP_ -<<<<<<<< HEAD:sensing/autoware_pointcloud_preprocessor/include/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp +<<<<<<<< + HEAD : sensing / autoware_pointcloud_preprocessor / include / pointcloud_preprocessor / + vector_map_filter / vector_map_inside_area_filter.hpp #include "pointcloud_preprocessor/filter.hpp" #include "pointcloud_preprocessor/utility/geometry.hpp" -======== + == == == == #include "autoware/pointcloud_preprocessor/filter.hpp" #include "autoware/pointcloud_preprocessor/utility/geometry.hpp" ->>>>>>>> original/main:sensing/autoware_pointcloud_preprocessor/include/autoware/pointcloud_preprocessor/vector_map_filter/vector_map_inside_area_filter.hpp + >>>>>>>> original / + main : sensing / autoware_pointcloud_preprocessor / include / autoware / pointcloud_preprocessor / + vector_map_filter / + vector_map_inside_area_filter.hpp #include #include @@ -31,7 +36,7 @@ #include -using autoware::universe_utils::MultiPoint2d; + using autoware::universe_utils::MultiPoint2d; namespace autoware::pointcloud_preprocessor { diff --git a/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp b/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp index 1626f77c0fcc1..8cce471cecf32 100644 --- a/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp +++ b/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_and_time_sync_nodelet.cpp @@ -52,7 +52,6 @@ #include "autoware/pointcloud_preprocessor/concatenate_data/concatenate_and_time_sync_nodelet.hpp" #include "autoware/pointcloud_preprocessor/utility/memory.hpp" - #include "pointcloud_preprocessor/utility/memory.hpp" #include diff --git a/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp b/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp index b66e440d5e2d4..41f9131402685 100644 --- a/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp +++ b/sensing/autoware_pointcloud_preprocessor/src/concatenate_data/concatenate_pointclouds.cpp @@ -15,7 +15,6 @@ #include "autoware/pointcloud_preprocessor/concatenate_data/concatenate_pointclouds.hpp" #include "autoware/pointcloud_preprocessor/utility/memory.hpp" - #include "pointcloud_preprocessor/utility/memory.hpp" #include diff --git a/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp b/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp index b8350a5f10958..d742e49b11d55 100644 --- a/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp +++ b/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector.cpp @@ -18,460 +18,461 @@ #include "pointcloud_preprocessor/utility/memory.hpp" ======= #include "autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" - #include "autoware/pointcloud_preprocessor/utility/memory.hpp" ->>>>>>> original/main + >>>>>>> original/main #include #include -<<<<<<< HEAD -namespace pointcloud_preprocessor + <<<<<<< HEAD namespace pointcloud_preprocessor ======= namespace autoware::pointcloud_preprocessor >>>>>>> original/main { + template + bool DistortionCorrector::pointcloud_transform_exists() + { + return pointcloud_transform_exists_; + } -template -bool DistortionCorrector::pointcloud_transform_exists() -{ - return pointcloud_transform_exists_; -} - -template -bool DistortionCorrector::pointcloud_transform_needed() -{ - return pointcloud_transform_needed_; -} + template + bool DistortionCorrector::pointcloud_transform_needed() + { + return pointcloud_transform_needed_; + } -template -std::deque DistortionCorrector::get_twist_queue() -{ - return twist_queue_; -} + template + std::deque DistortionCorrector::get_twist_queue() + { + return twist_queue_; + } -template -std::deque DistortionCorrector::get_angular_velocity_queue() -{ - return angular_velocity_queue_; -} + template + std::deque + DistortionCorrector::get_angular_velocity_queue() + { + return angular_velocity_queue_; + } -template -void DistortionCorrector::processTwistMessage( - const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) -{ - geometry_msgs::msg::TwistStamped msg; - msg.header = twist_msg->header; - msg.twist = twist_msg->twist.twist; - twist_queue_.push_back(msg); - - while (!twist_queue_.empty()) { - // for replay rosbag - if (rclcpp::Time(twist_queue_.front().header.stamp) > rclcpp::Time(twist_msg->header.stamp)) { - twist_queue_.pop_front(); - } else if ( // NOLINT - rclcpp::Time(twist_queue_.front().header.stamp) < - rclcpp::Time(twist_msg->header.stamp) - rclcpp::Duration::from_seconds(1.0)) { - twist_queue_.pop_front(); - } else { - break; + template + void DistortionCorrector::processTwistMessage( + const geometry_msgs::msg::TwistWithCovarianceStamped::ConstSharedPtr twist_msg) + { + geometry_msgs::msg::TwistStamped msg; + msg.header = twist_msg->header; + msg.twist = twist_msg->twist.twist; + twist_queue_.push_back(msg); + + while (!twist_queue_.empty()) { + // for replay rosbag + if (rclcpp::Time(twist_queue_.front().header.stamp) > rclcpp::Time(twist_msg->header.stamp)) { + twist_queue_.pop_front(); + } else if ( // NOLINT + rclcpp::Time(twist_queue_.front().header.stamp) < + rclcpp::Time(twist_msg->header.stamp) - rclcpp::Duration::from_seconds(1.0)) { + twist_queue_.pop_front(); + } else { + break; + } } } -} - -template -void DistortionCorrector::processIMUMessage( - const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) -{ - getIMUTransformation(base_frame, imu_msg->header.frame_id); - enqueueIMU(imu_msg); -} -template -void DistortionCorrector::getIMUTransformation( - const std::string & base_frame, const std::string & imu_frame) -{ - if (imu_transform_exists_) { - return; + template + void DistortionCorrector::processIMUMessage( + const std::string & base_frame, const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) + { + getIMUTransformation(base_frame, imu_msg->header.frame_id); + enqueueIMU(imu_msg); } - geometry_imu_to_base_link_ptr_ = std::make_shared(); + template + void DistortionCorrector::getIMUTransformation( + const std::string & base_frame, const std::string & imu_frame) + { + if (imu_transform_exists_) { + return; + } - tf2::Transform tf2_imu_to_base_link; - if (base_frame == imu_frame) { - tf2_imu_to_base_link.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); - tf2_imu_to_base_link.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); - imu_transform_exists_ = true; - } else { - try { - const auto transform_msg = - tf_buffer_.lookupTransform(base_frame, imu_frame, tf2::TimePointZero); - tf2::convert(transform_msg.transform, tf2_imu_to_base_link); - imu_transform_exists_ = true; - } catch (const tf2::TransformException & ex) { - RCLCPP_WARN(node_->get_logger(), "%s", ex.what()); - RCLCPP_ERROR( - node_->get_logger(), "Please publish TF %s to %s", base_frame.c_str(), imu_frame.c_str()); + geometry_imu_to_base_link_ptr_ = std::make_shared(); + tf2::Transform tf2_imu_to_base_link; + if (base_frame == imu_frame) { tf2_imu_to_base_link.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); tf2_imu_to_base_link.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); + imu_transform_exists_ = true; + } else { + try { + const auto transform_msg = + tf_buffer_.lookupTransform(base_frame, imu_frame, tf2::TimePointZero); + tf2::convert(transform_msg.transform, tf2_imu_to_base_link); + imu_transform_exists_ = true; + } catch (const tf2::TransformException & ex) { + RCLCPP_WARN(node_->get_logger(), "%s", ex.what()); + RCLCPP_ERROR( + node_->get_logger(), "Please publish TF %s to %s", base_frame.c_str(), imu_frame.c_str()); + + tf2_imu_to_base_link.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); + tf2_imu_to_base_link.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); + } } - } - geometry_imu_to_base_link_ptr_->transform.rotation = - tf2::toMsg(tf2_imu_to_base_link.getRotation()); -} + geometry_imu_to_base_link_ptr_->transform.rotation = + tf2::toMsg(tf2_imu_to_base_link.getRotation()); + } -template -void DistortionCorrector::enqueueIMU(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) -{ - geometry_msgs::msg::Vector3Stamped angular_velocity; - angular_velocity.vector = imu_msg->angular_velocity; - - geometry_msgs::msg::Vector3Stamped transformed_angular_velocity; - tf2::doTransform(angular_velocity, transformed_angular_velocity, *geometry_imu_to_base_link_ptr_); - transformed_angular_velocity.header = imu_msg->header; - angular_velocity_queue_.push_back(transformed_angular_velocity); - - while (!angular_velocity_queue_.empty()) { - // for replay rosbag - if ( - rclcpp::Time(angular_velocity_queue_.front().header.stamp) > - rclcpp::Time(imu_msg->header.stamp)) { - angular_velocity_queue_.pop_front(); - } else if ( // NOLINT - rclcpp::Time(angular_velocity_queue_.front().header.stamp) < - rclcpp::Time(imu_msg->header.stamp) - rclcpp::Duration::from_seconds(1.0)) { - angular_velocity_queue_.pop_front(); - } else { - break; + template + void DistortionCorrector::enqueueIMU(const sensor_msgs::msg::Imu::ConstSharedPtr imu_msg) + { + geometry_msgs::msg::Vector3Stamped angular_velocity; + angular_velocity.vector = imu_msg->angular_velocity; + + geometry_msgs::msg::Vector3Stamped transformed_angular_velocity; + tf2::doTransform( + angular_velocity, transformed_angular_velocity, *geometry_imu_to_base_link_ptr_); + transformed_angular_velocity.header = imu_msg->header; + angular_velocity_queue_.push_back(transformed_angular_velocity); + + while (!angular_velocity_queue_.empty()) { + // for replay rosbag + if ( + rclcpp::Time(angular_velocity_queue_.front().header.stamp) > + rclcpp::Time(imu_msg->header.stamp)) { + angular_velocity_queue_.pop_front(); + } else if ( // NOLINT + rclcpp::Time(angular_velocity_queue_.front().header.stamp) < + rclcpp::Time(imu_msg->header.stamp) - rclcpp::Duration::from_seconds(1.0)) { + angular_velocity_queue_.pop_front(); + } else { + break; + } } } -} -template -void DistortionCorrector::getTwistAndIMUIterator( - bool use_imu, double first_point_time_stamp_sec, - std::deque::iterator & it_twist, - std::deque::iterator & it_imu) -{ - it_twist = std::lower_bound( - std::begin(twist_queue_), std::end(twist_queue_), first_point_time_stamp_sec, - [](const geometry_msgs::msg::TwistStamped & x, const double t) { - return rclcpp::Time(x.header.stamp).seconds() < t; - }); - it_twist = it_twist == std::end(twist_queue_) ? std::end(twist_queue_) - 1 : it_twist; - - if (use_imu && !angular_velocity_queue_.empty()) { - it_imu = std::lower_bound( - std::begin(angular_velocity_queue_), std::end(angular_velocity_queue_), - first_point_time_stamp_sec, [](const geometry_msgs::msg::Vector3Stamped & x, const double t) { + template + void DistortionCorrector::getTwistAndIMUIterator( + bool use_imu, double first_point_time_stamp_sec, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu) + { + it_twist = std::lower_bound( + std::begin(twist_queue_), std::end(twist_queue_), first_point_time_stamp_sec, + [](const geometry_msgs::msg::TwistStamped & x, const double t) { return rclcpp::Time(x.header.stamp).seconds() < t; }); - it_imu = - it_imu == std::end(angular_velocity_queue_) ? std::end(angular_velocity_queue_) - 1 : it_imu; - } -} + it_twist = it_twist == std::end(twist_queue_) ? std::end(twist_queue_) - 1 : it_twist; -template -bool DistortionCorrector::isInputValid(sensor_msgs::msg::PointCloud2 & pointcloud) -{ - if (pointcloud.data.empty() || twist_queue_.empty()) { - RCLCPP_WARN_STREAM_THROTTLE( - node_->get_logger(), *node_->get_clock(), 10000 /* ms */, - "input pointcloud or twist_queue_ is empty."); - return false; + if (use_imu && !angular_velocity_queue_.empty()) { + it_imu = std::lower_bound( + std::begin(angular_velocity_queue_), std::end(angular_velocity_queue_), + first_point_time_stamp_sec, + [](const geometry_msgs::msg::Vector3Stamped & x, const double t) { + return rclcpp::Time(x.header.stamp).seconds() < t; + }); + it_imu = it_imu == std::end(angular_velocity_queue_) ? std::end(angular_velocity_queue_) - 1 + : it_imu; + } } - auto time_stamp_field_it = std::find_if( - std::cbegin(pointcloud.fields), std::cend(pointcloud.fields), - [](const sensor_msgs::msg::PointField & field) { return field.name == "time_stamp"; }); - if (time_stamp_field_it == pointcloud.fields.cend()) { - RCLCPP_WARN_STREAM_THROTTLE( - node_->get_logger(), *node_->get_clock(), 10000 /* ms */, - "Required field time stamp doesn't exist in the point cloud."); - return false; - } + template + bool DistortionCorrector::isInputValid(sensor_msgs::msg::PointCloud2 & pointcloud) + { + if (pointcloud.data.empty() || twist_queue_.empty()) { + RCLCPP_WARN_STREAM_THROTTLE( + node_->get_logger(), *node_->get_clock(), 10000 /* ms */, + "input pointcloud or twist_queue_ is empty."); + return false; + } - if (!utils::is_data_layout_compatible_with_point_xyzircaedt(pointcloud)) { - RCLCPP_ERROR( - node_->get_logger(), - "The pointcloud layout is not compatible with PointXYZIRCAEDT. Aborting"); + auto time_stamp_field_it = std::find_if( + std::cbegin(pointcloud.fields), std::cend(pointcloud.fields), + [](const sensor_msgs::msg::PointField & field) { return field.name == "time_stamp"; }); + if (time_stamp_field_it == pointcloud.fields.cend()) { + RCLCPP_WARN_STREAM_THROTTLE( + node_->get_logger(), *node_->get_clock(), 10000 /* ms */, + "Required field time stamp doesn't exist in the point cloud."); + return false; + } - if (utils::is_data_layout_compatible_with_point_xyziradrt(pointcloud)) { + if (!utils::is_data_layout_compatible_with_point_xyzircaedt(pointcloud)) { RCLCPP_ERROR( node_->get_logger(), - "The pointcloud layout is compatible with PointXYZIRADRT. You may be using legacy " - "code/data"); - } + "The pointcloud layout is not compatible with PointXYZIRCAEDT. Aborting"); - return false; - } + if (utils::is_data_layout_compatible_with_point_xyziradrt(pointcloud)) { + RCLCPP_ERROR( + node_->get_logger(), + "The pointcloud layout is compatible with PointXYZIRADRT. You may be using legacy " + "code/data"); + } - return true; -} + return false; + } -template -void DistortionCorrector::undistortPointCloud( - bool use_imu, sensor_msgs::msg::PointCloud2 & pointcloud) -{ - if (!isInputValid(pointcloud)) return; - - sensor_msgs::PointCloud2Iterator it_x(pointcloud, "x"); - sensor_msgs::PointCloud2Iterator it_y(pointcloud, "y"); - sensor_msgs::PointCloud2Iterator it_z(pointcloud, "z"); - sensor_msgs::PointCloud2ConstIterator it_time_stamp(pointcloud, "time_stamp"); - - double prev_time_stamp_sec{ - pointcloud.header.stamp.sec + 1e-9 * (pointcloud.header.stamp.nanosec + *it_time_stamp)}; - const double first_point_time_stamp_sec{ - pointcloud.header.stamp.sec + 1e-9 * (pointcloud.header.stamp.nanosec + *it_time_stamp)}; - - std::deque::iterator it_twist; - std::deque::iterator it_imu; - getTwistAndIMUIterator(use_imu, first_point_time_stamp_sec, it_twist, it_imu); - - // For performance, do not instantiate `rclcpp::Time` inside of the for-loop - double twist_stamp = rclcpp::Time(it_twist->header.stamp).seconds(); - double imu_stamp{0.0}; - if (use_imu && !angular_velocity_queue_.empty()) { - imu_stamp = rclcpp::Time(it_imu->header.stamp).seconds(); + return true; } - // If there is a point in a pointcloud that cannot be associated, record it to issue a warning - bool is_twist_time_stamp_too_late = false; - bool is_imu_time_stamp_too_late = false; - bool is_twist_valid = true; - bool is_imu_valid = true; - double global_point_stamp; + template + void DistortionCorrector::undistortPointCloud( + bool use_imu, sensor_msgs::msg::PointCloud2 & pointcloud) + { + if (!isInputValid(pointcloud)) return; + + sensor_msgs::PointCloud2Iterator it_x(pointcloud, "x"); + sensor_msgs::PointCloud2Iterator it_y(pointcloud, "y"); + sensor_msgs::PointCloud2Iterator it_z(pointcloud, "z"); + sensor_msgs::PointCloud2ConstIterator it_time_stamp(pointcloud, "time_stamp"); + + double prev_time_stamp_sec{ + pointcloud.header.stamp.sec + 1e-9 * (pointcloud.header.stamp.nanosec + *it_time_stamp)}; + const double first_point_time_stamp_sec{ + pointcloud.header.stamp.sec + 1e-9 * (pointcloud.header.stamp.nanosec + *it_time_stamp)}; + + std::deque::iterator it_twist; + std::deque::iterator it_imu; + getTwistAndIMUIterator(use_imu, first_point_time_stamp_sec, it_twist, it_imu); + + // For performance, do not instantiate `rclcpp::Time` inside of the for-loop + double twist_stamp = rclcpp::Time(it_twist->header.stamp).seconds(); + double imu_stamp{0.0}; + if (use_imu && !angular_velocity_queue_.empty()) { + imu_stamp = rclcpp::Time(it_imu->header.stamp).seconds(); + } - for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_time_stamp) { - is_twist_valid = true; - is_imu_valid = true; + // If there is a point in a pointcloud that cannot be associated, record it to issue a warning + bool is_twist_time_stamp_too_late = false; + bool is_imu_time_stamp_too_late = false; + bool is_twist_valid = true; + bool is_imu_valid = true; + double global_point_stamp; - global_point_stamp = - pointcloud.header.stamp.sec + 1e-9 * (pointcloud.header.stamp.nanosec + *it_time_stamp); + for (; it_x != it_x.end(); ++it_x, ++it_y, ++it_z, ++it_time_stamp) { + is_twist_valid = true; + is_imu_valid = true; - // Get closest twist information - while (it_twist != std::end(twist_queue_) - 1 && global_point_stamp > twist_stamp) { - ++it_twist; - twist_stamp = rclcpp::Time(it_twist->header.stamp).seconds(); - } - if (std::abs(global_point_stamp - twist_stamp) > 0.1) { - is_twist_time_stamp_too_late = true; - is_twist_valid = false; - } + global_point_stamp = + pointcloud.header.stamp.sec + 1e-9 * (pointcloud.header.stamp.nanosec + *it_time_stamp); - // Get closest IMU information - if (use_imu && !angular_velocity_queue_.empty()) { - while (it_imu != std::end(angular_velocity_queue_) - 1 && global_point_stamp > imu_stamp) { - ++it_imu; - imu_stamp = rclcpp::Time(it_imu->header.stamp).seconds(); + // Get closest twist information + while (it_twist != std::end(twist_queue_) - 1 && global_point_stamp > twist_stamp) { + ++it_twist; + twist_stamp = rclcpp::Time(it_twist->header.stamp).seconds(); + } + if (std::abs(global_point_stamp - twist_stamp) > 0.1) { + is_twist_time_stamp_too_late = true; + is_twist_valid = false; } - if (std::abs(global_point_stamp - imu_stamp) > 0.1) { - is_imu_time_stamp_too_late = true; + // Get closest IMU information + if (use_imu && !angular_velocity_queue_.empty()) { + while (it_imu != std::end(angular_velocity_queue_) - 1 && global_point_stamp > imu_stamp) { + ++it_imu; + imu_stamp = rclcpp::Time(it_imu->header.stamp).seconds(); + } + + if (std::abs(global_point_stamp - imu_stamp) > 0.1) { + is_imu_time_stamp_too_late = true; + is_imu_valid = false; + } + } else { is_imu_valid = false; } - } else { - is_imu_valid = false; + + float time_offset = static_cast(global_point_stamp - prev_time_stamp_sec); + + // Undistort a single point based on the strategy + undistortPoint(it_x, it_y, it_z, it_twist, it_imu, time_offset, is_twist_valid, is_imu_valid); + + prev_time_stamp_sec = global_point_stamp; } - float time_offset = static_cast(global_point_stamp - prev_time_stamp_sec); + warnIfTimestampIsTooLate(is_twist_time_stamp_too_late, is_imu_time_stamp_too_late); + } - // Undistort a single point based on the strategy - undistortPoint(it_x, it_y, it_z, it_twist, it_imu, time_offset, is_twist_valid, is_imu_valid); + template + void DistortionCorrector::warnIfTimestampIsTooLate( + bool is_twist_time_stamp_too_late, bool is_imu_time_stamp_too_late) + { + if (is_twist_time_stamp_too_late) { + RCLCPP_WARN_STREAM_THROTTLE( + node_->get_logger(), *node_->get_clock(), 10000 /* ms */, + "Twist time_stamp is too late. Could not interpolate."); + } - prev_time_stamp_sec = global_point_stamp; + if (is_imu_time_stamp_too_late) { + RCLCPP_WARN_STREAM_THROTTLE( + node_->get_logger(), *node_->get_clock(), 10000 /* ms */, + "IMU time_stamp is too late. Could not interpolate."); + } } - warnIfTimestampIsTooLate(is_twist_time_stamp_too_late, is_imu_time_stamp_too_late); -} + ///////////////////////// Functions for different undistortion strategies + //////////////////////////// -template -void DistortionCorrector::warnIfTimestampIsTooLate( - bool is_twist_time_stamp_too_late, bool is_imu_time_stamp_too_late) -{ - if (is_twist_time_stamp_too_late) { - RCLCPP_WARN_STREAM_THROTTLE( - node_->get_logger(), *node_->get_clock(), 10000 /* ms */, - "Twist time_stamp is too late. Could not interpolate."); + void DistortionCorrector2D::initialize() + { + x_ = 0.0f; + y_ = 0.0f; + theta_ = 0.0f; } - if (is_imu_time_stamp_too_late) { - RCLCPP_WARN_STREAM_THROTTLE( - node_->get_logger(), *node_->get_clock(), 10000 /* ms */, - "IMU time_stamp is too late. Could not interpolate."); + void DistortionCorrector3D::initialize() + { + prev_transformation_matrix_ = Eigen::Matrix4f::Identity(); } -} -///////////////////////// Functions for different undistortion strategies ///////////////////////// + void DistortionCorrector2D::setPointCloudTransform( + const std::string & base_frame, const std::string & lidar_frame) + { + if (pointcloud_transform_exists_) { + return; + } -void DistortionCorrector2D::initialize() -{ - x_ = 0.0f; - y_ = 0.0f; - theta_ = 0.0f; -} + if (base_frame == lidar_frame) { + tf2_lidar_to_base_link_.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); + tf2_lidar_to_base_link_.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); + tf2_base_link_to_lidar_ = tf2_lidar_to_base_link_; + pointcloud_transform_exists_ = true; + } else { + try { + const auto transform_msg = + tf_buffer_.lookupTransform(base_frame, lidar_frame, tf2::TimePointZero); + tf2::convert(transform_msg.transform, tf2_lidar_to_base_link_); + tf2_base_link_to_lidar_ = tf2_lidar_to_base_link_.inverse(); + pointcloud_transform_exists_ = true; + pointcloud_transform_needed_ = true; + } catch (const tf2::TransformException & ex) { + RCLCPP_WARN(node_->get_logger(), "%s", ex.what()); + RCLCPP_ERROR( + node_->get_logger(), "Please publish TF %s to %s", base_frame.c_str(), + lidar_frame.c_str()); + + tf2_lidar_to_base_link_.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); + tf2_lidar_to_base_link_.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); + tf2_base_link_to_lidar_ = tf2_lidar_to_base_link_; + } + } + } -void DistortionCorrector3D::initialize() -{ - prev_transformation_matrix_ = Eigen::Matrix4f::Identity(); -} + void DistortionCorrector3D::setPointCloudTransform( + const std::string & base_frame, const std::string & lidar_frame) + { + if (pointcloud_transform_exists_) { + return; + } -void DistortionCorrector2D::setPointCloudTransform( - const std::string & base_frame, const std::string & lidar_frame) -{ - if (pointcloud_transform_exists_) { - return; - } + if (base_frame == lidar_frame) { + eigen_lidar_to_base_link_ = Eigen::Matrix4f::Identity(); + eigen_base_link_to_lidar_ = Eigen::Matrix4f::Identity(); + pointcloud_transform_exists_ = true; + } - if (base_frame == lidar_frame) { - tf2_lidar_to_base_link_.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); - tf2_lidar_to_base_link_.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); - tf2_base_link_to_lidar_ = tf2_lidar_to_base_link_; - pointcloud_transform_exists_ = true; - } else { try { const auto transform_msg = tf_buffer_.lookupTransform(base_frame, lidar_frame, tf2::TimePointZero); - tf2::convert(transform_msg.transform, tf2_lidar_to_base_link_); - tf2_base_link_to_lidar_ = tf2_lidar_to_base_link_.inverse(); + eigen_lidar_to_base_link_ = + tf2::transformToEigen(transform_msg.transform).matrix().cast(); + eigen_base_link_to_lidar_ = eigen_lidar_to_base_link_.inverse(); pointcloud_transform_exists_ = true; pointcloud_transform_needed_ = true; } catch (const tf2::TransformException & ex) { RCLCPP_WARN(node_->get_logger(), "%s", ex.what()); RCLCPP_ERROR( node_->get_logger(), "Please publish TF %s to %s", base_frame.c_str(), lidar_frame.c_str()); - - tf2_lidar_to_base_link_.setOrigin(tf2::Vector3(0.0, 0.0, 0.0)); - tf2_lidar_to_base_link_.setRotation(tf2::Quaternion(0.0, 0.0, 0.0, 1.0)); - tf2_base_link_to_lidar_ = tf2_lidar_to_base_link_; + eigen_lidar_to_base_link_ = Eigen::Matrix4f::Identity(); + eigen_base_link_to_lidar_ = Eigen::Matrix4f::Identity(); } } -} -void DistortionCorrector3D::setPointCloudTransform( - const std::string & base_frame, const std::string & lidar_frame) -{ - if (pointcloud_transform_exists_) { - return; - } - - if (base_frame == lidar_frame) { - eigen_lidar_to_base_link_ = Eigen::Matrix4f::Identity(); - eigen_base_link_to_lidar_ = Eigen::Matrix4f::Identity(); - pointcloud_transform_exists_ = true; - } + inline void DistortionCorrector2D::undistortPointImplementation( + sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, + sensor_msgs::PointCloud2Iterator & it_z, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu, const float & time_offset, + const bool & is_twist_valid, const bool & is_imu_valid) + { + // Initialize linear velocity and angular velocity + float v{0.0f}, w{0.0f}; + if (is_twist_valid) { + v = static_cast(it_twist->twist.linear.x); + w = static_cast(it_twist->twist.angular.z); + } + if (is_imu_valid) { + w = static_cast(it_imu->vector.z); + } - try { - const auto transform_msg = - tf_buffer_.lookupTransform(base_frame, lidar_frame, tf2::TimePointZero); - eigen_lidar_to_base_link_ = - tf2::transformToEigen(transform_msg.transform).matrix().cast(); - eigen_base_link_to_lidar_ = eigen_lidar_to_base_link_.inverse(); - pointcloud_transform_exists_ = true; - pointcloud_transform_needed_ = true; - } catch (const tf2::TransformException & ex) { - RCLCPP_WARN(node_->get_logger(), "%s", ex.what()); - RCLCPP_ERROR( - node_->get_logger(), "Please publish TF %s to %s", base_frame.c_str(), lidar_frame.c_str()); - eigen_lidar_to_base_link_ = Eigen::Matrix4f::Identity(); - eigen_base_link_to_lidar_ = Eigen::Matrix4f::Identity(); - } -} - -inline void DistortionCorrector2D::undistortPointImplementation( - sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, - sensor_msgs::PointCloud2Iterator & it_z, - std::deque::iterator & it_twist, - std::deque::iterator & it_imu, const float & time_offset, - const bool & is_twist_valid, const bool & is_imu_valid) -{ - // Initialize linear velocity and angular velocity - float v{0.0f}, w{0.0f}; - if (is_twist_valid) { - v = static_cast(it_twist->twist.linear.x); - w = static_cast(it_twist->twist.angular.z); - } - if (is_imu_valid) { - w = static_cast(it_imu->vector.z); - } + // Undistort point + point_tf_.setValue(*it_x, *it_y, *it_z); - // Undistort point - point_tf_.setValue(*it_x, *it_y, *it_z); + if (pointcloud_transform_needed_) { + point_tf_ = tf2_lidar_to_base_link_ * point_tf_; + } + theta_ += w * time_offset; + baselink_quat_.setValue( + 0, 0, autoware::universe_utils::sin(theta_ * 0.5f), + autoware::universe_utils::cos(theta_ * 0.5f)); // baselink_quat.setRPY(0.0, 0.0, theta); + // (Note that the value is slightly different) + const float dis = v * time_offset; + x_ += dis * autoware::universe_utils::cos(theta_); + y_ += dis * autoware::universe_utils::sin(theta_); + + baselink_tf_odom_.setOrigin(tf2::Vector3(x_, y_, 0.0)); + baselink_tf_odom_.setRotation(baselink_quat_); + + undistorted_point_tf_ = baselink_tf_odom_ * point_tf_; + + if (pointcloud_transform_needed_) { + undistorted_point_tf_ = tf2_base_link_to_lidar_ * undistorted_point_tf_; + } - if (pointcloud_transform_needed_) { - point_tf_ = tf2_lidar_to_base_link_ * point_tf_; - } - theta_ += w * time_offset; - baselink_quat_.setValue( - 0, 0, autoware::universe_utils::sin(theta_ * 0.5f), - autoware::universe_utils::cos( - theta_ * - 0.5f)); // baselink_quat.setRPY(0.0, 0.0, theta); (Note that the value is slightly different) - const float dis = v * time_offset; - x_ += dis * autoware::universe_utils::cos(theta_); - y_ += dis * autoware::universe_utils::sin(theta_); - - baselink_tf_odom_.setOrigin(tf2::Vector3(x_, y_, 0.0)); - baselink_tf_odom_.setRotation(baselink_quat_); - - undistorted_point_tf_ = baselink_tf_odom_ * point_tf_; - - if (pointcloud_transform_needed_) { - undistorted_point_tf_ = tf2_base_link_to_lidar_ * undistorted_point_tf_; + *it_x = static_cast(undistorted_point_tf_.getX()); + *it_y = static_cast(undistorted_point_tf_.getY()); + *it_z = static_cast(undistorted_point_tf_.getZ()); } - *it_x = static_cast(undistorted_point_tf_.getX()); - *it_y = static_cast(undistorted_point_tf_.getY()); - *it_z = static_cast(undistorted_point_tf_.getZ()); -} - -inline void DistortionCorrector3D::undistortPointImplementation( - sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, - sensor_msgs::PointCloud2Iterator & it_z, - std::deque::iterator & it_twist, - std::deque::iterator & it_imu, const float & time_offset, - const bool & is_twist_valid, const bool & is_imu_valid) -{ - // Initialize linear velocity and angular velocity - float v_x_{0.0f}, v_y_{0.0f}, v_z_{0.0f}, w_x_{0.0f}, w_y_{0.0f}, w_z_{0.0f}; - if (is_twist_valid) { - v_x_ = static_cast(it_twist->twist.linear.x); - v_y_ = static_cast(it_twist->twist.linear.y); - v_z_ = static_cast(it_twist->twist.linear.z); - w_x_ = static_cast(it_twist->twist.angular.x); - w_y_ = static_cast(it_twist->twist.angular.y); - w_z_ = static_cast(it_twist->twist.angular.z); - } - if (is_imu_valid) { - w_x_ = static_cast(it_imu->vector.x); - w_y_ = static_cast(it_imu->vector.y); - w_z_ = static_cast(it_imu->vector.z); - } + inline void DistortionCorrector3D::undistortPointImplementation( + sensor_msgs::PointCloud2Iterator & it_x, sensor_msgs::PointCloud2Iterator & it_y, + sensor_msgs::PointCloud2Iterator & it_z, + std::deque::iterator & it_twist, + std::deque::iterator & it_imu, const float & time_offset, + const bool & is_twist_valid, const bool & is_imu_valid) + { + // Initialize linear velocity and angular velocity + float v_x_{0.0f}, v_y_{0.0f}, v_z_{0.0f}, w_x_{0.0f}, w_y_{0.0f}, w_z_{0.0f}; + if (is_twist_valid) { + v_x_ = static_cast(it_twist->twist.linear.x); + v_y_ = static_cast(it_twist->twist.linear.y); + v_z_ = static_cast(it_twist->twist.linear.z); + w_x_ = static_cast(it_twist->twist.angular.x); + w_y_ = static_cast(it_twist->twist.angular.y); + w_z_ = static_cast(it_twist->twist.angular.z); + } + if (is_imu_valid) { + w_x_ = static_cast(it_imu->vector.x); + w_y_ = static_cast(it_imu->vector.y); + w_z_ = static_cast(it_imu->vector.z); + } - // Undistort point - point_eigen_ << *it_x, *it_y, *it_z, 1.0; - if (pointcloud_transform_needed_) { - point_eigen_ = eigen_lidar_to_base_link_ * point_eigen_; - } + // Undistort point + point_eigen_ << *it_x, *it_y, *it_z, 1.0; + if (pointcloud_transform_needed_) { + point_eigen_ = eigen_lidar_to_base_link_ * point_eigen_; + } - Sophus::SE3f::Tangent twist(v_x_, v_y_, v_z_, w_x_, w_y_, w_z_); - twist = twist * time_offset; - transformation_matrix_ = Sophus::SE3f::exp(twist).matrix(); - transformation_matrix_ = transformation_matrix_ * prev_transformation_matrix_; - undistorted_point_eigen_ = transformation_matrix_ * point_eigen_; + Sophus::SE3f::Tangent twist(v_x_, v_y_, v_z_, w_x_, w_y_, w_z_); + twist = twist * time_offset; + transformation_matrix_ = Sophus::SE3f::exp(twist).matrix(); + transformation_matrix_ = transformation_matrix_ * prev_transformation_matrix_; + undistorted_point_eigen_ = transformation_matrix_ * point_eigen_; - if (pointcloud_transform_needed_) { - undistorted_point_eigen_ = eigen_base_link_to_lidar_ * undistorted_point_eigen_; - } - *it_x = undistorted_point_eigen_[0]; - *it_y = undistorted_point_eigen_[1]; - *it_z = undistorted_point_eigen_[2]; + if (pointcloud_transform_needed_) { + undistorted_point_eigen_ = eigen_base_link_to_lidar_ * undistorted_point_eigen_; + } + *it_x = undistorted_point_eigen_[0]; + *it_y = undistorted_point_eigen_[1]; + *it_z = undistorted_point_eigen_[2]; - prev_transformation_matrix_ = transformation_matrix_; -} + prev_transformation_matrix_ = transformation_matrix_; + } <<<<<<< HEAD } // namespace pointcloud_preprocessor diff --git a/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp b/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp index b90095aec9724..553ce4a9a27da 100644 --- a/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp +++ b/sensing/autoware_pointcloud_preprocessor/src/distortion_corrector/distortion_corrector_node.cpp @@ -19,9 +19,8 @@ namespace pointcloud_preprocessor ======= -#include "autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp" - #include "autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" +#include "autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector_node.hpp" namespace autoware::pointcloud_preprocessor >>>>>>> original/main diff --git a/sensing/autoware_pointcloud_preprocessor/src/filter.cpp b/sensing/autoware_pointcloud_preprocessor/src/filter.cpp index 505564b3604a7..f8dfe160ba7ef 100644 --- a/sensing/autoware_pointcloud_preprocessor/src/filter.cpp +++ b/sensing/autoware_pointcloud_preprocessor/src/filter.cpp @@ -52,7 +52,6 @@ #include "autoware/pointcloud_preprocessor/filter.hpp" #include "autoware/pointcloud_preprocessor/utility/memory.hpp" - #include "pointcloud_preprocessor/utility/memory.hpp" #include diff --git a/sensing/autoware_pointcloud_preprocessor/test/test_distortion_corrector_node.cpp b/sensing/autoware_pointcloud_preprocessor/test/test_distortion_corrector_node.cpp index 47acdd60f3b19..1e83aceba7dfe 100644 --- a/sensing/autoware_pointcloud_preprocessor/test/test_distortion_corrector_node.cpp +++ b/sensing/autoware_pointcloud_preprocessor/test/test_distortion_corrector_node.cpp @@ -31,7 +31,7 @@ ======= #include "autoware/pointcloud_preprocessor/distortion_corrector/distortion_corrector.hpp" #include "autoware/universe_utils/math/trigonometry.hpp" ->>>>>>> original/main + >>>>>>> original/main #include @@ -46,7 +46,7 @@ #include -class DistortionCorrectorTest : public ::testing::Test + class DistortionCorrectorTest : public ::testing::Test { protected: void SetUp() override diff --git a/sensing/autoware_pointcloud_preprocessor/test/test_utilities.cpp b/sensing/autoware_pointcloud_preprocessor/test/test_utilities.cpp index 797da49cf0476..4ddc97351fe1f 100644 --- a/sensing/autoware_pointcloud_preprocessor/test/test_utilities.cpp +++ b/sensing/autoware_pointcloud_preprocessor/test/test_utilities.cpp @@ -16,7 +16,7 @@ #include "pointcloud_preprocessor/utility/geometry.hpp" ======= #include "autoware/pointcloud_preprocessor/utility/geometry.hpp" ->>>>>>> original/main + >>>>>>> original/main #include @@ -29,7 +29,7 @@ #include -constexpr double EPSILON = 1e-6; + constexpr double EPSILON = 1e-6; class RemovePolygonCgalFromCloudTest : public ::testing::Test {