summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/H5.c13
-rw-r--r--src/H5A.c28
-rw-r--r--src/H5ACmpio.c5
-rw-r--r--src/H5ACpkg.h13
-rw-r--r--src/H5Adeprec.c4
-rw-r--r--src/H5C.c10
-rw-r--r--src/H5D.c34
-rw-r--r--src/H5Dmpio.c5
-rw-r--r--src/H5Dscatgath.c8
-rw-r--r--src/H5E.c14
-rw-r--r--src/H5Edeprec.c6
-rw-r--r--src/H5F.c71
-rw-r--r--src/H5FD.c36
-rw-r--r--src/H5FDcore.c4
-rw-r--r--src/H5FDhdfs.c6
-rw-r--r--src/H5FDmirror.c6
-rw-r--r--src/H5FDros3.c6
-rw-r--r--src/H5FDsplitter.c6
-rw-r--r--src/H5Fdeprec.c4
-rw-r--r--src/H5Fmpi.c4
-rw-r--r--src/H5G.c12
-rw-r--r--src/H5Gdeprec.c14
-rw-r--r--src/H5Gname.c169
-rw-r--r--src/H5I.c6
-rw-r--r--src/H5L.c10
-rw-r--r--src/H5Ldeprec.c8
-rw-r--r--src/H5M.c8
-rw-r--r--src/H5O.c37
-rw-r--r--src/H5Odeprec.c33
-rw-r--r--src/H5P.c22
-rw-r--r--src/H5PL.c4
-rw-r--r--src/H5Pdapl.c28
-rw-r--r--src/H5Pdcpl.c8
-rw-r--r--src/H5Pdeprec.c12
-rw-r--r--src/H5Pdxpl.c25
-rw-r--r--src/H5Pfapl.c88
-rw-r--r--src/H5Pfcpl.c32
-rw-r--r--src/H5Plapl.c18
-rw-r--r--src/H5Pmapl.c4
-rw-r--r--src/H5Pocpl.c16
-rw-r--r--src/H5Pocpypl.c6
-rw-r--r--src/H5R.c16
-rw-r--r--src/H5RS.c481
-rw-r--r--src/H5RSmodule.h32
-rw-r--r--src/H5RSprivate.h6
-rw-r--r--src/H5Rdeprec.c8
-rw-r--r--src/H5Shyper.c9
-rw-r--r--src/H5Spoint.c5
-rw-r--r--src/H5Sselect.c10
-rw-r--r--src/H5T.c8
-rw-r--r--src/H5TS.c5
-rw-r--r--src/H5Tarray.c8
-rw-r--r--src/H5VL.c6
-rw-r--r--src/H5VLcallback.c247
-rw-r--r--src/H5Z.c4
-rw-r--r--src/H5private.h24
-rw-r--r--src/H5trace.c3942
58 files changed, 3091 insertions, 2564 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e5136c5..a7e3f57 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -746,6 +746,7 @@ set (H5_MODULE_HEADERS
${HDF5_SRC_DIR}/H5PBmodule.h
${HDF5_SRC_DIR}/H5PLmodule.h
${HDF5_SRC_DIR}/H5Rmodule.h
+ ${HDF5_SRC_DIR}/H5RSmodule.h
${HDF5_SRC_DIR}/H5Smodule.h
${HDF5_SRC_DIR}/H5SLmodule.h
${HDF5_SRC_DIR}/H5SMmodule.h
diff --git a/src/H5.c b/src/H5.c
index d315950..68ee335 100644
--- a/src/H5.c
+++ b/src/H5.c
@@ -597,12 +597,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5get_free_list_sizes(size_t *reg_size, size_t *arr_size, size_t *blk_size, size_t *fac_size)
+H5get_free_list_sizes(size_t *reg_size /*out*/, size_t *arr_size /*out*/, size_t *blk_size /*out*/,
+ size_t *fac_size /*out*/)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "*z*z*z*z", reg_size, arr_size, blk_size, fac_size);
+ H5TRACE4("e", "xxxx", reg_size, arr_size, blk_size, fac_size);
/* Call the free list function to actually get the sizes */
if (H5FL_get_free_list_sizes(reg_size, arr_size, blk_size, fac_size) < 0)
@@ -637,12 +638,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5get_alloc_stats(H5_alloc_stats_t *stats)
+H5get_alloc_stats(H5_alloc_stats_t *stats /*out*/)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE1("e", "*x", stats);
+ H5TRACE1("e", "x", stats);
/* Call the internal allocation stat routine to get the values */
if (H5MM_get_alloc_stats(stats) < 0)
@@ -800,12 +801,12 @@ H5__mpi_delete_cb(MPI_Comm H5_ATTR_UNUSED comm, int H5_ATTR_UNUSED keyval, void
*-------------------------------------------------------------------------
*/
herr_t
-H5get_libversion(unsigned *majnum, unsigned *minnum, unsigned *relnum)
+H5get_libversion(unsigned *majnum /*out*/, unsigned *minnum /*out*/, unsigned *relnum /*out*/)
{
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "*Iu*Iu*Iu", majnum, minnum, relnum);
+ H5TRACE3("e", "xxx", majnum, minnum, relnum);
/* Set the version information */
if (majnum)
diff --git a/src/H5A.c b/src/H5A.c
index 9fb10ec..1f89fc2 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -521,13 +521,13 @@ done:
This function reads a complete attribute from disk.
--------------------------------------------------------------------------*/
herr_t
-H5Aread(hid_t attr_id, hid_t dtype_id, void *buf)
+H5Aread(hid_t attr_id, hid_t dtype_id, void *buf /*out*/)
{
H5VL_object_t *vol_obj; /* Attribute object for ID */
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "ii*x", attr_id, dtype_id, buf);
+ H5TRACE3("e", "iix", attr_id, dtype_id, buf);
/* Check arguments */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(attr_id, H5I_ATTR)))
@@ -685,14 +685,14 @@ done:
properly terminate the string.
--------------------------------------------------------------------------*/
ssize_t
-H5Aget_name(hid_t attr_id, size_t buf_size, char *buf)
+H5Aget_name(hid_t attr_id, size_t buf_size, char *buf /*out*/)
{
H5VL_object_t * vol_obj = NULL; /* Attribute object for ID */
H5VL_loc_params_t loc_params;
ssize_t ret_value = -1;
FUNC_ENTER_API((-1))
- H5TRACE3("Zs", "iz*s", attr_id, buf_size, buf);
+ H5TRACE3("Zs", "izx", attr_id, buf_size, buf);
/* check arguments */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(attr_id, H5I_ATTR)))
@@ -831,14 +831,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Aget_info(hid_t attr_id, H5A_info_t *ainfo)
+H5Aget_info(hid_t attr_id, H5A_info_t *ainfo /*out*/)
{
H5VL_object_t * vol_obj;
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", attr_id, ainfo);
+ H5TRACE2("e", "ix", attr_id, ainfo);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(attr_id, H5I_ATTR)))
@@ -872,7 +872,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, H5A_info_t *ainfo,
+H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, H5A_info_t *ainfo /*out*/,
hid_t lapl_id)
{
H5VL_object_t * vol_obj;
@@ -880,7 +880,7 @@ H5Aget_info_by_name(hid_t loc_id, const char *obj_name, const char *attr_name, H
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*s*s*xi", loc_id, obj_name, attr_name, ainfo, lapl_id);
+ H5TRACE5("e", "i*s*sxi", loc_id, obj_name, attr_name, ainfo, lapl_id);
/* Check args */
if (H5I_ATTR == H5I_get_type(loc_id))
@@ -930,14 +930,14 @@ done:
*/
herr_t
H5Aget_info_by_idx(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order, hsize_t n,
- H5A_info_t *ainfo, hid_t lapl_id)
+ H5A_info_t *ainfo /*out*/, hid_t lapl_id)
{
H5VL_object_t * vol_obj;
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE7("e", "i*sIiIoh*xi", loc_id, obj_name, idx_type, order, n, ainfo, lapl_id);
+ H5TRACE7("e", "i*sIiIohxi", loc_id, obj_name, idx_type, order, n, ainfo, lapl_id);
/* Check args */
if (H5I_ATTR == H5I_get_type(loc_id))
@@ -1136,7 +1136,7 @@ done:
attribute.
--------------------------------------------------------------------------*/
herr_t
-H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t *idx, H5A_operator2_t op,
+H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t *idx /*in,out */, H5A_operator2_t op,
void *op_data)
{
H5VL_object_t * vol_obj = NULL; /* object of loc_id */
@@ -1144,7 +1144,7 @@ H5Aiterate2(hid_t loc_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t *i
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE6("e", "iIiIo*hx*x", loc_id, idx_type, order, idx, op, op_data);
+ H5TRACE6("e", "iIiIo*hAO*x", loc_id, idx_type, order, idx, op, op_data);
/* check arguments */
if (H5I_ATTR == H5I_get_type(loc_id))
@@ -1215,14 +1215,14 @@ done:
--------------------------------------------------------------------------*/
herr_t
H5Aiterate_by_name(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_iter_order_t order,
- hsize_t *idx, H5A_operator2_t op, void *op_data, hid_t lapl_id)
+ hsize_t *idx /*in,out */, H5A_operator2_t op, void *op_data, hid_t lapl_id)
{
H5VL_object_t * vol_obj = NULL; /* Object location */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "i*sIiIo*hx*xi", loc_id, obj_name, idx_type, order, idx, op, op_data, lapl_id);
+ H5TRACE8("e", "i*sIiIo*hAO*xi", loc_id, obj_name, idx_type, order, idx, op, op_data, lapl_id);
/* Check arguments */
if (H5I_ATTR == H5I_get_type(loc_id))
diff --git a/src/H5ACmpio.c b/src/H5ACmpio.c
index 1d24441..3826a9c 100644
--- a/src/H5ACmpio.c
+++ b/src/H5ACmpio.c
@@ -137,8 +137,7 @@ H5FL_DEFINE_STATIC(H5AC_slist_entry_t);
*-------------------------------------------------------------------------
*/
herr_t
-H5AC__set_sync_point_done_callback(H5C_t *cache_ptr,
- void (*sync_point_done)(unsigned num_writes, haddr_t *written_entries_tbl))
+H5AC__set_sync_point_done_callback(H5C_t *cache_ptr, H5AC_sync_point_done_cb_t sync_point_done)
{
H5AC_aux_t *aux_ptr;
@@ -170,7 +169,7 @@ H5AC__set_sync_point_done_callback(H5C_t *cache_ptr,
*-------------------------------------------------------------------------
*/
herr_t
-H5AC__set_write_done_callback(H5C_t *cache_ptr, void (*write_done)(void))
+H5AC__set_write_done_callback(H5C_t *cache_ptr, H5AC_write_done_cb_t write_done)
{
H5AC_aux_t *aux_ptr;
diff --git a/src/H5ACpkg.h b/src/H5ACpkg.h
index 5ec364a..0548193 100644
--- a/src/H5ACpkg.h
+++ b/src/H5ACpkg.h
@@ -401,7 +401,12 @@ typedef struct H5AC_aux_t {
unsigned p0_image_len;
} H5AC_aux_t; /* struct H5AC_aux_t */
-#endif /* H5_HAVE_PARALLEL */
+
+/* Typedefs for debugging function pointers */
+typedef void (*H5AC_sync_point_done_cb_t)(unsigned num_writes, haddr_t *written_entries_tbl);
+typedef void (*H5AC_write_done_cb_t)(void);
+
+#endif /* H5_HAVE_PARALLEL */
/******************************/
/* Package Private Prototypes */
@@ -417,10 +422,8 @@ H5_DLL herr_t H5AC__log_inserted_entry(const H5AC_info_t *entry_ptr);
H5_DLL herr_t H5AC__log_moved_entry(const H5F_t *f, haddr_t old_addr, haddr_t new_addr);
H5_DLL herr_t H5AC__flush_entries(H5F_t *f);
H5_DLL herr_t H5AC__run_sync_point(H5F_t *f, int sync_point_op);
-H5_DLL herr_t H5AC__set_sync_point_done_callback(H5C_t *cache_ptr,
- void (*sync_point_done)(unsigned num_writes,
- haddr_t *written_entries_tbl));
-H5_DLL herr_t H5AC__set_write_done_callback(H5C_t *cache_ptr, void (*write_done)(void));
+H5_DLL herr_t H5AC__set_sync_point_done_callback(H5C_t *cache_ptr, H5AC_sync_point_done_cb_t sync_point_done);
+H5_DLL herr_t H5AC__set_write_done_callback(H5C_t *cache_ptr, H5AC_write_done_cb_t write_done);
#endif /* H5_HAVE_PARALLEL */
#endif /* _H5ACpkg_H */
diff --git a/src/H5Adeprec.c b/src/H5Adeprec.c
index 3589296..cd3dd25 100644
--- a/src/H5Adeprec.c
+++ b/src/H5Adeprec.c
@@ -373,13 +373,13 @@ done:
Deprecated in favor of H5Aiterate2
--------------------------------------------------------------------------*/
herr_t
-H5Aiterate1(hid_t loc_id, unsigned *attr_num, H5A_operator1_t op, void *op_data)
+H5Aiterate1(hid_t loc_id, unsigned *attr_num /*in,out*/, H5A_operator1_t op, void *op_data)
{
H5VL_object_t *vol_obj = NULL; /* Object of loc_id */
herr_t ret_value; /* Return value */
FUNC_ENTER_API(H5_ITER_ERROR)
- H5TRACE4("e", "i*Iux*x", loc_id, attr_num, op, op_data);
+ H5TRACE4("e", "i*IuAo*x", loc_id, attr_num, op, op_data);
/* check arguments */
if (H5I_ATTR == H5I_get_type(loc_id))
diff --git a/src/H5C.c b/src/H5C.c
index fa4a8bf..ce6c7f8 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -4138,13 +4138,13 @@ done:
*
*-------------------------------------------------------------------------
*/
-#if H5C_COLLECT_CACHE_STATS
-static herr_t
-H5C__pin_entry_from_client(H5C_t *cache_ptr, H5C_cache_entry_t *entry_ptr)
-#else
static herr_t
-H5C__pin_entry_from_client(H5C_t H5_ATTR_UNUSED *cache_ptr, H5C_cache_entry_t *entry_ptr)
+H5C__pin_entry_from_client(H5C_t
+#if !H5C_COLLECT_CACHE_STATS
+ H5_ATTR_UNUSED
#endif
+ * cache_ptr,
+ H5C_cache_entry_t *entry_ptr)
{
herr_t ret_value = SUCCEED; /* Return value */
diff --git a/src/H5D.c b/src/H5D.c
index 6b4e2f3..e8cfb68 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -374,13 +374,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Dget_space_status(hid_t dset_id, H5D_space_status_t *allocation)
+H5Dget_space_status(hid_t dset_id, H5D_space_status_t *allocation /*out*/)
{
H5VL_object_t *vol_obj = NULL; /* Dataset structure */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Ds", dset_id, allocation);
+ H5TRACE2("e", "ix", dset_id, allocation);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(dset_id, H5I_DATASET)))
@@ -661,7 +661,7 @@ H5Diterate(void *buf, hid_t type_id, hid_t space_id, H5D_operator_t op, void *op
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "*xiix*x", buf, type_id, space_id, op, operator_data);
+ H5TRACE5("e", "*xiiDO*x", buf, type_id, space_id, op, operator_data);
/* Check args */
if (NULL == op)
@@ -704,14 +704,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id, hsize_t *size)
+H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id, hsize_t *size /*out*/)
{
H5VL_object_t *vol_obj; /* Dataset for this operation */
hbool_t supported; /* Whether 'get vlen buf size' operation is supported by VOL connector */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "iii*h", dataset_id, type_id, space_id, size);
+ H5TRACE4("e", "iiix", dataset_id, type_id, space_id, size);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(dataset_id)))
@@ -911,13 +911,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Dget_chunk_index_type(hid_t dset_id, H5D_chunk_index_t *idx_type)
+H5Dget_chunk_index_type(hid_t dset_id, H5D_chunk_index_t *idx_type /*out*/)
{
H5VL_object_t *vol_obj; /* Dataset for this operation */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Dk", dset_id, idx_type);
+ H5TRACE2("e", "ix", dset_id, idx_type);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(dset_id, H5I_DATASET)))
@@ -950,13 +950,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Dget_chunk_storage_size(hid_t dset_id, const hsize_t *offset, hsize_t *chunk_nbytes)
+H5Dget_chunk_storage_size(hid_t dset_id, const hsize_t *offset, hsize_t *chunk_nbytes /*out*/)
{
H5VL_object_t *vol_obj; /* Dataset for this operation */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*h*h", dset_id, offset, chunk_nbytes);
+ H5TRACE3("e", "i*hx", dset_id, offset, chunk_nbytes);
/* Check arguments */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(dset_id, H5I_DATASET)))
@@ -997,13 +997,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Dget_num_chunks(hid_t dset_id, hid_t fspace_id, hsize_t *nchunks)
+H5Dget_num_chunks(hid_t dset_id, hid_t fspace_id, hsize_t *nchunks /*out*/)
{
H5VL_object_t *vol_obj = NULL; /* Dataset for this operation */
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "ii*h", dset_id, fspace_id, nchunks);
+ H5TRACE3("e", "iix", dset_id, fspace_id, nchunks);
/* Check arguments */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(dset_id, H5I_DATASET)))
@@ -1043,15 +1043,15 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Dget_chunk_info(hid_t dset_id, hid_t fspace_id, hsize_t chk_index, hsize_t *offset, unsigned *filter_mask,
- haddr_t *addr, hsize_t *size)
+H5Dget_chunk_info(hid_t dset_id, hid_t fspace_id, hsize_t chk_index, hsize_t *offset /*out*/,
+ unsigned *filter_mask /*out*/, haddr_t *addr /*out*/, hsize_t *size /*out*/)
{
H5VL_object_t *vol_obj = NULL; /* Dataset for this operation */
hsize_t nchunks = 0;
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE7("e", "iih*h*Iu*a*h", dset_id, fspace_id, chk_index, offset, filter_mask, addr, size);
+ H5TRACE7("e", "iihxxxx", dset_id, fspace_id, chk_index, offset, filter_mask, addr, size);
/* Check arguments */
if (NULL == offset && NULL == filter_mask && NULL == addr && NULL == size)
@@ -1100,14 +1100,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Dget_chunk_info_by_coord(hid_t dset_id, const hsize_t *offset, unsigned *filter_mask, haddr_t *addr,
- hsize_t *size)
+H5Dget_chunk_info_by_coord(hid_t dset_id, const hsize_t *offset, unsigned *filter_mask /*out*/,
+ haddr_t *addr /*out*/, hsize_t *size /*out*/)
{
H5VL_object_t *vol_obj = NULL; /* Dataset for this operation */
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*h*Iu*a*h", dset_id, offset, filter_mask, addr, size);
+ H5TRACE5("e", "i*hxxx", dset_id, offset, filter_mask, addr, size);
/* Check arguments */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(dset_id, H5I_DATASET)))
diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c
index 4bca0cb..71e5f0a 100644
--- a/src/H5Dmpio.c
+++ b/src/H5Dmpio.c
@@ -207,6 +207,9 @@ typedef struct H5D_filtered_collective_io_info_t {
} async_info;
} H5D_filtered_collective_io_info_t;
+/* Function pointer typedef for sort function */
+typedef int (*H5D_mpio_sort_func_cb_t)(const void *, const void *);
+
/********************/
/* Local Prototypes */
/********************/
@@ -527,7 +530,7 @@ done:
static herr_t
H5D__mpio_array_gatherv(void *local_array, size_t local_array_num_entries, size_t array_entry_size,
void **_gathered_array, size_t *_gathered_array_num_entries, hbool_t allgather,
- int root, MPI_Comm comm, int (*sort_func)(const void *, const void *))
+ int root, MPI_Comm comm, H5D_mpio_sort_func_cb_t sort_func)
{
size_t gathered_array_num_entries = 0; /* The size of the newly-constructed array */
void * gathered_array = NULL; /* The newly-constructed array returned to the caller */
diff --git a/src/H5Dscatgath.c b/src/H5Dscatgath.c
index 1a272d8..ee3fce8 100644
--- a/src/H5Dscatgath.c
+++ b/src/H5Dscatgath.c
@@ -916,7 +916,7 @@ H5D__compound_opt_write(size_t nelmts, const H5D_type_info_t *type_info)
*-------------------------------------------------------------------------
*/
herr_t
-H5Dscatter(H5D_scatter_func_t op, void *op_data, hid_t type_id, hid_t dst_space_id, void *dst_buf)
+H5Dscatter(H5D_scatter_func_t op, void *op_data, hid_t type_id, hid_t dst_space_id, void *dst_buf /*out*/)
{
H5T_t * type; /* Datatype */
H5S_t * dst_space; /* Dataspace */
@@ -930,7 +930,7 @@ H5Dscatter(H5D_scatter_func_t op, void *op_data, hid_t type_id, hid_t dst_space_
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "x*xii*x", op, op_data, type_id, dst_space_id, dst_buf);
+ H5TRACE5("e", "DS*xiix", op, op_data, type_id, dst_space_id, dst_buf);
/* Check args */
if (op == NULL)
@@ -1012,7 +1012,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Dgather(hid_t src_space_id, const void *src_buf, hid_t type_id, size_t dst_buf_size, void *dst_buf,
+H5Dgather(hid_t src_space_id, const void *src_buf, hid_t type_id, size_t dst_buf_size, void *dst_buf /*out*/,
H5D_gather_func_t op, void *op_data)
{
H5T_t * type; /* Datatype */
@@ -1026,7 +1026,7 @@ H5Dgather(hid_t src_space_id, const void *src_buf, hid_t type_id, size_t dst_buf
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE7("e", "i*xiz*xx*x", src_space_id, src_buf, type_id, dst_buf_size, dst_buf, op, op_data);
+ H5TRACE7("e", "i*xizxDg*x", src_space_id, src_buf, type_id, dst_buf_size, dst_buf, op, op_data);
/* Check args */
if (NULL == (src_space = (H5S_t *)H5I_object_verify(src_space_id, H5I_DATASPACE)))
diff --git a/src/H5E.c b/src/H5E.c
index 7be3d34..8aed045 100644
--- a/src/H5E.c
+++ b/src/H5E.c
@@ -575,13 +575,13 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Eget_class_name(hid_t class_id, char *name, size_t size)
+H5Eget_class_name(hid_t class_id, char *name /*out*/, size_t size)
{
H5E_cls_t *cls; /* Pointer to error class */
ssize_t ret_value = -1; /* Return value */
FUNC_ENTER_API((-1))
- H5TRACE3("Zs", "i*sz", class_id, name, size);
+ H5TRACE3("Zs", "ixz", class_id, name, size);
/* Get the error class */
if (NULL == (cls = (H5E_cls_t *)H5I_object_verify(class_id, H5I_ERROR_CLASS)))
@@ -836,13 +836,13 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Eget_msg(hid_t msg_id, H5E_type_t *type, char *msg_str, size_t size)
+H5Eget_msg(hid_t msg_id, H5E_type_t *type /*out*/, char *msg_str /*out*/, size_t size)
{
H5E_msg_t *msg; /* Pointer to error message */
ssize_t ret_value = -1; /* Return value */
FUNC_ENTER_API_NOCLEAR((-1))
- H5TRACE4("Zs", "i*Et*sz", msg_id, type, msg_str, size);
+ H5TRACE4("Zs", "ixxz", msg_id, type, msg_str, size);
/* Get the message object */
if (NULL == (msg = (H5E_msg_t *)H5I_object_verify(msg_id, H5I_ERROR_MSG)))
@@ -1525,14 +1525,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Eget_auto2(hid_t estack_id, H5E_auto2_t *func, void **client_data)
+H5Eget_auto2(hid_t estack_id, H5E_auto2_t *func /*out*/, void **client_data /*out*/)
{
H5E_t * estack; /* Error stack to operate on */
H5E_auto_op_t op; /* Error stack function */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*x**x", estack_id, func, client_data);
+ H5TRACE3("e", "ixx", estack_id, func, client_data);
if (estack_id == H5E_DEFAULT) {
if (NULL == (estack = H5E__get_my_stack())) /*lint !e506 !e774 Make lint 'constant value Boolean' in
@@ -1590,7 +1590,7 @@ H5Eset_auto2(hid_t estack_id, H5E_auto2_t func, void *client_data)
/* Don't clear the error stack! :-) */
FUNC_ENTER_API_NOCLEAR(FAIL)
- H5TRACE3("e", "ix*x", estack_id, func, client_data);
+ H5TRACE3("e", "iEA*x", estack_id, func, client_data);
if (estack_id == H5E_DEFAULT) {
if (NULL == (estack = H5E__get_my_stack())) /*lint !e506 !e774 Make lint 'constant value Boolean' in
diff --git a/src/H5Edeprec.c b/src/H5Edeprec.c
index d3eef5d..0f887ec 100644
--- a/src/H5Edeprec.c
+++ b/src/H5Edeprec.c
@@ -334,14 +334,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Eget_auto1(H5E_auto1_t *func, void **client_data)
+H5Eget_auto1(H5E_auto1_t *func /*out*/, void **client_data /*out*/)
{
H5E_t * estack; /* Error stack to operate on */
H5E_auto_op_t auto_op; /* Error stack operator */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "*x**x", func, client_data);
+ H5TRACE2("e", "xx", func, client_data);
/* Retrieve default error stack */
if (NULL == (estack = H5E__get_my_stack())) /*lint !e506 !e774 Make lint 'constant value Boolean' in
@@ -395,7 +395,7 @@ H5Eset_auto1(H5E_auto1_t func, void *client_data)
/* Don't clear the error stack! :-) */
FUNC_ENTER_API_NOCLEAR(FAIL)
- H5TRACE2("e", "x*x", func, client_data);
+ H5TRACE2("e", "Ea*x", func, client_data);
if (NULL == (estack = H5E__get_my_stack())) /*lint !e506 !e774 Make lint 'constant value Boolean' in
non-threaded case */
diff --git a/src/H5F.c b/src/H5F.c
index d9d8308..cfad9a2 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -305,12 +305,12 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Fget_obj_ids(hid_t file_id, unsigned types, size_t max_objs, hid_t *oid_list)
+H5Fget_obj_ids(hid_t file_id, unsigned types, size_t max_objs, hid_t *oid_list /*out*/)
{
ssize_t ret_value = 0; /* Return value */
FUNC_ENTER_API((-1))
- H5TRACE4("Zs", "iIuz*i", file_id, types, max_objs, oid_list);
+ H5TRACE4("Zs", "iIuzx", file_id, types, max_objs, oid_list);
/* Check arguments */
if (0 == (types & H5F_OBJ_ALL))
@@ -384,13 +384,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_vfd_handle(hid_t file_id, hid_t fapl_id, void **file_handle)
+H5Fget_vfd_handle(hid_t file_id, hid_t fapl_id, void **file_handle /*out*/)
{
H5VL_object_t *vol_obj; /* File info */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "ii**x", file_id, fapl_id, file_handle);
+ H5TRACE3("e", "iix", file_id, fapl_id, file_handle);
/* Check args */
if (!file_handle)
@@ -840,12 +840,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_intent(hid_t file_id, unsigned *intent_flags)
+H5Fget_intent(hid_t file_id, unsigned *intent_flags /*out*/)
{
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Iu", file_id, intent_flags);
+ H5TRACE2("e", "ix", file_id, intent_flags);
/* If no intent flags were passed in, exit quietly */
if (intent_flags) {
@@ -876,12 +876,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_fileno(hid_t file_id, unsigned long *fnumber)
+H5Fget_fileno(hid_t file_id, unsigned long *fnumber /*out*/)
{
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Ul", file_id, fnumber);
+ H5TRACE2("e", "ix", file_id, fnumber);
/* If no fnumber pointer was passed in, exit quietly */
if (fnumber) {
@@ -944,13 +944,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_filesize(hid_t file_id, hsize_t *size)
+H5Fget_filesize(hid_t file_id, hsize_t *size /*out*/)
{
H5VL_object_t *vol_obj; /* File info */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*h", file_id, size);
+ H5TRACE2("e", "ix", file_id, size);
/* Check args */
if (!size)
@@ -1005,13 +1005,13 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Fget_file_image(hid_t file_id, void *buf, size_t buf_len)
+H5Fget_file_image(hid_t file_id, void *buf /*out*/, size_t buf_len)
{
H5VL_object_t *vol_obj; /* File object for file ID */
ssize_t ret_value; /* Return value */
FUNC_ENTER_API((-1))
- H5TRACE3("Zs", "i*xz", file_id, buf, buf_len);
+ H5TRACE3("Zs", "ixz", file_id, buf, buf_len);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE)))
@@ -1041,13 +1041,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_mdc_config(hid_t file_id, H5AC_cache_config_t *config)
+H5Fget_mdc_config(hid_t file_id, H5AC_cache_config_t *config /*out*/)
{
H5VL_object_t *vol_obj = NULL;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", file_id, config);
+ H5TRACE2("e", "ix", file_id, config);
/* Check args */
if ((NULL == config) || (config->version != H5AC__CURR_CACHE_CONFIG_VERSION))
@@ -1084,7 +1084,7 @@ H5Fset_mdc_config(hid_t file_id, H5AC_cache_config_t *config_ptr)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", file_id, config_ptr);
+ H5TRACE2("e", "i*Cc", file_id, config_ptr);
/* Get the file object */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object(file_id)))
@@ -1112,13 +1112,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_mdc_hit_rate(hid_t file_id, double *hit_rate)
+H5Fget_mdc_hit_rate(hid_t file_id, double *hit_rate /*out*/)
{
H5VL_object_t *vol_obj;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*d", file_id, hit_rate);
+ H5TRACE2("e", "ix", file_id, hit_rate);
/* Check args */
if (NULL == hit_rate)
@@ -1149,14 +1149,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_mdc_size(hid_t file_id, size_t *max_size, size_t *min_clean_size, size_t *cur_size,
- int *cur_num_entries)
+H5Fget_mdc_size(hid_t file_id, size_t *max_size /*out*/, size_t *min_clean_size /*out*/,
+ size_t *cur_size /*out*/, int *cur_num_entries /*out*/)
{
H5VL_object_t *vol_obj;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*z*z*z*Is", file_id, max_size, min_clean_size, cur_size, cur_num_entries);
+ H5TRACE5("e", "ixxxx", file_id, max_size, min_clean_size, cur_size, cur_num_entries);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE)))
@@ -1271,14 +1271,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_info2(hid_t obj_id, H5F_info2_t *finfo)
+H5Fget_info2(hid_t obj_id, H5F_info2_t *finfo /*out*/)
{
H5VL_object_t *vol_obj = NULL;
H5I_type_t type;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", obj_id, finfo);
+ H5TRACE2("e", "ix", obj_id, finfo);
/* Check args */
if (!finfo)
@@ -1314,13 +1314,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_metadata_read_retry_info(hid_t file_id, H5F_retry_info_t *info)
+H5Fget_metadata_read_retry_info(hid_t file_id, H5F_retry_info_t *info /*out*/)
{
H5VL_object_t *vol_obj = NULL; /* File object for file ID */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", file_id, info);
+ H5TRACE2("e", "ix", file_id, info);
/* Check args */
if (!info)
@@ -1545,13 +1545,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_mdc_logging_status(hid_t file_id, hbool_t *is_enabled, hbool_t *is_currently_logging)
+H5Fget_mdc_logging_status(hid_t file_id, hbool_t *is_enabled /*out*/, hbool_t *is_currently_logging /*out*/)
{
H5VL_object_t *vol_obj; /* File info */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*b*b", file_id, is_enabled, is_currently_logging);
+ H5TRACE3("e", "ixx", file_id, is_enabled, is_currently_logging);
/* Sanity check */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE)))
@@ -1682,14 +1682,15 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_page_buffering_stats(hid_t file_id, unsigned accesses[2], unsigned hits[2], unsigned misses[2],
- unsigned evictions[2], unsigned bypasses[2])
+H5Fget_page_buffering_stats(hid_t file_id, unsigned accesses[2] /*out*/, unsigned hits[2] /*out*/,
+ unsigned misses[2] /*out*/, unsigned evictions[2] /*out*/,
+ unsigned bypasses[2] /*out*/)
{
H5VL_object_t *vol_obj; /* File object */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE6("e", "i*Iu*Iu*Iu*Iu*Iu", file_id, accesses, hits, misses, evictions, bypasses);
+ H5TRACE6("e", "ixxxxx", file_id, accesses, hits, misses, evictions, bypasses);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE)))
@@ -1720,13 +1721,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_mdc_image_info(hid_t file_id, haddr_t *image_addr, hsize_t *image_len)
+H5Fget_mdc_image_info(hid_t file_id, haddr_t *image_addr /*out*/, hsize_t *image_len /*out*/)
{
H5VL_object_t *vol_obj; /* File info */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*a*h", file_id, image_addr, image_len);
+ H5TRACE3("e", "ixx", file_id, image_addr, image_len);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE)))
@@ -1753,13 +1754,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_eoa(hid_t file_id, haddr_t *eoa)
+H5Fget_eoa(hid_t file_id, haddr_t *eoa /*out*/)
{
H5VL_object_t *vol_obj; /* File info */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*a", file_id, eoa);
+ H5TRACE2("e", "ix", file_id, eoa);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE)))
@@ -1819,13 +1820,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_dset_no_attrs_hint(hid_t file_id, hbool_t *minimize)
+H5Fget_dset_no_attrs_hint(hid_t file_id, hbool_t *minimize /*out*/)
{
H5VL_object_t *vol_obj = NULL;
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*b", file_id, minimize);
+ H5TRACE2("e", "ix", file_id, minimize);
if (NULL == minimize)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "out pointer 'minimize' cannot be NULL")
diff --git a/src/H5FD.c b/src/H5FD.c
index 28a2bea..46ccf2f 100644
--- a/src/H5FD.c
+++ b/src/H5FD.c
@@ -218,7 +218,7 @@ H5FDregister(const H5FD_class_t *cls)
hid_t ret_value = H5I_INVALID_HID;
FUNC_ENTER_API(H5I_INVALID_HID)
- H5TRACE1("i", "*x", cls);
+ H5TRACE1("i", "*FC", cls);
/* Check arguments */
if (!cls)
@@ -644,7 +644,7 @@ H5FDopen(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
H5FD_t *ret_value = NULL;
FUNC_ENTER_API(NULL)
- H5TRACE4("*x", "*sIuia", name, flags, fapl_id, maxaddr);
+ H5TRACE4("*#", "*sIuia", name, flags, fapl_id, maxaddr);
/* Check arguments */
if (H5P_DEFAULT == fapl_id)
@@ -780,7 +780,7 @@ H5FDclose(H5FD_t *file)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE1("e", "*x", file);
+ H5TRACE1("e", "*#", file);
/* Check arguments */
if (!file)
@@ -858,7 +858,7 @@ H5FDcmp(const H5FD_t *f1, const H5FD_t *f2)
int ret_value = -1;
FUNC_ENTER_API(-1) /* return value is arbitrary */
- H5TRACE2("Is", "*x*x", f1, f2);
+ H5TRACE2("Is", "*#*#", f1, f2);
/* Call private function */
ret_value = H5FD_cmp(f1, f2);
@@ -928,7 +928,7 @@ H5FDquery(const H5FD_t *file, unsigned long *flags /*out*/)
int ret_value = 0;
FUNC_ENTER_API((-1))
- H5TRACE2("Is", "*xx", file, flags);
+ H5TRACE2("Is", "*#x", file, flags);
/* Check arguments */
if (!file)
@@ -1021,7 +1021,7 @@ H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
haddr_t ret_value = HADDR_UNDEF;
FUNC_ENTER_API(HADDR_UNDEF)
- H5TRACE4("a", "*xMtih", file, type, dxpl_id, size);
+ H5TRACE4("a", "*#Mtih", file, type, dxpl_id, size);
/* Check arguments */
if (!file)
@@ -1071,7 +1071,7 @@ H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t siz
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "*xMtiah", file, type, dxpl_id, addr, size);
+ H5TRACE5("e", "*#Mtiah", file, type, dxpl_id, addr, size);
/* Check arguments */
if (!file)
@@ -1114,7 +1114,7 @@ H5FDget_eoa(H5FD_t *file, H5FD_mem_t type)
haddr_t ret_value;
FUNC_ENTER_API(HADDR_UNDEF)
- H5TRACE2("a", "*xMt", file, type);
+ H5TRACE2("a", "*#Mt", file, type);
/* Check arguments */
if (!file)
@@ -1162,7 +1162,7 @@ H5FDset_eoa(H5FD_t *file, H5FD_mem_t type, haddr_t addr)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "*xMta", file, type, addr);
+ H5TRACE3("e", "*#Mta", file, type, addr);
/* Check arguments */
if (!file)
@@ -1210,7 +1210,7 @@ H5FDget_eof(H5FD_t *file, H5FD_mem_t type)
haddr_t ret_value;
FUNC_ENTER_API(HADDR_UNDEF)
- H5TRACE2("a", "*xMt", file, type);
+ H5TRACE2("a", "*#Mt", file, type);
/* Check arguments */
if (!file)
@@ -1361,7 +1361,7 @@ H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE6("e", "*xMtiazx", file, type, dxpl_id, addr, size, buf);
+ H5TRACE6("e", "*#Mtiazx", file, type, dxpl_id, addr, size, buf);
/* Check arguments */
if (!file)
@@ -1407,7 +1407,7 @@ H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t siz
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE6("e", "*xMtiaz*x", file, type, dxpl_id, addr, size, buf);
+ H5TRACE6("e", "*#Mtiaz*x", file, type, dxpl_id, addr, size, buf);
/* Check arguments */
if (!file)
@@ -1451,7 +1451,7 @@ H5FDflush(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "*xib", file, dxpl_id, closing);
+ H5TRACE3("e", "*#ib", file, dxpl_id, closing);
/* Check arguments */
if (!file)
@@ -1518,7 +1518,7 @@ H5FDtruncate(H5FD_t *file, hid_t dxpl_id, hbool_t closing)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "*xib", file, dxpl_id, closing);
+ H5TRACE3("e", "*#ib", file, dxpl_id, closing);
/* Check arguments */
if (!file)
@@ -1584,7 +1584,7 @@ H5FDlock(H5FD_t *file, hbool_t rw)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "*xb", file, rw);
+ H5TRACE2("e", "*#b", file, rw);
/* Check arguments */
if (!file)
@@ -1643,7 +1643,7 @@ H5FDunlock(H5FD_t *file)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE1("e", "*x", file);
+ H5TRACE1("e", "*#", file);
/* Check arguments */
if (!file)
@@ -1724,12 +1724,12 @@ H5FD_get_fileno(const H5FD_t *file, unsigned long *filenum)
*--------------------------------------------------------------------------
*/
herr_t
-H5FDget_vfd_handle(H5FD_t *file, hid_t fapl_id, void **file_handle)
+H5FDget_vfd_handle(H5FD_t *file, hid_t fapl_id, void **file_handle /*out*/)
{
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "*xi**x", file, fapl_id, file_handle);
+ H5TRACE3("e", "*#ix", file, fapl_id, file_handle);
/* Check arguments */
if (!file)
diff --git a/src/H5FDcore.c b/src/H5FDcore.c
index 512dc1e..a9e49d3 100644
--- a/src/H5FDcore.c
+++ b/src/H5FDcore.c
@@ -557,14 +557,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_core_write_tracking(hid_t plist_id, hbool_t *is_enabled, size_t *page_size)
+H5Pget_core_write_tracking(hid_t plist_id, hbool_t *is_enabled /*out*/, size_t *page_size /*out*/)
{
H5P_genplist_t * plist; /* Property list pointer */
const H5FD_core_fapl_t *fa; /* Core VFD info */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*b*z", plist_id, is_enabled, page_size);
+ H5TRACE3("e", "ixx", plist_id, is_enabled, page_size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
diff --git a/src/H5FDhdfs.c b/src/H5FDhdfs.c
index 1f375f5..43ad9a1 100644
--- a/src/H5FDhdfs.c
+++ b/src/H5FDhdfs.c
@@ -610,7 +610,7 @@ H5Pset_fapl_hdfs(hid_t fapl_id, H5FD_hdfs_fapl_t *fa)
herr_t ret_value = FAIL;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", fapl_id, fa);
+ H5TRACE2("e", "i*#", fapl_id, fa);
HDassert(fa != NULL);
@@ -646,14 +646,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_fapl_hdfs(hid_t fapl_id, H5FD_hdfs_fapl_t *fa_dst)
+H5Pget_fapl_hdfs(hid_t fapl_id, H5FD_hdfs_fapl_t *fa_dst /*out*/)
{
const H5FD_hdfs_fapl_t *fa_src = NULL;
H5P_genplist_t * plist = NULL;
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", fapl_id, fa_dst);
+ H5TRACE2("e", "ix", fapl_id, fa_dst);
#if HDFS_DEBUG
HDfprintf(stdout, "called %s.\n", FUNC);
diff --git a/src/H5FDmirror.c b/src/H5FDmirror.c
index c79ce85..9448adb 100644
--- a/src/H5FDmirror.c
+++ b/src/H5FDmirror.c
@@ -1272,14 +1272,14 @@ H5FD__mirror_fapl_free(void *_fa)
* -------------------------------------------------------------------------
*/
herr_t
-H5Pget_fapl_mirror(hid_t fapl_id, H5FD_mirror_fapl_t *fa_dst)
+H5Pget_fapl_mirror(hid_t fapl_id, H5FD_mirror_fapl_t *fa_dst /*out*/)
{
const H5FD_mirror_fapl_t *fa_src = NULL;
H5P_genplist_t * plist = NULL;
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", fapl_id, fa_dst);
+ H5TRACE2("e", "ix", fapl_id, fa_dst);
LOG_OP_CALL(FUNC);
@@ -1320,7 +1320,7 @@ H5Pset_fapl_mirror(hid_t fapl_id, H5FD_mirror_fapl_t *fa)
herr_t ret_value = FAIL;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", fapl_id, fa);
+ H5TRACE2("e", "i*#", fapl_id, fa);
LOG_OP_CALL(FUNC);
diff --git a/src/H5FDros3.c b/src/H5FDros3.c
index 06072b1..83e4315 100644
--- a/src/H5FDros3.c
+++ b/src/H5FDros3.c
@@ -394,7 +394,7 @@ H5Pset_fapl_ros3(hid_t fapl_id, H5FD_ros3_fapl_t *fa)
herr_t ret_value = FAIL;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", fapl_id, fa);
+ H5TRACE2("e", "i*#", fapl_id, fa);
HDassert(fa != NULL);
@@ -472,14 +472,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_fapl_ros3(hid_t fapl_id, H5FD_ros3_fapl_t *fa_dst)
+H5Pget_fapl_ros3(hid_t fapl_id, H5FD_ros3_fapl_t *fa_dst /*out*/)
{
const H5FD_ros3_fapl_t *fa_src = NULL;
H5P_genplist_t * plist = NULL;
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", fapl_id, fa_dst);
+ H5TRACE2("e", "ix", fapl_id, fa_dst);
#if ROS3_DEBUG
HDfprintf(stdout, "H5Pget_fapl_ros3() called.\n");
diff --git a/src/H5FDsplitter.c b/src/H5FDsplitter.c
index 4d6554c..09bb4f3 100644
--- a/src/H5FDsplitter.c
+++ b/src/H5FDsplitter.c
@@ -297,7 +297,7 @@ H5Pset_fapl_splitter(hid_t fapl_id, H5FD_splitter_vfd_config_t *vfd_config)
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Dr", fapl_id, vfd_config);
+ H5TRACE2("e", "i*#", fapl_id, vfd_config);
H5FD_SPLITTER_LOG_CALL(FUNC);
@@ -378,14 +378,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_fapl_splitter(hid_t fapl_id, H5FD_splitter_vfd_config_t *config)
+H5Pget_fapl_splitter(hid_t fapl_id, H5FD_splitter_vfd_config_t *config /*out*/)
{
const H5FD_splitter_fapl_t *fapl_ptr = NULL;
H5P_genplist_t * plist_ptr = NULL;
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Dr", fapl_id, config);
+ H5TRACE2("e", "ix", fapl_id, config);
H5FD_SPLITTER_LOG_CALL(FUNC);
diff --git a/src/H5Fdeprec.c b/src/H5Fdeprec.c
index bc0e6c5..f3cdb1f 100644
--- a/src/H5Fdeprec.c
+++ b/src/H5Fdeprec.c
@@ -87,7 +87,7 @@
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_info1(hid_t obj_id, H5F_info1_t *finfo)
+H5Fget_info1(hid_t obj_id, H5F_info1_t *finfo /*out*/)
{
H5VL_object_t *vol_obj = NULL;
H5I_type_t type;
@@ -95,7 +95,7 @@ H5Fget_info1(hid_t obj_id, H5F_info1_t *finfo)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", obj_id, finfo);
+ H5TRACE2("e", "ix", obj_id, finfo);
/* Check args */
if (!finfo)
diff --git a/src/H5Fmpi.c b/src/H5Fmpi.c
index d930c1f..4c4d649 100644
--- a/src/H5Fmpi.c
+++ b/src/H5Fmpi.c
@@ -336,13 +336,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Fget_mpi_atomicity(hid_t file_id, hbool_t *flag)
+H5Fget_mpi_atomicity(hid_t file_id, hbool_t *flag /*out*/)
{
H5VL_object_t *vol_obj = NULL;
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL);
- H5TRACE2("e", "i*b", file_id, flag);
+ H5TRACE2("e", "ix", file_id, flag);
/* Get the file object */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(file_id, H5I_FILE)))
diff --git a/src/H5G.c b/src/H5G.c
index 935e372..7d8ed39 100644
--- a/src/H5G.c
+++ b/src/H5G.c
@@ -384,7 +384,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Gget_info(hid_t loc_id, H5G_info_t *group_info)
+H5Gget_info(hid_t loc_id, H5G_info_t *group_info /*out*/)
{
H5VL_object_t * vol_obj;
H5I_type_t id_type; /* Type of ID */
@@ -392,7 +392,7 @@ H5Gget_info(hid_t loc_id, H5G_info_t *group_info)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", loc_id, group_info);
+ H5TRACE2("e", "ix", loc_id, group_info);
/* Check args */
id_type = H5I_get_type(loc_id);
@@ -427,14 +427,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *group_info, hid_t lapl_id)
+H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *group_info /*out*/, hid_t lapl_id)
{
H5VL_object_t * vol_obj;
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "i*s*xi", loc_id, name, group_info, lapl_id);
+ H5TRACE4("e", "i*sxi", loc_id, name, group_info, lapl_id);
/* Check args */
if (!name)
@@ -479,14 +479,14 @@ done:
*/
herr_t
H5Gget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type, H5_iter_order_t order,
- hsize_t n, H5G_info_t *group_info, hid_t lapl_id)
+ hsize_t n, H5G_info_t *group_info /*out*/, hid_t lapl_id)
{
H5VL_object_t * vol_obj;
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE7("e", "i*sIiIoh*xi", loc_id, group_name, idx_type, order, n, group_info, lapl_id);
+ H5TRACE7("e", "i*sIiIohxi", loc_id, group_name, idx_type, order, n, group_info, lapl_id);
/* Check args */
if (!group_name)
diff --git a/src/H5Gdeprec.c b/src/H5Gdeprec.c
index a731bcf..e72d225 100644
--- a/src/H5Gdeprec.c
+++ b/src/H5Gdeprec.c
@@ -724,7 +724,7 @@ done:
*-------------------------------------------------------------------------
*/
int
-H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize, char *buf)
+H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize, char *buf /*out*/)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
@@ -732,7 +732,7 @@ H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize, char *buf)
int ret_value; /* Return value */
FUNC_ENTER_API(-1)
- H5TRACE4("Is", "i*sz*s", loc_id, name, bufsize, buf);
+ H5TRACE4("Is", "i*szx", loc_id, name, bufsize, buf);
if (!name || !*name)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, -1, "no name specified")
@@ -800,7 +800,7 @@ H5Giterate(hid_t loc_id, const char *name, int *idx_p, H5G_iterate_t op, void *o
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*s*Isx*x", loc_id, name, idx_p, op, op_data);
+ H5TRACE5("e", "i*s*IsGi*x", loc_id, name, idx_p, op, op_data);
/* Check args */
if (!name || !*name)
@@ -858,7 +858,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs)
+H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs /*out*/)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5I_type_t id_type; /* Type of ID */
@@ -867,7 +867,7 @@ H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*h", loc_id, num_objs);
+ H5TRACE2("e", "ix", loc_id, num_objs);
/* Check args */
id_type = H5I_get_type(loc_id);
@@ -1131,14 +1131,14 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char *name, size_t size)
+H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char *name /*out*/, size_t size)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
ssize_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("Zs", "ih*sz", loc_id, idx, name, size);
+ H5TRACE4("Zs", "ihxz", loc_id, idx, name, size);
/* Set up collective metadata if appropriate */
if (H5CX_set_loc(loc_id) < 0)
diff --git a/src/H5Gname.c b/src/H5Gname.c
index 5fb1888..218b8d4 100644
--- a/src/H5Gname.c
+++ b/src/H5Gname.c
@@ -87,9 +87,6 @@ static int H5G__name_replace_cb(void *obj_ptr, hid_t obj_id, void *key);
/* Package Variables */
/*********************/
-/* Declare extern the PQ free list for the wrapped strings */
-H5FL_BLK_EXTERN(str_buf);
-
/*****************************/
/* Library Private Variables */
/*****************************/
@@ -274,11 +271,6 @@ done:
static H5RS_str_t *
H5G__build_fullpath(const char *prefix, const char *name)
{
- char * full_path; /* Full user path built */
- size_t orig_path_len; /* Original length of the path */
- size_t path_len; /* Length of the path */
- size_t name_len; /* Length of the name */
- unsigned need_sep; /* Flag to indicate if separator is needed */
H5RS_str_t *ret_value = NULL; /* Return value */
FUNC_ENTER_STATIC
@@ -287,32 +279,12 @@ H5G__build_fullpath(const char *prefix, const char *name)
HDassert(prefix);
HDassert(name);
- /* Get the length of the prefix */
- orig_path_len = path_len = HDstrlen(prefix);
-
- /* Determine if there is a trailing separator in the name */
- if (prefix[path_len - 1] == '/')
- need_sep = 0;
- else
- need_sep = 1;
-
- /* Add in the length needed for the '/' separator and the relative path */
- name_len = HDstrlen(name);
- path_len += name_len + need_sep;
-
- /* Allocate space for the path */
- if (NULL == (full_path = (char *)H5FL_BLK_MALLOC(str_buf, path_len + 1)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
-
- /* Build full path */
- HDstrncpy(full_path, prefix, orig_path_len + 1);
- if (need_sep)
- HDstrncat(full_path, "/", (size_t)1);
- HDstrncat(full_path, name, name_len);
-
- /* Create reference counted string for path */
- if (NULL == (ret_value = H5RS_own(full_path)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+ /* Create full path */
+ if (NULL == (ret_value = H5RS_create(prefix)))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTCREATE, NULL, "can't create ref-counted string")
+ if (prefix[HDstrlen(prefix) - 1] != '/')
+ H5RS_aputc(ret_value, '/'); /* Add separator, if the prefix doesn't end in one */
+ H5RS_acat(ret_value, name);
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -640,27 +612,23 @@ H5G__name_move_path(H5RS_str_t **path_r_ptr, const char *full_suffix, const char
path_len = HDstrlen(path);
if (full_suffix_len < path_len) {
const char *dst_suffix; /* Destination suffix that changes */
- size_t dst_suffix_len; /* Length of destination suffix */
const char *src_suffix; /* Source suffix that changes */
size_t path_prefix_len; /* Length of path prefix */
const char *path_prefix2; /* 2nd prefix for path */
size_t path_prefix2_len; /* Length of 2nd path prefix */
- const char *common_prefix; /* Common prefix for src & dst paths */
size_t common_prefix_len; /* Length of common prefix */
- char * new_path; /* Pointer to new path */
- size_t new_path_len; /* Length of new path */
+ H5RS_str_t *rs; /* Ref-counted string for new path */
- /* Compute path prefix before full suffix*/
+ /* Compute path prefix before full suffix */
path_prefix_len = path_len - full_suffix_len;
/* Determine the common prefix for src & dst paths */
- common_prefix = src_path;
common_prefix_len = 0;
/* Find first character that is different */
while (*(src_path + common_prefix_len) == *(dst_path + common_prefix_len))
common_prefix_len++;
/* Back up to previous '/' */
- while (*(common_prefix + common_prefix_len) != '/')
+ while (*(src_path + common_prefix_len) != '/')
common_prefix_len--;
/* Include '/' */
common_prefix_len++;
@@ -669,33 +637,28 @@ H5G__name_move_path(H5RS_str_t **path_r_ptr, const char *full_suffix, const char
src_suffix = src_path + (common_prefix_len - 1);
/* Determine destination suffix */
- dst_suffix = dst_path + (common_prefix_len - 1);
- dst_suffix_len = HDstrlen(dst_suffix);
+ dst_suffix = dst_path + (common_prefix_len - 1);
- /* Compute path prefix before src suffix*/
+ /* Compute path prefix before src suffix */
path_prefix2 = path;
path_prefix2_len = path_prefix_len - HDstrlen(src_suffix);
- /* Allocate space for the new path */
- new_path_len = path_prefix2_len + dst_suffix_len + full_suffix_len;
- if (NULL == (new_path = (char *)H5FL_BLK_MALLOC(str_buf, new_path_len + 1)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+ /* Allocate new ref-counted string */
+ if (NULL == (rs = H5RS_create(NULL)))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTCREATE, FAIL, "can't create ref-counted string")
/* Create the new path */
- if (path_prefix2_len > 0) {
- HDstrncpy(new_path, path_prefix2, path_prefix2_len + 1);
- HDstrncpy(new_path + path_prefix2_len, dst_suffix, dst_suffix_len + 1);
- } /* end if */
- else
- HDstrncpy(new_path, dst_suffix, dst_suffix_len + 1);
+ if (path_prefix2_len > 0)
+ H5RS_ancat(rs, path_prefix2, path_prefix2_len);
+ H5RS_acat(rs, dst_suffix);
if (full_suffix_len > 0)
- HDstrncat(new_path, full_suffix, full_suffix_len);
+ H5RS_acat(rs, full_suffix);
/* Release previous path */
H5RS_decr(*path_r_ptr);
/* Take ownership of the new full path */
- *path_r_ptr = H5RS_own(new_path);
+ *path_r_ptr = rs;
} /* end if */
done:
@@ -812,33 +775,24 @@ H5G__name_replace_cb(void *obj_ptr, hid_t obj_id, void *key)
case H5G_NAME_MOUNT:
/* Check if object is in child mount hier. */
if (obj_in_child) {
- const char *full_path; /* Full path of current object */
- const char *src_path; /* Full path of source object */
- size_t src_path_len; /* Length of source full path */
- char * new_full_path; /* New full path of object */
- size_t new_full_len; /* Length of new full path */
+ const char *full_path; /* Full path of current object */
+ const char *src_path; /* Full path of source object */
+ H5RS_str_t *rs; /* Ref-counted string for new path */
/* Get pointers to paths of interest */
- full_path = H5RS_get_str(obj_path->full_path_r);
- src_path = H5RS_get_str(names->src_full_path_r);
- src_path_len = HDstrlen(src_path);
-
- /* Build new full path */
-
- /* Allocate space for the new full path */
- new_full_len = src_path_len + HDstrlen(full_path);
- if (NULL == (new_full_path = (char *)H5FL_BLK_MALLOC(str_buf, new_full_len + 1)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+ full_path = H5RS_get_str(obj_path->full_path_r);
+ src_path = H5RS_get_str(names->src_full_path_r);
- /* Create the new full path */
- HDstrncpy(new_full_path, src_path, src_path_len + 1);
- HDstrncat(new_full_path, full_path, new_full_len);
+ /* Create new full path */
+ if (NULL == (rs = H5RS_create(src_path)))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTCREATE, FAIL, "can't create ref-counted string")
+ H5RS_acat(rs, full_path);
/* Release previous full path */
H5RS_decr(obj_path->full_path_r);
/* Take ownership of the new full path */
- obj_path->full_path_r = H5RS_own(new_full_path);
+ obj_path->full_path_r = rs;
} /* end if */
/* Object must be in parent mount file hier. */
else {
@@ -858,36 +812,30 @@ H5G__name_replace_cb(void *obj_ptr, hid_t obj_id, void *key)
*/
case H5G_NAME_UNMOUNT:
if (obj_in_child) {
- const char *full_path; /* Full path of current object */
- const char *full_suffix; /* Full path after source path */
- size_t full_suffix_len; /* Length of full path after source path */
- const char *src_path; /* Full path of source object */
- char * new_full_path; /* New full path of object */
+ const char *full_path; /* Full path of current object */
+ const char *full_suffix; /* Full path after source path */
+ const char *src_path; /* Full path of source object */
+ H5RS_str_t *rs; /* Ref-counted string for new path */
/* Get pointers to paths of interest */
full_path = H5RS_get_str(obj_path->full_path_r);
src_path = H5RS_get_str(names->src_full_path_r);
/* Construct full path suffix */
- full_suffix = full_path + HDstrlen(src_path);
- full_suffix_len = HDstrlen(full_suffix);
-
- /* Build new full path */
+ full_suffix = full_path + HDstrlen(src_path);
- /* Create the new full path */
- if (NULL == (new_full_path = (char *)H5FL_BLK_MALLOC(str_buf, full_suffix_len + 1)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
- HDstrncpy(new_full_path, full_suffix, full_suffix_len + 1);
+ /* Create new full path suffix */
+ if (NULL == (rs = H5RS_create(full_suffix)))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTCREATE, FAIL, "can't create ref-counted string")
/* Release previous full path */
H5RS_decr(obj_path->full_path_r);
/* Take ownership of the new full path */
- obj_path->full_path_r = H5RS_own(new_full_path);
+ obj_path->full_path_r = rs;
/* Check if the object's user path should be invalidated */
- if (obj_path->user_path_r &&
- HDstrlen(new_full_path) < (size_t)H5RS_len(obj_path->user_path_r)) {
+ if (obj_path->user_path_r && H5RS_len(rs) < H5RS_len(obj_path->user_path_r)) {
/* Free user path */
H5RS_decr(obj_path->user_path_r);
obj_path->user_path_r = NULL;
@@ -922,53 +870,42 @@ H5G__name_replace_cb(void *obj_ptr, hid_t obj_id, void *key)
case H5G_NAME_MOVE: /* Link move case, check for relative names case */
/* Check if the src object moved is in the current object's path */
if (H5G__common_path(obj_path->full_path_r, names->src_full_path_r)) {
- const char *full_path; /* Full path of current object */
- const char *full_suffix; /* Suffix of full path, after src_path */
- size_t full_suffix_len; /* Length of suffix of full path after src_path*/
- char * new_full_path; /* New full path of object */
- size_t new_full_len; /* Length of new full path */
- const char *src_path; /* Full path of source object */
- const char *dst_path; /* Full path of destination object */
- size_t dst_path_len; /* Length of destination's full path */
+ const char *full_path; /* Full path of current object */
+ const char *full_suffix; /* Suffix of full path, after src_path */
+ const char *src_path; /* Full path of source object */
+ const char *dst_path; /* Full path of destination object */
+ H5RS_str_t *rs; /* Ref-counted string for new path */
/* Sanity check */
HDassert(names->dst_full_path_r);
/* Get pointers to paths of interest */
- full_path = H5RS_get_str(obj_path->full_path_r);
- src_path = H5RS_get_str(names->src_full_path_r);
- dst_path = H5RS_get_str(names->dst_full_path_r);
- dst_path_len = HDstrlen(dst_path);
+ full_path = H5RS_get_str(obj_path->full_path_r);
+ src_path = H5RS_get_str(names->src_full_path_r);
+ dst_path = H5RS_get_str(names->dst_full_path_r);
/* Make certain that the source and destination names are full (not relative) paths */
HDassert(*src_path == '/');
HDassert(*dst_path == '/');
/* Get pointer to "full suffix" */
- full_suffix = full_path + HDstrlen(src_path);
- full_suffix_len = HDstrlen(full_suffix);
+ full_suffix = full_path + HDstrlen(src_path);
/* Update the user path, if one exists */
if (obj_path->user_path_r)
if (H5G__name_move_path(&(obj_path->user_path_r), full_suffix, src_path, dst_path) < 0)
HGOTO_ERROR(H5E_SYM, H5E_PATH, FAIL, "can't build user path name")
- /* Build new full path */
-
- /* Allocate space for the new full path */
- new_full_len = dst_path_len + full_suffix_len;
- if (NULL == (new_full_path = (char *)H5FL_BLK_MALLOC(str_buf, new_full_len + 1)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
-
- /* Create the new full path */
- HDstrncpy(new_full_path, dst_path, dst_path_len + 1);
- HDstrncat(new_full_path, full_suffix, full_suffix_len);
+ /* Create new full path */
+ if (NULL == (rs = H5RS_create(dst_path)))
+ HGOTO_ERROR(H5E_SYM, H5E_CANTCREATE, FAIL, "can't create ref-counted string")
+ H5RS_acat(rs, full_suffix);
/* Release previous full path */
H5RS_decr(obj_path->full_path_r);
/* Take ownership of the new full path */
- obj_path->full_path_r = H5RS_own(new_full_path);
+ obj_path->full_path_r = rs;
} /* end if */
break;
diff --git a/src/H5I.c b/src/H5I.c
index 0dcad8e..fba9fc2 100644
--- a/src/H5I.c
+++ b/src/H5I.c
@@ -98,7 +98,7 @@ H5Iregister_type(size_t H5_ATTR_DEBUG_API_USED hash_size, unsigned reserved, H5I
H5I_type_t ret_value = H5I_BADID; /* Return value */
FUNC_ENTER_API(H5I_BADID)
- H5TRACE3("It", "zIux", hash_size, reserved, free_func);
+ H5TRACE3("It", "zIuIf", hash_size, reserved, free_func);
/* Generate a new H5I_type_t value */
@@ -714,7 +714,7 @@ H5Isearch(H5I_type_t type, H5I_search_func_t func, void *key)
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API(NULL)
- H5TRACE3("*x", "Itx*x", type, func, key);
+ H5TRACE3("*x", "ItIS*x", type, func, key);
/* Check arguments */
if (H5I_IS_LIB_TYPE(type))
@@ -806,7 +806,7 @@ H5Iiterate(H5I_type_t type, H5I_iterate_func_t op, void *op_data)
herr_t ret_value = FAIL; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "Itx*x", type, op, op_data);
+ H5TRACE3("e", "ItII*x", type, op, op_data);
/* Set up udata struct */
int_udata.op = op;
diff --git a/src/H5L.c b/src/H5L.c
index 0fe632e..03f7163 100644
--- a/src/H5L.c
+++ b/src/H5L.c
@@ -1078,7 +1078,7 @@ H5Lregister(const H5L_class_t *cls)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE1("e", "*x", cls);
+ H5TRACE1("e", "*#", cls);
/* Check args */
if (cls == NULL)
@@ -1279,7 +1279,7 @@ H5Literate2(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE6("e", "iIiIo*hx*x", group_id, idx_type, order, idx_p, op, op_data);
+ H5TRACE6("e", "iIiIo*hLI*x", group_id, idx_type, order, idx_p, op, op_data);
/* Check arguments */
id_type = H5I_get_type(group_id);
@@ -1341,7 +1341,7 @@ H5Literate_by_name2(hid_t loc_id, const char *group_name, H5_index_t idx_type, H
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "i*sIiIo*hx*xi", loc_id, group_name, idx_type, order, idx_p, op, op_data, lapl_id);
+ H5TRACE8("e", "i*sIiIo*hLI*xi", loc_id, group_name, idx_type, order, idx_p, op, op_data, lapl_id);
/* Check arguments */
if (!group_name)
@@ -1415,7 +1415,7 @@ H5Lvisit2(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, H5L_iterat
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "iIiIox*x", group_id, idx_type, order, op, op_data);
+ H5TRACE5("e", "iIiIoLI*x", group_id, idx_type, order, op, op_data);
/* Check args */
id_type = H5I_get_type(group_id);
@@ -1482,7 +1482,7 @@ H5Lvisit_by_name2(hid_t loc_id, const char *group_name, H5_index_t idx_type, H5_
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE7("e", "i*sIiIox*xi", loc_id, group_name, idx_type, order, op, op_data, lapl_id);
+ H5TRACE7("e", "i*sIiIoLI*xi", loc_id, group_name, idx_type, order, op, op_data, lapl_id);
/* Check args */
if (!group_name)
diff --git a/src/H5Ldeprec.c b/src/H5Ldeprec.c
index 843469f..2adc1fe 100644
--- a/src/H5Ldeprec.c
+++ b/src/H5Ldeprec.c
@@ -149,7 +149,7 @@ H5Literate1(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, hsize_t
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE6("e", "iIiIo*hx*x", group_id, idx_type, order, idx_p, op, op_data);
+ H5TRACE6("e", "iIiIo*hLi*x", group_id, idx_type, order, idx_p, op, op_data);
/* Check arguments */
id_type = H5I_get_type(group_id);
@@ -226,7 +226,7 @@ H5Literate_by_name1(hid_t loc_id, const char *group_name, H5_index_t idx_type, H
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "i*sIiIo*hx*xi", loc_id, group_name, idx_type, order, idx_p, op, op_data, lapl_id);
+ H5TRACE8("e", "i*sIiIo*hLi*xi", loc_id, group_name, idx_type, order, idx_p, op, op_data, lapl_id);
/* Check arguments */
if (!group_name)
@@ -487,7 +487,7 @@ H5Lvisit1(hid_t group_id, H5_index_t idx_type, H5_iter_order_t order, H5L_iterat
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "iIiIox*x", group_id, idx_type, order, op, op_data);
+ H5TRACE5("e", "iIiIoLi*x", group_id, idx_type, order, op, op_data);
/* Check args */
id_type = H5I_get_type(group_id);
@@ -570,7 +570,7 @@ H5Lvisit_by_name1(hid_t loc_id, const char *group_name, H5_index_t idx_type, H5_
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE7("e", "i*sIiIox*xi", loc_id, group_name, idx_type, order, op, op_data, lapl_id);
+ H5TRACE7("e", "i*sIiIoLi*xi", loc_id, group_name, idx_type, order, op, op_data, lapl_id);
/* Check args */
if (!group_name)
diff --git a/src/H5M.c b/src/H5M.c
index f804183..782b370 100644
--- a/src/H5M.c
+++ b/src/H5M.c
@@ -617,13 +617,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Mget_count(hid_t map_id, hsize_t *count, hid_t dxpl_id)
+H5Mget_count(hid_t map_id, hsize_t *count /*out*/, hid_t dxpl_id)
{
H5VL_object_t *vol_obj; /* Map structure */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(H5I_INVALID_HID)
- H5TRACE3("e", "i*hi", map_id, count, dxpl_id);
+ H5TRACE3("e", "ixi", map_id, count, dxpl_id);
/* Check args */
if (NULL == (vol_obj = (H5VL_object_t *)H5I_object_verify(map_id, H5I_MAP)))
@@ -844,7 +844,7 @@ H5Miterate(hid_t map_id, hsize_t *idx, hid_t key_mem_type_id, H5M_iterate_t op,
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE6("e", "i*hix*xi", map_id, idx, key_mem_type_id, op, op_data, dxpl_id);
+ H5TRACE6("e", "i*hiMI*xi", map_id, idx, key_mem_type_id, op, op_data, dxpl_id);
/* Check arguments */
if (key_mem_type_id < 0)
@@ -918,7 +918,7 @@ H5Miterate_by_name(hid_t loc_id, const char *map_name, hsize_t *idx, hid_t key_m
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "i*s*hix*xii", loc_id, map_name, idx, key_mem_type_id, op, op_data, dxpl_id, lapl_id);
+ H5TRACE8("e", "i*s*hiMI*xii", loc_id, map_name, idx, key_mem_type_id, op, op_data, dxpl_id, lapl_id);
/* Check arguments */
if (!map_name)
diff --git a/src/H5O.c b/src/H5O.c
index e5d794c..29b9b4c 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -522,14 +522,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Oget_info3(hid_t loc_id, H5O_info2_t *oinfo, unsigned fields)
+H5Oget_info3(hid_t loc_id, H5O_info2_t *oinfo /*out*/, unsigned fields)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*xIu", loc_id, oinfo, fields);
+ H5TRACE3("e", "ixIu", loc_id, oinfo, fields);
/* Check args */
if (!oinfo)
@@ -567,14 +567,15 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Oget_info_by_name3(hid_t loc_id, const char *name, H5O_info2_t *oinfo, unsigned fields, hid_t lapl_id)
+H5Oget_info_by_name3(hid_t loc_id, const char *name, H5O_info2_t *oinfo /*out*/, unsigned fields,
+ hid_t lapl_id)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*s*xIui", loc_id, name, oinfo, fields, lapl_id);
+ H5TRACE5("e", "i*sxIui", loc_id, name, oinfo, fields, lapl_id);
/* Check args */
if (!name)
@@ -625,14 +626,14 @@ done:
*/
herr_t
H5Oget_info_by_idx3(hid_t loc_id, const char *group_name, H5_index_t idx_type, H5_iter_order_t order,
- hsize_t n, H5O_info2_t *oinfo, unsigned fields, hid_t lapl_id)
+ hsize_t n, H5O_info2_t *oinfo /*out*/, unsigned fields, hid_t lapl_id)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "i*sIiIoh*xIui", loc_id, group_name, idx_type, order, n, oinfo, fields, lapl_id);
+ H5TRACE8("e", "i*sIiIohxIui", loc_id, group_name, idx_type, order, n, oinfo, fields, lapl_id);
/* Check args */
if (!group_name || !*group_name)
@@ -684,14 +685,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Oget_native_info(hid_t loc_id, H5O_native_info_t *oinfo, unsigned fields)
+H5Oget_native_info(hid_t loc_id, H5O_native_info_t *oinfo /*out*/, unsigned fields)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*xIu", loc_id, oinfo, fields);
+ H5TRACE3("e", "ixIu", loc_id, oinfo, fields);
/* Check args */
if (!oinfo)
@@ -729,7 +730,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Oget_native_info_by_name(hid_t loc_id, const char *name, H5O_native_info_t *oinfo, unsigned fields,
+H5Oget_native_info_by_name(hid_t loc_id, const char *name, H5O_native_info_t *oinfo /*out*/, unsigned fields,
hid_t lapl_id)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
@@ -737,7 +738,7 @@ H5Oget_native_info_by_name(hid_t loc_id, const char *name, H5O_native_info_t *oi
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*s*xIui", loc_id, name, oinfo, fields, lapl_id);
+ H5TRACE5("e", "i*sxIui", loc_id, name, oinfo, fields, lapl_id);
/* Check args */
if (!name)
@@ -788,14 +789,14 @@ done:
*/
herr_t
H5Oget_native_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type, H5_iter_order_t order,
- hsize_t n, H5O_native_info_t *oinfo, unsigned fields, hid_t lapl_id)
+ hsize_t n, H5O_native_info_t *oinfo /*out*/, unsigned fields, hid_t lapl_id)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "i*sIiIoh*xIui", loc_id, group_name, idx_type, order, n, oinfo, fields, lapl_id);
+ H5TRACE8("e", "i*sIiIohxIui", loc_id, group_name, idx_type, order, n, oinfo, fields, lapl_id);
/* Check args */
if (!group_name || !*group_name)
@@ -953,14 +954,14 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Oget_comment(hid_t obj_id, char *comment, size_t bufsize)
+H5Oget_comment(hid_t obj_id, char *comment /*out*/, size_t bufsize)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
ssize_t ret_value = -1; /* Return value */
FUNC_ENTER_API((-1))
- H5TRACE3("Zs", "i*sz", obj_id, comment, bufsize);
+ H5TRACE3("Zs", "ixz", obj_id, comment, bufsize);
/* Get the object */
if (NULL == (vol_obj = H5VL_vol_object(obj_id)))
@@ -996,14 +997,14 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Oget_comment_by_name(hid_t loc_id, const char *name, char *comment, size_t bufsize, hid_t lapl_id)
+H5Oget_comment_by_name(hid_t loc_id, const char *name, char *comment /*out*/, size_t bufsize, hid_t lapl_id)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
ssize_t ret_value = -1; /* Return value */
FUNC_ENTER_API((-1))
- H5TRACE5("Zs", "i*s*szi", loc_id, name, comment, bufsize, lapl_id);
+ H5TRACE5("Zs", "i*sxzi", loc_id, name, comment, bufsize, lapl_id);
/* Check args */
if (!name || !*name)
@@ -1076,7 +1077,7 @@ H5Ovisit3(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate2
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE6("e", "iIiIox*xIu", obj_id, idx_type, order, op, op_data, fields);
+ H5TRACE6("e", "iIiIoOI*xIu", obj_id, idx_type, order, op, op_data, fields);
/* Check args */
if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N)
@@ -1150,7 +1151,7 @@ H5Ovisit_by_name3(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_it
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "i*sIiIox*xIui", loc_id, obj_name, idx_type, order, op, op_data, fields, lapl_id);
+ H5TRACE8("e", "i*sIiIoOI*xIui", loc_id, obj_name, idx_type, order, op, op_data, fields, lapl_id);
/* Check args */
if (!obj_name)
diff --git a/src/H5Odeprec.c b/src/H5Odeprec.c
index 1838234..7d1b721 100644
--- a/src/H5Odeprec.c
+++ b/src/H5Odeprec.c
@@ -385,14 +385,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Oget_info1(hid_t loc_id, H5O_info1_t *oinfo)
+H5Oget_info1(hid_t loc_id, H5O_info1_t *oinfo /*out*/)
{
H5VL_object_t * vol_obj = NULL; /* Object of loc_id */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", loc_id, oinfo);
+ H5TRACE2("e", "ix", loc_id, oinfo);
/* Check args */
if (!oinfo)
@@ -425,14 +425,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Oget_info_by_name1(hid_t loc_id, const char *name, H5O_info1_t *oinfo, hid_t lapl_id)
+H5Oget_info_by_name1(hid_t loc_id, const char *name, H5O_info1_t *oinfo /*out*/, hid_t lapl_id)
{
H5VL_object_t * vol_obj = NULL; /* object of loc_id */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "i*s*xi", loc_id, name, oinfo, lapl_id);
+ H5TRACE4("e", "i*sxi", loc_id, name, oinfo, lapl_id);
/* Check args */
if (!name)
@@ -480,14 +480,14 @@ done:
*/
herr_t
H5Oget_info_by_idx1(hid_t loc_id, const char *group_name, H5_index_t idx_type, H5_iter_order_t order,
- hsize_t n, H5O_info1_t *oinfo, hid_t lapl_id)
+ hsize_t n, H5O_info1_t *oinfo /*out*/, hid_t lapl_id)
{
H5VL_object_t * vol_obj = NULL; /* object of loc_id */
H5VL_loc_params_t loc_params;
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE7("e", "i*sIiIoh*xi", loc_id, group_name, idx_type, order, n, oinfo, lapl_id);
+ H5TRACE7("e", "i*sIiIohxi", loc_id, group_name, idx_type, order, n, oinfo, lapl_id);
/* Check args */
if (!group_name || !*group_name)
@@ -538,7 +538,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Oget_info2(hid_t loc_id, H5O_info1_t *oinfo, unsigned fields)
+H5Oget_info2(hid_t loc_id, H5O_info1_t *oinfo /*out*/, unsigned fields)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
@@ -546,7 +546,7 @@ H5Oget_info2(hid_t loc_id, H5O_info1_t *oinfo, unsigned fields)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*xIu", loc_id, oinfo, fields);
+ H5TRACE3("e", "ixIu", loc_id, oinfo, fields);
/* Check args */
if (!oinfo)
@@ -593,7 +593,8 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Oget_info_by_name2(hid_t loc_id, const char *name, H5O_info1_t *oinfo, unsigned fields, hid_t lapl_id)
+H5Oget_info_by_name2(hid_t loc_id, const char *name, H5O_info1_t *oinfo /*out*/, unsigned fields,
+ hid_t lapl_id)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
@@ -601,7 +602,7 @@ H5Oget_info_by_name2(hid_t loc_id, const char *name, H5O_info1_t *oinfo, unsigne
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*s*xIui", loc_id, name, oinfo, fields, lapl_id);
+ H5TRACE5("e", "i*sxIui", loc_id, name, oinfo, fields, lapl_id);
/* Check args */
if (!name)
@@ -661,7 +662,7 @@ done:
*/
herr_t
H5Oget_info_by_idx2(hid_t loc_id, const char *group_name, H5_index_t idx_type, H5_iter_order_t order,
- hsize_t n, H5O_info1_t *oinfo, unsigned fields, hid_t lapl_id)
+ hsize_t n, H5O_info1_t *oinfo /*out*/, unsigned fields, hid_t lapl_id)
{
H5VL_object_t * vol_obj; /* Object of loc_id */
H5VL_loc_params_t loc_params;
@@ -669,7 +670,7 @@ H5Oget_info_by_idx2(hid_t loc_id, const char *group_name, H5_index_t idx_type, H
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "i*sIiIoh*xIui", loc_id, group_name, idx_type, order, n, oinfo, fields, lapl_id);
+ H5TRACE8("e", "i*sIiIohxIui", loc_id, group_name, idx_type, order, n, oinfo, fields, lapl_id);
/* Check args */
if (!group_name || !*group_name)
@@ -756,7 +757,7 @@ H5Ovisit1(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate1
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "iIiIox*x", obj_id, idx_type, order, op, op_data);
+ H5TRACE5("e", "iIiIoOi*x", obj_id, idx_type, order, op, op_data);
/* Check args */
if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N)
@@ -831,7 +832,7 @@ H5Ovisit_by_name1(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_it
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE7("e", "i*sIiIox*xi", loc_id, obj_name, idx_type, order, op, op_data, lapl_id);
+ H5TRACE7("e", "i*sIiIoOi*xi", loc_id, obj_name, idx_type, order, op, op_data, lapl_id);
/* Check args */
if (!obj_name)
@@ -920,7 +921,7 @@ H5Ovisit2(hid_t obj_id, H5_index_t idx_type, H5_iter_order_t order, H5O_iterate1
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE6("e", "iIiIox*xIu", obj_id, idx_type, order, op, op_data, fields);
+ H5TRACE6("e", "iIiIoOi*xIu", obj_id, idx_type, order, op, op_data, fields);
/* Check args */
if (idx_type <= H5_INDEX_UNKNOWN || idx_type >= H5_INDEX_N)
@@ -1009,7 +1010,7 @@ H5Ovisit_by_name2(hid_t loc_id, const char *obj_name, H5_index_t idx_type, H5_it
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "i*sIiIox*xIui", loc_id, obj_name, idx_type, order, op, op_data, fields, lapl_id);
+ H5TRACE8("e", "i*sIiIoOi*xIui", loc_id, obj_name, idx_type, order, op, op_data, fields, lapl_id);
/* Check args */
if (!obj_name)
diff --git a/src/H5P.c b/src/H5P.c
index 3ccdfd4..f361d16 100644
--- a/src/H5P.c
+++ b/src/H5P.c
@@ -173,7 +173,7 @@ H5Pcreate_class(hid_t parent, const char *name, H5P_cls_create_func_t cls_create
hid_t ret_value = H5I_INVALID_HID; /* Return value */
FUNC_ENTER_API(H5I_INVALID_HID)
- H5TRACE8("i", "i*sx*xx*xx*x", parent, name, cls_create, create_data, cls_copy, copy_data, cls_close,
+ H5TRACE8("i", "i*sPc*xPo*xPl*x", parent, name, cls_create, create_data, cls_copy, copy_data, cls_close,
close_data);
/* Check arguments. */
@@ -414,8 +414,8 @@ H5Pregister2(hid_t cls_id, const char *name, size_t size, void *def_value, H5P_p
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE11("e", "i*sz*xxxxxxxx", cls_id, name, size, def_value, prp_create, prp_set, prp_get, prp_delete,
- prp_copy, prp_cmp, prp_close);
+ H5TRACE11("e", "i*sz*xPCPSPGPDPOPMPL", cls_id, name, size, def_value, prp_create, prp_set, prp_get,
+ prp_delete, prp_copy, prp_cmp, prp_close);
/* Check arguments. */
if (NULL == (pclass = (H5P_genclass_t *)H5I_object_verify(cls_id, H5I_GENPROP_CLS)))
@@ -598,7 +598,7 @@ H5Pinsert2(hid_t plist_id, const char *name, size_t size, void *value, H5P_prp_s
herr_t ret_value; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE10("e", "i*sz*xxxxxxx", plist_id, name, size, value, prp_set, prp_get, prp_delete, prp_copy,
+ H5TRACE10("e", "i*sz*xPSPGPDPOPMPL", plist_id, name, size, value, prp_set, prp_get, prp_delete, prp_copy,
prp_cmp, prp_close);
/* Check arguments. */
@@ -756,14 +756,14 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5Pget_size(hid_t id, const char *name, size_t *size)
+H5Pget_size(hid_t id, const char *name, size_t *size /*out*/)
{
H5P_genclass_t *pclass; /* Property class to query */
H5P_genplist_t *plist; /* Property list to query */
herr_t ret_value; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*s*z", id, name, size);
+ H5TRACE3("e", "i*sx", id, name, size);
/* Check arguments. */
if (H5I_GENPROP_LST != H5I_get_type(id) && H5I_GENPROP_CLS != H5I_get_type(id))
@@ -961,14 +961,14 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5Pget_nprops(hid_t id, size_t *nprops)
+H5Pget_nprops(hid_t id, size_t *nprops /*out*/)
{
H5P_genplist_t *plist; /* Property list to query */
H5P_genclass_t *pclass; /* Property class to query */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*z", id, nprops);
+ H5TRACE2("e", "ix", id, nprops);
/* Check arguments. */
if (H5I_GENPROP_LST != H5I_get_type(id) && H5I_GENPROP_CLS != H5I_get_type(id))
@@ -1199,7 +1199,7 @@ H5Piterate(hid_t id, int *idx, H5P_iterate_t iter_func, void *iter_data)
int ret_value; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("Is", "i*Isx*x", id, idx, iter_func, iter_data);
+ H5TRACE4("Is", "i*IsPi*x", id, idx, iter_func, iter_data);
/* Check arguments. */
if (H5I_GENPROP_LST != H5I_get_type(id) && H5I_GENPROP_CLS != H5I_get_type(id))
@@ -1262,13 +1262,13 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5Pget(hid_t plist_id, const char *name, void *value)
+H5Pget(hid_t plist_id, const char *name, void *value /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*s*x", plist_id, name, value);
+ H5TRACE3("e", "i*sx", plist_id, name, value);
/* Check arguments. */
if (NULL == (plist = (H5P_genplist_t *)H5I_object_verify(plist_id, H5I_GENPROP_LST)))
diff --git a/src/H5PL.c b/src/H5PL.c
index 57c9a12..f43aecc 100644
--- a/src/H5PL.c
+++ b/src/H5PL.c
@@ -104,12 +104,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5PLget_loading_state(unsigned int *plugin_control_mask)
+H5PLget_loading_state(unsigned *plugin_control_mask /*out*/)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE1("e", "*Iu", plugin_control_mask);
+ H5TRACE1("e", "x", plugin_control_mask);
if (NULL == plugin_control_mask)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "plugin_control_mask parameter cannot be NULL")
diff --git a/src/H5Pdapl.c b/src/H5Pdapl.c
index 057509e..cf62bce 100644
--- a/src/H5Pdapl.c
+++ b/src/H5Pdapl.c
@@ -804,14 +804,15 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_chunk_cache(hid_t dapl_id, size_t *rdcc_nslots, size_t *rdcc_nbytes, double *rdcc_w0)
+H5Pget_chunk_cache(hid_t dapl_id, size_t *rdcc_nslots /*out*/, size_t *rdcc_nbytes /*out*/,
+ double *rdcc_w0 /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
H5P_genplist_t *def_plist; /* Default file access property list */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "i*z*z*d", dapl_id, rdcc_nslots, rdcc_nbytes, rdcc_w0);
+ H5TRACE4("e", "ixxx", dapl_id, rdcc_nslots, rdcc_nbytes, rdcc_w0);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(dapl_id, H5P_DATASET_ACCESS)))
@@ -1103,13 +1104,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_virtual_view(hid_t plist_id, H5D_vds_view_t *view)
+H5Pget_virtual_view(hid_t plist_id, H5D_vds_view_t *view /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Dv", plist_id, view);
+ H5TRACE2("e", "ix", plist_id, view);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_ACCESS)))
@@ -1246,13 +1247,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_virtual_printf_gap(hid_t plist_id, hsize_t *gap_size)
+H5Pget_virtual_printf_gap(hid_t plist_id, hsize_t *gap_size /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*h", plist_id, gap_size);
+ H5TRACE2("e", "ix", plist_id, gap_size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_ACCESS)))
@@ -1292,7 +1293,7 @@ H5Pset_append_flush(hid_t plist_id, unsigned ndims, const hsize_t *boundary, H5D
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "iIu*hx*x", plist_id, ndims, boundary, func, udata);
+ H5TRACE5("e", "iIu*hDA*x", plist_id, ndims, boundary, func, udata);
/* Check arguments */
if (0 == ndims)
@@ -1345,7 +1346,8 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_append_flush(hid_t plist_id, unsigned ndims, hsize_t boundary[], H5D_append_cb_t *func, void **udata)
+H5Pget_append_flush(hid_t plist_id, unsigned ndims, hsize_t boundary[], H5D_append_cb_t *func /*out*/,
+ void **udata /*out*/)
{
H5P_genplist_t * plist; /* property list pointer */
H5D_append_flush_t info;
@@ -1353,7 +1355,7 @@ H5Pget_append_flush(hid_t plist_id, unsigned ndims, hsize_t boundary[], H5D_appe
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "iIu*h*x**x", plist_id, ndims, boundary, func, udata);
+ H5TRACE5("e", "iIu*hxx", plist_id, ndims, boundary, func, udata);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_ACCESS)))
@@ -1428,7 +1430,7 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Pget_efile_prefix(hid_t plist_id, char *prefix, size_t size)
+H5Pget_efile_prefix(hid_t plist_id, char *prefix /*out*/, size_t size)
{
H5P_genplist_t *plist; /* Property list pointer */
char * my_prefix; /* Library's copy of the prefix */
@@ -1436,7 +1438,7 @@ H5Pget_efile_prefix(hid_t plist_id, char *prefix, size_t size)
ssize_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("Zs", "i*sz", plist_id, prefix, size);
+ H5TRACE3("Zs", "ixz", plist_id, prefix, size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_ACCESS)))
@@ -1518,7 +1520,7 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Pget_virtual_prefix(hid_t plist_id, char *prefix, size_t size)
+H5Pget_virtual_prefix(hid_t plist_id, char *prefix /*out*/, size_t size)
{
H5P_genplist_t *plist; /* Property list pointer */
char * my_prefix; /* Library's copy of the prefix */
@@ -1526,7 +1528,7 @@ H5Pget_virtual_prefix(hid_t plist_id, char *prefix, size_t size)
ssize_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("Zs", "i*sz", plist_id, prefix, size);
+ H5TRACE3("Zs", "ixz", plist_id, prefix, size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_ACCESS)))
diff --git a/src/H5Pdcpl.c b/src/H5Pdcpl.c
index 418d5e3..685313e 100644
--- a/src/H5Pdcpl.c
+++ b/src/H5Pdcpl.c
@@ -2773,14 +2773,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_chunk_opts(hid_t plist_id, unsigned *options)
+H5Pget_chunk_opts(hid_t plist_id, unsigned *options /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
H5O_layout_t layout; /* Layout information for setting chunk info */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Iu", plist_id, options);
+ H5TRACE2("e", "ix", plist_id, options);
#ifndef H5_HAVE_C99_DESIGNATED_INITIALIZER
/* If the compiler doesn't support C99 designated initializers, check if
@@ -3800,14 +3800,14 @@ done:
*-----------------------------------------------------------------------------
*/
herr_t
-H5Pget_dset_no_attrs_hint(hid_t dcpl_id, hbool_t *minimize)
+H5Pget_dset_no_attrs_hint(hid_t dcpl_id, hbool_t *minimize /*out*/)
{
hbool_t setting = FALSE;
H5P_genplist_t *plist = NULL;
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*b", dcpl_id, minimize);
+ H5TRACE2("e", "ix", dcpl_id, minimize);
if (NULL == minimize)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "receiving pointer cannot be NULL")
diff --git a/src/H5Pdeprec.c b/src/H5Pdeprec.c
index d80c153..d44cd5c 100644
--- a/src/H5Pdeprec.c
+++ b/src/H5Pdeprec.c
@@ -220,8 +220,8 @@ H5Pregister1(hid_t cls_id, const char *name, size_t size, void *def_value, H5P_p
herr_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE10("e", "i*sz*xxxxxxx", cls_id, name, size, def_value, prp_create, prp_set, prp_get, prp_delete,
- prp_copy, prp_close);
+ H5TRACE10("e", "i*sz*xPCPSPGPDPOPL", cls_id, name, size, def_value, prp_create, prp_set, prp_get,
+ prp_delete, prp_copy, prp_close);
/* Check arguments. */
if (NULL == (pclass = (H5P_genclass_t *)H5I_object_verify(cls_id, H5I_GENPROP_CLS)))
@@ -404,7 +404,7 @@ H5Pinsert1(hid_t plist_id, const char *name, size_t size, void *value, H5P_prp_s
herr_t ret_value; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE9("e", "i*sz*xxxxxx", plist_id, name, size, value, prp_set, prp_get, prp_delete, prp_copy,
+ H5TRACE9("e", "i*sz*xPSPGPDPOPL", plist_id, name, size, value, prp_set, prp_get, prp_delete, prp_copy,
prp_close);
/* Check arguments. */
@@ -545,7 +545,7 @@ H5Pset_file_space(hid_t plist_id, H5F_file_space_type_t strategy, hsize_t thresh
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "iFfh", plist_id, strategy, threshold);
+ H5TRACE3("e", "iFth", plist_id, strategy, threshold);
if ((unsigned)in_strategy >= H5F_FILE_SPACE_NTYPES)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid strategy")
@@ -606,7 +606,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_file_space(hid_t plist_id, H5F_file_space_type_t *strategy, hsize_t *threshold)
+H5Pget_file_space(hid_t plist_id, H5F_file_space_type_t *strategy /*out*/, hsize_t *threshold /*out*/)
{
H5F_fspace_strategy_t new_strategy; /* File space strategy type */
hbool_t new_persist; /* Persisting free-space or not */
@@ -614,7 +614,7 @@ H5Pget_file_space(hid_t plist_id, H5F_file_space_type_t *strategy, hsize_t *thre
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*Ff*h", plist_id, strategy, threshold);
+ H5TRACE3("e", "ixx", plist_id, strategy, threshold);
/* Get current file space info */
if (H5Pget_file_space_strategy(plist_id, &new_strategy, &new_persist, &new_threshold) < 0)
diff --git a/src/H5Pdxpl.c b/src/H5Pdxpl.c
index 09eadfa..abe8166 100644
--- a/src/H5Pdxpl.c
+++ b/src/H5Pdxpl.c
@@ -1314,7 +1314,7 @@ H5Pset_filter_callback(hid_t plist_id, H5Z_filter_func_t func, void *op_data)
H5Z_cb_t cb_struct;
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "ix*x", plist_id, func, op_data);
+ H5TRACE3("e", "iZF*x", plist_id, func, op_data);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
@@ -1353,7 +1353,7 @@ H5Pset_type_conv_cb(hid_t plist_id, H5T_conv_except_func_t op, void *operate_dat
H5T_conv_cb_t cb_struct;
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "ix*x", plist_id, op, operate_data);
+ H5TRACE3("e", "iTE*x", plist_id, op, operate_data);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
@@ -1385,14 +1385,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_type_conv_cb(hid_t plist_id, H5T_conv_except_func_t *op, void **operate_data)
+H5Pget_type_conv_cb(hid_t plist_id, H5T_conv_except_func_t *op /*out*/, void **operate_data /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
H5T_conv_cb_t cb_struct;
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*x**x", plist_id, op, operate_data);
+ H5TRACE3("e", "ixx", plist_id, op, operate_data);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
@@ -1577,7 +1577,7 @@ H5Pset_vlen_mem_manager(hid_t plist_id, H5MM_allocate_t alloc_func, void *alloc_
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "ix*xx*x", plist_id, alloc_func, alloc_info, free_func, free_info);
+ H5TRACE5("e", "iMa*xMf*x", plist_id, alloc_func, alloc_info, free_func, free_info);
/* Check arguments */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
@@ -1945,13 +1945,14 @@ H5P__dxfr_mpio_chunk_opt_hard_dec(const void **_pp, void *_value)
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mpio_actual_chunk_opt_mode(hid_t plist_id, H5D_mpio_actual_chunk_opt_mode_t *actual_chunk_opt_mode)
+H5Pget_mpio_actual_chunk_opt_mode(hid_t plist_id,
+ H5D_mpio_actual_chunk_opt_mode_t *actual_chunk_opt_mode /*out*/)
{
H5P_genplist_t *plist;
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Do", plist_id, actual_chunk_opt_mode);
+ H5TRACE2("e", "ix", plist_id, actual_chunk_opt_mode);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
@@ -1980,13 +1981,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_mode)
+H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_mode /*out*/)
{
H5P_genplist_t *plist;
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Di", plist_id, actual_io_mode);
+ H5TRACE2("e", "ix", plist_id, actual_io_mode);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
@@ -2013,14 +2014,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no_collective_cause,
- uint32_t *global_no_collective_cause)
+H5Pget_mpio_no_collective_cause(hid_t plist_id, uint32_t *local_no_collective_cause /*out*/,
+ uint32_t *global_no_collective_cause /*out*/)
{
H5P_genplist_t *plist;
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*Iu*Iu", plist_id, local_no_collective_cause, global_no_collective_cause);
+ H5TRACE3("e", "ixx", plist_id, local_no_collective_cause, global_no_collective_cause);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
diff --git a/src/H5Pfapl.c b/src/H5Pfapl.c
index 09ff894..dd14e92 100644
--- a/src/H5Pfapl.c
+++ b/src/H5Pfapl.c
@@ -1551,13 +1551,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_family_offset(hid_t fapl_id, hsize_t *offset)
+H5Pget_family_offset(hid_t fapl_id, hsize_t *offset /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*h", fapl_id, offset);
+ H5TRACE2("e", "ix", fapl_id, offset);
/* Get the plist structure */
if (H5P_DEFAULT == fapl_id)
@@ -1629,13 +1629,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_multi_type(hid_t fapl_id, H5FD_mem_t *type)
+H5Pget_multi_type(hid_t fapl_id, H5FD_mem_t *type /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Mt", fapl_id, type);
+ H5TRACE2("e", "ix", fapl_id, type);
/* Get the plist structure */
if (H5P_DEFAULT == fapl_id)
@@ -1723,13 +1723,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_cache(hid_t plist_id, int *mdc_nelmts, size_t *rdcc_nslots, size_t *rdcc_nbytes, double *rdcc_w0)
+H5Pget_cache(hid_t plist_id, int *mdc_nelmts, size_t *rdcc_nslots /*out*/, size_t *rdcc_nbytes /*out*/,
+ double *rdcc_w0 /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*Is*z*z*d", plist_id, mdc_nelmts, rdcc_nslots, rdcc_nbytes, rdcc_w0);
+ H5TRACE5("e", "i*Isxxx", plist_id, mdc_nelmts, rdcc_nslots, rdcc_nbytes, rdcc_w0);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -1775,7 +1776,7 @@ H5Pset_mdc_image_config(hid_t plist_id, H5AC_cache_image_config_t *config_ptr)
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", plist_id, config_ptr);
+ H5TRACE2("e", "i*CC", plist_id, config_ptr);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -1816,13 +1817,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mdc_image_config(hid_t plist_id, H5AC_cache_image_config_t *config)
+H5Pget_mdc_image_config(hid_t plist_id, H5AC_cache_image_config_t *config /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", plist_id, config);
+ H5TRACE2("e", "ix", plist_id, config);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -1867,7 +1868,7 @@ H5Pset_mdc_config(hid_t plist_id, H5AC_cache_config_t *config_ptr)
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", plist_id, config_ptr);
+ H5TRACE2("e", "i*Cc", plist_id, config_ptr);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -1908,13 +1909,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mdc_config(hid_t plist_id, H5AC_cache_config_t *config)
+H5Pget_mdc_config(hid_t plist_id, H5AC_cache_config_t *config /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", plist_id, config);
+ H5TRACE2("e", "ix", plist_id, config);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -2065,13 +2066,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_fclose_degree(hid_t plist_id, H5F_close_degree_t *degree)
+H5Pget_fclose_degree(hid_t plist_id, H5F_close_degree_t *degree /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Fd", plist_id, degree);
+ H5TRACE2("e", "ix", plist_id, degree);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -2553,13 +2554,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_elink_file_cache_size(hid_t plist_id, unsigned *efc_size)
+H5Pget_elink_file_cache_size(hid_t plist_id, unsigned *efc_size /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Iu", plist_id, efc_size);
+ H5TRACE2("e", "ix", plist_id, efc_size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -2685,14 +2686,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_file_image(hid_t fapl_id, void **buf, size_t *buf_len)
+H5Pget_file_image(hid_t fapl_id, void **buf /*out*/, size_t *buf_len /*out*/)
{
H5P_genplist_t * fapl; /* Property list pointer */
H5FD_file_image_info_t image_info; /* File image info */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i**x*z", fapl_id, buf, buf_len);
+ H5TRACE3("e", "ixx", fapl_id, buf, buf_len);
/* Get the plist structure */
if (NULL == (fapl = H5P_object_verify(fapl_id, H5P_FILE_ACCESS)))
@@ -2767,7 +2768,7 @@ H5Pset_file_image_callbacks(hid_t fapl_id, H5FD_file_image_callbacks_t *callback
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", fapl_id, callbacks_ptr);
+ H5TRACE2("e", "i*DI", fapl_id, callbacks_ptr);
/* Get the plist structure */
if (NULL == (fapl = H5P_object_verify(fapl_id, H5P_FILE_ACCESS)))
@@ -2836,14 +2837,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_file_image_callbacks(hid_t fapl_id, H5FD_file_image_callbacks_t *callbacks)
+H5Pget_file_image_callbacks(hid_t fapl_id, H5FD_file_image_callbacks_t *callbacks /*out*/)
{
H5P_genplist_t * fapl; /* Property list pointer */
H5FD_file_image_info_t info; /* File image info */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*x", fapl_id, callbacks);
+ H5TRACE2("e", "ix", fapl_id, callbacks);
/* Get the plist structure */
if (NULL == (fapl = H5P_object_verify(fapl_id, H5P_FILE_ACCESS)))
@@ -4144,7 +4145,7 @@ H5Pset_object_flush_cb(hid_t plist_id, H5F_flush_cb_t func, void *udata)
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "ix*x", plist_id, func, udata);
+ H5TRACE3("e", "iFF*x", plist_id, func, udata);
/* Check if the callback function is NULL and the user data is non-NULL.
* This is almost certainly an error as the user data will not be used. */
@@ -4180,14 +4181,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_object_flush_cb(hid_t plist_id, H5F_flush_cb_t *func, void **udata)
+H5Pget_object_flush_cb(hid_t plist_id, H5F_flush_cb_t *func /*out*/, void **udata /*out*/)
{
H5P_genplist_t * plist; /* Property list pointer */
H5F_object_flush_t flush_info;
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*x**x", plist_id, func, udata);
+ H5TRACE3("e", "ixx", plist_id, func, udata);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -4267,15 +4268,15 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mdc_log_options(hid_t plist_id, hbool_t *is_enabled, char *location, size_t *location_size,
- hbool_t *start_on_access)
+H5Pget_mdc_log_options(hid_t plist_id, hbool_t *is_enabled /*out*/, char *location /*out*/,
+ size_t *location_size /*out*/, hbool_t *start_on_access /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
char * location_ptr; /* Pointer to location string */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*b*s*z*b", plist_id, is_enabled, location, location_size, start_on_access);
+ H5TRACE5("e", "ixxxx", plist_id, is_enabled, location, location_size, start_on_access);
/* Get the property list structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -4578,13 +4579,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_evict_on_close(hid_t fapl_id, hbool_t *evict_on_close)
+H5Pget_evict_on_close(hid_t fapl_id, hbool_t *evict_on_close /*out*/)
{
H5P_genplist_t *plist; /* property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*b", fapl_id, evict_on_close);
+ H5TRACE2("e", "ix", fapl_id, evict_on_close);
/* Compare the property list's class against the other class */
if (TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
@@ -4665,13 +4666,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_file_locking(hid_t fapl_id, hbool_t *use_file_locking, hbool_t *ignore_when_disabled)
+H5Pget_file_locking(hid_t fapl_id, hbool_t *use_file_locking /*out*/, hbool_t *ignore_when_disabled /*out*/)
{
H5P_genplist_t *plist; /* property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*b*b", fapl_id, use_file_locking, ignore_when_disabled);
+ H5TRACE3("e", "ixx", fapl_id, use_file_locking, ignore_when_disabled);
/* Make sure this is a fapl */
if (TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
@@ -4839,12 +4840,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_all_coll_metadata_ops(hid_t plist_id, hbool_t *is_collective)
+H5Pget_all_coll_metadata_ops(hid_t plist_id, hbool_t *is_collective /*out*/)
{
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*b", plist_id, is_collective);
+ H5TRACE2("e", "ix", plist_id, is_collective);
/* Compare the property list's class against the other class */
/* (Dataset, group, attribute, and named datype access property lists
@@ -4928,13 +4929,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mpi_params(hid_t plist_id, MPI_Comm *comm, MPI_Info *info)
+H5Pget_mpi_params(hid_t plist_id, MPI_Comm *comm /*out*/, MPI_Info *info /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*Mc*Mi", plist_id, comm, info);
+ H5TRACE3("e", "ixx", plist_id, comm, info);
/* Make sure that the property list is a fapl */
if (TRUE != H5P_isa_class(plist_id, H5P_FILE_ACCESS))
@@ -5378,13 +5379,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_coll_metadata_write(hid_t plist_id, hbool_t *is_collective)
+H5Pget_coll_metadata_write(hid_t plist_id, hbool_t *is_collective /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*b", plist_id, is_collective);
+ H5TRACE2("e", "ix", plist_id, is_collective);
/* Compare the property list's class against the other class */
if (TRUE != H5P_isa_class(plist_id, H5P_FILE_ACCESS))
@@ -5465,13 +5466,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_page_buffer_size(hid_t plist_id, size_t *buf_size, unsigned *min_meta_perc, unsigned *min_raw_perc)
+H5Pget_page_buffer_size(hid_t plist_id, size_t *buf_size /*out*/, unsigned *min_meta_perc /*out*/,
+ unsigned *min_raw_perc /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "i*z*Iu*Iu", plist_id, buf_size, min_meta_perc, min_raw_perc);
+ H5TRACE4("e", "ixxx", plist_id, buf_size, min_meta_perc, min_raw_perc);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_ACCESS)))
@@ -5615,13 +5617,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_vol_id(hid_t plist_id, hid_t *vol_id)
+H5Pget_vol_id(hid_t plist_id, hid_t *vol_id /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*i", plist_id, vol_id);
+ H5TRACE2("e", "ix", plist_id, vol_id);
/* Get property list for ID */
if (NULL == (plist = (H5P_genplist_t *)H5I_object_verify(plist_id, H5I_GENPROP_LST)))
@@ -5661,13 +5663,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_vol_info(hid_t plist_id, void **vol_info)
+H5Pget_vol_info(hid_t plist_id, void **vol_info /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i**x", plist_id, vol_info);
+ H5TRACE2("e", "ix", plist_id, vol_info);
/* Get property list for ID */
if (NULL == (plist = (H5P_genplist_t *)H5I_object_verify(plist_id, H5I_GENPROP_LST)))
diff --git a/src/H5Pfcpl.c b/src/H5Pfcpl.c
index d25db77..5da0e4c 100644
--- a/src/H5Pfcpl.c
+++ b/src/H5Pfcpl.c
@@ -366,13 +366,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_userblock(hid_t plist_id, hsize_t *size)
+H5Pget_userblock(hid_t plist_id, hsize_t *size /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*h", plist_id, size);
+ H5TRACE2("e", "ix", plist_id, size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_CREATE)))
@@ -458,13 +458,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_sizes(hid_t plist_id, size_t *sizeof_addr, size_t *sizeof_size)
+H5Pget_sizes(hid_t plist_id, size_t *sizeof_addr /*out*/, size_t *sizeof_size /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*z*z", plist_id, sizeof_addr, sizeof_size);
+ H5TRACE3("e", "ixx", plist_id, sizeof_addr, sizeof_size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_CREATE)))
@@ -825,13 +825,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_shared_mesg_nindexes(hid_t plist_id, unsigned *nindexes)
+H5Pget_shared_mesg_nindexes(hid_t plist_id, unsigned *nindexes /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Iu", plist_id, nindexes);
+ H5TRACE2("e", "ix", plist_id, nindexes);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_CREATE)))
@@ -924,8 +924,8 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned *mesg_type_flags,
- unsigned *min_mesg_size)
+H5Pget_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned *mesg_type_flags /*out*/,
+ unsigned *min_mesg_size /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
unsigned nindexes; /* Number of SOHM indexes */
@@ -934,7 +934,7 @@ H5Pget_shared_mesg_index(hid_t plist_id, unsigned index_num, unsigned *mesg_type
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "iIu*Iu*Iu", plist_id, index_num, mesg_type_flags, min_mesg_size);
+ H5TRACE4("e", "iIuxx", plist_id, index_num, mesg_type_flags, min_mesg_size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_CREATE)))
@@ -1219,13 +1219,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_shared_mesg_phase_change(hid_t plist_id, unsigned *max_list, unsigned *min_btree)
+H5Pget_shared_mesg_phase_change(hid_t plist_id, unsigned *max_list /*out*/, unsigned *min_btree /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*Iu*Iu", plist_id, max_list, min_btree);
+ H5TRACE3("e", "ixx", plist_id, max_list, min_btree);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_CREATE)))
@@ -1304,14 +1304,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_file_space_strategy(hid_t plist_id, H5F_fspace_strategy_t *strategy, hbool_t *persist,
- hsize_t *threshold)
+H5Pget_file_space_strategy(hid_t plist_id, H5F_fspace_strategy_t *strategy /*out*/, hbool_t *persist /*out*/,
+ hsize_t *threshold /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "i*Ff*b*h", plist_id, strategy, persist, threshold);
+ H5TRACE4("e", "ixxx", plist_id, strategy, persist, threshold);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_CREATE)))
@@ -1455,13 +1455,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_file_space_page_size(hid_t plist_id, hsize_t *fsp_size)
+H5Pget_file_space_page_size(hid_t plist_id, hsize_t *fsp_size /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*h", plist_id, fsp_size);
+ H5TRACE2("e", "ix", plist_id, fsp_size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_FILE_CREATE)))
diff --git a/src/H5Plapl.c b/src/H5Plapl.c
index 8640b89..08cc5c8 100644
--- a/src/H5Plapl.c
+++ b/src/H5Plapl.c
@@ -946,13 +946,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_nlinks(hid_t plist_id, size_t *nlinks)
+H5Pget_nlinks(hid_t plist_id, size_t *nlinks /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*z", plist_id, nlinks);
+ H5TRACE2("e", "ix", plist_id, nlinks);
if (!nlinks)
HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid pointer passed in");
@@ -1021,7 +1021,7 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Pget_elink_prefix(hid_t plist_id, char *prefix, size_t size)
+H5Pget_elink_prefix(hid_t plist_id, char *prefix /*out*/, size_t size)
{
H5P_genplist_t *plist; /* Property list pointer */
char * my_prefix; /* Library's copy of the prefix */
@@ -1029,7 +1029,7 @@ H5Pget_elink_prefix(hid_t plist_id, char *prefix, size_t size)
ssize_t ret_value; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("Zs", "i*sz", plist_id, prefix, size);
+ H5TRACE3("Zs", "ixz", plist_id, prefix, size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_LINK_ACCESS)))
@@ -1180,13 +1180,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_elink_acc_flags(hid_t lapl_id, unsigned *flags)
+H5Pget_elink_acc_flags(hid_t lapl_id, unsigned *flags /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Iu", lapl_id, flags);
+ H5TRACE2("e", "ix", lapl_id, flags);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(lapl_id, H5P_LINK_ACCESS)))
@@ -1223,7 +1223,7 @@ H5Pset_elink_cb(hid_t lapl_id, H5L_elink_traverse_t func, void *op_data)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "ix*x", lapl_id, func, op_data);
+ H5TRACE3("e", "iLt*x", lapl_id, func, op_data);
/* Check if the callback function is NULL and the user data is non-NULL.
* This is almost certainly an error as the user data will not be used. */
@@ -1260,14 +1260,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_elink_cb(hid_t lapl_id, H5L_elink_traverse_t *func, void **op_data)
+H5Pget_elink_cb(hid_t lapl_id, H5L_elink_traverse_t *func /*out*/, void **op_data /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
H5L_elink_cb_t cb_info; /* Callback info struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*x**x", lapl_id, func, op_data);
+ H5TRACE3("e", "ixx", lapl_id, func, op_data);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(lapl_id, H5P_LINK_ACCESS)))
diff --git a/src/H5Pmapl.c b/src/H5Pmapl.c
index a1f0fae..ca9c5c0 100644
--- a/src/H5Pmapl.c
+++ b/src/H5Pmapl.c
@@ -182,13 +182,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_map_iterate_hints(hid_t mapl_id, size_t *key_prefetch_size, size_t *key_alloc_size)
+H5Pget_map_iterate_hints(hid_t mapl_id, size_t *key_prefetch_size /*out*/, size_t *key_alloc_size /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*z*z", mapl_id, key_prefetch_size, key_alloc_size);
+ H5TRACE3("e", "ixx", mapl_id, key_prefetch_size, key_alloc_size);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(mapl_id, H5P_MAP_ACCESS)))
diff --git a/src/H5Pocpl.c b/src/H5Pocpl.c
index bd6be75..387ecdc 100644
--- a/src/H5Pocpl.c
+++ b/src/H5Pocpl.c
@@ -251,13 +251,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_attr_phase_change(hid_t plist_id, unsigned *max_compact, unsigned *min_dense)
+H5Pget_attr_phase_change(hid_t plist_id, unsigned *max_compact /*out*/, unsigned *min_dense /*out*/)
{
H5P_genplist_t *plist; /* Property list pointer */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*Iu*Iu", plist_id, max_compact, min_dense);
+ H5TRACE3("e", "ixx", plist_id, max_compact, min_dense);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_OBJECT_CREATE)))
@@ -342,12 +342,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_attr_creation_order(hid_t plist_id, unsigned *crt_order_flags)
+H5Pget_attr_creation_order(hid_t plist_id, unsigned *crt_order_flags /*out*/)
{
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*Iu", plist_id, crt_order_flags);
+ H5TRACE2("e", "ix", plist_id, crt_order_flags);
/* Get values */
if (crt_order_flags) {
@@ -445,12 +445,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_obj_track_times(hid_t plist_id, hbool_t *track_times)
+H5Pget_obj_track_times(hid_t plist_id, hbool_t *track_times /*out*/)
{
herr_t ret_value = SUCCEED; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "i*b", plist_id, track_times);
+ H5TRACE2("e", "ix", plist_id, track_times);
/* Get values */
if (track_times) {
@@ -931,13 +931,13 @@ done:
herr_t
H5Pget_filter_by_id2(hid_t plist_id, H5Z_filter_t id, unsigned int *flags /*out*/,
size_t *cd_nelmts /*in_out*/, unsigned cd_values[] /*out*/, size_t namelen,
- char name[] /*out*/, unsigned *filter_config)
+ char name[] /*out*/, unsigned *filter_config /*out*/)
{
H5P_genplist_t *plist; /* Property list */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE8("e", "iZfx*zxzx*Iu", plist_id, id, flags, cd_nelmts, cd_values, namelen, name, filter_config);
+ H5TRACE8("e", "iZfx*zxzxx", plist_id, id, flags, cd_nelmts, cd_values, namelen, name, filter_config);
/* Check args */
if (cd_nelmts || cd_values) {
diff --git a/src/H5Pocpypl.c b/src/H5Pocpypl.c
index 1f4b31e..f05afb0 100644
--- a/src/H5Pocpypl.c
+++ b/src/H5Pocpypl.c
@@ -837,7 +837,7 @@ H5Pset_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t func, void *op_data)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "ix*x", plist_id, func, op_data);
+ H5TRACE3("e", "iOs*x", plist_id, func, op_data);
/* Check if the callback function is NULL and the user data is non-NULL.
* This is almost certainly an error as the user data will not be used. */
@@ -878,14 +878,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Pget_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t *func, void **op_data)
+H5Pget_mcdt_search_cb(hid_t plist_id, H5O_mcdt_search_cb_t *func /*out*/, void **op_data /*out*/)
{
H5P_genplist_t * plist; /* Property list pointer */
H5O_mcdt_cb_info_t cb_info; /* Callback info struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*x**x", plist_id, func, op_data);
+ H5TRACE3("e", "ixx", plist_id, func, op_data);
/* Get the plist structure */
if (NULL == (plist = H5P_object_verify(plist_id, H5P_OBJECT_COPY)))
diff --git a/src/H5R.c b/src/H5R.c
index dda82eb..037d08c 100644
--- a/src/H5R.c
+++ b/src/H5R.c
@@ -724,7 +724,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Rget_obj_type3(H5R_ref_t *ref_ptr, hid_t rapl_id, H5O_type_t *obj_type)
+H5Rget_obj_type3(H5R_ref_t *ref_ptr, hid_t rapl_id, H5O_type_t *obj_type /*out*/)
{
hid_t loc_id; /* Reference location ID */
H5VL_object_t * vol_obj = NULL; /* Object of loc_id */
@@ -733,7 +733,7 @@ H5Rget_obj_type3(H5R_ref_t *ref_ptr, hid_t rapl_id, H5O_type_t *obj_type)
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "*Rri*Ot", ref_ptr, rapl_id, obj_type);
+ H5TRACE3("e", "*Rrix", ref_ptr, rapl_id, obj_type);
/* Check args */
if (ref_ptr == NULL)
@@ -784,13 +784,13 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Rget_file_name(const H5R_ref_t *ref_ptr, char *buf, size_t size)
+H5Rget_file_name(const H5R_ref_t *ref_ptr, char *buf /*out*/, size_t size)
{
hid_t loc_id; /* Reference location ID */
ssize_t ret_value; /* Return value */
FUNC_ENTER_API((-1))
- H5TRACE3("Zs", "*Rr*sz", ref_ptr, buf, size);
+ H5TRACE3("Zs", "*Rrxz", ref_ptr, buf, size);
/* Check args */
if (ref_ptr == NULL)
@@ -833,7 +833,7 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Rget_obj_name(H5R_ref_t *ref_ptr, hid_t rapl_id, char *buf, size_t size)
+H5Rget_obj_name(H5R_ref_t *ref_ptr, hid_t rapl_id, char *buf /*out*/, size_t size)
{
hid_t loc_id; /* Reference location ID */
H5VL_object_t * vol_obj = NULL; /* Object of loc_id */
@@ -842,7 +842,7 @@ H5Rget_obj_name(H5R_ref_t *ref_ptr, hid_t rapl_id, char *buf, size_t size)
ssize_t ret_value = 0; /* Return value */
FUNC_ENTER_API((-1))
- H5TRACE4("Zs", "*Rri*sz", ref_ptr, rapl_id, buf, size);
+ H5TRACE4("Zs", "*Rrixz", ref_ptr, rapl_id, buf, size);
/* Check args */
if (ref_ptr == NULL)
@@ -892,12 +892,12 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Rget_attr_name(const H5R_ref_t *ref_ptr, char *buf, size_t size)
+H5Rget_attr_name(const H5R_ref_t *ref_ptr, char *buf /*out*/, size_t size)
{
ssize_t ret_value; /* Return value */
FUNC_ENTER_API((-1))
- H5TRACE3("Zs", "*Rr*sz", ref_ptr, buf, size);
+ H5TRACE3("Zs", "*Rrxz", ref_ptr, buf, size);
/* Check args */
if (ref_ptr == NULL)
diff --git a/src/H5RS.c b/src/H5RS.c
index 0e8ab27..6ab5334 100644
--- a/src/H5RS.c
+++ b/src/H5RS.c
@@ -15,9 +15,16 @@
* Reference counted string algorithms.
*
* These are used for various internal strings which get copied multiple times.
+ * They also efficiently handle dynamically allocations and appends.
*
*/
+/****************/
+/* Module Setup */
+/****************/
+
+#include "H5RSmodule.h" /* This source code file is part of the H5RS module */
+
/***********/
/* Headers */
/***********/
@@ -30,6 +37,9 @@
/* Local Macros */
/****************/
+/* Initial buffer size to allocate */
+#define H5RS_ALLOC_SIZE 256
+
/******************/
/* Local Typedefs */
/******************/
@@ -37,7 +47,10 @@
/* Private typedefs & structs */
struct H5RS_str_t {
char * s; /* String to be reference counted */
- unsigned wrapped; /* Indicates that the string to be ref-counted is not copied */
+ char * end; /* Pointer to terminating NUL character at the end of the string */
+ size_t len; /* Current length of the string */
+ size_t max; /* Size of allocated buffer */
+ hbool_t wrapped; /* Indicates that the string to be ref-counted is not copied */
unsigned n; /* Reference count of number of pointers sharing string */
};
@@ -48,10 +61,17 @@ struct H5RS_str_t {
/********************/
/* Local Prototypes */
/********************/
+static herr_t H5RS__xstrdup(H5RS_str_t *rs, const char *s);
+static herr_t H5RS__prepare_for_append(H5RS_str_t *rs);
+static herr_t H5RS__resize_for_append(H5RS_str_t *rs, size_t len);
+
/*********************/
/* Package Variables */
/*********************/
+/* Package initialization variable */
+hbool_t H5_PKG_INIT_VAR = FALSE;
+
/*****************************/
/* Library Private Variables */
/*****************************/
@@ -64,7 +84,7 @@ struct H5RS_str_t {
H5FL_DEFINE_STATIC(H5RS_str_t);
/* Declare the PQ free list for the wrapped strings */
-H5FL_BLK_DEFINE(str_buf);
+H5FL_BLK_DEFINE_STATIC(str_buf);
/*--------------------------------------------------------------------------
NAME
@@ -72,11 +92,12 @@ H5FL_BLK_DEFINE(str_buf);
PURPOSE
Duplicate the string being reference counted
USAGE
- char *H5RS__xstrdup(s)
+ herr_t H5RS__xstrdup(rs, s)
+ H5RS_str_t *rs; IN/OUT: Ref-counted string to hold duplicated string
const char *s; IN: String to duplicate
RETURNS
- Returns a pointer to a new string on success, NULL on failure.
+ Non-negative on success/Negative on failure
DESCRIPTION
Duplicate a string buffer being reference counted. Use this instead of
[H5MM_][x]strdup, in order to use the free-list memory routines.
@@ -85,28 +106,148 @@ H5FL_BLK_DEFINE(str_buf);
EXAMPLES
REVISION LOG
--------------------------------------------------------------------------*/
-static char *
-H5RS__xstrdup(const char *s)
+static herr_t
+H5RS__xstrdup(H5RS_str_t *rs, const char *s)
{
- char *ret_value; /* Return value */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_STATIC_NOERR
+ FUNC_ENTER_STATIC
- if (s) {
- size_t len = HDstrlen(s) + 1;
+ /* Sanity check */
+ HDassert(rs);
- ret_value = (char *)H5FL_BLK_MALLOC(str_buf, len);
- HDassert(ret_value);
- HDstrncpy(ret_value, s, len);
+ if (s) {
+ size_t len = HDstrlen(s);
+
+ /* Determine size of buffer to allocate */
+ rs->max = H5RS_ALLOC_SIZE;
+ while ((len + 1) > rs->max)
+ rs->max *= 2;
+
+ /* Allocate the underlying string */
+ if (NULL == (rs->s = (char *)H5FL_BLK_MALLOC(str_buf, rs->max)))
+ HGOTO_ERROR(H5E_RS, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ if (len)
+ HDmemcpy(rs->s, s, len);
+ rs->end = rs->s + len;
+ *rs->end = '\0';
+ rs->len = len;
} /* end if */
- else
- ret_value = NULL;
+ else {
+ /* Free previous string, if one */
+ if (rs->s) {
+ H5FL_BLK_FREE(str_buf, rs->s);
+ rs->s = rs->end = NULL;
+ rs->max = rs->len = 0;
+ } /* end if */
+ else {
+ /* Sanity checks */
+ HDassert(NULL == rs->end);
+ HDassert(0 == rs->max);
+ HDassert(0 == rs->len);
+ } /* end else */
+ } /* end else */
+done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5RS__xstrdup() */
/*--------------------------------------------------------------------------
NAME
+ H5RS__prepare_for_append
+ PURPOSE
+ Prepare a ref-counted string for an append
+ USAGE
+ herr_t H5RS__prepare_for_append(rs)
+ H5RS_str_t *rs; IN/OUT: Ref-counted string to hold duplicated string
+ RETURNS
+ Non-negative on success/Negative on failure
+ DESCRIPTION
+ Allocate space for a string, or duplicate a wrapped string, in preparation
+ for appending another string.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5RS__prepare_for_append(H5RS_str_t *rs)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ /* Sanity check */
+ HDassert(rs);
+
+ if (NULL == rs->s) {
+ rs->max = H5RS_ALLOC_SIZE;
+ if (NULL == (rs->s = (char *)H5FL_BLK_MALLOC(str_buf, rs->max)))
+ HGOTO_ERROR(H5E_RS, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ rs->end = rs->s;
+ *rs->s = '\0';
+ rs->len = 0;
+ } /* end if */
+ else {
+ /* If the ref-counted string started life as a wrapper around an
+ * existing string, duplicate the string now, so we can modify it.
+ */
+ if (rs->wrapped) {
+ if (H5RS__xstrdup(rs, rs->s) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTCOPY, FAIL, "can't copy string")
+ rs->wrapped = FALSE;
+ } /* end if */
+ } /* end else */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5RS__prepare_for_append() */
+
+/*--------------------------------------------------------------------------
+ NAME
+ H5RS__resize_for_append
+ PURPOSE
+ Resize ref-counted string buffer to accommodate appending another string
+ USAGE
+ herr_t H5RS__resize_for_append(rs, len)
+ H5RS_str_t *rs; IN/OUT: Ref-counted string to hold duplicated string
+ size_t len; IN: Additional length to accommodate
+ RETURNS
+ Non-negative on success/Negative on failure
+ DESCRIPTION
+ Resize a ref-counted string buffer to be large enough to accommodate
+ another string of a specified length.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5RS__resize_for_append(H5RS_str_t *rs, size_t len)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_STATIC
+
+ /* Sanity check */
+ HDassert(rs);
+
+ /* Check if buffer should be re-allocated */
+ if (len >= (rs->max - rs->len)) {
+ /* Allocate a large enough buffer */
+ while (len >= (rs->max - rs->len))
+ rs->max *= 2;
+ if (NULL == (rs->s = (char *)H5FL_BLK_REALLOC(str_buf, rs->s, rs->max)))
+ HGOTO_ERROR(H5E_RS, H5E_CANTALLOC, FAIL, "memory allocation failed")
+ rs->end = rs->s + rs->len;
+ } /* end if */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5RS__resize() */
+
+/*--------------------------------------------------------------------------
+ NAME
H5RS_create
PURPOSE
Create a reference counted string
@@ -127,18 +268,19 @@ H5RS__xstrdup(const char *s)
H5RS_str_t *
H5RS_create(const char *s)
{
- H5RS_str_t *ret_value; /* Return value */
+ H5RS_str_t *ret_value = NULL; /* Return value */
FUNC_ENTER_NOAPI(NULL)
/* Allocate ref-counted string structure */
- if (NULL == (ret_value = H5FL_MALLOC(H5RS_str_t)))
- HGOTO_ERROR(H5E_RS, H5E_NOSPACE, NULL, "memory allocation failed")
+ if (NULL == (ret_value = H5FL_CALLOC(H5RS_str_t)))
+ HGOTO_ERROR(H5E_RS, H5E_CANTALLOC, NULL, "memory allocation failed")
/* Set the internal fields */
- ret_value->s = H5RS__xstrdup(s);
- ret_value->wrapped = 0;
- ret_value->n = 1;
+ if (s)
+ if (H5RS__xstrdup(ret_value, s) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTCOPY, NULL, "can't copy string")
+ ret_value->n = 1;
done:
FUNC_LEAVE_NOAPI(ret_value)
@@ -175,54 +317,224 @@ H5RS_wrap(const char *s)
HGOTO_ERROR(H5E_RS, H5E_CANTALLOC, NULL, "memory allocation failed")
/* Set the internal fields */
- ret_value->s = (char *)s;
- ret_value->wrapped = 1;
+ ret_value->s = (char *)s;
+ ret_value->len = HDstrlen(s);
+ ret_value->end = ret_value->s + ret_value->len;
+
+ ret_value->wrapped = TRUE;
+ ret_value->max = 0; /* Wrapped, not allocated */
ret_value->n = 1;
done:
FUNC_LEAVE_NOAPI(ret_value)
} /* end H5RS_wrap() */
-/*--------------------------------------------------------------------------
- NAME
- H5RS_own
- PURPOSE
- Transfer ownership of a regular string to a reference counted string
- USAGE
- H5RS_str_t *H5RS_own(s)
- const char *s; IN: String to transfer ownership of
+/*-------------------------------------------------------------------------
+ * Function: H5RS_asprintf_cat
+ *
+ * Purpose: This function appends formatted output to a ref-counted string,
+ * allocating the managed string if necessary. The formatting
+ * string is printf() compatible.
+ *
+ * Return: SUCCEED / FAIL
+ *
+ * Programmer: Quincey Koziol
+ * Friday, September 18, 2020
+ *
+ *-------------------------------------------------------------------------
+ */
+/* Disable warning for "format not a string literal" here -QAK */
+/*
+ * This pragma only needs to surround the sprintf() calls with
+ * format_templ in the code below, but early (4.4.7, at least) gcc only
+ * allows diagnostic pragmas to be toggled outside of functions.
+ */
+H5_GCC_DIAG_OFF("format-nonliteral")
+H5_ATTR_FORMAT(printf, 2, 3)
+herr_t
+H5RS_asprintf_cat(H5RS_str_t *rs, const char *fmt, ...)
+{
+ va_list args1, args2;
+ size_t out_len;
+ herr_t ret_value = SUCCEED; /* Return value */
- RETURNS
- Returns a pointer to a new ref-counted string on success, NULL on failure.
- DESCRIPTION
- Transfer ownership of a dynamically allocated string to a reference counted
- string. The routine which passed in the string should not attempt to free
- it, the reference counting string routines will do that when the reference
- count drops to zero.
- GLOBAL VARIABLES
- COMMENTS, BUGS, ASSUMPTIONS
- EXAMPLES
- REVISION LOG
---------------------------------------------------------------------------*/
-H5RS_str_t *
-H5RS_own(char *s)
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity checks */
+ HDassert(rs);
+ HDassert(fmt);
+
+ /* Prepare the [possibly wrapped or empty] ref-counted string for an append */
+ if (H5RS__prepare_for_append(rs) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTINIT, FAIL, "can't initialize ref-counted string")
+
+ /* Attempt to write formatted output into the managed string */
+ HDva_start(args1, fmt);
+ HDva_copy(args2, args1);
+ while ((out_len = (size_t)HDvsnprintf(rs->end, (rs->max - rs->len), fmt, args1)) >= (rs->max - rs->len)) {
+ /* Allocate a large enough buffer */
+ if (H5RS__resize_for_append(rs, out_len) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTRESIZE, FAIL, "can't resize ref-counted string buffer")
+
+ /* Restart the va_list */
+ HDva_end(args1);
+ HDva_copy(args1, args2);
+ } /* end while */
+
+ /* Increment the size & end of the string */
+ rs->len += out_len;
+ rs->end += out_len;
+
+ /* Finish access to varargs */
+ HDva_end(args1);
+ HDva_end(args2);
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5RS_asprintf_cat() */
+H5_GCC_DIAG_ON("format-nonliteral")
+
+/*-------------------------------------------------------------------------
+ * Function: H5RS_acat
+ *
+ * Purpose: This function appends a character string to a ref-counted string,
+ * allocating the managed string if necessary.
+ *
+ * Return: SUCCEED / FAIL
+ *
+ * Programmer: Quincey Koziol
+ * Friday, September 18, 2020
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5RS_acat(H5RS_str_t *rs, const char *s)
{
- H5RS_str_t *ret_value; /* Return value */
+ herr_t ret_value = SUCCEED; /* Return value */
- FUNC_ENTER_NOAPI(NULL)
+ FUNC_ENTER_NOAPI(FAIL)
- /* Allocate ref-counted string structure */
- if (NULL == (ret_value = H5FL_MALLOC(H5RS_str_t)))
- HGOTO_ERROR(H5E_RS, H5E_NOSPACE, NULL, "memory allocation failed")
+ /* Sanity checks */
+ HDassert(rs);
+ HDassert(s);
- /* Set the internal fields */
- ret_value->s = s;
- ret_value->wrapped = 0;
- ret_value->n = 1;
+ /* Concatenate the provided string on to the managed string */
+ if (*s) {
+ size_t len = HDstrlen(s);
+
+ /* Allocate the underlying string, if necessary */
+ if (H5RS__prepare_for_append(rs) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTINIT, FAIL, "can't initialize ref-counted string")
+
+ /* Increase the managed string's buffer size if necessary */
+ if ((rs->len + len) >= rs->max)
+ if (H5RS__resize_for_append(rs, len) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTRESIZE, FAIL, "can't resize ref-counted string buffer")
+
+ /* Append the string */
+ HDmemcpy(rs->end, s, len);
+ rs->end += len;
+ *rs->end = '\0';
+ rs->len += len;
+ } /* end if */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5RS_acat() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5RS_ancat
+ *
+ * Purpose: This function appends at most 'n' characters from a string
+ * to a ref-counted string, allocating the managed string if
+ * necessary.
+ *
+ * Return: SUCCEED / FAIL
+ *
+ * Programmer: Quincey Koziol
+ * Friday, September 18, 2020
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5RS_ancat(H5RS_str_t *rs, const char *s, size_t n)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity checks */
+ HDassert(rs);
+ HDassert(s);
+
+ /* Concatenate the provided string on to the managed string */
+ if (n && *s) {
+ size_t len = HDstrlen(s);
+
+ /* Limit characters to copy to the minimum of 'n' and 'len' */
+ n = MIN(len, n);
+
+ /* Allocate the underlying string, if necessary */
+ if (H5RS__prepare_for_append(rs) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTINIT, FAIL, "can't initialize ref-counted string")
+
+ /* Increase the managed string's buffer size if necessary */
+ if ((rs->len + n) >= rs->max)
+ if (H5RS__resize_for_append(rs, n) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTRESIZE, FAIL, "can't resize ref-counted string buffer")
+
+ /* Append the string */
+ HDmemcpy(rs->end, s, n);
+ rs->end += n;
+ *rs->end = '\0';
+ rs->len += n;
+ } /* end if */
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5RS_ancat() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5RS_aputc
+ *
+ * Purpose: This function appends a character to a ref-counted string,
+ * allocating the managed string if necessary.
+ *
+ * Return: SUCCEED / FAIL
+ *
+ * Programmer: Quincey Koziol
+ * Friday, September 18, 2020
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5RS_aputc(H5RS_str_t *rs, int c)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ /* Sanity checks */
+ HDassert(rs);
+ HDassert(c);
+
+ /* Allocate the underlying string, if necessary */
+ if (H5RS__prepare_for_append(rs) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTINIT, FAIL, "can't initialize ref-counted string")
+
+ /* Increase the managed string's buffer size if necessary */
+ if ((rs->len + 1) >= rs->max)
+ if (H5RS__resize_for_append(rs, 1) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTRESIZE, FAIL, "can't resize ref-counted string buffer")
+
+ /* Append the current character */
+ *rs->end++ = (char)c;
+ rs->len++;
+ *rs->end = '\0';
done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5RS_own() */
+} /* end H5RS_aputc() */
/*--------------------------------------------------------------------------
NAME
@@ -283,7 +595,9 @@ H5RS_decr(H5RS_str_t *rs)
herr_t
H5RS_incr(H5RS_str_t *rs)
{
- FUNC_ENTER_NOAPI_NOINIT_NOERR
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
/* Sanity check */
HDassert(rs);
@@ -294,14 +608,16 @@ H5RS_incr(H5RS_str_t *rs)
* scope appropriately.
*/
if (rs->wrapped) {
- rs->s = H5RS__xstrdup(rs->s);
- rs->wrapped = 0;
+ if (H5RS__xstrdup(rs, rs->s) < 0)
+ HGOTO_ERROR(H5E_RS, H5E_CANTCOPY, FAIL, "can't copy string")
+ rs->wrapped = FALSE;
} /* end if */
/* Increment reference count for string */
rs->n++;
- FUNC_LEAVE_NOAPI(SUCCEED)
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
} /* end H5RS_incr() */
/*--------------------------------------------------------------------------
@@ -338,53 +654,6 @@ H5RS_dup(H5RS_str_t *ret_value)
/*--------------------------------------------------------------------------
NAME
- H5RS_dup_str
- PURPOSE
- "Duplicate" a regular string into a ref-counted string
- USAGE
- H5RS_str_t H5RS_dup_str(s)
- const char *s; IN: Regular string to duplicate
-
- RETURNS
- Returns a pointer to ref-counted string on success, NULL on failure.
- DESCRIPTION
- Duplicate a regular string into a ref-counted string.
- GLOBAL VARIABLES
- COMMENTS, BUGS, ASSUMPTIONS
- EXAMPLES
- REVISION LOG
---------------------------------------------------------------------------*/
-H5RS_str_t *
-H5RS_dup_str(const char *s)
-{
- char * new_str; /* Duplicate of string */
- size_t path_len; /* Length of the path */
- H5RS_str_t *ret_value;
-
- FUNC_ENTER_NOAPI(NULL)
-
- /* Sanity check */
- HDassert(s);
-
- /* Get the length of the string */
- path_len = HDstrlen(s);
-
- /* Allocate space for the string */
- if (NULL == (new_str = (char *)H5FL_BLK_MALLOC(str_buf, path_len + 1)))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
-
- /* Copy name for full path */
- HDstrncpy(new_str, s, (path_len + 1));
-
- /* Create reference counted string for path */
- ret_value = H5RS_own(new_str);
-
-done:
- FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5RS_dup_str() */
-
-/*--------------------------------------------------------------------------
- NAME
H5RS_cmp
PURPOSE
Compare two ref-counted strings
diff --git a/src/H5RSmodule.h b/src/H5RSmodule.h
new file mode 100644
index 0000000..9b4819f
--- /dev/null
+++ b/src/H5RSmodule.h
@@ -0,0 +1,32 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group. *
+ * All rights reserved. *
+ * *
+ * This file is part of HDF5. The full HDF5 copyright notice, including *
+ * terms governing use, modification, and redistribution, is contained in *
+ * the COPYING file, which can be found at the root of the source code *
+ * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
+ * If you do not have access to either file, you may request a copy from *
+ * help@hdfgroup.org. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol
+ * Saturday, October 10, 2020
+ *
+ * Purpose: This file contains declarations which define macros for the
+ * H5RS package. Including this header means that the source file
+ * is part of the H5RS package.
+ */
+#ifndef _H5RSmodule_H
+#define _H5RSmodule_H
+
+/* Define the proper control macros for the generic FUNC_ENTER/LEAVE and error
+ * reporting macros.
+ */
+#define H5RS_MODULE
+#define H5_MY_PKG H5RS
+#define H5_MY_PKG_ERR H5E_RS
+#define H5_MY_PKG_INIT NO
+
+#endif /* _H5RSmodule_H */
diff --git a/src/H5RSprivate.h b/src/H5RSprivate.h
index d1f24cf..eb9e8d8 100644
--- a/src/H5RSprivate.h
+++ b/src/H5RSprivate.h
@@ -45,11 +45,13 @@ typedef struct H5RS_str_t H5RS_str_t;
/********************/
H5_DLL H5RS_str_t *H5RS_create(const char *s);
H5_DLL H5RS_str_t *H5RS_wrap(const char *s);
-H5_DLL H5RS_str_t *H5RS_own(char *s);
H5_DLL herr_t H5RS_decr(H5RS_str_t *rs);
H5_DLL herr_t H5RS_incr(H5RS_str_t *rs);
H5_DLL H5RS_str_t *H5RS_dup(H5RS_str_t *s);
-H5_DLL H5RS_str_t *H5RS_dup_str(const char *s);
+H5_DLL herr_t H5RS_asprintf_cat(H5RS_str_t *rs, const char *fmt, ...) H5_ATTR_FORMAT(printf, 2, 3);
+H5_DLL herr_t H5RS_acat(H5RS_str_t *rs, const char *s);
+H5_DLL herr_t H5RS_ancat(H5RS_str_t *rs, const char *s, size_t len);
+H5_DLL herr_t H5RS_aputc(H5RS_str_t *rs, int c);
H5_DLL int H5RS_cmp(const H5RS_str_t *rs1, const H5RS_str_t *rs2);
H5_DLL ssize_t H5RS_len(const H5RS_str_t *rs);
H5_DLL char * H5RS_get_str(const H5RS_str_t *rs);
diff --git a/src/H5Rdeprec.c b/src/H5Rdeprec.c
index 1ec0350..6eb3def 100644
--- a/src/H5Rdeprec.c
+++ b/src/H5Rdeprec.c
@@ -481,7 +481,7 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Rget_obj_type2(hid_t id, H5R_type_t ref_type, const void *ref, H5O_type_t *obj_type)
+H5Rget_obj_type2(hid_t id, H5R_type_t ref_type, const void *ref, H5O_type_t *obj_type /*out*/)
{
H5VL_object_t * vol_obj = NULL; /* Object of loc_id */
H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */
@@ -491,7 +491,7 @@ H5Rget_obj_type2(hid_t id, H5R_type_t ref_type, const void *ref, H5O_type_t *obj
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "iRt*x*Ot", id, ref_type, ref, obj_type);
+ H5TRACE4("e", "iRt*xx", id, ref_type, ref, obj_type);
/* Check args */
if (buf == NULL)
@@ -693,7 +693,7 @@ done:
*-------------------------------------------------------------------------
*/
ssize_t
-H5Rget_name(hid_t id, H5R_type_t ref_type, const void *ref, char *name, size_t size)
+H5Rget_name(hid_t id, H5R_type_t ref_type, const void *ref, char *name /*out*/, size_t size)
{
H5VL_object_t * vol_obj = NULL; /* Object of loc_id */
H5I_type_t vol_obj_type = H5I_BADID; /* Object type of loc_id */
@@ -703,7 +703,7 @@ H5Rget_name(hid_t id, H5R_type_t ref_type, const void *ref, char *name, size_t s
ssize_t ret_value = -1; /* Return value */
FUNC_ENTER_API((-1))
- H5TRACE5("Zs", "iRt*x*sz", id, ref_type, ref, name, size);
+ H5TRACE5("Zs", "iRt*xxz", id, ref_type, ref, name, size);
/* Check args */
if (buf == NULL)
diff --git a/src/H5Shyper.c b/src/H5Shyper.c
index c358982..4f53d49 100644
--- a/src/H5Shyper.c
+++ b/src/H5Shyper.c
@@ -4773,13 +4773,13 @@ H5S__get_select_hyper_blocklist(H5S_t *space, hsize_t startblock, hsize_t numblo
--------------------------------------------------------------------------*/
herr_t
H5Sget_select_hyper_blocklist(hid_t spaceid, hsize_t startblock, hsize_t numblocks,
- hsize_t buf[/*numblocks*/])
+ hsize_t buf[/*numblocks*/] /*out*/)
{
H5S_t *space; /* Dataspace to modify selection of */
herr_t ret_value; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "ihh*[a2]h", spaceid, startblock, numblocks, buf);
+ H5TRACE4("e", "ihhx", spaceid, startblock, numblocks, buf);
/* Check args */
if (buf == NULL)
@@ -12358,14 +12358,15 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5Sget_regular_hyperslab(hid_t spaceid, hsize_t start[], hsize_t stride[], hsize_t count[], hsize_t block[])
+H5Sget_regular_hyperslab(hid_t spaceid, hsize_t start[] /*out*/, hsize_t stride[] /*out*/,
+ hsize_t count[] /*out*/, hsize_t block[] /*out*/)
{
H5S_t * space; /* Dataspace to query */
unsigned u; /* Local index variable */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "i*h*h*h*h", spaceid, start, stride, count, block);
+ H5TRACE5("e", "ixxxx", spaceid, start, stride, count, block);
/* Check args */
if (NULL == (space = (H5S_t *)H5I_object_verify(spaceid, H5I_DATASPACE)))
diff --git a/src/H5Spoint.c b/src/H5Spoint.c
index 3e65836..c58e7a7 100644
--- a/src/H5Spoint.c
+++ b/src/H5Spoint.c
@@ -1572,13 +1572,14 @@ H5S__get_select_elem_pointlist(const H5S_t *space, hsize_t startpoint, hsize_t n
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5Sget_select_elem_pointlist(hid_t spaceid, hsize_t startpoint, hsize_t numpoints, hsize_t buf[/*numpoints*/])
+H5Sget_select_elem_pointlist(hid_t spaceid, hsize_t startpoint, hsize_t numpoints,
+ hsize_t buf[/*numpoints*/] /*out*/)
{
H5S_t *space; /* Dataspace to modify selection of */
herr_t ret_value; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE4("e", "ihh*[a2]h", spaceid, startpoint, numpoints, buf);
+ H5TRACE4("e", "ihhx", spaceid, startpoint, numpoints, buf);
/* Check args */
if (NULL == buf)
diff --git a/src/H5Sselect.c b/src/H5Sselect.c
index 023ab80..231f35e 100644
--- a/src/H5Sselect.c
+++ b/src/H5Sselect.c
@@ -602,13 +602,13 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5Sget_select_bounds(hid_t spaceid, hsize_t start[], hsize_t end[])
+H5Sget_select_bounds(hid_t spaceid, hsize_t start[] /*out*/, hsize_t end[] /*out*/)
{
H5S_t *space; /* Dataspace to modify selection of */
herr_t ret_value; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("e", "i*h*h", spaceid, start, end);
+ H5TRACE3("e", "ixx", spaceid, start, end);
/* Check args */
if (start == NULL || end == NULL)
@@ -3056,14 +3056,14 @@ done:
REVISION LOG
--------------------------------------------------------------------------*/
herr_t
-H5Ssel_iter_get_seq_list(hid_t sel_iter_id, size_t maxseq, size_t maxbytes, size_t *nseq, size_t *nbytes,
- hsize_t *off, size_t *len)
+H5Ssel_iter_get_seq_list(hid_t sel_iter_id, size_t maxseq, size_t maxbytes, size_t *nseq /*out*/,
+ size_t *nbytes /*out*/, hsize_t *off /*out*/, size_t *len /*out*/)
{
H5S_sel_iter_t *sel_iter; /* Dataspace selection iterator to operate on */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE7("e", "izz*z*z*h*z", sel_iter_id, maxseq, maxbytes, nseq, nbytes, off, len);
+ H5TRACE7("e", "izzxxxx", sel_iter_id, maxseq, maxbytes, nseq, nbytes, off, len);
/* Check args */
if (NULL == (sel_iter = (H5S_sel_iter_t *)H5I_object_verify(sel_iter_id, H5I_SPACE_SEL_ITER)))
diff --git a/src/H5T.c b/src/H5T.c
index 09fddc5..30f3654 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -2714,7 +2714,7 @@ H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id, H5T_c
herr_t ret_value = SUCCEED; /*return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "Te*siix", pers, name, src_id, dst_id, func);
+ H5TRACE5("e", "Te*siiTC", pers, name, src_id, dst_id, func);
/* Check args */
if (H5T_PERS_HARD != pers && H5T_PERS_SOFT != pers)
@@ -2867,7 +2867,7 @@ H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id, H5T
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API(FAIL)
- H5TRACE5("e", "Te*siix", pers, name, src_id, dst_id, func);
+ H5TRACE5("e", "Te*siiTC", pers, name, src_id, dst_id, func);
/* Check arguments */
if (src_id > 0 && (NULL == (src = (H5T_t *)H5I_object_verify(src_id, H5I_DATATYPE))))
@@ -2901,14 +2901,14 @@ done:
*-------------------------------------------------------------------------
*/
H5T_conv_t
-H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata)
+H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata /*out*/)
{
H5T_t * src, *dst;
H5T_path_t *path;
H5T_conv_t ret_value; /* Return value */
FUNC_ENTER_API(NULL)
- H5TRACE3("x", "ii**x", src_id, dst_id, pcdata);
+ H5TRACE3("TC", "iix", src_id, dst_id, pcdata);
/* Check args */
if (NULL == (src = (H5T_t *)H5I_object_verify(src_id, H5I_DATATYPE)) ||
diff --git a/src/H5TS.c b/src/H5TS.c
index 078a22e..29be128 100644
--- a/src/H5TS.c
+++ b/src/H5TS.c
@@ -49,6 +49,9 @@ typedef struct H5TS_cancel_struct {
unsigned int cancel_count;
} H5TS_cancel_t;
+/* Function pointer typedef for thread callback function */
+typedef void *(*H5TS_thread_cb_t)(void *);
+
/********************/
/* Local Prototypes */
/********************/
@@ -727,7 +730,7 @@ H5TS_win32_thread_exit(void)
*--------------------------------------------------------------------------
*/
H5TS_thread_t
-H5TS_create_thread(void *(*func)(void *), H5TS_attr_t *attr, void *udata)
+H5TS_create_thread(H5TS_thread_cb_t func, H5TS_attr_t *attr, void *udata)
{
H5TS_thread_t ret_value;
diff --git a/src/H5Tarray.c b/src/H5Tarray.c
index 5afe74c..0371437 100644
--- a/src/H5Tarray.c
+++ b/src/H5Tarray.c
@@ -255,13 +255,13 @@ H5T__get_array_ndims(const H5T_t *dt)
*-------------------------------------------------------------------------
*/
int
-H5Tget_array_dims2(hid_t type_id, hsize_t dims[])
+H5Tget_array_dims2(hid_t type_id, hsize_t dims[] /*out*/)
{
H5T_t *dt; /* pointer to array data type */
int ret_value; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE2("Is", "i*h", type_id, dims);
+ H5TRACE2("Is", "ix", type_id, dims);
/* Check args */
if (NULL == (dt = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
@@ -383,13 +383,13 @@ done:
*-------------------------------------------------------------------------
*/
int
-H5Tget_array_dims1(hid_t type_id, hsize_t dims[], int H5_ATTR_UNUSED perm[])
+H5Tget_array_dims1(hid_t type_id, hsize_t dims[] /*out*/, int H5_ATTR_UNUSED perm[] /*out*/)
{
H5T_t *dt; /* Array datatype to query */
int ret_value; /* return value */
FUNC_ENTER_API(FAIL)
- H5TRACE3("Is", "i*h*Is", type_id, dims, perm);
+ H5TRACE3("Is", "ixx", type_id, dims, perm);
/* Check args */
if (NULL == (dt = (H5T_t *)H5I_object_verify(type_id, H5I_DATATYPE)))
diff --git a/src/H5VL.c b/src/H5VL.c
index d60bd5f..4d7ff29 100644
--- a/src/H5VL.c
+++ b/src/H5VL.c
@@ -85,7 +85,7 @@ H5VLregister_connector(const H5VL_class_t *cls, hid_t vipl_id)
hid_t ret_value = H5I_INVALID_HID; /* Return value */
FUNC_ENTER_API(H5I_INVALID_HID)
- H5TRACE2("i", "*xi", cls, vipl_id);
+ H5TRACE2("i", "*#i", cls, vipl_id);
/* Check arguments */
if (!cls)
@@ -757,13 +757,13 @@ done:
*---------------------------------------------------------------------------
*/
herr_t
-H5VLretrieve_lib_state(void **state)
+H5VLretrieve_lib_state(void **state /*out*/)
{
herr_t ret_value = SUCCEED; /* Return value */
/* Must use this, to avoid modifying the API context stack in FUNC_ENTER */
FUNC_ENTER_API_NOINIT
- H5TRACE1("e", "**x", state);
+ H5TRACE1("e", "x", state);
/* Check args */
if (NULL == state)
diff --git a/src/H5VLcallback.c b/src/H5VLcallback.c
index 4657213..460a170 100644
--- a/src/H5VLcallback.c
+++ b/src/H5VLcallback.c
@@ -263,13 +263,13 @@ done:
*---------------------------------------------------------------------------
*/
herr_t
-H5VLget_cap_flags(hid_t connector_id, unsigned *cap_flags)
+H5VLget_cap_flags(hid_t connector_id, unsigned *cap_flags /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE2("e", "i*Iu", connector_id, cap_flags);
+ H5TRACE2("e", "ix", connector_id, cap_flags);
/* Check args */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -294,13 +294,13 @@ done:
*---------------------------------------------------------------------------
*/
herr_t
-H5VLget_value(hid_t connector_id, H5VL_class_value_t *value)
+H5VLget_value(hid_t connector_id, H5VL_class_value_t *value /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE2("e", "i*VC", connector_id, value);
+ H5TRACE2("e", "ix", connector_id, value);
/* Check args */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -599,12 +599,12 @@ done:
*---------------------------------------------------------------------------
*/
herr_t
-H5VLconnector_str_to_info(const char *str, hid_t connector_id, void **info)
+H5VLconnector_str_to_info(const char *str, hid_t connector_id, void **info /*out*/)
{
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE3("e", "*si**x", str, connector_id, info);
+ H5TRACE3("e", "*six", str, connector_id, info);
/* Call internal routine */
if (H5VL__connector_str_to_info(str, connector_id, info) < 0)
@@ -698,13 +698,13 @@ done:
*---------------------------------------------------------------------------
*/
herr_t
-H5VLget_wrap_ctx(void *obj, hid_t connector_id, void **wrap_ctx)
+H5VLget_wrap_ctx(void *obj, hid_t connector_id, void **wrap_ctx /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE3("e", "*xi**x", obj, connector_id, wrap_ctx);
+ H5TRACE3("e", "*xix", obj, connector_id, wrap_ctx);
/* Check args and get class pointer */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -994,14 +994,15 @@ done:
*/
void *
H5VLattr_create(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, const char *name,
- hid_t type_id, hid_t space_id, hid_t acpl_id, hid_t aapl_id, hid_t dxpl_id, void **req)
+ hid_t type_id, hid_t space_id, hid_t acpl_id, hid_t aapl_id, hid_t dxpl_id,
+ void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE10("*x", "*x*xi*siiiii**x", obj, loc_params, connector_id, name, type_id, space_id, acpl_id,
- aapl_id, dxpl_id, req);
+ H5TRACE10("*x", "*x*#i*siiiiix", obj, loc_params, connector_id, name, type_id, space_id, acpl_id, aapl_id,
+ dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -1097,13 +1098,13 @@ done:
*/
void *
H5VLattr_open(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, const char *name,
- hid_t aapl_id, hid_t dxpl_id, void **req)
+ hid_t aapl_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE7("*x", "*x*xi*sii**x", obj, loc_params, connector_id, name, aapl_id, dxpl_id, req);
+ H5TRACE7("*x", "*x*#i*siix", obj, loc_params, connector_id, name, aapl_id, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -1194,13 +1195,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLattr_read(void *obj, hid_t connector_id, hid_t mem_type_id, void *buf, hid_t dxpl_id, void **req)
+H5VLattr_read(void *obj, hid_t connector_id, hid_t mem_type_id, void *buf, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xii*xi**x", obj, connector_id, mem_type_id, buf, dxpl_id, req);
+ H5TRACE6("e", "*xii*xix", obj, connector_id, mem_type_id, buf, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -1292,13 +1293,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLattr_write(void *obj, hid_t connector_id, hid_t mem_type_id, const void *buf, hid_t dxpl_id, void **req)
+H5VLattr_write(void *obj, hid_t connector_id, hid_t mem_type_id, const void *buf, hid_t dxpl_id,
+ void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xii*xi**x", obj, connector_id, mem_type_id, buf, dxpl_id, req);
+ H5TRACE6("e", "*xii*xix", obj, connector_id, mem_type_id, buf, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -1398,14 +1400,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLattr_get(void *obj, hid_t connector_id, H5VL_attr_get_t get_type, hid_t dxpl_id, void **req,
+H5VLattr_get(void *obj, hid_t connector_id, H5VL_attr_get_t get_type, hid_t dxpl_id, void **req /*out*/,
va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVai**xx", obj, connector_id, get_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVaixx", obj, connector_id, get_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -1508,13 +1510,13 @@ done:
*/
herr_t
H5VLattr_specific(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id,
- H5VL_attr_specific_t specific_type, hid_t dxpl_id, void **req, va_list arguments)
+ H5VL_attr_specific_t specific_type, hid_t dxpl_id, void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE7("e", "*x*xiVbi**xx", obj, loc_params, connector_id, specific_type, dxpl_id, req, arguments);
+ H5TRACE7("e", "*x*#iVbixx", obj, loc_params, connector_id, specific_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -1616,14 +1618,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLattr_optional(void *obj, hid_t connector_id, H5VL_attr_optional_t opt_type, hid_t dxpl_id, void **req,
- va_list arguments)
+H5VLattr_optional(void *obj, hid_t connector_id, H5VL_attr_optional_t opt_type, hid_t dxpl_id,
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVsi**xx", obj, connector_id, opt_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVsixx", obj, connector_id, opt_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -1707,13 +1709,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLattr_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req)
+H5VLattr_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE4("e", "*xii**x", obj, connector_id, dxpl_id, req);
+ H5TRACE4("e", "*xiix", obj, connector_id, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -1813,13 +1815,13 @@ done:
void *
H5VLdataset_create(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, const char *name,
hid_t lcpl_id, hid_t type_id, hid_t space_id, hid_t dcpl_id, hid_t dapl_id, hid_t dxpl_id,
- void **req)
+ void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE11("*x", "*x*xi*siiiiii**x", obj, loc_params, connector_id, name, lcpl_id, type_id, space_id,
+ H5TRACE11("*x", "*x*#i*siiiiiix", obj, loc_params, connector_id, name, lcpl_id, type_id, space_id,
dcpl_id, dapl_id, dxpl_id, req);
/* Check args and get class pointer */
@@ -1916,13 +1918,13 @@ done:
*/
void *
H5VLdataset_open(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, const char *name,
- hid_t dapl_id, hid_t dxpl_id, void **req)
+ hid_t dapl_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE7("*x", "*x*xi*sii**x", obj, loc_params, connector_id, name, dapl_id, dxpl_id, req);
+ H5TRACE7("*x", "*x*#i*siix", obj, loc_params, connector_id, name, dapl_id, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -2017,13 +2019,13 @@ done:
*/
herr_t
H5VLdataset_read(void *obj, hid_t connector_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id,
- hid_t dxpl_id, void *buf, void **req)
+ hid_t dxpl_id, void *buf, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE8("e", "*xiiiii*x**x", obj, connector_id, mem_type_id, mem_space_id, file_space_id, dxpl_id, buf,
+ H5TRACE8("e", "*xiiiii*xx", obj, connector_id, mem_type_id, mem_space_id, file_space_id, dxpl_id, buf,
req);
/* Check args and get class pointer */
@@ -2119,13 +2121,13 @@ done:
*/
herr_t
H5VLdataset_write(void *obj, hid_t connector_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id,
- hid_t dxpl_id, const void *buf, void **req)
+ hid_t dxpl_id, const void *buf, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE8("e", "*xiiiii*x**x", obj, connector_id, mem_type_id, mem_space_id, file_space_id, dxpl_id, buf,
+ H5TRACE8("e", "*xiiiii*xx", obj, connector_id, mem_type_id, mem_space_id, file_space_id, dxpl_id, buf,
req);
/* Check args and get class pointer */
@@ -2226,14 +2228,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLdataset_get(void *obj, hid_t connector_id, H5VL_dataset_get_t get_type, hid_t dxpl_id, void **req,
+H5VLdataset_get(void *obj, hid_t connector_id, H5VL_dataset_get_t get_type, hid_t dxpl_id, void **req /*out*/,
va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVci**xx", obj, connector_id, get_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVcixx", obj, connector_id, get_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -2336,13 +2338,13 @@ done:
*/
herr_t
H5VLdataset_specific(void *obj, hid_t connector_id, H5VL_dataset_specific_t specific_type, hid_t dxpl_id,
- void **req, va_list arguments)
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVdi**xx", obj, connector_id, specific_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVdixx", obj, connector_id, specific_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -2444,13 +2446,13 @@ done:
*/
herr_t
H5VLdataset_optional(void *obj, hid_t connector_id, H5VL_dataset_optional_t opt_type, hid_t dxpl_id,
- void **req, va_list arguments)
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVti**xx", obj, connector_id, opt_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVtixx", obj, connector_id, opt_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -2551,13 +2553,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLdataset_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req)
+H5VLdataset_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE4("e", "*xii**x", obj, connector_id, dxpl_id, req);
+ H5TRACE4("e", "*xiix", obj, connector_id, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -2654,14 +2656,15 @@ done:
*/
void *
H5VLdatatype_commit(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, const char *name,
- hid_t type_id, hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id, hid_t dxpl_id, void **req)
+ hid_t type_id, hid_t lcpl_id, hid_t tcpl_id, hid_t tapl_id, hid_t dxpl_id,
+ void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE10("*x", "*x*xi*siiiii**x", obj, loc_params, connector_id, name, type_id, lcpl_id, tcpl_id,
- tapl_id, dxpl_id, req);
+ H5TRACE10("*x", "*x*#i*siiiiix", obj, loc_params, connector_id, name, type_id, lcpl_id, tcpl_id, tapl_id,
+ dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -2757,13 +2760,13 @@ done:
*/
void *
H5VLdatatype_open(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, const char *name,
- hid_t tapl_id, hid_t dxpl_id, void **req)
+ hid_t tapl_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE7("*x", "*x*xi*sii**x", obj, loc_params, connector_id, name, tapl_id, dxpl_id, req);
+ H5TRACE7("*x", "*x*#i*siix", obj, loc_params, connector_id, name, tapl_id, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -2863,14 +2866,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLdatatype_get(void *obj, hid_t connector_id, H5VL_datatype_get_t get_type, hid_t dxpl_id, void **req,
- va_list arguments)
+H5VLdatatype_get(void *obj, hid_t connector_id, H5VL_datatype_get_t get_type, hid_t dxpl_id,
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVei**xx", obj, connector_id, get_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVeixx", obj, connector_id, get_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -2977,13 +2980,13 @@ done:
*/
herr_t
H5VLdatatype_specific(void *obj, hid_t connector_id, H5VL_datatype_specific_t specific_type, hid_t dxpl_id,
- void **req, va_list arguments)
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVfi**xx", obj, connector_id, specific_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVfixx", obj, connector_id, specific_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -3086,13 +3089,13 @@ done:
*/
herr_t
H5VLdatatype_optional(void *obj, hid_t connector_id, H5VL_datatype_optional_t opt_type, hid_t dxpl_id,
- void **req, va_list arguments)
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVui**xx", obj, connector_id, opt_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVuixx", obj, connector_id, opt_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -3183,13 +3186,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLdatatype_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req)
+H5VLdatatype_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE4("e", "*xii**x", obj, connector_id, dxpl_id, req);
+ H5TRACE4("e", "*xiix", obj, connector_id, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -3283,7 +3286,8 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5VLfile_create(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t dxpl_id, void **req)
+H5VLfile_create(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t dxpl_id,
+ void **req /*out*/)
{
H5P_genplist_t * plist; /* Property list pointer */
H5VL_connector_prop_t connector_prop; /* Property for VOL connector ID & info */
@@ -3291,7 +3295,7 @@ H5VLfile_create(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id,
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("*x", "*sIuiii**x", name, flags, fcpl_id, fapl_id, dxpl_id, req);
+ H5TRACE6("*x", "*sIuiiix", name, flags, fcpl_id, fapl_id, dxpl_id, req);
/* Get the VOL info from the fapl */
if (NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
@@ -3386,7 +3390,7 @@ done:
*-------------------------------------------------------------------------
*/
void *
-H5VLfile_open(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, void **req)
+H5VLfile_open(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, void **req /*out*/)
{
H5P_genplist_t * plist; /* Property list pointer */
H5VL_connector_prop_t connector_prop; /* Property for VOL connector ID & info */
@@ -3394,7 +3398,7 @@ H5VLfile_open(const char *name, unsigned flags, hid_t fapl_id, hid_t dxpl_id, vo
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE5("*x", "*sIuii**x", name, flags, fapl_id, dxpl_id, req);
+ H5TRACE5("*x", "*sIuiix", name, flags, fapl_id, dxpl_id, req);
/* Get the VOL info from the fapl */
if (NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
@@ -3498,14 +3502,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLfile_get(void *obj, hid_t connector_id, H5VL_file_get_t get_type, hid_t dxpl_id, void **req,
+H5VLfile_get(void *obj, hid_t connector_id, H5VL_file_get_t get_type, hid_t dxpl_id, void **req /*out*/,
va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVgi**xx", obj, connector_id, get_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVgixx", obj, connector_id, get_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -3643,13 +3647,13 @@ done:
*/
herr_t
H5VLfile_specific(void *obj, hid_t connector_id, H5VL_file_specific_t specific_type, hid_t dxpl_id,
- void **req, va_list arguments)
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVhi**xx", obj, connector_id, specific_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVhixx", obj, connector_id, specific_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -3748,14 +3752,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLfile_optional(void *obj, hid_t connector_id, H5VL_file_optional_t opt_type, hid_t dxpl_id, void **req,
- va_list arguments)
+H5VLfile_optional(void *obj, hid_t connector_id, H5VL_file_optional_t opt_type, hid_t dxpl_id,
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVvi**xx", obj, connector_id, opt_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVvixx", obj, connector_id, opt_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -3850,13 +3854,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLfile_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req)
+H5VLfile_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE4("e", "*xii**x", obj, connector_id, dxpl_id, req);
+ H5TRACE4("e", "*xiix", obj, connector_id, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -3952,13 +3956,13 @@ done:
*/
void *
H5VLgroup_create(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, const char *name,
- hid_t lcpl_id, hid_t gcpl_id, hid_t gapl_id, hid_t dxpl_id, void **req)
+ hid_t lcpl_id, hid_t gcpl_id, hid_t gapl_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE9("*x", "*x*xi*siiii**x", obj, loc_params, connector_id, name, lcpl_id, gcpl_id, gapl_id, dxpl_id,
+ H5TRACE9("*x", "*x*#i*siiiix", obj, loc_params, connector_id, name, lcpl_id, gcpl_id, gapl_id, dxpl_id,
req);
/* Check args and get class pointer */
@@ -4055,13 +4059,13 @@ done:
*/
void *
H5VLgroup_open(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, const char *name,
- hid_t gapl_id, hid_t dxpl_id, void **req)
+ hid_t gapl_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE7("*x", "*x*xi*sii**x", obj, loc_params, connector_id, name, gapl_id, dxpl_id, req);
+ H5TRACE7("*x", "*x*#i*siix", obj, loc_params, connector_id, name, gapl_id, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -4161,14 +4165,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLgroup_get(void *obj, hid_t connector_id, H5VL_group_get_t get_type, hid_t dxpl_id, void **req,
+H5VLgroup_get(void *obj, hid_t connector_id, H5VL_group_get_t get_type, hid_t dxpl_id, void **req /*out*/,
va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVii**xx", obj, connector_id, get_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiViixx", obj, connector_id, get_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -4271,13 +4275,13 @@ done:
*/
herr_t
H5VLgroup_specific(void *obj, hid_t connector_id, H5VL_group_specific_t specific_type, hid_t dxpl_id,
- void **req, va_list arguments)
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVji**xx", obj, connector_id, specific_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVjixx", obj, connector_id, specific_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -4379,14 +4383,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLgroup_optional(void *obj, hid_t connector_id, H5VL_group_optional_t opt_type, hid_t dxpl_id, void **req,
- va_list arguments)
+H5VLgroup_optional(void *obj, hid_t connector_id, H5VL_group_optional_t opt_type, hid_t dxpl_id,
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVwi**xx", obj, connector_id, opt_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVwixx", obj, connector_id, opt_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -4481,13 +4485,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLgroup_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req)
+H5VLgroup_close(void *obj, hid_t connector_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE4("e", "*xii**x", obj, connector_id, dxpl_id, req);
+ H5TRACE4("e", "*xiix", obj, connector_id, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -4613,15 +4617,15 @@ done:
*/
herr_t
H5VLlink_create(H5VL_link_create_type_t create_type, void *obj, const H5VL_loc_params_t *loc_params,
- hid_t connector_id, hid_t lcpl_id, hid_t lapl_id, hid_t dxpl_id, void **req,
+ hid_t connector_id, hid_t lcpl_id, hid_t lapl_id, hid_t dxpl_id, void **req /*out*/,
va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE9("e", "Vk*x*xiiii**xx", create_type, obj, loc_params, connector_id, lcpl_id, lapl_id, dxpl_id,
- req, arguments);
+ H5TRACE9("e", "Vk*x*#iiiixx", create_type, obj, loc_params, connector_id, lcpl_id, lapl_id, dxpl_id, req,
+ arguments);
/* Get class pointer */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -4721,14 +4725,14 @@ done:
herr_t
H5VLlink_copy(void *src_obj, const H5VL_loc_params_t *loc_params1, void *dst_obj,
const H5VL_loc_params_t *loc_params2, hid_t connector_id, hid_t lcpl_id, hid_t lapl_id,
- hid_t dxpl_id, void **req)
+ hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE9("e", "*x*x*x*xiiii**x", src_obj, loc_params1, dst_obj, loc_params2, connector_id, lcpl_id,
- lapl_id, dxpl_id, req);
+ H5TRACE9("e", "*x*#*x*#iiiix", src_obj, loc_params1, dst_obj, loc_params2, connector_id, lcpl_id, lapl_id,
+ dxpl_id, req);
/* Get class pointer */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -4828,14 +4832,14 @@ done:
herr_t
H5VLlink_move(void *src_obj, const H5VL_loc_params_t *loc_params1, void *dst_obj,
const H5VL_loc_params_t *loc_params2, hid_t connector_id, hid_t lcpl_id, hid_t lapl_id,
- hid_t dxpl_id, void **req)
+ hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE9("e", "*x*x*x*xiiii**x", src_obj, loc_params1, dst_obj, loc_params2, connector_id, lcpl_id,
- lapl_id, dxpl_id, req);
+ H5TRACE9("e", "*x*#*x*#iiiix", src_obj, loc_params1, dst_obj, loc_params2, connector_id, lcpl_id, lapl_id,
+ dxpl_id, req);
/* Get class pointer */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -4936,13 +4940,13 @@ done:
*/
herr_t
H5VLlink_get(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, H5VL_link_get_t get_type,
- hid_t dxpl_id, void **req, va_list arguments)
+ hid_t dxpl_id, void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE7("e", "*x*xiVli**xx", obj, loc_params, connector_id, get_type, dxpl_id, req, arguments);
+ H5TRACE7("e", "*x*#iVlixx", obj, loc_params, connector_id, get_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -5045,13 +5049,13 @@ done:
*/
herr_t
H5VLlink_specific(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id,
- H5VL_link_specific_t specific_type, hid_t dxpl_id, void **req, va_list arguments)
+ H5VL_link_specific_t specific_type, hid_t dxpl_id, void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE7("e", "*x*xiVmi**xx", obj, loc_params, connector_id, specific_type, dxpl_id, req, arguments);
+ H5TRACE7("e", "*x*#iVmixx", obj, loc_params, connector_id, specific_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -5152,14 +5156,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLlink_optional(void *obj, hid_t connector_id, H5VL_link_optional_t opt_type, hid_t dxpl_id, void **req,
- va_list arguments)
+H5VLlink_optional(void *obj, hid_t connector_id, H5VL_link_optional_t opt_type, hid_t dxpl_id,
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVxi**xx", obj, connector_id, opt_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVxixx", obj, connector_id, opt_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -5254,13 +5258,13 @@ done:
*/
void *
H5VLobject_open(void *obj, const H5VL_loc_params_t *params, hid_t connector_id, H5I_type_t *opened_type,
- hid_t dxpl_id, void **req)
+ hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
void * ret_value = NULL; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("*x", "*x*xi*Iti**x", obj, params, connector_id, opened_type, dxpl_id, req);
+ H5TRACE6("*x", "*x*#i*Itix", obj, params, connector_id, opened_type, dxpl_id, req);
/* Check args and get class pointer */
if (NULL == obj)
@@ -5364,14 +5368,14 @@ done:
herr_t
H5VLobject_copy(void *src_obj, const H5VL_loc_params_t *src_loc_params, const char *src_name, void *dst_obj,
const H5VL_loc_params_t *dst_loc_params, const char *dst_name, hid_t connector_id,
- hid_t ocpypl_id, hid_t lcpl_id, hid_t dxpl_id, void **req)
+ hid_t ocpypl_id, hid_t lcpl_id, hid_t dxpl_id, void **req /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE11("e", "*x*x*s*x*x*siiii**x", src_obj, src_loc_params, src_name, dst_obj, dst_loc_params,
- dst_name, connector_id, ocpypl_id, lcpl_id, dxpl_id, req);
+ H5TRACE11("e", "*x*#*s*x*#*siiiix", src_obj, src_loc_params, src_name, dst_obj, dst_loc_params, dst_name,
+ connector_id, ocpypl_id, lcpl_id, dxpl_id, req);
/* Check args and get class pointers */
if (NULL == src_obj || NULL == dst_obj)
@@ -5475,13 +5479,13 @@ done:
*/
herr_t
H5VLobject_get(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id, H5VL_object_get_t get_type,
- hid_t dxpl_id, void **req, va_list arguments)
+ hid_t dxpl_id, void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE7("e", "*x*xiVni**xx", obj, loc_params, connector_id, get_type, dxpl_id, req, arguments);
+ H5TRACE7("e", "*x*#iVnixx", obj, loc_params, connector_id, get_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -5584,13 +5588,14 @@ done:
*/
herr_t
H5VLobject_specific(void *obj, const H5VL_loc_params_t *loc_params, hid_t connector_id,
- H5VL_object_specific_t specific_type, hid_t dxpl_id, void **req, va_list arguments)
+ H5VL_object_specific_t specific_type, hid_t dxpl_id, void **req /*out*/,
+ va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE7("e", "*x*xiVoi**xx", obj, loc_params, connector_id, specific_type, dxpl_id, req, arguments);
+ H5TRACE7("e", "*x*#iVoixx", obj, loc_params, connector_id, specific_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -5695,14 +5700,14 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLobject_optional(void *obj, hid_t connector_id, H5VL_object_optional_t opt_type, hid_t dxpl_id, void **req,
- va_list arguments)
+H5VLobject_optional(void *obj, hid_t connector_id, H5VL_object_optional_t opt_type, hid_t dxpl_id,
+ void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiVyi**xx", obj, connector_id, opt_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiVyixx", obj, connector_id, opt_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
@@ -5805,13 +5810,13 @@ done:
*/
herr_t
H5VLintrospect_get_conn_cls(void *obj, hid_t connector_id, H5VL_get_conn_lvl_t lvl,
- const H5VL_class_t **conn_cls)
+ const H5VL_class_t **conn_cls /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE4("e", "*xiVL**x", obj, connector_id, lvl, conn_cls);
+ H5TRACE4("e", "*xiVLx", obj, connector_id, lvl, conn_cls);
/* Check args */
if (NULL == obj)
@@ -5912,13 +5917,13 @@ done:
*/
herr_t
H5VLintrospect_opt_query(void *obj, hid_t connector_id, H5VL_subclass_t subcls, int opt_type,
- hbool_t *supported)
+ hbool_t *supported /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE5("e", "*xiVSIs*b", obj, connector_id, subcls, opt_type, supported);
+ H5TRACE5("e", "*xiVSIsx", obj, connector_id, subcls, opt_type, supported);
/* Get class pointer */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -6024,13 +6029,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLrequest_wait(void *req, hid_t connector_id, uint64_t timeout, H5ES_status_t *status)
+H5VLrequest_wait(void *req, hid_t connector_id, uint64_t timeout, H5ES_status_t *status /*out*/)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE4("e", "*xiUL*Es", req, connector_id, timeout, status);
+ H5TRACE4("e", "*xiULx", req, connector_id, timeout, status);
/* Get class pointer */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -6141,7 +6146,7 @@ H5VLrequest_notify(void *req, hid_t connector_id, H5VL_request_notify_t cb, void
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE4("e", "*xix*x", req, connector_id, cb, ctx);
+ H5TRACE4("e", "*xiVN*x", req, connector_id, cb, ctx);
/* Get class pointer */
if (NULL == (cls = (H5VL_class_t *)H5I_object_verify(connector_id, H5I_VOL)))
@@ -6783,13 +6788,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLblob_get(void *obj, hid_t connector_id, const void *blob_id, void *buf, size_t size, void *ctx)
+H5VLblob_get(void *obj, hid_t connector_id, const void *blob_id, void *buf /*out*/, size_t size, void *ctx)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xi*x*xz*x", obj, connector_id, blob_id, buf, size, ctx);
+ H5TRACE6("e", "*xi*xxz*x", obj, connector_id, blob_id, buf, size, ctx);
/* Get class pointer */
if (NULL == obj)
@@ -7495,13 +7500,13 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5VLoptional(void *obj, hid_t connector_id, int op_type, hid_t dxpl_id, void **req, va_list arguments)
+H5VLoptional(void *obj, hid_t connector_id, int op_type, hid_t dxpl_id, void **req /*out*/, va_list arguments)
{
H5VL_class_t *cls; /* VOL connector's class struct */
herr_t ret_value = SUCCEED; /* Return value */
FUNC_ENTER_API_NOINIT
- H5TRACE6("e", "*xiIsi**xx", obj, connector_id, op_type, dxpl_id, req, arguments);
+ H5TRACE6("e", "*xiIsixx", obj, connector_id, op_type, dxpl_id, req, arguments);
/* Check args and get class pointer */
if (NULL == obj)
diff --git a/src/H5Z.c b/src/H5Z.c
index 7f7a450..8355f17 100644
--- a/src/H5Z.c
+++ b/src/H5Z.c
@@ -1665,12 +1665,12 @@ done:
*-------------------------------------------------------------------------
*/
herr_t
-H5Zget_filter_info(H5Z_filter_t filter, unsigned int *filter_config_flags)
+H5Zget_filter_info(H5Z_filter_t filter, unsigned *filter_config_flags /*out*/)
{
herr_t ret_value = SUCCEED;
FUNC_ENTER_API(FAIL)
- H5TRACE2("e", "Zf*Iu", filter, filter_config_flags);
+ H5TRACE2("e", "Zfx", filter, filter_config_flags);
/* Get the filter info */
if (H5Z_get_filter_info(filter, filter_config_flags) < 0)
diff --git a/src/H5private.h b/src/H5private.h
index dba48a6..2d90766 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -1994,7 +1994,31 @@ extern char H5libhdf5_settings[]; /* embedded library information */
#define H5TRACE_RETURN(V) /*void*/
#endif /* H5_DEBUG_API */
+/* Argument tracing macros (defined all the time) */
+#define H5ARG_TRACE0(C, T) C, T
+#define H5ARG_TRACE1(C, T, A0) C, T, #A0, A0
+#define H5ARG_TRACE2(C, T, A0, A1) C, T, #A0, A0, #A1, A1
+#define H5ARG_TRACE3(C, T, A0, A1, A2) C, T, #A0, A0, #A1, A1, #A2, A2
+#define H5ARG_TRACE4(C, T, A0, A1, A2, A3) C, T, #A0, A0, #A1, A1, #A2, A2, #A3, A3
+#define H5ARG_TRACE5(C, T, A0, A1, A2, A3, A4) C, T, #A0, A0, #A1, A1, #A2, A2, #A3, A3, #A4, A4
+#define H5ARG_TRACE6(C, T, A0, A1, A2, A3, A4, A5) C, T, #A0, A0, #A1, A1, #A2, A2, #A3, A3, #A4, A4, #A5, A5
+#define H5ARG_TRACE7(C, T, A0, A1, A2, A3, A4, A5, A6) \
+ C, T, #A0, A0, #A1, A1, #A2, A2, #A3, A3, #A4, A4, #A5, A5, #A6, A6
+#define H5ARG_TRACE8(C, T, A0, A1, A2, A3, A4, A5, A6, A7) \
+ C, T, #A0, A0, #A1, A1, #A2, A2, #A3, A3, #A4, A4, #A5, A5, #A6, A6, #A7, A7
+#define H5ARG_TRACE9(C, T, A0, A1, A2, A3, A4, A5, A6, A7, A8) \
+ C, T, #A0, A0, #A1, A1, #A2, A2, #A3, A3, #A4, A4, #A5, A5, #A6, A6, #A7, A7, #A8, A8
+#define H5ARG_TRACE10(C, T, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9) \
+ C, T, #A0, A0, #A1, A1, #A2, A2, #A3, A3, #A4, A4, #A5, A5, #A6, A6, #A7, A7, #A8, A8, #A9, A9
+#define H5ARG_TRACE11(C, T, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10) \
+ C, T, #A0, A0, #A1, A1, #A2, A2, #A3, A3, #A4, A4, #A5, A5, #A6, A6, #A7, A7, #A8, A8, #A9, A9, #A10, A10
+#define H5ARG_TRACE12(C, T, A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10, A11) \
+ C, T, #A0, A0, #A1, A1, #A2, A2, #A3, A3, #A4, A4, #A5, A5, #A6, A6, #A7, A7, #A8, A8, #A9, A9, #A10, \
+ A10, #A11, A11
+
+struct H5RS_str_t;
H5_DLL double H5_trace(const double *calltime, const char *func, const char *type, ...);
+H5_DLL herr_t H5_trace_args(struct H5RS_str_t *rs, const char *type, va_list ap);
/*-------------------------------------------------------------------------
* Purpose: Register function entry for library initialization and code
diff --git a/src/H5trace.c b/src/H5trace.c
index 8f73564..4beecc3 100644
--- a/src/H5trace.c
+++ b/src/H5trace.c
@@ -37,7 +37,9 @@
#include "H5FDprivate.h" /* File drivers */
#include "H5Rprivate.h" /* References */
#include "H5Ipkg.h" /* IDs */
+#include "H5Mpublic.h" /* Maps */
#include "H5MMprivate.h" /* Memory management */
+#include "H5RSprivate.h" /* Reference-counted strings */
#include "H5VLprivate.h" /* Virtual Object Layer */
#ifdef H5_HAVE_PARALLEL
@@ -60,6 +62,9 @@
/********************/
/* Local Prototypes */
/********************/
+static herr_t H5_trace_args_bool(H5RS_str_t *rs, hbool_t val);
+static herr_t H5_trace_args_cset(H5RS_str_t *rs, H5T_cset_t cset);
+static herr_t H5_trace_args_close_degree(H5RS_str_t *rs, H5F_close_degree_t degree);
/*********************/
/* Package Variables */
@@ -74,134 +79,170 @@
/*******************/
/*-------------------------------------------------------------------------
- * Function: H5_trace
+ * Function: H5_trace_args_bool
*
- * Purpose: This function is called whenever an API function is called
- * and tracing is turned on. If RETURNING is non-zero then
- * the caller is about to return and RETURNING points to the
- * time for the corresponding function call event. Otherwise
- * we print the function name and the arguments.
+ * Purpose: This routine formats an hbool_t and adds the output to
+ * the refcounted string (RS) argument.
*
- * The TYPE argument is a string which gives the type of each of
- * the following argument pairs. Each type is zero or more
- * asterisks (one for each level of indirection, although some
- * types have one level of indirection already implied) followed
- * by either one letter (lower case) or two letters (first one
- * uppercase).
+ * Return: SUCCEED / FAIL
*
- * The variable argument list consists of pairs of values. Each
- * pair is a string which is the formal argument name in the
- * calling function, followed by the argument value. The type
- * of the argument value is given by the TYPE string.
+ * Programmer: Quincey Koziol
+ * Monday, September 21, 2020
*
- * Note: The TYPE string is meant to be terse and is generated by a
- * separate perl script.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5_trace_args_bool(H5RS_str_t *rs, hbool_t val)
+{
+ /* FUNC_ENTER() should not be called */
+
+ if (TRUE == val)
+ H5RS_acat(rs, "TRUE");
+ else if (!val)
+ H5RS_acat(rs, "FALSE");
+ else
+ H5RS_asprintf_cat(rs, "TRUE(%u)", (unsigned)val);
+
+ return SUCCEED;
+} /* end H5_trace_args_bool() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5_trace_args_cset
*
- * WARNING: DO NOT CALL ANY HDF5 FUNCTION THAT CALLS FUNC_ENTER(). DOING
- * SO MAY CAUSE H5_trace() TO BE INVOKED RECURSIVELY OR MAY
- * CAUSE LIBRARY INITIALIZATIONS THAT ARE NOT DESIRED.
+ * Purpose: This routine formats an H5T_cset_t and adds the output to
+ * the refcounted string (RS) argument.
*
- * Return: Execution time for an API call
+ * Return: SUCCEED / FAIL
*
- * Programmer: Robb Matzke
- * Tuesday, June 16, 1998
+ * Programmer: Quincey Koziol
+ * Sunday, September 20, 2020
*
*-------------------------------------------------------------------------
*/
-double
-H5_trace(const double *returning, const char *func, const char *type, ...)
+static herr_t
+H5_trace_args_cset(H5RS_str_t *rs, H5T_cset_t cset)
{
- va_list ap;
- char buf[64], *rest;
- const char * argname;
- int argno = 0, ptr, asize_idx;
- hssize_t asize[16];
- hssize_t i;
- void * vp = NULL;
- FILE * out = H5_debug_g.trace;
- static hbool_t is_first_invocation = TRUE;
- H5_timer_t function_timer;
- H5_timevals_t function_times;
- static H5_timer_t running_timer;
- H5_timevals_t running_times;
- static int current_depth = 0;
- static int last_call_depth = 0;
+ /* FUNC_ENTER() should not be called */
+ switch (cset) {
+ case H5T_CSET_ERROR:
+ H5RS_acat(rs, "H5T_CSET_ERROR");
+ break;
+
+ case H5T_CSET_ASCII:
+ H5RS_acat(rs, "H5T_CSET_ASCII");
+ break;
+
+ case H5T_CSET_UTF8:
+ H5RS_acat(rs, "H5T_CSET_UTF8");
+ break;
+
+ case H5T_CSET_RESERVED_2:
+ case H5T_CSET_RESERVED_3:
+ case H5T_CSET_RESERVED_4:
+ case H5T_CSET_RESERVED_5:
+ case H5T_CSET_RESERVED_6:
+ case H5T_CSET_RESERVED_7:
+ case H5T_CSET_RESERVED_8:
+ case H5T_CSET_RESERVED_9:
+ case H5T_CSET_RESERVED_10:
+ case H5T_CSET_RESERVED_11:
+ case H5T_CSET_RESERVED_12:
+ case H5T_CSET_RESERVED_13:
+ case H5T_CSET_RESERVED_14:
+ case H5T_CSET_RESERVED_15:
+ H5RS_asprintf_cat(rs, "H5T_CSET_RESERVED_%ld", (long)cset);
+ break;
+
+ default:
+ H5RS_asprintf_cat(rs, "%ld", (long)cset);
+ break;
+ } /* end switch */
+
+ return SUCCEED;
+} /* end H5_trace_args_cset() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5_trace_args_close_degree
+ *
+ * Purpose: This routine formats an H5F_close_degree_t and adds the output to
+ * the refcounted string (RS) argument.
+ *
+ * Return: SUCCEED / FAIL
+ *
+ * Programmer: Quincey Koziol
+ * Monday, September 21, 2020
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5_trace_args_close_degree(H5RS_str_t *rs, H5F_close_degree_t degree)
+{
/* FUNC_ENTER() should not be called */
- if (!out)
- return 0.0F; /*tracing is off*/
- HDva_start(ap, type);
+ switch (degree) {
+ case H5F_CLOSE_DEFAULT:
+ H5RS_acat(rs, "H5F_CLOSE_DEFAULT");
+ break;
- if (H5_debug_g.ttop) {
- if (returning) {
- if (current_depth > 1) {
- --current_depth;
- return 0.0F;
- } /* end if */
- } /* end if */
- else {
- if (current_depth > 0) {
- /*do not update last_call_depth*/
- current_depth++;
- return 0.0F;
- } /* end if */
- } /* end else */
- } /* end if */
+ case H5F_CLOSE_WEAK:
+ H5RS_acat(rs, "H5F_CLOSE_WEAK");
+ break;
- /* Get time for event if the trace times flag is set */
- if (is_first_invocation && H5_debug_g.ttimes) {
- /* start the library-wide timer */
- is_first_invocation = FALSE;
- H5_timer_init(&running_timer);
- H5_timer_start(&running_timer);
- } /* end if */
- if (H5_debug_g.ttimes) {
- /* start the timer for this function */
- H5_timer_init(&function_timer);
- H5_timer_start(&function_timer);
- } /* end if */
+ case H5F_CLOSE_SEMI:
+ H5RS_acat(rs, "H5F_CLOSE_SEMI");
+ break;
- /* Print the first part of the line. This is the indication of the
- * nesting depth followed by the function name and either start of
- * argument list or start of return value. If this call is for a
- * function return and no other calls have been made to H5_trace()
- * since the one for the function call, then we're continuing
- * the same line. */
- if (returning) {
- HDassert(current_depth > 0);
- --current_depth;
- if (current_depth < last_call_depth) {
- /* We are at the beginning of a line */
- if (H5_debug_g.ttimes) {
- char tmp[320];
+ case H5F_CLOSE_STRONG:
+ H5RS_acat(rs, "H5F_CLOSE_STRONG");
+ break;
- H5_timer_get_times(function_timer, &function_times);
- H5_timer_get_times(running_timer, &running_times);
- HDsprintf(tmp, "%.6f", (function_times.elapsed - running_times.elapsed));
- HDfprintf(out, " %*s ", (int)HDstrlen(tmp), "");
- } /* end if */
- for (i = 0; i < current_depth; i++)
- HDfputc('+', out);
- HDfprintf(out, "%*s%s = ", 2 * current_depth, "", func);
- } /* end if */
- else {
- /* Continue current line with return value */
- HDfprintf(out, " = ");
- } /* end else */
- } /* end if */
- else {
- if (current_depth > last_call_depth)
- HDfputs(" = <delayed>\n", out);
- if (H5_debug_g.ttimes) {
- H5_timer_get_times(function_timer, &function_times);
- H5_timer_get_times(running_timer, &running_times);
- HDfprintf(out, "@%.6f ", (function_times.elapsed - running_times.elapsed));
- } /* end if */
- for (i = 0; i < current_depth; i++)
- HDfputc('+', out);
- HDfprintf(out, "%*s%s(", 2 * current_depth, "", func);
- } /* end else */
+ default:
+ H5RS_asprintf_cat(rs, "%ld", (long)degree);
+ break;
+ } /* end switch */
+
+ return SUCCEED;
+} /* end H5_trace_args_cset() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5_trace_args
+ *
+ * Purpose: This routine formats a set of function arguments, placing the
+ * resulting string in the refcounted string (RS) argument.
+ *
+ * The TYPE argument is a string which gives the type of each of
+ * the following argument pairs. Each type begins with zero or
+ * more asterisks (one for each level of indirection, although
+ * some types have one level of indirection already implied)
+ * followed by either one letter (lower case) or two letters
+ * (first one uppercase).
+ *
+ * The variable argument list consists of pairs of values. Each
+ * pair is a string which is the formal argument name in the
+ * calling function, followed by the argument value. The type
+ * of the argument value is given by the TYPE string.
+ *
+ * Note: The TYPE string is meant to be terse and is generated by a
+ * separate perl script.
+ *
+ * Return: SUCCEED / FAIL
+ *
+ * Programmer: Quincey Koziol
+ * Saturday, September 19, 2020
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5_trace_args(H5RS_str_t *rs, const char *type, va_list ap)
+{
+ const char *argname;
+ int argno = 0, ptr, asize_idx;
+ hssize_t asize[16];
+ hssize_t i;
+ void * vp = NULL;
+
+ /* FUNC_ENTER() should not be called */
/* Clear array sizes */
for (i = 0; i < (hssize_t)NELMTS(asize); i++)
@@ -212,7 +253,11 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
/* Count levels of indirection */
for (ptr = 0; '*' == *type; type++)
ptr++;
+
+ /* Array parameter, possibly with another argument as the array size */
if ('[' == *type) {
+ char *rest;
+
if ('a' == type[1]) {
asize_idx = (int)HDstrtol(type + 2, &rest, 10);
HDassert(0 <= asize_idx && asize_idx < (int)NELMTS(asize));
@@ -230,1136 +275,1338 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
asize_idx = -1;
/*
- * The argument name. Leave off the `_id' part. If the argument
- * name is the null pointer then don't print the argument or the
- * following `='. This is used for return values.
+ * The argument name. If the argument name is the null pointer then
+ * don't print the argument or the following `=' (this is used for
+ * return values).
*/
argname = HDva_arg(ap, char *);
- if (argname) {
- unsigned n = (unsigned)MAX(0, (int)HDstrlen(argname) - 3);
-
- if (!HDstrcmp(argname + n, "_id")) {
- HDstrncpy(buf, argname, (size_t)MIN((int)sizeof(buf) - 1, n));
- buf[MIN((int)sizeof(buf) - 1, n)] = '\0';
- argname = buf;
- } /* end if */
- HDfprintf(out, "%s%s=", argno ? ", " : "", argname);
- } /* end if */
+ if (argname)
+ H5RS_asprintf_cat(rs, "%s%s=", argno ? ", " : "", argname);
else
argname = "";
- /* The value */
- if (ptr)
+ /* A pointer/array */
+ if (ptr) {
vp = HDva_arg(ap, void *);
- switch (type[0]) {
- case 'a':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ if (vp) {
+ switch (type[0]) {
+ case 'h': /* hsize_t */
+ H5RS_asprintf_cat(rs, "%p", vp);
+ if (asize_idx >= 0 && asize[asize_idx] >= 0) {
+ hsize_t *p = (hsize_t *)vp;
+
+ H5RS_acat(rs, " {");
+ for (i = 0; i < asize[asize_idx]; i++) {
+ if (H5S_UNLIMITED == p[i])
+ H5RS_asprintf_cat(rs, "%sH5S_UNLIMITED", (i ? ", " : ""));
+ else
+ H5RS_asprintf_cat(rs, "%s%" PRIuHSIZE, (i ? ", " : ""), p[i]);
+ } /* end for */
+ H5RS_acat(rs, "}");
+ } /* end if */
+ break;
+
+ case 'H':
+ if ('s' == type[1]) { /* hssize_t */
+ H5RS_asprintf_cat(rs, "%p", vp);
+ if (asize_idx >= 0 && asize[asize_idx] >= 0) {
+ hssize_t *p = (hssize_t *)vp;
+
+ H5RS_acat(rs, " {");
+ for (i = 0; i < asize[asize_idx]; i++)
+ H5RS_asprintf_cat(rs, "%s%" PRIdHSIZE, (i ? ", " : ""), p[i]);
+ H5RS_acat(rs, "}");
+ } /* end if */
+ } /* end if */
+ else
+ H5RS_asprintf_cat(rs, "%p", vp);
+ break;
+
+ case 'I':
+ if ('s' == type[1]) { /* int / int32_t */
+ H5RS_asprintf_cat(rs, "%p", vp);
+ if (asize_idx >= 0 && asize[asize_idx] >= 0) {
+ int *p = (int *)vp;
+
+ H5RS_acat(rs, " {");
+ for (i = 0; i < asize[asize_idx]; i++)
+ H5RS_asprintf_cat(rs, "%s%d", (i ? ", " : ""), p[i]);
+ H5RS_acat(rs, "}");
+ } /* end if */
+ } /* end if */
+ else if ('u' == type[1]) { /* unsigned / uint32_t */
+ H5RS_asprintf_cat(rs, "%p", vp);
+ if (asize_idx >= 0 && asize[asize_idx] >= 0) {
+ unsigned *p = (unsigned *)vp;
+
+ H5RS_acat(rs, " {");
+ for (i = 0; i < asize[asize_idx]; i++)
+ H5RS_asprintf_cat(rs, "%s%u", i ? ", " : "", p[i]);
+ H5RS_acat(rs, "}");
+ } /* end if */
+ } /* end else-if */
+ else
+ H5RS_asprintf_cat(rs, "%p", vp);
+ break;
+
+ case 's': /* char* */
+ /* Strings have one level of indirection by default, pointers
+ * to strings have 2 or more.
+ */
+ if (ptr > 1)
+ H5RS_asprintf_cat(rs, "%p", vp);
+ else
+ H5RS_asprintf_cat(rs, "\"%s\"", (const char *)vp);
+ break;
+
+ case 'U':
+ if ('l' == type[1]) { /* unsigned long */
+ H5RS_asprintf_cat(rs, "%p", vp);
+ if (asize_idx >= 0 && asize[asize_idx] >= 0) {
+ unsigned long *p = (unsigned long *)vp;
+
+ H5RS_acat(rs, " {");
+ for (i = 0; i < asize[asize_idx]; i++)
+ H5RS_asprintf_cat(rs, "%s%lu", i ? ", " : "", p[i]);
+ H5RS_acat(rs, "}");
+ } /* end if */
+ } /* end if */
+ else if ('L' == type[1]) { /* unsigned long long / uint64_t */
+ H5RS_asprintf_cat(rs, "%p", vp);
+ if (asize_idx >= 0 && asize[asize_idx] >= 0) {
+ unsigned long long *p = (unsigned long long *)vp;
+
+ H5RS_acat(rs, " {");
+ for (i = 0; i < asize[asize_idx]; i++)
+ H5RS_asprintf_cat(rs, "%s%llu", i ? ", " : "", p[i]);
+ H5RS_acat(rs, "}");
+ } /* end if */
+ } /* end else-if */
+ else
+ H5RS_asprintf_cat(rs, "%p", vp);
+ break;
+
+ case 'x': /* void */
+ H5RS_asprintf_cat(rs, "%p", vp);
+ if (asize_idx >= 0 && asize[asize_idx] >= 0) {
+ void **p = (void **)vp;
+
+ H5RS_acat(rs, " {");
+ for (i = 0; i < asize[asize_idx]; i++) {
+ if (p[i])
+ H5RS_asprintf_cat(rs, "%s%p", (i ? ", " : ""), p[i]);
+ else
+ H5RS_asprintf_cat(rs, "%sNULL", (i ? ", " : ""));
+ } /* end for */
+ H5RS_acat(rs, "}");
+ } /* end if */
+ break;
+
+ case 'z': /* size_t */
+ H5RS_asprintf_cat(rs, "%p", vp);
+ if (asize_idx >= 0 && asize[asize_idx] >= 0) {
+ size_t *p = (size_t *)vp;
+
+ H5RS_acat(rs, " {");
+ for (i = 0; i < asize[asize_idx]; i++)
+ H5RS_asprintf_cat(rs, "%s%zu", (i ? ", " : ""), p[i]);
+ H5RS_acat(rs, "}");
+ } /* end if */
+ break;
+
+ case 'Z':
+ if ('s' == type[1]) { /* ssize_t */
+ H5RS_asprintf_cat(rs, "%p", vp);
+ if (asize_idx >= 0 && asize[asize_idx] >= 0) {
+ ssize_t *p = (ssize_t *)vp;
+
+ H5RS_acat(rs, " {");
+ for (i = 0; i < asize[asize_idx]; i++)
+ H5RS_asprintf_cat(rs, "%s%zd", (i ? ", " : ""), p[i]);
+ H5RS_acat(rs, "}");
+ } /* end if */
+ } /* end if */
+ else
+ H5RS_asprintf_cat(rs, "%p", vp);
+ break;
+
+ default:
+ H5RS_asprintf_cat(rs, "%p", vp);
+ } /* end switch */
+ } /* end if */
+ else
+ H5RS_acat(rs, "NULL");
+ } /* end if */
+ /* A value */
+ else {
+ switch (type[0]) {
+ case 'a': /* haddr_t */
+ {
haddr_t addr = HDva_arg(ap, haddr_t);
- HDfprintf(out, "%" PRIuHADDR, addr);
- } /* end else */
+ if (H5F_addr_defined(addr))
+ H5RS_asprintf_cat(rs, "%" PRIuHADDR, addr);
+ else
+ H5RS_acat(rs, "UNDEF");
+ } /* end block */
break;
- case 'b':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'A':
+ switch (type[1]) {
+ case 'i': /* H5A_info_t */
+ {
+ H5A_info_t ainfo = HDva_arg(ap, H5A_info_t);
+
+ H5RS_acat(rs, "{");
+ H5_trace_args_bool(rs, ainfo.corder_valid);
+ H5RS_asprintf_cat(rs, ", %u, ", ainfo.corder);
+ H5_trace_args_cset(rs, ainfo.cset);
+ H5RS_asprintf_cat(rs, "%" PRIuHSIZE "}", ainfo.data_size);
+ } /* end block */
+ break;
+
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+ case 'o': /* H5A_operator1_t */
+ {
+ H5A_operator1_t aop1 = (H5A_operator1_t)HDva_arg(ap, H5A_operator1_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)aop1);
+ } /* end block */
+ break;
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+ case 'O': /* H5A_operator2_t */
+ {
+ H5A_operator2_t aop2 = (H5A_operator2_t)HDva_arg(ap, H5A_operator2_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)aop2);
+ } /* end block */
+ break;
+
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(A%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
+
+ case 'b': /* hbool_t */
+ {
/* Can't pass hbool_t to HDva_arg() */
hbool_t bool_var = (hbool_t)HDva_arg(ap, int);
- if (TRUE == bool_var)
- HDfprintf(out, "TRUE");
- else if (!bool_var)
- HDfprintf(out, "FALSE");
- else
- HDfprintf(out, "TRUE(%u)", (unsigned)bool_var);
- }
+
+ H5_trace_args_bool(rs, bool_var);
+ } /* end block */
break;
- case 'd':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'C':
+ switch (type[1]) {
+ case 'c': /* H5AC_cache_config_t */
+ {
+ H5AC_cache_config_t cc = HDva_arg(ap, H5AC_cache_config_t);
+
+ H5RS_asprintf_cat(rs, "{%d, ", cc.version);
+ H5_trace_args_bool(rs, cc.rpt_fcn_enabled);
+ H5RS_acat(rs, ", ");
+ H5_trace_args_bool(rs, cc.open_trace_file);
+ H5RS_acat(rs, ", ");
+ H5_trace_args_bool(rs, cc.close_trace_file);
+ H5RS_asprintf_cat(rs, ", '%s', ", cc.trace_file_name);
+ H5RS_acat(rs, ", ");
+ H5_trace_args_bool(rs, cc.evictions_enabled);
+ H5RS_acat(rs, ", ");
+ H5_trace_args_bool(rs, cc.set_initial_size);
+ H5RS_asprintf_cat(rs, ", %zu, ", cc.initial_size);
+ H5RS_asprintf_cat(rs, "%f, ", cc.min_clean_fraction);
+ H5RS_asprintf_cat(rs, "%zu, ", cc.max_size);
+ H5RS_asprintf_cat(rs, "%zu, ", cc.min_size);
+ H5RS_asprintf_cat(rs, "%ld, ", cc.epoch_length);
+ switch (cc.incr_mode) {
+ case H5C_incr__off:
+ H5RS_acat(rs, "H5C_incr__off");
+ break;
+
+ case H5C_incr__threshold:
+ H5RS_acat(rs, "H5C_incr__threshold");
+ break;
+
+ default:
+ H5RS_asprintf_cat(rs, "%ld", (long)cc.incr_mode);
+ break;
+ } /* end switch */
+ H5RS_asprintf_cat(rs, ", %f, ", cc.lower_hr_threshold);
+ H5RS_asprintf_cat(rs, "%f, ", cc.increment);
+ H5_trace_args_bool(rs, cc.apply_max_increment);
+ H5RS_asprintf_cat(rs, ", %zu, ", cc.max_increment);
+ switch (cc.flash_incr_mode) {
+ case H5C_flash_incr__off:
+ H5RS_acat(rs, "H5C_flash_incr__off");
+ break;
+
+ case H5C_flash_incr__add_space:
+ H5RS_acat(rs, "H5C_flash_incr__add_space");
+ break;
+
+ default:
+ H5RS_asprintf_cat(rs, "%ld", (long)cc.flash_incr_mode);
+ break;
+ } /* end switch */
+ H5RS_asprintf_cat(rs, ", %f, ", cc.flash_multiple);
+ H5RS_asprintf_cat(rs, "%f, ", cc.flash_threshold);
+ switch (cc.decr_mode) {
+ case H5C_decr__off:
+ H5RS_acat(rs, "H5C_decr__off");
+ break;
+
+ case H5C_decr__threshold:
+ H5RS_acat(rs, "H5C_decr__threshold");
+ break;
+
+ case H5C_decr__age_out:
+ H5RS_acat(rs, "H5C_decr__age_out");
+ break;
+
+ case H5C_decr__age_out_with_threshold:
+ H5RS_acat(rs, "H5C_decr__age_out_with_threshold");
+ break;
+
+ default:
+ H5RS_asprintf_cat(rs, "%ld", (long)cc.decr_mode);
+ break;
+ } /* end switch */
+ H5RS_asprintf_cat(rs, ", %f, ", cc.upper_hr_threshold);
+ H5RS_asprintf_cat(rs, "%f, ", cc.decrement);
+ H5_trace_args_bool(rs, cc.apply_max_decrement);
+ H5RS_asprintf_cat(rs, ", %zu, ", cc.max_decrement);
+ H5RS_asprintf_cat(rs, "%d, ", cc.epochs_before_eviction);
+ H5_trace_args_bool(rs, cc.apply_empty_reserve);
+ H5RS_asprintf_cat(rs, ", %f, ", cc.empty_reserve);
+ H5RS_asprintf_cat(rs, "%zu, ", cc.dirty_bytes_threshold);
+ H5RS_asprintf_cat(rs, "%d}", cc.metadata_write_strategy);
+ } /* end block */
+ break;
+
+ case 'C': /* H5AC_cache_image_config_t */
+ {
+ H5AC_cache_image_config_t cic = HDva_arg(ap, H5AC_cache_image_config_t);
+
+ H5RS_asprintf_cat(rs, "{%d, ", cic.version);
+ H5_trace_args_bool(rs, cic.generate_image);
+ H5RS_acat(rs, ", ");
+ H5_trace_args_bool(rs, cic.save_resize_status);
+ H5RS_acat(rs, ", ");
+ H5RS_asprintf_cat(rs, "%d}", cic.entry_ageout);
+ } /* end block */
+ break;
+
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(C%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
+
+ case 'd': /* double */
+ {
double dbl = HDva_arg(ap, double);
- HDfprintf(out, "%g", dbl);
- } /* end else */
+ H5RS_asprintf_cat(rs, "%g", dbl);
+ } /* end block */
break;
- case 'D':
- switch (type[1]) {
- case 'a':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'D':
+ switch (type[1]) {
+ case 'a': /* H5D_alloc_time_t */
+ {
H5D_alloc_time_t alloc_time = (H5D_alloc_time_t)HDva_arg(ap, int);
switch (alloc_time) {
case H5D_ALLOC_TIME_ERROR:
- HDfprintf(out, "H5D_ALLOC_TIME_ERROR");
+ H5RS_acat(rs, "H5D_ALLOC_TIME_ERROR");
break;
case H5D_ALLOC_TIME_DEFAULT:
- HDfprintf(out, "H5D_ALLOC_TIME_DEFAULT");
+ H5RS_acat(rs, "H5D_ALLOC_TIME_DEFAULT");
break;
case H5D_ALLOC_TIME_EARLY:
- HDfprintf(out, "H5D_ALLOC_TIME_EARLY");
+ H5RS_acat(rs, "H5D_ALLOC_TIME_EARLY");
break;
case H5D_ALLOC_TIME_LATE:
- HDfprintf(out, "H5D_ALLOC_TIME_LATE");
+ H5RS_acat(rs, "H5D_ALLOC_TIME_LATE");
break;
case H5D_ALLOC_TIME_INCR:
- HDfprintf(out, "H5D_ALLOC_TIME_INCR");
+ H5RS_acat(rs, "H5D_ALLOC_TIME_INCR");
break;
default:
- HDfprintf(out, "%ld", (long)alloc_time);
+ H5RS_asprintf_cat(rs, "%ld", (long)alloc_time);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'c':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'A': /* H5D_append_cb_t */
+ {
+ H5D_append_cb_t dapp = (H5D_append_cb_t)HDva_arg(ap, H5D_append_cb_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)dapp);
+ } /* end block */
+ break;
+
+ case 'c': /* H5FD_mpio_collective_opt_t */
+ {
H5FD_mpio_collective_opt_t opt = (H5FD_mpio_collective_opt_t)HDva_arg(ap, int);
switch (opt) {
case H5FD_MPIO_COLLECTIVE_IO:
- HDfprintf(out, "H5FD_MPIO_COLLECTIVE_IO");
+ H5RS_acat(rs, "H5FD_MPIO_COLLECTIVE_IO");
break;
case H5FD_MPIO_INDIVIDUAL_IO:
- HDfprintf(out, "H5FD_MPIO_INDIVIDUAL_IO");
+ H5RS_acat(rs, "H5FD_MPIO_INDIVIDUAL_IO");
break;
default:
- HDfprintf(out, "%ld", (long)opt);
+ H5RS_asprintf_cat(rs, "%ld", (long)opt);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'f':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'f': /* H5D_fill_time_t */
+ {
H5D_fill_time_t fill_time = (H5D_fill_time_t)HDva_arg(ap, int);
switch (fill_time) {
case H5D_FILL_TIME_ERROR:
- HDfprintf(out, "H5D_FILL_TIME_ERROR");
+ H5RS_acat(rs, "H5D_FILL_TIME_ERROR");
break;
case H5D_FILL_TIME_ALLOC:
- HDfprintf(out, "H5D_FILL_TIME_ALLOC");
+ H5RS_acat(rs, "H5D_FILL_TIME_ALLOC");
break;
case H5D_FILL_TIME_NEVER:
- HDfprintf(out, "H5D_FILL_TIME_NEVER");
+ H5RS_acat(rs, "H5D_FILL_TIME_NEVER");
break;
case H5D_FILL_TIME_IFSET:
- HDfprintf(out, "H5D_FILL_TIME_IFSET");
+ H5RS_acat(rs, "H5D_FILL_TIME_IFSET");
break;
default:
- HDfprintf(out, "%ld", (long)fill_time);
+ H5RS_asprintf_cat(rs, "%ld", (long)fill_time);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'F':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'F': /* H5D_fill_value_t */
+ {
H5D_fill_value_t fill_value = (H5D_fill_value_t)HDva_arg(ap, int);
switch (fill_value) {
case H5D_FILL_VALUE_ERROR:
- HDfprintf(out, "H5D_FILL_VALUE_ERROR");
+ H5RS_acat(rs, "H5D_FILL_VALUE_ERROR");
break;
case H5D_FILL_VALUE_UNDEFINED:
- HDfprintf(out, "H5D_FILL_VALUE_UNDEFINED");
+ H5RS_acat(rs, "H5D_FILL_VALUE_UNDEFINED");
break;
case H5D_FILL_VALUE_DEFAULT:
- HDfprintf(out, "H5D_FILL_VALUE_DEFAULT");
+ H5RS_acat(rs, "H5D_FILL_VALUE_DEFAULT");
break;
case H5D_FILL_VALUE_USER_DEFINED:
- HDfprintf(out, "H5D_FILL_VALUE_USER_DEFINED");
+ H5RS_acat(rs, "H5D_FILL_VALUE_USER_DEFINED");
break;
default:
- HDfprintf(out, "%ld", (long)fill_value);
+ H5RS_asprintf_cat(rs, "%ld", (long)fill_value);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'h':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'g': /* H5D_gather_func_t */
+ {
+ H5D_gather_func_t gop = (H5D_gather_func_t)HDva_arg(ap, H5D_gather_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)gop);
+ } /* end block */
+ break;
+
+ case 'h': /* H5FD_mpio_chunk_opt_t */
+ {
H5FD_mpio_chunk_opt_t opt = (H5FD_mpio_chunk_opt_t)HDva_arg(ap, int);
switch (opt) {
case H5FD_MPIO_CHUNK_DEFAULT:
- HDfprintf(out, "H5FD_MPIO_CHUNK_DEFAULT");
+ H5RS_acat(rs, "H5FD_MPIO_CHUNK_DEFAULT");
break;
case H5FD_MPIO_CHUNK_ONE_IO:
- HDfprintf(out, "H5FD_MPIO_CHUNK_ONE_IO");
+ H5RS_acat(rs, "H5FD_MPIO_CHUNK_ONE_IO");
break;
case H5FD_MPIO_CHUNK_MULTI_IO:
- HDfprintf(out, "H5FD_MPIO_CHUNK_MULTI_IO");
+ H5RS_acat(rs, "H5FD_MPIO_CHUNK_MULTI_IO");
break;
default:
- HDfprintf(out, "%ld", (long)opt);
+ H5RS_asprintf_cat(rs, "%ld", (long)opt);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'i':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'i': /* H5D_mpio_actual_io_mode_t */
+ {
H5D_mpio_actual_io_mode_t actual_io_mode =
(H5D_mpio_actual_io_mode_t)HDva_arg(ap, int);
switch (actual_io_mode) {
case H5D_MPIO_NO_COLLECTIVE:
- HDfprintf(out, "H5D_MPIO_NO_COLLECTIVE");
+ H5RS_acat(rs, "H5D_MPIO_NO_COLLECTIVE");
break;
case H5D_MPIO_CHUNK_INDEPENDENT:
- HDfprintf(out, "H5D_MPIO_CHUNK_INDEPENDENT");
+ H5RS_acat(rs, "H5D_MPIO_CHUNK_INDEPENDENT");
break;
case H5D_MPIO_CHUNK_COLLECTIVE:
- HDfprintf(out, "H5D_MPIO_CHUNK_COLLECTIVE");
+ H5RS_acat(rs, "H5D_MPIO_CHUNK_COLLECTIVE");
break;
case H5D_MPIO_CHUNK_MIXED:
- HDfprintf(out, "H5D_MPIO_CHUNK_MIXED");
+ H5RS_acat(rs, "H5D_MPIO_CHUNK_MIXED");
break;
case H5D_MPIO_CONTIGUOUS_COLLECTIVE:
- HDfprintf(out, "H5D_MPIO_CONTIGUOUS_COLLECTIVE");
+ H5RS_acat(rs, "H5D_MPIO_CONTIGUOUS_COLLECTIVE");
break;
default:
- HDfprintf(out, "%ld", (long)actual_io_mode);
+ H5RS_asprintf_cat(rs, "%ld", (long)actual_io_mode);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'k':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'I': /* H5FD_file_image_callbacks_t */
+ {
+ H5FD_file_image_callbacks_t ficb = HDva_arg(ap, H5FD_file_image_callbacks_t);
+
+ H5RS_asprintf_cat(rs, "{%p, ", (void *)(uintptr_t)ficb.image_malloc);
+ H5RS_asprintf_cat(rs, "%p, ", (void *)(uintptr_t)ficb.image_memcpy);
+ H5RS_asprintf_cat(rs, "%p, ", (void *)(uintptr_t)ficb.image_realloc);
+ H5RS_asprintf_cat(rs, "%p, ", (void *)(uintptr_t)ficb.image_free);
+ H5RS_asprintf_cat(rs, "%p, ", (void *)(uintptr_t)ficb.udata_copy);
+ H5RS_asprintf_cat(rs, "%p, ", (void *)(uintptr_t)ficb.udata_free);
+ H5RS_asprintf_cat(rs, "%p}", ficb.udata);
+ } /* end block */
+ break;
+
+ case 'k': /* H5D_chunk_index_t */
+ {
H5D_chunk_index_t idx = (H5D_chunk_index_t)HDva_arg(ap, int);
switch (idx) {
case H5D_CHUNK_IDX_BTREE:
- HDfprintf(out, "H5D_CHUNK_IDX_BTREE");
+ H5RS_acat(rs, "H5D_CHUNK_IDX_BTREE");
break;
case H5D_CHUNK_IDX_NONE:
- HDfprintf(out, "H5D_CHUNK_IDX_NONE");
+ H5RS_acat(rs, "H5D_CHUNK_IDX_NONE");
break;
case H5D_CHUNK_IDX_FARRAY:
- HDfprintf(out, "H5D_CHUNK_IDX_FARRAY");
+ H5RS_acat(rs, "H5D_CHUNK_IDX_FARRAY");
break;
case H5D_CHUNK_IDX_EARRAY:
- HDfprintf(out, "H5D_CHUNK_IDX_EARRAY");
+ H5RS_acat(rs, "H5D_CHUNK_IDX_EARRAY");
break;
case H5D_CHUNK_IDX_BT2:
- HDfprintf(out, "H5D_CHUNK_IDX_BT2");
+ H5RS_acat(rs, "H5D_CHUNK_IDX_BT2");
break;
case H5D_CHUNK_IDX_SINGLE:
- HDfprintf(out, "H5D_CHUNK_IDX_SINGLE");
+ H5RS_acat(rs, "H5D_CHUNK_IDX_SINGLE");
break;
case H5D_CHUNK_IDX_NTYPES:
- HDfprintf(out, "ERROR: H5D_CHUNK_IDX_NTYPES (invalid value)");
+ H5RS_acat(rs, "ERROR: H5D_CHUNK_IDX_NTYPES (invalid value)");
break;
default:
- HDfprintf(out, "UNKNOWN VALUE: %ld", (long)idx);
+ H5RS_asprintf_cat(rs, "UNKNOWN VALUE: %ld", (long)idx);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'l':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'l': /* H5D_layout_t */
+ {
H5D_layout_t layout = (H5D_layout_t)HDva_arg(ap, int);
switch (layout) {
case H5D_LAYOUT_ERROR:
- HDfprintf(out, "H5D_LAYOUT_ERROR");
+ H5RS_acat(rs, "H5D_LAYOUT_ERROR");
break;
case H5D_COMPACT:
- HDfprintf(out, "H5D_COMPACT");
+ H5RS_acat(rs, "H5D_COMPACT");
break;
case H5D_CONTIGUOUS:
- HDfprintf(out, "H5D_CONTIGUOUS");
+ H5RS_acat(rs, "H5D_CONTIGUOUS");
break;
case H5D_CHUNKED:
- HDfprintf(out, "H5D_CHUNKED");
+ H5RS_acat(rs, "H5D_CHUNKED");
break;
case H5D_VIRTUAL:
- HDfprintf(out, "H5D_VIRTUAL");
+ H5RS_acat(rs, "H5D_VIRTUAL");
break;
case H5D_NLAYOUTS:
- HDfprintf(out, "H5D_NLAYOUTS");
+ H5RS_acat(rs, "H5D_NLAYOUTS");
break;
default:
- HDfprintf(out, "%ld", (long)layout);
+ H5RS_asprintf_cat(rs, "%ld", (long)layout);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'n':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'n': /* H5D_mpio_no_collective_cause_t */
+ {
H5D_mpio_no_collective_cause_t nocol_cause_mode =
(H5D_mpio_no_collective_cause_t)HDva_arg(ap, int);
hbool_t flag_already_displayed = FALSE;
/* Check for all bit-flags which might be set */
if (nocol_cause_mode & H5D_MPIO_COLLECTIVE) {
- HDfprintf(out, "H5D_MPIO_COLLECTIVE");
+ H5RS_acat(rs, "H5D_MPIO_COLLECTIVE");
flag_already_displayed = TRUE;
} /* end if */
if (nocol_cause_mode & H5D_MPIO_SET_INDEPENDENT) {
- HDfprintf(out, "%sH5D_MPIO_SET_INDEPENDENT",
- flag_already_displayed ? " | " : "");
+ H5RS_asprintf_cat(rs, "%sH5D_MPIO_SET_INDEPENDENT",
+ flag_already_displayed ? " | " : "");
flag_already_displayed = TRUE;
} /* end if */
if (nocol_cause_mode & H5D_MPIO_DATATYPE_CONVERSION) {
- HDfprintf(out, "%sH5D_MPIO_DATATYPE_CONVERSION",
- flag_already_displayed ? " | " : "");
+ H5RS_asprintf_cat(rs, "%sH5D_MPIO_DATATYPE_CONVERSION",
+ flag_already_displayed ? " | " : "");
flag_already_displayed = TRUE;
} /* end if */
if (nocol_cause_mode & H5D_MPIO_DATA_TRANSFORMS) {
- HDfprintf(out, "%sH5D_MPIO_DATA_TRANSFORMS",
- flag_already_displayed ? " | " : "");
+ H5RS_asprintf_cat(rs, "%sH5D_MPIO_DATA_TRANSFORMS",
+ flag_already_displayed ? " | " : "");
flag_already_displayed = TRUE;
} /* end if */
if (nocol_cause_mode & H5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED) {
- HDfprintf(out, "%sH5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED",
- flag_already_displayed ? " | " : "");
+ H5RS_asprintf_cat(rs, "%sH5D_MPIO_MPI_OPT_TYPES_ENV_VAR_DISABLED",
+ flag_already_displayed ? " | " : "");
flag_already_displayed = TRUE;
} /* end if */
if (nocol_cause_mode & H5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES) {
- HDfprintf(out, "%sH5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES",
- flag_already_displayed ? " | " : "");
+ H5RS_asprintf_cat(rs, "%sH5D_MPIO_NOT_SIMPLE_OR_SCALAR_DATASPACES",
+ flag_already_displayed ? " | " : "");
flag_already_displayed = TRUE;
} /* end if */
if (nocol_cause_mode & H5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET) {
- HDfprintf(out, "%sH5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET",
- flag_already_displayed ? " | " : "");
+ H5RS_asprintf_cat(rs, "%sH5D_MPIO_NOT_CONTIGUOUS_OR_CHUNKED_DATASET",
+ flag_already_displayed ? " | " : "");
flag_already_displayed = TRUE;
} /* end if */
/* Display '<none>' if there's no flags set */
if (!flag_already_displayed)
- HDfprintf(out, "<none>");
- } /* end else */
+ H5RS_acat(rs, "<none>");
+ } /* end block */
break;
- case 'o':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'o': /* H5D_mpio_actual_chunk_opt_mode_t */
+ {
H5D_mpio_actual_chunk_opt_mode_t chunk_opt_mode =
(H5D_mpio_actual_chunk_opt_mode_t)HDva_arg(ap, int);
switch (chunk_opt_mode) {
case H5D_MPIO_NO_CHUNK_OPTIMIZATION:
- HDfprintf(out, "H5D_MPIO_NO_CHUNK_OPTIMIZATION");
+ H5RS_acat(rs, "H5D_MPIO_NO_CHUNK_OPTIMIZATION");
break;
case H5D_MPIO_LINK_CHUNK:
- HDfprintf(out, "H5D_MPIO_LINK_CHUNK");
+ H5RS_acat(rs, "H5D_MPIO_LINK_CHUNK");
break;
case H5D_MPIO_MULTI_CHUNK:
- HDfprintf(out, "H5D_MPIO_MULTI_CHUNK");
+ H5RS_acat(rs, "H5D_MPIO_MULTI_CHUNK");
break;
default:
- HDfprintf(out, "%ld", (long)chunk_opt_mode);
+ H5RS_asprintf_cat(rs, "%ld", (long)chunk_opt_mode);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 's':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'O': /* H5D_operator_t */
+ {
+ H5D_operator_t dop = (H5D_operator_t)HDva_arg(ap, H5D_operator_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)dop);
+ } /* end block */
+ break;
+
+ case 's': /* H5D_space_status_t */
+ {
H5D_space_status_t space_status = (H5D_space_status_t)HDva_arg(ap, int);
switch (space_status) {
case H5D_SPACE_STATUS_NOT_ALLOCATED:
- HDfprintf(out, "H5D_SPACE_STATUS_NOT_ALLOCATED");
+ H5RS_acat(rs, "H5D_SPACE_STATUS_NOT_ALLOCATED");
break;
case H5D_SPACE_STATUS_PART_ALLOCATED:
- HDfprintf(out, "H5D_SPACE_STATUS_PART_ALLOCATED");
+ H5RS_acat(rs, "H5D_SPACE_STATUS_PART_ALLOCATED");
break;
case H5D_SPACE_STATUS_ALLOCATED:
- HDfprintf(out, "H5D_SPACE_STATUS_ALLOCATED");
+ H5RS_acat(rs, "H5D_SPACE_STATUS_ALLOCATED");
break;
case H5D_SPACE_STATUS_ERROR:
- HDfprintf(out, "H5D_SPACE_STATUS_ERROR");
+ H5RS_acat(rs, "H5D_SPACE_STATUS_ERROR");
break;
default:
- HDfprintf(out, "%ld", (long)space_status);
+ H5RS_asprintf_cat(rs, "%ld", (long)space_status);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'S': /* H5D_scatter_func_t */
+ {
+ H5D_scatter_func_t sop = (H5D_scatter_func_t)HDva_arg(ap, H5D_scatter_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)sop);
+ } /* end block */
+ break;
+
+ case 't': /* H5FD_mpio_xfer_t */
+ {
H5FD_mpio_xfer_t transfer = (H5FD_mpio_xfer_t)HDva_arg(ap, int);
switch (transfer) {
case H5FD_MPIO_INDEPENDENT:
- HDfprintf(out, "H5FD_MPIO_INDEPENDENT");
+ H5RS_acat(rs, "H5FD_MPIO_INDEPENDENT");
break;
case H5FD_MPIO_COLLECTIVE:
- HDfprintf(out, "H5FD_MPIO_COLLECTIVE");
+ H5RS_acat(rs, "H5FD_MPIO_COLLECTIVE");
break;
default:
- HDfprintf(out, "%ld", (long)transfer);
+ H5RS_asprintf_cat(rs, "%ld", (long)transfer);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'v':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'v': /* H5D_vds_view_t */
+ {
H5D_vds_view_t view = (H5D_vds_view_t)HDva_arg(ap, int);
switch (view) {
case H5D_VDS_ERROR:
- HDfprintf(out, "H5D_VDS_ERROR");
+ H5RS_acat(rs, "H5D_VDS_ERROR");
break;
case H5D_VDS_FIRST_MISSING:
- HDfprintf(out, "H5D_VDS_FIRST_MISSING");
+ H5RS_acat(rs, "H5D_VDS_FIRST_MISSING");
break;
case H5D_VDS_LAST_AVAILABLE:
- HDfprintf(out, "H5D_VDS_LAST_AVAILABLE");
+ H5RS_acat(rs, "H5D_VDS_LAST_AVAILABLE");
break;
default:
- HDfprintf(out, "%ld", (long)view);
+ H5RS_asprintf_cat(rs, "%ld", (long)view);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(D%c)", type[1]);
- goto error;
- } /* end switch */
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(D%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case 'e':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'e': /* herr_t */
+ {
herr_t status = HDva_arg(ap, herr_t);
if (status >= 0)
- HDfprintf(out, "SUCCEED");
+ H5RS_acat(rs, "SUCCEED");
else
- HDfprintf(out, "FAIL");
- } /* end else */
+ H5RS_acat(rs, "FAIL");
+ } /* end block */
break;
- case 'E':
- switch (type[1]) {
- case 'd':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'E':
+ switch (type[1]) {
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+ case 'a': /* H5E_auto1_t */
+ {
+ H5E_auto1_t eauto1 = (H5E_auto1_t)HDva_arg(ap, H5E_auto1_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)eauto1);
+ } /* end block */
+ break;
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+ case 'A': /* H5E_auto2_t */
+ {
+ H5E_auto2_t eauto2 = (H5E_auto2_t)HDva_arg(ap, H5E_auto2_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)eauto2);
+ } /* end block */
+ break;
+
+ case 'd': /* H5E_direction_t */
+ {
H5E_direction_t direction = (H5E_direction_t)HDva_arg(ap, int);
switch (direction) {
case H5E_WALK_UPWARD:
- HDfprintf(out, "H5E_WALK_UPWARD");
+ H5RS_acat(rs, "H5E_WALK_UPWARD");
break;
case H5E_WALK_DOWNWARD:
- HDfprintf(out, "H5E_WALK_DOWNWARD");
+ H5RS_acat(rs, "H5E_WALK_DOWNWARD");
break;
default:
- HDfprintf(out, "%ld", (long)direction);
+ H5RS_asprintf_cat(rs, "%ld", (long)direction);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'e':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'e': /* H5E_error_t */
+ {
H5E_error2_t *error = HDva_arg(ap, H5E_error2_t *);
- HDfprintf(out, "0x%p", (void *)error);
- } /* end else */
+ H5RS_asprintf_cat(rs, "%p", (void *)error);
+ } /* end block */
break;
- case 's':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 's': /* H5ES_status_t */
+ {
H5ES_status_t status = (H5ES_status_t)HDva_arg(ap, int);
switch (status) {
case H5ES_STATUS_IN_PROGRESS:
- HDfprintf(out, "H5ES_STATUS_IN_PROGRESS");
+ H5RS_acat(rs, "H5ES_STATUS_IN_PROGRESS");
break;
+
case H5ES_STATUS_SUCCEED:
- HDfprintf(out, "H5ES_STATUS_SUCCEED");
+ H5RS_acat(rs, "H5ES_STATUS_SUCCEED");
break;
+
case H5ES_STATUS_FAIL:
- HDfprintf(out, "H5ES_STATUS_FAIL");
+ H5RS_acat(rs, "H5ES_STATUS_FAIL");
break;
+
case H5ES_STATUS_CANCELED:
- HDfprintf(out, "H5ES_STATUS_CANCELED");
+ H5RS_acat(rs, "H5ES_STATUS_CANCELED");
break;
default:
- HDfprintf(out, "%ld", (long)status);
+ H5RS_asprintf_cat(rs, "%ld", (long)status);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 't': /* H5E_type_t */
+ {
H5E_type_t etype = (H5E_type_t)HDva_arg(ap, int);
switch (etype) {
case H5E_MAJOR:
- HDfprintf(out, "H5E_MAJOR");
+ H5RS_acat(rs, "H5E_MAJOR");
break;
case H5E_MINOR:
- HDfprintf(out, "H5E_MINOR");
+ H5RS_acat(rs, "H5E_MINOR");
break;
default:
- HDfprintf(out, "%ld", (long)etype);
+ H5RS_asprintf_cat(rs, "%ld", (long)etype);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(E%c)", type[1]);
- goto error;
- } /* end switch */
- break;
-
- case 'F':
- switch (type[1]) {
- case 'd':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
- H5F_close_degree_t degree = (H5F_close_degree_t)HDva_arg(ap, int);
-
- switch (degree) {
- case H5F_CLOSE_DEFAULT:
- HDfprintf(out, "H5F_CLOSE_DEFAULT");
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(E%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case H5F_CLOSE_WEAK:
- HDfprintf(out, "H5F_CLOSE_WEAK");
- break;
+ case 'F':
+ switch (type[1]) {
+ case 'C': /* H5FD_class_t */
+ {
+ H5FD_class_t cls = HDva_arg(ap, H5FD_class_t);
- case H5F_CLOSE_SEMI:
- HDfprintf(out, "H5F_CLOSE_SEMI");
- break;
+ H5RS_asprintf_cat(rs, "{'%s', " H5_PRINTF_HADDR_FMT ", ", cls.name, cls.maxaddr);
+ H5_trace_args_close_degree(rs, cls.fc_degree);
+ H5RS_acat(rs, ", ...}");
+ } /* end block */
+ break;
- case H5F_CLOSE_STRONG:
- HDfprintf(out, "H5F_CLOSE_STRONG");
- break;
+ case 'd': /* H5F_close_degree_t */
+ {
+ H5F_close_degree_t degree = (H5F_close_degree_t)HDva_arg(ap, int);
- default:
- HDfprintf(out, "%ld", (long)degree);
- break;
- } /* end switch */
- } /* end else */
+ H5_trace_args_close_degree(rs, degree);
+ } /* end block */
break;
- case 'f':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'f': /* H5F_fspace_strategy_t */
+ {
H5F_fspace_strategy_t fs_strategy = (H5F_fspace_strategy_t)HDva_arg(ap, int);
switch (fs_strategy) {
case H5F_FSPACE_STRATEGY_FSM_AGGR:
- HDfprintf(out, "H5F_FSPACE_STRATEGY_FSM_AGGR");
+ H5RS_acat(rs, "H5F_FSPACE_STRATEGY_FSM_AGGR");
break;
case H5F_FSPACE_STRATEGY_PAGE:
- HDfprintf(out, "H5F_FSPACE_STRATEGY_PAGE");
+ H5RS_acat(rs, "H5F_FSPACE_STRATEGY_PAGE");
break;
case H5F_FSPACE_STRATEGY_AGGR:
- HDfprintf(out, "H5F_FSPACE_STRATEGY_AGGR");
+ H5RS_acat(rs, "H5F_FSPACE_STRATEGY_AGGR");
break;
case H5F_FSPACE_STRATEGY_NONE:
- HDfprintf(out, "H5F_FSPACE_STRATEGY_NONE");
+ H5RS_acat(rs, "H5F_FSPACE_STRATEGY_NONE");
break;
case H5F_FSPACE_STRATEGY_NTYPES:
default:
- HDfprintf(out, "%ld", (long)fs_strategy);
+ H5RS_asprintf_cat(rs, "%ld", (long)fs_strategy);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'm':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'F': /* H5F_flush_cb_t */
+ {
+ H5F_flush_cb_t fflsh = (H5F_flush_cb_t)HDva_arg(ap, H5F_flush_cb_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)fflsh);
+ } /* end block */
+ break;
+
+ case 'I': /* H5F_info2_t */
+ {
+ H5F_info2_t fi2 = HDva_arg(ap, H5F_info2_t);
+
+ H5RS_asprintf_cat(rs, "{{%u, %" PRIuHSIZE ", %" PRIuHSIZE "}, ",
+ fi2.super.version, fi2.super.super_size,
+ fi2.super.super_ext_size);
+ H5RS_asprintf_cat(rs, "{%u, %" PRIuHSIZE ", %" PRIuHSIZE "}, ", fi2.free.version,
+ fi2.free.meta_size, fi2.free.tot_space);
+ H5RS_asprintf_cat(rs, "{%u, %" PRIuHSIZE ", {%" PRIuHSIZE ", %" PRIuHSIZE "}}}",
+ fi2.sohm.version, fi2.sohm.hdr_size,
+ fi2.sohm.msgs_info.index_size, fi2.sohm.msgs_info.heap_size);
+ } /* end block */
+ break;
+
+ case 'm': /* H5F_mem_t */
+ {
H5F_mem_t mem_type = (H5F_mem_t)HDva_arg(ap, int);
switch (mem_type) {
case H5FD_MEM_NOLIST:
- HDfprintf(out, "H5FD_MEM_NOLIST");
+ H5RS_acat(rs, "H5FD_MEM_NOLIST");
break;
case H5FD_MEM_DEFAULT:
- HDfprintf(out, "H5FD_MEM_DEFAULT");
+ H5RS_acat(rs, "H5FD_MEM_DEFAULT");
break;
case H5FD_MEM_SUPER:
- HDfprintf(out, "H5FD_MEM_SUPER");
+ H5RS_acat(rs, "H5FD_MEM_SUPER");
break;
case H5FD_MEM_BTREE:
- HDfprintf(out, "H5FD_MEM_BTREE");
+ H5RS_acat(rs, "H5FD_MEM_BTREE");
break;
case H5FD_MEM_DRAW:
- HDfprintf(out, "H5FD_MEM_DRAW");
+ H5RS_acat(rs, "H5FD_MEM_DRAW");
break;
case H5FD_MEM_GHEAP:
- HDfprintf(out, "H5FD_MEM_GHEAP");
+ H5RS_acat(rs, "H5FD_MEM_GHEAP");
break;
case H5FD_MEM_LHEAP:
- HDfprintf(out, "H5FD_MEM_LHEAP");
+ H5RS_acat(rs, "H5FD_MEM_LHEAP");
break;
case H5FD_MEM_OHDR:
- HDfprintf(out, "H5FD_MEM_OHDR");
+ H5RS_acat(rs, "H5FD_MEM_OHDR");
break;
case H5FD_MEM_NTYPES:
default:
- HDfprintf(out, "%ld", (long)mem_type);
+ H5RS_asprintf_cat(rs, "%ld", (long)mem_type);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 's':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 's': /* H5F_scope_t */
+ {
H5F_scope_t scope = (H5F_scope_t)HDva_arg(ap, int);
switch (scope) {
case H5F_SCOPE_LOCAL:
- HDfprintf(out, "H5F_SCOPE_LOCAL");
+ H5RS_acat(rs, "H5F_SCOPE_LOCAL");
break;
case H5F_SCOPE_GLOBAL:
- HDfprintf(out, "H5F_SCOPE_GLOBAL");
+ H5RS_acat(rs, "H5F_SCOPE_GLOBAL");
break;
default:
- HDfprintf(out, "%ld", (long)scope);
+ H5RS_asprintf_cat(rs, "%ld", (long)scope);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
+ case 't': /* H5F_file_space_type_t */
+ {
+ H5F_file_space_type_t fspace_type = (H5F_file_space_type_t)HDva_arg(ap, int);
+
+ switch (fspace_type) {
+ case H5F_FILE_SPACE_DEFAULT:
+ H5RS_acat(rs, "H5F_FILE_SPACE_DEFAULT");
+ break;
+
+ case H5F_FILE_SPACE_ALL_PERSIST:
+ H5RS_acat(rs, "H5F_FILE_SPACE_ALL_PERSIST");
+ break;
+
+ case H5F_FILE_SPACE_ALL:
+ H5RS_acat(rs, "H5F_FILE_SPACE_ALL");
+ break;
+
+ case H5F_FILE_SPACE_AGGR_VFD:
+ H5RS_acat(rs, "H5F_FILE_SPACE_AGGR_VFD");
+ break;
+
+ case H5F_FILE_SPACE_VFD:
+ H5RS_acat(rs, "H5F_FILE_SPACE_VFD");
+ break;
+
+ case H5F_FILE_SPACE_NTYPES:
+ default:
+ H5RS_asprintf_cat(rs, "%ld", (long)fspace_type);
+ break;
+ } /* end switch */
+ } /* end block */
break;
- case 'v':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'v': /* H5F_libver_t */
+ {
H5F_libver_t libver_vers = (H5F_libver_t)HDva_arg(ap, int);
switch (libver_vers) {
case H5F_LIBVER_EARLIEST:
- HDfprintf(out, "H5F_LIBVER_EARLIEST");
+ H5RS_acat(rs, "H5F_LIBVER_EARLIEST");
break;
case H5F_LIBVER_V18:
- HDfprintf(out, "H5F_LIBVER_V18");
+ H5RS_acat(rs, "H5F_LIBVER_V18");
break;
case H5F_LIBVER_V110:
- HDfprintf(out, "H5F_LIBVER_V110");
+ H5RS_acat(rs, "H5F_LIBVER_V110");
break;
case H5F_LIBVER_V112:
- HDfprintf(out, "H5F_LIBVER_V112");
+ H5RS_acat(rs, "H5F_LIBVER_V112");
break;
case H5F_LIBVER_V114:
HDcompile_assert(H5F_LIBVER_LATEST == H5F_LIBVER_V114);
- HDfprintf(out, "H5F_LIBVER_LATEST");
+ H5RS_acat(rs, "H5F_LIBVER_LATEST");
break;
case H5F_LIBVER_ERROR:
case H5F_LIBVER_NBOUNDS:
default:
- HDfprintf(out, "%ld", (long)libver_vers);
+ H5RS_asprintf_cat(rs, "%ld", (long)libver_vers);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(F%c)", type[1]);
- goto error;
- } /* end switch */
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(F%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case 'G':
- switch (type[1]) {
+ case 'G':
+ switch (type[1]) {
#ifndef H5_NO_DEPRECATED_SYMBOLS
- case 'o':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'i': /* H5G_iterate_t */
+ {
+ H5G_iterate_t git = (H5G_iterate_t)HDva_arg(ap, H5G_iterate_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)git);
+ } /* end block */
+ break;
+
+ case 'o': /* H5G_obj_t */
+ {
H5G_obj_t obj_type = (H5G_obj_t)HDva_arg(ap, int);
switch (obj_type) {
case H5G_UNKNOWN:
- HDfprintf(out, "H5G_UNKNOWN");
+ H5RS_acat(rs, "H5G_UNKNOWN");
break;
case H5G_GROUP:
- HDfprintf(out, "H5G_GROUP");
+ H5RS_acat(rs, "H5G_GROUP");
break;
case H5G_DATASET:
- HDfprintf(out, "H5G_DATASET");
+ H5RS_acat(rs, "H5G_DATASET");
break;
case H5G_TYPE:
- HDfprintf(out, "H5G_TYPE");
+ H5RS_acat(rs, "H5G_TYPE");
break;
case H5G_LINK:
- HDfprintf(out, "H5G_LINK");
+ H5RS_acat(rs, "H5G_LINK");
break;
case H5G_UDLINK:
- HDfprintf(out, "H5G_UDLINK");
+ H5RS_acat(rs, "H5G_UDLINK");
break;
case H5G_RESERVED_5:
case H5G_RESERVED_6:
case H5G_RESERVED_7:
- HDfprintf(out, "H5G_RESERVED(%ld)", (long)obj_type);
+ H5RS_asprintf_cat(rs, "H5G_RESERVED(%ld)", (long)obj_type);
break;
default:
- HDfprintf(out, "%ld", (long)obj_type);
+ H5RS_asprintf_cat(rs, "%ld", (long)obj_type);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 's':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 's': /* H5G_stat_t */
+ {
H5G_stat_t *statbuf = HDva_arg(ap, H5G_stat_t *);
- HDfprintf(out, "0x%p", (void *)statbuf);
- }
+ H5RS_asprintf_cat(rs, "%p", (void *)statbuf);
+ } /* end block */
break;
#endif /* H5_NO_DEPRECATED_SYMBOLS */
- default:
- HDfprintf(out, "BADTYPE(G%c)", type[1]);
- goto error;
- }
- break;
-
- case 'h':
- if (ptr) {
- if (vp) {
- HDfprintf(out, "0x%p", vp);
- if (asize_idx >= 0 && asize[asize_idx] >= 0) {
- hsize_t *p = (hsize_t *)vp;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(G%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- HDfprintf(out, " {");
- for (i = 0; i < asize[asize_idx]; i++) {
- if (H5S_UNLIMITED == p[i])
- HDfprintf(out, "%sH5S_UNLIMITED", (i ? ", " : ""));
- else
- HDfprintf(out, "%s%" PRIuHSIZE, (i ? ", " : ""), p[i]);
- } /* end for */
- HDfprintf(out, "}");
- } /* end if */
- } /* end if */
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'h': /* hsize_t */
+ {
hsize_t hsize = HDva_arg(ap, hsize_t);
if (H5S_UNLIMITED == hsize)
- HDfprintf(out, "H5S_UNLIMITED");
+ H5RS_acat(rs, "H5S_UNLIMITED");
else {
- HDfprintf(out, "%" PRIuHSIZE, hsize);
+ H5RS_asprintf_cat(rs, "%" PRIuHSIZE, hsize);
asize[argno] = (hssize_t)hsize;
} /* end else */
- } /* end else */
+ } /* end block */
break;
- case 'H':
- switch (type[1]) {
- case 's':
- if (ptr) {
- if (vp) {
- HDfprintf(out, "0x%p", vp);
- if (asize_idx >= 0 && asize[asize_idx] >= 0) {
- hssize_t *p = (hssize_t *)vp;
-
- HDfprintf(out, " {");
- for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%" PRIdHSIZE, (i ? ", " : ""), p[i]);
- HDfprintf(out, "}");
- } /* end if */
- } /* end if */
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'H':
+ switch (type[1]) {
+ case 'a': /* H5_alloc_stats_t */
+ {
+ H5_alloc_stats_t stats = HDva_arg(ap, H5_alloc_stats_t);
+
+ H5RS_asprintf_cat(rs, "{%llu, %zu, %zu, %zu, %zu, %zu, %zu}",
+ stats.total_alloc_bytes, stats.curr_alloc_bytes,
+ stats.peak_alloc_bytes, stats.max_block_size,
+ stats.total_alloc_blocks_count, stats.curr_alloc_blocks_count,
+ stats.peak_alloc_blocks_count);
+ } /* end block */
+ break;
+
+ case 's': /* hssize_t */
+ {
hssize_t hssize = HDva_arg(ap, hssize_t);
- HDfprintf(out, "%" PRIdHSIZE, hssize);
+ H5RS_asprintf_cat(rs, "%" PRIdHSIZE, hssize);
asize[argno] = (hssize_t)hssize;
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(H%c)", type[1]);
- goto error;
- } /* end switch */
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(H%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case 'i':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'i': /* hid_t (and H5E_major_t / H5E_minor_t) */
+ {
hid_t obj = HDva_arg(ap, hid_t);
if (H5P_DEFAULT == obj)
- HDfprintf(out, "H5P_DEFAULT");
+ H5RS_acat(rs, "H5P_DEFAULT");
else if (obj < 0)
- HDfprintf(out, "FAIL");
+ H5RS_acat(rs, "FAIL");
else {
switch (H5I_TYPE(obj)) { /* Use internal H5I macro instead of function call */
case H5I_UNINIT:
- HDfprintf(out, "%ld (uninit - error)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (uninit - error)", (unsigned long long)obj);
break;
case H5I_BADID:
- HDfprintf(out, "%ld (error)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (badid - error)", (unsigned long long)obj);
break;
case H5I_FILE:
- HDfprintf(out, "%ld (file)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (file)", (unsigned long long)obj);
break;
case H5I_GROUP:
- HDfprintf(out, "%ld (group)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (group)", (unsigned long long)obj);
break;
case H5I_DATATYPE:
if (obj == H5T_NATIVE_SCHAR_g)
- HDfprintf(out, "H5T_NATIVE_SCHAR");
+ H5RS_acat(rs, "H5T_NATIVE_SCHAR");
else if (obj == H5T_NATIVE_UCHAR_g)
- HDfprintf(out, "H5T_NATIVE_UCHAR");
+ H5RS_acat(rs, "H5T_NATIVE_UCHAR");
else if (obj == H5T_NATIVE_SHORT_g)
- HDfprintf(out, "H5T_NATIVE_SHORT");
+ H5RS_acat(rs, "H5T_NATIVE_SHORT");
else if (obj == H5T_NATIVE_USHORT_g)
- HDfprintf(out, "H5T_NATIVE_USHORT");
+ H5RS_acat(rs, "H5T_NATIVE_USHORT");
else if (obj == H5T_NATIVE_INT_g)
- HDfprintf(out, "H5T_NATIVE_INT");
+ H5RS_acat(rs, "H5T_NATIVE_INT");
else if (obj == H5T_NATIVE_UINT_g)
- HDfprintf(out, "H5T_NATIVE_UINT");
+ H5RS_acat(rs, "H5T_NATIVE_UINT");
else if (obj == H5T_NATIVE_LONG_g)
- HDfprintf(out, "H5T_NATIVE_LONG");
+ H5RS_acat(rs, "H5T_NATIVE_LONG");
else if (obj == H5T_NATIVE_ULONG_g)
- HDfprintf(out, "H5T_NATIVE_ULONG");
+ H5RS_acat(rs, "H5T_NATIVE_ULONG");
else if (obj == H5T_NATIVE_LLONG_g)
- HDfprintf(out, "H5T_NATIVE_LLONG");
+ H5RS_acat(rs, "H5T_NATIVE_LLONG");
else if (obj == H5T_NATIVE_ULLONG_g)
- HDfprintf(out, "H5T_NATIVE_ULLONG");
+ H5RS_acat(rs, "H5T_NATIVE_ULLONG");
else if (obj == H5T_NATIVE_FLOAT_g)
- HDfprintf(out, "H5T_NATIVE_FLOAT");
+ H5RS_acat(rs, "H5T_NATIVE_FLOAT");
else if (obj == H5T_NATIVE_DOUBLE_g)
- HDfprintf(out, "H5T_NATIVE_DOUBLE");
+ H5RS_acat(rs, "H5T_NATIVE_DOUBLE");
#if H5_SIZEOF_LONG_DOUBLE != 0
else if (obj == H5T_NATIVE_LDOUBLE_g)
- HDfprintf(out, "H5T_NATIVE_LDOUBLE");
+ H5RS_acat(rs, "H5T_NATIVE_LDOUBLE");
#endif
else if (obj == H5T_IEEE_F32BE_g)
- HDfprintf(out, "H5T_IEEE_F32BE");
+ H5RS_acat(rs, "H5T_IEEE_F32BE");
else if (obj == H5T_IEEE_F32LE_g)
- HDfprintf(out, "H5T_IEEE_F32LE");
+ H5RS_acat(rs, "H5T_IEEE_F32LE");
else if (obj == H5T_IEEE_F64BE_g)
- HDfprintf(out, "H5T_IEEE_F64BE");
+ H5RS_acat(rs, "H5T_IEEE_F64BE");
else if (obj == H5T_IEEE_F64LE_g)
- HDfprintf(out, "H5T_IEEE_F64LE");
+ H5RS_acat(rs, "H5T_IEEE_F64LE");
else if (obj == H5T_STD_I8BE_g)
- HDfprintf(out, "H5T_STD_I8BE");
+ H5RS_acat(rs, "H5T_STD_I8BE");
else if (obj == H5T_STD_I8LE_g)
- HDfprintf(out, "H5T_STD_I8LE");
+ H5RS_acat(rs, "H5T_STD_I8LE");
else if (obj == H5T_STD_I16BE_g)
- HDfprintf(out, "H5T_STD_I16BE");
+ H5RS_acat(rs, "H5T_STD_I16BE");
else if (obj == H5T_STD_I16LE_g)
- HDfprintf(out, "H5T_STD_I16LE");
+ H5RS_acat(rs, "H5T_STD_I16LE");
else if (obj == H5T_STD_I32BE_g)
- HDfprintf(out, "H5T_STD_I32BE");
+ H5RS_acat(rs, "H5T_STD_I32BE");
else if (obj == H5T_STD_I32LE_g)
- HDfprintf(out, "H5T_STD_I32LE");
+ H5RS_acat(rs, "H5T_STD_I32LE");
else if (obj == H5T_STD_I64BE_g)
- HDfprintf(out, "H5T_STD_I64BE");
+ H5RS_acat(rs, "H5T_STD_I64BE");
else if (obj == H5T_STD_I64LE_g)
- HDfprintf(out, "H5T_STD_I64LE");
+ H5RS_acat(rs, "H5T_STD_I64LE");
else if (obj == H5T_STD_U8BE_g)
- HDfprintf(out, "H5T_STD_U8BE");
+ H5RS_acat(rs, "H5T_STD_U8BE");
else if (obj == H5T_STD_U8LE_g)
- HDfprintf(out, "H5T_STD_U8LE");
+ H5RS_acat(rs, "H5T_STD_U8LE");
else if (obj == H5T_STD_U16BE_g)
- HDfprintf(out, "H5T_STD_U16BE");
+ H5RS_acat(rs, "H5T_STD_U16BE");
else if (obj == H5T_STD_U16LE_g)
- HDfprintf(out, "H5T_STD_U16LE");
+ H5RS_acat(rs, "H5T_STD_U16LE");
else if (obj == H5T_STD_U32BE_g)
- HDfprintf(out, "H5T_STD_U32BE");
+ H5RS_acat(rs, "H5T_STD_U32BE");
else if (obj == H5T_STD_U32LE_g)
- HDfprintf(out, "H5T_STD_U32LE");
+ H5RS_acat(rs, "H5T_STD_U32LE");
else if (obj == H5T_STD_U64BE_g)
- HDfprintf(out, "H5T_STD_U64BE");
+ H5RS_acat(rs, "H5T_STD_U64BE");
else if (obj == H5T_STD_U64LE_g)
- HDfprintf(out, "H5T_STD_U64LE");
+ H5RS_acat(rs, "H5T_STD_U64LE");
else if (obj == H5T_STD_B8BE_g)
- HDfprintf(out, "H5T_STD_B8BE");
+ H5RS_acat(rs, "H5T_STD_B8BE");
else if (obj == H5T_STD_B8LE_g)
- HDfprintf(out, "H5T_STD_B8LE");
+ H5RS_acat(rs, "H5T_STD_B8LE");
else if (obj == H5T_STD_B16BE_g)
- HDfprintf(out, "H5T_STD_B16BE");
+ H5RS_acat(rs, "H5T_STD_B16BE");
else if (obj == H5T_STD_B16LE_g)
- HDfprintf(out, "H5T_STD_B16LE");
+ H5RS_acat(rs, "H5T_STD_B16LE");
else if (obj == H5T_STD_B32BE_g)
- HDfprintf(out, "H5T_STD_B32BE");
+ H5RS_acat(rs, "H5T_STD_B32BE");
else if (obj == H5T_STD_B32LE_g)
- HDfprintf(out, "H5T_STD_B32LE");
+ H5RS_acat(rs, "H5T_STD_B32LE");
else if (obj == H5T_STD_B64BE_g)
- HDfprintf(out, "H5T_STD_B64BE");
+ H5RS_acat(rs, "H5T_STD_B64BE");
else if (obj == H5T_STD_B64LE_g)
- HDfprintf(out, "H5T_STD_B64LE");
+ H5RS_acat(rs, "H5T_STD_B64LE");
else if (obj == H5T_C_S1_g)
- HDfprintf(out, "H5T_C_S1");
+ H5RS_acat(rs, "H5T_C_S1");
else if (obj == H5T_FORTRAN_S1_g)
- HDfprintf(out, "H5T_FORTRAN_S1");
+ H5RS_acat(rs, "H5T_FORTRAN_S1");
else
- HDfprintf(out, "%ld (dtype)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (dtype)", (unsigned long long)obj);
break;
case H5I_DATASPACE:
- HDfprintf(out, "%ld (dspace)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (dspace)", (unsigned long long)obj);
/* Save the rank of simple dataspaces for arrays */
/* This may generate recursive call to the library... -QAK */
{
@@ -1372,506 +1619,515 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
break;
case H5I_DATASET:
- HDfprintf(out, "%ld (dset)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (dset)", (unsigned long long)obj);
break;
case H5I_ATTR:
- HDfprintf(out, "%ld (attr)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (attr)", (unsigned long long)obj);
break;
case H5I_MAP:
- HDfprintf(out, "%ld (map)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (map)", (unsigned long long)obj);
break;
case H5I_VFL:
- HDfprintf(out, "%ld (file driver)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (file driver)", (unsigned long long)obj);
break;
case H5I_VOL:
- HDfprintf(out, "%ld (VOL plugin)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (VOL plugin)", (unsigned long long)obj);
break;
case H5I_GENPROP_CLS:
- HDfprintf(out, "%ld (genprop class)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (genprop class)", (unsigned long long)obj);
break;
case H5I_GENPROP_LST:
- HDfprintf(out, "%ld (genprop list)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (genprop list)", (unsigned long long)obj);
break;
case H5I_ERROR_CLASS:
- HDfprintf(out, "%ld (err class)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (err class)", (unsigned long long)obj);
break;
case H5I_ERROR_MSG:
- HDfprintf(out, "%ld (err msg)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (err msg)", (unsigned long long)obj);
break;
case H5I_ERROR_STACK:
- HDfprintf(out, "%ld (err stack)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (err stack)", (unsigned long long)obj);
break;
case H5I_SPACE_SEL_ITER:
- HDfprintf(out, "%ld (dataspace selection iterator)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (dataspace selection iterator)",
+ (unsigned long long)obj);
break;
case H5I_NTYPES:
- HDfprintf(out, "%ld (ntypes - error)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (ntypes - error)", (unsigned long long)obj);
break;
default:
- HDfprintf(out, "%ld (unknown class)", (long)obj);
+ H5RS_asprintf_cat(rs, "0x%0llx (unknown class)", (unsigned long long)obj);
break;
} /* end switch */
} /* end else */
- } /* end else */
+ } /* end block */
break;
- case 'I':
- switch (type[1]) {
- case 'i':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'I':
+ switch (type[1]) {
+ case 'f': /* H5I_free_t */
+ {
+ H5I_free_t ifree = (H5I_free_t)HDva_arg(ap, H5I_free_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)ifree);
+ } /* end block */
+ break;
+
+ case 'i': /* H5_index_t */
+ {
H5_index_t idx_type = (H5_index_t)HDva_arg(ap, int);
switch (idx_type) {
case H5_INDEX_UNKNOWN:
- HDfprintf(out, "H5_INDEX_UNKNOWN");
+ H5RS_acat(rs, "H5_INDEX_UNKNOWN");
break;
case H5_INDEX_NAME:
- HDfprintf(out, "H5_INDEX_NAME");
+ H5RS_acat(rs, "H5_INDEX_NAME");
break;
case H5_INDEX_CRT_ORDER:
- HDfprintf(out, "H5_INDEX_CRT_ORDER");
+ H5RS_acat(rs, "H5_INDEX_CRT_ORDER");
break;
case H5_INDEX_N:
- HDfprintf(out, "H5_INDEX_N");
+ H5RS_acat(rs, "H5_INDEX_N");
break;
default:
- HDfprintf(out, "%ld", (long)idx_type);
+ H5RS_asprintf_cat(rs, "%ld", (long)idx_type);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'o':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'I': /* H5I_iterate_func_t */
+ {
+ H5I_iterate_func_t iiter = (H5I_iterate_func_t)HDva_arg(ap, H5I_iterate_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)iiter);
+ } /* end block */
+ break;
+
+ case 'o': /* H5_iter_order_t */
+ {
H5_iter_order_t order = (H5_iter_order_t)HDva_arg(ap, int);
switch (order) {
case H5_ITER_UNKNOWN:
- HDfprintf(out, "H5_ITER_UNKNOWN");
+ H5RS_acat(rs, "H5_ITER_UNKNOWN");
break;
case H5_ITER_INC:
- HDfprintf(out, "H5_ITER_INC");
+ H5RS_acat(rs, "H5_ITER_INC");
break;
case H5_ITER_DEC:
- HDfprintf(out, "H5_ITER_DEC");
+ H5RS_acat(rs, "H5_ITER_DEC");
break;
case H5_ITER_NATIVE:
- HDfprintf(out, "H5_ITER_NATIVE");
+ H5RS_acat(rs, "H5_ITER_NATIVE");
break;
case H5_ITER_N:
- HDfprintf(out, "H5_ITER_N");
+ H5RS_acat(rs, "H5_ITER_N");
break;
default:
- HDfprintf(out, "%ld", (long)order);
+ H5RS_asprintf_cat(rs, "%ld", (long)order);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 's':
- if (ptr) {
- if (vp) {
- HDfprintf(out, "0x%p", vp);
- if (asize_idx >= 0 && asize[asize_idx] >= 0) {
- int *p = (int *)vp;
-
- HDfprintf(out, " {");
- for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%d", (i ? ", " : ""), p[i]);
- HDfprintf(out, "}");
- } /* end if */
- } /* end if */
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 's': /* int / int32_t */
+ {
int is = HDva_arg(ap, int);
- HDfprintf(out, "%d", is);
+ H5RS_asprintf_cat(rs, "%d", is);
asize[argno] = is;
- } /* end else */
+ } /* end block */
break;
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'S': /* H5I_search_func_t */
+ {
+ H5I_search_func_t isearch = (H5I_search_func_t)HDva_arg(ap, H5I_search_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)isearch);
+ } /* end block */
+ break;
+
+ case 't': /* H5I_type_t */
+ {
H5I_type_t id_type = (H5I_type_t)HDva_arg(ap, int);
switch (id_type) {
case H5I_UNINIT:
- HDfprintf(out, "H5I_UNINIT");
+ H5RS_acat(rs, "H5I_UNINIT");
break;
case H5I_BADID:
- HDfprintf(out, "H5I_BADID");
+ H5RS_acat(rs, "H5I_BADID");
break;
case H5I_FILE:
- HDfprintf(out, "H5I_FILE");
+ H5RS_acat(rs, "H5I_FILE");
break;
case H5I_GROUP:
- HDfprintf(out, "H5I_GROUP");
+ H5RS_acat(rs, "H5I_GROUP");
break;
case H5I_DATATYPE:
- HDfprintf(out, "H5I_DATATYPE");
+ H5RS_acat(rs, "H5I_DATATYPE");
break;
case H5I_DATASPACE:
- HDfprintf(out, "H5I_DATASPACE");
+ H5RS_acat(rs, "H5I_DATASPACE");
break;
case H5I_DATASET:
- HDfprintf(out, "H5I_DATASET");
+ H5RS_acat(rs, "H5I_DATASET");
break;
case H5I_ATTR:
- HDfprintf(out, "H5I_ATTR");
+ H5RS_acat(rs, "H5I_ATTR");
break;
case H5I_MAP:
- HDfprintf(out, "H5I_MAP");
+ H5RS_acat(rs, "H5I_MAP");
break;
case H5I_VFL:
- HDfprintf(out, "H5I_VFL");
+ H5RS_acat(rs, "H5I_VFL");
break;
case H5I_VOL:
- HDfprintf(out, "H5I_VOL");
+ H5RS_acat(rs, "H5I_VOL");
break;
case H5I_GENPROP_CLS:
- HDfprintf(out, "H5I_GENPROP_CLS");
+ H5RS_acat(rs, "H5I_GENPROP_CLS");
break;
case H5I_GENPROP_LST:
- HDfprintf(out, "H5I_GENPROP_LST");
+ H5RS_acat(rs, "H5I_GENPROP_LST");
break;
case H5I_ERROR_CLASS:
- HDfprintf(out, "H5I_ERROR_CLASS");
+ H5RS_acat(rs, "H5I_ERROR_CLASS");
break;
case H5I_ERROR_MSG:
- HDfprintf(out, "H5I_ERROR_MSG");
+ H5RS_acat(rs, "H5I_ERROR_MSG");
break;
case H5I_ERROR_STACK:
- HDfprintf(out, "H5I_ERROR_STACK");
+ H5RS_acat(rs, "H5I_ERROR_STACK");
break;
case H5I_SPACE_SEL_ITER:
- HDfprintf(out, "H5I_SPACE_SEL_ITER");
+ H5RS_acat(rs, "H5I_SPACE_SEL_ITER");
break;
case H5I_NTYPES:
- HDfprintf(out, "H5I_NTYPES");
+ H5RS_acat(rs, "H5I_NTYPES");
break;
default:
- HDfprintf(out, "%ld", (long)id_type);
+ H5RS_asprintf_cat(rs, "%ld", (long)id_type);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'u':
- if (ptr) {
- if (vp) {
- HDfprintf(out, "0x%p", vp);
- if (asize_idx >= 0 && asize[asize_idx] >= 0) {
- unsigned *p = (unsigned *)vp;
-
- HDfprintf(out, " {");
- for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%u", i ? ", " : "", p[i]);
- HDfprintf(out, "}");
- } /* end if */
- } /* end if */
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'u': /* unsigned / uint32_t */
+ {
unsigned iu = HDva_arg(ap, unsigned);
- HDfprintf(out, "%u", iu);
+ H5RS_asprintf_cat(rs, "%u", iu);
asize[argno] = iu;
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(I%c)", type[1]);
- goto error;
- } /* end switch */
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(I%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case 'k':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'k': /* H5O_token_t */
+ {
H5O_token_t token = HDva_arg(ap, H5O_token_t);
int j;
for (j = 0; j < H5O_MAX_TOKEN_SIZE; j++)
- HDfprintf(out, "%02x", token.__data[j]);
- } /* end else */
+ H5RS_asprintf_cat(rs, "%02x", token.__data[j]);
+ } /* end block */
break;
- case 'L':
- switch (type[1]) {
- case 'l':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'L':
+ switch (type[1]) {
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+ case 'i': /* H5L_iterate1_t */
+ {
+ H5L_iterate1_t liter = (H5L_iterate1_t)HDva_arg(ap, H5L_iterate1_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)liter);
+ } /* end block */
+ break;
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+ case 'I': /* H5L_iterate2_t */
+ {
+ H5L_iterate2_t liter = (H5L_iterate2_t)HDva_arg(ap, H5L_iterate2_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)liter);
+ } /* end block */
+ break;
+
+ case 'l': /* H5L_type_t (or H5G_link_t) */
+ {
H5L_type_t link_type = (H5L_type_t)HDva_arg(ap, int);
switch (link_type) {
case H5L_TYPE_ERROR:
- HDfprintf(out, "H5L_TYPE_ERROR");
+ H5RS_acat(rs, "H5L_TYPE_ERROR");
break;
case H5L_TYPE_HARD:
- HDfprintf(out, "H5L_TYPE_HARD");
+ H5RS_acat(rs, "H5L_TYPE_HARD");
break;
case H5L_TYPE_SOFT:
- HDfprintf(out, "H5L_TYPE_SOFT");
+ H5RS_acat(rs, "H5L_TYPE_SOFT");
break;
case H5L_TYPE_EXTERNAL:
- HDfprintf(out, "H5L_TYPE_EXTERNAL");
+ H5RS_acat(rs, "H5L_TYPE_EXTERNAL");
break;
case H5L_TYPE_MAX:
- HDfprintf(out, "H5L_TYPE_MAX");
+ H5RS_acat(rs, "H5L_TYPE_MAX");
break;
default:
- HDfprintf(out, "%ld", (long)link_type);
+ H5RS_asprintf_cat(rs, "%ld", (long)link_type);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(G%c)", type[1]);
- goto error;
- } /* end switch */
- break;
+ case 't': /* H5L_elink_traverse_t */
+ {
+ H5L_elink_traverse_t elt =
+ (H5L_elink_traverse_t)HDva_arg(ap, H5L_elink_traverse_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)elt);
+ } /* end block */
+ break;
+
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(G%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
+
+ case 'M':
+ switch (type[1]) {
+ case 'a': /* H5MM_allocate_t */
+ {
+ H5MM_allocate_t afunc = (H5MM_allocate_t)HDva_arg(ap, H5MM_allocate_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)afunc);
+ } /* end block */
+ break;
- case 'M':
- switch (type[1]) {
- case 'c':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
#ifdef H5_HAVE_PARALLEL
- else {
+ case 'c': /* MPI_Comm */
+ {
MPI_Comm comm = HDva_arg(ap, MPI_Comm);
- HDfprintf(out, "%ld", (long)comm);
- } /* end else */
-#endif /* H5_HAVE_PARALLEL */
+ H5RS_asprintf_cat(rs, "%ld", (long)comm);
+ } /* end block */
+ break;
+#endif /* H5_HAVE_PARALLEL */
+
+ case 'f': /* H5MM_free_t */
+ {
+ H5MM_free_t ffunc = (H5MM_free_t)HDva_arg(ap, H5MM_free_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)ffunc);
+ } /* end block */
break;
- case 'i':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
#ifdef H5_HAVE_PARALLEL
- else {
+ case 'i': /* MPI_Info */
+ {
MPI_Info info = HDva_arg(ap, MPI_Info);
- HDfprintf(out, "%ld", (long)info);
- } /* end else */
-#endif /* H5_HAVE_PARALLEL */
+ H5RS_asprintf_cat(rs, "%ld", (long)info);
+ } /* end block */
break;
+#endif /* H5_HAVE_PARALLEL */
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+#ifdef H5_HAVE_MAP_API
+ case 'I': /* H5M_iterate_t */
+ {
+ H5M_iterate_t miter = (H5M_iterate_t)HDva_arg(ap, H5M_iterate_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)miter);
+ } /* end block */
+ break;
+#endif /* H5_HAVE_MAP_API */
+
+ case 't': /* H5FD_mem_t */
+ {
H5FD_mem_t mt = (H5FD_mem_t)HDva_arg(ap, int);
switch (mt) {
case H5FD_MEM_NOLIST:
- HDfprintf(out, "H5FD_MEM_NOLIST");
+ H5RS_acat(rs, "H5FD_MEM_NOLIST");
break;
case H5FD_MEM_DEFAULT:
- HDfprintf(out, "H5FD_MEM_DEFAULT");
+ H5RS_acat(rs, "H5FD_MEM_DEFAULT");
break;
case H5FD_MEM_SUPER:
- HDfprintf(out, "H5FD_MEM_SUPER");
+ H5RS_acat(rs, "H5FD_MEM_SUPER");
break;
case H5FD_MEM_BTREE:
- HDfprintf(out, "H5FD_MEM_BTREE");
+ H5RS_acat(rs, "H5FD_MEM_BTREE");
break;
case H5FD_MEM_DRAW:
- HDfprintf(out, "H5FD_MEM_DRAW");
+ H5RS_acat(rs, "H5FD_MEM_DRAW");
break;
case H5FD_MEM_GHEAP:
- HDfprintf(out, "H5FD_MEM_GHEAP");
+ H5RS_acat(rs, "H5FD_MEM_GHEAP");
break;
case H5FD_MEM_LHEAP:
- HDfprintf(out, "H5FD_MEM_LHEAP");
+ H5RS_acat(rs, "H5FD_MEM_LHEAP");
break;
case H5FD_MEM_OHDR:
- HDfprintf(out, "H5FD_MEM_OHDR");
+ H5RS_acat(rs, "H5FD_MEM_OHDR");
break;
case H5FD_MEM_NTYPES:
- HDfprintf(out, "H5FD_MEM_NTYPES");
+ H5RS_acat(rs, "H5FD_MEM_NTYPES");
break;
default:
- HDfprintf(out, "%ld", (long)mt);
+ H5RS_asprintf_cat(rs, "%ld", (long)mt);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- default:
- goto error;
- } /* end switch */
- break;
+ default:
+ goto error;
+ } /* end switch */
+ break;
- case 'o':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'o': /* off_t */
+ {
off_t offset = HDva_arg(ap, off_t);
- HDfprintf(out, "%ld", (long)offset);
- } /* end else */
+ H5RS_asprintf_cat(rs, "%ld", (long)offset);
+ } /* end block */
break;
- case 'O':
- switch (type[1]) {
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'O':
+ switch (type[1]) {
+#ifndef H5_NO_DEPRECATED_SYMBOLS
+ case 'i': /* H5O_iterate1_t */
+ {
+ H5O_iterate1_t oiter = (H5O_iterate1_t)HDva_arg(ap, H5O_iterate1_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)oiter);
+ } /* end block */
+ break;
+#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
+ case 'I': /* H5O_iterate2_t */
+ {
+ H5O_iterate2_t oiter2 = (H5O_iterate2_t)HDva_arg(ap, H5O_iterate2_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)oiter2);
+ } /* end block */
+ break;
+
+ case 's': /* H5O_mcdt_search_cb_t */
+ {
+ H5O_mcdt_search_cb_t osrch =
+ (H5O_mcdt_search_cb_t)HDva_arg(ap, H5O_mcdt_search_cb_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)osrch);
+ } /* end block */
+ break;
+
+ case 't': /* H5O_type_t */
+ {
H5O_type_t objtype = (H5O_type_t)HDva_arg(ap, int);
switch (objtype) {
case H5O_TYPE_UNKNOWN:
- HDfprintf(out, "H5O_TYPE_UNKNOWN");
+ H5RS_acat(rs, "H5O_TYPE_UNKNOWN");
break;
case H5O_TYPE_GROUP:
- HDfprintf(out, "H5O_TYPE_GROUP");
+ H5RS_acat(rs, "H5O_TYPE_GROUP");
break;
case H5O_TYPE_DATASET:
- HDfprintf(out, "H5O_TYPE_DATASET");
+ H5RS_acat(rs, "H5O_TYPE_DATASET");
break;
case H5O_TYPE_NAMED_DATATYPE:
- HDfprintf(out, "H5O_TYPE_NAMED_DATATYPE");
+ H5RS_acat(rs, "H5O_TYPE_NAMED_DATATYPE");
break;
case H5O_TYPE_MAP:
- HDfprintf(out, "H5O_TYPE_MAP");
+ H5RS_acat(rs, "H5O_TYPE_MAP");
break;
case H5O_TYPE_NTYPES:
- HDfprintf(out, "H5O_TYPE_NTYPES");
+ H5RS_acat(rs, "H5O_TYPE_NTYPES");
break;
default:
- HDfprintf(out, "BADTYPE(%ld)", (long)objtype);
+ H5RS_asprintf_cat(rs, "BADTYPE(%ld)", (long)objtype);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(S%c)", type[1]);
- goto error;
- } /* end switch */
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(S%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case 'p':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'p': /* H5P_class_t */
+ {
hid_t pclass_id = HDva_arg(ap, hid_t);
char * class_name = NULL;
H5P_genclass_t *pclass;
@@ -1880,619 +2136,609 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
/* (This may generate recursive call to the library... -QAK) */
if (NULL != (pclass = (H5P_genclass_t *)H5I_object(pclass_id)) &&
NULL != (class_name = H5P_get_class_name(pclass))) {
- HDfprintf(out, "%s", class_name);
+ H5RS_asprintf_cat(rs, "%s", class_name);
H5MM_xfree(class_name);
} /* end if */
else
- HDfprintf(out, "%ld", (long)pclass_id);
- } /* end else */
+ H5RS_asprintf_cat(rs, "%ld", (long)pclass_id);
+ } /* end block */
break;
- case 'R':
- switch (type[1]) {
+ case 'P':
+ switch (type[1]) {
+ case 'c': /* H5P_cls_create_func_t */
+ {
+ H5P_cls_create_func_t pcls_crt =
+ (H5P_cls_create_func_t)HDva_arg(ap, H5P_cls_create_func_t);
- case 'o':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
- hobj_ref_t ref = HDva_arg(ap, hobj_ref_t);
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)pcls_crt);
+ } /* end block */
+ break;
+
+ case 'C': /* H5P_prp_create_func_t */
+ {
+ H5P_prp_create_func_t prp_crt =
+ (H5P_prp_create_func_t)HDva_arg(ap, H5P_prp_create_func_t);
- HDfprintf(out, "Reference Object=%" PRIuHADDR, ref);
- } /* end else */
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)prp_crt);
+ } /* end block */
break;
- case 'd':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'D': /* H5P_prp_delete_func_t */
+ {
+ H5P_prp_delete_func_t prp_del =
+ (H5P_prp_delete_func_t)HDva_arg(ap, H5P_prp_delete_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)prp_del);
+ } /* end block */
+ break;
+
+ case 'G': /* H5P_prp_get_func_t */
+ {
+ H5P_prp_get_func_t prp_get = (H5P_prp_get_func_t)HDva_arg(ap, H5P_prp_get_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)prp_get);
+ } /* end block */
+ break;
+
+ case 'i': /* H5P_iterate_t */
+ {
+ H5P_iterate_t piter = (H5P_iterate_t)HDva_arg(ap, H5P_iterate_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)piter);
+ } /* end block */
+ break;
+
+ case 'l': /* H5P_cls_close_func_t */
+ {
+ H5P_cls_close_func_t pcls_cls =
+ (H5P_cls_close_func_t)HDva_arg(ap, H5P_cls_close_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)pcls_cls);
+ } /* end block */
+ break;
+
+ case 'L': /* H5P_prp_close_func_t */
+ {
+ H5P_prp_close_func_t prp_cls =
+ (H5P_prp_close_func_t)HDva_arg(ap, H5P_prp_close_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)prp_cls);
+ } /* end block */
+ break;
+
+ case 'M': /* H5P_prp_compare_func_t */
+ {
+ H5P_prp_compare_func_t prp_cmp =
+ (H5P_prp_compare_func_t)HDva_arg(ap, H5P_prp_compare_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)prp_cmp);
+ } /* end block */
+ break;
+
+ case 'o': /* H5P_cls_copy_func_t */
+ {
+ H5P_cls_copy_func_t pcls_cpy =
+ (H5P_cls_copy_func_t)HDva_arg(ap, H5P_cls_copy_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)pcls_cpy);
+ } /* end block */
+ break;
+
+ case 'O': /* H5P_prp_copy_func_t */
+ {
+ H5P_prp_copy_func_t prp_cpy =
+ (H5P_prp_copy_func_t)HDva_arg(ap, H5P_prp_copy_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)prp_cpy);
+ } /* end block */
+ break;
+
+ case 'S': /* H5P_prp_set_func_t */
+ {
+ H5P_prp_set_func_t prp_set = (H5P_prp_set_func_t)HDva_arg(ap, H5P_prp_set_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)prp_set);
+ } /* end block */
+ break;
+
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(P%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
+
+ case 'R':
+ switch (type[1]) {
+ case 'd': /* hdset_reg_ref_t */
+ {
/* Note! region references are array types */
- HDfprintf(out, "Reference Region");
+ H5RS_acat(rs, "Reference Region");
goto error;
- } /* end else */
+ } /* end block */
break;
- case 'r':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'o': /* hobj_ref_t */
+ {
+ hobj_ref_t ref = HDva_arg(ap, hobj_ref_t);
+
+ H5RS_asprintf_cat(rs, "Reference Object=%" PRIuHADDR, ref);
+ } /* end block */
+ break;
+
+ case 'r': /* H5R_ref_t */
+ {
/* Note! reference types are opaque types */
- HDfprintf(out, "Reference Opaque");
+ H5RS_acat(rs, "Reference Opaque");
goto error;
- } /* end else */
+ } /* end block */
break;
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 't': /* H5R_type_t */
+ {
H5R_type_t reftype = (H5R_type_t)HDva_arg(ap, int);
switch (reftype) {
case H5R_BADTYPE:
- HDfprintf(out, "H5R_BADTYPE");
+ H5RS_acat(rs, "H5R_BADTYPE");
break;
case H5R_OBJECT1:
- HDfprintf(out, "H5R_OBJECT1");
+ H5RS_acat(rs, "H5R_OBJECT1");
break;
case H5R_DATASET_REGION1:
- HDfprintf(out, "H5R_DATASET_REGION1");
+ H5RS_acat(rs, "H5R_DATASET_REGION1");
break;
case H5R_OBJECT2:
- HDfprintf(out, "H5R_OBJECT2");
+ H5RS_acat(rs, "H5R_OBJECT2");
break;
case H5R_DATASET_REGION2:
- HDfprintf(out, "H5R_DATASET_REGION2");
+ H5RS_acat(rs, "H5R_DATASET_REGION2");
break;
case H5R_ATTR:
- HDfprintf(out, "H5R_ATTR");
+ H5RS_acat(rs, "H5R_ATTR");
break;
case H5R_MAXTYPE:
- HDfprintf(out, "H5R_MAXTYPE");
+ H5RS_acat(rs, "H5R_MAXTYPE");
break;
default:
- HDfprintf(out, "BADTYPE(%ld)", (long)reftype);
+ H5RS_asprintf_cat(rs, "BADTYPE(%ld)", (long)reftype);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(S%c)", type[1]);
- goto error;
- }
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(S%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case 'S':
- switch (type[1]) {
- case 'c':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'S':
+ switch (type[1]) {
+ case 'c': /* H5S_class_t */
+ {
H5S_class_t cls = (H5S_class_t)HDva_arg(ap, int);
switch (cls) {
case H5S_NO_CLASS:
- HDfprintf(out, "H5S_NO_CLASS");
+ H5RS_acat(rs, "H5S_NO_CLASS");
break;
case H5S_SCALAR:
- HDfprintf(out, "H5S_SCALAR");
+ H5RS_acat(rs, "H5S_SCALAR");
break;
case H5S_SIMPLE:
- HDfprintf(out, "H5S_SIMPLE");
+ H5RS_acat(rs, "H5S_SIMPLE");
break;
case H5S_NULL:
- HDfprintf(out, "H5S_NULL");
+ H5RS_acat(rs, "H5S_NULL");
break;
default:
- HDfprintf(out, "%ld", (long)cls);
+ H5RS_asprintf_cat(rs, "%ld", (long)cls);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 's':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 's': /* H5S_seloper_t */
+ {
H5S_seloper_t so = (H5S_seloper_t)HDva_arg(ap, int);
switch (so) {
case H5S_SELECT_NOOP:
- HDfprintf(out, "H5S_NOOP");
+ H5RS_acat(rs, "H5S_NOOP");
break;
case H5S_SELECT_SET:
- HDfprintf(out, "H5S_SELECT_SET");
+ H5RS_acat(rs, "H5S_SELECT_SET");
break;
case H5S_SELECT_OR:
- HDfprintf(out, "H5S_SELECT_OR");
+ H5RS_acat(rs, "H5S_SELECT_OR");
break;
case H5S_SELECT_AND:
- HDfprintf(out, "H5S_SELECT_AND");
+ H5RS_acat(rs, "H5S_SELECT_AND");
break;
case H5S_SELECT_XOR:
- HDfprintf(out, "H5S_SELECT_XOR");
+ H5RS_acat(rs, "H5S_SELECT_XOR");
break;
case H5S_SELECT_NOTB:
- HDfprintf(out, "H5S_SELECT_NOTB");
+ H5RS_acat(rs, "H5S_SELECT_NOTB");
break;
case H5S_SELECT_NOTA:
- HDfprintf(out, "H5S_SELECT_NOTA");
+ H5RS_acat(rs, "H5S_SELECT_NOTA");
break;
case H5S_SELECT_APPEND:
- HDfprintf(out, "H5S_SELECT_APPEND");
+ H5RS_acat(rs, "H5S_SELECT_APPEND");
break;
case H5S_SELECT_PREPEND:
- HDfprintf(out, "H5S_SELECT_PREPEND");
+ H5RS_acat(rs, "H5S_SELECT_PREPEND");
break;
case H5S_SELECT_INVALID:
- HDfprintf(out, "H5S_SELECT_INVALID");
+ H5RS_acat(rs, "H5S_SELECT_INVALID");
break;
default:
- HDfprintf(out, "%ld", (long)so);
+ H5RS_asprintf_cat(rs, "%ld", (long)so);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 't': /* H5S_sel_type */
+ {
H5S_sel_type st = (H5S_sel_type)HDva_arg(ap, int);
switch (st) {
case H5S_SEL_ERROR:
- HDfprintf(out, "H5S_SEL_ERROR");
+ H5RS_acat(rs, "H5S_SEL_ERROR");
break;
case H5S_SEL_NONE:
- HDfprintf(out, "H5S_SEL_NONE");
+ H5RS_acat(rs, "H5S_SEL_NONE");
break;
case H5S_SEL_POINTS:
- HDfprintf(out, "H5S_SEL_POINTS");
+ H5RS_acat(rs, "H5S_SEL_POINTS");
break;
case H5S_SEL_HYPERSLABS:
- HDfprintf(out, "H5S_SEL_HYPERSLABS");
+ H5RS_acat(rs, "H5S_SEL_HYPERSLABS");
break;
case H5S_SEL_ALL:
- HDfprintf(out, "H5S_SEL_ALL");
+ H5RS_acat(rs, "H5S_SEL_ALL");
break;
case H5S_SEL_N:
- HDfprintf(out, "H5S_SEL_N");
+ H5RS_acat(rs, "H5S_SEL_N");
break;
default:
- HDfprintf(out, "%ld", (long)st);
+ H5RS_asprintf_cat(rs, "%ld", (long)st);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(S%c)", type[1]);
- goto error;
- } /* end switch */
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(S%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case 's':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
- const char *str = HDva_arg(ap, const char *);
+ case 't': /* htri_t */
+ {
+ htri_t tri_var = HDva_arg(ap, htri_t);
- HDfprintf(out, "\"%s\"", str);
- } /* end else */
+ if (tri_var > 0)
+ H5RS_acat(rs, "TRUE");
+ else if (!tri_var)
+ H5RS_acat(rs, "FALSE");
+ else
+ H5RS_asprintf_cat(rs, "FAIL(%d)", (int)tri_var);
+ } /* end block */
break;
- case 'T':
- switch (type[1]) {
- case 'c':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'T':
+ switch (type[1]) {
+ case 'c': /* H5T_cset_t */
+ {
H5T_cset_t cset = (H5T_cset_t)HDva_arg(ap, int);
- switch (cset) {
- case H5T_CSET_ERROR:
- HDfprintf(out, "H5T_CSET_ERROR");
- break;
-
- case H5T_CSET_ASCII:
- HDfprintf(out, "H5T_CSET_ASCII");
- break;
-
- case H5T_CSET_UTF8:
- HDfprintf(out, "H5T_CSET_UTF8");
- break;
+ H5_trace_args_cset(rs, cset);
+ } /* end block */
+ break;
- case H5T_CSET_RESERVED_2:
- case H5T_CSET_RESERVED_3:
- case H5T_CSET_RESERVED_4:
- case H5T_CSET_RESERVED_5:
- case H5T_CSET_RESERVED_6:
- case H5T_CSET_RESERVED_7:
- case H5T_CSET_RESERVED_8:
- case H5T_CSET_RESERVED_9:
- case H5T_CSET_RESERVED_10:
- case H5T_CSET_RESERVED_11:
- case H5T_CSET_RESERVED_12:
- case H5T_CSET_RESERVED_13:
- case H5T_CSET_RESERVED_14:
- case H5T_CSET_RESERVED_15:
- HDfprintf(out, "H5T_CSET_RESERVED_%ld", (long)cset);
- break;
+ case 'C': /* H5T_conv_t */
+ {
+ H5T_conv_t tconv = (H5T_conv_t)HDva_arg(ap, H5T_conv_t);
- default:
- HDfprintf(out, "%ld", (long)cset);
- break;
- } /* end switch */
- } /* end else */
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)tconv);
+ } /* end block */
break;
- case 'd':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'd': /* H5T_direction_t */
+ {
H5T_direction_t direct = (H5T_direction_t)HDva_arg(ap, int);
switch (direct) {
case H5T_DIR_DEFAULT:
- HDfprintf(out, "H5T_DIR_DEFAULT");
+ H5RS_acat(rs, "H5T_DIR_DEFAULT");
break;
case H5T_DIR_ASCEND:
- HDfprintf(out, "H5T_DIR_ASCEND");
+ H5RS_acat(rs, "H5T_DIR_ASCEND");
break;
case H5T_DIR_DESCEND:
- HDfprintf(out, "H5T_DIR_DESCEND");
+ H5RS_acat(rs, "H5T_DIR_DESCEND");
break;
default:
- HDfprintf(out, "%ld", (long)direct);
+ H5RS_asprintf_cat(rs, "%ld", (long)direct);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'e':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'e': /* H5T_pers_t */
+ {
H5T_pers_t pers = (H5T_pers_t)HDva_arg(ap, int);
switch (pers) {
case H5T_PERS_DONTCARE:
- HDfprintf(out, "H5T_PERS_DONTCARE");
+ H5RS_acat(rs, "H5T_PERS_DONTCARE");
break;
case H5T_PERS_SOFT:
- HDfprintf(out, "H5T_PERS_SOFT");
+ H5RS_acat(rs, "H5T_PERS_SOFT");
break;
case H5T_PERS_HARD:
- HDfprintf(out, "H5T_PERS_HARD");
+ H5RS_acat(rs, "H5T_PERS_HARD");
break;
default:
- HDfprintf(out, "%ld", (long)pers);
+ H5RS_asprintf_cat(rs, "%ld", (long)pers);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'n':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'E': /* H5T_conv_except_func_t */
+ {
+ H5T_conv_except_func_t conv_ex =
+ (H5T_conv_except_func_t)HDva_arg(ap, H5T_conv_except_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)conv_ex);
+ } /* end block */
+ break;
+
+ case 'n': /* H5T_norm_t */
+ {
H5T_norm_t norm = (H5T_norm_t)HDva_arg(ap, int);
switch (norm) {
case H5T_NORM_ERROR:
- HDfprintf(out, "H5T_NORM_ERROR");
+ H5RS_acat(rs, "H5T_NORM_ERROR");
break;
case H5T_NORM_IMPLIED:
- HDfprintf(out, "H5T_NORM_IMPLIED");
+ H5RS_acat(rs, "H5T_NORM_IMPLIED");
break;
case H5T_NORM_MSBSET:
- HDfprintf(out, "H5T_NORM_MSBSET");
+ H5RS_acat(rs, "H5T_NORM_MSBSET");
break;
case H5T_NORM_NONE:
- HDfprintf(out, "H5T_NORM_NONE");
+ H5RS_acat(rs, "H5T_NORM_NONE");
break;
default:
- HDfprintf(out, "%ld", (long)norm);
+ H5RS_asprintf_cat(rs, "%ld", (long)norm);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'o':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'o': /* H5T_order_t */
+ {
H5T_order_t order = (H5T_order_t)HDva_arg(ap, int);
switch (order) {
case H5T_ORDER_ERROR:
- HDfprintf(out, "H5T_ORDER_ERROR");
+ H5RS_acat(rs, "H5T_ORDER_ERROR");
break;
case H5T_ORDER_LE:
- HDfprintf(out, "H5T_ORDER_LE");
+ H5RS_acat(rs, "H5T_ORDER_LE");
break;
case H5T_ORDER_BE:
- HDfprintf(out, "H5T_ORDER_BE");
+ H5RS_acat(rs, "H5T_ORDER_BE");
break;
case H5T_ORDER_VAX:
- HDfprintf(out, "H5T_ORDER_VAX");
+ H5RS_acat(rs, "H5T_ORDER_VAX");
break;
case H5T_ORDER_MIXED:
- HDfprintf(out, "H5T_ORDER_MIXED");
+ H5RS_acat(rs, "H5T_ORDER_MIXED");
break;
case H5T_ORDER_NONE:
- HDfprintf(out, "H5T_ORDER_NONE");
+ H5RS_acat(rs, "H5T_ORDER_NONE");
break;
default:
- HDfprintf(out, "%ld", (long)order);
+ H5RS_asprintf_cat(rs, "%ld", (long)order);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'p':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'p': /* H5T_pad_t */
+ {
H5T_pad_t pad = (H5T_pad_t)HDva_arg(ap, int);
switch (pad) {
case H5T_PAD_ERROR:
- HDfprintf(out, "H5T_PAD_ERROR");
+ H5RS_acat(rs, "H5T_PAD_ERROR");
break;
case H5T_PAD_ZERO:
- HDfprintf(out, "H5T_PAD_ZERO");
+ H5RS_acat(rs, "H5T_PAD_ZERO");
break;
case H5T_PAD_ONE:
- HDfprintf(out, "H5T_PAD_ONE");
+ H5RS_acat(rs, "H5T_PAD_ONE");
break;
case H5T_PAD_BACKGROUND:
- HDfprintf(out, "H5T_PAD_BACKGROUND");
+ H5RS_acat(rs, "H5T_PAD_BACKGROUND");
break;
case H5T_NPAD:
- HDfprintf(out, "H5T_NPAD");
+ H5RS_acat(rs, "H5T_NPAD");
break;
default:
- HDfprintf(out, "%ld", (long)pad);
+ H5RS_asprintf_cat(rs, "%ld", (long)pad);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 's':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 's': /* H5T_sign_t */
+ {
H5T_sign_t sign = (H5T_sign_t)HDva_arg(ap, int);
switch (sign) {
case H5T_SGN_ERROR:
- HDfprintf(out, "H5T_SGN_ERROR");
+ H5RS_acat(rs, "H5T_SGN_ERROR");
break;
case H5T_SGN_NONE:
- HDfprintf(out, "H5T_SGN_NONE");
+ H5RS_acat(rs, "H5T_SGN_NONE");
break;
case H5T_SGN_2:
- HDfprintf(out, "H5T_SGN_2");
+ H5RS_acat(rs, "H5T_SGN_2");
break;
case H5T_NSGN:
- HDfprintf(out, "H5T_NSGN");
+ H5RS_acat(rs, "H5T_NSGN");
break;
default:
- HDfprintf(out, "%ld", (long)sign);
+ H5RS_asprintf_cat(rs, "%ld", (long)sign);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 't': /* H5T_class_t */
+ {
H5T_class_t type_class = (H5T_class_t)HDva_arg(ap, int);
switch (type_class) {
case H5T_NO_CLASS:
- HDfprintf(out, "H5T_NO_CLASS");
+ H5RS_acat(rs, "H5T_NO_CLASS");
break;
case H5T_INTEGER:
- HDfprintf(out, "H5T_INTEGER");
+ H5RS_acat(rs, "H5T_INTEGER");
break;
case H5T_FLOAT:
- HDfprintf(out, "H5T_FLOAT");
+ H5RS_acat(rs, "H5T_FLOAT");
break;
case H5T_TIME:
- HDfprintf(out, "H5T_TIME");
+ H5RS_acat(rs, "H5T_TIME");
break;
case H5T_STRING:
- HDfprintf(out, "H5T_STRING");
+ H5RS_acat(rs, "H5T_STRING");
break;
case H5T_BITFIELD:
- HDfprintf(out, "H5T_BITFIELD");
+ H5RS_acat(rs, "H5T_BITFIELD");
break;
case H5T_OPAQUE:
- HDfprintf(out, "H5T_OPAQUE");
+ H5RS_acat(rs, "H5T_OPAQUE");
break;
case H5T_COMPOUND:
- HDfprintf(out, "H5T_COMPOUND");
+ H5RS_acat(rs, "H5T_COMPOUND");
break;
case H5T_REFERENCE:
- HDfprintf(out, "H5T_REFERENCE");
+ H5RS_acat(rs, "H5T_REFERENCE");
break;
case H5T_ENUM:
- HDfprintf(out, "H5T_ENUM");
+ H5RS_acat(rs, "H5T_ENUM");
break;
case H5T_VLEN:
- HDfprintf(out, "H5T_VLEN");
+ H5RS_acat(rs, "H5T_VLEN");
break;
case H5T_ARRAY:
- HDfprintf(out, "H5T_ARRAY");
+ H5RS_acat(rs, "H5T_ARRAY");
break;
case H5T_NCLASSES:
- HDfprintf(out, "H5T_NCLASSES");
+ H5RS_acat(rs, "H5T_NCLASSES");
break;
default:
- HDfprintf(out, "%ld", (long)type_class);
+ H5RS_asprintf_cat(rs, "%ld", (long)type_class);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'z':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'z': /* H5T_str_t */
+ {
H5T_str_t str = (H5T_str_t)HDva_arg(ap, int);
switch (str) {
case H5T_STR_ERROR:
- HDfprintf(out, "H5T_STR_ERROR");
+ H5RS_acat(rs, "H5T_STR_ERROR");
break;
case H5T_STR_NULLTERM:
- HDfprintf(out, "H5T_STR_NULLTERM");
+ H5RS_acat(rs, "H5T_STR_NULLTERM");
break;
case H5T_STR_NULLPAD:
- HDfprintf(out, "H5T_STR_NULLPAD");
+ H5RS_acat(rs, "H5T_STR_NULLPAD");
break;
case H5T_STR_SPACEPAD:
- HDfprintf(out, "H5T_STR_SPACEPAD");
+ H5RS_acat(rs, "H5T_STR_SPACEPAD");
break;
case H5T_STR_RESERVED_3:
@@ -2508,1216 +2754,1208 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
case H5T_STR_RESERVED_13:
case H5T_STR_RESERVED_14:
case H5T_STR_RESERVED_15:
- HDfprintf(out, "H5T_STR_RESERVED(%ld)", (long)str);
+ H5RS_asprintf_cat(rs, "H5T_STR_RESERVED(%ld)", (long)str);
break;
default:
- HDfprintf(out, "%ld", (long)str);
+ H5RS_asprintf_cat(rs, "%ld", (long)str);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(T%c)", type[1]);
- goto error;
- } /* end switch */
- break;
-
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
- htri_t tri_var = HDva_arg(ap, htri_t);
-
- if (tri_var > 0)
- HDfprintf(out, "TRUE");
- else if (!tri_var)
- HDfprintf(out, "FALSE");
- else
- HDfprintf(out, "FAIL(%d)", (int)tri_var);
- } /* end else */
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(T%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case 'U':
- switch (type[1]) {
- case 'l':
- if (ptr) {
- if (vp) {
- HDfprintf(out, "0x%p", vp);
- if (asize_idx >= 0 && asize[asize_idx] >= 0) {
- unsigned long *p = (unsigned long *)vp;
-
- HDfprintf(out, " {");
- for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%lu", i ? ", " : "", p[i]);
- HDfprintf(out, "}");
- } /* end if */
- } /* end if */
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'U':
+ switch (type[1]) {
+ case 'l': /* unsigned long */
+ {
unsigned long iul = HDva_arg(ap, unsigned long);
- HDfprintf(out, "%lu", iul);
+ H5RS_asprintf_cat(rs, "%lu", iul);
asize[argno] = (hssize_t)iul;
- } /* end else */
- break;
-
- case 'L':
- if (ptr) {
- if (vp) {
- HDfprintf(out, "0x%p", vp);
- if (asize_idx >= 0 && asize[asize_idx] >= 0) {
- unsigned long long *p = (unsigned long long *)vp;
-
- HDfprintf(out, " {");
- for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%llu", i ? ", " : "", p[i]);
- HDfprintf(out, "}");
- } /* end if */
- } /* end if */
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ } /* end block */
+ break;
+
+ case 'L': /* unsigned long long / uint64_t */
+ {
unsigned long long iull = HDva_arg(ap, unsigned long long);
- HDfprintf(out, "%llu", iull);
+ H5RS_asprintf_cat(rs, "%llu", iull);
asize[argno] = (hssize_t)iull;
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(U%c)", type[1]);
- goto error;
- } /* end switch */
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(U%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- case 'V':
- switch (type[1]) {
- case 'a':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'V':
+ switch (type[1]) {
+ case 'a': /* H5VL_attr_get_t */
+ {
H5VL_attr_get_t get = (H5VL_attr_get_t)HDva_arg(ap, int);
switch (get) {
case H5VL_ATTR_GET_SPACE:
- HDfprintf(out, "H5VL_ATTR_GET_SPACE");
+ H5RS_acat(rs, "H5VL_ATTR_GET_SPACE");
break;
+
case H5VL_ATTR_GET_TYPE:
- HDfprintf(out, "H5VL_ATTR_GET_TYPE");
+ H5RS_acat(rs, "H5VL_ATTR_GET_TYPE");
break;
+
case H5VL_ATTR_GET_ACPL:
- HDfprintf(out, "H5VL_ATTR_GET_ACPL");
+ H5RS_acat(rs, "H5VL_ATTR_GET_ACPL");
break;
+
case H5VL_ATTR_GET_NAME:
- HDfprintf(out, "H5VL_ATTR_GET_NAME");
+ H5RS_acat(rs, "H5VL_ATTR_GET_NAME");
break;
+
case H5VL_ATTR_GET_STORAGE_SIZE:
- HDfprintf(out, "H5VL_ATTR_GET_STORAGE_SIZE");
+ H5RS_acat(rs, "H5VL_ATTR_GET_STORAGE_SIZE");
break;
+
case H5VL_ATTR_GET_INFO:
- HDfprintf(out, "H5VL_ATTR_GET_INFO");
+ H5RS_acat(rs, "H5VL_ATTR_GET_INFO");
break;
+
default:
- HDfprintf(out, "%ld", (long)get);
+ H5RS_asprintf_cat(rs, "%ld", (long)get);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'A':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'A': /* H5VL_blob_optional_t */
+ {
H5VL_blob_optional_t optional = (H5VL_blob_optional_t)HDva_arg(ap, int);
- switch (optional) {
- default:
- HDfprintf(out, "%ld", (long)optional);
- break;
- } /* end switch */
- } /* end else */
+ H5RS_asprintf_cat(rs, "%ld", (long)optional);
+ } /* end block */
break;
- case 'b':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'b': /* H5VL_attr_specific_t */
+ {
H5VL_attr_specific_t specific = (H5VL_attr_specific_t)HDva_arg(ap, int);
switch (specific) {
case H5VL_ATTR_DELETE:
- HDfprintf(out, "H5VL_ATTR_DELETE");
+ H5RS_acat(rs, "H5VL_ATTR_DELETE");
break;
+
case H5VL_ATTR_EXISTS:
- HDfprintf(out, "H5VL_ATTR_EXISTS");
+ H5RS_acat(rs, "H5VL_ATTR_EXISTS");
break;
+
case H5VL_ATTR_ITER:
- HDfprintf(out, "H5VL_ATTR_ITER");
+ H5RS_acat(rs, "H5VL_ATTR_ITER");
break;
+
case H5VL_ATTR_RENAME:
- HDfprintf(out, "H5VL_ATTR_RENAME");
+ H5RS_acat(rs, "H5VL_ATTR_RENAME");
break;
+
default:
- HDfprintf(out, "%ld", (long)specific);
+ H5RS_asprintf_cat(rs, "%ld", (long)specific);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'B':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'B': /* H5VL_blob_specific_t */
+ {
H5VL_blob_specific_t specific = (H5VL_blob_specific_t)HDva_arg(ap, int);
switch (specific) {
case H5VL_BLOB_DELETE:
- HDfprintf(out, "H5VL_BLOB_DELETE");
+ H5RS_acat(rs, "H5VL_BLOB_DELETE");
break;
+
case H5VL_BLOB_GETSIZE:
- HDfprintf(out, "H5VL_BLOB_GETSIZE");
+ H5RS_acat(rs, "H5VL_BLOB_GETSIZE");
break;
+
case H5VL_BLOB_ISNULL:
- HDfprintf(out, "H5VL_BLOB_ISNULL");
+ H5RS_acat(rs, "H5VL_BLOB_ISNULL");
break;
+
case H5VL_BLOB_SETNULL:
- HDfprintf(out, "H5VL_BLOB_SETNULL");
+ H5RS_acat(rs, "H5VL_BLOB_SETNULL");
break;
+
default:
- HDfprintf(out, "%ld", (long)specific);
+ H5RS_asprintf_cat(rs, "%ld", (long)specific);
break;
} /* end switch */
- } /* end else */
- break;
-
- case 'C':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
- H5VL_class_value_t class_val =
- (H5VL_class_value_t)HDva_arg(ap, H5VL_class_value_t);
-
- if (H5_VOL_NATIVE == class_val)
- HDfprintf(out, "H5_VOL_NATIVE");
- else
- HDfprintf(out, "%ld", (long)class_val);
- } /* end else */
+ } /* end block */
break;
- case 'c':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'c': /* H5VL_dataset_get_t */
+ {
H5VL_dataset_get_t get = (H5VL_dataset_get_t)HDva_arg(ap, int);
switch (get) {
case H5VL_DATASET_GET_SPACE:
- HDfprintf(out, "H5VL_DATASET_GET_SPACE");
+ H5RS_acat(rs, "H5VL_DATASET_GET_SPACE");
break;
+
case H5VL_DATASET_GET_SPACE_STATUS:
- HDfprintf(out, "H5VL_DATASET_GET_SPACE_STATUS");
+ H5RS_acat(rs, "H5VL_DATASET_GET_SPACE_STATUS");
break;
+
case H5VL_DATASET_GET_TYPE:
- HDfprintf(out, "H5VL_DATASET_GET_TYPE");
+ H5RS_acat(rs, "H5VL_DATASET_GET_TYPE");
break;
+
case H5VL_DATASET_GET_DCPL:
- HDfprintf(out, "H5VL_DATASET_GET_DCPL");
+ H5RS_acat(rs, "H5VL_DATASET_GET_DCPL");
break;
+
case H5VL_DATASET_GET_DAPL:
- HDfprintf(out, "H5VL_DATASET_GET_DAPL");
+ H5RS_acat(rs, "H5VL_DATASET_GET_DAPL");
break;
+
case H5VL_DATASET_GET_STORAGE_SIZE:
- HDfprintf(out, "H5VL_DATASET_GET_STORAGE_SIZE");
+ H5RS_acat(rs, "H5VL_DATASET_GET_STORAGE_SIZE");
break;
+
default:
- HDfprintf(out, "%ld", (long)get);
+ H5RS_asprintf_cat(rs, "%ld", (long)get);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'd':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
+ case 'C': /* H5VL_class_value_t */
+ {
+ H5VL_class_value_t class_val =
+ (H5VL_class_value_t)HDva_arg(ap, H5VL_class_value_t);
+
+ if (H5_VOL_NATIVE == class_val)
+ H5RS_acat(rs, "H5_VOL_NATIVE");
else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ H5RS_asprintf_cat(rs, "%ld", (long)class_val);
+ } /* end block */
+ break;
+
+ case 'd': /* H5VL_dataset_specific_t */
+ {
H5VL_dataset_specific_t specific = (H5VL_dataset_specific_t)HDva_arg(ap, int);
switch (specific) {
case H5VL_DATASET_SET_EXTENT:
- HDfprintf(out, "H5VL_DATASET_SET_EXTENT");
+ H5RS_acat(rs, "H5VL_DATASET_SET_EXTENT");
break;
+
case H5VL_DATASET_FLUSH:
- HDfprintf(out, "H5VL_DATASET_FLUSH");
+ H5RS_acat(rs, "H5VL_DATASET_FLUSH");
break;
+
case H5VL_DATASET_REFRESH:
- HDfprintf(out, "H5VL_DATASET_REFRESH");
+ H5RS_acat(rs, "H5VL_DATASET_REFRESH");
break;
+
default:
- HDfprintf(out, "%ld", (long)specific);
+ H5RS_asprintf_cat(rs, "%ld", (long)specific);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'e':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'e': /* H5VL_datatype_get_t */
+ {
H5VL_datatype_get_t get = (H5VL_datatype_get_t)HDva_arg(ap, int);
switch (get) {
case H5VL_DATATYPE_GET_BINARY:
- HDfprintf(out, "H5VL_DATATYPE_GET_BINARY");
+ H5RS_acat(rs, "H5VL_DATATYPE_GET_BINARY");
break;
+
case H5VL_DATATYPE_GET_TCPL:
- HDfprintf(out, "H5VL_DATATYPE_GET_TCPL");
+ H5RS_acat(rs, "H5VL_DATATYPE_GET_TCPL");
break;
+
default:
- HDfprintf(out, "%ld", (long)get);
+ H5RS_asprintf_cat(rs, "%ld", (long)get);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'f':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'f': /* H5VL_datatype_specific_t */
+ {
H5VL_datatype_specific_t specific = (H5VL_datatype_specific_t)HDva_arg(ap, int);
switch (specific) {
case H5VL_DATATYPE_FLUSH:
- HDfprintf(out, "H5VL_DATATYPE_FLUSH");
+ H5RS_acat(rs, "H5VL_DATATYPE_FLUSH");
break;
+
case H5VL_DATATYPE_REFRESH:
- HDfprintf(out, "H5VL_DATATYPE_REFRESH");
+ H5RS_acat(rs, "H5VL_DATATYPE_REFRESH");
break;
+
default:
- HDfprintf(out, "%ld", (long)specific);
+ H5RS_asprintf_cat(rs, "%ld", (long)specific);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'g':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'g': /* H5VL_file_get_t */
+ {
H5VL_file_get_t get = (H5VL_file_get_t)HDva_arg(ap, int);
switch (get) {
case H5VL_FILE_GET_CONT_INFO:
- HDfprintf(out, "H5VL_FILE_GET_CONT_INFO");
+ H5RS_acat(rs, "H5VL_FILE_GET_CONT_INFO");
break;
+
case H5VL_FILE_GET_FAPL:
- HDfprintf(out, "H5VL_FILE_GET_FAPL");
+ H5RS_acat(rs, "H5VL_FILE_GET_FAPL");
break;
+
case H5VL_FILE_GET_FCPL:
- HDfprintf(out, "H5VL_FILE_GET_FCPL");
+ H5RS_acat(rs, "H5VL_FILE_GET_FCPL");
break;
+
case H5VL_FILE_GET_FILENO:
- HDfprintf(out, "H5VL_FILE_GET_FILENO");
+ H5RS_acat(rs, "H5VL_FILE_GET_FILENO");
break;
+
case H5VL_FILE_GET_INTENT:
- HDfprintf(out, "H5VL_FILE_GET_INTENT");
+ H5RS_acat(rs, "H5VL_FILE_GET_INTENT");
break;
+
case H5VL_FILE_GET_NAME:
- HDfprintf(out, "H5VL_FILE_GET_NAME");
+ H5RS_acat(rs, "H5VL_FILE_GET_NAME");
break;
+
case H5VL_FILE_GET_OBJ_COUNT:
- HDfprintf(out, "H5VL_FILE_GET_OBJ_COUNT");
+ H5RS_acat(rs, "H5VL_FILE_GET_OBJ_COUNT");
break;
+
case H5VL_FILE_GET_OBJ_IDS:
- HDfprintf(out, "H5VL_FILE_GET_OBJ_IDS");
+ H5RS_acat(rs, "H5VL_FILE_GET_OBJ_IDS");
break;
+
default:
- HDfprintf(out, "%ld", (long)get);
+ H5RS_asprintf_cat(rs, "%ld", (long)get);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'h':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'h': /* H5VL_file_specific_t */
+ {
H5VL_file_specific_t specific = (H5VL_file_specific_t)HDva_arg(ap, int);
switch (specific) {
case H5VL_FILE_FLUSH:
- HDfprintf(out, "H5VL_FILE_FLUSH");
+ H5RS_acat(rs, "H5VL_FILE_FLUSH");
break;
+
case H5VL_FILE_REOPEN:
- HDfprintf(out, "H5VL_FILE_REOPEN");
+ H5RS_acat(rs, "H5VL_FILE_REOPEN");
break;
+
case H5VL_FILE_MOUNT:
- HDfprintf(out, "H5VL_FILE_MOUNT");
+ H5RS_acat(rs, "H5VL_FILE_MOUNT");
break;
+
case H5VL_FILE_UNMOUNT:
- HDfprintf(out, "H5VL_FILE_UNMOUNT");
+ H5RS_acat(rs, "H5VL_FILE_UNMOUNT");
break;
+
case H5VL_FILE_IS_ACCESSIBLE:
- HDfprintf(out, "H5VL_FILE_IS_ACCESSIBLE");
+ H5RS_acat(rs, "H5VL_FILE_IS_ACCESSIBLE");
break;
+
case H5VL_FILE_DELETE:
- HDfprintf(out, "H5VL_FILE_DELETE");
+ H5RS_acat(rs, "H5VL_FILE_DELETE");
break;
+
case H5VL_FILE_IS_EQUAL:
- HDfprintf(out, "H5VL_FILE_IS_EQUAL");
+ H5RS_acat(rs, "H5VL_FILE_IS_EQUAL");
break;
+
default:
- HDfprintf(out, "%ld", (long)specific);
+ H5RS_asprintf_cat(rs, "%ld", (long)specific);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'i':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'i': /* H5VL_group_get_t */
+ {
H5VL_group_get_t get = (H5VL_group_get_t)HDva_arg(ap, int);
switch (get) {
case H5VL_GROUP_GET_GCPL:
- HDfprintf(out, "H5VL_GROUP_GET_GCPL");
+ H5RS_acat(rs, "H5VL_GROUP_GET_GCPL");
break;
+
case H5VL_GROUP_GET_INFO:
- HDfprintf(out, "H5VL_GROUP_GET_INFO");
+ H5RS_acat(rs, "H5VL_GROUP_GET_INFO");
break;
+
default:
- HDfprintf(out, "%ld", (long)get);
+ H5RS_asprintf_cat(rs, "%ld", (long)get);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'j':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'j': /* H5VL_group_specific_t */
+ {
H5VL_group_specific_t specific = (H5VL_group_specific_t)HDva_arg(ap, int);
switch (specific) {
case H5VL_GROUP_FLUSH:
- HDfprintf(out, "H5VL_GROUP_FLUSH");
+ H5RS_acat(rs, "H5VL_GROUP_FLUSH");
break;
+
case H5VL_GROUP_REFRESH:
- HDfprintf(out, "H5VL_GROUP_REFRESH");
+ H5RS_acat(rs, "H5VL_GROUP_REFRESH");
break;
+
default:
- HDfprintf(out, "%ld", (long)specific);
+ H5RS_asprintf_cat(rs, "%ld", (long)specific);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'k':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'k': /* H5VL_link_create_type_t */
+ {
H5VL_link_create_type_t create = (H5VL_link_create_type_t)HDva_arg(ap, int);
switch (create) {
case H5VL_LINK_CREATE_HARD:
- HDfprintf(out, "H5VL_LINK_CREATE_HARD");
+ H5RS_acat(rs, "H5VL_LINK_CREATE_HARD");
break;
+
case H5VL_LINK_CREATE_SOFT:
- HDfprintf(out, "H5VL_LINK_CREATE_SOFT");
+ H5RS_acat(rs, "H5VL_LINK_CREATE_SOFT");
break;
+
case H5VL_LINK_CREATE_UD:
- HDfprintf(out, "H5VL_LINK_CREATE_UD");
+ H5RS_acat(rs, "H5VL_LINK_CREATE_UD");
break;
+
default:
- HDfprintf(out, "%ld", (long)create);
+ H5RS_asprintf_cat(rs, "%ld", (long)create);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'l':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'l': /* H5VL_link_get_t */
+ {
H5VL_link_get_t get = (H5VL_link_get_t)HDva_arg(ap, int);
switch (get) {
case H5VL_LINK_GET_INFO:
- HDfprintf(out, "H5VL_LINK_GET_INFO");
+ H5RS_acat(rs, "H5VL_LINK_GET_INFO");
break;
+
case H5VL_LINK_GET_NAME:
- HDfprintf(out, "H5VL_LINK_GET_NAME");
+ H5RS_acat(rs, "H5VL_LINK_GET_NAME");
break;
+
case H5VL_LINK_GET_VAL:
- HDfprintf(out, "H5VL_LINK_GET_VAL");
+ H5RS_acat(rs, "H5VL_LINK_GET_VAL");
break;
+
default:
- HDfprintf(out, "%ld", (long)get);
+ H5RS_asprintf_cat(rs, "%ld", (long)get);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'L':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'L': /* H5VL_get_conn_lvl_t */
+ {
H5VL_get_conn_lvl_t get = (H5VL_get_conn_lvl_t)HDva_arg(ap, int);
switch (get) {
case H5VL_GET_CONN_LVL_CURR:
- HDfprintf(out, "H5VL_GET_CONN_LVL_CURR");
+ H5RS_acat(rs, "H5VL_GET_CONN_LVL_CURR");
break;
+
case H5VL_GET_CONN_LVL_TERM:
- HDfprintf(out, "H5VL_GET_CONN_LVL_TERM");
+ H5RS_acat(rs, "H5VL_GET_CONN_LVL_TERM");
break;
+
default:
- HDfprintf(out, "%ld", (long)get);
+ H5RS_asprintf_cat(rs, "%ld", (long)get);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'm':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'm': /* H5VL_link_specific_t */
+ {
H5VL_link_specific_t specific = (H5VL_link_specific_t)HDva_arg(ap, int);
switch (specific) {
case H5VL_LINK_DELETE:
- HDfprintf(out, "H5VL_LINK_DELETE");
+ H5RS_acat(rs, "H5VL_LINK_DELETE");
break;
+
case H5VL_LINK_EXISTS:
- HDfprintf(out, "H5VL_LINK_EXISTS");
+ H5RS_acat(rs, "H5VL_LINK_EXISTS");
break;
+
case H5VL_LINK_ITER:
- HDfprintf(out, "H5VL_LINK_ITER");
+ H5RS_acat(rs, "H5VL_LINK_ITER");
break;
+
default:
- HDfprintf(out, "%ld", (long)specific);
+ H5RS_asprintf_cat(rs, "%ld", (long)specific);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'n':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'n': /* H5VL_object_get_t */
+ {
H5VL_object_get_t get = (H5VL_object_get_t)HDva_arg(ap, int);
switch (get) {
case H5VL_OBJECT_GET_FILE:
- HDfprintf(out, "H5VL_OBJECT_GET_FILE");
+ H5RS_acat(rs, "H5VL_OBJECT_GET_FILE");
break;
+
case H5VL_OBJECT_GET_NAME:
- HDfprintf(out, "H5VL_OBJECT_GET_NAME");
+ H5RS_acat(rs, "H5VL_OBJECT_GET_NAME");
break;
+
case H5VL_OBJECT_GET_TYPE:
- HDfprintf(out, "H5VL_OBJECT_GET_TYPE");
+ H5RS_acat(rs, "H5VL_OBJECT_GET_TYPE");
break;
+
case H5VL_OBJECT_GET_INFO:
- HDfprintf(out, "H5VL_OBJECT_GET_INFO");
+ H5RS_acat(rs, "H5VL_OBJECT_GET_INFO");
break;
+
default:
- HDfprintf(out, "%ld", (long)get);
+ H5RS_asprintf_cat(rs, "%ld", (long)get);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'o':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'N': /* H5VL_request_notify_t */
+ {
+ H5VL_request_notify_t vlrnot =
+ (H5VL_request_notify_t)HDva_arg(ap, H5VL_request_notify_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)vlrnot);
+ } /* end block */
+ break;
+
+ case 'o': /* H5VL_object_specific_t */
+ {
H5VL_object_specific_t specific = (H5VL_object_specific_t)HDva_arg(ap, int);
switch (specific) {
case H5VL_OBJECT_CHANGE_REF_COUNT:
- HDfprintf(out, "H5VL_OBJECT_CHANGE_REF_COUNT");
+ H5RS_acat(rs, "H5VL_OBJECT_CHANGE_REF_COUNT");
break;
+
case H5VL_OBJECT_EXISTS:
- HDfprintf(out, "H5VL_OBJECT_EXISTS");
+ H5RS_acat(rs, "H5VL_OBJECT_EXISTS");
break;
+
case H5VL_OBJECT_LOOKUP:
- HDfprintf(out, "H5VL_OBJECT_LOOKUP");
+ H5RS_acat(rs, "H5VL_OBJECT_LOOKUP");
break;
+
case H5VL_OBJECT_VISIT:
- HDfprintf(out, "H5VL_OBJECT_VISIT");
+ H5RS_acat(rs, "H5VL_OBJECT_VISIT");
break;
+
case H5VL_OBJECT_FLUSH:
- HDfprintf(out, "H5VL_OBJECT_FLUSH");
+ H5RS_acat(rs, "H5VL_OBJECT_FLUSH");
break;
+
case H5VL_OBJECT_REFRESH:
- HDfprintf(out, "H5VL_OBJECT_REFRESH");
+ H5RS_acat(rs, "H5VL_OBJECT_REFRESH");
break;
+
default:
- HDfprintf(out, "%ld", (long)specific);
+ H5RS_asprintf_cat(rs, "%ld", (long)specific);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'r':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'r': /* H5VL_request_specific_t */
+ {
H5VL_request_specific_t specific = (H5VL_request_specific_t)HDva_arg(ap, int);
switch (specific) {
case H5VL_REQUEST_WAITANY:
- HDfprintf(out, "H5VL_REQUEST_WAITANY");
+ H5RS_acat(rs, "H5VL_REQUEST_WAITANY");
break;
+
case H5VL_REQUEST_WAITSOME:
- HDfprintf(out, "H5VL_REQUEST_WAITSOME");
+ H5RS_acat(rs, "H5VL_REQUEST_WAITSOME");
break;
+
case H5VL_REQUEST_WAITALL:
- HDfprintf(out, "H5VL_REQUEST_WAITALL");
+ H5RS_acat(rs, "H5VL_REQUEST_WAITALL");
break;
+
default:
- HDfprintf(out, "%ld", (long)specific);
+ H5RS_asprintf_cat(rs, "%ld", (long)specific);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 's':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 's': /* H5VL_attr_optional_t */
+ {
H5VL_attr_optional_t optional = (H5VL_attr_optional_t)HDva_arg(ap, int);
switch (optional) {
#ifndef H5_NO_DEPRECATED_SYMBOLS
case H5VL_NATIVE_ATTR_ITERATE_OLD:
- HDfprintf(out, "H5VL_NATIVE_ATTR_ITERATE_OLD");
+ H5RS_acat(rs, "H5VL_NATIVE_ATTR_ITERATE_OLD");
break;
#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
default:
- HDfprintf(out, "%ld", (long)optional);
+ H5RS_asprintf_cat(rs, "%ld", (long)optional);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'S':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'S': /* H5VL_subclass_t */
+ {
H5VL_subclass_t subclass = (H5VL_subclass_t)HDva_arg(ap, int);
switch (subclass) {
case H5VL_SUBCLS_NONE:
- HDfprintf(out, "H5VL_SUBCLS_NONE");
+ H5RS_acat(rs, "H5VL_SUBCLS_NONE");
break;
+
case H5VL_SUBCLS_INFO:
- HDfprintf(out, "H5VL_SUBCLS_INFO");
+ H5RS_acat(rs, "H5VL_SUBCLS_INFO");
break;
+
case H5VL_SUBCLS_WRAP:
- HDfprintf(out, "H5VL_SUBCLS_WRAP");
+ H5RS_acat(rs, "H5VL_SUBCLS_WRAP");
break;
+
case H5VL_SUBCLS_ATTR:
- HDfprintf(out, "H5VL_SUBCLS_ATTR");
+ H5RS_acat(rs, "H5VL_SUBCLS_ATTR");
break;
+
case H5VL_SUBCLS_DATASET:
- HDfprintf(out, "H5VL_SUBCLS_DATASET");
+ H5RS_acat(rs, "H5VL_SUBCLS_DATASET");
break;
+
case H5VL_SUBCLS_DATATYPE:
- HDfprintf(out, "H5VL_SUBCLS_DATATYPE");
+ H5RS_acat(rs, "H5VL_SUBCLS_DATATYPE");
break;
+
case H5VL_SUBCLS_FILE:
- HDfprintf(out, "H5VL_SUBCLS_FILE");
+ H5RS_acat(rs, "H5VL_SUBCLS_FILE");
break;
+
case H5VL_SUBCLS_GROUP:
- HDfprintf(out, "H5VL_SUBCLS_GROUP");
+ H5RS_acat(rs, "H5VL_SUBCLS_GROUP");
break;
+
case H5VL_SUBCLS_LINK:
- HDfprintf(out, "H5VL_SUBCLS_LINK");
+ H5RS_acat(rs, "H5VL_SUBCLS_LINK");
break;
+
case H5VL_SUBCLS_OBJECT:
- HDfprintf(out, "H5VL_SUBCLS_OBJECT");
+ H5RS_acat(rs, "H5VL_SUBCLS_OBJECT");
break;
+
case H5VL_SUBCLS_REQUEST:
- HDfprintf(out, "H5VL_SUBCLS_REQUEST");
+ H5RS_acat(rs, "H5VL_SUBCLS_REQUEST");
break;
+
case H5VL_SUBCLS_BLOB:
- HDfprintf(out, "H5VL_SUBCLS_BLOB");
+ H5RS_acat(rs, "H5VL_SUBCLS_BLOB");
break;
+
case H5VL_SUBCLS_TOKEN:
- HDfprintf(out, "H5VL_SUBCLS_TOKEN");
+ H5RS_acat(rs, "H5VL_SUBCLS_TOKEN");
break;
+
default:
- HDfprintf(out, "%ld", (long)subclass);
+ H5RS_asprintf_cat(rs, "%ld", (long)subclass);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 't':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 't': /* H5VL_dataset_optional_t */
+ {
H5VL_dataset_optional_t optional = (H5VL_dataset_optional_t)HDva_arg(ap, int);
switch (optional) {
case H5VL_NATIVE_DATASET_FORMAT_CONVERT:
- HDfprintf(out, "H5VL_NATIVE_DATASET_FORMAT_CONVERT");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_FORMAT_CONVERT");
break;
+
case H5VL_NATIVE_DATASET_GET_CHUNK_INDEX_TYPE:
- HDfprintf(out, "H5VL_NATIVE_DATASET_GET_CHUNK_INDEX_TYPE");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_GET_CHUNK_INDEX_TYPE");
break;
+
case H5VL_NATIVE_DATASET_GET_CHUNK_STORAGE_SIZE:
- HDfprintf(out, "H5VL_NATIVE_DATASET_GET_CHUNK_STORAGE_SIZE");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_GET_CHUNK_STORAGE_SIZE");
break;
+
case H5VL_NATIVE_DATASET_GET_NUM_CHUNKS:
- HDfprintf(out, "H5VL_NATIVE_DATASET_GET_NUM_CHUNKS");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_GET_NUM_CHUNKS");
break;
+
case H5VL_NATIVE_DATASET_GET_CHUNK_INFO_BY_IDX:
- HDfprintf(out, "H5VL_NATIVE_DATASET_GET_CHUNK_INFO_BY_IDX");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_GET_CHUNK_INFO_BY_IDX");
break;
+
case H5VL_NATIVE_DATASET_GET_CHUNK_INFO_BY_COORD:
- HDfprintf(out, "H5VL_NATIVE_DATASET_GET_CHUNK_INFO_BY_COORD");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_GET_CHUNK_INFO_BY_COORD");
break;
+
case H5VL_NATIVE_DATASET_CHUNK_READ:
- HDfprintf(out, "H5VL_NATIVE_DATASET_CHUNK_READ");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_CHUNK_READ");
break;
+
case H5VL_NATIVE_DATASET_CHUNK_WRITE:
- HDfprintf(out, "H5VL_NATIVE_DATASET_CHUNK_WRITE");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_CHUNK_WRITE");
break;
+
case H5VL_NATIVE_DATASET_GET_VLEN_BUF_SIZE:
- HDfprintf(out, "H5VL_NATIVE_DATASET_GET_VLEN_BUF_SIZE");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_GET_VLEN_BUF_SIZE");
break;
+
case H5VL_NATIVE_DATASET_GET_OFFSET:
- HDfprintf(out, "H5VL_NATIVE_DATASET_GET_OFFSET");
+ H5RS_acat(rs, "H5VL_NATIVE_DATASET_GET_OFFSET");
break;
+
default:
- HDfprintf(out, "%ld", (long)optional);
+ H5RS_asprintf_cat(rs, "%ld", (long)optional);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'u':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'u': /* H5VL_datatype_optional_t */
+ {
H5VL_datatype_optional_t optional = (H5VL_datatype_optional_t)HDva_arg(ap, int);
- switch (optional) {
- default:
- HDfprintf(out, "%ld", (long)optional);
- break;
- } /* end switch */
- } /* end else */
+ H5RS_asprintf_cat(rs, "%ld", (long)optional);
+ } /* end block */
break;
- case 'v':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'v': /* H5VL_file_optional_t */
+ {
H5VL_file_optional_t optional = (H5VL_file_optional_t)HDva_arg(ap, int);
switch (optional) {
case H5VL_NATIVE_FILE_CLEAR_ELINK_CACHE:
- HDfprintf(out, "H5VL_NATIVE_FILE_CLEAR_ELINK_CACHE");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_CLEAR_ELINK_CACHE");
break;
+
case H5VL_NATIVE_FILE_GET_FILE_IMAGE:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_FILE_IMAGE");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_FILE_IMAGE");
break;
+
case H5VL_NATIVE_FILE_GET_FREE_SECTIONS:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_FREE_SECTIONS");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_FREE_SECTIONS");
break;
+
case H5VL_NATIVE_FILE_GET_FREE_SPACE:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_FREE_SPACE");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_FREE_SPACE");
break;
+
case H5VL_NATIVE_FILE_GET_INFO:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_INFO");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_INFO");
break;
+
case H5VL_NATIVE_FILE_GET_MDC_CONF:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_MDC_CONF");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_MDC_CONF");
break;
+
case H5VL_NATIVE_FILE_GET_MDC_HR:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_MDC_HR");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_MDC_HR");
break;
+
case H5VL_NATIVE_FILE_GET_MDC_SIZE:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_MDC_SIZE");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_MDC_SIZE");
break;
+
case H5VL_NATIVE_FILE_GET_SIZE:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_SIZE");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_SIZE");
break;
+
case H5VL_NATIVE_FILE_GET_VFD_HANDLE:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_VFD_HANDLE");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_VFD_HANDLE");
break;
+
case H5VL_NATIVE_FILE_RESET_MDC_HIT_RATE:
- HDfprintf(out, "H5VL_NATIVE_FILE_RESET_MDC_HIT_RATE");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_RESET_MDC_HIT_RATE");
break;
+
case H5VL_NATIVE_FILE_SET_MDC_CONFIG:
- HDfprintf(out, "H5VL_NATIVE_FILE_SET_MDC_CONFIG");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_SET_MDC_CONFIG");
break;
+
case H5VL_NATIVE_FILE_GET_METADATA_READ_RETRY_INFO:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_METADATA_READ_RETRY_INFO");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_METADATA_READ_RETRY_INFO");
break;
+
case H5VL_NATIVE_FILE_START_SWMR_WRITE:
- HDfprintf(out, "H5VL_NATIVE_FILE_START_SWMR_WRITE");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_START_SWMR_WRITE");
break;
+
case H5VL_NATIVE_FILE_START_MDC_LOGGING:
- HDfprintf(out, "H5VL_NATIVE_FILE_START_MDC_LOGGING");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_START_MDC_LOGGING");
break;
+
case H5VL_NATIVE_FILE_STOP_MDC_LOGGING:
- HDfprintf(out, "H5VL_NATIVE_FILE_STOP_MDC_LOGGING");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_STOP_MDC_LOGGING");
break;
+
case H5VL_NATIVE_FILE_GET_MDC_LOGGING_STATUS:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_MDC_LOGGING_STATUS");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_MDC_LOGGING_STATUS");
break;
+
case H5VL_NATIVE_FILE_FORMAT_CONVERT:
- HDfprintf(out, "H5VL_NATIVE_FILE_FORMAT_CONVERT");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_FORMAT_CONVERT");
break;
+
case H5VL_NATIVE_FILE_RESET_PAGE_BUFFERING_STATS:
- HDfprintf(out, "H5VL_NATIVE_FILE_RESET_PAGE_BUFFERING_STATS");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_RESET_PAGE_BUFFERING_STATS");
break;
+
case H5VL_NATIVE_FILE_GET_PAGE_BUFFERING_STATS:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_PAGE_BUFFERING_STATS");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_PAGE_BUFFERING_STATS");
break;
+
case H5VL_NATIVE_FILE_GET_MDC_IMAGE_INFO:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_MDC_IMAGE_INFO");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_MDC_IMAGE_INFO");
break;
+
case H5VL_NATIVE_FILE_GET_EOA:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_EOA");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_EOA");
break;
+
case H5VL_NATIVE_FILE_INCR_FILESIZE:
- HDfprintf(out, "H5VL_NATIVE_FILE_INCR_FILESIZE");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_INCR_FILESIZE");
break;
+
case H5VL_NATIVE_FILE_SET_LIBVER_BOUNDS:
- HDfprintf(out, "H5VL_NATIVE_FILE_SET_LIBVER_BOUNDS");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_SET_LIBVER_BOUNDS");
break;
+
case H5VL_NATIVE_FILE_GET_MIN_DSET_OHDR_FLAG:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_MIN_DSET_OHDR_FLAG");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_MIN_DSET_OHDR_FLAG");
break;
+
case H5VL_NATIVE_FILE_SET_MIN_DSET_OHDR_FLAG:
- HDfprintf(out, "H5VL_NATIVE_FILE_SET_MIN_DSET_OHDR_FLAG");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_SET_MIN_DSET_OHDR_FLAG");
break;
+
case H5VL_NATIVE_FILE_GET_MPI_ATOMICITY:
- HDfprintf(out, "H5VL_NATIVE_FILE_GET_MPI_ATOMICITY");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_GET_MPI_ATOMICITY");
break;
+
case H5VL_NATIVE_FILE_SET_MPI_ATOMICITY:
- HDfprintf(out, "H5VL_NATIVE_FILE_SET_MPI_ATOMICITY");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_SET_MPI_ATOMICITY");
break;
+
case H5VL_NATIVE_FILE_POST_OPEN:
- HDfprintf(out, "H5VL_NATIVE_FILE_POST_OPEN");
+ H5RS_acat(rs, "H5VL_NATIVE_FILE_POST_OPEN");
break;
+
default:
- HDfprintf(out, "%ld", (long)optional);
+ H5RS_asprintf_cat(rs, "%ld", (long)optional);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'w':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'w': /* H5VL_group_optional_t */
+ {
H5VL_group_optional_t optional = (H5VL_group_optional_t)HDva_arg(ap, int);
switch (optional) {
#ifndef H5_NO_DEPRECATED_SYMBOLS
case H5VL_NATIVE_GROUP_ITERATE_OLD:
- HDfprintf(out, "H5VL_NATIVE_GROUP_ITERATE_OLD");
+ H5RS_acat(rs, "H5VL_NATIVE_GROUP_ITERATE_OLD");
break;
+
case H5VL_NATIVE_GROUP_GET_OBJINFO:
- HDfprintf(out, "H5VL_NATIVE_GROUP_GET_OBJINFO");
+ H5RS_acat(rs, "H5VL_NATIVE_GROUP_GET_OBJINFO");
break;
#endif /* H5_NO_DEPRECATED_SYMBOLS */
+
default:
- HDfprintf(out, "%ld", (long)optional);
+ H5RS_asprintf_cat(rs, "%ld", (long)optional);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'x':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'x': /* H5VL_link_optional_t */
+ {
H5VL_link_optional_t optional = (H5VL_link_optional_t)HDva_arg(ap, int);
- switch (optional) {
- default:
- HDfprintf(out, "%ld", (long)optional);
- break;
- } /* end switch */
- } /* end else */
+ H5RS_asprintf_cat(rs, "%ld", (long)optional);
+ } /* end block */
break;
- case 'y':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'y': /* H5VL_object_optional_t */
+ {
H5VL_object_optional_t optional = (H5VL_object_optional_t)HDva_arg(ap, int);
switch (optional) {
case H5VL_NATIVE_OBJECT_GET_COMMENT:
- HDfprintf(out, "H5VL_NATIVE_OBJECT_GET_COMMENT");
+ H5RS_acat(rs, "H5VL_NATIVE_OBJECT_GET_COMMENT");
break;
+
case H5VL_NATIVE_OBJECT_SET_COMMENT:
- HDfprintf(out, "H5VL_NATIVE_OBJECT_SET_COMMENT");
+ H5RS_acat(rs, "H5VL_NATIVE_OBJECT_SET_COMMENT");
break;
+
case H5VL_NATIVE_OBJECT_DISABLE_MDC_FLUSHES:
- HDfprintf(out, "H5VL_NATIVE_OBJECT_DISABLE_MDC_FLUSHES");
+ H5RS_acat(rs, "H5VL_NATIVE_OBJECT_DISABLE_MDC_FLUSHES");
break;
+
case H5VL_NATIVE_OBJECT_ENABLE_MDC_FLUSHES:
- HDfprintf(out, "H5VL_NATIVE_OBJECT_ENABLE_MDC_FLUSHES");
+ H5RS_acat(rs, "H5VL_NATIVE_OBJECT_ENABLE_MDC_FLUSHES");
break;
+
case H5VL_NATIVE_OBJECT_ARE_MDC_FLUSHES_DISABLED:
- HDfprintf(out, "H5VL_NATIVE_OBJECT_ARE_MDC_FLUSHES_DISABLED");
+ H5RS_acat(rs, "H5VL_NATIVE_OBJECT_ARE_MDC_FLUSHES_DISABLED");
break;
+
case H5VL_NATIVE_OBJECT_GET_NATIVE_INFO:
- HDfprintf(out, "H5VL_NATIVE_OBJECT_GET_NATIVE_INFO");
+ H5RS_acat(rs, "H5VL_NATIVE_OBJECT_GET_NATIVE_INFO");
break;
+
default:
- HDfprintf(out, "%ld", (long)optional);
+ H5RS_asprintf_cat(rs, "%ld", (long)optional);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'z':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'z': /* H5VL_request_optional_t */
+ {
H5VL_request_optional_t optional = (H5VL_request_optional_t)HDva_arg(ap, int);
- switch (optional) {
- default:
- HDfprintf(out, "%ld", (long)optional);
- break;
- } /* end switch */
- } /* end else */
+ H5RS_asprintf_cat(rs, "%ld", (long)optional);
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(Z%c)", type[1]);
- goto error;
- } /* end switch */
- break;
-
- case 'x':
- if (ptr) {
- if (vp) {
- HDfprintf(out, "0x%p", vp);
- if (asize_idx >= 0 && asize[asize_idx] >= 0) {
- void **p = (void **)vp;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(Z%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
- HDfprintf(out, " {");
- for (i = 0; i < asize[asize_idx]; i++) {
- if (p[i])
- HDfprintf(out, "%s0x%p", (i ? ", " : ""), p[i]);
- else
- HDfprintf(out, "%sNULL", (i ? ", " : ""));
- } /* end for */
- HDfprintf(out, "}");
- } /* end if */
- } /* end if */
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'x': { /* void / va_list */
vp = HDva_arg(ap, void *);
if (vp)
- HDfprintf(out, "0x%p", vp);
+ H5RS_asprintf_cat(rs, "%p", vp);
else
- HDfprintf(out, "NULL");
- } /* end else */
+ H5RS_acat(rs, "NULL");
+ } /* end block */
break;
- case 'z':
- if (ptr) {
- if (vp) {
- HDfprintf(out, "0x%p", vp);
- if (asize_idx >= 0 && asize[asize_idx] >= 0) {
- size_t *p = (size_t *)vp;
-
- HDfprintf(out, " {");
- for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%zu", (i ? ", " : ""), p[i]);
- HDfprintf(out, "}");
- } /* end if */
- } /* end if */
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'z': {
size_t size = HDva_arg(ap, size_t);
- HDfprintf(out, "%zu", size);
+ H5RS_asprintf_cat(rs, "%zu", size);
asize[argno] = (hssize_t)size;
- } /* end else */
+ } /* end block */
break;
- case 'Z':
- switch (type[1]) {
- case 'a':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'Z':
+ switch (type[1]) {
+ case 'a': /* H5Z_SO_scale_type_t */
+ {
H5Z_SO_scale_type_t scale_type = (H5Z_SO_scale_type_t)HDva_arg(ap, int);
switch (scale_type) {
case H5Z_SO_FLOAT_DSCALE:
- HDfprintf(out, "H5Z_SO_FLOAT_DSCALE");
+ H5RS_acat(rs, "H5Z_SO_FLOAT_DSCALE");
break;
case H5Z_SO_FLOAT_ESCALE:
- HDfprintf(out, "H5Z_SO_FLOAT_ESCALE");
+ H5RS_acat(rs, "H5Z_SO_FLOAT_ESCALE");
break;
case H5Z_SO_INT:
- HDfprintf(out, "H5Z_SO_INT");
+ H5RS_acat(rs, "H5Z_SO_INT");
break;
default:
- HDfprintf(out, "%ld", (long)scale_type);
+ H5RS_asprintf_cat(rs, "%ld", (long)scale_type);
break;
} /* end switch */
- } /* end else */
+ } /* end block */
break;
- case 'c':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'c': /* H5Z_class2_t */
+ {
H5Z_class2_t *filter = HDva_arg(ap, H5Z_class2_t *);
- HDfprintf(out, "0x%p", (void *)filter);
- } /* end else */
+ H5RS_asprintf_cat(rs, "%p", (void *)filter);
+ } /* end block */
break;
- case 'e':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'e': /* H5Z_EDC_t */
+ {
H5Z_EDC_t edc = (H5Z_EDC_t)HDva_arg(ap, int);
if (H5Z_DISABLE_EDC == edc)
- HDfprintf(out, "H5Z_DISABLE_EDC");
+ H5RS_acat(rs, "H5Z_DISABLE_EDC");
else if (H5Z_ENABLE_EDC == edc)
- HDfprintf(out, "H5Z_ENABLE_EDC");
+ H5RS_acat(rs, "H5Z_ENABLE_EDC");
else
- HDfprintf(out, "%ld", (long)edc);
- } /* end else */
+ H5RS_asprintf_cat(rs, "%ld", (long)edc);
+ } /* end block */
break;
- case 'f':
- if (ptr) {
- if (vp)
- HDfprintf(out, "0x%p", vp);
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ case 'f': /* H5Z_filter_t */
+ {
H5Z_filter_t id = HDva_arg(ap, H5Z_filter_t);
- if (H5Z_FILTER_DEFLATE == id)
- HDfprintf(out, "H5Z_FILTER_DEFLATE");
+ if (H5Z_FILTER_NONE == id)
+ H5RS_acat(rs, "H5Z_FILTER_NONE");
+ else if (H5Z_FILTER_DEFLATE == id)
+ H5RS_acat(rs, "H5Z_FILTER_DEFLATE");
+ else if (H5Z_FILTER_SHUFFLE == id)
+ H5RS_acat(rs, "H5Z_FILTER_SHUFFLE");
+ else if (H5Z_FILTER_FLETCHER32 == id)
+ H5RS_acat(rs, "H5Z_FILTER_FLETCHER32");
+ else if (H5Z_FILTER_SZIP == id)
+ H5RS_acat(rs, "H5Z_FILTER_SZIP");
+ else if (H5Z_FILTER_NBIT == id)
+ H5RS_acat(rs, "H5Z_FILTER_NBIT");
+ else if (H5Z_FILTER_SCALEOFFSET == id)
+ H5RS_acat(rs, "H5Z_FILTER_SCALEOFFSET");
else
- HDfprintf(out, "%ld", (long)id);
- } /* end else */
- break;
-
- case 's':
- if (ptr) {
- if (vp) {
- HDfprintf(out, "0x%p", vp);
- if (asize_idx >= 0 && asize[asize_idx] >= 0) {
- ssize_t *p = (ssize_t *)vp;
-
- HDfprintf(out, " {");
- for (i = 0; i < asize[asize_idx]; i++)
- HDfprintf(out, "%s%zd", (i ? ", " : ""), p[i]);
- HDfprintf(out, "}");
- } /* end if */
- } /* end if */
- else
- HDfprintf(out, "NULL");
- } /* end if */
- else {
+ H5RS_asprintf_cat(rs, "%ld", (long)id);
+ } /* end block */
+ break;
+
+ case 'F': /* H5Z_filter_func_t */
+ {
+ H5Z_filter_func_t ffunc = (H5Z_filter_func_t)HDva_arg(ap, H5Z_filter_func_t);
+
+ H5RS_asprintf_cat(rs, "%p", (void *)(uintptr_t)ffunc);
+ } /* end block */
+ break;
+
+ case 's': {
ssize_t ssize = HDva_arg(ap, ssize_t);
- HDfprintf(out, "%zd", ssize);
+ H5RS_asprintf_cat(rs, "%zd", ssize);
asize[argno] = (hssize_t)ssize;
- } /* end else */
+ } /* end block */
break;
- default:
- HDfprintf(out, "BADTYPE(Z%c)", type[1]);
- goto error;
- } /* end switch */
- break;
+ default:
+ H5RS_asprintf_cat(rs, "BADTYPE(Z%c)", type[1]);
+ goto error;
+ } /* end switch */
+ break;
+
+ case '#':
+ H5RS_acat(rs, "Unsupported type slipped through!");
+ break;
- default:
- if (HDisupper(type[0]))
- HDfprintf(out, "BADTYPE(%c%c)", type[0], type[1]);
- else
- HDfprintf(out, "BADTYPE(%c)", type[0]);
- goto error;
- } /* end switch */
- } /* end for */
+ case '!':
+ H5RS_acat(rs, "Unknown type slipped through!");
+ break;
+
+ default:
+ if (HDisupper(type[0]))
+ H5RS_asprintf_cat(rs, "BADTYPE(%c%c)", type[0], type[1]);
+ else
+ H5RS_asprintf_cat(rs, "BADTYPE(%c)", type[0]);
+ goto error;
+ } /* end switch */
+ } /* end else */
+ } /* end for */
+
+ return SUCCEED;
+error:
+ return FAIL;
+} /* end H5_trace_args() */
+
+/*-------------------------------------------------------------------------
+ * Function: H5_trace
+ *
+ * Purpose: This function is called whenever an API function is called
+ * and tracing is turned on. If RETURNING is non-zero then
+ * the caller is about to return and RETURNING points to the
+ * time for the corresponding function call event. Otherwise
+ * we print the function name and the arguments.
+ *
+ * The TYPE argument is a string which gives the type of each of
+ * the following argument pairs. Each type is zero or more
+ * asterisks (one for each level of indirection, although some
+ * types have one level of indirection already implied) followed
+ * by either one letter (lower case) or two letters (first one
+ * uppercase).
+ *
+ * The variable argument list consists of pairs of values. Each
+ * pair is a string which is the formal argument name in the
+ * calling function, followed by the argument value. The type
+ * of the argument value is given by the TYPE string.
+ *
+ * Note: The TYPE string is meant to be terse and is generated by a
+ * separate perl script.
+ *
+ * WARNING: DO NOT CALL ANY HDF5 FUNCTION THAT CALLS FUNC_ENTER(). DOING
+ * SO MAY CAUSE H5_trace() TO BE INVOKED RECURSIVELY OR MAY
+ * CAUSE LIBRARY INITIALIZATIONS THAT ARE NOT DESIRED.
+ *
+ * Return: Execution time for an API call
+ *
+ * Programmer: Robb Matzke
+ * Tuesday, June 16, 1998
+ *
+ *-------------------------------------------------------------------------
+ */
+double
+H5_trace(const double *returning, const char *func, const char *type, ...)
+{
+ va_list ap;
+ H5RS_str_t * rs = NULL;
+ hssize_t i;
+ FILE * out = H5_debug_g.trace;
+ static hbool_t is_first_invocation = TRUE;
+ H5_timer_t function_timer;
+ H5_timevals_t function_times;
+ static H5_timer_t running_timer;
+ H5_timevals_t running_times;
+ static int current_depth = 0;
+ static int last_call_depth = 0;
+
+ /* FUNC_ENTER() should not be called */
+
+ if (!out)
+ return (double)0.0F; /*tracing is off*/
+
+ if (H5_debug_g.ttop) {
+ if (returning) {
+ if (current_depth > 1) {
+ --current_depth;
+ return (double)0.0F;
+ } /* end if */
+ } /* end if */
+ else {
+ if (current_depth > 0) {
+ /*do not update last_call_depth*/
+ current_depth++;
+ return (double)0.0F;
+ } /* end if */
+ } /* end else */
+ } /* end if */
+
+ /* Get time for event if the trace times flag is set */
+ if (is_first_invocation && H5_debug_g.ttimes) {
+ /* start the library-wide timer */
+ is_first_invocation = FALSE;
+ H5_timer_init(&running_timer);
+ H5_timer_start(&running_timer);
+ } /* end if */
+ if (H5_debug_g.ttimes) {
+ /* start the timer for this function */
+ H5_timer_init(&function_timer);
+ H5_timer_start(&function_timer);
+ } /* end if */
+
+ /* Create the ref-counted string */
+ rs = H5RS_create(NULL);
+
+ /* Print the first part of the line. This is the indication of the
+ * nesting depth followed by the function name and either start of
+ * argument list or start of return value. If this call is for a
+ * function return and no other calls have been made to H5_trace()
+ * since the one for the function call, then we're continuing
+ * the same line. */
+ if (returning) {
+ HDassert(current_depth > 0);
+ --current_depth;
+ if (current_depth < last_call_depth) {
+ /* We are at the beginning of a line */
+ if (H5_debug_g.ttimes) {
+ char tmp[320];
+
+ H5_timer_get_times(function_timer, &function_times);
+ H5_timer_get_times(running_timer, &running_times);
+ HDsprintf(tmp, "%.6f", (function_times.elapsed - running_times.elapsed));
+ H5RS_asprintf_cat(rs, " %*s ", (int)HDstrlen(tmp), "");
+ } /* end if */
+ for (i = 0; i < current_depth; i++)
+ H5RS_aputc(rs, '+');
+ H5RS_asprintf_cat(rs, "%*s%s = ", 2 * current_depth, "", func);
+ } /* end if */
+ else
+ /* Continue current line with return value */
+ H5RS_acat(rs, " = ");
+ } /* end if */
+ else {
+ if (current_depth > last_call_depth)
+ H5RS_acat(rs, " = <delayed>\n");
+ if (H5_debug_g.ttimes) {
+ H5_timer_get_times(function_timer, &function_times);
+ H5_timer_get_times(running_timer, &running_times);
+ H5RS_asprintf_cat(rs, "@%.6f ", (function_times.elapsed - running_times.elapsed));
+ } /* end if */
+ for (i = 0; i < current_depth; i++)
+ H5RS_aputc(rs, '+');
+ H5RS_asprintf_cat(rs, "%*s%s(", 2 * current_depth, "", func);
+ } /* end else */
+
+ /* Format arguments into the refcounted string */
+ HDva_start(ap, type);
+ H5_trace_args(rs, type, ap);
+ HDva_end(ap);
/* Display event time for return */
if (returning && H5_debug_g.ttimes) {
H5_timer_get_times(function_timer, &function_times);
H5_timer_get_times(running_timer, &running_times);
- HDfprintf(out, " @%.6f [dt=%.6f]", (function_times.elapsed - running_times.elapsed),
- (function_times.elapsed - *returning));
+ H5RS_asprintf_cat(rs, " @%.6f [dt=%.6f]", (function_times.elapsed - running_times.elapsed),
+ (function_times.elapsed - *returning));
} /* end if */
-error:
- HDva_end(ap);
+ /* Display generated string */
if (returning)
- HDfprintf(out, ";\n");
+ H5RS_acat(rs, ";\n");
else {
last_call_depth = current_depth++;
- HDfprintf(out, ")");
+ H5RS_acat(rs, ")");
} /* end else */
+ HDfputs(H5RS_get_str(rs), out);
HDfflush(out);
+ H5RS_decr(rs);
if (H5_debug_g.ttimes)
return function_times.elapsed;
yػcd 9|LlU^@vaͰ1/_fN {7VMAbt6&4- UnϽ.ĦV5Xiޚo h~˻ vKyf(wD6gwhuRy ##4&6ҬeD{/LFX~#2 ~M$l6pGpQg2<0T>Amo9^ \gH/UD9AE#5”ц/|=yL|GtNs!c5-};,.67 g(g82qP_6RGg'c{%Ec,wza{C=5Η;bhi n%f-Mv28T|=)~KMW UbCWhYcJbv!6TH+T}Mj#R47sťۢs&'PTea^eO:jW8JY-iT(%p:Kk>M⸶27(Jk؁ͯ=R͖"5ijžA\ۋ6bnG?uVF!e2F5^l/vZ-by3j~x_?KgpNA'#ܓl)O@,^hY;ࡔngNBY2_kIzwӰǩh'b^{D)Gܙ 9 N Dl|x"tc>(-SVZAL»ސ؋)&TK^o?,3rö~HHC@*% ~6|& ]1[H,<쒎EU0%8Ho8к=#=tʦs/5>REssvXj u,L(l^뒟 .Td@]h&?Ot$} 85LT֧Hm4bh组 YȌkfiYį'5g -UZ6VÞL.*WięA6qLNfGg:5MayFLEtA3xY~X!m.iWT A7D~ ~XTc=Qd~kX2JqVS)P (h2G'MZ3d9a;ۂ,3*z?#;CɤpM F:siXK u8?z39-ѱ41ִkS7V~7Vzq}{KP?j$ČٖLur^kE|a+.Xi ,ltU2.o:8sۗ!HfݤrM7EB I?^.g};j8*N|ů>¢\fGʸ`{!y[gBiOEqp7<%B6.L9l'W#uKaI1Ԉ2(Lk>xoO|TN™ROFd8EzP9m)Cb:,WhjuG?)uE.:8%Tcxu6K5|VkYuX/5eSphGR,@[.3x}$/J0{2<)LXK j DC. x\vy0DDI͎ 97"@w4_3~Ai~ 2&]I-\iM83省01xv-śv:6Z#w8z2Jtkϼ߼b/8䠀tU9$1Y.KPSTI]δbR<+buU6ۮTp:a/R9Z˞IcIhaqSuSct{ls䓣J#˜Ȑ/"ߘ'H8a-4Sر& A;r_3XvbUfe[9Ǣ,SƟ;X?H(IclrN(k"eiX=FXJu1HVfտwMFp}T?aoxm# ENMa"/0N 8$I[mM @&m6*u_w\ZX:-57™i4edq%WhF7"ƪnT{ 8]tٖWƎ}Is#oM{HlpBݵ5u^s+{)Kߵ.S 9G9sfpׯ@L03ޛ )]oAVRP Mc>l2UgZIab1edop'۳ Z2ZQg/V}VHLnL{VD&)(~ ƿ V)|JΪJ]a&:|7VxkǬ-!_є<7{% 0 ߌnĝg|֪{?wGOhy;D.ᙸǢu_d dTkNe:TÒWk!w!ɒ\F+FŃAyѕ`xEu6yr']M͉ 7/Vs8q ƫ#b~Gv< t`6eT_.6R GjKz]Myg؈'W5 RC!F$PN/gÌ6ilxz q芪 #wq^^y4]o O__vX6⩘ŷGL,T0:{0^Q3wh i.Z:;[fO8+Nx$fMRl#02:4~n; /7 ^Ov MD 7R6j/,h7k(_']X:fӂӷZxm詹eVr U~qS׶vUַCvEΣ,CL%+4.Dh=\+*3UvJ KX=`h}kQ:S:3'ДE5PLL%%*{ohQ?;٭j.-UU`)%ʬ)Q#-fN8ahMrMn3 זYvloI)#vOIIS3NW.w'[ dlv0(Y -PBicH#;]@`< n'+Ƌ dM㡖?5cȞ2I6罊eW"՛pK~g)0]Fc)(ǬܘY&x;k('%jF(X qS}A&l٦S<5-qd/#g-_ExG35FKw,Vyf (nk;}P0ɥ}7٠I} O}{灔:V \|Zr(:Ml@am"urd݄ϙ3W[NbLcBbnS" Q荹a .U0G\p-j;u69 A|7#o:R?SY]qh^ՆbǗg4#r҇38k`nIZ\\-/r hwۚhG.Y:hͷn tr_>NZ؈w'K&t3 ّ26dmexu,s巶$S<8e<,8sl*.73~BÄT,f ,\Q"~y%[UAaBDmb['fڧ ֙7^b1ÎP&I`e|gB2=ˉ]&\ߏr(R k]fq==8fʪja:n]!$_u?drɯz&MMԭAk1{2%F:|VW [$A9D{÷G^./e6r_gdlTzU `Co29%4c{d<:9 B8-p-o:2Ӈtg6mA+†3F7C2Nˡd;g9?UZIso4=$zgO_(!Q|;uWiY -5j' o=52τշ1cII 7 LZp3ѽMpUʈiM:xk_&z];)sn\@U֘(Q!$Mk2H#"f9Gz3k(xq%-KD}FLCYL݆ėt`Ffǂi`4T")w\X25Γ+DSkp5u]FhNм$ܦ\ ;pqnwV Mqd]! kOQ߿_3\eÃq330ج{czy)sŨAibOdV3= W>mvViG5W]ED3pU ]c3 |m01wi|6ᆨx~2# %CbrtX\ZRIܕt^R$6 SV*B,yҲ^}&0=* cZ'L,K|Mx$OlaXԕ?7M:q']y9ޝ T_[/D4M? VCe#W&x쏺j5@F~91"ȣ"txtwl%`f.˄{a:wy>2wI y٘157wJ0W-u}V`NB'fuKd>t\OaJvC ^ ?9|XJ"oF-$! A3)(^&n۟Z%F{a$im.0DoqϭgInmY=`;!ֽ$IFᢸA|E0߬v9j{~m_"z$gѻKN'R6gڤ{`]Ш f3s=j5g+Rg:xl M4yvCP5 #PKdwϋ]uM@a]^OewCy89Bo&rVacz"NS6Dk$ ({d3Vm"a^ʭ ,YL鐢|5m5ԾkόZO)oY/:?]&'ܗB&.Xl 7~׻IoxdqdDa*4d?||LdNIrsL•li0׾QIdLs_e+V1_Lb |!ߥI Ng˫2g߁UnY+QxX9u-Ҩga؟?;}ޙr~z8A}o 樜Q'/7Ge__Ol=вxSƲqLp^q;F++5j~d(3%W!b)Nk GξuWZ\quCo%\nOS/{GBD FN&Ń`/#_}nrui=>v Di aWNuˑ tRb0ɏ'aF.u!KY*lVH, ?iY%E:OKE{DqS:F[vl{}ɠ5c,(n1{e3/q>eX@$\_MT㓦/5*؆&s*2Ï5q=#X T35kG>G#{-#Yo0㰡>stzŸ{<p6'BK.q6aS˫S'jN56K0] %|3L̹QF/>:Fx!|oV6=ߜ!x \eb*a:(|_Zu E1֍|+4FvwG+ 1OKUnKzHfTTbd;qf4\y G!Oc?/k"}S'3/SՔlFߓ R$DV#j^JgoW5Yc/*;(TQb#ՈH^^7⯶Ts4]ị:kէ»MԦ7ٛ 5͚Jƌm pϙϲOya+߂3H*7dh/$5K]2A=yve.1t^d`x z8M@ѶM¤:NJч8)y DF!xfApQ\O<,b(:g/^|/\.(S4cZaV~:8vT3y)Ÿp0Rկ$8RZ3VZS*?Czg\Lc8x<$nLFm.,j'w8q/ZW> hAAWnx;`öO _\12>#v1cht r:C'a-Z.16 |Zkv{ k|:e tn 哱r{ EVGo:_w}.Y؞¬.\O S(P5k6}xڶveYDt\f_ُ'S?&'ĿwJAuwY"'.@{+LhE( Աq.h _qNTEV0eO8 \6#L4=oN#W ACj_K|c BIr?ʙve|栔e/Ϲad5=IΚX4d ?춉 S}7n^H{"㠍lxlz'l u5~ǶҌm+?o_8 >KeOZ:swD` ~܌؞#UxElJs7Q|9)cδ;!3$?j)tוkʼu#BC!lZd$QòeB}Qn|UeDC'1B;'Lw%W:BXƅ'o=GDutbEϟ^N4Z8b:oɸ}+Bg-+mZ8In|ڑ@o|=`$u;ɝkiYMֶ.˩/6)w,Jbhw\o饻r K"2kto%/9))N̒B;+Ң#M_>T% .e;3-LMy|;g~GtHK6W]l ϔmݰ@tkc.89ß>!Ӄ橷eKhLCЁR[bw1CoHMwu'6[1]N5.$MP^Sl-~;2\&1!h7Na(þIG;JŨg`aiG < 6P3QzEJzX+-KBZqY}v85y0XRb)XCx54d.[zetD5w~=.~J&,՛s-(DQU>Za=zʖEB@T(C.Qe \/]*$K/[qS`yIL-t~5sL@WR\<_s8)-c5oV@ef7*]{1'Ow2 lnW[*q}e7&TL=-<{ctOVd1b?sb/6 !SۏJ qz_XKr3we9FSiG x.T\ NgViȏ]h]:X"_+`QwXEB#7lgdu&kE(V O:& :us./4|_VN,nB KVOy~0-[G4B~Yoe[jLNTC 2%GxNioY\'4ڷM֯V|U.z1+r |~j\ϬX2]ro{zIhv}1$#awޭL,ԝ[LAͻS!qM2WP ?RM[cwԆZnIcR{;{r.5Ԝ7gY6e6KHc^#J50ޛ~Â\3΄wC՗TtCA9ž_IW E&H Zޕri IW4+ڴ).цrѢ95CPsZs'wM"݉,s:S;Iף"8'NIغڮ2>"A:Ʒ2p 4e*ܶu9Ÿ6HTV(ᰕ&k9╓ya;ӓG'n۪䫓h5M0diM9zɄ ěl/de쏍FVD1PEe蹳QA %<+8r_srb&]P~,qԎ9$!ק[f{{dخ9$ #e=t} q.[֛hyk/8 ]_k;Nؔ/sI7<[>ɕ6H~d93*GoFdxG1OJ,<&"`I?1p$o? 4)h\s, :ڵGN2HƉGEWiӬivn?IgK HAc XjFCleӬ{sfKShp;Ɣy2U"n13o^͹kQgk:CcZ:>N9&^Hs<<]kg{]vJ1NiMU{ʜZ8:)q&3dv-<4Yoċ#65>n^ % }VA2'o7" ǸzGY\:f~әb:Ž8x,$ !B8rqEHFӹ4~fS7_i˫v~@xs;:\w1~z_X6:c1ݣ4@Ψ'e)H$IZLZG>\(+"OzQ-xV!Gnt}6^^MYD.`9-HM^c eiyn?rpL>՛)&a0YS0>'`C$z5fdO2 b=/6vӑ)XKɘ[EwgS*ѕ D陞P1ZK_L1u J{)#Qw27j,=l_!|:>"kiĮt.UC_WXzϗǁa03H,D QJUn*^KF}>~.Yo_(ld{Q+=#dE< j8n"f@~ ƈw7y\Rę'X__y*Z > #!8uw[a'<ѫdM;QK!~Շ~ͽg:nރ.q!U(&m$EWHMYxx@M39./KH ^T66-'StEtklfh[;0p-& jJ7;wu`_&.k ^/U}n4v&M==3B1o6rGn<#2_0^fLElp7p&ziY;ϣ )0~2_?YaI*7ȌUd,o: vxvfJ=rǟ,;>AXmcCOsrBpf9Ddcq-8L!J署ՙ]Tw벙)wG ;~K(t‰{ҺhtlŎ*߈&$qw틫h39~51,!njwb`pQ`=m_# |?Zdruxep4} 'a}uS #?)KZIb\a{<|QzjGt#'%S6 z0lIbc- 4g7˗59PYf|tkNϥ-1¦,}U]Z p$ uqJemTiηi(U]e4LT+sd%4;@, Jm>E#b 2/7Ԝ]w4XG(b d*w}Tܱ/r>@8u c~H4d(8v3IKAV>qxUJU(=*b޹YΗ|нi Eur..|NӦ\/+z#א^',1sse"j)&yy_%ԽF{^*/C\ҡ. j"D ‡y9Dvf3m\:fYx7$<|nL&:0}\SbGr葋Dw֏Wfs&HΧv$3lhM_}nĩ꒕eRx3(͙̊nX܏+SZ(oxݒ's}N"*a Kϯ(9# L/oXJۙ MֱTC)19=wƜ4oѩw}R- ݈O's1Iw PÒʕixXS%l7 |5OՖ9a:axjd!DFQ^Ӎƍ?^#il2D03] VK7Mhm]BP4~Z6cm"qI}6ōᯫWqEۜ9,߱d` I0N8:; =MӗiͧY>x*$~(o$rҋolﶛyq)X[( ">{o_wd2Hg-qh8Ru౮oE~}zU3JKiZ2S\:qo>} nO-G3̪v|Ssfn}~A _H[sB~^tk@n^?{GN7PI#k6[) +[{.YYq_سsJ~'?9-{8}\sՎAm#Gh|QM? s]hn_۴ee; hUA2{Ω4qd\;_)gcmvG[z9*f^* 27[0 w2@)Do7 OvꍞVZ7{hYT?/R  u;7-%$3V& 97|)?5Z3E"4eN`MvW+rp[=aUjKM2Jc'Ş6!{y{5nLB3zZY ?lTkG]kǠ_ _-oʬ:wU~@}gأG\՗Jb*S"$_^x[Ztˎ8Noj v9^WW%tUlO8`oتl 䰋S$~DTOg$?-}Qk\ n #meƫ2:NK/3^i+ُ#aW4um8jSjp˞fe hޖR9T}<\r>`|[Fz(2ȏ} -ph~!yt<saX@x$qEǝ˘ZF7.6|: [cFAc[H8c"D\wBn{6д}/5<鞮~oe"X#Ezum#?5e! (,l\JR vu>^jnd72 Ἁ6z-&hf na?Fcܗ #"rMLf\u>մ󸟲?`[V6IU?\+dvq(=Q|y;HLnc2P13#kJ׍}mfl^|L u5 QԼqԸ5|3q3/CKv3O'Fb.nٺ.Q$Zśyy-Kn!nż;Kv{ C9tfjLȻʏO+d|)mRꟓ]{Ra\WwZ {/\ gٺXHsWÖ1߷; fXk`k}^>5Y@uR^-Ӽ<)7Ц /]!lt/ZwiLʵZɃ%̊@|ܺTɝ|(+e2 mT҅ɶ!wqR@`J6#Ԟh|NW3Ry,oxߵTpq)4X'竚/ ?eOϝ2g@ؚ3"+.@xQǭWC91%|j9 -Y{ž\lRtRNx{5p0Q/ vx8M.Oz" !UC&;_ԮQj8"q<'-\Ͽ$WcDE&<ʻq]ϟS"M6}6c3˒'eptx/ 9.ςl {NGh&/#Em]/!bt{瑼[ pn Wžv¨î{#3lDXc~riqk֭­Bv-%C37>%FmFKLr>Ʀ]1FqJ(sNRZ^C9\׉v*ͱ6dP)M$Pv%+:yAuNUBsoˆC諸>(Vvɓ+YA q=nc{%贙8KbE4fm#JZЂ*vbWXߞI1Ar,;39adtN}[Ih6R6%YGT:3}>2UߓIj2n>v&He| j7]k26Ko5YZg}9q_!֕؈';E9[[homh!2M=8E ?!WBoMVmٍ&Ykji$=R‡R˷߁%mpzGh9hG 4^SэJ:OR<=AUm2A8XE}>> iU_:+>+Q8L/FٳAyKC@Ѣgn53su#9a.}!qIٟOo$|둿yȋ$rrfQD9 ]->vow(p#]UnLG#)6Jgkando\fl*HŞÓGY>[IY(ˈIiXVL\p`_Ylp9aN8˞Bn'c|0:nX}[)B\-k>IܩJ=YW2qp8 o˝y+xGW$fl`_ QhL>]%vwa/}xZk6nlI$o!RO5O!pm&`p{Q"jE'L FDr².]CQ*C#^E W8tpx|l<38KmVDd<paUVE|ᖋ[t˜c6 &pwʫ0{h_SNRmY2U '` [,`#U i?Y^ŕ-ĭ?M1iӦ)iz8L'rn ޿7_ؽ9ʱ{8wmۄ /ݰ 34}/G=qFCZ!svډXsP!Lh#އ;q׺/Jljy) pia>ރgR*'xa:-Qu74`9G& ?"Xy3u"pt!Lpoxf#LHkNsPЮ_H㏰u)3Os(KTC q5;tecuYdQ9Ӌ|S}:l;3Ɛv~T_t&O (z7$OnH0YBh?ﯢ7T6⃤G\]fMȄkX$l,smۛ_$"E$|lta<͉PB$J_,\ &6{ *f1Y|zmFrQhrJ֒[e PB66ߢ]QjF@/>TZ#LhM 0s ??o'{Dɰ?eo7{ڌ!qR56 /bZ٨m{P;3?3[-@ 4yNLcv=é#$BMaCZ/CiΡܬą\:k*\\4Am}&؂"E2`o6OLu{a6b(c6k vj&*S̐.M>Oz_zXk 7薊5Ɋ<⛂wZ5 Ьo,Sً!ef"t ?1]P6_/%2oanKN*{Hn< n뷩gyOcxx/[c~|֕D\ٞy+P0 ?d.MD\rPP]L܅y̓X~E2ȗڅn63W<L?H@|a)Ys 7JmWj׋"'H4Q=w}lnU5;9H s^ Yf\5F8֡lsaσ=RK6uܾ}Z/|@b{\ıhunWT:>.>g;%,MHlMאDPt{ςl݋Yjmᇮ63;RN鉵$Ü2=We|;ńe;9?-yTTh:u 5RSd]l](7=fGǽ>俣LH:W* w qI-?$3nTqgѶZ2"e9پb5 ~ gsW$6|idGeThm|sCɬ]j7K/ض.F8̈́UPBH|'֭K^믑ԙ|fzwc䳁 y`똭({X ]5vf0Wo!dń1DN,MY2e>cpeU[ڴ! CiYVirl8lijM`L,:)lNLf}kSK$?H4ʘcf|gA~{# ' #c=kξ㭩_8荪L XRz ,OUu1;VA m R %+6ĢFhi6;rs0Sn|Z\',Td$ h BgX } "wpmt&"%B}Ks]84#oecã>FpR*l'9mV `Ǭʴr!}L`en,t^Wl91 q/ oܾQ8h,]+Wt>7 wiEw{L8c#18kYŃa<'e?/w4yK_tlJc a6Y@QjmmwP~QSEs8$Q:'d 'ƹx"/ ovs: (EƋ26U? 3"̱q4Ge?"ᓶQ"gӴ5k/yAo}F'rgG5ڍU6:EJ iQȑ)U<}<^㓾 "V޷x#eu."짣A~:'zsYl^s^b фy9V6 }=gg=9g_[8'!2ѝN'53ڇ=\ وMko5~.FuH5LxpH^kt6KV[;7c*}{V3bygq*]~s+F{?u@}$9L'EW4]v?8҉K\V6+ˏ6#V `:RWRȣs=F{*5ݿ&jcLy+&R^GH\aΥ1nLfG%{;^s;杇5- Kgi轡siqd3.Vdm#/wk /sC灺6`^!0f~UDic}`*y[7xzT϶Uʥ~cYP\yXq*#Vʔ-uύ`?=_gMqʖ r=+շ bL+[-zq,Zln& -D RZ>DA5B#'~6\[-rqq L#u=l_v!,0`le˭]au|7f Sָ[_Ee b?FdN [%AW6iepL^R[\>Cbi- W#S&INe]bLrum8&ɉW` 2Ĺ͟=rr~ǐFgĺ~Q0Cs-a7&RO+1޲< ’h!Br6oHۖ)^"lU^TF wi}d@i=<,|Gw]C9'; /^mgs 1L\bxlJmoã~OgIiYX |[{gw<.٤s~')epKi,eI(ɱR=TL/r<OyQ0h[ۋd8FXrIpi(5;#T 6y3ĕF]|Iحػ-f=N[rhHa[",]m>*fzO{2z;6G'hi<~CGxK "*|j\=8x&kxN,"5rDymwVe 5|ơ!{) DH5n 7[ݢ Hl h9AХvo) L}C7[}ln~ƛ]+3_%Ake4|z(8Hu K߷y[+CϏ]:0i7Xz.Sako*)4'ﬕ*҇Vux[]-2Pr;Y>/W$2Ό9DVl9~OKwc:Xw?e;;$KŹDx"6@=XY`n`f;A' TlH==J{$X `k9 % 2ζb[!5CQ>-晘x}8T34[Nahef(vxm>UE \!?ИJR1JO;\#W)aoQd! zZ)ؖER^˿'݆l.K;gHKSIWtn4,IK-7٪>1?#|߲?5M;5ReOo8woZܲyJSZGR"ĉ%~Yisip\3\@4E@۟plcqge?$QQνa  vr. ef`(kô_Y-rMH@BU ˖ XSD ZNuRl˔"\cw;WHY$Qk||ӕXgʋ&q 2~ s4( zU mtiZ_3YTbk%?J. "56좨ezs?{ 93n[Rd}\~iDht 2?D@3df\IL'";3Mϵ)#.Eaet7&lb7]ʛxT:_ X| wb YSzș3Y D1ϲKD _nWL)Ql0ǡv.7Tt]MV\1Ef4 e|M "FZ }k.XZs^8IfD+s?fvksp,ICo;BmsyC$tH?V=2.g]HϓR_' 㠐h?|C$-[Y:@F# c$嵿}YDp'ᚄ5 7g,XKY1"0 Szni-T߿bD'~j!8f= Z3mcnߐ>Z'/k EU`Yd%Jw|+gN+U y0E0vFkpG1ooV%>1%DLE[e&jiR5;ϾYf!\vM 'r2-߶@їy~ R-`e{j{f ~zeӲjh?YϚqO(e>)[H4t#( g6ݖ]3g`8Ju_}K㦎I5 &wŏO0m@6A?K&5$=s^rL[Nm$"ų+3 ~M;[w&$F) %iurݸjFݸxs\ӴBP`q*4^%ԷEu)С!#bYI2}>A=6+@+%Ht*˼mh%j/e )|vR;8{Σ=–[`aۨXQu J45Yq~3nz&[xl_;f,3Fr(U x77֧Q~ ٓ>?dŷ-ABr5aU6Եg9;Ô5zUd>| & 7Y6y, ۀݿ.>Qs .iZ.1j(NZ*G |[) mUͽC/ˆ٘dӁмԯSMi[ kzD"w?Fut->Tqp]";!\]rY=7Ѧީj:j(W/lL o8HOHak`ɒu#}=XiK*z!3le5|zwXUa1_־(Z A>x\IKF+(>idFn\P)NٷGL-FTݮp Q;7 h6#@&p;[9~1;Q />bwFQbӛRp]镊lK9ˡ >[shcX9mD9YJ^t2G6n[¤p^+Pq H4hk}*ˉ2~"'HkVMI#E Wa$I0]x"px ;mxҧQ^32LAi-h?LlX` ALuG.VKJ۳fOo o=K˶)ҽcW%m]&-+{rA(‘ۻgi6|i2+_l+$¶9=1 >A?˼s:c~K\LdWW+6 %.͏A0Q# ubkd9U}0qJo/㎸eߓ\!ew)@ A[Z:b5Gy_6y*f ݹ/;lryvLp1PKT”Usסw)_1bf"M~mF.2 -#Q'u&J WLКO$b,tL0}ٳ-}1 mhɫ_hܼ&08eL¡naOW@mz6~U*OY(NoimbJ*@kr_Γ o[k_l{j)-p]^Pfw0mR [-1I q}.#V(X8-#~,VI~Vb~78/hSiQ};.& a^YW0}M֒tPbbP G=8; Fڊ(EQ:)gZe~)]G[jҹLh})se~k -FPqt' JHU~ sLrzEly|޳ZS99)n6l𑤍sY qڱ$in0iv2aMRUĹՑij/KL+:bt!U\c9)_Yr;q|'LigHp746?^^5 W#f?"B1gx*F&zE c Ũt]#妼 K6X!⻍e 缱V* Kܧou+j䧿0]7k2\o;wV[X%"#>EOQ7tm#LuLKQJA xj-hvónqr'5β#ж-nskCm q|Z_ApsoU5cݚ ÇᧆRg(j&?Po^|axo&o/E[Kf֧^KU͞N]xs,Msm;ժܮfkEٟT!'6vgvCjy3=)tU=zp'74KjTTk|q^wĬ=?薛7^HyY3ivFE2$c&0+qMb >ˠ)Dp0LTDPڶ,v/Qծ"ms{˨ل}S #0&il~Ǜr&0gk;*̽&z⺍9~ξ Ij3d l]2cx=Nۜ1]rr-^̤̇N o;xOh);Nţ|tU?1u&VN!: ѱ֜Ÿa+~,SY>ɠO[6b%(F\E|uD0ўimscj__cr0Go+;MmsenA0UL l]O}$bunx)U0YeO@A0v~~{ (\)| XE,If0޿4C ӛUsU;|46͌9 /R|edxm6RӂbxX|U]^h>x`?1sc1D`M0ԅ?M} z*3oK0 (p-%0AyyKjP$(^v(5<7XLjC3t&qBl,޲Ӫ[Ob[VsƬ*$d[ׯola5j 2z{\Z o6 zk*ŨM{ɻA@^WU_Ն553Ե2{}!J<Ԑ |Œj߈ UrbAb+'1ŵϐ4|g?Y4׎gYG.ӂ:αOm0r|PIw_|S93A}bBs^s`≶D%9,XtUQLO2W]4!]",Mh"WwN lGs3O:/#?lb;WȄh'{-G~ᬊ?*?*s/+ElNKnN*Z< ((Mz3lGrW|,c4!d9| R.Ȫ䭈5;GB*!Ez_Iȧ<%o8`oNHX#Jq_3-/ )k2ExJvX~C }y0h[,*k߬J5!LHڜ&{zxkM?ُMğ>-DԦ.V|:ƭ?sٓ,뜎/H3;暠BpiGFcIl=AؓHcF8;^j'2[Ҵ7G@ ɐڢ{܊coC2*MK1,fƒ ls>i]*D*q7G*A, X1_3})(I),1hgT-qEc9)0>6T:WT?|+4} _w _\.)8BUAQD`Q+ϧOzoN;e{:} (XiUWA%:e% wCn|ŻBlPZL&E_YS>% 1͵=yM{s݈q_Y+߭|)F$dM9jJev5j/7tc;O.u Y3"an 0Xz@8VƟ|sS nH(7R3'Vy_->ٓi6ft:g~_} ;dDz{g {Rko$>E@W qv_>>jc! j/ɼܸ~ 0V.,!zJ>Nt3'IR]r9wh`3`DS$nzư;B sj,dh ldf1󷜶CVŬ`=clqW˾hݪ坫S ]3_I1 Axpon krn^O?:#f(i?UJ߰cq0cA0ٝ|+ڿtq6w(@}w%7v}t;gj`qt5܍vίV8;{8=3:%_ ,OO6X6mK"w|z ԓήղuNw?Pa`WFMUUXcZ|^tHlu"#}sVKQVk`~ӈnTWE^ |9Oo?^xCҌ7߯R>f dz=ңmk?==i}$7n5_YR# {?\9Mg/ES!˫:Fʶ}@·}KEi3]&+Iٯ|)6ɪ:.n/ қ^O||^u=p|d[OcMp6t;6"_\:Gh" i:Wnx;E][}v:ށ7MWLB z<.6Z!c>/ OjxuוmQ/Rw{ܸٜ,6FPxm 4?,؀{ ck|=NrnG{| <Iș2 |da;U>(&XeYdeq AiL~;ˑ~{=s㋾<(zیhO1;*4Qȫjwq7q,b~xFw4DIp_<FNuӊ~{O1,T';rNuI)},ti䩄l/I cvOu&5xvsZEYO>'MÞg'u"*ع=lmcg&g~@!{$;X  +7#;<+-]顣c3qƮwųk' YD2FQK8?ysXÙoϕuWT}AvwE:,\ uKu3B`Ҿ< <,<=n\C.v7;e6<%R-Kܖ5uVvo chL+`jOƳ >ʰ8:݇=IBunR Иl1JI[bYZ -n:"V3-PF݁^&Q"KW&z3~'~~ cpIoĄ|e :͎uqReX7r0?VDu(sAjqW:C1{0(uLۗa}ֺ9"ҌlDbr-_mM冚ch~J4mFO駼sz׹sΔ@ JkhK*'m}[z'>^`Zc1͌0f#2Kśz{јdvl\cǸX{{< &4G(FUiO dY(9@\"^sLBvXjiWء~Ey\WOƋB#_ |a]ֿSk + T?M._E)~Z*YoF.<3fJXlڕCB :G7H>!EfY֒{FU$b>{J^tҺ?۷'GpŹ Y т{M8OF{f-Flaed)p|{72:w0ģд0dtݔ~ɩx"l2³l˭͏َ $zq}*B)%؃j*~‚USm4ǭ~A$L5vZdofr#Jd=;Ʃ?lm^`!o{B,+g;WUtyjep5 ݇LecF v/(#!o5\Z)?u)赶 <-ۍ:-?wZ2Toz;=Ű ش۟8 |.siC9Z9zuglѭ] ׵[Xԫ4KTc1Pz/\>Ŷ? L`} O㱆%xg`[S89;Y9|n}Rɯiu46.rWg$#I1w9OA;Z7#RmܫoZNZg;a8(7}R31RF:־MُUߺ%:9C=l~lMNoz? ܒ>z<ƓilܒҍzY ?!$nN^ifCAltڧm?&ޡzynCL9rV/,۞ʢ!: fic3Ah-?tJx ce2e3GqRZpTϪ_Ro )w5d(6ճ{ZjxT&V-Yvz,LsuIx;#f[ %$%"yBR:8C.K_6ǤG MVYe\(%o'hw!Gq)>yih5ITKcFV>w8f5UU.e+pAs?u[h%U'0thIv.nxrɥ )Yuib< `wRHax<:{:,Йh[^.q>ܯ̑R0= kݙ]3u^+y`g[GI1vqJ(7s?qMe3j^]9L+8NDηruqak8pWe8E񎋩9Gs}޸1pu喝y*/0+O~"LW$ 6ȱ َ0^ָ@6FeUO@0_g5輍XOxk:6C @z^骍pfB51hIi{7}XNUI5M,Us#ԦJ])6O$e1g! .[ށو> f9Z."9S6k%YMYAz3~^EClRt _6a\8M,)GcoQ?HX8 /o>k^MVfR^$m0HU-7Фи@"KR'7׊ ʻ$Mў+*bȵ6l/LNܛ fbųD}j CO n 4P>4ax_l)}6<;蒳8w fM43np뤜.,wtw;8sť3|=5G]4Mbl!߻'_qŹҔٿ Dg)Rl2~R0@ .hy[_@Uaᝬ3u0C$vuUW!w~`$* )&Dijp 1r ٰo ᷊݄[Ԏow0o;i+w#/\ɤEBbcl:CSsϔ#pin)(SS [Tɜ3cAw@d8d#A|G-oe(wk\L_ ;8JGXL&TRv7mRdQeK`WlxyV<397\u- k܋^!5`Nxdf'G[O -Vqs=em8$#V"XA~=۪ݢk][Oe4'+[^snZ(V2,AW(uЙt_U/J[r5BZl~y7B 1/`&@Qg&WKU/ yن2nC3Y 'k1 \YH>sű#|9%n  vO2~V##?I](@qr}Zd_pLtCO ߿q8[U^ȇK"@B@⁘=O~@!Hr*{qVv"uyn^)Vן*㹍(=NJ\jx=i8*G&', [.4Z "?JLj.:rqu2}uXo;o?;}li4+^ |\bGԡ/ٔ7$# aJAQއWI;W?h־Ck\^0t0rlA9iRPdJxgM`*yMĪ")|Df|\?eYh89~e0b$^QA-Dj#<#/ p*mQھtzU-}C(<2398+ziT7}-$אܼEy$ӖN J9DzJK=6|rt~N@p.lJ0SDCio-̅bss]F;߁`e1nN\/_/kmϮX>F*ȽnX/,GÛ;F¥q;,.x+j8Wv~g+F_MU6:+[f$\]]ixN=l]K@(o~g.Rh[3`@g28\eDQc\<^OK(TԾx _[4_doX eL~G=+,\YvƜu٬ ,̒ |Jg>j[ř2n'5)#ф23B6Wd|}EЊ{JLWQ8-/1b`0P.ѣLyL ԺnNjpk4mDZ=klds'ͥIK.{ܜs_NBM.aUfw_`[&af3TOI^ J㖗Pi >=2UO8+=:2 | P{/0qUWڽ qLl ':>/eԜ⫿uӍ̓ZO WZdK7m]u<韉< Ulk)Єmsc(l Dm {}3ٶYz(?pW2gt Y}ę}~ea"߆cCύS! \JGYM> o3'mLwlrmE|P0]HҳyNSFtqwwN b7Q Ji>ȑ(v+^NLg=J<* ]~".ר8R9/ξXn#㌁9"*s:VJہ )M*0$i0l]3:HC_yW퍖.)ȍ֢; TߋNwJ6 kk]G-ˍQѻuq}ߝ6FÄ> }>ṿaiGyTHg}(:V HrZP âっOMW͖/Q9[ur#C DӶB"8U7^{ܮN>6UG%m !HAu@JKk qf 'V'GS޶}V42% h$p<.èPf4[H /rJMtz$Nڸ(ѕCP(T'9yctMGroIʷIx32'F#}1"YDbesˢaW u*a4b*mw%휑GK V/%n#żpBQ"An3GhMe{4Z,%am~Xu|yp܈sEfZM5ڬ"vRoQ੆|C2eRO9';_XҾO Lq=9|iaNZ~V_V&*ON?5:C,V*VRsdAsu#l6S-Ycoͷ3=3 CaqSp$!jDCj8رxQ/ do֝կF&2e6՛3Ouo 2|WĂ M$Š,DUƵ )6W#Γ .*)r^>[j;eU nE0Ռ^; x Unh{)uK #$no$AכUyJ f`f(ѥ![R~ϙ0VKn)8$`y<%"E~aX!Ed(-fN+(#ug|(]% eJ̫JGdn5dӑ?ƺ~8C^L :~\,%K|LnۉO]-p #4e)s1]2`Oş|F3fJe%_mEW*T~nKfc壑N}]Hl->4mc}]TޭӪfU. 4ܶ.Ë%3ǻG˸b.D-+ ih-[/p'̂:H驲>]Q1Et)44pfo4W^u3+eu͋QKU]Nu!e1>=tBGN\!|+1e)Q{FNs22v|\Lq(*+1SJ8fgsM){=|RZeoz.ቡ1n_n9Om?Ǖv׽9A2f`1ʖq]Ǖ9QDzjd3&oLYlS sHn>o|H!ܕwq0% {%>S92l9_c$V}YKf ]rCSZ#0Y2<Ͻ&dI*!C(1?J;vӋWF[L9K+ ә3.lHQ!OLr*H~[iKIsaӚh ŧPkLg8ٗܬ叡Z5ՋP)T$Wvp)z;=-TE51^`sxU4no:h{Tcq4}|U ?_:{wnkieM}1MEKWv-U*5/>7J[3!^>\jf94\~O5i 5%T?llNX"О YJʇk}I7rG>\|[q9N4zsV7[ HMe[)kM$a/#,1>.-7{KOqߐ;IɊ]c.Iw2MDfkcg1kRwJה{}|i2/ |bWP_x3ۙ3m:/~c{(mi% ėy\orE4zJEbv]¯JO2 `|ɟDZ _ʼnZЗO/`9=̎[-""Az֡*$B_2Y $ =qHqK֣z54K&SO`7o_Ѯq@C^as_ l:='kw8/^AAҲkȚ!ӹvYj296Zj,Ht)4&G8%7VH[mĵ7+ϭ^p[f"",G}plr4J4&Nf߻12vڟ~dvgM?TD>"_FY ɹcdqߕQxO91.=Y'aN{~ի|>N*o}{I3 Q}FƟ7VTi LDvWmFŚ.gbslQ-&1n1߮xK(QGp( bʃ)(G .uzzˣY×?p,?^"y{}ʤՎ;Utb!Y;&ؠHy#Wlܛ"44LXQl~~94cѫ ?+=}lz/(Mg58^RuiIt;gQO=aN!r pY'$cû={-#-iw"1ʛS EM1< 9=E5 OEK$hgjDR_/bV9_y(/3$u>N=M뺚(gEs(w+_Gi;xy)7&Bc%GA"O*RU_FFT;Ae! *Eߥ Nهno]//v,]Dhw9KHޅv1L~F)f^Y&f5}w8Jd_g`ʣۍ"fUŰS$GC0rNXCgd{OS`2i6Y3ӥy6޷R82F곆۞9&5BFyg0'~\9׾' 8i[ xKX0(`A2eЇúFt|&%#K)v4)S#4_:=,syeqip#r2G V`EQ\Q@вFXՒʹUۄ7BO$qTX]{as?l_Vdkhm|]4E'\K[G{d8x=Te^;9u12٩I˜L#ݑ1\Z^Ae{кۼs\LL҄~?uМFvhw"/ %Q5mߕ?7gݾmv\5$L<|\ԜwnF~$+*Fb/?:NxN/3> <quv&u%G൰AG#mN_cky\u'%{^>>)u[l.oږ_)լe ù[VxGSWp{k07S :h{) / k2u3{ j2 \̷lꮫ޼\n ~(wqh/=?Ȩw*g}WfjqwJexJ'euvB'֮ag 3u=`ѿU(a}bYv=U'LMvܨwm I{@(G%'_^#e}^KʝZro:P&nb=_RKt Ƌh{_/OQoan\_.z+YNY8}[w!~ f&K?8HUvB#v=92]ޞhE;v\L5Z*'G(m3h܄zo7hf<^d|[8ϙv@ᑟrkɱPwnn.*u.qߥf>ܾ9*gV;H)8eG>nHW-ԜztOޏiUR<-Gboy'Sc "Fq$cJaDcR,EHB59҉ a,a[<؉+hSI%:BRMivmKߜ`%u%z-NL!ΎBϘ bXX~4})O85xVjYzUﭹގMfʴ2:^5yaŚ1?+V" 7eD Y{97Ĉp_q"X$YB 97 hq_Ȗ.]S!]mr2kKJ^bCuU[&9yW{sEwkO3﫵'W1NöO tn^((mnTMҎ8@nωWrW3+B8+]L}Q±hmڟ9ԝ4"Ssf}st+&:r.pU Ǣwlz<3^6 }/\`;F-oן#5y go$Z tǷ嚫p\wmQuUBjGd(onu}k֕|V+pp?E2~Ɔ |lE)՛V5zSS YdRE5!5pOO\|-;o>˨FsXws6:K?W.!K3囶dI,dgk$W*ĉuҎdFסܸ5IN8cQn-!7q=ATĻ. 0Tm[&]h{Ir~, $-P{iVk]c4NrP(Lٸ%0칦E;NLʚӼd0֡)Ita\cr/8}4D - `k:%5yWwC0G]s{Qc`οq"@,vA5$[=+ؙ ^ȪjX#rj9u<:3?[ {gH+4z8do9p5N=\H %TjOh˺<)Cؘh)q 2O(3&&v4S~S{#+q/}тtNY#a?}4PV*"꓉QF3_-ωla4^&^رE0,gh8WE/o0Y1Qz܏O٥9LcnjOҖ5Wn˛3'v4i<'j伿S%fE[+>>hbCG#l5v0G#ͧE4ŕRB;/J3mu`y.'Z>XhYNl WQIu^Hn95$e>M}Ee#da{@;=s8P4xurYm?j13vբQ>ii3u6y֟#si`owQnʌQߖ[߶su:m .Du뼟iCg HW͊s?;v-{:S[Rrm-QJ/%ڰKNW"v( <XߤȟG{gHl 8ޯ\+W[dp{|t6N <7"-Vz(e[R >!q[b7GzY wcBYww5$>\yt߇eUihl/ oxZ~S%*|_g4/\6$FBo~(9:)Y)p ՟Txxx+&S@|=ӴZqw<穝WF˱FMI9 ۼ-w׽L A:@J,VZ2?ܩ܇7l>jI& AOnRk/1DܘGw5!6el|5K{F;}sSJ-:?y P4;׵}d- j I8 K9ƩI̔i>&gð:[8//mxoܶ3ʚ1eǂ ]@x(9ٖd2@WY@ng:cm@gDݬ3S'r-v` wMgf Wߦz:MP~a5΃*w5{Fz %?ӔO0`_rJ1k}N69w`vsj.w/L4 ^b>;(:Ci]WdnJOwD* ?XWLlVeL9`SEf''vwj١η;@׮mqV_9>{{;nU /N"VZ_7:!}tw2k .kӵsבoPz3$.(}f|Gr .7q & ttKնӝ2 &@tsϷm7Ϛ]VvF >xI*Ԝhщw609DjeVLhqoS{-˷*ShܮC "Q7yyG;渻XrSh_T=btfXH%dQoxVrY$(,-Lw15Jdt3yx^K~A&#:RJc-c ]]19] Ps: Go(z{`^JԛCGCoHԱugnj3'璖k7|u%k;*DʢM3ӵmE%1gF췣^*}!xv^{ 9~iݍ&j${Y_sLnkiJQ_w S3>.Q}6d|OS<k<7S= />;OCzzf֖q/Q"I^YTSQϳNeͮG`+@ fK0CCb Ü,Ox IW W&>[W9WK U]|mWRgmf\u-_95$WED^!+u\#Zh_Di c};4ҷ;B&Op^^aud5]IkY{}fD ZSa,9)BϺ/V~Lו垣iaD6(HHA߲L Y XtoQviDWd3hK5t8摢wwzg_XLpHȉqMVYD?iZ1PywwFIT;-2ml 'K֘V؃0w =RY/#!8yt&W3?K4Q8ahX{bCs^d(;14'y~r>kKR.v^*K_l,q㫤X~&yÙӗ*8/.Z}04񯝤\<):QxݛW09,/v"|Ob`5r""W\%axOߵ KHR,Z>$>*@ӋvmjUiml(iG1q5gK=@1ۻ"M9ctm.jv[Z ;_3~^q oZ<)EBI__8I>$6(\u]b6H KcvX;2Buy.Aa, n?:S6\u& ډ2_\SM^7ۣ"=qNZ3md mA0o&@͇TQ,?4]w^en=OiUa6+,Fj,x/ [" ->~}svޗƛFI۰ɮ~J.UCvy[Yo>37=i&4D {2?iJy`"s-BnOϹJy\cq&W~}?r[&:!o| [R;0O$t|N8L%|nhsS ]JB_NQе,6y}nAwI x,V|fiAsd h!ޚx}a"]v J/qԮyY蔼Gx+V2hֳse*F6~cr7P7s`ҐGsQۀY.nKgў#ؤugrN w \#qz:?;%_ < fAPCOq(ՍjWuxdwژ99Wݑ@oX-;zܤ#u$Yw]Ji{(K.Kuν!N`gu_pCaJ|uɨoN|Q]hڵ|UQݳ@'GtJ:4&Gmc:wЁ"d΃_wQ~g0R}kS':I;*]VOd%yg0?~xa،ȩ^_ ح @,Tth@n~$9iWAgd/ZUy!_o+ k%bIϑ=+8kN sr$ y} E&~&_Mn(1 !t ue.X‹QJ׼uTLQ2jz9Ns"4<Qa_6M_u0uW4jz(Y>?vTk[D ifӓԎsʰAg6Y {b=Qα"kGߪ*K_ Q[pZKf5ߔhb~}umwe!nNp?~{6CΏe!Bа\dz;ܛ5/|*q,uΑD8j)b>]?8T շ`=ڒڋ?9 Q~H;lSNfjL.@޸&4k)oycY+{ȭ6ryrb>)&kBPn" g"|\d|NBi9yn@L$ zY00x-Z7'Ecq 'sL3| Dai0C/Ggʏ f*'5'1^FbS8y;!vr1DK5^ЂoЗ/X< A:Oe@_ȈtcL ,&rAdݖ m̘>#ȒF3V:J3ᾴÏo5)Hx27ɧf 5! [T>Qo $+G]Jf,omB BUC: nMN]E"I|f(= `pϻ&/}_DNBux[;QpY|7o}5T7Gi_S~k6'+t#Ⲿ _IX42Oj7\*̴IiQV[mS1wD7_o1mYSޝܯ9$A`ΕeA_v II=s钃~Œ!Shh7; _vkQ~>C޼F<2*_鼵"+nyFaFFn3TZ_8||~ɞpbӵ&]vyLb,=é8uђ4/sZn8ȡ7e<ωH4lµ#W}iJ)Q|)Xܦ??n")v505ڒK}ݍ,"<.Bt'Rt_Q bJ?.Ib2 YgNH1ÊΗz듼ٳ.J<^ڄ܃zaro g3J`MMV 7]H-66N=CeYR/(]U(!{}4DAV" AuN D~qt/A+-}ؑ q~hLTkn9*ߵ/FԆ0wI@k>_& n3_ӔT} D&į ]Ku8) qbFƛ-T:D\~y3"/֙ɩtFc.XMsU{S5iC~..hW=ӝ:x+)Ʀb1]4YsXؗ$eq{Q'8}hwP;+ 漋1)scA uXOr@gob9&,!2]Sѹ6ҕ\nk!Zz?U;W2HnD7$)K>[_(oQ3ߜ2 3Q69$th4z'o q8qpeHm7f~Sc7/,- g և4_*{>KǶaKE{-y"yws5Ryw2Ą9jR׸ ]$y#WFTʓ\w7?K擡H?~\H\rjʇDtD8.)e* b(<R6. dmuAkʟg$~s+#@}H: Je.DCy3\eLBoű5Q\yubgʷ:[s~)}3gIŲ]!Ԫqژ/' ~Y8Ay9"`X20ð)۬+x"DZl>oʱh'ޓ4BeOULx- &(NjMY[ G}cm D]u6-8LF9o6F E)1$W3V?/l.(n@~!oUpç.#l^͹`bGOCؼ:DH"1L<{^7P?ߞךk׽QNPRbS%jOT"O_8Rűl ZǢ=tTg!S;Уy{ (Feho,, |hġOv ¤,T5fU|ʤA^/[_A8a ?3EWJiubsE-xe >VH-FI4?Sz?O-`M9m\W[+kN O5-j%T|Ł2ݑbT aӭ#[atcb┰atwy{(=*kIr:W|h]6bk&=,DA$!p7b3[ '4ɲ5wwFa1;H^]/54]Yɜ $ K@az9>W8U@ΤtƊyea6$+RwJoʹFbtF `kC6n~$GZH*W_suFҁ;]Gx __8)"_gnF,?=n ы_? b'-bg,az#r+7]>͙]G5" vw$3%tS6O7nv=mZWfqK3|;5qݹyg9u듥n0𖎭5= |<&*s/-~@acl9<8byq}f/Y#м>NCCLC8p/{²}FTHE~C+g* fb[,@Dlf5YD;4>KHi 1`qj_Sid5JDs c{]ge!=h6IЋ. 0kc48mKU?) :7,ZcsI4"Exd"Rg~YM+&DR=hJXqxϗ=?Fr?g-15ƛ}8슫T&_ \bljyǏ=J:r{g3:[ɦf /78v⛹-ϟ$udu6L9ԇi% |1!M#`Ehm*74V!t eR1U{05)N6 8Y-)I!.hڅwj+Yy!]2yij~dG PrYL&L7I" )QyaH}jM0 S &`1wuF[XH˶Jᆪib/pU L'v3$o'V()9 4}oyβD |*bd·z,G6mq >?hym3P,JA[Z6'Rv{ {iCB|Ȣ3N'xyLv>DBj~C@doNf. p]&WFgKҝ%6a,t^?jw{W1]rasbȧ4EVU_Kd'?(`O֔o<9 82j߼Kw?g֢Zzy23/4BGW׋0qy-䊒)7g/q LFڼ\ᘝ"Ma+65FH;{fmՋ)K<,˾=G<żmYx?OI5v7\ocղiB0s<*[qy,낱?G.ak )YgX(Nb<H\If/bKX־ӵ$&`8ғ`s^:'].&b۩Ws8*v/ =c~/y_fK:S1Mr#o$ dIγd`n%B9 X鲵mR|),4_s/bz[yGDLnSRsMq<ةhR(C(l)wpK#E¸Ctfk~\^nouRK$C$!# |tn0ȻBCc] `avFM*^'Wlf .T5WS5IodW%%j<7?u1nZq{?\["?SHհ&"xd-|@Ub'l]q[dm LC hXyRO}Ⱇ'<9~-=8vEpfpH[H^DnGY1 G"fݦ?)chRlsm/xݟzNo/vH8h:Pr;n;"Dԟ!urzE! g栫N . O%]usDưtvY.,KL{Bmف>kf@?е aIu"ju,$rfe%@lΨYՌIV%eã6f*6z:D6mW E\M3_O`XW`E-Owb5\,mh_u7t,v 9=쵑AH|WjoH/փvC/?!K!u%Hqb|yQWrW:#c?Ǿکؙ4|q-V`hO)#TU H%>`KA4èoz'5y~~SiX$P) , `:tuV3 FG 1\6gzj ,{g2Z)b@6dĔ5[E= ?vMUԽ/ SӎHGK)+;6m A  Bv׮+ˈk[AC)h.g1ᆳT71ղڴ $:\͑([*#p5+a/ͫ>;ʋ]b45٥Tt>O w\ Rg@ /caPVmltDOGhE;2^WRGsP`;.l*]#ļp eqm 5)'!"%̚Q#Jȭ?rjԗx]HO;c,v&_(̹g,o ZHv:6_]7k$0qbHWP۷g? vKcT_ȽYcﵟ:ADs9%gl濵 e*Ʋė}Bk3\FV*,OGV%b) bxix0yO.%%]쀜ی emꚪfynx~1V`ՍsoSnf'u X7B:AVq[c\/0;+" /ϲV>1Mx{SfTLV!m ԓSm..sk!{T]dkfsNh,aX|>J<EBlaDu\-mtl q]3g-oâ kMƏq{$uɤiΕ]zVOnÌ-2JJ%dy 'dj_{; ڹשb6^" DFGEi@|G%;=C@pˇS-!iaYJف&Z^/ b )Z+m5\6Funf-ѨAZizOpI.]9y\OҼcG Eb^ ;$qzAim(qXm>ZY/|ț:fk^i5d$>gC.}_ȏ] #t%FJݟtr5Ji=ɇL X C([㹘˜K }c ˁyH^357 b6VoVƻ5;= ',5zivq~e"vޅc3_{fZb@jGՋ*cfQ&{Ʉڏn)Ve!o Vm7f,AZ_2K%(F8چ7RW\Ƹ6 zI&HB Os<3 %n[@S] ^['bR#ϦCZ`Uf3ux 7c[F WT$ܮʬΠCZu-|3v3EliԬNn`oLؗtୠL f76fl̑Fl+QP,|iؒvUdi۪BlQa[}E0NyG6Ss{ Gz ۷&6ywl-F"nm˛.*ŗ`KYɫk~ɔ’gm XO``4'L$Ls|'ɱ'P|ߟ9T'p' Ngt7Gc-]bMewzqS2T:X)N't#j-e;ۓ#^q@)؀ug B/QI:t5 3+>)t{"!BUh] R[(˜jh퓂2gCYm:MG)4ↁc\S}9L+z NX?M[Im0wS-[RNi"OzdFW|Bҷp!8=^WÐ7Jk &wV͗@>j@K?2j9כuϜ/Y l\w|a_!c/'Zas/ kؿ\iw,%>C8$Ǫ 㧰?~̧=%)Zu9s͜)"rڜ;(qȕL<7PM}\< zI}Ltt}xİ^I}2uV^0neg q ;([_#:lM}V9{%vM :5B׏3Ǘ]z`0.-`O/3OpZMv 9yAڶ[cc\X5nP:$ğnߝZM"bK;@gR]adsFbbv")c.<ݚ\刖=뙵crY}7BړXUMN 4oϸ<QW>#$p7LPөP>i~-ptoeQ3guhB/W_6e`qHR"HF3B(Mq'S/޷8G͵?̽swQj-Q=+i!nXgL-ײQi<9mӆvnsŦ_~#Kg Dۄv-OCrMkH6wgGC-íP>af@KΪl1$rINIФiYZUz1J"C>:_vWz$jy?5# ]^9Φ59d4_d9wD1ꍽ| +ʞ3u]o`&i;4MM|tQp=$TYM%61FioطQquL#90߽1OS亼'سn5٩+K h mNx9[qF?U4SmW1Nn!`-uY#LjtlF GkuN el2'jB):o8]}/^a( CFO,b\#޻5ʸG.ucE"PogoE;"5Ɠ F ?U吕,,NAdPbߥYtzĥ.?1w> yʒM1+aىkSjXxʉ'?| YkT{_-.+]$nd#dݹ@[2#$QP'&jb?\ٗvq61[}IW1Bmc/W(^)ƨќCNӝ7%"%4Qvñ3x9 ! \fOlj7ӿ;xwh*a_]k-0d՟}ޞo 2؞^eNv QĻG2fQ# q;:fhn .4|,PBdɮ̱i &+hDi+fְc9K 1zH^YOy3 E[96MDq{]gvjgΕpu?@F+/q 1BsNGMBNo,ndt0z-ShbQp9ߋF4VI1~`ҹ34e dQ7cK?]ɯ^` 8zO1vv@kOHim;rYh{XjOPk-c)TʉDa &̦wroϊcjMm^V-WO'K%8vn^ I-PmXlxmO7yVrg7#!XU,tK>duzq0sdT1l =Ui0Ř"W=7Ae[˛2guGv܃s<MMTLv/Q$u^Wt{>r?Y$hHKm~F]V;;gSz^[TJWBQ;&`ȓ|(sb5-Z9=Ӿ.b+^ yp0@\ _o26.> 0lN^^enxɗ#(8n7cD=pmŵEnQ߰lD֥mQE_7yUtMa8?6~Ku=aZOFNWUvbdsvh=͢3fϼzq;%]6쏎j O6u& 2`zY-xָ=G w#wR}@@]sz[x6[BgC_\%{jbc 6~}[uqPQ<`) yȟHC~h3q8"ObOx<f,}V?Y gH"/iaZSM4^cDq\ pťtu\; ,gmijAڢY[{y1mHSLZb>%f4UҞ b.^(gLLA?1f"OgϦC}89{yWNcl(`ʾpO?oQWG ?fw<}tyA}V7㋳ܯz?y<?&M\>6ձ25&oGx@ŭ.C -Q]|i|:~ aC^NX}#dD n<:fi$[ Z^b5"\a&H4њm㻋=6d2nmXa1#fLrȿU&vrbq^&Vxz/!]@j]& EnDph=.*[T{+v NgiLJlܛ~C.C1 !Z^:]~7W1[ S]̎oۯJKb0_fo9Yn]Jy>S6x(i`՟Ӯ7z)Q'S=#ZtoEZswg%EsN051AQ8Rt\q;tOBҏx;A^9<)4C{@>|l% -#\u)D.v"pox*W4Wyx"Ѭ~/_mjˋ]ϗeym )}*~eU2za8ҒGqtaUO^Xי%G3[Q'yC;cIs注]F׋*viE'cھcnM{c?'"vZiģ"PJށ \ KIQv/.l+&| w,O15ۈ>;0 A9 7RC7-go\ٖ;-oSN*P]:3H_#,K5Z4-kWm+ e?y-y\+~|=,cPYyڏfMm>2 /wZ2ZJ~Ckmߠ5u|'4n'3~yg^~&QsCMv^V}Vz"tC߹r5a]oʹvuU|_~&Hc] 4Jo(kN6af]%qΏ'][YתUh_k%b٦ꉍp,-Yg=$'}98gxԌ]6[2'# ]$/èmF])!!qC91]I{|[>CﻸUM}N AQUb#A==FVߖ_􍮟#kXl+OBJT,$qp@ (޼m寷+;XGgMooLbwϷ9a'jg.NQGRt@cpOH~& %* 3GKwt Ǯw0~zZ&8i=qZ9GRx!䭿s}]N{gXp9 c>dJXy7H`7_^Emyޔh"~GF"*uv@}Bmz=rrk͚n_{ϲ?8GUҭg:];{5].3iVj\]O=#}-?QbOd>-<N7+75C;H҅bԖgU=1=s,ŅnV ~ֽ@fzr>Bۉ}SA=0"t:eGlQ6(Ҩ|A}~NBlR!ɺ/wzjsrŅw;t[zPb6S$cοuHqgKқG٫IfF.QtM1^-D|Qn9Ww3~2 N;[vVd|oRgwPa3BluC3]6W)c|%]7r[e=Z2u3D|G 챿v>KU~Ǎۻ*-pq9*W ߖv0{囟b{W%8'a ΨD4P3O~gu5b/ g~ɰ;zTiC3ҧjU?1FE;9K%>ݼy;_vDIt}I _nƤtY`K37m\Άvy'D3 '7AߎƓZ*qεT/1G&DxOfi,xI^A;x/nםY 5kįW5F cB&wC80qxwa>l]CoE_䦟oV5$uX$r9lUd@R=PÃsZ9<ڡ?d7ݾıJjv٦-ɰܿe'G2'xsFh??m6,DAloO^dt&Uʣe˻b TE/sw'prGt,,mluUQTZ)[`؄֙FKԝQ8-왯 !\z5Zgq&=LFһ\(f`Ǫ2]i*u\ $n#a-|e_P]h4ń~Dz6DB:9o?/g#6v38f(GzGOHfo.eA4r򔺦g_YM_U&피/QNcW6G 8FMmc:NxLN-l d~t#N5*#VV,aT~EVB#8pqYgMLlexq wXLOg[Υ/\(ՐߗI058ͶUdm ;[/z5=2sHю4:O,p4<\=j-RC'}4cW΀zo$d%mmdgy<6NP|y1c_h h@iZ]6aU6YԱ;,}0'Uj>Jl vA Iɱ^8 ipŒgȆ_4QŻ|sb"2yzڃ_e.=-yﱼ\].&YY6GZܶPcAϏK^Η#˘"?Q3fWldEMfߋ<.jW%s^_58֛M1ўoUBdJ }1_{UDKIF]vO941E>w4/g-v=kǟ͖^Re#J]yM턏lkج Q@]yŸFEy^Ʋfj6[-*SL,K^ԸȢ٥ḝ7`EQP$*Ke?Sq{t{W;`:JALқuU͝Ҭuz0pr s#": v;Ƙe1(1Vmq(fZ]1г}Mi\M'3@+er5G:*j_卪yt+a%F-{{WB-u? XZ[Y5,yܸ*E_jSO~qt(U9qr+cl5$*xN0?r;mFe|#v> if)ݟ?\\@JUjo`E1Tϒ1cO۾PaD~Lϋ,{rYS[BKkg>fՁ,;'UW~r'OMz+؜69aOtjmU.OwɌݺmeTftk\OW1Z:Qe\٩b5?v3-S"[,wy5DA=UIep=v3:%NgC_+.):w']QFbX'ruJiYeQ-srm TQ"gMas壝2ݭ?E:SA~w,mJ-ޫyZ Bva eݷsY#I~rvEcU,X؋x_tF~R t?qdFvӚ\v"jc 6g Q8W3o6i&[pDA45faAP4x@ǭXm\mϢJoUY_JrN{xHFq{,Q%8EOjI]g`ϏS۹ 1%=@sjV0VY">bO$N ~=۟ 1*+q;J3WugI} UTyI|ܝ#Y~eV%,?%n"ƼlecɻԥVO[H"(2Xo #Iwk67K3z#RrOk,Jdye63.NBL$e=7j x=yC5hJ"|v\l.4,WQlF򭗛;]7*[s&eRVm;wxW/kqXDF@~5PGѵ+, )ditznrS~\R4k\Lţj6,=+=ehF|!Z <`{)4'ݺR+m+#>)dı ˳&ݣUtFlb/%aР,K);O]͏[oZc f'17|"oӚ199쓦/ea kW\2M/gF dDJ'CC~\D}ycšMz,U}oRm/(cuhmL-XPa~L6[Y$p-{уeOѸcYe~.ۓQ W;oa4aB'j_V}t\TɖMϊP>@02slaޱ}˔a2{ '}L`sAw ݹ+xW쩦VO/.D#˰}OOMZ6AWfiosnڮD ^ J9aVmlVͶ8_M6x*32.a- `69QYU뵺%~gkK#P}D>dg;Qra7ءW] ۫S3-i)>v=Iy+ٙ,̷|B,Kc˸ݽ923_giu\6+:#x1o}SY{HJ޹/C?+OT7/?޷`@E:`L% 7?QE*?yRZۣ7դ5VJP]"?i//%Ss6G[<d+^W*R(d4xQ]btxp" rKĞ,)}\r=}Mj\t?b}w5r&:+?3c)'/ֿ2j$'iUϝ$#[nQ8iE5ů mlwZ}NJ DcS!G5<}Bȕ6g덐BNw\1eڻTM{K$̳;Ec@θ6w8K]GŨ~At/;=•Gt7-`z45opܽ(CHZ>Ee? -~_6_v5l)_o3<,e2R3$Ӕ]>xtvǗZ{;%g8b$XgH]uX)}% Kr}@S% 5EtA7& cOH>QŜHA~Ž153W\%kt?`ݢdn$ KhO(puݦ֧: ;c%̦2#J$㓖&6TQ&ݑ|M&!S:=e>z\Rއю{/d6cv "촇ifИ~ ӥւZuӍF+v*hBMq>W~+Sՙqi̜V+gl1VW+z,wO!p|/s'VAl3VH3r؍HB!eYy ]0 MoF^w[$l}}t½UfTŏt,qVmFyY0/ ط"aM#۝sg4q659 ֭mT)3|ro~@\ ~ܮe5(}QhÉ5JKJ0cC#/ 7gaLZ"Ȉ!o1J )wlj3 USz5rvW.#^UCq7l>cz}R/;}wt<7m'\h4U4~?w0ԲI#3btyGoq.B'WSIR}&/ܗj5į0&`)|H1P7 >ݮ]˸^Cڏ\6naf]uZwZw\IR:4󝌫68c ^+?D_*p^>N}sو}o %(2MY&gFCӉ`:gv/M]W"++ym1"gD*uvs`/V(h]]@tBQ\M儹1l;:6y)R" ɡJ'.vX-N$ȣeEEaK&QL=F ug#2éeS,C| u~ t=.2CvC޷P8{@ K]MW5- 3\ń%\p<0bqu8R|Tt4QRK&wh`y&_w֑طjvůek1#lY~$ZqXM~,oX},%jJ7 rOI"v6g'^)sB 7>+`ȯ di])y=KmsƔT2_&7y^?2#K;CoV HN-lz1G[qN)0<:7{%ML0QS->ʦݑfR0vStH͹$t]tӦ,rwVxF'FRQ,r tV6Sdg^|UbxP/(#lzӜj'bv_Sl6!5IzdS1"^j@ǁzFn xrQs?߸Dv1e_tEQ?]ĸ扭3R^RzqZ3Leq,E"E(IkD-l̍BʁFi ckƦuP{+bDSw|^Huȡc?WDl&W(FB }=Ҫ0%ƬHE4nc;Kz[Z>.dGg zoϲo\*iSg/C6k%W$VES:P<ա#sbt{AfB{mb7[ABn}>| J*nߖ=,7ńpWM)H>*5^=מ{Yu皜#L;6FL\31iYjF联4L. OcڿwLY'+?T^DlP;զ]v_nhEfqaI|+tsɍi$WoU.)LXG{,qC\Nޮqdw ^Cs~˷ $tiX vwAżh7\~qx2<=ËQ(|.t v]Yrp$ Mdȡa;|V73-6[?9[S#xyƞ=99UFJ}'"^yym NAW>g[ ^>-;] g|MCv߿ܽe Gڶgh,}ۙ/%oA~Id|GRZgGǤ;NQ΋&=n .p`]H8!<1fN]N>{^ḊjKRD$KZϪY`Xepr0c)e*-2Cϑ!s!ޚlM,_ȳ&݃c_7tV_rOL:史?[rN A/$bNF zJά@P>Q᭷ӾZ]&vF+ yRPzѲ{_TGvT60dro|Ie/PGihHc&ߩg*]+>4PvYֳ g*;uj \|΢x'IE Z9~9 Ч O8/ug!uIKe4{|=ڻRL(~5OƦU&M~D,I4pSV-ug={7W:Ax)Rqfj>#+8|)s pMB=i^盻p#[|>\5ƈ:I/3иw#BN ev1Ji$ wNX{0uG7YyHjRhr"IN7($6n!bIшugmd,-WgxP:["ƺ!? 346-ـdzB V"+2&9'h?%ZhrEe?H;IoP<$ᗮ?iVu2SK,f5FלlKu&=,%oy{ǏQ2Wd6ՑGv0DaWnK5RWgMCr5ǯ[!b\ْ%9d^hVͦ7rkL`83-}/bBƏ!,}nܝ\^9aYz 3`D2oټ)JxDjzKJCWxy:ouR\"͙ܫI3Zy~[ڽt+R}?+BiÖ|4:ۧYTbsY଀e-khOAP-lK(j)Ḷ  m;uQ-8[F! DESq7T8bB)R i\d6wTE.XzM%+h8%PfʬEE,_04Byo}5VLyI&XC>>㎨ iIZtR5;\qX$DFG0o㇍.kLuxm}Fs}먫v{"M7xl(OLEe"5j?emaYtlho^$7hzF!ۑhg˚!kTz%i TS4ʼ7%6-;WaI7=6+}@s1?y9X]4Gר'LQqTc F8mj.mZmSD۲C%BǸ/V_R@h"~zhZY;Fk*a)soQ7L)MLmEl/R3glezC}TC;9aAml|h6~twTGmW7H?G6-7$o4)\U@EW,ƕKb˔g;/l;{.)~kx7當&@U)FQn7PuY -f?ypXƒqAƈz .ahr#Ud +宿zmcI4pisn_M e67 X{ I.)] íS?>sԹּtXd%Z=|sqd5$g+qgl̤};ɀv/-\+AA+>_/cn>Õ(ku sY49UvWM>wJ?*A )y*^$43Ie̪wNj/ xl=7_LeH׿V"'ߠ'`rpxz0 |ȳ:zmeEȁaod~t$l[&#Ո49IXtכ(*Jp]> ru P6Ugkd/?b_YL2TUvD4yʇ 3MfPmbcɲ=I"@un9y 3Dr/#FOޢOj+[j5[jӫs5z="0TpfyLJ-h9$+5huNXޝRgzDm!fوMLtg=F6Utu~L:h^AŽ[ڔa3:o꠹87~3iŽTde19Erg;)mDvMdBFt8CǩÕ& '8"*:QjǾagsy-"qb$oܴeK/wgObko=8 ,Lmj8CLccB=?C:aGnqS1Zc,3֬XK$7_3$[HI7[/34Ԙ ey7X XI, NV$evC`7xx d\Lw_0H7NC\=Y0Oܶ #Ӝ@0{ߍs : !Ԇ8Mo:IOtdRW[i y b͞+CrMnOe؎h'=#Z-b|.;oư\\X? tRS_fK[r7.8FĒ/ '0VI̓]3sDj[>sܹ,&to@*Fec~奈]Q&~S3U\OlXF >ן"2$m W[BǵΔW rҬ]ުeYT)r|#Map']:âY` "U~>w9GѮ!?8ŧ޳@jz{bHp:TzC3_-FN %YU |l\W`粒&g[ȗnoݚw2Ҩpx5Kk{)p/q8p!(&oI)JhƨCTEdXôCtqVֿuI8U6aJwal$-z/<[t~m1g_&S*`| -f{,+H!cr -f>x&o]vԶdI;Ə{PILȬݑӠd QTh{5spk33 YpRug߳.o{pf.9gYU1sL0CU ˾z{`|G)!i|_: EƉ qJ|{:lxB(%@YYHL;5t#3J7 #2B^Wdz]&R6uF_&5Yc1ř׹*s 22r0mP:x hl%IzyZ-Fײo%zs>VE8OGکbc~s{+L\DgS%߾7.7Y͹d?"Է6~pQtK/`vp`1ej8QA{~Nv $Ōpm$ox DF/(Qc>l$8=12-7.SD$ 1S xM-#`s>ph%{)o3^ 'mӁJA6EaegHiz~&2^>܂Mzuh5bڷIl9#Q~cw*1~yv3}: bNÌ'O}QDw}٩)_M%~]g A$6l-&k?ll Dk(xr\]m&L_ ⭒baluΙje88Tt& 9QhQS[?@]XLs=QS` 72 n7ѵe{[tJYS#=1<4Х`}"I9hχ}a9/p @9aPrSniuwHfJ򝞀¸[_ ϓvssw8k1KiVE8ʽlW㋼hj9|7ܣg }qD3z ^lSX~$rr?rѷE@H[z;_%(줓(C~BXWE.rZy,p,bF{ YXόQG:mr&qO~n~ԱY~޹DXӡ*vRfT-*&GIjb`]R-ȍn{93r8x|b~](k~K p$tk'μ WƂy/q[ .L*X QѺ˲>1 8Fq"¹W`$>枱Og)քq@TScŞ|=^d綡5gͪ46tv߅^|B)")\V9VzKvM`dk%sӦCv[|lF#|1>NdքOΔ*?ٽ/fEin: 5OjR<1Dmצ2Qr Hԥi R_aܣ),ǿPos6w}=υcZћ& _ZJWfH_#kNjUrɍ,-G_>hUZ4#aRC*t[픲gHԽv=_t} .g@iڑ8`ƭNBqV}:?1IRZEm^kkK2 PH۷d{qM`)ʚ~L.hxCNV#R0il|ιX~ZΫz\qh MY 7,-@S׺)} "}[rG#Kbo\WFQ cjI=B1H=-*{De>$Y3Y!y>VI(jD vۃs$9v$iFh< ٍɿzO%Ac Yz)G8YJwM)2U*%$1w){hgZz\p t7ޮѧk^ #$_/ K:Vi< A!dJz!?!:ܧc6%̳Qf(|90GSwc @aihO7?X g||arD=' spO篡\FTGҿV~4lJz# zc /G0p%K!6xo̎1]aQ&՟nMT,3ʡyFQP*UưR[5SL)mnLܓF "!~x>?o.3O-a]ǟH,2DARl vRURQ#1 kտaW _R}T|K&3κQ<=>Lxat3'3(:pXº8"d)GӊNOar{C r >n"ut9jv4t3~KoLosYe?Ƿa=GRAƖò;j=ïG]ޓe&ې^4 p!\MO_xM{l'y#O9(rN܌Pdas/s"7Νzt[,ޙ,ܲ{u0+ٿ~"hS?8aoRjg2ӗOP:%s8^5$۱ex=>t#l>p]c~-xiADp1>o"?J Ի)wuہwl^8SX5\<ywWQ(},x YxI&w΄ڻ5 (y87;(!уJ5D! QmtԳ"jʏ f OIs?_FN o$To9bVM#ϼ[<9 u2N&+E 9C;CH&\'7)Z&)N V<31WGdaLZ#iؑSg3f@䑱2M^HaUS<91Z^hqyc4 MQ1^Ǝ\pvuN3e6KvkMpbݏ)Huw:OQŷTQY\,ڇgVL_-?zR R ~Ee{/\G/7ʿ%ŵO/ngL֭7 |/#cl w9d䮺43'1gW4sӣQI)C\ YI5 t4)*7ϫzaxd~6Rh m m*_"q:^~EA 6^$s-=(B} I:2V% Z `^V"g6*( [T6 :,K hHWG%U{ yC PuXevnF!Ez8M!R=3vu$̮/DLC 9SMc./OqXМGNfp^)a8ѻ T('Pu{e%hi]wk9/ZuʵExC'?kp@@u1esȺcXbw/ƈ3> x93P\A Bc:b3^۵)d, |kqjz yOE p ]5( /ʇRMhryJ1,QZ-_AW{cZI5,.ӉQMH>^&V8 OBFc;_QLB71/S;@k L1ezOMжV$jNg:8i5] cGd [>t$uv~ЁP"жm/,+*fyL#DB@}4|ə2ϖ(]s7e9YM'Cw\I@$vmK̈́\:O{4Zdž޴d?c.~x:Ldc5dac щ.gwDb2ZploꖄBp@?kwQxa3i5k֙^6/ښn[v ǟ]ҽ N|olB,/8޳Dȡ13^Y( Q 1yY*e"ȃ]-? C'ظ#'R}05T"sp c>3Gz;|~?vThɀ>œ4R E 2iIWd[ӛ./-E&jB2bq$`L=7Wፏ74!`z'TjHk> Q(a'_tiPs. d/-#kOxMOXXq"|4QEf23#L/[*uas]#5OKxtSsn_EKq' /}}I;"yy{g %opE!ġ^Lʫ7eZ̳ g)1Bg]7+:`D5>ϺsטNLٸ[Ujs;!]fTd7ЅJژcvOp ??G{~d-czϞ:Pz *SP,q_>;n5#|,Q0AY5ض^O.^nqBCu!.!Їe#Y߰\@X/gT[X-pѧ.E%X"XΪz~ô/{|i<0`D1#""߯*N v0eiHTjv,gE|2\zO㼍p񬯜7ǚHjAQ U 1߻y27i<^0"#yL?*j<~VMWǝLa^h(z>/L_UAʗOgx2-|YAM St\.HlkC͐f(Ao$rY3LoA.c“G}<4^=it@6,<& @Ih$Fy=W$ pƫt,)Y:h%NHpy9z!>~j8y:)b}4~+zZFC[24qW6ْMssc囹lw y}:XTyvj?ӈ~2'gxiOc揆G6eZQ]!7O&b/yEJrYxK 39rSScfkdv31a`.r}hסwv|H/r6Ie-ZޏIH8Ɠ.AfHH'&h w4HhmUJ4f)-G }9fT[pT3&g;ߪ _'0s)9GG/bKY륗}0bqr`7d*z` jV C!;EFL=,EES<؛c5/WJyĠ9e '-](24K6O08owm=\֥&[UB_Mܶǂu7¯ t^+!eOqTOiuG4tvD.}/h.T'e7e4֏9aAYyu\gZK~YSE$J0*Køg;[ŐFG>eErm޿2];7^8OdH%l_po]>5ۥl|KeRI?q0f OTuσ)|ϭGftA;h1]{%otFی4=onPl*65zq+vj0I"Ȉdi9xj@D୰.*ϸjMQdaHqRwEY(M87G*:> -'ߣԔ딩CwNDҡ}CP痎~0LQAF.N6ѕ}KXM8qtZw%pTjx.0A{8C C R%}xK̾rƭ9#CQZ'Ԙ(lsA c>jeo_u ߂>ߚ8%+!ﻐ /tͱFΙ{kU38F4ƿ@nQCک H%t8N/2kbnv \OCQ:Ȉg,-`uml<']z3^'S˸w$M汽27iqWO*Fb=һZ{5xOcq "@֫A|PMݹެwR3H)|=U@PC|HBymxrՙP)&ϔRc'M(w2~?Cv$U;\=o1 wbJx wwĵѦRoMR=r8Bb^cWbPG֕ė&DxųY/;)"o8ppg4pq^ͣ~3;uOD$ڜFϫC(^ldv~yl<WM}┄ቃ\Yc>?98qP?<ݚDnPF}Wp +(  vsɾ1 h6s56 )Kfn`.3cB:|?^' %vUה]♇'J"ѯAPp5TĦωb(ߔ' cJ7rrۿb;(Kl cPk+ oL/Q6#؞Rf9/B:;FmkW 牛'R#0Nv_ ..-y+\+S0Vq<-YJoG)Kƾ JrL/5s?#wSzl\A]o_4>;hxUc.6$.Ľ~σOuqAy|cRZ\lpK$);SZ?D>L2_ KsvU{࿏@apSbhh}웫X*D ]IŻ-fZl3ї'߱ʑH4G+4WOŁYu5f{Z@91[r o6#(eMg筪u,iDdE>7|8>7::_uCe̟'ղƚʥ@ˣ[{lrTX_դgRR7U܋]eYn#2pO@bx_wķkiLֺC\<,c~uC~;}N5NUSRG=zt;,.rzm 8 'ZMpr5eiCmGAUIz.ΚJsB<2w3{w\온o+ ytJw9w\Á`{N] CӾ.߹ql-L[hAދ3bNrh~>9-쀼n ;ȀTlܯ .rBWڽPaԮ0y@[t:~C0 #/0D%2.C5i'%Q h&^Jj2uQeBDʿư+^v9ԹJ8 'p}Z(5*y)׭íCy<.5)CvW[s1qoVuy+_R(nNpi.EjZoK`s Ol^zT|JF'+m\ f+ hqދרb,NV-k"l׫,7{\RnP~k*sR=_x3.FE6*I(bTA q" {TGsL{&U'<@j|* T* +gszj$puݑ37gu=di̷pN"p" yP;40r>{{(&ٮ줂ٲdܒ{:Ӈnw>F#3_ `sRp'6R,gݎAz#oWW 0znF07yafGg}HVh:Ca°O㵩ko Sf⧷{4OC/ތrcb!<$y.Gc%Gbߤ럇rҷUrُtTQO"KŃN/Z\FdQ}MF|ĥ hQ_7fV9_5S[VZj37IXKuš㫲7W6; Ѭ~aq[/l0&Y(֬C6J%m"E Fݝ+߬3xE$*AI4k1M ViߢΖiXK~;kuU7UKz;}\#٣H% `=?o36gBM#o .G'L`)Z9*Foh_"v3CGڮY-Y÷y1S65D /=g0&e: /qUOmǔd$sL$z\s(,$"Z% S :?c6s;3ۡM9mt3}#]_Dv\U}a?{Soү氃]L(;ȒWMK ~~ZEb-ʮ%_bau:#w(03和 laUXyIv-#}/b6eVu7WA"N7snD e -_Wo i&G#D8 _Ecs53Iមή*u'91.7rAbvHqmvڳydՔ f}Q>l0/܆r 1Z7}`D [W M6dr@%go}\|vIKNxf}ǭptzkY<ė \$Ƞ0PX(kHnt<Q뀙h'բc?9b$#XP-l=E熸lm/@u| 0|RlٚeR75oV) 2N028Wguth<^@Y? n_Kq?;~;^6V6čבc}& ߞl ! ņdSe:mrB J,c{9=[|8h:8j[ļe1>ӹYoou7խ0yOʣ uFAdx*P]/\RmlK6JvrYD##.G[ᄺ/&7wEZȤX>.L" =': Cj:Jj\inRrtf>K%~s2Fx*[}b>I a|:Wɩ$i2B\7$s2M=Nn x}ԗvba` 4Iwanoɮ'CC6O)scEo'-ީ̡g4ӲaԅZ2HUDZa~H\˪o/!XL=2Vva&/n6D'r+zOv- z qmYǖ_ey:L Nf{=y1̧՞?b2r?: m4(mOAM3fUYb/n[`b?1tv냜 SdhK)z4 9sR>鉟z ~ baT>ƉC㲷J(߱w!%u| oe.3ؗȺd+kZ^n@v-鰉ܝ/%Y-ar0r ~;lXYxVFmjz\+O&y~/b4WZR| 't>lO:Ԩ.؁TYVXbX9\̊{FAVall"n۽%ҳ9%+g~9txp@oI:Q2*:ne3 y[Tc8:Ϲ41~>4W]?͛ y&fWqıwsjoXhWϯYˈɻx|$Ysp[t*5=dTQ)SK{}wK2иlM>(By}\XqSRcOUsbM5UW-fUCdoLg$G}SIhмa)CO=;M黋#L]ja'eo>J4; 6՟f^l` qq]w?{VR11B(U1YhH7pDDy L6Z)5= y=R|. bғŃ'i$!ʣW%`Yzr}rmlE]ɜV<ϯ^iR5C,7_ޑx&'װԶ=T2-;cs,䎊Sk_*|݄QmBO }e5ۈzs8sCg0=U27HIQm34ewc!MV}=C_e7ZRa^|f/Jp60`= T/| N@·m^r0o6N.УS?C~ٵeeӸ#!C;$ʸ;p`uD9duuRkƍ_v+gLJNqrlʨ~:Z',}S.Ooȗp%wN H㸧\fx;] otR ̂PRfa4BxV/@J& ӲLzKftx&~FHJv7~[RI;6N<ɩ.]\wākZͨb)a6#:mC5=|ITp4<<v/J..v ]JHʄ["k:1Rڒ3eYXrkKѬIޢ `2oNLǽզI"ĹbOM`.k{_j(SR~mvTqlk{E ?17rT 0qL^rceo_spǧ ܆КJ6_/hea] L< Z"aˁ-mynpռ grUqs:EfE:(w{شFm?+:5lg2fsz6iL3#wq]: k%YB}5'JLɮ8Ќrū/~Qr]cUdmila9'1OhH5963g$Ǜ7L\c"[C̈`0]YE8x0tY g1;}ۖn]m [ׯWSTL ǣ2 tc,Ń*H Un1wb7*oLiUMyG;/ kr0iSQؼkt f}HˀɮL8pnVp=fnPH>܂l  (M q9k8 [USvQ2BХi鼨 fj]?f]c-8 7BP~ V"oi8<WMnObh%4#ߍQfĝ 44bsO6 \ktJC.g#rY(w+ E?s1?"N.v҅hƑd or\OEl'Cw}n9|x7Ovf ;$S "^ 󩱡orX__J%cu57wyc{:NHŴMڝNu0,K_5&?sE)  eheT::'#?r~I$k17KD$G*psr3Y2a9Rh{r@(`T< GI/"7 Gm2?UOQF5nݶ#/ё%!ճ|DaDj{k+B̖w1tHMRmR([&$s%ɚ+ OTztyXI-~s|'75w{;ȣ@f0$ K/3Ζ 7/ nhPOt)S}7`sR[;1ۊŔ|SKr})sy@ڄ m^:4#c1W_a&2E! ٙpcj}‰B&wTƳ?GWCTt'Y8=7J;jHګ"fM}p'KLYl7SfP'0-|H.q\=erVpK^_<^_φߑ8Y?oe7XbOѽ Kl-pA86J=2"{|D y2hk˙i:,Uz C퍳Cm2Qv:}D"i\eݼ1&>>/=rrxcI_"F9Cثi8"$|;[doyAl::3NI-CNbzϴTrg[}' ŏT^dS,>ePYj#`8iJimO7(D Vc&CE$Eӟ{=?a13[辯[YA'.~~GZ|OS2pq|%9,0)J0y+ԎRK;ڢ0Uc/ I=-Z҉\t* &/zaX 9p 47'47pƥqY?t)at[?[iRLN3cQ|k5m`Zo>C:<.nݹt2Q?Xuc>(śWwD6_Y_ɤW1i8aQ񒥔R$ = :V3"EUɚ9Y΅lQުDn8mhyit| 0*iE1q1fw3\wGʚbWwE5jLuC =d}.,Fܰc:RܜN#=)fO8v)>o"r/\,1(A.sNھd먱K,ÑOm+jv8g?&|Ϯ!gȃ (򠾝6N ޤRX军N_̙&Gʚ;MmK~^7禎 /z_xIIU/p⯊sF+~(;ZsSt.F0Y!A#qo2 Oe,wU-hu; kJd5/ \0MQ?M#ǚc mV+8X/E擩}E,Vkd{B_p.*zUu5:~Vyy:Yt+?C| {gTƷ-/$V-m2YSzKqTvU_0[̝վC\f3Ӻfy Zb`uSQjxr+sM> ν5kS qي݉MW|8|n Qzq379QHżOuH M<R#su'vйv;ziC!Rp.k bAoa=^]ߠr]\La%N<$i&IvJ,yiLZ)̵j=5v<  ɹ[0].Ӳ@fxB=QvV 3j"S3tfԺmw:[Vhr7iMb*iup3b'- N+{3 㓾!4›9&,ungm{ÞLOY*8-2Vn4K/c.q;]yB7X+eMz։F*Zc.6QbSDtjITG:O.\Ϸ-[ZacI\|S4!KjeGNz,jA!;&ϰykVD17$Ϛ" =;b(/jwn1X=~׈*jDؑTcEM91J~wN_1kMA"2cMTi Mٗ!d#vѤD>6g+FڥBr9I/#;QeN-^sRQ<~Qc50nĽb%E/,Z AceDM~"L,ٷ|cz"UtmCveH l-_-_,11:ow2Nw 5\>\XsMwz[< rc3Ϗv#~Z =D8ʁYai)6 ]eȫm׿0@1˓,kDu\>LQ]?3 eѐl\{z=;'ïe6Ni+egʖN$|yQRvľ.֟4z*^XY-x J'O_DUDͣZ3NOCvAD5F΋KUf'6 J a/wN޾ 仚!ğ9TR4BhoS T<6_\)uCu1y Xr]~wsoІVDTyVK)GI}}"~kS C5w/ !,2?PD~)؇"9٫j(!ntߤyZ.V/ %9a%Lc6 IӱxlǤ&8^2eN8G,IC5R|ϱ$ѕ;c XP_[8#gn۸| fi65';6qDM+罽a(y>.I2e)؂`c p!L!ky{/~ 36߲pNߪ#neuM+:ٍDy}T;*UbUx~ɗz9pPlm^XŁ(iQ] "rMpo_\:b[o}o+ꏪXrR*Xf)@J1H;vtaKqasQkq3>>Vg1z_(hguI-`kl:/Q/gn{WxDi@O銏+.k5` |;%"UGXȖ9,^ZrQRo']8u|;^β70&IH Y9gy-Ene:,H9)XRIL}zYTm %KY\?B^mipLbbM$p~Hh~x6m,NNf;S=-wK{Nf93TUh~yo72?bn/: =_iVb]R9dw0w˸ j'v6N/?hQp~"#h^ )UƮN*vci\-M O+ouYbO gMyJ[FVy~[/+bev̉4T6 }8uoӉѭ*my*{&D;TCվIFTZ#E/3+йMȚcb!,#+!$FNGYXQ>#Gav4+d϶؝UsL \CJE'T./Ψlho|zS.5oYƖsn8w NZ# v5ѧEsqOrMi XcՉ,֤DElщ;ØH9q3uv?܍ Nyy痔K3$? 3䞝ԠTO2*B =)ȃ+5LIcDl F{͈t/z9͚T/UbYWg+N;~" aEa=Kh[*Is-06LCdȕf ҏNؓ`_fYYku=tCpa?ݬ%HםkhbͶa7WX%*#ҍ%xH`{f'? gQ`bz[47'W[Z:5נ`0(P'T36bDޣ=)Nz[ me{nYٰ<\+>!8nĤ] |ȱ|28S}@<,k 3ۍFkze8;ro^vUkVIwfZلޏx0T:wB}_gE9L]<gf%VzGFfepɑ3=LtY֮s7C@gP@z% u$.l/=::!0_)´ '>\E8v9AbnλW@|Wp0NoL&vpRN)Ok\-32ڃc'/Bq{?iy_St: <})PdP t7 (‰ S\ݽ42ik4Q]r?*zq\LTmk>NCT)ޥXC dę;s{u,Rxa㧵X`B1?!2$٥ҡN@YE̍hݰOw&'jk31N#E>2tX8wW=MH_snǁ4iA=~nS\8LӚ]. :YK N]2 <(J|Ot\9zvec6rsxOǔ68Mv}sj홶T0ڻe#ujةֽ{eBbs޽u[H9}YhE!BV/,d~fu5s[{,LQ瑣<$[ +&US}?vaѐ"ǜYXd'jJ\ww#1?Xe|ku`)#|mE<;%Sn'?>n#]sǚypG\V)3YħCb-tm Ɇ mQ•&^Gxu+܁x c.Zˢ;[)ic 5-;<_ۧ$zkWdMboځ6o6Sq5bƹ=$UhPD8]^Gګy;9'1v}%,Uƍvw _-vc_bӊw:8cU;9S{l=&18b[ :og[w(q"޺BoЙbđ,TOٹgfEUIoشc'x;Ÿ"yd9A#/\9G8`<+R7VH/dk8B>#S8\Tn˜FB*:+||f^f>1;jkv60Z/3ZyN' oVIDޣY:[ɤ Ee1-\ NV֗=ш= L1zX$$ohS3{ePFVG8+|u##FRUpY}ٵĩ )=lDiV`|_lu暶 P'p,?u>R(xNwwm(yk#߄0ET3D n.DU"s w16ʍ%^*0t{^YYP6U{GwgiOqBƲ-f/| LnRHa2WLy׌w1)0md7XtR{WN6sA㪦03./ >RßWM“u=ˍ9aCU>Eҽi(NmF&?ݤdwzoW//r?El$@ wUi_;CۋEY<UD3RwJ+ xmø#+I\;yL $ ZK"L>LPƨ@mgO~/hG1b$$Y*EchuۂaZ(ʯ$ݎWh \*Y|8ƪ%9k_66 ԁ 'hʓ('itu\z!ZK,{(8,EZYs;e@IyTEw)(<-!%)ג_?a\ۡ<#w]ߞ؏5OV,)<玍̃N\ˌ=+ w ;"paԱSۤx)UI}a%#}귩i%ocOHvݰBL&4lb<ɯYW=\ UT`iɺk,y_92 ^4xkyWDu:QVsS}s6ُLAbQfvZΌ"I3JQK|Y]4=6Jcz26 k+YGwm[yExSyK*t۪ƧjdhGWh_P-2髞.~gإP T͝`boe/XLH G,Tf6B1HҞ[vT<1aHb+.J!2)!V)/PE/TU@֑O.ߟ JrnXʔ>|1oz_g_=M'ZY6.cӥkDAIDȟ5&P}w~g ޴ .-.ՍsjaTq&GS;A"d+=y/S'7 'm$p^\%EG%rfr մ0]֒+Piyz[c̯_>ZA~/XŅY z{5 3~ټ c\hmmٶni9ӉY_`bY?8>ASq|+7d:aر¨fRx_"$`ly$Pl='&NK%Ll?8atT´yÜ9fbt]Sxkƽs]rt`);[{ ҭuކKp[eF0Rz!rUpBe {ŏLk8)ٴk1Sd-O#6]j&0PCn~bv3& _mgUR Hkt%CBR(=^Fha޷-Gڠ;2o~I$tY|~[a\esh { @pB[f Cm tYQVCT\v/6ӄՉ=䕌=!{vt- xlIO,蘲^0$_dHޜ7'م] qd.4sGLZ3 >޴-z8v漯4BwtGus5eO;6}AQŐ\=_ݚ#zk>䵚kT"]m PKTLDh՗sȦp N2ҫ.h,lD״ܟC=}g01q(3(D%.(l6BZMmhc~]K23i9bs}1Wf^\5^cY<ڃJy)GTdՠd'Pxv4 XOX=-_zKO; J5Bbƣ:")~x3,0nc$C, ~2ۈySھ la擄NbrxGU1w FR-k 3j #ZWfOUD۝hCyRƩ}YU DBw!]jI~qyL;6i`g (Jf֛KR+sαzEOӜ?c}pKuXvE4Tݑv?9Hن`H$۬+!Q gӓs5kL1 /;,\1#r0i 5K!GUQsV>_ٳ[/Q?≄{ljp`X\HȤT7'u37Rє7c+h,3,bh/ Ȟ//lyfO&(ޓvMJ q83$呅,oFٳRƋL. `#O:~~ܾ7x~xI-Y/$YTѤ^h .BvٌT6'& ]-vU2y9 H:?1Rc5pvW*l+J^3^kKBڷi/r-~yig$tG>#^˶Q[A\5G`zusWg9don89tOO/305׿0=,NẆ\F6ar2i~It&s"D|\X`nZ%k^]WVYq(X`7vɘnB@1v{W5DZkĜ/8IpXFo9HC>c˸ O:nXˏh/i{cՃ!dvLlŏ >EF,?r<@ϯ41g)pDauImT@fijvZ|Js\ӄ:[]3x?wW!ds/&ДySx&?$uK߇GiY$muw~=F@ljuAQzMՈUN 2BϝgI5?q{tNas5 +%kYqi{ʕ'jﰻO̦͟`"̳jv(Tw.p;g!.ozIk:-JGj)Nú5=v|$[=*LxK3>)A'ᙝ{G'f ˭bkMHnQ辯l٪Tիϩ20GN4o8&(at5UsTTICS 39F_eG[Qn(>79ɺKe*INv{6fWHO%ᬆI%(s 4#[|xFN)RԤ'[lXk;Y-ڲ/nCczQ<[{ +3TUͬj}qUFuq)ڊC'@#9 θO wr2FkH>8ȿĴd=g8@pKˋr9NiZ/2]Yn4S#B<U'16Tkv"=>ؠSwD{ب 3d[|񆽛u0{jobł#X/nI2bON7KOs %7:sCy,K8ɟ=l'= bx d0ZOl=\쎤 K9ܾ6SjG/Ơ-ITLR]wĻcC;bK +3y"շΊOk ͍TXgy" zK: =Q.#db}Ggz^yNМTKx96;V*>MƏ6f0lr4;KfOғRc2NiјAhf]_iӚsxyܘX'捲q:wtF.I7T(7_-oU$W./B2:J7An"̎])M:v˦[9urZ9hȬۢO1nL4iwj9&s%]~]ofDZ:n"x&>К]hX W˲P3,G+>契?ɾ_Yh‚wβgQi!6W[{~_?-RKjgv-_\W. `ȹ%ز!qB¤Ji:ȏ ?-cSgaɨvjs9dUxT)I3[DDE^xM n#X=$C׸"-`ď^${1K&}%NonpG1I/DfPfHØfDB.t鄏f孭NnDhf<_~Xώ6/f;R. (=]>n#V( ǂrͺ^xevtYM5t_vF Qk2S|S(Z DI@o :M><\z㜺,e/Guw]Q9sIʼn$)ǮKhe yeG/9vk:p؟SCQ| fI-xΫǶ28s{] bkRsTqv!R*3mE=pИ^'e X&xV_.5635N/[ _"]X"ʈE1'M`ǔrlI֥#aLA]sfGDD`;giy]06rE{כմ*' }4 s'<"q~oF,}xb!XgwВXOM=z(N`b~J[f*BL^8Nh]'?&;DMH(RwFF IzWLoMtnIQH̕UTv,[nDEm^;7"vIPӗ#C2?ô3hF^i˵e;щV.[6u٠8cJsؑF6EےK qkNzBZ{ lFa_fssJaxӽ"uJe[錕pf&L~b4EHciϥ4 Uc6jݢ(v,םtf}(sdjn<.ٿF.IFVhOyвK"'^\!)I1h64C Xr/Sy4epxV5?PϜ5G!IBNg=l 2UzI͘5D45mMFğA_J;$d ?e;19)*xևo) Ǵ.6̷S;7݅E\o_6^MI_DBTV8sz+Le[]/﮷x)b,iEA 3f^E^/«fBw8'Cq,ttm7(-W$͆L Ej|;t珞r:ҌHK/ 32% [IuTq|u"o"Wg6{6LNQN r [}"@! @"U206L*b1_(APkGӜUSȢ'i1؟=*l$Wy֎㶄A=m>ݽ!;7F*>^"I|Q`|+-JJo}H:'m$⻄$>ۆ/*m/tg{0YΏQGIégOQmN]݃Endjh}]i*\ ѕL MDkU»K~6g&ii + jM (ؘz6WTf"MxZ*gRl\Ĉ7QG"SD_wxҞls2+"^[]''yT} O L[=t7n1c,e%`Șߣ2AJZ^DuNo[[>t>j>cs n{a=9321yRLCWD?N"Ԛd:ݗ|3štq&i*xldK|W5˞(y>>J2q-/dBJbJ%blqfо[ yz/ͺyF H]c9fe6=S<1@]nkd|9E{tFV`esjzScefD0~s]~?眗M6RVh~dxйhZp}1!BrP l:$%/uƷRjzX2"? ~hYsI,& u<,=7falr(}?x )^7mM1Mlѵ1Ohʿ6P7F>@pYv+{J})+laX Dx1v߶9󛣬o~o)ghX0LL{;_" qkQ?yGֵz9?AIŘz֑[r!-V9LUn:rBP{= rw[tkW%ꌔ$-4^ԡDˮǏɯc^ܖŖy$r3(4C.p ]<W ^Vщ3>jE[)?ϳuromJ~N:}M-}L?G[]rb[wA#e,:.t|@¨#v2;f h4qYSĶJR/V"Jd>ɡo6ӏuh8Qn$>8'786FVg,;`=]<:XwtF eLˎ94N5-mSTNhþ{C-r#ץ3>RZ^,TLimS{ҥq2bjJ6a 2_ʦɫ`zN~xP8-1xYkR$(Uק_!&YG &Q!jq1r8^ŮF>Zߘі;fNE73Xg>FOL$DnK yŝjGч-KwotT }O少 >di]4\˒~КӸw>)~)KsejJgat2ɼ_~ui_ȏ'*23ދ\OCp{`$Kq~1_>ɫoc3WYwvt{@],^'Iӈʽ]s%TP54k>JM9vƖޡvg1EX|E.‘ dgn̚kgcnOtbs|sS_|QD[Yׄc{;o۩{W 4¤XZӦt K++tUciyؽmxޱ.}Guy掂}OA-XKGN%&t8zK LiK襾 QR ƦyϦꝘXySi6_,ա9~maU\`[ _AgxcvyYѶs< ޚ&6Ӻgޑjtmo{`bãu.}f-Ͽ x犾#?7"S{SrpJWu(|_.]6;xq -:#D V?Y- cI?FHm9؄|jf=k*\;}ϳpFPW}){ d&ZV.AۺVSzr>J5$Ap~DQ.ciMJ&a ډE_ƿ4M ,(q64?!Fıv_QL|&1m T|x_˖M!ɨT`jq`c- &=؇4=^I̢eptQ[N|lM̧_n\0*O<ɝ@82\Գe \\nxI~uUmV#ȿ i76ŹWǪֻ_{SF5.-MGq.V8Fjo)j\g+ R)׽%/EbS)-',UQmΎx[T3I/J+ '\jo>ݠ)(+W_6pFumͩgC"#t,1`6E"a=*%2]Pֿ1l-ʵrfqfsk#dnIzcp:K[ IO駃RJ;Qgs?Î{g/:so>o^:÷UX^/V$f\5Y5/8[!/cA(&JItH⛱bF cQ1P--:ѺH!`'BdR;\P)Ty/vO9BRo{'PZ2?&pa8,%ӧ8[NҙA|SG]uD7vbL,mT ls0ŋR>+ffAqE4Ypkm4frlmme7wƲ|zvvmH6Y}.4.o,{<\ڝ*yz=%(i}g5:ӊփ6Ͼ_}}˻Ƿvh6:î=ƇgJ}|wnmE_wA̰r7lK+Aus.u5uyY׵Kf :dU5A{ h;v$nFUlV+gub91G`!U1FVrZn^yO,uy:9W&Wwt(4cvlWϟ@z7nt5γ}t@֨;*sy4@BviuPpo'Vۚ2Jԛ}o;;cTAGo}оZ;h U+u]csQSُ[6oc$(vֶk=nKyQCM@HKLCZO{=4 ѢG)u{Jit6l#q:OftVGۺC7˝zr6Ze5;sϸ{{l҃lnփ_{zho-|Vd/-UbW)3z/B"OFY|}U؏[u_m脯Wx<_Zc`NVZC%;lR-_n˹zTw^w]ϻ{sͷwOo}wNڥE NL^1넻l5dR>wv24}fy.@oPP5s:}4cE'[m=wOr<۱Gu_v 7v*HzFp{hڑ U_gIoljdBu=trMͪE AlˣHs;:nw.}gR/5/^-J"j#l қQAM r kZ-jMYHI>}NxUހW퉘ރ[2kjw]sue͒t֥i4꛵E;nsϙo95d`znͭYϷ)JIj .!Xs{y:}z}5 \M[Ͻ^B:WOu2Ұ--҆ѓWétRںGf7X)$tZe%ݺIq귭ucT^YQIk}oywhmFۣ!j͓3K]i$%OsHZBvATk2NxVi$%iGoة]Om>'v"nP{tkZ;ͥӥBہvi.[aK+ɒ_ov2EۃEfތ]&v>w49RRWw]()oNJ=otWLmE}}ED 4 (3\ Bz+N lvVqcQRu)NE6u>ٱ0oMtWӮJۻ+^xWr;vh L)i1@B& 24mM h4!DyFOSj ($#CH)I#= hd2AIړMO i @F@H@ hF  LjixTT$ڟf*$ Sd2i=Hښ24|4zq]?f8aQ$Kd8TJab!JKR$ޤej,jX? (x>=ŝbH;ASHJ+D d$԰K.eQJb'6qbؒ)PKI"AlreܲMX**)((`cUDeXё#jD $B!pQIT~RI\O>O鏓Unoink}k/ZqUG l"R[/fpM$hY-KoXlU4I4V[fmjmUj,C%tPaRZoux^;j4#s#gFEDi 1M7]6ck_f-zX[_nTBQŶƯ[mOW5IV |_ J *`/OkEl#[adɚ G87h_oxDD S F`rDvRtO$B2q)36G8#Cc ;gxPfeTpP1={#tqc|6Um- b$bנ(&1zA5to?e4<)#TG;PjĖ塉 gIߙ s+r9sݔ4KȘo(A1N&294i{d9w7䲧@X yl\vZ ƃdu/GVZVFm E=%|'/iNr'rNoo.&o')sFU\o6s?΍Əؒps\GI06 |+Eu9K΂@rɞsC{Al?T #QUYN8'&=I\3T1V~ &ȧfٱP1捀ǰk>3";ԕHѼU@+z'9t\ 'Sږ&r<8#8%tDV:S2bq|1iawq}y<<֭$b%zβ %Ǵ(W(imߝg6.mj79-N@ P9"uYGhǨѐ^15*㬁2vaIKYM8dbJ*3;ݲ.CoDXJĽ<^Du>&dzF{LAw܏(Xwj||i(V(cS Lv:YI (PSL0c۹46^GgHV9/g%&%aa,o/&UTU22~1ſʆSdk\#4K*@ǙkcO)FA]$` Y%ǿ>ycnI08 G]-nkwOy5%8> $yt#vqLJ?"~2ruŌ3Wb.),O}Z%fJ|7E20l-nYVTm8&k , 0=d&5ōVKksAb7e 2a/yǼ6ϗ>@}AĖn#A"2 4Nh8.B9 b`n޽ 0ݓ hȆ 8eu&Cu< Db\BP +n}v8vNS-0 H̤pn[<1l;z,s<{<&xg]L0ǁ1&= Y/'XyLJ7x;F+;N9 F`|Ηf-6掬_$g6}*cl\pQaĩN; m'XBkHNRgS"GIwaAMi=ݞjI"GĴNNL@NNMSIbHx Ѣq8A">a>1Bk阉<"xO9Y%zJM8WV/ DH8 6 ?<R;Eiҽ.LHzxFffr#t9qɊ }]:H89NjH@))8RPPL8f4&'M$c6>ǩ|LcwɳgM4114‘af7Q19נ%FILK>{jplQ_1ƷOCOTJL>b` ,3M0el&/rHBGY#?N͛S5=#ͅuA7s̑{Y9@_tZk5f|L8J(N|4wrIRp6Q.!\ yvs5u٫-b}E.>s0MIXՐ;{gӜ$ȪBM\鞗Y$.ƶG}afe5.qHS!(`b "\-./ԩR$ lcgZ#i H^44D2ƍPw: gmj>aXIe53 ͠]N|Ӗfi, &&`C3:@+S ΐ'9SM#f)dr`1 2CM"3}ؔp1y?=mZin36hyrqݜ_Db [1IJ.wQ'o9D16~.2 'u&[y+ԓOm'9?5Mg)*[o.9a1$geHBg(< O=q|;̎&t6%:% Ք ݙϼqYT4S(Mág>–=)eq0vy&乚 dPw\"i;6Fš ;&(\tD΢r/!STA#M|*Wd@:Fظn{ dRT Ifa6eh|_bajLf1%^lx9lp/é"ҳT #U5c}r)M/=rvXU"P>6{U`*Z!6y(kv$\,'eFH_Kf- )-rI$9xB@sWʸKjap+2N&& ܁ü;4 &$Yt_?S4 w'H-!0 "7KM$HUe$6ڕ\]NNC R;3OCcc:pNt-~Eʥh2<mql;36XrQ)l[8>2s񪬙l#ɓ*D%ɍ)>- ǀhbz:O'hK6kmS`!u5#p-+Ƚg&!XҧBu9Ibd[0Qvpwό3!E "#[H PjQZ Jj*T^S22S|]?  LY~\R}ȞWrِBN4nͳcɊvSg֬V6p8QP  6ӆ5!F֜؍P 3'}%HQWNJڡr*F<$+P&P8& pŸj'zY`[H3Iå RFYԓۃ>';G r 奒Y:r߼XUL+:A"R0y_|~.x( /g>eP5fh')2pr ̽=ׂ`fdyY_}`ysJ"K&qr͌UU3UT7|G#^MKɏ,]Cd @㉑;Bٛ1kA:Duݺ'Ds:v19YdDхon\z^qxrҺN2I(%ԸZ[/dJEo+mo;ٛ6hn20J8A{0搑1XyN N&%ҿ91\:y$&xma.ux;܍f< lw?;}if1=-볠uGJi;? Jyt#R.  Ds|xAZ-% " Q\^,M@j̨"7G>$H@C N]/O^v3AD e:@|GzT+Ө(A%y1,ő|r`S̟3fK\Lv#XT2V^ȲYQS2"w,Ŷfj Ҁ~N̘9p CXf4`DzX3o)܁{UWp6rOXIRSKk6˳RY5*tkN>?somY_aJJdtuszc8cmSKVvXҥjPǙeL9\>6r?Sw0Lxuq+nrrVO *D3.a>(Hptvl~ͿYaߴ BD"cVyqϫ"ًٴ:gP 85+6;VƎ&І?"zWU&T,Z*>̵mxjIp$BC0 :|$sCwOxn rLmvÎ;?v1OƎv4Kɝb!Pujپc9|Y쉄Vhg;mt'M>Jpz9Ͱ3 (T5ÓQHVe{Ƞn032җp} H kYքQAF^dXZn-./-$'y.bAp>K{$ԭ*n^isdξ"T" Ku0!{Xa`?;hM}y8q寁0Pqlb(O@[> J eQ(\iG(F\>*Lj<6m}79 [p؄a M:U$HI$ӷ.lhbs٢/PĊ TPg$ [r bK81ՎNo7^!0÷xv+YGK ~?9yejD{tl= z@Q?UH}bڷN*$2+)ÞR8󓄂Y߃I7 X:HvC X6?vcƓ~)=%ڛͺn:5?jH|X'#$O/ @3 إhnRS;K1 럷Kn$<=W{eN%3pTeQ[30k^S,r 8I>7)7R\|oK9J3* "{JHI$G[@c%o"{,ֆLF,ctu>rw`1بY# O{7$6DH# ǬG(eI$$( #䂶0y$19$,L`q{K2oB^F?J.f/ ϯLN$Թ1ajB5"1ݼ0aRwyVik$Cn+2>0q ѩ+!g)頻FIW)~HUDVˏAΩSwų]Бj!D)"ba)JQ"'ֈb"R94[ 8n҂,=hO4W5ytxuUW RK 1RE"QB`Is$y;^hQ('Ƅ:"EB"QcqavIhyH$=^= )(at003Pn%Uo^Nܜ9xd=ǎ1"qc c?5=t"ܮEily+eQ=cicTR-y1[&5m˥Xs#5,plap}tP!Yf$B#3 k H|HOm,&( SƴRǗ_q]kIo<(*g4^zO[!TbW(p r.=" Jh'.(pÊPC0FJP:[9x- kϕ PBQeQEYmzMos&ǶPKҠZD Ogra*ШҪS2bS_6U\L5WOJa:t")AH){G#A>Cc`C肝Yya|wYea ~cg r͂:ґCp,&uڗdNiԾɱX~%ⳮjyK< Og fc(!06$&gd 9b}xRJDy`9sgiΉ(q،9@$L& 7rUW;UUUa?Y)mmdGbLV*OS鲟~s= (UXUWɋXgWΆ'` [Y'.89EI'QO{DJR0G2d$qs_<0uk4oAaaIQwN9k;V7k8c$ 14J/:6;3Hk(L~Ϛ|\q {O"#wjF(4ἃ_Itpݿsje$(qZp},rbiS0 j7k_y-z1N9dC3v Dl# dpA$a D4 +Җն7lH I -pM/<ۺfxmT}jwK<] ־;߾1mZgO]VckZfy$uhna6("EQ4r,TU}~ֈq*ԈBZʚL*RdHM"YE,,rJIEU?RJwY,-I*T馥= iXT"5 2"TH)P0 Z1Fĭi-jimn%[XFTѴfuV]i38j,Y Y`Z`kPd-fmX*hi]*L,ɛeV{i٦-M0bmK5[Uy&I{*s?mԪ9~}\Luw5i˖FŃjV6XF*PWm=ݓZJcX-4L57ޮ밶%bdC7"JQ$b6_ץYJ-*id*Red[Uji VJIZEV*#jIWM%ZCkTIIIi[IQU3ZRq64b(;66SZ*2Dij*6:n%fZDsS%L3%I2TȋVH)RIV ʙaڑ9YlɊ `Dy@MF"g&|,YI)IsďH KI'T8*)7=k1i؊UJ@eh{a OddN,,(R}nBSBk6Kf֤ٚX}{vaJ6\s3yNxa-soOj hƲX{Z.8IR2D(X CY5ە$m k+0̥{gw׳_JtP\FdD>="cMid-R Td 1c~Q,7R3OpmC\?/Yb"h O[BՈ6i?&G,%daHeSdd(ZnGLjmaG#xl#+F.YU)NԃҒ 'J%&ԛA^l<%6jRE+^%LSj+ %F-ԶQky5ֺhٯ;VӴZj5-Z4,X}lL[Qʷ5Z+$ #eK oZ[kәsjJ$+$$%<;v*iQID-SQH I$R&쳮캚]mjW:jstםW5dQH hFc")bIVmQ㦮iYNmu}MwdN]B)nRn6ңfolD%F"E2hYLY)3U#J4Bz(Ap@4BEXhӻ!Qt (|=1VA;M?ϛgi )$ &"q#nA`C~$b`1">8I$C!\XTcE@3T'$h2`aʳwO/*!i2 y܄ Gv1þf?fM`7aɏfOrF.HQa9o6推&D# rFD mR !qf-Y0`DEhz79e4{m/:""+Vu,IUbL:kTl,L(}o`IZwZ:!;<]&3CD-HG"I'G?\PN?-*8 X`(N`0*Hu!-Frr *@:I Ӣy-EE@ijjZVmbRVU^tL*lM4tRд>MOD9ӭq CB S;X1qZXmRH1:`6""gGyܝF5LKV eZJ={$+|vyQ;&9&(L?H0l!!}EUU򿡍=^H'+ >!oAD-,"L4'Q(JYaFäDc^PF032hQYSf(@ 5/&59)6K5A4d.d4!vЂ~ .d_PQ_6UaP9"FrxB \`U$G#3gfL@W"3N7D*5<ӧ~o;'e,!MxtnM#r{0!))Lwif'DŽ11s& &9@E|ϴ po<;:K A1*x@_"rIl=c?ijvZ${Rn4Q@ H\&))HM cIeoߟ3Ԧ%db-BaBs4-DYpi]~W~ziB݃Z!},Enkz,-zOj*|]޿opr;ګswɼ*'t%Gx:&@]e!R EUXtU=[:,^b*qwhr&R?FX8Q ޏ/'\JH /HX^\25W* o\ |Vv F ~mF}sm&)]5<`= #K_>`Q>m:ĬgUal61E>l|I>@3і7s+N6L!KINe֥Lƀ9X-c$qny"0aGi)jX05l7w'ma7Q ãl47^-b'c6 ȥ͋q@}Q3)}O^(Z&pU|f%UW u;Ax$>k'ޮ%VZ|Ghb GG`3 WMAZD.$K2dx4*B$rH}Ϝc2QNgqL1iJQ2AH|(RTqWh\T/sA +m[M S)_zL'q045s&'Dm6g92e*~d139% `Iz9N)<)&?Qpмyil>U9og Q 0@OIQΒUW 8+,9병Q=ZٿJ4GQֳ\Z x#`c|2)IWQ,mᘢS% Atӑ436*$χq0#C}?q#_;C(X{FK?=,_r)aJ ԚekCpdaQaN>'*V"s #ʠV˜8 )1l4 p~;!1g]vbӝ7@rXV#A H RN}>yw{lyK">dco@Y"PT#MZuT(%[e]LSvj"ye?5{A<ދ=rO|TL:7h]r¤@k$U}ѡIwR 36LD2,?^ Nh8=gӬ8KǞ71$&"2?"A28qr50AT#6)a&@rD`QK]oG6t)1:KHtP2mЖG-#WPpߐz &loCDexjS|p5uF X MC PLsTe'k$cp܄@8AUH2NS|}eW 4\qZ'bMfBg\}p!' 3fe=HaK%q!F,!>!;A7~#2LlAo.3D 9P\ժ݇B0IaZB`Q dF:c)HW1*͞x97 $$q%IHO#oօuUG ئ DFYNJ_i%Α|:cʩ[+oU9ui`6E=f,,OyvqcV* qI2^idPH/JuvG7#o8;Nh+9kNǐ{>Lw#OxE m C 1kPu& .LpNF;Oft* ASa ~ATC>PнY?S'Kg; #SYk8bKh!6Ѩ]0]=dƒSw`QhD,>z# ]OhOE;`yDc @fffP99wh7RϙL!Pp4xhdO6x>fbӑwO!9OA4QI͊(;Hvb<;_q̖`"h7fhfKR/Qp+D, /iQ<,2 mTKJX'\N;wzد#DkoɷG3'<{{?kQvO/MR3&Mbdӈ A}E3 =0T"I"/!Ģzd΁'\JŞgܡ/gc̙e~A\nO;OW.=>/&G_Y>P b: 04D]mE0#M~ӖAAave0$$aF>Խ M'Aw7S.Kup~az Ei%-d ]]Gl*W'\V2 V%;px@́0xCePp,:d1!IZipXE (f !aSWY$HuXST^ؐ u, INnJ~B8i!60R"ңG~y $iEϒ,9g.eIZrSQD T%1>nN . _wJ>٦okd`ڀZ$%3MSd :>(u8L0Ș_:!>n5,Gy:# {O,{TXOQQMTE[!a( PA?oB-C1+y#{ۙb'~|+_:y?$) ݃WOg'Fd1-pK948{Y MSLM*8tjʐTv|ɃOvNgΐfY9@t(?oi٢Q>PxY'D|5$U/yFB|,j?@9-=w19h 'fD\0x=\Ʌf%ÍX.d7]%F["5I<lMPyLC.Q R~>N [9RMl dř9v.JIWTLCd v|޽zlm2=<Ғ~htN)?#ݭ*,Y c#f9C$9)_PDMDF|%gLyLFHyfm1c;yghp0SBM?cNq )B\v@oRӏ 9O:Oa[LE=l*^ %3س3:>(1ԗpL_UԊv6qXL5ř$_ QZEp(ҋ¸\"ZJ!9+,&rYF0cYEQ2s({ѡaH3bˮ[Wln|=)p^/.y%80hmY@쟮^L<);#(EX"O`X9y@ !wG-f|QQb 9O~b_jW <)4Ucϖ)Ut/FMX]v>+"jβ 壔_JaVRn%%p=0H qßV":=0[ESqo*O=X];S!?[mZpgň0kTY{2d'Xm5NSӘS4%BlLɧ ׯ~5HR 0TI"=aPLadl`jӦ07 ҷ›f0Y+2~D;2#F cG<4#7 K7&EGdk?κS;$zbͨGynGFLȿ@ gtU$X&,N&Q еB*]%I8h>bO7KLL^ݮ5(7Mir+m8a9دfy\fDd`Φ1JvUc3Ӈk=8u)ԫKc;c0 U$Օ 3C䬩 ?8 1#='17~TvY:8$俱^}~3Jx44fz< 13 o(8#u$sXø=(X-:dҞof2{5Yu']1OX{&L#>NfRXn(d1^2ī6WADu!x_ކ |@ɂԖ'FTA4YOyb :P>g!j@E!ќ əw7fo#B!Sُ!PUPfF$ԝɳ؜*J۶Mos593}?,mYÚa6LJAĩ,lK1+J䪤LdȘɉcJp))`N1I15Q"I( YX};01pG+pYEŸ#S(He[gcyXUB;dD0`!V)l'tz^c㣒>ǢTݜnR2֭N JE S 00t)DdN "0U|ydJ6n3}}'QV(+^ O`<:p')4F-&u##aW} :!e9F͕%WWypo]U )B@9'=.kԕB_,IrТd5w<@Ԅ65Iy`]r7%e׶˟6dJ9aacg-(UV>e݂ahV.Xd53A՝83ఉ$ *|f! 1&I#ۜ_ .& ANx3b=DhZҸ?i(=a 8!3;Zxh`C#=o=d?A `6 N"9DՀ@OW/SS 2D{I"}?c;Zxݍ+ P)ѪUPA%,1 -=^ dҘ"&]i2O1tȰ(Ч"$3 P'fhl#GY*9'Z†L"H"e~BVR|#F0M#1ܚsʌ_]FRŅ;!$Q&z'CaRqY%b4t_Y!IE>mN0+-g8*N Ȍ3dQJ^!;K'rFБZQ:;nQaй9K@Za^.yΏR2jyW'=F$=l$,o!̑nߙ;IeiO &DZBU sHACJ"M/FrIPbEdoURJ5.Ǹtp &ƒҡQ󺣮 Vԉ&pZP`~NYPJ"D:*8BeX ZDĶ'ļ85 Oqny N3 $Xr # c`<qh0QNLs©)lyiE.-0n1L0鄈u:|iK.A=wy쎑8֘tfWK<,lUr0Oq^IEc=_72aU1"WEm`E?*es (1h개>>j0*nSlbl*[u8̕ cv?rl99FfήmϩQ-=X nNxdò"!ĩ['!e32G[6^FhoxԗCYcsQFO'%&a/D+]r0lQ샎L8}!"HRD(oYa<8hs1Am(/80! *P)40(C4J-bBJ,(c -ԳBdX Q㰑j?2ϢpmZdH؁}@NM4Rts$ 0֝!0yfnLdv&0 X)Au<Ǥ-DP@1\GI9'h 0n23|-pf+V5 HaWa} !ФigPDpjմkѻ1yڬ:ƹb;6AoVC~0c!FuK>7@"?MXS &1EgD50CTGn`GpqƆ.RLGok7)G"3oTnFd /u;:C'Xsdr^V<AfR.<ƅ>a[o+΃=*OE״*"Ar:yFO#Cږ+!~ &le;Viq"2B^3+je`Ih7Io{9;ZdPw$:S,$.cll}Z|ꗤ*4ujA=}XTrHksV$oIu;qZrBl[ *++ZM@خ#}[+'o[^+WPE((1Zt+"\8Hu22?Ub0S2Zˍc(~2e+df7Q%;9Hlp:NY3b PR0r6s; q}#1`5 On`KG N'$~~auA޿HldRzQg 譑qxA5"?Rp4J^]̜y܀/n<$3MSGjF*?MaOtmݏm6g9a.y<@`wݭTi[K!}'|6 BdAöczl[&2;'G*Lxv,x|bF Q* # &V $e[W`X5P9h$%D+1Ld"L( تZG:0si`ճiyx6v cc:l!Nְy][/aəxqw[DI-n =]0>.NKߴ} @eؓUMflnB4?4\̃ E0hnt !} `Ӽbǐ|F8aͫm+32Ambѐ%AT/P~p+6B4m!$uYY, MExL#QU"܈cylM^v)2 ͩq#amjJ pp5+Kt56ͤZAS&&C R<尧\! m3Ki\WLB1GbNcKHԁ.>y1a. 1ܺE5kJ4@1%4 S# c`OXH';K| yaxej4H:6PQiEoı?y,\FqV0nX ) s{:OzϪoG,_D:Tg\5d I :8v4y\`@w7C""1Gg1ʧ ^ ꖑzcN3jiɇr[2vnޖkF{4!$n8Ϧ ~3+FBJA%Ho&R#n^N!=n j=b`T9C3IURN8B='DrBi q6m:,1 ~}8Vxˋ7=^1h(%w3`)BRbX@dxDp]5v  1EGo/^5#HĈpe4\y(#y`kܨ!nobPhV'f)_F?ԩ;Aa(DĦ$=D9/8j=Z ̆65-T^4L6ƀhS"TDK.4$$0,eR\+| F AQ@QAiI ~Qii0B=Gqسӫ&fXŕ- pe`䳌9 Ԑ9KaAa:b'b\>j:Ld*2:uH]Ԇ-ҩy LDНi)'#{ARJ̼=%֒+m"VEe#xJd:&&^OC'*;(= ?s}) 8hSR%*|<UUUU_g1&[qz>Mܞ~r"_)TzRgpA+8,&lߩ 08ҋȜLsCWg VDFӅ|PBFqJUfJAzg-Ha;^>v*y]a¹J7 R1hNm3rB״x!]J(,ұObEXxpaҴ `\Vst1,Laqk޻VmV2ƊŚ(u@Ƹ+9;V+&y>_ɛDz?uMLWUYJ6Lt/~n.뻽?fvvf]@mD< @+($Sr Q]P0!DjĊ Q4cC13f3 @{1ضVp0{b%_¦$2TMո poEQJX)ڪK\%=S´Lf*rqhŖDW H2LRc,4z_:{w}UUfJ6ֱ$i%'-rNP&4Rh9r S ^nTIgL* GbsIfRNl(ybypS?GH-p9cN{7g\5!c۱j;A!&GAd(d8hYN90x/r!N7fi O@deze3:`(,~t0M)Ds9 {oXF@DG'2fuUfĭH&rd~HXPUD0S3TN&"P } uJq4SEc- /,FJp k,a4Ȝ j}cL.!a< [DPw`F7n񽦢J剸: r8s,-"g'&%G[-?RIiOkl-MIżLx"' ZH=j"96am )Xt$ň,,ctʑ)`\UxL9!Ҏp*qX:/m`t^{E'b=.)N|;q^ Nab6$+XH4d+Lt$X&DWZhry$wg`Xg?R~t:kN;Qw8u'Ƶl?soCi}=b2W˲pF!OB^( K&dRvg^I3dA6҅мdL9y?-)Qkm,w|A_99KmkE c G|t}WcBD"Nи9"kVa pc0Al- !??=IBc>*4/a൐Yy) u)I!-hi>q*!HU 9THӱCYuzH 䭃_M v<+G;ڏw/>܌+ Afhr` (c `L;0s-nD [G YVBL!-Ƙ4P9|kxl )1Xe qVJlNr9 ?o{Yn n"Cshh>kyWʻD('uy(5ڲME :Ԗ `ߍ<#*i֮tǘlhc`TЩSFOȨiU2$)wɈ(=Gy0n|ANT.Ԑ cX;ݍ55spwYRvwC{#6j AVL N&WA:r7FreKLBs؝eG'(a`n{u][Y^CNAAYb14M Nꕦ!`^=❒;S4ӫO !p ŀeNH((Lx䜈dQ4S\9<]PP6<ÆQ# EtuT2?8=N 'q; hEh00><hlOO(m6ncf%gyJY :C,{u}_{]7:T @ 5h!7f6=,:H'%0MR@z l8UXFZ߫nOʅ-%FʀuW\FayJL=S@{zDg9'wP!ucó$v8MFp;Oه.FCa aY18Poqag'G9z;zŒQV(Ed)DuLyQDi,FN8vS9 a(cQBe`ǕG##*h40NJ1U'P.ܤ-^^dTeYbt:y"Z{l7M۵0p#xz!4H`Hq>87l1CTjGԸ2Aź/c aTp,hlx1:%i6TquHs0XBuC#YhԪXɲb(i0iOe:E I\ЃaQD̄TzY+ sz"(rc<&utqu7uwl>SYnØFDFJ,$I05eE{4YM>Iի?8;%@  ac 81$a`A)tZ2A(^ƞyՌ}m)^]^m9%9 8HJMV2 @>diYu@~<|FδZد;)0~^#ؚ>#E̘:xR ZȀŹ3殱2M|Q+hfE~Q1z|;Wcp0m]%[csX` ^Vxa,&EI2,ۛZ4}'Kl%vbb{K7HFCډ0d,XcΦVgRG HxT`(i#PQ n)9Ng)$eAjP[ OuL9]H >0_kh^:H9c Y=A9Xu^ Jk@s]BT pdR-.E*G] ddd#K>sJrDi`y:Y3#ؑj 0,Ġ1e&*-Cq!\U96h3 JmA22&㓇 YDȡSƋi s53aoX2&Y0U2c޽0A2`b0(_1XAT/~Χr3ڂsǾVjV 12U>{Qtu5'ŎPsC_{ICeIQ #(B#TG]?n6V&̂]{(3؁zNI28>h};1Co=OS&Q:p3s8Z$" lQ0H:[.Λ-:u2OP畓dE2KsY;qk>eAcH=c獴\ OH&c'!2pFێX޲Ů;s&h\d79K&lgbԕ3m̗ لY%9`RgPy1C)7Cf1 mB)E9/Dt1^vS+r‚C "dMeAn5㈜5 1;t Ȍ0FF R-"6orGoZ7[mG  nJ7НΆC HQoED|M7R?`ayTXƋ(}h:-NI%]W XAccU첟 H= 'sqaB4tG-/٬:?PnxL0hYQB#{" b dHY"ˇadneAn+6 /`C$ p !Y!eFEę@3L#.|!ɭ#EԹܖaچo,41K~S;tGck) ,mZΜJ}NFTi#&sʎD/aY]34.Ztfg24oCȣSCY^r{M<ӃM=CIi V&?'6Zɝ(#gV 'a ^Xx`%as'ZvbkqE })kqՏ 8I$vb0Z(!ISϻ:.p -!qF) KA@8ɏXT14clI:p9%tI!e.hOF`E*c'7cijn"N2C;zCXO*7 '9Z0Fz䃠âE/E`;#nh#Ø'h9R>nl{RJoz9 t1@ar`X+PR ת:9c>FG]eH8s984~vApƁؔl AqZlYn{!f@+rJǿ=r6I<`"`%J; ndeY yMO% h,"d1.8Bu8WXT h| T)!_MbEƘ/{뽵~}jg:s/儭ѿKY؉8fޘEǁ"Cٱ| PmʿL:Ó#0}k+/Vl^Ȗab~ fHy9;2ޔ)y )7yP9JJ GXMEyz<="bXai`) qH\ 7ZSd9N>B?'ӣE0~3 }!؂=l[hnliUu3HÖ8جD"x89jA~"X+,8IcihI <5(CVqw'-GQQfn,t|Pe%T3!h14alm0݆3B#Nw zahe1'~1!8ooIuFl}~ X$%RT ҈N2+$G.zӺC/ $%!Z=W/qjE+eƥH-B S)cHXD$tdB፿2ؤ2#htۮVGE"0,ܽ.JMXf_i9dx*$iQG0j pyP4 ZЦ MCZ)7 xZhZ$唌01|F\qt U IPyfI :P.%-,=GVpI͇<#d7Z?ANE,Z'm_<KKA r &kRBGela:f -v9!\tAE TǗ+c sxơ1sH}Efr2 ApyRjZEC/ kICdvmE{ĭ@=G!%F)a- CJ܃_:++t}/ҜF- @lAȴGZ9+=ǓJr3hDd4Xz' ULwF駀P}DCv~4W`4 }mCax#0)_wR4!^ Vrގ$: AȽ=ϴ j46w埈 yfO#n` 8fP(FD,J!, d")Puhh;\TR5:8+|fdZLv1s}@4'P٫5ER^Tz (JN}s@/hȉ\NE2k#>q$?7"Ҳtzw>`ҷٛˡB hPpZ|?Ƕ"K|>j 7=;V8pEnR]~)zyx8aC'n/όRu=ME$ Ȩ+tLi~oo?" 摿 18-dӖ,8?o +n6ܻE7(p_KJ!)Ϻ=$iӿZ1}h¡#il9¡ z9*ZN!A[B}%G]Чad]R\BYfdԘoZR({=g'oz1Hђyߺhra,r7o*w⩾1V'y6>s-x7<JR%1Lz=X,֗Sd#ׇB{fJ\/kɥ'p'ǘ>rC+v>}ݰZpr[ͮϳ/:y3q8̒pc'^KxTqF(kb &7sSb2\ @GP0Y%m#<B$ZmMm؟/6PFtY !IB FI# B2Ϭ< ñ3^aF ob6AHA#ݓX:>+10T;JPmyȬ="ta!Hf1j3GW$(<[׭N:ą"ʎxzOyzJ6 sR>~BLFc6ױJuJjRi 9922] _1IpV0nꆦq6Pg䂲*q",4]cMuhҘGz7q[fJR˳-yݝO4qILPJ<-DF@aZ@I`I\|PDu#>ѣ.;DΞï x春H"{GSbbJ]R>'/@QLB4Ml+z#y+u0H+Bq RbC~Ujy4E꩟'q#08 }9̸@rIq۪krrrS[6vgTUDZC6Lc-sAc]UYXvSv 4RS:8$ lR9&CsGVzիXU[0N&VX='H3yW؃ւG0 P \ xEH<1Sm>@ &sGB"*,?C!/LElm^3qh1a\m#rA:$snzf^cjρ3bKbuFe4~n\@p8NB'iNb=AIșx;ܘ1c> 1g݌sc\k:M1alhݳg1zi7.bcjؤY1ws:i2ftح##1>9L|~sÛLC)\ר 1[ypu-._AURo8%6[^袿w[)Vn_|`~:rbZX)1ڭvM}mܴjZҬԙSjLUme-sQѢ%UY,L9)2X1cU+TJz[k=iN%&rT\29 7V,d,G1Ud$Gة,§DI5bJq#*!mdFBS+PѬLY)2U(,4OKtvelQcVہY! :8mU)*9`N*)-*U8"/()u\gH˯/\  /lȊAW/@&>T(2sȄu=!]=7/pq6Cfc߹!yw}_rХ^լn:xh>Z~XtSK w,_[ *q%L|z^R% J~]u sÀ$!~A `\rcU%7VMJGƨmG( q="LMgb*Q`6%F0 D+*ET6wG_eWE=s$&EYQЖ?jlŗLP aN!M:peƻ火,s\N˩}ky hWչDjxKvrgqx;ݟ뮎*ZQUY_6\$ݭ%y5Y^o7zWR$X\*temiQHlH6%5MuzUJ۶^lZdK#K8B1"U?`wTP}G F!t` "AYK ӰL(_%]_WT%%cyRS4\׸hlTP6cFɺ)U߆-G+dN 覇|I<*J P* VRHU˞!Gxv!blnYua8j,)8伶N Q̐jۄZu42p*Ie<@kD0|#,`$YTv{"viЈ߽;4o 5%XO /ԔiX$cPB{d1cd$!DG0F9Z)HM!&C *L*EJl%@/YҌc ewǢ;P; dvwzZl鍫yhq,Pp,V=0,"ࢇn%Sb!CqB1<! 4);9<0ibL{=0{pr2Or  vƘĚǩIJK%8(Nӆe'JH*S !c1O~ruDMq燌< 8|8N%ǝy{n'  !8)Ohwz=xTd]i7JnRo`--WLq<јTM{bi%Y|hddFPM& S=':1$A%Y͜5 )a9)qJ_nE!<,f ̍Ck'AN@tK9,G)BSLXA(%ŘEHD0YE]C%(,q;TMqyp0SDe--NMim؉J^CΘC;)ǤL QS,/%=PadqG 13rNK6AلXb(s(Ԫ4XCL^ߧ!j2dJU,X-KaDU2", {&lLҦbYE)[i[,*F:ƫ eEo2,dUEYVGTnn'K]SIe]YjL,ZE)ɥy$jQ]%=1cK#C4MXi#B6lv\_Ԥ3 IJYVvc&co^nQN N)[^$ v?yJ^,K$\r8u8!Q>C$" C&8ʏ]ia‘#Xn2ϫ,HAB=fĐtjV}kzFC⡠Nҹq(=I$!$ Q9$gʤ(M|'Kɤ)SXiRZo)Ԅ$(#'dնFY,;¿wFp,@쁘ސMV2r1ٕ:FɄmr̥g:YT(h>cx rTS9G&uh0Ѳ:82#$AFe1Z4,ݕFLsl f&3Fr hqv`u6ḛ ETU#rE3gdFL{ڎRP15#>2b s ig)H18T?UFrN 54f XClV*Fi&:2EE% 94[ͻ}2czi931^)nc9X?`pQTU C04Jz9ٵݹ݆&cYVTaI(ne)!J+75%}9xl̀0?S8ђghiHMUeJ$FLGiuj(|v6n  kU0ZR( &U_ov ]w]wI0?D4IRl y:&|TY&&*H4(Y j>!=p䓩dEJ1  H,hz.#u!<OW87:1U;BbRA`f")eJH(,A9k$7Q i]X50Ub>7M7uo 1%lnKp+  uݩYUYUsM57{SbbUUf4VI1f7K(4T}! o%"۶M3Wk׏5yHK'Y2W^dX!;#,lJؕ>dG2dI5M0!b9bBlL0J'"3&Z0zf4ciF-V`H+y;6y;n)7d6QdsnyNNSVp4"B#MJ<`&`Ӟ6YQZe-eZV*b옭)7NbTjR# ˁ㵔K Rqn6bPC!Co0,4int0 EŲHn80)e'k/ƨvhrZUUdǥ']]0Jz+|X2brimx 5.$iF-ݸVl[&l !ʃ2i> hL~H[WMw\[rG2v! 8tyYVZO;-y'S*ʩdԨ,`V0T kmm!VsP@' |1TV?ӞUVȲK$ 1X1F 1Fb?q[0R5tCliAZb$VZMe6ZLhYEI7{i'ZUe*QJgpӫ''7=/֬q,B'QEPV3zz)$HCk;>NF8F%BYR,>x@j H@W^#x7}xuM*e-Nv(3 pYtx- jZ~6*. :Mj 6 &}&$MDvmU$HbtD 0銂nmc]\\;p'`h0k8u<e,)N4 ʡAR((*&U/s{=NV|I{Äf( Nn`9Gz'(;*:ن[>[i~565[Mnұ8oתБ4m3jC2/\+IЪUbŐlTM.gu9?K) &\av(9sp~bEjlMI+:;n:c'9MeCW>Gܵ?#SS0Wf@AF&BV8 P=\: -@)>ģMdp*x &>_5ORWD{pOtH*\ffaXajc aA 8^&gj9Ȏ%l{ s/bTi̊Mq sHoZ͐\ה)Af*r?}SO ~/ټs${Ebs B }9 (.Tk%*^* \FpCc223jSR6QIfWAD.3ݷi~0}DI_wLZ۔mMXq,&)bid!DEjЖ15~ǧR9P '?%'Pfi*R%TJJ"xlE@܄xIv#Ҧ+1@&KipZH ) -T9g?^:*=4:w~9v%)VET!Ex:!S/<9!/hX6AUiZya1]{FDB=2Ȣ5lT>mPRP*xB!{?ÙAdorHm"1@WȬ$ֆx^4TUD1km&q3 ]xinoR}2FUKrJN3SŜ#yGv@V]D-B{dc+8X>&' oC; `ckXfYHW)$ds>1Rc),:QG" Cdvlك5AMefA*'_saN]ϫ/ӁGO>7N6NoOM{C!Ҕtہ( [\ILU*woyD :xQ:#A^î3&K*sx"&S}L6"a;a"!'(:,~FJP~Of )O7Y(b$]-Ui$ÑtCtBuH"tF?|nl\^٠F S1s5Z7t;Sz-ZKlXfq"~tTRs'/# 8D=+ Jr` aB K 2.FA((i-7}',%&(<ҍ$DZ_fa'\{7NeE ) 0O,$26Ial?6#P!7]@s#"KO"caLL$@5a98eaoB /3#,!p:kBMreRϠ8-mK%K<_ ]YMXmɎ<;I%N”yI.KA iafEEdQr900^31yT¸:q l R-eL~PIWBm%zW2K7zE+@"2=HyzmqtXDAbePx9yKyqG3 w*='-?ag9T:y ڞIݾa.;(6D|Ϥ OLYäS@]7}#Mo}Oi;ȃ _)v1 3'I3KYw☴tRefPŹ8He.2/7gmӭlO Yf y ?d%]ˌl MUa-GD*u3x rr#9=[`:$JGN3LESb!h GzłxKٻ>a3NkB[4.L/GBx aoD+0V0?%۷vA^H xN cqKs4"j\?p60! \ @y<(?ÀlseȼdQ0Ho'Z~m(U L BB> zW3qiVN U1JuаH0"B $0n@Hs%DUR)Zxi ?WuK0:y@̙ .K<D `[+]+S8R*w E=t=saĤ+lv2uapX[ ;!A1>9 [)4Rt!ƓȒw7 qFʫC +F>J&9Y52"fQsq#d}bKQ@LL3 OK6D ŒC_7u}qfl.$g3/°Ĉ.!(_amyU#[o>rT3Yk<<@az?vۭg۞LP*Q["20Ur9j L+oP=RAj,F91<o;kl"K1='Qao%AW"r֝]qiLM33P݇Bf~;kp'8h86X*T1x#*ش_cbJS%%neITM#UE,>WMÛB2j]0Ecct k!4r`}vWn\ޘ?~{ֺUhgfZbӧ[Iyԍ8~oi;%lGb8*KP K;O:P7AA5w 7LVζYE}0@zbzy<+|`r~hD?_8\U"w,ڌv'I_ke +); ? .Z8b0 <3 ܂? })/L## ~ Iּ_fL٬(Z朤ͻǿ+(pb=H&'*cR:AV귴XNUBF,h(U̬0"ħ4贝b+MBk,^?mƍ&uUU Zf's*{-!`!jOav/ `gIi%ʞȊF2l~4Bz؁D b9XMqyD8˭:Wf֊*e?NE;@5#v DNiIsdr*.V"ͨIaBDK\/Þ!xSJeҋI&O@'b9HV+TNxI4%޶GV- ;#o x.99u+sS'/Hw?[fGg3Nx!y? IP䲾u#E?Rd" >pDЬ/ޱtZ;d*˴$3(cPOtAEAfM;cU ^p:}' ?Ostݩdw }?. tOrD!N0Y^fE CZ2i+ӫ3Ԣ~f]fcu '$=|[>ٍSrPDʈ? վm~ѳPA_w;X5`iG/b2sSC0uM871dUDަ&LDId((Le|O>`} pg]2GƾP¥P*Fd9F?#Ѡo)\}a@1H)J8v&,XbdO?Qh> ~'y!<7G0QVN75ohmc̀ENv1vvܓ6 {Zi~`dD!5?oO~ϺP G><{CB$O"I2꼍82;13=E$NJp$T(('px0C*?HDnqUJ~d1b+DB?vv V%/sEMSc-z2rBC1f1!{}( Xixo@ٰvwFz E8mB}dV1XWcu &%)F:?0j hN1x1H ?ȃ>^]]˝sz1UTW,Gͧ$|a68iiz][}fAY^W(u2"cB^Q ?{G'0 Cpq<=gg@~uۼ;;˕12V n ׇτ^On?HCxdEl4K7y F@l܌9) 4$c9)I( t:p(aOboƫ)FA s@) mG `yZ8A#ֵ JIEc)'ΚEԃz\EbyQfþ2&hT K8ziE @bkNB);3k4" |F>xibEMHQ"RrkŲ-HU]4RNwJ٧t`el,h2_yqsPoc8@iXG8ľ@PpS35*)VXʫaCLW9yZ,PD`nm D6VD93'꥜˹3yc#E ̹ ̋lgd]qFsz0|=j3!"V)#~%=<0h0aUFN}Zg2ȥif6qB]Τ 2玤e֑GW}:.L2)ĢAvO&1g ?oO|O[o|C LI, lr_)x8cw ttղ;=AE/;fmŒ8$%~g:}?" XSF=Glu(qdZHQ]9T+P qE4i-%^iX6V|)uA,NqRuX;Y%fHMq\1"5JiFxY]1`Y:Ĩ1:0U&+.6zr`yُCd|RM2K $e32".ZmG$)-~C~REJsCW e#o z44JP{ϐmH[q˙Fs#^"萬AHb%5oiJة1;o0b%% CĂKs02>ptE<>}iA < U#U{% ؊fDAgh?E W`f3N#`ebǭR#gI VecMί#| QM0PC =~p3kHv]Ql|<=-;L կ ~U+U3ؘ[2T'[(* Kҩ _9 %JUAʝZC"|ϥ攵i~ݱn#<2+9 TH0$utŚ[(?ɷ~o&M͆b;t'sK[+Ιg nG#A[`E6 -S-*K%흁AB0 G>cŎ}#;/6fCQtsW/aw )蝹o%RDOC~v)bhLBB |V8CV cMKG%4ُCո[0ӆJepˋ~z<흞.U}]<?-ܵ AdlAP)>(z?t$79 I,(idbi*9$O)#K1[S'8F[J-b >qcsRHgG ^=rlf}h>va5|woeC9N9϶mmeS~iv\KA$7 kEyNă$B =hy:i&f =hLo(\9D1AL+^rLFIJtEsI;d=:|TGPw3Bym[Os^1S,Lr ށ8^r$L?s;Vx|+1vVjC[^1}_1蠜vkn.kJnҫ.{f~&8aAt ʫDQL0ӓ>>C+=JDw\JO`Q܋&s+/_Y!Gg{.2\ Jt E2"^q\.o% n)igaJu ֲ!̹|'_cuRjϼ湦77O9j}m'LtJB?b91JI%Yxs 6& BY;AhAfӝU)}{M_3I=+G k=Ҙ|#GVS&Mf=a/f*#_ {Yv ^P_QG=M/2?wlS'.q;.^cx+~5= t҈xiӣt7BxmVe#`̿7 2+G]__dAHq?57p74G+>~M>CAc oWezKCӓIN026Ł #j:ҤyH*gEKğ@MQc8P՘Y_;>O1lQ 1/$%>t)S'<" &w >V2Y@j4lN="| ԀHH)"|^[&MJk%bAZ-Mݙٝݙr0žJD}x5ZtYmӰe}kJJ'4ҽEB~E\(iL%(I_Iq9N~s{hJ,pnnCX8{ݯkAO[ƙmx $BƛmɃ~ 41Xcؚ'd=YF]Ju([רcQ 1"_y9^麼krSK`#IIsbͳ18H_'?999{,~pF}[U[T2z'>yp>%[U[U ?q؛ҟ@Ngԝw#CGCJc{)0`m-04S )?`{d|MPyJ#Dv N̘X'4JҰ~k[IiLM,F36VrREaY40#+W;a0`jvfQQOcCahכ?(tx~^hHgObzD|ܮmZ䨜?Cpҿi<\ySR =DC_'4W| )9 yy` (2(%ۤsu+&rjN\)$ 齋5ucU\*%xb̦R]NGMbdr`JJRPv֚l K-T-G?x}b: 'ĦkfN(a\=Bn?Pq =},eT`xHk $AN:NvvO@޳tvTF37A>W,q>"D?-4Hp6{ۊw$8{ıui uCP4B'07)EC2I0XP%$fW.@ OAMVC3ѴSly{>Fw[躟15o".^`'GlxaL L':u Tx9sNIo?/A_֏fģ2`L'KHP994AK6@'L8+lNi :}2(0ub7,z\bjY @ pz=-h p^fBfpv! Ub| Mu_!nGa4ROk^$m2;12@zQkL 롚 )B;Ď;k >l&mOA#G&2S7gQ#vO91ij+}'~{-ۼcs]&gY'´U(80v&#J8p# U%JyA-6kT¼. 8WB !NH9599$7}"^w.f,:yy4w)T?{=R_/Z1RJF1bs:q& l. E&:XO}K"]øn^-BГȉ6}tiBEa.ESW 5߳1=otLzv;pNf"*1FZiS=DiӤQHNX'E_\bAI%F}htMƣ1xF.knt~\ g`,Q==zJ9bP0V : " F! )E;b)J0E)1@6io?Ezs}34hGְ}l/D@{G=& J%F \HU!))~n=L[Ħ6-K&ȋVT @uPWoF^M|W/>_a|۬e[^sro 7+LJoO=2 2 2 |x W:*'`>LʒG6(ƥ&( au21 /a s:I]0m˄VD ` /nhP!C0R:zGFگS|M=G%)sx|T-gBwC;a6i6}YǘZ;hMF榩hYOC?\ 0t& DzK30`t15I$Nq6*N;\_4䧠&ǐo!I G̯45/C#y5'QD\]lش_ß Cf^.m}GqeUa\"s\PtT:Ԝvv&(3HwV76E$ 9@Dݦ+]:oا_m$##"^zF& xF|s4Hp컃[9P5UXmY# ~5w1mZ灴yg&$U |RybY 5e0x؉I"pl2y&DD̪"$' k?ZDbҥ}-DȄP._?GG:}Z<4@pu?|Zo!v 'zSWGH*7}x["}`Io1*6Hy-g==v:A[V7մH8%ǿmA7AS2G._*"dN*Sf0{bݳ $UC{ILp:N%GX<G~+u=;`Ҩ1l,td2&v4xCt #@x1 *,{@P ;<:ΊV8vZ"~$ơ8 "QN@4&x";* SAz(8e6&d*+3+!-̞Rkpz&  Tt=-u>}K\ђ\LaEi9/LT04`)VfkGSN JDIex"F6N}ݲXRA}:ͧÂKJtwm#avC걆qvd9sg4 0bw8TjaFYW"ͷ3aykx'~{xMkYnә'[wwܖ~SȪlqX_KJ)A"Ks DrD: t1NY)d|DOZi?]#T 1QC1?~nN.u*D tbFi5,bݛcឝ#GlT5O<*| ym_-ZɣU8iŤ%QLB-@ҵ:,cLѭܳVUk߈VDK$Ͱ1.'祡AJ0QCM/q8'gN*,>vU=ՉDD>`Ye)*H+ʍص)6kIZɍe*MIVYpDN(?hS;iTzSo3HFDF2sLk9$])~fCEp*ӭz0g<͓iEI 4~~rsihW >ӥ'M7x<LcǩiicݺG{Oh4`DAH11tsЉ"~!Dp8Q q( q̔d,MqE0|NqsZ$2YgR qq>'"XpvF؂ 48$I5m瞎s493b^ c<"*b8ow-~o9}$xǴZG%y TP>%#zbVݯ srv*۩toyGa}e4{!QOjܙ\nyn_S)' dp+)ww@ff k?}o}qƴsW ᧱ffר#7LQ˄%NzhK[?]@!SeY'ٮOV K~-xDTK֊W& ҃|T'ASC?x@YG(sn-Ic2xg]|6RC&BS<6XZ[mzZ{5R{j#st9$spG3S,Sd;H` C$rI+(jDv +3*!oe.>.s{~W{ Km)~P6/j69 RyxD4Ɔ(-K!J66 7ׁÓg-Ym%M`L .0[ɈGWnF"!$!ۂ}fs頩+OZ{XnazTzFHE,Z=~I6'ڨB~x`i_)mMQ ;Y{0)^a#~/L,(YCw@|1&B~.9$70:C\;ͤKz 5&||b/よCr̘3Ў8b/Z7@IKȒU;p;"Lsh+ڇP ?0*柠 wX.,OE!fϑ#ÖvYmL0s/ +)hDPCs"+*nS%PyҀ e$I$j+гRY`ޢy!9QC8xHO/ew>G/n6۟ia;$>Lرi) D@Sqr] =AD ;HLt1~YIY8dY(dU-";4%ݗ weKM#S[j 'b\`GtLE>_H@sݠ8Kw6dS|dDidgsS 9V1y"p@(>F6Mi#ynz% i=QiO%襉_@lx{Q'9$9iR%YVIMg-rG;[f؇BͩrB-WSiJH'Ŵʹdyzߟ&YJ֚R>;n}f<&#R%yAnQivb~1udQL/.RB:JCǙ#g@"nlL"z&E-P0L TMwJ]2x6EG3JA!1]|&C'耡2RZIN-wM޻mEGjIMg,33$G}`DksdԴI2I^ZE,*TUJ%Fz# PpyZm5lNժys<` NcƎYe"B"Qc'΍qȐb+_ږUJaF6, =1GLm^* q $W@\5 .{MtmUyecA/I#I&lvQb) aDW$pFz* ,ҵSk=(/î֭)$fSjHm&%VY![-R]U:`(;/8 `zņ9va'~"x(K= Qi>͓s4*Y+7}T9c9,`fLMS[9o*.f[(olYC9mf5jR881q p/Ccq==#| 1hRZ;H- l$Y&9%e#gtpș ɉ =ʸ?mƶP&f|_ɱfx0|m9'<ʐ$JPKXX+ <,M!\(Ʋ 8Cڄ3 3 2j2԰ iBv;!EwNgd&zNHn8$G Nׂ`)SMrr氞tuRd8 M56@}cn{k> @ǂқlǼq7)֭ mzG0 shikI $Tli%t7j0eEG!f HꞤ/|N޺8U$X }CLBo^T0}4o]˷_bqg;rw8t^c%S3ɜ*\F\uB3#|plQ&ܲq7Z ޢAf| u0';eTM$y1ffѥq/csC tl8"Fl1rcw,FDpPddh֘Y3;l65tQ)\:NS+ d>Ehb{^<"w3XNU[jKبNJqItek" PH'hZQ;B}jء@f+K:׭: b (r, R14#:6yOF@<SC L;6l2XՃd6RhdXIZ?8pP Y@pI$~xyݿ,@w m"C#"TJrnzA^0m**IIlY&)EהoYXf`e$ .,%l1mZ(B,#y! @l *\@iˋ 0d (P(>9_~UQ\fyY}Z[2FfU=hA@`> 5/; q0OHxroIzo{ZI8=8$=lb>EaLEU;HwfG ,.NaqF6d p$; YѣnNsODT"DW3Ϙ^:  B#"?[ͺ uzm7vT߮o0bcyb"y$N}X SAzX%Yzr ʭ["IbJ;ZKB+2 BgR$ 3.C8AP}[33bY}Q, Ȅ E 4o=oCJxq$G4T}&[-\H+8f"YBgnZSRYR (("&)CaFrB! K߮|yWlTTdޱZ|;&ƅe,eIJMO9=Hv ) nD2aXV*T-yK*j+t1&)JTΐJD&@) BDbb8P0S`DǞ<+]JMJ;8._ocr:"C܉/ WZnKn1.V knfUa$.ŽK*zP_C3$L@ B.ݛ>dGIbQ =ϱ^ iy?۷Uy!Rߥ Fba)''/c7ٶ-=6#l9莱TpE 24")Qk&De 6iZWYHw*T!C<%B ,Ϝ:h7@dd_b(d=q" DT:Og&'bv<a4D˙jhRGj!wLujFT>TFzpLrU]Sx*5¶aWͳCGbQ#Cey1ƈ/;tP6Z&rI/njz9Ēr<QRIRjjMMKo(eZFA0{z$ z"vIu #7+|`uNfsԡnL"HBPY{"XSI!`I `9IyǡRC̩iҡ# ycJ:UXOdOIE\~=jz D;"HdIGsޔ= #Sփiw%0 MA=jO+ $$T &=J,e!`&+ f@q`3$@Ĭ) 8P1_fʜcXw}Vyf-[|-KNwcmN''=@ZjhGCe6m mKH~ d E-? };9ftjի51jM&)Z+e1v]aD eס*{_}& 1/I$ܦh};ޔەӛ ٶ6~a̪.RN~ i_qUjK$RԪjG"J$|5D*oDX$9 ʪZ,aUl~gϑY4&ϩ2F_e1d=yF墣S*<˿!S'R890@ Tl[ @qpԤ3 !7n]zׯU[ޅӐn<ҐUD.79q=rfIV lױimQDԳ$!ɀ <`ڢ߬!X&Ha0,ɸ@v~Ɲ>|zT: k",+9&¾|׸0/X!Tt2ǘ+ B QlÑV@lS܂,| 6H=C>ȐS }W5V*w1\(ek ð1qz,,aFH%oPyuH?`?Q91ѧRm 5#B}Zm >1iM&?F$<ӹXfUBFg-%ih G~|@Yfǂ"v׫|@S+lC%:NSsu(a(a DX@/)R816 7`.<=>"?1YAjRiEw X򹾻h[},tz]]WqY9tTzw0 h'a[#xԆ/9NhJ'Wփ "HBU\@ t짨Exu̜wi1J}F$3P|ltp'%lYlӮKc]m$ul(?-˿W&Qw# a~TJGlMOMѣ-ĸʖԄ-G8(,ED QR(h JGx%&Ӳ|K>sF䓇 Â_xWx7r z-=r1Q_tT4ϴqNpgm!03LG v:4u,1DVKLQdyHLFfqѤvn)a0+xB; C>Y>->'~GS$^;nK1򆇤Ф4H(T8f3!^UG0z_:j1yqW0w<=!R`!8$2{m4[RL",X+R;w9Æqغ]`NbI 696p0$j#HlM=,&AD`D\ ],du؄sO- qH ț};y:2a1;#eB  k=r'^aHZFVK \ڊB ~[*n)'J?DC;kfVZ[@Q \94GNnL8YX&M%⋇${D9% %)aa,Y0HFUT}j-F5]wyMUUU\;O}@b8Af >+4Q#̈>•>6# Ylص\J~vV8$9=rq'B1L:D CnI7e-?l)9 BP>G 7}HG,`gs- eZ4aP40^BPV$j EzFgs[1򶡙/ BS *R<(8ӱJ;;zCCD@AzHWJ W`Bc9Pf>N&R ^fPi=RjtE+pOqDJ`8Sx'$-y.Zf;')<^iaJQ9D,{ 7 蔧t'l jiNBK@,,cYLNTddRQs^scb3F+4봓 / @)) G<_B@<I$$LO^bul}HĤh"HL9׋x3}P}"F'>9jOSdmzX^oٙpr,wϧ,O9`NMAHԙ8X)ϲvq퐞z}r&,H@v9=>.ro;Ďbܦ>+[Pc^\"#b9 \룫>ϟ((<_'ے{uy2xT[EPKR Nv !|rtWZ/2:v|)x=/ /i_;b\J+gq2X 00I$Pp` g>?(KmNB"a6t/.;Zm"lcs'CXLZXGV 8nQ 냿2'ÔT9ޭWtcM;ZT-FA@ћGiw۲қ #٤irs+Ƞ,,$ADC@j+AF+(B@w`[l:îo"kԇT)ŪO@}xIDdF{ؖĿ21C{'5 ʍw2H,!\OY,S$X} d DO9+wl^$OEEbX8%8 qO#GH%!#XiXO:7)% x;\zLHN4sXsb1-Ϳ隽y;EO{"=nϰG*N7vfbH#,IH)=1uM̝UU7LOT'˒Nl신nH0F,E`VA9ť9Bׁn#<~/66Q;1fC 9vI-lDQ~mۀ1( gJ'=^7qy+]@n(R;@Gߦ"GʽiVB*U4dp4D@${76┩hHrVhd3ĐLe$-K*݃&?7 ),?};5@Ej0UDGofHQhA M3Q"k B""Ԉg͢'>MʞtTɳ xȜhLO3T,uam~3:6י[D,W؇'z=QTb/x5̨ EN/6ISEwZե+-LZ0 $0@Xpzol"k/G_fGӹм)6,DA@ ׷GY^l?μU8?ä䟠֤ܲM7?SH8m[sP8*N\{'؝Jv'r )6)5C !0A"f` WQ-_*YVF?FFJ;]=ɕ?& > _pLG"ݖ]4j&/??Yhvb(bewtݮpEI :4! M3']-exӆr{JjB}0Cd8pKaopLEqv4w}Ou+R0(Ap G ? gM sE?L3Κ_`a<" Or$Ĩ ")""LBom>*#ʟ4=$y@ėԸ`rFI<A!#c $E#㳪pUTCs8X72D*t#+KC#%ٗqYɇe+PۏG> aad]St`}'דGnߩ;xCy8,,,9 !R'D5r9 >\Cu|I:NݏJnԜ9݈,Awqt t+SR⏺?ҚIRXzY_y¸)*c]Qp-"*؏@5J{gk%6ԁ:̐Bw&3Q`&H  E>h>/GiOF:KbNt^rV((ʐ(%XI!QFMm9?ț,J)8f݌@}>9ٽSnxJw.0ɛ#W8=֊F $I 3y'֝tGG Mr- *dQ R:#˒nCGu ܑ̫`/=P^=jo 2}p)($,y6)w&NMSx3}G?znKV}>~ ~޿WooƏ͆3owoÏK;?=45TlҟfXL>4xK+3)6KwPR\G2[7`>iO*8CPm r)Am?ۛj-{'iY|2?– xs/0ՂFTQ[NƟ~Gi/5) sfXPs*a@Y>&pΗA  jxfWXP9&fb?\R:U)tKk|v+DWhR0L/[o\=^uQlKl>k-jaZ)t锴g~X^/.7g-ޣ/o?\pfM]uWWlF/m?./[z %nY%Bj+<<31[U#vlG+IóJR^ucX@<,@{F"`:ν޼}|@_Z{C03i!*`ps|WS9:9G#GSQ ѣsܧAs:9z^w⍈ƀo\H :Nñ>-$Z?(҆߫Z?}ъk˱dR! P /B>)dfӧ,1.eLVU5;r'g?kټAed`Q Uk/}a2H~Fb}EI$,Wtswsjn9|+afOE*WT>5qQDe rP܂5ㄹ I!"b  %n8vm3 5UTC<3;%BrTU9TTU9TT(j"v a0-GW mYE3T)jU|~e&7iVΎw yۏWs4͏1_'w{vzc\6<0!:UJc=`k;#8<'نʮjɎY0!:|R1Ip`\)1f^&;$2fNʅRX(r\lцʮipGscJEi޺}IКR㜴oq"۞kZwən2M3+Bɠbf.Qaʩ*W[ s,Mׁ֓ hYf rHc3 F9т]-C) 3m ,2V>UòmMm~"$G%E!S"ut^D" p Mt^YHH!f@t=z 0h[ح[cn>w>ƖW;,uaWg&1[4A!9 Sy 7,r23Cggsc8WӣTY A@՜ HI$l< +3$Hr^37nnR@)`2 I>WmJ|+}-y{JJUޏ~}0ѝ;!uCDPQ}/m}!m^"ȴiP+iXc [xxCa9ȎH9vdJ&O66ՁeÎړ 9ЀiDY3 Vl6r dYzڪ&升 G6z)$ǫaBICDwČ FFN̼S$33_ PLf.bbn)RtmΏ&?t 9wDF;Yq$JQV; HI$@:4"aJTnSP!^""!j""""~]k* JfWuwicI3ʱ4f XGṷ̋Xj>7iYn/wD1#G$<LCyO4U*nxI-0ƩTh̸0>b@6{zV/' Ožbjk:~UVEݙ eyTz>`_RťpS08y` $`}kJ^,c"a7Cpxk$IgGQďQDUC |N4r#~?$ 9?Ry~JwY F!q*9H1akY.D~>؟Grh;*ƜUd&|Gw6UU:iNY%I)e]",U~axRr]GpnD÷SM~M dXz´cFѦSg''O $bKY 8H9#9 1KB2YEdb PĔJ7M/22 ȱc: :IrU[a-rorM4 Aő2e)- pDJ'N[:tDt{^׷](2lmZNy&ZO1äJ!NF(1ӧ/R;x{:ZsLƊZhX%(NyY]bI&1xVJ()Hbq%d   TE⡱ "7ULGb-Бp*T q>(Gvg`1d:H&$K4&JἦL4łP 6v6RY4V*JRjkTKA-Q"D# "ZH1"%--JZ,)DDJʵEilFD#Db $<#h!QOc*t9sjw>DY!cxj; l,Wpْ'ךZ:qDYmV%EKm bc'PNgkpXZR]á$:]!{ǩ9/©ܒo&ʦǑ4FcOD pr4E$fҹo$ i²eKRԵ-KRԴ󻆢Iy^` TܻF!D=Ќwe,1fh ֍|VUTRv{S`ne,,՞M $>$e'lKeOs=NXJhhjTvXX,2 G ?v~qq=H잸du206*-|g>pU*B0 ! y*h9݂"y   R*“D2c@K3i6*:GG$vNI$VDAPmNC%UO)@$2zcR<ֵ.Loʲ؅"Z%QUUoTvԸ$LʯmoJmKXcٌQk`8?>;m|mmkӧ{mmӽvmmmmmztyݶonsm;m;;mmmç{mmӽvm=mG{ݭdVKv=VC3I:Cd4z\zGCT]!- AV9Z[va#d}'^/>HBEt*-u2 2XbŊEmMBdԒI&K)-ŵeRG/L:N9NkHB WyBB,!d6&#f EM',B dzy~ַnuw)U$4s N*'վ-xu;FzdJJٲYΎ6'I_Su_fe{e:Y =~i@[ Јr-k~08li{#QA-zL%!! Y4CC331h=aJscTYPJ S0B80pCvz؀YLĸu:&^ ;񸹕Q*Z@im-a}cv2;<Qy0Ø4dIDI-Y !PH Aoc*XS; 5w-Gf02`h}Җ*k@ (ǐ;~k HEp~^\m$}J=d6H.Ĩ1AdvDQ мJ\2 DSr2+wI46"2vP/TS$T[-}~4)($EǩQ?}r{p6cJޜEm}8kJ5 e90R$FVȱa!k[qBt -JrA#Dm$MX&I*o^Ry!I#--`AQxٌf1Bə I  JoXHBBl_=^xjeaTKեHVʿ٦3iWm9o9Ig9%mIfR[i,jK6ڒʹ7[BHk,;mm,614bQ"  H HDC m3imnm6mm[mi7?llllllllllmdG::::::::::::::::2<%/<ʼnɦ5s&DJ@o(7ČG& 狊L͵Wjhŵ _8x '8%lPԩg;9-m?ǝ> 0QŒ$da7VvQa.QbX$dȹ@ckp┏uTa_/?jK1tɬf2ő.%A,hXBH|?GHmf12ԭC x趫I&!kkAcAwAR,lv]YVd'$'m̟##HP(`&0L௩Ii*["%H,t<̿tٱn > +u59G ,[ |p'ĜA"QVJN &qR HM*H~SCHT`wiDy#i>CydS*P'%GSfT1S}bYEYeeIad U,bR># B#@G#nG$ L1U;ŕ:S+ߺ#3c򻋘KHR agx c!0K% #.ܢ&A$E;ܘRCa~g{x&`Qؑ$NrC@Q#fsi2dI ]!|eŠ\̚Xf1BGMQ2@SyV fP9Q;,,++94$R2@x0D'ZH a&('Z"YK$88#$0L=~cʜ[M3 1Oj&1<1zpB r ovy<AA`HFEV0? ()qT޻_HRD/lхiMFM4 MSWb!5"˶a[I 0T$c# d<EF"p^S"eB:STTYdn$ (LeJ{tzr8$~s@ E+C!i^qWZM9z9Q'2h䎮ğjTvPvG>j9?'M-0h59)9ЇBf \"6CCL 0>ي_X ; $uQVjD~Pl02a?IC*!K($t?](?wm۫T3ÞǴ'#0$)vL-؆1 F,l0{5cۚm\F\TgM{Or.ō<]Q-86,dL1 #p, 2pElM=E4%f2t`jW$tp-TK(2)ZNodFNH T!AOآqAȳ< # n1T>C7$p|j) `* &0_L})E##` VzGtЮR(QV_\bdZ81#N  d"** b*Z@B;ϐXB4Zrn MK$.V\hd{dde)s+AHPat\,B!ū"U+i W6EO 4W $*iF fҦE#%1-+JRLc! ۶sl6!h8Gt!c aU"rWVHCdUY. 2d&.dYK#ܪZ(+Cht#uL{Ε-Z?dΣI}v"Ӽ޵y $I$6+pr9`aXًFI,G`Mu'3"j.)zH$Քcĩ*BJX@# QuPB¸ Ux '}vj)hF1S @ P"o-'f~-BހNm6"`[0!RV̬p&X )7f*#{:>Oe/_E#Vj,I?AO$7|gqB8up߮ Ԫ{,OPtB{!so#:6Wsb,zd})Q#qZr Cٶ(Gǂ0QP_|nE*a~ } syChAKiۮΚYmgf;Ódm< $H,H?X]&2|#'~¨?rEܸEI(A7&}S=UܻݼH) 1x@&A!$XD+̨XB 9q]! E(D$ӫqnnVʖ퉭(̬KdFRF, %ۖѩPuRjK Q,ʖ%&`a+sc?GbIfAwBAsTs J9v@?N<=$/cޱ}/L >ǥL ZwR"A>}? K?5&jRUw|n;| ^]y!%4 #JN֮%j齿 d@i496Od6\e L:BJb!WELhj! țz`E8b@`)a ۓd51o7~ANfK1̉ q(2}w)OLV5$TS{Py14ROrN{=R/y`YQ4uG MB@VG(!J-bč!%Ef6fV#&ʌ&%~2̚[,X*%AF!ϙ'd6rL>X-E,N[LLudhi+,XR_Ex!쮩hɨ;{ $Hpv6$YdM bD* j0N}D KTWhHz , [Vd[JX5X\6]-6VUK<C^ھz}@̪U3 33̲ 3 L$ZJ:VHBULoڿ_cz"$ISO caH!烙S-|LrH!hDBH$YbdLd*AHB– %bA\`dvմcK$ĒU,K1&YDG5uU duoY޵D8QAH,% MP+c"A*تY8cDdHhCK JQ2\&2\&( F_naFMY{(wb$đdt2E*E\1z0:C)"+o]k`k;MxIH"U&{J! g]CT>BT$ d|*`*?['M5*ܱ8,#넛*I~{,+9XE"H! G$bZo,)dRSBщaR,ba*T^c&U5UVjKVztK؞J X% F#@"iJ>kA))S'XY `bΩIUB`NSeݵ>B>;=бj\x,(j;b [>|_4^؄",*Q!ڡGȫl#WDn-:E bmxKInVjmYd0j[) Kd!EHX1.L= #&2ܙ. Z̫TqiQ#vTF $ 4%٧FoUH0 "T'û5]ڝzE'4:M}G1/_|308' TJs_6Eo(Řb[+~ed66oY|^p:J{QF !9&CB,"tv5M,-RL:dn܍Y@$e"FI !m-IJFIRLIyZ&; Ec[H;Xg{<eyuҗ[uILY2Үw CTJǝd3 H3!lV_V 趈بvqW$GA^OpꟲAcH*9M}~eSrwh󩏁| hh?Nby]0bHM: A)J~ Gv8f `OaŃf=q|֠xDLvǫM{rt:ð+0+>ke(qM lZf^"N4mYpX/n + J B0 ߊ:y6BM+InԜ%#&FYa+g(vff]Z[TJyFFzd"}1ߝfb0eٙlՓ31Q ,7'I!;&"6p5cLNidڠYh;1BAMnԄoHIy-@2lki΂a1PazSL/8dH rxug!6$cb8Pun 0pƌ _EXՙ:ĩ]=цISP2U%U&I8f;:pX9:ڐ挭'c #jU% 6D5 *FZ0ʨxmC<y,MDM3t".p<()DJ烀Y- ( :7hY1sOQ\'Jʙn%%E.M@S0(t8HG50v]@)F i7tJb "oHD@ &b ʼn4:4XyT%9Pa"sc E2-M9})tɎQbƭy*̒ 0QEJL0$Rtcc#6tVꛑkؽ9կ1q߀sd0.] t;Y|c'MXJqQgCqڌʄY .V0mf҇84Wͮn"kDP,u::u`ݰ.`2<:ʴ& ܤy4$;M:wh $醁(12ȣFvpp9;ݐu `#aF(%r20&I@ +xs}r" Y5E/5;43e1HԐ1{nDc*,!c`lwԢXl6j \8j 6$}=+J[rPFA9.Xwe92 h-rFb\u/J2[+$%n<:986$ڋ cԷbɆGb(<0A7tQ])QdQHiMw›-2$X`TS)%@RѶCz(Gfw LS[gp82ڂ$\ȑ 5peFw (8Ake;߃+y Ba#r+j-,9`-H:9* @1υ& (pL4a(WB'cenbM=&\Q ׌ 8WdTL34MHsIhzǭ,n\W75:`̣z#dqd67C#]X\:r #i <ÿl4Ǎ"~8ci4Bɽ ha Y lEAm(̚]m 82wXٝX-#%F#AdK&7xNGc]QM+g>.Yr"̙"1bnPB` :Nv`&@ .<Kb q$$Paթh%;,L6H SYogfp&8|b"L} q祭Frl0@1G}&nƗѳYw vx* bf!s;QNi2G*ܡJ!EmMji)6D*+jlCFGDbNԴ,TI$%)VeU!ѹ1DX  19EEt8odv9 МLd%)6'tI;tBMZ66jґ u64 Da>B&ʈ60TSq^Zl%WlDnŻd1(,'rX`zaQ|D=h`^Pb8RSbr? 6TbRD$M,$,Fxw|II7DH'$J #G#cbjF PaD=dI&I*ީ1h=3ɷhb:1"C-L=L!!8&0G 2JQŕ)Hj?3h $?dJ8A8FAxGT7V>Ns#ځAyj夒I0]b 1䒤$# F B e5AXa[ Xi8lljm$L 8da"tv0ЎFeUbUnS V\q9cP,fnBʨęWõw N΃**8R­'HT?f{12Phk-/ '{bR6LhPmYAc.eOpPd/t# LBFsl)a$0&I3$&RRI'QH c.@trĸ2٤hlkɄ%# IKj& u$r&3.1q(YM(v@Xuj|zM%#xC"<,d` F*J JT T3)PL{+P 㲥Q*8G2jڹK`HP @hU%\VA1Xd~%I .qq51$!$קTAXX`|v `T`,`[@X Q4TEr4cCT"=dPrFҘ B<;`aET ;<`hqRGJ1m-bsWj0L QQKlB^e!7\7h{0 BFIE d.1e ieb)"SNM`%7:]P>,>wC]"n%\)c3zA©q 0lG6RG jKVImk-s$[,INd *G-y=oAa,(b>XRȂ2OsfbY9̓1 = ; 2$<H)@M PY`a:"'4&jǩ$l⪗ZiHY%7pL3,9!P)dOv:z:0  Nih$-ie+I )GD#(KJMdD 42u("5\ESs}2m:ߌ\B9n0[Ó~)u[)Ky Q+klӉGaDK#sL(asmmuYUBY"x|Qd'VX/yp{e9'0EM d|uk CF$?)YWgh|rI#+7S!PJr/E-}VBԥq#چ| !H>zE {R3bnF0mOzSmEp:9ˬ) $m)V`[ 8B?A)c惲 8u]f@jiiNTPIp\G+!ʳĉatHRT )lM؂(2!BX>: Ϩ@ 6**0Ilj&)4գ*L٠b6jҹ0pӧ)ɹpR]esAFSRX'~6,S*QU+W#\cg\2HpIF $PPÖ@*P)™ dT: )=k04KJi -o)l3#d)8"@Œz44iz&w6˽MN0)6:FRw#Z$O`J=lTY9J >.ĴQFv528.3hql Q$+곹HpNm"; HCI),HbUJpT]v1U0L$ $<$o]e-DjD쨴-,OY& Z|VD6,N0HjF@ @k/: t"$"H<@~#'l.JI2VDv,wǸ%h黃W7LD 5ycWcvU8Ca)ajH@1K"Xcጣ#&F<#%$>KUeR<@TP8d;E3|BFfk*5 Ƃ vbXOʣ+87̘t@ :>4z!ur#qhL$7텙CO_X3mP G h L.QH28-DNcO=$aK#Pd5 !A|0 {CD>^It(sI\2r@ig"bp8y ʲ{K1eDp5 $Sbœ< ,-KE2SQ!HaN !46c %E>TkQɭh}4CeO*tW'q# dVDhԪib (>=qS 'RǫÒ(R_Gȯ=IFb)=2}=8WTG-lrYØll?Ɛa z(KKXя54[鲶km~ǦR*#o[ѥc\[!78#'DQ?D*Etu%Fw#LVŠXiSgҞ)>8" QEǑ:Q:y1O8X3ȸR#*^97ly ے8Hd4}v|58y6a$XM(mICLےJ A(*J=bGF#Oۇ/4lgh[b(R b ! C@a,%TlZ(ɣu1 GJbϽ&AL2^%#~y^0jD5I0 > inƊd<dK#oߤ+gxRV-8C2[Pb, aYb*rn}lbZݿ/b=Ndܫ`>Ld6JnSj,T8$*[9*sLc I$d?S/zdCRJIdd I!88p (_?m,K[f.ѤU(cłb<0 @!e ITi\KU՘:%zuK&Tln+I!21*%苀\M7ےn^Ξ9J'QbFblY+X0lX"@A=@JnOD,aP`MTA,+O~n,u"]Wkv]] fDeb,ZsY &94i4YRJ"d՜{I.1L;PRBƕABJ/̉cfq0:AjK3P Iq(8 )w8HnyhM%ZI&NQ}ylN"#(&feQz D$mT2KsHSj@H klln0[@!,TvE6\ !_,:I <,Y_JKPfd?>rVSJ$:$ 6 Еg>)-esͭlʯ!U?S;z#"d,;9lȮ_pK ƈt* mmV7by af͎c#ĝX#$''a(԰zqE2 "ʱadMVݩVlgu&tjjXC(i$`pb$F([ C/BZW 6Cդknƶ\Jj)552ZEE% kǞFl33c""w!T"DHl-b Se',>׊.!$Mq_jw1lB&Y&TRTrY{[5oRSmIa&mXЛj/.%eft9 jMnfe\i6Tw"7;4"'@6I'd'¸ӧ7F/.ԭ11cJVwm6V8̋pVҒ$!ȢB.!L@'7,Y#欔K[X`v~T<5:AeD#Gsz%7!Pi@|IH\Vi1]J"೜JH $,J D,K|JY#$ڼ,e"Z|c!BUH*H) @62PZ#09]}5ܐ>6Hྶ|#tM}k=X}U$_鶟,3AxJrڍDmb=xb'֙]G1O~kք^ji3)5bTXC,KTf`* P nl! tTlsƼ,{ X;1򠾂o !Gr] 84XƋ"MXa;mr2|.k'X|4'럣uv6 J1~nƺ۩}>hyDPIgaAKYſ`u2ifLeqd;>#AvO4,Pc',K 2J-a=J>XF桢,!p0 ,)<4ѣf͌c 4U7nፎM4i #v4ѻcf͢ka]۴ia `0[HOH`=q`TkiH; (7fτZݲ~.n9EW $6G Ii< 唰"7(d!R*M!"Jc)-,$aD. PE ⨮$!l$ԌRY ՙU,bbAl5tE Ia m&jצY6(Qj*Yؤh(A<d 5EFеɊFj9Vd7[v b0q6d?hꚢg06:Iu:M#Zy_'hHQ+x~[5ѵQjq(Hn8ر\Ka`n+TM!dƎNNHEGyG\{͙eAQXleLRR%H5"Y`0#L#WM%EDl FHXS6bM6m IQ'f"< IJd5;Sy䝝bTbUaF$}]'I$ϝt֚*RՊXX~=[0ڬ*joU1'D'İ;3Њ `h"yHҝ\ d7YwD]PɻUJUVI:,*©*ks@dD;X1rҐy7ΨqG+҆80jʈPt@fô4߳%b_@  p $KঠK83F+"XQ`ivQDA*Htnb[f ().{P%*ox>7YaSňZOifNRQIm6ō,~!D$)hbI =Fф9D4 i$8XN"pd )p8jR-R` %16⁥BJ\(RbLqDD0Ial$tip H)!h1-+)3i,UɍjlԲR,E&*y^J\ijF*LF!R  \RU-K5-iV> 2c9Ή2b78˜Jl8p1Ç&)(`Ɋ`8tΜ8pLS1C f"maB2MF%(`;w;~#MߩCy)lT!BRq&Bđ% X1Ĉ݈PpRC{9;CT )H$"IR[^?RC6Lm&`ł6@~f$L[M'c y &BTI,\$Il@WT\а ڧi26!pkaMZ1^\uTc#͌;LK#b'ph +D[֜x$z(aH Z)Ib2 ՁrZI 5#-/,s(!U)I+pL(P֓i-smltŤd^6lv/^:U҅}똢b1((0[DC`;G,D)b,Ȧbe+&nu-uj-)ڊ,JI5S[5ʖe[mQK)5mRZe]6fTJfMYJdij]ulY*MMmMEj-&֮u&iB G $> (F'Mt^ʍLK%PD|K%*VVH"1t$!a-EYUZKP  K@)> R %A4ؠX]%HGڴQ|(QQQ2hҢ;c(팢yIYx(6]aE9UFa-UxdK U,.0ŭD:@r TS PF[ "CK !H$mQ9\9/)ealΨHMo+:B{wD~C oQu` ]Zv)zϘ`f~w剙 y :8^/R$z \Jw"T8gvViH$dlY!EofFB@L8`Xs.K0O0)ރ"9iU Ϟp4ӆL!K ("4sbB!֓cmQhUeTIVU%T"c4A ;$`Ȓ; $=XXzow(ɯ._,R3:],*ғi'Ʈf$Q$dML$%T6$WjԒXTTpH4 St$$trT7Y&:Wz;=O# p;y 3y,`5kr5IX E}dh4T!ʀ̃G1@NeKc;2ѭ)>7z 67KDz([5,cV{凇iAlm[LL1ٱ%^nJ jfoݳoit1Fbym*"HH!!c m-߀ui{4c"IQ>h<Cj$`wt> ,UOOS"T*q ḌEK`U?E!S$vz>;@~ZONi]U+2RtM.0YdxϐOĤSl%YB=KdMX#U-TP /\%Q!Qd R0Ap& aH-'ЃlU21+ d1DGTnI*č0#$BBU 0"D-~ ΡD~{ Qu0£VSԍ OK ȕbx 谉%Tɪ-k"zA$ T%XdņJ6TϙH5NJFXм 1b SA7t^Iv%wGVTS 8dUzm'6-qzAӓ "ř:IsrRq'5N*#]>I.F*Lo Er) , 1Q`1b% `.EFtB A;]wB2e;l~MƠᨁŻXcuC0d܎kEC-#bu}!1H`[$dHK&ɂ :v$VN钾Nj~DC'$Ҕof bhP3c[h ,.AMtN;}֖bchR)1S|tIByT F*(BI!:-T,EH  §pf =uQ{$HtU?MLh^hS9Odt׷P6()JY*URT4;Objfm0YgYdjR,%W>!1L;fI;J=":#'viB_7W׫_@ss>yӞÞ9㞇NիH#)b2m95TrVmlh-6i6cjcMQmKIZE-jmRJSTkbiT*jXm$U+t[YlTVd%*OUIaF@dGDw2Z>3r"N0)>)I%rTy&KSj(ЖY& tTp0p"DءDGCpLu(W'DaHҫTZq" As(NnhNM!nD)6blEH@,QZ %X,ACp O"B2Gi2FXiIc)5l.ce: <>Ǔ'QP99$RhF(4B`0MMŌ^D0 v`jbdX1 nY0,YH%)NieKFd#MSl+mat'JlY 2LRlВsNoy~o5&%T%DHdU{AI"I,dd2Yʾ}LB;ےpc&0# g^hXb6%2a@M-J)hIDĠXY7ktyu:&$ab!!O 8JBe,b0q)bx^vw! ʞ.mDHBPz':J"ȟ-^6M*&XgF8N,H4 @B!u<`AaH"6mkw5)X 37XȬ 7E{M j5X@p`Ta>|<<%T*w*iDF a")<2*AYlCj '$acA;M6UXb"iÇ&,bD)5uԺev]n%DcxNMOW:+M6Sы,pUb2W5g gh Np0A;PfD0d+HM5hѳ$%ҏƱȬp̕RLUG{<\7RuPu<¤ƈ6jՋ*ڦfndƤOfLRiF "nƥ$âHs #re*ҩV\T;&+d\,s6HٰK+Ld34rVݫC!JT e.(z4s-pZ !&RSe;3`T.e #@̢UX&E%E u:Zf$dFN Jp'D>sdzP/.Z]4l爩ĖyC)$"#(Fm Rʁ SXvm"Ձ3 X LU%2 w@)0YCܳr!qLFzN Lp0Q@פLnckyڪ۲LbIѹUE4bW !yŞcaPS1E.ʒʔqÑ!M}:i`鰒VK\9U $ёbۤ" J;4 DD2 $PȒ M,5 Q/4:?b)k K*a;^+b!$(la*a8imOn𗠥1$7K&"~íT8R>[0b &MapEN*[LLXd75S VXR9q1D-P$",,)Br){Ν aJz`6'w#*rbg4,JP (A^TYeo7vJս-$MK XZj Nzˈa92,Ґ!B!$ 2$0]&lLsbݛUK[S]mx&ԕCԆH`lJJ4iAXӽT鐒N %dFiHY82Y6#4b^-v^Waĥ5i1@PB1T‹!ȥʏZy2sY.ضwp&mJiM(LȪ)@8/Sp]F":`C b Z H0A>s`rܑ9c#3 du/C%DT5y<9#k&-ژr}nr;O)$[ eL1ia-1l 嫉&9JeEE5̟)&dgsE,ެOṶ n򆏴Zdb]6 ;^'NNt5|"bT,b'$!SLi͊̏sL*lhh{@Уb"*-PGȴ4TJI?cSW4X#nGL R,B;))N k[e5$Ҕ6[jǝXa>a,"/qY& MP}cZ=$GAz$S^16J'Fu/cdi͎!L,"B|iE%GڷE6RSuQ7? (C".X|-2lcC V9'x5>o;}x|_;ꤒ$JI$eUT&iBĩI BRA R!bRmɢlcW`uN[~!*4C.{txU{2Cl,$ɵ{m2!2*@~B$$B0w-hPg Y!?}VGp::T$fdiȐ,#(ΏȬ a D_Ethfh4%RIvo;K‰dyl) t6O|081U*(UH)G;ckeI \2# \W JRc XwVr$%*HB" QJW%- :teUtGDG37&F.@" |d( F4Q瀃QOܒ>߯a!Vq6WXNS($ tv+a04W^H1TDrD 0PC?d"|#X| dIcr(i[&[#f(Fo=,<(v \{s14)LW|FCTRd~Th5yl9֐[Hh1+XWmmRM5_PղWI7II,IJ,RQb'E;mFG,*)n_75k%K,ʚɊ!&WY c_pwkDĩ]2ff]*16RLE">;I1LL&)0l 1F8LX0δ 10$_J uBQKJ,)* :'NV+imCm$̩A88`&i(bbQ1YA(S,U*)ʓik\$[$Sc[NgaPZKѿViLR`p}߆=G]x622Tb hC0r#-Ȣqd/%'pah9FC6,erqI5BRU_< Nt#]eOX|<=1IÈ铞UmUR72YK Kb "ȵ "KDv%I)A DB :&=/uKvO|Tb!`wN Ŀ[O< ?b+D!DahE(9S1) CPtSyO2Vp2E\(7M0X0O3)?%VRde2?Ҕ92S P8B$v=*hC (o^u$(×2mGhdHFH~"`>ҝ ;6aP3XT!ij}B!FHziND)NÙs4T(F9d2E8.E| =&VD$͹}""@^ *3\ȒiI9pAB,Ya1tK $Tc1J[HIehA)4(YFIde!In$#jEK և1o'>lD%GDȧ:,:'%Ÿ7;=/ |`*N+)~2"={ʒcbd5O@9$HIOJFIߏœ.)< p0)\,B>':mGd5!L;IŸێr'5*׹^kؓUml2D(8mnhM )PF Vkec+2QN'g( ,rYL2*ik+lb%H 0@-M@E8h#GXc y ro)uy.nvsy YgcA:_Wݓ3Oq֊bg4THNů-')V`옣&TTȲFWf) 4*Sj^KJeKeu$[^ve\*md[SeŃ$YvjL3$J[3lv٤EE)\IJdeRky<1hIS3P&W6*-a, #RP a'taEZfH߷m6W,Z_BUds'pg2C8YpBCNE 5B"!Ur 6 w)0@h/&ZKfHp$m m)zVQq!#mM ɾ@d5 H`uy4?вMDҴ7J&aV4, ;\ 4g4݆-ޙRVvm+RՍ)#E(4CB$!RS#$'$h@!04KxbP䤩(BC<200f BX6Bft)6m󲶉Hpi!Zn1/g [26BX4H W,3'Y=ǘ(C90j[#"HdC0)I&'һP,4FE#Utmiɥ< RL@RNK <83K ? D< K#`ωNOn VS iVVű%p9IX;Hӑ@ZR b8!n&VX Hȕi)q/=Xry  djOFCC;:Px9_k?f80p\K(]0Zbyӕ7_LټԅHZ ($F}Q. 0 \Z`l9a-| uD#irBP#HL K{i'$ vsb ' ID Bs&!8Ha츲UcЧ9a+&+71p%4SmF6ݍ*ya yr"櫙ml`fV%,Pl冶 p2š,$y3 BBk7ЈP 8PrvN4_JE0R)e*Xҿ~cncv!BY*$Vd*kdD+JcIJ5UinI,:rM Ny7vPͤ⡢HJMn nC3.Pڼ>-E!'IK TO>8w9TnpB7q"00nUUb@w7'GK;ɽC 3xI '80*Z Ӹn(!5iR)  eK$TqJTW5B[U"b$h2!PڠFU2FX+eh,ƅe鵍F2WDa%"Kh!I&ŐZ .֥j֎)D`$@BI"V jɋ %A!RG&T`dFLDdؒRńIh&$7"TXי/^k uzMCHk"P J# Z%P6 K>,IJZlWZV a%ߗh6UݤJ JlTIjZ*Ėʊر#B: 8DbĨ*Y%*'Jx |``nD)))8-1&mbNEnD'`D*^M!Y7*Q#H΂Ccw^"AD㟲 B*`DK@j#LF"$R/2ٮֳmcXU5Zز[VUSkmmkeT%Y T!TmTV6Q+TmEi[&Ȗ-UJ#))CiR(BX45đַ#*qMJ`=K jIs48F9I M(0B@ wR0Qp"%jED5"bI.鰘NCXZ:Bό'IJr6QO$ڐSBc0*8Y"B& Oj0k`O`"Dj?3 {HȲBcFބDzX?\qcؔOlVkP¾6Z SpS#IO=,;Nćr#J߼_00{8|GF~ *Jelm60Db4C)>ypR/p"|B0Kز,U+b5(ؔ%@A2!lUY+3, m mbQ&&Fm~"桅hE0 $9>i8 JJG[-21) dt{Io$ %1cʓXm̶̈́#%So[S%RںW2),񙑐ՍEVXqa."'[9k]N3:UnّtMUa5$ QRI ܳss&b ,4lEJ݈md EhK  $y+ gE: qMU^DPob@h} Dlo|C!‡_ Q}~B: [H+ d5&' sm aK-ff9,"*+!lj3+IS&5mkVabg-6;=Fnr@MTE& ЈTaV19"9Aöv9$!YC2r/7\$,ҬXm8RlKɍYVr9,݁Y2[ +hXI!4:i6,XS*4ҲiHcoj'~gQ 'rGu-1#mɉo4Kk4;sV~@ aPQBk #urGU($1Abi91,pgwDEUA X%Dū!9,-u Ԣ50V,RTRNKیl$}'I\MU}}Ɏ<8p:W/:7k+ XhδG>w!v1ԕ] 醌Ϋܔ48m9¨MY٦*Wr˻'ib@bP1zB6 :L$7N2 DNMyya9q "hz\wOCd 81w~(CEA^c SI *E  1[>1W'zf5G; Yt. FD 7$KY$!=z_,c Y D4٭Ldٷ5EF*>+&L`wm!$)U*r9m92,2gʾ 5W6&sknՒ%U}oU $Ȋ_px*)GZ'UZgHdpwG/s9q,tؠJJ'γy}fT8 -?q?7&@xgUPA "`nF+W=! 'bz|^#"xWKgYHP~HuyD5G*̯[ns<4*@_ aЯCeffeK(X*x(6y-<+[ S! N  9q(M)))؋NFeֆ'Sk 7&6NvBGk3Y!I)b3p,P4 cDaEa&1\څ83ZIEqq. bʣe}Ri,4Hi d:2 ߐ7HC4lKI܀26"/.]$l.5B,(EH‘JQ2B* ]Np7$BnE 2@5ÁD0vDب֦>C*M 0 m`HKHD&GEeb䕯$]B=$!,RTFVIlj*%J-ETyIdI0Z-{?zPKH'Tq x HT6YmMlmij%1+SQI>;)Z|s,Z$)>A1 ( vC|8t a25-FSFBЖئ3;*R, %(h]M R9am !T2Fܦʒtu`/  T9AĄRR2K0(s=Cka,[1 O$ "'Mwu&4̥eRVߺjD<d&?kUIbZS2ɰa*hf4"HJgN|S{${5RUGA\~onRA7mȄ\V\,`uP^d`B0,)@R*ZxCb)9ȃɱPhz BtFy3)v'E3XVTvdW2KSXK,#Sb<EuJ\n2qY`QY!jwFяd,r4,s6iL]>u!1RUTdR9b !כ/?)S{ x"-K o#y&60EeE"34D93$moJoTEmK$ɨ-aXz Ό%6Ofꊎk$"R>zEP) 7OX*# Rl3}~2$v j]y=m,HqsYVJI=WZ6D?.Ӆihd]웵>J4aHaB{ DUIuQiXVIDBEc"{bEC# PDU#E Z.KR#z HF^GNk*#")J"\tR RX#&15ITrR4>Ma1)2l%B(ÄoFS,~ɾof.-RmecMj 9؂z5hC]bY)(UJEf(FHوec *R JCUؒ A*ѿ+ñH-)`D;=OsY>?jĊƚ*}40e(X}&r`bZTs9:`a9+"ݛYr{=^]bޮۤWKnhf^NlDRȤ2ʬI&-$a JU#W&ͤY+S-WP$UXhhWd 0RT&XfkZ 0GpOU?GLug[2J} frYZzlȭ Ay C@3bLU_5Бs=NMm9w3;?wM(Q^W !!̺nz!Ӡ1ÎE yi%z:r7N@P 2UZɁF]3 Caazm Wr '{7!{4TUVѨ$MX*F!J`*1LE̞lL[HX1Bd`%; \9: @R}0K䁉NSwRMqekRHКstpf,xdM.냱F = ǫ3u6V, ZG}Cp uk:K:y#0@e| =tg8UlyRUbON8QK@+/$)*0Xϔg,j}:E櫰p2=XmP4R 6ݡ x:Q!LRk<XTVɩycm-P0Ng`a涴!E1爵:v 2lJOr؁n b6ftЀX  Q1) 2N29fQ-ܠnpZ'j `n1إ|P0#[`P09na@.n [Vٳ3{BR|;R|Q Mӥ<+ l1$< Vt섏1jӥmt[ r֌ N0ȞUdҢM*)C,t y3 )dHBavVAX 8;w62+jÆ D)g.Ajp\.: r] x0GR&%6Pan<9ۦ}&N'>@Ay^ _ߝpk)t: 729 |bp1c-OS<ôuL\Czfvr>e)i{T9l%wM97 Ñ(>w[+L l)cC3لOl.9n1()30 X0;&vJMt16XT0l Y'j2}rq) d\ y6oN;"S0LK [("-DE,]yK6s-ewZNɼ)_#F,P0fc T>aYpb `¸tIbS#̇]:N'j79wNLjP&#Dbp%%&g"F4xIR={ٙ0ɓF=ek 48nrGG9E< ؈H""*xen.G6|1* U F) K.1tAA8 9ė] :O3ܡ0Yf,vClH;y8`Д44.3"xS3!pNrd:O(0;37Rqx <>Gf'4m0m37kAH Өia&k#A 7?W?' 4',m`F[mVL1 M!gUn-An[79=-bp|J= lo͊v*M2NJ1NcDD ]V2!\Nmi\؎NLcM R\.lngjĂE!'6*&+bM1L9*qPLd`0PH$A,)jc}XD 7rlҹ1'7QϟtO:I4zd꜑;:U*ʔY*RUU[%wHq8"tOu$ZKD;$wT (}$o)7T?[sx<9ZʕSUZdK`z/n&yY%cbOx)!֐â;סUUUS):W Ċ`;pPʫLŊW&'~;wFט7jT^-n^C^l]E>KL# G@,#p ,82'<$E! M}l>$RiU+rE|! %;u5 ;e1l?Di?A(D*&7 {ZۣQ6 T,s͝a$1(1b dֲ&%5rHU}Ow}rtS'XT؟^=eF M(`a͉G x,iZvyշ'&0C&2& F bW`Z9XvF ^T!O`f) 2ZP'yg:!:r "B8c;whH$:'9BPH0T™Qم]9|$t(IP܉2A9A&1RՖLRHd(Sa QΑiP5kkmkwS/ӓ^- ǔN{=`uCdք@<}F-zKo7z#W͌y_f# %I)vz-2!gJOʭAQbcgԞbgAD ^vshg@mCxT4xxҀCLeM Ʉݨ!9IG7qQErGCMAHC`a<=0eJ:UUXd4ŏ̸􇘌 gEAYAY+oB` j/Lx(:ا: M_jdi-$B'p|R$Qj>bIǯ?CcTC0z&Zfͭ VLQ,2 Gׅv[a͓HŗRçT!% +thlh\cQS&JD8p(D* Ƀ Y pvP`YrRN]e(20equEȝ1Rsu3skXnmAqPC!ӎnradPаp0ò6nolcbvJRP* wO(4\JCuL7%$VHFJdȎL$(V+9 }f&$ՃM1QHI[:Y cPم݉7sA#͂Ж'!-䓉@#puEj9%B$N 5& "h*RTQm4EFZnwLd0KK@KJ)nf0̏~1%γihr$$T~Y`f %&')96MVZy3Nk""""""""""0^ֽgDDDDDDDDDD`ŭi[:rk@ s'AP zXfІEEH#9Blh*N8lF2`i(X9f !'7q΄8Td)+"D>̴tG8"0GK ^*!ĘDȣdaƷg/OҪH0cMQ v71[ Ez6QNt'A9uVC0~!q#i$7Ig`r!d']K8/|a4 98@FBxH<2B܏L hc${["Q"g"@#)h;"CC-.R^hTwkt%z+6CÎ1O|j^!qimvmn[*ĶѢRLJ+TK#lJiDXXaAhFj oUF7Uۙ+LlW1uqctq4[-,-)x03])H9J"Y,$.ImiC -YFŃ|xcyO4}>GzD5kY,HZ,$Z$許"P|H,ajQ h)HEQS"%ƙ4L 4*q$b. U7y(*`6J\ F$X'|rMDa9J͒R7ՐT2fdIշwVʧ2e,$0`%k``ǖNd9$3e'v"Τ>ó^䘃@l#OafCif'],2,!-Gjf NE$ % dR|Ml0mUK%b80ap`@1P!nihJIͰQ JZX2닫d%A$&0H&KhV "uZ,[Io%ۥm3zNmhiLHPU6s;LɏǴ:;)HCNr5 K YW7ԟĒ%a!^cyJoo9',,Y$hI m eDvnXx>;M|aN8QBE_胥"ed-_,YKN;A@GL&`IK ULD@J2[bKXpiV5/M|lW:50^X##U"BBXh燴`[mS H%9 3Y132 KvDiq?pp*.]iR%"'3(EREZ_)H) ehAJ:G7UH<]i @A$!&HĄ878A ǰs:V$#PL43-m"G{+R4K#gLX P@ ;ǤVGO>I+=!z"n_/DUl&N!_o$մ"~ݎ|tHIwtGŒ12a>If[ #! ~I)Rt7%~l[hS"(e4VO*#f.f1U9]rz4 A >(?">SC1!ahZUМ 瓞+NxbPn+uPn+uPn+uPn+uz1yqHDJDU ܩ$cwU"~`@xCNP`1VX5 B*%gbTPhJBY$"CDYÚI"j Hp?R?VXKrɖ"E4lBONPLר2KO)\ 2bć/^)u=$Wh-~tvఁvw':CLChM_uԯ6aBULUl8d VxSf4焗$xBȇF;H~ 'P_smV3ϡM(&;0GZ/P>ȓ$)=FYՓ%i&,ލY0U nN%i4ې zw o]ƹ.%}FU`Yg\"?BF F(%&h]Kci` 2P'ٕ+av<Ğ*?iSXA EuPfrKS`)F*R?`ṳ}W-I{ͯ4yeMM-BڼL普0Yd `A,҅)k-uysIdŚe"B jex,Q@[cQ&IYmS*#II*;{$& ҿt#Q-m{Zx0H|_ o?##Ъa)e[ZfdFT,Y-"Ty\,DKSI@@w/뙺h>^nHCH0$@( 4ES(GaZ_ֻ'#rl5a< q1>!AT?*|F"A:!5U)Ir&D,N$԰keJ6Xo c@y:LhIci!EdQ>6 }ra{ޱJ /U*/f]+o ')\=zt(zp-@sW[KkO+~0yuw$1Un],Cs<T"aPr *cbXE%z1)}ΐ,}l'rB0zv/ʮa=>sC*v|@F8*#c6NtَSٴb)VX3riێ.Ɩ(˘x64Q[J=#E\3#fZ'ฉ`RmcRJ2c5!_:yzxlaUwcNֶ B Ca@+Idb F^-#?9 ɐR0挈ŎBa3΅8}¼ȝU4bdHiФȲTmmҽ˒CGHN{l,Dr ;"*zX}rP29GSDEtVmU=/e(YDHA(UEAAq)$ZdA:=2{bܺ"wpv>6SMFoj3n[v,sSeoTҕ>!dNelnZofI#U1 EU'$(\ YMB*vs%lե[E+-sotG6LIJ+Nk"R,w d#*.fӫ~fŐY;6=O8"Gs$4gQnv7}TKgu >2vp%8,Z7LKܮNvT厲旉3(dbئH ;tO$ @\vdyJћ%D I*Q%>#)1%8REQaN2lٴl8[f,D(c4,` "vhRpiL^#0Le-6+65j IdJlNV)&*WBJ(e‡)#DJ$Ci'n_vDQc'+<đF,cI"a k%c,I6Kv֤ShF`iա27RؙK) 4ڌlGd$<"?J<[枓=B1**H%֎|DH軞 PȨP%BjET/dIx=(UIH֔r+AYl)}ց"ʎk${;|Wg=wW/$ɒtH9Mܓ -%K^SZsfF#U2 x'',qqOO{Fe+P,p=fԜ@k0$V)lAl‘|ͨ"x %춛B𼛡"ƆPjb'ދ9q  QC,EDJe[!b*8ӵFkk6- TV(T.6 Y!Bv^"0WDC"d"Qj$@)h0ҚѵEm*6TԶ55 "1y7I%Wҿ2 (%9a< g1o L;JUrE 2*ARjH WUbIv 4*'ʩA63bsQ<%L@ ~|Mꮯ7[b~]A3obj,dǡgHcص$Eab](UdB>ҖEHF&;gH!A ?@f`aic`{a8oGas3<sH8O7M` $sY@BIѨ[LN"d;Q_+Hd62?$O짮fvl-a: Dݙ ITf*etd8&_p)H1 DAbaՠFgp8JDF `x2h.?$W,xU˦|y$q?7[wЍ>v}+x Ǭ ]8R];jMD!M0 |`}CW E('K n= ::ձ P3ls:wj >UT;E/wCֆ(@*HQUTVWdӭ+p@*pƋd޻փo^ضu콱mzs׻kMJW1gۻnhTie>vyGjϼY: ];._5}jiZW6kkn@eOoJCM=2F M]ׇ zw[Hm} 6[ Ƿ:j` WփBʪQBPM lw:풢#ھ| Ԁ)hTKrAϖ=V׼6J_c6iB@vFR7=:**=>̜Bnj 'OP"'lWMP{z^.@+UC'5wgp4זɱnb7t|uv=m^ HiuWgй#I"x2"= lm{}zァ׻ku綤 }]|ƽtm}[3m>ԏ.qW3꯶$j/utu>+tm}}m>{%mLmG]ibKOr*%_{Td0fe)Q7{WlwfeӼo^"]dO UW#RJ||My}8kHvnWygOCPs|z_wsEcomuN}/ҽ}$<s{k2sZx WU_m}VO]{ qReF-w{Q{mPz6TMQb{ϯ:)\89ڄѾ2vu>'>N}:Mih)͸o;=ogrAE={EM>^[ldC}Wǡ- mg@:rw.C}ɲwWj$|(m/W'vwƶ(^ٶ'lOl.ηhz܄6$+ MMC@h&F&IQ4OFRa`AF@Dɂ TFOҍ24PiF$I&"`L*~?QjҟCuVXAɑE@~*i@BgTp0icv64"n"QuȘB-"B.B6lH ?'nvDBvLoy^˱ۭMgI<6oH ۵gY}=qRjc%]W#V{5m#=$ضڢMUjɍV(#1% @d ҨU! )$I(&XFR1Q$*2 H4 90|ڑS@*;EHTڤ Ň p*&/(R$HDԍb@oҋ"& *JBB ,Pl2+T] 9S²=Rn*7cG''#LW 9aSC`t0i>^74ȹb'UbWVnnJECD!; 2ZG빊{K )!:6.X!JTD)@SBCA9``AlVx-%k"Y^N) CIaKVIm=51ІIAr?ӥ}JD#]?aC`{ #G0n̻ iѨI2N%?$!*(l$c ,i)0u&$(hbE&rL(dCc݁FZk!U̓T9F% =?I;_K$ɌR^&,sfϞFC=c^ֹ!GHZ) D3a7 ФNkbrhr^tLWDj+1P\,<+4a^(|UԽ'Y[aYNc(C; `:XՌbh!ea@p0U؂R.ZFĨh نJg \&Q8(-wܡV0LiʒMX1 }F4>RdYB;rog3腱/72T{ߢ3uCֲD'e?Ygr$\. mi\dAS$$dȡ2Ea3ҙdÐ0 '0t#jSF#8"kgZ q VV=15MOvhniYRm g;εW," 񔯺Վb]dg B^ E)hSro(pFWv' _{};ܴD J_ɞpГz4/]@DZ.EA)WQZoGu}QR6dbxaPmnxNyԤB{Ux:0U-uI($60cA!.yIOe`*[;nkצަ]u5dK[O}a8Vawpu>-D^(dD${Pqbʆ1:ElrRrʽ|'#yY{2))lc <$t#w'ݮ53RLb@hGiBK_|-.twN^)7F"?ՌǾdOKNG mp^J%N5DyXcKџ.N(8y| :q ӝ˦ČMnTjK/) 툒 zb1H1@w~ֽ}?/kz܎r300b!p8p !"N2,g2m!@ĤJLPt`M@d+A! 2PI4Bd%\~i^FYM!7+p&ơdIXG#&0U`igdm`A&I6gmr5gͽwپ%E$uX٤b "qbfl'¾S{^mm+kv] B#Q|fU?ՈRvYMw썒gžzw8kBZǁ4&م<Ωʍ7*|rt[Q$J6zs HtHєIGNݭFk xͲ * E[E7uGԦx<g2Tm ?5G}Y@`2ǃh06KvcM( tHO[_GYXarߗ(Uq8s}({^X[w+_17u?rx>|YC}M0^ %DHʡj5=8)Bf IDKE7&.cUjb-X1>׃6Oe(JP'n \\ei N[dvwx7QgEP\%7E.MhZ{탚vе<1ܢF8\>8 pJ)K_<.g]۫ݹgn61:Q}\6v?7lx6B9 PAgRfYCٖPLLujAJb,~GPdzrqtB.]};}0fhi)6!ђ?&kdSd7.oNPk)&1;^%{介o)N.%(5qѼ.80; }Y${gH AmNMWdPL%}leΌ Tt@ibc[<ݡ`80G%>Gd6.~0.9g}N$7zݲr8Qu/ mv;~Jn}f-uv;sx6G]R aNF$NhQTI$KOjţo>־\ĖxӰG2)xZ x ٮuRD'];C@499 <kv3RFHe~-5>6U"$iJ3٬f0 dDw3|x] C:Szg0iq՟no|wf-sF9sv>{VA8&CiԐtU5L.*|x5vNJՅ9ᄞ$6;+#n-;9e87f35ty┤Rx ?gdՎ[}ygRXFXXL,S2~w>!|,fMӺ1q'-H9oJ1GӘtsAļ|!Sר9# nURnNǗȴhZ=>jQ$x"siի C|iҧ%38oH0F/fQ1Hr$4*,IzR9в 4 }x.n.WKT[/uL"gj k[ZvBB E '0j:$wtuT'-Աp:R}b"dǟvਏ JkgP 2ve^n杍lvV*)N۩wǽX-ل' 8N2:dnXƮ-ֶ]6<Ю]9 ct;~E!%*f_q1#s9&41B; + %^ome-~*-\fH'e% Arڥm 0vOyaSp2v0 ѪϷrC>73$ؿvO[C0")[eT W/ҟϟ3H5A!ESklG΍B-my#;U/BIJҷP 'HDoqE0t҆o_m1ՓeTED5%bmܠ8c\M>/[B?U5k4.#'p̪@-6KxdU|*#ERN]܇Y([AWV5ęF&3 V#oKkY9! O䔙ou䮐'ǷxϵI?~Px_~eDdu\F4*/=^+G@xhF0 BQCl)[%J*J6G$ip:@|h Sa0XH#h/*1hB2>vHl>DW蒹q"ZtstX C $?bv?8+ i)hUA@(~%iǿ+}e$!kr.ɆN!7-nJ/aAIe`*я qff ͏B"H8NuQx^\B+odmHFԄmFّu~\(F4Y+m{ůZX7Ģi ,-h;u# jt%cMx^)>J^UՊz,ʺ d$Z-Hk:g~&81ktDSRP)Rˡ]9y!B))y*f(W.T#" LH ce @ۺKܵc-i5 «1fKǍھ^+z "Gll'\Pa1̂(eyr=㰽}x*>l tHŀbRUN@Xu+)WRc18 e'A3s6gN7?;,KlWi%ȎYP_;/+>2b8ŔR9MtDizG%ej1UrC\0ȝuƵ}dm*;[}Φ1x߉FH@L@N=P@U\ˣwXOBknK6=F671[SҶcsɣc4tdEξ2~~1Um&?>5PIX\F#B#)XwRwJb;&=H[oii# UȈcLPQ <7w׷ga2)g pyO0=~x.%:NoϦK%1~1غǏW`˓Jg4ogFI툂ogn~LHKR 4La5<= 89LЍ֎ c! g{-$*Vc*V=&`<4641c|H$j鍧ħFH,%enR|TXeۺakb\ +eJa1~x:_6aK_By# fQiYΒ+d쩮M;aРi>`fݘsT)fc&$N!GMheǞeT.}gķ(_MVdà~fgqE˞.˲lVu IhaF6c!m4-AD,4yLk+Z=^t 8Bnދr~m|w']ܡJW/Tj]C\*sMPx 2=$Ggz&(&Eo_,MXU(! !e!C"g/,"s5 Լʔ,ߖno^?Y(K:$?~?wUc5?~y""Q2wIw_Sx|7E4OL$Z4TTcZmDi#qS7'&'-¡r7/N75sp菥j:T\R7o1- `d2s*I6=st}VAI֣qNXn1 𕆩M{Qէ柱ѻsrU{k}=2r(gLET+ 㢾3x^{XL &sAİ3c/9*ryT\0a"Fy4etOO^>}>79ʜ-=lQ-\tpFCWF Am/, Nmxnz ޳Ka0c0$HXLC)~z|)h8Hi&^Gqd{4}~>^EE ư}aI!*. v@Ɓ!RPbmj7}7q!ZH)!JD%uxDD 9e~dz7p}yeZ!Y 'ƔKޥ&3*B~-;8);P0 _uxyr4d0YP >CA^`PNo+ G_$fć2➉Hs ]+Ϊ^tꃘS7UYb2iV$Cۣ :@ w&u#1S-K ټMƠLIVp!tEI1&(l+a)`$19eCбܩ'ǮԥCRjԁE Id-]:̀kWkx$^˵?5&Ns"ۻ@4_VEVkT4 TZQ5Vh-e6nݛ$!Cׁɂc"$özum&Yn K_qCSw2b){DhWzԑfe!kb9v[)T#Ve v2D! !rG3 a$#Pm\ݤق @|_@ L?t0N.fy# wB`{eĒ_-&MH$ JU>tb%Q\_~L"dm~e+ϯ[DPͱ@Œjs/ͪ[vVЩ6h7pc@!E̘-IfqУdVx!@<4 pNlVqITXY֛[VemG^.9шCp!ólF$:Sr`؏aM30I2jeah*t8=VM1! Ect& ?_,ъQ]']vݸE`AW&v+*d2s}vҴT@!KQ1 ^Y ]ZXVͣMo5J(hPPWF`,"<Rϻj5%f6HA, eڛ@&"0!^ N$sb&bvod(B-΀pDLI$mJ0p 8hih|pA@j!Gp5 ]GU%Rx000#vpp<W6jMyDS2>SGS ›Nt&4,[6uU6-&KAA] a&BTe6 3r^Gh(YNAa ]Dm5fƱcb‚p1ƤNbP;IB`*UB VC Km @ e(Bc:\0NpcF7L`RBFdf=m+"B51)be>;AƷ4D@2 5!1`%*9TAsJLM bX0mA1 u~coos x" 9!« M:51@pu4ģ; kjhM;<%CEwði*Ði^A„O?v`B 4(wpqe}qb' m4g?buҾ)^W0CMWr%GN"+X~EP=HY KHKwNCF-yqqXNa %\мk$hkXqonCy?=$ޖhi݁\ك.W[}Q]e -. zhF[%!rv'<E kMA;ԏ*Ajv~ZXΓ]|bwy^qgWVNe*fo LaK!`IJIi ;91?pL-`{5j=ME&HRԡX9~#Rf͢d%~jg Ȑsɣg]h . Dn8 =vwƤAD6EaR Z5nCLJg'EƣΆT+Aq34`xhZ Ķ+R^UI,kP/`Ңgk^} OH<ф󄤤6PeNs>}-EdmqN=ra6]<uT^89rX",Cϝ8`yک;>6<\01=|oI"~ЂdɓlrsctrVuRW7ʮ;scӹ3cG&|b*s܍G`k6Ԫ0%2 6[A &eS+gmܞdӴb MjD*tͳa`AyX6'x1lbݧ&=iecد]wzTwXlvitiÍeTJR^Gtv=:o+fll$8B\4>' =F'9,?pHp/H\kǤK \>YIkX!/*HTMѤ7{"iEa"G *P $X|EBgyJgu˺afrή= [嵐{ 61#N'f  Y ]ψ0\r|MzGP b1ֽjYJyì^vI1 ̂ cKH:PĚ#>Gthu.G$I'H u1bPH#pEJ\ȿҤ 2hXpZ^+6Kgm{ o|!a˹Oi~#P|t-:xĖ䬩r@>HENHb43#S&r Uצy 7*ƻ|h7~ȼ+a#5Oݮ?wo=5FVO:0.(~o(tfM<3vRGD/YlbeccJӣ}kRos-¿yRS{Ϡ+u6|%|CكՋ S`M}NS8t?PU3pы@b,tCi}d Jkw[3YzB=C?8]qN]M FtL:8 !aPڲ Q'VR# >c͋s CzjO^{ա'װoOsOyG-(7P A;Sccpuf=:a5F#WDvg\]$DDeуQOr3^/`\;@@l!2Ƞzaڠ9W% 'MjkZc@{ UFU Ol&W DidfV2~#K7" LB I;pOg#f%h-)ZOSiЙdߐy4A<6:g2k M%Cn8D:z;ӏbvXwuf2}{nW'O>}MU9,~ԏeﷳO$TYG !mv T {'TB_w>iب)1dZ}A? ę7LL/ 4y !>rGIgyrx?)y͢G6KLG@`SWo,q2ϾIP@*=? 4<ǸR?fKRiޞg|bS56/OEjEKe`A9~|膕ςְ f#!${?a?FG5<@$CIl7;Z$ 1q4mُ ̅8kFouF)?[4!5 5! \xzoϗ/s!/XO4[ ”Ahu9?Mf11>a7,MkIe/flT}Ael`Yyg>f==/}_(UūXEE*F-18O`J|>9.yȷ3\Kkd/wWPg{_!~qX&.R8ҡ.7wZWVLo6>/iԙ 13Q><!LE#{xFHA5.WgFᮀPs 5NUM8gN# )^-M/|'7Y 'ǍQ$%Jl뱝@\}"k H+scH$MoAbAh[3՛Q;A/ةLA, /[;_dcg~SٕDM1W$$M5Jk6B zoahIAC4LKD!I`Fq$H0@DqQ%#;E' `cSrP (q,E"+l-(C2E\ `BG 5)nUpe[*e-M&(x-[o(mj=5{^b[(ȠvJ$] 3.\/Iyݮ`֮b-{AY6˸׊55"{~2`|KE0 L]>ރ~Ʈ2E.IXāmo>L7" B~V^.JxkFÇi\YR.,𒔾]&`\] }3Fd1aOipѮL7#?Y0a0: eaiL_:ieλ27Xp o'|T8,TrSk5"*hd~_=3:퉖bϕѡQ~Pj@{ K; 9Zgj!`( .ֆͳcY"gh' J_8]C*lcd}T,%dĭ:!QQ0xGV Ag1D )/^-M x}N ,@k Phm5!sYA|=v)_"WwP`5UOixf1j k\i\9vNSAުTJ$ѣ!Z]'QC<)"7})To<%IK {}?fofk C `VNY56M2da $@ E Y/C a 1D }[vFJhڂ"XK$s HLKbs{wr&$=+tؐ!`\M)s]&kT>%M f`fA׶J@PSCP"fn|)#H4!$ E"Q@)4ϦNtѭ'SAOOt?[pAR[J(KKA(FHd ss\3s$mf&^6H(Q6!VWؽ^Dsct\wri 9&$f>7|Bx;OG\:E^ a{!H5I  wx%`uu#󓫷Z 엫__!-6h14kW6y9ѩZM,gpss(ìcW)9HfV|s:6 IBq!B1YXxvTaTJ,߰SE XwlmF$ Υ-P#dœm3p$s.GgA`(gA2aCС5y4f2+ 'M_FP/$(FR~{_A Dq$%kdI.ZZ'H *kNir×N( @tY*b))#O}+ W5`a,<<[daSf1ezNUn9bP¤ta٧OM>wk)NcRS !c?YdKeA3UxѱLNf}!K =6}- cOh㊌yf6DlG=y-\< LV7 F&| hKS#)Ã04v9xz룅*+ΦlSf& ƫ SqIU6f%v-{}kR3T,g +ҧ ٚiخOnnlc|c(r:`n;jj]3읂='chOF c}~EDfdZ}=_7Pt4$m$mABfWx€Amb iV.tJ~IjOe:JH Ee /5#} IȔ$ ~&ļ!س3ޫ.w}o7fiMs" %)yI 㼝;]qtE/(]PB_/wqRC$_^Ȓ4"{-7¶4E&!_>RjYaٗ?AX` lFP9Nb(Ow5n[QOh=J=ډ\$Y @Vk`:MηlL2&HBb Gvpe'#h]& XW! E/^ez6^ f mmB_D#х1m}ѐ쳥EJsl9{\3)W/?09I7gvVelRE֍r@I8" H͞c3P ڡU%I6<ݲk3qM)x3vi[M"Kك0 ANUv!Îi.D-X5?FLo"&Hp)mvDQ@̙RqQ -oȑpǂ.zC=KD]1dch30kqdP^35n&iBhE b׶_#֙BB&AU4e _pLJ܉ncyYg= //0l_CHvSm0zr % s2-n^p#x;U=8Oc \($H,cH :pbx>-P(kR G0QUs]C!b1&$Jto5&hٔ,64`lM Ld㙙2ͿϡF 98I99À!5R >X~O>Md/y鍐>}Mo Z`bG[?`tΛD&5:al?d@F 81eʤ2DảmVfC,9󖟠s2q~F5ՄX>mDŽ]ԡB%Y)NqE(j}8nS($16LVO1SEJlm;`aݽN nG Y:i%&_]q$"/ ThDnCY TX[YzrY *SpXѳ&rT>*aUj<_#.Mu:>XpCʑ]D]{zF8U8r! mpꁇg cż[9Dd(Pca*zTT2K*!Tk[,79 QbtiR9!hy$zon"1{.Z5yS3X8̹'ڂF[FbI4ŴPrkH'u˧KiiH)!U(OcU;ґVD{Җ;Ig*igT)PPQEzP=^'H‚ 1pg0;vժ-&bi+;Psna`@}zb\L@ `XmX%PX)=[ਇi@$uHT`o:ˣtKz n.PP6=Qo=S٧ܼQtB {EFP9.19ͤ¦&Au~} = rF0~t!ŻCp&vӬ9p L_XdD'&QD7pKZ&A{HwPOXq,'׉qĴbH5:<icϜyj~_F!(b@#FEZP/a➬( XZ5U&61+^U,e# tL`mO`d]~q:EOƼ"4^!{2Kq SesԢgFo&p "+~/=IMK7kQG5œ!<5afLopQ"F?[:ΏW, m%P`bHRi *q84(^)556vgI6b4j"AkvYv/Qop# PT*c} ғV֥Wgmf Qę Pk[%"@ 9S6(/9N+̧ub/OA<(Ab, `v1^-ٖ,r]"H b^0ʕVUtP 6%|~6פ$uVvvc+?U*iqŢbXY. I]<48B(  dZLgZǦӚ{\AZ1CU÷dEޅ/ֹѽ|-ad@EY)xG2e @@ E6|vR89d|vf>,[iƒûUTA"}=qǛj<>zzGv%0(LАv( 4@T]+"GI4ûLѠg,y1| J.Ub=EgH6xINJEҠ,CG鯙ȰaZ-DtװKLLEs8?K\h=qGm0t1*"5 rlz}wήfNѓ%/qPo=S 5[(*9wcgg+V_/y ,H 2&Q~, (l.>,3˻F`atm3E]^}G˲?ޯkkͦ\㯻}D؃[qVBtuU`̾v+:, 6j;Myuٷ]mKNJKr] isWndr76L@F+RPN\6]3nn~{~MWU\i(Sκۭź[ͺ[Ů۵yw 7-źn[9ꕔ۩/7-ź[ͺ[ͮ:k5n-;<]uٷZbvmvmfw]^fppcs]uõvufvh9x5]mf׏nsۮͮGWlfvZq$ 0 ,+@4Cٙ&6]2F_Q*&,ڽwAb09+6#ʠAܙK-|gOĔ FA{D&6,A1_0!Q(~73 `>P(w_AxY eG̳c }BcK"m"Lr@giGH )8X"|3޹ @08?I֨(4(kEbMG'ŦhB>W"Y*i6"WgQZ2bIRf@}^J}fPRY] *h0` =V@Tc&i ZЍ5Os65=5KYwhx.~ȟuIpTӲcsL+ aBXN{,P%gPɏ [hAa3e\ dI LeGT͟f'=䋟>&ܢ(O7fnwmf2vuO_>>cټ0҂J = `fEDKդžyXs32C0V=e3}S\8'C w"6s.{H IL} 4'Ayt%H^,ix=7ӗ 6n@`,WvLc6Z`,V&ItIw/`c8M-a!k$o P q)!#CP||MSF- U)9;]E.&mg|=L+2NNەMoEi6qC܇sE!\Xr,`bp-ƻ!UpSjAeO*پFdiuQĞEhHzZcF 2'x/XO;meۢgsI$e) LSi6?8Wl'зQO+Ι$Gp=A"A Q3#"ٝݫqDa1&MD s')C@RGW]Ԥp0mDEvtW!HZt:^fVhuU9, àБ|DQxˆ)Xܡ!lt [%dVi\qR_`oyKQ,B*0fLmH )gCCnLh: riel QIy*b@'A ʩ@wǠo_8+Gj6wĊHHBf=>?a=<>ї#V""')\Tv"e aq2e dkw]R A5N&6u ĉ\*6e h'MN2[MI N* uC'IhoN E4v;l1&D - '觬wFnN^Ȼ0st4:529nO~zRkJ!6;i[ mq-R-oFfa IY2 iӅsx\t e46C[5 i 3&h3tfH\V v!Ds<q4<&D>"9;9a?Gwl wk),WH`'Xρ(4F͒j:U[5hZ.8hW6g@ThP0*DQH؄ƙ2)N.=S[sC.BTî陠PzV8hУbLy{}ƘS:Lk\›i-n';hmH#n^NSN4}qC>37zçt§gԉ!,wg;*ƍ_FQqAjt){f т M5h$qH?ܾ 008Epșr^ aׂ}l :w)$r^3pF㏴> ZN^- b}I© }ȕZWj8y(A<ߺ6"fdppʅ::"aws2__CqӋMх9>ɣCF+jwM9>Urq+iA LeT|Qd6ַ`: a"j~Z V1%.gxo~O{ Je6JCJ] Vo uTC%c$cԗcC\+){p!iKe):!gTHZ`r~0YC* %0מxh|87{\ॵ⢑F}|QrGvɂ*gBҢDTk-ZƸaj5 RLbz:.[&aavFLPz$U*<ץ0CaL!ZO,1,QaDeh ZhXNp -f+G^j`0'\A:(_=yB|sP]|09QA3l)CT?1Ǣ" M)Iˉ>^>W8u,8T:Tϫ $t,nI,,ywMWVW\pl/̸0PaOiKqGRa!u!H28˴ 1$)4Jo.|0k6^1*6a'4U@_><~C 1r#c~%'hUh{F6;Vy-)SڹǞg[*GY!L>#% ; 9ps8 6紼W-cOF[[َk /k^_Q/#O4~cdx2+M59RM1oCY0)f+Rmol4=UYgN,# ^ܧuF}%a=\T"d WmQas2đo(YFLةf; Aą(X lz M i0fuzC#32Р<dH@>u;6Tw>oޠY( @ 6-1.,mzG#X8&p p@H7 @]ϑyb6_9k3qiq_m29A0qٍ}.P S.f 7eMybJd5AfVsw뛲rn<Ւ ;^P4&*9j 9e6RN)J+'YOqXpIl& =WB6L-0ɏҖ}ZTsȊڜfa:h3-VY[䑼R_Qz{+X0JR}O5)zm='mg^&^v is;2`m$dOr !ia-nqxe,5YT1ԣh6٣0l8ElwA4Dhm$m26[ n,$nn4B:V,&eA9E:z>3Gn=![Þǚ⧯M/ዻy{t,*|*ahvҵY )Xdis"RR-fp+j2,L鵳v\)mbh2stz\}(9xh,zцwF3a=4`8"n}ס;xɯ{|QLl^F-FLzA=bN%zݼMz坦E@A OȈfKgl+i׶&ilYbP'VyQC4J;z*EZõR~svz/I˯~mM5*V<{Dć"CsaU&k,y(')[vxNƅLėnwdTtvK{a\S-R7 4…e8Ar?I(aMot}>%(@AsiЊU@ʃ%$x{Y?r׶;uPuA/S g7SJu*OaMkl$D_b\]($5I/[1r©tw0hxP*,4DKGbA{:Dݞn*1pl$sH-Y0QN3(Ә$u'e0%gK(%nWm2Gy,ıa0dEBAX^ҩLnMKR\ Ը"ԖeT7n1هN񹡢ّԜM;NzC0q5O\vw|wK_1y(nbZ[p RUǴ3au\EkdKYtk5mL[SU 'L#:yi8JTF6Ѥk&`b:tj4]C:]|:ϻEŃD;!%TPqm~ š NBH~b]LAH1 h^3$cOQŢ)XRD< 5hѩ Y'P$L,+0|e s, lm$?4+Bk2Dee5[.^z Ly v(Lg ;vU`IKκ{˰^nIUH/z4yi'Zzݴv@U^׍5SH99 IL4`N0: *ڝO&4gvvNStD>ZCQ9,$r].Izˢ  sPbeRcd NSH#u5¿c I`hh'$_ a)䌳wR{|Y%L{{ U)jOy>6%al`jb%nO:b+wsኻaUz lmvIULUTI0J)UZc&*~5M*Sxpɼ1tk&[jŸuӴNju1*!GFsURF8?!ȝK'bgnb­ni&1+NKc)^pUU4ұUJSqM+ 7b>ŒcGVSN1<,+Ãf9)w"c**w 'WV'52ě.ʇF]qmXZbO(N1#LMavvjN9'´γfF 9MijC=Q0X]b*RB`?*`!"RWX(~]肋?3;[\/ϰr,Qei{Ъ@S؅F܃B(bgT ɽy$;ç<*r CM * lÙSj>+bWWrL~"tҲϒI5DW(# Sֿj&>pA:{e5}q 61)ds] g#P ҆;)1H h\m$L<ZXȃBƯRzJURU+tK ?p+ϢᰆI·51q='QhH_OPKs|8r? c<*O?xO96}gxŇ4HȮhhN'0©`֬s^s|}_FjLYQo{yb4Ќnh7ߑ/;NHGz^;ab#P1CqB1ҧ=ٵd֘om@X{>Ŗ؁wa8=>8nsHu/R?38t[_zhTۘ\j|g/DG""b/OA@r$U#n?pЄzI'O+3S`+u= ^df=uKqNvB(7 80 "t}VR.Hanꏩ;z1-Y։2*C&̚_L-sUY5Zl^uH!H= ͂K(ln̉&n0iEQ&(ꏇ`vl& :RD$q|uecsW6hdž>YlK>m-k=+FJCX~ӧdUKьm* Nп?-t0gnSjRR-'{hP3lX6u䁢MɗgԺƦM YrB컬EնG K,;k2\87O{WpJ_dʑQ>S3d刺w:% D6ٟw$i5[PA#s1tMIXW?*ܤy|-[ #61"~iPzY ߟuhcrĬeIFtvKVu _ixJ'hrY"?&<Ѵ z&n0q4\Ũ@ 9vW'a#FnX0G T)48/2karϧ<ӭ89F,9>J| IRe +} sZՅ,0JKVɿ.7LRi z˽g"w]gN]rU'2㔓g Ѧ@JrK*&٥ʣN2+#-AXϟosP2 aoTRLm=ŷQ*,h~ 047vA1?4)V}yQpa߫|SWīC"R[qאVI^EW1j}:踅8,M.^Qf;`\wWwzMRs_ N83zZ bC*5H-|hMQ$) I^n6vC1 61TEmָ<֣e\|b$ XB''Ӳ`Z]J[u KOђ|ڬS F4T_U]vmJUU)!S"X,Ň8.=EeuW^KyFiI1s4!c!:cB\6HQ1"r N߾gB}?{oOmy_.ڼw**أ iCN2z>/pt>k:fRFl( cX/ ٗl׳={ oel=͍߁|aOUUºo-*XZO; D `ic9b64S5 PS`"[_9[&zrdjVYX'җϲHEI sPfYͩ6dɀȯCy bFg燙m~f1[ˎ7@H(+x|]ްgq& 1IPi,HJ]d#qھ{#dږUu130`& Vji[Y-J2dRFRQ -pp3Jݒ'21bU!s!!ilFq9>8(ꭷ7vBA;}vD&3zKc1oQQо(V4W2|2aɉ  "s@yJZaT=b9֬?'cC֨ҢMbp@HZwv ;op=ENG=vз{\t܊AxR&O$ʤ?8ю"m gSgoMeduu֟/ERώGǙ߅9[ JLkZFhR?Ž|/)b-Ŀ#9PUd)Fsۃ4pt?iԃmWmٟ8/WrpM-qj;Jw>Gkm[f8D,dgO/N񶄰V*/;ͤ|" \9s̖<bjX0r9ARRS 4NEhH-욁Q}Y!f_.={.{bmreLZ;Y"Is>nǼh쾺8aEBӴ=!XXIӔS6x@=3/q a1;nFH-IVB tmxƷ쐠u=u+s m;%"$IZ8uPaխWHMHbsVU[g=DXɖ381}S?~2v㎝ڬsm'yV=9 b!jr Fj&Cp*RLeFgF0lI &dge䡴5"CD}0TX am`(12 Ԏő=]Q:ȚTuNNMSo^W1T 4 *R~p @"R1J l~Qede$>מFs"@u F(|.bN FIF*U5iILLJMD蕧4TOku.Nː|AW 4Ϸ3vۨcbRhF)fY6\.2caW!XȞN4dgQ?F=$BBeE **[Hj`r.(;}Gݩ>_Zlv.G ns:V~"m_{2 ˔(D :0O5II0O\Nc-˜sKn/1O $!xG L8yvd~C]v1$~c ""Ne&%! m3`LtF|n&$!H5,#$vɭJCOYmԚRՒ1%zfxHSP-gWiLMfexQ>Z=34Ic8fnCR VBOVbÊ />o?JJE%TQI"Mv,ys"ėկJ').!h b5苼BQc OL*bd]Bӑ0D''[+(Ū, 9~J-ys/nz4;G4e:O>?K e#gxNE0N]I@[*HJ%tC/~m\yŲ{({[@r<}^*|ět~:цIۙZL2IvYY;^HA)z8FD5~+BiJ,F@ŕ9v343f;WȻ`[]S G@w1eL;i{4./T`r1fJ|Q?d)oγs&Tkdb$W}:AےR DN L-Ѯ -+H ЗR@N.DxL&\)Dw)ǡ&4hyRlhrN0HVGY4Z}ocy^d<L)&I1RGzOZ k ¹oCl9}Q㬜*Rqݾu|8Y݆WnyΗaundLFZ5bO +oGFmGb?,Xx[KU^b;I$Qi\XBCǯbf3v'S(r`99*V,s)!MH $2-<疡#)CRHqICUsahl 0W"ZDw$kTAokgˋ5=(tޮGH-ЙX,S|_4Gz<5B#D||GV,9乪dv̜Dל/tM:6FC`6c8)QƆ6Xݷb1zeV }K6!~[R~[kȡy7cZd3%TF*ʆl8Rً4iD h40 Tѡ PR-,8J&ds!L\tq/C1ha 7LY*k V&FR>GQ# sZ\vy; _9)Wm[eBb Y9u{0m/۬7+i%"@E CH5ה"r+#XGQFF#GtW)!eHQRk&\%i:eFH%yA~jfhs/(>F Tm9+A爴wv} W3Q3uf,i> 4SK[<p=S7,+#Uƚ_RH6n6{s>PB'B{J]7ƴ5ԢƕIzR5R}ϕ+C_5xD#VJdNdb4n kb,:E~d?sqJȂNy%au/ fV DQ$>)hysn!} +UMQ dE*Ld"uJ5Hا ,ɤeZnKɋ;! 8Hs^"#n8<zҮ'@ ɫ/AtOW1MYnl1wRC/~opٷ9X"3(8&~̳(аM&C zKus£&.~T1UAWcP}vkXA-l281-x`dhpI V9@.MxKɩSׅݧ"ͼtD{VH9IUX􎏶xDbQRnKt$z}w\:%Gz[Sёָ8ܜ8tVĴb$.i`S_tix8 2fqYtLzeu,Tȃ0i}L6}ew<+r[JS$6m[fVkӝb@uis$-K͞#.6U&.>1,6p];OAIjJp{ׅ_mmh|E0>V/{|z1F%C3E mmۼs?y~ɘ3MՄlv#VS詛#Z ČG#{}h262$޸8gӊ>ko0yi'NO%; H/z_ׅBF?%a$~6Rc~?Jvsn{ ; 3:&! ."7RlG8p;4L?;#hJm[+xf+5SGCRccB.YȈ ]mbv*`slP#8ihg2@ BJM!%A8LB\ѻ*1t!5d&ƺ9oR>b9HՆCxɄiS Bv(d5pACB*ҨQ(a&GXv^UUt%;?i&bbR&tY:橆5|ch1B|/i$yxx|#E+m3P/@PU&z 㙶)a?%pB_ޏH tƷ?6VU;⵨0NLa86pYAɜ Yc7g#94BN5!szO%WKoW;CjM9pddOKvC>2BQ󟣈D{ܛj[(r-(Q xB , 6h֚f+N:?woxHxՃ v[*9ޝhww/מ[k{kRrW);"AZ MXMp`H>^͞w8{:Z8;mDh@ C 6vMȩ=Jk} {=Yr>2BݪDQ9u5bv̽ '>mA{Y/v,?E~n5zөgyy9N*:6x6WeZeT;VէR܆+X{2z~0KBů]wuy"~C.&܉-+"c}-w9y/3Q9>˭~o"r.?Ihejf8}޺VG!}cvqg>گ~y=yjh+ӽc_14o~4JR)5[D7WIJ5/*n EΔa%.s[Az:gMpǔ:+7P;@p5uo Ww$N/_ҝUHC;o ~3Ҹggvb+;VKg<0Gblã\l#9"eŘ S?iS%5p'3dzoVl֕Ѫvsgl3D{v:!.lI.>&WC k6ҪJ}xb nG\gET.s+ `_R@NHe*ٸۭ#.qfmQWƼZ0!J yH\;+eo]q_j ($JC18i:{!{,/L8~Ab#]H-My]QO WLomymZZ\쮍;6zL}9_NS2-C7d1Ǖ{;Ăgp cyU- eD&}92H5y~Dx\_R=p 9kaoo/[\c瓎yx8d;6flvm|:ىB< [2yfnQ';GlzJ3`Z3s8t6bws8}mKUjljG,|4j:U  L(DY6Iy8ßNp#%f-{6U~ty:" A+u*q:CNޯPd}BH0HOG&C'}GlG=J|?߷U8*7V/N[: & }go%|wD Nұ쥿~zxK7(\"ec60O tx#in c#1亝?Gۅ&UVt.H?89cYbtFX0ž>EbL ) 6u~c<9yi c13 0Վ&N!jJ+x/|%Ǜ `bl$|H5G~v_soD @M1t>CrF=w*VV+OQCB``HdI{ MCg3._׬- 9 ѷH=iRa mB@yz5@g>1dh4!|/+~ ɏ 3"?j6z Z$W!v5C@ u?#%y+ wO{1}5t\?BdCuxDU .Y#?;# ɍ1unOl< ϰ ~1Gtt +lk5i`᩺Uz⺦djfcRۜv]wt~mޥsHDIQVRPX0}xq$LIDg +ൌrl$ )=41$Z a{OFFqBض%CQO?Uۃ&1upP։"{FvHEDaSG 6a_RZgoתezr0+! IA0}t$~,?(nmly{m)Ho dPB+u M(b~6$il„hͲ CG,.?^r ҿXQ$v@FPQN%n7~6k"8Kj5L"Rߞo(1wȀŀlDFbYz|epIb9t;B2~)׊nU~nN 3z#Ye߾0 FGP.*CGLYa[7.%HBʉt \,av5_f⇏XQAe# ~yAtX^Vq$+HH<+aEЬ9<UDBpUHwn|pU٧qy8#_};ØL9WJ#:be "`Hc mRQ\@%j&9$WRyݼ5K}֊'1\  # 6BsnsDtAv|ݫ;|Wy]7qu )A+[lm3a\3''?\$nysTyS͡Yz*U$ dzҨ]NaB bX"tArWۄ%-V]`L[ͭz?mɥ{6;r66\wc5Ɉ51aF?MS.=9e&S޽8-#‘FḒ~Pë0ycӠ|vPbQ'y~>r )N яh7΅4H$h̒?KO޳ѝǰK@Z=H܂dD'rQGǮOW\2fLU氣 y g`qz!o ݓt|;S?beo E{Ga" &%!I XZ꽔 {u5 x;ҟsmAHM'Bx\!x+ހ`gNC59J<5k "2S;.c2cnՎ M7{]XT4I btɽEUQM4 ~͹^}-#N> a@AAbld̽o+E8OhjOoaoc=E~Ye/Ѱlk#vZU0̦AQ,Ud !mnd/+Y﮷֬6nꖲT# ZRvZ;,l1h&UAuRB>دF  0X[is0ɽ.h 0dцK!A?Wb`Ij= <=C}c~(yնpY}`+uebİrX HB=/$DQ!|f3~w?1:@-dIw /n`еt`@+\RCmɜ AV1j :[B- RP--lg3uStR/houijY7h x,KȡZnFig_<,evT]eBW{}Wд$K˓0f?;Jg 2~yxV+3sӴl4dKKRaάJq`-1 xmga&F07i9u=CsLFFgyFֵ\~ͭ\N48¨ôAƬ1uh!v?@6Gy!n V[l cf„ݗ+?I8MrC)B KK!AB!B!E3>- im>{!χC9")&ÿ'`KjĴ]q wŜ[h@ @p?6sDsH+-&[g{u[א"w 6ޭÎ,W/ُF.=L;܏bBΖ!A$KК0@&XIRJ RYA`/ƸC A`|B d!EbTZ?֢HHlAbFDi TB!('|W[wJDo"PTD-I4-su;m+q#MA/.,\Y~譇9lqt"e.LkyUI l:e vجSLдׯBM24d흊*wASUp\]&hDhf0FŸq]YҥzE Uq@+oogV7R: ]R z01۸SˊZKsa:fw-7:fu{ 7>]M\im`K-Š8R Zi$cx{e {W;,V٨/XMX>n=UJԂCrcild. b~sfm;9%VG4kM:x{Ig"U =.UV{hqN6DQ.u3X0Vj7PIk:8[)JV?bV#j$Y(EInɄFDX|rR]xϴlG@ZOᴑw:$ 1aUw"I4ې4a OailcK?F7 안S12MIymһ$Y/*8?KeQÀWh+H n36Gݪ24%k Fq?˪lԩTY-(Tt^sJ Nă9J~GNO{Fë/{\9gUCA %f$+Hšp⧶s=]Ȓ11H$,ko__ywx=|N:Gۮ<*B~;z;' $yI#t $w_=//A0]A>eO|$E#8Ozc>CeRyh>noүᰩ~a?r&|%NG9Betb?t  4_D}e`'rx950N6%̫9@(N1rUhv4UX a <&?5ޝji~&a8HOE:A>!zӁ5Zo(Q2bpVC$hZ_9%-IA6yS I BƦJN]꡸Q s͒[<] <טۃk{V`2E蛣b}1r)u*Eإ#],}heaLf8S|Zq6Z.5!)qt`md"['v̄z2$;6 -VhSEzeoH땄\GA?cotS׷Yc갃k;nYiYDxqtM!.S#KbhW&ѢkiS &. ZI׍5شa5E m7}8 |Fi.X$N0 ?ʿu+p+Hs.R-HDߜ0?3^z:(30 }lx61lh:9Ի:ƌmaȅ9> Cm0woV-<)5Y{HEcM6R{a:pF惨s P%DY2mHY(E]rKS5 wv$w YKbRY$(hOMPOsꠌ \.L*)K^R)Y˳߲t٬d3knc:t6cJ2 phgONBxCHѶ pE{xG (RB} (6&i-{#׫CwB o ų\Pم@Aκo&Xojxg'y3V{ss  $g6nǤ;4U#4M8a 0 W!Y톈a-\!(XCeC(4V.G~X31⥺5ِj;j7&nd1(hP̙|^Yk-8Z3"eud; 7\bH&bcLͦ 00/i0׉~L"d*EŅċJ&^Lʮ15{7A5a4@|8ABz[>r\<_ yw:)>ŗKI >GrL:nʘĢt$X:IejKhFS dOeȐI->{z8Ϩo7Һ7ï/&Qy~ɖwۭoƴԇ+A(>e5ƸAd ?Ae{C2-. 4|n;<s~Ui<\݊<ƧG|K=<`ɠ=s)oeQ676}{:$ď,&!κaZd.RpgY^Y`CLR`¦$3+o?oQ6LaPR?/76/?86;ң(V}D,TM!B"蚡_[BG?G A"Rp9rlnҀ'WW=/i98lr~w66iƜ|wrwb ZpM1x41[9qM*ΎGsfv,n +̭'cUUl~FL2"BӰH3  n޵cS>COpݎبJb>^My8("=I6BF%?Q1'fȔT(4$T?RI¤HbJQR$d)JbSsZi<>Pu.B&ѻIgI>)JVRrڋDBP$ ?0rUMv>~3GpBѷI,ɲOԟ$)_KKkַEL؉iڏdhz =eeJVTa66ďd$Y|g490L1m:;NpݱS[**ʌq66sޥR cLc'$cƕrcu8QgRI!';3n&=ĒJHdp<ib)٥W ') JvhveUwuԆPVIY V&bU8TW1g$ctF'tD[Dz H-r|}ҥ G(l&aRi޲eZfHhBĈR(QB/%1=kZji V , >g  %@BL]eG۾ MfSEKWa k%4'Nۜ"Iܣ͚MSvRARJzp0=Tti>dD= M2=uSgwzm M u/U)FcXFBsG{rp1=R$HPw;%B XL'.1ۗ.QFLU!wVEbK̔A,¨n 1Y!I, TE@xe?>I~]@쉀ʮp{; z$w[948"Ocx|y-M,CySxyMMDn슂8E/BYjCNy8Nat9 Jゥ{ުB/6~Ie)"8wqcmxIlwuF#(1Q&I1MS XY\11}Z]iB (rfaV_Pa8ppqCp㰰EyQSUCD:ITCY޷swVUY&70œ7 ADKͅT4 ` 4< SݨLI<:nHۺ srG9U_Ϫ ~/Iw ! r$%%a4[ &fz{b8?1$*HGF%]]:bd&m+;a]#<˔/0x`&avYs$O!Zr:WU4uw9iͰ*u=(NBvqM5 <*,JI>GȪ$f9@ȇsQ4$9指Ewzr$q%i,O:sy}0pO2yU?nD&§ٚRV5DPU=͈H0!$+zsG4s<ȣoBuN&H?a:D6 LC*JK2RT J^MIa1.E Izg3 H0 dRԒag6u:!䟙_ul:ѥAI߸ I7wě ${*ǃg PݸSPTԪcȏ.)Z$pU4t"Ip#NӺ Rԏ_ߏ2ASE1dY`M;oU;j>Gwaă%Orpn~9d>k>> csRX( X 8 uHJGb S\IIڛDN8rHn3"<RRCZNy إXrur 8o9NKv+9IìݵM͡ ܖDӱz?A .P11WP?Emg{ds̃䑂@.2nUA!TH|3rly ؓPX0B9=IBLj1BB:AΪ"NUZ^gxTzD>W5 ID)"%HَPyjPa +=!ٞj9426*111&͟i6?Awlj5zP,|RƱki[6NY*-.2Dx#"1(x <[>wcf1ljYvtң hE%UHy\۲4َmٳ cҝ\)Q{%}oPޢ Q14{ˀ8Ɍc$Iw4Ύ避g_jlI$'ӣh5;4 Ȱ 9}]?.u b~I Dp:$D);geh ):n@I]=&hxSQ`H ?|F1 ݍ6w }D[%*Z*7Hwֲi8RvVɹȽXsqGұ=Ɣn}1 &'R'$t$'9u9 '4^@wV/=''x Uz)$QI,#1XT&#c7GuMINěTGS87lC~Ai "!%_I)i0tabL.gNRYYJa;eل39i3T*"̋+3ZOM77++N2YYP 3*"Ū-W,j~vd*1Z 2]VEL=#D=a{6RK8IeiM8M ECJӡh~6dD̈>'_O44HK!fe@O4bqqkiEvɔ&lj! }UUW:eR;X}=7n8sROшD<a6ɢ #7 41Q!Mř1i!X elܞ,Ĭ3Rڳk Ņ%48O=01Cj tXvH-DບIOz, Ivt Lc@ShXzt@+2nG45'u$D/itѵnm# r_7c((xH_r۴د1Ѧ1LD f2#. PtI(~QZ0 kiaX`U щK7QZgpao Zٰ߈Lj3#:ev\1O}\ڪ5}ȡ`ra&1l,dlJ^ϕ։#سIJE,ľ ?\P؅COAt"<c^\ ^EX h GY 1~PtVJX-Gw16\D@,=h==\$7TVKG$x 8VDulw $J49Ē`i!SN%bJsg+Y\br]4nm"o%:pN5 ǒ &x1f$^g3!$ I#+d+ҥQV'9-OjC}&$QNgv!ބx$#BydY&%(H`6&$$Ry$I&@1䏖$?}o C"N׃ޔǿ>D'n<#Ȟx{?I$CNpt;SV䈭"{A6-X+{}$'")dBT ZT0UuB>(²5RS$a>HqdvN䓣Jv}ĒML*QWI:cv$BpD}ēq#}WI;vB AeQƞXd"RHPO5{T*GJ5PcbFа* !׌A>}̫x(z؈wٱV9,2'[Y'g$LnēNSMev$9?$Gdr1 d٣<_UIiDTTE00 !M]FFQmMBdXhi&(w.DѣJ1z!~- =bCTyxþؒ<vyH؇uMppTHG:I C,M:J;aRL*.J'T%!]Qa2YPSP  H %@$aCB#/P>`#m t"~OBsNC;\I0~RĒ y' ȲOʑv"!䔖FI@TLXxl 'NSyxߋm)/+( I$=gpG]v՟WBu. T47h}BPp`U$N0*띗.\YkV^k٩ɅH<R,UIƀb aY,zH P#Yb:_0@Ӯ >0ip@8Xg 3PdY/BWH$0N D1#cѵ/ PƠ0Np"7ğrJc ާwʆAGv8_)E41!I@D;C (9{h" "`hM BdX$,&LdC!_!٥cbkY2 `*}}Ԝ 7b'mt*¸ B{?_A~lUIzgޘ7?Bǚ$)&C΍͊p/Eo@Av d"bR!А;`]3 :{c@JP!-S 0eC$*5~ϣG#g: D? B]8lNOF?6,NsTK],U+ e¹IGu,8yq9_? ? COm8{&a3{!6UUU*)JTXX*HRUQB#dvJGLiY2+d*'cbH<[QWGt( -,J S]IPH4B7NPI8Ҵcvj$ s4nwHD MHjO'yt*9x9t0HxSCCrU糃f,4)_ +cXcUU14gcv6 'ZJ4S+y^ui'I}t<"¿ 8RU!+^`d&QjwE(ʁ! r҂{5$$Du4RڮȝgTBS9bt5_7< M~s7N; 8å?_КS= F1*U%mSD6G)ȋBe0**E +>#\fE PQtpiI&70ƌnlDc pqyAM(ฐrFn 6&aMBT74ll h$ĠK |آ;$k!f\eO>g4#?;&8~  i0'H"nҒ~OJ|X3_n>O'C3Ѿ\x2N{:8+ʛ Rt{ ZZND $N^vIК>4TyI%rIwlJ㩒G^u,aPKvcƊeQ5 Qћp%g &*tc wX0٦iD,bR40CML-3pY=J6YPUh2  Y؇p1vIؤG<Z b%ЙQÓl94Mz;/ex&p)@nM)6f:!QM#NYIVHy`w6haJ?lU1}Y$U-f5d_UUodB0m*edXi?{;3xb<^Q՞pN^~$C#)fH"TOyO$y9Bp)3:x"|I#eMS 2ڐ}E J/H ]͑jS[d/"?jhD>pBC=þg>_-MJDCttnzڝtHuHqg269ɰ18St!1̛7I7dI%s*t%AI\nCvx|jO߉R`0ENPJ1O߯~IȒ2R~e#k$²w='DI=D)*|C>6‰cNr2{+#}'U0WUaOZtwJCM'u6>%XyeUW;aNBWp ?"O!EƄaǷx !}'<` (Bn䭉N|u'ԙ1yPxeR512o#d7*@=2&}UVfS-iCvn9oίɾ?ӧIsNA~77c78?9'ca G6D61IQռԓsdL!)'ԑiKL*&IX>!ȞPd)sMD>7SAyW_}'II?#"We P?o=5?&#ZC"&)j- MVCe`YyAvikKM 8fEN5c8 j7 q4kmק}iwߙgr(߇ekwCxu~^@`lK\P̱ m<&,oHL5KGV{F["Y 0~@)R51t79*)'Yοs$Pz0 &uMqXHs:քX5@q"H-?_0¬?j8X]$OVH*_'1?97kU$sQ*OM'<٨謌yXGnyG%H^Cت$??ݎ~a&*$&f9f.< 9(h y(OCNs+J ƛdJ]ģ„P((2 :HEQ X8B&Ӭ@c2RQSG.6OV`3p"" 鐢 Y&33M3:Į88(&8MƉA3Uc9-?qG=V36ܩ%0aB>:Q\I1&a'4}ylm9R)O \ 8q†mjT6#(J~sم8DMׅ~;jDqk]"l2\f{%| δ *nA#Cq__6b|TaR[lv ;9eXJz!uDLc4H$VO3h΂0 #MA + ޔ %uXH$8y'Mtʥl!;NU+¢"{Ӱh]nRʪf>-(x-X4Q[G4C84=GM{aSugiO@h[V.v1ӹF/,/.8"tyh4`ZUΊC5ƚc!$C$B Ϧo4<GiMB~VD+c0¨&gkWWZ1N ek{qPE=ʭzWn2D/;tN"큢sK$ѢL-QbHfi8OnWV{6O6Ѥ[仪#GhlaiÝ,ҕے04tEUY'cV;GT}c;GΣ TfeUYfxXFfUUY8_\=E=ͯ`Fn\FN"?]SuNIί?=E?Sa=tII|EbLLJ/d:+4ЪY𴕑k;#sIÙ߼=cjf, m  4RXӓGv%pzO,9l4(;>Yܣ !"\!  ֒hMQI(iQ9 ?Ya+>?s2w4].tcKR$&JwUodžb,{RNe,Y!OI!RdcΡzdh!􅴶ѴmiZYmm-m.5,0Fۭu+b9[k}b-f7/rTjGqnfZrxDL' CmTÓqn<;~y|hpgm.fO*<:%kQiKv~qo6Pe>S~Yܕ%I7^usy֤^8=y >gap9E,L:whe8$%=4?"Sa%%Qdk3;osozOESD_%5I(4N cb"4Ռzi)&p0rQd6HOt9LՖ%BS)l <<\H կKReS332fUItѐq\[ʢ0UfDbrb'͡97c$i2򆕠Aηc9T/GJ i#ؠ.CKAaNӅɏ U샷 a@au.fMq/MGK[*mjUe€/-mhCE7LXݗV1Xдp-` JH-4ީu#R:"%1Qez$|G[-~!*㸳LIGCT*:| ZY"`<)m[7PlzajPVYmuTTP d2Ȃ&=`S†U9vAzxV&ӳCE(-hZK6l6,c,".B!XYl 6+¶hH3LPзi^bufg@o2s8NM<"1%%NfIjSFw̍AdW=UH㪍QxCܲہ-qcmʛ݄lTdފ1h1,, f4@,7XF6*7 "D)sRoflPi7L]KaM h3Y`@' W ژ4NoVm #>Ȕc=1YIh%H"X$ΨMO}6J074'=mYնXѩ'wvŒaJ${7B<`#8Kb6a/1F%B 5 Ɗ% 'p9Ȉ}߈("8/H@<8;d1@C `%k,DA* !0LB7t@rZ*ϵ2UN8Wd)VReޚрe cұPX:dTMZ,Al_4 y,B024G$0!Mn¦ʕt.-IRlk4UzxͧW4tK!Gd0n= ]u]Id9b]@ISPg\fiiQA*YGPg4pdRT"o1$pi0(=PS ЬPҜRlLINpM0o{u؆"H\4KpZӠU;aLE +ձ6x@)fP'\0)ST1 عG=+Eah؜2$6K4eJ,P zXA $ SRۄ$f!4~s;v]u.+P Zb6ė!-(- dzͻadѪ2HrʡjQG)x4axn(I 6E*)T1VٗlE?[tVYt#Zle X`榄0;HU=%+)$𑪑2*QqR]OA佧&#*$GDzyiogN߁n`)yhNW)un4OyFX,5I*! pDDDD{xdLzp}aƀ )砗SD ,X^Yݽ/?f!QEZHդWD@Z ")"eJDQ7J Z3PU'ȩNmFI1$Z- ;Z!8E1 vqƨ$#@neh}ZW˼9/AB& }j[8wp |-KQhQV`U& ɠ#OS"NïAX kEZYhr LI SAhe\b? H@ӈ !=MiLKaII/6rB×EzD<"Ajj5>%i;Xe rm$ջ"Ij\?[¤~TOQ͊UUl6+cZl4XV*Zbcr4[lM۪R.JIRʈ~xQTEG!$$iGXIemd6ZT33K(śEI`ÕR1 $(( P : hT?! KB pX8\#"=4lRAAOHpS3jiMJA܃%# L@qNN{JZ1adeBXdD:i X1 *!H zT _/PYv_d\4dԲO&}=&$Z)16?##g# WE =nO '6$xGlv͝Uz u3$)ӡ :t/MXF]1)X 14%rBXAC4d$(ԩM`Б c12!uL,#l,f6Е3W&-,4B-(ZMMFOttgIDĞSi+ü{.O 4Hp/!qg]*!K LM ؖR T(qP>3x2`)"-,J0ù6?l+āԑtH-$'SDĒlGb@'"fs:b쉓@<>3yԾ`8@$ž0Y-O?vw|nD-,!?@zYyHhh$Kd "BrkBh~t p΋ `+*?< P _*h-`q$ eة`?5%)bl F*'$wb!J=665廏sfW,)1E]A˛ЅX &KA@`* IL`uhei``)TmHjԕ&AbXU (Ve!W8'2%Qm)#CK,T6գKMFEVLmTmZMhT&Yk#R$F2 B[!9ꝉUr` w!y) |t1pm" E&LO\ Wr;2UDDTEkb-ZjCV"9cJ1AxQ684ի.B75 dNy !d*ȵO'!Ӭ4lfԒ4a-byqŌd6tW i qT,pNH9nSjt"؂|84.X\|x^vHvP}ˏKUVQ>be"bo&NF*0,3_OxbR*U^-WZl#"NtbcYR&Qy@O u6|=@>\b("HȌmk@B)@HH|X52i9j=jGabJ Ax4YXf+MiD t_3W%I4T6IͣsUp rSJS*Z⌒e?Qcp`bhتPff ֒|/y|)52!Rұ&9*d?3Zlv(UTcK;cDU h?,*Ha( A J "3c$sdGGb$#lٮ 4SQ$$ҠsG{0OL2a E&3#!3jaXn!9 Z&70up"v=IܟčOK'H6tUhu.Z6IŏB|Sw pBąQ'Lp_m=7n~1EH';qX D[Y,*QYS&qZ[#);C~T?1 ԤkS4Q, XA>iu|QpK ,j;sv~UVI~i󘪪 1*DņVU@0T~"Q>Q6ށ;NsI=$'y0˺Ɵc"$Q\^M?U]ogVh}(1jЀ醷l7W~%IJBezL$O l+pKa'J"?QQ:# (a$ZTZgjiR{F,5{AjU@-R4ٓD45WJ+v,‡Pmkb2h) ^^Grk;fܕ'jR;{bPmuUȈZs+ƌ5^…|r*dpbZY 8ˉLD^a$ K- MN^Hi3ۢJ oC8b$A! D D)hӑXlnƓf9LF ~2hc>COL9\I&^[l7DJxle}|G4~H8 G6CH`#@E7i-ݩVT-r.+baN~+"XY+t]SشژL!&QJc)<]˫c)Ð=/+"d?Ni "BɺBܟ$? ߕr6|FpMaJ6 u "*D b~ߪI*"˪rēK!y$ZM<'G'y7W|H}7Н* X|0Ϩ]/B~W{w,2`_U*buI#ĸ⥦X؁~ }lBJwpVVV5^wdUni&_?i.YQ:Ք jyFKt|O+!5%pCq6MF{) O(X_pIN~xd)/G8c;JpoOn~2$>&%*Xr!Z]#iIpNî!>VTRk O],ZRkx%U)=W~Qtx9cc=n(bf0 hϠ?nr 6Qv™))J& ahGe v79N6.I S3K&P''jNUa&`fI ~~j&2?<_i7hH%ɲ"l*A1c Cz$$I^%5F=D{]Z1IdGe:/'q$A$'WYOPtJ<~9;)#-">yV#hU}TSKXj"OUf n k쬚lr<{$ aG 7~d_ZmHs!))܊":<,9m*DmG lHԫ4@Pz+ԃjDd ;dcɇ)q=[1DF۾,:  9HJ$,׼mGjwhD"^Y-ހ $ ]eB6ڇDbBK2@ڛ@+ l1W.لpC$^ Q`P8  HL+9 К`\mʮðB-OYȳ::沫 {K*>MN Օv9Q2:bAs iJ*S#%b MdDLá@qTکʨ`aF~Q9b^&Z|PԂb,pDcfJҠd/p󨷃et x!a x+Vò5M[w$w[v\omhCfE 1RpisE.t,2M 4c*J!YcrC{4,D;UTproB$ӵi]j< $Vh2 0 HTeRdPc(#ڬGC㕕KXV2FG+hy`hUY$)vw.Ћbm=4+A{!bjS#`s4sN/P*wg,Y7C%oFXgӦ%!7&N "B=DA*ң"\bJRUP~)Sहq ZBy6e0ls-+kU9λE!zRd0]YpĢ=@8#0?ZI$I$2}LA!?Ya4@s#yI-\V&*Cs# (F &5X,%"p2l2G0 L} 70Y7YǃgBhVGanqE|p҄mٲ|I3dg}'搝eTT!P̆J*W@+MH4ҠJd!!N:: 0Dd•Yaْ>SH~4t*HdLtXZo ֝;rOxS_~l*QPIcL!_a򏽇)H: 52TfA&mQbWmöKUv1c_ҋ,C_B>d rs {K &Hi^eb9#yrvotlGYGDlU;Xy^6j;igW𼧃Η)dKiRUw7RtCPd\fFK: kdHx"'L_Dmڛ8nHEh=Ƥ|l!m,5D`܋eYl-C 'ԧnHgjFpjܒFI1E"7/Qe%/љ&Ҵc>6.  * aRBZ.ם = 5iLֈkܒI$OK8C s4߶cц#$B0Z:F$ab# %Ht@5K3sEq!P;"̺u~JrL&@"il&!xjV(UUqY؄v$ -X=&BѮax4R|l^.!@L)˜Ewzv0] wrf ZJ̃ʗ.as[8Ea9ӦRYG}p/̕q "EnBwg;5Tj! P"r3x0>2s<`h)~?& j!sOIT<9Q|T, (޴7Lz&;-]8zq# 801|a8Ik; 1ȕVT*` P[ B(dO52.M i@ħ%F ] ` a * ^E9W^sF%'pwr-DUIVȒ-48%R֋4a{{sYn ͂G 0@g3)xZ2x}ۈ@9]Wwh29Xi2Ƨd A1:;y$ΘqJ4|9D(aC ,hi <1X6+pPZ>!$3B wE02 h'q3q2Pv!PBW-24,3, XeeiTtLaJ GrC[6\ 7t5B3<~HxwD1yv8 Ba%yz@xI0w^{ðR!vv \6P,_HM2R -g ^'! ZtH CH -ItRvٱ q"'&B=Rkl+a@ēiߘqAཥ7Ucg#Wo|Et PѶ<e"29 ʼn"m Y2x&t'(SGUHrAYc -BG_~  D GC,:Ѿ4^0`ÝR[2v<-!,M)DIqd[vI1qX"9i;^J36xcV+gpQe6Q =o&A0+-H;EL =`ň(G%$y4Nc0\PN+}yד :g9tF66$h%%D MPbrpu(9yV4[=]hg liܗjk]"bp^k ZG4_fu9䄄sz9#|-ϱΗ<iYlѥT޹K"#6|"v7چҞ8㽜!@En(PbH%a]ߞ=do~KgT>rT \qPѾWQ^a~EjDAU 3eh_ SÇj٢cPu/4{*Pp4S8HrR+o.UQm6bʒQ5qp4媮eRT*i<]"T Q ABV@1wu8e2yzf g=qnlD[,k#rY 9H}5v;dV_V Dų m  O6! (o&ވЊ"~B,WBz q}^* 2*wIZY]5ldjB%&sD!w 35QeL]L%6A#]\-ij80xAr̹i]ytjZͶhCƻ ZDQdLaVqkO2*ƧolsP#X<1+A2/$9]>t-x!!AѸ"ap1(0,,||b6[$C # RX߿Zv5[lY5wfMut)D*fwWsOU-h+Y4 7B#o{͕1ae,eݑqƈd82lMޤ!9d,f{EQsc\#Z֩[əuyw6QՊ6`xǸpPޡ|h 12NHPC@-UPys%k&J)1LcEEы ڕ!4/f[,Guw|Ĥ2H|!`DJҴ[1ܮvJ#Wr5Nv Yp qs,p0Ĕbh5P]Gu)l[B@XʔY ` 2T RR1&Mjj@* ]uu]vI դ)R H2ζtGkqwsiu7SsM\NrRfaQ!d9VwNt9/p=w( C>i:wf\WtpH:o PQ RQ 5a*RIhT6NrLNR4w$vm~@TStXM8S2f..Vщ~'CY%n'xv?bCHYG12Hd@} ?H;]N1)b]L}kiUcdڷcG)pr MJS 5Nd98aXÚ)l;$OdJ$"RV=ٓU$ 4D jU*0`\AXb>C(a CXcDpd Zm }Ga^(f#OGL|a|MڴV՘f5JR ,Ywu #*9;;2YI,1ER)R=AMQwo5!ᑏ` ti;4P)djjp͊|$y]f6QJPa㏑#W &L$!yLaAHolj8f1ܧM'fuzOBDQI)pTLs`Pd8lL)g YAMbe- 5ܥT;C[k«[,,pox](360ktlآ;bCP 0~/`fnXXS'ŞFYFJp< (JMhsA &HRvDQ*Z_<3Dpؐ94%(׾7JKRRԩQ  |R>8hH-r:RMX IKN"cWJh`G<%°D(_a+1<̤<ʫ^> IVEo*%l_,$]ܖW % 1!a2J#@)jV+ IOݒ = rGz@0b(Ó %F3B@e}`}}O[z0w Y! =)EGP/zz ]$D * H@FI0 s G# f(ZmVB.V"1@Y! p`$,]\%DmmZ'¡2D8K U-(]ٶXLhK`-DJLb#% Hq , T"J)R("dGbqpMKF9=1hB@x p4hUV!$D(D& {HaJ6mO\NkImGʨ%``0bbHP:ƦAO`+h\W^>#-7|a4ȕ 01&1NN[$d3(X`xH6d\=aU>HRCMfeo|A%gM>3/OOسObz9~_#wHaD IDmfHwe O}BG @C $Iؐw~ ĒI; t}*hlCޣ6Ky6zICܓMFٶkm=o$BؑTߩL$yׇF{hPҵMRd&R{ 1DwRԢF !2L#>4dO~Q4NF,_"R1 `CyQI^~'2yh8c'} Kф"p96h%ܠ)6 !Nyr55M;O9'÷Ȫ&IDgw7O/7TMMl((0PÔ;hP^>xp(s R|\HHBKHwH}VX~  E܂XSvY2wFfI9LJBGN'K*r% q (>bMT$ h$f3FribJC U]8h_ZTޑ"P4JB)"M>?h89;D1u!q!@z7y649D$V p :yx@+IHcS6h*%_:ildɣ&7w12Ůh:ɏ4Fo;ѝ& G j !0'G7PČhNkdNCd͊~Z[~f_~C2wuL$HHT)ȥG~)24OweiVk9xXγ]mݭ9QsbޭF,bl8$rHilSDD~kOF#{=uѡj#DpնTzbHm#^ݽBxJS%s'Z{vmw3yr[m[f\gO1(Hzz H_-IRbJ!C-y#}8Ni:^pF4r;R4+۷ʓ4<8H# m#HxTGBr>qJS!)zyC">DB4M _D H0jZ9`;3Mٝ_[|mR-3I7X)0|=5"UִqK\&(1bC2iA V{Uf#%0']*Jܺ6K'ʜK󾡼?#Naƾط&D!f8¼$0ItPc Ա nKxfף"Rh!Yق ݄;]50嗅P(jSZJRR6ƄY"C$7iv,=C"mb<$g˗#VX"r[Tcd98e; pTg\)S(J!6ը-;mm;m3jffmh.mad H^ݬ̄k3k3$k!3bfH.f.f.rd3!vړ;Rff-LfbLu;XLI3u2.L.M.L.g&9=a%zSnffH-.f.fW&sdd3jdjdk2 2UڙڙZP̟cAvArfgjdk3d3k3&sk2*LLLLvAv"f.k3j33>~sI%E^r;XgjLfbfbaf.f.fvOC7Zn{r̋93~HZY j-3f.nb mY RJ@ AST! &1B\fݭ3`Sqj9 hNJ#ъ"!S=Dbda"w^N iZ ^2A҉;!/?~??'??g?|?{?~?_sOIR,IHp?䐟>*?r vM5PpX[lD@\>U'^B<:o}7[-UzPa@ZPHIF% @ V "JFAXJAh%BU`JJjmE&lmMmHUmmE#iܭh*-Qi yّ,RDv )0R b­hI6: |ƹ?+|zd}p<"eJ#Q6O:*( f< `$`Ю!dhijkU]\0/,*i= 'ĮqNY᜹"P /K 3A%)*^ |@Xw@)y󺉢`J*2k&(IPԪfe&`?7^G(JH2MʞwUUR =|:HSO{U(AJ KNᐨ*%IJB$f=kU!f} 1Jk΁G9+yqO(O$CiϢ"y*lC15GϳdUQ"qJm+A s[@M*8B1PG"Jd'(D-(&Q$Ju` 082ZD`OTv'sKTJ92$a0he.@]H KHehq)ml;D# 5B`hN :dPvJ@3`LdD,ctMB +"hD Nr 8R #0!Bd#A8J) n9! rE]0_}AzwZ+)5"SE7 !LqqV1Um\;حq,gcHȼeChNJd"EA$~]v)StRpֶaFٌ1?Y(h]L)fʹRoJS1.=R3S=zSjfRygOdi {;/SJ{sC$= `K$,SѧI^$H >Đgxv0Dvш#Z=#Y!bvB,/wB- {,C:ʚI H!d2; DP0STѵlcQj$Vm UۖA1EMBhW$JjR:FELBgOl'9 GH!3Lj q ">y=+mt a O)ޢE $eED@p By> bUƛ,14K ĂB#I ,/ @&h(|Мù"6΋GPܑ1ZR-LG_aX:14H0(}I X5:XudnNFv)v'&'119nptFLrz9"< &r"$MO%KdL&1k>31[M5`}ћO;_|C֘ Hlv@ә(FR+CAJƊ Phؘ`WeB0ox40s/Z2LV&Υ&7X2Wm ru0y۾>LX* w(Yvn:,JXG5z0j{F\ kjMT͍y[ B4#^Alڦ&Yžrnv0m{FDr|+آXWjCL;Cg7P"sR&#Ai+#ʑhWlnT}.Ʊk;xƐcRr(Kl"4YE&3qa?Pi_ zĈLPJ0$ %3-Z-e6KW1@G9'+Cdi)=#g¥Sim.!LQm1cB>r8F4pc>6]9k DN2tZM*5RbZ}NlqRvbQK"I 8ҩCYi ?m4%y2HD + 4A(K)(RQ$RbY[RԫbKI֛F4 S@&A "9|aGB9؃@KT 8 `N=j?~؇l*[jmk]5S1&24;TOv |.m*!o(1P ,M0l S/RlX@) Ѩ;ү˰4Ͽ҇`Cd<$x!S\$A꿋}|=F\6xB#$<1T(vFzW( +,_6L07KR*JNȁ/ Jqea&YddJ8@I ޏ`>IH("YXP%ͥQR7XVD S.*Ȋ0$lliMG*60 t T*n||TKkaJPfKlXx`(,Ie"mS1&j%mP T#˱!K`[$RҊ'fD%\zJ "TFVVjTjc&3Ghi,dea H)JNaRИ"7.!lS ÄݣI9T2u0{|cdS jK )Y/xrJL16`B `+Rm',,c 3q+r-ztm1(u۽ըYhz0M@cpZF*S6r1D1f\4ZRUVS +Pѥ+3|E$V7|0raVUãSb)Q;Q(ꢩquѰ#M#FlfƠqAaL$`=eIBQHC+ɇ,0C "bk" l(]{lh;tjl))>"I'rQI@Tt 'J@y _22v4 yR{JJFOK4~uO؃nԭTҁ&$A@1G{pIF`ܤn$4G{|z iI Y RTXh bLh3aH(d`iTSO)>&R`av_5W{YSxtP$JGX0AZ0267Tō삓 1$u$B!S[&w͆B%,u&L\c@Ԏ[o5˦]S\F!X.pMB!&b&8)'0MR][dUn 0Ճ 0 AV1O>C12 r/C{$"!:ܭjf.'#G8Dx4= IR4/h<`DJ숰IO "5 `Eb$rH չ$W?eD< '6 lh'_TC` shE/n &譌+9/K%m-3HS z0:w>0~$@05KB(7aB gu0Ѧ"[lX4_nH)J"t6([zRgaM XDhB͊ HDF*`TSHG[ 746܆DdC5F1+)$ݥdE1D4#)U X=Ћ 1"uc4] G8&);}"=)'ym-AiLSLjfX՘)*d*d"UήI64+% D-eR0t,&$+M $A3B3CeZC0gCP'C#WH-)_xԓ+4ñҦJW!IBdd L'C1~@hX"V%%(BbTf99Θ0/ Ma8%VeB5JIjJ&ՍkT *8AbY=dK#` HH "URQN ' @τϾxH,9f4>N (Fb/dF ޕ(qՐ_ I/$QP v 8=!Sv2d2֑ 4bX$ 2+ bbk{TYa p88q6#;9HQMG!i tD M F_衍cp˷k~RCOsC::XU쓯u."!w9IZ5IM&MDL471rWL̆o X 0 Эk8pUTH?ź6)JW ѣ0sK(أ={#FӒlSؑ}7Wbo&'6G槫 }`?CNTegOmMc>hBBfRO|r95 z*ZAںڶV+uP$,dcFԠ|EDBЩ n. _HYh\=&'2[uGRbJ̉؉ IF!LWdf]JjhL:Gc;c{$'zln+.wP4QL/-VVVJe}ݴD0bbڒ0BQ GFTLu>A]\$/rr f <^SL30ua155HW}ͺ}oҟQ^%| }*8}4g04 ZP+EyX±Ut~8~ߑ31?5Q@GMG2ޤ$\K F1~XP;>1N&91im2~?FG j*,J?g#%) >zAy&RhP!YHPj)&y plS]D~N!!V!KZhalLde-I0rW&op=}#$:w49Fzr& t`:(  )%ԦJPap)WIE%JƩM\**w]Lc!sT`f5!%"Ce&HYKմޝ I5s=* *Լ7{2I泥vT8aխMCHq&dɭ<biKpE%Rơ#RA߳eVh`<2m!i[/?!`) {Ai$2EhPtZXVJ:ɱVKZ0 'SLM+ PF'xӅA<\.1$.a1>VISUk6I%J6&֊^.XКbd 7: Hif%)IBG$a1!dOai&1ƩaF#!"!JQN$6 ŗ M2DRҦI $HQFo EixCA&B,DRY#OMqg0n ?Gm{EєFRW+J&DmIWuWՋsUH[DQD7$0 0R- h*[X>[ P7s@ܔU*SDR``1Q$JILS,YUıD_.1xRb$RZ*XRi1$^yt 2 Y`b{HDRSr*Y@%IV"F@ \&WH8ZE+{9}Nm UĒ4NjYr`$vm8BaD぀8务-&2$2a d9dbfʒ䥘ᙆc"8(Z̩ҭHRzbW-XW-IʩjT6'9Y56]B5eQW]/?Jd%؟Xo#%Hu>K#= 4=k~LbRC#ټdH~*O!+pcQ4F b2Ꙕs1<-an7Jn:rr]TxeG9"&Pjc&VDC 4mP)Jv)YQBYRZW]-5KLlT"%)X!$@)hd58m-E:D2X)V - ,Q )11yNBȆb IhAD i& &^KÌf8NcY u'j͵,Z]{Ԇ*%.BNEԉUbWp*3ya)f-o.ZfeJeUEH<6>Y){{Cz@T^ZշPM0~(>'E ) P IPh.=(3>m((Z4X᭐86 8/-r& 8ҹ1$?l4M,PmAlvjTD&tAԁ.H2iTJnL8G:1^h7(Kh#xrY¬QXAHBХv!Լ0 z\2Ap2"R\ FrC*s[陴t)GYbM]86nrc#aeGyclXwIī#jҼϾG!AT3p S M$N 6H>/#갨!dG0/0Yd(r8e] M4paQ3$).:G}1G /@ [1Ʈ&( .$"! ]Ҟ%=b} F*(j`X1#SG'3-8tfAc&!K+3!UmgE{p~m;$wH$U^X?}s!~O$tzzAΣR!ڎ =[V|N4}+OMXU8l &e]JZ3vjh{ 5V]iK-3i&D'C~QB._]fffUL˼Wlei[s3+2$Ļ lMiaw.Fx/&}G$ OH~Ǖ ~ ~zddR*AdAD(z|$bde`15|fQoX!.i@97U!8V.JtfY%R"Ť1%dHpt?icXI"hb19ѥ$Nꡫ7՜,Fcđ8@/i4xUSU\yBSCO'yl(I%P_%m,a}%] O)f,BV@DIYZ#$ps:iSYsƊ)f)6+QO 0;gvDSIIR}`:yԝpuY9,bl0ɺBLc*zRE k2ئ`@`bP` ;)PV%MZ*tR3S""=Aw~A!`8p9p# 0(Ba" 2iVd#W GXCԀ7  ,ػdxC뻟%{˞$7)ƀCX;ѷ+ۙ+#LC#EE [ѠLTq RHGјeP[T*Bd%)U[-QbUo!x 1HI{K$ 93~eA ]@R"#ʤ0c*؛EÙiS>t@HJA~q!hxC! xz Plf0ȘCg2쒿4 ;7$]VjaqX}WNO54(Y32Ha΋pax3U0-v$,Ƹq3Fn\m$}F$CVAœe1 luŸRβEq Pp4,},HE(b$Ìj;*!N-9%=9" R'0DR 4`6}b!"XidA.Evu(!91.ƮŹ\q3.]JbU2V$"#dTxbMGHȲ$*Ko!Xj5yꉯBz]cz&̿mX,?ӤL_ZSZxHP)B™-"J%Q\шh5(9-@ (#CB4|i)__G.=E?a[&jYef*; 8H|lֲ|x:$(,SSo_@ vμb"""#:6$M Hz;$v'Q+eXJ&Ou͙Wғm6ILF Vi#YDFĖIjhdL]]KK[e32Ysvfe2uiV6R$ke]f#I[-wjX)ie%L4*S%R{$HX@R8 NTtjUUԪk5dp A98S}=W/~+X@W>IzJ^j#`P@;pC(Sv؝Uj=>L?*cXһ GȌbVbUh=jG?ac :?5o mʭ%K>o/[suLΥ7Hb}BR4'= "(ÞR|])LJ x:<(̲ PS l" HO^ IfU]MLlx?(XcFɴHXIdPv}r>ꢪI9I>?s-Fd?٢ka∧VIQy<9s;9O&'y Kp%A}#'*ԫE.F%b2F$2H@1qW?,"8B:BjTԁ]:$u(G%Wf'hգ"@#KZEE%y*mN#S]aB k,P:H>Cj*-PHaqciML%h{cZ XC0 WZ!71F c5I$yt>JAZ2B42 ("KX՘(Vyf+¸!V4pI% [lsA"=Fq)P(Xz>X^CfȢ!!ΨgdnK"nCpGcbī&pcN&*́Э*UCErD6s{"ZeGڦ*? MfHIf)*v=m>I_8-  SӘB L0C84ƍ" 0àVA"pV9k$H~.[fjo+[Un~+TȞQfKa;6$*dr0Q!HPSAyH{Y]F&AT;dFl0 Ui$(M&ud{Ğg4p{öf>bBƹMiѽV.T1F^9 GX'BWGNGhpjNGdAj-Z~Q t`x&%(#PBR,XT`J0>1Buy".kM}KKbu%;>I^SQ D"}d+L7_`_R#[u|w\ۀޝ4h0PJ>P 0p$a:9wb$x}sԛ(QL-@iЃ."l !QBP@R45#5U,t_I0 P1ifCc'l.G* 'PaiPҦNBC9©B0e` MI<ϽT=BFҖ5 V!D``$;Ni'TXdB'c_6fV•d&XƢ&ZiTdRBXf$E Qh*@ AаH(͂( x(}L0!0h6_ #[PFiB "R%Qzld"sF &vTͥ "%IҥY+) 21[˶Se. iSpe28H p{9@NkRB!$0 1Y$1*51!)5뾍"C%L49Q >u@E{DV|k*q6Wsa)@dDjD0swf9Jd8%1!CKA}&(]M25@41 ,X FXM5//#Яj%;?I(>rE2̓/*Az['{kö?YZ?u]zYawý/<5hsdžFro+t&ˉ$<7ar>+ I3J6i u^\}Yҷ8tieEM2!"m$1܍*)&U5gG&wP:=RbqKL&t2m9iX3eŅ@ڀ;Wt2;cFO#F4XuA D{ZvԌ!ĬZCC:Raɦ58|5dJPR؄!xMi_kWG|AWcȔLDWJp`0(R7v>v$vhP 0@\ acEѨwkgi>i A 4Wkt屬žFWxùfUԩ{u>B<]AP(t2\Az,JB0BtAPPAѣ~l $B'WyM0C hnz r&h53l4{.&;[,A|BY3!B6gvBu<뿮0~IY bT孌FƯozd. 16u.@}6vO*QT2ii`)K".AD*P$u#۱}uDLh1Ӳ^[oQ2Dcce8Pl Z1_Ex%xz>B i}cbcI&.<2d,rPUwf/u;]3cTey 1>|O{#fnśHNx: #81͈2i\]dW?S.,]KOYOBƴ4s7YXrr&3`pN >B և^ ,F`WӋ-aRUIߖo:ԗw2ϑ٧ݥqݦ#: r,@Jd}3FX_ݿr7zӰpU%}I'a?էk2N=4Nd*/hBID}փR]F  I@EF,]0)bيafP7J ItnNk5f©hf1V٪%ˉ PAsJ iL@8DMt:ҠqɎN6RFYSwIQ9h{/]?┓CPEi+($fXwC8tk$XG x$_=TPlkS1yrf˴ҙ(9rA<冁{x0_G>?k ipOYKE Qw)GR2V (w$Cj10=ԐRr7+2,%P  FI3aq׶D[1]U_5WLZ6M͖/NT2EH2. %' ̘ymQlMU$;`q>G4YJ2KhUe(-*mA@IM}mufz+6ݑ|CQXWTzRb|JZO ,HA'hXU}jU|f+; ;_U}}\y*SH"}g.4pC+{O{wiW($֢{;1hFM=A?9.s4GHX w(bE U6g/SC,fX1Y-%S %@y_1f#DEij;6Q`8q!*6>NkcT8G0PY$YCPON3MԖR-ρH$f#iw6i h*IbE0! 񙙪u;ИKMm9M_|m[J, 8cG>.d]CP[9[r Gi;RBL h;2+ ?` 2O*dKCp2'0_(OWRoA & " _U0$* FN M;XO-o8s`r\[SSInP4k K2J((vK„h-*/HRkLif‘g\\pr( / \;{T /ؔ/b 0pih{J0Ϊ'EcJR(io :x5;9jMO4k2.XTk#j4 ɳ`6tiDH :-!ס*aw]<>OmcxĘYPq2FL`e$;x@M@>ة >ijeUo+QTl5!jZ52e+jtA$#A1 RPRI2 @LX%EM*@ "~#Ƶ=sRCGc "Q~"m7*+ |$W$>c?{UOCT~T?Sޜ2fj`A?x,K ׹tWΊI?+\|:XOu}zdMU2)%lTԛK%+TqoTᙟLA\K*K Oo>֛$G%I$ʝGFj1R۲M ]$iX'+\ ?óɟdye/DkR[J,43A `"Hrǒ fIxQCq\1~nI^)3Uu÷hnu[mH@f2S 醱qpq;J/[JCDWo:l8hZ M2Xh`S>YYk0ѵ&TľN'tp*p\G <dAFa862$- д;֑^vhP:Y9V.r甙tDP6*,$bJE&h=sg00af/Cih|4BFa- xٜ$_ OY9(Qlzah6҈8al9C +4q dУS]MFG*e +x8l%bBL(ei`Fd|CmvM&]v&3a0z"Ȃ!8rE]C+r `'lh;a&^ba1i&(îΧzpQ#\QG`͊0/k;p\!hI*& Qx8!%&wH]rH%BlĸT)huz B.rg%#/9N26o''(0(XY c&R83_$ YD%8-rXvl]XR \Ւ)E7gDN!|q5aFYڍ,] VbĴT`al&Sz5C؟5gc0˹{t " 86Pzo+BďCFRF ͙ѦtΌF`ŌD$Z]7cbawp0RtVCFbbzZV,34X#mPd&¡Nr3Fk%eUzRlHii4JړZ%jYJeYY,e5Kf%-P5jyzvк"]sɩ*` j4-HU"rAY&2ń&C.F뻵w\Z2e˺ikw[ݬV#dPvn]Zjkv]]vZ($@ IBD ‹PzUs0(Sl XuhVȁC8aTͧ1LP4*&cNN &DE w# v0z+ PSUF"  <- R ʝF'hSP+a:R9P?-"=iBzxxtB@Ȱc8W)VȜQ*ݹ!o PaAaɇF$Y/9B *qOޛ`SRtBJc]!tEs0SyBeu{tf c4*#ub%ZZKEIaiH9#4$)J1h$g3J".өJ^/$V 3RW(y`%J!nIRH4JH%F ɵ%1-=4(p-d l`ɌF0d][]j$\HS%MEVv>~]q h"KKT%e*]bC#xZ)la%MTW$PacE0aWHQeat&BHulNrュ; ѿURϥ2{ΠyChKLR_OeYz-V"/M5hEe"Zir adHVx` h -u *eTHnF~Đ{3NI[KpJ,GXlmjkbSƼ<̞bn6 7RM+.GĬJê%I_gQ|fGw.1zsǝ#{Ÿc+D $A`H$8ƈX @$4{Lբ׫,]ummmrCd4HȢҡEu-DAzTjҧati&YL|[GԹ˜RL\rrppE%f!prSeM3[y[Q`]ɒmP 3 ZQN+11"2 \9hdX1R2ԸID2$@E(Segopo@țbgl';Ԍ>)"I*~GJ+4n~5Nnj`H)U S`SVVJ Dމ5Gb%GR*d*404B?(DD%0s8{h\|5CC<!Ǥ&4o`~c|H HO: P@,!{ D9_^ʧ;h ){XDP, ʒ |ۚOBH́{#E!m. .IL {aRHb&]OCUHUbE%5UN c I.56JHBpb_6n.-YcPveVqѥj_r^Pܦdyxtt1,Jp㸐x ĠțSA*ҷD@ Z(#J6A)J5eڢh$QKgbnAND>;k<4%}wi*CĊKA%&HP㹞\'dȾYI;s2!V$9QKD<QYi&I!$>BiS+* H! '8G4!ܜDvB:HT'kH $L04v1 bJR6 𓴐>u:Q!OT*Q% I။E"z@}@D4%!_[ |4ÖDC%=~Bϐgʧ1vHgdY̦#1FNJsS6JE&X jq % ,H,TT`vnM!ޫIUnᕐ{d 'J$!8"2%Z֍2J((F"r#|F!Bf$|:0!r p9# Q0%mS Q.bR4S?Ceаݱڈa W,%;.(Ō:M!qȡ{zA{Wt8$:,ך-/ya}"Dꕩ,$mJx2.&W+J?~(rNI8fN3xq5:)hEe,3fDA$Q%?Tj"$4Pv5C)$Д>A'ݝК'ac(I:DKN I jWbWj=Sݲ:d|T,uDwğmʑOGfNg'J> 1M5WPtHYtJS]vqF9HQkQV׭|eoªc0Q7>gu2FfN1 #w&Ѳ曛hlxC 9\1A2[b-NM)?;rtle8LO!qPT2(A2|tO M?^clSJ,h JPRel̥LbȤ dU6,,-}cGSS$ l_ؚr>p W! &+Dة?k("2@I6}t{{'mKSRF ay*aزu`he6,T\Ƶ,12TW7~McyqAҷTfxQҲs  Lh8C)B1B]%49[-R7$#D!|FBaI#l/%6&; 6w3G%vc}VЅ*sU36=7i4]IQгD(B)U[01LSxRcj3|N^5'1U# 7iUb<*dx be #,F{ć$^oD%,˭ã@GRq$4ZwiI_튉]#s$#D?5$KD D//%RN*₣⼩wp<ܕg }jBO&]D~!'>WÝqZ2kŶ+Qrf 1 mEN 4?k"6T66먼%>"Yah5S Չ!I5 (D(L ?pڰXIhWY!U(?|sn4$Ca[?ch98GhP84 Pe&3!-a\'؅yedPG aB@H $Q[BhT9;_ߟyj\]fe47WJOGo͙ev޷qoN=0, 5<@e&Ap~ S>m ̈́n01 Wyx&b[0hb ?A[c}?Cqreۓ"JU[݈ӹ7Om0{}tWfrkCZ͓7mmH׻kMcq@wkctrA{07v_\#n+g3] ׈ɷua塣}>0q9ףy9#o}:OUm̾'\_o7u{@Gd>Cټ.ks=@NﻎyZ;o}\w}dmz;YoS- ]ӻiA['lt7`ri=㭅 }jvf]N;KsGZ}z>UES.E7gFr}BV̻ }t[OFK\vQ: ؽɶ֨ͺώEUwb{!4>v1t_̞.ݜZn*w<5Em"ԭs*xfm^\+x{ݯwO;%{z>bQ*cwGS.wwyPH{= ݹ-'wOϣI>R_Z6{u`mK:}<HΒY6w޷;ٻ7pst_rN>u&c 9F{SY5Otomex]:S+^Sw7oahݜhOg3ƞ`UݧnbG4}wrt.w {};7|fʽSx=]bo{v+s_s:w}m)iR'x̪)H3d:+I%:S7Mvo;]wuv{OGZ蹵.T4֗chB}5ϳ8b^gר)#nۅϳägeٷ"noCEu4)JnD NsV۳)vX܎+{r=]ʦ^gn{\ mK жsur])ݶ\9fu7`Av.^ Tf5ژ̟Zix}lٯvqyMts{=귪]NҼskwmW}5u{ǝg|ֺXl==vןO\-6uIUfhsv_s*9` Y@ FFSzS4'SPd D"DMLe6=FM=C@h4hD @#CAi= zmCizF2 I& @ƧM4m52 bF)!L&=SxLih4*$D  MM 4b?IKY r&cMELe`΋LPsٚ+ADIBUC$8$Zdخ/Wu@Q( L+Lk Sk0KDBC!8 qHK2PVZnaVkFktMLɈ23߲)p[K@l+P2JLF)LaaAFY$/e2_W>p{]L68Ci ۴f&wmSf6ΤzbǿWF#\0.ԻՑ(Ԙl 9Ӥ-UfkD "@y ,M2'zj|:)pfchvF;/ẋR4Bm۷xWWxۤ dY HD5m2C;?|Ҹ+BN)}o||wï>.7XoHKNgG^[4o R٦.?b>_)~Mo}#|l@9}0HTC\,`E@ZC&cCHE)094&?D+Gmވwo,^ o! ʛy헞Ong;p6ppt}ߦkVGQgW bOdK{-Yl-$`ZQ/:txΆc8HHl Ŷ/t;o$3&ZGTqQ& b [ק?ԈguNo0(cmKuJCHn>@4o,>7v !.%.BW}ݝC2'tq7r9G}81b)gC,G(zn?튢*e mx#M]qy 2 !l]5 Q՚3J 0+Ava6$c!M`U8s^u`~jkH0j/vx D| MeĞXaGvQiE-\$E7V`p!~:=

3]mGfxKg}D# b˛Ŋ NuFV>5s!n&WݗT&r$mu^݂5ٳơpmԦ HYu*-bL?c*N4K%VAGPE9j)ws{Pf_>em/;0 HXNYH0+6-@h8H7chڜѕaenvKt Pa8>EE!@Vho O˖M"R+#L~ٌ셤B@ {Ӎ&II^ cՐ[FZKز!y6hm[X!bٮ^ l`p%)H<,ib'l)ۡś GThj&&̽\rk n@fހ6A_g l.X"||trv?7|o1t'~\ӎ-y2g"cd˺F5<' Lkek ֕ԫM2@q8[\pw1u@Vq.r-S-X=Gp\f RC!J|xOc2 Lzj;oOw7ƙ/;]ܿ2Cf'?S$~|rH$Ů;Ի2ܺبΕ -Bdr3%|#Bg)5t;i{C9i5];cVЎ$RDBx}W᝙+Wed+Ch&C#MJȕD0WvRŵXq+$!:z@C,FRLR-⍠ hp?M Lr V%V.Կӷ$m/ȨqQ}[#ݙD-dD$DpJek۸OǕ2=-;!C$ؐFI-@6{؍v n~Z@ Pь:$w=^vR@%n-z;jHxnkoH$uNPuNnď rdXflRHEX-ȑxvr T1ddKֻdzz.k^ږ]3i2UvUi72 R&g 'Z![i4#G\VdkLqIفU5]%ly^Gl~%w:VZN8lpCL`UI)0ICYSfdJt' +&_!]eK0MXt}TЙsSg&cSBm ZphMt+yrqn^ɠ#{u=+{_wg>z<2u )A1Cv=0}UR㚈USf۔A[3%mȊ2(7bs)sI 7\R~η1v]L[tv蔌QDdkF$ektNd~z7 %F6()Bp}gbԃe0%Bil?ytX{/gV`S'[ezZ, ]LL-%  [DBU5gEXߍ]$k"@\_zصYp8RN>x4fߥ^Ө @o)bF(a&Kia:DQè's=:$I<ѫto|o5ǂ4'0Ro<ߖH紬R"jǦmD1˒'dbC#!9E%]˟wkηXuõKj)l6]kATtpB̐Y㋊Y03 W]iR5jCPJvBO'! DtHs'%/ӥ5JRJP'uvy} 1F8pd|SgZKħ'Io|A^(BcQK)JәSCjZ)Y`0M#hR*tu*Ql t|OEYe$(~(x0Ee J,k(vaI*l"(b@3L#V [$0j\\pD9yg>>[z7X?>6eklߖSI}l D/==9T9Zwk-V~6)q*:01a dH6ty5rNF&ݘZ031Ȏ1'-N3]X|)'iSuMΦ`HY{!4F0uFMҚd}(3dCF @Tfw9\xP$^LZxih09X#(_bwj4!/šf7u5N (w4;A'8KBF@X Kdma'Rݧ| x523Zv˅űX.%Xs~bZ6pX(R{`~K{\ a_c 1#ųyui0!MF=rajCǃ*~ZPX9KlryJT{S y '7_ϣ>6^˴G-v].oӡoO2yGC,/O2ow?/AC;TaIm4.7t{:yha(H6("|!)Hbkʛ ;6s=f}ϔ9p{Oʸ3΁ЩjqSJǏz}@AN(!꧃WčE$[SV:cqܶ^sCYҼiXdl-}LG%:/0]Ѳ!tE=$3bIpId)5~4K\̎1Juucݤ‰&! $C  酝0唊[teS(i׸/sA' K!' DvIHodž&V!Nx7"K^sS'KDBu R 7xvu;qm' pݙ d\n'S<;q}FtR_*qߜ@xLce 8sq>מߩlWܞF.l(QX߇7-zp3*K1ŭŷF#nI;4uJNrpH%fLe4,fx T# |45B=y9D3 꼛TT^"rl.=Zz} 4CDH.|Wޗu$Q 9~L6ZFآq/&i݊u_#2qFMBI$I}bAֲ[h֣-6*RƢQj3"S'h~%>v=ZA`F/u݆ OﯷK!_J_U9[Bnp`_KVzcԔWShCr=7hn^= aI@|$A.`,DZDUp_>Ngs Z> 1 1O%BNBM6_%='=Yrgu&6ktT}Owɲ]j?$$ oCPo`b%R|>;,o;Z8CȖRN0;m|"@pj婊nj?Q뷥#l`l)$|d5"nig)D/P_Ɍf+FmI7T✊F1HcM5(:_Wep7,l-fil&T%g콥%ZXv|[X7gc0?A1aͣC6rzd8%jW[H2lpPnt.v9g:O)KPr1^{~]g>IIR[\T%awg$%=$ Wkzc2oj;cjSI>ܻ1!DFэ r13 XbbnxC̿(eKq>=e^>GMuΟDӔT&1*Yĩ||w;6|>0y'@RKnqyG$gfu;IA߬!GQC~ld4Dk;0f[y. ;6iCbN~/=ɋ),ɏ$KTؐ#H 0t :ͶL+(6 ?W*w^c\{xiNweBllllldO庅D.t*b~N~ӤVT|)%sL)))(ﰃŪ=]U3Ɇckie4S"ьEX ZU Bm&15tVkjEMk!Շ(cQʆc<5i\$/m*!*)*^N}ߟW ҩ.= 5*!b0E/dk R TC> yj]^O5'7?)q<%=lr%q*(2FtLy@aB0@< Zvo2yib5$Os4B#/bt:奥G9mnrz>IΧ ˙-4O B!rn# 6+H,?iibȳOrד6lmq-<.࿜JzץDF9?¥煹UUtyq8g%p~᮷M>OvF{uKsVic#:@\i.K22i%BY{5VhOɼn/xƋnÇTw^/aby^q}6?|]{inb#{ +RR4l$lҡ8m%R1TjYZA1Ͽ M$3e%Z%#(EMl ZS-;V!;iDxA]>U&,&c8 "s% !$owo A<c)?>u3,gAv`J(@PӜ^ "pB@<\%XB aKDEB율C(2X{\ٔp?ABk`"$@XRИ]lhTLC y[G+cy8:[~OB "FD92dpz@,0(@醪R" 0$ 3  I C"R $J0`F)HCDR - &+*%M<'6#Twc&dU$dN("%7@AhP6`'(A$Me$aY5ԐmS `A\ <-p\kxb";Y* qeBT,^ZD' M.{\095 OS3?H{iyBG#бDuRq,(hJkzݥ@:K_, <P8*-HE5H0gSDi۵rW#N3?S\]FQK@tsL^ e"@<W÷XHzjkm{a$HCk^w fC8; 0@\@YQm QE"-6I %8BaH .sz7&9 E8m-)FPQE$f3|{"2$[Ib̓u,Õ֞EUE^L<6zғdM]zꗜu3dt' Toۂ+LJHV`B '#ޜyF.5U]Ÿ'T膁+f.D5P,$)7^yŊ'ԁ*DwF1T$&J3tiV1@9Ts X0O!{ҝ6~FԌJJ([K)|e%<nsѧM?*{IS SII)mKwq9L\K)Kprb [DI+8% /e^. '"4`5t@MLLm;]&)ኅ=mTz-O?y> r#bU?lxvx[(?i`0g~ Q J11 G˼٩~>`ʱzL}>&fJx,hR>\jaezm*}Ƅ%T.G +"Uj-.e <-Ia7`L KipB$~APгYؕg=Kw9UĤd$5vp6+1>Qg;/9X+r'962A;-bplsxt 줴luXٽ Trb_ h4W jW6*5u_,Y,2 Y1(VܑYm< Tb.L_m"N41ִe?I狾v~1͚SI&qʣ9F)$뻿,EG_L0E73𝔿8>x|ad 1& " ~37vBRJ( sNGM$6:0hhdU|#;n$>F +ZnXeohhE$[Li =%}dҕ/ʓcql4v =+.VpbGÌ 8/}}xo2 μW7˦\yJLQQ FfzNp^WlaoSɡ]Ѵz|lev!s+|\a,g%M/ D}\&SKvI F `iKIwp!%e{{B4:YT?zA "l=}"h[:#GW傸B2kpj&zI2LZ{Lh8y%q/R0_<6|TK]_|3ie$>f?[DE{l{CyM#Ye 'B'4gHB:I/w`OCUލr-rbd`=&ןk#XF qjZ:Vʧ3 q@X-3P`RU5#X>Lhj Bh4I%Kv8u!,Ba_%wdvi]szgwZ*JD (&n6ʌ˒Xgm+؜ v}VU&zT1N-8#`<2J|Li7dn#@#!`@ (D@1`Dh* bb!Y.OyO:;@Y-)bz 9춅XAuDb^ů۰ I:S1 r" > SSO4Dd"O ^uEDŽxݖ :bFN4 (.gg;4 ]lHSի$o%q2jrazٞGxg'[jO|jΕZ,e/QXfR=ya;àXU8uhifpyM>|xJ}3ʠYԼN>]偼  1韤l9x|oBdcE(T@<aR2Rl6/EqmBԼox-%c< 7.Mdz\tx Sr)]VGDAK[-UmJԩZmҪko}gsI$GO}v$y6UUU_sp9͕~5||J+R+RUmnEeѻq4-4&SMH$I$e#U}ymLOIiC[s ImI<ǐGcPP$H$J +ۮ=[V4}GF95}R[(Ȕpomn[5![so"SڕQuEn[QUG-Q^Zz*nT%GWlo=3ykJԨĨL') XNeƂ6BDi6H" (X䢼)DQWRTVB ĒVh w &LѐᨔC%2Ƹr.EV{G' b%q7yI_fou-32ϖ2UW}Y<ts꯲k RW_]~|lbVe֡Hݎs]KmKim1-Zcl[mUUL洵T[mk䗦tAok OEE~v=_/UUUUUWu}[>C,>oqAEqWaU |޽I4ϝUETI/ ?@WΡ$S4&/kao3JGW 18|O3YR&BLۇ崹|ٙp-:8et6IidCKh $ne !UyHa!Pcc#dep"'WQ m=IH:yA2A@B}%-Qs@Uws#j",5( 00Ia?U6~'X̑%Щ@TAQ"~O sQu  hHp CvvOfxIg)A/ t(ѝHTYbW55LI%x 6m8bQ庐T2x)DuἸ}{ٞ-H.9 tiM(Dt|i߁xRN g ʑ'qGK+c|ۧJıA$E睃wQ7p*hK.jf:'L1Щ) z.b+c02ʩ2*4r 2mBI 2"C󁀐g_):^CeyDU>Ӗ]vd'ܐ&rDTҸ0|Cuy,:0d{\1HI)uP`J2fV'w0,HAi h]|t$\jUEDU `01<| /^oc&FɌۺWFޢI.[@fԄ ɇ%i{ rRB?|%_̢QnH)(R4/gk``%(A8O05JIOZ9"p)`Qj//(#A2vʂBVl&DN;T`v-fBNɒ&p"aƝ=db@*RY3Kn6Glrr_[;%`&0t==dA2;1b-{h-N]^^jn: O:ƐRK'_c.dLt6-QT PخС˕PKyc 960cIf@Y KnkaOĐ7?{y KEx"9샗Y:Y26i~{E31dfkDXCr~[.5Bl&R%)ycgA{l8hB٬l$=jKJ8 ZG 5UgƂ`:LA4 X]Lh 7"_J^N;@ hتQLia UɌ 5K2sڼ%0$Od{H19:/TXpPkP+ )oγ;O]{3/#$J'G}P#3إH)81=Db %[oRM Bm so2 jr]ȖmwV2Ne97*A&JQJ,j.,U}ǿKA3ϵS6/@#XȄt@`PFS=U-R,uuPeKvY1Îq/$Dqۉڪ'ֺݝ#gJl@0[_X͸! {] ;hz35fRCbh\cхtp6Cҩ,=M8X\սlj}?V3x3LD&ubN^3L6%5lgܻ<MO+G]cNxtĒRh=N50 1:rRSؼ!6 U!D u>[j `mgX^_иVC9@p*V c|$;J`%C: >* 6 @:K"ȩ-&ea8 pͯ;cA.26`un[Y? `>2!Lj}H]~*OMlN|'i.՟\ݶr6Br^<UOLl<$/&3&e^?= $mbBmj8 RF7 B5-%%kJ"CmShQ7{g`X<6)2`.zv:~2ap+*=jWJc[jKqpp\/G1LE=10 c͞:ՠ`лPcl y`L1&sǷ%ŀdkHu(*0w.Uƌhq8c#2` ĉ|؆*L@'iE.y%#}-NK}'i냾} m烍UNr/;d};tPOX;>n 5!.wS ! :E|@? # R#[-t*}o#U>NA]cw~0, F#J\=8,Zk]oZR}IlW}.AA2]{IsL-o *8|ɛ (V[#`ǹ·jB|NwrqA[#ّS #`[qñ[Q=;6ͣ3rq{Ps6CLbiHLXmdUÛCD(q?y_D҄Pm å_v͉te(# j;"͊dX%0 . :zuHZZg^"& DrxoaBq $|Qe<]Yc|介-m9)˗3 !rEqDc11Sγߗ_ m_YM# (vL߹ z| !՚lDbqĽVyB\#6T=xzBHe|07>}ycО9- $DAj?s)U82+rzE=~?c5ħ~xL#lZNrʅ iaCBJPeNb%$g!K)#qKOcc-!B4JX3# =mI}DaŬ>$-1aX)_eϻ}$K%])$O]J\Bolٴ= GDnN zfx/_\|Vҭ` zC~& ;/*6R+ZZB):F$Z9i5kI9$c")2-Upo˗}V46; !4 `Ÿ ȖYF+!]ݒħQWX_9?yhleth%7.vO '&?I#G<ovqcUvE2[Thjկ=JG+`Qv*mG!TS&~اJڅU^ Dƙm2q8`f)"MeȜ*DR' )HIA-8)5$-8mA)H)H,hIq$###]݃$p"#%S !$F!ri!JG!JG!JG!JG9 R9 R9 R9 QnB JG!HN9 R9 QI NBr 5^ƃvB-H)Hې!!Ғ)6n9 MGN9 R) R8"28 @ș㐥###L㐥##9T,Wv)H$"R h;)H$####v2E G!JFnB@d(BBӎB$r]rrlenB4jWnBrZnRJjFnBBBRBr 5Z4rrrrEېII ELJQڐ#l\s&f$rrrrrrr|QDEhەR٬nMIINCDrmd`1Y\ 2㐕 )####H)H)B-2)4)-8)H)H)H[w R9 R9 R9 R9 R!J(d H)H E))&(- !i8 "JGFFJG!JG!JFJG!JG!JG!JG!JG!JG!틹))))&))))))))))KrG!JG!JFJG!JFJG!JG!JG!JG!JG!JG!JG!H!G!JG!JG!JG!JG!!3$-E$-E$>~҃! A'H ,.FS(JM8"Ȭ2$Jfj*XjK"XT:{8 ma61-Ncزo|mI(.!p-Z7!%5!Xj_9ںkIf+Mn*VH-Zj-,FS*RZkn]DK¾}V>e>@W;0#HB(QxᶡBӕ3O#2]\rNX)r@0t ;A| SkGQhsg' jL$-FX~'4L!@m'C"~bi0W @$ |H[w|*~]rn }U.>l}}ay=@t߳)WhgeIeʐVAl]fʬ8zx-i;p) diZ1":7((cTCB&;T ysq)m_Aϫ٦H},2dE<Iǻ[J)NYRl6u2!Pp3N+k|~HOL;}0C2,/D=2|B?yb@ vƿ_FיV[2 6 \}:n\ҹ3*cfUL ,+Vb.JU/dݬ/Y\Z G9Ck5 TVLؐ[4=o?Wr&Ls[RMod{%.Iw٥xeB^62T>9Fe gSy584HN&g)gCi/3Š0fr(k1Aμ31ຼ%2mҽUZHM6 lX~ޝ84͆(u\-5͛L 䋪X xυ[1$X,Ɏ͐ټyg 2 z{3 -%S*J{(%|5 (p33h+t̚d*QHPz%Ȍo#9ߢ'Oi w}Ez&=j1*pdJ{810ÏiJƁ r%nL>UyʓQkGӐ1ŴsU"tN.cIPy><0:70X墯rTR֬u&HHT10Ym1'Lz"' dU:[X-+Հ Lǁ,aM8f. (5 A;6k. \8ݰ6 `3bkLTBD PtB  Da;wYlVzE> RAD`ʵ[73jm㖯?Nڧ^']Rz7:)|u',isӲޅ:} mR+UNP 7tQ##{8ŖֻcN3uysN[2u( 1mJCśq=~I׷ _G-)Rs3XUpAkD"$B]3ǯq8h0`acl!%Os5X$GZH.IGxEzK{]:}7-"]&9AS#%vYO"genGwɣM'WK1&;,-Hh/6߷l=U5qﳦKM___'EMeWG85/BDqmwja蘦wO' 2ϯq\&ӿ2((?t%i+b9m+_W]F6VKpB8m!Me 1G1elt ȫ4|6g)(a*gLjkQy4ʮ.JC<5BZiRKVu Ϛ+vLf񧜷v]ꔛLbu ?dZcIlc@i$`Ć"G㗢VGMRObS^Y.#M"$^8[{ !3hg̣ypTjfx ;Cg._nGAk@'9>̟d;yL]􄇯,@2W-%"o|Fl/Hy5_/ژW̫YEjeY(FEEIZqvIr `b@qҷQJJ'mxXrƖwwUx,A&6lZ*ٺf:40}}EHThO9wZ΋1Ē>YM2YVwEZʼL>h ¯ A*kxl[6`ݞ #w"52i"ɒi2o|κÆ)L!bpgbRSc2"l-5Kt3Y< e!+Wg Pwxu5GSp x VЩQLP . f\4Iw4PhnJnEZP>kUX)62NHT挜j\G]$p1Xo>cqu4V D&2S.B{5ZF1`/')\ pձS쥮F 2&H\Pt !J%Tl^ǮqАHh ՜ɜe5Sc!u!msl,foOPEe.d9wea/'+ٲ55 B 5SɁA0fE?ɁigOIMJzJ 2/c$I6bM&#wxwF1^9G Ze\͍pX1(jR? p'hR,,0iXV!md(/))D(m8Q%7xh+s$H[7![CsrL>-M6>)`,ʼnHԂD;gf:+T)^|xDi g0A1Pָ͎;B>D 6 l|ѦHIIM] "fWp P?A# c)IAɢouMA7]jݔQ@䷄go3ٶ aJ`WܯSחUֻj6 ZYdR;k Pk Tϑf#֪gaVa$YcF7mYY-hvdXXMNHH2vy0ASw`U["2uGLBS|w'Ӷ=M_8 g`6p/]/^݀pa][}XIx"KhiKȣKH^a`ʵ*I2]HV:@9g<;Gـ#mV=L N f FO(@w`"2ad1OX-PDYΘJT;kTUUCBK 76Xᅞ)\WP`O'YM0`Ĩ4žs-Q7[m&-S7CYnXPd'jMKep6oZ*d!cB 沒,^-D($EW=s;=9Z)C, AGRd& ( aP\_br#kT _ZAX:<^UEexZ0aV}<[ozǐ1̇+'cYhJCM6&H0hV tOY3VeAQܑps)ƇÓ%x8^x4* {={1౗P-y5`e "c v ^2b15QYL HDUgh[eu&m9DV&(:_ -̶gqŶc<5xIǙ 8(tѲr -8ʁ'S4jJ " ?!l[O_Lg3DK|{Kh K)G-=K odsFDz*P/xҚ:J~l2tW2΃Yy1VC~g6j'vLl}t4 a 8XY]1LIR{'J7Y)!ZHQU\@7HM! 5@L*د_H~HHflj#K}k>woƥFpHŒT\GaXBQbe8e'tM6uVȺ*aΒXk*+UH| X a"ݸo̘R|VhIG!X!J;i;`L05ܩЪ pHVНaR> |8-9ԑ(6y,QA^C1sP#Ņ2 06d*QH1b >wr1uu7x}7>sGdzZߟv'NHŒ%4E t ~S|w-r9W 0c{{9}ꭁ>sy0 ׁ@00q ׍6{4[*9]auEsM͑QQe>q4JpN_ pB#B@v |d/6Ƞ{qy;NP)5$ ~Y'iO)QG6 Z4Ty%Lum|ʝQ݋=Jxa# Fu/(4ҮټmBh\+R>C3Mvf($ lyWh5P| )3[UPXSN$L D5jmG󝞾1D|`}h$T=B6d?0~?] eGsx[Ym3쎰]gXsoqn*4G8g$AQ{?* 35;D[8#߿=ŏ9OşJKA.ݔ8Pt{8Wq܋2쿓%ú?&|qGX=sqL6Aæp1+>_ԘPUX|嬦e⭺X >L?)T[g~vRJrZ9XYZ#(#_ mhM=- >_~O߶GCOT% P!kү#Gw/^ƟT~hO7=Ճy yPj}~S1)|0f>82 6_FzzlS0E=_vB@ w J 3$21b$+!5 j@ę mggOww`G:U`OސOUStP|LqW/ϡZ}=Mm.MyP>D>)`nMp,/LKQ46ףi+df–<T/(UgDm 14 j1B)٨p[`T Y)KȘ5+JsΨ[_ {%7p pY9r cBAx@L@*e$z]׼]3F V0}2 :ӗ}j:U"OlZт3M*d[xq D+58̆0ͪM XWs Tu,d~]9I9'NN73p}2l\N{ Ĭ2_FE} jshp2$N(Pb?0%cȐ aK=bl`"~Nq`' 3$_݁ &J8 STB0Ϗ}r~46^ᓭT_?ߟO?8щu &1{Qo)ǁ)$1:CI XhX #yO1ѡԤ9(H* h,On- $<DՊ롳Cr P.&ڇQ~؅c{7r$o}ٯɖcs~F,sOwCp˜ʷ6X*@&PQ * % 0I I$ '[Tc p2ak=vC!,6`.. GGop ?S Oh&@"ҪrI$4 `cJrNGҝzxG(??rR[`*%w \Bh䛰,7[~1 UU%Ruw#OI H%&Oh OØH) đHͽ28,lir":& p!+(i5$/H`dH6Qd.h4ҚnsEw*䪾_8(l~G!ʨMOnI4s ֡#JJi5b94GB bCK隟mAy_y|NSlZ+ /oǬ RPd;OLvʥL9gჭғ|3hyA@@P Vi$+jU6ੴn6r"la)_oaVNz 1]3{q1rӌ햳Z~7{v4|k_CZkAk~4p>eݢ:Ω돁03YSDDņˑ˵w !=n4DE1KVVNiuҫE:)OVJmJRNpu;<uGq?))Q%)Fͪ[ -[r Ejc$%64%I!@U$LJP(Bb\tb _@ی[ <cH't$+&eS{{ӱ1rUj(\1ȯ|W_~ 1z Ј"sh9PJ{398SZ?%2)1JQN~j'E%dFU%]]۵J_OnI)TQGDD( Dϊd&>`z0 ܵ7|K,j!Y tTI ]zJ ܭC3Ywc 4&ĎdDAĥRűRH0=:E_+t؈"^Di*j*k{^y!ĝr M52@$Rbe"-5r)"Lmꄊn.U7g}e7#ݞg<iMC^ݿ!ܮcbtVR l}.&1Z=׿]Z;^P{ܼwG g(e$)T2R x;buLЂ}㤫:⹝ :&ڐIvԧi>CwkA}VH$]tC@(`n?̜Yvg L/\s=# [a+1(W"y@%qeIomh[`xSZuߪ~]-:0 a\!-BϹ?6 kE~>('A"\6Moqw` ?zc/;y{PSC3O/@k6/WE=~/YWBX0H+._Jrᬹ{; Ӵ;o;xby,0N_GX:?3l;zqy)<7-#޿1ޜ^veO4 S,# IbB3os3<^ :7NW/Fv?Z;Emkᇾ2G.$5M{AE.ѡe>lզ&E~쐉,n;}HF_3p~B>7tU%@H5~6MDM1&LFkjQ3$,wozhIJ,H1 BmX*i(35"AbHHʤf > U!mW.bd$zs6ZdJ (ٙB!AT&`)f JbMAVe7&4G&DzZ][jqu)0zjs|٨X66!6`fLLp5+Wl+ƵVb>[A}9wSeoZv[~a%F+JԵ(x޾_$z!uNՄ$HVg> 9|<vXLc-rƟ?X43c]cŶ=jbXyEeU%u3;6*4qwg_h'y mfͼD##H UA8|ZR J{3"} ;?a{:~xQ::>_/_=#BAp)N"*0p5oy/.}Y5P]T"_ %7"-'L#sڶ#!^dh!~2@+&:EO<~`xD2g9N$ */}% \~}z⚘L ?D8hs9I*-bcc:I.u3iў.::tn{5*c~th&CM:$?:):s-hFv!2⫢G&CY[CRwFregՑ -&OM'a/ œ1! {Wv.Wz{DI }A$3̯ZgiC<4%u4 07Ta):'?z{x6LcbiehQ6KDAT*|" RB Igt4Kj0aL&9,}C O$S;q)?,% (H#Z)(0D15/x7aR0ẁ"Go fC=#2+ɨ6#/qRik[dKІ\(0*C3ѐ;`zп>A2`Bd&`TőZHouͲ-oRU-يښۮ]a7+"ⰅNFԛ4(;d*RAFq|"mdk2ʓ3 ȤbCHk0PʲI:5p-iVbR$ZZbRF3l UԡX̘X"(3jI&Rƍ.efj+m*=IiaR1'l6c% aIeBi6WmҚ4Q !L% &b f %bi:BpE*II#O?(l:m̧<}r `h#pG=3RC) e&4ڡI72>?8L'#S~^cn6l QWn]Q4_eTm3W.TIr(rà}[ש0iBjҘ -B;c>qק.P&+T+$b^>[ɹ1ŝ5[`vz a{jT#&@?fUâ'+k[ @:swYcoˤID5LY"HM#Ɗ`JH >?Dpo"77x$7O  ̦ McB)љ]OM̱:;hN%$H}eV h@vkNǃZ#Y[X֪lI|RP`/5baZml@,iP[.`AB02dDc(2Zy@L?%C^tW e6.Tbh]6H0 ĩer_u='[Gfđvw xI4m|C EFQJ"~9q cG ^ݽ;iO s 30<袎{06Œ()UNs2iߖ)bq O'uHķB ul95JCLv)fAȜn 4N RƲ(4`#d&4uCZ'w0; cN.ŗ}קxJvY:Me niT. L-xw'zj󚴏G(K 'w*&F2()P=;/P|KR۲cL߀ׯvLpǓs2ʌ3#Gk&O\2igSNX;ê6s6{Yw!t Ri -8d>Bhێs\ /ZJt4|jK]=K&S!B<xRSSvps9-]ttnjRmǭpô$g]뚻n տ > +V4bXNJKVjUukήݾhBow/$_WyJ / U8 .a(A)2!xn%ÃД=nlrSrBqxNF* جר$"zKҡp9Q+{%#}"CKX`* 6 $ǗAI,Hh;d%v36ՁPLGp 4t=ALP> i]";X]UG$ř`hH P"WR bYu. I,LTŒ(iqwe(`p~Z*LJ%XYJ'.w|mV_'ڋSoƈ YۂP~H ><;юLY=8oq!"$Ԗe^ˊeʎس'p2cfu]RH[yV:k%u ]˭=ilB>v#oʀ[7p^n5^$eU?nBQQ<ѕJީ.X>2H߉qH m%Uq]mcK lUʓ%F0(EZ/U3a$MgtI:+ݱF$8("[ly&4"NaE/ebG[ At9j*Mjg;V>3k$(!K;hȖ ;$T.с0oGdɒG"mCIRY$e.t#tql~ yicE`(=CmLR8vibi朕5=Y]b VgHd= aI4F-/ek畺(J$VsωLn{HObΚ>YX*w``aFvreudJ2ɶb!Gds_"/Gy`5JT?th8Ǣ_?b_& >P-7P&8( !|ў|5)+K9.kvzs$ī|REՖ?Ul74.%LF"xh&lDXhɥR4eDJ%os[**ϬV[F(1Imq/?{*(CϼD4a/ "p4=I(l:E$r@bR`fBF!Ӯ\\c^T:ga Q  =JNIS'2:љXHHF)"Ah*!Ov2HЮ5!V $+oQ,YHVw}WdP?N1-xԒ-gӸԜmx?/?giA3@Ej~&oR<0K.orLGDWфd;zu]>C7ȂhG-pO3ii( RG! MBv$rS^rgL?u# 5\c⹶? !v~"^x8X=8s`}oe>KhA QÈM 0ƤoNd0q%kP׀zP~F(!Ы!PKKiKflq*y9)+Ԣ+@SS,HląyLnB˴$#eF7B˖eXHi V o4ȡRCgB>˾{gBݿp OeXH_*]ᳵ#2]D#:T~m_֯ހ@DOW΃(t1!b Yevk+Y;? b v#,=ʿ7 P@2HD䜏XwʃxzZwWSVDLbj Vf*WHͷ*~Ns<6c'8=[g4ω`M{ILlI}I EQ}T8/™ڻ$3Pˠ C~2GYe\ h(ͼjƇm )*?t1SQU-UX(2NtA@0:p :$8b0@O@oP !>K6cs z:R(XiM#/ X* !/'>oF$~&œϺiUp@$'2[nse: H.Q\ʒ&;XBxRR!gb) ?uMwvO߯]Hu=曛yoͤFa%*!0>cɐ?İ-v nB.p' נ@*Ҩ!Yȏ;9 B$H*,(Uq!2zqy,rD" uN ;vXS㒖OP)K€jr_\Y()$7AEGmmQofRïٟ(O1 AKT%~9p_p%mE 0 8SM,KM,DzI`#D9_w$ EO߯1ɍ19Rr(D #*ʳfl *j3d'~vY3+L^j<1D9bҚhֽ\CwUBh\r}^aJUBiZ_@?*ΎUkk?ӯ{ܟh7'4tϦ2>@+r;X,֕JlR~?˯Ď|?gU_+CVp^EEۧGאAzllZLhJ ,˩w=3ڏ CN'ugmeA_-*Hmb.י T[[Ծ",7|)JRl(r)7 (Ahhg9u!)W[7G%~?;z|ȳ3.kT/=R1B[N3s9}R|L I7-eA][U]/PFB $}/ݕ8 lt|QΑ>KOtݠ`" 6<9'Qa"@D"B,X45 f/֜wc߁ϰ˧fvZ4wZDyñ1_]"H=8oD*9aUIfeMQR%klRkC&Ld2J(@`+1@)"_ ʣ JC˥m*m"C( RP !BJR*F07&\G"뮂WQުq9?9vD-fPЗrc.O{mve3<9̋EEG㮙TffeB}w쥇bU}Z$SI4)!l ͸F41t\4HL}RTSElySj2ޱ~//_XQ/I|?~zrY}# ߣ/~3닛dP!'E,?tJTVqN_ƦYYtDTR70-q!͛-ѬepwHnoQ$3QbI2:pܮUM&1Z?dfFC 촣c%#~Fua0T&*:ܲ 3%>b^U&0Ύ%TrX95Rnmޅ)|t)xLR<]WF~7l3}r8GrQiuʔ;W2H^ ?s??h^;]JPJ?TD' ;AmxӴMI"Zxe"c\&O~vX ܴ dT6;^AqQxgJQʾhdo/|`+ˁ vU=be9"Q ֞mgo_>{o>b )R+,DL1RBZ]ݮS~Af Z*t&EYٲI*Ɣi\Ф"L8wsU湶9rC͋6)8iu +N'5nd28V `}UAϏý] 5J"aq%x9 8 ki z!Vmybđu^E.1$wi%L`(T0;cߘE(2g޾Ξ\{W,}m?yLkrV5lGtc/ -__?x$6"?L]Ccӓ!4{LV~s5 9 "z+ǴY{pF1YC$,m[͓MS9xa5/yǯ}u7߮^ ?dEذ$uu8y?oŝ:G_Wf{s*j2&[aQ7|Y>Wd/] ^v%>]al,2a?v«埂wo<x>_ ncPWW}ˢ ZybʰkEnq0y9|Jy{|FY  BǛ~{?pO" bA22Tka @CҪT@>W"k2ZԒAl Ao rPڪEZ`&֤޺-ʬ*`'X4ThS& ?H  S@k)?^N{?|DU=lƒM#WR4eJs'2; Lbݜ%Il8Lb]s5^J%FJjo1#<= ІF_#.=H(AFyo hØ̐C$1: x`;Yπ~|֏ )?LI6Ux/Oi :pPHQ\G'e(?(CG{(Da.cL }~WzeNΧ{K^T=揑VQmȀiXה}q8D] Mؽn$sWGD朞@ .lj ě ?C( BsJpiP!藣r*@bM@CPDB%K(R7\:/U;O\!gΡPV}%w`CТ=>څ[ou$9=LGoqFaبuXtQݍ8OI͝>/;a :5|JԐ^371!va0 1[Z-d:tȒNz@g]Dpz aCɋұz|j)ٲ|P`"|D>KTZ.MH$@.B N(ꀈ>/#;mZnۉնZ^V?s7(,5mVh(t}($QJHB¤X|:C55tR:X{c&@jTa%^:IO@~f~_|~t6J uY:LsҪцM0UVUUyݻ4bC7^ 4]+ qS5^Δ!~8n83Oc*Dߐ ,"Ojl1YT ۤzEnIY?O@@{0 G4d,ߣpβV8h@*!qXм;26@N qc/}$m|< ZjNI:H>%+rovqrvOJㆮ5JuHwؽ͡JFxxJ?WT4vHi>C 4)IXN89lYLxEkb@tѝa:p~|A!O/6T@}M>Hh{1z686{#f ت.ɲlc'$'Yd A`#DMGd˧12 1fMXd& |]2/m\ 6fѢcm&14:bu9KJ>7{4{(X [EEm˦F*9"6ҳ6KF-DsF9ȶFmTqQK:&t@z"ʜA(m!k{_ w}p _o^ս_]ov+n@m HQR={y,UA,`m`񞽛'W$[=*Ms'22zf 1Z O,6=r$qVfk)e&a#)^gDN=dYH1PzTGND.)MH`IӰ\xf] rUNiJ>P~ݔ)J9ëB w)= &ثБtU}EAe@!?B MH,ڜWl5";I)m{̈́A;(|lL"J&T rÐI O"*nzd%_)E8)@"vwb{hd JH$Ѭ[l[I&MZѱFU&ן7uifRa!& ?]Yrq@FJTkZa9R(Yp  ̾p~*;ِr؞$JE*YyL.ݜ)ҁ`rWe`0q qÏC!v<`kwvBljhl:)KDBTRh ҥJ8.]R1I:.ޔN [I ;4S!==i"XWUut5B j5B2#IRy/ %]> 6 DE,{"#dyx*о' qX?X1יmoP ǝnܟp/B" U_3dcѐvv쾈|@"ä2n X&{=0,n۹ t?hhbJ?tTز@ ʀBdCLޖ`*>9G3.֬~CyLqT^q5}ɘ`փkI9Hzd4$"$;\l)ai=+Ғ+f}=_HP6( I||O S0r͑\a9"ql@sg+˽=G*"㟳Nٟ&DeB9Q~Y_>i+@04hH~67YV2VV!5Y>kܑ};:Rω&1G,:ӯbTK<~AHi I2lf8; 3I $"?(iRtQ~JQ:h rͺ$$aЪTCCg_XHS;\ϷFb(o>(A*A(ЦB(3o Q=ڑ SGdҐ&x/$\SNatNpi<B+<]1?C?A!?D(8NKK]JkkkmC+?dk(QYFKimJʕ+*T+R+R*yx(pHTQ:|RY \pi.E(u|[׸w#L{!=,x%sQEQO8%p r*FTQgrni#`~ QE?|̘3fg|=QEQE XC_ ?v<) 1#bNНQE3N2($䞔QEY9N_;3qG#z|""#-;$=)k߬QId״y$D9B޽*pƕV!Po (k֥I;@;SGkZֵk\p@@d1WV*Uŷ4lW-VѱmkQm=k~]EF, pxg70r#Сest[ k~@Y8PdRf^ /ֵkṘ=l4')hoOt-C NTƗ kvş 1f?%D}Dzִ_m[VI$2EmbI$J@M܄X6Ŏ%ѭGӏNPcdXLY Z)mPP#|I$I$I%o$I$I$I$2܃m$2H-$2HےI-/ܫ0aViǛ=iAȍD^}MBmcldrtf#3s#!oh*Mμs~>)Ljuعbbbc,_ZֵƑB fHȣ20Ѯ `ao}R˗^fZɓdаFِ:$iJR7hZφ؟nkQx+L4aޢl󁚗}Q(G@ zzK 3ir`twt,| 濇8//-l(jDUKh@7N:rKkN&TkXN7z r̼U}'s$lV ` 7XӨvz]X_̟2ojR ѰfP344Zߐg Aުv*})&/my|NDCdqIy{ӎ8ǭ{xIb,;Vhv#N9a~2O:h#G'˾_I$d!XOlRMxepH&GLJʢ-[jHTϔ~&PuV+<_wQ1nzĨw) (~=BH6=v'>c"x=B~ɳa. ¢L0MS׸ Xa[Đ`VD6_B"!_$/v(Y ;2G;#|Z%r~-xp5W}D؞R:[ _"$!oRۥھټc&B@4AE!{Jj_eNxY'd0(0X1' *6%й2>Fyg&Rl5*I6Gκ)CwhҴ&ڊݵ~HJAha!`qhѴnh#t'I:5 u$ !Ж%1'An<^x0'2 y^@ާZȐ( (u4,zeHry`$'H HH:I2^tI ui0@4Mk0!0!ʃ _U>jU?A2H9EDOpH(*M4f6Nʛ+EFkWb& *}:C5H":>O4n }Yf@搉ӣFId~tyېsQ@Ee7LQP>Ϗ,0 ӳ .nCi#hOlu0$W _ɟGPv )C č}/}M\)4g. cG5lQ 1 t=sEfn21}wDA31b9I Yv~ٝbPpscm>m$g*^$n+9L}Ռ20Xd<2ĠHP\<\x"I-*VqJ^D" b$uE[4xi/+Zο#X֫.puva"?;;̒$Ad nf(mu i$r-ZGR >L xȱ}5 Cؓe!J4D}_V$[$yHgsn%M6C:'hMt91GuMB@` !u!|wX/$#^*mO&ձpH^R; %|lr$_KșNEކ8IjH !I \ PL@r)JB扈; ʉdM4+EYXYd= !Hz"Ȓ bP D T .#8G;IEOQvO*l<1 nFp)Ҡ*"bmJfx/bsio_ }g&"ɕ(O!&HK6iL$mSes]s7X,,}r݋"A@$Z,h 锜x&Y3 k[I?`}o/Y)P$ULJr6}Gn(21 "Xes9Q1L[wAf&-K*+F_A봹Y_a%:/N!;c0ވAQ.@;!%ĵ „"u5MmaiGwI pl&̨l  eS|]QQ3݊~@;a gAk7DI?FmW 5b,%R@D"$Z!(PY넃=-GSJoAkdt'UZj C"B!Ak -Qb7@"rd34,ȀYll*, @ٙ͛YiQ1$!p@ɦaq'3#I$($D*#$2>JNHa@^tKf)Kxl6uCî7emNb&A ug~N緀n>6w"^av<7:"^c2̪NTQE5j(yB9~,h>'0:s*\֣Dk<~IgJ!mk@|`L#0AX.@I"l|O*vŋ%D TbxhBp[aCɭ;=-i8@WcHQ܊6N4܃)583x_AŖp󈄞R"i 6|a: wH1#4(MJhY)ƬkXje-fT,D&U%LZٲ"H-lԚFM5 -!OHcGb"uM>c.\%䒂H|P,@x vwZ }?S035~:) @ayI2좁K2dZLpƷ$x5³32]P6$Nt^jI:d:aDN5LF $Н4Cm65P #[F;S9Rq8Mk7Tg./HX CHF+ 2:>?^~dXpqmDT%r%E? `}6"T#)&4}OϞ[}ؕ(S9s 32ƍ_983tLbJ"P}-4/+] lC0)z}Y] `&e ,VD}pݡLw@&<<Tց:Ԕa{\Ag!L|7"14s*8<ď-I4+& !6Q`9&,%Ѩ7|qF#avr|EKS<dо)A0LO0OTWfVz,@<" IJr ܧ-vL$Jed3@` ` -lkVT[MJXHa(BռJv|1-2,9vۈzUyɽ$T.%K7Kћ(Δt%o@Up ^}{2yQU;:(sB^ ɣ,$7DĤ j.^xH y -D<\^&RB I Gyڵ';H' \d5B wċ ( WK,R٨=LһYhސixN}~n"!>؂bjBT ,` a V鄆J%(t!It08/F ;-\OH:ua4DDur =v{p ĞS8:"!|߸p~FD+j_YpbťΎYaaI`ae(&4xy{OwWtfv{fC UZ0z ꞃ 1{LQ3 *( rbEHSpU Elwstk^HP8 J 0E6:9,upf$Aq(T*1,3"TY &" »:J&K ܓM wFXCu۬p옆)/$GVI)8?25 2&%}i2P'I,u<,*2! '-+GU U8R~hx&B3 "x:mo1BTHBrFѸdrלB 򐗝 ^ͅ~oGd k|IRzL@w@"" ̐̄j!?O4e#ׅ d_F HST9BB28@ü9}<hX^FN|\i qSo(qC -JRRRRRRSRJiJ2())""[舖+"l*TQ`GIB'(RiP⽕8K)`U"Mǀ.`Wt1^|G}Sy 'Wĥb'G#"S_5sh* ʒ&OW#YM5$M#?p= X% -@?w~5A[,%ccB+S>7P܈AJmfxk~=>Vz\ٲW_=إ/\ cWϝ=)|]#J1Ro 8脛R$ZE$N.2]+Ȧly_O7?>SSFm!пZl+5FP&30!aG"78L`gFJ@e{Zb[VA?9in&½"MOE8\Jtͤ8q\5l~dz*i)?}?ԟw*fXNs5 -7T[DżL[>^sq#GCZ3Zp6##?o3ڦ nlP; ߊinݳ|ѺrD/#>eoMqc? fRt jxp/"$-01@.ި ‰5LS_!`_@bF>pJ_c (W0,g>t(iB ?p_W̼y_|iJD@;*CJlhi^J'=쾟W['☝OGoHTp:!XJ׃yjR6"RP ,5]戃2 nqY+=)tR띨F@+-[Z&ĊUuf/2^4tbv1\Bޚf'-eYq"FPO-UYϗȋkí_W].sVwbk]1:cE 8}18u㧬!犂]o}1/fz?? {e>kϿ~{{]v`dmXb 'aw\aV$lVtA`{!$`.QEu*]f0G|"SrF_{L6#6|Ϡc@UfM:R_q aE6>ݥ~O Lo퓥zB~뙮[&%^"v.ƤϞ-qa׉1àZͻf`F2{C+Sc~ҵVJ=/!/,S:}z"6EσoZ$GYKHa_d/|?9=γcWWNaQ||߯`y%]﷟rEG| q9X܂9 /Gs"0!$$(&C "O7NãiEl9D-b!8>0< IּgL;p~6BAp9Ya~Zk뮺f6l`d==i=+wZi%evWW{liȓYg;zM6D]٦㮺ͷn&- Y4SǓqRʲ,ΆE Z뎤uj~282Sk7GRKDMjRR56" 5ODwfٶmG(`( yh'$ UZݰip8AM8 RY<|oh4Uby,S׿p'Gu|6 z>o'{bU@E >'G 'yO+)u4pJݸBD&B`60A)z~hйhp#]Pg<cM,|}$#g蝷(!*<}x[]u2 w>;R:);8==ډicP67N0Gkײt;# |hWtMLp*ې``ȒB. ~(]NIj7 BI%&+)s3"# YM<39@骪0vt*9yAUm!$B %Ѝv6ܐ6xP sLfx(QR7IWvH]ز#PEWaRhxXNa!+>TES$Zk=0CCm|Rq+&`x䪒l}C/h ?:tBm7Oc8UUUW.([öTR&+}^k !G+~Յl0qW E4; >~00~ݳZ5?~ckJ*X~eO~9IDBO6uյЪ_){~ =}~yo&8Ta &p^]8t"& W_Ӡ]';iWBEEZ<܆Ab֯TU][4SWe96n K8A>O^;h͏ߦ_{xu쐻nA/H#d, oCC'2hH"^*O ~iwn ׶Yן DJ4LeZo?^>Sר1d߃mЀhV0FOjmiyn_KRr/GuK%2v,Vtm4N_oq<0aI{s?L឴5wc龾,9ǘ81Zu BvٛXRwt+0l65khXG(֗`i pGb 2߲>G{#CL J(Zܱ ؙ=HJd;=rxt؇zDz.wo'=oxk'7|u]_6оϽ'+v䮾'$X?S`R#B)-UcaUne-](-Bv.5>4筷S1s Pt!Zs(c(m␊JfLR0.m2,`30vxaW>>{闚[T̽ &dT8(P6( { !,XL/yMWSBo"T$Ti<ͦʼ{=f|3]MV4Ѯxٶyqs8xm;'LmXiUwS <7x1y\uiii=.:CG6ږ 6W t%WwF۶Z¯ 4cWFwtrTtsM=9zh\0  3\n-`bξ\88<Ϥ|dDETADDD{4&F(cYWg]UG8wm$ ]٭&(c7kKjZmI'>6!?q_ 0MpEB$Q*n/WctEs@IYM@|>~ej%[Vվ[m};$2J$HA(Ȟ\_jV;*[  )E^N| I%L&&L \aȵ8DD!TiIYvm+px'I'L,Y$n_D^OOOCP(MUzVҘfUVvxy؁{0Cq'70UܢrfnoR@8+O~G~2iL5SS5ӼPl@uaӲ9Xk%(\9r)L+2F̝sOh@K]}/ňAk,~:d[ :׏w;!¼[eWD(gHzhqtDg>T$)mZXz/ [kk; MJ8K6ކ+ ҳj[r*ͫ{׽Y7;>l QY 5\^9zv_|m w>:hjD~l׷7ރ_yT'ϖ.j؄_R{h}uUQF!߳G3>;jaGu,ן {H494G:L,WFҲlz/o jw38vIwR:%x3 HI#\m@Ӻ*eEX$N`p`ELM #5$JbZ#k,Z>B0`[ذ`Zd,s aP͔*Bѻ*d w,&^)9WlD/{=c:zta==^wZֵkZֵkZffffffffffffffffffffe{{׋JQ["Zu]t- Y瑞yyydeYeYeYeYeYeFYe88a{/{dbbfjjum6M^z8(A&,{8'9.O9Pϗ.\e˖Ziiii7< $A3;K;F"/~p,M 1qkZֵwwwxvu}1$I$$ϝyv{=}du뮺\뮺tG]aa^{{/{~& =}E;f 6$¾ OY~e/ j4VR^K9w?> Dӎsu/:{@` hlTŝ9vDw 1x8*SuïO<}zW+-O+KXqk*BlZ@a *l Bg\cpi y3 N < ={)4<k'"V p)`BY+y(aGT&[jXXT)ۀXTlEFE Nc><ӠY+ZղgvVg-N2FC,eLQV Y&3.#jnśٷAu)^cp9gR-n48fs4nw'd`+ H+dK͒LzwYY9vc ^n% h^IAv{{HFp%4= }UmUS5|-"OoWT8 #!1(iD BdxUI'8%Ētӛ3"3<0'B_'_7 @I%)" -KmS!8D''CR"Rr 8S2$X;SzXNc.97O=SNlCV(]79b&9 KbZ&>'HƉ$fv-aC 34é'y(/4?g=Kimu}v"݇Ȧ '5=_\mVW S(1})h|*-?a $,C / 午5@F#Wjdb,Hk.-!;NɇpLS*T5!we2y ,R,P;HQ 隊Q=|IP^}wV:b تV* Iuw NߑK)L$ْU5̢VRyb&#%Ã@ܥ(aEե!4E+5Wy4F}ʨ !wX4!=zIw噔MLZ[JZ% y{gܵ̑XSJVbR,Rʋ]stt c-dR4le!ň14:L*dbfaC)L] C 2UA";P_p툦{x/PQdU%rmĎcP$ׯwI񡲊iXk L.WÆ5kZ1nmPM?Tu/3:ja3 82:7&$Y0perHr2pm8v)K*JRzvQn!Rɪ . ZB_v=S*$2rnuJY淝k\L{XVy#/<'12SI?)ѝJ(ouM Yob,m1>t!_էЉot6"m/~Ιp𓌆`2|k^09'r2fdI Jy@1@]q;I 01$0 jIldj!iAL0QI!YS$!a(Ա0RB1KjU&1v(ukjY0H -U)I)łg>?1uo @Wk_ J`.є5 PZAР͡lM05_ۄ'+C17:0ts3o]K6cCdCPiԶJ Ґ1.CH6qN"Jq D^o]g" npISbbb&(?d~ݾY =W)Q@M]M!Ր]0;RU1 d'$vq*ՕDdHP"&<BF)bJČH\t%#h倘"вJ2,=s5klڔ- prJ;pwz(NqUWt@?*"cp~n)A){sdԦ@P``Bؖ"A}`D*?O5/@c@Mi`KO{W{F6ی" )="?wjj$d,[TPL2OJ DEsA1j^W Tt##:ؽ *hE~ ($`&,1pߛg4ykz_}I Fժ"^O3QT#L2dɓ |%jcIa)1j,lbPJ !A\HPu@}J.'_F>l=CZUf}JۂL6% 5a8*NiȺ_I@XN9 $uQ;B`H UD'FMr]Babf2[~itGdH?n*YQ ے3C&g$:nSLiTHU{3DFe\ D"6`ad)mAɧF4 ``bn1$43D*^' =BtE M"[lL2TBJ8n!a|MO"fS1ʤOqDꔴd~B<ȨbBd P=*¨s[r1o؁j/(@iO41 2#$A c>Sټk!9f<+ u$#ƤcfDM' e1Tdr,Hi|D& 8m®(8I_zpEW(>X&FI=BxkK␷oaj~9*>~i_'iB]XS+v˵n3?HJVAK IH(*KmIhkVlLd61& 9<ú}@MO R}NЭoYE"&h KCIE%# R : 5sŹ:)䘔,p䗜s B%,u4wT8[6D.4!aȅ3rE5H LA\jP fx42B,ZtMV/2I#%DNyp2}Io|r5K ?iiK0OZtuY* Ǘ#L ? HW> O$D"O8:b2=b|hq9B!}rI#,)ZKX$lO[2? -H~ exxUBEt7-->Ů36=t=4a? ?_yyMƈCۢv+(H |+_~fm5A(P< xڭ?Y 8|bj|L%쟢=|*I!j)QeP6DpiEK"5Ԏy Vn|H9#(|VTdҥ0D 0>'ElXD3$OPpC`e!Nkt$y}31 r\aM L3+&Gl0  4YI!^H0Gt]ƽzD}Ŀ4|#U քhz^B(&)(z&5 j'd$(S('˻ekFѠT5$ A4@)B' k( !QU6|1^ZT T8OQ&Х, KM5)H 9O UH/ N!FP`zo9~3W cc*АM 10'Hs^sD넘 m.uv!t32Hf<9<"M_6BbY&H)B"A4,dVyh19~G.5Ǘc;^A{AF93SM RS~HBX2ˎY-&Ez>+8Q_i+Em; T@&n2 7pks jNsoF:J?ANwIʉ"T6'8U{(<+"JonJnM!EfC+OyI6g$U }y֢1DN*:a,~ %aDR[E.H&xrnC~DIF(%cTZ4қJ@O'JɻfASȓKZdCPRDwvQa_)am~f8}k2N%D9E{j=eޙڮ @P 3ؐhef[/g{/Xd`" 19@Mfz5"-$Й %h85:Id 19;nĉRK']s# yӅԶ#K.%ƟӼsI㓞vGPaOk:*Ûj`=@l$8iu9e<'7:iU6%)6CAՔL-Q: Pp=D +$HJ쏗՘H8G Nnqq^M~mTrƵI(٤fT-Iy T_r~R * Ĩ24Iܧ_Kzp;U)ae*eRIF!֔ѯn?T:zNHV &%XH ^+(!tM1h( "i5AD]BP B 2"a$capCpGt1f}I'ec&HB2$wWIM*N&mA:\(J;{mI*>1iOhV$$MFYp;STދRϾ{.[TNuO^r~sO+GAT 6>!A0$OOx(ʞ_a3FFBB!TKUZefmuԸݰ1$YBƒmEmiD(PJZZ,Ia%!f8! HR!8mL I2+$F+n[K.2HHEAFeLtu5n d4 2_1-XID(ьA|h|0AmmMAW({? {:,jֶvC$i){?Ũ> |駗/6pI)IIRHKjͯš]8ZS@Б+0>F!Œ9@d|`,xϢ2A 3q2KSPP`|1~}|CC*7ZnUB{!S߀n,''Kb,v]' AߋM$׳zymζ%#B66xk.9rUp;UVd=s4|N#clЬc@7B~<96vi77Q"Bg=aɊj8ޘ [9Q s&d\jH~mfETSmQDCYw@ txJt\8[k9v1ߋ 4!m6xz'LDJzL+$p؂E)J {wPxA8a>XA8^N@qJE*!bO4cs+cp\%pEa\%0@ uadF'aV&ISRY%4DFH(bn`RJGFCs$&yPfy~'š&ҊzyGWQ3lO#CRҚ"%yL@*Y!RIzL<~&-a;*J6 ;B,H'4=yd= VH>: ȌB-*H% e`! @J;tA?Ieb4kI0dc pb$n㖦zi 3rE:ޜc0CzdtZ[Z@J0BQhs #&`t=  s$"% b$)EQ;1mia"EH: jc60L%*t%SDV`gG4<!:JOYOHrȂˡ& ANj!D$wvBiLpI})sd)icaB`N 9`oP !PXMʌ-oQH`aLj p 䝦JA@IΡa7(lJ9$'v/ ]- T 'h\"%DYhMg*8!C"tjd-9,w}B<Gy_!RC_$JD/HPҫB H/ڃdtn;kv25,`3D bb+gR%ZUUUUVO\ݫ ּ=u2r&)VyFde:rUx6JVQ?2x?Oc- k 3*{W>h>"}Fs0L֚,M4#o)(%X_c cIWnO|;;"pi)Jl)jmPee2}o:~S=Uۯ e7vf)I@bilhfH IoˣδyTSFU>+ M x'O1 +{9BYBN<:X5+R^s%:N9$T:[.'GF pC7^ ۺf 5U֏[}mTϬb5FZ.I)4B7CšʤXA1# %xnJ ?RlɛMmq l̪2pSU351PpA:LiD;lsTxܞM-K#s;Ȼۤ9*I1 .@p!|O3_Ujft?ۥ<=aNkN(U~mx79[m*Y=gBhB\'}*IS%%jh3D*%9J)==vO՘<}#Qkm.DJ"(2Ju$t0B".ُ8s , u1!A sR򜶊M&w'ÄB5@G޺}W nv"?jzu|/0YhؽII~qO~ lA@ߎw8G~BizvW@٭e-,'0fd4ܩGFc!+y@l1cVhwXҾ%bSNrχH NGi5&[6GXҙBYIȍ VUydd0֜Ut7'g:ɰry:z3F$ =j^{4^m:<[#h4 =H Q-8Ǯ`4` Gr(˽ǭbcN7uOʺ{ v<1 qi&\ym 1< h(BR;A; EjNzhNÀjPXkm|vb~>4uߍ;>b4j G1F* B-|tl;x\zh:/Cr\5>Xʆ婮4k($!qs2VF[rL6ҷF&W-/ z x!XS*I ]7Ĭg̶5!dpMXVb ef6BI9r+9퀚ib١A0@B-0[ RF,߅ORUR(ܩwM"{0Xp[,T#&c4H3 w8V&@tZ-/aH`ݚPI V;~BQH#(Mх42q7i>n ٠7"twZ (JQ 㙋F%0@M=+3uzKsҥV}+I  BJ ad6bo^Rg:$K $Z )AHpCTTS NQW2p!jY.A[dl$'Q%[P4 #`*%N5$t14dH0u'N%)VKW4wB*o!4*(k3]=]n͡|w8E}8V?ePwK` UBn1wߍ\ʆ j#N%Ĉn$FMEyy_o&(JX],=&q }ى:4v&r|GEsyf,Ԙ&&4, 2@=az%LSφH4VEJ3)s lkmɓ}hxahEw{=ZGzB۬÷٠׊1wMr37y͏}DH8N1 )Nf(a"[%oxmXd{Г=ߒz㋞JoG}S 6YؘooCZֆC;!fpO#` ;tAp-eNǁ!0qhT K2w$򡒠ސ yB7cȾv\&* ,„PaBB,XaL0gJ"΁BȐ0oS Ԥ@H<.z/tiki#s77aWaTUU1/Q,UG%2\3*%aI,jQYW }ܩuryX`do~9oZ#}wgڊeXh9MrvŌxv]z]pk #y= i޽5IxP>MhaDl\|4"cYIisu2y3 \0FRRL[Ƃb3{Tu)2k|گ-U1)d#YZJ)b]Z0X-rBj3dKMEI2٨)"fJDd(5 ĶF4Ye$43iidSd ITcxE4-3e$̚PM,2E`V$5,,,VkiY2fm&fIA'$+ϰt+:TNg|ԓԾ-m-`Iv-5D$L5m\:0~7IOmӡD 2J4/cTwF"oB%1!D]gc.\$;vH;=&BQȷ 9ij* 4GDy+h:))$|>ʘf1(C QGp]dVn]mp( L!hBØ"hH~qNV5h KE6-[dpfE0H jDR"G"" 0@$@xJ!3]Z{BD0z$ul/R$w ZKZw PDUFc@薟cm)_#sz"|}пAC%_$$8&P1Pdi y~-4CC{? hr}X|([f48l˾/Ұ#@ HE[Q_#: iRF KG!a ˤz5?/]tN&FMN7{Jpy(00SY S?+p1Oh z}@H;[oZ-t31Fcә&B{tH-DqgBf[DԠؼWrMr_ۙIil HĈ@֨~ v=@0*D)I뒓d5IKJfчUƤ[7E |RRӁ`as@FqQAL)TĜRLjZ 6ÀT緂QF0\NA6 F R[o_rکHDI|2uGL(r;)iɆZmJZU,cngP[c7]JU32Lt"QJۙ a"S%jiP;8:eQG0UϋIΗ@ uV ہ(a>N?*b̦w/K 9*WgaG.rduvs qﱒ%^f HUEWh]1PְLpJ[]aHTA9gK|W])K7L9DI7`D{ 2bVda:4X<\4HMՆAIlC.ǭjǂ*,\fxh=j̪}c#4=/6="Ң(UѪ%G(1[$(Lx{{X7XI`M1B/J\*l I_M)a!K֨T W;lf׽`J]AlaSc42 fF6T t'" L^U\Mcv9pU9J S Da)Tao{dLx(mҠ*jSe 0jHtdH@at慂&Z2L=:7Vp!Ä{9^l:H%𿔰Y{[D! &y~Hyi/a't:aV嚺\V'ҩ-G@হ*{pp4Z3OD2 }9&UraX$;9Nϋ}_ l.!ޫLa^TW7Y'rPL4dhg ]DbcD043P Ty0$S97qqv7s (UH":L7Ji5 SٲhN!1! p؆f( @$R# ,C ybI*aLk6jO C$brDuX1*I*J)B(A*.)*DRM5TNޙB'Iԑ=O0eu*l]ɸe4m91᡹7,8$&CII4EFP`Ie EH7N502&4A! 8Wl0T0QwAG|iQ&.[XyjQDv")ciiThhhddhhfffjhgmk2ڑ |gǍ'A'y֝EI*!%EDpgUdI5@ݕJF pJ'/1h3_;Ab 6$E}x%HP E϶"+~yAcvXHk-rV9 Ǵ]*k<$~L_(g#tHWRTZj"el2G_ *(~nf4c̲>f}1i2Jij1UZE]H}mF7"I}~_7|CA)Wv8R @*,1܃ܓ6\ƿx 2L .=[goQ~RV'@Wd.)**:XM#V(?bv/l|~L2Q0t@}o/ FI#I%F I#ʜ>z`7=`ЩԐ_A7$I25M#Guys9>:)}m;E8"ᢉ"RKHѿ=<6+ ``k| Ñ  DJAf&75ʊ5殕ʮ`q T*+@. 0DpK"v|??'gLeLF׶Z!Θii.PRA!aXkMQ0*hx&`*a_UV^bS QbXJ!zRu'%8&`GÙ|D/50}\"3wЎ H$ )Xd AL-BVYM)*P|Cʲׂվ,Y!:LGp7!&E5h`uB)bk3lH2üUDS6`})<ϊN1L`e#*f6JF̬YJR4>\`̬H?1?x;^w[YUozmgȝgiBOys)&4z=#.I\} H@`LGMϳBc둸Eóg?!> ~^Χj0R2P}OWCqӌ% IAb`QgL|q@ǴR)b{2(f()?,mdxޠ|=XH*w`T&S%LU"aJ F%G-c*Z@FHG X1B?GY4Z#Z.n1!Cq5Cdq+3 js%*L"QiW֌ 3 L0F+y.DFƖCCErϤ=XYf|R|B,) SEJa:zN$83c$1{q$f2LR{NȻP('I>Ü 糲Y R̄ 0fl"jVVV)*J¥IZ C53[2-L̋u 0ȢanȠXdk E;Rgk u źړ7PnȷXd]2.3jLanȷP[dC;P"+E"!vXesZ֥ngnȻY&grÈXd]vk S!C7XdZ3 uEړ+&n .3uE0X(Xd]2.Ba]2-32L2 E Xd]2-3&vȷP[gk Ir0.3jLaK2-3 ŮfE2"P3E"@3$Qs2- N8"ddk "a."a ȹf&n&jLa-f.L;Rf E"avȻXd]2-L̝T3C2, A`Rdjfd!1N KsΨd_xɿ׏q3 ړ;Rgj źbͩP\f,ڙu چbC1v$]f.3j چbaRdjtwT3k2 tubfArd[f-̂ɘRgjLfAnf(`dk u5(f.3k2 چbC1vP]d|RWP].3&bC1vP].3j چbC1v9C1nALC1vvP]f.239 چAAb33!ά2.3j>G0$?Z!ԀW$q>W\LDu%~VmUe", ׉_%-\"}Oa ??????GO_~34ŀ~A(\*~񁃤]EIM*mU ~?Uĥ;$Уڣ!'GS TZi߼$*رRhcSk,ZFֺ˔ (1 B@P̡I08dR$m.D4 aM !Z bdmf%5]ݙ (SAȅ8‘Ĉ^X+?FK rG *~rlPbc2WNBehW[V,4~eXS5M59%NwSyyꞌʒ Ģa%Ta CƭN"'xaX- ZmJ$y: 4Vf %J5(kDm))T5m!&% @RTT1.{5)ݼFߐlHb&C<Ӫ(¾P|DܘRŃJ4_tH'1an ֧քO{ws26nzCFU+Q_@.=|,L,$O\@/H |pX(JP⁞?i ;[ ǟfORtOck{h6tuH(K#EQFI0r7$SZ޶UU)MI 0  ʓSsA‚ (Yc$" `%1"T@d(J"o3R F\FIE2)))BU`  QclV@T*-DUSh"2Eűmod8! @^Z7bg 0FO?j+> L$*SlTNήT@|'-NQ+-}D 7 ʇSARӑJXIäQ))Z?mN eVi-½/u]wz٫ٵn1 "z ytTh wK'qm䑭;o/연BUN4FD$ض"~4Yq p 0hU`w$pS|a]I3k$ }یCdNY2>ňք U](E Ņ$a Q 9a H Q JwRJBe4 +ށB'5+ybR&)nD( æ~ ,L@6&\}:`>s)',C$j02imŎ fD!"G3v6*bBx:+̓bub'A>Tdx,}:4?ʗC=m2+2cS0a(W!h~J7hTeͷ8aT?Tz%?1ـ|?(_N)Ig8 d)v ",:8tNS_,#:XRBF$s NI0*u=$Sxjۋ9\Vy$I3 $UǁYpE/9@?KZkdBHT.DX%2E2.eǻChWyI*e>bdDn~BR.EAbM!,$Ax+)+uuhL2U }& O0ec- [#Thz-*Vfl֤2N0ZͥQ*M%5-$l L6@bIliZMһfĘC[ %6(ks1$Rn1IdL٩VvVpdqZDj !bŀֿ>UܿmtSSC㼇-3H~< 3ZIRERkR,ڔ3mYfl65RRBL +3XLȃvR2n|_Mu=T(9;Pb*=%_A2ɥ)PHRea 0Bk_(nu>]wHKd>f yg6s˿d9]w^v֑j]ޑIbQ& s> _zmWK#4"Si`f~!9 6-mx0~>`4+*Z"% ܪ#AoA,Rd?[V= LgJrưشGC;JcpU 4:U C$xIBFh(!09AQ&?~o+dnW%>:' t$uDg:N'>D"F$GptVYPww/'vbA@\zCU~.~XB'MYA= жKF(QGgp ='E8 Ӽ"()DJ?C%HPj !k  ! (L6Da@nBr PBPAkACο(# Dp<1(PA&CAj6Ub}9ᰬ7  (h IwN8WN0'(-T&hRu 2|8RI\2kq֧}=E *y7R$I;F 3uEOC(G ٩(*H(0B v*@Tڱb3!9x%Wi\5i6JƜ41%>Syv̇tIĎrڒg6㎩` u0Cz}B{)%tXppH4b߿!1>_`zrN<7UWp{`84/AjH{RN\D̩1aW@нns0&{!4yC]`)H#_z|*{diʰD},9}~R>YćBƦG*76|'5` ta卉WdC ~s_Á\eqe4 i}"Q $S$LiJرDE#~M \& 9#2 $D?[md) )SR$%4IGe|穈e5(;w)vPXZ'~yhSrAa:+@)" &&d eLƈh~09 #=NfLMaD:B%!v TH伮WDIE3YvZ+e"ɤ]!$rx{{Y#*Yh ^ 8kDĎAV M9Eeߤ066XWRz1n`V.rW$Q!df$MQ A |j`4gP7ŘVff~sKIP~֙5hg" aPL T$Ҍ#%/C˜"rS\0T^|֔x4BLEԪǐ- {| sLWdCތpm' U#@Gۮu>?К6"* ,ʱEbX2Ȳy:*"h5z$ BB%bU&ȭ /!dH(@!HB!$ؠ3IW,1,"˙!bH| l58[PJ+(/#~SB^Dp;sTN$)@`(rڌR6Q-ۙ\RM^5-1$Y$4d)lVMX>7").ԫ-P2uܭ)ur mHVа!JRT*[܄dNSQcjUKK$M+U*Yff9(2I%i%Lj&2#$)Js L*NRTY Vm\lL*)O`ajdG^M3"wYP1be?y h%')m'9L`e!Hijllrz} ¬0\і孠8PșE~U 4=(y,HzP~3~iTifjYsMs<9V2'!]X眞\]9a@GpFcK&rʽ'iVQ@x'%~2 qGRߜ tdCO9"7鉱)qq8#AJ`xl_""?Dr -=a"e(WifuiEET 0Enb$ZR؋,=}fy;zA(T*ʨ".d}(=9B!? 0'A xO\ĥJT4bnѱEJT[TϨÄg }a"AWSU(: o{?T|j|ȧ*hYD >N~ȝÝD/?oxO/QRAݝωܨbx"܃Ѽ:YNnhZe6ւb*% @'lhA7-KJ2a.HaVBr*5jJcQeR]XFRD1Tƞ tM(k)J}d!@{N}~D09-$mXb,`q)|j"yv ᐒa:2BQd*'_hNjiȂ$&4hE C *ԙ][G)[VdjILb+>6 1^], q?XZDDy..$M֚3dlұ)}볾^I + KL" Ti`~m6HbRl:C– 0KSaylE4QR /جY-[ ,Ҳݛ`T NaY%0Q#QDlvY)[J48=F $#062zj*x:ӒLbx2nYj om֤RGPnAUfIG ]&I%$d'S(ouvܔ~E A* I*&Q!&ͭJ`H|<%LĬhT0 0DahU=l(J$"r}ıTRD<>DE7"Eۤ4}P;|ҡf7~"&cyۼQ!CjE<<=ZB UG!}vgA2AGibYa\Bֽ,~u|R?L,nb'ɞPw,#^XOZT~!ca" Xh1Wڨ@vFS徼<  `>D-" NEj $EP-r'&HC$hO3S5$X#a BHH30 Z6@)PjHvmKD`8p©>#wP_R `O@:8}}EP2Ou@`]mkmm)Bmkm-e)d? $M $8x|K0̨Яdz<5`x<7rw*) AפHJH, M3œRNۙ-\ǘfYvkqjYoL̖_KzL-)2&̳-c%e )M%o yUgA9\9惂j( @:1"vaJad% %\҆!X05"k_hd'A@ R)@*J}Y3rPYbD(@.@$ )2 0 B@2RRLOcD|<9&1DYo^m3`o7G"'M87)!dF)PRVZ)h6y 2;$vӠvoke4H!&"foͷު*D*'h_e-$~2J2n"{lxA#o9d;3]9Pq&sM!he6MHbT&țXFڹl&ζ3 ҀfCRbZb(ajCL tPAw,d&2bɺFdm8fub ,M4LěH 5ݹ[K`Fvp'0ӄFq.sI^MW,Z$RHgm!f#,eqAXF8k0(4PP022;AkI1׷͍=16"FBB2TKJ&HUӼ H{PF5,Ȫb4m3IofܙRj%li4q Y %P̵56깯NNKbk<$dTY7O $9ƭvΕf]! '=9*z$1;ww3g2Qm(srI sxu$dG59ӕAu4ʌ D)f  85c{ш5CU$$tiP)Y'):#9[fUH#6*z:%GXthC'#y([ؕB0ZR,Q& ED  "A ²+Aj"b,j2Oֻ1ۦ˷VDeL-JBh a3NV XNI2GIW0HM`k $]LD>#4BD6$I&}'g}q41̌LB[tC)ӑ%2(\ *dc1?czC 0x6 =U*@.$rdA=R/D[|80ZMyT>9 ~?,B" ϥBYN C[O)\!FV MWe`vB(DY\$Qp^Bƿ''5Z6%$SA(nkD8qda3be.ι؍sNT},9*XXTb M,ު_w1$ #g0kv|2 &z#ЈRI 14 DzYRbX"839$W6aɄdfdd:?\Fy}.dܐ9"t?e|T~vIFm&n"Q2bIrTm [$BBሙz_L4c8I)) D_2iEd X6 T(-$&Tz =U TU5m~;o|F)BNV[? hzlSG1XK""YIUۗlںXX C.f Mr("`&a}P$JOߔCT-% dѥpDP-,]ht!0 lЪb$dܝ둙FLЛs&&lXET˱$1U!Kct[t1ꌋ|aOX*6VIeXT8D79ke6S>YCZbç ]* !B+4ҳ0d5"t2I]G~jTN P!AM2)Q9h'p!'qcv] DnڟŭNH JN"$PQQC(aD& عM(ŠAHRF!GDBQ=ȋa@|pٳT,i#ՋklS+KjcS)d*JjkI#(w 8^!H%66JZ^J*)|ǐ|lAP´T;;ˢAO, VkU 0SMĘ! dޟ^5](@RF  iq%={I-VI1Q%l,Ca>vYK±` 2,@3"p3@p!%'̃`: 4hFB(ELU3@d`yʪ@w<: ە<̖9= $9JFVzSq1Eۭ 6'x'`1BZnX0Jdx NaXUK rm,ʰN8@0IJY&X*]bC{qMMĉOe9Npx& 4FL@e72 I f$ۈZ9$ČN1ތ4b/7}G{:0PP6҂4*F}6;꺲81 ߻#lӢPfm o{a+邠`P ^V# WSM 0v) Aϧ.V<ؓr|*ѡגԪRh/csu-b%:S1]SWhy6|'1x-GyN@ (t5X*Bg HNԦZ7 ,waS73:ةߠ(4c!=<`Xɖfݾ.cLPjsjY,\NO{7Pɤ]4l ;,Ĥ6,AX, ܭݦ1\u*5vnWMГʀʄ ^[\Nʣ}nkb~&эwHO~'S?|kZ@y]y`#Ca#AkN 7 DXYH\'%Kؚ-a̭xIkC~7Ѿz~;g}}E~X*VPдX;A1$FyͭJak\PN"&0[^ePRAT'`UA!d`揠_,*{(,1mSY j !)+9fPd,MNΎ@`([2TiT سl2s4)IO`x5Qb j[ךu*;D Zc!q#E1#*Kk5 V j4J׿Wvd]VLBb2d\«Ͻq9ګ5^ ".@D:Tx;0Yb}Xzt.OQwuRi1ʝ@ѽ $MWb+:RAe(!(љ$±✜q)H۲615)Rh&ɱaYi1cfVi&k45#M@L%ΐ:3J@gKh eAņ:=έq6w|A\EƇG-RZ B\zGdc&_\a[ C`Te jja K!WSJ*h;*:14 Z3:"Hmg! 6kPq[3 G 3, 8:]p0hp/1P= 0Zu½$gCBH PA2O|߯pvyX"kEAHJ_[$~Fqf!8F˪TSπVB@%d hQ}9 )ɮaI* A f@+M^a9zC1NshRz+Mpp _NKN5a&9޹2HSp@LKI@si{: y y HIK D 1Xspvhd5 p<$xۼC 50*í\W3A'MQBǺ.899>Ŷ>6)y,eC25G0B0s"gF,Q/)2Ny:H0jceDdUZD|aQ (3lO>@b$)#LvZҢְXҥ]Ky٩= }R$St H&&%ɿ%Rnl%L!B" `Yg0o5Vf5LY2L)Y(JiIc&8D"InC]1VtIsdKDɢYI76Gq޿SG/xDJz;< #nn}wSw!(K64yA'$ӡgaÁIJa"&e%\*UՃ,=4yprN8zA+GT,% ki+J De {s9(Ug]Y2 ȒMjQlɓ: <ʽOռPP/jFhq XiSc< A ^yMTYTOar(ЕULY%:+PXU*O 鍘`(Is 7">ˊp0fI ICI<+?ô\Xq/H,xpUb"(Љ:J%JB&Huj[l0m ,\m0(UtV.JsS#  [z\RRF"FSYTN:.\RDķVי$S$yk5T*ϦqD8`` (ÖCR2I/. ed9);XI(uO ,~iI'?ޑ [ž/@,瞙D:^331} 0`)")$koY ђ@8pl*&6ڝrj 0JfQ@0ڮpO'#ptƆCD9| AP2IyҺS&X􍗿,4K.jEɊP1d]1-y炅 CE\QbZYLG3*{LI1vPz? ? QbDCzpx{6?L{at1  K#(?.KB))γ (E H9+LJG[+!GA5dta7_G7x|YXtg X2zF+M|r-;/dszme8ubyȥs4Ût#tǽ!@jAX/Vay`E|PbNzD"e14hx:-)ighP )2,V""E2FLN8SsMߛ "BS!BPMfԐVB!ibOVtZ{{hVp [ל$vh7m)'8T3vvoqC&!l'+@J^XM)簑8, S X/CPUPp ab'ob!UPUR!o DT2( d7ىuDTNf#*Fmmߦ Cp0 jg-,[vviPk!II#NVp@v5A-AֽAu Jɺ=п\ `c}=` Q s΀ Z,(Rd)@!E30S$;  #;v*B_(@Z[&Eؙ!-0cWǐ<Bt.F'MV[*Wj!Jao!Ɖ S "P rűPs 厀ТpvszJ(MG=*:2crF7$d$PLYTT"*Z@fAObx` M5\=VYqa0HldMNloNd4E/V!h"c8 47BDS-"XY1U WНB^`Z h^7[G/G}-1*D_@_@dƁ aV|`bACKK/\+|wv7g<p.v<AfrL;<UVt7M"@!))hMߎ:qAN4劰'))B5"ZK҆-z: h1yC(:7A ,jQtꧠVBq*4;B%AZ0czUVƚw^gpNvUg+:t r*^VYB C1HR$::8Q pƵ޻GWzB%>s3 {uy1FCVӶOoA׈ !C/R͝`l2afoŢeKLklz^IE5Ay ) & `< J*|;vsE98e*XWq`XEhD]ӗr;'6݈wpf<7d ^)r0ax0admBV c; ,XND\C>@XVɋ7j⸎',l5lM96r)MUQHhXW JȌI%=mLo[4mlJ Lh"Y#Y.[ A2`UP65Ophvb(0YLR-I6KƦk,Ȳ,Rm)d JQT)IIi,I+AVd !EaRR3Jd%*X%K%PER&d֪i!؞8Yϛ&:l-#)b*қl%UZN@b$GZ0=YƲ ;R%sӈiJo5#g~ ƒAO?P?ANR'iU H@M@ }WldH~"WQ['(h5o \S2 rTxW.ʽT~3.g[xd#&Ǝ 64u#luvė~%` aWNAP KHbkU[Ltv(A+&,g Hb&d% BΉZA!-,IK!q`XH$Gm悒U]MFXfi&m 4LjKi"=NI0vt/qݚ3CQ^H|d?/g+ޭ޺տ~Gq;I8=` *Z{>y@$eTQ>XDriRbDz:|.,=0 xJ9I!Aẓ !34 +RR# {Sԓȟk⊓|hxEq6ERsy:A@:#$\Pqϧ0!)/DQC=8*ʜ--YRdz$4J/TA@" ӂ쇡GH/ʡb_X0,)Do+8 c&hw*E)n9.߸uO%xOii뫭 ovM "g%գ 8oTj[ bNĐSl Q.ib@dy?D|BUiNBA3ZedP $C$@Wy:(P#\(r۴ l*E*x0y, `p,)au8SS 8Rbxbri !I0J^vffZZȬnj `\ˤ'wu&"}AU^4 ݾcAERG{O XHQ;Ur5Eȗ!\U4_ʊ=? %%>%T&A<'}jLb O%RhM | ]~7`r@@$2^rq081, b'" GbO[_c>bKDT@?'> d(P,ٓ̐ U~uHE^T}f&CI9D@TO׊HCЗ@('Sc.(-pB.(vX"9zC\p뱧zM"_c~ӴX3٘mmn%Jj#iI)[#IJD BUOM?ʴJ)XL Rf 0 A i@п, ا,'ȚHq='b @ RIYxy3ly&\Uh~R`D\?ttxsSNFL HEW:D/#V%F)7Xyibǎ$ƖМNB=h0^& OaB%8gn'\ [y׾tw$Pᄚkxķ}#MOED" ""!A P})TRh =:^D*|By>-͕ovhꈎB w BrP5}" !хK峿nCEH0%rJ'TiRLLT.Z$|_)w0 X[E `z@ӗŭ)R\+$VMA#uu31c!+FA"C9w P·/bP~N{Iے9vժ%A #as(+$k% 4UK r@A$ R{ěk\5޽[; };z ڑ9{wy/17y\H(l Aovz@RJmn댪7}5YwwT]I7K/ {;ǎQN׻wwa}mjh(v>{|7c;Jb϶-z-cRﯽ{/+Os *wu.{9{[{+Cֽxzd٨Wa*Ԡi{8(*f4TQ)dsӴ:z!C^8kqϲ%hA=հo]{ۣ=;5Jt:ؚ!*>ǩsHz=(uG#l$(:1Vr XA'|7`..%RW*YtNCٞ+ 5w^n#Dʺ͍٩h*[;[wvj*+ݟ;+7˟04sEN΅Oe=ԩy`mk]@waA mRLoe .)az{r(y:.mۯ'KgU}^uwoυ0Cݟ}%5fv *,<}ޛm}^UmAװ־&U$/MSA<*6ҁ;^޻F ûuj.=sYCm}x{{k>:} $z{ڝVwݻ}1;URXmˤں{u4D5y{ [ͯ&w.̯v>{ ɒݾZkh}h4۱Jz5ڹ27^=wzs wnO}6]:g 7HCQD Hqж}a=]h ^w`zwc`p.׽fֹ'Gz޼:U|JZ6qoq6O z2$ kaR>N|e*nڤ"j۽$q uު!}}qmyyNQa4{uQww=X{;\ۏ 7wzC<靴:Y>leïvnhoD\!tSwQi۱wjN\ٙ |pi >rc-]+}^p4\n;Oͽ=d.9vM(PPm}wfꜺ*}vb^[O[UM۴i[p:lggZ팧A I* $&DCl?@I⩓c$_%$vvۿSlXw+]g/3YLN|P@ \M=Ǚmiy1PbK&%jaVq58D((jJ$rP30P<8 O.B QlPL#l&j2JAzHITH66,ԑ MJAhY t,6$$I?a3v0ĪҕOkfƘT59haiu(C'Z7r1AO Y^yxwd ADQ H* `r-sg][CJSc0.)M Ow*UAX!r(BI(+B "B2Z4<ĜI5i3uWOH?E>&xꔌ_eK x) ЍgA3Na%%҉,ؔV0ҟ|f+ lٍd 4*!a;,߻ $1(D;ncHu@t:3C_+RraVn!p3rIoM2L9/s߻*%RQlC/֗`0fS\ZK(Ht0]t#j?* i8Mh09vguHMfmXPOR?0Y ٴ LCwhϒPp뱝T]Qk=e6X炝_G|rY/}V[keGݨvCNrakmKvFWwTu@Lmp무؉ 09]0u͍J[E{[vnv]'^Kpd3T#Ƒt&4^BI>c?\i_.y汘XF"p l÷ 6`, qd wѨwIV;^h9k-6Zϫ{O#'zti䃣"yrTl ru-&^dJ`Ʀ}ˎ1m+;XO cS}6:vWx%ۭEھv$hZ>KNW۷mMWIQšC4ZM6plZƋDY%B>PKl䠷-'6BbHݧJ6:5tELCb9Say+ v+gi}Q5h(>d+I%`D50?e׾$߿aƂW{ó)xߒ8Mf顊ȁ.Zzws^Iac$X3 LD.|1)ļGq:M3XqaxcT:?w}|:ϚՄJф!6}|LaHho?qZ3fNH78D:C^yB$5!Ʌd^nj)C8lCy FDJϧ=0Ÿdߝnahvg2V& IY~[Ш6I ~r#T$]tWT6Z)*K*쭖IB+Fm$ݵ"#> Qݪ8bє̙腯A0r\7L(M;Z Z c*lpl_]!>ΘD >MVߚ{ue 3!L&iev|7z.į/dk$ZXQ1kXaI.-"OKٝV jCk|^Ξ?/j0NG8Hŀg&Y,*ƛ/f0PS1?(8!&2yѢQQg<i. yX;\𠌕2] *TEKYnAa7 5yհkE45҂7OHG&H”$])FO49@jx!p4$lm4gDkƞs홆kou$eeW?&?86EݸicwX:Ǘ͆iyZ}IȎ’z[0.[댷DVntSDQUjӇ8jL%ua3flv>`!r˗D 7iQq|ٔup-$rXH9صmAl蕛Lzv_Y h2A$۶ g.39sw%4m<oԓ(F 3~:v:)cP.FL y 2676mVd[mHlmf%b3Z JPR>V.m[OVEZ7NDQE^th%.34ybۤ6s d --g'0 2iKēq5PO> f+2 ,2k95}վ')_A!Ħ;jJWGa#KVAbL$bnuԥ9`eB+^s UMaTk,H,A&K6w2< sCG0:1r(->]'G'!3@޽4u c+9Axwꕚ!X삀9nc֝dg5i9}%"|4] G;_T6dH#HVtoۇGc՟%9%s)\fP0!_Zل<:o'a7M(B=6X{Ů` 5IWQl=ߟzskom)StkQ^E!`t>N_v }Vcӑ+uLF#}QX 4)a᤺g9*`: 6YU׽V{ᥰf#@Xy1g{&0E l՜ͩCf*W{')ˎ6^b 0cJYNTCl>k)wL_1$"4G(_r5뻅 :بaymXeX*XӅl/cbaO̘}!(VptQwaR / JZ4p!CbhC:B'@o(Q9@O{ˑ<` ߗ*g\L-ɕ&y򞧯D9@YTlCoJء*қs2[?R^68 lNI8"KzI#'^a[#ڲcVVִs"g!8$Rmfa֢pƂlrn=D u" :l3 Nfoۦ0e;qB憝]B鷖kI26o!it|Cgs Ӷ^*Tb#Q$֙4Б"hp%"Q&Vv AMjET8:/T1qѾ)#`+Io) Rν4Û0rۑ6F14yyo l6Э,Y8 T ` Z _[-=;.1zbdL,:ݺ~Bx#yy{Ɇ>Ӧ $c'?x {p]jTG*\u4A겙@ -+pI m2۬0bQ^BdF`a'qO`6DDpwX l$ O\g$p2RI 5uP&4YuD*Ȭ*:PrN^Ɛ6;n\!G{|Złdx>>oOΑkjnEdllfڝNFVG-?ٓ2F s{wߓư$k@lk UHUȼ~%ޚe䷆%Z0Fe6z1b9.Л%.Q.9l)]BR8 1ӎ?_cOͻ;\. g2׳KnC`Rk'@L87a!5AMS59]Tvv*dmBAuixѭ-R0DX']kM`]vдuTrm D8 2VvermS8~n/IcUFEw?~M('ϙ-RQ#`Ve[cp鎠#զ˪꿉Y9l&L_B#ƽW5 6`aG%T_y*Dg1SpTd37e2XȑV݈$A^P.$#r)WDAMK!Gh7x017$PS򶎶{9Jrba}={0rΎSKt8䟘;^):R\~umWLz  8q(M]$A\z]bA\0sɿIO iT>pFia{J ci_M&YX>zsqӳ8~ P%©:l[/'6HnCAru%BbcZS猚ިVSJ0)6hV-S1J'S-aکcAGNJ _ޏPmbuP/2%}a:7XX Ts٭{1#Te9+w;FgW6|y׳QY1@n=4›'ƣaЎmNd0nbR|/R}iZӤ丿[V\60)C[V5%guI*ImPaMURR"0U(OSrwJ%;D;A-y"%EMXa~kלuC#I7fA[1To}Я;U1y:c/|*"57\ؔ>dj2͜8ZtFo~9 =uvO $ e#!ǚs6IŏpӼ׉Bhhb䭞gzF=awr5Q|FۮymbWNN\h=,# 3Hm2ID@:D6ȦgO]ttn,|WꝤڼpg.G')1 <ܝ;k.ۖض̀y{ 30ާQ÷vu`}%:.Wne˷_NtD?Cl({w솶|i;==IG;y{u"MC!D1 d. =u8PqyG9. 2:=k~g]\+-Nb/<5>(M9& m?v-g/WdIFb(!$dm5 (ó:WY8!?E tYmP2EF"G ?Z\ScxJ>"OT42J~5̃ yUa_TрDA j7{4zBtQy5 k9^-m l1?<Ҹ#e-Iͧ>JÿfvF_ Pi9 NEmS_xi7}[`˫IN͕Φ9v+Nq !UcW >9K(z]ɂXf*PIJk kLChP~H]q|,J8&?6TݷH[rzR7:"|&gDܼv?T)HQ^ӥz&֑$屆q=U}ˣd)]gXO)2CtA~]B!vjgî5f'ϟ٣3ZFs&:A̟'{zNhZr{9;,Bs,NrUW kS_v_) ‘۽2nny1? I5 -FmrG: ;PbVt}, G[ci!t΋h~'50{8SHGj!e y>m~q(Xo~3E(t6 N8oSe~9ӂ 6K 5C04lFPX:{AkUd컍4^u+ct@m1c9ĵ7( .ă|"QZLzHW4z$0aY%b#><>O%;̐H"l<NWFui~;M:+0e81Nvn;XSc?[ƩR\ccwsI௙8pOQA%$d2r3AA @̖Yf !f2 j>(8҅`5TBӪK'uXqM?i$H$zFh&x]|C99?|_\A}#D3ou*.kmfnR 3S?x, Fn ߔUuykT)iȦrxra(*&bhcϫhs+RʵlvaUޥW'EOt~ږ[KaldWsQ6+W檯ܠ:;&6G|ܨVci95~'lVKKs6|4Qg ՛RpSܚl7)R2勺s'5lH&,P "D)_elSdX114 ?5Ċ7琰.2(>…tU*>u4meh09*`3;Mt13c].%NёF##cflY08m$UdǒF2҇_TQlѳXb; ݳx=ue#9RQ.]l(pC)ƔRJa>RgR I` B=eCV/ dQ?+Ե+Y1A24&`Tӄ"2@hh~mۙA2HVOd;GM~?_Ok}'yҬZ: V!xaB .$d(-4Qe;_|231$_VoQ2_8YcC,[#=pgy&]C$[;qs?ъAi9{<\aݚ]jyxVޖ^  Qye6Q(R/ -,UwIRZ ( RğF& 4 ~qySߓPhZ7qCx6XK`j|GaZsq0g ≽Cц2`8[gLXPuTCcŲ,sg?װ_4 )8z3𲳧wYvG dKw IcMT@F._}A^>ƹ\uAdsl͏,B* Wo#F!B""w :m:@= >Pl.|oerQ>T^ \"-F!uTOܠ@4$./SQ,K(OyssGu +Dh(JAm~&ծj(EF*ʰJ.4j@2T˛Q"R&(vaƪfIshUU\FU2)}r~}S:}O #^>͐M(]V2 !yJZt tAJФw00Ǜh.LhCt%ih;߶~I6]Єjih $;aІ o9 Bh}|Z-8O}bSh z*HdIijC䡍$bbSc1IP>8!FྲྀJD4/0'b@w@=rؑzO[fvDnj@ZV)7:徇k9=vAցBF?@r%=gOiyq'SFţx`MXQ{ i|k"6mIRrD e ԈCδIQs0R1ȝy 'Fq8$~DZ[LWu#+j*Tvؚ}JjHEߡEa7\nIhFGc d1ܩ;[1sfb UAU"aN,XĐ}O.@D[>cVya|\*+򜚬񠷦} Ygvtԏ4k7(H4ֵױG$;Q}Q;a¢/9:>R.UlbhaVqg~yգf/b4b}D("G`0gOON]T+Rӡ6A{&>[P#>i(LoV Wm l(`ߑ-Jp;QbV`n 654bL ?}ݍ!DJ ("~xhb@D@M JrCP!":(GJ <HjQuC%Y$-$ӓh5yF*b I ec!"a**Ǧ0Kؘdp16HHAaR B  %s ߂wp$  R;{7. `Τ8`gCbh\$t{0$hGlFﲉ¨t(f,) $!P B%6UݷXڐx4*+Pvv8&$J;n [!R@ $Or$TJ͗w#M[6EFbS19o$tLE8Y8QCx+eDC,?P< >kZuq.0n{ZV(ӿc.3V)lب྄Rߟkr\;0?bHa+2T֛Wiִ1nBi ICI vBN'EXPHړC6a,vX&䃸DZo ,hI$ܟ+S]I L_[YY[ml*6'1"4]033D0tԪ~B83ɋfkЪ$HΆi!p?߀a6e…:JRHhb@3 ϟ꓾7{Lҗ% Mm$.C°4dUs_CI-_v(B&βky՚P;h&b_"y;8ƾHM?lA/<:wيxNdf;AaI1 &9;0FO߰e/-kEh_7bj`lf'~菵gi24=/?k<ةgWcʰI0Ouz^o3gGF:::C͹Tf1i;NcX;4Ƽdq@5(f +wKAũ/J2"s2@3Ǫpn$(C2mz"2JF D&!K'~\iOk {]ՅݳLwoojv,hhݯߩ.b~h{i]-(@ PbI4Q$fe`s768vTHH2)e9IcE&2i[GtoS")bL: , `hs$1)7&Z2UF',~K3І'Z>d RC\ OP9701?fZQ&C 4QE"En%&M]ۧiVչNN |.M2Wv*H xuus>=l?NXs;H ўb Wή'z +ͱ̃e?W{փ= hpRJ\B?R"27 t-Si?< i\2O%#Æ8iƕX6+3{9>3ު} znlSripI%YUŋe-fi\>ppDZ9$͌Yzu<[S~JSs9ND/&&fb'ʳcꉝ]/#76ř"//6ֶj 3J_I4$cL^}Kc:aLƏH>O|UH4{,kxdB> 4>7 þ=1No"d%:B[(J 7Ce$^F51ze 0I3JOȣHZDﴭTU?%cÖs9sƒ/= ױ$BnkH}0_od,Q6Sɓ Qus; C'y,Q%?ɳ$? g{= ;G'SuSgSs7|I1q^W= QJK@9GY\>.$S)6Sf\3D2z=6|zmH%luKsw)b~kߒ+,CcZvdA:O7}͟@`j.#/HG,P$ ggGPgX1dfY}(Às$ !`H_$` 1u14 \f99%Y`0dBE1 t4KdMXeї._[6ae! JU>S _BAljuީ[i2,%AuK,@AD;3[ WlS9dLq-%$QUL< ڻfA 4&6g" -5㉸H*Aiߦts$0\@%&tr( _sF U+iu%Nơ4 1R,)1@q?.\PbJU2rKscq(qrGY ~Y/BQΜ k?: q%L c?=/L#,1~~*ۭJ/-a'ko&?LN%,h%dkW$ڄDMF{dgOad*i CJL?fxĔ`P bWFcFkEMk֮T3 ZZ 2a&Lj2M(f49A2ê)MBą5*Tc.(|]OqoF&V^& J\LǏRˆѬ6Pd@s Gi5`o9Fk+8H(2bA!F06w_[ ~cJ鈏؝8~{2-b5ؽOwaKב?WqĬ-e{Kk"~iM^U /l:Jlr)-72s҉PE̸ʉ/Bai.MPYM;&W'zI,541LJ?+Re>]f12r g)K[,hݨ-3wL "ZnUιa艛5O/ϪwiQ*r HIArm,h-xY}W#m2t6bia= {F-#ᙜHXXTXv- "!%~'q^Upf<Çbiۻ;ܜ;c^nϑɳwջO?C +ЭO\'~El3r8rW!KI?[1,vE7u!Tb $Z^l\h,DŽH~4.RnN2Z?wz2>ўNzޝ/G'̆#my9KG$< .>sgp$o8 = P:RM14Y `q}Ǣ0X a kڔFוPd1hĞ>Dլ8yRsw4k69-<:|ռj%*txR7e(F.ۇY˞<Ĩu 36`PFh $ ^.}sHՔU @H h?mjmím!PPgAw^^11χ~yh3[]gg.xkq c89d{3#t4h>]Nl #3HG_1XLLH5O=haH;&;] Ѝ$!N6T7/9In? z9ǒ)ݻ=O58}- (R'R9Gw^۲|GO@nH~{_חEbFH9 (fDQ2 r8_J W/ d " ,Cyc7ռ&)W+d 1_d lSV[fFń$LkM܏"Mo/> d11E6dC a GRM$FNhE dB65 aZQ&(6Sm6cÇy[b8|Re@7o9K'gHHI@ zT͠B@݁)Py==\IL&0ȵno'A>? Xqɱq]0?D+mNT}ݯ{ȾTH{m!a8q`3%mN?Ԅi%^o:IAgk&Uo+N.avTcKβ q a$SE| oꨢ"#Q~^Ӈ Ct;eDX5͍I!blW/2>T+zsB=l PP{ d l4Lu:ouL;)^`iy\&>ɤ#wL#^;3=aNSmx1QziLh -mMyh}!וUqӳAꔍQHI{8ӑMh9yF)J_,b04HjY1]uAŌL6.H4י5zdĝ?GL߯atX 4, {@jWq֯I(CB H mD%jQh׸Cy2ik8^8;hӂ'bYb5 sUKd5Ji9qqMiδkOYa>uCR_gRGKoW䜍ީܑUJX$r6cL6=6A|"@Tva(y٤Y C9m)>}#" :K5Rs Uzo]}}-.ڶ~A?|hŠMktP>&EOYUDPKa$ɝܽmY7hoi= Xņ-e>#)#]snl՝y$cFE PFtwu~gpC%50Y}_ jnSTD"M-Ϻ]%Pϛ] &mmo 0"&ԣ+渧U?C3Whhaw _G]7ሚZ(>l;n_="}ot_5hdy2m_Ba,JR}~B?h` (c2sR P[`]ކlѬvAmGi "1s,7okZֵ7ɳ=,jTQTEUUR_x?oꇸ8]w};a%HFh(~DxEoIcQhd D]JѢx8xCDO!;*Y#l|i6%P 6(N QVd!&Abן+U}4$I*lR ߋ HGC!ˇڿ6\1(`Rf2Dkc΢r92p`o~&ӮV4 r0 Hƛ;}jm疎 "&&_59qӓЇXGGveSd"(%+i"N4eB2ʿΛUH(J~]W[~0/bufPg 4sj7X=w9G927_L;e2)<UӢ+;]`wq*=i 6a 7*Y<PZ 7ib M4L'.i/s92TWlè.4$6 BIh6/h0p0nBǃ9y1m7 ,TЍ#5 @Hd:  t2`2 n1M2d B'3 0+ >O[=N!#XYSXt/'?`c2:L z bZ޻-gZ3hCj&fbW{7㚇 dĶ*yUpsLt.8<Ɓ6VJUgrXs j;m5 Eͻp&Lk4 MY}2JhBV6eho DYH֜MP4CX01k"~&b.<;.9D l=׈R9;S(K"->D|A Lp26AZ5ySp{deq:94 :U))Hr"HLc cSYȖ8KghdLz Eh. BAs6GA1RFQ 7+XNRRcOһ1f&ݦU @*ƚ {$-O)wXZ \~r*#c 6G985; q,( yrDUeOmkDh5h>szRC"8$df$عe|@ Fv:|6~\ZgaC6 ta*oܳq@9ȿtد2 RJFLC޸s}ncމϾPEܬ0@*̆IP&S`md[TNM7S)W5|k%OM2z)7jx jA[17466t؜GGjCospkX vE{8JvtkX+W D3r@F\~yZT0$]Q=*w<)6 cI^jV55W 4~P6!"cKHChP 8 p،=!Σ gfG';||{oJ!_H+gn]'hn$6`;13){'\y~+Vu]4Oit5ˋaZ5 -\Bh^gs`n=C\IRx@qp)aX !o^W}ɜβYh1 ߺbce?uvdXDhzK`و])!.楳7"Jr504Up[oz{H;?.*o GDO2 wyt%BAL>lXU!){yWZڸ4B$Xk־mﮢ(<-,^AEtA#s 4,f҄[S,kJ b<$]T2HoJzj+t~٬CB7 b`,n^Z&_#FMWZI`^>g+b/_i[&B7@5 DЉ1f{E|ʒ?)ıFx\ž!Hj76šHKqnHX?6h]+]ڹ,Ll$14܂$ Ί>]7m7G}J[ 2su0h{! RT2[zo>wSj)ı=dc]qv#lORiB {rF8y_~`rEt?oJD{9.VfܤG!4qSx$9קIo4h?!$@ɶyqWdB6 8$!DM#G;3iH8Fqf&XiKfZ+kDXRS88ssO8=! Ԗ^Q$_2r̤/gUXyğ>+]/;wnAeoV6iiȲA-]Fѓ)yIJwhiNWL,%V,9\9gm^W )6XiE^:rl YLll=k!qYm(idb]7׷؍*:aB 4cCžI\:Xw%7 s khg%2t_Ӱl|z#3 MllL gd<,)BkxSzMfX~hS },g!!IHDNHx5Eh$zVTToeq}Ǣ9EʚC ]{]rf-l݄BiS 0c]e3 p{n@i, 9W}^ v(N(e ˮ*8cR$ Hov{g hTʗd"brQ &wXuo)q8p"l=q43m]/\ookKUDIc'ijIp`lڈ5j"#0"s; TyQ7P Ue ,m!o0xgxyNC-i5(@@5llUMk iLvb.d U6l1T|失)-MB7v.I"笍+A Q2\X5޼@$s$#f‚R%Kz:5fdS[nH̑d 휀H9Aτ͎`\§`KEc hCMr#tbͪa{GQaRUX L3& MneEplYKXQg3G&;> _&nR V) 3YX/MjiZT1m(pT*CJ* & ԥןdQ)p:hڠ"D#ZI_19'tOK|q5,@3:<ÅؔׯNg4IakitX6IHsͤ#+|C%99~'d3" XECPPGr-V]r"kj  ,FL7E RR0DS˾ؒ[}fMA~ZRur/Ʉ2|It \ru#U%oq/~dӒWIyl_"i"}#-")n,ЈrӦeAA";8XNw,.p9=Xx+Q43SӖcŎ> 0#q "ebh=F zx|0aL:跁5Ĝ=b!bg?g𿅧՟ 9m&Z1f`̔yH-ܥ O'98ƴp*.G̽h@H]灬d`hk>!m'aـzB":, N g={㛷bHmr$H̚T/R3m^WuHpnim i8a_O 7=\j EIh456T|Nnm(,SFl팍jpz3Ygi F)9b-# )G? 9ڤcQXvJ`>G)%Oߖ^ȕζ> PdneT.|5eVh-xߛ`QҶY 35ɿ`hdg6Cдib{3S 8Ab55 ""!:V*)aX^)Rig<2,xW'AlES5*7]iC)xfpX~ +YviUT&+71>j K5"hT--YT,' L)ё]3Mj.7pW M k=˘t!`X AJ1$ ms[7y:~Sϑ~i=RUdKldH[{:Wmޠ'|V~F4Rߵӻ]#8{=XƗ CRpD\ { TEt2–9y$&_8H˅(IROsdubQ$G)ٔM0gA; M10p4w! R[|[;~6W } !#:(QZ|[%}ص"a1f%'^R3E8RJ0y$T0V(ZG(Vq5'))= EFwhh0{u\[pA۟FbkHm=,:2:xrv[f1UL.͙O=so <=*&;]]eA# k`98q"`N#ml2 16ݜ&eXXx-Lߟ$)02+vF= @8CIÖ<U}F";oeM{1#R~3wͮ(v67[ muv (߿r`-X$`YHE 1)ƥi#nlx4 Q"Cu2D7 B'j B)Wm`<6POVA;gxOLs!.6P~˺xin ~&ͤU(}Iy x/QKR!{KEj帢%P~+ʳm#aYů'Y%"%WT=Dwr| d$+ 3|ʶZț>BQ;+lQZ[ɍ,:N$@hVۥT:DzWZ /+kLY1<`cd "ZVFXOX*Hz2dPC0D\M)=k5Z81Ӊt?Δ} 2_:jOl@,Մ%'ŠV/t1vFAψIL%Ѭ!h&C|C=kIZcPn Dp]VN;=hb|i( UD;-{8)oO?Q#9~C2H:M!K|GC 6W Ǿy8v|fڪ5Vyar.并e{L+r_M0bSWsM'ѧk^"4":r}[/M)׋p_lAh3):t}fC%H92 p rgSpЍzx,OKN*a*FTOf-%gS11Ly;#T"7|hˁj,\o4C٠ ,ch[KK,ZZd8I6a&Y0Fvy{7S9 dq2d@ӕ5֟1bhuȋtDDD}e hmt )BiA4;iYc>FI.?CK Iu0򆒨AEMzHLC yႜU;[\$rPR(L@f {@5=V)yP g~hiaq+m K|FxJt" 4Αny6߅ZK˝unM6svڛ#sOZ{seUviZRx֡_-mt~߹=jh S{OWMJH$z̉-3#O=Gln8$}j#GjE2D? #$c)$AN ƚ\x(e?1!h]-0P* V,b"Ac71~SVU]#$775<:!q\mƎLMfi1orfLi;^ͬ}0 Sl7xHA6 64`܈@/lfH5P%%$u'Y %kPdS J 8VծNHY1(uRS ذx2M##AX,!A@ 4Qe|1XPc4x z8#&BMK46dmzpb:ѵz*IuVOz 7y`wo}l ;>` (;gQgz5Oว>#&^KuWy2dન kH0z<9L2ʖlAD#]S]2l $ ̲I!(}sf;Z0my=\c *vDHi"8ؒG 82ѷgG$_&EC3S5),-iN\l.1e@gz/n38[]q>Z2ֵE '+  H×~f.m99hQH= ہ;.!l_G$;>IH8IRVaIJz(5D5.#/ψeAGINFN-&V0<=غgA:=sK[oQ3흘޴]24+wtT# Yw\OjF^'QOH0fFg0(yxj+XPx/Il`&?(9EΘz'Ê}G@%b{2Ko .-`IϧoW1 yr5FK3PsB7`;0[qp꒧<30znFDP /bڭCks̵Lǟ2O>؂2׉4q&\2bv|N}ueM:4\\tG] _Y(AG>W`CJyH-D$#{TFQm7$kH ~H*&.x7X;u@"`$Q!S=˭Ʉ x… iUXdaUK0&3qy!\pr|olWb6Sp?ց?ȿ1*& *I bTG44(&!J`USNb !d;RkfXm(QGA*dg:-݋ȑ(xB@eE%0 j@ITH.H `C4Rp⁒JhDMiwŒ^Y'6@ŁKb *4z= M !#WTf-e e6wu+@j 1-{nb)f/Ώ;|*cdpni{l<$53V7 фIҧzl4dbi:rI0Ȗ<Ka;F"{:ѓ^Ou%a8!WmGM5jzު ZF.h#HR|q@ %XP?TЉA l# ^%Jm(vP:|VI䴲ByJC N^ *Ed0")8#|{ ⸓FЅKL D(eFA%rY8,2d2L2XX %d4(̂: bE׎쏧s"f9#;C` CT]x.Q;$JHCQ WV#<+-++[cMnaK B9D'(&c9WK(.'wDzFB!%@2(Jf(gtc|=' 6mbIJjO\ܘ/5M8`z5;#tm5y,8Z n pv 2ZrytL$ %MLҥZaHXu\|2pOK(1~DWD{9[?|O l:ɸ4{ǡ`[~$Ws [H6l%<gn0E{ QJ2 05ތ mȡ֋=`aǖ-@C{NOb%RvqsDH;*avRaRsD~گt{|nr2TʦL$MZ\XRۚOaFъ/+} mpfam)j*`抰$E:f-C'0LMNpCl6lfKFH@HWDٚ܅hbƁ̋oTK)Xq&,twFOKR|?~)~2ܢ9m={c߾OU䑔 ]g"(wa2ޝ:#ZSlL?'dgӿZ"oIĒGLǨbkŅoI']^M9;!*ZWי7Iۜ{NOcl~ "斤71Vw v0ӣyޟʪ{V?A?[ G1>o@b3smQPR[cHl$'6ğrk3~w'+V$,JD'Ќ$X != $ĨOgf_? ,币\,cO/wp8"=r@,0 i^ ;rX幟8:2 WW?p:~=iy+2l&Og/D#Z[= Fr$4g-L~*=]ԻT{9IRRdr]_?9s>禱6 bOd %CD̢A}kˍ)Ǐ>Ce-[m5KG)CQy< $h>w76-!PL* l*i"#9/>x@Kf%zlRRO]EJr_Vz}կFΏW`ƥs:ӡ4Յ3:BA~M/{r|eh{퐈ٰS'G:^:}l5# HJ UY $|YcF;ٞې05Cv0; .Q^$58$%Rgl"o5=#7:1ih5-u&+F?jy#RYez{]OCt{y7>󓛱+i3{EY@n lQvpke@hSb@>HH:E Ѭ3cTH4c_}e0dGlj}9HڢP k01"RY&oWW\EV׵n[D"L J *0BXb ҙ&5 m5dQ|$mR+4r`Q 8|S"&ʑ9I )QuV-",LfC).dK?N&+'ǁ?"~hbVI60~e0n=6nM'r< ݲa5upRUSeJX+]uZe)I4.ꘪLr8sGjܡiOW5rIRbpbvx17TgaR5W5hUؐ@:ȈpdxmgW9*AG7{oeIepjXj>盹%^` MM+uHq+mL{~[ͲhQJcI6 ¾f9r&+b!I&1Xj£ج݈&+V urcISLIV49Ҥ*ED_y iW7M#15$ri:xp(+ҹ4QةfQLQT4uNd4Ngh6Xܲ?zMCBlTMA0(1QI(§rL\#aI"c!E?-9lRd5FD(w ˒QG?"P9(mJش[JS$B(a!XE}p5Exz2թ?z!v;N=o>{,}m5»[5?z?%b4Im6hW~}Mk?~NIQf%@}mHћl| ]p~o쓑-Fsj!Xjba\v?~c~[0I/a3/9]UUEaeU%z9fef3wÃ9b`&$4$Ap>Kߏf_{{IogZls$~[քb`q|wŽJzlH_3a;aRybG-2jje͕<[+QI9Lp-E:#?!`zA@HQ%gy8M66>A='3'C3Od=GEnK UG{SBJ3y3H 0 ʬ޳=vv5d‰`^>?79~nT_ d5r6eH/ m+](/ZV ,АwL'gIt*të/Z^ {T `V!klIE^MkvR+6j&YMK$V5(kV)e!o.tf5ѐiI'َ`ԞXb6~xIGٺ(V &V"A%@D"d-4"HH@M$jU^Z۩^ !e aFF%IeW&*)$B)[V1`d636#gLA1=7˪W>`NE(3A)44&Bon $eI``jL>d,1>g#p}혭'209 mCF@*g5]hZ$D^?MҔ |Zg2E>BICsP{ ΗHogv\R xHEcz5(G8EB8e\E|blJ{Vɬ~7%sy, tn?>z0\mt'6 ^$/#ߏiyh7]?_0ȓEvMOUu\cclsD tJ.LA/rU3N~p*GȘ//OפtZ SfS+}/`("&lդv4ީSp$w{=wxAZZo7"oD i2cCX i6f[%ǿ.g007~Ԡ$ljGC:x>aA493λvvngW56܉ ZnW%IڧKvؘZ0`Fq@0~ T7ݛN [ 0PAE)$3* AחM&:5}< 47\H:+br č5[v@q?G`\I'd2$&D7XLI 2~mmsa P"j6Nɽg@IHN_y}O>qSps4J 䈭,|ND xm8Tav/\ SH{fFV0Ƥt4tIGv 93P'(a/FZbٞ ;HgB,xha |%'=gc 07x0j=mCku@uoơxIyeX-444O{Jh1-4c1|qM2F9t+X⼙`Mcl%~ 58 ݜA #j -ΔԮTTJ \ 3ATD4d%xl#_i=#9HP/)_/6A9͍B=7m'}eBrPol)*QIۙhM|n3G_%rRK"s4;##0,H >[r2kkߧij~K>/gmL Yca%e?R/!fȈt Y+@eW kYe"l J ؙK`˿Z(9hͥ5QENu0,o_J,;MfHzn䅀 N^z;Rv&IE#Hi2)M0lI_KKb:')) {udG¸~CnaHJ_1A"/qhFȾx=|НR!CH)8l5_G1M&j5W'1=ٲF*0Wix;Ea)=*9c#v͊R F0=d, Ho"XHV}?JF?A^O&iµe+đG|;:N?=$@Qsm6WSm60/ c06'53t#07lL --k ؐ Hѩc #^|Ĭ"PX҇.zW?IfJv.0sO.yq"!!~"ť͸qWn=/5';y;i3ن+~~망ʼ *j?IK1_ ~`Tӧډ>UW'XIi̅f0j>IwD`VXBaED (=/EjD %cR!1Y͹D2gn~">nIYsqM CtJVM2՟ zJ}[{BG}l?wSGrs\P>|)e?[ ܓm;Bd سVBs{ KoN|3TA}hX37oVn@31qnkoW^Gm&6Tє &j@tcF44 9A *=:Ѧd^QK'H _+ p̲y_'A#b ˯8P^] #IZ9 # ķG;#nΏSx14 J>Ph])k` ƒb'Pb}s ?IU mlȯim84U2ôjzNfݣg!U`/ yByFrfzJ5? #?iP "|9JD Y_TǬ6QOY>Oz)}*Q.?Ycٻ}O010ݴ1ҿk`?,TzN,)G>ZѢKb"#ٳy>^[nn,uwG7R=˰=a^t#rC nTRZjB4љt^' h9,H_LeHe?ӿaht(. >҃ɬ~#}1tcN=F|؋ Hpب沞P,ԽE'c8En11I 5;I+Y_eٚ,óm0_mAɘP)T `i CMz/] `1hQ"6b8Mm1 xC~MYb]H-s¼a~b؋L석uƽyKݧ/Gy&j&˔Rr(d!y4#n_ L{A@>024z}  +*uKYFYݶ]a$"Ӥfa(BIqFrIq/Nqf"Z2؝gmNcO7*mfjQRhkթ] "6O3b&60C|ѓy{M"E֢wA| GmH,u6ha _pTdK}*7C OWI_'9 ,ӿ',_%@_  !*;fȨyU=ra/,4R?!0T؏dy9$?u4:y<npNZ|~w~}А,X*ZtWOp'61llzwxDB$A^I*I%lk?T9!cy`" dք8iMOG9SY<_ki$deGP%bj4@1>brNA3zcz'>3rBEMZHSG[oB0ZD)PgD\X^gC %[m(zdT3ĩ1-'S Obz+>Yyxnssq# SaϱW)HZɃA, Y4NX:wN:sà{ΊnT4K1/#Pg\H$Q5<;$Y~"R:S&d/n̚C*Q'Xml` %yqr@Y]r{0W ]m1ʸ[B̬/4_2Pީ-{`h:D- $SkL#&Λg\ac$ h곓&LWd !<`764ֹ LcBu]ݒݑ֥J!I+LO!zWCz(u_\[xbtާZoo=?*c] ҁ^-k6YߺAÚ ӖHc*tUA&\6}p;Z 5n#Y6q vM) O2ZOMG* Wg4E~rS"S2SM̔[n*O&H+6 20,ghnmARA(\3.e[beyv|~J#Գ;S9yv;`y(@9}w>owQ}l{%bU S!] 1H0DC=0v( gIoVѦ(}҉$R%0r&H "ksKKLe@@JՁ1Pd" ~#A5}A"s79_w<9X4uɟzee$vO*=K%;l{5lI@ˊPLDXL@k  #%Pp a¥º$`HƺΎU.](h2zt3"݆7 Ӹ}ugrL^q㲜{e`bP.H=A!( ftZ+MOeGԋ+?`ld aHr6v1dFXHDdd`P"ccaN}~ﯣ4y2Z'̐UI#f 16QoFIFt>'tC&I ,V(_9m=LZRlPWЅbM&7–,4Ƽ-R"^aD<(|5}|IF=CIcԬi^]3Y~3@q2l,G-}:OBwVJ aon#!Xv,"pm6Q?YuQ:Us˧(VYc,.۷+ Z~33<rh-1q۳ cc#&i=vvóOiY$fŌcm{g7h Ȱ2 EKEOd %3N5Cs$ :V__53 4H#,b_ZsZ|S1UAgd[+F3i- %.출Z``ycII~Tnoa2w^Q;cLjUk.X0#ǫWW8Ω#(P h`ujE|YmՔvVV^6܃^*%j*Y RݳA|z7p@2jUޫHoJf`Laf=3Chϸنp,l(!F*Hj]u!'8xs:*@CR3ur Ζw[au6aG8*j3JeY2a {`>ь߭oEenzFv=]-RZK v1s Ԫi }wUZ[mVAQPW}v=ҘmAdFq׿Y45@7mP eH?iK *Dq_W۞× k&??*qUE]`8pM%4|0LTzT|dnD>w|Fủp2#m0Qkm牫FMty}eE+xrl?ƽL5c2KV`)I#m&sKJ߳w#hB^P; ,ArGoMJv9]^pӜ 3ٔ}0s3ӏ?.H%#Iw}D#4TvON?ԞoA oOĺ.wy/J$0E[ݍڐ.7Q.ŭ^v %pʱ6%d}VSB'IwrdǜY;yǛ<}8{7 ^T*ll~v96}̫i1.]#F jpK YgU(˜<9Zd]0_$MYԖPY/[B"Fov"$_Xkӣ6h>/XINlpĩ.4<ߡ| =Be-vŕkZbl7feo|~Z4zE"%!7Ys>=R&6z-Ze[i,kU;^rExd89XQlGqq8H5jW r0ۍ]m[,l$L[3v鈝b6<0 \[f6\9!7&LCK4YlzqמmuP|V:ҳ`p(āW53Lw{Q| Zkm`$k !3| ,Con& gk(9X3fH":j ~^^( ݁荙CL<;!bIi@0&:&ysvx[Fla~->X"5nO$44Wd>n5먤K£=FN':c"c-<]OnCJabeTU>KEAx5n96IE2݊齃k +i幭4i#\@\!!徆E #Rb BB$ 6]'ѽ!cd%DӞ"uOx>:;'E_:xnՋ+xL5uÃp}ݮUR`2̬c?gܮN8ޜ+ͽ^LdRȮNc,D ƟP3u4;gW|,*YV"ǟ =ʱ#TDJ5A 1iD'i}tag- ⩅FsN,FvUʰxEU~.,OlT;Z(}P#n]"s9}8 /z iQ IuBRKQlt{CXYpo^ !5xKXyd'5mour3$=ݡwuûǜ)tmY"(I'=6v1}Xx8~PvN݉ͅs-N;(`ǿ;b"pڴTv q"H!T"=Ar JZ@5w?tt`֍}4/74-+Bia~!>Z9KBSJ!.wğOw7ϰMGKf1j'VW%s@|CT-fqjQlRFhD r=kl6I]B ԯ(h#ó% '9C5& 0Ԝ@wSh_&CH 5mS8~ @x"Iw3HGYM)9=O A9?sעY$؟[4qSc^V+0I!H0ft6$ز`. b dDD( @-=B<]fcI,h׻VҦ ?\}E RNFKद(Nn nIAO'Q!mq/g`31F@386S~Y6(2ׇF2So#"1Zھiʁ6}m>Ȕ ^W{*HiqqQR4hѣFhѢf.x~5`~9u:ν:hH^v{4vm`$?=1v~nz(ПWH`33`ES.9[y9, c#zEzϐۯِ`{ tNpq-Sxi{@)YaçXH*)$hTĻД6yxLiJ KV#8v-E""z;۱ vgG_r)pߣݦsZ$Sm+i{^$bBUb:z-b0\(hi;p(4} 9-û_݇}p~rXs^ O>|#2u1ߤK0E,?XFctWaskJ(¬DH!$~]_D=aEP[dH6.}O4J!AE 2 =DnT*)~..2-$Y)YR \ l$҄YA%x !d 1 9432za0>:Pk3) CGb $ !$K_'_~y_]u2BJ1{N&(2(?ǭ>[b Iqa"A|ѲPA0 ,#? W 0l$ lAy3H r2E#KH Ie" d-H«B@:4li%KՏ3}MUTOoS=O@Ov'hvU_D`ϖ17Id2Bpx +Ol?C%>|D6)Gt ledp20?+U 2C A7%n %(BER—z/9l"Ð-DpC6#q5[?Q*2cDm2ױH#tr88z4DW^1q~w䐒 q#,n]Ru!pLpdBnN@k\dc\=L˪fWh{\O'3!Dw1ə oTxDIk0N\ᥖF~rF!>VPǟ-o+ax:q!z҂$J/!ɾ iQ3${?:TTС#Zpª?*~ɫ/hŀ ^)xAlg.A,VH?|"L "V`$~=(y<,1<$#ZeesZēs|Ǣzcpcr}aPkwFu=P}__nL e%$6I=ȤDI8db{_^I[:{/9)Ф-I3{w1uC0 ]I55Zeztb:K<2Pf0pg1 Y(55fyTӰ疧_8<s|4%M+rDZR߂( )QLF m;нFM@}W[2tgTOnII5 &HG#UKa$4֨Fva6K)ܝxת`?w6.%?Y~"B[HWǔ6.4OCz|X@(&ϙ7HCH0N;baa Q0r?ڼqTCOHf^12icSb t섏{Ҕ :J'V˷zx|RIχR(1&ג֠18t ĎEϯƩ!tY/ʢY\kSkNjWYsZ+*e^!N%v,tylxn. VvB}ݫ:ꟹ!b9 "dLarOVc;ˉw[h௯wU-LE}Җ>~* Ih FL(X*Qs[ jBIJ |$*6$zLVnI!eg{$/}q/_,&4IdŽ/˛j a Jn%#=-%;%9ȓ"m62z{ajAx;6s$5N]W3G~bc2"k ji K $ߠd%i\uLry;"pgkRǺDž:GD [~|m?m w~[+=% xVԏǦUfMcq\hfH*5Fʤ۷j}i_5Kr4a}o k0Jd'y@NNSWw͔LO6nԭ%m!Reω}喟B o ͎ 3O'a7H-nH!%;Q4^It J%w8BKB`r51s>Oi>mfwܨ>3ai9܊IuIGXÌ 0a&  mzdjetٯˑS.dB~W$}$IBPR@m4!YDVKùĞo6L#NƎqPѸ?|t;uɍD{~di&nћO'Y S  j By&tSVAgLG}/_ _R@Sq0m7 H> K8~((됔% E(!B T!BUTĨ(PeL_AH+"2Aׯ/ofdDADar^h* %*+H4*zehEUTD"6$j(mI*ZEAXҵX;Ge ]@V,1I$IŸҵ2>>L/H _y٩/0gR?k0$ @Ԭ%clx9:NOFR $̱W[јYxm,!B@htC '!JoXNCeND`cj8e# `61QX{[10" ).BZ@;]S*0 RGT~Z#K.`WzXj"D;lvhT h ~Ek&|I\| ȕZ4߮vhoM$5ͤj9viL싀 d܍)f6NÞ AÔޟj2(j R ] Y]7y4M%43iH_mi6lyیJfZ^]dLH9 ~Z yK{TS^q~O斚l5scGG󜜧\:OcQx_ҺnƃP۹j^&"dIZUF?+Ng06 3T9" 4_12  :1f{37,v:Njդ')9`93I fÒ⒲ 0$=+'Ȏ yH8d TJ A߻ aRĪ4sGs>&Y!Ep;H= <{ TN5P?+uZv*$G_Sڮn|K-4yy>S((4Y7P PYH'DE9 PF8P,';$:T2,C*UT P0&HYfޒV!҆TZQA"?BA?Gũ?}# 3j~T~%V#/.LĚ1ȬS9y0mۏkDZ'-|>ч{}(sSm.z>`{Sw3N&q98zٺ~p(>'E|󸥢L?Dx9>ws=[hF*hlcF9<[7n49͍ 9ь}M2+8h5=sw)өÛЧlbŹˊq<w6i4ꩻ`gcb'<ClpHQo=dLyypDIͥx77,سF rzs~#AIA(?QhƵu:gkCщ9?.>D cIMމ {)&-,:F; V9qMp0tQܟUSRT0~_+ jņʾDB2>AҽMSꏉ")Gg(n?~D# , 1N`X|1`dM~-(3HR8L ט$27*6FB0ŶnBIEYb\Z n#nQMhr9 \!6:wSUcEҡY//=ʡddQe`a}&i9笊T&;95 : *)KhHbK۔AQ*@:I"A`& bڦC+=IIi4%2]snO,Y&<;M;_!$)3Ay `ܢ/tzmpkD¥ P& W+]߮G?`:n%R}NGrBQ)_iDs}k69?{w66iƜ]}:9W:+wG7mݎNM1W8|O[Gsfv,n3VU*xsFDYأsfGw$ B=p_ѻp?QUܕpwXUSNX {t9,X"t@ԅ1!T@. gLL; )?'ME*,(UT T;f0֓K .bٮ"s ?JI@pd[$Ko+!YQEesAA?w3] DOΧRA d{NFᦴɴI"uĒ|d}gbFw~)FG JT%JH2] CIWw"(2,q,$b4r}g~ͧtT$ݖ*߯*uO9BG'pw9x= GV3G$'@WJ {_̏#ޚ4,'pJWD aFO]BUdNExbGOě(ćCrzݎua1,DTѦj,(KJ-8NQ=a`BVw,HI!4d40:J95U9#Gc3nGgGs#O:H ?jqB'YYdCJc @(4KU+y@0{ ` |!| c{ nn:|䟋R 8HaNEN'Ro,J㻐=| J5xM dؼ{|q/"[pK$<䒄)I& p>tq^›+ d YUʑ($tƊp*$!ua/a2(KyͶb#MJƒځ6zI%h6zj t{Sce7#M΃ѱK6D 1ڡe gR7[ܪShӾjnsܲTNtgD4T#x;:哈K!P%ted!D1=׵M(kFrFS]u`A}[$5?a9L|?35Zx@lE`C; Iu.%;ɩ{Ѷ:!MRaa6*BDZGW pm `KTmiWdio[Y&DRy꽓z6Wm]ZLQ)eUI6Pota !`NNL8i4؅U1, d09'!s40TS'=*W[l.cT%M ,)Hba@0҂Cz:R`PM) sLp:)kDiD<0:OvݰzP6H\^FC ˩IL0:::98͚iHԕ{Q^2`@Y9CL$/aV&f=v=!7˗PCH6I&Bmk4HVC-;8NI(R6VM,]MB`9Np!al,E# %:] ʈjG`b`i8%Č!dJ߽<2Pg3I !:-%` 7 BPhP c$s@Q9+u0p $K"Ho,Nr&$N@rKdIgMe2)m9٭QXvDv00iTs`T8mM$]r b5i'%K4JG΀š]63ŋ+X˃70FC3P0ZAcaV 0/`k$#Em, !4a5* yrMO㇝ɀxG"3R.*f"!@ZQL$0IZ-L(X`]B"E"ɐhʹR6²']`ļ14E"$E"L0E\H!JM9!ym2$` (uM'8d RJI0t?$egFhu2s àwID F#)DJUbNI%S0Y8PP ei*I{sɆ2ač5e;Q!?*}jiqc$01,Bpt8>n /zfD(ㄆ&JUXt^-LXC*i1J9CJpz =΃Ffe1N "1Ţ¡R"b690ڬrp8.fmlZ]Ŗ15+C"Us i&# |x=0܍diOd'=-*0$LU'j?)uN=LDm/$OMo& [wLai|q k>Iz̍Ȏu"K>,%26!34}C¹:)Tp  AHbG5$$f̳:?Ҟc*ҽO:c8XӾ>[Zˆ a)w1\)Ē'$&G`73' 1UV:4t4AǬf&) ]zKhFYXiHwtJ\ FKއQLo*( \\4a$:%)bF b*57g2o_֦"Ok^c{hDq#3oڠG LSPJFʛCJ QIM"8I5 |I4RMG"miS J?6-a1j5tڹXLLW"")f`M5ajW#犺BP>~ a}J)59G`h;gs'Uʑ dj8:bOOIR@JO74- ܩ߱6嚸]j{hxIDs j7<*Ӈ^ YWG7sbh}%>FhXZ3LC<#tQE~vo8p$$6)4 %O98|ӓW7yI_\}MM*|]'ĐN>}juhZd#~L>:$-:>7LUz?yg 9|*ªxr,7ky='5Ŗ~Idf3].%pK-aa&0#J"N[>6qsUt]uQ'HF4Ђ> o'JtICw=أKIͧ5|0CoǼ]$}[i -.-2TYr6![ji6PIMΩ uq:e-=j$О6}4@=< 5b.pȩAT*@pIoS&~ ,ݠvkYdVZRr s' ^>?>y^6C`+JK}t4nB$#]ӜuTƝK/ >WU(Zˁ$MD_^Im")Fd_1Ӟ*իVEk1o|WҊۈqM& MU6쩊U7o -Z۴ܕ[2֪m:@AHDrҶHq.id :9$ayM\@38a 3|A6)`؄N a2գЪFJ!uƘueH WԪ^TF"ɓץm^7:~r'p:ZT6 nyQ,%0kJ(M sa <4PtyЊ{*HvI'i n0$nzIFUV7eSh֖(*P'H쪭|_d&%NxH]ϓ=aa^H293cD*o"v2& (1fDZw֨M=p5 /A Cg'Ӱߔfӌ2;um eOga< ސjȢw? T*MYB5F25bZ[j֡ƚmi6*SRɄxc0Z*7 %5*)(ȿw y" PQK[RJZlѧGG\؎'D@`zdgʟ3vJrI_k<\rni'#h(CfCMwzTVscrXl+K“8h)4DZw5{P8l.X%%YS [& O i*<ܦ-c., <욿U9)~,O1l^L'n͘cұN,U})Z.%dg6)%*R v+]1<7 cJS&D1R%;Jܱ̎)UwaդLH1g)l3(^^ohș]'|r9?z$/@6Ai,z cR4Va0m L_mwx:}vO ܑ_?cJ] ܝ$&>ED=ŃÛ'GݴP)O01 z AÄOmOZ\9v&8/Fo;Z*i6Q JQQ>?d~+ L"RKDjдr]B՚@mt:z\kBĕԩ$"RH(F%Db%TD)$I{rU0z'`CB`nv0Uhl&&m$|IFF(әQ.BW?D Iؿ4"CI9ʾWвKZWbARc1srd1ubHXT*TId>W!`bH9!qv 7 dC5ɦf12d9<0i!J0X8Pؑ7t."'$1ڥTʲRg'{>t$9g; @`80R0,d1sj0T~ډvv׆B͎jBnʄtfKDSj7w`!3%+H6$EJnrifT5I&VͅfMfKn%2feH'8e,c0cb8$w0`IhwPLM㢆!^ $Xf "`X衘t`҇D `X4V<8xF a啄,J!2R !A(eĬt,€)" _"(P`lISYdiRRZiiQI%%M%%IǓBpn6#iM.eA˟C KӒR# %HsWrw$,c4IÉ;PT]~"A/ӠHy?AOyjAJf!1HH Yit#$Dү6>Ĝ/%(,MU/"rN%RI`0"Ps2P+Je$- AA䠢GaV%b@C. 9d 4T t oVDFJT6k"B YC-I!E $[ AOl}HH }*sf0}٬y::s$ޒNCeA `oA FJ0@$;OaYZ<0vTXy#eV ܌AD :B;U 4Dlb9R"$2""PBJ1!WY$Z7LubRyC4SL f_uX/4ҋ[A`n\Ə'4!iG(3l)D`b3Lb7N0P~%!8ybH9AGO_8õ盞 dnbE#^ ss6 4! (lNt 4" x!M;2. A;BETK ,3҈{>jz` D5$$ly6NplI9Fd"yGJ,PTDzث,B H>w6>CHtJ tbNJpHb:vq6o̒1ܾ;\IM:ބx';oD"MӸ"ݿ)1g掵Kq4L $L6h%~ڍ\y[FUܥ59s lR=^(*DoS 7DrR٦peSd,U ;s厈z_*+11͕UI$뤒I$_w;ˢxHҕ]D:%(x=7~zi;nCd>lJĸ{ J눍`5  5"E;}ש )$ ` Ppzj^ t_xv\ U%o<Gyؖ8Y 5b~M嘱GG>9X;=*)GXtkca1etξ*G]ST_v!'DG"Nw{JHaC͒oTcKÄ.W~'J*}-!dH$ V/p^=E AM<ڒGo`nS+g&ƍHD. BH"*b1 "ueZ6CarD.ҁLlэ&bIBQ>B T:d"Ӌ,dj|o>tNI93II|qF*x,E) ^ۑjI/M~LZVf~2/pGゔ ܽ'])0|k@ݐ'֘iM7䓫,LD;$n))U=R ʼn.nXv0&1**sL49+ Fif{\ʒOٴ;A`p\z% 0(@x|mylM L mtYJ~Y{%pёL j`#Pg&dA>'g5s.[j[iiy5s4$y 6qnF3Z1^yi~쐰f2b! Ng/7!w"6a Jyqb] a;§ clVUj$&b~U ^A0A C*A{ztQY+HPA1  aCDOq YK1/Jj{hfweqF_?HWquW#%r650gHϗGZ?VpAXJfg0(L/&`w/3.y'J1|C}v;ʪ3* 4ef=*6dҽ$I7Xb1GHq! ͡Iμp+y5"MA"q"X==GyEd&AHĤ 7JCcN֕1ESLbWܝa'aUzzr.ª*ҠyrȄ/l]L `2np^{EV$B$ 9`.LQiA MΥ "d9*(d! 9!: .RB3Y&2?;^>2dMH^>at-$58ucLV* IBٻM7o"6a45ddT D@1#̋J~ nq) ztbO괴41XRʛ"IMIJR5W|s e%B{܍3QE|QῨWB=qChw]Rb9|Qd&?+iv4 MvA=S+%|<+'V'C9 ,DI>wr}x"NH$h,ǵa$Dy=`GsNH4JrzRM"78 ".>G'>)$f[FdCP`LYL0Ď||P#7"IxP z&"KCLKԅ!Ll8ة= J:y"b)`T}Szl%Y ~2nx;aM@,eKk|[k"rRҀ$ ozJwG^B0K/JE$l"2_c&2A = hXR'UbǬcūU/>f GsrouW=d&8u|P8?Ewmަ`H0RM6E&2Ic~:i`*l9ׂO?  Z@_ld#YBDs$2xJ=+*aڮh|G~~? j8p99~a`iS#bb'^08pc ͔l>uَ ?7&>o?FƟm5Y6i3ԛ~UE*ҧ]1^~glա~|EpYi/!i0 s0,> ?cmpW Q~aLcIUQ%.tqHtAA\ymynI$lIph b!jmcd)l==]Wmd2a!5ie?D$wΌ|{9'7ELlG2aȞ7G<k/1ts-)%)Dun8˙*#;]0GS^g]dct&R(ۓ;] G=i釮: ;OϷhܲqI;E֚2HT(  c"fi,Mp3FGЗF=&7RgKC!Of@;B)d 4;Q{K(}ٌgt?sx]2ԠP7&†'P(app299bF!o?+U6DCt@L:r_ˡG aU &ctzJrYNGg([$_B)_PΔ6B@ ţ#m M5~(ݫ5 `S/JĿ*?fML:Zm\䊽=,1oJO}"?D))q:ŷCזhg;V'oǫ3~VI%m8k)┯q^r[<~ Vs.OB D,LιgmVQjNߊbp6¢\"0+voW ^T,mT)3fW^ +f^[yرꃡpe>]Mu;< Ą&*""̌[ H$rgV3. 83CI&H/nO]yߍC裯n1Q ei6>;gZ瘼g9F*8y IF+9Ep1g1d0`g߿XrW\]_Bl!SmnS[ct)!M `sGmDἇG(p-CgJ$&;GX4 9w}.q#yF؎q6UUlIBu;g9+wc*sUes"Q<]l*#3aEE1++JUUUWf[7{>_W}j+)y*W+E_iA;Fv} '/{0#1"$J~K[N^k>umɦ 6kOTu,̮i=sӥhҨ; 8DAS$Iw &b$b"0XJ)sB>QoH]]it!G), G%ۆݮVkYҥ (NMƥ]m&4Y p=sAQ;Bo7@yZ8#%❒;T jY9# L|Rc%6q 7Ʀr=J`vxCxٓGEX1n%eh N% lj)lIjOMBz"#g ;4KXǓz`R(˴M VpÅGx3뚬s#ӧqaJ7K J"rԏץ+,RVl )c+)pOOѹSd2l% *" Y,Sm6,b ,`4t>UL0`O(Ng@GzIUUQIo-mĪ/I*X&"g)B,Հ5pp6|ry693t6UU[ULc[-eP2; (ABTCďπ?j}?QEDD>H,U6ܚmJu+" P\MS;pzs$q#QI -^I%xrQ`66˅mUSx*rNW}fn+ڥTQ)_"үV=pn*f/AiaF5i V8c2)Ŷds a@懥7-s &{ѷFDC'djAfApq2,0^:aMDiVfV@M61 K8h8&CJ {)dJ*T7/eP.f&%RdfcxONRČ$" dsi虊 tI@8s'Mងr!Yĝx{@N&`|R.OR Q=-NODOA/;yi8WRz0JL( !0Xofz dݒ_Mpֆ 8@pW1 0L5,6-0 \XKcr汋*IR -c`+J,!` pC[ub`d5D><12"ƞb$i&!$%E̐ L267:J GS rsc %G  %H]GanHŐFUEn5 7@{C|<" hXeLn#2tXxSfDQ%(-AaW-697$ ԐM7 5Ք -15BTDo8w D݌g<ғ! 2$RY#Uf*dvcʁ'Θ;\%1a4SEp:SHyeRz'+PB؝U;h E37#fN`ijm`nV bgL:RLg5Lۓ30ԲX E0$`[XJ$.BP:A=7!=s8hͥ-W*,XU J-v$MAg!ymW6R` 8 zψ3+G՜!FEPDP%.|[LT騇z͸ܥ `6d"-8 "Rb' tܹHIywP0hmHA=\ulۃXK5+!pf Df*7 :K:L$}YYp2bfZZҏ]w UbI#D#>!"iJ6* *igyfª8A1 ;$nuc$<<KV.t6RE3+Bq!DNƩpZU_EJ *QYWkC__sD{Qε:qcXϨWG?n,P7͚i gbFlۇ^TDc##AF= ŵ)p:Ǟ2d:nHyZl+<Gǎ:kb5^p@2f/ *mZ\PN'آ⬷EcX.Ls-7$\<,ukm8*BD$"MgXWMFmqm-JR{}xzY2dآMU^xL)"Dp2`ܼlR.,:y{ 9H4D@r !\Z|}/_}whZPK9<~?H=-ؕnDa;<=xvO 8DP[u AI4tF-]Л|f]@ ŢH>[mbؕZFv[ACqGs%9Ἠۓ:m62bժfq.7X$R4kx.'!88mI D2-w. C!FCԉ׮9df6bn';%C߱Ƭ0qs"BV)A c+ ^tJC{Pl섡)MGHuR:!<0،,vF&s-dtq< #ϵeR׎n}=R(_H cafz!EѱNH|ޗune iJW LCG(>~(+4^_s[=I5\bbe ݫ9x߱$^^&9V{I!/& g7f0Dċk-+F+U[FXQWP!MC m~U2ʢ3P1bj/}*Dӗd(P(RI 9 =3TP5*P)4!B,56C[{ } "mL-m$K=HTIur1dno8MDX${NPĥ3`<;V쓻wbJgNkyJ`A1- PC.٤**Ub*<Gs T)Ja}Xb̀v5diJiR)FdhQ%&ՖGۿLmKVJT10Ƙګkt`YI*Y(nAMt y51xapi%6;xk0k8wvLx7@E\Qpf0A\dA& 7+=;oSMYU{'ӶNmMm62C贤L6U)Ē?N-S L^oI[Mq'4ɞ7OI?}ZYA-*c C2MUeb(Ǔ1Y\V}1Ģ>MBUUUKM'0JV1U)3%J服+cf4J*ԺI)%%te,e,@]G2P!3 %dHe$D P)B4* @`/ vRAa^`|DTjOJ&e{(Ď#dR@DLSVpQ>%T뒖JBb F 7HFVDi9(['ɆX{l)SnܔV%! T'8n7_?/ނIi#O76 IK"I9z]TMG#6s2sYIbHHk||V!;?F|-$7(CFIWyRdl؛J;H2FXy BQ=M$ |4y[g!9WJ"yTbGX';ҧ2d~ ҎU&PXXtj-VJɠE< Q_4qQЋ4f!4N7ՀX|G!Ӗj4IqFKh4Y|l8mhᔈ((JдJXdb{%G@D)/OUOFaԜ, cI ԞJ%'&  BTQEs ]{3A~bu"!He%B5yLB'W73O#9cp9DDDd A $DT*J'&AO<$ lw?@}̪~t&ĔAL4i [I嶤X5\߳1CM# E[#/ fއS#aéL6DaNI hRkA)1*,~$n;'Vk%?6h4ϮNGUMcM y)!JO"b!B`9/ IvoPv7G191Yn; xȊ(H`iPwN ~]iMeKab@XG4 _Cx;lu!XN I>*uጊdO4΁$~dѲr&rlb¬ @@B F&٦lJIHS-`jeI%SnDAX{ĚM%{hܴDD[h 2(Ȩ~u+QJUUp>#Jakce@P ʰ$3JP$H"N+tHOzVYu0af,y3)/AFcdò$=9։Üj/EڼMTɥiCJ#N^Gш:Q1HddI4,ufD"MnY,$z9w zrP;(?<Ðh e_[d~ "DSLUVbMĬcL7au6QUՓ5#?$|vzK1rDd},&ehC2(kOj,D(:0#a "R{^|1[đ{Mx0 TOKKY5CS6nӮ)lraH !b\TS1&C-))qpň2 P/ӽad& *O(մkfi ?X|1ɥ 0&ÁDcbN (RT$wADAe Ú+2Bai'b*fURk@߄Oszs)u_y=kUWڇ}h?D*S 5XTYI$d`n$i&\QezՓ5Fu$ps-nË!Ś28̶7 5f  |)h8r $qwg;ɢ42=yĉwShbi i+LȌ%mEI񯊣r2慠)b{$ mg!ysΦa/0EÂCW&{=@%d}O]]69VU)xD+qr ,)dL)IgLP < T4 Ã璑HafDhF&Th9PJE3Oe* 5#HP=ERPbㆎV1N[`zMRۙ}0/C!(wed(a?Tv72HLԓbrCDHv`s:wޙ%>9M:L-GiZl SWִ &-l%(:9CJkHܜ!ѼmDġbO`wB.4)d7ǎ/F;itL떴ƐaIr+ %- 3P^7v-Ck(x4IJ2e2@2IK 6N,h_hG'GA*q((0TeC/p2$"tHj)]㈐6[)12nѺJoFI'RNäCK;/h 4C:N$BC= C3)YjKKɯE᱂K%'"#$DprN$HM.7l\i&koM!Aqm͙FieReo8(P(ȊD d(P"iT(&Q4Ta HP 6T6H'(l f&6 FЉIGxBnߏ kBҤHB$R&!h[%T3Iy Cdn2z)5JN~R"~ z=THO7'#-mmpL A5 ݐ{gb$UbvJ|!Ob,eFQ`$ϒնn[huĥut͝\YeiJXRR67vn;7ٙ( LE^wI `!2RʫDZzh7l*jԞ}sn̿z?T@2TO aeL zLa i$Gڏ!RY%>5OA0)Dm&#В.`0=:1?y&tTv8'}0XѴ 'Xs2d? AsvH0eXE}(F]{ pG O'CbzБn'{dotJNȪcᄎ)KVT%Ru?eXjp$Yܑ>IBf6.hʚBa2!Hv6$KAfOC3҇aj/cdP͊8 x×IiHu=b;~˾͞YTj Ң0[G$ͥ0c2b댷dJڜp0@P4I 3()y((zv'fC8lza6'P${q ȂFHYe<84(CpD ?$ꥶJIHTX(C}YN$ߓ&󈥒x{ 7GGFSM6lc]'T'I*FJLTYVU`Y )b.`E,pO'sfuUz[p&:^.GkG5xigWO8pO$Rc&bHcĎ6!=^@󒔚O?‡ϩS{'ScR) ڊ=ѬM]l6TErh6KOE>@\tb>$h*/#-~?0~Pp\E}8Ǡt *vu]1)Z"եֿmp↟n<Y̕m!]3*e&N裼Qwlo/4F"A(`,P91 $ 0 ~3> ҍPr9\.$8?J\}_!smmmm|.Q/Nhcak_&I2bd:[P_p6)ÌDrI dAR~_^0' VUtMyn$̤I2K"O_Қϣ{nIY2{-XD٩"$UbWʣ"3[V_>UWq,? Y g\}O C:g!dgs@\oC4ͧtѵyۋɱCap7K[jctr⊌UN"p:_^=;@Tuq1TҶ^E<-agxđd@B*bC(i.TJu0ֶ㣝]CKްD"$3bvجmvDG![U+&wMph?r:yhll 6[BE4ePqQjX'j.*_hJ礆V2B C,N;fÈ눹%\d'vBLȐK5D9# D:jY4 [|li`w69)R&B¤j(5IqA0}FCk ,.ۊ8 Ŕc#A{I"f9+<9<)Znol P@%OxcCgAU cDW]37/yM SR;IQ-&P2 6 u%$RT,mjPl賭nJca(tPk2@bH,#Zx:J[&YԂSwZ2hi!duF@$Zp"`Q='as.{nU=;I@xCvWex`X`a0PYTf v tB2㠊 ͦ"5Lb5%Gq@ν#MggKP[sPRq0v ɥIE>)GHg)"p"1|y;R K&E텎P 1{L!:KlxQkL혠ܛ ;" P+1 S)IBkD)p8R'rT(mt.:b(QЃjKZlPm[DY]n)&5nO;"cRM: 5RtJΠ8+Όi5S]{|t2pd2̖n_-юz>Ag0wj&ҖʥWڸK]r/4M {(tpF%m|'qfAQY5O.QzCVvKzghjY{UPeR\թӏi:GGZ#9hiNY9J>ijRrc%Ǧ(X(E:箧x3vdJFBahP8l.(j[U"=}&D:gEuPN%ukȸ[,1C$)ADADb \j0U%ZK1\z&_)w:5 Hm 0`ӭ HS<4BFH+%5ز.DqSdvH:&.Q`X1Dce8p}Q5Z!aD ]j^n{j!)I&fTʙ-TXJga0o "LodbU(rd _MHCB*`b8UV ah,o!Wש|4ݓ0x\!CY}fA#= GZY%XB` 0!6 ']F%ڑ%R U'q`pdA)`lh84PA.zF.O iQSJANBU:*ӛUlZ3[[em[28J@ɸPOk!{uH;U۫|+LlCRXŘc%d.U2aqK L,sql-, A%-W 99#%9dab y<s8 0 C LlMÄv<9Un:sY4CtlKdFCoeS\{9pՎgo>l,G$ød80w৯J t+(ŞYXPmKDw 1 (-ιm"B8B3:}UވJ=Pb , !, h$%"Qa2i_y&28;.md8K/=($ `a0Ȭ n$tE(+Aúgq59!H6d;$ &7WK`0Du4ɱ I&4L}p"Q'$$<$T+IQʄa5RL[\ ILYFN!T&NvѺ-Zb0 9}]l!n=W"#%DѝQP2UA m$tYI)#ACI̒cvh>WZ 5iLQ;FN 9HIWK0 44B$H!i",fR>s_$z4:wT1Z$}GF,*f'&CҐhјNj&.{B`OA-*8|jV"CR#C4K79cCI CGz*ݎ5{Z""foE *CwXEP/h)@&hK$Wv=i,tIC8͇ XqT,F~5i9GMϨQ´{3h^*S0 ުb.dhS<82H0ȉ%Sa况4/]UNVE,-4 CvFv ,$*D")G ^i?mC)%YG]44M M$Т}p{?2cTUbW4`d zެ6!WOn$jH1%[P9?v -#fP^M\(ccIGeGܜ"D?21OaN SM(!O㏪-;#GI NJa6#B 8a;l%)0乘H2 0s6:J(>8J~\ʂHu9' r^xax*Kd}12V2c<_yU3q"h5:ɍ %y~TqD?-aO@hkPHkDbF*RBi6@4JŠ,C=jZcm0[0$D~H+dt 1!D櫘Mm`xlwȂXt D(ڄ7"H۝I4 9wtrY R$B TJcdQJhoO}IYF [ '2F h4@VpqZ5Vҍ܂ZR E8F pGL4IC9A|RcEb ŁgLs eb 7.V+pԇ\$[FY 쇛QF[A_"b1-M%&K.nn7aج)i8.Kd+G3RRON p<$iz[Nփ;ɳ-XBhX#:I~MKP""JJB"P(zKaIDbG3f*l3IICI+"Lғ ~w붤 v,Vј<ǔ%d'>p!.WdЄP&@GTG$Z]B PBZJ(V6閕JbVT2Qt+-*4 25hԘHMR[j2Z֔ JHD8 :UJFH ]5}2%FV58&1,B`!Dڍfkdi40 $L5Xm^5lY-  UЊY-lkQ&QT2*m"ZMڸIj֯e0haHp"2M dCW1`ki!4D0tI+H#caႥ0Ĺ-0H,sjd&U7 Hi*ԛM$T6эQ0m&i(ؤƍFBjlLmYKRfjm4Xhԥ*PSFL-VM0U&$6-E4LFm)4e%ԛX54VUݮ3mB$B+BW1?Ocͨ|O®*!g>8l9#Emܨ}x]p¥ۜO NRUs|_uN(11B}(>DGW:> Tv_n4[ҭމDȩcF2o pgߜq$32Aȩb :89Ij 4BxrD$ؐ֠͂D6`l2ٱD6dݛY4ObDPǙEmVk0`t$uX&R"U- TPVTt!6/X '$$`7 Ől6]/O 72YRUAs+ %T nEߒc~  8mVUa*&#@@ ѥ9w b4G'BLaI*rb9+ye,m VApKPm؀prZ 56^=l`{J$Yp!@,#EEaN1 !$gOhydZX$TlRSd>wbG6ӯw5V~8,BHP<WLJLҍF)*%Mԥl=d/ "`JI 2A7ŗ$d2,-,sѭP+ q a"2Ka 5HؔQ`5g(b~؅Ls&DEPCT$ziIMZ(5JͲUYU6k%4--TԙYe2A K*2ZS@hج$-"YEYf&` رEki,fd4kJKFADڒlk+T(jhD֛$ae q ʥTPb$F(E {)q sI,dmC$a7 cX bBPGpx%$ )a`9 ): kM: rH 6ID¥^VUIPtdK|qhM De4cHȎV:v1?b{CL>~$vD8Jiu$Q*>> 48Ev0riM ]`|Sɓ8FkWNN8Iʘ& `]) I%(+IIpqyΌ?ۓ-"%)U$zdIH BmqStHF!N;/(7eYqh~86qMP*A` B d)jj]Vr$NAvlt%US=ykJ:,m lR3@dFb$68 DBɳ졻 dD% DH D@:- 219F5VU*f&ci MrѸe-I  : 8|t)aX|NCׂ-YDҏyN 94ǥcs9$?c0}OtRt&a'rP~S5$_INJ(ٔzȂm$_XXK%fI;S-E&}>01kDJV$БzԖY@Q7[jҪ.&-{{N"G|NHD6:m+[%}<,ȇG5}%IR2ȓ$9> ʼn*M(5z8Plm?ucv絻YlO /HJ(`䨻R:&?AʊXO"EVzhīHl{LȢ}riC/O vG܈#RCe~ hؤ)_lOI!"sqɵ6a%FbjMbqRs68%E8:y+ `"#bتM+-#Sl(W.QUlmq!gМ!#%~2Qw4,jK6S*-rTgz~9 f (8{|F(RRG }8- A!%`CuS-{A!pI^f*cbI%3YQz$6DUUy'洫Jوid4R#%Z)&"JNFi+а2˜H`Wd YZXmo_s;;;C_Wǣ>H !Hzk'n cQAݦ3rmNz7dn=G؞vHl(A\:Jt$}EI|,OM]]-_G{4G6 *čO%w3LAPLh,T,faH XJYK1QH Xb4PHTxU؀4$I!¡fH%ri9=MP ׻m5K:k$ѕM0ap;f\'Jvd$rF$mGk 1Nڎ='][$]0LBKxѲ7 $>(ǢB_{2N(R`eC{(II/չtZR[2RԲSH܇D)Kbj!/8^Wa3nFڨ?+CAAUDAO=a,L42UM^XkMM3RrO'@ C$E)1 S!Mz)݄8@@ñD/Mk8irMCmꏚ7)ؿRʚHWS {Dh"E_`y=W`Ψl}g>Bl'^q>1+$ԩ? ^c錡ljH'L?izIlB h!SL{&O?"8wᩇ, p\fu;})6D*L^֪@|nMb]Z$a"$b#sAtHU aaYLQ2@~f*+&ʑ,L#CDL (;^nO%tJ5%S-`DYHCXԦģ*Гhe 9&SNA]266r &)(Ȑ0J12b&}E(54&{ʌ$(Q"LT,+@†0kHB@ %ѤEEiԊQηbfdM- Y-Je3D2e'b \aQSmҳMM1jjb-,BkGK%{]dfEM Ka(kidvt(WBXI@H˖ba$)#*J5(\XdD`YB&* {Q$̥JiLlI&f]]I(aJa;OA`6ޚF>yF?(rt:*m)J>@N[ H2e)$!$}'ȟ[~_[}_/w?C/D!BH aE81帩ЩwyA2qy"a4Lw"51NHsֵ%kǎu"TIk?K$ߌm )Ȅ?2/3jQ i"o{8i0RgCh\&+CiӭnqLcb$&\ ^Kiq) |ʥN.R x%dv  !,KA 8%Pb Պo41J0RPJPw9CC(^^"6-e{$_{ljH6M|!E^(rXKGR,uRRN)&TeZr/%CJIЃ{ 2ȷs (I !4Mސ襡DD1z-5:tzN`g SMB9-( `6!!X3 I3G p$֛S<9Q_7Cu T#)f$/Ϊ7$F<8XKS1cI&^Z^^iHI5 "D@,LG+DCTM$d?t}CqVݛN:gcss%Oc*h蔥Vcy$b(Y^HWB$8i3 Z:Zcot b(uYD(V!3 x@`C `0'֋/x>H4ŃNHiB֛&~Mwy(+ܢ?"@=2C Jh2 b$m]r2dBԨ2(RB@: @%U<`?_xWJWՐ/& ![czsQ[3@Ca#YdN"3p~uǂVFeR6Ii6.Y {T4FIRŭf|-tڣFY,G#`c!OI$ɩ#z\W|~ > C1$p臘A+==il` (zA枷i>)^ۡMD`0M6c) F׋<,c]ӒrSL9Kuk2jPռ:*+6Sue4_ %fzD.J{Zk/1XŊoD{tɳx̡\* V 1Oԍq+ @&#CSQ0ARiTR,Б!& ٠ t y[.pitu)h6?9[,'QIr^f4]1#qTI\44&`i)1 P lo0`Φ!c#8rnz)8h)lk#"`o-2x{>dUzA)RUX!Sz$GHUfRQ94bhXedI?%%~?Iz|ڦcQʘX;4U\K3;Mܓa :S1ω?'i)LYxfΚ($no[1;6Jk+YD_B?6~C>+bv+?4R$~ j|$!(S)l٬*EWdj b-E! A  Je KlέnFƴ uEHe)jKE,J%irGWLr# *O2IO DHg䭓vvF!3-iSiuMQ(L!@# 15fM+FR̖j.JI11*B E1Kز8 4$3S@DXnR̹bYI@;@l4*4@4%HRKe$]KB¸n|"2 [M\]pDµPncHt<  ƐPkXbd'CH&/McJ"+PđA6"WIGǘCeV5hr6e𹮹K m$F!Rq $3BKDj ˤ(t@ ,Y BmHYDR֎ \hD/GRx% Ad&VRLi5AUuJQ26e,ieEKھe1X* l1d S8>1nѝ P$ᎎSSaJ™UDryL=}c8TQ$ॾ0 6`SP#mNK٬;IfQ`!)CH%|؂0JtP&TG`0x) Z=n}J9AYIC!9Ba- vNHa48*8@JպrLHRy-H$ BH+e1m TA:LDU^$FVq`fd1:.trJXaa4b2F0,а"XVep0 cH88#_P=>Hyy=4=DzNM]W4\i0$%Iɵ*|UʹkiwtDxüDV1R*,fōI#i)P FZ I<ϔ=K|۔,]ݛ\ bq"(P%c2C1l([oTwև<$  iȒLJBu禙>:lG0{Bd`XHҁ@3 ) &'dE"J EI `` =A蠧D*K ,@=gHi?”=/c +C7s Wht{ {y3=s{^͔?~?ac/E Kn^5DbV?; 6O\v>ywjɖAl0Y XtNыh 8,ږJMǞ9nF0t, 3! t?,7d~0 NFU)ऍF%a-(HŤ.?$dq#36ZCF"0qhYV]hT0?D+II$\#H72UahH076%T >"(tBI|GdIXlL$TI\9K{?[MVɩ*5lZţlFڊƑSwP8sh="N멆ΐs~drY$V)GcTw**4t A h ^ ašJLD|g̗-J`$#k)I񂚐AȎAnjZ%9km'n̹!Fq2ې(1iL 4YMFȤR4\9pP$)c'cݒvg7V ,-lLfK!R&[!J:{_N\z,$nB z,,Ki&"r'ܱ$9꯱fbOƟrx+m ቦSnHz=B=,|'09wq}aG@@ %0C2r"D"hF剣FaR+!Z%eD`@bA"AB:!t4z] =zb'H!FW"8*n_B{ģxE!hGPaH8nW$SsFR!q%D㰛/K0$Ĩ "%Y^iv7{~H6r<=66|)|+L? d]2G`DEECȇka']4 h 0{]\VWÇ $2@:Q(-68Yza.q9oţIIQi9&ӈI(i b lLcD$C$2P`C൑}Z^(0b"4 &DD($.F]RQYā9,DYfY۷+~M22lUT%Ġ)zNW 9ȲP`(CtÜ *ٌ pP \A!ӆuNCM Ƅbi%)>JI$(l."pА/:LA3!Yid= y\0FnŚͰWu&0+/El4e I6N8#GNBp:La'_1 Oy ~JRݹ=bPJH*r 5'tq YwJb&ֵ/e[ *)*)j7':r!'5DeBX1,USip8*((\ME,T1&ˣRUL҉b#3$z!\tiM"īHP$R&\ۈ PDiFb # ]M扺BئC$<1œRs#"@0>.նKJmOO'"e Iֳ&GZZwlH sfC1DI-DŽ0]A)Ֆgpnᢞ$&OLMF T99_V%YGd{u82&RmngSgaImd(+aEm.ü`Jmf%2[Qd[֧(BGg|w'w95@,- eT'>vu87kNލhkV1§NcmaZE;‚$G!JL2RD|V^6NҼSBp2s+gK7DUt=)%}7Z;wG7mn0òA 0$,  ZC%@dN Vj6c$7+qHȓO|ѲHME9q+Z( `9%*ȼҀA X1!A(~3Q9$p@ɓH 7,(ƐƢfS*Հ0`w hZ Х#X4 8 Atz ;~EIU6Iق$4i) 18 AWJ2eIQ^PX R8dh:&TDBz |#$R XCEl[/?i!ZȚW=vN5C#A4D sgaP} DDx!QV%&DA YeR$@e JA EV < f AXʘQk:œQ$kC8إ+DP0'#J'X3h{GWm&$`D%)8E[FvefݫDmufܺKLVM6VW5nW V;gݤ  7WcӬd#!,ʟX?dtP4;XuΔ' YM{xH9f3h|Qb*oF*lεXeS #lHxH!q#:IRR$^AK%+*V)"#"J40KhȻ\]6刚$R¢Jєcmƅ050Kb 58[˦k3>D5$iL[Rp x6W QMMռQ$W<ֆ۪ju8ɥӺ[ @$w(?JIVXұYmvZT (hK '`©hٜzt!091?!^Sfa@O뷾$,)DAzAL!)ca4=/%b\=M]y/iE Q] "Al=7Lu6M `J `w4]ȳ/捸ԉK3͎WzIIfHlg<0 "K8&!PqFa1':2xXʫ"NJĜڭ$ {djROAH9<=CJG(E%M`zb'i1[=*v:(hB W$LXHqM JB H]zs?.cC UiCK $MϘ`L4d})!?d'3OI+= D4܇6B'X^oٖr(SՉRek i EV2 "R'bD;ࠞ|J03ةG,!qVX#fa|!18\O!X_|Hmui`_#P#| P 5=.1('gl_Č&$QY5&,>'B?5h]t5Z AO#D)?Q9Bi!fe/#l&8JPRRsl#V22"bVUثRfk6k a R΂JRiʙ%eRW-Ś@dbY Rbh 5 (z~>"%$up9 AARO*Ceu&܌gId_%bM+m[¤TQ^J!na(B29Nɤ/7%ZV*Gc!Sۤ!!E{Qy{*%U$Y0 $|Ub=Blzb}~lYR Dr !U?'}Yr-GtiNF>Q*)s}k8)hRk.\Ӹy11ʘݠe<R %%/rAA9JDd4z@.y||׃e11 SA( @\G J0B^5CD -"0DdB@~0 co.2 &$d 5W(dd6%I HʒH2HŽ&DT`}Gi'̪ 5Gc$;4i.Ē ˆOgn*A1\Ώ>]ƈɥ&F'7enyU*%%* P~!3(r!7$ ']0ސLMJ2U3&̙e5HTd o:U$D3 !ADLP!bEHHsK2NAR;b /q2aH* e%S1DL\lWMϞD4m_LcFKl9)K%nP//؉ϱKRGqϔ<{lITYbNɌ8V2G͒Hh~B5T œQX>C'I< *p">#y_*a};V!M+Zw(gHar3jvK9,Q2vgJ)|;>J/OKƽ;#f URFAu֛Ϧ/t3odĜ1 c١r:JI dMR/R1WSl= #R1|BT|]`nkđ9x༅沑x(ڷXhG񂔵(l@~8cx{;KR)3/hcPr9ڤP\>'aNΏҋ鈓 UC߹1y~G 2Q0]H%"a dK"l-,eEfc *5H .yñ'X'#_##A HK$NoC}3Pi:~YXuohzY/hV- fY X46m&JҖŔ)%6IJJҥcXڛE66(VEREOJ ]lv$(Vlܘe7(ݵs$$ݶ%2䧬ڰYd@91L$MY l110rf#H~gm8CI 2Ȳʖ%:>A'U# Xbjn='Ime{IHܱ#ӌj7"įji_ ?l bH^#? }J9j5%1k H5%P WBW*|Si{z؛hJcS6X2fh@ EBlV*7Tg#Xj5I4:;>[hWBtafF!9C)pZD,Y, xDuHCOER&%O4HDyݫ cHbW5ѡJg-]ưCiמH mEL[HgJɩ?Qk2I\TdMVVq*D}GYj3m8l-XrVbzW  gA荑12 J+X̉I bލ 38UA,tzm͍I5 3-lM%-3Hl;X5@p`Y^2eb 0qi "4j̧\͚ƄF~zWl]UʲeF5m$F,D)1P!\AR%a a!·-3܇Z^e1w  hhOY;se+b0*Bҩ. q ͭȷXe!"MQR$ PS C6YԎ7Ux6iYH݉ p!sr2 ԕ!|Maگf

y+iK&@=dEDlB~n #"OKAHF$%$CB^ !gۛmLVm)MYVVn"rnY#f9MʮnCuDwnva؎HD{H%Cx6uĿCu":(bUSsa\Bŋ5b٘9Qܙa:*VƳm6K<bBΐM.… m$8X mcR F^8bCB I!$_}'9 { i ^F6YR2&0IrM` %_G>dk7Ct{5<~ oL3~>ܐJOhFh`"&Z6m(Ԓj֒KIZLVYViX~?Ɵ ¤L0O&`G"OiGxc`"Xlv[Й юo&Ih*bc{ r #ނ]Pw->q!P|Mqnpߍs*8d*mnV?4siȢI1A0a(ylA` ޺L$yHX@o߉X,DCvk'@{N K;8R:#"VfS fN %zIG` F 3M!!ϳ`V@@ bw! .G+ULvE4a<WpaYCT>G@=_(>Jw`i(h+H)sN/2a @°@65i(RAMfUUAT 4d8wƒ!HTcPBđ$C@tqwu^QiV@B+EEFnF# {Xe:4&F,1z h 1"Q&(T妒A Q#Wf4)VK"6$4lY"`,VZHJԥ(TY T ]&6 ytDְal$2ܻIO'Tt'Uv6~z*yvf2PH#CJ!p^Iq I&,JU@A&.a*gy'侮*$dדę%{Rs-gc,lgRȧ[GvV)E2+1|m _QsfLyKb TΥ,DCCd>2=Aƪ5)肷JJCa(]L]bŊL`x.<_VfVT <ξ7<wm۝Y̭09क़!L5f\0:[8z>3ܿ9N.hRj7|uƢJ{o4vQ1F$,-3SQ݌E(~:=-;wVbSD yB6 lC#pwމA h:v|dCjBI0x mɵ*s=1BQ W]Ci3Y3jȺIد6:ܩh2T"I `RVv~CkYؕqx⤲,JfɣDz#~x[g> t0s{U.) fQ.Dw`71/F;rq4-w[% #<vl:+9gM0jĤI!빜:HlRۙV.fXHhuVMbF}kh}OuZJof JUrIcJ 1$,˴:Va])g5/$3C!6Yᔥo)$gH[Xcfu:P8@[0nA}1C"MI5ᇜÒPy 4#d:XEdg n>V9̖\+A" guAT5b6 pD)V%AffSkLCd2nnjM= $ilqMX p GTfTJzv*ZgrSh3hwB ]U!KFE|`kT3 H =Sv `v4y#\&ёж]$Y5x* ccj,Z:l3 zn((9yswFı (Rhaw7A:zB!f!*LQ"%$rs]Mrh`:FnS( F3 \lκXd5En@ɚ%@-ŮIIT@9,H<*+di${*Z$H4ptN@*B+'/|##_1~8LQ-[aB8pGv#Ա0hF i$  be&&jP7IQ H0 754 d֍khƄ0H)&edZ_g` ub@,a RxJ Ĕ̇jt*se6R*!CjU n;Pv;2= <A 8Iq7;Jm.](8HVϗ[nMetkZ!0Cy5m m"b@iBaR>d d>@.QeڿͫL^jdY`lMdL-j ,E4B IFHPS 2LuRq)X[/idi*ZZVL$DKA %fQEkfdClL'%*dI4hDHEO&{ckβSMg{F[j)QmG$,PB!))^ t~H(p{|˃aM)>~P MH$'1>R$6C ?F/BĪMlX=/9{;*Ÿ\I .l'fD>v&TQALD7 DLLjR gcNQG|"s{˒q6)T{`1^ ~aZʃ7 2J"Cf(&BD')w}gve*3ZȢVMj'_NC無 b19Ľ#FbRRDZ'4-+KA 1 )>pNs:JԠ RIF قO2P& N7qtnF$M 0jROB%c> bO4$FUpR2vzTKR=W9kJ@kA>J~1 lK9+lU8]BIŠ. G fj9u4֔Md8Y,`L I4Ul-& eY1 N @eVoF&p m5)s8W)2VL4{8UdE#wٲ}*ӻ!fZFH&bgf1iViJZHjPB  BT:XC0V\ M_͎TK@QQ|pƝK)5ů"."q% Jv0s@,>lP2i'#o$N$9 R3Fv[a~+A&ĺcd1 jOkɬ|4BU&!f" GY5R" *(EM"DS Ȳ@fe7ni8$,)8/;T"/G€QTl`.:/GqD`v'pчlnKpH@$`5a4K'%ev?G=Z 'ГaX8] #H;),J24 O*?XLD?XY$‘ffH ]aPJ3X?ؾqZǣk0V=O]+EP`^D#7^E!S,4-4-(Ҕ# A0#9IgI>RgT턏ݼQS,Σr |1㼓`wn~s#HӀ!ЕCsOqӖ.6fLDLG3(6bmXt\ك5LZ,,Ĩ˜[YU1QK/v f1ٸY9mʓfFn`†Hh–dvI<3M:$g;FwS J`!2>)hؙ\kZCHAN^D (ʩ^uuZ\\9'UCi0F2g%&?YxHeFRِ傔g $Q2fV^cD@w&sDβedss4#[sl3M9xAТ & )*CBS@@n{&‰NeAS4 Ш NYsJhjH oܙ=|Um(#:oWOg<8NqCaXyCH,-ozhoV-6%H%,[JlNZF $L XʭU1Sw%+lGZ'lpldp*]Uڳ]d=<* 0C"LcL3w2ʈ1w47s,sLcˈ3w4̐cәmyWۮCsL1M3<"$15$<(s4c mdD&b`r\ɰ.GЂj *4JY졁(ƃٺ+HF!gnd%!M&@b5(a$BcJ¥CaQFBP8$H@v#<{OKa6USu7l>rgc*jRWlW].⛤4J9a+;`^(W9ߟܥ1QxP5*RdU&T+1')پgsUBО3yzhDFq}KG~W{$V4Ӛ~Gv*(}iБiXH)`T4:lWm<(OG/W(6.Ғ;; 4$)B@Q Z65شX5صجZ),i3&"h”f+$QIa"ELSSc(9ܓf k xpV!Zl"(E22D@jQIbQj5&XjRe,X4%R"FRB%c/kz+m\3cu*o<ƢVBZBiJ1Nms[Fh"Ԕ"L٣%%5L jmHk+M^)K$)Ym, Rl a&ٚv>\KmD3vVhѶ6D-%6-&*dŴͣ1MK(SlEmV׍[ٙ5&h&6kLҳLUT'('.o0>Ҋ,OjiU I %MF[lpd%i`)PH,# YE][x֣U ^U %V 1]bJ0SR)pC!z s!t]3]00TblĂ1 ?A*A҆$RgIBj|J ~j'*"ޏ :S`i?ͽr!fKT)l OO/LNJ04NEyiXuSajb.4a#~[cl,$lӁmoUdiaM$c EUK^#tcp;X ]qDNK܅:<@tRI"JY)8@MKT<*p2 ! ,2--*$B$B{󇐍mKDLDS#l' c*Cc8z `E1a6/ zzmO} D<|BMlfE"iud%wieԳ(mvi u l&B2=0SB1Q)&670_J6@1Ȫ h U&ZU{lc'IFXq;f J(?L6GGtL_{[$%IOl{q{C*%a aW{<O}Nrra2H"a6˻uuvʓp5%5dH  ?T'7ԙsUI"t4dNu}oG-D'JQ*^sБ T$X<;{heHbhO(`P$ԆH IK5*TCKA@x>)tUJk3͐-[VZ,<^)GO& 䨹3NGp7*v(cs=IS2D @ô&J3/ YFN90KJÃPM*&(b¥)HK*.74>;}{! Ntitc2C63R!fHϮ!S Ss' 8Њ)UH A"$G |H{ OGd y%;F Q/Av{0" r"PFRF֖$J=Ő]J$C<$Qy@R+D Њx*~]3)=]/VN HM;Tx?o-Res5u78 [!ыdF 8~ hQ |9XRd o҉u.ȸxdb,JJkbdPDл,%4Eċ(Ç&aQ)I bCVR,dMKD$$4w?8PIa! A6U$/ ϰ"ғaCsgLhο̹njF=8oJx>WnqO^zWodoݿx%Fd (lD 4%BjI֑F#I2q.H'} yv$D8] Ou5htƥd'yȼ)hCGM qHZE2! aS ˴ge9yWQG j _b8j(Wr )`y=ә!,=T Y )_鐲TEJD4X~JPڑKԹW0`e z'  I`L ˆȤ ІZ9{Q"շfs6q6UUlD\isC'bTGAB LDdԒ`5SR"ESkRXz޷YOS'sK+0b 7qDh Nm:~xd `!9d JquTtdEWahFobp[#2FIHD