$search
00001 /* Auto-generated by genmsg_cpp for file /home/rosbuild/hudson/workspace/doc-electric-srs_public/doc_stacks/2013-03-05_12-22-34.333426/srs_public/srs_env_model_percp/srv/Estimate2DHullMesh.srv */ 00002 #ifndef SRS_ENV_MODEL_PERCP_SERVICE_ESTIMATE2DHULLMESH_H 00003 #define SRS_ENV_MODEL_PERCP_SERVICE_ESTIMATE2DHULLMESH_H 00004 #include <string> 00005 #include <vector> 00006 #include <map> 00007 #include <ostream> 00008 #include "ros/serialization.h" 00009 #include "ros/builtin_message_traits.h" 00010 #include "ros/message_operations.h" 00011 #include "ros/time.h" 00012 00013 #include "ros/macros.h" 00014 00015 #include "ros/assert.h" 00016 00017 #include "ros/service_traits.h" 00018 00019 #include "std_msgs/Header.h" 00020 #include "arm_navigation_msgs/Shape.h" 00021 00022 00023 #include "geometry_msgs/Polygon.h" 00024 00025 namespace srs_env_model_percp 00026 { 00027 template <class ContainerAllocator> 00028 struct Estimate2DHullMeshRequest_ { 00029 typedef Estimate2DHullMeshRequest_<ContainerAllocator> Type; 00030 00031 Estimate2DHullMeshRequest_() 00032 : header() 00033 , mesh() 00034 { 00035 } 00036 00037 Estimate2DHullMeshRequest_(const ContainerAllocator& _alloc) 00038 : header(_alloc) 00039 , mesh(_alloc) 00040 { 00041 } 00042 00043 typedef ::std_msgs::Header_<ContainerAllocator> _header_type; 00044 ::std_msgs::Header_<ContainerAllocator> header; 00045 00046 typedef ::arm_navigation_msgs::Shape_<ContainerAllocator> _mesh_type; 00047 ::arm_navigation_msgs::Shape_<ContainerAllocator> mesh; 00048 00049 00050 private: 00051 static const char* __s_getDataType_() { return "srs_env_model_percp/Estimate2DHullMeshRequest"; } 00052 public: 00053 ROS_DEPRECATED static const std::string __s_getDataType() { return __s_getDataType_(); } 00054 00055 ROS_DEPRECATED const std::string __getDataType() const { return __s_getDataType_(); } 00056 00057 private: 00058 static const char* __s_getMD5Sum_() { return "9c05409a5132ae03b3447a07d79be879"; } 00059 public: 00060 ROS_DEPRECATED static const std::string __s_getMD5Sum() { return __s_getMD5Sum_(); } 00061 00062 ROS_DEPRECATED const std::string __getMD5Sum() const { return __s_getMD5Sum_(); } 00063 00064 private: 00065 static const char* __s_getServerMD5Sum_() { return "6a2889ab927091c2a5c3e57dd5a07dda"; } 00066 public: 00067 ROS_DEPRECATED static const std::string __s_getServerMD5Sum() { return __s_getServerMD5Sum_(); } 00068 00069 ROS_DEPRECATED const std::string __getServerMD5Sum() const { return __s_getServerMD5Sum_(); } 00070 00071 private: 00072 static const char* __s_getMessageDefinition_() { return "\n\ 00073 \n\ 00074 \n\ 00075 Header header\n\ 00076 \n\ 00077 \n\ 00078 arm_navigation_msgs/Shape mesh\n\ 00079 \n\ 00080 ================================================================================\n\ 00081 MSG: std_msgs/Header\n\ 00082 # Standard metadata for higher-level stamped data types.\n\ 00083 # This is generally used to communicate timestamped data \n\ 00084 # in a particular coordinate frame.\n\ 00085 # \n\ 00086 # sequence ID: consecutively increasing ID \n\ 00087 uint32 seq\n\ 00088 #Two-integer timestamp that is expressed as:\n\ 00089 # * stamp.secs: seconds (stamp_secs) since epoch\n\ 00090 # * stamp.nsecs: nanoseconds since stamp_secs\n\ 00091 # time-handling sugar is provided by the client library\n\ 00092 time stamp\n\ 00093 #Frame this data is associated with\n\ 00094 # 0: no frame\n\ 00095 # 1: global frame\n\ 00096 string frame_id\n\ 00097 \n\ 00098 ================================================================================\n\ 00099 MSG: arm_navigation_msgs/Shape\n\ 00100 byte SPHERE=0\n\ 00101 byte BOX=1\n\ 00102 byte CYLINDER=2\n\ 00103 byte MESH=3\n\ 00104 \n\ 00105 byte type\n\ 00106 \n\ 00107 \n\ 00108 #### define sphere, box, cylinder ####\n\ 00109 # the origin of each shape is considered at the shape's center\n\ 00110 \n\ 00111 # for sphere\n\ 00112 # radius := dimensions[0]\n\ 00113 \n\ 00114 # for cylinder\n\ 00115 # radius := dimensions[0]\n\ 00116 # length := dimensions[1]\n\ 00117 # the length is along the Z axis\n\ 00118 \n\ 00119 # for box\n\ 00120 # size_x := dimensions[0]\n\ 00121 # size_y := dimensions[1]\n\ 00122 # size_z := dimensions[2]\n\ 00123 float64[] dimensions\n\ 00124 \n\ 00125 \n\ 00126 #### define mesh ####\n\ 00127 \n\ 00128 # list of triangles; triangle k is defined by tre vertices located\n\ 00129 # at indices triangles[3k], triangles[3k+1], triangles[3k+2]\n\ 00130 int32[] triangles\n\ 00131 geometry_msgs/Point[] vertices\n\ 00132 \n\ 00133 ================================================================================\n\ 00134 MSG: geometry_msgs/Point\n\ 00135 # This contains the position of a point in free space\n\ 00136 float64 x\n\ 00137 float64 y\n\ 00138 float64 z\n\ 00139 \n\ 00140 "; } 00141 public: 00142 ROS_DEPRECATED static const std::string __s_getMessageDefinition() { return __s_getMessageDefinition_(); } 00143 00144 ROS_DEPRECATED const std::string __getMessageDefinition() const { return __s_getMessageDefinition_(); } 00145 00146 ROS_DEPRECATED virtual uint8_t *serialize(uint8_t *write_ptr, uint32_t seq) const 00147 { 00148 ros::serialization::OStream stream(write_ptr, 1000000000); 00149 ros::serialization::serialize(stream, header); 00150 ros::serialization::serialize(stream, mesh); 00151 return stream.getData(); 00152 } 00153 00154 ROS_DEPRECATED virtual uint8_t *deserialize(uint8_t *read_ptr) 00155 { 00156 ros::serialization::IStream stream(read_ptr, 1000000000); 00157 ros::serialization::deserialize(stream, header); 00158 ros::serialization::deserialize(stream, mesh); 00159 return stream.getData(); 00160 } 00161 00162 ROS_DEPRECATED virtual uint32_t serializationLength() const 00163 { 00164 uint32_t size = 0; 00165 size += ros::serialization::serializationLength(header); 00166 size += ros::serialization::serializationLength(mesh); 00167 return size; 00168 } 00169 00170 typedef boost::shared_ptr< ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > Ptr; 00171 typedef boost::shared_ptr< ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> const> ConstPtr; 00172 boost::shared_ptr<std::map<std::string, std::string> > __connection_header; 00173 }; // struct Estimate2DHullMeshRequest 00174 typedef ::srs_env_model_percp::Estimate2DHullMeshRequest_<std::allocator<void> > Estimate2DHullMeshRequest; 00175 00176 typedef boost::shared_ptr< ::srs_env_model_percp::Estimate2DHullMeshRequest> Estimate2DHullMeshRequestPtr; 00177 typedef boost::shared_ptr< ::srs_env_model_percp::Estimate2DHullMeshRequest const> Estimate2DHullMeshRequestConstPtr; 00178 00179 00180 template <class ContainerAllocator> 00181 struct Estimate2DHullMeshResponse_ { 00182 typedef Estimate2DHullMeshResponse_<ContainerAllocator> Type; 00183 00184 Estimate2DHullMeshResponse_() 00185 : convexHull() 00186 { 00187 } 00188 00189 Estimate2DHullMeshResponse_(const ContainerAllocator& _alloc) 00190 : convexHull(_alloc) 00191 { 00192 } 00193 00194 typedef ::geometry_msgs::Polygon_<ContainerAllocator> _convexHull_type; 00195 ::geometry_msgs::Polygon_<ContainerAllocator> convexHull; 00196 00197 00198 private: 00199 static const char* __s_getDataType_() { return "srs_env_model_percp/Estimate2DHullMeshResponse"; } 00200 public: 00201 ROS_DEPRECATED static const std::string __s_getDataType() { return __s_getDataType_(); } 00202 00203 ROS_DEPRECATED const std::string __getDataType() const { return __s_getDataType_(); } 00204 00205 private: 00206 static const char* __s_getMD5Sum_() { return "00af134be58b0bb036eccab2a39f05f6"; } 00207 public: 00208 ROS_DEPRECATED static const std::string __s_getMD5Sum() { return __s_getMD5Sum_(); } 00209 00210 ROS_DEPRECATED const std::string __getMD5Sum() const { return __s_getMD5Sum_(); } 00211 00212 private: 00213 static const char* __s_getServerMD5Sum_() { return "6a2889ab927091c2a5c3e57dd5a07dda"; } 00214 public: 00215 ROS_DEPRECATED static const std::string __s_getServerMD5Sum() { return __s_getServerMD5Sum_(); } 00216 00217 ROS_DEPRECATED const std::string __getServerMD5Sum() const { return __s_getServerMD5Sum_(); } 00218 00219 private: 00220 static const char* __s_getMessageDefinition_() { return "\n\ 00221 \n\ 00222 \n\ 00223 \n\ 00224 geometry_msgs/Polygon convexHull\n\ 00225 \n\ 00226 \n\ 00227 \n\ 00228 ================================================================================\n\ 00229 MSG: geometry_msgs/Polygon\n\ 00230 #A specification of a polygon where the first and last points are assumed to be connected\n\ 00231 geometry_msgs/Point32[] points\n\ 00232 \n\ 00233 ================================================================================\n\ 00234 MSG: geometry_msgs/Point32\n\ 00235 # This contains the position of a point in free space(with 32 bits of precision).\n\ 00236 # It is recommeded to use Point wherever possible instead of Point32. \n\ 00237 # \n\ 00238 # This recommendation is to promote interoperability. \n\ 00239 #\n\ 00240 # This message is designed to take up less space when sending\n\ 00241 # lots of points at once, as in the case of a PointCloud. \n\ 00242 \n\ 00243 float32 x\n\ 00244 float32 y\n\ 00245 float32 z\n\ 00246 "; } 00247 public: 00248 ROS_DEPRECATED static const std::string __s_getMessageDefinition() { return __s_getMessageDefinition_(); } 00249 00250 ROS_DEPRECATED const std::string __getMessageDefinition() const { return __s_getMessageDefinition_(); } 00251 00252 ROS_DEPRECATED virtual uint8_t *serialize(uint8_t *write_ptr, uint32_t seq) const 00253 { 00254 ros::serialization::OStream stream(write_ptr, 1000000000); 00255 ros::serialization::serialize(stream, convexHull); 00256 return stream.getData(); 00257 } 00258 00259 ROS_DEPRECATED virtual uint8_t *deserialize(uint8_t *read_ptr) 00260 { 00261 ros::serialization::IStream stream(read_ptr, 1000000000); 00262 ros::serialization::deserialize(stream, convexHull); 00263 return stream.getData(); 00264 } 00265 00266 ROS_DEPRECATED virtual uint32_t serializationLength() const 00267 { 00268 uint32_t size = 0; 00269 size += ros::serialization::serializationLength(convexHull); 00270 return size; 00271 } 00272 00273 typedef boost::shared_ptr< ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> > Ptr; 00274 typedef boost::shared_ptr< ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> const> ConstPtr; 00275 boost::shared_ptr<std::map<std::string, std::string> > __connection_header; 00276 }; // struct Estimate2DHullMeshResponse 00277 typedef ::srs_env_model_percp::Estimate2DHullMeshResponse_<std::allocator<void> > Estimate2DHullMeshResponse; 00278 00279 typedef boost::shared_ptr< ::srs_env_model_percp::Estimate2DHullMeshResponse> Estimate2DHullMeshResponsePtr; 00280 typedef boost::shared_ptr< ::srs_env_model_percp::Estimate2DHullMeshResponse const> Estimate2DHullMeshResponseConstPtr; 00281 00282 struct Estimate2DHullMesh 00283 { 00284 00285 typedef Estimate2DHullMeshRequest Request; 00286 typedef Estimate2DHullMeshResponse Response; 00287 Request request; 00288 Response response; 00289 00290 typedef Request RequestType; 00291 typedef Response ResponseType; 00292 }; // struct Estimate2DHullMesh 00293 } // namespace srs_env_model_percp 00294 00295 namespace ros 00296 { 00297 namespace message_traits 00298 { 00299 template<class ContainerAllocator> struct IsMessage< ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > : public TrueType {}; 00300 template<class ContainerAllocator> struct IsMessage< ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> const> : public TrueType {}; 00301 template<class ContainerAllocator> 00302 struct MD5Sum< ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > { 00303 static const char* value() 00304 { 00305 return "9c05409a5132ae03b3447a07d79be879"; 00306 } 00307 00308 static const char* value(const ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> &) { return value(); } 00309 static const uint64_t static_value1 = 0x9c05409a5132ae03ULL; 00310 static const uint64_t static_value2 = 0xb3447a07d79be879ULL; 00311 }; 00312 00313 template<class ContainerAllocator> 00314 struct DataType< ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > { 00315 static const char* value() 00316 { 00317 return "srs_env_model_percp/Estimate2DHullMeshRequest"; 00318 } 00319 00320 static const char* value(const ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> &) { return value(); } 00321 }; 00322 00323 template<class ContainerAllocator> 00324 struct Definition< ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > { 00325 static const char* value() 00326 { 00327 return "\n\ 00328 \n\ 00329 \n\ 00330 Header header\n\ 00331 \n\ 00332 \n\ 00333 arm_navigation_msgs/Shape mesh\n\ 00334 \n\ 00335 ================================================================================\n\ 00336 MSG: std_msgs/Header\n\ 00337 # Standard metadata for higher-level stamped data types.\n\ 00338 # This is generally used to communicate timestamped data \n\ 00339 # in a particular coordinate frame.\n\ 00340 # \n\ 00341 # sequence ID: consecutively increasing ID \n\ 00342 uint32 seq\n\ 00343 #Two-integer timestamp that is expressed as:\n\ 00344 # * stamp.secs: seconds (stamp_secs) since epoch\n\ 00345 # * stamp.nsecs: nanoseconds since stamp_secs\n\ 00346 # time-handling sugar is provided by the client library\n\ 00347 time stamp\n\ 00348 #Frame this data is associated with\n\ 00349 # 0: no frame\n\ 00350 # 1: global frame\n\ 00351 string frame_id\n\ 00352 \n\ 00353 ================================================================================\n\ 00354 MSG: arm_navigation_msgs/Shape\n\ 00355 byte SPHERE=0\n\ 00356 byte BOX=1\n\ 00357 byte CYLINDER=2\n\ 00358 byte MESH=3\n\ 00359 \n\ 00360 byte type\n\ 00361 \n\ 00362 \n\ 00363 #### define sphere, box, cylinder ####\n\ 00364 # the origin of each shape is considered at the shape's center\n\ 00365 \n\ 00366 # for sphere\n\ 00367 # radius := dimensions[0]\n\ 00368 \n\ 00369 # for cylinder\n\ 00370 # radius := dimensions[0]\n\ 00371 # length := dimensions[1]\n\ 00372 # the length is along the Z axis\n\ 00373 \n\ 00374 # for box\n\ 00375 # size_x := dimensions[0]\n\ 00376 # size_y := dimensions[1]\n\ 00377 # size_z := dimensions[2]\n\ 00378 float64[] dimensions\n\ 00379 \n\ 00380 \n\ 00381 #### define mesh ####\n\ 00382 \n\ 00383 # list of triangles; triangle k is defined by tre vertices located\n\ 00384 # at indices triangles[3k], triangles[3k+1], triangles[3k+2]\n\ 00385 int32[] triangles\n\ 00386 geometry_msgs/Point[] vertices\n\ 00387 \n\ 00388 ================================================================================\n\ 00389 MSG: geometry_msgs/Point\n\ 00390 # This contains the position of a point in free space\n\ 00391 float64 x\n\ 00392 float64 y\n\ 00393 float64 z\n\ 00394 \n\ 00395 "; 00396 } 00397 00398 static const char* value(const ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> &) { return value(); } 00399 }; 00400 00401 template<class ContainerAllocator> struct HasHeader< ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > : public TrueType {}; 00402 template<class ContainerAllocator> struct HasHeader< const ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > : public TrueType {}; 00403 } // namespace message_traits 00404 } // namespace ros 00405 00406 00407 namespace ros 00408 { 00409 namespace message_traits 00410 { 00411 template<class ContainerAllocator> struct IsMessage< ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> > : public TrueType {}; 00412 template<class ContainerAllocator> struct IsMessage< ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> const> : public TrueType {}; 00413 template<class ContainerAllocator> 00414 struct MD5Sum< ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> > { 00415 static const char* value() 00416 { 00417 return "00af134be58b0bb036eccab2a39f05f6"; 00418 } 00419 00420 static const char* value(const ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> &) { return value(); } 00421 static const uint64_t static_value1 = 0x00af134be58b0bb0ULL; 00422 static const uint64_t static_value2 = 0x36eccab2a39f05f6ULL; 00423 }; 00424 00425 template<class ContainerAllocator> 00426 struct DataType< ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> > { 00427 static const char* value() 00428 { 00429 return "srs_env_model_percp/Estimate2DHullMeshResponse"; 00430 } 00431 00432 static const char* value(const ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> &) { return value(); } 00433 }; 00434 00435 template<class ContainerAllocator> 00436 struct Definition< ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> > { 00437 static const char* value() 00438 { 00439 return "\n\ 00440 \n\ 00441 \n\ 00442 \n\ 00443 geometry_msgs/Polygon convexHull\n\ 00444 \n\ 00445 \n\ 00446 \n\ 00447 ================================================================================\n\ 00448 MSG: geometry_msgs/Polygon\n\ 00449 #A specification of a polygon where the first and last points are assumed to be connected\n\ 00450 geometry_msgs/Point32[] points\n\ 00451 \n\ 00452 ================================================================================\n\ 00453 MSG: geometry_msgs/Point32\n\ 00454 # This contains the position of a point in free space(with 32 bits of precision).\n\ 00455 # It is recommeded to use Point wherever possible instead of Point32. \n\ 00456 # \n\ 00457 # This recommendation is to promote interoperability. \n\ 00458 #\n\ 00459 # This message is designed to take up less space when sending\n\ 00460 # lots of points at once, as in the case of a PointCloud. \n\ 00461 \n\ 00462 float32 x\n\ 00463 float32 y\n\ 00464 float32 z\n\ 00465 "; 00466 } 00467 00468 static const char* value(const ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> &) { return value(); } 00469 }; 00470 00471 } // namespace message_traits 00472 } // namespace ros 00473 00474 namespace ros 00475 { 00476 namespace serialization 00477 { 00478 00479 template<class ContainerAllocator> struct Serializer< ::srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > 00480 { 00481 template<typename Stream, typename T> inline static void allInOne(Stream& stream, T m) 00482 { 00483 stream.next(m.header); 00484 stream.next(m.mesh); 00485 } 00486 00487 ROS_DECLARE_ALLINONE_SERIALIZER; 00488 }; // struct Estimate2DHullMeshRequest_ 00489 } // namespace serialization 00490 } // namespace ros 00491 00492 00493 namespace ros 00494 { 00495 namespace serialization 00496 { 00497 00498 template<class ContainerAllocator> struct Serializer< ::srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> > 00499 { 00500 template<typename Stream, typename T> inline static void allInOne(Stream& stream, T m) 00501 { 00502 stream.next(m.convexHull); 00503 } 00504 00505 ROS_DECLARE_ALLINONE_SERIALIZER; 00506 }; // struct Estimate2DHullMeshResponse_ 00507 } // namespace serialization 00508 } // namespace ros 00509 00510 namespace ros 00511 { 00512 namespace service_traits 00513 { 00514 template<> 00515 struct MD5Sum<srs_env_model_percp::Estimate2DHullMesh> { 00516 static const char* value() 00517 { 00518 return "6a2889ab927091c2a5c3e57dd5a07dda"; 00519 } 00520 00521 static const char* value(const srs_env_model_percp::Estimate2DHullMesh&) { return value(); } 00522 }; 00523 00524 template<> 00525 struct DataType<srs_env_model_percp::Estimate2DHullMesh> { 00526 static const char* value() 00527 { 00528 return "srs_env_model_percp/Estimate2DHullMesh"; 00529 } 00530 00531 static const char* value(const srs_env_model_percp::Estimate2DHullMesh&) { return value(); } 00532 }; 00533 00534 template<class ContainerAllocator> 00535 struct MD5Sum<srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > { 00536 static const char* value() 00537 { 00538 return "6a2889ab927091c2a5c3e57dd5a07dda"; 00539 } 00540 00541 static const char* value(const srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> &) { return value(); } 00542 }; 00543 00544 template<class ContainerAllocator> 00545 struct DataType<srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> > { 00546 static const char* value() 00547 { 00548 return "srs_env_model_percp/Estimate2DHullMesh"; 00549 } 00550 00551 static const char* value(const srs_env_model_percp::Estimate2DHullMeshRequest_<ContainerAllocator> &) { return value(); } 00552 }; 00553 00554 template<class ContainerAllocator> 00555 struct MD5Sum<srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> > { 00556 static const char* value() 00557 { 00558 return "6a2889ab927091c2a5c3e57dd5a07dda"; 00559 } 00560 00561 static const char* value(const srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> &) { return value(); } 00562 }; 00563 00564 template<class ContainerAllocator> 00565 struct DataType<srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> > { 00566 static const char* value() 00567 { 00568 return "srs_env_model_percp/Estimate2DHullMesh"; 00569 } 00570 00571 static const char* value(const srs_env_model_percp::Estimate2DHullMeshResponse_<ContainerAllocator> &) { return value(); } 00572 }; 00573 00574 } // namespace service_traits 00575 } // namespace ros 00576 00577 #endif // SRS_ENV_MODEL_PERCP_SERVICE_ESTIMATE2DHULLMESH_H 00578